mirror of
https://github.com/prdlk/dotfiles.git
synced 2026-11-02 11:32:42 +00:00
chore(packages): declare every tool the configs reference
Audit of configs, scripts, tmux-palette items and television cables against installed packages. Adds the missing pacman/AUR/brew entries, a [omarchy] repo list installed only where that repo is configured, and cargo installs in 40-post. 10-packages filters lists with pacman -T so provider packages (mise-bin, yazi-git) are not replaced, and uses yay with paru as fallback. noctalia-shell -> noctalia-git (AUR name).
This commit is contained in:
1 parent
6f73aa2f82
commit
30314160f1
13 files changed
+156
-46
No files matched your search
@@ -4,21 +4,33 @@ packages:
|
|||||||
# shell + editors
|
# shell + editors
|
||||||
- fish
|
- fish
|
||||||
- neovim
|
- neovim
|
||||||
- tmux
|
- helix
|
||||||
- micro
|
- micro
|
||||||
|
- tmux
|
||||||
# terminal
|
# terminal
|
||||||
- kitty
|
- kitty
|
||||||
# tui tools
|
# tui tools (tmux-palette, television cables, fish functions)
|
||||||
- yazi
|
- yazi
|
||||||
- lazygit
|
- lazygit
|
||||||
- lazydocker
|
- lazydocker
|
||||||
|
- docker
|
||||||
|
- docker-compose
|
||||||
- btop
|
- btop
|
||||||
- fastfetch
|
- fastfetch
|
||||||
|
- onefetch
|
||||||
|
- television
|
||||||
|
- serie
|
||||||
|
- tig
|
||||||
|
- gitui
|
||||||
|
- tldr
|
||||||
|
- navi
|
||||||
|
- mdfried
|
||||||
# vcs + forge
|
# vcs + forge
|
||||||
- git
|
- git
|
||||||
- github-cli
|
- github-cli
|
||||||
- git-delta
|
- git-delta
|
||||||
- diffnav
|
- diffnav
|
||||||
|
- tea
|
||||||
# search / files
|
# search / files
|
||||||
- fzf
|
- fzf
|
||||||
- fd
|
- fd
|
||||||
@@ -28,15 +40,21 @@ packages:
|
|||||||
- bat
|
- bat
|
||||||
- jq
|
- jq
|
||||||
- duf
|
- duf
|
||||||
# media / preview (yazi deps)
|
# media / preview (yazi + tv deps)
|
||||||
- ffmpeg
|
- ffmpeg
|
||||||
- ffmpegthumbnailer
|
- ffmpegthumbnailer
|
||||||
- poppler
|
- poppler
|
||||||
- resvg
|
- resvg
|
||||||
- imagemagick
|
- imagemagick
|
||||||
|
- chafa
|
||||||
- 7zip
|
- 7zip
|
||||||
- unzip
|
- unzip
|
||||||
|
# remote
|
||||||
|
- mosh
|
||||||
|
- sshfs
|
||||||
|
- tailscale
|
||||||
# misc cli
|
# misc cli
|
||||||
|
- mise
|
||||||
- gum
|
- gum
|
||||||
- glow
|
- glow
|
||||||
- atuin
|
- atuin
|
||||||
@@ -47,27 +65,74 @@ packages:
|
|||||||
- ttf-victor-mono-nerd
|
- ttf-victor-mono-nerd
|
||||||
aur:
|
aur:
|
||||||
- topgrade
|
- topgrade
|
||||||
|
- portop
|
||||||
desktop:
|
desktop:
|
||||||
# linux desktop layer (role desktop|laptop)
|
# linux desktop layer (role desktop|laptop)
|
||||||
pacman:
|
pacman:
|
||||||
- niri
|
- niri
|
||||||
|
- xwayland-satellite
|
||||||
|
- polkit-gnome
|
||||||
|
- uwsm
|
||||||
- xdg-user-dirs
|
- xdg-user-dirs
|
||||||
|
# wayland utilities the compositor configs and ~/.local/bin scripts call
|
||||||
|
- wl-clipboard
|
||||||
|
- cliphist
|
||||||
|
- wtype
|
||||||
|
- ydotool
|
||||||
|
- grim
|
||||||
|
- slurp
|
||||||
|
- hyprpicker
|
||||||
|
- pamixer
|
||||||
|
- brightnessctl
|
||||||
|
- libnotify
|
||||||
|
# desktop apps bound in niri/hypr
|
||||||
|
- nautilus
|
||||||
|
- imv
|
||||||
|
- mpv
|
||||||
|
- evince
|
||||||
|
- chromium
|
||||||
|
- obsidian
|
||||||
aur:
|
aur:
|
||||||
- noctalia-shell
|
- noctalia-git
|
||||||
- vicinae-bin
|
- vicinae-bin
|
||||||
|
- beeper-bin
|
||||||
|
- fastmail
|
||||||
|
- tldraw-offline-bin
|
||||||
|
# [omarchy] pacman repo (pkgs.omarchy.org); installed only when that repo
|
||||||
|
# is configured. Hyprland, waybar and the omarchy-* scripts come with
|
||||||
|
# the Omarchy install itself and are not listed.
|
||||||
|
omarchy:
|
||||||
|
- herdr
|
||||||
|
- flea
|
||||||
|
- voxtype-bin
|
||||||
|
- xdg-terminal-exec
|
||||||
|
- hyprland-preview-share-picker
|
||||||
|
- brave-origin-bin
|
||||||
|
- claude-desktop
|
||||||
|
- 1password
|
||||||
|
- spotify
|
||||||
darwin:
|
darwin:
|
||||||
brew:
|
brew:
|
||||||
- fish
|
- fish
|
||||||
- neovim
|
- neovim
|
||||||
|
- helix
|
||||||
- tmux
|
- tmux
|
||||||
- yazi
|
- yazi
|
||||||
- lazygit
|
- lazygit
|
||||||
- lazydocker
|
- lazydocker
|
||||||
- btop
|
- btop
|
||||||
- fastfetch
|
- fastfetch
|
||||||
|
- onefetch
|
||||||
|
- television
|
||||||
|
- serie
|
||||||
|
- tig
|
||||||
|
- gitui
|
||||||
|
- tldr
|
||||||
|
- navi
|
||||||
- git
|
- git
|
||||||
- gh
|
- gh
|
||||||
- git-delta
|
- git-delta
|
||||||
|
- tea
|
||||||
- fzf
|
- fzf
|
||||||
- fd
|
- fd
|
||||||
- ripgrep
|
- ripgrep
|
||||||
@@ -81,7 +146,10 @@ packages:
|
|||||||
- poppler
|
- poppler
|
||||||
- resvg
|
- resvg
|
||||||
- imagemagick
|
- imagemagick
|
||||||
|
- chafa
|
||||||
- sevenzip
|
- sevenzip
|
||||||
|
- mosh
|
||||||
|
- mise
|
||||||
- gum
|
- gum
|
||||||
- glow
|
- glow
|
||||||
- atuin
|
- atuin
|
||||||
@@ -97,6 +165,7 @@ packages:
|
|||||||
- prdlk/gh-commit
|
- prdlk/gh-commit
|
||||||
- dlvhdr/gh-dash
|
- dlvhdr/gh-dash
|
||||||
- meiji163/gh-notify
|
- meiji163/gh-notify
|
||||||
go: []
|
# cargo installs (run_onchange_after_40-post), skipped when cargo is absent
|
||||||
cargo:
|
cargo:
|
||||||
- suvadu
|
- suvadu
|
||||||
|
- mandible
|
||||||
@@ -7,3 +7,12 @@ if command -v bat >/dev/null 2>&1; then bat cache --build >/dev/null || true; fi
|
|||||||
{{ if eq .chezmoi.os "linux" -}}
|
{{ if eq .chezmoi.os "linux" -}}
|
||||||
if command -v fc-cache >/dev/null 2>&1; then fc-cache -f >/dev/null || true; fi
|
if command -v fc-cache >/dev/null 2>&1; then fc-cache -f >/dev/null || true; fi
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
|
|
||||||
|
# cargo installs from packages.shared.cargo; skipped when cargo is absent.
|
||||||
|
# cargo hash: {{ .packages.shared.cargo | toJson | sha256sum }}
|
||||||
|
if command -v cargo >/dev/null 2>&1; then
|
||||||
|
installed=$(cargo install --list | awk '/^[^ ]/{print $1}')
|
||||||
|
{{ range .packages.shared.cargo }}
|
||||||
|
echo "$installed" | grep -qx "{{ . }}" || cargo install --locked "{{ . }}"
|
||||||
|
{{ end }}
|
||||||
|
fi
|
||||||
@@ -6,26 +6,37 @@ set -eu
|
|||||||
{{ if eq .chezmoi.os "linux" -}}
|
{{ if eq .chezmoi.os "linux" -}}
|
||||||
if [ "$(id -u)" -eq 0 ]; then PACMAN="pacman"; else PACMAN="sudo pacman"; fi
|
if [ "$(id -u)" -eq 0 ]; then PACMAN="pacman"; else PACMAN="sudo pacman"; fi
|
||||||
|
|
||||||
# shellcheck disable=SC2086 # word splitting intended
|
# Install only what no installed package already provides (`pacman -T`), so a
|
||||||
$PACMAN -S --needed --noconfirm \
|
# machine with mise-bin or yazi-git is not asked to replace them with mise/yazi.
|
||||||
{{ range .packages.arch.pacman }} {{ . }} \
|
install_missing() {
|
||||||
{{ end }} && true
|
missing=$(pacman -T "$@" || true)
|
||||||
|
# shellcheck disable=SC2086 # word splitting intended
|
||||||
|
[ -z "$missing" ] || $PACMAN -S --needed --noconfirm $missing
|
||||||
|
}
|
||||||
|
|
||||||
|
install_missing {{ range .packages.arch.pacman }}{{ . }} {{ end }}
|
||||||
|
|
||||||
{{ if or (eq .role "desktop") (eq .role "laptop") -}}
|
{{ if or (eq .role "desktop") (eq .role "laptop") -}}
|
||||||
$PACMAN -S --needed --noconfirm \
|
install_missing {{ range .packages.arch.desktop.pacman }}{{ . }} {{ end }}
|
||||||
{{ range .packages.arch.desktop.pacman }} {{ . }} \
|
|
||||||
{{ end }} && true
|
# [omarchy] repo packages — only where pacman.conf has that repo
|
||||||
|
if pacman-conf -l | grep -qx omarchy; then
|
||||||
|
install_missing {{ range .packages.arch.desktop.omarchy }}{{ . }} {{ end }}
|
||||||
|
fi
|
||||||
|
|
||||||
aur_pkgs="{{ range .packages.arch.desktop.aur }}{{ . }} {{ end }}{{ range .packages.arch.aur }}{{ . }} {{ end }}"
|
aur_pkgs="{{ range .packages.arch.desktop.aur }}{{ . }} {{ end }}{{ range .packages.arch.aur }}{{ . }} {{ end }}"
|
||||||
{{ else -}}
|
{{ else -}}
|
||||||
aur_pkgs="{{ range .packages.arch.aur }}{{ . }} {{ end }}"
|
aur_pkgs="{{ range .packages.arch.aur }}{{ . }} {{ end }}"
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
if [ -n "$(echo "$aur_pkgs" | tr -d ' ')" ]; then
|
if [ -n "$(echo "$aur_pkgs" | tr -d ' ')" ]; then
|
||||||
if command -v paru >/dev/null 2>&1; then
|
if command -v yay >/dev/null 2>&1; then AUR="yay"
|
||||||
|
elif command -v paru >/dev/null 2>&1; then AUR="paru"
|
||||||
|
else AUR=""; fi
|
||||||
|
if [ -n "$AUR" ]; then
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
paru -S --needed --noconfirm $aur_pkgs
|
$AUR -S --needed --noconfirm $aur_pkgs
|
||||||
else
|
else
|
||||||
echo "warning: paru not found — skipping AUR packages: $aur_pkgs" >&2
|
echo "warning: yay/paru not found — skipping AUR packages: $aur_pkgs" >&2
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,21 @@ Pulling a remote change before the refresh window: `chezmoi apply --refresh-exte
|
|||||||
4. `mv ~/.config/<app> /tmp/bak && chezmoi apply --force ~/.config/<app>`; diff against the repo, then delete the backup.
|
4. `mv ~/.config/<app> /tmp/bak && chezmoi apply --force ~/.config/<app>`; diff against the repo, then delete the backup.
|
||||||
5. Update `docs/` (the tool's page, `docs/terminal/index.mdx` or sibling index, `docs/chezmoi/externals-and-ignore.mdx`) and any alias pointing at the old source path (`dot_config/fish/conf.d/20-aliases.fish`, `.chezmoidata/aliases.yaml`).
|
5. Update `docs/` (the tool's page, `docs/terminal/index.mdx` or sibling index, `docs/chezmoi/externals-and-ignore.mdx`) and any alias pointing at the old source path (`dot_config/fish/conf.d/20-aliases.fish`, `.chezmoidata/aliases.yaml`).
|
||||||
|
|
||||||
|
## Packages: every referenced tool must be declared
|
||||||
|
|
||||||
|
`.chezmoidata/packages.yaml` is the install manifest; the goal is `chezmoi init --apply` on a fresh Arch (Omarchy) machine yields a working setup. When a config, script, tmux-palette item, television cable `requirements`, or compositor binding starts calling a new binary, declare its package in the same change:
|
||||||
|
|
||||||
|
| Key | Installed by | When |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `arch.pacman` / `arch.aur` | `10-packages` (pacman / `yay` or `paru`) | 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 |
|
||||||
|
|
||||||
|
Find the package with `pacman -Qo "$(command -v <bin>)"`; `pacman -Qm` lists AUR/foreign packages, `pacman -Si <pkg>` shows the repo (`extra` vs `omarchy`). Verify names before committing: `pacman -Si` for repo packages, `https://aur.archlinux.org/rpc/v5/info?arg[]=<pkg>` for AUR, `https://formulae.brew.sh/api/formula/<name>.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.
|
||||||
|
|
||||||
## Verify
|
## Verify
|
||||||
|
|
||||||
- `chezmoi diff` empty after apply.
|
- `chezmoi diff` empty after apply.
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ layer (niri, noctalia, fontconfig, systemd user units) — `mac` and
|
|||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
- **Arch**: `paru` for AUR packages (optional — the install script warns
|
- **Arch**: `yay` or `paru` for AUR packages (optional — the install script
|
||||||
and skips AUR if missing). `sudo` for pacman.
|
warns and skips AUR if missing). `sudo` for pacman.
|
||||||
- **macOS**: [Homebrew](https://brew.sh).
|
- **macOS**: [Homebrew](https://brew.sh).
|
||||||
- **Secrets**: `age`-encrypted files need the key at
|
- **Secrets**: `age`-encrypted files need the key at
|
||||||
`~/.config/chezmoi/key.txt`. Copy it there **before** `chezmoi apply`
|
`~/.config/chezmoi/key.txt`. Copy it there **before** `chezmoi apply`
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ The `*Once` functions only prompt when the key is missing from the existing conf
|
|||||||
|
|
||||||
### Machine roles
|
### Machine roles
|
||||||
|
|
||||||
| Role | Intended platform | Linux desktop layer | Desktop packages (`niri`, `xdg-user-dirs`, `noctalia-shell`, `vicinae-bin`) |
|
| Role | Intended platform | Linux desktop layer | Desktop packages (`packages.arch.desktop`) |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| `desktop` | Arch Linux | Applied | Installed |
|
| `desktop` | Arch Linux | Applied | Installed |
|
||||||
| `laptop` | Arch Linux | Applied | Installed |
|
| `laptop` | Arch Linux | Applied | Installed |
|
||||||
@@ -82,7 +82,7 @@ The `[data]` table exposes `.name`, `.email`, and `.role` to every template. che
|
|||||||
| `.role` | `.chezmoiscripts/run_onchange_before_10-packages.sh.tmpl` | Adds the `arch.desktop` pacman and AUR packages for `desktop`/`laptop` |
|
| `.role` | `.chezmoiscripts/run_onchange_before_10-packages.sh.tmpl` | Adds the `arch.desktop` pacman and AUR packages for `desktop`/`laptop` |
|
||||||
| `.chezmoi.os` | `.chezmoi.toml.tmpl` | Role default (`mac` on darwin) |
|
| `.chezmoi.os` | `.chezmoi.toml.tmpl` | Role default (`mac` on darwin) |
|
||||||
| `.chezmoi.os` | `.chezmoiignore.tmpl` | Desktop layer requires `linux` |
|
| `.chezmoi.os` | `.chezmoiignore.tmpl` | Desktop layer requires `linux` |
|
||||||
| `.chezmoi.os` | `run_onchange_before_10-packages.sh.tmpl` | pacman/paru on `linux`, Homebrew on `darwin` |
|
| `.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_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` | `run_onchange_after_40-post.sh.tmpl` | `fc-cache` on `linux` only |
|
||||||
|
|
||||||
|
|||||||
+16
-12
@@ -13,7 +13,7 @@ Files in `.chezmoidata/` are merged into chezmoi's template data on every run. N
|
|||||||
|
|
||||||
## packages.yaml [#packagesyaml]
|
## packages.yaml [#packagesyaml]
|
||||||
|
|
||||||
One manifest per platform, plus a `shared` block. Any edit to the file changes the hash embedded in the package script, so the next `chezmoi apply` re-runs the install. Installs are idempotent (`pacman --needed`, `paru --needed`, `brew install` on already-installed formulae).
|
One manifest per platform, plus a `shared` block. Any edit to the file changes the hash embedded in the package script, so the next `chezmoi apply` re-runs the install. Installs are idempotent (`pacman --needed`, `yay`/`paru --needed`, `brew install` on already-installed formulae). The lists are derived from what the configs actually invoke: tmux-palette items, television cable `requirements`, fish functions, `~/.local/bin` scripts, and compositor bindings.
|
||||||
|
|
||||||
<Tabs>
|
<Tabs>
|
||||||
<Tab title="Arch">
|
<Tab title="Arch">
|
||||||
@@ -22,34 +22,38 @@ One manifest per platform, plus a `shared` block. Any edit to the file changes t
|
|||||||
|
|
||||||
| Group | Packages |
|
| Group | Packages |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| Shell and editors | `fish`, `neovim`, `tmux`, `micro` |
|
| Shell and editors | `fish`, `neovim`, `helix`, `micro`, `tmux` |
|
||||||
| Terminal | `kitty` |
|
| Terminal | `kitty` |
|
||||||
| TUI tools | `yazi`, `lazygit`, `lazydocker`, `btop`, `fastfetch` |
|
| TUI tools (tmux-palette, television cables) | `yazi`, `lazygit`, `lazydocker`, `docker`, `docker-compose`, `btop`, `fastfetch`, `onefetch`, `television`, `serie`, `tig`, `gitui`, `tldr`, `navi`, `mdfried` |
|
||||||
| VCS and forge | `git`, `github-cli`, `git-delta`, `diffnav` |
|
| VCS and forge | `git`, `github-cli`, `git-delta`, `diffnav`, `tea` |
|
||||||
| Search and files | `fzf`, `fd`, `ripgrep`, `zoxide`, `eza`, `bat`, `jq`, `duf` |
|
| Search and files | `fzf`, `fd`, `ripgrep`, `zoxide`, `eza`, `bat`, `jq`, `duf` |
|
||||||
| Media and preview (yazi deps) | `ffmpeg`, `ffmpegthumbnailer`, `poppler`, `resvg`, `imagemagick`, `7zip`, `unzip` |
|
| Media and preview (yazi and tv deps) | `ffmpeg`, `ffmpegthumbnailer`, `poppler`, `resvg`, `imagemagick`, `chafa`, `7zip`, `unzip` |
|
||||||
| Misc CLI | `gum`, `glow`, `atuin`, `wget`, `starship`, `zsh-syntax-highlighting` |
|
| Remote | `mosh`, `sshfs`, `tailscale` |
|
||||||
|
| Misc CLI | `mise`, `gum`, `glow`, `atuin`, `wget`, `starship`, `zsh-syntax-highlighting` |
|
||||||
| Fonts | `ttf-victor-mono-nerd` |
|
| Fonts | `ttf-victor-mono-nerd` |
|
||||||
|
|
||||||
`packages.arch.aur`, installed with `paru -S --needed --noconfirm` on every Linux machine: `topgrade`.
|
`packages.arch.aur`, installed with `yay -S --needed --noconfirm` (or `paru`) on every Linux machine: `topgrade`, `portop`.
|
||||||
|
|
||||||
`packages.arch.desktop`, added only for roles `desktop` and `laptop`:
|
`packages.arch.desktop`, added only for roles `desktop` and `laptop`:
|
||||||
|
|
||||||
| Source | Packages |
|
| Source | Packages |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| pacman | `niri`, `xdg-user-dirs` |
|
| 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-shell`, `vicinae-bin` |
|
| 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` |
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
</Tab>
|
</Tab>
|
||||||
<Tab title="macOS">
|
<Tab title="macOS">
|
||||||
|
|
||||||
`packages.darwin.brew`, installed with `brew install`:
|
`packages.darwin.brew`, installed with `brew install`:
|
||||||
|
|
||||||
`fish`, `neovim`, `tmux`, `yazi`, `lazygit`, `lazydocker`, `btop`, `fastfetch`, `git`, `gh`, `git-delta`, `fzf`, `fd`, `ripgrep`, `zoxide`, `eza`, `bat`, `jq`, `duf`, `ffmpeg`, `ffmpegthumbnailer`, `poppler`, `resvg`, `imagemagick`, `sevenzip`, `gum`, `glow`, `atuin`, `starship`, `zsh-syntax-highlighting`, `topgrade`
|
`fish`, `neovim`, `helix`, `tmux`, `yazi`, `lazygit`, `lazydocker`, `btop`, `fastfetch`, `onefetch`, `television`, `serie`, `tig`, `gitui`, `tldr`, `navi`, `git`, `gh`, `git-delta`, `tea`, `fzf`, `fd`, `ripgrep`, `zoxide`, `eza`, `bat`, `jq`, `duf`, `ffmpeg`, `ffmpegthumbnailer`, `poppler`, `resvg`, `imagemagick`, `chafa`, `sevenzip`, `mosh`, `mise`, `gum`, `glow`, `atuin`, `starship`, `zsh-syntax-highlighting`, `topgrade`
|
||||||
|
|
||||||
`packages.darwin.cask`, installed with `brew install --cask`: `kitty`, `font-victor-mono-nerd-font`.
|
`packages.darwin.cask`, installed with `brew install --cask`: `kitty`, `font-victor-mono-nerd-font`.
|
||||||
|
|
||||||
Compared with Arch, macOS has no `micro`, `diffnav`, `unzip`, or `wget`, and gets `topgrade` from Homebrew instead of the AUR. The role does not change the macOS list.
|
Compared with Arch, macOS has no `micro`, `diffnav`, `mdfried`, `docker`, `sshfs`, `tailscale`, `unzip`, or `wget`, and gets `topgrade` from Homebrew instead of the AUR. The role does not change the macOS list.
|
||||||
|
|
||||||
</Tab>
|
</Tab>
|
||||||
<Tab title="Shared">
|
<Tab title="Shared">
|
||||||
@@ -63,7 +67,7 @@ Compared with Arch, macOS has no `micro`, `diffnav`, `unzip`, or `wget`, and get
|
|||||||
| `dlvhdr/gh-dash` | `gh dash`: PR and issue dashboard |
|
| `dlvhdr/gh-dash` | `gh dash`: PR and issue dashboard |
|
||||||
| `meiji163/gh-notify` | `gh notify`: notifications in the terminal |
|
| `meiji163/gh-notify` | `gh notify`: notifications in the terminal |
|
||||||
|
|
||||||
`packages.shared.go` is an empty list. `packages.shared.cargo` lists `suvadu`. No script in the repo reads either key; they document intent only, and cargo installs are kept current by topgrade's `[cargo]` step.
|
`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.
|
||||||
|
|
||||||
</Tab>
|
</Tab>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ Six scripts run during `chezmoi apply`. Four live in `.chezmoiscripts/`, a direc
|
|||||||
<Step title="20-gh-extensions (after, onchange)">Install gh extensions.</Step>
|
<Step title="20-gh-extensions (after, onchange)">Install gh extensions.</Step>
|
||||||
<Step title="25-skills (after, onchange)">Install and prune agent skills.</Step>
|
<Step title="25-skills (after, onchange)">Install and prune agent skills.</Step>
|
||||||
<Step title="30-user-services (after, once)">Enable systemd user units on Linux (nirinit, kitty-day-save, projects-sync.timer).</Step>
|
<Step title="30-user-services (after, once)">Enable systemd user units on Linux (nirinit, kitty-day-save, projects-sync.timer).</Step>
|
||||||
<Step title="40-post (after, onchange)">bat cache, font cache.</Step>
|
<Step title="40-post (after, onchange)">bat cache, font cache, cargo installs.</Step>
|
||||||
<Step title="build-bat-cache (after, onchange)">Rebuild bat cache when its theme or config changes.</Step>
|
<Step title="build-bat-cache (after, onchange)">Rebuild bat cache when its theme or config changes.</Step>
|
||||||
<Step title="install-yazi-plugins (after, onchange)">Reinstall yazi plugins when the manifest changes.</Step>
|
<Step title="install-yazi-plugins (after, onchange)">Reinstall yazi plugins when the manifest changes.</Step>
|
||||||
</Steps>
|
</Steps>
|
||||||
@@ -26,7 +26,7 @@ Six scripts run during `chezmoi apply`. Four live in `.chezmoiscripts/`, a direc
|
|||||||
| `.chezmoiscripts/run_onchange_after_20-gh-extensions.sh.tmpl` | after | onchange | sha256 of `packages.shared.gh_extensions` as JSON |
|
| `.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_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_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 | Only edits to the script itself (or an OS change) |
|
| `.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 |
|
||||||
| `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_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) |
|
| `run_onchange_after_install-yazi-plugins.sh.tmpl` | after | onchange | sha256 of `~/.config/yazi/package.toml` (empty when the file is absent) |
|
||||||
|
|
||||||
@@ -46,10 +46,10 @@ Six scripts run during `chezmoi apply`. Four live in `.chezmoiscripts/`, a direc
|
|||||||
<Tab title="Linux">
|
<Tab title="Linux">
|
||||||
|
|
||||||
1. Uses `pacman` directly when running as root, otherwise `sudo pacman`.
|
1. Uses `pacman` directly when running as root, otherwise `sudo pacman`.
|
||||||
2. `pacman -S --needed --noconfirm` with every entry in `packages.arch.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`, a second `pacman -S --needed --noconfirm` with `packages.arch.desktop.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.
|
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 and `paru` exists, runs `paru -S --needed --noconfirm` on it. Without `paru` it prints `warning: paru not found — skipping AUR packages: …` and continues.
|
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.
|
||||||
|
|
||||||
</Tab>
|
</Tab>
|
||||||
<Tab title="macOS">
|
<Tab title="macOS">
|
||||||
@@ -101,12 +101,13 @@ Other personal automation units (brain-lens, omp-loop, rclone, hermes, voxtype)
|
|||||||
|
|
||||||
## 40-post [#40-post]
|
## 40-post [#40-post]
|
||||||
|
|
||||||
`.chezmoiscripts/run_onchange_after_40-post.sh.tmpl` is post-apply housekeeping. It has no hash comment, so it only re-runs when the script itself is edited.
|
`.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.
|
||||||
|
|
||||||
| Step | Condition | Action |
|
| Step | Condition | Action |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| bat cache | `bat` installed | `bat cache --build` |
|
| bat cache | `bat` installed | `bat cache --build` |
|
||||||
| Font cache | Linux, `fc-cache` installed | `fc-cache -f` |
|
| Font cache | Linux, `fc-cache` installed | `fc-cache -f` |
|
||||||
|
| cargo | `cargo` installed | `cargo install --locked <crate>` 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.
|
Each step ignores failures (`|| true`). tpm is cloned by [`.chezmoiexternal.toml`](/chezmoi/externals-and-ignore#externals), not here.
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,8 @@ Two Wayland compositors are configured side by side. niri is the original setup,
|
|||||||
|
|
||||||
| Source | Packages |
|
| Source | Packages |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| pacman | `niri`, `xdg-user-dirs` |
|
| 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 `paru`) | `noctalia-shell`, `vicinae-bin` |
|
| 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` |
|
||||||
|
|
||||||
The script skips AUR packages with a warning if `paru` is not 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.
|
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.
|
||||||
@@ -55,9 +55,9 @@ Linux `desktop` and `laptop` roles only. `.chezmoiignore.tmpl` skips `~/.config/
|
|||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
- `niri` and `xdg-user-dirs` from pacman, `noctalia-shell` 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`, `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).
|
||||||
- `.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.
|
- `.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: `cliphist`/`wl-paste`, `polkit-gnome`, `kbuildsycoca6`, `voxtype`, `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. [vicinae](/desktop/vicinae) is installed and configured here.
|
- 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.
|
||||||
|
|
||||||
## Load order
|
## Load order
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ The script checks the release tarball's SHA-256 before installing, as upstream d
|
|||||||
|
|
||||||
<Steps>
|
<Steps>
|
||||||
<Step title="Package manager">
|
<Step title="Package manager">
|
||||||
**Arch**: `sudo` for pacman. `paru` is needed for AUR packages (`topgrade`, and `noctalia-shell` / `vicinae-bin` on desktop roles); without it the package script prints a warning and skips them.
|
**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.
|
||||||
**macOS**: [Homebrew](https://brew.sh) is required; the package script exits with an error if `brew` is missing.
|
**macOS**: [Homebrew](https://brew.sh) is required; the package script exits with an error if `brew` is missing.
|
||||||
</Step>
|
</Step>
|
||||||
<Step title="GitHub access">
|
<Step title="GitHub access">
|
||||||
@@ -79,7 +79,7 @@ sh -c "$(curl -fsSL https://dots.prd.lk/install)" -- --version
|
|||||||
`.chezmoi.toml.tmpl` asks once for **name**, **email**, and **role** (`desktop`, `laptop`, `mac`, `server`). Answers are stored in `~/.config/chezmoi/chezmoi.toml` and not asked again. See [Configuration](/chezmoi/config).
|
`.chezmoi.toml.tmpl` asks once for **name**, **email**, and **role** (`desktop`, `laptop`, `mac`, `server`). Answers are stored in `~/.config/chezmoi/chezmoi.toml` and not asked again. See [Configuration](/chezmoi/config).
|
||||||
</Step>
|
</Step>
|
||||||
<Step title="Packages">
|
<Step title="Packages">
|
||||||
`run_onchange_before_10-packages` installs everything in `.chezmoidata/packages.yaml` with pacman/paru or Homebrew before any file is written. See [Scripts](/chezmoi/scripts).
|
`run_onchange_before_10-packages` installs everything in `.chezmoidata/packages.yaml` with pacman/yay or Homebrew before any file is written. See [Scripts](/chezmoi/scripts).
|
||||||
</Step>
|
</Step>
|
||||||
<Step title="Files and externals">
|
<Step title="Files and externals">
|
||||||
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).
|
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).
|
||||||
|
|||||||
@@ -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. |
|
| `wget` | HTTP downloads | Not referenced by any config. |
|
||||||
| `zsh-syntax-highlighting` | zsh highlighting | Sourced by the zsh setup. See [Shell](/shell). |
|
| `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). |
|
| `ttf-victor-mono-nerd` / `font-victor-mono-nerd-font` | Nerd Font | Terminal font. See [Terminal](/terminal). |
|
||||||
| `suvadu` | Declared under `packages.shared.cargo` | No install script reads the `cargo` list, so it is not installed automatically. |
|
| `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`. |
|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
|
|||||||
+1
-1
Submodule dot_config/fish updated: 3eeef30313...a6c8d02344.
Reference in new issue
Block a user