From fd1e822450c66e073e54ba2eace4173663056890 Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Fri, 16 Oct 2026 11:50:59 -0400 Subject: [PATCH] docs(docs): add vicinae documentation and update references --- docs/chezmoi/config.mdx | 2 +- docs/chezmoi/data.mdx | 4 +- docs/chezmoi/externals-and-ignore.mdx | 11 +---- docs/chezmoi/index.mdx | 4 +- docs/desktop/index.mdx | 5 ++- docs/desktop/meta.ts | 2 +- docs/desktop/niri.mdx | 4 +- docs/desktop/vicinae.mdx | 59 +++++++++++++++++++++++++++ docs/installation.mdx | 2 +- docs/shell/aliases.mdx | 2 +- docs/shell/scripts.mdx | 30 ++++++++++++++ docs/terminal/ghostty.mdx | 6 ++- docs/terminal/index.mdx | 4 +- docs/terminal/kitty.mdx | 10 ++--- docs/terminal/tmux.mdx | 8 ++-- 15 files changed, 119 insertions(+), 34 deletions(-) create mode 100644 docs/desktop/vicinae.mdx diff --git a/docs/chezmoi/config.mdx b/docs/chezmoi/config.mdx index 32ed8bb..1b20c40 100644 --- a/docs/chezmoi/config.mdx +++ b/docs/chezmoi/config.mdx @@ -40,7 +40,7 @@ The `*Once` functions only prompt when the key is missing from the existing conf ### Machine roles -| Role | Intended platform | Linux desktop layer | Desktop packages (`niri`, `xdg-user-dirs`, `noctalia-shell`) | +| Role | Intended platform | Linux desktop layer | Desktop packages (`niri`, `xdg-user-dirs`, `noctalia-shell`, `vicinae-bin`) | | --- | --- | --- | --- | | `desktop` | Arch Linux | Applied | Installed | | `laptop` | Arch Linux | Applied | Installed | diff --git a/docs/chezmoi/data.mdx b/docs/chezmoi/data.mdx index 266e333..b69d8ec 100644 --- a/docs/chezmoi/data.mdx +++ b/docs/chezmoi/data.mdx @@ -38,7 +38,7 @@ One manifest per platform, plus a `shared` block. Any edit to the file changes t | Source | Packages | | --- | --- | | pacman | `niri`, `xdg-user-dirs` | -| AUR | `noctalia-shell` | +| AUR | `noctalia-shell`, `vicinae-bin` | @@ -163,7 +163,7 @@ See [bash and zsh](/shell) for the rest of those files. | `e.d` | `cd ~/.config/dotstate/storage/Rogz/.config && yazi` | not defined | | `e.f` | `cd ~/.config/fish && yazi` | `cd ~/.local/share/chezmoi/dot_config/fish && yazi` | | `e.h` | not defined | `cd ~/.local/share/chezmoi/dot_config/hypr && yazi` | -| `e.k` | `yazi ~/.config/kitty` | `yazi ~/.local/share/chezmoi/dot_config/kitty` | +| `e.k` | `yazi ~/.config/kitty` | ✓ | | `e.n` | `yazi ~/.config/niri` | `yazi ~/.local/share/chezmoi/dot_config/niri` | | `e.y` | `yazi ~/.config/yazi` | ✓ | | `e.t` | `nvim ~/.config/tmux/tmux.conf` | ✓ | diff --git a/docs/chezmoi/externals-and-ignore.mdx b/docs/chezmoi/externals-and-ignore.mdx index 1cb1bc2..c50151f 100644 --- a/docs/chezmoi/externals-and-ignore.mdx +++ b/docs/chezmoi/externals-and-ignore.mdx @@ -58,6 +58,8 @@ Per-app config repos, one file each in `.chezmoiexternals/.toml`. Each is a | `tmux-palette.toml` | `~/.config/tmux-palette` | [prdlk/tmux-palette](https://github.com/prdlk/tmux-palette) | | `television.toml` | `~/.config/television` | [prdlk/television](https://github.com/prdlk/television) | | `yazi.toml` | `~/.config/yazi` | [prdlk/yazi](https://github.com/prdlk/yazi) | +| `kitty.toml` | `~/.config/kitty` | [prdlk/kitty](https://github.com/prdlk/kitty) | +| `ghostty.toml` | `~/.config/ghostty` | [prdlk/ghostty](https://github.com/prdlk/ghostty) | Edit these in place under `~/.config/`, then commit and push from that checkout. @@ -162,12 +164,3 @@ See [Desktop](/desktop/niri) for what the layer contains. Gaps in the gate: the ``` noctalia writes plugin state containing embedded tokens here. These paths are ignored on every machine so tokens are never pulled into the repo. - -### Python byte-cache - -```txt -.config/kitty/__pycache__ -.config/kitty/__pycache__/** -``` - -kitty imports `tab_bar.py` and the other Python helpers in `~/.config/kitty`, and Python writes `__pycache__` next to them. In symlink mode that directory would otherwise appear in the source tree. diff --git a/docs/chezmoi/index.mdx b/docs/chezmoi/index.mdx index cdf29a6..6520942 100644 --- a/docs/chezmoi/index.mdx +++ b/docs/chezmoi/index.mdx @@ -107,7 +107,7 @@ chezmoi encodes target names and attributes in source file names. These are the | `executable_` | Target gets the executable bit | 44 files: every script in `dot_local/bin/` (including `executable_tmux-niri-title`) and `dot_config/niri/scripts/` | | `exact_` | Directory is exact: entries in the target that are not in the source are deleted | `dot_config/niri/exact_config.d/` (numbered `10-…kdl` through `95-…kdl` fragments) | | `empty_` | File is kept even when empty | `dot_config/herdr/empty_dot_plugins.lock` | -| `symlink_` | Target is a symlink; file content is the link destination | `dot_config/kitty/symlink_current-theme.conf` (→ `themes/cyberdream.conf`) | +| `symlink_` | Target is a symlink; file content is the link destination | None currently | | `.tmpl` | Rendered with Go templates and chezmoi data | `dot_gitconfig.tmpl`, `dot_config/shell/aliases.sh.tmpl`, all scripts, the config and ignore files | | `run_once_` / `run_onchange_` + `before_` / `after_` | Script, with run frequency and phase | See [Apply scripts](/chezmoi/scripts) | @@ -119,7 +119,7 @@ Prefixes stack in chezmoi's fixed order, e.g. `private_dot_foo`, `executable_dot What that means in practice: -- Editing a plain file in `$HOME` (for example `~/.config/kitty/kitty.conf`) edits `~/.local/share/chezmoi/dot_config/kitty/kitty.conf` directly. The change is live and shows up in `git status` of the repo with no `chezmoi add` step. +- Editing a plain file in `$HOME` (for example `~/.config/niri/config.kdl`) edits `~/.local/share/chezmoi/dot_config/niri/config.kdl` directly. The change is live and shows up in `git status` of the repo with no `chezmoi add` step. - Templates are rendered copies. Editing `~/.gitconfig` or `~/.config/shell/aliases.sh` changes only the copy; the next `chezmoi apply` overwrites it. Edit the `.tmpl` source (`chezmoi edit ~/.gitconfig`) instead. - `private_` and `executable_` targets are real files too. After editing one in place, run `chezmoi re-add ` to copy it back into the source. - Tools that rewrite their own config write through the symlink into the repo. The runtime state that would otherwise pollute the source (plugin dirs, lock files, `fish_variables`, `__pycache__`) is excluded in `.chezmoiignore.tmpl` and `.gitignore`; see [Externals and ignore rules](/chezmoi/externals-and-ignore). diff --git a/docs/desktop/index.mdx b/docs/desktop/index.mdx index 28baa86..e1ae469 100644 --- a/docs/desktop/index.mdx +++ b/docs/desktop/index.mdx @@ -6,7 +6,7 @@ sidebar: --- :::note[Role gating] -`.chezmoiignore.tmpl` skips the Linux desktop layer unless the machine runs Linux **and** its role is `desktop` or `laptop`. The gated targets are `~/.config/niri`, `~/.config/hypr`, `~/.config/noctalia`, `~/.config/niri-dynamic-workspaces`, `~/.config/fontconfig`, `~/.config/mimeapps.list`, `~/.config/systemd`, `~/.local/bin/kitty-day-save`, `~/.local/bin/niri-launch`, `~/.local/bin/cp-appid`, `~/.local/bin/projects-sync`, and `~/.config/fish/auto-Niri.fish`. On `mac` and `server` roles these are not applied. +`.chezmoiignore.tmpl` skips the Linux desktop layer unless the machine runs Linux **and** its role is `desktop` or `laptop`. The gated targets are `~/.config/niri`, `~/.config/hypr`, `~/.config/noctalia`, `~/.config/vicinae`, `~/.config/niri-dynamic-workspaces`, `~/.config/fontconfig`, `~/.config/mimeapps.list`, `~/.config/systemd`, `~/.local/bin/kitty-day-save`, `~/.local/bin/niri-launch`, `~/.local/bin/cp-appid`, `~/.local/bin/projects-sync`, and `~/.config/fish/auto-Niri.fish`. On `mac` and `server` roles these are not applied. `~/.config/waybar`, the `omarchy-*` scripts, the `niri-launch-ai` / `-browser` / `-terminal` / `-webapp` wrappers, and `~/.local/bin/tmux-niri-title` are **not** listed there, so chezmoi applies them on every role and OS. Only the exact path `.local/bin/niri-launch` is ignored, not the wrappers that call it. ::: @@ -19,6 +19,7 @@ Two Wayland compositors are configured side by side. niri is the original setup, | [Hyprland](/desktop/hyprland) | `~/.config/hypr` Lua config on Omarchy: bindings, input, look and feel, monitors, hyprsunset, the portal; every `omarchy-*` script in `~/.local/bin` | | [Waybar](/desktop/waybar) | `~/.config/waybar`: module layout, stylesheet, the `window_pill.py` title module | | [Fonts and default apps](/desktop/fonts-and-apps) | `~/.config/fontconfig/fonts.conf`, `~/.config/mimeapps.list`, the Victor Mono Nerd Font packages | +| [vicinae](/desktop/vicinae) | `~/.config/vicinae/settings.json`: launcher keybindings, font, extension shortcuts and aliases | ## Packages @@ -27,6 +28,6 @@ Two Wayland compositors are configured side by side. niri is the original setup, | Source | Packages | | --- | --- | | pacman | `niri`, `xdg-user-dirs` | -| AUR (via `paru`) | `noctalia-shell` | +| AUR (via `paru`) | `noctalia-shell`, `vicinae-bin` | 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. diff --git a/docs/desktop/meta.ts b/docs/desktop/meta.ts index 34f573b..a4f6aa8 100644 --- a/docs/desktop/meta.ts +++ b/docs/desktop/meta.ts @@ -3,5 +3,5 @@ import { defineMeta } from "blume"; export default defineMeta({ title: "Desktop", icon: "monitor", - pages: ["index", "niri", "hyprland", "waybar", "fonts-and-apps"], + pages: ["index", "niri", "hyprland", "waybar", "fonts-and-apps", "vicinae"], }); diff --git a/docs/desktop/niri.mdx b/docs/desktop/niri.mdx index 9fe06aa..2c8e3d9 100644 --- a/docs/desktop/niri.mdx +++ b/docs/desktop/niri.mdx @@ -55,9 +55,9 @@ Linux `desktop` and `laptop` roles only. `.chezmoiignore.tmpl` skips `~/.config/ ## Installation -- `niri` and `xdg-user-dirs` from pacman, `noctalia-shell` 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` 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). - `.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: `vicinae`, `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. +- 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. ## Load order diff --git a/docs/desktop/vicinae.mdx b/docs/desktop/vicinae.mdx new file mode 100644 index 0000000..73ecc83 --- /dev/null +++ b/docs/desktop/vicinae.mdx @@ -0,0 +1,59 @@ +--- +title: vicinae +description: The vicinae launcher — global shortcuts, font, and per-extension aliases and shortcuts. +--- + +[vicinae](https://vicinae.com) is the launcher under both niri and Hyprland: app search, emoji picker, clipboard history, window switcher, and store extensions. + +| | | +| --- | --- | +| Source | `dot_config/vicinae/settings.json` | +| Target | `~/.config/vicinae/settings.json` | +| Install | `vicinae-bin` under `packages.arch.desktop.aur` in `.chezmoidata/packages.yaml` | + +:::note +Linux `desktop` and `laptop` roles only. `.chezmoiignore.tmpl` skips `~/.config/vicinae/**` on other roles. +::: + +`settings.json` is merged over `vicinae config default`. vicinae rewrites the file whenever a setting changes in its GUI, dropping comments and formatting; in symlink mode that write lands in the repo, so check `git status` after changing settings in the UI. + +Runtime state (`~/.local/share/vicinae`: clipboard database, extension installs, search history, favicons) is not managed. Extensions referenced below are installed from the vicinae store on each machine. + +## General + +| Option | Value | +| --- | --- | +| `keybinding` | `vim` | +| `close_on_focus_loss` / `pop_to_root_on_close` | `true` | +| `font.normal` | `VictorMono NFP` 9.5, `rendering = native` | +| `theme.dark.icon_theme` | `Yaru` | +| `launcher_window` | compact mode off, no floating status bar | + +## Shortcuts + +Global and per-entrypoint shortcuts. The compositor bindings in [niri](/desktop/niri) / [Hyprland](/desktop/hyprland) call `vicinae toggle` and deeplinks for the same features; these are vicinae's own bindings. + +| Key | Entrypoint | +| --- | --- | +| `super+SPACE` | `global_shortcuts.toggle` | +| `super+shift+SPACE` | `core` / search-emojis | +| `super+P` | `clipboard` / history | +| `super+A` | `system` / browse-apps | +| `alt+SPACE` | `@codingcodax/store.vicinae.omarchy-menu` | +| `super+control+shift+O` | `@aurelleb/store.vicinae.chromium-bookmarks` / search-bookmarks | + +## Aliases + +| Alias | Entrypoint | +| --- | --- | +| `apps` | `system` / browse-apps | +| `sh` | `system` / run | +| `pass` | `applications` / 1password | +| `photoshop`, `illustrator` | `applications` / photocraft, vectorcraft | +| `nf` | `@fbosch/store.vicinae.nerdfont-search` | +| `aur` | `@rithvikvibhu/store.vicinae.arch-packages` | +| `cql` | `manage-shortcuts` / create | +| `shut down`, `restart` | `power` / power-off, reboot | +| `streams` | `shortcuts` / `sct-a5e51f1bbe34` (a user shortcut; the id is machine-specific) | + +`system` / set-default-browser and set-default-terminal are disabled. diff --git a/docs/installation.mdx b/docs/installation.mdx index f16d4a0..9d9e9dd 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. `paru` is needed for AUR packages (`topgrade`, and `noctalia-shell` on desktop roles); without it the package script prints a warning and skips them. + **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. **macOS**: [Homebrew](https://brew.sh) is required; the package script exits with an error if `brew` is missing. diff --git a/docs/shell/aliases.mdx b/docs/shell/aliases.mdx index d4586b1..2954625 100644 --- a/docs/shell/aliases.mdx +++ b/docs/shell/aliases.mdx @@ -38,7 +38,7 @@ A ✓ means the alias exists in that shell with the command shown. Where fish us | `e.d` | `cd ~/.config/dotstate/storage/Rogz/.config && yazi` | not defined | | `e.f` | `cd ~/.config/fish && yazi` | `cd ~/.local/share/chezmoi/dot_config/fish && yazi` | | `e.h` | not defined | `cd ~/.local/share/chezmoi/dot_config/hypr && yazi` | -| `e.k` | `yazi ~/.config/kitty` | `yazi ~/.local/share/chezmoi/dot_config/kitty` | +| `e.k` | `yazi ~/.config/kitty` | ✓ | | `e.n` | `yazi ~/.config/niri` | `yazi ~/.local/share/chezmoi/dot_config/niri` | | `e.v` | `yazi ~/.config/nvim/lua` | ✓ | | `e.y` | `yazi ~/.config/yazi` | ✓ | diff --git a/docs/shell/scripts.mdx b/docs/shell/scripts.mdx index 9e7c624..a88badf 100644 --- a/docs/shell/scripts.mdx +++ b/docs/shell/scripts.mdx @@ -52,6 +52,7 @@ Several scripts below also exist as fish functions of the same name (`ai`, `c2p` | [`pj`](#pj) | bash | Task runner across every project task source, on a tv cable | | [`projects-sync`](#projects-sync) | bash | Symlink every `~/Code` repo into `~/Projects` | | [`pj-palette`](#pj-palette) | bash | pj's tasks plus quick actions as a tmux-palette source | +| [`tmux-sessions`](#tmux-sessions) | bash | Session/window/zoxide switcher as a tmux-palette source | | [`yazi-nvim-open`](#yazi-nvim-open) | sh | yazi opener that targets the host Neovim | ## ai @@ -404,6 +405,35 @@ The project root is the git toplevel, else the pane's directory. **Needs:** `pj` and its dependencies, `jq`, tmux. +## tmux-sessions + +```sh +tmux-sessions +tmux-sessions --new QUERY +tmux-sessions --dir DIR +``` + +The source of the **Sessions** [tmux command palette](/terminal/tmux#command-palette) (`palettes/sessions.json`), which replaced tmux-sessionx. Open it with tmux `prefix o`, Ghostty ctrl+shift+o or super+enter, or the "Sessions" item in the main palette. + +With no arguments it prints palette items as JSON, grouped by category: + +| Group | Items | Action | +| --- | --- | --- | +| Sessions | Every session but the current one, the client's last session first. Attached ones have a green icon | `switch-client` | +| Windows | Every window of every session, as `: · ` | `switch-client` to that window | +| Zoxide | `zoxide query -l` | `--dir` | +| Config | Directories in `~/.config` that zoxide does not list | `--dir` | +| Rename | One per session | `command-prompt` prefilled with the name | +| Kill | One per session except the current one | `kill-session` | + +pj-palette's background task sessions (`@pj_task`) are left out. Sessions are targeted by id, since names may contain `:`. + +**`--new QUERY`** is the palette's `query` item, the typed text listed after the matches. It switches to the session named QUERY if there is one. Otherwise it starts a session named QUERY in QUERY itself if that is a directory (via `--dir`), else in `zoxide query QUERY`'s match (QUERY's words are separate keywords), else in tmux's default directory. Typed text that matches nothing therefore lands on the `query` item, the same as sessionx's zoxide mode. + +**`--dir DIR`** switches to, or starts in DIR, the session named after DIR's basename with dots removed (sessionx's rule). + +**Needs:** tmux, `jq`, `zoxide`. + ## yazi-nvim-open ```sh diff --git a/docs/terminal/ghostty.mdx b/docs/terminal/ghostty.mdx index 629e362..431d67f 100644 --- a/docs/terminal/ghostty.mdx +++ b/docs/terminal/ghostty.mdx @@ -7,10 +7,12 @@ Ghostty is only a [tmux](/terminal/tmux) client. tmux owns tabs (windows), split | | | | --- | --- | -| Source | `dot_config/ghostty/config`, `dot_config/ghostty/config.ghostty`, `dot_config/ghostty/themes/` | +| Source | [prdlk/ghostty](https://github.com/prdlk/ghostty) via `.chezmoiexternals/ghostty.toml`: `config`, `config.ghostty`, `themes/` | | Target | `~/.config/ghostty/` | | Install | Not listed in `.chezmoidata/packages.yaml`; install separately | +`~/.config/ghostty` is a `git-repo` external checkout, not chezmoi-managed contents; edit it in place and commit and push from there. + Ghostty reads both `config` and `config.ghostty`. `config` holds all settings; `config.ghostty` contains a single line, `theme = cyberdream`, which selects the active theme. ## Options @@ -72,7 +74,7 @@ Closing a window only detaches its session; the shells keep running in the tmux | `ctrl+shift+tab` / `ctrl+page_up` / `ctrl+shift+left` / `ctrl+shift+h` | `prefix p` | Previous window | | `ctrl+shift+l` | `prefix v` | Split right | | `ctrl+shift+j` | `prefix h` | Split below | -| `ctrl+shift+o` | `prefix o` | Session picker (tmux-sessionx) | +| `ctrl+shift+o` / `super+enter` | `prefix o` | Sessions palette: switch session or window, or create one through zoxide | | `ctrl+shift+x` | `prefix x` | Kill pane | | `ctrl+shift+enter` / `ctrl+shift+z` | `prefix z` | Zoom pane | | `ctrl+shift+page_up` | `prefix [` | Copy mode | diff --git a/docs/terminal/index.mdx b/docs/terminal/index.mdx index e7dcef2..7f5d8f4 100644 --- a/docs/terminal/index.mdx +++ b/docs/terminal/index.mdx @@ -9,8 +9,8 @@ kitty is the primary terminal. It runs in three modes: plain kitty (kitty owns s | Page | Source | What it covers | | --- | --- | --- | -| [kitty](/terminal/kitty) | `dot_config/kitty/` | Main config, host configs (tmux, herdr, goliath), kittens, custom tab bar | -| [Ghostty](/terminal/ghostty) | `dot_config/ghostty/` | tmux-only terminal: ctrl+shift chords → tmux, themes | +| [kitty](/terminal/kitty) | external repo via `.chezmoiexternals/kitty.toml` | Main config, host configs (tmux, herdr, goliath), kittens, custom tab bar | +| [Ghostty](/terminal/ghostty) | external repo via `.chezmoiexternals/ghostty.toml` | tmux-only terminal: ctrl+shift chords → tmux, themes | | [tmux](/terminal/tmux) | external repo via `.chezmoiexternals/tmux.toml` | Prefix, bindings, kitty-style tabs with Nerd Font icons, resurrect/continuum persistence, Niri titles | | [herdr](/terminal/herdr) | `dot_config/herdr/`, `dot_config/herdr-nvim/` | Agent-aware multiplexer: keys, theme, plugins, Claude hook | diff --git a/docs/terminal/kitty.mdx b/docs/terminal/kitty.mdx index 16be222..1430538 100644 --- a/docs/terminal/kitty.mdx +++ b/docs/terminal/kitty.mdx @@ -7,18 +7,18 @@ GPU terminal emulator and the primary terminal on every role. | | | | --- | --- | -| Source | `dot_config/kitty/` | +| Source | [prdlk/kitty](https://github.com/prdlk/kitty) via `.chezmoiexternals/kitty.toml` | | Target | `~/.config/kitty/` | | Install | `kitty` in `.chezmoidata/packages.yaml` (pacman on Arch, cask on macOS, plus `font-victor-mono-nerd-font` cask) | -- dot_config/kitty/ +- ~/.config/kitty/ - kitty.conf - tmux.conf - herdr.conf - goliath.conf - ssh.conf - - symlink_current-theme.conf + - current-theme.conf - tab_bar.py - pass_keys.py - day_session.py @@ -32,7 +32,7 @@ GPU terminal emulator and the primary terminal on every role. - koda-light.conf -`__pycache__/` next to `tab_bar.py` is excluded in `.chezmoiignore.tmpl`. +`~/.config/kitty` is a `git-repo` external checkout, not chezmoi-managed contents; edit it in place and commit and push from there. The repo's `.gitignore` excludes `__pycache__/` next to `tab_bar.py`. ## Theme and colors @@ -42,7 +42,7 @@ Every config ends with: include ~/.local/state/omarchy/current/theme/kitty.conf ``` -Colors come from the active Omarchy theme; it is included last so it wins. `symlink_current-theme.conf` creates `~/.config/kitty/current-theme.conf` as a symlink to `themes/cyberdream.conf`. Only the legacy `dot_config/herdr/kitty.conf` includes `current-theme.conf`; the main config does not. `themes/` holds `cyberdream`, `koda-dark`, and `koda-light` color files. +Colors come from the active Omarchy theme; it is included last so it wins. `current-theme.conf` is a symlink committed in the repo, pointing at `themes/cyberdream.conf`. Only the legacy `dot_config/herdr/kitty.conf` includes `current-theme.conf`; the main config does not. `themes/` holds `cyberdream`, `koda-dark`, and `koda-light` color files. ## kitty.conf diff --git a/docs/terminal/tmux.mdx b/docs/terminal/tmux.mdx index 2dd82e5..f4a01c6 100644 --- a/docs/terminal/tmux.mdx +++ b/docs/terminal/tmux.mdx @@ -41,7 +41,7 @@ These settings are what [yazi](/tools/yazi) needs inside tmux. `allow-passthroug | --- | --- | | `prefix q` | Reload config | | `prefix /` | Copy mode, then search upward | -| `prefix o` | tmux-sessionx: fuzzy-find, switch to, create, rename (`ctrl-r`), or kill (`alt-backspace`) sessions, with a preview | +| `prefix o` | Sessions palette ([`tmux-sessions`](/shell/scripts#tmux-sessions)): fuzzy-find the other sessions, every window of every session, zoxide's and `~/.config`'s directories, and Rename/Kill items per session. Typed text that is not a session starts one by that name in its zoxide match | | `prefix t` | Project Tasks palette ([`pj-palette`](/shell/scripts#pj-palette)): install/dev/sync/make/compose quick actions plus every `pj` task. One-off tasks run in a full-width bottom split (25% of the window); dev servers and `docker compose up` run in a background `:` session shown in a popup (`q` hides, `ctrl-c` asks `y/n` then stops), listed under Running to reopen | | `prefix y` / `prefix e` | Yazi / Neovim in a new window in the pane cwd (Ghostty `ctrl+shift+f` / `ctrl+shift+e`) | | `prefix g` | Lazygit in a 90% popup in the pane cwd (Ghostty `ctrl+shift+g`) | @@ -87,8 +87,7 @@ Labels longer than 27 characters end in `…`. The icon comes from tmux-nerd-fon | `joshmedeski/tmux-nerd-font-window-name` | Fills `#{window_icon}` from `tmux-nerd-font-window-name.yml` | | `tmux-plugins/tmux-resurrect` | `@resurrect-capture-pane-contents on` | | `tmux-plugins/tmux-continuum` | `@continuum-save-interval 10`, `@continuum-restore on` | -| `omerxx/tmux-sessionx` | `@sessionx-bind o`; `@sessionx-zoxide-mode on` (a query that matches no session is resolved through zoxide into a new session); `@sessionx-fzf-builtin-tmux on` (`fzf --tmux` popup; needs fzf ≥ 0.53, bat for previews) | -| `eduwass/tmux-palette` | `@palette-key C-Space` (root table, no prefix). Needs [Bun](https://bun.sh); tpm runs `bun install` on first load | +| `prdlk/tmux-palette-plugin` | Fork of [eduwass/tmux-palette](https://github.com/eduwass/tmux-palette) that adds a custom palette `query` item (an item for the typed text, listed after the matches). `@palette-key C-Space` (root table, no prefix). Needs [Bun](https://bun.sh); tpm runs `bun install` on first load | ### Command palette @@ -96,9 +95,10 @@ Labels longer than 27 characters end in `…`. The icon comes from tmux-nerd-fon | File | Contents | | --- | --- | -| `commands.json` | The kitty launchers ported as palette items: **Lazygit** (90% popup in the pane's cwd; kitty `ctrl+shift+g`), **Yazi** (new window; kitty `ctrl+shift+f`), **Neovim Split** (nvim in a split to the left, 60% of the pane; alias `nv`; kitty `ctrl+shift+e`), **Shell History (atuin)** (`atuin-pick` in a 25% split below; kitty `ctrl+shift+p`). Also **btop** (80% popup; aliases `top`, `htop`), **Lazydocker** (90% popup in the pane's cwd; alias `dd`), **mandible** (80% popup running [`mandible-pick`](/shell/scripts#mandible-pick); alias `man`), **television** (`tv channels`, the [channel picker](/tools/television), in a new window in the pane's cwd; alias `tv`), **gitframe** (git diff viewer in a new window in the pane's cwd; alias `gf`), **omp** (opens the omp palette; aliases `agent`, `ai`), **Project Tasks** (opens the tasks palette), **Sessions (sessionx)**, **Save Sessions**, and **Restore Sessions** (resurrect). Programs are started with `exec`, so the tab icon is the program's, not the shell's | +| `commands.json` | The kitty launchers ported as palette items: **Lazygit** (90% popup in the pane's cwd; kitty `ctrl+shift+g`), **Yazi** (new window; kitty `ctrl+shift+f`), **Neovim Split** (nvim in a split to the left, 60% of the pane; alias `nv`; kitty `ctrl+shift+e`), **Shell History (atuin)** (`atuin-pick` in a 25% split below; kitty `ctrl+shift+p`). Also **btop** (80% popup; aliases `top`, `htop`), **Lazydocker** (90% popup in the pane's cwd; alias `dd`), **mandible** (80% popup running [`mandible-pick`](/shell/scripts#mandible-pick); alias `man`), **television** (`tv channels`, the [channel picker](/tools/television), in a new window in the pane's cwd; alias `tv`), **gitframe** (git diff viewer in a new window in the pane's cwd; alias `gf`), **omp** (opens the omp palette; aliases `agent`, `ai`), **Project Tasks** (opens the tasks palette), **Sessions** (opens the sessions palette; aliases `sx`, `ss`), **Save Sessions**, and **Restore Sessions** (resurrect). Programs are started with `exec`, so the tab icon is the program's, not the shell's | | `palettes/tasks.json` | The **Project Tasks** palette (`prefix t`, Ghostty `ctrl+shift+p` / `ctrl+shift+space`), fed by [`pj-palette`](/shell/scripts#pj-palette): running background tasks under Running, then `bun install`, `bun run dev`, `uv sync`, `uv run python`, `make`, `go run .`, `cargo run`, `docker compose up` as Quick items when the project has them, then every task `pj` finds, grouped by tool. One-off tasks run in a full-width split along the bottom (25% of the window) in their directory; `ctrl-c` stops a running task, and once it has exited, `enter` or `ctrl-c` closes the pane. Dev servers (`dev`/`start`/`serve`/`watch`/`preview` tasks) and `docker compose up` run in a background session `:` shown in a popup: `q` hides it with the task still running, `ctrl-c` asks `Stop ? (y/n)` and on `y` stops the task and closes it | | `palettes/omp.json` | The **omp** palette, fed by [`pj-palette --omp`](/shell/scripts#pj-palette): this tmux session's `:omp` (open it, or start it when not running), every other tmux session's running omp, and a Quit item per session. Running agents have a green icon and show `open` or `hidden` | +| `palettes/sessions.json` | The **Sessions** palette (`prefix o`, Ghostty `ctrl+shift+o`), fed by [`tmux-sessions`](/shell/scripts#tmux-sessions): Sessions (the last one first, attached ones green), Windows, Zoxide, Config, Rename, Kill. Its `query` item lists the typed text last; `enter` on it runs `tmux-sessions --new ` | | `hidden.json` | Hides the built-in **Switch Theme...** item, and with it the Appearance section: the palette stays on the fixed cyberdream `theme.json` | | `shortcuts.json` | Ghostty `ctrl+shift` chords shown next to the built-in items they trigger (New Window → `Ctrl+Shift+T`, …) | | `theme.json` | Cyberdream: bg `#16181a`, panel `#1e2124`, selected `#243348` (the active-tab plate), muted `#7b8496`, accent `#5ea1ff` |