diff --git a/AGENTS.md b/AGENTS.md index 2ee2728..e357491 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -65,14 +65,15 @@ Pulling a remote change before the refresh window: `chezmoi apply --refresh-exte | Key | Installed by | When | | --- | --- | --- | -| `arch.pacman` / `arch.aur` | `10-packages` (pacman / `yay` or `paru`) | every Linux role | +| `arch.pacman` / `arch.aur` | `10-packages` (pacman / `yay` or `paru`; yay bootstrapped if neither exists) | every Linux role | | `arch.desktop.pacman` / `.aur` | same | roles `desktop`, `laptop` | | `arch.desktop.omarchy` | pacman, only if `pacman-conf -l` lists `omarchy` | Omarchy machines | | `darwin.brew` / `.cask` | Homebrew | macOS | -| `shared.cargo` | `40-post`, if `cargo` exists | every OS | -| `shared.gh_extensions` | `20-gh-extensions` | every OS | +| `shared.cargo` | `15-tools`, after installing rustup if `cargo` is missing | every OS | +| `shared.mise` | `15-tools`: `mise use -g` for tools absent from the global config | every OS | +| `shared.gh_extensions` | `20-gh-extensions` (fish script, so fish config is sourced) | every OS | -Find the package with `pacman -Qo "$(command -v )"`; `pacman -Qm` lists AUR/foreign packages, `pacman -Si ` shows the repo (`extra` vs `omarchy`). Verify names before committing: `pacman -Si` for repo packages, `https://aur.archlinux.org/rpc/v5/info?arg[]=` for AUR, `https://formulae.brew.sh/api/formula/.json` for brew. Hyprland/Waybar/`omarchy-*` come with Omarchy and are not declared. Tools installed through `mise` (`~/.config/mise/config.toml`, local-only) are not covered by the manifest. +Find the package with `pacman -Qo "$(command -v )"`; `pacman -Qm` lists AUR/foreign packages, `pacman -Si ` shows the repo (`extra` vs `omarchy`). Verify names before committing: `pacman -Si` for repo packages, `https://aur.archlinux.org/rpc/v5/info?arg[]=` for AUR, `https://formulae.brew.sh/api/formula/.json` for brew, `mise registry ` for mise (no registry entry: use a backend spec such as `github:owner/repo`). Hyprland/Waybar/`omarchy-*` come with Omarchy and are not declared. CLIs that mise can install (omp, opencode, …) go in `shared.mise`, not a curl installer; `15-tools` curl-installs only rustup and strata. `shared.mise` mirrors the global `~/.config/mise/config.toml`: a tool added there with `mise use -g` belongs in the list too. ## Verify diff --git a/docs/ai/index.mdx b/docs/ai/index.mdx index 35e3001..7f793c9 100644 --- a/docs/ai/index.mdx +++ b/docs/ai/index.mdx @@ -5,7 +5,7 @@ sidebar: label: Overview --- -The repo manages the agent skill library only. Claude Code (`~/.claude`) and omp (`~/.omp`) configs are not in this repo, and no agent CLI is installed by chezmoi. topgrade runs `omp update` as a custom command. +The repo manages the agent skill library only. Claude Code (`~/.claude`) and omp (`~/.omp`) configs are not in this repo. omp, opencode, and crush are global mise tools (`packages.shared.mise`, installed by [15-tools](/chezmoi/scripts#15-tools)) and are updated by topgrade's `mise upgrade`; no other agent CLI is installed by chezmoi. diff --git a/docs/chezmoi/config.mdx b/docs/chezmoi/config.mdx index 06a631d..9565441 100644 --- a/docs/chezmoi/config.mdx +++ b/docs/chezmoi/config.mdx @@ -85,6 +85,7 @@ The `[data]` table exposes `.name`, `.email`, and `.role` to every template. che | `.chezmoi.os` | `run_onchange_before_10-packages.sh.tmpl` | pacman/yay on `linux`, Homebrew on `darwin` | | `.chezmoi.os` | `run_once_after_30-user-services.sh.tmpl` | systemd user units on `linux` only | | `.chezmoi.os` | `run_onchange_after_40-post.sh.tmpl` | `fc-cache` on `linux` only | +| `.chezmoi.os`, `.role` | `run_onchange_after_15-tools.sh.tmpl` | strata install on `linux` with role `desktop`/`laptop` | ```ini dot_gitconfig.tmpl [user] diff --git a/docs/chezmoi/data.mdx b/docs/chezmoi/data.mdx index 9ca823e..2785476 100644 --- a/docs/chezmoi/data.mdx +++ b/docs/chezmoi/data.mdx @@ -7,7 +7,7 @@ Files in `.chezmoidata/` are merged into chezmoi's template data on every run. N | File | Data key | Consumed by | | --- | --- | --- | -| `.chezmoidata/packages.yaml` | `.packages` | [`run_onchange_before_10-packages.sh.tmpl`](/chezmoi/scripts#10-packages), [`run_onchange_after_20-gh-extensions.sh.tmpl`](/chezmoi/scripts#20-gh-extensions) | +| `.chezmoidata/packages.yaml` | `.packages` | [`run_onchange_before_10-packages.sh.tmpl`](/chezmoi/scripts#10-packages), [`run_onchange_after_15-tools.sh.tmpl`](/chezmoi/scripts#15-tools), [`run_onchange_after_20-gh-extensions.sh.tmpl`](/chezmoi/scripts#20-gh-extensions) | | `.chezmoidata/aliases.yaml` | `.aliases` | `dot_config/shell/aliases.sh.tmpl` (bash and zsh) | | `.chezmoidata/skills.yaml` | `.skills` | [`run_onchange_after_25-skills.sh.tmpl`](/chezmoi/scripts#25-skills) | @@ -32,17 +32,17 @@ One manifest per platform, plus a `shared` block. Any edit to the file changes t | Misc CLI | `mise`, `gum`, `glow`, `atuin`, `wget`, `starship`, `zsh-syntax-highlighting` | | Fonts | `ttf-victor-mono-nerd` | -`packages.arch.aur`, installed with `yay -S --needed --noconfirm` (or `paru`) on every Linux machine: `topgrade`, `portop`. +`packages.arch.aur`, installed with `yay -S --needed --noconfirm` (or `paru`) on every Linux machine: `topgrade`, `portop`. Names some installed package already provides are skipped, and yay is bootstrapped when no helper exists ([10-packages](/chezmoi/scripts#10-packages)). `packages.arch.desktop`, added only for roles `desktop` and `laptop`: | Source | Packages | | --- | --- | -| pacman | `niri`, `xwayland-satellite`, `polkit-gnome`, `uwsm`, `xdg-user-dirs`; Wayland utilities `wl-clipboard`, `cliphist`, `wtype`, `ydotool`, `grim`, `slurp`, `hyprpicker`, `pamixer`, `brightnessctl`, `libnotify`; apps `nautilus`, `imv`, `mpv`, `evince`, `chromium`, `obsidian` | -| AUR | `noctalia-git`, `vicinae-bin`, `beeper-bin`, `fastmail`, `tldraw-offline-bin` | -| `[omarchy]` repo (`packages.arch.desktop.omarchy`, only when `pacman-conf -l` lists that repo) | `herdr`, `flea`, `voxtype-bin`, `xdg-terminal-exec`, `hyprland-preview-share-picker`, `brave-origin-bin`, `claude-desktop`, `1password`, `spotify` | +| pacman | `niri`, `noctalia`, `xwayland-satellite`, `polkit-gnome`, `uwsm`, `xdg-user-dirs`; Wayland utilities `wl-clipboard`, `cliphist`, `wtype`, `ydotool`, `grim`, `slurp`, `hyprpicker`, `pamixer`, `brightnessctl`, `libnotify`; apps `nautilus`, `imv`, `mpv`, `evince`, `chromium`, `obsidian`; strata runtime deps `bubblewrap`, `desktop-file-utils`, `fontconfig`, `gstreamer`, `gst-libav`, `gst-plugins-base`, `gst-plugins-good`, `gtk4`, `gtksourceview5`, `gvfs`, `poppler-glib`, `xdg-utils` | +| AUR (or a sync repo with the same name) | `vicinae-bin`, `tldraw-offline-bin`; desktop apps `beeper-bin`, `fastmail`, `1password`, `brave-origin-bin`, `claude-desktop`, `spotify` | +| `[omarchy]` repo (`packages.arch.desktop.omarchy`, only when `pacman-conf -l` lists that repo) | `herdr`, `flea`, `voxtype-bin`, `xdg-terminal-exec`, `hyprland-preview-share-picker` | -Hyprland, Waybar and the `omarchy-*` commands come with the Omarchy install and are not declared. `niri-dynamic-workspaces` (niri startup) has no package; install it by hand. +Hyprland, Waybar and the `omarchy-*` commands come with the Omarchy install and are not declared. `niri-dynamic-workspaces` (niri startup) has no package; install it by hand. strata (the folder handler) has no package either; [15-tools](/chezmoi/scripts#15-tools) runs its installer. @@ -67,13 +67,15 @@ Compared with Arch, macOS has no `micro`, `diffnav`, `mdfried`, `docker`, `sshfs | `dlvhdr/gh-dash` | `gh dash`: PR and issue dashboard | | `meiji163/gh-notify` | `gh notify`: notifications in the terminal | -`packages.shared.cargo` lists `suvadu` and `mandible` (the tmux-palette "mandible" item runs `~/.local/bin/mandible-pick`). [`run_onchange_after_40-post.sh.tmpl`](/chezmoi/scripts#40-post) installs any that `cargo install --list` lacks, and skips the step when `cargo` is absent. `packages.shared.go` is an empty list that no script reads. +`packages.shared.cargo` lists `suvadu` and `mandible` (the tmux-palette "mandible" item runs `~/.local/bin/mandible-pick`). [`run_onchange_after_15-tools.sh.tmpl`](/chezmoi/scripts#15-tools) installs rustup when `cargo` is missing, then any crate `cargo install --list` lacks. + +`packages.shared.mise` lists the global mise tools: `ghq`, `bun`, `node`, `uv`, `opencode`, `crush`, and omp as `github:can1357/oh-my-pi` (omp is not in the mise registry, so it uses the GitHub-releases backend, which installs the release binary as `omp`). The same script runs `mise use -g` for each one not yet in the global config (`~/.config/mise/config.toml`, local per machine), then `mise install` on the list. A tool already there keeps its pinned version. topgrade's mise step (`mise upgrade`) updates them. :::note -AUR packages need `paru`. Without it the package script prints a warning listing the skipped AUR packages and continues. +AUR packages need `yay` or `paru`. The package script bootstraps `yay` when neither exists; only when that is impossible (running as root with no repo shipping yay) does it print a warning listing the skipped AUR packages and continue. ::: ## aliases.yaml [#aliasesyaml] diff --git a/docs/chezmoi/index.mdx b/docs/chezmoi/index.mdx index 6520942..95f3d8b 100644 --- a/docs/chezmoi/index.mdx +++ b/docs/chezmoi/index.mdx @@ -36,6 +36,7 @@ The repo is a [chezmoi](https://chezmoi.io) source directory. It lives at `~/.lo - .gitmodules - .chezmoiscripts/ - run_onchange_before_10-packages.sh.tmpl + - run_onchange_after_15-tools.sh.tmpl - run_onchange_after_20-gh-extensions.sh.tmpl - run_onchange_after_25-skills.sh.tmpl - run_once_after_30-user-services.sh.tmpl diff --git a/docs/chezmoi/scripts.mdx b/docs/chezmoi/scripts.mdx index cba61c5..bdd6ba8 100644 --- a/docs/chezmoi/scripts.mdx +++ b/docs/chezmoi/scripts.mdx @@ -3,7 +3,7 @@ title: Apply scripts description: Every run_ script chezmoi executes during apply, when each one fires, and what it does on each OS and role. --- -Six scripts run during `chezmoi apply`. Four live in `.chezmoiscripts/`, a directory whose scripts run as if they sat at the source root without creating a matching target directory. Two sit at the repo root. All six are templates and all use `#!/bin/sh` with `set -eu`. +Seven scripts run during `chezmoi apply`. Five live in `.chezmoiscripts/`, a directory whose scripts run as if they sat at the source root without creating a matching target directory. Two sit at the repo root. All seven are templates; `20-gh-extensions` is a fish script, the rest use `#!/bin/sh` with `set -eu` (except `25-skills`, which uses `set -u`). ## Execution order @@ -12,10 +12,11 @@ Six scripts run during `chezmoi apply`. Four live in `.chezmoiscripts/`, a direc Install system packages from `packages.yaml`. chezmoi writes the target state. - Install gh extensions. + rustup and cargo crates, omp, global mise tools, strata on Linux desktops. + Install gh extensions from a fish session. Install and prune agent skills. Enable systemd user units on Linux (nirinit, kitty-day-save, projects-sync.timer). - bat cache, font cache, cargo installs. + bat cache, font cache. Rebuild bat cache when its theme or config changes. Reinstall yazi plugins when the manifest changes. @@ -23,10 +24,11 @@ Six scripts run during `chezmoi apply`. Four live in `.chezmoiscripts/`, a direc | Script | Phase | Frequency | Re-run trigger | | --- | --- | --- | --- | | `.chezmoiscripts/run_onchange_before_10-packages.sh.tmpl` | before | onchange | sha256 of `.chezmoidata/packages.yaml`; also the role and OS, which change the rendered package list | +| `.chezmoiscripts/run_onchange_after_15-tools.sh.tmpl` | after | onchange | sha256 of `packages.shared.cargo` and `packages.shared.mise` as JSON; also the OS and role, which add the strata step | | `.chezmoiscripts/run_onchange_after_20-gh-extensions.sh.tmpl` | after | onchange | sha256 of `packages.shared.gh_extensions` as JSON | | `.chezmoiscripts/run_onchange_after_25-skills.sh.tmpl` | after | onchange | sha256 of `.skills` as JSON | | `.chezmoiscripts/run_once_after_30-user-services.sh.tmpl` | after | once | Runs once per distinct rendered content | -| `.chezmoiscripts/run_onchange_after_40-post.sh.tmpl` | after | onchange | sha256 of `packages.shared.cargo` as JSON; also edits to the script itself or an OS change | +| `.chezmoiscripts/run_onchange_after_40-post.sh.tmpl` | after | onchange | Edits to the script itself or an OS change | | `run_onchange_after_build-bat-cache.sh.tmpl` | after | onchange | sha256 of `dot_config/bat/themes/cyberdream.tmTheme` and `dot_config/bat/config` | | `run_onchange_after_install-yazi-plugins.sh.tmpl` | after | onchange | sha256 of `~/.config/yazi/package.toml` (empty when the file is absent) | @@ -48,8 +50,9 @@ Six scripts run during `chezmoi apply`. Four live in `.chezmoiscripts/`, a direc 1. Uses `pacman` directly when running as root, otherwise `sudo pacman`. 2. `pacman -T` filters each list down to names no installed package provides (so `mise-bin` satisfies `mise`, `yazi-git` satisfies `yazi`), then `pacman -S --needed --noconfirm` installs the rest of `packages.arch.pacman`. 3. For roles `desktop` and `laptop`, the same for `packages.arch.desktop.pacman`, and, when `pacman-conf -l` lists an `omarchy` repo, for `packages.arch.desktop.omarchy`. -4. Builds the AUR list: `packages.arch.desktop.aur` plus `packages.arch.aur` for `desktop`/`laptop`, only `packages.arch.aur` for other roles. -5. If the list is non-empty, runs `yay -S --needed --noconfirm` on it, falling back to `paru`. With neither it prints `warning: yay/paru not found — skipping AUR packages: …` and continues. +4. Builds the AUR list: `packages.arch.desktop.aur` plus `packages.arch.aur` for `desktop`/`laptop`, only `packages.arch.aur` for other roles, then drops every name `pacman -T` says is already provided. Desktop apps already installed from a sync repo (CachyOS, `[omarchy]`) are therefore neither rebuilt nor replaced. +5. If anything is left and neither `yay` nor `paru` is installed, bootstraps `yay`: from a sync repo when `pacman -Si yay` finds one (CachyOS, chaotic-aur), otherwise by building `yay-bin` from the AUR with `makepkg -si` (installs `git` and `base-devel` first; skipped as root, since makepkg refuses root). +6. Runs `yay -S --needed --noconfirm` on the remaining names, falling back to `paru`. yay prefers a sync repo over the AUR when both have the name. If no helper could be bootstrapped it prints `warning: no yay/paru and none could be bootstrapped — skipping AUR packages: …` and continues. @@ -65,13 +68,28 @@ The role is not consulted on macOS. On any other OS the script renders to just the shebang and comments and does nothing. +## 15-tools [#15-tools] + +`.chezmoiscripts/run_onchange_after_15-tools.sh.tmpl` installs the tools that do not come from pacman/Homebrew. It prepends `~/.cargo/bin` to `PATH`, since chezmoi's environment can predate the shell config that adds it. Any failing step aborts the script, so chezmoi keeps the old hash and retries on the next apply. + +| Step | Condition | Action | +| --- | --- | --- | +| rustup | `cargo` not on `PATH` | `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \| sh -s -- -y --no-modify-path`. `-y` because there is no prompt under chezmoi; `--no-modify-path` because the shell rc files are symlinks into this repo and already source `~/.cargo/env` | +| cargo crates | every OS | `cargo install --locked ` for each `packages.shared.cargo` entry missing from `cargo install --list` | +| mise tools | `mise` installed (warning otherwise) | `mise use -g ` for each `packages.shared.mise` entry absent from `mise ls --global --json`, then `mise install `. A tool already in the global config keeps its pinned version. omp and opencode come from here | +| old omp binary | `~/.local/bin/omp` is a regular file and `mise which omp` resolves | Deletes it: a copy from omp's own installer (`omp.sh/install`) sits ahead of mise's shims on `PATH` | +| strata | Linux, roles `desktop`/`laptop`, no `~/.local/bin/strata` | `curl -fsSL https://raw.githubusercontent.com/lgse/strata/main/install.sh \| bash -s -- --with-desktop-entry --with-file-manager` | + +The strata flags install the binary, `~/.local/share/applications/io.github.lgse.Strata.desktop`, and the `org.freedesktop.FileManager1` D-Bus service in `~/.local/share/dbus-1/services` ("Open file location" from other apps). The folder default (`inode/directory`) comes from the managed `~/.config/mimeapps.list` instead of `--with-folder-association`, because `xdg-mime default` would replace that symlink with a plain file. The installer's own dependency step runs `sudo -n pacman`, which fails without cached credentials, so its runtime packages are declared in `packages.arch.desktop.pacman` and are already present when it runs. + ## 20-gh-extensions [#20-gh-extensions] -`.chezmoiscripts/run_onchange_after_20-gh-extensions.sh.tmpl` installs each `packages.shared.gh_extensions` entry on every OS. +`.chezmoiscripts/run_onchange_after_20-gh-extensions.sh.tmpl` installs each `packages.shared.gh_extensions` entry on every OS. It is a fish script (`#!/usr/bin/env fish`), so fish sources `~/.config/fish` first: `PATH` (mise, `~/.local/bin`, `~/.cargo/bin`) and `GITHUB_TOKEN` (from `gh auth token` in `conf.d/10-env.fish`) are those of a fish session. It runs after every file is applied and after [15-tools](#15-tools), so the fish config and `~/.cargo/env.fish` exist. - Exits 0 with `warning: gh not installed — skipping extensions` if `gh` is missing. - Exits 0 with `warning: gh not authenticated — run 'gh auth login', then 'chezmoi apply' again` if `gh auth status` fails. - Reads `gh extension list`, then runs `gh extension install ` only for extensions not already present. +- Exits 1 listing the failed extensions if any install failed, so the next apply retries. :::warning A skipped run still exits 0, so chezmoi records this content as done and a plain re-apply does not retry it, despite what the warning text says. After `gh auth login`, either run `gh extension install` for each entry by hand, or clear chezmoi's onchange state with `chezmoi state delete-bucket --bucket=entryState` and apply again (this re-runs every `run_onchange_` script). @@ -101,13 +119,12 @@ Other personal automation units (brain-lens, omp-loop, rclone, hermes, voxtype) ## 40-post [#40-post] -`.chezmoiscripts/run_onchange_after_40-post.sh.tmpl` is post-apply housekeeping. It re-runs when the script is edited or `packages.shared.cargo` changes. +`.chezmoiscripts/run_onchange_after_40-post.sh.tmpl` is post-apply housekeeping. It re-runs when the script is edited. | Step | Condition | Action | | --- | --- | --- | | bat cache | `bat` installed | `bat cache --build` | | Font cache | Linux, `fc-cache` installed | `fc-cache -f` | -| cargo | `cargo` installed | `cargo install --locked ` for each `packages.shared.cargo` entry missing from `cargo install --list` | Each step ignores failures (`|| true`). tpm is cloned by [`.chezmoiexternal.toml`](/chezmoi/externals-and-ignore#externals), not here. diff --git a/docs/desktop/fonts-and-apps.mdx b/docs/desktop/fonts-and-apps.mdx index 86c780e..91c7dff 100644 --- a/docs/desktop/fonts-and-apps.mdx +++ b/docs/desktop/fonts-and-apps.mdx @@ -56,11 +56,12 @@ Victor Mono Nerd Font is installed on every role by `run_onchange_before_10-pack | Group | MIME types / schemes | Handler (`.desktop`) | | --- | --- | --- | | Text and scripts | `text/plain`, `text/x-shellscript`, `text/x-python`, `text/x-script.python` | `vim.desktop` | +| Notes | `text/markdown`, `application/x-obsidian-canvas`, `application/x-obsidian-base`, `x-scheme-handler/obsidian` | `obsidian.desktop` (`obsidian` from `packages.arch.desktop.pacman`) | | Web pages | `text/html`, `application/xhtml+xml`, `application/x-extension-htm`, `-html`, `-shtml`, `-xhtml`, `-xht` | `brave-origin.desktop` | | Web links | `x-scheme-handler/http`, `https`, `chrome` | `brave-origin.desktop` | | Browser internals | `x-scheme-handler/about`, `unknown` | `chromium.desktop` | | PDF | `application/pdf` | `brave-origin.desktop` | -| Directories | `inode/directory` | `com.thisisgm.flea.desktop` (flea) | +| Directories | `inode/directory` | `io.github.lgse.Strata.desktop` ([strata](/chezmoi/scripts#15-tools), which also registers the `org.freedesktop.FileManager1` service for "Open file location") | | Mail | `x-scheme-handler/mailto` | `omamail.desktop` | | Windows executables | `application/vnd.microsoft.portable-executable` | `wine.desktop` | | AI tools | `x-scheme-handler/claude` | `com.anthropic.Claude.desktop` | diff --git a/docs/desktop/hyprland.mdx b/docs/desktop/hyprland.mdx index c19170c..7070df6 100644 --- a/docs/desktop/hyprland.mdx +++ b/docs/desktop/hyprland.mdx @@ -223,7 +223,7 @@ Named workspaces replace niri-dynamic-workspaces. `SUPER + ALT + S` (send to scr | `SUPER + CTRL + ALT + K` | `omarchy-cycle-browser` | — | | `SUPER + CTRL + ALT + G` | `omarchy-cycle ghostty` | — | | `SUPER + CTRL + ALT + O` | `omarchy-cycle obsidian` | — | -| `SUPER + CTRL + ALT + F` | Nautilus: `omarchy-launch-or-focus nautilus "gtk-launch org.gnome.Nautilus"` | — | +| `SUPER + CTRL + ALT + F` | strata: `omarchy-launch-or-focus io.github.lgse.Strata "gtk-launch io.github.lgse.Strata"` | — | | `SUPER + CTRL + ALT + E` | `omarchy-toggle-scratch fastmail` | — | | `SUPER + CTRL + ALT + M` | `omarchy-toggle-scratch beeper` | — | | `SUPER + CTRL + L` | `omarchy-toggle-scratch lmstudio` (LM Studio) | toggle window gaps | @@ -233,10 +233,9 @@ Named workspaces replace niri-dynamic-workspaces. `SUPER + ALT + S` (send to scr | `SUPER + CTRL + ALT + W` | tldraw: `omarchy-launch-or-focus tldraw "gtk-launch TLDraw"` | toggle weather | | `SUPER + CTRL + ALT + SPACE` | Sticky Notes Canvas via `gtk-launch io.github.faridjaff.StickyNotesCanvas` | — | | `SUPER + SHIFT + G` | Goliath: `kitty --class=kitty-goliath --title=goliath --config ~/.config/kitty/goliath.conf` | Signal | -| `SUPER + SHIFT + F` | `flea --gui` | unbound first (default unnamed) | -| `SUPER + ALT + SHIFT + F` | `flea --gui "$(omarchy-cmd-terminal-cwd)"` — file manager in the terminal's cwd | unbound first (default unnamed) | +| `SUPER + ALT + SHIFT + F` | `uwsm-app -- "$HOME/.local/bin/strata" "$(omarchy-cmd-terminal-cwd)"` — strata in the terminal's cwd | unbound first (default unnamed) | -The two `flea` bindings and a rule tagging `com.thisisgm.flea.picker` as `+floating-window` sit between `flea --default` / `flea --picker` marker comments. The `flea` tool writes and removes those blocks itself. +strata is the default file manager: `inode/directory` in `mimeapps.list` and the `org.freedesktop.FileManager1` D-Bus service both point at it ([15-tools](/chezmoi/scripts#15-tools)). The cwd bind uses the absolute path because `~/.local/bin` may be missing from uwsm-app's `PATH`. Omarchy's own file-manager bind on `SUPER + SHIFT + F` is replaced by full screen (below). A rule tagging `com.thisisgm.flea.picker` as `+floating-window` still sits between `flea --picker` marker comments, which the `flea` tool writes and removes itself. ### Screenshots, session, menus diff --git a/docs/desktop/index.mdx b/docs/desktop/index.mdx index 771a2c8..0685fc5 100644 --- a/docs/desktop/index.mdx +++ b/docs/desktop/index.mdx @@ -27,8 +27,8 @@ Two Wayland compositors are configured side by side. niri is the original setup, | Source | Packages | | --- | --- | -| pacman | `niri`, `xwayland-satellite`, `polkit-gnome`, `uwsm`, `xdg-user-dirs`, Wayland utilities (`wl-clipboard`, `cliphist`, `wtype`, `ydotool`, `grim`, `slurp`, `hyprpicker`, `pamixer`, `brightnessctl`, `libnotify`) and the bound apps (`nautilus`, `imv`, `mpv`, `evince`, `chromium`, `obsidian`) | -| AUR (via `yay`/`paru`) | `noctalia-git`, `vicinae-bin`, `beeper-bin`, `fastmail`, `tldraw-offline-bin` | -| `[omarchy]` repo, when configured | `herdr`, `flea`, `voxtype-bin`, `xdg-terminal-exec`, `hyprland-preview-share-picker`, `brave-origin-bin`, `claude-desktop`, `1password`, `spotify` | +| pacman | `niri`, `noctalia` (the CachyOS build where that repo is configured, else `extra`), `xwayland-satellite`, `polkit-gnome`, `uwsm`, `xdg-user-dirs`, Wayland utilities (`wl-clipboard`, `cliphist`, `wtype`, `ydotool`, `grim`, `slurp`, `hyprpicker`, `pamixer`, `brightnessctl`, `libnotify`), the bound apps (`nautilus`, `imv`, `mpv`, `evince`, `chromium`, `obsidian`), and strata's runtime deps | +| AUR via `yay`/`paru` (a sync repo wins when it has the name) | `vicinae-bin`, `tldraw-offline-bin`, and the desktop apps `beeper-bin`, `fastmail`, `1password`, `brave-origin-bin`, `claude-desktop`, `spotify` | +| `[omarchy]` repo, when configured | `herdr`, `flea`, `voxtype-bin`, `xdg-terminal-exec`, `hyprland-preview-share-picker` | -The script skips AUR packages with a warning if neither `yay` nor `paru` is installed. Hyprland, Waybar, and the `omarchy-*` commands that the scripts call (`omarchy-menu`, `omarchy-launch-or-focus`, and others) come from an Omarchy install. This repo does not install them. See [chezmoi scripts](/chezmoi/scripts) for the full install flow and [packages.yaml](/chezmoi/data#packagesyaml) for the complete lists. +AUR names that an installed package already provides are skipped; with no `yay` or `paru` the script bootstraps `yay` first. strata, the default file manager, comes from its own installer in [15-tools](/chezmoi/scripts#15-tools). Hyprland, Waybar, and the `omarchy-*` commands that the scripts call (`omarchy-menu`, `omarchy-launch-or-focus`, and others) come from an Omarchy install. This repo does not install them. See [chezmoi scripts](/chezmoi/scripts) for the full install flow and [packages.yaml](/chezmoi/data#packagesyaml) for the complete lists. diff --git a/docs/desktop/niri.mdx b/docs/desktop/niri.mdx index f50ed56..24eeeb8 100644 --- a/docs/desktop/niri.mdx +++ b/docs/desktop/niri.mdx @@ -55,7 +55,7 @@ Linux `desktop` and `laptop` roles only. `.chezmoiignore.tmpl` skips `~/.config/ ## Installation -- `niri`, `xwayland-satellite`, `polkit-gnome`, `cliphist`, `wl-clipboard` and `xdg-user-dirs` from pacman, `noctalia-git` and `vicinae-bin` from the AUR. Declared under `packages.arch.desktop` in `.chezmoidata/packages.yaml` and installed by `run_onchange_before_10-packages.sh.tmpl` for `desktop`/`laptop` roles. See [chezmoi scripts](/chezmoi/scripts). +- `niri`, `noctalia`, `xwayland-satellite`, `polkit-gnome`, `cliphist`, `wl-clipboard` and `xdg-user-dirs` from pacman (`noctalia` resolves to the CachyOS build on CachyOS; `noctalia-git` conflicts with it and is not declared), `vicinae-bin` from the AUR. Declared under `packages.arch.desktop` in `.chezmoidata/packages.yaml` and installed by `run_onchange_before_10-packages.sh.tmpl` for `desktop`/`laptop` roles. See [chezmoi scripts](/chezmoi/scripts). - `.chezmoiscripts/run_once_after_30-user-services.sh.tmpl` runs once on Linux. If `~/.config/systemd/user/nirinit.service` exists, it runs `systemctl --user daemon-reload` and `systemctl --user enable nirinit.service`. The script's comment says other personal units (brain-lens, omp-loop, rclone, hermes, voxtype) ship as files only and are enabled by hand. The repo does not currently contain `dot_config/systemd`, so the unit must come from elsewhere for the enable step to run. - Tools the config calls but does not install: `kbuildsycoca6`, `niri-dynamic-workspaces`, `dot-screenshot`, `niri-smart-close`, `niri-smart-move`, and the `capitaine-cursors-light` cursor theme. `niri-smart-close`, `niri-smart-move`, and `dot-screenshot` are called by path or name but are not in this repo. `voxtype-bin` comes from the `[omarchy]` repo when present. @@ -133,7 +133,7 @@ Shadow color is `#1e1c2170` and the insert hint is `#a398b380`. The palette foll | `dev.noctalia.Noctalia` (Noctalia v5 settings) | Floating, 1080 × 920 | | `Folo`, `Spotify`, `zen`, `brave-origin`, `gemini-desktop`, `claude-desktop` | Opacity 0.9, tiled, blur, no border background, open focused | | `kitty`, `zed`, `obsidian`, `Beeper`, `chromium`, `com.mitchellh.ghostty` | Opacity 0.9, tiled, blur, no border background, open focused | -| `org.gnome.Nautilus`, `com.gabm.satty` | Floating, focused, width proportion 0.5 | +| `io.github.lgse.Strata`, `org.gnome.Nautilus`, `com.gabm.satty` | Floating, focused, width proportion 0.5 | | Title `Picture-in-Picture` (app `zen`) or `Picture in picture` | Floating, not focused, opacity 1.0, 24 px from the top-right corner, on `eDP-1` | | `zed`, `obsidian`, `sticky-notest-canvas`, title `Sticky Notes`, `vacuumtube`, `Fladder`, `kitty`, `kitty-herdr`, `kitty-tmux` | Open on the Apple Studio Display | @@ -239,7 +239,7 @@ All bindings from `config.d/70-binds.kdl`. `Mod` is `Super` (`Alt` when niri run | `Super+Alt+Ctrl+L` | Linear web app (via vicinae) | | `Super+Alt+Ctrl+T` | Todoist (via vicinae) | | `Super+Alt+Ctrl+N` | Open the Noctalia `noctalia/notes` panel | -| `Super+Alt+Ctrl+F` | Nautilus (via vicinae) | +| `Super+Alt+Ctrl+F` | strata, the default file manager (via vicinae) | | `Super+Alt+Ctrl+Space` | Sticky Notes Canvas (via vicinae) | ### Dynamic workspaces diff --git a/docs/installation.mdx b/docs/installation.mdx index 3648a3e..601d142 100644 --- a/docs/installation.mdx +++ b/docs/installation.mdx @@ -23,7 +23,7 @@ The script checks the release tarball's SHA-256 before installing, as upstream d - **Arch**: `sudo` for pacman. `yay` (Omarchy ships it) or `paru` is needed for AUR packages (`topgrade`, `portop`, and the desktop apps on desktop roles); without one the package script prints a warning and skips them. + **Arch**: `sudo` for pacman. AUR packages (`topgrade`, `portop`, and the desktop apps on desktop roles) go through `yay` or `paru`; when neither is installed the package script installs `yay` from a sync repo that ships it (CachyOS) or builds `yay-bin` from the AUR. **macOS**: [Homebrew](https://brew.sh) is required; the package script exits with an error if `brew` is missing. @@ -85,7 +85,7 @@ sh -c "$(curl -fsSL https://dots.prd.lk/install)" -- --version Configs are linked into `$HOME` (symlink mode). The neovim config and a bat syntax are cloned as externals. See [Externals and ignore rules](/chezmoi/externals-and-ignore). - gh extensions, the bat cache, the font cache, yazi plugins, and the niri user service on Linux. tpm arrives earlier as an external. + rustup and cargo crates, the global mise tools (`ghq`, `bun`, `node`, `uv`, `opencode`, `crush`, omp), strata on Linux desktops, then gh extensions (from a fish session), skills, the bat cache, the font cache, yazi plugins, and the systemd user services on Linux. tpm arrives earlier as an external. diff --git a/docs/shell/bash-zsh.mdx b/docs/shell/bash-zsh.mdx index d06b92c..c55226e 100644 --- a/docs/shell/bash-zsh.mdx +++ b/docs/shell/bash-zsh.mdx @@ -19,7 +19,7 @@ bash and zsh are set up so a shell other than fish feels the same: the same alia ## Installation -bash is part of the base system. zsh itself is not listed in `.chezmoidata/packages.yaml`, but `zsh-syntax-highlighting`, `starship`, `atuin`, `eza`, and `zoxide` are, for both pacman and Homebrew. `suvadu` (the `suv` history tool) is declared under `packages.shared.cargo`, but none of the apply scripts install cargo packages, so install it manually if you want it. +bash is part of the base system. zsh itself is not listed in `.chezmoidata/packages.yaml`, but `zsh-syntax-highlighting`, `starship`, `atuin`, `eza`, and `zoxide` are, for both pacman and Homebrew. `suvadu` (the `suv` history tool) is declared under `packages.shared.cargo` and installed by [15-tools](/chezmoi/scripts#15-tools). ## ~/.bashrc diff --git a/docs/shell/fish.mdx b/docs/shell/fish.mdx index 61591ed..a91a23e 100644 --- a/docs/shell/fish.mdx +++ b/docs/shell/fish.mdx @@ -19,7 +19,7 @@ fish is the primary interactive shell. The config is split into autoloaded files ## Installation -`fish` is in `.chezmoidata/packages.yaml` under `packages.arch.pacman` and `packages.darwin.brew`. `.chezmoiscripts/run_onchange_before_10-packages.sh.tmpl` installs it with pacman on Arch and Homebrew on macOS. The tools that fish initializes (starship, zoxide, atuin, fzf, eza, gum, yazi) come from the same manifest. mise, television, hishtory, envman, and the Bun, Go, Android, and Foundry toolchains are not in the manifest; fish initializes each one only if it is present. +`fish` is in `.chezmoidata/packages.yaml` under `packages.arch.pacman` and `packages.darwin.brew`. `.chezmoiscripts/run_onchange_before_10-packages.sh.tmpl` installs it with pacman on Arch and Homebrew on macOS. The tools that fish initializes (starship, zoxide, atuin, fzf, eza, gum, yazi, television, mise) come from the same manifest; Bun is a global mise tool (`packages.shared.mise`) and rustup comes from [15-tools](/chezmoi/scripts#15-tools). hishtory, envman, and the Go, Android, and Foundry toolchains are not in the manifest; fish initializes each one only if it is present. ### Plugins diff --git a/docs/tools/github-cli.mdx b/docs/tools/github-cli.mdx index 46f3030..e6ae52a 100644 --- a/docs/tools/github-cli.mdx +++ b/docs/tools/github-cli.mdx @@ -48,7 +48,7 @@ Authentication is per machine: run `gh auth login` once. Tokens live in gh's `ho | `dlvhdr/gh-dash` | `gh dash` | PR, issue, and notification dashboard (configured below). | | `meiji163/gh-notify` | `gh notify` | Notification viewer. | -`.chezmoiscripts/run_onchange_after_20-gh-extensions.sh.tmpl` installs them: +`.chezmoiscripts/run_onchange_after_20-gh-extensions.sh.tmpl` installs them. It is a fish script, so fish's config is sourced first and `PATH` and `GITHUB_TOKEN` match a fish session: diff --git a/docs/tools/index.mdx b/docs/tools/index.mdx index 0685403..74c496f 100644 --- a/docs/tools/index.mdx +++ b/docs/tools/index.mdx @@ -63,7 +63,7 @@ These packages are declared in `.chezmoidata/packages.yaml` but have no config f | `wget` | HTTP downloads | Not referenced by any config. | | `zsh-syntax-highlighting` | zsh highlighting | Sourced by the zsh setup. See [Shell](/shell). | | `ttf-victor-mono-nerd` / `font-victor-mono-nerd-font` | Nerd Font | Terminal font. See [Terminal](/terminal). | -| `suvadu`, `mandible` | Declared under `packages.shared.cargo` | Installed by [`40-post`](/chezmoi/scripts#40-post) when `cargo` exists. `mandible` backs the tmux-palette "mandible" item via `~/.local/bin/mandible-pick`. | +| `suvadu`, `mandible` | Declared under `packages.shared.cargo` | Installed by [`15-tools`](/chezmoi/scripts#15-tools), which installs rustup first when `cargo` is missing. `mandible` backs the tmux-palette "mandible" item via `~/.local/bin/mandible-pick`. | Tools with their own pages in other sections: [fish](/shell/fish), [starship](/shell/starship), and [atuin](/shell/atuin) under Shell; [kitty](/terminal/kitty) and [tmux](/terminal/tmux) under Terminal. diff --git a/docs/tools/topgrade.mdx b/docs/tools/topgrade.mdx index c69b7cf..bb8e561 100644 --- a/docs/tools/topgrade.mdx +++ b/docs/tools/topgrade.mdx @@ -65,13 +65,12 @@ Post-commands run after everything else: | Name | Command | | --- | --- | -| Omp Update | `omp update` | | Hermes Update | `hermes update --backup --yes` | | Herdr Update | `herdr update` | | Shelly Update | `shelly upgrade-all -n` | | Cachy Update | `cachy-update` | -`shelly upgrade-all -n` is also available as the `sua` alias. The post-commands assume CachyOS tooling (`shelly`, `cachy-update`) and the owner's own CLIs (`omp`, `hermes`, `herdr`); on machines without them those steps fail. +`shelly upgrade-all -n` is also available as the `sua` alias. The post-commands assume CachyOS tooling (`shelly`, `cachy-update`) and the owner's own CLIs (`hermes`, `herdr`); on machines without them those steps fail. omp has no post-command: it is a global mise tool, so topgrade's built-in mise step (`mise upgrade`) updates it, and `omp update` would overwrite the binary inside mise's install directory. :::note `chezmoi re-add` does not overwrite templates, so edits made directly to rendered files such as `~/.gitconfig` are not captured; change the `.tmpl` source instead.