HOKAY; XDG_* refactor

This commit is contained in:
2024-08-16 09:41:26 -06:00
parent 7b70567a67
commit 9301a32090
31 changed files with 332 additions and 130 deletions

View File

@@ -19,16 +19,16 @@ function SETUP__CONFIG() {
GENERATE_INITIAL_LOCAL_CONFIG() {
local HOSTNAME="$(hostnamectl --static)"
[ $HOSTNAME ] || return 0
[ ${HOSTNAME} ] || return 0
mkdir -p "$DOTWRYN_PATH/bin/$HOSTNAME"
mkdir -p "${DOTWRYN_PATH}/bin/${HOSTNAME}"
local ENV_DIR="$DOTWRYN_PATH/config/scwrypts/environments"
local ENV_DIR="${DOTWRYN_PATH}/config/scwrypts/environments"
local GROUP
for GROUP in $(find "$ENV_DIR" -type f -name \*env.yaml | sed -n 's|.*/local\.\([^.]*\)\.env\.yaml|\1|p')
for GROUP in $(find "${ENV_DIR}" -type f -name \*env.yaml | sed -n 's|.*/local\.\([^.]*\)\.env\.yaml|\1|p')
do
[ -f "$ENV_DIR/local.$HOSTNAME.$GROUP.env.yaml" ] \
|| cp "$ENV_DIR/local.altaria.$GROUP.env.yaml" "$ENV_DIR/local.$HOSTNAME.$GROUP.env.yaml"
[ -f "${ENV_DIR}/local.${HOSTNAME}.${GROUP}.env.yaml" ] \
|| cp "${ENV_DIR}/local.altaria.${GROUP}.env.yaml" "${ENV_DIR}/local.${HOSTNAME}.${GROUP}.env.yaml"
done
}
@@ -41,14 +41,14 @@ CONFIG__ZSH() {
}
CONFIG__SET_DEFAULT_SHELL() {
local DEFAULT_SHELL=$(awk -F: -v user="$USER" '$1 == user {print $NF}' /etc/passwd)
[[ $DEFAULT_SHELL =~ zsh ]] && return 0
local DEFAULT_SHELL=$(awk -F: -v user="${USER}" '$1 == user {print $NF}' /etc/passwd)
[[ ${DEFAULT_SHELL} =~ zsh ]] && return 0
[ $FORCE_ROOT ] && return 0
[ ${FORCE_ROOT} ] && return 0
STATUS 'setting zsh as default shell'
sudo chsh -s $(which zsh) $(whoami) 2>&1 \
&& SUCCESS "set zsh as default shell for '$USER'" \
&& SUCCESS "set zsh as default shell for '${USER}'" \
|| FAIL 1 'failed to set zsh as default shell' \
;
}
@@ -69,7 +69,7 @@ CONFIG__VIM() {
CONFIG__VIM__LINK_SUPERUSER_RC() {
sudo [ /root/.vimrc ] && return 0
echo "let $DOTWRYN=\"$DOTWRYN_PATH\"\nsource \"$DOTWRYN_PATH/vim/rc.vim\"" \
echo "let ${DOTWRYN}=\"${DOTWRYN_PATH}\"\nsource \"${DOTWRYN_PATH}/vim/rc.vim\"" \
| sudo tee /root/.vimrc >/dev/null
sudo mkdir -p /root/.vim
@@ -85,54 +85,67 @@ CONFIG__SYSTEM() {
#####################################################################
CONFIG__ENV() {
local DEFAULT_CONFIG="$DOTWRYN_PATH/config/dotwryn.env.$1"
local LOCAL_CONFIG="$HOME/.config/wryn/env.$1"
local DEFAULT_CONFIG="${DOTWRYN_PATH}/config/dotwryn.env.$1"
local LOCAL_CONFIG="${HOME}/.config/wryn/env.$1"
[ -f $LOCAL_CONFIG ] && {
case $OVERWRITE_EXISTING in
[ -f ${LOCAL_CONFIG} ] && {
case ${OVERWRITE_EXISTING} in
0 ) return 0 ;;
1 )
WARNING "local $1 configuration exists ($LOCAL_CONFIG)"
WARNING "local $1 configuration exists (${LOCAL_CONFIG})"
yN 'overwrite this configuration?' || return 0
mv "$LOCAL_CONFIG" "$LOCAL_CONFIG.bak" >/dev/null 2>&1 \
&& INFO "created backup of local configuration ($LOCAL_CONFIG.bak)"
mv "${LOCAL_CONFIG}" "${LOCAL_CONFIG}.bak" >/dev/null 2>&1 \
&& INFO "created backup of local configuration (${LOCAL_CONFIG}.bak)"
esac
}
STATUS "setting up $1 configuration ($LOCAL_CONFIG)"
STATUS "setting up $1 configuration (${LOCAL_CONFIG})"
case $1 in
zsh ) COMMENT='#' ;;
esac
{
echo "source $DEFAULT_CONFIG"
echo -e "\\n$COMMENT\n$COMMENT .wryn configuration overrides\n$COMMENT\n"
sed "s/^[^$COMMENT].*/$COMMENT&/" $DEFAULT_CONFIG
} > $LOCAL_CONFIG \
echo "source ${DEFAULT_CONFIG}"
echo -e "\\n${COMMENT}\n${COMMENT} .wryn configuration overrides\n${COMMENT}\n"
sed "s/^[^${COMMENT}].*/${COMMENT}&/" ${DEFAULT_CONFIG}
} > ${LOCAL_CONFIG} \
&& SUCCESS "created $1 configuration" \
|| FAIL 1 "unable to create $1 configuration" \
;
EDITOR=vim VISUAL=vim EDIT "$LOCAL_CONFIG"
EDITOR=vim VISUAL=vim EDIT "${LOCAL_CONFIG}"
}
CONFIG__RC() {
local TYPE="$1"
local RC="$HOME/.${TYPE}rc";
local SOURCE_LINE
case $TYPE in
zsh ) SOURCE_LINE="source $DOTWRYN_PATH/zsh/rc" ;;
vim ) SOURCE_LINE="source $DOTWRYN_PATH/vim/rc.vim" ;;
local RC
case ${TYPE} in
vim )
RC="${XDG_CONFIG_HOME:-${HOME}/.config}/vim/vimrc"
mkdir -p -- "$(dirname -- "${RC}")"
[ -f "${HOME}/.vimrc" ] \
&& cat "${HOME}/.vimrc" >> "${XDG_CONFIG_HOME:-${HOME}/.config}/vim/vimrc" \
&& rm "${HOME}/.vimrc" \
;
;;
* ) RC="${HOME}/.${TYPE}rc";
;;
esac
grep -q "^$SOURCE_LINE$" "$RC" \
|| echo "$SOURCE_LINE" >> $RC
local SOURCE_LINE
case ${TYPE} in
zsh ) SOURCE_LINE="source ${DOTWRYN_PATH}/zsh/rc" ;;
vim ) SOURCE_LINE="source ${DOTWRYN_PATH}/vim/rc.vim" ;;
esac
grep -q "^$SOURCE_LINE$" "$RC" \
grep -q "^${SOURCE_LINE}$" "${RC}" \
|| echo "${SOURCE_LINE}" >> ${RC}
grep -q "^${SOURCE_LINE}$" "${RC}" \
&& SUCCESS "${TYPE}rc is configured correctly" \
|| FAIL 1 "failed to configure ${TYPE}rc" \
;

View File

@@ -1,26 +1,80 @@
#####################################################################
SETUP__GIT() {
STATUS 'updating remotes for .wryn'
cd $DOTWRYN_PATH
git remote add upstream git@github.com:wrynegade/dotwryn.git
git remote set-url --add --push upstream git@github.com:wrynegade/dotwryn.git
git remote set-url --add --push upstream git@yage.io:wrynegade/dotwryn.git
git remote set-url --add --push upstream git@bitbucket.org:wrynegade/dotwryn.git
local SOURCES_DIR="${XDG_DATA_HOME:-${HOME}/.local/share}/project-source-code"
STATUS 'updating upstream for zsh/plugins/code-activator'
cd $DOTWRYN_PATH/zsh/plugins/code-activator
git remote rm upstream 2>/dev/null
git remote add upstream git@yage.io:zsh/code-activator.git
git remote set-url --add --push upstream git@yage.io:zsh/code-activator.git
git remote set-url --add --push upstream git@github.com:wrynegade/code-activator-zsh.git
SOURCE_DIR="${DOTWRYN_PATH}" \
TARGET_DIR="${SOURCES_DIR}/yage/dotwryn" \
REMOTE_UPSTREAMS=(
'git@github.com:wrynegade/dotwryn.git'
'git@yage.io:wrynegade/dotwryn.git'
'git@bitbucket.org:wrynegade/dotwryn.git'
) SETUP__GIT__REMOTES '.wryn'
STATUS 'updating upstream for zsh/plugins/scwrypts'
cd $DOTWRYN_PATH/zsh/plugins/scwrypts
git remote rm upstream 2>/dev/null
git remote add upstream git@yage.io:zsh/code-activator
git remote set-url --add --push upstream git@yage.io:zsh/code-activator
git remote set-url --add --push upstream git@github.com:wrynegade/scwrypts.git
SOURCE_DIR="${DOTWRYN_PATH}/zsh/plugins/code-activator" \
TARGET_DIR="${SOURCES_DIR}/zsh/code-activator" \
REMOTE_UPSTREAMS=(
'git@yage.io:zsh/code-activator.git'
'git@github.com:wrynegade/code-activator.git'
) SETUP__GIT__REMOTES 'zsh-plugins/code-activator'
cd $DOTWRYN_PATH
SOURCE_DIR="${DOTWRYN_PATH}/zsh/plugins/scwrypts" \
TARGET_DIR="${SOURCES_DIR}/zsh/scwrypts" \
REMOTE_UPSTREAMS=(
'git@yage.io:zsh/scwrypts'
'git@github.com:wrynegade/scwrypts'
) SETUP__GIT__REMOTES 'zsh-plugins/scwrypts'
return 0
}
SETUP__GIT__REMOTES() {
: \
&& [ "${SOURCE_DIR}" ] \
&& [ "${TARGET_DIR}" ] \
&& [[ ${#REMOTE_UPSTREAMS[@]} -gt 0 ]] \
|| return 1
[ "$1" ] && STATUS "updating remotes for '$1'"
git -C "${SOURCE_DIR}" remote rm upstream 2>/dev/null
git -C "${SOURCE_DIR}" remote add upstream ${REMOTE_UPSTREAMS[1]}
local REMOTE_UPSTREAM
for REMOTE_UPSTREAM in ${REMOTE_UPSTREAMS[@]}
do
git -C "${SOURCE_DIR}" remote set-url --add --push upstream "${REMOTE_UPSTREAM}"
case ${REMOTE_UPSTREAM} in
git@github.com:* )
git -C "${SOURCE_DIR}" remote rm github 2>/dev/null
git -C "${SOURCE_DIR}" remote add github "${REMOTE_UPSTREAM}"
;;
git@yage.io:* )
git -C "${SOURCE_DIR}" remote rm yage 2>/dev/null
git -C "${SOURCE_DIR}" remote add yage "${REMOTE_UPSTREAM}"
;;
git@bitbucket.org:* )
git -C "${SOURCE_DIR}" remote rm bitbucket 2>/dev/null
git -C "${SOURCE_DIR}" remote add bitbucket "${REMOTE_UPSTREAM}"
;;
esac
done
SOURCE_DIR="${SOURCE_DIR}" TARGET_DIR="${TARGET_DIR}" SETUP__GIT_LINK_TO_PROJECTS || {
WARNING "failed to link '${TARGET_DIR}'"
}
return 0
}
SETUP__GIT__LINK_TO_PROJECTS() {
[ "${TARGET_DIR}" ] && [ "${SOURCE_DIR}" ] \
|| return 1
{
mkdir -p "${TARGET_DIR}"
rm "${TARGET_DIR}/code"
ln -s "${SOURCE_DIR}" "${TARGET_DIR}/code"
} &>/dev/null
}

View File

@@ -2,11 +2,11 @@
SETUP__OS() {
OS__MAKE_REQUIRED_RESOURCES || return 1
[ $CI ] && { STATUS 'detected CI; skipping os setup'; return 0; }
[ ${CI} ] && { STATUS 'detected CI; skipping os setup'; return 0; }
GETSUDO
local OS_NAME=$(OS__GET_OS)
[ ! $OS_NAME ] && ABORT
[ ! ${OS_NAME} ] && ABORT
OS__INSTALL_SOURCE_DEPENDENCIES || return 2
OS__INSTALL_MANAGED_DEPENDENCIES || return 3
@@ -15,25 +15,25 @@ SETUP__OS() {
OS__GET_OS() {
local OS_NAME=$(lsb_release -is 2>/dev/null | tr '[:upper:]' '[:lower:]')
[ ! $OS_NAME ] \
[ ! ${OS_NAME} ] \
&& OS_NAME=$(cat /etc/os-release 2>/dev/null | grep '^ID=' | sed 's/^ID=//')
[ ! $OS_NAME ] \
[ ! ${OS_NAME} ] \
&& WARNING 'failed to detect operating system' \
&& OS_NAME=$(echo -e "arch\ndebian\nother" | FZF 'select an operating system') \
;
[[ $OS_NAME =~ ^ubuntu$ ]] && OS_NAME=debian
[[ ${OS_NAME} =~ ^ubuntu$ ]] && OS_NAME=debian
[[ $OS_NAME =~ ^[Ee]ndeavour[Oo][Ss]$ ]] && OS_NAME=arch
[[ ${OS_NAME} =~ ^[Ee]ndeavour[Oo][Ss]$ ]] && OS_NAME=arch
echo $OS_NAME
echo ${OS_NAME}
}
#####################################################################
OS__INSTALL_SOURCE_DEPENDENCIES() {
case $OS_NAME in
case ${OS_NAME} in
arch )
command -v yay >/dev/null 2>&1 \
|| SCWRYPTS packages/install -- 'https://aur.archlinux.org/yay.git' --local-name 'yay' \
@@ -43,7 +43,7 @@ OS__INSTALL_SOURCE_DEPENDENCIES() {
* ) ;;
esac
[ $COMPILE_DMENU ] && [[ $COMPILE_DMENU -eq 1 ]] \
[ ${COMPILE_DMENU} ] && [[ ${COMPILE_DMENU} -eq 1 ]] \
&& SCWRYPTS packages/install -- 'https://github.com/tiyn/dmenu' --local-name 'patched-dmenu'
return 0
@@ -55,33 +55,33 @@ OS__INSTALL_MANAGED_DEPENDENCIES() {
local ERRORS=0
STATUS 'checking os dependencies'
case $OS_NAME in
case ${OS_NAME} in
arch )
;;
debian ) ;;
* )
OS_NAME='generic'
WARNING "no automated installer available for '$OS_NAME'"
WARNING "no automated installer available for '${OS_NAME}'"
;;
esac
[ $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" \
[ ${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" \
;
[ ! $CI ] && {
[ ! ${CI} ] && {
STATUS 'updating system, repositories, and mirrors'
UPDATE_REPOSITORIES__$OS_NAME
UPDATE_REPOSITORIES__${OS_NAME}
}
for DEPENDENCY in $(cat "$DEPENDENCIES")
for DEPENDENCY in $(cat "${DEPENDENCIES}")
do
INSTALL_MANAGED__$OS_NAME $DEPENDENCY
INSTALL_MANAGED__${OS_NAME} ${DEPENDENCY}
done
[[ $ERRORS -ne 0 ]] && {
WARNING "detected $ERRORS errors; double check warnings before proceeding!"
[[ ${ERRORS} -ne 0 ]] && {
WARNING "detected ${ERRORS} errors; double check warnings before proceeding!"
yN 'continue with install?' && return 0 || ABORT
}
@@ -92,18 +92,18 @@ OS__INSTALL_MANAGED_DEPENDENCIES() {
UPDATE_REPOSITORIES__arch() { yay -Syu; }
INSTALL_MANAGED__arch() {
local TARGET="$1"
[[ $TARGET =~ aws-cli-v2 ]] && {
[[ ${TARGET} =~ aws-cli-v2 ]] && {
STATUS "skipping aws-cli-v2 checks since they are bad right now"
return 0
}
yay -Qq 2>/dev/null | grep -q "^$TARGET$\|^$TARGET-git$" && {
SUCCESS "found '$TARGET'"
yay -Qq 2>/dev/null | grep -q "^${TARGET}$\|^${TARGET}-git$" && {
SUCCESS "found '${TARGET}'"
} || {
STATUS "installing '$TARGET'"
yay -Syu --noconfirm $TARGET \
&& SUCCESS "successfully installed '$TARGET'" \
|| ERROR "failed to install '$TARGET'" \
STATUS "installing '${TARGET}'"
yay -Syu --noconfirm ${TARGET} \
&& SUCCESS "successfully installed '${TARGET}'" \
|| ERROR "failed to install '${TARGET}'" \
;
}
}
@@ -113,7 +113,7 @@ INSTALL_MANAGED__debian() {
STATUS "checking / installing '$1'"
sudo apt-get install --yes $1 \
&& SUCCESS "'$1' installed" \
|| ERROR "failed to install $TARGET" \
|| ERROR "failed to install ${TARGET}" \
;
}
@@ -128,32 +128,29 @@ INSTALL_MANAGED__generic() {
OS__MAKE_REQUIRED_RESOURCES() {
local ERRORS=0
local DIRECTORIES=(
"$HOME/.config/wryn"
"$HOME/.local/bin"
"$HOME/.vim/bundle"
"$HOME/.vim/colors"
"${XDG_CONFIG_HOME:-${HOME}.config}/wryn"
"${HOME}/.local/bin"
)
local FILES=(
"$HOME/.vimrc"
"$HOME/.zshrc"
"${HOME}/.zshrc"
)
STATUS 'making required system resources'
for D in $DIRECTORIES
for D in ${DIRECTORIES}
do
[ ! -d $D ] && { mkdir -p $D || ERROR "failed to create directory '$D'"; }
[ ! -d ${D} ] && { mkdir -p ${D} || ERROR "failed to create directory '${D}'"; }
done
for F in $FILES
for F in ${FILES}
do
[ ! -f $F ] && { touch $F || ERROR "failed to create file '$F'"; }
[ ! -f ${F} ] && { touch ${F} || ERROR "failed to create file '${F}'"; }
done
[[ $ERRORS -eq 0 ]] \
[[ ${ERRORS} -eq 0 ]] \
&& SUCCESS 'finished creating system resources' \
|| ERROR 'failed to create system resources' \
;
return $ERRORS
return ${ERRORS}
}

View File

@@ -21,19 +21,22 @@ done
source ./requirements.zsh || exit 1
################################################################################
LOGFILE="$HOME/dotwryn-install.log"
LOGFILE="${HOME}/dotwryn-install.txt"
STATUS "installation start : $(date)" 2>> "$LOGFILE"
STATUS "installation start : $(date)" 2>> "${LOGFILE}"
{
SETUP__OS || FAIL 1 'failed to set up os-dependencies (see above)'
SETUP__GIT || FAIL 2 'failed to set up git (see above)'
SETUP__CONFIG || FAIL 3 'failed to set up program configuration (see above)'
} 2>&1 | tee --append "$LOGFILE"
} 2>&1 | tee --append "${LOGFILE}"
STATUS "installation complete: $(date)" 2>> "$LOGFILE"
STATUS "installation complete: $(date)" 2>> "${LOGFILE}"
################################################################################
yN 'keep logfile?' \
|| { rm "$LOGFILE" || ERROR "unable to remove '$LOGFILE'" }
[[ ${ERRORS} -eq 0 ]] || {
yN 'keep logfile?' \
|| { rm "${LOGFILE}" || ERROR "unable to remove '${LOGFILE}'" }
}
SUCCESS "\n.wryn setup complete; have a nice day :)\n "