Coexist with a desktop that already manages its tools (Omarchy) #2

Open
noconnor wants to merge 1 commits from omarchy-coexist into main
Owner

On an Omarchy laptop, bootstrap left two copies of almost everything:

  • VS Code twice: pacman's visual-studio-code-bin (1.140.0) plus the dotfiles tarball (1.139.0). That meant two "Visual Studio Code" menu entries, with both builds using the same ~/.config/Code profile, so the older build ends up running on a profile the newer one already migrated.
  • CLIs twice: kubectl, helm, k9s, kubectx, yq, jq, node and ansible in ~/.local/bin, behind mise/pacman copies that always come first on PATH (Omarchy puts ~/.local/bin last). The dotfiles copies never ran.
  • zsh-only helpers: opr/opc/opd/opl/ops, grmb and secrets.env loading lived only in zsh/zshrc. The login shell is bash and zsh/ can't install zsh there (no dnf/apt), so the helpers were missing and vault variables were unset.

Changes

  • lib/fetch.sh: new shadowed <name> helper. It returns true when another copy of the tool comes earlier on PATH than ~/.local/bin, which means a copy there would never run. It's always false when ~/.local/bin is first (the VMs, via zshrc) or not on PATH yet (a fresh box), so VM installs are unchanged. A mise shim only counts if mise which resolves it.
  • bin/, node/, ansible/: skip shadowed tools. try now takes the binary name.
  • vscode/: defers to any system code on PATH. It skips the install and removes a tarball copy it put there earlier (recognized by its .desktop Exec path). This replaces the old dnf/apt-only note, which also wouldn't match on Arch.
  • bash/ (new): a bash version of the zshrc helpers, copied to ~/.config/dotfiles/dotfiles.bash. One marked source block is added to ~/.bashrc, the same pattern mcp-config uses. It never owns ~/.bashrc and no-ops without one. Wired into bootstrap.sh after zsh; zsh/zshrc has a note to keep the two in sync.
  • README: documents all of the above.

Verification

  • shellcheck -s sh: no new findings; the only warnings are patterns the repo already uses (CDPATH= cd, SC1091 infos).
  • On the Omarchy box, bin/, node/, ansible/, vscode/ and bash/ each ran twice. The first run skipped the shadowed tools and cleaned up the VS Code tarball; the second run changed nothing. Tools that only dotfiles provides (stern, tofu, op, …) still report "already installed".
  • shadowed tested against: a VM-style PATH (~/.local/bin first → installs), ~/.local/bin off PATH (→ installs), a configured mise shim (→ skips), and a dead shim (→ ignored).
  • Bash helpers: loaded in a fresh interactive shell, validation errors behave, and opr read back a field matching secrets.env.
  • Not run: the Debian/Rocky container checks from verify-module.

🤖 Generated with Claude Code

On an Omarchy laptop, bootstrap left two copies of almost everything: - **VS Code twice**: pacman's `visual-studio-code-bin` (1.140.0) plus the dotfiles tarball (1.139.0). That meant two "Visual Studio Code" menu entries, with both builds using the same `~/.config/Code` profile, so the older build ends up running on a profile the newer one already migrated. - **CLIs twice**: kubectl, helm, k9s, kubectx, yq, jq, node and ansible in `~/.local/bin`, behind mise/pacman copies that always come first on PATH (Omarchy puts `~/.local/bin` last). The dotfiles copies never ran. - **zsh-only helpers**: `opr`/`opc`/`opd`/`opl`/`ops`, `grmb` and `secrets.env` loading lived only in `zsh/zshrc`. The login shell is bash and `zsh/` can't install zsh there (no dnf/apt), so the helpers were missing and vault variables were unset. ## Changes - **`lib/fetch.sh`**: new `shadowed <name>` helper. It returns true when another copy of the tool comes *earlier* on PATH than `~/.local/bin`, which means a copy there would never run. It's always false when `~/.local/bin` is first (the VMs, via zshrc) or not on PATH yet (a fresh box), so VM installs are unchanged. A mise shim only counts if `mise which` resolves it. - **`bin/`, `node/`, `ansible/`**: skip shadowed tools. `try` now takes the binary name. - **`vscode/`**: defers to any system `code` on PATH. It skips the install and removes a tarball copy it put there earlier (recognized by its `.desktop` `Exec` path). This replaces the old dnf/apt-only note, which also wouldn't match on Arch. - **`bash/`** (new): a bash version of the zshrc helpers, copied to `~/.config/dotfiles/dotfiles.bash`. One marked source block is added to `~/.bashrc`, the same pattern mcp-config uses. It never owns `~/.bashrc` and no-ops without one. Wired into `bootstrap.sh` after `zsh`; `zsh/zshrc` has a note to keep the two in sync. - **README**: documents all of the above. ## Verification - `shellcheck -s sh`: no new findings; the only warnings are patterns the repo already uses (`CDPATH= cd`, SC1091 infos). - On the Omarchy box, `bin/`, `node/`, `ansible/`, `vscode/` and `bash/` each ran twice. The first run skipped the shadowed tools and cleaned up the VS Code tarball; the second run changed nothing. Tools that only dotfiles provides (stern, tofu, op, …) still report "already installed". - `shadowed` tested against: a VM-style PATH (`~/.local/bin` first → installs), `~/.local/bin` off PATH (→ installs), a configured mise shim (→ skips), and a dead shim (→ ignored). - Bash helpers: loaded in a fresh interactive shell, validation errors behave, and `opr` read back a field matching `secrets.env`. - **Not run:** the Debian/Rocky container checks from `verify-module`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
noconnor added 1 commit 2026-10-05 03:45:29 +00:00
On an Omarchy laptop bootstrap left two of almost everything: VS Code from
both pacman and the tarball (two menu entries, one shared ~/.config/Code
profile), and kubectl/helm/k9s/kubectx/yq/jq/node/ansible in ~/.local/bin
behind mise and pacman copies that always won on PATH. The zsh helpers
(op*, grmb, secrets.env) also never reached the bash login shell.

- lib/fetch.sh: add `shadowed`, true when another copy of a tool comes
  earlier on PATH than ~/.local/bin. Always false where zshrc puts
  ~/.local/bin first, so VM installs are unchanged.
- bin/, node/, ansible/: skip tools that are shadowed.
- vscode/: defer to any system `code`, and remove a tarball copy this
  module installed earlier.
- bash/: new module; bash port of the zshrc helpers, sourced from
  ~/.bashrc via a marked block. No-ops without ~/.bashrc.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
You are not authorized to merge this pull request.
This pull request can be merged automatically.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin omarchy-coexist:omarchy-coexist
git checkout omarchy-coexist
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: public/dotfiles#2