From 6d2a1ca47ae9620e5b04b8a40630b8f1d3f7bdb7 Mon Sep 17 00:00:00 2001 From: yage Date: Sun, 1 Nov 2026 15:10:40 -0700 Subject: [PATCH] fix thing --- .../desktop/colorscheme/set-theme.module.zsh | 2 +- scwrypts/dotwryn/dotwryn.scwrypts.zsh | 75 +++++++++++++++++++ scwrypts/dotwryn/system/setup | 2 +- .../dotwryn/system/symlinks/setup.module.zsh | 14 +++- 4 files changed, 88 insertions(+), 5 deletions(-) diff --git a/scwrypts/dotwryn/desktop/colorscheme/set-theme.module.zsh b/scwrypts/dotwryn/desktop/colorscheme/set-theme.module.zsh index 96331a4..a9fc40c 100644 --- a/scwrypts/dotwryn/desktop/colorscheme/set-theme.module.zsh +++ b/scwrypts/dotwryn/desktop/colorscheme/set-theme.module.zsh @@ -129,7 +129,7 @@ ${scwryptsmodule}.parse() { ( -l | --list-themes ) parsed=1 dotwryn.config colorscheme.themes - EARLY_ESCAPE_CODE=0 + EARLY_ESCAPE_CODE=-1 ;; ( --only ) parsed=2 diff --git a/scwrypts/dotwryn/dotwryn.scwrypts.zsh b/scwrypts/dotwryn/dotwryn.scwrypts.zsh index 534c00e..17faf85 100644 --- a/scwrypts/dotwryn/dotwryn.scwrypts.zsh +++ b/scwrypts/dotwryn/dotwryn.scwrypts.zsh @@ -29,3 +29,78 @@ done unset DOTWRYN_REQUIRED_VAR ##################################################################### + +dotwryn.config() { + local value values=() + local set_variable="${2}" + + ########################################## + + case "${1}" in + ( colorscheme.path ) + value="${DOTWRYN}/config/colorschemes" + mkdir -p -- "${value}" + ;; + + ( colorscheme.active.path ) + value="$(dotwryn.config colorscheme.path)/active" + mkdir -p -- "${value}" + ;; + + ( colorscheme.active.source ) + value="$(dotwryn.config colorscheme.active.path)/source.yaml" + ;; + + ( colorscheme.active.default-material-references ) + value="$(dotwryn.config colorscheme.active.path)/default.yaml" + ;; + + ( colorscheme.themes ) + local _theme + while IFS= read -r _theme + do + values+=("${_theme}") + done < <( + cd -- "$(dotwryn.config colorscheme.path)" + find . -mindepth 1 -maxdepth 1 -type f -name \*.yaml \ + | sed 's|^./||; s|\.yaml$||' \ + ) + unset _theme + ;; + + ( colorscheme.supported-apps ) + use --group dotwryn desktop/colorscheme/apps \ + || echo.error 'cannot determine supported apps due to module load error' \ + || return 1 + + local _app + while IFS= read -r _app + do + values+=("${_app}") + done < <(typeset -f + | sed -n 's/^_GENERATE_THEME__//p') + unset _app + ;; + esac + + ########################################## + + local value_type=none + [[ "${value}" ]] && value_type=scalar + [[ "${#values[@]}" -gt 0 ]] && value_type=array + + case "${value_type}" in + ( none ) return 1 ;; + + ( scalar ) + case "${set_variable}" in + ( '' ) echo "${value}" ;; + ( * ) ${set_variable}="${value}" ;; + esac + ;; + ( array ) + case "${set_variable}" in + ( '' ) printf '%s\n' "${values[@]}" ;; + ( * ) eval "${set_variable}=(${(q)values[@]})" ;; + esac + esac +} diff --git a/scwrypts/dotwryn/system/setup b/scwrypts/dotwryn/system/setup index 3a909f0..8f569c6 100755 --- a/scwrypts/dotwryn/system/setup +++ b/scwrypts/dotwryn/system/setup @@ -43,5 +43,5 @@ MAIN() { MAIN.parse() { return 0; } MAIN.parse.validate() { - [[ DRY_RUN =~ true ]] && FORWARD_ARGS+=(--dry-run) + [[ ${DRY_RUN} =~ true ]] && FORWARD_ARGS+=(--dry-run) } diff --git a/scwrypts/dotwryn/system/symlinks/setup.module.zsh b/scwrypts/dotwryn/system/symlinks/setup.module.zsh index 351dc8b..a73c451 100644 --- a/scwrypts/dotwryn/system/symlinks/setup.module.zsh +++ b/scwrypts/dotwryn/system/symlinks/setup.module.zsh @@ -17,12 +17,20 @@ ${scwryptsmodule}() { do ((SYMLINK_COUNT+=1)) SOURCE_CONFIG="$(scwrypts.get-realpath "$(echo ${SYMLINK} | awk '{print $1;}')")" - TARGET_CONFIG="$(scwrypts.get-realpath "$(echo ${SYMLINK} | awk '{print $2;}')")" + TARGET_CONFIG="$(echo ${SYMLINK} | awk '{print $2;}' | envsubst)" + + [[ "${TARGET_CONFIG}" ]] \ + && TARGET_CONFIG="$(readlink --canonicalize-missing -- "$(dirname -- "${TARGET_CONFIG}")")/$(basename -- "${TARGET_CONFIG}")" [ "${SOURCE_CONFIG}" ] && [ "${TARGET_CONFIG}" ] \ || echo.error "bad symlink entry : ${SYMLINK}" \ || continue + [ -L "${TARGET_CONFIG}" ] && [[ "$(readlink --canonicalize -- "${TARGET_CONFIG}")" == "${SOURCE_CONFIG}" ]] && { + echo.debug "already linked '$(echo "${TARGET_CONFIG}" | sed "s|${HOME}/||")'" + continue + } + case "${TARGET_CONFIG}" in ( /etc/* ) case ${SUDO} in @@ -60,7 +68,7 @@ ${scwryptsmodule}() { && [ ! -f "${SOURCE_CONFIG}" ] && [ ! -d "${SOURCE_CONFIG}" ] \ && [ ! -f "${TARGET_CONFIG}" ] && [ ! -d "${TARGET_CONFIG}" ] \ && echo.status "${SOURCE_CONFIG} is a new file" \ - && mkdir -p -- "$(basename -- "${SOURCE_CONFIG}")" \ + && mkdir -p -- "$(dirname -- "${SOURCE_CONFIG}")" \ && touch "${SOURCE_CONFIG}" \ ; @@ -68,7 +76,7 @@ ${scwryptsmodule}() { && [ ! -f "${SOURCE_CONFIG}" ] && [ ! -d "${SOURCE_CONFIG}" ] \ && [ -f "${TARGET_CONFIG}" ] \ && echo.status "${SOURCE_CONFIG} is not tracked yet; copying from ${TARGET_CONFIG}" \ - && mkdir -p -- "$(basename -- "${SOURCE_CONFIG}")" \ + && mkdir -p -- "$(dirname -- "${SOURCE_CONFIG}")" \ && cp -- "${TARGET_CONFIG}" "${SOURCE_CONFIG}" \ ;