diff --git a/bin/omarchy-dev-status b/bin/omarchy-dev-status index 495c7582..8cf621a9 100755 --- a/bin/omarchy-dev-status +++ b/bin/omarchy-dev-status @@ -3,26 +3,44 @@ # omarchy:summary=Show the current Omarchy dev-link state # omarchy:group=dev +default_target="/usr/share/omarchy" +configured="$default_target" +conf_present=0 +linked=0 + if [[ -f /etc/omarchy.conf ]]; then + conf_present=1 configured=$( OMARCHY_PATH= # shellcheck disable=SC1091 . /etc/omarchy.conf printf '%s' "${OMARCHY_PATH:-}" ) + if [[ $configured != "$default_target" ]]; then + linked=1 + fi +fi + +if (( linked )); then echo "dev-link: ACTIVE" echo " /etc/omarchy.conf -> OMARCHY_PATH=$configured" else - configured="/usr/share/omarchy (default)" echo "dev-link: inactive" + if (( conf_present )); then + echo " /etc/omarchy.conf -> OMARCHY_PATH=$configured (default guard)" + fi fi echo " current shell: OMARCHY_PATH=${OMARCHY_PATH:-}" -if [[ -f /etc/omarchy.conf && "${OMARCHY_PATH:-}" != "$configured" ]]; then +if (( linked )) && [[ ${OMARCHY_PATH:-} != "$configured" ]]; then echo echo "Note: this shell predates dev-link. Open a new shell to pick up the change," echo "or 'export OMARCHY_PATH=$configured' to update just this shell." +elif (( ! linked )) && [[ ${OMARCHY_PATH:-$default_target} != "$default_target" ]]; then + echo + echo "Note: no dev-link is configured, but this shell still has a stale OMARCHY_PATH." + echo "Open a new shell or run 'export OMARCHY_PATH=$default_target'." fi if command -v hyprctl >/dev/null 2>&1 && hyprctl version &>/dev/null; then diff --git a/bin/omarchy-dev-unlink b/bin/omarchy-dev-unlink index cbd9f828..15f5783a 100755 --- a/bin/omarchy-dev-unlink +++ b/bin/omarchy-dev-unlink @@ -14,38 +14,56 @@ if [[ ${1:-} == "-h" || ${1:-} == "--help" ]]; then cat <}" + else + echo "/etc/omarchy.conf already points at $default_target." + fi +elif [[ ${OMARCHY_PATH:-$default_target} != "$default_target" ]]; then + prior_target="$OMARCHY_PATH" + echo "Not currently linked: /etc/omarchy.conf is absent." + echo "This shell still has OMARCHY_PATH=$OMARCHY_PATH; writing the default guard." +else + echo "Not currently linked. Writing the default OMARCHY_PATH guard." fi -# Capture the path dev-link wrote BEFORE we delete the conf, so we know -# which bin/ to strip from PATH. -prior_target=$(sed -n 's/^[[:space:]]*export[[:space:]]\+OMARCHY_PATH="\?\([^"]*\)"\?/\1/p' /etc/omarchy.conf | tail -1) -sudo rm -f /etc/omarchy.conf -echo "Removed /etc/omarchy.conf" +printf 'export OMARCHY_PATH="%s"\n' "$default_target" | sudo tee /etc/omarchy.conf >/dev/null +echo "Set /etc/omarchy.conf -> OMARCHY_PATH=$default_target" -export OMARCHY_PATH=/usr/share/omarchy -if [[ -n $prior_target ]]; then - PATH=$(printf '%s' "$PATH" | tr ':' '\n' | grep -vFx "$prior_target/bin" | paste -sd:) +export OMARCHY_PATH="$default_target" +if [[ -n $prior_target && $prior_target != "$default_target" ]]; then + PATH=$(printf '%s' "$PATH" | tr ':' '\n' | awk -v drop="$prior_target/bin" '$0 != drop' | paste -sd:) export PATH fi +if command -v systemctl >/dev/null 2>&1; then + if systemctl --user import-environment OMARCHY_PATH PATH 2>/dev/null; then + echo " Updated systemd --user env." + fi +fi + if command -v hyprctl >/dev/null 2>&1 && hyprctl version &>/dev/null; then - hyprctl setenv OMARCHY_PATH /usr/share/omarchy >/dev/null + hyprctl setenv OMARCHY_PATH "$default_target" >/dev/null hyprctl setenv PATH "$PATH" >/dev/null echo " Updated Hyprland session env." - systemctl --user import-environment OMARCHY_PATH PATH 2>/dev/null || true - echo " Updated systemd --user env." - if pgrep -x quickshell >/dev/null 2>&1; then omarchy-restart-shell echo " Restarted omarchy-shell." @@ -56,4 +74,9 @@ if command -v hyprctl >/dev/null 2>&1 && hyprctl version &>/dev/null; then fi echo -echo "Done. Existing shells still have the old OMARCHY_PATH until restarted." +if (( linked )) || [[ -n $prior_target ]]; then + echo "Done. Existing shells still have the old OMARCHY_PATH until restarted." + echo "For this shell, run: export OMARCHY_PATH=$default_target" +else + echo "Done." +fi diff --git a/default/bash/env-bootstrap b/default/bash/env-bootstrap index 7f3a7756..c1d759de 100644 --- a/default/bash/env-bootstrap +++ b/default/bash/env-bootstrap @@ -4,8 +4,9 @@ # /usr/share/uwsm/env.d/10-omarchy (Hyprland session via uwsm) # /usr/share/omarchy/default/bash/envs (bash rc chain; SSH/non-login) -# /etc/omarchy.conf is written by omarchy-dev-link. When absent, force the -# packaged default instead of preserving a stale inherited value. +# /etc/omarchy.conf is written by omarchy-dev-link and reset by +# omarchy-dev-unlink. When absent, force the packaged default instead of +# preserving a stale inherited value. if [ -f /etc/omarchy.conf ]; then . /etc/omarchy.conf : "${OMARCHY_PATH:=/usr/share/omarchy}" diff --git a/default/hypr/paths.lua b/default/hypr/paths.lua index b3676d04..4990eb81 100644 --- a/default/hypr/paths.lua +++ b/default/hypr/paths.lua @@ -4,7 +4,7 @@ local home = os.getenv("HOME") --- /etc/omarchy.conf wins over process env so dev-link survives stale sessions. +-- /etc/omarchy.conf wins over process env so dev-link/unlink survives stale sessions. local function read_dev_link_omarchy_path() local f = io.open("/etc/omarchy.conf", "r") if not f then return nil end diff --git a/docs/file-layout.md b/docs/file-layout.md index fe1293e0..19814dec 100644 --- a/docs/file-layout.md +++ b/docs/file-layout.md @@ -129,9 +129,10 @@ upgrade. This is documented in the PKGBUILD. Single source of truth for `OMARCHY_PATH` and dev-link-aware `PATH`. It: -- Sources `/etc/omarchy.conf` (written by `omarchy-dev-link`) if present; - otherwise forces `OMARCHY_PATH=/usr/share/omarchy` so a stale inherited - value can't survive an `omarchy-dev-unlink`. +- Sources `/etc/omarchy.conf` (written by `omarchy-dev-link`, reset to the + package path by `omarchy-dev-unlink`) if present; otherwise forces + `OMARCHY_PATH=/usr/share/omarchy` so a stale inherited value can't survive + an `omarchy-dev-unlink`. - Prepends `$OMARCHY_PATH/bin` to `PATH` **only when** `OMARCHY_PATH` is not `/usr/share/omarchy`. On a production install the binaries are already on `PATH` as `/usr/bin/omarchy-*` via the `omarchy` package.