dotwryn/setup/os.zsh

157 lines
3.8 KiB
Bash
Raw Permalink Normal View History

#####################################################################
SETUP__OS() {
2022-08-19 02:34:10 +00:00
OS__MAKE_REQUIRED_RESOURCES || return 1
2024-08-16 15:41:26 +00:00
[ ${CI} ] && { STATUS 'detected CI; skipping os setup'; return 0; }
GETSUDO
local OS_NAME=$(OS__GET_OS)
2024-08-16 15:41:26 +00:00
[ ! ${OS_NAME} ] && ABORT
2022-08-19 02:34:10 +00:00
OS__INSTALL_SOURCE_DEPENDENCIES || return 2
OS__INSTALL_MANAGED_DEPENDENCIES || return 3
}
OS__GET_OS() {
local OS_NAME=$(lsb_release -is 2>/dev/null | tr '[:upper:]' '[:lower:]')
2024-08-16 15:41:26 +00:00
[ ! ${OS_NAME} ] \
&& OS_NAME=$(cat /etc/os-release 2>/dev/null | grep '^ID=' | sed 's/^ID=//')
2024-08-16 15:41:26 +00:00
[ ! ${OS_NAME} ] \
&& WARNING 'failed to detect operating system' \
&& OS_NAME=$(echo -e "arch\ndebian\nother" | FZF 'select an operating system') \
;
2024-08-16 15:41:26 +00:00
[[ ${OS_NAME} =~ ^ubuntu$ ]] && OS_NAME=debian
2024-08-16 15:41:26 +00:00
[[ ${OS_NAME} =~ ^[Ee]ndeavour[Oo][Ss]$ ]] && OS_NAME=arch
2023-11-11 16:34:21 +00:00
2024-08-16 15:41:26 +00:00
echo ${OS_NAME}
}
#####################################################################
OS__INSTALL_SOURCE_DEPENDENCIES() {
2024-08-16 15:41:26 +00:00
case ${OS_NAME} in
2023-11-11 16:34:21 +00:00
arch )
command -v yay >/dev/null 2>&1 \
2023-11-11 22:22:27 +00:00
|| SCWRYPTS packages/install -- 'https://aur.archlinux.org/yay.git' --local-name 'yay' \
;
;;
debian ) ;;
* ) ;;
esac
2024-08-16 15:41:26 +00:00
[ ${COMPILE_DMENU} ] && [[ ${COMPILE_DMENU} -eq 1 ]] \
2023-11-11 22:22:27 +00:00
&& SCWRYPTS packages/install -- 'https://github.com/tiyn/dmenu' --local-name 'patched-dmenu'
2023-11-11 14:41:20 +00:00
return 0
}
#####################################################################
OS__INSTALL_MANAGED_DEPENDENCIES() {
local ERRORS=0
STATUS 'checking os dependencies'
2024-08-16 15:41:26 +00:00
case ${OS_NAME} in
arch )
;;
debian ) ;;
* )
OS_NAME='generic'
2024-08-16 15:41:26 +00:00
WARNING "no automated installer available for '${OS_NAME}'"
;;
esac
2024-08-16 15:41:26 +00:00
[ ${MIN} ] && [[ ${MIN} -eq 1 ]] && [ -f "${DOTWRYN_PATH}/setup/os-dependencies/${OS_NAME}.min.txt" ] \
&& DEPENDENCIES="${DOTWRYN_PATH}/setup/os-dependencies/${OS_NAME}.min.txt" \
|| DEPENDENCIES="${DOTWRYN_PATH}/setup/os-dependencies/${OS_NAME}.txt" \
;
2024-08-16 15:41:26 +00:00
[ ! ${CI} ] && {
STATUS 'updating system, repositories, and mirrors'
2024-08-16 15:41:26 +00:00
UPDATE_REPOSITORIES__${OS_NAME}
}
2024-08-16 15:41:26 +00:00
for DEPENDENCY in $(cat "${DEPENDENCIES}")
do
2024-08-16 15:41:26 +00:00
INSTALL_MANAGED__${OS_NAME} ${DEPENDENCY}
done
2024-08-16 15:41:26 +00:00
[[ ${ERRORS} -ne 0 ]] && {
WARNING "detected ${ERRORS} errors; double check warnings before proceeding!"
yN 'continue with install?' && return 0 || ABORT
}
SUCCESS 'all dependencies satisfied'
return 0
}
UPDATE_REPOSITORIES__arch() { yay -Syu; }
INSTALL_MANAGED__arch() {
local TARGET="$1"
2024-08-16 15:41:26 +00:00
[[ ${TARGET} =~ aws-cli-v2 ]] && {
STATUS "skipping aws-cli-v2 checks since they are bad right now"
return 0
}
2024-08-16 15:41:26 +00:00
yay -Qq 2>/dev/null | grep -q "^${TARGET}$\|^${TARGET}-git$" && {
SUCCESS "found '${TARGET}'"
} || {
2024-08-16 15:41:26 +00:00
STATUS "installing '${TARGET}'"
yay -Syu --noconfirm ${TARGET} \
&& SUCCESS "successfully installed '${TARGET}'" \
|| ERROR "failed to install '${TARGET}'" \
;
}
}
UPDATE_REPOSITORIES__debian() { sudo apt-get update && sudo apt-get upgrade; }
INSTALL_MANAGED__debian() {
STATUS "checking / installing '$1'"
sudo apt-get install --yes $1 \
&& SUCCESS "'$1' installed" \
2024-08-16 15:41:26 +00:00
|| ERROR "failed to install ${TARGET}" \
;
}
UPDATE_REPOSITORIES__generic() { return 0; }
INSTALL_MANAGED__generic() {
command -v $1 >/dev/null 2>&1 \
|| ERROR "could not find '$1'; it's up to you to install this one!"
}
#####################################################################
OS__MAKE_REQUIRED_RESOURCES() {
local ERRORS=0
local DIRECTORIES=(
2024-08-16 15:41:26 +00:00
"${XDG_CONFIG_HOME:-${HOME}.config}/wryn"
"${HOME}/.local/bin"
)
local FILES=(
2024-08-16 15:41:26 +00:00
"${HOME}/.zshrc"
)
STATUS 'making required system resources'
2024-08-16 15:41:26 +00:00
for D in ${DIRECTORIES}
do
2024-08-16 15:41:26 +00:00
[ ! -d ${D} ] && { mkdir -p ${D} || ERROR "failed to create directory '${D}'"; }
done
2024-08-16 15:41:26 +00:00
for F in ${FILES}
do
2024-08-16 15:41:26 +00:00
[ ! -f ${F} ] && { touch ${F} || ERROR "failed to create file '${F}'"; }
done
2024-08-16 15:41:26 +00:00
[[ ${ERRORS} -eq 0 ]] \
&& SUCCESS 'finished creating system resources' \
|| ERROR 'failed to create system resources' \
;
2024-08-16 15:41:26 +00:00
return ${ERRORS}
}