From b18729f4a0ef903e8db58d4014ef12505979f7e0 Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Mon, 2 Nov 2026 09:14:11 -0500 Subject: [PATCH] Initial import: chezmoi source for Omarchy (Hyprland) Imported from prdlk/dotfiles master (efdd827), which supersedes the omarchy branch (3031416). Drops the Umbriel, Noctalia, niri, CachyOS, macOS, and Blume docs-site layers; docs/ is plain Markdown. --- .chezmoi.toml.tmpl | 16 + .chezmoidata/aliases.yaml | 38 + .chezmoidata/packages.yaml | 149 +++ .chezmoidata/skills.yaml | 177 ++++ .chezmoiexternal.toml | 25 + .chezmoiexternals/agent-root.toml | 8 + .chezmoiexternals/ghostty.toml | 6 + .chezmoiexternals/herdr.toml | 6 + .chezmoiexternals/kitty.toml | 6 + .chezmoiexternals/omarchy.toml | 6 + .chezmoiexternals/omp.toml | 6 + .chezmoiexternals/television.toml | 6 + .chezmoiexternals/tmux-palette.toml | 6 + .chezmoiexternals/tmux.toml | 6 + .chezmoiexternals/yazi.toml | 6 + .chezmoiignore.tmpl | 48 + .../run_once_after_30-user-services.sh.tmpl | 23 + .../run_onchange_after_15-tools.sh.tmpl | 68 ++ ...un_onchange_after_20-gh-extensions.sh.tmpl | 25 + .../run_onchange_after_25-skills.sh.tmpl | 70 ++ .../run_onchange_after_40-post.sh.tmpl | 9 + .../run_onchange_before_10-packages.sh.tmpl | 59 ++ .claude/settings.json | 26 + .gitignore | 8 + .gitmodules | 6 + AGENTS.md | 89 ++ README.md | 73 ++ docs/README.md | 71 ++ docs/ai/README.md | 20 + docs/ai/skills.md | 218 ++++ docs/chezmoi/README.md | 142 +++ docs/chezmoi/config.md | 97 ++ docs/chezmoi/data.md | 182 ++++ docs/chezmoi/externals-and-ignore.md | 176 ++++ docs/chezmoi/scripts.md | 146 +++ docs/desktop/README.md | 30 + docs/desktop/fonts-and-apps.md | 94 ++ docs/desktop/hyprland.md | 384 +++++++ docs/desktop/waybar-preview.png | Bin 0 -> 374882 bytes docs/desktop/waybar.md | 136 +++ docs/installation.md | 101 ++ docs/shell/README.md | 37 + docs/shell/aliases.md | 121 +++ docs/shell/atuin.md | 128 +++ docs/shell/bash-zsh.md | 156 +++ docs/shell/fish.md | 312 ++++++ docs/shell/scripts.md | 477 +++++++++ docs/shell/starship.md | 91 ++ docs/terminal/README.md | 19 + docs/terminal/ghostty.md | 97 ++ docs/terminal/herdr.md | 91 ++ docs/terminal/kitty.md | 221 +++++ docs/terminal/tmux.md | 115 +++ docs/tools/README.md | 58 ++ docs/tools/bat.md | 74 ++ docs/tools/drydock.md | 23 + docs/tools/git.md | 114 +++ docs/tools/github-cli.md | 159 +++ docs/tools/hunk.md | 62 ++ docs/tools/lazydocker.md | 47 + docs/tools/lazygit.md | 282 ++++++ docs/tools/leetcode.md | 89 ++ docs/tools/neovim.md | 56 ++ docs/tools/television.md | 182 ++++ docs/tools/topgrade.md | 72 ++ docs/tools/yazi.md | 270 +++++ dot_bashrc | 93 ++ dot_config/atuin/private_config.toml | 414 ++++++++ dot_config/atuin/themes/cherry-blossom.toml | 18 + dot_config/atuin/themes/cyberdream.toml | 18 + dot_config/bash/functions/c.bash | 8 + dot_config/bash/functions/cd.bash | 23 + dot_config/bash/functions/clip-last.bash | 27 + dot_config/bash/functions/ghg.bash | 8 + dot_config/bash/functions/ghn.bash | 6 + dot_config/bash/functions/gho.bash | 11 + dot_config/bash/functions/yy.bash | 11 + dot_config/bash/keybinds.bash | 96 ++ dot_config/bat/config | 25 + dot_config/bat/themes/cyberdream.tmTheme | 937 ++++++++++++++++++ dot_config/drydock/config.toml | 4 + dot_config/fish | 1 + dot_config/fontconfig/fonts.conf | 12 + dot_config/gh-dash/config.yml | 95 ++ dot_config/gh/private_config.yml | 27 + dot_config/go/env.tmpl | 2 + dot_config/herdr-nvim/config.toml | 10 + dot_config/hunk/config.toml | 12 + dot_config/hunk/private_state.json | 4 + dot_config/hypr | 1 + dot_config/lazydocker/config.yml | 11 + dot_config/lazygit/config.yml | 498 ++++++++++ dot_config/lazygit/ii-theme.yml | 28 + dot_config/mimeapps.list | 64 ++ dot_config/shell/aliases.sh.tmpl | 33 + dot_config/starship.toml | 140 +++ .../systemd/user/kitty-day-save.service | 13 + dot_config/systemd/user/projects-sync.service | 6 + dot_config/systemd/user/projects-sync.timer | 11 + dot_config/topgrade.toml | 92 ++ dot_config/uwsm/env-hyprland | 23 + dot_config/waybar/V6.cb.png | Bin 0 -> 374882 bytes dot_config/waybar/config.jsonc | 324 ++++++ dot_config/waybar/style.css | 237 +++++ dot_config/waybar/window_pill.py | 90 ++ dot_config/xdg-terminals.list | 4 + dot_config/yazi.toml.tmpl | 30 + dot_config/zsh/functions/c.zsh | 8 + dot_config/zsh/functions/cd.zsh | 23 + dot_config/zsh/functions/clip-last.zsh | 27 + dot_config/zsh/functions/ghg.zsh | 8 + dot_config/zsh/functions/ghn.zsh | 6 + dot_config/zsh/functions/gho.zsh | 11 + dot_config/zsh/functions/yy.zsh | 11 + dot_config/zsh/keybinds.zsh | 114 +++ dot_gitconfig.tmpl | 61 ++ dot_leetcode/star-prompt.json | 11 + dot_leetcode/version-cache.json | 5 + dot_leetcode/workspaces.json | 6 + dot_leetcode/workspaces/default/collab.json | 3 + dot_leetcode/workspaces/default/config.json | 7 + .../workspaces/default/snapshots/.keep | 0 dot_leetcode/workspaces/default/timer.json | 4 + dot_local/bin/executable_ai | 11 + dot_local/bin/executable_atuin-pick | 31 + dot_local/bin/executable_brave-new-tab | 24 + dot_local/bin/executable_c2p | 5 + dot_local/bin/executable_cp-appid | 43 + dot_local/bin/executable_extract_agents | 16 + dot_local/bin/executable_fab | 44 + dot_local/bin/executable_gdc | 9 + dot_local/bin/executable_gh-sonr-org-migrate | 163 +++ dot_local/bin/executable_ghg-clone | 116 +++ dot_local/bin/executable_ghn | 28 + dot_local/bin/executable_ghostty-tmux | 22 + dot_local/bin/executable_git-summary | 20 + dot_local/bin/executable_gop | 69 ++ dot_local/bin/executable_kitty-day-save | 35 + .../executable_launch_omp_livediff_overlay | 16 + dot_local/bin/executable_lc-elir | 18 + dot_local/bin/executable_mandible-pick | 22 + dot_local/bin/executable_mdcp | 17 + dot_local/bin/executable_mdp | 6 + dot_local/bin/executable_mtime-sort | 24 + dot_local/bin/executable_omarchy-cycle | 189 ++++ .../bin/executable_omarchy-cycle-browser | 5 + .../bin/executable_omarchy-cycle-terminal | 5 + .../bin/executable_omarchy-cycle-window-size | 127 +++ .../bin/executable_omarchy-launch-browser | 19 + dot_local/bin/executable_omarchy-pip | 70 ++ dot_local/bin/executable_omarchy-smart-move | 106 ++ dot_local/bin/executable_omarchy-summon | 55 + .../bin/executable_omarchy-toggle-layout | 41 + .../bin/executable_omarchy-toggle-scratch | 134 +++ dot_local/bin/executable_omp-session | 296 ++++++ dot_local/bin/executable_pj | 450 +++++++++ dot_local/bin/executable_pj-palette | 244 +++++ dot_local/bin/executable_projects-sync | 36 + dot_local/bin/executable_tmux-sessions | 95 ++ dot_local/bin/executable_yazi-nvim-open | 26 + dot_zshrc | 133 +++ run_onchange_after_build-bat-cache.sh.tmpl | 7 + ...nchange_after_install-yazi-plugins.sh.tmpl | 15 + 163 files changed, 12685 insertions(+) create mode 100644 .chezmoi.toml.tmpl create mode 100644 .chezmoidata/aliases.yaml create mode 100644 .chezmoidata/packages.yaml create mode 100644 .chezmoidata/skills.yaml create mode 100644 .chezmoiexternal.toml create mode 100644 .chezmoiexternals/agent-root.toml create mode 100644 .chezmoiexternals/ghostty.toml create mode 100644 .chezmoiexternals/herdr.toml create mode 100644 .chezmoiexternals/kitty.toml create mode 100644 .chezmoiexternals/omarchy.toml create mode 100644 .chezmoiexternals/omp.toml create mode 100644 .chezmoiexternals/television.toml create mode 100644 .chezmoiexternals/tmux-palette.toml create mode 100644 .chezmoiexternals/tmux.toml create mode 100644 .chezmoiexternals/yazi.toml create mode 100644 .chezmoiignore.tmpl create mode 100644 .chezmoiscripts/run_once_after_30-user-services.sh.tmpl create mode 100644 .chezmoiscripts/run_onchange_after_15-tools.sh.tmpl create mode 100644 .chezmoiscripts/run_onchange_after_20-gh-extensions.sh.tmpl create mode 100755 .chezmoiscripts/run_onchange_after_25-skills.sh.tmpl create mode 100644 .chezmoiscripts/run_onchange_after_40-post.sh.tmpl create mode 100644 .chezmoiscripts/run_onchange_before_10-packages.sh.tmpl create mode 100644 .claude/settings.json create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 AGENTS.md create mode 100644 README.md create mode 100644 docs/README.md create mode 100644 docs/ai/README.md create mode 100644 docs/ai/skills.md create mode 100644 docs/chezmoi/README.md create mode 100644 docs/chezmoi/config.md create mode 100644 docs/chezmoi/data.md create mode 100644 docs/chezmoi/externals-and-ignore.md create mode 100644 docs/chezmoi/scripts.md create mode 100644 docs/desktop/README.md create mode 100644 docs/desktop/fonts-and-apps.md create mode 100644 docs/desktop/hyprland.md create mode 100644 docs/desktop/waybar-preview.png create mode 100644 docs/desktop/waybar.md create mode 100644 docs/installation.md create mode 100644 docs/shell/README.md create mode 100644 docs/shell/aliases.md create mode 100644 docs/shell/atuin.md create mode 100644 docs/shell/bash-zsh.md create mode 100644 docs/shell/fish.md create mode 100644 docs/shell/scripts.md create mode 100644 docs/shell/starship.md create mode 100644 docs/terminal/README.md create mode 100644 docs/terminal/ghostty.md create mode 100644 docs/terminal/herdr.md create mode 100644 docs/terminal/kitty.md create mode 100644 docs/terminal/tmux.md create mode 100644 docs/tools/README.md create mode 100644 docs/tools/bat.md create mode 100644 docs/tools/drydock.md create mode 100644 docs/tools/git.md create mode 100644 docs/tools/github-cli.md create mode 100644 docs/tools/hunk.md create mode 100644 docs/tools/lazydocker.md create mode 100644 docs/tools/lazygit.md create mode 100644 docs/tools/leetcode.md create mode 100644 docs/tools/neovim.md create mode 100644 docs/tools/television.md create mode 100644 docs/tools/topgrade.md create mode 100644 docs/tools/yazi.md create mode 100644 dot_bashrc create mode 100644 dot_config/atuin/private_config.toml create mode 100644 dot_config/atuin/themes/cherry-blossom.toml create mode 100644 dot_config/atuin/themes/cyberdream.toml create mode 100644 dot_config/bash/functions/c.bash create mode 100644 dot_config/bash/functions/cd.bash create mode 100644 dot_config/bash/functions/clip-last.bash create mode 100644 dot_config/bash/functions/ghg.bash create mode 100644 dot_config/bash/functions/ghn.bash create mode 100644 dot_config/bash/functions/gho.bash create mode 100644 dot_config/bash/functions/yy.bash create mode 100644 dot_config/bash/keybinds.bash create mode 100644 dot_config/bat/config create mode 100644 dot_config/bat/themes/cyberdream.tmTheme create mode 100644 dot_config/drydock/config.toml create mode 160000 dot_config/fish create mode 100644 dot_config/fontconfig/fonts.conf create mode 100644 dot_config/gh-dash/config.yml create mode 100644 dot_config/gh/private_config.yml create mode 100644 dot_config/go/env.tmpl create mode 100644 dot_config/herdr-nvim/config.toml create mode 100644 dot_config/hunk/config.toml create mode 100644 dot_config/hunk/private_state.json create mode 160000 dot_config/hypr create mode 100644 dot_config/lazydocker/config.yml create mode 100644 dot_config/lazygit/config.yml create mode 100644 dot_config/lazygit/ii-theme.yml create mode 100644 dot_config/mimeapps.list create mode 100644 dot_config/shell/aliases.sh.tmpl create mode 100644 dot_config/starship.toml create mode 100644 dot_config/systemd/user/kitty-day-save.service create mode 100644 dot_config/systemd/user/projects-sync.service create mode 100644 dot_config/systemd/user/projects-sync.timer create mode 100644 dot_config/topgrade.toml create mode 100644 dot_config/uwsm/env-hyprland create mode 100644 dot_config/waybar/V6.cb.png create mode 100644 dot_config/waybar/config.jsonc create mode 100644 dot_config/waybar/style.css create mode 100644 dot_config/waybar/window_pill.py create mode 100644 dot_config/xdg-terminals.list create mode 100644 dot_config/yazi.toml.tmpl create mode 100644 dot_config/zsh/functions/c.zsh create mode 100644 dot_config/zsh/functions/cd.zsh create mode 100644 dot_config/zsh/functions/clip-last.zsh create mode 100644 dot_config/zsh/functions/ghg.zsh create mode 100644 dot_config/zsh/functions/ghn.zsh create mode 100644 dot_config/zsh/functions/gho.zsh create mode 100644 dot_config/zsh/functions/yy.zsh create mode 100644 dot_config/zsh/keybinds.zsh create mode 100644 dot_gitconfig.tmpl create mode 100644 dot_leetcode/star-prompt.json create mode 100644 dot_leetcode/version-cache.json create mode 100644 dot_leetcode/workspaces.json create mode 100644 dot_leetcode/workspaces/default/collab.json create mode 100644 dot_leetcode/workspaces/default/config.json create mode 100644 dot_leetcode/workspaces/default/snapshots/.keep create mode 100644 dot_leetcode/workspaces/default/timer.json create mode 100755 dot_local/bin/executable_ai create mode 100755 dot_local/bin/executable_atuin-pick create mode 100755 dot_local/bin/executable_brave-new-tab create mode 100755 dot_local/bin/executable_c2p create mode 100755 dot_local/bin/executable_cp-appid create mode 100755 dot_local/bin/executable_extract_agents create mode 100755 dot_local/bin/executable_fab create mode 100755 dot_local/bin/executable_gdc create mode 100755 dot_local/bin/executable_gh-sonr-org-migrate create mode 100755 dot_local/bin/executable_ghg-clone create mode 100755 dot_local/bin/executable_ghn create mode 100755 dot_local/bin/executable_ghostty-tmux create mode 100755 dot_local/bin/executable_git-summary create mode 100755 dot_local/bin/executable_gop create mode 100755 dot_local/bin/executable_kitty-day-save create mode 100755 dot_local/bin/executable_launch_omp_livediff_overlay create mode 100755 dot_local/bin/executable_lc-elir create mode 100755 dot_local/bin/executable_mandible-pick create mode 100755 dot_local/bin/executable_mdcp create mode 100755 dot_local/bin/executable_mdp create mode 100755 dot_local/bin/executable_mtime-sort create mode 100755 dot_local/bin/executable_omarchy-cycle create mode 100755 dot_local/bin/executable_omarchy-cycle-browser create mode 100755 dot_local/bin/executable_omarchy-cycle-terminal create mode 100755 dot_local/bin/executable_omarchy-cycle-window-size create mode 100755 dot_local/bin/executable_omarchy-launch-browser create mode 100755 dot_local/bin/executable_omarchy-pip create mode 100755 dot_local/bin/executable_omarchy-smart-move create mode 100755 dot_local/bin/executable_omarchy-summon create mode 100755 dot_local/bin/executable_omarchy-toggle-layout create mode 100755 dot_local/bin/executable_omarchy-toggle-scratch create mode 100755 dot_local/bin/executable_omp-session create mode 100755 dot_local/bin/executable_pj create mode 100755 dot_local/bin/executable_pj-palette create mode 100755 dot_local/bin/executable_projects-sync create mode 100755 dot_local/bin/executable_tmux-sessions create mode 100755 dot_local/bin/executable_yazi-nvim-open create mode 100644 dot_zshrc create mode 100755 run_onchange_after_build-bat-cache.sh.tmpl create mode 100755 run_onchange_after_install-yazi-plugins.sh.tmpl diff --git a/.chezmoi.toml.tmpl b/.chezmoi.toml.tmpl new file mode 100644 index 0000000..ad28000 --- /dev/null +++ b/.chezmoi.toml.tmpl @@ -0,0 +1,16 @@ +{{- $name := promptStringOnce . "name" "Full name" "Prad Nukala" -}} +{{- $email := promptStringOnce . "email" "Email" "prad@sonr.io" -}} +{{- $role := promptChoiceOnce . "role" "Machine role" (list "desktop" "laptop" "server") "desktop" -}} + +mode = "symlink" +encryption = "age" + +[age] + identity = "~/.config/chezmoi/key.txt" + recipient = "age19tdqgavaekhvgqsd75n8a09vvshen2ykzy8kw6tenczz73449anqc3l7a6" + useBuiltin = true + +[data] + name = {{ $name | quote }} + email = {{ $email | quote }} + role = {{ $role | quote }} diff --git a/.chezmoidata/aliases.yaml b/.chezmoidata/aliases.yaml new file mode 100644 index 0000000..288a004 --- /dev/null +++ b/.chezmoidata/aliases.yaml @@ -0,0 +1,38 @@ +# Shell-agnostic aliases — single source of truth, rendered into: +# dot_config/fish/conf.d/20-aliases.fish.tmpl (fish) +# dot_config/shell/aliases.sh.tmpl (bash + zsh) +# Shell-specific bits (clipboard detection, the `q` function, interactive +# eza/typo guards) live in those templates, not here. +aliases: + - section: "Editors / file managers" + items: + - { name: "e", cmd: "nvim" } + - { name: "e.d", cmd: "cd ~/.config/dotstate/storage/Rogz/.config && yazi" } + - { name: "e.f", cmd: "cd ~/.config/fish && yazi" } + - { name: "e.k", cmd: "yazi ~/.config/kitty" } + - { name: "e.v", cmd: "yazi ~/.config/nvim/lua" } + - { name: "e.y", cmd: "yazi ~/.config/yazi" } + - { name: "e.t", cmd: "nvim ~/.config/tmux/tmux.conf" } + - { name: "hx", cmd: "helix" } + - section: "Quick directory jumps" + items: + - { name: "cdc", cmd: "cd ~/.config && yazi" } + - { name: "cdd", cmd: "cd ~/Developer && yazi" } + - { name: "cdk", cmd: "cd ~/Documents/Knowledge && obsidian" } + - { name: "cdl", cmd: "cd ~/.local && yazi" } + - { name: "cds", cmd: "cd ~/.local/share/services && ls" } + - { name: "cdw", cmd: "cd ~/Downloads && yazi" } + - section: "Tools" + items: + - { name: "dd", cmd: "lazydocker" } + - { name: "gg", cmd: "lazygit" } + - { name: "ff", cmd: "exec fish" } + - { name: "npx", cmd: "bunx" } + - { name: "sm", cmd: "sudo micro" } + - { name: "sd", cmd: "ssh prad@192.168.1.68" } + - { name: "oc", cmd: "opencode" } + - { name: "dss", cmd: "dotstate sync" } + - { name: "fabric", cmd: "fabric-ai" } + - { name: "bk", cmd: "bead-kanban" } + - { name: "lc", cmd: "leetcode" } + - { name: "tk", cmd: "task" } diff --git a/.chezmoidata/packages.yaml b/.chezmoidata/packages.yaml new file mode 100644 index 0000000..b204022 --- /dev/null +++ b/.chezmoidata/packages.yaml @@ -0,0 +1,149 @@ +packages: + arch: + pacman: + # shell + editors + - fish + - neovim + - helix + - micro + - tmux + # terminals (ghostty is the default) + - ghostty + - kitty + # tui tools (tmux-palette, television cables, fish functions) + - yazi + - lazygit + - lazydocker + - docker + - docker-compose + - btop + - fastfetch + - onefetch + - television + - serie + - tig + - gitui + - tldr + - navi + - mdfried + # vcs + forge + - git + - github-cli + - git-delta + - diffnav + - tea + # search / files + - fzf + - fd + - ripgrep + - zoxide + - eza + - bat + - jq + - duf + # media / preview (yazi + tv deps) + - ffmpeg + - ffmpegthumbnailer + - poppler + - resvg + - imagemagick + - chafa + - 7zip + - unzip + # remote + - mosh + - sshfs + - tailscale + # misc cli + - mise + - gum + - glow + - atuin + - wget + - starship + - zsh-syntax-highlighting + # fonts + - ttf-victor-mono-nerd + aur: + - topgrade + - portop + desktop: + # linux desktop layer (role desktop|laptop) + pacman: + - uwsm + - 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 hypr + - nautilus + - imv + - mpv + - evince + - chromium + - obsidian + # strata runtime deps (its installer runs `sudo -n pacman`, which fails + # without cached credentials, so they come from here instead) + - 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 that ships the same name (yay prefers repos). Only + # names no installed package provides are passed on (`pacman -T`). + aur: + - tldraw-offline-bin + # desktop apps + - beeper-bin + - fastmail + - 1password + - brave-origin-bin + - claude-desktop + - spotify + # [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 + shared: + gh_extensions: + - davidraviv/gh-clean-branches + - prdlk/gh-commit + - dlvhdr/gh-dash + - meiji163/gh-notify + # cargo installs (run_onchange_after_15-tools, after rustup) + cargo: + - suvadu + - mandible + - worktrunk + # global mise tools: `mise use -g ` (run_onchange_after_15-tools). + # Registry short names where mise has one (`mise registry `), else a + # backend spec; written to ~/.config/mise/config.toml under the same key. + mise: + - ghq + - bun + - node + - uv + - opencode + - crush + # omp: prebuilt release binaries; not in the mise registry + - github:can1357/oh-my-pi diff --git a/.chezmoidata/skills.yaml b/.chezmoidata/skills.yaml new file mode 100644 index 0000000..7df0b2e --- /dev/null +++ b/.chezmoidata/skills.yaml @@ -0,0 +1,177 @@ +# Agent skills, installed by the Skills CLI instead of being vendored in this +# repo. .chezmoiscripts/run_onchange_after_25-skills.sh.tmpl re-runs whenever +# this file changes: it installs every skill below (`skills add -g -y +# -a --skill …`, one call per source) and removes CLI-installed +# skills that are no longer listed. +# +# source: anything `skills add` accepts — owner/repo (default branch), a +# GitHub tree URL (pins a ref or subdirectory), or a well-known endpoint URL. +# Skills that upstream deleted are pinned to the last ref that has them. +# agents: optional; defaults to `agents` below. `universal` is the shared +# ~/.agents/skills library (Codex, Gemini CLI, OpenCode, Zed, …); +# `claude-code` links ~/.claude/skills/. +# +# Not listed (installed by other packages, never touched by the sync): +# omarchy and diagnose-crash (/usr/share/omarchy), terminal-browser. +skills: + cli: skills@1.7.0 + agents: [universal, claude-code] + sources: + - source: affaan-m/everything-claude-code + skills: [rust-testing] + - source: apollographql/skills + skills: [rust-best-practices] + - source: charlietlamb/openlogs + skills: [openlogs-server-logs] + - source: cloudflare/skills + skills: [cloudflare, workers-best-practices, wrangler] + - source: coldteadotai/pr-lens + skills: [eli5, pr-lens] + - source: Dammyjay93/interface-design + skills: [interface-design] + - source: deckardger/tanstack-agent-skills + skills: + - tanstack-integration-best-practices + - tanstack-query-best-practices + - tanstack-router-best-practices + - tanstack-start-best-practices + - source: Doist/todoist-cli + skills: [todoist-cli] + - source: finesssee/linear-cli + skills: [linear-documents] + - source: Forward-Future/loop-library + skills: [loopy] + - source: h4ckf0r0day/obscura + skills: [obscura] + - source: hardikpandya/stop-slop + skills: [stop-slop] + - source: jeffallan/claude-skills + skills: [golang-pro] + - source: leonardomso/rust-skills + skills: [rust-skills] + - source: Leonxlnx/taste-skill + skills: + - brandkit + - design-taste-frontend + - gpt-taste + - high-end-visual-design + - imagegen-frontend-web + - minimalist-ui + - redesign-existing-projects + - source: mattpocock/skills + skills: + - codebase-design + - diagnosing-bugs + - domain-modeling + - git-guardrails-claude-code + - grill-me + - grill-with-docs + - grilling + - handoff + - implement + - improve-codebase-architecture + - loop-me + - migrate-to-shoehorn + - prototype + - scaffold-exercises + - setup-matt-pocock-skills + - setup-pre-commit + - tdd + - teach + - triage + - writing-beats + - writing-fragments + - writing-shape + # Removed upstream after v1.1.0 (c66bdee; writing-great-skills became + # writing-for-agents). + - source: https://github.com/mattpocock/skills/tree/v1.1.0 + skills: + - design-an-interface + - obsidian-vault + - qa + - request-refactor-plan + - ubiquitous-language + - writing-great-skills + # Removed upstream in daa01d8; pinned to its parent. + - source: https://github.com/mattpocock/skills/tree/153fc1b93de6584562765cdce299324e1ff9e661 + skills: [resolving-merge-conflicts] + - source: https://mintlify.com/docs + skills: [mintlify, mintlify-api, mintlify-docs] + - source: nextlevelbuilder/ui-ux-pro-max-skill + skills: [ui-ux-pro-max] + - source: openai/skills + skills: [linear] + - source: petergyang/no-ai-slop + skills: [no-ai-slop] + - source: remix-run/remix + skills: [remix, typescript-expert, write-tests] + - source: remotion-dev/skills + skills: + - remotion-best-practices + - remotion-captions + - remotion-create + - remotion-docs + - remotion-interactivity + - remotion-maps + - remotion-markup + - remotion-multimedia + - remotion-render + - remotion-saas + - remotion-studio + - remotion-upgrade + - source: RoleModel/rolemodel-skills + skills: [laws-of-ux] + - source: schpet/linear-cli + skills: [linear-cli] + - source: shadcn-ui/ui + skills: [shadcn] + - source: sickn33/antigravity-awesome-skills + skills: [bun-development] + - source: tanstack-skills/tanstack-skills + skills: [tanstack-form, tanstack-table] + # Retired upstream in dd0d3f2f; pinned to its parent. + - source: https://github.com/terrylica/cc-skills/tree/6d35f84728b05adec50cb74ee45b5517bb954fa8 + skills: [mise-tasks] + - source: TheOrcDev/8bitcn-ui + skills: + - fumadocs-component-docs + - fumadocs-mdx-structure + - fumadocs-registry-integration + - source: vercel-labs/agent-skills + skills: [web-design-guidelines] + - source: vercel-labs/json-render + skills: [core, react, react-email] + - source: vercel-labs/native + skills: [native-sdk] + - source: vercel-labs/skills + skills: [find-skills] + - source: whackur/solidity-agent-toolkit + skills: [solidity-foundry-development] + - source: wshobson/agents + skills: [rust-async-patterns, solidity-security, uv-package-manager] + - source: yeachan-heo/oh-my-claudecode + skills: [deepinit] + + # Claude Code only. + - source: cloudflare/skills + agents: [claude-code] + skills: + - agents-sdk + - cloudflare-email-service + - cloudflare-one + - cloudflare-one-migrations + - durable-objects + - turnstile-spin + - web-perf + # Replaced upstream by sandbox-stable / sandbox-next in f96bff7. + - source: https://github.com/cloudflare/skills/tree/30553f89ae1ef1e3c2917cd09d72dac992bb4e9a + agents: [claude-code] + skills: [sandbox-sdk] + - source: earendil-works/absurd + agents: [claude-code] + skills: [absurd] + # Subdirectory URL: the bare repo's root SKILL.md would install the whole + # repository as the skill. + - source: https://github.com/AvivK5498/Claude-Code-Beads-Orchestration/tree/main/skills/create-beads-orchestration + agents: [claude-code] + skills: [create-beads-orchestration] diff --git a/.chezmoiexternal.toml b/.chezmoiexternal.toml new file mode 100644 index 0000000..51ea261 --- /dev/null +++ b/.chezmoiexternal.toml @@ -0,0 +1,25 @@ +# External content — cloned/downloaded by chezmoi, not stored in this repo. + +# Neovim config lives in its own repo. No refreshPeriod: chezmoi clones it +# when ~/.config/nvim is missing (fresh machine) and otherwise never pulls, +# so the local checkout always wins over the remote. +[".config/nvim"] + type = "git-repo" + url = "https://github.com/prdlk/nvim.git" + [".config/nvim".pull] + args = ["--ff-only"] + +# bat syntax definition — upstream git repo, cloned when missing. +[".config/bat/syntaxes/sublime-purescript-syntax"] + type = "git-repo" + url = "https://github.com/tellnobody1/sublime-purescript-syntax.git" + [".config/bat/syntaxes/sublime-purescript-syntax".pull] + args = ["--ff-only"] + +# tmux plugin manager — tmux.conf runs it from this path. tpm installs the +# other plugins next to it (prefix + I); those stay unmanaged. +[".config/tmux/plugins/tpm"] + type = "git-repo" + url = "https://github.com/tmux-plugins/tpm.git" + [".config/tmux/plugins/tpm".pull] + args = ["--ff-only"] diff --git a/.chezmoiexternals/agent-root.toml b/.chezmoiexternals/agent-root.toml new file mode 100644 index 0000000..a63081e --- /dev/null +++ b/.chezmoiexternals/agent-root.toml @@ -0,0 +1,8 @@ +# agent-root: lets coding agents run one command as root through a pkexec +# dialog with a notify-send reason. Single upstream script; desktop/laptop +# roles only (needs the session's polkit agent), gated in .chezmoiignore.tmpl. +[".local/bin/agent-root"] + type = "file" + url = "https://raw.githubusercontent.com/jankeesvw/agent-root/main/agent-root" + executable = true + refreshPeriod = "168h" diff --git a/.chezmoiexternals/ghostty.toml b/.chezmoiexternals/ghostty.toml new file mode 100644 index 0000000..4f11129 --- /dev/null +++ b/.chezmoiexternals/ghostty.toml @@ -0,0 +1,6 @@ +[".config/ghostty"] + type = "git-repo" + url = "https://github.com/prdlk/ghostty.git" + refreshPeriod = "168h" + [".config/ghostty".pull] + args = ["--ff-only"] diff --git a/.chezmoiexternals/herdr.toml b/.chezmoiexternals/herdr.toml new file mode 100644 index 0000000..f3d18f8 --- /dev/null +++ b/.chezmoiexternals/herdr.toml @@ -0,0 +1,6 @@ +[".config/herdr"] + type = "git-repo" + url = "https://github.com/prdlk/herdr.git" + refreshPeriod = "168h" + [".config/herdr".pull] + args = ["--ff-only"] diff --git a/.chezmoiexternals/kitty.toml b/.chezmoiexternals/kitty.toml new file mode 100644 index 0000000..ba8b74d --- /dev/null +++ b/.chezmoiexternals/kitty.toml @@ -0,0 +1,6 @@ +[".config/kitty"] + type = "git-repo" + url = "https://github.com/prdlk/kitty.git" + refreshPeriod = "168h" + [".config/kitty".pull] + args = ["--ff-only"] diff --git a/.chezmoiexternals/omarchy.toml b/.chezmoiexternals/omarchy.toml new file mode 100644 index 0000000..788988b --- /dev/null +++ b/.chezmoiexternals/omarchy.toml @@ -0,0 +1,6 @@ +[".config/omarchy"] + type = "git-repo" + url = "https://github.com/prdlk/omarchy.git" + refreshPeriod = "168h" + [".config/omarchy".pull] + args = ["--ff-only"] diff --git a/.chezmoiexternals/omp.toml b/.chezmoiexternals/omp.toml new file mode 100644 index 0000000..bc9327b --- /dev/null +++ b/.chezmoiexternals/omp.toml @@ -0,0 +1,6 @@ +[".omp"] + type = "git-repo" + url = "https://github.com/prdlk/omp.git" + refreshPeriod = "168h" + [".omp".pull] + args = ["--ff-only"] diff --git a/.chezmoiexternals/television.toml b/.chezmoiexternals/television.toml new file mode 100644 index 0000000..1148b90 --- /dev/null +++ b/.chezmoiexternals/television.toml @@ -0,0 +1,6 @@ +[".config/television"] + type = "git-repo" + url = "https://github.com/prdlk/television.git" + refreshPeriod = "168h" + [".config/television".pull] + args = ["--ff-only"] diff --git a/.chezmoiexternals/tmux-palette.toml b/.chezmoiexternals/tmux-palette.toml new file mode 100644 index 0000000..1d80338 --- /dev/null +++ b/.chezmoiexternals/tmux-palette.toml @@ -0,0 +1,6 @@ +[".config/tmux-palette"] + type = "git-repo" + url = "https://github.com/prdlk/tmux-palette.git" + refreshPeriod = "168h" + [".config/tmux-palette".pull] + args = ["--ff-only"] diff --git a/.chezmoiexternals/tmux.toml b/.chezmoiexternals/tmux.toml new file mode 100644 index 0000000..d8e23c3 --- /dev/null +++ b/.chezmoiexternals/tmux.toml @@ -0,0 +1,6 @@ +[".config/tmux"] + type = "git-repo" + url = "https://github.com/prdlk/tmux.git" + refreshPeriod = "168h" + [".config/tmux".pull] + args = ["--ff-only"] diff --git a/.chezmoiexternals/yazi.toml b/.chezmoiexternals/yazi.toml new file mode 100644 index 0000000..e7b82cd --- /dev/null +++ b/.chezmoiexternals/yazi.toml @@ -0,0 +1,6 @@ +[".config/yazi"] + type = "git-repo" + url = "https://github.com/prdlk/yazi.git" + refreshPeriod = "168h" + [".config/yazi".pull] + args = ["--ff-only"] diff --git a/.chezmoiignore.tmpl b/.chezmoiignore.tmpl new file mode 100644 index 0000000..853cc3f --- /dev/null +++ b/.chezmoiignore.tmpl @@ -0,0 +1,48 @@ +# Repo docs — never applied to $HOME +README.md +CLAUDE.md +AGENTS.md +docs + +# Compositor hook shipped by the shared fish submodule; never applied here +.config/fish/auto-Niri.fish + +# Runtime/plugin state living inside managed trees — not managed +.config/lazygit/.omc/** +.config/tmux/plugins/** +!.config/tmux/plugins/tpm +.config/fish/fish_variables + +# Plaintext tokens — local-only, never in git. Rotate anything ever committed. +.config/fish/conf.d/secrets.fish +.config/nvim/lazy-lock.json +.config/nvim/.git +.config/nvim/.git/** +.config/nvim/.omc/** +.config/nvim/.crush/** +.config/nvim/.understand-anything/** + +# mise tool versions — kept local per-machine, not managed +.config/mise +.config/mise/** + +{{ if or (ne .chezmoi.os "linux") (and (ne .role "desktop") (ne .role "laptop")) }} +# Arch desktop layer — linux desktop/laptop roles only +.config/hypr +.config/hypr/** +.config/waybar +.config/waybar/** +.config/uwsm +.config/uwsm/** +.local/bin/agent-root +.config/fontconfig +.config/fontconfig/** +.config/mimeapps.list +.config/xdg-terminals.list +.config/systemd +.config/systemd/** +.local/bin/kitty-day-save +.local/bin/cp-appid +.local/bin/projects-sync +{{ end }} + diff --git a/.chezmoiscripts/run_once_after_30-user-services.sh.tmpl b/.chezmoiscripts/run_once_after_30-user-services.sh.tmpl new file mode 100644 index 0000000..0096f89 --- /dev/null +++ b/.chezmoiscripts/run_once_after_30-user-services.sh.tmpl @@ -0,0 +1,23 @@ +{{ if eq .chezmoi.os "linux" -}} +#!/bin/sh +# Enable session-critical user services. Personal automation units +# (brain-lens, omp-loop, rclone, hermes, voxtype) ship as files only — +# enable manually per machine. +set -eu + +# Pre-shutdown save of kitty's daily session (dot_config/systemd/user, only on +# linux desktop/laptop roles; see .chezmoiignore.tmpl). +if [ -f "$HOME/.config/systemd/user/kitty-day-save.service" ] && command -v systemctl >/dev/null 2>&1; then + systemctl --user daemon-reload || true + systemctl --user enable --now kitty-day-save.service || true +fi + +# Symlink ~/Code repos into ~/Projects every 5 min (same role gate). +if [ -f "$HOME/.config/systemd/user/projects-sync.timer" ] && command -v systemctl >/dev/null 2>&1; then + systemctl --user daemon-reload || true + systemctl --user enable --now projects-sync.timer || true +fi +{{ else -}} +#!/bin/sh +exit 0 +{{ end -}} diff --git a/.chezmoiscripts/run_onchange_after_15-tools.sh.tmpl b/.chezmoiscripts/run_onchange_after_15-tools.sh.tmpl new file mode 100644 index 0000000..2a57fe1 --- /dev/null +++ b/.chezmoiscripts/run_onchange_after_15-tools.sh.tmpl @@ -0,0 +1,68 @@ +#!/bin/sh +# Tools that come from their own installers rather than pacman: +# rustup (cargo) and the packages.shared.cargo crates, the +# packages.shared.mise tools (omp, opencode, …), and strata on Linux desktop +# roles. Runs before 20-gh-extensions, whose fish session sources +# ~/.cargo/env.fish (conf.d/rustup.fish) and activates mise. +# cargo hash: {{ .packages.shared.cargo | toJson | sha256sum }} +# mise hash: {{ .packages.shared.mise | toJson | sha256sum }} +set -eu + +# Where rustup puts cargo; chezmoi's environment can predate the shell config +# that adds it. +PATH="$HOME/.cargo/bin:$PATH" +export PATH + +# rustup: -y answers its prompt (no tty under chezmoi); --no-modify-path keeps +# it out of the shell rc files, which are symlinks into this repo and already +# source ~/.cargo/env (bash, zsh, fish conf.d/rustup.fish). +if ! command -v cargo >/dev/null 2>&1; then + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path +fi + +installed=$(cargo install --list | awk '/^[^ ]/{print $1}') +{{ range .packages.shared.cargo -}} +echo "$installed" | grep -qx {{ . | quote }} || cargo install --locked {{ . | quote }} +{{ end }} + +# Global mise tools. Only tools absent from the global config are added, so a +# local pin (node = "22") is never rewritten to latest; `mise install` then +# fetches any configured version that is not installed yet. +if command -v mise >/dev/null 2>&1; then + global=$(mise ls --global --json) + missing='' + for tool in{{ range .packages.shared.mise }} {{ . | quote }}{{ end }}; do + echo "$global" | jq -e --arg t "$tool" 'has($t)' >/dev/null || missing="$missing $tool" + done + # shellcheck disable=SC2086 # one word per tool + [ -z "$missing" ] || mise use -g $missing + mise install{{ range .packages.shared.mise }} {{ . | quote }}{{ end }} + # omp's own installer (omp.sh/install) put a binary in ~/.local/bin, which + # precedes mise's shims on PATH; drop it once mise provides omp. + if [ -f "$HOME/.local/bin/omp" ] && [ ! -L "$HOME/.local/bin/omp" ] && mise which omp >/dev/null 2>&1; then + rm -f "$HOME/.local/bin/omp" + fi +else + echo "warning: mise not installed — skipping mise tools" >&2 +fi +{{- if and (eq .chezmoi.os "linux") (or (eq .role "desktop") (eq .role "laptop")) }} + +# strata (GUI file manager): binary in ~/.local/bin, desktop entry, and the +# FileManager1 D-Bus service for "Open file location". The inode/directory +# default is dot_config/mimeapps.list; --with-folder-association is not used +# because xdg-mime would replace that symlink with a plain file. Runtime deps +# are in packages.arch.desktop.pacman. +if [ ! -e "$HOME/.local/bin/strata" ]; then + curl -fsSL https://raw.githubusercontent.com/lgse/strata/main/install.sh | bash -s -- --with-desktop-entry --with-file-manager +fi + +# System file chooser: strata serves org.freedesktop.impl.portal.FileChooser +# for portal-aware apps (browsers, GTK). --install-portal writes the .portal +# and D-Bus service under ~/.local/share, prepends "strata;" to the +# FileChooser line of ~/.config/xdg-desktop-portal/-portals.conf +# (copied from the system one if absent; strata owns that file, not chezmoi, +# so `strata --uninstall-portal` can restore it), and restarts the portal. +if [ -e "$HOME/.local/bin/strata" ] && [ ! -e "${XDG_DATA_HOME:-$HOME/.local/share}/xdg-desktop-portal/portals/strata.portal" ]; then + "$HOME/.local/bin/strata" --install-portal +fi +{{- end }} diff --git a/.chezmoiscripts/run_onchange_after_20-gh-extensions.sh.tmpl b/.chezmoiscripts/run_onchange_after_20-gh-extensions.sh.tmpl new file mode 100644 index 0000000..fd9f650 --- /dev/null +++ b/.chezmoiscripts/run_onchange_after_20-gh-extensions.sh.tmpl @@ -0,0 +1,25 @@ +#!/usr/bin/env fish +# Install gh extensions declared in .chezmoidata/packages.yaml. +# A fish script, so fish's config (~/.config/fish, applied before after-scripts +# run) is sourced first: PATH (mise, ~/.local/bin, ~/.cargo/bin) and +# GITHUB_TOKEN (conf.d/10-env.fish) match a fish session. +# gh_extensions hash: {{ .packages.shared.gh_extensions | toJson | sha256sum }} + +if not command -q gh + echo "warning: gh not installed — skipping extensions" >&2 + exit 0 +end +if not gh auth status >/dev/null 2>&1 + echo "warning: gh not authenticated — run 'gh auth login', then 'chezmoi apply' again" >&2 + exit 0 +end + +set -l installed (gh extension list 2>/dev/null | string split -f2 \t) +set -l failed +for ext in{{ range .packages.shared.gh_extensions }} {{ . | quote }}{{ end }} + contains -- $ext $installed; or gh extension install $ext; or set -a failed $ext +end +if set -q failed[1] + echo "error: gh extension install failed for: $failed" >&2 + exit 1 +end diff --git a/.chezmoiscripts/run_onchange_after_25-skills.sh.tmpl b/.chezmoiscripts/run_onchange_after_25-skills.sh.tmpl new file mode 100755 index 0000000..087e7e3 --- /dev/null +++ b/.chezmoiscripts/run_onchange_after_25-skills.sh.tmpl @@ -0,0 +1,70 @@ +#!/bin/sh +# Sync agent skills with .chezmoidata/skills.yaml through the Skills CLI: +# install every declared skill (one `skills add` per source), then remove +# skills a previous run installed that are no longer declared. +# skills hash: {{ .skills | toJson | sha256sum }} +set -u + +command -v npx >/dev/null 2>&1 || { echo "warning: npx not found — skipping skills sync" >&2; exit 0; } + +src={{ .chezmoi.sourceDir | quote }} +state=${XDG_STATE_HOME:-$HOME/.local/state}/chezmoi/skills.txt +declared='{{ range .skills.sources }}{{ range .skills }} {{ . }}{{ end }}{{ end }} ' + +skills() { npx -y {{ .skills.cli | quote }} "$@" &2 +fi + +failed='' +log=$(mktemp) +trap 'rm -f "$log"' EXIT +add() { + source=$1 agents=$2 + shift 2 + echo "skills: $source → $*" + # shellcheck disable=SC2086 # agents is a space-separated list + if ! skills add "$source" -g -y -a $agents --skill "$@" >"$log" 2>&1; then + failed="$failed $source" + tail -n 8 "$log" >&2 + fi +} +{{ range .skills.sources -}} +{{ $agents := $.skills.agents -}} +{{ if hasKey . "agents" }}{{ $agents = .agents }}{{ end -}} +add {{ .source | quote }} {{ $agents | join " " | quote }}{{ range .skills }} {{ . | quote }}{{ end }} +{{ end -}} + +mkdir -p "$(dirname "$state")" +printf '%s\n' $declared >"$state" + +if [ -n "$failed" ]; then + # Non-zero keeps the old hash, so the next `chezmoi apply` retries. + echo "error: skills add failed for:$failed" >&2 + exit 1 +fi diff --git a/.chezmoiscripts/run_onchange_after_40-post.sh.tmpl b/.chezmoiscripts/run_onchange_after_40-post.sh.tmpl new file mode 100644 index 0000000..1842acb --- /dev/null +++ b/.chezmoiscripts/run_onchange_after_40-post.sh.tmpl @@ -0,0 +1,9 @@ +#!/bin/sh +# Post-apply housekeeping. Re-runs when this file's rendered content changes. +set -eu + +if command -v bat >/dev/null 2>&1; then bat cache --build >/dev/null || true; fi + +{{ if eq .chezmoi.os "linux" -}} +if command -v fc-cache >/dev/null 2>&1; then fc-cache -f >/dev/null || true; fi +{{ end -}} diff --git a/.chezmoiscripts/run_onchange_before_10-packages.sh.tmpl b/.chezmoiscripts/run_onchange_before_10-packages.sh.tmpl new file mode 100644 index 0000000..0996cdf --- /dev/null +++ b/.chezmoiscripts/run_onchange_before_10-packages.sh.tmpl @@ -0,0 +1,59 @@ +#!/bin/sh +# Install packages declared in .chezmoidata/packages.yaml. +# packages.yaml hash: {{ include ".chezmoidata/packages.yaml" | sha256sum }} +set -eu + +{{ if eq .chezmoi.os "linux" -}} +if [ "$(id -u)" -eq 0 ]; then PACMAN="pacman"; else PACMAN="sudo pacman"; fi + +# Install only what no installed package already provides (`pacman -T`), so a +# machine with mise-bin or yazi-git is not asked to replace them with mise/yazi. +install_missing() { + 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") -}} +install_missing {{ range .packages.arch.desktop.pacman }}{{ . }} {{ end }} + +# [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 }}" +{{ else -}} +aur_pkgs="{{ range .packages.arch.aur }}{{ . }} {{ end }}" +{{ end -}} +# AUR names no installed package provides yet; ones already installed from a +# sync repo ([omarchy], extra) are neither rebuilt nor replaced. +# shellcheck disable=SC2086 +aur_missing=$(pacman -T $aur_pkgs || true) +if [ -n "$aur_missing" ]; then + # No AUR helper yet: take yay from a sync repo that ships it, else build + # yay-bin from the AUR (makepkg refuses root). + if ! command -v yay >/dev/null 2>&1 && ! command -v paru >/dev/null 2>&1; then + if pacman -Si yay >/dev/null 2>&1; then + $PACMAN -S --needed --noconfirm yay + elif [ "$(id -u)" -ne 0 ]; then + install_missing git base-devel + yay_build=$(mktemp -d) + git clone --depth 1 https://aur.archlinux.org/yay-bin.git "$yay_build" + (cd "$yay_build" && makepkg -si --noconfirm) + rm -rf "$yay_build" + fi + fi + 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 + $AUR -S --needed --noconfirm $aur_missing + else + echo "warning: no yay/paru and none could be bootstrapped — skipping AUR packages:" $aur_missing >&2 + fi +fi +{{ end -}} diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..963a538 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,26 @@ +{ + "hooks": { + "PreCompact": [ + { + "hooks": [ + { + "command": "bd prime", + "type": "command" + } + ], + "matcher": "" + } + ], + "SessionStart": [ + { + "hooks": [ + { + "command": "bd prime", + "type": "command" + } + ], + "matcher": "" + } + ] + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2426615 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +/dot_config/lazygit/dot_omc + +# Beads / Dolt files (added by bd init) +.dolt/ +*.db +.beads-credential-key + +__pycache__/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..8bc00dc --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "dot_config/fish"] + path = dot_config/fish + url = https://github.com/prdlk/fish.git +[submodule "dot_config/hypr"] + path = dot_config/hypr + url = https://github.com/prdlk/hypr.git diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..c739d94 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,89 @@ +# AGENTS.md + +chezmoi source for `$HOME` on [Omarchy](https://omarchy.org) (Arch + Hyprland). Remote: `https://prad.codes/env/omarchy` (`git@prad.codes:env/omarchy.git`), branch `main`. + +Location: `~/Code/prad.codes/env/omarchy`. chezmoi uses it as its source either via `chezmoi init --source ~/Code/prad.codes/env/omarchy` or by cloning it into `~/.local/share/chezmoi` — the same checkout model either way: one working tree that chezmoi reads and that you commit from. + +`mode = "symlink"`: plain files in `$HOME` are symlinks into this repo, so editing `~/.config/foo/bar` edits `dot_config/foo/bar` directly. Templates (`*.tmpl`), `private_`, `executable_` targets are rendered copies — edit the source, then `chezmoi apply`. + +Config lives in three places. Check which one before editing. + +## 1. Local (this repo) + +`dot_*` trees committed here. Edit in place, commit here. Docs for each tool are in `docs/`; update the matching page (`docs/**/*.md`) when behavior changes. + +- Never edit a rendered copy of a `.tmpl`; edit the `.tmpl` and run `chezmoi apply `. +- Scripts: `.chezmoiscripts/run_*`. Data: `.chezmoidata/*.yaml` (packages, aliases, skills). +- Ignore rules: `.chezmoiignore.tmpl`. Repo docs (`AGENTS.md`, `README.md`, `docs/`) are listed there so they never land in `$HOME`. +- Roles: `desktop` (default), `laptop`, `server`. Desktop/laptop get the Omarchy layer (hypr, waybar, uwsm, fontconfig, mimeapps, systemd user units, `omarchy-*` scripts); `server` gets the universal toolset only. + +## 2. Submodules (`.gitmodules`) + +| Path | Repo | +| --- | --- | +| `dot_config/fish` | prdlk/fish | +| `dot_config/hypr` | prdlk/hypr | + +Still applied by chezmoi like local files, but the git history is separate: + +1. `cd dot_config/`, edit, commit, push there. +2. `cd` back to the root and commit the updated submodule pointer. + +Fresh clone: `git submodule update --init` (chezmoi does this on `init`). + +## 3. Externals (`.chezmoiexternals/*.toml`, `.chezmoiexternal.toml`) + +`git-repo` externals. chezmoi clones them into `$HOME` when missing and fast-forwards (`--ff-only`) at most every `refreshPeriod`. The source tree holds nothing for these — only the `.toml`. + +| Target | Repo | Declared in | +| --- | --- | --- | +| `~/.config/kitty` | prdlk/kitty | `.chezmoiexternals/kitty.toml` | +| `~/.config/ghostty` | prdlk/ghostty | `.chezmoiexternals/ghostty.toml` | +| `~/.config/tmux` | prdlk/tmux | `.chezmoiexternals/tmux.toml` | +| `~/.config/tmux-palette` | prdlk/tmux-palette | `.chezmoiexternals/tmux-palette.toml` | +| `~/.config/television` | prdlk/television | `.chezmoiexternals/television.toml` | +| `~/.config/yazi` | prdlk/yazi | `.chezmoiexternals/yazi.toml` | +| `~/.config/herdr` | prdlk/herdr | `.chezmoiexternals/herdr.toml` (`plugins/github/` gitignored, runtime plugin checkouts) | +| `~/.config/omarchy` | prdlk/omarchy | `.chezmoiexternals/omarchy.toml` (git themes/plugins live in its `extras.txt`, not this repo) | +| `~/.omp` | prdlk/omp | `.chezmoiexternals/omp.toml` | +| `~/.local/bin/agent-root` | jankeesvw/agent-root (one `file` external, not a checkout; no edits, upstream script) | `.chezmoiexternals/agent-root.toml` (desktop/laptop roles only) | +| `~/.config/nvim` | prdlk/nvim | `.chezmoiexternal.toml` (no refresh; local checkout wins) | +| `~/.config/tmux/plugins/tpm` | tmux-plugins/tpm | `.chezmoiexternal.toml` | +| `~/.config/bat/syntaxes/sublime-purescript-syntax` | tellnobody1/… | `.chezmoiexternal.toml` | + +These stay on their GitHub URLs; they are separate repos, not part of this one. + +Editing: `cd ~/.config/` (the live checkout), edit, commit, push there. Nothing to commit in this repo. Do not `chezmoi add` these paths. + +Local working copies under `~/Code/github.com/prdlk/` are ordinary clones of the same repos; `~/.config/` is the one chezmoi manages and the one tools read. + +Pulling a remote change before the refresh window: `chezmoi apply --refresh-externals ~/.config/` (or `git pull` in the checkout). `--ff-only` means a diverged local checkout silently stays put — commit or stash first. + +## Moving a config out to an external + +1. Create the repo, copy the files (strip chezmoi prefixes; a `symlink_x` file becomes a real symlink), commit, push. +2. Add `.chezmoiexternals/.toml` copying `tmux.toml`. +3. `git rm -r dot_config/`; drop any ``-specific lines from `.chezmoiignore.tmpl` / `.gitignore`. +4. `mv ~/.config/ /tmp/bak && chezmoi apply --force ~/.config/`; diff against the repo, then delete the backup. +5. Update `docs/` (the tool's page, `docs/terminal/README.md` or sibling index, `docs/chezmoi/externals-and-ignore.md`) 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 Omarchy machine yields a working setup. When a config, script, tmux-palette item, television cable `requirements`, or Hyprland 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`; yay bootstrapped if neither exists) | every role | +| `arch.desktop.pacman` / `.aur` | same | roles `desktop`, `laptop` | +| `arch.desktop.omarchy` | pacman, only if `pacman-conf -l` lists `omarchy` | Omarchy machines | +| `shared.cargo` | `15-tools`, after installing rustup if `cargo` is missing | every role | +| `shared.mise` | `15-tools`: `mise use -g` for tools absent from the global config | every role | +| `shared.gh_extensions` | `20-gh-extensions` (fish script, so fish config is sourced) | every role | + +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, `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 + +- `chezmoi diff` empty after apply. +- `chezmoi managed | grep ` shows the target. +- Externals: `git -C ~/.config/ status -sb` clean and tracking `origin/main`. diff --git a/README.md b/README.md new file mode 100644 index 0000000..6c20982 --- /dev/null +++ b/README.md @@ -0,0 +1,73 @@ +# omarchy + +chezmoi source for an [Omarchy](https://omarchy.org) machine (Arch + Hyprland), hosted at . + +Install Omarchy first, then on that machine: + +```sh +sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply https://prad.codes/env/omarchy.git +# or over SSH: +sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply git@prad.codes:env/omarchy.git +``` + +chezmoi clones the `dot_config/fish` and `dot_config/hypr` submodules during `init`. + +First apply prompts once for name, email, and machine role +(`desktop` | `laptop` | `server`, default `desktop`). `desktop` and `laptop` get +the Omarchy layer (Hyprland config, Waybar, uwsm env, fontconfig, mimeapps, +systemd user units, `omarchy-*` scripts); `server` gets the universal toolset only. + +## Prerequisites + +- **Omarchy** installed (provides Hyprland, Waybar, the `omarchy-*` commands and `yay`). + `sudo` for pacman; if no `yay`/`paru` exists the install script bootstraps `yay`. +- **Secrets**: `age`-encrypted files need the key at + `~/.config/chezmoi/key.txt`. Copy it there **before** `chezmoi apply` + (distributed manually, never committed): + + ```sh + mkdir -p ~/.config/chezmoi + scp :.config/chezmoi/key.txt ~/.config/chezmoi/key.txt + chmod 600 ~/.config/chezmoi/key.txt + ``` + +## What's managed + +Universal: fish, bash + zsh (starship prompt, shared aliases), nvim, tmux, +kitty, ghostty, yazi, lazygit, lazydocker, gh (+ extensions), topgrade, git, +ssh config, Claude Code and agent skills. +Packages are declared in `.chezmoidata/packages.yaml` and installed by +`.chezmoiscripts` (idempotent, re-run when the manifest changes). + +Aliases are defined once in `.chezmoidata/aliases.yaml` and rendered +into fish (`fish/conf.d/20-aliases.fish`) and bash/zsh +(`~/.config/shell/aliases.sh`, sourced by `.bashrc`/`.zshrc`). + +Shell utilities live as standalone sh/bash executables in `~/.local/bin` +so all shells share one implementation; helpers that must mutate shell state +(`cd`-style) are per-shell functions in `fish/functions/`, `bash/functions/`, +and `zsh/functions/`. + +Agent skills are not vendored: `.chezmoidata/skills.yaml` lists every +skill and its upstream source, and +`.chezmoiscripts/run_onchange_after_25-skills.sh.tmpl` installs them with the +Skills CLI whenever that file changes. + +Omarchy layer (roles `desktop`/`laptop`): `dot_config/hypr` (submodule), +`dot_config/waybar`, `dot_config/uwsm`, fontconfig, mimeapps, +`xdg-terminals.list`, systemd user units, and the `omarchy-*` scripts in +`dot_local/bin`. + +## Submodules and externals + +- Submodules: `dot_config/fish` (prdlk/fish), `dot_config/hypr` (prdlk/hypr). +- Externals (`.chezmoiexternals/`): kitty, ghostty, tmux, tmux-palette, + television, yazi, herdr, omp, omarchy (`~/.config/omarchy`), agent-root, + plus nvim, tpm and a bat syntax in `.chezmoiexternal.toml`. + +`gh` needs `gh auth login` once per machine; the extension install script +skips gracefully until then and re-runs on the next apply. + +## Docs + +See [`docs/README.md`](docs/README.md). Agent rules for working in this repo: [`AGENTS.md`](AGENTS.md). diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..6c866af --- /dev/null +++ b/docs/README.md @@ -0,0 +1,71 @@ +# dots (omarchy) + +prdlk's dotfiles for [Omarchy](https://omarchy.org) (Arch Linux + Hyprland), managed with chezmoi. One command installs chezmoi and applies the whole setup. + +```sh +sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply https://prad.codes/env/omarchy.git +``` + +That command installs chezmoi, clones [env/omarchy](https://prad.codes/env/omarchy) together with its submodules, asks three questions (name, email, machine role), installs packages, and applies every config. See [Installation](installation.md) for prerequisites, the age key step, and the options. + +## Table of contents + +- [Installation](installation.md): Omarchy first, then the one-liner, the age key, roles, and updating. +- [How it works](chezmoi/README.md): chezmoi layout, machine roles, symlink mode, age encryption, package manifests, apply scripts, and externals. + - [Overview](chezmoi/README.md) + - [Configuration](chezmoi/config.md) + - [Data files](chezmoi/data.md) + - [Scripts](chezmoi/scripts.md) + - [Externals and ignore rules](chezmoi/externals-and-ignore.md) +- [Shell](shell/README.md): fish, bash, and zsh with shared aliases, starship, atuin, and the `~/.local/bin` scripts. + - [Overview](shell/README.md) + - [fish](shell/fish.md) + - [bash and zsh](shell/bash-zsh.md) + - [Aliases](shell/aliases.md) + - [Scripts](shell/scripts.md) + - [Starship](shell/starship.md) + - [Atuin](shell/atuin.md) +- [Terminal](terminal/README.md): kitty, ghostty, tmux, and herdr. + - [Overview](terminal/README.md) + - [kitty](terminal/kitty.md) + - [Ghostty](terminal/ghostty.md) + - [tmux](terminal/tmux.md) + - [herdr](terminal/herdr.md) +- [Tools](tools/README.md): git, gh and gh-dash, neovim, yazi, lazygit, lazydocker, bat, topgrade, hunk, and more. + - [Overview](tools/README.md) + - [Git](tools/git.md) + - [GitHub CLI](tools/github-cli.md) + - [Neovim](tools/neovim.md) + - [Yazi](tools/yazi.md) + - [lazygit](tools/lazygit.md) + - [lazydocker](tools/lazydocker.md) + - [bat](tools/bat.md) + - [television](tools/television.md) + - [Topgrade](tools/topgrade.md) + - [hunk](tools/hunk.md) + - [drydock](tools/drydock.md) + - [LeetCode](tools/leetcode.md) +- [Desktop](desktop/README.md): Omarchy, Hyprland, Waybar, fonts, and default apps. + - [Overview](desktop/README.md) + - [Hyprland](desktop/hyprland.md) + - [Waybar](desktop/waybar.md) + - [Fonts and apps](desktop/fonts-and-apps.md) +- [AI agents](ai/README.md): Claude Code, omp, and the shared agent skill library. + - [Overview](ai/README.md) + - [Skills](ai/skills.md) + +## Machine roles + +The first apply asks for a role. It controls which parts of the repo land on the machine. + +| Role | Platform | Gets | +| --- | --- | --- | +| `desktop` | Omarchy (Arch Linux) | Everything: universal toolset plus the Linux desktop layer | +| `laptop` | Omarchy (Arch Linux) | Same as `desktop` | +| `server` | Any Linux | Universal toolset only | + +The default is `desktop`. See [Configuration](chezmoi/config.md) and [Ignore rules](chezmoi/externals-and-ignore.md). + +## Theme + +The terminal and agent palette is **CherryBlossom** (background `#222120`, foreground `#dcc1b7`, accent `#cf716f`). Ghostty selects its `cherry-blossom` theme, tmux colors its tab bar, popups, and command palette with it, atuin selects `cherry-blossom`, television selects `cherry-blossom-transparent` (no background, so the terminal's shows through), lazygit and lazydocker use its border and selection colors, and omp selects its `cherry-blossom` dark theme. nvim, bat, and yazi still select **cyberdream**; fish ships a cyberdream theme but does not select it. kitty takes its colors from the active Omarchy theme. The koda and ii-auto variants are also shipped for ghostty, kitty, and yazi. The font is **Victor Mono Nerd Font**. diff --git a/docs/ai/README.md b/docs/ai/README.md new file mode 100644 index 0000000..f061a58 --- /dev/null +++ b/docs/ai/README.md @@ -0,0 +1,20 @@ +# AI agents + +The shared agent skill library and the shell entry points for coding agents. + +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.md#15-tools)) and are updated by topgrade's `mise upgrade`; no other agent CLI is installed by chezmoi. + +- [Skills](skills.md): Agent skills declared in `.chezmoidata/skills.yaml` and installed into `~/.agents/skills` and `~/.claude/skills` by an apply script. + +## Pages + +| Page | Source in repo | Target in `$HOME` | Covers | +| --- | --- | --- | --- | +| [Skills](skills.md) | `.chezmoidata/skills.yaml`, `.chezmoiscripts/run_onchange_after_25-skills.sh.tmpl` | `~/.agents/skills/`, `~/.claude/skills/` | Skill list and sources; installed by the Skills CLI, not vendored | + +## Shell entry points + +- `ai` (fish function) opens a `gum choose` picker over `claude`, `opencode`, `codex`, `hermes`, and `fractal`. Picking `claude` runs `claude --dangerously-skip-permissions`; the others run the binary of the same name. See [fish](../shell/fish.md). +- Ctrl A runs [`omp-session`](../shell/scripts.md#omp-session) from the fish and zsh prompt: on the default branch it resumes a session written in the last 3 hours, else opens the `omp-sessions` television cable; on any other branch it resumes that branch's newest session or starts a new one. `tv agents` still lists every installed agent CLI ([television](../tools/television.md#agents)). +- Ctrl N starts a new omp session from the fish and zsh prompt, skipping every resume rule. Inside the `omp-sessions` cable, ctrl-n does the same instead of resuming the selected session. +- `launch_omp_livediff_overlay` and `lc-elir` are omp helpers in `~/.local/bin`; see [scripts](../shell/scripts.md). diff --git a/docs/ai/skills.md b/docs/ai/skills.md new file mode 100644 index 0000000..e2f0d9f --- /dev/null +++ b/docs/ai/skills.md @@ -0,0 +1,218 @@ +# Skills + +Agent skills declared in .chezmoidata/skills.yaml and installed into ~/.agents/skills and ~/.claude/skills by a chezmoi script. + +Agent skills are folders with a `SKILL.md` file (frontmatter `name` and `description`, then instructions) that agents load on demand. The repo does not vendor them. It declares each skill and its source in `.chezmoidata/skills.yaml`, and the `run_onchange_after_25-skills.sh.tmpl` script installs them with the Skills CLI (`npx skills`) on `chezmoi apply`. + +## Files + +| Source in repo | Target | Notes | +| --- | --- | --- | +| `.chezmoidata/skills.yaml` | chezmoi data `.skills` | CLI version, default agents, and one entry per source | +| `.chezmoiscripts/run_onchange_after_25-skills.sh.tmpl` | runs `skills add` / `skills remove` | Re-runs when `.skills` changes; see [Scripts](../chezmoi/scripts.md#25-skills) | + +Not role-gated; the sync runs on every machine. Installed skill files are machine state, not repo files: + +| Path | Written by | Contents | +| --- | --- | --- | +| `~/.agents/skills//` | Skills CLI | Shared library for `universal` installs, read by Codex, Gemini CLI, OpenCode, Zed, … | +| `~/.claude/skills/` | Skills CLI | Relative symlink `../../.agents/skills/` for universal installs; a real copied directory for Claude-only installs | +| `$XDG_STATE_HOME/skills/.skill-lock.json` | Skills CLI | The CLI's own install record (`~/.agents/.skill-lock.json` when `XDG_STATE_HOME` is unset) | +| `${XDG_STATE_HOME:-~/.local/state}/chezmoi/skills.txt` | sync script | Skill names installed by the previous sync, used to remove undeclared ones | + +## skills.yaml + +```yaml +skills: + cli: skills@1.7.0 # pinned CLI, run via npx -y + agents: [universal, claude-code] # default install targets + sources: + - source: cloudflare/skills + agents: [claude-code] # Claude Code only + skills: [agents-sdk, durable-objects] +``` + +| Key | Meaning | +| --- | --- | +| `cli` | npm spec of the Skills CLI, run as `npx -y ` | +| `agents` | Default `-a` targets. `universal` is `~/.agents/skills`; `claude-code` is `~/.claude/skills` | +| `sources[].source` | Anything `skills add` accepts: `owner/repo` (default branch), a GitHub tree URL (pins a ref or subdirectory), or a well-known endpoint URL | +| `sources[].skills` | Skill names to install from that source (`--skill`) | +| `sources[].agents` | Optional override of the default `agents` | + +108 skills across 42 source entries. `cloudflare/skills` appears twice: once with the defaults, once with `agents: [claude-code]`. + +### Pinned sources + +Unpinned sources track the upstream default branch, so skill content updates whenever the sync runs. Skills that upstream deleted or renamed are pinned to the last ref that still has them: + +| Source | Skills | Reason | +| --- | --- | --- | +| `https://github.com/mattpocock/skills/tree/v1.1.0` | `design-an-interface`, `obsidian-vault`, `qa`, `request-refactor-plan`, `ubiquitous-language`, `writing-great-skills` | Removed upstream in c66bdee (`writing-great-skills` became `writing-for-agents`) | +| `https://github.com/mattpocock/skills/tree/153fc1b…` | `resolving-merge-conflicts` | Removed upstream in daa01d8 | +| `https://github.com/terrylica/cc-skills/tree/6d35f84…` | `mise-tasks` | Retired upstream in dd0d3f2f | +| `https://github.com/cloudflare/skills/tree/30553f8…` | `sandbox-sdk` | Replaced upstream by `sandbox-stable` / `sandbox-next` in f96bff7 | + +`create-beads-orchestration` uses the subdirectory URL `https://github.com/AvivK5498/Claude-Code-Beads-Orchestration/tree/main/skills/create-beads-orchestration`, because the bare repo's root `SKILL.md` would install the whole repository as the skill. The Mintlify skills come from the well-known endpoint `https://mintlify.com/docs`. + +### Not managed + +`omarchy` and `diagnose-crash` (symlinks into `/usr/share/omarchy`) and `terminal-browser` are installed by other packages. They are not in `skills.yaml`, and the sync never touches them. + +## Managing skills + +Find a skill's source and name with the CLI, then declare it: + +```sh +npx skills find # search the registry +npx skills add --list # list the skills a source provides +``` + +- **Add**: add the name under its source in `.chezmoidata/skills.yaml` (or a new `source` entry) and run `chezmoi apply`. +- **Remove**: delete the name and run `chezmoi apply`; the sync runs `skills remove` for it. +- **Claude Code only**: put it in an entry with `agents: [claude-code]`. + +Do not `npx skills add` by hand and expect chezmoi to track it; only `skills.yaml` is the record. The script only re-runs when `.skills` changes, so unpinned sources pick up upstream updates on the next sync after an edit to `skills.yaml`. + +## How the sync works + +1. **Trigger** + + The script is `run_onchange_after_`: chezmoi re-runs it after applying files whenever the sha256 of `.skills` (as JSON) changes. If `npx` is missing it warns and skips. + +2. **Migrate** + + One-time cleanup of the old vendored layout: deletes any directory in `~/.agents/skills` or `~/.claude/skills` that contains symlinks into the chezmoi source directory, and removes `~/.agents/.skill-lock.json` if it is a symlink into the source directory. + +3. **Remove** + + Skills listed in `skills.txt` (the previous sync) but no longer declared are removed with `skills remove -g -y`. + +4. **Install** + + One `skills add -g -y -a --skill ` per source entry. Output is captured; on failure the last 8 lines are printed. + +5. **Record** + + The declared names are written to `skills.txt`. Claude-only (`-a claude-code`) installs are not recorded in the CLI lock, which is why the script keeps its own state file. + +6. **Retry** + + If any source failed the script exits 1, so chezmoi keeps the old hash and runs it again on the next apply. + +Every universal skill gets both a `~/.agents/skills` directory and a `~/.claude/skills` link. Claude Code resolves `~/.claude/skills/` → `../../.agents/skills/`, so both read the same files. + +## Library + +The Description column is the first sentence of each installed skill's `SKILL.md` frontmatter `description`. Source is the `source` from `skills.yaml` (GitHub URLs shortened to `owner/repo/tree/`). Agents `claude-code` means the skill is installed as a real directory in `~/.claude/skills` only. + +| Skill | Source | Agents | Description | +| --- | --- | --- | --- | +| `absurd` | `earendil-works/absurd` | claude-code | Debug and operate Absurd durable workflows with absurdctl. | +| `agents-sdk` | `cloudflare/skills` | claude-code | Build, debug, or review Cloudflare Agents SDK applications using the agents package. | +| `brandkit` | `Leonxlnx/taste-skill` | universal + claude-code | Premium brand-kit image generation skill for creating high-end brand-guidelines boards, logo systems, identity decks, and visual-world presentations. | +| `bun-development` | `sickn33/antigravity-awesome-skills` | universal + claude-code | Fast, modern JavaScript/TypeScript development with the Bun runtime, inspired by [oven-sh/bun](https://github.com/oven-sh/bun). | +| `cloudflare` | `cloudflare/skills` | universal + claude-code | Discover and choose Cloudflare products for apps, APIs, AI agents, storage, networking, and security. | +| `cloudflare-email-service` | `cloudflare/skills` | claude-code | Implement or troubleshoot Cloudflare Email Sending and Email Routing integrations and their delivery configuration. | +| `cloudflare-one` | `cloudflare/skills` | claude-code | Design, configure, troubleshoot, or review Cloudflare One Zero Trust and SASE deployments. | +| `cloudflare-one-migrations` | `cloudflare/skills` | claude-code | Assess and plan migrations from existing VPN, SWG, or SASE platforms to Cloudflare One, including policy mapping, parity gaps, and rollout. | +| `codebase-design` | `mattpocock/skills` | universal + claude-code | Shared vocabulary for designing deep modules. | +| `core` | `vercel-labs/json-render` | universal + claude-code | Core package for defining schemas, catalogs, and AI prompt generation for json-render. | +| `create-beads-orchestration` | `AvivK5498/Claude-Code-Beads-Orchestration/tree/main/skills/create-beads-orchestration` | claude-code | Bootstrap lean multi-agent orchestration with beads task tracking. | +| `deepinit` | `yeachan-heo/oh-my-claudecode` | universal + claude-code | Deep codebase initialization with hierarchical AGENTS.md documentation | +| `design-an-interface` | `mattpocock/skills/tree/v1.1.0` | universal + claude-code | Generate multiple radically different interface designs for a module using parallel sub-agents. | +| `design-taste-frontend` | `Leonxlnx/taste-skill` | universal + claude-code | Anti-slop frontend skill for landing pages, portfolios, and redesigns. | +| `diagnosing-bugs` | `mattpocock/skills` | universal + claude-code | Diagnosis loop for hard bugs and performance regressions. | +| `domain-modeling` | `mattpocock/skills` | universal + claude-code | Build and sharpen a project's domain model. | +| `durable-objects` | `cloudflare/skills` | claude-code | Build, debug, or review Cloudflare Durable Objects code for persistent state and coordination. | +| `eli5` | `coldteadotai/pr-lens` | universal + claude-code | Explains a codebase, a folder, a feature, a command or a pull request to someone who knows nothing about it, as a PR Lens canvas whose walkthrough builds the picture one part at a time. | +| `find-skills` | `vercel-labs/skills` | universal + claude-code | Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. | +| `fumadocs-component-docs` | `TheOrcDev/8bitcn-ui` | universal + claude-code | Create component documentation with installation, usage examples, and preview sections. | +| `fumadocs-mdx-structure` | `TheOrcDev/8bitcn-ui` | universal + claude-code | Create MDX documentation files with proper frontmatter, imports, and component integration. | +| `fumadocs-registry-integration` | `TheOrcDev/8bitcn-ui` | universal + claude-code | Register 8-bit components in registry.json for shadcn/ui add command. | +| `git-guardrails-claude-code` | `mattpocock/skills` | universal + claude-code | Set up Claude Code hooks to block dangerous git commands (push, reset --hard, clean, branch -D, etc.) before they execute. | +| `golang-pro` | `jeffallan/claude-skills` | universal + claude-code | Implements concurrent Go patterns using goroutines and channels, designs and builds microservices with gRPC or REST, optimizes Go application performance with pprof, and enforces idiomatic Go with generics, interfaces, and robust error handling. | +| `gpt-taste` | `Leonxlnx/taste-skill` | universal + claude-code | Elite UX/UI & Advanced GSAP Motion Engineer. | +| `grill-me` | `mattpocock/skills` | universal + claude-code | A relentless interview to sharpen a plan or design. | +| `grill-with-docs` | `mattpocock/skills` | universal + claude-code | A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go. | +| `grilling` | `mattpocock/skills` | universal + claude-code | Grill the user relentlessly about a plan, decision, or idea. | +| `handoff` | `mattpocock/skills` | universal + claude-code | Compact the current conversation into a handoff document for another agent to pick up. | +| `high-end-visual-design` | `Leonxlnx/taste-skill` | universal + claude-code | Teaches the AI to design like a high-end agency. | +| `imagegen-frontend-web` | `Leonxlnx/taste-skill` | universal + claude-code | Elite frontend image-direction skill for generating premium, conversion-aware website design references. | +| `implement` | `mattpocock/skills` | universal + claude-code | Implement a piece of work based on a spec or set of tickets. | +| `improve-codebase-architecture` | `mattpocock/skills` | universal + claude-code | Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick. | +| `interface-design` | `Dammyjay93/interface-design` | universal + claude-code | Craft-first interface design for dashboards, admin panels, SaaS apps, tools, settings pages, data interfaces, and interactive products. | +| `laws-of-ux` | `RoleModel/rolemodel-skills` | universal + claude-code | Review and guide UI implementations using the 21 Laws of UX. | +| `linear` | `openai/skills` | universal + claude-code | Manage issues, projects & team workflows in Linear. | +| `linear-cli` | `schpet/linear-cli` | universal + claude-code | Manage Linear issues from the command line using the linear cli. | +| `linear-documents` | `finesssee/linear-cli` | universal + claude-code | Manage Linear documents. | +| `loop-me` | `mattpocock/skills` | universal + claude-code | Grill me about specs for the workflows I want to build, within this workspace. | +| `loopy` | `Forward-Future/loop-library` | universal + claude-code | Discover, find, compare, audit, repair, adapt, craft, run, debrief, save, and prepare repeatable AI-agent loops for publication. | +| `migrate-to-shoehorn` | `mattpocock/skills` | universal + claude-code | Migrate test files from `as` type assertions to @total-typescript/shoehorn. | +| `minimalist-ui` | `Leonxlnx/taste-skill` | universal + claude-code | Clean editorial-style interfaces. | +| `mintlify` | `https://mintlify.com/docs` | universal + claude-code | Build and maintain documentation sites with Mintlify. | +| `mintlify-api` | `https://mintlify.com/docs` | universal + claude-code | Interact with the Mintlify REST API to manage deployments, trigger builds, and query documentation site metadata programmatically. | +| `mintlify-docs` | `https://mintlify.com/docs` | universal + claude-code | Build and maintain documentation sites with Mintlify. | +| `mise-tasks` | `terrylica/cc-skills/tree/6d35f84` | universal + claude-code | Orchestrate multi-step project workflows using mise task definitions with dependency management and argument handling. | +| `native-sdk` | `vercel-labs/native` | universal + claude-code | Discovery skill for the Native SDK, the complete toolkit for building native desktop applications. | +| `no-ai-slop` | `petergyang/no-ai-slop` | universal + claude-code | Edit drafts into sharper, more human writing while preserving the writer's personal voice, or detect AI-slop patterns without rewriting. | +| `obscura` | `h4ckf0r0day/obscura` | universal + claude-code | Operate and validate Obscura for JavaScript page loading, stealth browsing, anti-fingerprinting, and browser automation. | +| `obsidian-vault` | `mattpocock/skills/tree/v1.1.0` | universal + claude-code | Search, create, and manage notes in the Obsidian vault with wikilinks and index notes. | +| `openlogs-server-logs` | `charlietlamb/openlogs` | universal + claude-code | Fetch and inspect recent local server logs in repos that use openlogs or the `ol` CLI. | +| `pr-lens` | `coldteadotai/pr-lens` | universal + claude-code | Draws a code change or part of a codebase as an animated architecture or data-flow diagram, on its own or in a pull request. | +| `prototype` | `mattpocock/skills` | universal + claude-code | Build a throwaway prototype to answer a design question. | +| `qa` | `mattpocock/skills/tree/v1.1.0` | universal + claude-code | Interactive QA session where user reports bugs or issues conversationally, and the agent files GitHub issues. | +| `react` | `vercel-labs/json-render` | universal + claude-code | React renderer for json-render that turns JSON specs into React components. | +| `react-email` | `vercel-labs/json-render` | universal + claude-code | React Email renderer for json-render that turns JSON specs into HTML or plain-text emails using @react-email/components and @react-email/render. | +| `redesign-existing-projects` | `Leonxlnx/taste-skill` | universal + claude-code | Upgrades existing websites and apps to premium quality. | +| `remix` | `remix-run/remix` | universal + claude-code | Builds, reviews, and refactors Remix 3 apps using the remix package and remix/* imports. | +| `remotion-best-practices` | `remotion-dev/skills` | universal + claude-code | Router for all Remotion skills | +| `remotion-captions` | `remotion-dev/skills` | universal + claude-code | Transcribing, displaying and animating captions | +| `remotion-create` | `remotion-dev/skills` | universal + claude-code | Create a new Remotion video | +| `remotion-docs` | `remotion-dev/skills` | universal + claude-code | Search Remotion documentation | +| `remotion-interactivity` | `remotion-dev/skills` | universal + claude-code | Structure Remotion markup for interactivity | +| `remotion-maps` | `remotion-dev/skills` | universal + claude-code | Remotion Map animation knowledge | +| `remotion-markup` | `remotion-dev/skills` | universal + claude-code | Content, animation and effects best practices | +| `remotion-multimedia` | `remotion-dev/skills` | universal + claude-code | Interacting with Mediabunny | +| `remotion-render` | `remotion-dev/skills` | universal + claude-code | Export a Remotion video | +| `remotion-saas` | `remotion-dev/skills` | universal + claude-code | Build an app with Remotion | +| `remotion-studio` | `remotion-dev/skills` | universal + claude-code | Preview a Remotion video | +| `remotion-upgrade` | `remotion-dev/skills` | universal + claude-code | Upgrade Remotion, and related packages | +| `request-refactor-plan` | `mattpocock/skills/tree/v1.1.0` | universal + claude-code | Create a detailed refactor plan with tiny commits via user interview, then file it as a GitHub issue. | +| `resolving-merge-conflicts` | `mattpocock/skills/tree/153fc1b` | universal + claude-code | Use when you need to resolve an in-progress git merge/rebase conflict. | +| `rust-async-patterns` | `wshobson/agents` | universal + claude-code | Master Rust async programming with Tokio, async traits, error handling, and concurrent patterns. | +| `rust-best-practices` | `apollographql/skills` | universal + claude-code | Guide for writing idiomatic Rust code based on Apollo GraphQL's best practices handbook. | +| `rust-skills` | `leonardomso/rust-skills` | universal + claude-code | Comprehensive Rust coding guidelines with 265 rules across 26 categories. | +| `rust-testing` | `affaan-m/everything-claude-code` | universal + claude-code | Rust testing patterns including unit tests, integration tests, async testing, property-based testing, mocking, and coverage. | +| `sandbox-sdk` | `cloudflare/skills/tree/30553f8` | claude-code | Build sandboxed applications for secure code execution. | +| `scaffold-exercises` | `mattpocock/skills` | universal + claude-code | Create exercise directory structures with sections, problems, solutions, and explainers that pass linting. | +| `setup-matt-pocock-skills` | `mattpocock/skills` | universal + claude-code | Configure this repo for the engineering skills: set up its issue tracker, triage label vocabulary, and domain doc layout. | +| `setup-pre-commit` | `mattpocock/skills` | universal + claude-code | Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. | +| `shadcn` | `shadcn-ui/ui` | universal + claude-code | Manages shadcn components and projects — adding, searching, fixing, debugging, styling, and composing UI, including chat interfaces. | +| `solidity-foundry-development` | `whackur/solidity-agent-toolkit` | universal + claude-code | Foundry development workflow for Solidity smart contracts. | +| `solidity-security` | `wshobson/agents` | universal + claude-code | Master smart contract security best practices to prevent common vulnerabilities and implement secure Solidity patterns. | +| `stop-slop` | `hardikpandya/stop-slop` | universal + claude-code | Remove AI writing patterns from prose. | +| `tanstack-form` | `tanstack-skills/tanstack-skills` | universal + claude-code | Headless, performant, and type-safe form state management for TS/JS, React, Vue, Angular, Solid, Lit, and Svelte. | +| `tanstack-integration-best-practices` | `deckardger/tanstack-agent-skills` | universal + claude-code | Best practices for integrating TanStack Query with TanStack Router and TanStack Start. | +| `tanstack-query-best-practices` | `deckardger/tanstack-agent-skills` | universal + claude-code | TanStack Query (React Query) best practices for data fetching, caching, mutations, and server state management. | +| `tanstack-router-best-practices` | `deckardger/tanstack-agent-skills` | universal + claude-code | TanStack Router best practices for type-safe routing, data loading, search params, and navigation. | +| `tanstack-start-best-practices` | `deckardger/tanstack-agent-skills` | universal + claude-code | TanStack Start best practices for full-stack React applications. | +| `tanstack-table` | `tanstack-skills/tanstack-skills` | universal + claude-code | Headless UI for building powerful tables & datagrids for TS/JS, React, Vue, Solid, Svelte, Qwik, Angular, and Lit. | +| `tdd` | `mattpocock/skills` | universal + claude-code | Test-driven development. | +| `teach` | `mattpocock/skills` | universal + claude-code | Teach the user a new skill or concept, within this workspace. | +| `todoist-cli` | `Doist/todoist-cli` | universal + claude-code | Manage Todoist tasks, projects, labels, filters, sections, comments, reminders, and workspaces via the `td` CLI. | +| `triage` | `mattpocock/skills` | universal + claude-code | Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs. | +| `turnstile-spin` | `cloudflare/skills` | claude-code | Set up, repair, or migrate to Cloudflare Turnstile bot verification in an existing frontend and backend, including server-side Siteverify. | +| `typescript-expert` | `remix-run/remix` | universal + claude-code | Write, refactor, or review TypeScript code with strict, precise, maintainable types and without unnecessary `any`, type assertions, or type suppressions. | +| `ubiquitous-language` | `mattpocock/skills/tree/v1.1.0` | universal + claude-code | Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. | +| `ui-ux-pro-max` | `nextlevelbuilder/ui-ux-pro-max-skill` | universal + claude-code | UI/UX design intelligence for web, mobile, and desktop. | +| `uv-package-manager` | `wshobson/agents` | universal + claude-code | Master the uv package manager for fast Python dependency management, virtual environments, and modern Python project workflows. | +| `web-design-guidelines` | `vercel-labs/agent-skills` | universal + claude-code | Review UI code for Web Interface Guidelines compliance. | +| `web-perf` | `cloudflare/skills` | claude-code | Audit, diagnose, or optimize website loading and interaction performance, Core Web Vitals, and Lighthouse performance scores. | +| `workers-best-practices` | `cloudflare/skills` | universal + claude-code | Cloudflare Workers best practices for production applications. | +| `wrangler` | `cloudflare/skills` | universal + claude-code | Run or troubleshoot Wrangler CLI commands and configure Worker projects for local development, Previews, deployment, and Cloudflare resource management. | +| `write-tests` | `remix-run/remix` | universal + claude-code | Write, refactor, or review tests in the Remix repository. | +| `writing-beats` | `mattpocock/skills` | universal + claude-code | Writing, exploit; assemble raw material into a journey of beats, grounding each term before a beat leans on it. | +| `writing-fragments` | `mattpocock/skills` | universal + claude-code | Writing, explore: mine raw fragments, no structure yet. | +| `writing-great-skills` | `mattpocock/skills/tree/v1.1.0` | universal + claude-code | Reference for writing and editing skills well — the vocabulary and principles that make a skill predictable. | +| `writing-shape` | `mattpocock/skills` | universal + claude-code | Writing, exploit: shape raw material into an article, paragraph by paragraph. | diff --git a/docs/chezmoi/README.md b/docs/chezmoi/README.md new file mode 100644 index 0000000..ba85797 --- /dev/null +++ b/docs/chezmoi/README.md @@ -0,0 +1,142 @@ +# How it works + +Source layout, naming conventions, symlink mode, and the day-to-day chezmoi workflow for this repo. + +The repo is a [chezmoi](https://chezmoi.io) source directory. It lives at `~/Code/prad.codes/env/omarchy` and chezmoi uses it as its source, either through `chezmoi init --source ~/Code/prad.codes/env/omarchy` or by cloning it into `~/.local/share/chezmoi`; both are the same checkout model chezmoi expects. Its remote is [env/omarchy](https://prad.codes/env/omarchy) (branch `main`). `chezmoi apply` renders it into `$HOME`. The [Installation](../installation.md) page covers first-time setup. + +## Pages in this section + +| Page | Covers | +| --- | --- | +| [Config and roles](config.md) | `.chezmoi.toml.tmpl`: prompts, machine role, symlink mode, age encryption, template data | +| [Packages and aliases](data.md) | `.chezmoidata/packages.yaml` and `.chezmoidata/aliases.yaml`, and how they render | +| [Apply scripts](scripts.md) | Every `run_*` script: when it runs, what triggers it, what it does per role | +| [Externals and ignore rules](externals-and-ignore.md) | `.chezmoiexternal.toml` git clones and every `.chezmoiignore.tmpl` rule | + +## Source layout + +```text +.chezmoi.toml.tmpl +.chezmoidata/ + aliases.yaml + packages.yaml + skills.yaml +.chezmoiexternal.toml +.chezmoiexternals/ + agent-root.toml + ghostty.toml + herdr.toml + kitty.toml + omarchy.toml + omp.toml + television.toml + tmux.toml + tmux-palette.toml + yazi.toml +.chezmoiignore.tmpl +.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 + run_onchange_after_40-post.sh.tmpl +run_onchange_after_build-bat-cache.sh.tmpl +run_onchange_after_install-yazi-plugins.sh.tmpl +dot_bashrc +dot_zshrc +dot_gitconfig.tmpl +dot_config/ + atuin/ + bash/ + bat/ + drydock/ + fish/ + fontconfig/ + gh/ + gh-dash/ + go/ + herdr-nvim/ + hunk/ + hypr/ + lazydocker/ + lazygit/ + mimeapps.list + shell/ + starship.toml + systemd/ + topgrade.toml + uwsm/ + waybar/ + xdg-terminals.list + yazi.toml.tmpl + zsh/ +dot_local/ + bin/ +dot_leetcode/ +docs/ +AGENTS.md +README.md +``` + +| Path | Target | Purpose | +| --- | --- | --- | +| `.chezmoi.toml.tmpl` | `~/.config/chezmoi/chezmoi.toml` | Config template rendered by `chezmoi init`. See [Config and roles](config.md). | +| `.chezmoidata/` | — | YAML merged into template data (`.packages`, `.aliases`, `.skills`). See [Packages and aliases](data.md) and [Skills](../ai/skills.md). | +| `.chezmoiexternal.toml` | — | Git repos cloned into `$HOME` (nvim config, a bat syntax, tpm). | +| `.chezmoiexternals/` | — | One external per app or tool: agent-root, ghostty, herdr, kitty, omarchy, omp, television, tmux, tmux-palette, yazi. Plain config repos cloned into `~/.config/`. See [Externals and ignore rules](externals-and-ignore.md#chezmoiexternals). | +| `.gitmodules` | — | `dot_config/hypr` and `dot_config/fish` are git submodules. See [Submodules](externals-and-ignore.md#submodules). | +| `.chezmoiignore.tmpl` | — | Target paths chezmoi skips; gates the Linux desktop layer by role. | +| `.chezmoiscripts/`, root `run_*` | — | Install and housekeeping scripts. See [Apply scripts](scripts.md). | +| `dot_config/` | `~/.config/` | Per-tool config. Documented under [Shell](../shell/README.md), [Terminal](../terminal/README.md), [Tools](../tools/README.md), [Desktop](../desktop/README.md). | +| `dot_local/bin/` | `~/.local/bin/` | 37 standalone scripts shared by every shell, plus the `omarchy-*` helpers. | +| `dot_leetcode/` | `~/.leetcode/` | leetcode CLI workspace state. | +| `docs/`, `AGENTS.md`, `README.md` | — | These docs, the repo agent rules, and the repo README. Listed in `.chezmoiignore.tmpl`, never applied. | + +Entries whose source name starts with `.` (`.claude/`, `.gitignore`) are ignored by chezmoi automatically and stay repo-only. + +## Naming conventions + +chezmoi encodes target names and attributes in source file names. These are the prefixes and suffixes the repo uses: + +| Source form | Meaning | Examples here | +| --- | --- | --- | +| `dot_` | Target name starts with `.` | `dot_config` → `~/.config`, `dot_zshrc` → `~/.zshrc` | +| `private_` | Target has group/world permissions cleared (`0600`/`0700`) | `dot_config/atuin/private_config.toml`, `dot_config/gh/private_config.yml`, `dot_config/hunk/private_state.json` | +| `executable_` | Target gets the executable bit | Every script in `dot_local/bin/` | +| `empty_` | File is kept even when empty | None currently | +| `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](scripts.md) | + +Prefixes stack in chezmoi's fixed order, e.g. `private_dot_foo`, `executable_dot_bar`. No source file currently uses `encrypted_`, even though age encryption is configured. + +## Symlink mode + +`.chezmoi.toml.tmpl` sets `mode = "symlink"`. `chezmoi apply` then makes each managed dotfile a symlink into the source tree instead of a copy, as long as the file is a plain regular file. Files that are templates, `private_`, `executable_`, or encrypted are still written as real files. + +What that means in practice: + +- Editing a plain file in `$HOME` (for example `~/.config/waybar/config.jsonc`) edits the matching file in the source tree 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](externals-and-ignore.md). + +> [!NOTE] +> Several fish aliases (`e.f`, `e.h`, `e.k`, `,,`) open the chezmoi source paths directly. Symlink mode makes that equivalent to editing the live config. `e.y` and `e.t` open the yazi and tmux external checkouts in `~/.config`. + +## Daily workflow + +| Command | What it does here | +| --- | --- | +| `chezmoi apply` | Runs `before_` scripts (package install), writes symlinks/files/templates into `$HOME`, clones missing externals, then runs `after_` scripts. | +| `chezmoi update` | `git pull` in the source directory, then `apply`. | +| `chezmoi diff` | Shows what `apply` would change, including rendered templates and scripts that would run. | +| `chezmoi add ` | Moves a new file into the source tree under the right name. In symlink mode the target becomes a symlink on the next apply. Use `--template` or `--encrypt` for templated or secret files. | +| `chezmoi re-add ` | Copies edits made to non-symlinked targets (private, executable) back into the source. | +| `chezmoi edit ` | Opens the source file for a target, the right way to change templates. | +| `chezmoi cd` | Opens a shell in the source directory for git work. The fish alias `,,` opens yazi there instead. | +| `chezmoi init --prompt` | Re-asks name, email, and role and regenerates `~/.config/chezmoi/chezmoi.toml`. | + +Commit and push from the source directory with plain git; the remote pushes over SSH (`git@prad.codes:env/omarchy.git`). diff --git a/docs/chezmoi/config.md b/docs/chezmoi/config.md new file mode 100644 index 0000000..d62f50c --- /dev/null +++ b/docs/chezmoi/config.md @@ -0,0 +1,97 @@ +# Config and roles + +The .chezmoi.toml.tmpl config template, its three prompts, symlink mode, age encryption, and where the resulting data is used. + +`.chezmoi.toml.tmpl` is rendered once by `chezmoi init` into `~/.config/chezmoi/chezmoi.toml`. It asks three questions, turns on symlink mode and age encryption, and stores the answers as template data for every other `.tmpl` file. + +## Source + +**.chezmoi.toml.tmpl** + +```toml +{{- $name := promptStringOnce . "name" "Full name" "Prad Nukala" -}} +{{- $email := promptStringOnce . "email" "Email" "prad@sonr.io" -}} +{{- $roleDefault := "desktop" -}} +{{- $role := promptChoiceOnce . "role" "Machine role" (list "desktop" "laptop" "server") $roleDefault -}} + +mode = "symlink" +encryption = "age" + +[age] + identity = "~/.config/chezmoi/key.txt" + recipient = "age19tdqgavaekhvgqsd75n8a09vvshen2ykzy8kw6tenczz73449anqc3l7a6" + useBuiltin = true + +[data] + name = {{ $name | quote }} + email = {{ $email | quote }} + role = {{ $role | quote }} +``` + +## Prompts + +| Key | Prompt | Type | Default | +| --- | --- | --- | --- | +| `name` | `Full name` | `promptStringOnce` | `Prad Nukala` | +| `email` | `Email` | `promptStringOnce` | `prad@sonr.io` | +| `role` | `Machine role` | `promptChoiceOnce` from `desktop`, `laptop`, `server` | `desktop` | + +The `*Once` functions only prompt when the key is missing from the existing config, so re-running `chezmoi init` keeps earlier answers. `chezmoi init --prompt` forces all three prompts again. Changing the role changes the rendered ignore file and package script, so the next `chezmoi apply` adds or drops the desktop layer and re-runs the package install. + +### Machine roles + +| Role | Intended platform | Linux desktop layer | Desktop packages (`packages.arch.desktop`) | +| --- | --- | --- | --- | +| `desktop` | Arch Linux | Applied | Installed | +| `laptop` | Arch Linux | Applied | Installed | +| `server` | Omarchy/Arch Linux, headless | Skipped | Skipped | + +`desktop` and `laptop` behave identically in the current templates; nothing branches on one without the other. The desktop layer is also skipped whenever the OS is not Linux, whatever the role. See [the ignore rules](externals-and-ignore.md#chezmoiignoretmpl) for the exact list of gated paths. + +## Mode + +`mode = "symlink"` makes `chezmoi apply` link plain files in `$HOME` back to the source tree. Templates, `private_`, `executable_`, and encrypted files are still written as real files. The [overview](README.md#symlink-mode) covers the editing consequences. + +## Age encryption + +| Setting | Value | Effect | +| --- | --- | --- | +| `encryption` | `"age"` | `chezmoi add --encrypt` and `encrypted_` source files use age. | +| `age.identity` | `~/.config/chezmoi/key.txt` | Private key used to decrypt. Distributed by hand between machines, never committed. | +| `age.recipient` | `age19tdqgavaekhvgqsd75n8a09vvshen2ykzy8kw6tenczz73449anqc3l7a6` | Public key files are encrypted to. Safe to publish. | +| `age.useBuiltin` | `true` | Uses chezmoi's built-in age implementation; the `age` binary is not required. | + +No source file currently carries the `encrypted_` attribute, so the key is only exercised when a secret is added with `chezmoi add --encrypt`. The [Installation](../installation.md) page still asks for the key to be copied into place before the first apply: + +```sh +mkdir -p ~/.config/chezmoi +scp :.config/chezmoi/key.txt ~/.config/chezmoi/key.txt +chmod 600 ~/.config/chezmoi/key.txt +``` + +## Template data + +The `[data]` table exposes `.name`, `.email`, and `.role` to every template. chezmoi also merges `.chezmoidata/*.yaml` into the same namespace (`.packages`, `.aliases`; see [Packages and aliases](data.md)) and provides built-ins such as `.chezmoi.os`. + +| Variable | Consumed by | Use | +| --- | --- | --- | +| `.name` | `dot_gitconfig.tmpl` | `[user] name` in `~/.gitconfig` | +| `.email` | `dot_gitconfig.tmpl` | `[user] email` in `~/.gitconfig` | +| `.role` | `.chezmoiignore.tmpl` | Skips the Linux desktop layer unless role is `desktop` or `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 (`desktop`) | +| `.chezmoi.os` | `.chezmoiignore.tmpl` | Desktop layer requires `linux` | +| `.chezmoi.os` | `run_onchange_before_10-packages.sh.tmpl` | pacman/yay on `linux` | +| `.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` | + +**dot_gitconfig.tmpl** + +```ini +[user] + email = {{ .email }} + name = {{ .name }} +``` + +The rest of `~/.gitconfig` is covered under [Tools](../tools/README.md). diff --git a/docs/chezmoi/data.md b/docs/chezmoi/data.md new file mode 100644 index 0000000..94fdcef --- /dev/null +++ b/docs/chezmoi/data.md @@ -0,0 +1,182 @@ +# Packages and aliases + +The .chezmoidata YAML files that declare every installed package and every shared shell alias, and how they render. + +Files in `.chezmoidata/` are merged into chezmoi's template data on every run. Nothing in the directory is written to `$HOME`; the data only reaches the machine through templates and scripts. + +| File | Data key | Consumed by | +| --- | --- | --- | +| `.chezmoidata/packages.yaml` | `.packages` | [`run_onchange_before_10-packages.sh.tmpl`](scripts.md#10-packages), [`run_onchange_after_15-tools.sh.tmpl`](scripts.md#15-tools), [`run_onchange_after_20-gh-extensions.sh.tmpl`](scripts.md#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`](scripts.md#25-skills) | + +## packages.yaml + +One manifest for Arch, 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`). The lists are derived from what the configs actually invoke: tmux-palette items, television cable `requirements`, fish functions, `~/.local/bin` scripts, and compositor bindings. + +### Arch + +`packages.arch.pacman`, installed on every Linux machine with `pacman -S --needed --noconfirm`: + +| Group | Packages | +| --- | --- | +| Shell and editors | `fish`, `neovim`, `helix`, `micro`, `tmux` | +| Terminals | `ghostty` (default), `kitty` | +| 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`, `tea` | +| Search and files | `fzf`, `fd`, `ripgrep`, `zoxide`, `eza`, `bat`, `jq`, `duf` | +| Media and preview (yazi and tv deps) | `ffmpeg`, `ffmpegthumbnailer`, `poppler`, `resvg`, `imagemagick`, `chafa`, `7zip`, `unzip` | +| Remote | `mosh`, `sshfs`, `tailscale` | +| 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`. Names some installed package already provides are skipped, and yay is bootstrapped when no helper exists ([10-packages](scripts.md#10-packages)). + +`packages.arch.desktop`, added only for roles `desktop` and `laptop`: + +| Source | Packages | +| --- | --- | +| pacman | `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) | `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. strata (the folder handler) has no package; [15-tools](scripts.md#15-tools) runs its installer. + +### Shared + +`packages.shared.gh_extensions`, installed by the gh-extensions script: + +| Extension | Purpose | +| --- | --- | +| `davidraviv/gh-clean-branches` | `gh clean-branches`: delete local branches whose upstream is gone | +| `prdlk/gh-commit` | `gh commit` | +| `dlvhdr/gh-dash` | `gh dash`: PR and issue dashboard | +| `meiji163/gh-notify` | `gh notify`: notifications in the terminal | + +`packages.shared.cargo` lists `suvadu`, `mandible` (the tmux-palette "mandible" item runs `~/.local/bin/mandible-pick`), and `worktrunk` (`wt`, git worktree management for parallel agent work). [`run_onchange_after_15-tools.sh.tmpl`](scripts.md#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 `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 + +The single source for aliases shared across shells. Each entry has a `section` and a list of `{ name, cmd }` items. + +### Editors / file managers + +| Alias | Command | +| --- | --- | +| `e` | `nvim` | +| `e.d` | `cd ~/.config/dotstate/storage/Rogz/.config && yazi` | +| `e.f` | `cd ~/.config/fish && yazi` | +| `e.k` | `yazi ~/.config/kitty` | +| `e.v` | `yazi ~/.config/nvim/lua` | +| `e.y` | `yazi ~/.config/yazi` | +| `e.t` | `nvim ~/.config/tmux/tmux.conf` | +| `hx` | `helix` | + +### Quick directory jumps + +| Alias | Command | +| --- | --- | +| `cdc` | `cd ~/.config && yazi` | +| `cdd` | `cd ~/Developer && yazi` | +| `cdk` | `cd ~/Documents/Knowledge && obsidian` | +| `cdl` | `cd ~/.local && yazi` | +| `cds` | `cd ~/.local/share/services && ls` | +| `cdw` | `cd ~/Downloads && yazi` | + +### Tools + +| Alias | Command | +| --- | --- | +| `dd` | `lazydocker` | +| `gg` | `lazygit` | +| `ff` | `exec fish` | +| `npx` | `bunx` | +| `sm` | `sudo micro` | +| `sd` | `ssh prad@` | +| `oc` | `opencode` | +| `dss` | `dotstate sync` | +| `fabric` | `fabric-ai` | +| `bk` | `bead-kanban` | +| `lc` | `leetcode` | +| `tk` | `task` | + +`dd` shadows coreutils `dd` in interactive shells. + +## How aliases render + +### bash and zsh + +`dot_config/shell/aliases.sh.tmpl` renders to `~/.config/shell/aliases.sh`. Because it is a template it is written as a real file, not a symlink; edit the YAML and run `chezmoi apply` to regenerate it. + +**dot_config/shell/aliases.sh.tmpl** + +```sh +{{- range .aliases }} + +# {{ .section }} +{{- range .items }} +alias {{ .name }}='{{ .cmd }}' +{{- end }} +{{- end }} +``` + +After the generated block the file adds shell-specific pieces that are not in the YAML: + +| Name | Definition | +| --- | --- | +| `cpy` / `pst` | `wl-copy` / `wl-paste` when `wl-copy` exists | +| `q` | Function: if `$YAZI_ID` is set and `ya` exists, runs `ya emit quit` so the parent yazi also exits, then `exit` | +| `celar`, `claer` | Typo guards for `clear` | +| `ls` | `eza --icons`, when `eza` is installed | + +`~/.bashrc` and `~/.zshrc` source it for interactive shells: + +**dot_bashrc** + +```sh +[ -f "$HOME/.config/shell/aliases.sh" ] && . "$HOME/.config/shell/aliases.sh" +``` + +See [bash and zsh](../shell/README.md) for the rest of those files. + +### fish + +`dot_config/fish/conf.d/20-aliases.fish` is not a template. It is a hand-maintained plain file (symlinked into `~/.config/fish/conf.d/`) whose header says it is generated from the YAML; the YAML header likewise names a `20-aliases.fish.tmpl` that does not exist. The fish file has drifted from `aliases.yaml`: + +| Alias | aliases.yaml (bash/zsh) | fish | +| --- | --- | --- | +| `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` | ✓ | +| `e.y` | `yazi ~/.config/yazi` | ✓ | +| `e.t` | `nvim ~/.config/tmux/tmux.conf` | ✓ | +| `cdd` | `cd ~/Developer && yazi` | not defined | +| `,,` | not defined | `cd ~/.local/share/chezmoi && yazi` | +| `..` | not defined | `cd ..` | + +fish-only Bun aliases: + +| Alias | Command | +| --- | --- | +| `br` | `bun run` | +| `br.d` | `bun run dev` | +| `br.b` | `bun run build` | +| `br.t` | `bun run test` | +| `bi` | `bun install` | +| `bg` | `bun install -g` (shadows fish's `bg` job-control builtin) | +| `bx` | `bunx` | + +Every other YAML alias (`e`, `e.v`, `hx`, `cdc`, `cdk`, `cdl`, `cds`, `cdw`, and the whole Tools section) is defined identically in fish. The file ends with the same extras as the sh version: `cpy`/`pst` clipboard detection, the `q` function, and, in interactive sessions only, `celar`/`claer` and `ls` → `eza --icons`. `clear` itself is an autoloaded function (`functions/clear.fish`), which is why it is not aliased. See [fish](../shell/fish.md). + +> [!TIP] +> To add an alias for every shell, add it to `aliases.yaml` for bash/zsh and to `20-aliases.fish` by hand for fish. + +## skills.yaml + +Declares the agent skills installed by the Skills CLI. `skills.cli` is the pinned CLI (`skills@1.7.0`, run with `npx -y`), `skills.agents` the default install targets (`[universal, claude-code]`), and `skills.sources` a list of `{ source, skills, agents? }` entries: 110 skills across 42 entries. The full list, pinned sources, and add/remove workflow are on the [Skills](../ai/skills.md) page. diff --git a/docs/chezmoi/externals-and-ignore.md b/docs/chezmoi/externals-and-ignore.md new file mode 100644 index 0000000..1dadd1e --- /dev/null +++ b/docs/chezmoi/externals-and-ignore.md @@ -0,0 +1,176 @@ +# Externals and ignore rules + +The git repos chezmoi clones into $HOME and every rule in .chezmoiignore.tmpl, including the role gate for the Linux desktop layer. + +## .chezmoiexternal.toml + +Externals are content chezmoi fetches instead of storing in the repo. Every entry is a `git-repo` external: chezmoi runs `git clone` when the target directory is missing. Because they are real git checkouts, they are never symlinked into the source tree. + +**.chezmoiexternal.toml** + +```toml +[".config/nvim"] + type = "git-repo" + url = "https://github.com/prdlk/nvim.git" + [".config/nvim".pull] + args = ["--ff-only"] + +[".config/bat/syntaxes/sublime-purescript-syntax"] + type = "git-repo" + url = "https://github.com/tellnobody1/sublime-purescript-syntax.git" + [".config/bat/syntaxes/sublime-purescript-syntax".pull] + args = ["--ff-only"] + +[".config/tmux/plugins/tpm"] + type = "git-repo" + url = "https://github.com/tmux-plugins/tpm.git" + [".config/tmux/plugins/tpm".pull] + args = ["--ff-only"] +``` + +| Target | Repo | Used by | +| --- | --- | --- | +| `~/.config/nvim` | [prdlk/nvim](https://github.com/prdlk/nvim) | Neovim config, kept in its own repo | +| `~/.config/bat/syntaxes/sublime-purescript-syntax` | [tellnobody1/sublime-purescript-syntax](https://github.com/tellnobody1/sublime-purescript-syntax) | PureScript syntax for bat, compiled into bat's cache by the [bat cache scripts](scripts.md#build-bat-cache) | +| `~/.config/tmux/plugins/tpm` | [tmux-plugins/tpm](https://github.com/tmux-plugins/tpm) | tmux plugin manager, run from the bottom of `tmux.conf` ([tmux](../terminal/tmux.md)). Cloned inside the tmux checkout, whose `.gitignore` excludes `plugins/` | + +### No refreshPeriod + +No entry in `.chezmoiexternal.toml` sets `refreshPeriod`, so it stays at chezmoi's default of never. chezmoi clones each repo on a fresh machine and otherwise leaves it alone: `chezmoi apply` and `chezmoi update` do not pull. The local nvim checkout always wins over the remote, so in-progress Neovim edits and unpushed commits are never disturbed by an apply. + +To update explicitly, run `chezmoi apply --refresh-externals` (`-R`), which pulls with `git pull --ff-only`. `--ff-only` makes the pull fail instead of creating a merge commit when the local checkout has diverged. + +## .chezmoiexternals/ + +Per-app config repos, one file each in `.chezmoiexternals/.toml`. Each is a `git-repo` external with `refreshPeriod = "168h"` and `pull.args = ["--ff-only"]`, so `chezmoi apply` fast-forwards them at most once a week. The repos hold plain config files (no chezmoi prefixes) and are not part of `chezmoi managed` contents. The exception is [`agent-root.toml`](#agent-root), a single downloaded script. + +**.chezmoiexternals/tmux.toml** + +```toml +[".config/tmux"] + type = "git-repo" + url = "https://github.com/prdlk/tmux.git" + refreshPeriod = "168h" + [".config/tmux".pull] + args = ["--ff-only"] +``` + +| File | Target | Repo | +| --- | --- | --- | +| `tmux.toml` | `~/.config/tmux` | [prdlk/tmux](https://github.com/prdlk/tmux) | +| `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) | +| `herdr.toml` | `~/.config/herdr` | [prdlk/herdr](https://github.com/prdlk/herdr) — `plugins/github/` (runtime plugin checkouts) is gitignored there | +| `omarchy.toml` | `~/.config/omarchy` | [prdlk/omarchy](https://github.com/prdlk/omarchy) — `shell.json`, hooks, menu extensions, themed templates; git-installed themes/plugins are gitignored there and restored by its `install-extras` script, `calendars.json` is never committed | +| `omp.toml` | `~/.omp` | [prdlk/omp](https://github.com/prdlk/omp) — omp agent config and the global agent instructions | + +Edit these in place under `~/.config/`, then commit and push from that checkout. + +### agent-root + +`agent-root.toml` is the one `file` external: chezmoi downloads [jankeesvw/agent-root](https://github.com/jankeesvw/agent-root)'s single bash script to `~/.local/bin/agent-root` (mode `0755`) and re-fetches it at most once a week (`refreshPeriod = "168h"`). Coding agents run `agent-root "" ` instead of `sudo`; it wraps `pkexec` (`polkit`) so the session's polkit agent shows the command, and `notify-send` (`libnotify`) shows the reason. Exit 126 means the dialog was dismissed. The usage rules agents follow live in the global omp instructions, `~/.omp/agent/AGENTS.md` ([prdlk/omp](https://github.com/prdlk/omp)). Linux desktop/laptop roles only ([role gate](#chezmoiignoretmpl)), since there is no polkit agent elsewhere. + +**.chezmoiexternals/agent-root.toml** + +```toml +[".local/bin/agent-root"] + type = "file" + url = "https://raw.githubusercontent.com/jankeesvw/agent-root/main/agent-root" + executable = true + refreshPeriod = "168h" +``` + +## Submodules + +Two source directories are git submodules, listed in `.gitmodules`. They keep chezmoi source naming and are applied in symlink mode like the rest of the tree. `chezmoi init` clones them. + +| Source | Target | Repo | +| --- | --- | --- | +| `dot_config/hypr` | `~/.config/hypr` | [prdlk/hypr](https://github.com/prdlk/hypr) | +| `dot_config/fish` | `~/.config/fish` | [prdlk/fish](https://github.com/prdlk/fish) | + +Edit them inside the submodule in the chezmoi source, commit there, then commit the updated submodule pointer in the root repo. + +## .chezmoiignore.tmpl + +Patterns match target paths (relative to `$HOME`). Matching entries are neither written nor removed. The file is a template, so the desktop block appears only on machines where it applies. Source entries that start with `.` (`.claude/`, `.gitignore`) are ignored by chezmoi without needing a rule. + +### Repo docs + +```txt +README.md +CLAUDE.md +AGENTS.md +docs +``` + +Files at the source root that would otherwise land in `$HOME` as `~/README.md` or `~/docs`. This covers the repo README, the agent instruction files, and these docs. + +### Compositor hook from the fish submodule + +```txt +.config/fish/auto-Niri.fish +``` + +The shared fish submodule ships a compositor auto-start hook this repo never uses. It is ignored on every machine, outside the role gate. + +### Runtime and plugin state inside managed trees + +| Pattern | Why | +| --- | --- | +| `.config/lazygit/.omc/**` | Tool state written inside the lazygit config dir | +| `.config/tmux/plugins/**`, except `!.config/tmux/plugins/tpm` | Plugins tpm installs with `prefix I`; tpm itself is the external above | +| `.config/fish/fish_variables` | fish universal variables, rewritten by fish at runtime | +| `.config/fish/conf.d/secrets.fish` | Plaintext credentials. Local-only, never in git (the fish repo's `.gitignore` also lists it) | +| `.config/nvim/lazy-lock.json` | lazy.nvim lockfile inside the nvim external | +| `.config/nvim/.git`, `.config/nvim/.git/**` | The external's git metadata | +| `.config/nvim/.omc/**`, `.config/nvim/.crush/**`, `.config/nvim/.understand-anything/**` | Agent tool state inside the nvim checkout | + +`.gitignore` covers the source side of the same problem: `dot_config/lazygit/dot_omc` and `__pycache__/` never get committed even though symlink mode lets tools write into the source tree. + +### mise + +```txt +.config/mise +.config/mise/** +``` + +mise tool versions stay local to each machine and are not managed. + +### Linux desktop layer (role-gated) + +**.chezmoiignore.tmpl** + +```txt +{{ if or (ne .chezmoi.os "linux") (and (ne .role "desktop") (ne .role "laptop")) }} +.config/hypr +.config/hypr/** +.config/waybar +.config/waybar/** +.config/uwsm +.config/uwsm/** +.local/bin/agent-root +.config/fontconfig +.config/fontconfig/** +.config/mimeapps.list +.config/xdg-terminals.list +.config/systemd +.config/systemd/** +.local/bin/kitty-day-save +.local/bin/cp-appid +.local/bin/projects-sync +{{ end }} +``` + +The block is emitted, and these paths skipped, unless the OS is `linux` and the role is `desktop` or `laptop`. `server` machines, and any non-Linux machine regardless of role, never receive the Hyprland config (`dot_config/hypr/`), the Waybar config (`dot_config/waybar/`), the uwsm environment (`dot_config/uwsm/`), fontconfig (`dot_config/fontconfig/fonts.conf`), default-app associations (`dot_config/mimeapps.list`, `dot_config/xdg-terminals.list`), the systemd user units (`dot_config/systemd/user/kitty-day-save.service`, `projects-sync.service`, `projects-sync.timer`), or the `agent-root`, `cp-appid`, `kitty-day-save` and `projects-sync` scripts. + +| Machine | Desktop layer | +| --- | --- | +| Linux, `desktop` or `laptop` | Applied | +| Linux, `server` | Ignored | +| Other OS, any role | Ignored | + +See [Desktop](../desktop/README.md) for what the layer contains. The `omarchy-*` scripts in `dot_local/bin/` are not in the block, so they apply on every role. diff --git a/docs/chezmoi/scripts.md b/docs/chezmoi/scripts.md new file mode 100644 index 0000000..c463645 --- /dev/null +++ b/docs/chezmoi/scripts.md @@ -0,0 +1,146 @@ +# Apply scripts + +Every run_ script chezmoi executes during apply, when each one fires, and what it does on each OS and role. + +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 + +`before_` scripts run before any file is written; `after_` scripts run after every file, symlink, and external is in place. Within a phase chezmoi runs scripts in ASCII order of their target names, so the numeric prefixes come first. + +1. **10-packages (before, onchange)** + + Install system packages from `packages.yaml`. + +2. **Files, symlinks, externals** + + chezmoi writes the target state. + +3. **15-tools (after, onchange)** + + rustup and cargo crates, omp, global mise tools, strata on Linux desktops. + +4. **20-gh-extensions (after, onchange)** + + Install gh extensions from a fish session. + +5. **25-skills (after, onchange)** + + Install and prune agent skills. + +6. **30-user-services (after, once)** + + Enable systemd user units (kitty-day-save, projects-sync.timer). + +7. **40-post (after, onchange)** + + bat cache, font cache. + +8. **build-bat-cache (after, onchange)** + + Rebuild bat cache when its theme or config changes. + +9. **install-yazi-plugins (after, onchange)** + + Reinstall yazi plugins when the manifest changes. + +| 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 | 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) | + +`run_onchange_` scripts re-run whenever their rendered content differs from the last successful run. The hash triggers work by writing a checksum of another file into a comment, so editing that file changes the script's content: + +```sh +# packages.yaml hash: {{ include ".chezmoidata/packages.yaml" | sha256sum }} +``` + +`run_once_` scripts run once per unique rendered content and again only if that content changes or the previous run failed. + +## 10-packages + +`.chezmoiscripts/run_onchange_before_10-packages.sh.tmpl` installs everything in [`packages.yaml`](data.md#packagesyaml). It runs before files are applied so the tools exist when configs land. On a non-Linux OS it renders to just the shebang and does nothing. + +### Steps + +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 for `packages.arch.desktop.omarchy` when `pacman-conf -l` lists an `omarchy` repo. +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 (`[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, otherwise by building `yay-bin` from the AUR with `makepkg -si` (installs `git` and `base-devel` first; skipped as root, since makepkg refuses root). Omarchy ships `yay`, so this is normally a no-op. +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. + +## 15-tools + +`.chezmoiscripts/run_onchange_after_15-tools.sh.tmpl` installs the tools that do not come from pacman. 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` | +| strata file chooser | Linux, roles `desktop`/`laptop`, `~/.local/bin/strata` exists and `~/.local/share/xdg-desktop-portal/portals/strata.portal` does not | `strata --install-portal` | + +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. + +`strata --install-portal` makes strata the system file chooser for portal-aware apps (browsers, GTK file dialogs). It writes `strata.portal` and the `org.freedesktop.impl.portal.desktop.strata` D-Bus service under `~/.local/share`, prepends `strata;` to the `org.freedesktop.impl.portal.FileChooser` line of `~/.config/xdg-desktop-portal/-portals.conf` (`hyprland-portals.conf`, copied from `/usr/share/xdg-desktop-portal/` when absent, so the compositor's backends stay as fallbacks), marks the in-app offer answered (`~/.config/strata/portal-opt-in-v1`), and restarts `xdg-desktop-portal.service`. That config file is strata's, not chezmoi's: `strata --uninstall-portal` restores it. Check: `gdbus call --session --dest org.freedesktop.impl.portal.desktop.strata --object-path /org/freedesktop/portal/desktop --method org.freedesktop.DBus.Properties.Get org.freedesktop.impl.portal.FileChooser version` prints `uint32 4`. Apps that draw their own picker instead of calling the portal are unchanged. + +## 20-gh-extensions + +`.chezmoiscripts/run_onchange_after_20-gh-extensions.sh.tmpl` installs each `packages.shared.gh_extensions` entry. 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). + +## 25-skills + +`.chezmoiscripts/run_onchange_after_25-skills.sh.tmpl` installs the agent skills declared in [`skills.yaml`](data.md#skillsyaml) with the Skills CLI (`npx -y skills@1.7.0`). See [Skills](../ai/skills.md). + +- Exits 0 with a warning if `npx` is missing. +- One-time migration: deletes any directory in `~/.agents/skills` or `~/.claude/skills` that contains symlinks into the chezmoi source directory (the old vendored layout), and removes `~/.agents/.skill-lock.json` if it is a symlink into the source directory. +- Removes skills listed in `${XDG_STATE_HOME:-~/.local/state}/chezmoi/skills.txt` that are no longer declared, with `skills remove -g -y`. +- Runs one `skills add -g -y -a --skill ` per source entry. Output is captured; on failure the last 8 lines are printed. +- Writes the declared names to `skills.txt`. Claude-only installs are not in the CLI's lock, so the script keeps its own record. +- Exits 1 if any source failed, so chezmoi keeps the old hash and retries on the next apply. + +## 30-user-services + +`.chezmoiscripts/run_once_after_30-user-services.sh.tmpl` enables session-critical systemd user units on Linux. + +- Same check for `~/.config/systemd/user/kitty-day-save.service` (from `dot_config/systemd/user/`, so Linux desktop/laptop roles only), then `systemctl --user enable --now kitty-day-save.service`. See [kitty-day-save](../shell/scripts.md#kitty-day-save). +- Same check for `~/.config/systemd/user/projects-sync.timer`, then `systemctl --user enable --now projects-sync.timer`. See [projects-sync](../shell/scripts.md#projects-sync). +- On non-Linux systems it renders to `#!/bin/sh` / `exit 0`. + +Other personal automation units (brain-lens, omp-loop, rclone, hermes, voxtype) are deliberately not enabled; the script comment says to enable them by hand per machine. Their unit files are not in the repo, so they have to exist on the machine already. + +## 40-post + +`.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` | + +Each step ignores failures (`|| true`). tpm is cloned by [`.chezmoiexternal.toml`](externals-and-ignore.md#chezmoiexternaltoml), not here. + +## build-bat-cache + +`run_onchange_after_build-bat-cache.sh.tmpl` rebuilds bat's syntax and theme cache when the managed inputs change. It hashes `dot_config/bat/themes/cyberdream.tmTheme` and `dot_config/bat/config`, exits quietly if `bat` is missing, and otherwise runs `bat cache --build`. This registers the cyberdream theme and the PureScript syntax cloned by [`.chezmoiexternal.toml`](externals-and-ignore.md#chezmoiexternaltoml). + +## install-yazi-plugins + +`run_onchange_after_install-yazi-plugins.sh.tmpl` reinstalls yazi plugins whenever `~/.config/yazi/package.toml` changes (the template hashes it via `joinPath .chezmoi.homeDir`, guarded with `stat`). It exits quietly if `ya` is missing or `${XDG_CONFIG_HOME:-$HOME/.config}/yazi/package.toml` does not exist, and otherwise runs `ya pkg install`. If that fails, it deletes ya's clone cache (`${XDG_CACHE_HOME:-$HOME/.cache}/yazi/packages`), since clones made by an older ya can break a newer one, and retries once. `~/.config/yazi` is the [prdlk/yazi](https://github.com/prdlk/yazi) external checkout, so the plugins land in its `plugins/`, which that repo's `.gitignore` excludes apart from the vendored `bunny.yazi`. The plugin list is on the [yazi page](../tools/yazi.md). diff --git a/docs/desktop/README.md b/docs/desktop/README.md new file mode 100644 index 0000000..11417c0 --- /dev/null +++ b/docs/desktop/README.md @@ -0,0 +1,30 @@ +# Desktop + +The Linux desktop layer: Omarchy, the Hyprland config on top of it, the Waybar bar, fontconfig, and default applications. + +> [!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/hypr`, `~/.config/waybar`, `~/.config/uwsm`, `~/.config/fontconfig`, `~/.config/mimeapps.list`, `~/.config/xdg-terminals.list`, `~/.config/systemd`, `~/.local/bin/agent-root`, `~/.local/bin/kitty-day-save`, `~/.local/bin/cp-appid`, and `~/.local/bin/projects-sync`. On the `server` role these are not applied. +> +> The `omarchy-*` scripts in `~/.local/bin` are **not** listed there, so chezmoi applies them on every role. + +The desktop is [Omarchy](https://omarchy.org) (Arch Linux with Hyprland). Omarchy provides the compositor, the defaults, the theme, the menus, and the `omarchy-*` commands. This repo only overrides: a Hyprland Lua config (the `dot_config/hypr` submodule), a replacement Waybar layout, the `omarchy-*` helper scripts, the uwsm session environment, and the `~/.config/omarchy` external. + +| Page | Covers | +| --- | --- | +| [Hyprland](hyprland.md) | `~/.config/hypr` Lua config on Omarchy: bindings, input, look and feel, monitors, hyprsunset, the portal; every `omarchy-*` script in `~/.local/bin`. `~/.config/omarchy` (shell, hooks, menus, themes) is the [prdlk/omarchy](https://github.com/prdlk/omarchy) external, see [externals](../chezmoi/externals-and-ignore.md#chezmoiexternals) | +| [Waybar](waybar.md) | `~/.config/waybar`: module layout, stylesheet, the `window_pill.py` title module | +| [Fonts and default apps](fonts-and-apps.md) | `~/.config/fontconfig/fonts.conf`, `~/.config/mimeapps.list`, the Victor Mono Nerd Font package | + +## Packages + +`.chezmoidata/packages.yaml` declares the desktop packages under `packages.arch.desktop`. `.chezmoiscripts/run_onchange_before_10-packages.sh.tmpl` installs them only when the role is `desktop` or `laptop`: + +| Source | Packages | +| --- | --- | +| pacman | `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` (a sync repo wins when it has the name) | `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` | + +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.md#15-tools). Hyprland, Waybar, and the `omarchy-*` commands that the scripts call (`omarchy-menu`, `omarchy-launch-or-focus`, and others) come from the Omarchy install. This repo does not install them. See [chezmoi scripts](../chezmoi/scripts.md) for the full install flow and [packages.yaml](../chezmoi/data.md#packagesyaml) for the complete lists. diff --git a/docs/desktop/fonts-and-apps.md b/docs/desktop/fonts-and-apps.md new file mode 100644 index 0000000..a7dd736 --- /dev/null +++ b/docs/desktop/fonts-and-apps.md @@ -0,0 +1,94 @@ +# Fonts and default apps + +Fontconfig monospace override to Victor Mono Nerd Font, the Nerd Font packages, and the XDG default-application table. + +Two small files set system-wide defaults: `fonts.conf` picks the monospace font, and `mimeapps.list` picks which application opens each file type and URL scheme. + +> [!NOTE] +> Linux `desktop` and `laptop` roles only. `.chezmoiignore.tmpl` skips `~/.config/fontconfig/**` and `~/.config/mimeapps.list` on other roles. + +## Fontconfig + +| Source (repo) | Target | +| --- | --- | +| `dot_config/fontconfig/fonts.conf` | `~/.config/fontconfig/fonts.conf` | + +**~/.config/fontconfig/fonts.conf** + +```xml + + + + monospace + + + VictorMono Nerd Font + + + +``` + +Any font request that includes the generic `monospace` family gets `VictorMono Nerd Font` added to the front of its family list (`prepend_first`) with strong binding. Apps that ask for "monospace" therefore render in Victor Mono with Nerd Font glyphs, and fall back through fontconfig's normal monospace list if a glyph is missing. The file does not configure sans/serif families, hinting, antialiasing, or subpixel rendering. Those stay at system defaults. + +Some tools set their own fonts. Waybar uses `CaskaydiaCove Nerd Font Propo` (see [Waybar](waybar.md)), and the terminals set fonts in their own configs (see [kitty](../terminal/kitty.md)). + +### Font packages + +Victor Mono Nerd Font is installed on every role by `run_onchange_before_10-packages.sh.tmpl` from `.chezmoidata/packages.yaml`, not only on desktop roles. The package is `ttf-victor-mono-nerd` (pacman, `packages.arch.pacman`). `fonts.conf` is Linux desktop only, but the font package is also installed on `server`. + +## Default applications + +| Source (repo) | Target | +| --- | --- | +| `dot_config/mimeapps.list` | `~/.config/mimeapps.list` | + +`mimeapps.list` is the XDG file that `xdg-open`, GTK/Qt file dialogs, and browsers use to choose a handler. `[Default Applications]` sets the preferred handler. `[Added Associations]` adds entries to "Open with" lists. + +### Default applications + +| 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` | `io.github.lgse.Strata.desktop` ([strata](../chezmoi/scripts.md#15-tools), which also registers the `org.freedesktop.FileManager1` service for "Open file location" and serves the portal file chooser) | +| 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` | +| | `x-scheme-handler/claude-cli` | `claude-code-url-handler.desktop` | +| | `x-scheme-handler/opencode` | `ai.opencode.desktop.desktop` | +| | `x-scheme-handler/antigravity` | `antigravity.desktop` | +| | `x-scheme-handler/piebald` | `piebald-handler.desktop` | +| | `x-scheme-handler/openhuman` | `OpenHuman-handler.desktop` | +| Productivity | `x-scheme-handler/todoist`, `com.todoist` | `todoist.desktop` | +| | `x-scheme-handler/notion` | `notion.desktop` | +| | `x-scheme-handler/anytype` | `anytype.desktop` | +| | `x-scheme-handler/tolaria` | `tolaria-handler.desktop` | +| | `x-scheme-handler/tldraw-offline` | `tldraw-offline.desktop` | +| | `x-scheme-handler/figma` | `figma-linux.desktop` | +| Chat | `x-scheme-handler/slack` | `slack.desktop` | +| | `x-scheme-handler/discord-647066573147996160` | `discord-647066573147996161.desktop` | +| Feeds | `x-scheme-handler/follow`, `folo` | `folo.desktop` | + +### Added associations + +| MIME types / schemes | Also offered | +| --- | --- | +| `http`, `https`, `chrome` schemes; `text/html`, `application/xhtml+xml`, and the `x-extension-*` web types | `brave-origin.desktop`, `userapp-Floorp-8MTFP3.desktop` | +| `x-scheme-handler/mailto` | `userapp-Evolution-PCEYQ4.desktop` | +| `application/vnd.microsoft.portable-executable` | `wine.desktop` | +| `application/pdf` | `brave-origin.desktop` | +| `x-scheme-handler/opencode` | `ai.opencode.desktop.desktop` | + +The added mail association is Evolution, but the default mail handler is `omamail.desktop`. + +> [!TIP] +> In symlink mode, `~/.config/mimeapps.list` is a symlink into the repo. When `xdg-mime default` or a "set as default" dialog updates it, the tool either writes through the symlink and edits the repo file directly, or replaces the symlink with a regular file. Check `git status` or `chezmoi status` after changing defaults. + +## Related + +- [Hyprland](hyprland.md): the compositor these defaults serve. +- [Installation](../installation.md): role selection that decides whether this layer applies. diff --git a/docs/desktop/hyprland.md b/docs/desktop/hyprland.md new file mode 100644 index 0000000..dc168f3 --- /dev/null +++ b/docs/desktop/hyprland.md @@ -0,0 +1,384 @@ +# Hyprland + +Hyprland Lua config layered on Omarchy — master layout, terminal-only blur, monitors, and the omarchy-* helper scripts. + +[Hyprland](https://hypr.land) is a dynamic tiling Wayland compositor. This config uses Hyprland's Lua configuration and sits on top of [Omarchy](https://omarchy.org), which provides the defaults, theme, menus, and `omarchy-*` commands. The files here only override. + +> [!NOTE] +> Linux `desktop` and `laptop` roles only. `.chezmoiignore.tmpl` skips `~/.config/hypr/**` on other roles. The `omarchy-*` scripts are **not** listed there, so chezmoi applies them on every role and OS; they only take effect where Omarchy is installed. +> +> `dot_config/hypr` is a git submodule ([prdlk/hypr](https://github.com/prdlk/hypr)). Edit inside the submodule, commit there, then commit the updated pointer in the chezmoi repo. + +## Files + +| Source (repo) | Target | Purpose | +| --- | --- | --- | +| `dot_config/hypr/hyprland.lua` | `~/.config/hypr/hyprland.lua` | Entry point, workspace and window rules | +| `dot_config/hypr/autostart.lua` | `~/.config/hypr/autostart.lua` | Extra autostart (empty) | +| `dot_config/hypr/bindings.lua` | `~/.config/hypr/bindings.lua` | Keybindings | +| `dot_config/hypr/input.lua` | `~/.config/hypr/input.lua` | Key repeat, tablet/touch mapping | +| `dot_config/hypr/looknfeel.lua` | `~/.config/hypr/looknfeel.lua` | Layout, decoration, blur | +| `dot_config/hypr/monitors.lua` | `~/.config/hypr/monitors.lua` | Monitor modes and positions | +| `dot_config/hypr/hyprsunset.conf` | `~/.config/hypr/hyprsunset.conf` | Night-light profile | +| `dot_config/hypr/xdph.conf` | `~/.config/hypr/xdph.conf` | xdg-desktop-portal-hyprland | +| `dot_config/hypr/dot_luarc.json` | `~/.config/hypr/.luarc.json` | Lua language server settings | +| `dot_local/bin/executable_omarchy-*` | `~/.local/bin/omarchy-*` | Helper scripts (see [below](#omarchy-scripts)) | + +None are templates. Hyprland and Omarchy are not in `.chezmoidata/packages.yaml`. They come from the Omarchy install. + +## Entry point + +`hyprland.lua` loads Omarchy, then the personal files, then Omarchy's toggles: + +**~/.config/hypr/hyprland.lua** + +```lua +dofile((os.getenv("OMARCHY_PATH") or "/usr/share/omarchy") .. "/default/hypr/bootstrap.lua") +require("default.hypr.omarchy") + +require("hypr.monitors") +require("hypr.input") +require("hypr.bindings") +require("hypr.looknfeel") +require("hypr.autostart") + +require("default.hypr.toggles") +``` + +Omarchy's default bindings stay enabled. `omarchy_default_bindings` and `omarchy_preinstalled_bindings` are left commented. `bindings.lua` unbinds each default it replaces. + +### Workspace rules + +| Workspace | Monitor | +| --- | --- | +| 1 (default), 2, 3, 4 | The main external display: `desc:Apple Computer Inc StudioDisplay 0x984262A7` if connected, else `desc:Samsung Electric Company S34CG50 HNTY501103` (Studio Display while neither is). Chosen at config load; `monitors.lua` reloads the config when the main external changes, and existing workspaces 1–4 are moved over | +| 5 (default), 6, 7, 8 | `eDP-1` | + +`default` marks the workspace each monitor shows when it connects. + +### Window rules + +| Class | Rule | +| --- | --- | +| `^brave-www\.tldraw\.com__-Default$` | Workspace 3 | +| `^tldraw-offline$` | Workspace 5, fullscreen | +| `^so\.stencil\.tern$` | `special:scratchpad silent` | +| `^com\.anthropic\.Claude$` | `special:claude silent` | +| `^com\.fastmail\.Fastmail$` | `special:fastmail silent` | +| `^Beeper$` | `special:beeper silent` | +| `^brave-home\.google\.com__.*` | `special:home silent` | +| `^ai\.elementlabs\.lmstudio$` | `special:lmstudio silent` | +| `brave-(www\.)?youtube\.com__.*`, title not matching `.*Picture.?in.?[Pp]icture.*` | Float, pin, size 30% × 30% of the monitor, move to `10, monitor_h*0.7-10` (bottom-left corner) | + +Scratch residents are placed `silent` so that [`omarchy-toggle-scratch`](#omarchy-toggle-scratch) decides when to reveal them. The YouTube rule matches both `youtube.com` and `www.youtube.com` because Chromium's class changes once a video plays. It excludes the picture-in-picture overlay so Omarchy's own PiP rule still applies. Its size and inset must stay in sync with [`omarchy-pip`](#omarchy-pip). + +## Input + +`input.lua`: + +- `repeat_delay = 250` (Omarchy's value), `repeat_rate = 50` (raised from 40). The file's comments record that 200/50 felt too fast. The typing lag it was meant to fix came from the keyboard's firmware tap-hold handling and was fixed on the keyboard itself. +- Tablet and touch devices are pinned to one output each: + +| Device | Output | Extra | +| --- | --- | --- | +| `elan9008:00-04f3:43c7-stylus` (Flow Z13 pen) | `eDP-1` | | +| `elan9008:00-04f3:43c7` (Flow Z13 touchscreen) | `eDP-1` | Taps land on the panel instead of the focused monitor | +| `wacom-intuos-bt-s-pen` | The main external display (Studio Display or Samsung ultrawide) | `active_area_size = { 152, 152 × height / width }` (85.5 on the Studio Display, 63.6 on the ultrawide), `active_area_position = { 0, 0 }` — a full-width band with the display's aspect ratio | + +The layout, touchpad, and gesture examples in the file are commented out. Palm rejection is done by a libinput quirks file in `/etc`, which chezmoi does not manage. + +## Look and feel + +`looknfeel.lua` loads after the Omarchy theme's `hyprland.lua`, so its values override the theme's. The theme sets colors. This file sets everything else. The approach is flat windows by default, with blur only behind terminals. + +| Setting | Value | +| --- | --- | +| `general.layout` | `master` (instead of Omarchy's dwindle; per-workspace layouts saved by `omarchy-hyprland-workspace-layout-toggle` still win) | +| `decoration.rounding` | 0 | +| `decoration.dim_special` | 0.33 (darkens the desktop behind any open scratch workspace) | +| `decoration.blur` | enabled; `size 5`, `passes 2`, `brightness 0.8`, `contrast 1.1`, `vibrancy 0.15`, `noise 0.01`, `new_optimizations`, `popups = false` | +| `decoration.shadow` | disabled | +| `group.groupbar.gradient_rounding` | 0 | +| Workspace animation | disabled (`hl.animation({ leaf = "workspaces", enabled = false })`) | + +Blur must be enabled globally before any window can use it, so every window tagged `default-opacity` gets `no_blur = true`, and terminals get it back: + +**~/.config/hypr/looknfeel.lua** + +```lua +o.window({ tag = "default-opacity" }, { no_blur = true }) +o.window( + "^(kitty(-.*)?|Alacritty|com\\.mitchellh\\.ghostty|foot|org\\.codeberg\\.dnkl\\.foot|wezterm)$", + { no_blur = false } +) +``` + +Omarchy's stock fade (0.985 active / 0.96 inactive) is kept. Terminals get their transparency from kitty's `background_opacity 0.9` (see [kitty](../terminal/kitty.md)). The comments give the reason for limiting blur: the cyberdream and Spectra themes enabled rounding, blur, and shadow on every window, and that costs frame time on an iGPU driving the laptop panel plus a 5K display. + +## Monitors + +`monitors.lua`: + +| Output | Mode | Position | Scale | +| --- | --- | --- | --- | +| any (fallback) | `preferred` | `auto` | 3.2 | +| `eDP-1` (laptop) | `2560x1600@180` | `auto-right` | 2 | +| `DP-4` (Apple Studio Display) | `5120x2880@60` | `0x0` | 2 | +| `desc:Samsung Electric Company S34CG50 HNTY501103` (ultrawide, USB-C to HDMI from the iGPU; shows up as a `DP-n` connector) | `3440x1440@100` | `0x0` | 1 | + +`GDK_SCALE=3` is exported. The external display sits left of the laptop panel; `auto-right` puts `eDP-1` at its logical width (2560 for the Studio Display, 3440 for the ultrawide), or at 0 when undocked. `monitors.lua` returns the "main external display" (Studio Display, else Samsung ultrawide) used by the workspace rules, the Wacom mapping, and `omarchy-toggle-scratch`, and reloads the config on hotplug when it changes. + +`~/.config/uwsm/env-hyprland` (source `dot_config/uwsm/env-hyprland`, Linux desktop/laptop only) is sourced by uwsm before Hyprland starts. It sets `AQ_DRM_DEVICES` to the AMD iGPU, resolved from `/dev/dri/by-path/pci-0000:c4:00.0-card`, so Hyprland never opens the Thunderbolt eGPU (RTX 5060 Ti, compute only: AI models, CUDA). Every display, the Samsung ultrawide included, hangs off the iGPU. It leaves the variable unset if that path is missing. It also sets `__EGL_VENDOR_LIBRARY_FILENAMES` to Mesa's `50_mesa.json`, so neither Hyprland nor session apps load `libEGL_nvidia` and hold `/dev/nvidiactl`; CUDA does not use EGL. + +The system side (kernel cmdline, `nvidia` without KMS, `thunderbolt host_reset=0`) lives outside chezmoi. + +## hyprsunset and portal + +**~/.config/hypr/hyprsunset.conf** + +```ini +profile { + time = 07:00 + identity = true +} +``` + +The identity profile stops hyprsunset from tinting the screen. A commented 20:00 / 4000 K night profile and an `o.launch_on_start("hyprsunset")` hint remain in the file. + +**~/.config/hypr/xdph.conf** + +```ini +screencopy { + allow_token_by_default = true + custom_picker_binary = hyprland-preview-share-picker +} +``` + +Screen-share requests get a restore token by default and use `hyprland-preview-share-picker` as the source picker. + +## .luarc.json + +Configures lua-language-server for the Lua config: the library path is `/usr/share/hypr/stubs`, `checkThirdParty` is off, and `hl` and `o` are declared as globals. + +`autostart.lua` contains only a commented `o.launch_on_start` example. + +## Keybindings + +Every binding defined in `bindings.lua`. Bindings not listed here are Omarchy defaults. The *Replaces* column gives the Omarchy default that was unbound first. + +### Windows + +| Keys | Action | Replaces | +| --- | --- | --- | +| `SUPER + Q` | Close window | same (made explicit) | +| `SUPER + W` | `omarchy-toggle-layout` — flip workspace layout | close window | +| `SUPER + BACKSPACE` | Focus last window | toggle transparency | +| `SUPER + TAB` | Next window in the active workspace | next workspace | +| `SUPER + SHIFT + TAB` | Previous window in the active workspace | previous workspace | +| `SUPER + H` / `J` / `K` / `L` | Focus left / down / up / right | `J`: toggle split, `K`: keybindings menu, `L`: toggle layout | +| `SUPER + D` | Toggle split (dwindle `togglesplit`) | — | +| `SUPER + SHIFT + H` | `omarchy-smart-move l` — move/merge left; floating: bottom-left corner | — | +| `SUPER + SHIFT + J` | `omarchy-smart-move d` — move/merge down; floating: top-left | — | +| `SUPER + SHIFT + K` | `omarchy-smart-move u` — move/merge up; floating: top-right | — | +| `SUPER + SHIFT + L` | `omarchy-smart-move r` — move/merge right; floating: bottom-right | — | +| `SUPER + SHIFT + T` | `omarchy-pip` — toggle picture-in-picture | — | + +`SUPER + TAB` walks a ring built only from the active workspace's mapped windows, ordered by `stable_id`. Grouped windows stay in the ring and hidden ones are skipped. It raises the focused window afterwards. It avoids `cyclenext`, which would pull in a hidden scratchpad. `binds.movefocus_cycles_groupfirst = true` makes `hjkl` focus step through a group's tabs before leaving the group. + +### Workspaces and monitors + +| Keys | Action | Replaces | +| --- | --- | --- | +| `SUPER + CTRL + J` | Next workspace (`e+1`) | — | +| `SUPER + CTRL + K` | Previous workspace (`e-1`) | Herdr keybindings | +| `ALT + Q` / `W` / `E` / `R` | Switch to workspace 1 / 2 / 3 / 4 (main external display) | — | +| `ALT + Y` / `U` / `I` / `O` | Switch to workspace 5 / 6 / 7 / 8 (laptop panel) | — | +| `ALT + SHIFT + Q` / `W` / `E` / `R` / `Y` / `U` / `I` / `O` | Move window to workspace 1–8 | — | +| `SUPER + CTRL + S` | `omarchy-toggle-scratch scratchpad` | share menu | +| `SUPER + A` | `omarchy-toggle-scratch scratchpad` (Tern) | — | +| `SUPER + O`, `SUPER + SHIFT + O` | Unbound | pop window out, Obsidian | +| `ALT + SHIFT + J` | Move window to next monitor | — | +| `ALT + SHIFT + K` | Move window to previous monitor | — | +| `SUPER + SHIFT + CTRL + ALT + W` | Workspace `name:w` | — | +| `SUPER + SHIFT + CTRL + ALT + H` | Workspace `name:h` | — | +| `SUPER + CTRL + ALT + X` | Workspace `name:x` | — | + +Named workspaces provide the per-app workspaces. `SUPER + ALT + S` (send to scratchpad) keeps its Omarchy default. + +### Sizing + +| Keys | Action | +| --- | --- | +| `SUPER + R` | `omarchy-cycle-window-size` — next preset size | +| `SUPER + SHIFT + R` | `omarchy-cycle-window-size prev` | +| `ALT + SHIFT + H` / `SUPER + ,` | Width −100 px | +| `ALT + SHIFT + L` / `SUPER + .` | Width +100 px | +| `SUPER + CTRL + K` | Height −100 px | +| `SUPER + CTRL + J` | Height +100 px | +| `SUPER + ALT + C` | Fit active column (scrolling layout only) | +| `SUPER + SHIFT + ALT + C` | Fit visible columns (scrolling layout only) | + +### Applications + +| Keys | Action | Replaces | +| --- | --- | --- | +| `SUPER + CTRL + A` | Claude: `omarchy-launch-or-focus claude "gtk-launch com.anthropic.Claude"` | audio panel | +| `SUPER + CTRL + G` | Gemini: `omarchy-launch-or-focus gemini "gtk-launch gemini-desktop"` | — | +| `SUPER + CTRL + ALT + H` | `omarchy-cycle ai` | — | +| `SUPER + CTRL + ALT + J` | `omarchy-cycle-terminal` | — | +| `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` | 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 | +| `SUPER + CTRL + ALT + Y` | `omarchy-summon youtube` | web apps cycle | +| `SUPER + SHIFT + Y` | `omarchy-summon youtube` | YouTube desktop entry | +| `SUPER + CTRL + ALT + T` | tldraw offline: `omarchy-launch-or-focus tldraw-offline "gtk-launch tldraw-offline"` | show time | +| `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 + ALT + SHIFT + F` | `uwsm-app -- "$HOME/.local/bin/strata" "$(omarchy-cmd-terminal-cwd)"` — strata in the terminal's cwd | unbound first (default unnamed) | + +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.md#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 + +| Keys | Action | Replaces | +| --- | --- | --- | +| `SUPER + S` | `omarchy-capture-screenshot region` | toggle scratchpad | +| `SUPER + SHIFT + S` | `omarchy-capture-screenshot windows` | Google Maps | +| `SUPER + SHIFT + ALT + S` | `omarchy-capture-screenshot fullscreen` | — | +| `SUPER + SHIFT + E` | `omarchy-menu toggle system` | Email | +| `SUPER + SHIFT + Q` | `omarchy-menu toggle system` | — | +| `SUPER + F24` | `voxtype record toggle --profile hermes` — dictation | — | +| `SUPER + SHIFT + SPACE` | Emoji picker (`omarchy-shell shell toggle omarchy.emojis`) | toggle top bar | +| `SUPER + P` | Clipboard manager (`omarchy-shell shell toggle omarchy.clipboard`) | pseudo window | +| `ALT + TAB` | ScrollOverview `toggle all` (only when the plugin is loaded) | Omarchy's two `ALT + TAB` binds | + +`SUPER + SPACE` (Omarchy menu) and `SUPER + ALT + SPACE` (apps menu) keep their Omarchy defaults. `SUPER + RETURN` (terminal) and `SUPER + SHIFT + RETURN` (browser) are unbound; terminals and browsers live on `SUPER + CTRL + ALT + J` / `K`. + +### ScrollOverview plugin + +When `hl.plugin.scrolloverview` is present, `bindings.lua` configures it: + +| Option | Value | +| --- | --- | +| `gesture_distance` | 300 | +| `scale` | 0.5 | +| `workspace_gap` | 100 | +| `layout` | `vertical` | +| `wallpaper` | 2 (global and per-workspace) | +| `blur` | true | +| `shadow` | enabled, range 50 | + +## omarchy scripts + +The scripts live in `dot_local/bin/` as `executable_omarchy-*` and deploy to `~/.local/bin/`. Each one calls the Lua dispatcher first (`hyprctl dispatch "hl.dsp…"`) and falls back to the classic dispatcher name on older Hyprland. + +### omarchy-cycle + +```sh +omarchy-cycle +``` + +Focuses an app's window, cycles to the next one on repeated presses, or launches the app when none is open. Windows are matched on `class` or `initialClass` (case-insensitive) and sorted by workspace, then address. If the focused window is not in the set, focus goes to the first one. Launches use `setsid uwsm-app --`. + +| Argument | Matches | Launches when none | +| --- | --- | --- | +| `webapp` | `^(webapp-\|chrome-)` | re-runs as `webapp-youtube` | +| `webapp-NAME` | `webapp-NAME` or `^chrome-.*NAME` | `gtk-launch` on the first `WebApp-NAME*.desktop` or `*NAME*.desktop` in `~/.local/share/applications` | +| `kitty` | `^kitty` | `kitty` | +| `kitty-CLASS` | `^kitty-CLASS$` | `kitty --class kitty-CLASS` (command from the empty `KITTY_CMDS` map, if set) | +| `ghostty` | `ghostty` | `ghostty` | +| `browser` | zen, brave, chromium, google-chrome, firefox, librewolf, vivaldi, microsoft-edge, helium — excluding `chrome-`/`webapp-` web apps | `omarchy-launch-browser` | +| `brave` | `^brave` (Brave Origin and its web apps) | `omarchy-launch-browser` | +| `terminal` | kitty, alacritty, ghostty, foot, wezterm (Tern, the scratchpad terminal, does not match) | `omarchy-launch-terminal` (`xdg-terminal-exec`: the OS default terminal from `~/.config/xdg-terminals.list`, in the focused terminal's cwd) | +| `ai` | `claude\|hermes` | `hermes desktop` | +| anything else | `^APP$` | the argument as a command | + +Bound to `SUPER + CTRL + ALT + H` (`ai`), `G` (`ghostty`), and `O` (`obsidian`). + +### omarchy-cycle-browser / omarchy-cycle-terminal + +One-line wrappers: `omarchy-cycle brave` and `omarchy-cycle terminal`. Bound to `SUPER + CTRL + ALT + K` and `SUPER + CTRL + ALT + J`. + +### omarchy-launch-browser + +```sh +omarchy-launch-browser [--private] [url] +``` + +Shadows Omarchy's `/usr/bin/omarchy-launch-browser` (`~/.local/bin` comes first on `PATH`) and hands off to it. When Brave Origin is the default browser and not running, it prepends `--restore-last-session --hide-crash-restore-bubble`, so the first launch after a reboot or power-off reopens the last session's windows without the "Restore pages?" prompt. Chromium treats a killed browser as crashed and skips the restore; `--hide-crash-restore-bubble` clears that state. Private launches and launches into a running browser pass through unchanged. + +### omarchy-cycle-window-size + +```sh +omarchy-cycle-window-size [next|prev] +``` + +Steps the focused window through preset widths `0.333, 0.5, 0.667` of the monitor. + +- **Scrolling layout (tiled):** sends `colresize +conf` / `-conf`, so the layout's own preset list is used. +- **Floating:** resizes to the fraction × monitor width and 0.8 × monitor height, then centers. The index is stored per window. +- **Dwindle/master (tiled):** sets `splitratio` to `2 × fraction`, mirrored when the window is on the right or bottom half, clamped to 0.1–1.9. The index is stored per workspace. + +Indices are stored in `$XDG_STATE_HOME/omarchy/window-sizes/`. Bound to `SUPER + R` and `SUPER + SHIFT + R`. + +### omarchy-pip + +```sh +omarchy-pip [toggle|on] [address:0x...] +``` + +Picture-in-picture for any window. Floats and pins it, resizes it to 30% of the focused monitor on both axes, and places it in the bottom-left corner with a 10 px inset (matching `general:gaps_out`). `toggle` (the default) unpins and re-tiles a window that is already floating and pinned. `on` always applies the fit. Defaults to the active window. The dispatcher is called with `on`/`off` because `set` toggles on Hyprland 0.56. Bound to `SUPER + SHIFT + T`. `omarchy-summon` also calls it. + +### omarchy-smart-move + +```sh +omarchy-smart-move +``` + +- **Tiled:** finds the nearest tiled, visible window in that direction that overlaps on the other axis. If that neighbor, or the focused window, is in a group, it runs a group-aware move (`movewindoworgroup`), which merges into or leaves a group. Otherwise it swaps with the neighbor. +- **Floating:** moves the window to a corner of its monitor without resizing, inside the reserved area (the bar) and inset 10 px. Corners go clockwise from bottom-left: `l` bottom-left, `d` top-left, `u` top-right, `r` bottom-right. + +Bound to `SUPER + SHIFT + H/J/K/L`. + +### omarchy-summon + +```sh +omarchy-summon [youtube] +``` + +The only profile is `youtube`, which matches class `^brave-(www\.)?youtube\.com__.*$` and skips Picture-in-Picture titles. With no window open, it runs `gtk-launch YouTube`, and the window rule in `hyprland.lua` floats and positions it. With a window open, it moves the window to the focused monitor, runs `omarchy-pip on` to refit it (the two panels differ in logical size), and focuses it. Bound to `SUPER + CTRL + ALT + Y` and `SUPER + SHIFT + Y`. + +### omarchy-toggle-layout + +```sh +omarchy-toggle-layout [width] +``` + +Runs `omarchy-hyprland-workspace-layout-toggle`, then polls the workspace layout (6 × 50 ms). If it became `scrolling`, it runs `colresize all ` (default `0.75`). Dwindle needs no widths. Bound to `SUPER + W`. + +### omarchy-toggle-scratch + +```sh +omarchy-toggle-scratch [scratchpad|claude|fastmail|beeper|home|lmstudio] +``` + +| Profile | Special workspace | Home monitor | Residents (class → launch) | +| --- | --- | --- | --- | +| `scratchpad` | `special:scratchpad` | Studio Display, else Samsung ultrawide | `so.stencil.tern` → `tern` | +| `claude` | `special:claude` | Studio Display, else Samsung ultrawide | `com.anthropic.Claude` → `claude-desktop` | +| `fastmail` | `special:fastmail` | `eDP-1` | `com.fastmail.Fastmail` → `gtk-launch com.fastmail.Fastmail` | +| `beeper` | `special:beeper` | `eDP-1` | `Beeper` → `gtk-launch beeper` | +| `home` | `special:home` | focused | `brave-home\.google\.com__.*` → `gtk-launch 'Google Home'` | +| `lmstudio` | `special:lmstudio` | focused | `ai\.elementlabs\.lmstudio` → `gtk-launch ai.elementlabs.lmstudio` | + +If the workspace is visible, the script hides it. If not, it launches any resident with no window there, waits up to 8 s for the first new window, and reveals the workspace on the home monitor (or the focused one if the home monitor is absent). Launching only missing residents avoids duplicate web-app windows. Bound to `SUPER + CTRL + S`, `SUPER + A`, `SUPER + CTRL + ALT + E`, `SUPER + CTRL + ALT + M`, `SUPER + CTRL + H`, and `SUPER + CTRL + L`. + +## Related + +- [Waybar](waybar.md): the bar used with this setup. +- [kitty](../terminal/kitty.md): the `herdr` and `goliath` kitty configs launched here. diff --git a/docs/desktop/waybar-preview.png b/docs/desktop/waybar-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..881e19ef2e7e4b5c046071c659747fbd54c20fed GIT binary patch literal 374882 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≫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 z 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 Z{+GTv$%$-T)8kS&!g=W=G&@IL37Wq$6IoO5 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 | Install directory (default `./bin`) | +| `-t ` | chezmoi release tag (default `latest`) | +| `-d` | Debug logging | + +## Roles + +The first apply asks once for a machine role: + +| Role | Gets | +| --- | --- | +| `desktop` (default) | Universal toolset plus the Linux desktop layer (Hyprland config, Waybar, `omarchy-*` scripts, fonts, default apps) | +| `laptop` | Same as `desktop` | +| `server` | Universal toolset only; no desktop layer | + +See [Configuration](chezmoi/config.md) for how the role is stored and [Ignore rules](chezmoi/externals-and-ignore.md) for what it gates. + +## First apply + +1. **Prompts** + + `.chezmoi.toml.tmpl` asks once for **name**, **email**, and **role** (`desktop`, `laptop`, `server`). Answers are stored in `~/.config/chezmoi/chezmoi.toml` and not asked again. See [Configuration](chezmoi/config.md). + +2. **Packages** + + `run_onchange_before_10-packages` installs everything in `.chezmoidata/packages.yaml` with pacman and yay before any file is written. See [Scripts](chezmoi/scripts.md). + +3. **Files and externals** + + Configs are linked into `$HOME` (symlink mode). The neovim config, Omarchy's `~/.config/omarchy` checkout, and the terminal and tool configs are cloned as externals. See [Externals and ignore rules](chezmoi/externals-and-ignore.md). + +4. **Post-apply scripts** + + 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. tpm arrives earlier as an external. + +> [!NOTE] +> The gh extension script skips with a warning until `gh auth login` has run. A skipped run still exits 0, so a plain `chezmoi apply` does not retry it. See [Scripts](chezmoi/scripts.md#20-gh-extensions) for how to re-run it. + +## Updating + +```sh +chezmoi update # git pull + apply +chezmoi diff # what apply would change +``` diff --git a/docs/shell/README.md b/docs/shell/README.md new file mode 100644 index 0000000..951135d --- /dev/null +++ b/docs/shell/README.md @@ -0,0 +1,37 @@ +# Shell + +fish, bash, and zsh with shared aliases, the starship prompt, atuin history, and the ~/.local/bin scripts. + +fish is the main interactive shell. bash and zsh are set up to feel the same: they share aliases, the prompt, atuin history, and ports of the cd-style helper functions. General-purpose tools are POSIX or bash scripts in `~/.local/bin`, so each has a single implementation that all three shells call. + +| Page | Covers | +| --- | --- | +| [fish](fish.md) | `~/.config/fish`: `config.fish`, every `conf.d/` file (PATH, env, aliases, ssh-agent, tool init, secrets by name), vi-mode key bindings, the cyberdream theme, completions, the nvm.fish plugin, and every function in `functions/` | +| [bash and zsh](bash-zsh.md) | `~/.bashrc`, `~/.zshrc`, zsh and bash key bindings, `~/.config/shell/aliases.sh`, per-shell function ports | +| [Aliases](aliases.md) | Every alias from `.chezmoidata/aliases.yaml` plus the fish-only and shell-specific ones | +| [Scripts](scripts.md) | Every general-purpose executable in `~/.local/bin` (`pj`, `ghn`, `gop`, `mtime-sort`, `atuin-pick`, …) | +| [Starship](starship.md) | `~/.config/starship.toml`: format, modules, symbols, cyberdream palette | +| [atuin](atuin.md) | `~/.config/atuin`: history search settings, AI inline integration, cyberdream theme | + +## Shared across shells + +| Concern | fish | bash | zsh | +| --- | --- | --- | --- | +| Aliases | `conf.d/20-aliases.fish` (hand-maintained) | `~/.config/shell/aliases.sh` (rendered from YAML) | same as bash | +| Prompt | starship + transient prompt | starship | starship + transient prompt | +| History | atuin (hishtory also sourced if installed) | atuin | atuin, plus suvadu if installed | +| Key bindings | vi mode plus custom binds | atuin defaults only | emacs keymap plus ports of the fish binds | +| cd-style helpers | `functions/*.fish` | `~/.config/bash/functions/*.bash` | `~/.config/zsh/functions/*.zsh` | +| Directory jumping | `cd` wrapper with zoxide fallback, `zoxide init` | `cd` wrapper | `cd` wrapper | + +## Theme + +fish syntax colors, `FZF_DEFAULT_OPTS`, the starship palette, and the atuin theme all use **cyberdream** ([cyberdream.nvim](https://github.com/scottmckendry/cyberdream.nvim)). In fish, `40-tools.fish` also replays quickshell's wallpaper-generated terminal color sequences if that file exists. + +## Role gating + +Everything in this section applies on every role (`desktop`, `laptop`, `server`). The desktop helpers in `~/.local/bin` are the exception; they come with the rest of the [desktop layer](../desktop/README.md). + +## Packages + +`.chezmoidata/packages.yaml` supplies the shell tooling through pacman: `fish`, `starship`, `atuin`, `zoxide`, `fzf`, `fd`, `ripgrep`, `eza`, `bat`, `jq`, `gum`, `glow`, `yazi`, `lazygit`, and `zsh-syntax-highlighting`. See [chezmoi scripts](../chezmoi/scripts.md). diff --git a/docs/shell/aliases.md b/docs/shell/aliases.md new file mode 100644 index 0000000..ca0b135 --- /dev/null +++ b/docs/shell/aliases.md @@ -0,0 +1,121 @@ +# Aliases + +Every alias and alias-like helper across fish, bash, and zsh, and where each one is defined. + +## Single source + +`.chezmoidata/aliases.yaml` holds the shell-agnostic aliases as a list of sections, each with `name`/`cmd` items. chezmoi loads the file as template data ([chezmoi data](../chezmoi/data.md)), and `dot_config/shell/aliases.sh.tmpl` ranges over it to produce `~/.config/shell/aliases.sh`, which `~/.bashrc` and `~/.zshrc` source: + +**.chezmoidata/aliases.yaml** + +```yaml +aliases: + - section: "Editors / file managers" + items: + - { name: "e", cmd: "nvim" } + # … +``` + +**~/.config/shell/aliases.sh** + +```text +# Editors / file managers +alias e='nvim' +``` + +To add an alias for bash and zsh, add it to the YAML and run `chezmoi apply`. + +> [!NOTE] +> The YAML and template comments say fish renders the same data through `fish/conf.d/20-aliases.fish.tmpl`. That template no longer exists. `dot_config/fish/conf.d/20-aliases.fish` is a plain, hand-maintained fish file, so a YAML change does not reach fish. The fish column below shows where the two sets differ. + +## Shared aliases + +A ✓ means the alias exists in that shell with the command shown. Where fish uses a different command, the fish command is shown instead. + +### Editors / file managers + +| Alias | bash / zsh (YAML) | fish (`20-aliases.fish`) | +| --- | --- | --- | +| `e` | `nvim` | ✓ | +| `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` | ✓ | +| `e.v` | `yazi ~/.config/nvim/lua` | ✓ | +| `e.y` | `yazi ~/.config/yazi` | ✓ | +| `e.t` | `nvim ~/.config/tmux/tmux.conf` | ✓ | +| `hx` | `helix` | ✓ (listed under Tools in fish) | + +The fish `e.f`, `e.h`, and `e.k` aliases open the chezmoi source tree directly. In symlink mode, `~/.config/` files are symlinks into that tree, so both versions edit the same files. yazi and tmux are external checkouts in `~/.config`, so `e.y` and `e.t` open them there. + +### Quick directory jumps + +| Alias | bash / zsh (YAML) | fish | +| --- | --- | --- | +| `cdc` | `cd ~/.config && yazi` | ✓ | +| `cdd` | `cd ~/Developer && yazi` | not defined | +| `cdk` | `cd ~/Documents/Knowledge && obsidian` | ✓ | +| `cdl` | `cd ~/.local && yazi` | ✓ | +| `cds` | `cd ~/.local/share/services && ls` | ✓ | +| `cdw` | `cd ~/Downloads && yazi` | ✓ | +| `,,` | not defined | `cd ~/.local/share/chezmoi && yazi` | + +### Tools + +| Alias | Command | fish | +| --- | --- | --- | +| `dd` | `lazydocker` | ✓ | +| `gg` | `lazygit` | ✓ | +| `ff` | `exec fish` | ✓ | +| `npx` | `bunx` | ✓ | +| `sm` | `sudo micro` | ✓ | +| `sd` | `ssh prad@` (a machine on the local network) | ✓ | +| `oc` | `opencode` | ✓ | +| `dss` | `dotstate sync` | ✓ | +| `fabric` | `fabric-ai` | ✓ | +| `bk` | `bead-kanban` | ✓ | +| `lc` | `leetcode` | ✓ | +| `tk` | `task` | ✓ | +| `..` | not defined | `cd ..` | + +`dd` shadows coreutils `dd` in interactive shells. Use `command dd` for the real one. + +## fish-only aliases + +### Bun + +| Alias | Command | +| --- | --- | +| `br` | `bun run` | +| `br.d` | `bun run dev` | +| `br.b` | `bun run build` | +| `br.t` | `bun run test` | +| `bi` | `bun install` | +| `bg` | `bun install -g` | +| `bx` | `bunx` | + +`bg` replaces fish's job-control builtin. Use `builtin bg` to resume a background job. + +## Shell-specific extras + +All three shells define these outside the YAML: in `20-aliases.fish` for fish, and in the tail of `aliases.sh.tmpl` for bash and zsh. + +| Name | Kind | Definition | +| --- | --- | --- | +| `cpy` | alias | `wl-copy` if available | +| `pst` | alias | `wl-paste` if available | +| `q` | function | `exit`. Runs `ya emit quit` first when `$YAZI_ID` is set, so the parent yazi also quits | +| `celar`, `claer` | alias | `clear` (interactive only) | +| `ls` | alias | `eza --icons` when eza is installed (interactive only) | + +## Abbreviations + +No fish `abbr` definitions are committed. Abbreviations live in `fish_variables`, which chezmoi ignores. + +## Related helpers + +The following are functions or scripts, not aliases, and are documented elsewhere: + +- `c`, `cd`, `y`/`yy`, `clip-last`, `ghg`, `ghn`, `gho`: per-shell functions ([fish](fish.md#functions), [bash and zsh](bash-zsh.md#per-shell-functions)). +- `pnpmf`, `pnpmfd`, `pnpmfr`, `pnpmfw`, `pnpmfx`: fish workspace helpers ([fish](fish.md#pnpm-filterfish)). +- `ai`, `pj`, `gop`, `fab`, `gdc`, and the other `~/.local/bin` tools: [Scripts](scripts.md). diff --git a/docs/shell/atuin.md b/docs/shell/atuin.md new file mode 100644 index 0000000..a507ee5 --- /dev/null +++ b/docs/shell/atuin.md @@ -0,0 +1,128 @@ +# atuin + +Shell history search with a daemon, directory-scoped up-arrow, tmux popups, a CherryBlossom theme, and the atuin AI inline command generator. + +[atuin](https://atuin.sh) replaces shell history search in fish, bash, and zsh. It also provides `atuin ai inline`, a natural-language command generator that the fish config binds to keys. + +| Source (repo) | Target | Notes | +| --- | --- | --- | +| `dot_config/atuin/private_config.toml` | `~/.config/atuin/config.toml` | `private_`: written as a regular `0600` file, not a symlink | +| `dot_config/atuin/themes/cherry-blossom.toml`, `dot_config/atuin/themes/cyberdream.toml` | `~/.config/atuin/themes/*.toml` | symlinks | + +chezmoi runs in symlink mode, but `private_` files are written as real files, so edits to `~/.config/atuin/config.toml` do not reach the repo on their own. Copy them back with `chezmoi re-add` (or `czs`, see [fish](fish.md#functions)). None of the files are templates, and they apply on every role. + +## Installation + +`atuin` is listed in `.chezmoidata/packages.yaml` for pacman, and the shells use that package's binary (`/usr/bin/atuin` on Arch). Each shell runs `atuin init` only if `atuin` is on `PATH`. + +> [!NOTE] +> **No standalone install** +> +> An earlier setup also kept atuin's standalone installer layout in `~/.atuin/bin` (with a cargo-dist `atuin-receipt.json` in the repo) and prepended it to `PATH` from `conf.d/atuin.env.fish` and `. "$HOME/.atuin/bin/env"` in `.bashrc`/`.zshrc`. That copy fell behind the package: the daemon, from the newer package, migrated the history database, and every command the shells ran through the old binary failed with `migration 20260818000000 was previously applied but is missing in the resolved migrations`. The standalone install, its receipt, and the `PATH` lines are gone. Do not reinstall atuin with its curl installer on this setup. + +## Shell integration + +| Shell | Where | What | +| --- | --- | --- | +| fish | `config.fish`, interactive only | `atuin init fish \| source`, and a copy of the `?` binding (atuin 18.21 removed the `atuin ai init` command that used to emit it) | +| fish | `functions/fish_user_key_bindings.fish` | ctrl-w runs `atuin ai inline` | +| bash | end of `~/.bashrc` | `eval "$(atuin init bash)"` | +| zsh | end of `~/.zshrc` | `eval "$(atuin init zsh)"` | + +In fish, `40-tools.fish` sources hishtory before atuin, but atuin's init runs later in `config.fish` and takes ctrl-r. zsh also loads `suv init zsh` (suvadu) if installed. + +### Key bindings + +| Key | Shells | Action | +| --- | --- | --- | +| ctrl-r | all | Interactive search (`_atuin_search`) | +| up | all | Search opened from the up arrow. `filter_mode_shell_up_key_binding = "directory"` limits it to history from the current directory | +| ? | fish, vi normal mode | On an empty buffer, runs `atuin ai inline --hook` | +| ctrl-w | fish, insert and normal mode | `atuin ai inline`, then repaint | +| ctrl+shift+p | kitty | [`atuin-pick`](scripts.md#atuin-pick): directory-filtered search in a split, running the pick in a fresh fish | + +Under tmux, atuin's `[tmux]` settings open the search in a tmux popup (80% wide, 60% tall) instead of inline. + +## AI inline + +Commit `a82921c` ("add Atuin AI inline integration and keybinding") added the ctrl-w bind to `fish_user_key_bindings.fish`, `atuin ai init fish | source` to `config.fish`, and a copy of the `_atuin_ai_question_mark` function that command printed, with `bind "?" _atuin_ai_question_mark`. atuin 18.21 removed `atuin ai init`, so `config.fish` keeps only the copied function and binding; `atuin ai inline --hook` still works. + +The config also sets `[ai] enabled = true`. + +`_atuin_ai_question_mark` works like this: + +- **Buffer empty (or just `?`):** clears the line, prints OSC `133;C` to `/dev/tty` to close the terminal's semantic prompt zone (so shell-integrated terminals do not erase the TUI during a prompt reflow), then runs `atuin ai inline --hook` with stdout and stderr swapped. The TUI draws on the terminal, and the result comes back tagged: + + | Output prefix | Effect | + | --- | --- | + | `__atuin_ai_print__:` | Print the text, repaint | + | `__atuin_ai_cancel__` | Repaint only | + | `__atuin_ai_execute__:` | Put the command on the line and execute it | + | `__atuin_ai_insert__:` | Put the command on the line for editing | + | anything else, non-empty | Put it on the line for editing | + +- **Buffer not empty:** inserts a literal `?` under emacs bindings. Under vi or hybrid bindings, which this config uses, it does nothing. + +`bind "?"` in `config.fish` has no `-M` flag, so it applies to fish's `default` mode, which is vi **normal** mode here. In insert mode ? types a question mark. To ask for a command, press Esc and then ? on an empty line, or press ctrl-w from either mode. The ctrl-w bind calls `atuin ai inline` without `--hook` and replaces fish's default ctrl-w word deletion. + +bash and zsh have no AI binding. + +## Configuration + +`config.toml` is atuin's generated sample with a few keys set. The rest are commented-out defaults. The settings that take effect: + +| Key | Value | Effect | +| --- | --- | --- | +| `filter_mode_shell_up_key_binding` | `"directory"` | Up-arrow search shows only the current directory's history | +| `dotfiles.enabled` | `true` | Enables atuin's dotfiles feature (aliases and vars managed by atuin) | +| `daemon.enabled` | `true` | Uses the background daemon | +| `daemon.autostart` | `true` | atuin starts and manages the daemon itself | +| `pty_proxy.enabled` | `false` | `atuin init` does not re-exec the shell inside `atuin pty-proxy` | +| `theme.name` | `"cherry-blossom"` | Loads `themes/cherry-blossom.toml` | +| `tmux.enabled` | `true` | Search opens in a tmux popup when inside tmux (tmux 3.2+) | +| `tmux.width` / `tmux.height` | `"80%"` / `"60%"` | Popup size | +| `ai.enabled` | `true` | Enables `atuin ai` | + +No sync server, key, or session is configured in the repo. atuin keeps its encryption key and session under `~/.local/share/atuin`, outside chezmoi, and uses the default sync server. + +> [!WARNING] +> **Misplaced keys** +> +> Several keys sit after the `[dotfiles]` table header, so TOML puts them inside `[dotfiles]` rather than at the top level, and atuin ignores them. `atuin config get --resolved` confirms it: +> +> | Key as written | Intended | Resolved | +> | --- | --- | --- | +> | `search_mode` | `"daemon-fuzzy"` | `fuzzy` | +> | `enter_accept` | `true` | `false` | +> | `workspaces` | `true` | `false` | +> | `style` | `"auto"` | `compact` | +> | `inline_height_shell_up_key_binding` | `20` | unknown key | +> | `auto_sync` | `true` | `true` (the default) | +> | `update_check` | `true` | `true` (the default) | +> +> `syntax_highlight = true` has the same problem: it sits under `[ai]`, while the comment block above it documents the `[ui]` table. +> +> To apply these settings, move the keys above `[dotfiles]` (and `syntax_highlight` under `[ui]`) in `dot_config/atuin/private_config.toml`. + +## Theme + +`themes/cherry-blossom.toml` defines the selected theme, from the CherryBlossom palette shared with Ghostty, tmux, lazygit, and omp: + +| Key | Color | +| --- | --- | +| `AlertInfo` | `#a78266` | +| `AlertWarn` | `#ae825f` | +| `AlertError` | `#bf615d` | +| `Annotation` | `#a6958f` | +| `Guidance` | `#8f9aa0` | +| `Important` | `#cf716f` | +| `Title` | `#cf716f` | +| `Muted` | `#a6958f` | +| `SyntaxCommand` | `#cf716f` | +| `SyntaxFlag` | `#a78266` | +| `SyntaxString` | `#a6b084` | +| `SyntaxVariable` | `#c17e4a` | +| `SyntaxOperator` | `#ad6756` | +| `SyntaxComment` | `#a6958f` | + +`themes/cyberdream.toml` is still shipped (the palette shared with [fish](fish.md#theme) and [Starship](starship.md#palette)) but not selected. diff --git a/docs/shell/bash-zsh.md b/docs/shell/bash-zsh.md new file mode 100644 index 0000000..28baf3f --- /dev/null +++ b/docs/shell/bash-zsh.md @@ -0,0 +1,156 @@ +# bash and zsh + +Secondary shells that share fish's aliases, starship prompt, atuin history, and cd-style helper functions. + +bash and zsh are set up so a shell other than fish feels the same: the same aliases, the same starship prompt, atuin history, ports of the fish helpers that have to change the shell's own directory, and the same picker key bindings. + +| Source (repo) | Target | +| --- | --- | +| `dot_bashrc` | `~/.bashrc` | +| `dot_zshrc` | `~/.zshrc` | +| `dot_config/zsh/keybinds.zsh` | `~/.config/zsh/keybinds.zsh` | +| `dot_config/bash/keybinds.bash` | `~/.config/bash/keybinds.bash` | +| `dot_config/shell/aliases.sh.tmpl` | `~/.config/shell/aliases.sh` (template) | +| `dot_config/bash/functions/*.bash` | `~/.config/bash/functions/` | +| `dot_config/zsh/functions/*.zsh` | `~/.config/zsh/functions/` | + +`aliases.sh.tmpl` is the only template. It renders the alias list from `.chezmoidata/aliases.yaml` ([chezmoi data](../chezmoi/data.md)). The other files apply as-is on every role. + +## 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. `suvadu` (the `suv` history tool) is declared under `packages.shared.cargo` and installed by [15-tools](../chezmoi/scripts.md#15-tools). + +## ~/.bashrc + +Interactive shells only (`[[ $- != *i* ]] && return`). In order: + +1. **PATH.** Prepends `~/.local/bin` if missing, sources `~/.cargo/env` if present, and appends `~/.maestro/bin` if it exists. Exports `GHQ_ROOT` and `CODE_ROOT` as `~/Code`. +2. **Go.** `GOPATH=~/.local/share/go`, `GOBIN=$GOPATH/bin`, and `GOBIN` prepended to `PATH`. mise provides `GOROOT`. The same two values are also in `~/.config/go/env` (`dot_config/go/env.tmpl`), Go's own config file, so every `go` invocation uses them even without these variables (cron, `sudo -u`, `env -i`, GUI apps). +3. **Android SDK.** `ANDROID_HOME` and `ANDROID_SDK_ROOT` set to `~/.local/share/android`. `platform-tools`, `cmdline-tools/latest/bin`, and `emulator` are appended if they exist. Exports `GITHUB_TOKEN` from `gh auth token` unless it is already set. +4. **Aliases.** Sources `~/.config/shell/aliases.sh`. +5. **Functions.** Sources every `~/.config/bash/functions/*.bash`. +6. **Flyline.** If `~/.local/lib/libflyline.so` exists, loads it with `enable -f … flyline` for richer line editing. +7. Sources `~/.config/envman/load.sh` if it is non-empty. +8. **Prompt.** `eval "$(starship init bash)"` if starship is installed. +9. **television.** `eval "$(tv init bash)"` if `tv` is installed (the `_tv` completion), then sources `~/.config/bash/keybinds.bash`. +10. **atuin.** `eval "$(atuin init bash)"` if atuin is installed (the package's binary; see [atuin](atuin.md#installation)). atuin comes after tv, so it keeps ctrl-r and up. + +## ~/.zshrc + +1. **History.** `HISTFILE=~/.zsh_history`, `HISTSIZE=10000`, `SAVEHIST=10000`, `setopt SHARE_HISTORY HIST_IGNORE_DUPS`. +2. **Completion.** `autoload -Uz compinit && compinit`. +3. The same PATH, Go, Android, and `GITHUB_TOKEN` blocks as `.bashrc`, including `GHQ_ROOT` and `CODE_ROOT`. +4. Sources `~/.config/shell/aliases.sh`. +5. Sources every `~/.config/zsh/functions/*.zsh`. +6. Sources `~/.config/zsh/keybinds.zsh`. +7. `eval "$(suv init zsh)"` if suvadu is installed. +8. Sources `~/.config/envman/load.sh` if it is non-empty. +9. **Prompt.** If starship is installed: `eval "$(starship init zsh)"`, `ZLE_RPROMPT_INDENT=0` (the right-prompt clock sits flush with the edge), and a transient prompt. A `line-finish` zle hook swaps `PROMPT`/`RPROMPT` to the `transient` and `transient_right` starship profiles (`❯`, colored by the last exit status, and the time) and redraws, so past prompts collapse as in fish; a `precmd` hook restores the full prompt. Starship's zsh init also sets `PROMPT2`, the `∙` continuation prompt for unfinished lines. See [Starship](starship.md#shell-integration). + **Window title.** A `precmd` hook ports `fish_title`: it sets the terminal title to `%~`, prefixed with the first 10 characters of the hostname over SSH, and inside tmux also sets the window name (`ESC k`), like fish's `50-terminal-title.fish`. Unlike fish's `prompt_pwd`, the path is not abbreviated. +10. `eval "$(tv init zsh)"` if `tv` is installed (ctrl-t smart autocomplete). +11. **Syntax highlighting.** Sources the first `zsh-syntax-highlighting.zsh` found in `/usr/share/zsh/plugins/zsh-syntax-highlighting/`. The comment says this must stay last, because it wraps every zle widget defined before it. +12. **atuin.** `eval "$(atuin init zsh)"` if atuin is installed. This line comes after the syntax-highlighting block, so despite the comment, syntax highlighting is not actually last. atuin loads after tv, so it keeps ctrl-r. + +## zsh key bindings + +`keybinds.zsh` ports `fish_user_key_bindings.fish` to zle. Unlike fish, zsh uses the **emacs** keymap: `bindkey -e` pins it so that `$EDITOR=nvim` does not switch zsh into vi mode. `unsetopt flow_control` frees ctrl-q and ctrl-s from the terminal. + +A generic widget `_zle-run` is registered as `run-` for `purple`, `clip-last`, `omp`, `yy`, and `lazygit`. It clears the pending display (`zle -I`), runs the command with the tty on stdin, then `zle reset-prompt`. Widgets run in the shell process, so directory changes made by `gho` and `yy` persist. + +The tv pickers have their own widgets, because `tv --inline` opens on the line below the prompt and leaves the cursor there on exit. `zle -I` followed by `zle reset-prompt` redraws the prompt where zle last drew it, wiping anything printed below; `zle -I` alone draws a fresh prompt under the output. + +| Widget | Runs | Then | +| --- | --- | --- | +| `tv-git-files` | `tv git-files --inline` | `\033[A`, `reset-prompt` | +| `gho-inline` | `gho` | cwd unchanged: `\033[A`, `reset-prompt`. After a cd: nothing, so the new prompt lands below onefetch | +| `pj-inline`, `pj-down` | `_zle-pj`: `pj` with `PJ_STATE` set to a temp file (`PJ_QUIET=1` for `pj-down`) | `open` (cancelled): `\033[A`, `reset-prompt`. `ran`: nothing, so the task output stays. Empty (no task sources): `reset-prompt` | + +| Key | Action | +| --- | --- | +| ctrl-e | `tv-git-files` (pick a file, open it in nvim) | +| ctrl-f | `yy` | +| ctrl-b | `purple` (an external command; this repo does not provide it) | +| ctrl-y | `clip-last` | +| ctrl-o | `gho-inline` (`ghq-repos` cable, cd) | +| ctrl-p | `pj-inline` (`pj` cable) | +| ctrl-t | tv smart autocomplete (from `tv init zsh`) | +| down | `pj-down`: `PJ_QUIET=1 pj` on an empty prompt, otherwise `down-line-or-history` (bound to `^[[B` and `^[OB`) | +| ctrl-a | `omp-session`: resume or start omp for the current repo ([Scripts](scripts.md#omp-session)) | +| ctrl-n | `omp`: always a new omp session (replaces zsh's `down-line-or-history` on that key; down still walks history) | +| ctrl-g | `lazygit` | +| ctrl-q | `exit` | +| ctrl-c | At the prompt: kill the buffer, clear the screen and kitty scrollback (`ESC[2J ESC[3J`), reset the prompt | + +ctrl-c is the tty interrupt character, so `bindkey '^C'` would never fire. The binding is a `TRAPINT` function instead. At the prompt it runs `zle .kill-buffer`, prints the clear sequence, and runs `zle .reset-prompt`. While a command is running, SIGINT keeps its normal behavior (returns `128+SIGINT`). + +The fish-only binds ctrl-w (atuin AI) and ? have no zsh equivalent. ctrl-h/j/k/l belong to kitty ([kitty](../terminal/kitty.md)) and are not bound here. The cables are described on the [television](../tools/television.md) page. + +## bash key bindings + +`keybinds.bash` gives bash the same picker keys as fish and zsh. bash keeps readline's default emacs keymap. Every picker runs `tv --inline`; when nothing was printed below the prompt, `_kb_up` (`\033[A` on `/dev/tty`) steps back so readline redraws the prompt in place after `bind -x`. + +| Key | Action | +| --- | --- | +| ctrl-o | Macro `\C-x1\C-x2\C-x3\C-x0` (below): pick from the `ghq-repos` cable and cd | +| ctrl-e | `_kb_git_files`: `tv git-files --inline`, then `_kb_up` | +| ctrl-p | `_kb_pj`: `pj` with `PJ_STATE` set to a temp file; `_kb_up` only when the state is `open` (cancelled) | +| down | `PJ_QUIET=1 _kb_pj` on an empty prompt, otherwise `history-search-forward` | +| ctrl-t | `_kb_tv_autocomplete`: runs `tv --autocomplete-prompt … --inline` on the text left of the cursor, `_kb_up`, and inserts the picks there, each `printf %q`-quoted | + +`bind -x` runs in the shell process, so a `cd` persists, but readline keeps drawing the prompt it started with. ctrl-o is therefore a macro: + +1. `\C-x1` runs `_kb_gho`: stashes `READLINE_LINE`, runs `tv ghq-repos --inline`, `_kb_up`, and cds into the pick. It does not call the `gho` function. After a cd it empties the line and rebinds `\C-x2` to `accept-line` and `\C-x3` to `bind -x _kb_gho_show`; when cancelled it rebinds both to `redraw-current-line`. +2. `\C-x2` accepts the empty line, so bash prints a fresh prompt for the new cwd. Nothing reaches history. +3. `\C-x3` runs `_kb_gho_show` (`clear`, then `onefetch` in git repos); readline redraws the prompt below the output. +4. `\C-x0` runs `_kb_restore`, which puts the typed text back. + +down (`\e[B` and `\eOB`) is the macro `\C-x4\C-x5`. `bind -x` cannot call readline functions, so `_kb_down` (`\C-x4`) rebinds `\C-x5` to `history-search-forward` when the line is non-empty, or runs `PJ_QUIET=1 _kb_pj` and rebinds `\C-x5` to `redraw-current-line`. + +## Shared aliases: aliases.sh + +`~/.config/shell/aliases.sh` is rendered from `.chezmoidata/aliases.yaml`. Each YAML `section` becomes a comment, and each item becomes `alias =''`. The template then appends shell-specific extras that are not in the YAML: + +**~/.config/shell/aliases.sh** + +```sh +# Clipboard +if command -v wl-copy >/dev/null 2>&1; then + alias cpy='wl-copy' + alias pst='wl-paste' +fi + +q() { + if [ -n "$YAZI_ID" ] && command -v ya >/dev/null 2>&1; then + ya emit quit 2>/dev/null + fi + exit +} + +alias celar='clear' +alias claer='clear' +if command -v eza >/dev/null 2>&1; then + alias ls='eza --icons' +fi +``` + +- **Clipboard detection.** `cpy`/`pst` map to Wayland's `wl-copy`/`wl-paste` when available. +- **`q`.** Exits the shell. If the shell was spawned from yazi's own `q` binding (`$YAZI_ID` set), it runs `ya emit quit` first so the parent yazi closes too instead of bouncing back. +- **Typo guards and eza.** `celar`/`claer` → `clear`, and `ls` → `eza --icons` when eza is installed. The file is sourced only by interactive shells, so scripts keep the real `ls`. + +The full alias table, including the differences from fish, is on the [Aliases](aliases.md) page. + +## Per-shell functions + +Each directory holds one function per file. bash and zsh source every file at startup; the bash and zsh versions have identical bodies. + +| Function | Behavior | +| --- | --- | +| `c [dir]` | `clear` with no argument, `cd "$1"` with one | +| `cd [dir]` | No argument: `$HOME`. `-`: previous dir. Otherwise `builtin cd`, falling back to `zoxide query -- "$1"`. Records the result with `zoxide add "$PWD"` and preserves cd's exit status | +| `clip-last` | Re-runs the previous history entry (`fc -ln -1 -1`, skipping itself if the line editor already recorded `clip-last`), pipes the output to `wl-copy` or `pbcopy`, and sends a `notify-send -a shell` notification if available | +| `ghg ` | `ghg-clone "$@"`, cd into the printed path, `clear && onefetch` | +| `ghn ` | `command ghn "$@"`, cd into the printed path | +| `gho` | `dir=$(tv ghq-repos --inline)`, return if empty, cd into it, `clear`, and `onefetch` if it is a git repo. No cursor handling; bash ctrl-o does not call it | +| `yy [args]` | `yazi --cwd-file=`, then cd to the directory written there if it changed | + +The `ghg` helper script is named `ghg-clone` because an unrelated cargo binary already uses the name `ghg`. The [Scripts](scripts.md#why-some-helpers-are-shell-functions) page explains why these helpers are shell functions and not scripts. diff --git a/docs/shell/fish.md b/docs/shell/fish.md new file mode 100644 index 0000000..6aa29f4 --- /dev/null +++ b/docs/shell/fish.md @@ -0,0 +1,312 @@ +# fish + +The primary interactive shell — conf.d layout, environment, vi-mode key bindings, the cyberdream theme, completions, and every autoloaded function. + +fish is the primary interactive shell. The config is split into autoloaded files: `conf.d/` for startup snippets, `functions/` for one function per file, `completions/` for completion scripts, and `themes/` for the color theme. `config.fish` runs last and holds the prompt and atuin setup. + +| Source (repo) | Target | +| --- | --- | +| `dot_config/fish/config.fish` | `~/.config/fish/config.fish` | +| `dot_config/fish/conf.d/*.fish` | `~/.config/fish/conf.d/` | +| `dot_config/fish/functions/*.fish` | `~/.config/fish/functions/` | +| `dot_config/fish/completions/*.fish` | `~/.config/fish/completions/` | +| `dot_config/fish/themes/cyberdream.theme` | `~/.config/fish/themes/cyberdream.theme` | +| `dot_config/fish/fish_plugins` | `~/.config/fish/fish_plugins` | + +`dot_config/fish` is a git submodule ([prdlk/fish](https://github.com/prdlk/fish)). Edit inside the submodule, commit there, then commit the updated pointer in the chezmoi repo. None of these files are templates. chezmoi runs in symlink mode, so each target is a symlink back into the source tree and edits to `~/.config/fish/...` land in the submodule directly. `~/.config/fish/fish_variables` (universal variables, including the selected theme) is listed in `.chezmoiignore.tmpl` and stays local to each machine. `~/.config/fish/conf.d/secrets.fish` is local-only: it is listed in `.chezmoiignore.tmpl` and in the fish repo's `.gitignore`, and never committed. + +## Installation + +`fish` is in `.chezmoidata/packages.yaml` under `packages.arch.pacman`; `.chezmoiscripts/run_onchange_before_10-packages.sh.tmpl` installs it with pacman. 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.md#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 + +`fish_plugins` is a [fisher](https://github.com/jorgebucaran/fisher) manifest with one entry: + +**~/.config/fish/fish_plugins** + +```text +jorgebucaran/nvm.fish +``` + +The plugin's files are committed to the repo (`conf.d/nvm.fish`, `functions/nvm.fish`, `functions/_nvm_*.fish`, `completions/nvm.fish`), so fish has `nvm` without fisher. The plugin stores Node builds in `$XDG_DATA_HOME/nvm` (default `~/.local/share/nvm`) and downloads from `https://nodejs.org/dist`. If `nvm_default_version` is set, it runs `nvm use --silent $nvm_default_version` in each interactive shell. + +## Startup order + +fish sources `conf.d/*.fish` in name order and then `config.fish`. The numbered files load first: + +| File | Purpose | +| --- | --- | +| `00-path.fish` | `PATH` entries and `PNPM_HOME` | +| `10-env.fish` | Non-secret environment, greeting, fzf colors | +| `20-aliases.fish` | Aliases, clipboard aliases, `q`, typo guards | +| `30-ssh-agent.fish` | One ssh-agent shared across shells | +| `40-tools.fish` | mise, television, starship, zoxide, entire, hishtory, unsloth | +| `50-terminal-title.fish` | tmux/screen window name from `$PWD` | +| `inir-env.fish` | `INIR_VENV` and `ILLOGICAL_IMPULSE_VIRTUAL_ENV` → `~/.local/state/quickshell/.venv` | +| `inir-path.fish` | Prepends `~/.local/bin` to `PATH` if missing | +| `nvm.fish` | nvm.fish plugin events and default-version activation | +| `opencode-background-subagents.fish` | `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true`, `OPENCODE_ENABLE_EXA=1` | +| `pnpm-filter.fish` | `pnpmf*` workspace helpers | +| `rustup.fish` | Sources `~/.cargo/env.fish` | +| `secrets.fish` | API credentials (names below) | +| `uv.env.fish` | Sources `~/.local/bin/env.fish` (written by the uv installer) | + +### 00-path.fish + +Runs for every shell, including non-interactive ones, so scripts get the same `PATH`. + +| Entry | Position | +| --- | --- | +| `~/.bun/bin`, `~/.local/share/go/bin`, `~/.maestro/bin`, `~/.grok/bin`, `~/.opencode/bin` | prepended | +| `~/.foundry/bin` | appended | +| `~/.local/share/android/platform-tools`, `cmdline-tools/latest/bin`, `emulator` | appended | +| `~/local/share/pnpm` | appended (note the missing dot; this path does not match `PNPM_HOME`) | +| `$PNPM_HOME/bin` | prepended; `PNPM_HOME=~/.local/share/pnpm` | + +`~/.local/bin` comes from `inir-path.fish` and `~/.cargo/bin` from `rustup.fish`. + +### 10-env.fish + +| Variable | Value | +| --- | --- | +| `fish_greeting` | empty (no greeting) | +| `FISH_BOTTOM_PROMPT` | `0` unless inherited. `1` pins the prompt to the bottom row | +| `HSA_OVERRIDE_GFX_VERSION` | `11.5.0` (ROCm) | +| `ROCR_VISIBLE_DEVICES`, `HIP_VISIBLE_DEVICES` | `0` | +| `__EGL_VENDOR_LIBRARY_FILENAMES`, `VK_DRIVER_FILES` | Mesa's `50_mesa.json` and RADV's `radeon_icd.json`, only when `/dev/dri/by-path/pci-0000:c4:00.0-render` (the Strix Halo iGPU) exists. Keeps the session off the compute-only eGPU | +| `EGET_BIN` | `~/.local/bin` | +| `GHQ_ROOT`, `CODE_ROOT` | `~/Code` | +| `ANDROID_HOME`, `ANDROID_SDK_ROOT` | `~/.local/share/android` | +| `GITEA_LOGIN` | `prad.codes` | +| `GITLAB_HOST` | `git.sonr.org` | +| `GITHUB_TOKEN` | `gh auth token`, unless already set and only if `gh` is logged in | +| `EDITOR`, `VISUAL` | `nvim` | +| `BROWSER` | `/usr/bin/brave-origin` if that binary exists | +| `CHROME_EXECUTABLE` | `/usr/bin/chromium` if it exists | +| `PUPPETEER_EXECUTABLE_PATH` | `~/.local/bin/chrome-headless-shell` | +| `ZEAL_DOCSETS` | the Zeal flatpak docset directory | +| `SHARP_IGNORE_GLOBAL_LIBVIPS` | `1` | +| `FZF_DEFAULT_OPTS` | cyberdream fzf theme (below) | + +`GOPATH`/`GOBIN` are not set here. The comment explains why: mise's fish hook re-applies its `[env]` on every prompt, so Go paths are pinned in `~/.config/mise/config.toml`, and mise provides `GOROOT`. `~/.config/go/env` holds the same values for any `go` run outside a shell. + +**~/.config/fish/conf.d/10-env.fish** + +```fish +set -gx FZF_DEFAULT_OPTS " + --height=~40% + --layout=default + --info=inline-right + --border=rounded + --prompt=' ' + --pointer='▶' + --marker='✓' + --color=fg:#ffffff,fg+:#ffffff,bg:-1,bg+:#3c4048 + --color=hl:#5ef1ff,hl+:#5ef1ff + --color=info:#7b8496,header:#7b8496,border:#7b8496 + --color=prompt:#5ef1ff,pointer:#ffaecf,marker:#5eff6c,spinner:#f1ff5e + --color=gutter:-1,query:#ffffff +" +``` + +### 20-aliases.fish + +Editor, Bun, directory-jump, and tool aliases, followed by: + +- `cpy`/`pst`: `wl-copy`/`wl-paste` when `wl-copy` exists. +- `q`: exits the shell. If `$YAZI_ID` is set and `ya` exists, it first runs `ya emit quit` so the yazi that spawned the shell quits too. +- Interactive only: `celar` and `claer` → `clear`, and `ls` → `eza --icons` when eza is installed. `clear` itself is not aliased, because an alias would shadow `functions/clear.fish`. + +The full list is on the [Aliases](aliases.md) page. This file is plain fish, not rendered from `.chezmoidata/aliases.yaml`, so its alias set differs from bash/zsh in a few places. + +### 30-ssh-agent.fish + +Interactive shells without `SSH_AUTH_SOCK` source `~/.ssh/agent.env.fish` and probe with `ssh-add -l`. Exit code 2 means no agent is reachable. In that case it starts `ssh-agent -c`, rewrites its csh `setenv` lines into `set -gx`, saves them to `~/.ssh/agent.env.fish`, and sources the file. An `SSH_AUTH_SOCK` provided from outside (systemd unit, forwarding, keyring) is left alone. + +### 40-tools.fish + +- `mise activate fish` runs for every shell, so scripts see mise shims too. +- Interactive only, in order: + 1. Print `~/.local/state/quickshell/user/generated/terminal/sequences.txt` if present. These are escape sequences that apply wallpaper-generated Material You terminal colors from quickshell. + 2. `tv init fish` (television), if installed. + 3. `starship init fish`, `zoxide init fish`, and `entire completion fish`, each only if installed. + 4. `tv init fish` a second time. The comment says it runs before hishtory so hishtory keeps ctrl-r. + 5. Source `~/.hishtory/config.fish` if present. + 6. Activate the unsloth studio venv (`~/.unsloth/studio/unsloth_studio/bin/activate.fish`) if present. + +atuin is initialized later, in `config.fish`, and binds ctrl-r itself. + +### 50-terminal-title.fish + +Defines `terminal_title`, which runs on every `PWD` change and prints `ESC k ESC \`. That sequence sets the tmux or screen window name. `functions/fish_title.fish` sets the regular terminal title. + +### pnpm-filter.fish + +pnpm workspace helpers. `__pnpm_pick_pkg` lists workspace packages with `pnpm m ls --depth -1 --json | jq`, and you pick one with `gum filter`. + +| Function | Does | +| --- | --- | +| `pnpmf ` | Pick a package, then `pnpm --filter add ` inside a `gum spin` | +| `pnpmfd ` | Same with `add -D` | +| `pnpmfr ` | `pnpm --filter remove ` | +| `pnpmfw` | Pick a target package and a sibling, then `pnpm --filter add --workspace` | +| `pnpmfx` | Pick a package, then pick one of its `package.json` scripts with `gum filter` and run it | + +### secrets.fish + +Exports credentials as global variables. The values are machine-specific and are not documented here. Variable names: + +`PGDATABASE` (local Postgres connection string), `GITLAB_TOKEN`, `OPPER_API_KEY`, `OPENAI_API_KEY`, `GROQ_API_KEY`, `WEBAWESOME_NPM_TOKEN`, `TAVILY_API_KEY`, `FINANCIAL_DATASETS_API_KEY`, `PIMLICO_API_KEY`, `WAKATIME_API_KEY`, `LINEAR_CLI_PROFILE`, `LINEAR_API_KEY`, `LINEAR_TEAM_ID`. + +> [!WARNING] +> Put your own values in `~/.config/fish/conf.d/secrets.fish` on each machine. Do not reuse credentials from another clone. + +## config.fish + +The header comment says the file should stay empty, but it holds the following: + +1. **Starship with transient prompt.** `starship_transient_prompt_func` renders `starship module character` and `starship_transient_rprompt_func` renders `starship module time`. Then `starship init fish | source` and `enable_transience` run, so past prompts collapse to `❯` with the time on the right. See [Starship](starship.md). +2. **Bottom-pinned prompt.** In interactive shells with `FISH_BOTTOM_PROMPT=1`, `tput cup $LINES 0` moves the cursor to the last row. The comment calls `1` the default, but `10-env.fish` sets `0`, so the prompt stays at the top unless you export `FISH_BOTTOM_PROMPT=1`. +3. `fish_add_path ~/.grok/bin` (grok installer block). +4. Sources `~/.config/envman/load.fish` if it is non-empty. +5. **atuin.** Interactive shells run `atuin init fish | source`. See [atuin](atuin.md). +6. `fish_add_path ~/.cmux/bin` and `~/.cache/.bun/bin`. +7. Sources the first readable `~/.config/herdr/plugins/github/herdr-automatic-rename-*/shell/hook.fish`. This is herdr's automatic pane-rename hook ([herdr](../terminal/herdr.md)). +8. A copy of the `_atuin_ai_question_mark` function that `atuin ai init fish` used to emit (atuin 18.21 removed that command), followed by `bind "?" _atuin_ai_question_mark`. + +## Key bindings + +`functions/fish_user_key_bindings.fish` turns on **vi mode** (`fish_vi_key_bindings`) first, then adds custom binds in both `insert` and `default` (normal) modes, so they work in either mode. + +| Key | Action | +| --- | --- | +| ctrl-e | `_tv_inline git-files`, then repaint: pick a file in the repo and open it in nvim ([television](../tools/television.md#git-files)) | +| ctrl-f | `yy`: yazi, then cd to the directory yazi exited in | +| ctrl-b | `purple`, then repaint (an external command; this repo does not provide it) | +| ctrl-y | `clip-last`: re-run the last command and copy its output | +| ctrl-o | `_gho_bind`: `gho` (pick a ghq repo or Obsidian vault from the `ghq-repos` cable and cd into it), then repaint | +| ctrl-p | `_pj_bind`: `pj`, the task runner on the `pj` cable ([Scripts](scripts.md#pj)), then repaint | +| ctrl-a | `omp-session`, then repaint: resume or start omp for the current repo by branch and session age, opening the `omp-sessions` cable only when nothing qualifies ([Scripts](scripts.md#omp-session)) | +| ctrl-n | `omp`, then repaint: always a new omp session | +| ctrl-w | `atuin ai inline`: natural-language command overlay | +| ctrl-z | `_jobs_bind`: with one background job, `fg` it; with several, pick one from the `jobs` cable ([television](../tools/television.md#jobs)) and `fg` that; with none, nothing. While a job holds the terminal, ctrl-z is still the tty's suspend, so the key toggles suspend and resume | +| ctrl-g | `lazygit` | +| down | `_pj_bind_down`: opens the `pj` cable on an idle, empty prompt, otherwise fish's `down-or-search` | +| ctrl-c | Clears the command line, runs `clear` (screen and kitty scrollback), repaints | +| ctrl-q | `exit` | + +Bindings added by tool init scripts: + +| Key | Mode | Action | Source | +| --- | --- | --- | --- | +| ctrl-r | default and insert | `_atuin_search` | `atuin init fish` | +| up | default and insert | `_atuin_bind_up` (atuin history, directory filter) | `atuin init fish` | +| ? | default (vi normal) | `_atuin_ai_question_mark`: on an empty buffer, opens `atuin ai inline` | `config.fish` | +| ctrl-t | insert | `tv_smart_autocomplete` | `tv init fish` | + +`_pj_bind_down` hands the key to `down-or-search` when the buffer is non-empty, the completion pager is open, or history search is active. Otherwise it runs `_pj_bind --quiet` (`PJ_QUIET=1`), so pressing down outside a project does nothing and prints no error. + +The pickers run `tv --inline`, which opens on the line below the prompt and leaves the cursor there when it exits. The wrappers put the prompt back before `commandline -f repaint`, writing the cursor moves to `/dev/tty`: + +| Wrapper | Runs | Then | +| --- | --- | --- | +| `_tv_inline ARGS` | `tv ARGS --inline` | `\033[A` (cursor up), returns tv's status | +| `_gho_bind` | `gho` | `\033[A` if the cwd did not change; `\n` after a cd, so the prompt lands below onefetch | +| `_pj_bind [--quiet]` | `pj` with `PJ_STATE` set to a temp file | `\033[A` for `open` (cancelled) or empty (no task sources); `\n` for `ran` (the task printed output) | +| `_jobs_bind` | `fg` of the only job, or `jobs` with `TV_JOBS` set to a temp file holding the job table | `\033[A` (via `_tv_inline`) when the picker is cancelled | + +`_jobs_bind` runs `fg` by replacing the command line with ` __jobs_bind_fg ` (leading space: kept out of history) and executing it, not from inside the binding. A binding runs while fish's reader still owns the terminal with extended keys on, so a job started with `&` that had never held the terminal got ctrl-z and ctrl-c as escape sequences instead of signals. `__jobs_bind_fg` erases the echoed prompt line (`\033[A\033[2K` on `/dev/tty`) and runs `fg` with its "Send job … to foreground" message sent to `/dev/null`, so resuming leaves nothing on screen. Text already typed is put back at the next prompt by a one-shot `fish_prompt` handler. + +`omp-session` (ctrl-a) does its own `\033[A` when its `omp-sessions` picker is cancelled, so the binding only repaints. + +zsh and bash bind ctrl-o, ctrl-e, ctrl-p, down, and ctrl-t the same way ([bash and zsh](bash-zsh.md)). Inside television, ctrl-e runs the channel's `edit` action and ctrl-h its `goto_parent_dir` action (`~/.config/television/config.toml`). The config and cables are on the [television](../tools/television.md) page. + +> [!NOTE] +> Under kitty, ctrl-g (lazygit overlay), ctrl-y (yazi split), and ctrl-h/j/k/l (split navigation) are mapped in `kitty.conf` and never reach fish. The fish binds for those keys only apply in other terminals. See [kitty](../terminal/kitty.md). + +The prompt shows `❮` in green in vi normal mode (starship's `vimcmd_symbol`). + +## Theme + +`themes/cyberdream.theme` is a fish theme file with colors from [cyberdream.nvim](https://github.com/scottmckendry/cyberdream.nvim) and preferred background `#16181a`. The repo ships the file but does not select it. The active theme is stored in `fish_variables`, which chezmoi ignores, so pick it once per machine with `fish_config theme save cyberdream`. + +| Variable | Color | +| --- | --- | +| `fish_color_normal` | `#ffffff` | +| `fish_color_command` | `#5ef1ff` | +| `fish_color_param`, `fish_color_escape` | `#ffaecf` | +| `fish_color_keyword`, `fish_color_host` | `#5eff6c` | +| `fish_color_quote`, `fish_color_option`, `fish_color_host_remote` | `#f1ff5e` | +| `fish_color_redirection`, `fish_color_operator` | `#5ea1ff` | +| `fish_color_end` | `#bd5eff` | +| `fish_color_comment`, `fish_color_gray`, `fish_color_autosuggestion` | `#7b8496` | +| `fish_color_error`, `fish_color_cancel`, `fish_color_status` | `#ff6e5e` | +| `fish_color_selection`, `fish_color_search_match` | background `#3c4048` | +| `fish_color_cwd` | `#ffbd5e` | +| `fish_color_user` | `#5ef5d2` | +| `fish_pager_color_progress`, `fish_pager_color_description` | `#7b8496` | +| `fish_pager_color_prefix` | `#5ea1ff` | +| `fish_pager_color_completion` | `#ffffff` | + +`FZF_DEFAULT_OPTS` in `10-env.fish` uses the same palette. + +## Completions + +| File | Command | Mechanism | +| --- | --- | --- | +| `ccc.fish` | `ccc` | Typer-generated: calls `ccc` with `_CCC_COMPLETE=complete_fish` | +| `grok.fish` | `grok` | Static clap-style completion script (global options, subcommands) | +| `mise.fish` | `mise` | `mise completion fish \| source` (generated at load time) | +| `nvm.fish` | `nvm` | From the nvm.fish plugin | +| `omp.fish` | `omp` | `omp completions fish \| source` (generated at load time) | +| `ostt.fish` | `ostt` | Static clap-style completion script | + +## Functions + +Every file in `functions/` is autoloaded by name. Several also exist as POSIX scripts in `~/.local/bin` for bash and zsh. In fish the function shadows the script. See [Scripts](scripts.md) for why the cd-style helpers must stay shell functions. + +| Function | Purpose | +| --- | --- | +| `_nvm_index_update` | nvm.fish internal: downloads `index.tab` from `$nvm_mirror` into `$nvm_data/.index` | +| `_nvm_list` | nvm.fish internal: lists installed Node versions plus `system` | +| `_nvm_version_activate` | nvm.fish internal: sets `nvm_current_version` and prepends its `bin` to `PATH` | +| `_nvm_version_deactivate` | nvm.fish internal: removes a version's `bin` from `PATH` | +| `_gho_bind` | ctrl-o handler: `gho`, then cursor fix and repaint (see [Key bindings](#key-bindings)) | +| `_pj_bind` | ctrl-p handler: `pj` with `PJ_STATE`, then cursor fix and repaint. `--quiet` sets `PJ_QUIET=1` | +| `_jobs_bind` | ctrl-z handler: `fg` the only job or pick one from the `jobs` cable (see [Key bindings](#key-bindings)) | +| `_pj_bind_down` | Down-arrow handler: `_pj_bind --quiet` on an empty idle prompt, else `down-or-search` | +| `_tv_inline` | `tv $argv --inline`, then moves the cursor up one line on `/dev/tty` | +| `ai` | `gum choose` among `claude`, `opencode`, `codex`, `hermes`, `fractal`. `claude` runs with `--dangerously-skip-permissions` | +| `c` | `clear` with no argument, `cd ` with one | +| `c2p` | fzf-pick a `.hbs` template under `~/.config/code2prompt` and run `code2prompt --template` | +| `cd` | `builtin cd`. If that fails, `zoxide query` the argument. Every successful cd is recorded with `zoxide add` | +| `clear` | Prints `ESC[2J ESC[3J ESC[1;1H` to clear the screen and kitty scrollback, then re-pins the prompt if `FISH_BOTTOM_PROMPT=1`. Falls back to `command clear` when not interactive | +| `clip-last` | Re-runs `$history[1]`, pipes the output to `cpy`, and sends a `notify-send` notification | +| `cp-appid` | fzf-pick a `.desktop` app ID and copy it with `wl-copy` (desktop helper in `~/.local/bin`) | +| `czs` | chezmoi sync: `chezmoi status`, `chezmoi re-add` of drifted files, commit the source repo, then `git pull --rebase --autostash` and `git push` if ahead. Optional targets scope it (for example `czs ~/.config/fish`). Messages print with a `chs:` prefix | +| `extract_agents ` | Copies every `AGENTS.md` under the current tree into ``, preserving paths | +| `fab` | fzf-pick a Fabric pattern from `~/.config/fabric/pattern_explainations.json` (description in the preview, ctrl-/ toggles it) and run it, feeding piped stdin if any | +| `fish_title` | Terminal title: `prompt_pwd`, or `:` over SSH | +| `fish_user_key_bindings` | Vi mode plus the custom binds above | +| `gdc` | `gum confirm`, then `git reset --hard HEAD` and `git clean -fd` | +| `gh-sonr-org-migrate` | Script body (see the warning below) that moves every repo from `*sonr*` GitHub orgs into `sonr-io` and deletes the emptied orgs | +| `ghg ` | `ghg-clone ` (ghq get), cd into the clone, `clear`, `onefetch` | +| `ghn ` | Runs `~/.local/bin/ghn` to create and clone a private repo, then cds into it | +| `gho` | `tv ghq-repos --inline` (repo/vault picker); returns if nothing was picked, else cds into the result, `clear`, and `onefetch` inside git repos | +| `git-summary [flags]` | `code2prompt` over the repo root, including only `AGENTS.md` files, using `~/.config/code2prompt/agents-md.hbs`. Extra flags pass through | +| `gtm [repo]` | Migrates GitHub repos to a prad.codes (Gitea) org with `tea repos migrate`. With no argument, fzf multi-selects from `gh repo list`. You pick the target org and migration options (wiki, issues, labels, pull-requests, releases, milestones, lfs, mirror) with gum, private repos stay private, and it offers to clone the results with `ghg-clone`. Fish only | +| `launch_omp_livediff_overlay` | Uses `kitty @` to overlay `omp` on the current window with a `livediff` vsplit beside it. Needs `KITTY_LISTEN_ON` | +| `lc-elir [root]` | fzf multi-select numbered LeetCode solution files (`1234.slug.js`/`.ts`) and run `omp -p "/leetcode-eli5 "` on each | +| `mdcp ` | `curl.md `, copy the result with `cpy`, and preview it with `mdfried` | +| `mdp` | fzf-pick a Markdown file up to 3 levels deep (mdfried preview) and open it in `mdfried` | +| `nvm` | nvm.fish: `install`, `use`, `list`, `list-remote`, `current`, `uninstall`. Reads `.nvmrc`/`.node-version` | +| `y` | yazi with `--cwd-file`, then cd to the directory yazi exited in | +| `yy` | Same as `y`. Used by the ctrl-f bind | + +Functions defined inside `conf.d/` and `config.fish` rather than `functions/`: `q` (20-aliases), `terminal_title` (50-terminal-title), the `pnpmf*` helpers and `__pnpm_pick_pkg` (pnpm-filter), the `_nvm_install`/`_nvm_update`/`_nvm_uninstall` event handlers (nvm), and `starship_transient_prompt_func`, `starship_transient_rprompt_func`, and `_atuin_ai_question_mark` (config.fish). + +> [!WARNING] +> **gh-sonr-org-migrate** +> +> `functions/gh-sonr-org-migrate.fish` is a script, not a function definition. Running `gh-sonr-org-migrate` in fish autoloads the file, which runs the whole fish migration flow. Because the file defines no function of that name, fish then falls through to the bash port at `~/.local/bin/gh-sonr-org-migrate` and starts a second run. Cancel the second run at its first `gum` prompt, or call the bash script by its full path. diff --git a/docs/shell/scripts.md b/docs/shell/scripts.md new file mode 100644 index 0000000..51f9a27 --- /dev/null +++ b/docs/shell/scripts.md @@ -0,0 +1,477 @@ +# Scripts + +The shell-agnostic executables in ~/.local/bin — usage, behavior, and dependencies for each. + +`dot_local/bin/` holds standalone `sh`, `bash`, and `python3` executables. The `executable_` prefix is a chezmoi attribute that sets the executable bit and is dropped from the target name, so `dot_local/bin/executable_pj` becomes `~/.local/bin/pj`. bash, zsh, and fish all put `~/.local/bin` on `PATH`, so every shell runs the same implementation. + +This page covers the general-purpose scripts. The desktop scripts in the same directory are documented with their compositor: + +- `cp-appid`: fzf-pick a `.desktop` app ID and copy it with `wl-copy`. Desktop roles only. +- `omarchy-*`: [Hyprland](../desktop/hyprland.md) + +## Why some helpers are shell functions + +A script runs as a child process, and a child cannot change its parent shell's working directory or read the parent's in-memory history. Helpers that need to do either are therefore defined as shell functions, ported three times: `fish/functions/*.fish`, `bash/functions/*.bash`, and `zsh/functions/*.zsh`. + +| Helper | Why it must be a function | +| --- | --- | +| `yy` (and fish's `y`) | cds into the directory yazi exited in | +| `c` | cds when given an argument | +| `cd` | Replaces the `cd` builtin with a zoxide fallback | +| `ghg`, `ghn`, `gho` | cd into a repo that was picked or cloned | +| `clip-last` | Reads the shell's own history (`$history[1]` in fish, `fc` in bash/zsh) | + +For `ghg` and `ghn`, the work lives in a script that prints a directory on stdout (and everything else on stderr). The shell function captures that path and cds into it. `ghg`'s script is named `ghg-clone` because an unrelated cargo binary already uses the name `ghg`. `gho` has no script: the function reads the path from `tv ghq-repos` ([television](../tools/television.md#ghq-repos)). + +Several scripts below also exist as fish functions of the same name (`ai`, `c2p`, `extract_agents`, `fab`, `gdc`, `git-summary`, `lc-elir`, `mdcp`, `mdp`, `launch_omp_livediff_overlay`, `gh-sonr-org-migrate`). In fish the function runs instead of the script. Both versions behave the same. See [fish functions](fish.md#functions). + +## Overview + +| Script | Language | One line | +| --- | --- | --- | +| [`ai`](#ai) | sh | Pick an AI CLI with gum and launch it | +| [`atuin-pick`](#atuin-pick) | python3 | atuin history picker for a kitty or tmux split | +| [`brave-new-tab`](#brave-new-tab) | sh | Open a URL in a new Brave Origin tab | +| [`c2p`](#c2p) | sh | code2prompt with an fzf-picked template | +| [`extract_agents`](#extract_agents) | sh | Copy all `AGENTS.md` files into a directory tree | +| [`fab`](#fab) | sh | fzf picker for Fabric patterns | +| [`gdc`](#gdc) | sh | Discard all git changes after confirmation | +| [`gh-sonr-org-migrate`](#gh-sonr-org-migrate) | bash | Consolidate `*sonr*` GitHub orgs into `sonr-io` | +| [`ghg-clone`](#ghg-clone) | sh | `ghq get` and print the clone path | +| [`ghn`](#ghn) | sh | Create a private repo, clone it, print the path | +| [`git-summary`](#git-summary) | sh | Aggregate a repo's `AGENTS.md` files with code2prompt | +| [`gop`](#gop) | sh | Open the current repo's web page | +| [`kitty-day-save`](#kitty-day-save) | bash | Save kitty's daily session right before shutdown/reboot | +| [`launch_omp_livediff_overlay`](#launch_omp_livediff_overlay) | sh | omp overlay plus a livediff split in kitty | +| [`lc-elir`](#lc-elir) | sh | Run `/leetcode-eli5` via omp on picked solutions | +| [`mandible-pick`](#mandible-pick) | bash | fzf-pick a command, then open it in mandible | +| [`mdcp`](#mdcp) | sh | Fetch a URL as Markdown, copy it, preview it | +| [`mdp`](#mdp) | sh | fzf Markdown picker with mdfried preview | +| [`mtime-sort`](#mtime-sort) | sh + perl | Sort path lines newest-first by mtime | +| [`omp-session`](#omp-session) | python3 | Resume or start omp for the current repo; backend of the `omp-sessions` cable | +| [`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 + +```sh +ai +``` + +Shows `gum choose --header 'AI CLI'` with `claude`, `opencode`, `codex`, `hermes`, and `fractal`, then `exec`s the choice. `claude` runs as `claude --dangerously-skip-permissions`; the others run as the bare binary name. Esc or Ctrl-C exits 0. + +**Needs:** `gum` and the chosen CLI. + +## atuin-pick + +```sh +atuin-pick +``` + +Opens atuin's interactive search (`atuin search -i --filter-mode directory`), limited to history from the current directory. It then `exec`s an interactive `fish`. If you picked a command, the new fish runs `echo '❯ '; ` via `-C` (`--init-command`), so aliases resolve, a `cd` persists, and the prompt appears below the output. Esc starts a plain fish. + +It is written for launch contexts where atuin's shell init never ran. It runs `atuin` from `PATH` and seeds `ATUIN_SESSION` from `atuin uuid` if unset. + +**Launched by:** ctrl+shift+p in kitty. `kitty.conf` opens it in a horizontal split (`launch_hs atuin-pick`). Under the kitty-tmux profile, `tmux.conf` runs it with `tmux split-window -v -l 25%` in the current pane's directory. See [kitty](../terminal/kitty.md) and [atuin](atuin.md). + +**Needs:** `python3`, `atuin`, `fish`. + +## brave-new-tab + +```sh +brave-new-tab +``` + +Runs `brave-origin --new-tab ` detached with `setsid -f`. With Brave Origin running, the URL opens as a tab in its last active window; otherwise Brave Origin starts with it. Exits 2 unless given exactly one argument. + +A URL without a scheme gets one from its host (port and path ignored): `localhost`, `*.localhost`, `*.local`, and `127.*` get `http://`, everything else `https://`. URLs containing `://`, and `about:` URLs, pass through unchanged. + +| Argument | Opens | +| --- | --- | +| `example.com/path` | `https://example.com/path` | +| `localhost:3000` | `http://localhost:3000` | +| `printer.local` | `http://printer.local` | +| `http://example.com` | `http://example.com` | + +**Needs:** `brave-origin` (`brave-origin-bin`), `setsid` (util-linux). + +## c2p + +```sh +c2p +``` + +Lists `*.hbs` files under `~/.config/code2prompt` with `fd`, lets you pick one with fzf, and `exec`s `code2prompt --template `. + +**Needs:** `fd`, `fzf`, `code2prompt`. + +## extract_agents + +```sh +extract_agents +``` + +Creates `` and copies every `AGENTS.md` below the current directory into it with `cp --parents`, keeping the relative paths. + +**Needs:** `fd`, GNU `cp` (`--parents`). + +## fab + +```sh +fab +some-command | fab +``` + +Reads `~/.config/fabric/pattern_explainations.json`. fzf lists pattern names, the preview pane (right, 60%, wrapped) shows each description, and ctrl-/ toggles the preview. The picked pattern runs as `fabric-ai --pattern `, falling back to `fabric` if `fabric-ai` is not installed. Piped stdin is buffered to a temp file and fed to the pattern; the temp file is removed on exit. + +**Needs:** `jq`, `fzf`, `fabric-ai` or `fabric`, and the pattern JSON. + +## gdc + +```sh +gdc +``` + +Asks `gum confirm "Discard all uncommitted changes? This is irreversible."`. On yes, runs `git reset --hard HEAD` and `git clean -fd`. + +**Needs:** `gum`, `git`. + +## gh-sonr-org-migrate + +```sh +gh-sonr-org-migrate +``` + +A bash port of `fish/functions/gh-sonr-org-migrate.fish`, with the same flow: + +1. **Preflight** + + Checks that `gh`, `gum`, and `jq` exist and that `gh auth status` succeeds. + +2. **Discover** + + Lists your GitHub orgs whose login contains `sonr`, excluding the target `sonr-io`. You pick which to migrate with `gum choose --no-limit`. + +3. **Transfer** + + For each repo in each org, runs `gh api -X POST repos///transfer -f new_owner=sonr-io`. If the name already exists in `sonr-io`, `gum input` asks for a new name (default `-`). An empty name skips the repo. + +4. **Settle** + + Waits 30 seconds (`gum spin`), because GitHub transfers are asynchronous. + +5. **Delete** + + For every selected org that had no failed transfers and now has zero repos, asks `gum confirm` and then `gh api -X DELETE orgs/`. + +**Needs:** `gh` authenticated as owner of every org involved, `gum`, `jq`. + +> [!WARNING] +> In fish, run this script by its full path (`~/.local/bin/gh-sonr-org-migrate`). The fish file of the same name is a script body with no function in it, so typing just the name runs the fish flow and then this script. See [fish](fish.md#functions). + +## ghg-clone + +```sh +ghg-clone +``` + +Runs `ghq get `, with its output sent to stderr. It then works out the on-disk path: it strips the scheme, any `user@`, the scp-style colon, and a trailing `.git`, and prefixes `github.com/` when the input has no host. It checks that `$(ghq root)///` exists, runs `zoxide add` on it if zoxide is installed, and prints the path. + +Accepts `https://…`, `ssh://…`, `git@host:user/repo`, `host/user/repo`, or `user/repo`. + +**Mirrors.** After the clone, it sets up a [prad.codes](../tools/git.md) mirror when the repo has none. All of it talks on stderr and never fails the clone: + +| Cloned from | Mirror | Skipped when | +| --- | --- | --- | +| `github.com//` | Pull mirror into a prad.codes org, every 8h (`tea repos migrate --mirror --mirror-interval 8h`, authenticated with `gh auth token`, private if the GitHub repo is). `gum choose` picks the org, preselected from GitHub's primary language: Go → `go`, Python → `py`, Rust → `rs`, Dart → `dart`, TeX → `tex`, JS/TS/Astro/Svelte/Vue/HTML/CSS → `js`, Markdown/MDX → `md`, anything else → `env`. Esc skips | You are not an admin of the GitHub repo, or a prad.codes repo already pulls from it (`original_url`) | +| `prad.codes//` | Push mirror to `github.com//` on every push and every 8h, with a first sync right away. After a `gum confirm`, it creates the GitHub repo (same visibility) if missing; an existing one is overwritten by the mirror pushes, which the prompt says | The repo is itself a pull mirror, or already has a push mirror | + +Both mirrors store your `gh` OAuth token in prad.codes as the remote credential. Without a terminal (no `gum` prompt), nothing is mirrored. + +**Used by:** the `ghg` shell function, which cds into the path, clears the screen, and runs `onefetch`. The fish function `gtm` also uses it to clone migrated repos. + +**Needs:** `ghq` (`GHQ_ROOT=~/Code`, exported by fish, zsh, and bash), optional `zoxide`. Mirrors need `gh`, `tea` (logged in to prad.codes), `jq`, and `gum`; without any of them the step is skipped. + +## ghn + +```sh +ghn +``` + +Creates a new **private** repo and clones it: + +- **prad.codes** (Gitea): pick an org from `tea organizations list`, then `tea repos create --private` and `ghq get https://prad.codes//`. +- **github.com**: pick the owner `prdlk` or `wltbs`, then `gh repo create / --private` and `ghq get`. + +You pick the host with `gum choose`. The script prints the clone directory, and the `ghn` shell function cds into it. + +**Needs:** `gum`, `ghq`, and `tea` or `gh`. + +## git-summary + +```sh +git-summary [code2prompt flags…] +``` + +From anywhere inside a git repo, runs `code2prompt --include AGENTS.md --include "**/AGENTS.md" --template ~/.config/code2prompt/agents-md.hbs`. Extra flags such as `--output-file` or `--tokens` are passed through. + +**Needs:** `git`, `code2prompt`, and the `agents-md.hbs` template. + +## gop + +```sh +gop # origin, else upstream, else first remote +gop upstream # a named remote +gop owner/repo # github.com/owner/repo +gop # any https/ssh/scp remote URL +``` + +Opens a repo's web page for any forge whose URL layout is `https:////`, such as github.com and prad.codes. It reduces any remote form to `//`: it drops credentials, drops the port on `ssh://` and `git://` remotes, keeps the port and plain `http` on `http://` remotes, and strips `.git`. It then runs `$BROWSER` (default `xdg-open`) on the result. + +**Needs:** `git`, a browser or `xdg-open`. + +## kitty-day-save + +```sh +kitty-day-save # hold a logind delay lock, flush on shutdown, exit +kitty-day-save --now # flush every running kitty immediately +``` + +Run by `kitty-day-save.service` (`dot_config/systemd/user/`, `WantedBy=graphical-session.target`, `Restart=always` after 10 s). It wraps itself in `systemd-inhibit --what=shutdown --mode=delay` and waits on `gdbus monitor` for login1's `PrepareForShutdown (true,)`. logind sends that before anything is killed and waits for the lock (`InhibitDelayMaxSec`, 5 s by default), so every kitty still has all its windows. It then sends `kitten day_session.py flush` over remote control to each `@kitty-` socket in `/proc/net/unix` (3 s timeout each) and exits, which releases the lock. The kitty that owns today's session saves it and holds further saves for 60 s; other kitties ignore the flush. See [kitty daily sessions](../terminal/kitty.md#daily-sessions). + +**Needs:** `systemd-inhibit`, `gdbus`, `kitten`. Linux desktop/laptop roles only (`.chezmoiignore.tmpl`). + +## launch_omp_livediff_overlay + +```sh +launch_omp_livediff_overlay +``` + +Inside kitty with remote control enabled, runs `kitty @ launch --type=overlay-main --cwd=current omp`, then opens `livediff` in a `vsplit` next to that window with `--keep-focus`. It relies on `$KITTY_LISTEN_ON` rather than a hard-coded socket, because kitty appends `-PID` to `listen_on` socket names. It exits with an error if the variable is unset. + +**Needs:** kitty with `allow_remote_control`/`listen_on` ([kitty](../terminal/kitty.md)), `omp` ([AI agents](../ai/README.md)), `livediff`. + +## lc-elir + +```sh +lc-elir [root] +``` + +Finds numbered LeetCode solution files (`^\d+\..+\.(js|ts)$`, for example `1365.some-slug.js`) under `root` (default `.`). fzf multi-selects them, showing the last three path segments with a `bat` preview of the first 40 lines. Each pick runs `omp -p "/leetcode-eli5 "`. + +**Needs:** `fd`, `fzf`, `bat`, `omp`, and the `/leetcode-eli5` omp command. + +## mandible-pick + +```sh +mandible-pick +``` + +`mandible` (installed with cargo, `~/.cargo/bin`) needs a tool to open, so this asks for one first. fzf lists the executables installed in the `PATH` directories, without shell builtins, keywords, or aliases. enter opens the highlighted command. If the query contains a space (`git remote add`) or matches nothing, enter uses it exactly as typed, so mandible opens at that subcommand path. Then it `exec`s `mandible [subcommand…]`. esc exits quietly. The command list is built with a bash loop rather than GNU `find -printf`. + +**Used by:** the tmux-palette **mandible** item (alias `man`), which runs it in a popup. See [tmux](../terminal/tmux.md#command-palette). + +**Needs:** `mandible`, `fzf` 0.51+ (`--with-shell`, `transform`, `accept-or-print-query`). + +## mdcp + +```sh +mdcp +``` + +Fetches the URL as Markdown with `curl.md`, copies it with `wl-copy`, then pastes it back into `mdfried` for a rendered preview. + +**Needs:** `curl.md`, `mdfried`, and `wl-clipboard`. + +## mdp + +```sh +mdp +``` + +Lists `*.md` files up to 3 directories deep with `fd`. fzf shows an `mdfried` preview (right, 60%, wrapped), and the pick opens in `mdfried`. + +**Needs:** `fd`, `fzf`, `mdfried`. + +## projects-sync + +```sh +projects-sync +``` + +Mirrors every repo under the ghq root (`$GHQ_ROOT`, default `~/Code`, laid out `//`) as `~/Projects/` → the repo. Repos with the same name under different owners become `-`. Links pointing into `~/Code` whose repo is gone are removed; real files, real directories, and links pointing elsewhere in `~/Projects` are never touched. + +Run by `projects-sync.timer` (`dot_config/systemd/user/`, 30 s after login and every 5 minutes), which [`30-user-services`](../chezmoi/scripts.md#30-user-services) enables. ghq clones land two levels below `~/Code`, out of reach of a non-recursive `.path` unit, hence the poll. + +**Needs:** GNU `find`. Linux desktop/laptop roles only (`.chezmoiignore.tmpl`). + +## mtime-sort + +```sh +… | mtime-sort [--repo] +``` + +Reads lines on stdin and prints them newest-first by the mtime of each line's last tab-separated field (the whole line when it has no tab). With `--repo`, it stats `/.git/index` first, so a repo sorts by its last git activity. Lines whose path does not exist are dropped. Ties keep input order. + +**Used by:** every custom [television](../tools/television.md) cable except `agents` and `omp-sessions`, and `pj --list`. tv layers match quality and frecency on top of this order. + +**Needs:** `perl`. + +## omp-session + +```sh +omp-session +``` + +Starts or resumes omp for the current git repo by fixed rules, so ctrl-a never asks when the answer is obvious. + +| HEAD | Does | +| --- | --- | +| Default branch | Resumes the newest session on it when that session was written less than 3 hours ago. Otherwise opens the `omp-sessions` [television](../tools/television.md#omp-sessions) cable over all of the repo's sessions; enter resumes the pick, esc returns to the prompt. With no sessions at all it starts a new one | +| Any other branch | Resumes the newest session on that branch, or starts a new one | +| Detached | Opens the `omp-sessions` cable (a new session when there are none) | +| Outside a git repo | Plain `omp` | + +Resuming runs `omp --resume `; omp switches to the session's own cwd. `omp-session --new` runs plain `omp`; it is the cable's ctrl-n action and marks `OMP_SESSION_STATE` like a resume does, so the prompt is not moved after a new session. + +**Sessions.** Every `*/*.jsonl` under `$PI_CODING_AGENT_DIR/sessions` (default `~/.omp/agent/sessions`) whose `session` header `cwd` is the worktree root or below it, excluding worktrees nested inside it. Session age is the file's mtime (the last write). + +**Branches.** omp does not record the git branch. A session's branch is the one HEAD was on when the file was last written, replayed from the worktree's `git reflog` (`checkout: moving from A to B`, `Branch: renamed`, `rebase (finish): returning to`). Sessions older than the oldest reflog move belong to the branch that move left; with no moves they all belong to the current branch. The default branch is `origin/HEAD`, else `init.defaultBranch`, `main`, or `master`, whichever exists. + +**Entry points.** The cable calls back into the script: + +| Command | Does | +| --- | --- | +| `omp-session --list` | Prints ` [ · <subdir>]<TAB><session file>` per session, newest first. The title is omp's session title, else the first user message | +| `omp-session --preview FILE` | Title, last-write time, cwd, then the text of every user and assistant message (thinking, tool calls, and tool results skipped) | +| `omp-session --resume FILE` | Writes `ran` to `$OMP_SESSION_STATE` when set, then `exec omp --resume FILE` (enter) | + +**Prompt redraw.** The launcher runs `tv omp-sessions --inline` with `OMP_SESSION_STATE` set to a temp file. When the picker is cancelled (no `ran`), it prints `\033[A` to `/dev/tty` so the shell redraws the prompt in place; the key bindings just repaint. + +**Launched by:** <kbd>ctrl-a</kbd> in fish and zsh. <kbd>ctrl-n</kbd> at the prompt runs `omp` directly, not this script. + +**Needs:** `python3`, `git`, `omp`, `tv`. + +## pj + +```sh +pj [extra args…] +``` + +A task runner that searches every task source in the project and lets you pick one in the `pj` [television](../tools/television.md#pj) cable. + +**Sources.** Each is listed only when its runner is installed: + +| Source | Found in | Runner | +| --- | --- | --- | +| npm scripts | `package.json` | package manager from `packageManager`, else from the lockfile (`bun.lock[b]`, `pnpm-lock.yaml`, `yarn.lock`, `package-lock.json`, searched upward), else `npm`, then `<pm> run` | +| Make | `GNUmakefile`, `makefile`, `Makefile` | `make`. Targets come from a text parse of rules and `.PHONY`; `make -p` is avoided because it would run `$(shell …)` | +| just | `justfile`, `.justfile`, `Justfile`, `JUSTFILE` | `just` | +| mise | `mise.toml`, `.mise.toml`, `mise/config.toml`, `.mise/config.toml`, `.config/mise/config.toml`, or a `mise-tasks`/`.mise/tasks`/`mise/tasks` dir | `mise run`. Hidden tasks are skipped, and tasks inherited from parent directories are filtered out | +| devbox | `devbox.json` `shell.scripts` | `devbox run` | +| poe | `pyproject.toml` `[tool.poe.tasks]` | `poe`, else `uv run poe` | +| pdm | `[tool.pdm.scripts]` (skips `_*` and `post_*`) | `pdm run` | +| rye | `[tool.rye.scripts]` | `rye run` | +| taskipy | `[tool.taskipy.tasks]` | `task`, else `uv run task` | +| hatch | `[tool.hatch.envs.<env>.scripts]` as `env:name` | `hatch run` | +| console scripts | `[tool.poetry.scripts]`, `[project.scripts]` | `poetry run` for Poetry projects, else `uv run` | + +**Scanning.** Walks from `$PWD` up to the git toplevel, inclusive. Outside a repo it stops at the first directory that produced tasks. + +**Picker.** `pj` writes the records to a temp file and runs `tv pj --inline --source-command "cat <tmp>" --input-header <project root>`. Rows are tagged with the tool (`npm`, `pnpm`, `bun`, `make`, `just`, `mise`, `poe`, `py`, …), so typing a tool name filters to it. A directory column appears when more than one project contributed tasks. Tasks are sorted by their manifest's mtime, newest first, through `mtime-sort`. The preview shows the task body: the npm script string, the Make recipe, `just --show`, `mise tasks info`, the devbox script, or the pyproject entry. + +**Entry points.** The cable calls back into the script: + +| Command | Does | +| --- | --- | +| `pj --list` | Prints tab-separated records: display, kind, target, root, runner, manifest | +| `pj --preview KIND TARGET ROOT FILE` | Prints the task body for the preview pane | +| `pj --run KIND TARGET ROOT RUNNER` | Runs the task (enter) | + +**Run.** cds into the task's directory and `exec`s the runner. Extra arguments given to `pj` travel to the task through `$PJ_EXTRA` (shell-quoted), with `--` inserted for `npm run`, `mise`, and `devbox`. Tasks named `dev`, `start`, `serve`, `watch`, or namespaced variants like `dev:web` are wrapped in `openlogs` (found on `PATH`, via `mise which`, or in mise's node installs) for a live log tail. Without openlogs they run unwrapped, with a note. + +**Env.** `PJ_QUIET=1` suppresses the "no task sources found" error (exit status stays 1). The <kbd>down</kbd> bindings use it. `PJ_STATE=FILE` makes `pj` write `open` to `FILE` before launching the picker, and `pj --run` writes `ran`; the file stays empty when there are no task sources. The key bindings read it to tell no tasks, a cancelled picker, and a task that printed output apart and redraw the prompt to match. `pj` itself does no cursor handling, so typing `pj` behaves like any command. + +**Launched by:** <kbd>ctrl-p</kbd>, and <kbd>down</kbd> on an empty prompt, in fish, zsh, and bash. + +**Needs:** `bash`, `tv`, `mtime-sort`, `jq`, `python3` 3.11+ (for `tomllib`), plus whichever runners the project uses. + +## pj-palette + +```sh +pj-palette +pj-palette --run KIND TARGET ROOT RUNNER +pj-palette --cmd ROOT CMD… +pj-palette --bg NAME [ROOT CMD…] +pj-palette --omp +``` + +The source of the **Project Tasks** [tmux command palette](../terminal/tmux.md#command-palette) (`palettes/tasks.json`). Open it with tmux `prefix t`, Ghostty <kbd>ctrl+shift+p</kbd> or <kbd>ctrl+shift+space</kbd>, or the "Project Tasks" item in the main palette. + +With no arguments it reads the active pane's directory (`tmux display -p '#{pane_current_path}'`) and prints palette items as JSON, grouped by category: + +| Group | Items | Shown when | +| --- | --- | --- | +| Running | Every background task session still alive (any project), by session name | A long-running item was started and not stopped | +| Quick | `<pm> install` (alias `install`, `i`), `<pm> run dev` (`dev`) | `package.json` at the project root. The package manager comes from `packageManager`, then the lockfile, as in `pj` | +| Quick | `uv sync` (`sync`), `uv run python` (`py`, `repl`) | `pyproject.toml` and `uv` installed | +| Quick | `make` (default target; `m`, `build`) | A Makefile and `make` | +| Quick | `go run .`, `cargo run` | `go.mod` / `Cargo.toml` and the toolchain | +| Quick | `docker compose up` (`up`, `compose`) | `compose.y(a)ml` or `docker-compose.y(a)ml` at the project root and `docker` | +| Tasks: `<tool>` | Every record from `pj --list`: npm/bun/pnpm/yarn scripts, Make, just, mise, devbox, pyproject task tables and console scripts | Whatever `pj` finds walking up to the git root | + +The project root is the git toplevel, else the pane's directory. + +**Run.** One-off items open a full-width split along the bottom of the window (`split-window -v -f -l 25%`), 25% of its height, in the task's directory. The command is passed to `split-window` as separate arguments, so no shell reparses it. `--run` calls `pj --run`, which keeps pj's `openlogs` wrapping of `dev`/`start`/`serve`/`watch` tasks, and `--cmd` runs a quick action. While the command runs, <kbd>ctrl-c</kbd> stops only the command (the script traps `SIGINT`), so the output stays. Once the command exits, the script prints `[exit N] enter or ctrl-c to close`, and <kbd>enter</kbd> or <kbd>ctrl-c</kbd> closes the pane; other keys are ignored. + +**Background.** Long-running items, marked `· background`, are `<pm> run dev`, `docker compose up`, and pj tasks named `dev`/`start`/`serve`/`watch`/`preview` or with one of those as a `:` segment (`dev:web`, `api:dev`). They run through `--bg` in a detached session named `<session>:<tool-and-command>` (`leetcode:bun-run-dev`, `leetcode:docker-compose-up`), shown in a rounded 90%×80% popup attached to it. <kbd>q</kbd> detaches the popup and leaves the task running: the session's `key-table` is `pj-task`, which binds only `q` and <kbd>ctrl-c</kbd>, so other keys reach the task instead of root-table bindings (prefix bindings still work). <kbd>ctrl-c</kbd> runs `confirm-before` (`Stop <session>? (y/n)`); <kbd>y</kbd> sends ctrl-c to the task, which stops it and ends the session, closing the popup, and any other key cancels. If the task exits on its own, the `[exit N]` prompt keeps its output until <kbd>enter</kbd>. Picking the item again, or its **Running** entry, reopens the popup instead of starting a second copy. The session has `status off`, `detach-on-destroy on`, and `@pj_task` set to the task's root, which is how the Running group finds it. Session names contain `:`, so the script targets them by id (`$N`). + +**omp.** tmux `prefix a` (Ghostty <kbd>ctrl+shift+a</kbd>) runs `pj-palette --bg <session>:omp <pane cwd> omp`, so omp gets the same kind of background session and Running entry. Its popup docks in the bottom-right corner of the client, 35% wide and 60% tall. omp runs directly (no `[exit N]` prompt) and needs <kbd>q</kbd>, so its session uses the `pj-app` key table instead: <kbd>ctrl-c</kbd> hides the popup, <kbd>ctrl-q</kbd> kills the session (quits omp). `prefix a` inside any session with `@pj_task` also hides, which makes <kbd>ctrl+shift+a</kbd> a toggle. The popup border shows only the session name. + +**omp palette.** `--omp` feeds `palettes/omp.json`, opened by the main palette's **omp** item. It lists every running `<session>:omp` across tmux sessions, with a green icon and `open`/`hidden` state: **This session** first (or a grey `not running · start in <cwd>` item that starts it), then **Running** for the other tmux sessions' agents, then a **Quit** item per session (`kill-session`). + +**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.md#command-palette) (`palettes/sessions.json`), which replaced tmux-sessionx. Open it with tmux `prefix o`, Ghostty <kbd>ctrl+shift+o</kbd> or <kbd>super+enter</kbd>, 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 `<session>:<index> · <cwd>` | `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 +yazi-nvim-open [vsplit|split|tabedit] <file>… +``` + +yazi's `edit` opener. When run inside a Neovim terminal (`$NVIM` set), each file's absolute path goes to the **host** Neovim through `nvim --server "$NVIM" --remote-expr 'v:lua.EditFromYazi(mode, path)'` (defined in the nvim config's `yazi_session.lua`). Outside Neovim it `exec`s a normal `nvim`, and the split modes do nothing. Set `YAZI_OPEN_TRACE=<file>` to log each call. + +**Used by:** `yazi.toml` (the `edit` opener) and `keymap.toml` (<kbd>ctrl-v</kbd> vsplit, <kbd>ctrl-x</kbd> split). See [yazi](../tools/yazi.md). + +**Needs:** `nvim`, `realpath`. diff --git a/docs/shell/starship.md b/docs/shell/starship.md new file mode 100644 index 0000000..d73ce84 --- /dev/null +++ b/docs/shell/starship.md @@ -0,0 +1,91 @@ +# Starship + +The cross-shell prompt — a minimal left prompt, a clock on the right, and a cyberdream palette. + +[Starship](https://starship.rs) renders the prompt in fish, bash, and zsh from one config file. + +| Source (repo) | Target | +| --- | --- | +| `dot_config/starship.toml` | `~/.config/starship.toml` | + +The file is not a template and applies on every role. `starship` is in `.chezmoidata/packages.yaml` for pacman and is installed by `.chezmoiscripts/run_onchange_before_10-packages.sh.tmpl`. + +## Shell integration + +| Shell | Init | +| --- | --- | +| fish | `conf.d/40-tools.fish` runs `starship init fish`, then `config.fish` runs it again and calls `enable_transience` | +| bash | `eval "$(starship init bash)"` in `~/.bashrc` | +| zsh | `eval "$(starship init zsh)"` in `~/.zshrc`, plus a transient-prompt hook | + +With transience in fish, past prompts in the scrollback collapse to the output of `starship_transient_prompt_func` (`starship module character`, the `❯` alone) and `starship_transient_rprompt_func` (`starship module time`). See [fish](fish.md#configfish). + +zsh has no built-in transience, so `~/.zshrc` collapses past prompts itself, rendering the `transient` (`$character`) and `transient_right` (`$time`) entries under `[profiles]` with `starship prompt --profile`. It uses profiles rather than `starship module` because only `starship prompt` wraps color escapes in zsh's `%{…%}`; without them zsh miscounts the right prompt's width. zsh also gets starship's default `∙` continuation prompt (`PROMPT2`). See [bash and zsh](bash-zsh.md#zshrc). + +## Layout + +**~/.config/starship.toml** + +```toml +"$schema" = 'https://starship.rs/config-schema.json' +palette = "cyberdream" + +format = """ +$username\ +$hostname\ +$directory\ +$git_branch\ +$git_state\ +$git_status\ +$cmd_duration\ +$python\ +$character""" + +right_format = """$time""" +``` + +The left prompt is a single line with no line break before `$character`. Only the nine listed modules can appear; every other starship module is left out of `format`. `$username` and `$hostname` keep their defaults, so they appear only over SSH or as root. + +## Modules + +| Module | Format | Style | Notes | +| --- | --- | --- | --- | +| `directory` | default | `blue` | | +| `git_branch` | `[$branch]($style)` | `bright-black` | Branch name only, no symbol or "on" | +| `git_state` | `\([$state( $progress_current/$progress_total)]($style)\) ` | `bright-black` | For example `(REBASING 2/5)` | +| `git_status` | `[[(*$conflicted$untracked$modified$staged$renamed$deleted)](218) ($ahead_behind$stashed)]($style)` | `cyan` | See below | +| `cmd_duration` | `[$duration]($style) ` | `yellow` | Default threshold | +| `python` | `[$virtualenv]($style) ` | `bright-black` | `detect_extensions = []`, `detect_files = []` | +| `time` | `[$time]($style)` | `bright-black` | `disabled = false`, `time_format = '%-I:%M %p'` (for example `3:07 PM`) | +| `character` | default | | Symbols below | + +**git_status.** The `conflicted`, `untracked`, `modified`, `staged`, `renamed`, and `deleted` symbols are all set to a zero-width space. Any dirty state therefore shows a single `*` in 256-color `218` (pink) instead of per-state counts. `stashed` is `≡`. `ahead_behind` keeps starship's default arrows and is drawn in `cyan`. + +**python.** With both detect lists empty, the module does not trigger on `.py` files or `pyproject.toml`. It shows only the name of an active virtualenv. + +### Prompt character + +| State | Symbol | +| --- | --- | +| Last command succeeded | `❯` in `purple` | +| Last command failed | `❯` in `red` | +| Vi normal mode (fish) | `❮` in `green` | + +fish runs in vi mode ([key bindings](fish.md#key-bindings)), so `vimcmd_symbol` appears there. zsh uses the emacs keymap and never shows it. + +## Palette + +`palette = "cyberdream"` selects the `[palettes.cyberdream]` table, colors from [cyberdream.nvim](https://github.com/scottmckendry/cyberdream.nvim). Every named color in the module styles resolves through this table. + +| Name | Normal | `bright-*` | `dim-*` | +| --- | --- | --- | --- | +| black | `#1e2124` | `#4a4d4f` | `#1c1f22` | +| red | `#ff6e5e` | `#ff8b7e` | `#d05c50` | +| green | `#5eff6c` | `#7eff89` | `#4fd05b` | +| yellow | `#f1ff5e` | `#f3ff7e` | `#c5d050` | +| blue | `#5ea1ff` | `#7eb3ff` | `#4f85d1` | +| purple | `#bd5eff` | `#ff7ef3` | `#d050c6` | +| cyan | `#5ef1ff` | `#7ef3ff` | `#4fc5d1` | +| white | `#ffffff` | `#ffffff` | `#d0d0d1` | + +`bright-black` (`#4a4d4f`) is the muted gray used for the branch, git state, virtualenv, and clock. The `dim-*` entries are defined but no module uses them. diff --git a/docs/terminal/README.md b/docs/terminal/README.md new file mode 100644 index 0000000..9ee682f --- /dev/null +++ b/docs/terminal/README.md @@ -0,0 +1,19 @@ +# Terminal + +Terminal emulators and multiplexers configured by the dotfiles. + +kitty is the primary terminal. It runs in three modes: plain kitty (kitty owns splits and tabs), a tmux host, and a herdr host. Ghostty is a tmux-only terminal: every window attaches to tmux, and its `ctrl+shift` chords drive tmux. + +| Page | Source | What it covers | +| --- | --- | --- | +| [kitty](kitty.md) | external repo via `.chezmoiexternals/kitty.toml` | Main config, host configs (tmux, herdr, goliath), kittens, custom tab bar | +| [Ghostty](ghostty.md) | external repo via `.chezmoiexternals/ghostty.toml` | tmux-only terminal: ctrl+shift chords → tmux, themes | +| [tmux](tmux.md) | external repo via `.chezmoiexternals/tmux.toml` | Prefix, bindings, kitty-style tabs with Nerd Font icons, resurrect/continuum persistence | +| [herdr](herdr.md) | external repo via `.chezmoiexternals/herdr.toml`, plus `dot_config/herdr-nvim/` | Agent-aware multiplexer: keys, theme, plugins, Claude hook | + +## Shared conventions + +- Font: VictorMono Nerd Font everywhere. +- Background opacity `0.9`, no window decorations; the compositor provides blur. +- Prefix `ctrl+b` in tmux and herdr. kitty and Ghostty translate chords into the prefix byte `\x02` plus a key, so the same physical shortcut works across hosts. +- `ctrl+h/j/k/l` moves between panes across nvim, kitty, tmux, and herdr (vim-aware handoff at every layer). diff --git a/docs/terminal/ghostty.md b/docs/terminal/ghostty.md new file mode 100644 index 0000000..e97dc02 --- /dev/null +++ b/docs/terminal/ghostty.md @@ -0,0 +1,97 @@ +# Ghostty + +Ghostty as a tmux-only terminal — every window attaches to tmux, and ctrl+shift chords drive tmux. + +Ghostty is the default terminal and only a [tmux](tmux.md) client. tmux owns tabs (windows), splits (panes), sessions, and persistence. Ghostty draws the text and handles the clipboard and font size. + +It is the default everywhere a desktop picks a terminal: the first entry of `~/.config/xdg-terminals.list` (`dot_config/xdg-terminals.list`, desktop roles only) is what `xdg-terminal-exec` and `omarchy-launch-terminal` launch. + +| | | +| --- | --- | +| Source | [prdlk/ghostty](https://github.com/prdlk/ghostty) via `.chezmoiexternals/ghostty.toml`: `config`, `themes/` | +| Target | `~/.config/ghostty/` | +| Install | `ghostty` in `packages.arch.pacman` | + +`~/.config/ghostty` is a `git-repo` external checkout, not chezmoi-managed contents; edit it in place and commit and push from there. + +`config` holds every setting, ending in `theme = noctalia`. That theme file is generated, not shipped (the ghostty repo's `.gitignore` excludes it), so without its generator ghostty finds no such theme; select `theme = cherry-blossom` instead on this setup. + +## Options + +| Option | Value | +| --- | --- | +| `font-family` / `font-size` | `IoskeleyMonoTerm Nerd Font Mono` / `11` | +| `adjust-cell-height` | `20%` (line height) | +| `background-opacity` / `background-blur` | `0.9` / `true` | +| `window-decoration` | `false`; `gtk-titlebar = false` | +| `window-padding-x/y` | `0` | +| `cursor-style` | `underline`, blinking | +| `scrollback-limit` | `3023` (tmux keeps the real scrollback: `history-limit 50000`) | +| `mouse-hide-while-typing` | `true` | +| `copy-on-select` | `false` | +| `confirm-close-surface` | `false` | +| `link-url` / `link-previews` | `true` / `true`. Under tmux (`mouse on`) tmux receives the click, so open links with `ctrl+shift+click`; tmux opens OSC 8 links on a plain `ctrl+click` | +| `app-notifications` | `no-clipboard-copy,no-config-reload` | +| `quit-after-last-window-closed` | `false`, delay `5m` | +| `command` | `shell:$HOME/.local/bin/ghostty-tmux` (see [Sessions](#sessions)) | +| `shell-integration` | `detect`, features `cursor,sudo,title,no-cursor` | +| `gtk-single-instance` | `true` | + +## Sessions + +Every Ghostty window gets its own tmux session; no two windows mirror the same one. `~/.local/bin/ghostty-tmux` (source `dot_local/bin/executable_ghostty-tmux`) runs for each new window: + +1. If a detached session exists (left by a closed window, or restored by continuum after a reboot), it attaches to the oldest one, by session id. Background task sessions from `pj-palette` (`@pj_task` set, named `<session>:<task>`) are never reclaimed. +2. Otherwise it starts a new session. + +Before starting tmux, the script puts mise's shims on `PATH`. A server started from a desktop-launched Ghostty therefore finds the tools tmux plugins shell out to: bun for the palette, fzf, and zoxide. + +The window title is the tmux session name (`set-titles-string '#S'`), so the compositor's window groups list one entry per session. tmux's tab bar keeps its own fixed cyberdream colors, so it does not match Ghostty's background exactly. + +Closing a window only detaches its session; the shells keep running in the tmux server. In tmux, `detach-on-destroy no-detached` means killing a session moves the window to a *detached* session, or closes the window if there is none, so it never lands on another window's session. Across reboots, tmux-continuum saves every 10 minutes. The first Ghostty window starts the server, and that triggers continuum's restore. See [tmux](tmux.md#persistence). + +## Keybindings + +`keybind = clear` comes first and drops every Ghostty default: tabs, splits, `alt+N` goto_tab, and `ctrl+alt+arrow` goto_split. Those chords then reach tmux, which binds `alt+1…9` and `ctrl+alt+arrows` itself. `ctrl+h/j/k/l` also pass straight through to tmux's vim-aware pane navigation, which hands off to and from nvim's splits (see [tmux](tmux.md#keybindings)). Each `ctrl+shift` chord sends tmux's prefix, `ctrl+b` (`\x02`), followed by a key. + +| Key | Ghostty action | +| --- | --- | +| `ctrl+shift+c` / `ctrl+shift+v` | Copy / paste | +| `ctrl+plus` / `ctrl+minus` / `ctrl+zero` | Font size +1 / -1 / reset | +| `ctrl+shift+.` | Reload Ghostty config | +| `shift+enter` | Sends `ESC[13;2u` (CSI-u Shift+Enter), which tmux passes through to the pane, so coding agents such as omp and Claude Code insert a newline instead of submitting. Not `\n`: that is `ctrl+j`, tmux's pane-down key | +| `ctrl+space`, `ctrl+backspace` | Sends NUL (tmux `C-Space`): opens the [tmux command palette](tmux.md#command-palette) | + +| Key | Sends | tmux action | +| --- | --- | --- | +| `ctrl+shift+t` | `prefix c` | New window (tab) in pane cwd | +| `ctrl+shift+p` / `ctrl+shift+space` | `prefix t` | Project Tasks palette (pj: install, dev, sync, make, every project task) | +| `ctrl+shift+f` | `prefix y` | Yazi in a new window, pane cwd | +| `ctrl+shift+e` | `prefix e` | Neovim in a new window, pane cwd | +| `ctrl+shift+g` | `prefix g` | Lazygit in a 90% popup, pane cwd | +| `ctrl+shift+a` | `prefix a` | Toggle omp in a background-session popup (`<session>:omp`), pane cwd | +| `ctrl+shift+w` | `prefix k` | Kill window (close tab) | +| `ctrl+shift+r` | `prefix r` | Rename window | +| `ctrl+tab` / `ctrl+page_down` / `ctrl+shift+right` / `ctrl+shift+k` | `prefix n` | Next window | +| `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` / `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 | +| `ctrl+shift+/` | `prefix ?` | Keybinding help popup | +| `ctrl+shift+alt+,` | `prefix q` | Reload tmux config | +| `ctrl+shift+n` | `prefix C` | New session | +| `ctrl+shift+s` | `prefix s` | Session/window tree | +| `ctrl+shift+q` | `prefix d` | Detach (closes the Ghostty window; the session lives on) | + +## Themes + +| Theme | Notes | +| --- | --- | +| `noctalia` | Generated, not shipped: the file is written from the active palette (currently the custom `CherryBlossom` palette: background `#222120`, foreground `#dcc1b7`, salmon cursor `#cf716f`) and excluded by the ghostty repo's `.gitignore`. It exists only on machines that generate it. | +| `cherry-blossom` | Static copy of the `CherryBlossom` palette (same colors as the generated `noctalia` theme). Always present; set `theme = cherry-blossom` to use it. | +| `cyberdream` | Upstream `extras/ghostty/cyberdream` from [cyberdream.nvim](https://github.com/scottmckendry/cyberdream.nvim), the palette shared with tmux, nvim, yazi, and television. | +| `ii-auto` | Auto-generated by the ii wallpaper theming system; not meant to be edited. | +| `koda-dark` / `koda-light` | Koda palettes with `bold-is-bright = true`. | diff --git a/docs/terminal/herdr.md b/docs/terminal/herdr.md new file mode 100644 index 0000000..df263fa --- /dev/null +++ b/docs/terminal/herdr.md @@ -0,0 +1,91 @@ +# herdr + +herdr, an agent-aware terminal multiplexer, with its keys, theme, plugins and Claude Code hook. + +herdr is a terminal multiplexer with workspaces, tabs and panes, a sidebar, a prefix key (`ctrl+b`), and a plugin system. It tracks coding agents running in its panes: agent-state colors, next/previous agent keys, and an integration that reports Claude Code sessions to it. + +| | | +| --- | --- | +| Source | [prdlk/herdr](https://github.com/prdlk/herdr) via `.chezmoiexternals/herdr.toml` (`~/.config/herdr/`); `dot_config/herdr-nvim/config.toml` | +| Target | `~/.config/herdr/`, `~/.config/herdr-nvim/config.toml` | +| Install | Not in `packages.yaml`; updated by topgrade (`herdr update`) | +| Launch | kitty `super+a` (see [kitty](kitty.md)) | + +## config.toml + +`onboarding = false`. + +### UI and theme + +| Setting | Value | +| --- | --- | +| `ui.pane_borders`, `ui.pane_outer_borders` | `false` (panes separated by gaps only) | +| `ui.prompt_new_tab_name` | `false` | +| `ui.accent` | `#5ea1ff` | +| `ui.status_indicators` | `symbols` | +| `ui.toast.delivery` | `system` | +| `theme.name` | `terminal`, `auto_switch = false` | +| `theme.custom.panel_bg` | `reset` (keeps kitty's translucency and compositor blur) | +| `sidebar_bg` / `active_row_bg` / `selection_bg` | `#16181a` / `#1e2124` / `#3c4048` | +| `accent` / `surface_dim` | `#243348` / `#5ea1ff` (active tab plate matches kitty's tab bar) | +| Agent-state colors | green `#5eff6c`, yellow `#f1ff5e`, red `#ff6e5e`, peach `#ffbd5e`, mauve `#bd5eff` | +| `experimental.kitty_graphics` | `true`; `pane_history = false` | +| `switch_ascii_input_source_in_prefix` | `true` | + +These are cyberdream colors. + +### Keys + +| Key | Action | +| --- | --- | +| `prefix %` | Split vertical | +| `prefix "` | Split horizontal | +| `prefix d` | Detach | +| `prefix s` | Workspace picker | +| `prefix shift+s` | Settings | +| `k` / `j` | Move up / down in the workspace picker (pane up/down in navigate mode unbound) | +| `prefix .` / `prefix ,` | Next / previous agent | +| `prefix j` / `prefix k` | Next / previous workspace | +| `prefix up/down/left/right` | Focus pane | +| `ctrl+h/j/k/l` | `vim-herdr-navigation` left/down/up/right | +| `prefix e` | `chmarax.herdr-nvim.toggle` (nvim sidebar) | +| `prefix o` | `chmarax.herdr-nvim.pick-file` (open file from agent output) | +| `prefix t` | `switchboard.menu` | +| `prefix shift+p` | `switchboard.commands` | +| `prefix shift+l` | `switchboard.git` | +| `prefix shift+k` | `switchboard.projects` | +| `prefix y` | Open `official.browser` plugin in a right split | +| `prefix shift+o` | Open `official.browser` as an overlay | + +## Plugins + +`plugins.json` is herdr's plugin registry. `.plugins.lock` is committed empty. `plugins/config/official.browser/` and `plugins/config/vim-herdr-navigation/` hold placeholder `.keep` files for per-plugin config. `plugins/github/`, where herdr installs plugin checkouts, is gitignored in the repo. + +| Plugin | Description (from its manifest) | +| --- | --- | +| `chmarax.herdr-nvim` | Full-height nvim sidebar with agent annotations | +| `herdr-automatic-rename` | Names tabs after the foreground program, adds 1–9 jump numbers | +| `io.github.salemsayed.omaherd` | Tells the Omarchy bar when an agent changes state | +| `official.browser` | Open and inspect real browser pages from herdr | +| `oh-my-opencode-slim` | OpenCode agent orchestration with a herdr adapter | +| `persiyanov.reviewr` | Review agent-written diffs beside the chat | +| `rjyo.window-title-sync` | Syncs the outer terminal title to the focused workspace, tab and agent | +| `switchboard` | Command palette: projects, commands, ports, git, clone, settings | +| `vim-herdr-navigation` | Vim-aware `ctrl+h/j/k/l` pane movement | + +[fish](../shell/fish.md) sources `herdr-automatic-rename`'s `shell/hook.fish` if present. + +## herdr-nvim + +**~/.config/herdr-nvim/config.toml** + +```toml +[sidebar] +position = "left" +``` + +The nvim sidebar opens to the left of existing panes (default is right). + +## herdr/kitty.conf + +A legacy kitty config kept in the herdr folder. It runs `tmux new-session -A -s main`, listens on `unix:@mykitty`, includes `current-theme.conf`, maps `super`/`alt` keys to tmux prefix bytes, and has a copy of an older `tmux.conf` appended. The active herdr host is `~/.config/kitty/herdr.conf`. diff --git a/docs/terminal/kitty.md b/docs/terminal/kitty.md new file mode 100644 index 0000000..3f04818 --- /dev/null +++ b/docs/terminal/kitty.md @@ -0,0 +1,221 @@ +# kitty + +kitty configuration, host variants, custom kittens and the Python tab bar. + +GPU terminal emulator and the primary terminal on every role. + +| | | +| --- | --- | +| Source | [prdlk/kitty](https://github.com/prdlk/kitty) via `.chezmoiexternals/kitty.toml` | +| Target | `~/.config/kitty/` | +| Install | `kitty` in `.chezmoidata/packages.yaml` (pacman), plus `ttf-victor-mono-nerd` for the font | + +```text +~/.config/kitty/ + kitty.conf + tmux.conf + herdr.conf + goliath.conf + ssh.conf + current-theme.conf + tab_bar.py + pass_keys.py + day_session.py + navigate_kitty.py + select_tab.py + switchtab.py + window_titler.py + themes/ + cyberdream.conf + koda-dark.conf + koda-light.conf +``` + +`~/.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 + +Every config ends with: + +**~/.config/kitty/kitty.conf** + +```conf +include ~/.local/state/omarchy/current/theme/kitty.conf +``` + +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 `~/.config/herdr/kitty.conf` ([prdlk/herdr](https://github.com/prdlk/herdr)) includes `current-theme.conf`; the main config does not. `themes/` holds `cyberdream`, `koda-dark`, and `koda-light` color files. + +## kitty.conf + +| Option | Value | +| --- | --- | +| `font_family` | `VictorMono Nerd Font`, then overridden in the `BEGIN_KITTY_FONTS` block to `family="VictorMono Nerd Font Mono"`; bold/italic `auto` | +| `window_padding_width` | `8` | +| `hide_window_decorations` | `yes` | +| `background_opacity` | `0.9` | +| `cursor_trail` | `10`, `cursor_trail_start_threshold 0`, `cursor_trail_decay 0.01 0.05` | +| `cursor_blink_interval` | `0` (set to 1, then overridden) | +| `copy_on_select` | `auto` | +| `strip_trailing_spaces` | `smart` | +| `confirm_os_window_close` | `0` | +| `allow_remote_control` | `socket-only` | +| `listen_on` | `unix:@kitty-{kitty_pid}` | +| `enabled_layouts` | `splits:split_axis=vertical,stack` | +| Tab bar | `powerline`, `slanted`, centered, top edge, always shown (`tab_bar_min_tabs 1`, so the stack-layout indicator is visible with one tab), `tab_title_template "{custom}"` | + +> [!NOTE] +> Transparency uses kitty's own alpha, so text stays opaque. This alpha is also what lets the compositor blur the window: Hyprland enables blur globally and opts out every window except terminal classes. + +The socket also exports `KITTY_LISTEN_ON` into each pane. nvim reads it to know kitty owns the panes and hands `ctrl+h/j/k/l` back to kitty at an edge. + +### Launch aliases + +| Alias | Expands to | +| --- | --- | +| `launch_mn` | `launch --cwd=current --type=overlay-main` | +| `launch_os` | `launch --cwd=current --type=os-window` | +| `launch_ov` | `launch --cwd=current --type=overlay` | +| `launch_tb` | `launch --cwd=current --type=tab` | +| `launch_hs` | `launch --cwd=current --location=hsplit --bias=30` | +| `launch_vs` | `launch --cwd=current --location=vsplit --bias=40` | +| `launch_vs50` | `launch --cwd=current --location=vsplit --bias=50` | + +### Keybindings + +| Key | Action | +| --- | --- | +| `super+n` | Vertical split 50/50 (`launch_vs50`) | +| `super+z` | Toggle `stack` layout (zoom); the tab title gains a layers icon and pane count (`nf-md-layers 3`) while other panes are hidden | +| `ctrl+shift+t`, `super+enter` | New tab in current cwd | +| `ctrl+space`, `ctrl+shift+j` | Horizontal split, 30% (`launch_hs`) | +| `ctrl+enter`, `ctrl+shift+l` | Vertical split, 40% (`launch_vs`) | +| `ctrl+shift+space` | New OS window | +| `ctrl+shift+h` / `ctrl+shift+k` | Previous / next tab | +| `ctrl+shift+g` | `lazygit` in an overlay | +| `ctrl+shift+f` | `yazi` in a new tab | +| `ctrl+shift+e` | `nvim` in a 50/50 vertical split | +| `ctrl+shift+p` | `atuin-pick` in a horizontal split | +| `super+t` | Spawn a separate kitty (`--class=kitty-tmux`, `--config ~/.config/kitty/tmux.conf`) | +| `super+a` | Spawn a separate kitty (`--class=kitty-herdr`, `--config ~/.config/kitty/herdr.conf`) | +| `ctrl+shift+c` / `ctrl+shift+v` | Copy / paste clipboard | +| `alt+q w e r t y u i o` | Go to tab 1–9 | +| `ctrl+h/j/k/l` | `pass_keys.py`: move to neighbor window left/bottom/top/right, or pass the key through | +| `super+left` / `super+right` | Resize window narrower / wider | +| `super+up` / `super+down` | Resize window taller / shorter (by 3) | + +The tmux and herdr hosts are separate kitty processes because `launch` cannot take `--config`. + +### Daily sessions + +`day_session.py` keeps one kitty session file per day, grouped by week: + +```text +~/.local/share/kitty-sessions/<monday YYYY-MM-DD>/<day YYYY-MM-DD>.kitty-session +~/.local/share/kitty-sessions/<monday YYYY-MM-DD>/<day YYYY-MM-DD>.scrollback/<window key>.ansi +``` + +| Directive | Role | +| --- | --- | +| `geninclude day_session.py` | Creates today's (empty) session file and emits `startup_session <path>` whenever no running kitty owns today's session. Ownership is an `flock` on `$XDG_RUNTIME_DIR/kitty-day-<day>.kitty-session.lock`, held until that kitty exits, so closing kitty and launching it again always reopens the day, even if other kitties (or yesterday's) are still running. A second concurrent instance starts plain instead of duplicating today's tabs. A kitty started with `--session` for another day never takes the lock. | +| `watcher day_session.py` | About 1 s after a window opens, closes, resizes or splits, changes focus or finishes a command (catches `cd`), and every 30 s for output from long-running programs, rewrites the session this instance started with. Title changes are ignored so spinners don't trigger saves. Skips the save once the session has no windows, so closing kitty keeps the last good state. | + +Earlier days open with the [`kitty-days`](../tools/television.md#kitty-days) tv cable (`tv kitty-days`), each in its own kitty (`kitty --session <file>`). A past day is a read-only snapshot: nothing in that kitty saves it back. Today's file opened that way, while no kitty owns it, becomes the live day again. + +Before shutdown or reboot, the `kitty-day-save.service` user unit runs [`kitty-day-save`](../shell/scripts.md#kitty-day-save) under a logind delay inhibitor. On `PrepareForShutdown(true)` it sends `kitten day_session.py flush` to every `@kitty-<pid>` socket: the owning kitty saves at once (all windows are still alive), then skips saves for 60 s so windows dying during the shutdown can't shrink the file. [`30-user-services`](../chezmoi/scripts.md#30-user-services) enables the unit. + +What a restored window gets back: + +- **Scrollback**: each window carries a `day_scrollback=<key>` user var (kept by kitty's `launch --var`); its history is dumped as ANSI to `<key>.ansi`, minus the idle prompt, and dumps of closed windows are pruned. On restore, the shell runs `cat <key>.ansi` through kitty's shell-integration startup command, so it needs shell integration (fish here). A dump is only written after the shell has drawn a prompt, so a restored window can't overwrite its history before replaying it. +- **Running program**: saved with `--use-foreground-process` and re-run after the `cat`, so the shell is still there when it exits (`nvim`, `sleep 700`, dev servers). Commands still at shell init when saved (mise/direnv hooks) are ignored. A command is never replayed if any of its words is `rm`, `rmdir`, `mv`, `dd`, `shred`, `truncate`, `mkfs*`, `wipefs`, `fdisk`, `parted`, `sudo`, `doas`, `su`, `run0`, `pkexec`, `kill`, `pkill`, `killall`, `reboot`, `shutdown` or `poweroff` (`NO_REPLAY`). +- Programs launched as the window's own command (`ctrl+shift+e` nvim, `ctrl+shift+g` lazygit) were already restored by kitty; they have no shell, so no scrollback. + +Only windows that belong to the session are saved: `new_tab_with_cwd` and the `--cwd=current` launch aliases join it; `new_os_window` (`ctrl+shift+space`) does not. + +## Host configs + +### tmux.conf — kitty as a tmux host + +Launched by `super+t`. kitty stays a dumb terminal; tmux owns panes, windows and sessions. `listen_on unix:@kitty-tmux`, `tab_bar_style hidden`, `shell kitty-tmux` (a launcher script), and `clear_all_shortcuts yes`, so only the bindings below exist. Prefix byte `\x02` is `ctrl+b`; see [tmux](tmux.md) for what each prefix key does. + +| Key | Sends / does | +| --- | --- | +| `ctrl+shift+c` / `ctrl+shift+v` | Copy / paste | +| `ctrl+plus` / `ctrl+minus` / `ctrl+0` | Font size +1 / -1 / reset | +| `ctrl+shift+alt+,` | Reload kitty config | +| `ctrl+shift+a` | Spawn a kitty herdr host | +| `super+t`, `super+enter`, `ctrl+shift+t` | `prefix t` (new window) | +| `ctrl+shift+h` / `ctrl+shift+k` | `prefix H` / `prefix L` (previous / next window) | +| `alt+q w e r t y u i o` | `prefix 1`–`9` | +| `ctrl+shift+j` | `prefix "` (split below) | +| `ctrl+shift+l`, `ctrl+enter` | `prefix %` (split right) | +| `ctrl+shift+f` | `prefix z` (zoom) | +| `ctrl+shift+w`, `super+w` | `prefix x` (kill pane) | +| `super+left/right/up/down` | `prefix` + `ctrl+arrow` (resize) | +| `ctrl+shift+g` | `tmux display-popup` 90%×90% running `lazygit` in pane cwd | +| `ctrl+shift+e` | `tmux new-window` running `nvim` in pane cwd | +| `ctrl+shift+p` | `tmux split-window -v -l 25%` running `atuin-pick` | +| `super+n`, `ctrl+shift+space` | New OS window | +| `super+d` | `prefix d` (detach) | + +### herdr.conf — kitty as a herdr host + +Launched by `super+a`. Class `kitty-herdr`, `tab_bar_style hidden` (herdr draws its own sidebar and tab strip), `shell herdr` (launches or attaches the persistent session; closing the window detaches). Base appearance matches `kitty.conf`, without a `listen_on`. An uppercase letter after `\x02` is the shift variant. See [herdr](herdr.md). + +| Key | Sends / does | +| --- | --- | +| `super+c` / `super+v` | Copy / paste | +| `ctrl+plus` / `ctrl+minus` / `ctrl+0` | Font size +1 / -1 / reset | +| `ctrl+shift+alt+,` | Reload kitty config | +| `ctrl+shift+n` | `prefix N` | +| `super+n` | `prefix G` | +| `super+t`, `ctrl+shift+t` | `prefix c` | +| `ctrl+space` | `prefix t` (Switchboard menu) | +| `super+z` | `prefix z` | +| `ctrl+tab` / `ctrl+shift+tab` | `prefix .` / `prefix ,` (next / previous agent) | +| `ctrl+shift+f` | `prefix K` (Switchboard projects) | +| `ctrl+shift+g` | `prefix L` (Switchboard git) | +| `ctrl+shift+e` | `prefix e` (herdr-nvim sidebar toggle) | +| `ctrl+shift+o` | `prefix o` (herdr-nvim pick file) | +| `ctrl+shift+h` / `ctrl+shift+l` | `prefix p` / `prefix n` | +| `ctrl+shift+j` / `ctrl+shift+k` | `prefix j` / `prefix k` (next / previous workspace) | +| `ctrl+shift+w` | `prefix W` | +| `ctrl+shift+r` | `prefix T` | +| `ctrl+shift+,` | `prefix S` (herdr settings) | +| `ctrl+shift+q` | `prefix x` | +| `ctrl+shift+p` | `prefix P` (Switchboard commands) | + +### goliath.conf — remote tmux over mosh + +Opens straight into the tmux session `main` on host `goliath` via `mosh goliath -- tmux new-session -A -s main`. `font_size 9.0`, `listen_on unix:@kitty-goliath`, `env MOSH_TITLE_NOPREFIX=1` (drops mosh's `[mosh] ` title prefix), `tab_bar_style hidden`. + +> [!WARNING] +> mosh bootstraps ssh with `-S none`, so non-interactive key auth to goliath must work. It needs mosh on both ends and UDP 60000–61000 open. mosh sets `TERM=xterm-256color`, so kitty-only capabilities such as undercurl are unavailable inside. + +| Key | Sends | +| --- | --- | +| `super+w` | `prefix x` | +| `super+t` | `prefix %` | +| `super+n` | `prefix "` | +| `super+enter`, `alt+n` | `prefix t` | +| `alt+h` / `alt+l` | `prefix H` / `prefix L` | +| `alt+q w e r t y u i o` | `prefix 1`–`9` (`alt+t` is bound twice; the later `prefix 5` wins) | +| `super+left/right/up/down` | `prefix` + `ctrl+arrow` | +| `super+d` | `prefix d` | + +### ssh.conf + +Kitten `ssh` config: for `hostname goliath`, `share_connections yes`. + +## Kittens and Python + +| File | Purpose | +| --- | --- | +| `tab_bar.py` | Provides `draw_title` for `{custom}` in the tab template. Title is `<index> <icon> <label>`: the label is the git repo root name of the tab's cwd (walks up for `.git`), or the file nvim is editing (parsed from nvim's title). Icon comes from the foreground process cmdline (editors, AI agents like claude/omp/opencode/codex, git tools, docker, herdr, tmux, yazi, btop, atuin, ssh, chezmoi, …) with a folder fallback. Labels are elided at 28 chars. In the `stack` layout with more than one pane, ` <nf-md-layers> <panes>` is appended; kitty repaints the tab bar on every layout change. No subprocesses or timers. | +| `pass_keys.py` | Bound to `ctrl+h/j/k/l`. If the window's foreground process matches `vim`, `nvim`, `fzf`, `tv`, `tmux` or `herdr`, the key is forwarded; otherwise kitty moves to the neighboring window. | +| `navigate_kitty.py` | No-UI kitten that calls `neighboring_window` with a direction argument; the counterpart nvim can invoke. Not mapped in `kitty.conf`. | +| `select_tab.py` | Full-screen fuzzy tab picker using `kitty @ ls` data; shows cwds zsh-style. Keys: Up/Down/PgUp/PgDn scroll, Enter selects, typing filters, `ctrl+c`/Esc quits. Not mapped in `kitty.conf`. | +| `switchtab.py` | Focuses the tab whose `vt` user var matches the argument, or launches one with that var and reorders tabs by `vt`. Not mapped. | +| `window_titler.py` | Watcher that appends `[<vt> <pty>]` to window titles. Not referenced in `kitty.conf`. | +| `day_session.py` | Daily sessions: `geninclude` script, global watcher and the `flush` no-UI kitten in one file. See [Daily sessions](#daily-sessions). | + +Related: the [tmux](tmux.md) `is_vim` check and herdr's `vim-herdr-navigation` plugin complete the `ctrl+h/j/k/l` chain. Hyprland window rules can match the `kitty`, `kitty-tmux` and `kitty-herdr` app-ids ([Hyprland](../desktop/hyprland.md)). diff --git a/docs/terminal/tmux.md b/docs/terminal/tmux.md new file mode 100644 index 0000000..6f360a0 --- /dev/null +++ b/docs/terminal/tmux.md @@ -0,0 +1,115 @@ +# tmux + +tmux prefix, bindings, kitty-style window tabs with Nerd Font icons, and resurrect/continuum persistence. + +Terminal multiplexer. [Ghostty](ghostty.md) runs nothing but tmux, and Ghostty's `ctrl+shift` chords are tmux bindings. tmux is also used through the kitty tmux host and remotely on goliath. + +| | | +| --- | --- | +| Source | [prdlk/tmux](https://github.com/prdlk/tmux) via `.chezmoiexternals/tmux.toml`: `tmux.conf`, `tmux-nerd-font-window-name.yml`, `tab-label.sh` | +| Target | `~/.config/tmux/` | +| Install | `tmux` in `.chezmoidata/packages.yaml` (pacman) | + +`~/.config/tmux` is a `git-repo` external checkout, not chezmoi-managed contents; edit it in place and commit and push from there. tpm is a separate `git-repo` external in `.chezmoiexternal.toml`, cloned to `~/.config/tmux/plugins/tpm` inside that checkout when missing. `tmux.conf` ends with `run '~/.config/tmux/plugins/tpm/tpm'`. Plugins installed by tpm (`prefix I`) land next to it; the tmux repo's `.gitignore` excludes `plugins/` and chezmoi ignores them. [prdlk/tmux-palette](https://github.com/prdlk/tmux-palette) (`.chezmoiexternals/tmux-palette.toml`, → `~/.config/tmux-palette/`) holds the [palette](#command-palette) config. + +## Options + +The prefix is `ctrl+b` (the byte Ghostty's `ctrl+shift` chords send). `ctrl+space` is not a prefix: it opens the [command palette](#command-palette). + +| Option | Value | +| --- | --- | +| `default-terminal` | `tmux-256color`; `RGB` override for every terminal; `clipboard` and `hyperlinks` (OSC 8) features; `extkeys` for xterm-kitty. Features apply after `tmux kill-server` | +| `extended-keys` | `on`, format `csi-u` | +| `base-index` / `pane-base-index` | `1` / `1`; `renumber-windows on` | +| `status-position` | `top`, `status-interval 5` | +| `allow-passthrough` / `set-clipboard` / `mouse` / `focus-events` | `on` | +| `update-environment` | `TERM` and `TERM_PROGRAM` appended, so programs see the outer terminal (Ghostty/kitty) | +| `mode-keys` | `vi` | +| `set-titles` | `on`, `#S`: the terminal window title is the session name, so compositor window groups list sessions (one per Ghostty window) instead of `host:window` | +| `automatic-rename-format` | `#{window_icon} <label>`: Nerd Font icon, then the dynamic label described under [Window tabs](#window-tabs) | +| `history-limit` | `50000` | +| `detach-on-destroy` | `no-detached` (killing a session switches only to a detached session, else detaches, so a Ghostty window never lands on another window's session) | + +These settings are what [yazi](../tools/yazi.md) needs inside tmux. `allow-passthrough` carries image previews through to the terminal, `set-clipboard` copies paths via OSC 52, and the two environment variables let yazi detect the outer terminal's graphics support. Nothing binds `M-[`: tmux would read the `ESC [` that starts yazi's terminal-query replies as that key and break yazi's capability detection. + +## Keybindings + +`prefix ?` opens all of them in a popup: `omarchy-menu-tmux-keybindings` on Omarchy machines, `tmux list-keys -N` everywhere else. + +| Key | Action | +| --- | --- | +| `prefix q` | Reload config | +| `prefix /` | Copy mode, then search upward | +| `prefix o` | Sessions palette ([`tmux-sessions`](../shell/scripts.md#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.md#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>:<tool-and-command>` 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`) | +| `prefix a` | omp in a background session `<session>:omp` (pane cwd), shown in a popup docked bottom-right (35% × 60%) and listed in the [omp palette](../shell/scripts.md#pj-palette) and under Running in the tasks palette. In the popup, `ctrl-c` hides it and `ctrl-q` quits omp. Inside any background-task popup, `prefix a` hides it too, so Ghostty `ctrl+shift+a` toggles omp | +| `prefix h` / `prefix v` | Split below / right, pane cwd | +| `prefix x` | Kill pane | +| `S-Enter` (no prefix) | Sends `ESC[13;2u` to the pane unchanged. With `extended-keys on`, tmux would otherwise turn Shift+Enter into plain Enter for apps that never requested extended keys, and coding agents (omp, Claude Code) would submit instead of inserting a newline | +| `C-MouseDown1Pane` (ctrl+click) | Opens the OSC 8 hyperlink under the mouse (`#{mouse_hyperlink}`) with `xdg-open`; without one, the click goes to the pane. Plain-text URLs: `ctrl+shift+click`, handled by Ghostty | +| `M-Enter` / `M-S-Enter` / `M-Escape` (no prefix) | Split below / split right / kill pane | +| `C-h` / `C-j` / `C-k` / `C-l` (no prefix) | Vim-aware pane focus. In an nvim/vim/fzf pane (`@pane-is-vim`, set by smart-splits, or the pane's command), the key goes to nvim. nvim's `config.pane_nav` moves between its own splits and, at its outer edge, runs `tmux select-pane -t $TMUX_PANE`. Elsewhere tmux moves directly. Also bound in copy mode | +| `prefix C-l` | Send `C-l` (clear screen) | +| `C-M-arrows` / `C-M-S-arrows` (no prefix) | Focus pane / resize pane by 5 | +| `prefix c` / `prefix k` / `prefix r` | New window in pane cwd / kill window / rename window | +| `M-1` … `M-9` (no prefix) | Select window 1–9 | +| `M-Left` / `M-Right` (no prefix) | Previous / next window | +| `M-S-Left` / `M-S-Right` (no prefix) | Move window left / right | +| `prefix C` / `prefix K` / `prefix R` | New / kill / rename session | +| `prefix P` / `prefix N`, `M-Up` / `M-Down` | Previous / next session | +| Copy mode `v` / `y` | Begin selection / copy and exit | + +## Window tabs + +The status line copies kitty's tab bar (`tab_bar_style powerline`, `tab_powerline_style angled`). The current window is an accent-tinted plate with accent text. The other windows use `bg=default` and muted text, so the terminal's transparency shows through them, as with kitty's `tab_bar_background none`. That only works while every `window-status-*-style` stays `default`: inside a tab format, `bg=default` means that style's background, not the terminal's. `tmux.conf` therefore sets all of them explicitly, because a reload never clears a value a removed plugin left behind. As in kitty, a solid arrow leads into the current window and a thin one sits between two inactive windows. The arrow into the current window is a plain `U+E0B0` in `@tab-bg`, the window background. Ghostty draws that glyph as a built-in sprite that fills the whole cell even with `adjust-cell-height`. The session name is an accent pill on the far left (`status-justify left`); its arrow points straight into the first tab, so the pill and tabs read as one chain of arrows. The right side shows `COPY`/`PREFIX`/`ZOOM` flags and the hostname. + +Colors are the user options `@tab-bg` (window background: the notch arrow and the session pill's text), `@tab-fg`, `@tab-active-bg`, and `@tab-active-fg`. They are a fixed CherryBlossom palette (the same one Ghostty's `cherry-blossom` theme uses), so the bar looks identical on every machine and does not depend on Omarchy. Active background = accent mixed 20% into background, the same derivation as the kitty tab bar: `#453130` from accent `#cf716f` over `#222120`. + +Popups (`prefix g`, `prefix t`, `prefix ?`, tmux-palette) set `popup-style` to `bg=@tab-bg` and `popup-border-style` to `@tab-active-fg` on that background with rounded lines. The explicit background matters under Ghostty: `background-opacity` only applies to cells with the default background, so a default-bg popup shows the pane behind it through the blur. + +### Tab labels + +Each window reads `<index> <icon> <label>`, updating as you work, the same rule as kitty's `tab_bar.py`: + +| Pane runs | Label | Source | +| --- | --- | --- | +| `nvim`/`vim`/`hx`/`helix`, editing a file | The file name | The title nvim sets (`<file> \| <org/repo>`, astrocore `custom_title`), read from `#{pane_title}` by the format itself, so a buffer switch relabels the tab immediately | +| Anything else, or an editor with no file | Repo the cwd belongs to (walks up for `.git`); the directory name outside a repo; `~` at home | `tab-label.sh`, run as an async `#()` job. When its output differs from the current name, it re-arms `automatic-rename` so tmux relabels right after a `cd` instead of on the next keystroke | + +Labels longer than 27 characters end in `…`. The icon comes from tmux-nerd-font-window-name. + +## Plugins + +| Plugin | Settings | +| --- | --- | +| `tmux-plugins/tpm` | Plugin manager | +| `tmux-plugins/tmux-sensible` | Defaults | +| `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` | +| `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 + +`ctrl+space` opens tmux-palette, a fuzzy command list in a popup. Its user config lives in `~/.config/tmux-palette/` (the [prdlk/tmux-palette](https://github.com/prdlk/tmux-palette) external): + +| 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.md#mandible-pick); alias `man`), **television** (`tv channels`, the [channel picker](../tools/television.md), 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.md#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 `<session>:<tool-and-command>` shown in a popup: `q` hides it with the task still running, `ctrl-c` asks `Stop <session>? (y/n)` and on `y` stops the task and closes it | +| `palettes/omp.json` | The **omp** palette, fed by [`pj-palette --omp`](../shell/scripts.md#pj-palette): this tmux session's `<session>: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.md#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 <text>` | +| `hidden.json` | Hides the built-in **Switch Theme...** item, and with it the Appearance section: the palette stays on the fixed CherryBlossom `theme.json` | +| `shortcuts.json` | Ghostty `ctrl+shift` chords shown next to the built-in items they trigger (New Window → `Ctrl+Shift+T`, …) | +| `theme.json` | CherryBlossom: bg `#222120`, panel `#2e2c2b`, selected `#453130` (the active-tab plate), muted `#a6958f`, accent `#cf716f` | + +### Persistence + +resurrect saves sessions, windows, panes, cwds, pane contents, and a default set of programs (nvim, less, man, …). Keys: `prefix C-s` saves, `prefix C-r` restores. continuum saves automatically every 10 minutes. When a tmux server starts and no other tmux server is running, continuum restores the last save. In practice that means the first Ghostty window after login or a reboot. + +## tmux-nerd-font-window-name.yml + +`show-name: false`, because `automatic-rename-format` supplies the label. The icon sits on the left, with a fallback icon and a blank multi-pane icon. Icons are defined for `mprocs`, `mm`, `macmon`, `make`, `zsh`, `nvim`, `devbox`, `psql`, `yazi`, `lazygit`, `gh`, `tv`, `docker`, `bun`, `node`, `npm`, `pnpm`, `go`, `bunx`, `claude`, `omp`, and `gitframe`. The plugin parses the YAML with awk and does not interpret `\U` escapes, so the glyphs are literal characters. + diff --git a/docs/tools/README.md b/docs/tools/README.md new file mode 100644 index 0000000..d5fd92c --- /dev/null +++ b/docs/tools/README.md @@ -0,0 +1,58 @@ +# Tools + +CLI and TUI tools the repo installs and configures, with the settings applied to each. + +This section covers the command-line and terminal-UI tools outside the shell, terminal, and desktop layers. Every tool here is universal: none of it is gated by machine role, so `desktop`, `laptop`, and `server` machines all get it (see [Installation](../installation.md)). + +Packages come from `.chezmoidata/packages.yaml` and are installed by `run_onchange_before_10-packages.sh.tmpl` (pacman plus yay for the AUR). See [chezmoi scripts](../chezmoi/scripts.md). + +## Configured tools + +| Page | Tool | Source in repo | Theme | +| --- | --- | --- | --- | +| [Git](git.md) | git, delta, diffnav, git-split-diffs | `dot_gitconfig.tmpl` | delta colors hand-tuned (dark) | +| [GitHub CLI](github-cli.md) | gh, gh extensions, gh-dash | `dot_config/gh/`, `dot_config/gh-dash/` | gh-dash defaults | +| [Neovim](neovim.md) | nvim (AstroNvim) | external repo via `.chezmoiexternal.toml` | managed in the nvim repo | +| [Yazi](yazi.md) | yazi file manager | external repo via `.chezmoiexternals/yazi.toml` | cyberdream flavor (ii-auto flavor shipped) | +| [Lazygit](lazygit.md) | lazygit | `dot_config/lazygit/` | cyberdream colors (ii theme file shipped) | +| [Lazydocker](lazydocker.md) | lazydocker | `dot_config/lazydocker/config.yml` | cyberdream colors | +| [bat](bat.md) | bat | `dot_config/bat/` | cyberdream tmTheme | +| [Topgrade](topgrade.md) | topgrade | `dot_config/topgrade.toml` | n/a | +| [Hunk](hunk.md) | hunk diff viewer | `dot_config/hunk/config.toml` | `auto` | +| [drydock](drydock.md) | drydock repo fleet view | `dot_config/drydock/config.toml` | n/a | +| [television](television.md) | tv fuzzy picker, custom cables | external repo via `.chezmoiexternals/television.toml` | `cyberdream-transparent` | +| [LeetCode](leetcode.md) | leetcode CLI, `lc-elir` | `dot_leetcode/` | n/a | + +- [Git](git.md): Identity from chezmoi data, diff pagers, gh credential helper. +- [Yazi](yazi.md): Keymap, plugins, bookmarks, and the Neovim bridge. +- [Lazygit](lazygit.md): GUI options, delta renderer, custom gh commands. +- [GitHub CLI](github-cli.md): Aliases, extensions, and the gh-dash dashboard. + +## Other packaged CLI tools + +These packages are declared in `.chezmoidata/packages.yaml` but have no config file in the repo. The "Wired in" column lists where the repo actually uses them. + +| Tool | Role | Wired in | +| --- | --- | --- | +| `fzf` | Fuzzy finder | `FZF_DEFAULT_OPTS` in `dot_config/fish/conf.d/10-env.fish` (rounded border, cyberdream colors: highlight `#5ef1ff`, pointer `#ffaecf`, marker `#5eff6c`). Used by fish functions `c2p`, `cp-appid`, `fab`, `gtm`, `mdp`, `lc-elir`, by `~/.local/bin` scripts (`lc-elir`), and as `fuzzy_cmd` of the yazi bunny plugin. The shell pickers (`gho`, `pj`, <kbd>ctrl-e</kbd>) use [television](television.md). | +| `fd` | File finder | `c2p`, `cp-appid`, `extract_agents`, `mdp`, `lc-elir`, `conf.d/pnpm-filter.fish`. | +| `ripgrep` | Content search | `cp-appid`, `gtm`, `gh-sonr-org-migrate` fish functions. | +| `zoxide` | Frecency `cd` | `zoxide init fish` in `conf.d/40-tools.fish`; the `cd` function in fish/bash/zsh falls back to `zoxide query` when the argument is not a directory, and `ghg-clone` registers new clones. | +| `eza` | `ls` replacement | Interactive shells alias `ls` to `eza --icons` (fish `conf.d/20-aliases.fish`, `~/.config/shell/aliases.sh`). | +| `jq` | JSON processor | `fab`, `gtm`, `gh-sonr-org-migrate`, `pnpm-filter`. | +| `duf` | Disk usage overview | Not referenced by any config. | +| `btop` | Resource monitor | Waybar modules launch it on click (`omarchy-launch-or-focus-tui btop`); kitty tab bar shows an icon for it. | +| `fastfetch` | System info | Not referenced by any config. | +| `gum` | Shell prompts and pickers | `gdc` (confirm before `git reset --hard`), `ghn` (host and org pickers), `gtm`, `ai`, `pnpm-filter`, nvm activation messages. | +| `glow` | Markdown renderer | Kitty tab-bar icon only. | +| `micro` | Terminal editor | Alias `sm` = `sudo micro`. | +| `ffmpeg`, `ffmpegthumbnailer`, `poppler`, `resvg`, `imagemagick`, `7zip`, `unzip` | Media, PDF, SVG, image, and archive backends | Grouped in the manifest as yazi preview dependencies. See [Yazi](yazi.md). | +| `wget` | HTTP downloads | Not referenced by any config. | +| `zsh-syntax-highlighting` | zsh highlighting | Sourced by the zsh setup. See [Shell](../shell/README.md). | +| `ttf-victor-mono-nerd` / `font-victor-mono-nerd-font` | Nerd Font | Terminal font. See [Terminal](../terminal/README.md). | +| `suvadu`, `mandible`, `worktrunk` | Declared under `packages.shared.cargo` | Installed by [`15-tools`](../chezmoi/scripts.md#15-tools), which installs rustup first when `cargo` is missing. `mandible` backs the tmux-palette "mandible" item via `~/.local/bin/mandible-pick`. `worktrunk` is the `wt` git-worktree CLI for parallel agent workflows. | + +Tools with their own pages in other sections: [fish](../shell/fish.md), [starship](../shell/starship.md), and [atuin](../shell/atuin.md) under Shell; [kitty](../terminal/kitty.md) and [tmux](../terminal/tmux.md) under Terminal. + +> [!NOTE] +> `topgrade` comes from the AUR. See the individual pages for per-tool package details. diff --git a/docs/tools/bat.md b/docs/tools/bat.md new file mode 100644 index 0000000..aa5d523 --- /dev/null +++ b/docs/tools/bat.md @@ -0,0 +1,74 @@ +# bat + +bat with the cyberdream tmTheme, an external PureScript syntax, and automatic cache rebuilds on apply. + +[bat](https://github.com/sharkdp/bat) is a `cat` replacement with syntax highlighting and git gutter marks. The repo sets its theme to cyberdream, adds a PureScript grammar, and rebuilds bat's cache whenever those inputs change. + +| | | +| --- | --- | +| Sources | `dot_config/bat/config`, `dot_config/bat/themes/cyberdream.tmTheme` | +| External | `.config/bat/syntaxes/sublime-purescript-syntax` in `.chezmoiexternal.toml` | +| Targets | `~/.config/bat/config`, `~/.config/bat/themes/cyberdream.tmTheme`, `~/.config/bat/syntaxes/sublime-purescript-syntax/` | +| Packages | `bat` (pacman) | + +## config + +bat's config file holds default command-line flags. One is active: + +**~/.config/bat/config** + +```sh +--theme="cyberdream" +``` + +The file also carries bat's stock commented examples (`--italic-text=always`, `--paging=never`, a mouse-enabled `--pager`, `--map-syntax`); none are enabled. + +## Theme + +`cyberdream.tmTheme` is a TextMate theme named "Cyberdream". Base settings: + +| Key | Color | +| --- | --- | +| `background` | `#16181a` | +| `foreground`, `caret` | `#ffffff` | +| `lineHighlight`, `selection` | `#3c4048` | +| `findHighlight` | `#5ef1ff` | +| `activeGuide` | `#ffbd5e` | +| `bracketsForeground` | `#ff5ea0` (underlined) | +| Comments | `#7b8496` | + +The same file is also used outside bat: + +- The [yazi](yazi.md) cyberdream flavor points `syntect_theme` at `~/.config/bat/themes/cyberdream.tmTheme`. +- Yazi text previews run `bat -p --color=always` through the piper plugin, so they get this theme via the config file. + +## PureScript syntax + +**.chezmoiexternal.toml** + +```toml +[".config/bat/syntaxes/sublime-purescript-syntax"] + type = "git-repo" + url = "https://github.com/tellnobody1/sublime-purescript-syntax.git" + [".config/bat/syntaxes/sublime-purescript-syntax".pull] + args = ["--ff-only"] +``` + +chezmoi clones the Sublime grammar when it is missing. With no `refreshPeriod`, it only pulls (`--ff-only`) on `chezmoi apply --refresh-externals`. See [externals and ignore rules](../chezmoi/externals-and-ignore.md). + +## Cache rebuilds + +bat only sees custom themes and syntaxes after `bat cache --build`. Two scripts run it: + +| Script | When it runs | +| --- | --- | +| `run_onchange_after_build-bat-cache.sh.tmpl` | Embeds SHA-256 hashes of `cyberdream.tmTheme` and `config`, so it re-runs whenever either file changes. Exits quietly if `bat` is missing. | +| `.chezmoiscripts/run_onchange_after_40-post.sh.tmpl` | Post-apply housekeeping (also runs `fc-cache` on Linux). Runs `bat cache --build` when its own rendered content changes, which includes the first apply. | + +> [!NOTE] +> Neither hash covers the PureScript external. If the grammar updates, run `bat cache --build` by hand. + +## Other consumers + +- `lc-elir` previews candidate files with `bat --color=always --line-range=:40` inside fzf. See [LeetCode](leetcode.md). +- The kitty tab bar shows a book icon while `bat` runs. diff --git a/docs/tools/drydock.md b/docs/tools/drydock.md new file mode 100644 index 0000000..9fa9cc8 --- /dev/null +++ b/docs/tools/drydock.md @@ -0,0 +1,23 @@ +# drydock + +drydock fleet view of uncommitted, unpushed, and unreleased work, scanning the ghq root. + +drydock lists what is uncommitted, unpushed, and unreleased across every repo under its roots. + +| | | +| --- | --- | +| Source | `dot_config/drydock/config.toml` | +| Target | `~/.config/drydock/config.toml` (holds live beside it in `holds.toml`, unmanaged) | +| Packages | Not declared in `packages.yaml`; installed with cargo (`~/.cargo/bin/drydock`) | + +## config.toml + +**~/.config/drydock/config.toml** + +```toml +roots = ["~/Code"] +``` + +Only `roots` is set; everything else stays at drydock's defaults (`drydock config show` prints the effective config). The root is the ghq root, where repos sit at `<host>/<owner>/<repo>`, within the default `max_depth = 4`. `~/Projects` would find nothing: it holds only symlinks (made by [`projects-sync`](../shell/scripts.md#projects-sync)), and drydock does not follow symlinks by default (`follow_symlinks = false`). + +`drydock --root <path>` replaces the configured roots for one run. diff --git a/docs/tools/git.md b/docs/tools/git.md new file mode 100644 index 0000000..209b980 --- /dev/null +++ b/docs/tools/git.md @@ -0,0 +1,114 @@ +# Git + +Global git config with templated identity, three diff pagers, an nvim difftool, and gh/tea credential helpers. + +Git's global config is a single chezmoi template. It sets the commit identity from chezmoi data, routes diffs through diffnav and git-split-diffs, styles delta for the tools that call it, and delegates HTTPS credentials to `gh` and `tea`. + +| | | +| --- | --- | +| Source | `dot_gitconfig.tmpl` | +| Target | `~/.gitconfig` | +| Type | Template (rendered, so it is written as a regular file, not a symlink) | +| Packages | `git`, `git-delta`, `diffnav` (pacman) | + +> [!WARNING] +> `git-split-diffs` (the `core.pager`) is not declared in `packages.yaml`; install it separately. + +## Identity + +**~/.gitconfig** + +```ini +[user] + email = {{ .email }} + name = {{ .name }} +``` + +`.name` and `.email` are prompted once by `.chezmoi.toml.tmpl` on the first `chezmoi init` and stored in the local chezmoi config. No role or OS condition changes this file. + +## Pagers + +Three pagers are configured, each for a different path: + +| Setting | Value | Applies to | +| --- | --- | --- | +| `pager.diff` | `diffnav` | `git diff`: file-tree diff viewer built on delta | +| `core.pager` | `git-split-diffs --color`, piped into `less -+LFX` | Every other paged command (`git log -p`, `git show`, ...) | +| `[split-diffs] min-line-width` | `40` | git-split-diffs side-by-side threshold | +| `[split-diffs] theme-name` | `dark` | git-split-diffs theme | + +`less -+LFX` resets the `-L`, `-F`, and `-X` flags, so less always takes over the screen and never exits early on short output. + +### delta styling + +The `[delta]` section is not a pager setting; delta reads it whenever it runs. Here that means diffnav and [lazygit](lazygit.md), which renders diffs with `delta --dark --paging=never`. + +| Option | Value | +| --- | --- | +| `dark` | `true` | +| `tabs` | `2` | +| `file-style` / `file-decoration-style` | `omit` / `none` (no file header) | +| `line-numbers-left-format` | `"{nm:>4} "` | +| `line-numbers-right-format` | `"│ {np:>4} "` | +| `line-numbers-left-style` | `white dim` | +| `line-numbers-right-style` | `"#1f2335" dim` | +| `line-numbers-zero-style`, `-plus-style`, `-minus-style` | `white dim` | +| `wrap-left-symbol`, `wrap-right-symbol`, `wrap-right-prefix-symbol` | a single space each (wrap markers hidden) | +| `plus-style` | `syntax "#0e250e"` | +| `plus-emph-style` | `syntax "#103610"` | +| `minus-style` | `syntax "#402a26"` | +| `minus-emph-style` | `syntax "#45221c"` | +| `hunk-label` | a Nerd Font glyph | +| `hunk-header-line-number-style` | `"#10233A"` | +| `hunk-header-style` | `"#868E99"` | +| `hunk-header-file-style` | `"#868E99" dim` | +| `hunk-header-decoration-style` | `"#163050" ol ul` | + +Added and removed lines keep syntax highlighting (`syntax` foreground) on dark green and dark red backgrounds. + +## Difftool + +**~/.gitconfig** + +```ini +[diff] + tool = codediff +[difftool "codediff"] + cmd = nvim \"$LOCAL\" \"$REMOTE\" +\"CodeDiff file $LOCAL $REMOTE\" +``` + +`git difftool` opens both versions in [Neovim](neovim.md) and runs the `:CodeDiff` command, which comes from the external nvim config. Lazygit's `openDiffTool` binding (`<c-t>`) uses the same tool. + +## Remotes and push + +| Setting | Value | Effect | +| --- | --- | --- | +| `url "git@github.com:".pushInsteadOf` | `https://github.com/` | Remotes cloned over HTTPS push over SSH; fetches stay on HTTPS. | +| `push.autoSetupRemote` | `true` | First `git push` on a new branch sets its upstream automatically. | +| `advice.addIgnoredFile` | `false` | Silences the hint when `git add` touches an ignored path. | +| `beads.role` | `maintainer` | Role read by the beads (`bd`) issue tracker. | + +## Credential helpers + +Each host block first sets an empty `helper =`, which clears any helper inherited from system config, then adds one helper: + +| Host | Helper | Notes | +| --- | --- | --- | +| `https://github.com` | `!gh auth git-credential` | Uses the token from `gh auth login`. See [GitHub CLI](github-cli.md). | +| `https://gist.github.com` | `!gh auth git-credential` | Same as above, for gists. | +| `https://prad.codes` | `!tea login helper` | Self-hosted Gitea; uses the login stored by the `tea` CLI. | + +No credentials are stored in the file itself. + +## Related helpers + +These git-adjacent commands live in `~/.local/bin` and the shell function directories. See [shell scripts](../shell/scripts.md) for the full set. + +| Command | What it does | +| --- | --- | +| `gdc` | Asks for confirmation with `gum confirm`, then runs `git reset --hard HEAD` and `git clean -fd`. | +| `gop` | Opens a repo's web page for any forge whose layout is `https://<host>/<owner>/<repo>`; defaults to `origin`, then `upstream`. Also the <kbd>ctrl-b</kbd> action of the `ghq-repos` [television](television.md#ghq-repos) cable. | +| `git-summary` | Aggregates every `AGENTS.md` in the current repo through `code2prompt`. | +| `ghg` / `ghg-clone` | `ghq get` a repo and `cd` into the clone; sets up a prad.codes pull mirror (your GitHub repos) or GitHub push mirror (prad.codes repos) when none exists. | +| `ghn` | Creates a private repo on prad.codes (via `tea`) or github.com (via `gh`), clones it with ghq, and `cd`s into it. | +| `gho` | Picks a ghq repo or Obsidian vault with the `ghq-repos` [television](television.md#ghq-repos) cable and `cd`s into it. | diff --git a/docs/tools/github-cli.md b/docs/tools/github-cli.md new file mode 100644 index 0000000..7e9e112 --- /dev/null +++ b/docs/tools/github-cli.md @@ -0,0 +1,159 @@ +# GitHub CLI + +gh config and aliases, the four gh extensions installed on apply, and the gh-dash dashboard layout. + +`gh` is GitHub's official CLI. The repo manages its global config, installs a fixed set of extensions, and configures [gh-dash](https://github.com/dlvhdr/gh-dash), a TUI dashboard for pull requests, issues, and notifications. + +| | | +| --- | --- | +| Sources | `dot_config/gh/private_config.yml`, `dot_config/gh-dash/config.yml` | +| Targets | `~/.config/gh/config.yml` (mode `0600`, from the `private_` prefix), `~/.config/gh-dash/config.yml` | +| Packages | `github-cli` (pacman) | +| Extensions | `packages.shared.gh_extensions` in `.chezmoidata/packages.yaml` | + +> [!NOTE] +> Authentication is per machine: run `gh auth login` once. Tokens live in gh's `hosts.yml` or the system keyring, which the repo does not manage. + +## gh config + +| Key | Value | Effect | +| --- | --- | --- | +| `version` | `1` | Config schema version. | +| `git_protocol` | `https` | gh clones and adds remotes over HTTPS. Pushes still go over SSH because of the `pushInsteadOf` rewrite in [Git](git.md). | +| `editor` | empty | Falls back to the environment; fish exports `EDITOR=nvim`. | +| `prompt` | `enabled` | Interactive prompts on. | +| `prefer_editor_prompt` | `disabled` | Prompts inline instead of opening an editor. | +| `pager` | empty | Falls back to the environment. | +| `http_unix_socket` | empty | Default transport. | +| `browser` | empty | Falls back to the environment. | +| `color_labels` | `disabled` | Labels are not drawn in their RGB colors. | +| `accessible_colors` | `disabled` | | +| `accessible_prompter` | `disabled` | | +| `spinner` | `enabled` | Animated progress spinner. | + +### Aliases + +| Alias | Expands to | +| --- | --- | +| `gh co` | `gh pr checkout` | + +## Extensions + +| Extension | Command | Purpose | +| --- | --- | --- | +| `davidraviv/gh-clean-branches` | `gh clean-branches` | Deletes local branches that no longer have a remote counterpart. | +| `prdlk/gh-commit` | `gh commit` | The owner's commit helper; lazygit binds it as "Smart commit with AI". | +| `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. It is a fish script, so fish's config is sourced first and `PATH` and `GITHUB_TOKEN` match a fish session: + +1. **Re-run trigger** + + The rendered script embeds a SHA-256 of the `gh_extensions` list, so chezmoi re-runs it whenever the list changes. + +2. **Guards** + + If `gh` is missing, or `gh auth status` fails, it prints a warning and exits 0. Run `gh auth login`, then `chezmoi apply` again. + +3. **Install** + + Reads `gh extension list` and runs `gh extension install` only for entries not already present. + +See [chezmoi scripts](../chezmoi/scripts.md) for the full script order. + +## gh-dash + +Launched with `gh dash`, or <kbd>Ctrl</kbd>+<kbd>d</kbd> in lazygit's files panel. + +### Sections + +### Pull requests + +| Title | Filter | +| --- | --- | +| My Pull Requests | `is:open author:@me` | +| Needs My Review | `is:open review-requested:@me` | +| Involved | `is:open involves:@me -author:@me` | + +### Issues + +| Title | Filter | +| --- | --- | +| My Issues | `is:open author:@me` | +| Assigned | `is:open assignee:@me` | +| Involved | `is:open involves:@me -author:@me` | + +### Notifications + +| Title | Filter | +| --- | --- | +| All | (none) | +| Created | `reason:author` | +| Participating | `reason:participating` | +| Mentioned | `reason:mention` | +| Review Requested | `reason:review-requested` | +| Assigned | `reason:assign` | +| Subscribed | `reason:subscribed` | +| Team Mentioned | `reason:team-mention` | + +### Defaults + +| Key | Value | +| --- | --- | +| `defaults.view` | `prs` | +| `defaults.preview.open` / `width` | `true` / `0.45` | +| `defaults.prsLimit`, `issuesLimit`, `notificationsLimit` | `20` each | +| `defaults.prApproveComment` | `LGTM` | +| `defaults.refetchIntervalMinutes` | `30` | +| `repo.branchesRefetchIntervalSeconds` | `30` | +| `repo.prsRefetchIntervalSeconds` | `60` | +| `repoPaths` | empty | +| `confirmQuit` | `false` | +| `showAuthorIcons` | `true` | +| `smartFilteringAtLaunch` | `true` | +| `includeReadNotifications` | `true` | +| `theme.ui.sectionsShowCount` | `true` | +| `theme.ui.table.showSeparator` / `compact` | `true` / `false` | + +### Column layout + +| View | Column | Width | Hidden | +| --- | --- | --- | --- | +| PRs | `updatedAt`, `createdAt` | 5 | no | +| PRs | `repo` | 20 | no | +| PRs | `author` | 15 | no | +| PRs | `authorIcon` | | no | +| PRs | `assignees` | 20 | yes | +| PRs | `base` | 15 | yes | +| PRs | `lines` | 15 | no | +| Issues | `updatedAt`, `createdAt` | 5 | no | +| Issues | `repo` | 15 | no | +| Issues | `creator` | 10 | no | +| Issues | `creatorIcon` | | no | +| Issues | `assignees` | 20 | yes | + +### Keybindings + +| View | Key | Command | +| --- | --- | --- | +| PRs | <kbd>T</kbd> | `gh enhance -R {{.RepoName}} {{.PrNumber}}` | + +`gh enhance` is a gh extension that is not in the managed extension list; install it separately for this binding to work. + +### Pager + +**~/.config/gh-dash/config.yml** + +```yaml +pager: + diff: "hunk pager" +``` + +PR diffs open in [Hunk](hunk.md). + +## Other integrations + +- [Lazygit](lazygit.md) custom commands call `gh repo sync && gh clean-branches --force`, `gh commit`, `gh pr create --fill -w`, `gh dash`, and `gh browse`. +- `ghn` creates github.com repos with `gh`, and `gh-sonr-org-migrate` scripts gh for an org migration. +- The tmux window-name map gives `gh` its own Nerd Font icon. diff --git a/docs/tools/hunk.md b/docs/tools/hunk.md new file mode 100644 index 0000000..b771513 --- /dev/null +++ b/docs/tools/hunk.md @@ -0,0 +1,62 @@ +# Hunk + +Hunk terminal diff viewer settings, used as the gh-dash diff pager. + +[Hunk](https://github.com/modem-dev/hunk) is a review-first terminal diff viewer aimed at agent-authored changes. In this setup it is the diff pager for [gh-dash](github-cli.md#gh-dash). + +| | | +| --- | --- | +| Sources | `dot_config/hunk/config.toml`, `dot_config/hunk/private_state.json` | +| Targets | `~/.config/hunk/config.toml`, `~/.config/hunk/state.json` (mode `0600`) | +| Packages | Not declared in `packages.yaml`; install hunk separately | + +## config.toml + +**~/.config/hunk/config.toml** + +```toml +theme = "auto" +mode = "auto" +vcs = "git" +watch = false +exclude_untracked = true +line_numbers = true +tab_width = 4 +wrap_lines = false +menu_bar = true +agent_notes = true +prompt_save_view_preferences = false +transparent_background = true +``` + +| Key | Value | Effect | +| --- | --- | --- | +| `theme` | `auto` | Picks a built-in theme to match the terminal. | +| `mode` | `auto` | Chooses split or stacked layout from the window width (alternatives: `split`, `stack`). | +| `vcs` | `git` | Git backend (alternatives: `jj`, `sl`). | +| `watch` | `false` | Does not reload on file changes. | +| `exclude_untracked` | `true` | Untracked files are left out of working-tree diffs. | +| `line_numbers` | `true` | Shows line numbers. | +| `tab_width` | `4` | Tab stops every 4 columns. | +| `wrap_lines` | `false` | Long lines are not wrapped. | +| `menu_bar` | `true` | Shows the top menu bar. | +| `agent_notes` | `true` | Shows agent notes when a review opens (off by default in hunk). | +| `prompt_save_view_preferences` | `false` | Does not ask to persist view changes. | +| `transparent_background` | `true` | Uses the terminal background instead of the theme's. | + +No `[pager]` or per-command sections are set, so pager sessions use these top-level values. + +## state.json + +`private_state.json` is hunk's runtime state: the state-file `version` and `lastSeenCliVersion`, which hunk updates on its own. It holds no preferences. The `private_` prefix gives it mode `0600`. + +## Integrations + +**~/.config/gh-dash/config.yml** + +```yaml +pager: + diff: "hunk pager" +``` + +gh-dash pipes PR diffs into `hunk pager`. Plain `git diff` does not use hunk; it goes through diffnav (see [Git](git.md)). diff --git a/docs/tools/lazydocker.md b/docs/tools/lazydocker.md new file mode 100644 index 0000000..b16ff2a --- /dev/null +++ b/docs/tools/lazydocker.md @@ -0,0 +1,47 @@ +# Lazydocker + +Lazydocker with rounded borders and the CherryBlossom border and selection colors shared with lazygit. + +[Lazydocker](https://github.com/jesseduffield/lazydocker) is a terminal UI for Docker containers, images, volumes, and compose projects. The config only restyles it to match [lazygit](lazygit.md). + +| | | +| --- | --- | +| Source | `dot_config/lazydocker/config.yml` | +| Target | `~/.config/lazydocker/config.yml` | +| Packages | `lazydocker` (pacman) | + +## Settings + +**~/.config/lazydocker/config.yml** + +```yaml +gui: + border: rounded + theme: + activeBorderColor: + - "#cf716f" + inactiveBorderColor: + - "#a6958f" + selectedLineBgColor: + - "#453130" + optionsTextColor: + - "#a6958f" +``` + +| Key | Value | Palette | +| --- | --- | --- | +| `gui.border` | `rounded` | | +| `activeBorderColor` | `#cf716f` | CherryBlossom primary | +| `inactiveBorderColor` | `#a6958f` | CherryBlossom on-surface-variant | +| `selectedLineBgColor` | `#453130` | CherryBlossom selection (primary 20% over surface) | +| `optionsTextColor` | `#a6958f` | CherryBlossom on-surface-variant | + +Everything else (keybindings, commands, log settings) is left at lazydocker's defaults. + +## Launching + +| Entry point | Behavior | +| --- | --- | +| `dd` | Alias for `lazydocker` in fish, bash, and zsh. It shadows the coreutils `dd` binary wherever the aliases are loaded; use `command dd` for the real one. | + +tmux-resurrect lists `lazydocker` among the processes it restores, and the kitty tab bar shows a Docker icon while it runs. diff --git a/docs/tools/lazygit.md b/docs/tools/lazygit.md new file mode 100644 index 0000000..82e1990 --- /dev/null +++ b/docs/tools/lazygit.md @@ -0,0 +1,282 @@ +# Lazygit + +Lazygit with CherryBlossom colors, delta diffs, a full keybinding map, and custom commands wired to gh and helper scripts. + +[Lazygit](https://github.com/jesseduffield/lazygit) is a terminal UI for git. The config sets CherryBlossom colors, renders diffs with delta, turns on background fetching and a whole-graph log, and adds custom commands that call `gh`. + +| | | +| --- | --- | +| Source | `dot_config/lazygit/config.yml`, `dot_config/lazygit/ii-theme.yml` | +| Target | `~/.config/lazygit/config.yml`, `~/.config/lazygit/ii-theme.yml` | +| Packages | `lazygit` (pacman) | +| Ignored | `.config/lazygit/.omc/**` (agent tooling state) | + +## Launching + +| Entry point | Behavior | +| --- | --- | +| `gg` | Alias for `lazygit` (all shells) | +| <kbd>Ctrl</kbd>+<kbd>g</kbd> | fish and zsh keybinding | +| <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>g</kbd> | [Kitty](../terminal/kitty.md): lazygit as an overlay on the current window. The tmux-host kitty config opens it in a 90% `tmux display-popup` instead. | + +tmux-resurrect lists `lazygit` among the processes it restores. + +## GUI + +Colors come from the CherryBlossom palette, shared with Ghostty, tmux, and omp: + +| Theme key | Color | +| --- | --- | +| `activeBorderColor` | `#cf716f` | +| `inactiveBorderColor` | `#a6958f` | +| `searchingActiveBorderColor` | `#c17e4a` | +| `optionsTextColor` | `#a6958f` | +| `selectedLineBgColor` | `#453130` | +| `cherryPickedCommitBgColor` | `#453130` | +| `cherryPickedCommitFgColor` | `#ad6756` | +| `unstagedChangesColor` | `#ae825f` | +| `defaultFgColor` | `#dcc1b7` | +| `authorColors."*"` | `#dcc1b7` (every author the same color) | + +| Option | Value | +| --- | --- | +| `border` | `rounded` | +| `scrollHeight` / `scrollPastBottom` | `2` / `true` | +| `scrollOffMargin` / `scrollOffBehavior` | `2` / `margin` | +| `mouseEvents` | `true` | +| `skipDiscardChangeWarning` | `true` | +| `skipStashWarning` | `true` | +| `skipNoStagedFilesWarning` | `false` | +| `skipRewordInEditorWarning` | `false` | +| `sidePanelWidth` | `0.4` | +| `expandFocusedSidePanel` / `expandedSidePanelWeight` | `true` / `2` | +| `mainPanelSplitMode` | `horizontal` | +| `enlargedSideViewLocation` | `left` | +| `language` | `auto` | +| `timeFormat` / `shortTimeFormat` | `02 Jan 06` / `3:04PM` | +| `commitLength.show` | `true` | +| `showListFooter` | `true` | +| `showFileTree` | `true` | +| `showRandomTip` | `false` | +| `showCommandLog` / `commandLogSize` | `true` / `4` | +| `showBottomLine` | `false` (keybinding hint line hidden) | +| `showPanelJumps` | `false` | +| `showIcons`, `nerdFontsVersion`, `showFileIcons` | `true`, `"3"`, `true` | +| `commitAuthorShortLength` / `commitAuthorLongLength` | `2` (initials) / `17` | +| `commitHashLength` | `8` | +| `showBranchCommitHash` | `true` | +| `showDivergenceFromBaseBranch` | `arrowAndNumber` | +| `splitDiff` | `auto` | +| `screenMode` | `normal` | +| `animateExplosion` | `true` | +| `portraitMode` | `auto` | +| `filterMode` | `fuzzy` | +| `spinner.frames` / `spinner.rate` | ASCII bar (`\|`, `/`, `-`, `\`) / `50` ms | +| `statusPanelView` | `allBranchesLog` | + +## Git + +| Option | Value | +| --- | --- | +| `diffRenderers` | `delta --dark --paging=never` with `colorArg: always`. delta also reads the `[delta]` section of `~/.gitconfig`; see [Git](git.md). | +| `commit.signOff` | `false` | +| `commit.autoWrapCommitMessage` / `autoWrapWidth` | `true` / `72` | +| `merging.manualCommit` / `args` | `false` / empty | +| `merging.squashMergeMessage` | `Squash merge {{selectedRef}} into {{currentBranch}}` | +| `mainBranches` | `develop` | +| `skipHookPrefix` | `WIP` (a message starting with `WIP` skips pre-commit hooks) | +| `autoFetch` / `autoRefresh` / `fetchAll` | `true` / `true` / `true` | +| `branchLogCmd` | `git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --` | +| `allBranchesLogCmds` | `git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium` | +| `overrideGpg` | `false` | +| `disableForcePushing` | `false` | +| `commitPrefix` / `branchPrefix` | empty | +| `parseEmoji` | `true` | +| `log.order` / `showGraph` / `showWholeGraph` | `topo-order` / `always` / `true` | +| `truncateCopiedCommitHashesTo` | `8` | + +## Refresh, updates, and OS + +| Option | Value | +| --- | --- | +| `update.method` / `days` | `background` / `14` | +| `refresher.refreshInterval` | `10` s | +| `refresher.fetchInterval` | `60` s | +| `confirmOnQuit` | `false` | +| `quitOnTopLevelReturn` | `true` (<kbd>Esc</kbd> at top level quits) | +| `disableStartupPopups` | `true` | +| `notARepository` | `skip` (opens the most recent repo) | +| `promptToReturnFromSubprocess` | `false` | +| `os.edit`, `editAtLine`, `editAtLineAndWait`, `openDirInEditor`, `editPreset`, `open` | empty (lazygit defaults, which follow `$EDITOR` = nvim) | +| `os.openLink` | `bash -C` running `~/.local/share/omarchy/bin/omarchy-launch-webapp {{link}}` (absolute path in the file) | +| `os.copyToClipboardCmd` / `readFromClipboardCmd` | `wl-copy` / `wl-paste` | + +> [!NOTE] +> The link opener and the `wl-copy`/`wl-paste` clipboard commands are Wayland/Omarchy-specific. On a `server` role machine they are unavailable, so opening links and clipboard actions fail there. + +## Custom commands + +| Key | Context | Command | Output | +| --- | --- | --- | --- | +| <kbd>Ctrl</kbd>+<kbd>i</kbd> | global | `gitv {{.Repository.Owner}}/{{.Repository.Name}}` | terminal | +| <kbd>Ctrl</kbd>+<kbd>w</kbd> | global | `gwm` | terminal | +| <kbd>Ctrl</kbd>+<kbd>a</kbd> | global | `wrkflw` | terminal | +| <kbd>Ctrl</kbd>+<kbd>p</kbd> | global | `github prs` | terminal | +| <kbd>F</kbd> | files | `gh repo sync && gh clean-branches --force` ("Sync repo and clean branches, update DuckDB cache") | log | +| <kbd>A</kbd> | files | `gh commit` ("Smart commit with AI") | terminal | +| <kbd>C</kbd> | files | `gh commit` ("Smart commit with AI") | terminal | +| <kbd>a</kbd> | files | `git add` the file if it has unstaged changes, else `git reset` it ("Toggle file staged") | | +| <kbd>L</kbd> | files | `livediff` | terminal | +| <kbd>Ctrl</kbd>+<kbd>d</kbd> | files | `gh dash` | terminal | +| <kbd>Ctrl</kbd>+<kbd>o</kbd> | files | `gh browse` | | +| <kbd>o</kbd> | localBranches | `gh pr create --fill -w` ("start ai pull request") | | +| <kbd>C</kbd> | localBranches | `gh repo sync && gh clean-branches --force` | log | +| <kbd>O</kbd> | commits | `hub browse -- "commit/{{.SelectedLocalCommit.Hash}}"` | | + +`gh commit`, `gh clean-branches`, and `gh dash` are managed gh extensions (see [GitHub CLI](github-cli.md)). `gitv`, `gwm`, `wrkflw`, `github`, `livediff`, and `hub` are not installed by this repo. + +> [!WARNING] +> Several custom keys share a key with a built-in binding in the same context: <kbd>C</kbd> and <kbd>a</kbd> in files (`commitChangesWithEditor`, `toggleStagedAll`), <kbd>Ctrl</kbd>+<kbd>w</kbd>, <kbd>Ctrl</kbd>+<kbd>p</kbd>, <kbd>Ctrl</kbd>+<kbd>d</kbd>, <kbd>Ctrl</kbd>+<kbd>o</kbd> against universal bindings, and <kbd>O</kbd> in commits. <kbd>Ctrl</kbd>+<kbd>i</kbd> is the same keycode as <kbd>Tab</kbd> in most terminals. + +## Keybindings + +The file writes out the full keybinding map. Most values match lazygit's defaults; they are listed so the file is the single reference. + +### Universal + +| Action | Key | +| --- | --- | +| `quit` / `quit-alt1` | <kbd>q</kbd> / <kbd>Ctrl</kbd>+<kbd>q</kbd> | +| `return` | <kbd>Esc</kbd> | +| `quitWithoutChangingDirectory` | <kbd>Q</kbd> | +| `togglePanel` | <kbd>Tab</kbd> | +| `prevItem` / `nextItem` | <kbd>Up</kbd> / <kbd>Down</kbd> | +| `prevItem-alt` / `nextItem-alt` | <kbd>k</kbd> / <kbd>j</kbd> | +| `prevPage` / `nextPage` | <kbd>,</kbd> / <kbd>.</kbd> | +| `scrollLeft` / `scrollRight` | <kbd>H</kbd> / <kbd>L</kbd> | +| `gotoTop` / `gotoBottom` | `<` / `>` | +| `toggleRangeSelect` | <kbd>v</kbd> | +| `rangeSelectDown` / `rangeSelectUp` | <kbd>Shift</kbd>+<kbd>Down</kbd> / <kbd>Shift</kbd>+<kbd>Up</kbd> | +| `prevBlock` / `nextBlock` | <kbd>Left</kbd> / <kbd>Right</kbd> | +| `prevBlock-alt` / `nextBlock-alt` | <kbd>h</kbd> / <kbd>l</kbd> | +| `nextBlock-alt2` / `prevBlock-alt2` | <kbd>Tab</kbd> / <kbd>Shift</kbd>+<kbd>Tab</kbd> | +| `jumpToBlock` | <kbd>1</kbd>–<kbd>5</kbd> | +| `nextMatch` / `prevMatch` | <kbd>n</kbd> / <kbd>N</kbd> | +| `startSearch` | <kbd>/</kbd> | +| `optionMenu` | <kbd>?</kbd> | +| `select` | <kbd>Space</kbd> | +| `goInto` / `confirm` | <kbd>Enter</kbd> | +| `confirmInEditor` | <kbd>Alt</kbd>+<kbd>Enter</kbd> | +| `remove` | <kbd>d</kbd> | +| `new` | <kbd>n</kbd> | +| `edit` | <kbd>e</kbd> | +| `openFile` | <kbd>o</kbd> | +| `scrollUpMain` / `scrollDownMain` | <kbd>PgUp</kbd> / <kbd>PgDn</kbd> | +| `scrollUpMain-alt1` / `scrollDownMain-alt1` | <kbd>K</kbd> / <kbd>J</kbd> | +| `scrollUpMain-alt2` / `scrollDownMain-alt2` | <kbd>Ctrl</kbd>+<kbd>u</kbd> / <kbd>Ctrl</kbd>+<kbd>d</kbd> | +| `createRebaseOptionsMenu` | <kbd>m</kbd> | +| `pushFiles` / `pullFiles` | <kbd>P</kbd> / <kbd>p</kbd> | +| `refresh` | <kbd>R</kbd> | +| `createPatchOptionsMenu` | <kbd>Ctrl</kbd>+<kbd>p</kbd> | +| `nextTab` / `prevTab` | <kbd>]</kbd> / <kbd>[</kbd> | +| `nextScreenMode` / `prevScreenMode` | <kbd>+</kbd> / <kbd>_</kbd> | +| `undo` / `redo` | <kbd>z</kbd> / <kbd>Ctrl</kbd>+<kbd>z</kbd> | +| `filteringMenu` | <kbd>Ctrl</kbd>+<kbd>s</kbd> | +| `diffingMenu` / `diffingMenu-alt` | <kbd>W</kbd> / <kbd>Ctrl</kbd>+<kbd>e</kbd> | +| `copyToClipboard` | <kbd>Ctrl</kbd>+<kbd>o</kbd> | +| `openRecentRepos` | <kbd>Ctrl</kbd>+<kbd>r</kbd> | +| `submitEditorText` | <kbd>Enter</kbd> | +| `extrasMenu` | <kbd>@</kbd> | +| `toggleWhitespaceInDiffView` | <kbd>Ctrl</kbd>+<kbd>w</kbd> | +| `increaseContextInDiffView` / `decreaseContextInDiffView` | `}` / `{` | +| `increaseRenameSimilarityThreshold` / `decrease...` | <kbd>)</kbd> / <kbd>(</kbd> | +| `openDiffTool` | <kbd>Ctrl</kbd>+<kbd>t</kbd> (runs the nvim `codediff` difftool) | +| `newWorktree` | <kbd>w</kbd> | + +### Status + +| Action | Key | +| --- | --- | +| `checkForUpdate` | <kbd>u</kbd> | +| `recentRepos` | <kbd>Enter</kbd> | +| `allBranchesLogGraph` | <kbd>a</kbd> | + +### Files + +| Action | Key | +| --- | --- | +| `commitChanges` | <kbd>c</kbd> | +| `commitChangesWithoutHook` | <kbd>w</kbd> | +| `amendLastCommit` | <kbd>E</kbd> | +| `commitChangesWithEditor` | <kbd>C</kbd> | +| `findBaseCommitForFixup` | <kbd>Ctrl</kbd>+<kbd>f</kbd> | +| `confirmDiscard` | <kbd>x</kbd> | +| `ignoreFile` | <kbd>i</kbd> | +| `refreshFiles` | <kbd>r</kbd> | +| `stashAllChanges` / `viewStashOptions` | <kbd>s</kbd> / <kbd>S</kbd> | +| `toggleStagedAll` | <kbd>a</kbd> | +| `viewResetOptions` | <kbd>D</kbd> | +| `fetch` | <kbd>f</kbd> | +| `toggleTreeView` | `` ` `` | +| `openMergeOptions` | <kbd>M</kbd> | +| `openStatusFilter` | <kbd>Ctrl</kbd>+<kbd>b</kbd> | +| `copyFileInfoToClipboard` | <kbd>y</kbd> | + +### Branches + +| Action | Key | +| --- | --- | +| `createPullRequest` | <kbd>1</kbd> | +| `viewPullRequestOptions` | <kbd>O</kbd> | +| `copyPullRequestURL` | <kbd>Ctrl</kbd>+<kbd>y</kbd> | +| `checkoutBranchByName` | <kbd>c</kbd> | +| `forceCheckoutBranch` | <kbd>F</kbd> | +| `rebaseBranch` | <kbd>r</kbd> | +| `renameBranch` | <kbd>R</kbd> | +| `mergeIntoCurrentBranch` | <kbd>M</kbd> | +| `viewGitFlowOptions` | <kbd>i</kbd> | +| `fastForward` / `fetchRemote` | <kbd>f</kbd> | +| `createTag` / `pushTag` | <kbd>T</kbd> / <kbd>P</kbd> | +| `setUpstream` | <kbd>u</kbd> | +| `sortOrder` | <kbd>s</kbd> | + +### Commits + +| Action | Key | +| --- | --- | +| `squashDown` | <kbd>s</kbd> | +| `renameCommit` / `renameCommitWithEditor` | <kbd>r</kbd> / <kbd>R</kbd> | +| `viewResetOptions` | <kbd>g</kbd> | +| `markCommitAsFixup` / `createFixupCommit` | <kbd>f</kbd> / <kbd>F</kbd> | +| `squashAboveCommits` | <kbd>S</kbd> | +| `moveDownCommit` / `moveUpCommit` | <kbd>Ctrl</kbd>+<kbd>j</kbd> / <kbd>Ctrl</kbd>+<kbd>k</kbd> | +| `resetCommitAuthor` | <kbd>a</kbd> | +| `pickCommit` | <kbd>p</kbd> | +| `revertCommit` | <kbd>t</kbd> | +| `cherryPickCopy` / `pasteCommits` | <kbd>C</kbd> / <kbd>V</kbd> | +| `markCommitAsBaseForRebase` | <kbd>B</kbd> | +| `tagCommit` | <kbd>T</kbd> | +| `checkoutCommit` | <kbd>Space</kbd> | +| `resetCherryPick` | <kbd>Ctrl</kbd>+<kbd>c</kbd> | +| `copyCommitAttributeToClipboard` | <kbd>y</kbd> | +| `openLogMenu` | <kbd>Ctrl</kbd>+<kbd>l</kbd> | +| `openInBrowser` | <kbd>o</kbd> | +| `viewBisectOptions` | <kbd>b</kbd> | +| `startInteractiveRebase` | <kbd>i</kbd> | + +### Other panels + +| Panel | Action | Key | +| --- | --- | --- | +| amendAttribute | `resetAuthor` / `setAuthor` / `addCoAuthor` | <kbd>a</kbd> / <kbd>A</kbd> / <kbd>c</kbd> | +| stash | `popStash` / `renameStash` | <kbd>g</kbd> / <kbd>r</kbd> | +| commitFiles | `checkoutCommitFile` | <kbd>c</kbd> | +| main | `toggleSelectHunk` / `pickBothHunks` / `editSelectHunk` | <kbd>a</kbd> / <kbd>b</kbd> / <kbd>E</kbd> | +| submodules | `init` / `update` / `bulkMenu` | <kbd>i</kbd> / <kbd>u</kbd> / <kbd>b</kbd> | +| commitMessage | `commitMenu` | <kbd>Ctrl</kbd>+<kbd>o</kbd> | + +## ii-theme.yml + +`ii-theme.yml` is generated by the ii wallpaper theming system and holds only a `gui.theme` block: white active border (bold), grey `#8F9192` inactive border, `#1F1F1F` selection and cherry-pick backgrounds, `#FFF17B` marked base commit, `#FF9BAD` unstaged changes, `#DFE3E3` default text. + +Nothing in the repo loads it, so `config.yml`'s cyberdream colors are what lazygit uses. To apply it, pass both files: `LG_CONFIG_FILE="$HOME/.config/lazygit/config.yml,$HOME/.config/lazygit/ii-theme.yml" lazygit`. diff --git a/docs/tools/leetcode.md b/docs/tools/leetcode.md new file mode 100644 index 0000000..99ebe57 --- /dev/null +++ b/docs/tools/leetcode.md @@ -0,0 +1,89 @@ +# LeetCode + +LeetCode CLI workspace config, its tracked state files, and the lc-elir helper that sends solutions to omp. + +The repo tracks the state directory of a terminal LeetCode client, plus a helper that feeds solution files to omp prompt commands. The `~/.leetcode` layout (workspaces with `collab.json`, `timer.json`, and `snapshots/`) matches [night-slayer18/leetcode-cli](https://github.com/night-slayer18/leetcode-cli), which is invoked as `leetcode`. + +| | | +| --- | --- | +| Source | `dot_leetcode/` | +| Target | `~/.leetcode/` | +| Packages | The CLI is not declared in `packages.yaml`; install it separately | +| Alias | `lc` = `leetcode` (fish, bash, zsh) | + +```text +dot_leetcode/ + workspaces.json + star-prompt.json + version-cache.json + workspaces/ + default/ + config.json + collab.json + timer.json + snapshots/ + .keep +``` + +## Workspaces + +`workspaces.json` lists one workspace, `default`, and marks it active. + +**~/.leetcode/workspaces/default/config.json** + +```json +{ + "workDir": "/home/prad/Code/github.com/prdlk/leetcode/work/1", + "lang": "python3", + "site": "leetcode.com", + "editor": "nvim", + "syncRepo": "https://github.com/prdlk/leetcode.git" +} +``` + +| Key | Value | Effect | +| --- | --- | --- | +| `workDir` | `~/Code/github.com/prdlk/leetcode/work/1` (absolute path in the file) | Where problem files are written. It sits inside the ghq checkout of the solutions repo, under `$GHQ_ROOT`. | +| `lang` | `python3` | Default solution language. | +| `site` | `leetcode.com` | Target site. | +| `editor` | `nvim` | Opens problems in [Neovim](neovim.md). | +| `syncRepo` | `https://github.com/prdlk/leetcode.git` | Repo that solutions sync to. | + +The path is absolute, so on a machine with a different username or `$GHQ_ROOT`, edit `workDir`. + +The other workspace files start empty: `collab.json` has `"session": null`, `timer.json` has no solve times and no active timer, and `snapshots/` holds only a `.keep` placeholder. + +## Tracked state files + +| File | Contents | +| --- | --- | +| `star-prompt.json` | Counter for the CLI's "star the repo" prompt: accepted-submission total, milestones already shown, submissions since the last prompt, timestamps, and a `dismissed` flag. | +| `version-cache.json` | Last update check time, latest known version, and whether it has breaking changes. | + +These are runtime files. In chezmoi's symlink mode, non-template, non-private files are symlinks into the source directory, so the CLI writes these straight into the repo working tree. Expect them to show up as diffs. + +## lc-elir + +`lc-elir [root]` picks LeetCode solution files with fzf and runs the omp `/leetcode-eli5` command on each one. + +| | | +| --- | --- | +| Sources | `dot_local/bin/executable_lc-elir` (POSIX sh), `dot_config/fish/functions/lc-elir.fish` (fish port) | +| Targets | `~/.local/bin/lc-elir`, `~/.config/fish/functions/lc-elir.fish` | +| Needs | `fd`, `fzf`, `bat`, `omp` | + +1. **Find candidates** + + `fd --type f '^\d+\..+\.(js|ts)$'` under `root` (default `.`) matches numbered problem files such as `1365.some-slug.js`. + +2. **Pick** + + `fzf --multi` with prompt `eli5> `, showing the last three path segments (`--delimiter=/ --with-nth=-3..`). The right-hand 60% preview shows the first 40 lines through `bat --color=always --line-range=:40`. + +3. **Run** + + For each selected file it prints a separator line, then runs `omp -p "/leetcode-eli5 <file>"`. It exits 1 if nothing was picked. + +## omp commands + +`lc-elir` runs the `/leetcode-eli5` omp command, which lives in `~/.omp/agent/commands/` and is not managed by this repo. diff --git a/docs/tools/neovim.md b/docs/tools/neovim.md new file mode 100644 index 0000000..40a6f36 --- /dev/null +++ b/docs/tools/neovim.md @@ -0,0 +1,56 @@ +# Neovim + +Neovim config pulled from its own repository as a chezmoi external, plus the editor hooks the dotfiles wire into it. + +Neovim is the default editor everywhere in this setup. Its configuration (AstroNvim-based, per the repo README) lives in a separate repository, [prdlk/nvim](https://github.com/prdlk/nvim). This repo only clones it and wires other tools to it; the Lua config itself is not documented here. + +| | | +| --- | --- | +| Source | `.chezmoiexternal.toml` entry `.config/nvim` | +| Target | `~/.config/nvim` (a git checkout) | +| Remote | `https://github.com/prdlk/nvim.git` | +| Packages | `neovim` (pacman) | + +## How the external works + +**.chezmoiexternal.toml** + +```toml +[".config/nvim"] + type = "git-repo" + url = "https://github.com/prdlk/nvim.git" + [".config/nvim".pull] + args = ["--ff-only"] +``` + +- `type = "git-repo"`: chezmoi runs `git clone` when `~/.config/nvim` does not exist, so a fresh machine gets the config on first apply. +- No `refreshPeriod` is set, so a normal `chezmoi apply` never pulls. The local checkout always wins; commit and push nvim changes from `~/.config/nvim` directly. +- A forced refresh (`chezmoi apply --refresh-externals`) runs `git pull --ff-only`, which refuses to merge if local history has diverged. + +See [externals and ignore rules](../chezmoi/externals-and-ignore.md) for how chezmoi handles externals in general. + +### Ignored runtime paths + +`.chezmoiignore.tmpl` keeps chezmoi away from state that tools write inside the checkout: + +| Path | Why | +| --- | --- | +| `.config/nvim/lazy-lock.json` | lazy.nvim lockfile, rewritten on plugin updates | +| `.config/nvim/.git`, `.config/nvim/.git/**` | the checkout's own git metadata | +| `.config/nvim/.omc/**` | agent tooling state | +| `.config/nvim/.crush/**` | agent tooling state | +| `.config/nvim/.understand-anything/**` | agent tooling state | + +## Integrations in this repo + +| Where | What | +| --- | --- | +| `dot_config/fish/conf.d/10-env.fish` | `EDITOR=nvim`. [gh](github-cli.md) falls back to it because its `editor` key is empty. | +| [Aliases](../shell/aliases.md) | `e` = `nvim`; `e.v` opens `~/.config/nvim/lua` in yazi; `e.t` opens the tmux config in nvim. | +| [Kitty](../terminal/kitty.md) | <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>e</kbd> opens nvim in the current directory in a 50/50 vertical split. Kitty's `listen_on` socket lets nvim hand <kbd>Ctrl</kbd>+<kbd>h/j/k/l</kbd> at a window edge back to kitty. | +| [Yazi](yazi.md) | The `edit` opener and <kbd>Ctrl</kbd>+<kbd>v</kbd> / <kbd>Ctrl</kbd>+<kbd>x</kbd> call `~/.local/bin/yazi-nvim-open`. Inside an nvim terminal (`$NVIM` set) files open in the host instance through the nvim-side `EditFromYazi` Lua function; otherwise a blocking `nvim` starts. | +| [Git](git.md) | `git difftool` runs `nvim "$LOCAL" "$REMOTE" +"CodeDiff file $LOCAL $REMOTE"`. | +| [LeetCode](leetcode.md) | The default workspace sets `"editor": "nvim"`. | + +> [!NOTE] +> `yazi-nvim-open` depends on `_G.EditFromYazi`, which the nvim repo defines (its header points at `lua/config/yazi_session.lua`). If that function is missing, the remote call fails and nothing opens. diff --git a/docs/tools/television.md b/docs/tools/television.md new file mode 100644 index 0000000..61f442c --- /dev/null +++ b/docs/tools/television.md @@ -0,0 +1,182 @@ +# television + +tv config symlinked from the repo, a transparent cyberdream theme, and the custom cables behind gho, pj, and ctrl-e in fish, zsh, and bash. + +[television](https://github.com/alexpasmantier/television) (`tv`) is a fuzzy picker built on "cables": TOML files that define a source command, a preview, and actions. Every shell picker in the repo runs on a tv cable, with the same keys in fish, zsh, and bash. + +| | | +| --- | --- | +| Source | [prdlk/television](https://github.com/prdlk/television) via `.chezmoiexternals/television.toml`: `config.toml`, `cable/*.toml`, `themes/cyberdream-transparent.toml` | +| Target | `~/.config/television/` | +| Install | Not listed in `.chezmoidata/packages.yaml`; install separately | + +`~/.config/television` is a `git-repo` checkout (pulled `--ff-only` every 168h), so edits apply immediately; commit and push them from there. `cable/` holds tv's stock cables plus the repo's own and overridden ones. + +## config.toml + +The UI is minimal: no borders, a hidden status bar, and padding in place of frames. + +| Key | Value | +| --- | --- | +| `default_channel` | `files` | +| `ui.theme` | `cyberdream-transparent` | +| `ui.input_bar` | position `top`, prompt `❯`, `border_type = "none"`, padding left 1, right 1, bottom 1 | +| `ui.status_bar.hidden` | `true` (<kbd>f12</kbd> toggles it) | +| `ui.results_panel` | `border_type = "none"`, padding left 1, right 1 | +| `ui.preview_panel` | `size = 50`, `scrollbar = false`, `border_type = "none"`, padding left 2, right 1 | +| `ui.help_panel.hidden` | `true` | + +tv 0.15 has no config key for inline mode (`--inline` and `--height` are CLI-only), so every call site passes `--inline`: `gho` (`tv ghq-repos --inline`), `pj` (`tv pj --inline …`), <kbd>ctrl-e</kbd> (`tv git-files --inline`), and bash <kbd>ctrl-t</kbd> (`tv --autocomplete-prompt … --inline`). Actions that re-exec tv pass it too: `files` (`tv files .. --inline`), `dirs` (`tv dirs .. --inline`), and `channels` (`tv {} --inline`). `tv --inline` opens on the line below the prompt and leaves the cursor there on exit; the shell key bindings move the prompt back ([fish](../shell/fish.md#key-bindings), [bash and zsh](../shell/bash-zsh.md)). + +A channel that sets its own `[ui.preview_panel]` replaces the whole table with tv's defaults (rounded border, scrollbar). The stock cables that override it (`alias`, `cargo-commands`, `crontab`, `env`, `fonts`, `gh-issues`, `journal`, `man-pages`, `npm-scripts`, `opencode-sessions`, `ports`, `tea-issues`, `tea-prs`, `text`, `todo-comments`) therefore repeat `border_type = "none"`, `scrollbar = false`, and padding left 2, right 1. + +Global keys added on top of the defaults: + +| Key | Action | +| --- | --- | +| <kbd>ctrl-e</kbd> | `actions:edit`: the channel's `edit` action | +| <kbd>ctrl-h</kbd> | `actions:goto_parent_dir`; the help panel loses <kbd>ctrl-h</kbd> | +| <kbd>end</kbd> | `go_to_input_end` (unchanged) | + +## Theme + +`themes/cyberdream-transparent.toml` is a separate file because tv 0.15's builtin `cyberdream` shadows a user theme of the same name and paints an opaque `#16181a` background. This theme omits `background`, so kitty's translucent background shows through (tv 0.15 rejects `background = 'none'`). + +| Key | Color | +| --- | --- | +| `border_fg` | `#3c4048` | +| `text_fg`, `input_text_fg`, `result_value_fg` | `#ffffff` | +| `dimmed_text_fg` | `#7b8496` | +| `result_name_fg` | `#5ea1ff` | +| `result_line_number_fg` | `#f1ff5e` | +| `match_fg` | `#5ef1ff` | +| `selection_fg` / `selection_bg` | `#5eff6c` on `#3c4048` | +| `preview_title_fg` | `#ffaecf` | +| `result_count_fg` | `#ffbd5e` | +| `channel_mode_bg` | `#5ef1ff` on `#16181a` | +| `remote_control_mode_bg` | `#5eff6c` on `#16181a` | +| `action_picker_mode_bg` | `#bd5eff` on `#16181a` | + +## Sorting + +Every custom cable except `agents` (a fixed list, see [agents](#agents)), `omp-sessions` (sorted by [`omp-session`](../shell/scripts.md#omp-session) itself), and `jobs` (fish's job order) pipes its source through [`mtime-sort`](../shell/scripts.md#mtime-sort), which orders lines newest-first by the mtime of the path in the line's last tab-separated field (`--repo` stats `<path>/.git/index` first). tv then ranks match quality and frecency on top of that order. All custom cables set `shell = "bash"`, because `$SHELL` is fish. + +## Custom cables + +| Cable | File | Opened by | +| --- | --- | --- | +| [`ghq-repos`](#ghq-repos) | `cable/ghq-repos.toml` | <kbd>ctrl-o</kbd> (`gho`) | +| [`git-files`](#git-files) | `cable/git-files.toml` | <kbd>ctrl-e</kbd> | +| [`pj`](#pj) | `cable/pj.toml` | <kbd>ctrl-p</kbd>, <kbd>down</kbd> on an empty prompt (`pj`) | +| [`files`](#files) | `cable/files.toml` | `tv`, <kbd>ctrl-t</kbd> autocomplete | +| [`obsidian`](#obsidian) | `cable/obsidian.toml` | `tv obsidian` | +| [`agents`](#agents) | `cable/agents.toml` | `tv agents` | +| [`omp-sessions`](#omp-sessions) | `cable/omp-sessions.toml` | `tv omp-sessions`, <kbd>ctrl-a</kbd> (`omp-session`) when it has nothing to resume | +| [`jobs`](#jobs) | `cable/jobs.toml` | <kbd>ctrl-z</kbd> in fish (`_jobs_bind`) with two or more background jobs | +| [`kitty-days`](#kitty-days) | `cable/kitty-days.toml` | `tv kitty-days` | + +The keys are bound in fish (`fish_user_key_bindings.fish`), zsh (`keybinds.zsh`), and bash (`keybinds.bash`); bash has no <kbd>ctrl-a</kbd> binding, and <kbd>ctrl-z</kbd> is fish only. See [fish](../shell/fish.md#key-bindings) and [bash and zsh](../shell/bash-zsh.md). + +### ghq-repos + +Entries are `name<TAB>path`: tv shows and matches the name and prints the path. <kbd>ctrl-s</kbd> cycles between the two sources. + +| Source | Entries | Sort | +| --- | --- | --- | +| Repos | `ghq list` under `ghq root`, plus two checkouts outside it: the chezmoi source (`~/.local/share/chezmoi`) and the nvim config (`~/.config/nvim`) as `github.com/prdlk/nvim`. Those two win over a ghq clone with the same name | `mtime-sort --repo` | +| Vaults | Every directory under `~/Documents/Obsidian` (depth 3) that contains `.obsidian`, named relative to that directory | `mtime-sort` | + +**Preview.** Two commands; <kbd>ctrl-f</kbd> cycles. The default is the commit graph for git directories: `git log --graph --all`, newest 300 commits, as short hash, relative date, subject and refs. The second is `onefetch --no-art`. Non-git directories show `eza --tree --level 2` (falling back to `ls -la`) in both. + +[serie](https://github.com/lusingander/serie) cannot draw inside the preview pane: it is a fullscreen TUI that paints its graph with kitty images and has no print mode. <kbd>ctrl-g</kbd> opens it instead. + +| Key | Action | +| --- | --- | +| <kbd>enter</kbd> | Print the path. The `gho` function cds into it, clears, and runs `onefetch` in git repos | +| <kbd>ctrl-e</kbd> | `edit`: `cd <path> && nvim .` on `/dev/tty` | +| <kbd>ctrl-b</kbd> | `browse`: `cd <path> && gop` in fork mode, so tv stays open ([gop](../shell/scripts.md#gop)) | +| <kbd>ctrl-g</kbd> | `history`: `serie` on `/dev/tty` in fork mode for git directories; <kbd>q</kbd> returns to the picker | + +**Needs:** `ghq`, `fd`, `git`, `serie`, `onefetch`, `mtime-sort`. + +### git-files + +| Source | Entries | +| --- | --- | +| Tracked | `git ls-files` of the whole repo (from the toplevel), or `fd -t f` outside a repo | +| All | `fd -t f -H -E .git` | + +Both are sorted with `mtime-sort`. The preview is `bat -n` with `BAT_THEME=ansi`. <kbd>enter</kbd> runs `edit`: `nvim {}` on `/dev/tty`. + +**Needs:** `git`, `fd`, `bat`, `mtime-sort`. + +### pj + +Source `pj --list`; tv shows the display column. The preview runs `pj --preview` in the global 50% panel, and <kbd>enter</kbd> runs `pj --run`. Running `pj` scans the project and opens this cable with its own records. See [pj](../shell/scripts.md#pj). + +**Needs:** `pj`, `mtime-sort`. + +### files + +Overrides tv's stock `files` cable. Sources `Default` (`fd -t f`) and `Hidden` (`fd -t f -H`), both piped through `mtime-sort`. The `edit` action opens the selection in `nvim` on `/dev/tty`, so it also works from <kbd>ctrl-t</kbd>, where the shell captures tv's stdout. + +**Needs:** `fd`, `bat`, `mtime-sort`. + +### obsidian + +Entries are `name<TAB>path` for every directory under `~/Documents/Obsidian` (depth 3) that contains `.obsidian`, named relative to that directory (nested vaults show as `Research/Sonr`) and sorted with `mtime-sort`. The preview is `eza --tree --level 2`. + +| Key | Action | +| --- | --- | +| <kbd>enter</kbd> | `open`: `xdg-open obsidian://open?path=<path>`, detached with `setsid -f` because the generic `xdg-open` stays in the foreground | +| <kbd>ctrl-e</kbd> | `edit`: `cd <path> && nvim .` | + +`obsidian://open?path=` only resolves vaults listed in `~/.config/obsidian/obsidian.json`, and Obsidian reads that file once at startup and rewrites it from memory. So when the vault is not listed and Obsidian is closed, `open` adds `{path, ts}` under a random 16-hex id first. When Obsidian is running, it sends a notification and opens the vault switcher (`obsidian://choose-vault`) for **Open folder as vault**. + +**Needs:** `fd`, `jq`, `eza`, `obsidian`, `xdg-open`, `mtime-sort`. + +### agents + +The source is a table of known agent CLIs in the cable, `binary|launch command|description`, kept in table order (`omp` first). A row is listed only when `command -v <binary>` resolves, so agents appear and disappear as they are installed. Entries are `<name description><TAB><launch command><TAB><binary>`; the description is part of the matched text, so `openai` finds `codex`. + +| Agents in the table | Launch | +| --- | --- | +| `omp`, `claude`, `codex`, `opencode`, `crush`, `pi`, `cursor-agent`, `copilot`, `gemini`, `agy`, `grok`, `muse`, `ori`, `hermes`, `amp`, `droid`, `qwen`, `kimi`, `goose`, `aider`, `auggie`, `kiro-cli`, `cn`, `fractal` | The binary, except `claude --dangerously-skip-permissions` (same as `ai`) | + +The preview shows the launch command, the path on `PATH`, its `readlink -f` target, and, for the `~/.local/bin` wrappers that install the agent through mise on first run, the mise tool. It never runs the agent, since some wrappers take seconds to answer `--version`. + +<kbd>enter</kbd> runs `launch` in execute mode: tv exits and the launch command runs in its place, in the current directory. + +**Needs:** nothing beyond the agents themselves. + +### omp-sessions + +Source `omp-session --list`: the omp sessions of the current git repo, newest first, as `<age> <branch> <title>[ · <subdir>]<TAB><session file>`. tv shows and matches the display column, so typing a branch name filters to its sessions. The branch is the one HEAD was on when the session was last written, from the reflog; see [omp-session](../shell/scripts.md#omp-session). + +The preview runs `omp-session --preview`: title, last-write time and cwd, then the text of every user and assistant message. <kbd>enter</kbd> runs `resume` in execute mode, `omp-session --resume <file>`, which `exec`s `omp --resume <file>`. <kbd>ctrl-n</kbd> runs `new`, `omp-session --new`, which starts a fresh `omp` session. In this cable <kbd>ctrl-n</kbd> no longer moves to the next entry; <kbd>down</kbd> and <kbd>ctrl-j</kbd> still do. + +**Needs:** `omp-session`, `omp`. + +### jobs + +The current fish shell's background jobs, stopped or running, newest first. tv runs as a child process and cannot read the shell's job table, so `_jobs_bind` ([fish](../shell/fish.md#key-bindings)) writes it to a temp file named by `$TV_JOBS` and the source just `cat`s that file; opened any other way the list is empty. Entries are `%<id> <state> <command><TAB><id><TAB><pgid>`; <kbd>enter</kbd> prints the id and the binding runs `fg %<id>`. + +The preview finds the job's processes by process group (procps `ps -g` matches sessions, so it filters `ps -e -o pgid,pid`) and shows the first process's cwd and start time, then `ps --forest` with PID, STAT (`T` = stopped), elapsed time, CPU, RSS, and arguments. The preview script avoids `{`/`}` because tv would parse them as templates and leave `{split:…}` unexpanded. + +| Key | Action | +| --- | --- | +| <kbd>enter</kbd> | Print the job id; `_jobs_bind` runs `fg` on it | +| <kbd>ctrl-d</kbd> | `kill` then `reload_source`: SIGTERM to the job's process group, then SIGCONT so a stopped job receives it. Once the group is gone (polled up to 1 s) the row is removed from `$TV_JOBS`, so the reloaded list drops it; a job that ignores SIGTERM stays listed. Fish reports the termination at the next prompt | + +**Needs:** `ps`, fish. + +### kitty-days + +Lists the daily kitty sessions that `~/.config/kitty/day_session.py` saves under `~/.local/share/kitty-sessions/<monday>/<day>.kitty-session` ([kitty daily sessions](../terminal/kitty.md#daily-sessions)). Entries are `<day> <weekday> week of <monday> <n> tabs<TAB><session file>`, through `mtime-sort`. The preview parses the session file with an inline `python3` script (written without braces, which tv would treat as templates): each tab, then each window's cwd and the program it restores, with the last 6 lines of its saved scrollback in color. + +| Key | Action | +| --- | --- | +| <kbd>enter</kbd> | `open`: `setsid -f kitty --session <file>`, a new kitty with that day's tabs, scrollback and programs. Past days are read-only snapshots; today's file comes back as the live day if no kitty owns it | +| <kbd>ctrl-e</kbd> | `edit`: the session file in `nvim` | + +**Needs:** `kitty`, `python3`, `mtime-sort`. diff --git a/docs/tools/topgrade.md b/docs/tools/topgrade.md new file mode 100644 index 0000000..8a05975 --- /dev/null +++ b/docs/tools/topgrade.md @@ -0,0 +1,72 @@ +# Topgrade + +Topgrade config for Omarchy (Arch) machines, with yay as the package manager, chezmoi re-add before upgrades, and post-upgrade hooks. + +[Topgrade](https://github.com/topgrade-rs/topgrade) runs every updater on the machine in one pass: system packages, cargo, firmware, git repos, flatpak, and custom commands. The config is written for an Omarchy (Arch) box running fish; most keys are left at topgrade's defaults. + +| | | +| --- | --- | +| Source | `dot_config/topgrade.toml` | +| Target | `~/.config/topgrade.toml` | +| Packages | `topgrade` (AUR, via yay) | + +> [!NOTE] +> The file's comments say topgrade on the owner's machine is cargo-installed, and that `cargo install-update` keeps it current. That is why self-update is off. + +## [misc] + +| Key | Value | Why | +| --- | --- | --- | +| `pre_sudo` | `true` | Caches sudo credentials up front so an unattended run does not stop at a password prompt partway through. | +| `no_self_update` | `true` | The `[cargo]` step already updates the topgrade binary; two updaters would fight over it. | +| `cleanup` | `true` | Runs distro cleanup afterwards (paccache needs `pacman-contrib`; skipped if absent). | +| `show_distribution_summary` | `true` | Surfaces `*.pacnew` / `*.pacsave` files to merge. | +| `disable` | `["containers", "config_update"]` | Skips pulling `:latest` for every local container image, and skips topgrade's config-update step. | +| `ignore_failures` | `["uv", "containers"]` | Failures in these steps do not fail the run. | + +The Python pip/conda steps stay off (topgrade's default), which protects a pinned ROCm build of torch from blind upgrades. A `remote_topgrades` entry for another host is present but commented out. + +## [linux] + +| Key | Value | Why | +| --- | --- | --- | +| `arch_package_manager` | `"yay"` | Pins Omarchy's AUR helper so topgrade does not fall back to bare `pacman`, which would skip the AUR. | +| `show_arch_news` | `true` | Prints archlinux.org news before upgrading; Omarchy tracks Arch, so manual-intervention notices still apply. | + +## Other steps + +| Section | Key | Value | Effect | +| --- | --- | --- | --- | +| `[cargo]` | `git` | `true` | Also updates git-sourced cargo installs, not only crates.io ones. Needs `cargo-update`. | +| `[firmware]` | `upgrade` | `false` | fwupd updates are listed, not flashed, so firmware is reviewed before applying. | +| `[git]` | (none active) | | Predefined repos are still pulled; custom `repos` and `arguments` are commented out to avoid tripping over dirty working trees. | +| `[flatpak]` | (none active) | | User-scope flatpaks update without sudo; `use_sudo` is commented out. | + +## Pre- and post-commands + +Pre-commands run before any upgrade step: + +| Name | Command | Purpose | +| --- | --- | --- | +| Chezmoi Re-Add | `chezmoi re-add` | Pulls local edits to managed dotfiles back into the chezmoi source repo before anything changes them. Only re-adds files chezmoi already manages; review and commit in `~/.local/share/chezmoi` afterwards. | +| GHQ Update | see below | Updates every ghq-managed repo. | + +**~/.config/topgrade.toml** + +```toml +[pre_commands] +"Chezmoi Re-Add" = "chezmoi re-add" +"GHQ Update" = "ghq list | ghq get -u -s" +``` + +Post-commands run after everything else: + +| Name | Command | +| --- | --- | +| Hermes Update | `hermes update --backup --yes` | +| Herdr Update | `herdr update` | + +The post-commands assume 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. diff --git a/docs/tools/yazi.md b/docs/tools/yazi.md new file mode 100644 index 0000000..25ec26e --- /dev/null +++ b/docs/tools/yazi.md @@ -0,0 +1,270 @@ +# Yazi + +Yazi file manager config — layout, openers, bat previews, keymap, plugins, flavors, and the Neovim bridge. + +[Yazi](https://yazi-rs.github.io) is a terminal file manager. It is the default way to browse files here: shell keybindings, aliases, and a kitty shortcut all open it, and it hands files to Neovim. + +| | | +| --- | --- | +| Source | [prdlk/yazi](https://github.com/prdlk/yazi) via `.chezmoiexternals/yazi.toml` (`git-repo`, pulled `--ff-only` every 168h) | +| Target | `~/.config/yazi/` (git checkout; edit in place, commit and push from there) | +| Files | `yazi.toml`, `keymap.toml`, `init.lua`, `package.toml`, `theme.toml`, `vfs.toml`, `flavors/{cyberdream,ii-auto}.yazi/flavor.toml`, `plugins/bunny.yazi/` (vendored) | +| Helper | `dot_local/bin/executable_yazi-nvim-open` → `~/.local/bin/yazi-nvim-open` | +| Packages | `yazi` plus preview backends `ffmpeg`, `ffmpegthumbnailer`, `poppler`, `resvg`, `imagemagick`, `7zip`, `unzip` | +| Plugins | `run_onchange_after_install-yazi-plugins.sh.tmpl` → `ya pkg install` | + +The whole directory is a symlink into the source tree, so edits apply without `chezmoi apply`. + +```text +yazi/ + yazi.toml + keymap.toml + init.lua + package.toml + theme.toml + vfs.toml + flavors/ + cyberdream.yazi/ + flavor.toml + ii-auto.yazi/ + flavor.toml + plugins/ + bunny.yazi/ +``` + +## yazi.toml + +Plain TOML, not a template. The `open` opener runs `xdg-open`. + +**~/.config/yazi/yazi.toml** + +```toml +[mgr] +ratio = [0, 2, 6] + +[opener] +play = [ + { run = "mpv %s", orphan = true, for = "unix" }, +] +edit = [ + { run = 'yazi-nvim-open %s', block = true, for = "unix" }, +] +open = [ + { run = "xdg-open %s1", desc = "Open" }, +] + +[open] +prepend_rules = [ + { url = "*.{md,markdown}", use = [ "fry", "edit", "open" ] }, +] + +[[plugin.prepend_previewers]] +mime = "text/*" +run = 'piper -- bat -p --color=always --terminal-width=$w "$1"' + +[[plugin.prepend_previewers]] +mime = "application/{mbox,javascript,wine-extension-ini}" +run = 'piper -- bat -p --color=always --terminal-width=$w "$1"' +``` + +| Setting | Effect | +| --- | --- | +| `mgr.ratio = [0, 2, 6]` | Hides the parent column; the file list takes 2/8 of the width and the preview 6/8. | +| `opener.play` | `mpv`, detached from yazi (`orphan = true`). | +| `opener.edit` | `yazi-nvim-open`, blocking, so yazi waits for the editor. | +| `opener.open` | `xdg-open` on the first selected file. | +| `open.prepend_rules` | Markdown files list `fry`, then `edit`, then `open`. No `fry` opener is defined in this file. | +| Previewers | Text MIME types, plus mbox, JavaScript, and wine `.ini`, preview through the `piper` plugin running `bat -p --color=always`, so previews use the [bat](bat.md) cyberdream theme. Markdown falls under `text/*` too. | + +## Keymap + +All bindings in `keymap.toml` are `[[mgr.prepend_keymap]]` entries, so they take priority over yazi's defaults and leave the rest of the default keymap intact. + +### Navigation + +| Keys | Action | +| --- | --- | +| <kbd>l</kbd> | `plugin smart-enter`: enter a directory, or open a file | +| <kbd>g</kbd> <kbd>r</kbd> | cd to the git root (`git rev-parse --show-toplevel`) | +| <kbd>g</kbd> <kbd>C</kbd> | cd to `~/.local/share/chezmoi` | +| <kbd>g</kbd> <kbd>d</kbd> | cd to `~/Downloads` | +| <kbd>g</kbd> <kbd>D</kbd> <kbd>d</kbd> | cd to `$GHQ_ROOT/github.com` | +| <kbd>g</kbd> <kbd>D</kbd> <kbd>w</kbd> | cd to `$GHQ_ROOT/github.com/wltbs` | +| <kbd>g</kbd> <kbd>D</kbd> <kbd>p</kbd> | cd to `$GHQ_ROOT/github.com/prdlk` | +| <kbd>g</kbd> <kbd>l</kbd> | cd to `~/.local` | +| <kbd>g</kbd> <kbd>p</kbd> | cd to `~/Pictures` | +| <kbd>g</kbd> <kbd>o</kbd> <kbd>p</kbd> | cd to `~/Documents/Obsidian/Personal` | +| <kbd>g</kbd> <kbd>o</kbd> <kbd>r</kbd> | cd to `~/Documents/Obsidian/Research` | +| <kbd>g</kbd> <kbd>o</kbd> <kbd>w</kbd> | cd to `~/Documents/Obsidian/Walletbase` | +| <kbd>g</kbd> <kbd>b</kbd> | Back to the previous directory | +| <kbd>g</kbd> <kbd>f</kbd> | Forward to the next directory | +| <kbd>g</kbd> <kbd>m</kbd> <kbd>p</kbd> | cd to `sftp://gdrive-personal` | +| <kbd>g</kbd> <kbd>m</kbd> <kbd>s</kbd> | cd to `sftp://gdrive-sonr` | +| <kbd>g</kbd> <kbd>m</kbd> <kbd>h</kbd> | cd to `sftp://gdrive-hyperauth` | +| <kbd>;</kbd> | Open the bunny hop menu | +| <kbd>'</kbd> | Bunny fuzzy search over hops | + +`$GHQ_ROOT` is `~/Code`, exported in `dot_config/fish/conf.d/10-env.fish`, `dot_zshrc`, and `dot_bashrc`. The `g m` bindings need the SFTP services in `vfs.toml`, which are commented out (see [vfs.toml](#vfstoml)). + +### Finding and opening + +| Keys | Action | +| --- | --- | +| <kbd>F</kbd> | `plugin smart-filter`: live filter; enters the directory or opens the file when one match remains | +| <kbd>Ctrl</kbd>+<kbd>t</kbd> | `plugin tv`: jump to a file with television | +| <kbd>Ctrl</kbd>+<kbd>g</kbd> | `plugin tv ghq`: jump to a ghq repo | +| <kbd>Ctrl</kbd>+<kbd>d</kbd> | `plugin tv dirs`: jump to a directory | +| <kbd>Ctrl</kbd>+<kbd>f</kbd> | `plugin tv text`: search text and open the match in Neovim at that line | +| <kbd>Ctrl</kbd>+<kbd>v</kbd> | `yazi-nvim-open vsplit` on the selection (inside an nvim terminal only) | +| <kbd>Ctrl</kbd>+<kbd>x</kbd> | `yazi-nvim-open split` on the selection (inside an nvim terminal only) | + +The `tv` plugin shells out to [television](https://github.com/alexpasmantier/television), which is not in `packages.yaml`. + +### Files and session + +| Keys | Action | +| --- | --- | +| <kbd>A</kbd> | Create a directory (`create --dir`) | +| <kbd>N</kbd> | Bulk-create files (`bulk_create`) | +| <kbd>Shift</kbd>+<kbd>Tab</kbd> | Drop into `$SHELL` in the current directory (blocking) | +| <kbd>Ctrl</kbd>+<kbd>q</kbd> | Quit | + +In the shell opened by <kbd>Shift</kbd>+<kbd>Tab</kbd>, the `q` function (fish, bash, zsh) runs `ya emit quit` when `$YAZI_ID` is set, then exits. That closes the parent yazi too instead of returning to it. + +## Plugins + +`package.toml` pins every plugin to a commit and hash. `~/.config/yazi` is the [prdlk/yazi](https://github.com/prdlk/yazi) checkout, so `ya pkg install` writes plugins into its `plugins/`, which that repo's `.gitignore` excludes (`plugins/*`, `!plugins/bunny.yazi/`). The post-apply script reinstalls from the manifest: + +**run_onchange_after_install-yazi-plugins.sh.tmpl** + +```sh +#!/bin/sh +# Install the yazi plugins pinned in ~/.config/yazi/package.toml whenever it +# changes. ~/.config/yazi is a git-repo external (prdlk/yazi); plugins land in +# its plugins/ dir (gitignored there, except the vendored bunny.yazi). +{{- $pkg := joinPath .chezmoi.homeDir ".config/yazi/package.toml" }} +# package.toml hash: {{ if stat $pkg }}{{ include $pkg | sha256sum }}{{ end }} +set -eu +command -v ya >/dev/null 2>&1 || exit 0 +[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/yazi/package.toml" ] || exit 0 +# ya's clone cache is disposable and clones made by an older ya can break a +# newer one, so rebuild it once before giving up. +ya pkg install || { + rm -rf "${XDG_CACHE_HOME:-$HOME/.cache}/yazi/packages" + ya pkg install +} +``` + +The embedded hash makes chezmoi re-run the script whenever `package.toml` changes. + +bunny is not in `package.toml`: it is vendored at `71b14a3` in `plugins/bunny.yazi/` of the yazi repo, because its repo contains a Git symlink to a directory (`test/plugins/bunny.yazi -> ../..`) that `ya pkg` cannot materialize. To update it, re-copy the files from upstream. + +| Plugin | Rev | Used by | +| --- | --- | --- | +| `yazi-rs/plugins:smart-filter` | `efa4d79` | <kbd>F</kbd> | +| `uhs-robert/sshfs` | `a8b8903` | `require("sshfs"):setup()` in `init.lua` | +| `yazi-rs/plugins:smart-enter` | `efa4d79` | <kbd>l</kbd> | +| `yazi-rs/plugins:piper` | `efa4d79` | bat previewers in `yazi.toml` | +| `Rolv-Apneseth/starship` | `ea92cf4` | Installed; not set up in `init.lua` | +| `mikavilpas/easyjump.yazi:easyjump` | `4aa1a06` | Installed; not bound in `keymap.toml` | +| `cap153/tv` | `b6b1f12` | <kbd>Ctrl</kbd>+<kbd>t</kbd>/<kbd>g</kbd>/<kbd>d</kbd>/<kbd>f</kbd> | +| `stelcodes/bunny` | `71b14a3` (vendored) | <kbd>;</kbd> and <kbd>'</kbd>, configured in `init.lua` | +| `coder0x6675/osc7` | `ae73046` | Installed; not referenced in config | +| `WhoSowSee/mdv-previewer` | `ea4732b` | Installed; not referenced in `yazi.toml` | +| `yazi-rs/plugins:vcs-files` | `efa4d79` | Installed; not bound in `keymap.toml` | +| `yazi-rs/plugins:git` | `efa4d79` | `require("git"):setup { order = 1500 }` | +| `yazi-rs/plugins:no-status` | `efa4d79` | `require("no-status"):setup()` | + +`[flavor] deps` is empty: flavors ship as files in `flavors/`, not as packages. + +### init.lua + +**~/.config/yazi/init.lua** + +```lua +require("sshfs"):setup() +require("bunny"):setup({ hops = { ... }, desc_strategy = "path", ephemeral = true, tabs = true, notify = false, fuzzy_cmd = "fzf" }) +require("git"):setup { order = 1500 } +require("no-status"):setup() +``` + +- **sshfs**: default setup, for mounting remote hosts over SSHFS. +- **git**: git status signs in the file list, ordered at `1500` in the linemode. +- **no-status**: removes the status bar. +- **bunny**: bookmark "hops", with ephemeral hops and tab hops on, no notification after hopping, `fzf` for fuzzy search, and the path as the label when a hop has no `desc`. + +| Hop key | Path | Label | +| --- | --- | --- | +| <kbd>/</kbd> | `/` | | +| <kbd>t</kbd> | `/tmp` | | +| <kbd>~</kbd> | `~` | Home | +| <kbd>m</kbd> | `~/Music` | Music | +| <kbd>d</kbd> | `~/Desktop` | Desktop | +| <kbd>D</kbd> | `~/Developer` | Developer | +| <kbd>c</kbd> | `~/.config` | Config files | +| <kbd>l</kbd> <kbd>s</kbd> | `~/.local/share` | Local share | +| <kbd>l</kbd> <kbd>b</kbd> | `~/.local/bin` | Local bin | +| <kbd>l</kbd> <kbd>t</kbd> | `~/.local/state` | Local state | + +## Theme and flavors + +**~/.config/yazi/theme.toml** + +```toml +[flavor] +light = "cyberdream" +dark = "cyberdream" +use = "cyberdream" +``` + +Cyberdream is active in both light and dark mode, the palette shared with Ghostty, tmux, nvim, and television. Two flavors ship in `flavors/`: + +| Flavor | Origin | Notes | +| --- | --- | --- | +| `cyberdream.yazi` | Hand-maintained cyberdream palette | Active. Sets `syntect_theme = "~/.config/bat/themes/cyberdream.tmTheme"`, so yazi's built-in code preview shares the [bat](bat.md) theme. Cyan cwd (`#5ef1ff`), green find keyword (`#5eff6c`), yellow and red copy/cut markers. | +| `ii-auto.yazi` | Generated by the ii wallpaper theming system ("Do not edit manually") | Not selected. Monochrome palette taken from the wallpaper. | + +To switch, change `use` (and `light`/`dark`) in `theme.toml` to `ii-auto`. + +### Icons + +`theme.toml` also carries a large `[icon]` table: + +- `prepend_dirs`: Nerd Font icons for named directories: `Applications`, `Code`, `Desktop`, `Developer`, `github.com`, `prdlk`, `wltbs`, `Shared`, `Templates`, `env`, `go`, `js`, `dart`, `py`, `rs`, `tex`, `md`, `docs`, `prad.codes`. +- `files` and `exts`: several hundred filename and extension rules, from dotfiles like `.gitignore` and `.zshrc` to formats like `kicad_pcb` and `wrangler.toml`. Each rule sets a Nerd Font glyph and a foreground color from the Catppuccin Mocha palette (`#a6e3a1`, `#f38ba8`, `#89b4fa`, `#cba6f7`, `#fab387`, ...). + +Glyphs need a Nerd Font. The terminal uses VictorMono Nerd Font (see [Terminal](../terminal/README.md)). + +## vfs.toml + +Every line is commented out. The file sketches three SFTP services (`gdrive-personal`, `gdrive-sonr`, `gdrive-hyperauth`) on local ports, meant to be served by a local SFTP bridge to Google Drive. Until they are uncommented and the bridge is running, the <kbd>g</kbd> <kbd>m</kbd> bindings have nothing to connect to. + +## Neovim bridge: yazi-nvim-open + +`~/.local/bin/yazi-nvim-open [vsplit|split|tabedit] file...` backs the `edit` opener and the <kbd>Ctrl</kbd>+<kbd>v</kbd>/<kbd>Ctrl</kbd>+<kbd>x</kbd> bindings. It lives on `PATH` because yazi does not expand `$HOME` in opener commands. + +1. **Parse mode** + + A first argument of `vsplit`, `split`, or `tabedit` selects the mode; anything else means `edit`. + +2. **Standalone yazi ($NVIM unset)** + + `edit` runs `exec nvim "$@"`. Split modes do nothing and exit 0. + +3. **Inside an nvim terminal ($NVIM set)** + + Each file is resolved with `realpath`, escaped for a Vimscript string, and sent to the host with `nvim --server "$NVIM" --remote-expr "v:lua.EditFromYazi(mode, path)"`. The nvim side opens the file and hides the yazi window. + +Set `YAZI_OPEN_TRACE` to a file path to log each call's `$NVIM`, mode, and arguments. + +## Launching yazi + +| Entry point | Behavior | +| --- | --- | +| `y` / `yy` (fish functions) | Run yazi with `--cwd-file`, then `cd` to the directory yazi was in on exit. The two are identical apart from `y` calling `command rm`. | +| `yy` (bash, zsh functions) | Same wrapper for bash and zsh. | +| <kbd>Ctrl</kbd>+<kbd>e</kbd> / <kbd>Ctrl</kbd>+<kbd>f</kbd> | fish and zsh keybindings that run `yy` and repaint the prompt. | +| <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>f</kbd> | [Kitty](../terminal/kitty.md): yazi in a new tab at the current directory. | +| Aliases | `e.y`, `e.k`, `e.n`, `e.f`, `e.v` open config directories in yazi; `cdc`, `cdl`, `cdw`, and `,,` (fish only; chezmoi source) cd first, then start yazi. | + +[tmux](../terminal/tmux.md) sets `allow-passthrough on` so yazi's kitty-protocol image previews work inside tmux. Kitty's tab bar and the tmux window-name map show a folder icon for yazi. See [aliases](../shell/aliases.md) and [fish](../shell/fish.md) for the shell side. diff --git a/dot_bashrc b/dot_bashrc new file mode 100644 index 0000000..299e59b --- /dev/null +++ b/dot_bashrc @@ -0,0 +1,93 @@ +# +# ~/.bashrc — managed by chezmoi +# + +alias vim="nvim" +alias vi="nvim" + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +# PATH extras / tool envs (machine-optional, guarded) +case ":$PATH:" in *":$HOME/.local/bin:"*) ;; *) PATH="$HOME/.local/bin:$PATH" ;; esac +[ -f "$HOME/.cargo/env" ] && . "$HOME/.cargo/env" +[ -d "$HOME/.maestro/bin" ] && PATH="$PATH:$HOME/.maestro/bin" + +# Go — GOPATH/GOBIN under ~/.local/share to keep $HOME clean. +# GOROOT is provided by mise (toolchain lives under ~/.local/share/mise). +export GOPATH="$HOME/.local/share/go" +export GOBIN="$GOPATH/bin" +case ":$PATH:" in *":$GOBIN:"*) ;; *) PATH="$GOBIN:$PATH" ;; esac + +# Repo roots (ghq) — same as fish's conf.d/10-env.fish; the ghq-repos tv +# cable (ctrl-o) lists this root. +export GHQ_ROOT="$HOME/Code" +export CODE_ROOT="$HOME/Code" + +# Android SDK — relocated under ~/.local/share/android. +export ANDROID_HOME="$HOME/.local/share/android" +export ANDROID_SDK_ROOT="$ANDROID_HOME" +for _adir in "$ANDROID_HOME/platform-tools" "$ANDROID_HOME/cmdline-tools/latest/bin" "$ANDROID_HOME/emulator"; do + case ":$PATH:" in *":$_adir:"*) ;; *) [ -d "$_adir" ] && PATH="$PATH:$_adir" ;; esac +done +unset _adir + +# GITHUB_TOKEN from gh's keyring login — never stored on disk. An inherited +# value wins, so nested shells skip the gh call. +if [ -z "${GITHUB_TOKEN:-}" ] && command -v gh >/dev/null 2>&1; then + _gh_token="$(gh auth token 2>/dev/null)" + [ -n "$_gh_token" ] && export GITHUB_TOKEN="$_gh_token" + unset _gh_token +fi + +# Shared aliases (same set as fish/zsh; source of truth: .chezmoidata/aliases.yaml) +[ -f "$HOME/.config/shell/aliases.sh" ] && . "$HOME/.config/shell/aliases.sh" + +# Shell functions — one file per function, bash ports of the fish ones +# (cwd/history-touching helpers; standalone tools live in ~/.local/bin) +if [ -d "$HOME/.config/bash/functions" ]; then + for _f in "$HOME/.config/bash/functions"/*.bash; do + [ -r "$_f" ] && . "$_f" + done + unset _f +fi + +# Flyline — enhanced Bash line editing (machine-optional, guarded) +[ -f "$HOME/.local/lib/libflyline.so" ] && enable -f "$HOME/.local/lib/libflyline.so" flyline + + +# Generated for envman. Do not edit. +[ -s "$HOME/.config/envman/load.sh" ] && . "$HOME/.config/envman/load.sh" + +# Prompt — starship, consistent with fish +command -v starship >/dev/null 2>&1 && eval "$(starship init bash)" + +# television: _tv completion (its ctrl-r is taken over by atuin below) +command -v tv >/dev/null 2>&1 && eval "$(tv init bash)" + +# Readline keybinds — bash ports of fish_user_key_bindings.fish (tv cables) +[ -f "$HOME/.config/bash/keybinds.bash" ] && . "$HOME/.config/bash/keybinds.bash" + +# atuin comes from the package manager (/usr/bin). No ~/.atuin/bin: an old +# standalone install there shadowed it on PATH and its older schema rejected +# the history DB the newer daemon had migrated. +command -v atuin >/dev/null 2>&1 && eval "$(atuin init bash)" + +# >>> termium >>> +case ":$PATH:" in *:'/home/prad/.local/bin':*) ;; *) export PATH='/home/prad/.local/bin':"$PATH" ;; esac +# <<< termium <<< + + +# Added by LM Studio CLI (lms) +export PATH="$PATH:/home/prad/.lmstudio/bin" +# End of LM Studio CLI section + + +if command -v wt >/dev/null 2>&1; then eval "$(command wt config shell init bash)"; fi + +# >>> open-knowledge cli >>> +# ! Contents within this block are managed by OpenKnowledge. Do not edit. +# ! Delete this whole block to opt out — OpenKnowledge will not re-add it. +[ -f "$HOME/.ok/env.sh" ] && . "$HOME/.ok/env.sh" +# <<< open-knowledge cli <<< + diff --git a/dot_config/atuin/private_config.toml b/dot_config/atuin/private_config.toml new file mode 100644 index 0000000..672cd07 --- /dev/null +++ b/dot_config/atuin/private_config.toml @@ -0,0 +1,414 @@ +filter_mode_shell_up_key_binding = "directory" # or global, host, directory, etc + +[dotfiles] +enabled = true + +## Base directory for Atuin data files (databases, keys, session, etc.) +## All data file paths default to being relative to this directory. +## linux/mac: ~/.local/share/atuin (or XDG_DATA_HOME/atuin) +## windows: %USERPROFILE%/.local/share/atuin +# data_dir = "~/.local/share/atuin" + +## where to store your database, default is your system data directory +## linux/mac: ~/.local/share/atuin/history.db +## windows: %USERPROFILE%/.local/share/atuin/history.db +# db_path = "~/.history.db" + +## where to store your encryption key, default is your system data directory +## linux/mac: ~/.local/share/atuin/key +## windows: %USERPROFILE%/.local/share/atuin/key +# key_path = "~/.key" + +## where to store your auth session token, default is your system data directory +## linux/mac: ~/.local/share/atuin/session +## windows: %USERPROFILE%/.local/share/atuin/session +# session_path = "~/.session" + +## date format used, either "us" or "uk" +# dialect = "us" + +## default timezone to use when displaying time +## either "l", "local" to use the system's current local timezone, or an offset +## from UTC in the format of "<+|->H[H][:M[M][:S[S]]]" +## for example: "+9", "-05", "+03:30", "-01:23:45", etc. +# timezone = "local" + +## enable or disable automatic sync +auto_sync = true + +## enable or disable automatic update checks +update_check = true + +## which release channel to follow with `atuin update` and update checks +## "stable" for stable releases only, "nightly" to also receive prereleases +# update_channel = "stable" + +## address of the sync server +# sync_address = "https://api.atuin.sh" + +## how often to sync history. note that this is only triggered when a command +## is ran, so sync intervals may well be longer +## set it to 0 to sync after every command +# sync_frequency = "5m" + +## which search mode to use for interactive search +## possible values: prefix, fulltext, fuzzy, daemon-fuzzy +# search_mode = "fuzzy" + +## which search mode to use when atuin is invoked from a shell up-key binding +## the accepted values are identical to those of "search_mode" +## leave unspecified to use same mode set in "search_mode" +# search_mode_shell_up_key_binding = "fuzzy" + +## which filter mode to use for interactive search +## possible values: "global", "host", "session", "session-preload", "directory", "workspace" +## consider using search.filters to customize the enablement and order of filter modes +# filter_mode = "global" + +## which filter mode to use when atuin is invoked from a shell up-key binding +## the accepted values are identical to those of "filter_mode" +## leave unspecified to use same mode set in "filter_mode" +# filter_mode_shell_up_key_binding = "global" + +## With workspace filtering enabled, Atuin will filter for commands executed +## in any directory within a git repository tree (default: false). +## +## To use workspace mode by default when available, set this to true and +## set filter_mode to "workspace" or leave it unspecified and +## set search.filters to include "workspace" before other filter modes. +workspaces = true + +## which display style to use +## possible values: auto, full, compact +style = "auto" + +## the maximum number of lines the interface should take up +## set it to 0 to always go full screen +# inline_height = 30 + +## the maximum number of lines the interface should take up +## when atuin is invoked from a shell up-key binding +## the accepted values are identical to those of "inline_height" +inline_height_shell_up_key_binding = 20 + +## Invert the UI - put the search bar at the top , Default to `false` +# invert = true + +## enable or disable showing a preview of the selected command +## useful when the command is longer than the terminal width and is cut off +# show_preview = true + +## what to do when the escape key is pressed when searching +## possible values: return-original, return-query +# exit_mode = "return-original" + +## possible values: emacs, subl +# word_jump_mode = "emacs" + +## characters that count as a part of a word +# word_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + +## number of context lines to show when scrolling by pages +# scroll_context_lines = 1 + +## use ctrl instead of alt as the shortcut modifier key for numerical UI shortcuts +## alt-0 .. alt-9 +# ctrl_n_shortcuts = false + +## Show numeric shortcuts (1..9) beside list items in the TUI +## set to false to hide the moving numbers if you find them distracting +# show_numeric_shortcuts = true + +## default history list format - can also be specified with the --format arg +# history_format = "{time}\t{command}\t{duration}" + +## Defaults to true. If enabled, strip trailing spaces and tabs from commands +## before saving them to history. +## Escaped trailing spaces (for example `printf foo\\ `) are preserved. +# strip_trailing_whitespace = true + +## prevent commands matching any of these regexes from being written to history. +## Note that these regular expressions are unanchored, i.e. if they don't start +## with ^ or end with $, they'll match anywhere in the command. +## For details on the supported regular expression syntax, see +## https://docs.rs/regex/latest/regex/#syntax +# history_filter = [ +# "^secret-cmd", +# "^innocuous-cmd .*--secret=.+", +# ] + +## prevent commands run with cwd matching any of these regexes from being written +## to history. Note that these regular expressions are unanchored, i.e. if they don't +## start with ^ or end with $, they'll match anywhere in CWD. +## For details on the supported regular expression syntax, see +## https://docs.rs/regex/latest/regex/#syntax +# cwd_filter = [ +# "^/very/secret/area", +# ] + +## Configure the maximum height of the preview to show. +## Useful when you have long scripts in your history that you want to distinguish +## by more than the first few lines. +# max_preview_height = 4 + +## Configure whether or not to show the help row, which includes the current Atuin +## version (and whether an update is available), a keymap hint, and the total +## amount of commands in your history. +# show_help = true + +## Configure whether or not to show tabs for search and inspect +# show_tabs = true + +## Configure whether or not the tabs row may be auto-hidden, which includes the current Atuin +## tab, such as Search or Inspector, and other tabs you may wish to see. This will +## only be hidden if there are fewer than this count of lines available, and does not affect the use +## of keyboard shortcuts to switch tab. 0 to never auto-hide, default is 8 (lines). +## This is ignored except in `compact` mode. +# auto_hide_height = 8 + +## Defaults to true. This matches history against a set of default regex, and will not save it if we get a match. Defaults include +## 1. AWS key id +## 2. Github pat (old and new) +## 3. Slack oauth tokens (bot, user) +## 4. Slack webhooks +## 5. Stripe live/test keys +# secrets_filter = true + +## Defaults to true. If enabled, upon hitting enter Atuin will immediately execute the command, +## whereas tab will put the command in the prompt for editing. +## If set to false, both enter and tab will place the command in the prompt for editing. +## This applies for new installs. Old installs will keep the old behaviour unless configured otherwise. +enter_accept = true +search_mode = "daemon-fuzzy" + +## Defaults to false. If enabled, when triggered after &&, || or |, Atuin will complete commands to chain rather than replace the current line. +# command_chaining = false + +## This specifies the keymap on the startup of `atuin search`. If this is set +## to "auto", the startup keymap mode in the Atuin search is automatically +## selected based on the shell's keymap where the keybinding is defined. If +## this is set to "emacs", "vim-insert", or "vim-normal", the startup keymap +## mode in the Atuin search is forced to be the specified one. +# keymap_mode = "emacs" + +## Cursor style in each keymap mode. If specified, the cursor style is changed +## in entering the cursor shape. Available values are "default" and +## "{blink,steady}-{block,underline,bar}". +# keymap_cursor = { emacs = "blink-block", vim_insert = "blink-block", vim_normal = "steady-block" } + +# network_connect_timeout = 5 +# network_timeout = 30 + +## Extra HTTP headers to send on every request to the sync server. Useful when +## a self-hosted server sits behind a proxy that requires its own auth header, +## e.g. Cloudflare Access. Headers that Atuin sets itself (e.g. Authorization) +## cannot be overridden. When set, cross-origin redirects are refused so these +## headers are never sent to a different origin. +# extra_headers = { "CF-Access-Client-Id" = "...", "CF-Access-Client-Secret" = "..." } + +## Timeout (in seconds) for acquiring a local database connection (sqlite) +# local_timeout = 5 + +## Set this to true and Atuin will minimize motion in the UI - timers will not update live, etc. +## Alternatively, set env NO_MOTION=true +# prefers_reduced_motion = false + +## Defaults to true. Configures whether to store commands that failed (those with non-zero exit status) or not. +# store_failed = true + +[stats] +## Set commands where we should consider the subcommand for statistics. Eg, kubectl get vs just kubectl +# common_subcommands = [ +# "apt", +# "cargo", +# "composer", +# "dnf", +# "docker", +# "dotnet", +# "git", +# "go", +# "ip", +# "jj", +# "kubectl", +# "nix", +# "nmcli", +# "npm", +# "pecl", +# "pnpm", +# "podman", +# "port", +# "systemctl", +# "tmux", +# "yarn", +# ] + +## Set commands that should be totally stripped and ignored from stats +# common_prefix = ["sudo"] + +## Set commands that will be completely ignored from stats +# ignored_commands = [ +# "cd", +# "ls", +# "vi" +# ] + +[keys] +# Defaults to true. If disabled, using the up/down key won't exit the TUI when scrolled past the first/last entry. +# scroll_exits = true + +# Defaults to true. The left arrow key will exit the TUI when scrolling before the first character +# exit_past_line_start = true + +# Defaults to true. The right arrow key performs the same functionality as Tab and copies the selected line to the command line to be modified. +# accept_past_line_end = true + +# Defaults to false. The left arrow key performs the same functionality as Tab and copies the selected line to the command line to be modified. +# accept_past_line_start = false + +# Defaults to false. The backspace key performs the same functionality as Tab and copies the selected line to the command line to be modified when at the start of the line. +# accept_with_backspace = false + +[preview] +## which preview strategy to use to calculate the preview height (respects max_preview_height). +## possible values: auto, static +## auto: length of the selected command. +## static: length of the longest command stored in the history. +## fixed: use max_preview_height as fixed height. +# strategy = "auto" + +[daemon] +enabled = true +autostart = true +## Enables using the daemon to sync. +# enabled = false + +## Automatically start and manage the daemon when needed. +## Not compatible with `systemd_socket = true`. +# autostart = false + +## How often the daemon should sync in seconds +# sync_frequency = 300 + +## The path to the unix socket used by the daemon (on unix systems) +## linux/mac: ~/.local/share/atuin/atuin.sock +## windows: Not Supported +# socket_path = "~/.local/share/atuin/atuin.sock" + +## The daemon pidfile used for lifecycle management. +## Defaults to the Atuin data directory. +# pidfile_path = "~/.local/share/atuin/atuin-daemon.pid" + +## Use systemd socket activation rather than opening the given path (the path must still be correct for the client) +## linux: false +## mac/windows: Not Supported +# systemd_socket = false + +## The port that should be used for TCP on non unix systems +# tcp_port = 8889 + +[pty_proxy] +## If enabled, `atuin init` will first re-exec your shell inside `atuin pty-proxy`, +## so you don't need a separate `eval "$(atuin pty-proxy init)"` line in your shell +## config. Supported for bash, zsh, fish and nu on unix platforms. +## For the fastest startup, keep your `atuin init` line near the top of your shell +## config: everything sourced before it runs again inside the proxy. +## Safe to combine with an existing `atuin pty-proxy init` line — the proxy only +## starts once. +enabled = false + +[theme] +## Color theme to use for rendering in the terminal. +## There are some built-in themes, including the base theme ("default"), +## "autumn" and "marine". You can add your own themes to the "./themes" subdirectory of your +## Atuin config (or ATUIN_THEME_DIR, if provided) as TOML files whose keys should be one or +## more of AlertInfo, AlertWarn, AlertError, Annotation, Base, Guidance, Important, and +## the string values as lowercase entries from this list: +## https://ogeon.github.io/docs/palette/master/palette/named/index.html +## If you provide a custom theme file, it should be called "NAME.toml" and the theme below +## should be the stem, i.e. `theme = "NAME"` for your chosen NAME. +name = "cherry-blossom" + +## Whether the theme manager should output normal or extra information to help fix themes. +## Boolean, true or false. If unset, left up to the theme manager. +# debug = true + +[search] +## The list of enabled filter modes, in order of priority. +## The "workspace" mode is skipped when not in a workspace or workspaces = false. +## Default filter mode can be overridden with the filter_mode setting. +# filters = ["global", "host", "session", "workspace", "directory", "session-preload"] + +## Filter interactive search results by the shell used to run the command: +## +## - "all": show all commands +## +## - "auto": show commands run by the current type of shell, or commands that +## have no shell recorded (for example, from before Atuin started tracking it) +## +## - array of strings: show commands run by any shell in the array; "" includes +## commands that have no recorded shell +# shells = "auto" + +[tmux] +## Enable using atuin with tmux popup (requires tmux >= 3.2) +## When enabled and running inside tmux, Atuin will use a popup window for interactive search. +## Set to false to disable the popup. +## This can also be controlled with the ATUIN_TMUX_POPUP environment variable. +## Note: The tmux popup is currently supported in zsh, bash, and fish shells. This currently doesn't work with iTerm native tmux integration. +enabled = true + +## Width of the tmux popup window +## Can be a percentage, or integer (e.g. "100" means 100 characters wide) +width = "80%" + +## Height of the tmux popup window +## Can be a percentage, or integer (e.g. "100" means 100 lines tall) +height = "60%" + +[ui] + +[ai] +enabled = true +## Columns to display in the interactive search, from left to right. +## The selection indicator (" > ") is always shown first implicitly. +## +## Each column can be specified as a simple string (uses default width) +## or as an object with type, width, and expand: +## { type = "directory", width = 30, expand = true } +## +## Available column types (with default widths): +## duration (5) - Command execution duration (e.g., "123ms") +## time (8) - Relative time since execution (e.g., "59m ago") +## datetime (16) - Absolute timestamp (e.g., "2025-01-22 14:35") +## directory (20) - Working directory (truncated if too long) +## host (15) - Hostname where command was run +## user (10) - Username +## exit (3) - Exit code (colored by success/failure) +## command (*) - The command itself (expands by default) +## +## The "expand" option (default: true for command, false for others) makes a +## column fill remaining space. Only one column should have expand = true. +## +## Default: +# columns = ["duration", "time", "command"] +## +## Examples: +## +## Minimal - more space for commands: +# columns = ["duration", "command"] +## +## With wider directory column: +# columns = ["duration", { type = "directory", width = 30 }, "command"] +## +## Show host for multi-machine sync users: +# columns = ["duration", "time", "host", "command"] +## +## Show exit codes prominently: +# columns = ["exit", "duration", "command"] +## +## Make directory expand instead of command: +# columns = ["duration", "time", { type = "directory", expand = true }, { type = "command", expand = false }] + +## Syntax highlight commands in the search results, using the theme's colors. +## Not available on all platforms (e.g. Windows). +syntax_highlight = true diff --git a/dot_config/atuin/themes/cherry-blossom.toml b/dot_config/atuin/themes/cherry-blossom.toml new file mode 100644 index 0000000..8895ef0 --- /dev/null +++ b/dot_config/atuin/themes/cherry-blossom.toml @@ -0,0 +1,18 @@ +[theme] +name = "cherry-blossom" + +[colors] +AlertInfo = "#a78266" +AlertWarn = "#ae825f" +AlertError = "#bf615d" +Annotation = "#a6958f" +Guidance = "#8f9aa0" +Important = "#cf716f" +Title = "#cf716f" +Muted = "#a6958f" +SyntaxCommand = "#cf716f" +SyntaxFlag = "#a78266" +SyntaxString = "#a6b084" +SyntaxVariable = "#c17e4a" +SyntaxOperator = "#ad6756" +SyntaxComment = "#a6958f" diff --git a/dot_config/atuin/themes/cyberdream.toml b/dot_config/atuin/themes/cyberdream.toml new file mode 100644 index 0000000..2209fa1 --- /dev/null +++ b/dot_config/atuin/themes/cyberdream.toml @@ -0,0 +1,18 @@ +[theme] +name = "cyberdream" + +[colors] +AlertInfo = "#5ef1ff" +AlertWarn = "#f1ff5e" +AlertError = "#ff6e5e" +Annotation = "#7b8496" +Guidance = "#5ea1ff" +Important = "#ff5ef1" +Title = "#5ef1ff" +Muted = "#7b8496" +SyntaxCommand = "#5ea1ff" +SyntaxFlag = "#5ef1ff" +SyntaxString = "#5eff6c" +SyntaxVariable = "#ff5ef1" +SyntaxOperator = "#ff5ea0" +SyntaxComment = "#7b8496" diff --git a/dot_config/bash/functions/c.bash b/dot_config/bash/functions/c.bash new file mode 100644 index 0000000..b4d1a0a --- /dev/null +++ b/dot_config/bash/functions/c.bash @@ -0,0 +1,8 @@ +# c: clear with no args, cd with one. +c() { + if [ -z "${1-}" ]; then + clear + else + cd "$1" + fi +} diff --git a/dot_config/bash/functions/cd.bash b/dot_config/bash/functions/cd.bash new file mode 100644 index 0000000..8b15f9a --- /dev/null +++ b/dot_config/bash/functions/cd.bash @@ -0,0 +1,23 @@ +# cd with zoxide fallback, else builtin cd. +cd() { + local rc target + if [ $# -eq 0 ]; then + builtin cd "$HOME" + elif [ "$1" = - ]; then + builtin cd - + elif builtin cd "$1" 2>/dev/null; then + : # exact path resolved, nothing else to do + elif command -v zoxide >/dev/null 2>&1; then + target=$(zoxide query -- "$1" 2>/dev/null) + if [ -n "$target" ]; then + builtin cd "$target" + else + builtin cd "$1" # let builtin cd surface the real error + fi + else + builtin cd "$1" + fi + rc=$? + command -v zoxide >/dev/null 2>&1 && zoxide add "$PWD" 2>/dev/null + return $rc +} diff --git a/dot_config/bash/functions/clip-last.bash b/dot_config/bash/functions/clip-last.bash new file mode 100644 index 0000000..acf08d7 --- /dev/null +++ b/dot_config/bash/functions/clip-last.bash @@ -0,0 +1,27 @@ +# Re-run last command, copy output to clipboard. +# History-offset handling: some line editors add the current command to +# history before execution, some after — detect instead of assuming. +clip-last() { + local last copy + last=$(fc -ln -1 -1 2>/dev/null) + last=${last#"${last%%[![:space:]]*}"} # trim leading whitespace + case $last in + clip-last*) + last=$(fc -ln -2 -2 2>/dev/null) + last=${last#"${last%%[![:space:]]*}"} + ;; + esac + if [ -z "$last" ]; then + echo "clip-last: no previous command in history" >&2 + return 1 + fi + if command -v wl-copy >/dev/null 2>&1; then + copy=wl-copy + else + echo "clip-last: no clipboard tool (wl-copy) found" >&2 + return 1 + fi + eval "$last" | "$copy" + command -v notify-send >/dev/null 2>&1 \ + && notify-send -a shell "Clipboard" "Command output copied to clipboard" +} diff --git a/dot_config/bash/functions/ghg.bash b/dot_config/bash/functions/ghg.bash new file mode 100644 index 0000000..43e1527 --- /dev/null +++ b/dot_config/bash/functions/ghg.bash @@ -0,0 +1,8 @@ +# ghq get + cd; clone/path logic lives in ~/.local/bin/ghg-clone. +# (helper is not named ghg: an unrelated cargo binary owns that name) +ghg() { + local dir + dir=$(ghg-clone "$@") || return + cd "$dir" || return + clear && onefetch +} diff --git a/dot_config/bash/functions/ghn.bash b/dot_config/bash/functions/ghn.bash new file mode 100644 index 0000000..06fb089 --- /dev/null +++ b/dot_config/bash/functions/ghn.bash @@ -0,0 +1,6 @@ +# Create a repo (prad.codes/github.com) + cd; logic lives in ~/.local/bin/ghn. +ghn() { + local dir + dir=$(command ghn "$@") || return + cd "$dir" || return +} diff --git a/dot_config/bash/functions/gho.bash b/dot_config/bash/functions/gho.bash new file mode 100644 index 0000000..2791d18 --- /dev/null +++ b/dot_config/bash/functions/gho.bash @@ -0,0 +1,11 @@ +# Pick a ghq repo / Obsidian vault with tv (ghq-repos cable) + cd. +gho() { + local dir + dir=$(tv ghq-repos --inline) || return + [ -n "$dir" ] || return 1 + cd "$dir" || return + clear + if [ -d .git ]; then + onefetch + fi +} diff --git a/dot_config/bash/functions/yy.bash b/dot_config/bash/functions/yy.bash new file mode 100644 index 0000000..01e775c --- /dev/null +++ b/dot_config/bash/functions/yy.bash @@ -0,0 +1,11 @@ +# yazi wrapper: cd to the directory yazi was left in on exit. +yy() { + local tmp cwd + tmp=$(mktemp -t "yazi-cwd.XXXXXX") + command yazi "$@" --cwd-file="$tmp" + cwd=$(cat -- "$tmp" 2>/dev/null) + if [ -n "$cwd" ] && [ "$cwd" != "$PWD" ] && [ -d "$cwd" ]; then + builtin cd -- "$cwd" + fi + rm -f -- "$tmp" +} diff --git a/dot_config/bash/keybinds.bash b/dot_config/bash/keybinds.bash new file mode 100644 index 0000000..669a6ff --- /dev/null +++ b/dot_config/bash/keybinds.bash @@ -0,0 +1,96 @@ +# ~/.config/bash/keybinds.bash — readline ports of the television keys in +# fish_user_key_bindings.fish / zsh keybinds.zsh: +# ctrl-o → gho (ghq-repos cable, cd) ctrl-e → tv git-files (nvim) +# ctrl-p → pj (pj cable) down → pj on an empty prompt +# ctrl-t → tv smart autocomplete (tv init bash ships no ctrl-t) +# Keys owned by kitty.conf never reach the shell: ctrl-h/j/k/l (pass_keys.py). +# +# Every picker runs tv --inline: it opens on the line below the prompt and +# leaves the cursor on that line when it exits. When nothing was printed +# below, the binding steps back up (_kb_up) so readline redraws the prompt in +# place after bind -x; output that must stay (a pj task) is left alone. + +_kb_up() { printf '\033[A' >/dev/tty; } + +# ctrl-e: enter opens nvim, which restores the cursor to tv's line. +_kb_git_files() { + tv git-files --inline </dev/tty + _kb_up +} +bind -x '"\C-e": _kb_git_files' + +# ctrl-p, and down on an empty prompt. pj reports through $PJ_STATE: `open` +# = cancelled, `ran` = a task printed output, empty = no task sources. +_kb_pj() { + local state + state=$(mktemp) || return + PJ_STATE=$state pj "$@" </dev/tty + [ "$(<"$state")" = open ] && _kb_up + rm -f "$state" +} +bind -x '"\C-p": _kb_pj' + +# ctrl-o: gho, split so the prompt is right. bind -x runs in the shell +# process, so the cd persists — but readline keeps drawing the prompt it +# started with. The macro runs \C-x1 (pick with tv, cd), then \C-x2 and \C-x3, +# which _kb_gho rebinds: after a cd, \C-x2 accepts the stashed-empty line +# (bash prints a fresh prompt for the new cwd; nothing reaches history) and +# \C-x3 does gho's clear + onefetch, after which readline redraws that fresh +# prompt below the output; when cancelled both just redraw. \C-x0 restores +# the typed text. +_kb_gho() { + local dir + _kb_line=$READLINE_LINE _kb_point=$READLINE_POINT + dir=$(tv ghq-repos --inline </dev/tty) + _kb_up + if [ -n "$dir" ] && cd "$dir"; then + READLINE_LINE='' READLINE_POINT=0 + bind '"\C-x2": accept-line' + bind -x '"\C-x3": _kb_gho_show' + else + bind '"\C-x2": redraw-current-line' + bind '"\C-x3": redraw-current-line' + fi +} +_kb_gho_show() { + clear + if [ -d .git ]; then + onefetch + fi +} +_kb_restore() { + READLINE_LINE=${_kb_line-} READLINE_POINT=${_kb_point-0} + unset _kb_line _kb_point +} +bind -x '"\C-x1": _kb_gho' +bind -x '"\C-x0": _kb_restore' +bind '"\C-o": "\C-x1\C-x2\C-x3\C-x0"' + +# down: the pj cable on an idle, empty prompt, otherwise history search +# (fish's _pj_bind_down). bind -x can't call readline functions, so _kb_down +# rebinds \C-x5, which the macro sends right after it. +_kb_down() { + if [ -n "$READLINE_LINE" ]; then + bind '"\C-x5": history-search-forward' + return + fi + PJ_QUIET=1 _kb_pj + bind '"\C-x5": redraw-current-line' +} +bind -x '"\C-x4": _kb_down' +bind '"\e[B": "\C-x4\C-x5"' +bind '"\eOB": "\C-x4\C-x5"' + +# ctrl-t: pick with the channel tv guesses from the text left of the cursor +# (shell_integration.channel_triggers) and insert the picks there, quoted. +_kb_tv_autocomplete() { + local pre=${READLINE_LINE:0:READLINE_POINT} out item ins='' + out=$(tv --autocomplete-prompt "$pre" --inline </dev/tty) + _kb_up + while IFS= read -r item; do + [ -n "$item" ] && ins+="$(printf '%q' "$item") " + done <<<"$out" + READLINE_LINE=$pre$ins${READLINE_LINE:READLINE_POINT} + READLINE_POINT=$((${#pre} + ${#ins})) +} +bind -x '"\C-t": _kb_tv_autocomplete' diff --git a/dot_config/bat/config b/dot_config/bat/config new file mode 100644 index 0000000..2b62865 --- /dev/null +++ b/dot_config/bat/config @@ -0,0 +1,25 @@ +# This is `bat`s configuration file. Each line either contains a comment or +# a command-line option that you want to pass to `bat` by default. You can +# run `bat --help` to get a list of all possible configuration options. + +# Specify desired highlighting theme (e.g. "TwoDark"). Run `bat --list-themes` +# for a list of all available themes +--theme="cyberdream" + +# Enable this to use italic text on the terminal. This is not supported on all +# terminal emulators (like tmux, by default): +#--italic-text=always + +# Uncomment the following line to disable automatic paging: +#--paging=never + +# Uncomment the following line if you are using less version >= 551 and want to +# enable mouse scrolling support in `bat` when running inside tmux. This might +# disable text selection, unless you press shift. +#--pager="less --RAW-CONTROL-CHARS --quit-if-one-screen --mouse" + +# Syntax mappings: map a certain filename pattern to a language. +# Example 1: use the C++ syntax for Arduino .ino files +# Example 2: Use ".gitignore"-style highlighting for ".ignore" files +#--map-syntax "*.ino:C++" +#--map-syntax ".ignore:Git Ignore" diff --git a/dot_config/bat/themes/cyberdream.tmTheme b/dot_config/bat/themes/cyberdream.tmTheme new file mode 100644 index 0000000..71fb63c --- /dev/null +++ b/dot_config/bat/themes/cyberdream.tmTheme @@ -0,0 +1,937 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>name</key> + <string>Cyberdream</string> + <key>settings</key> + <array> + <dict> + <key>settings</key> + <dict> + <key>background</key> + <string>#16181a</string> + <key>caret</key> + <string>#ffffff</string> + <key>block_caret</key> + <string>#7b8496</string> + <key>foreground</key> + <string>#ffffff</string> + <key>invisibles</key> + <string>#16181a</string> + <key>lineHighlight</key> + <string>#3c4048</string> + <key>selection</key> + <string>#3c4048</string> + <key>findHighlight</key> + <string>#5ef1ff</string> + <key>findHighlightForeground</key> + <string>#1e2124</string> + <key>selectionBorder</key> + <string>#16181a</string> + <key>activeGuide</key> + <string>#ffbd5e</string> + <key>bracketsForeground</key> + <string>#ff5ea0</string> + <key>bracketsOptions</key> + <string>underline</string> + <key>bracketContentsForeground</key> + <string>#ffffff</string> + <key>bracketContentsOptions</key> + <string>underline</string> + <key>tagsOptions</key> + <string>stippled_underline</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Comment</string> + <key>scope</key> + <string>comment</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#7b8496</string> + <key>fontStyle</key> + <string></string> + </dict> + </dict> + <dict> + <key>name</key> + <string>String</string> + <key>scope</key> + <string>string</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#5eff6c</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Number</string> + <key>scope</key> + <string>constant.numeric</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Built-in constant</string> + <key>scope</key> + <string>constant.language</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>User-defined constant</string> + <key>scope</key> + <string>constant.character, constant.other</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Variable</string> + <key>scope</key> + <string>variable</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string></string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Ruby's @variable</string> + <key>scope</key> + <string>variable.other.readwrite.instance</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string></string> + <key>foreground</key> + <string>#ffbd5e</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>String interpolation</string> + <key>scope</key> + <string>constant.character.escaped, constant.character.escape, string source, string source.ruby</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string></string> + <key>foreground</key> + <string>#ff5ef1</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Ruby Regexp</string> + <key>scope</key> + <string>source.ruby string.regexp.classic.ruby,source.ruby string.regexp.mod-r.ruby</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string></string> + <key>foreground</key> + <string>#ff6e5e</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Keyword</string> + <key>scope</key> + <string>keyword</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffbd5e</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Keyword Operator</string> + <key>scope</key> + <string>keyword.operator</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#bd5eff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Storage</string> + <key>scope</key> + <string>storage</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string></string> + <key>foreground</key> + <string>#ff5ea0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Storage type</string> + <key>scope</key> + <string>storage.type</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#5ef1ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Storage Type Namespace</string> + <key>scope</key> + <string>storage.type.namespace</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#bd5eff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Storage Type Class</string> + <key>scope</key> + <string>storage.type.class</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#bd5eff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Class name</string> + <key>scope</key> + <string>entity.name.class</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>underline</string> + <key>foreground</key> + <string>#bd5eff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Meta Path</string> + <key>scope</key> + <string>meta.path</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>underline</string> + <key>foreground</key> + <string>#5ef1ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Inherited class</string> + <key>scope</key> + <string>entity.other.inherited-class</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic underline</string> + <key>foreground</key> + <string>#bd5eff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Function name</string> + <key>scope</key> + <string>entity.name.function</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string></string> + <key>foreground</key> + <string>#5ea1ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Function argument</string> + <key>scope</key> + <string>variable.parameter</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#bd5eff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Tag name</string> + <key>scope</key> + <string>entity.name.tag</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string></string> + <key>foreground</key> + <string>#5ef1ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Tag attribute</string> + <key>scope</key> + <string>entity.other.attribute-name</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string></string> + <key>foreground</key> + <string>#5ef1ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Library function</string> + <key>scope</key> + <string>support.function</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string></string> + <key>foreground</key> + <string>#5ea1ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Library constant</string> + <key>scope</key> + <string>support.constant</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string></string> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Library class/type</string> + <key>scope</key> + <string>support.type, support.class</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#bd5eff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Library variable</string> + <key>scope</key> + <string>support.other.variable</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string></string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Support Other Namespace</string> + <key>scope</key> + <string>support.other.namespace</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#bd5eff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Invalid</string> + <key>scope</key> + <string>invalid</string> + <key>settings</key> + <dict> + <key>background</key> + <string>#ff5ea0</string> + <key>fontStyle</key> + <string></string> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Invalid deprecated</string> + <key>scope</key> + <string>invalid.deprecated</string> + <key>settings</key> + <dict> + <key>background</key> + <string>#bd5eff</string> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON String</string> + <key>scope</key> + <string>meta.structure.dictionary.json string.quoted.double.json</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>diff.header</string> + <key>scope</key> + <string>meta.diff, meta.diff.header</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#7b8496</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>diff.deleted</string> + <key>scope</key> + <string>markup.deleted</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ff6e5e</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>diff.inserted</string> + <key>scope</key> + <string>markup.inserted</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#5eff6c</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>diff.changed</string> + <key>scope</key> + <string>markup.changed</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#5ef1ff</string> + </dict> + </dict> + <dict> + <key>scope</key> + <string>constant.numeric.line-number.find-in-files - match</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ff5ef1</string> + </dict> + </dict> + <dict> + <key>scope</key> + <string>entity.name.filename</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#5eff6c</string> + </dict> + </dict> + <dict> + <key>scope</key> + <string>message.error</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ff6e5e</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON Punctuation</string> + <key>scope</key> + <string>punctuation.definition.string.begin.json - meta.structure.dictionary.value.json, punctuation.definition.string.end.json - meta.structure.dictionary.value.json</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON Structure</string> + <key>scope</key> + <string>meta.structure.dictionary.json string.quoted.double.json</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON String</string> + <key>scope</key> + <string>meta.structure.dictionary.value.json string.quoted.double.json</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON: 6 deep</string> + <key>scope</key> + <string>meta meta meta meta meta meta meta.structure.dictionary.value string</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ff5ea0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON: 5 deep</string> + <key>scope</key> + <string>meta meta meta meta meta meta.structure.dictionary.value string</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ff5ef1</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON: 4 deep</string> + <key>scope</key> + <string>meta meta meta meta meta.structure.dictionary.value string</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#bd5eff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON: 3 deep</string> + <key>scope</key> + <string>meta meta meta meta.structure.dictionary.value string</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#5ea1ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON: 2 deep</string> + <key>scope</key> + <string>meta meta meta.structure.dictionary.value string</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#5ef1ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>JSON: 1 deep</string> + <key>scope</key> + <string>meta meta.structure.dictionary.value string</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffbd5e</string> + </dict> + </dict> + + <!-- Markdown Tweaks --> + <dict> + <key>name</key> + <string>Markup: strike</string> + <key>scope</key> + <string>markup.strike</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#ffbd5e</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Markup: bold</string> + <key>scope</key> + <string>markup.bold</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>bold</string> + <key>foreground</key> + <string>#ffbd5e</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Markup: italic</string> + <key>scope</key> + <string>markup.italic</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#ffbd5e</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Markdown: heading</string> + <key>scope</key> + <string>markup.heading</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffbd5e</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Markdown: List Items Punctuation</string> + <key>scope</key> + <string>punctuation.definition.list_item.markdown</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ff5ea0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Markdown: Blockquote</string> + <key>scope</key> + <string>markup.quote</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Markdown: Blockquote Punctuation</string> + <key>scope</key> + <string>punctuation.definition.blockquote.markdown</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Markdown: Separator</string> + <key>scope</key> + <string>meta.separator</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#7b8496</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Markup: raw inline</string> + <key>scope</key> + <string>text.html.markdown markup.raw.inline</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#5eff6c</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Markup: underline</string> + <key>scope</key> + <string>markup.underline</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>underline</string> + <key>foreground</key> + <string>#bd5eff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Markup: Raw block</string> + <key>scope</key> + <string>markup.raw.block</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Markdown: Raw Block fenced source</string> + <key>scope</key> + <string>markup.raw.block.fenced.markdown source</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Markdown: Fenced Bode Block</string> + <key>scope</key> + <string>punctuation.definition.fenced.markdown, variable.language.fenced.markdown</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#7b8496</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Markdown: Fenced Language</string> + <key>scope</key> + <string>variable.language.fenced.markdown</string> + <key>settings</key> + <dict> + <key>fontStyle</key> + <string>italic</string> + <key>foreground</key> + <string>#7b8496</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Punctuation Accessor</string> + <key>scope</key> + <string>punctuation.accessor</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ff5ea0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Meta Function Return Type</string> + <key>scope</key> + <string>meta.function.return-type</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#bd5eff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Punctuation Section Block Begin</string> + <key>scope</key> + <string>punctuation.section.block.begin</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Punctuation Section Block End</string> + <key>scope</key> + <string>punctuation.section.block.end</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Punctuation Section Embedded Begin</string> + <key>scope</key> + <string>punctuation.section.embedded.begin</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ff5ea0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Punctuation Section Embedded End</string> + <key>scope</key> + <string>punctuation.section.embedded.end</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ff5ea0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Punctuation Separator Namespace</string> + <key>scope</key> + <string>punctuation.separator.namespace</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ff5ea0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Variable Function</string> + <key>scope</key> + <string>variable.function</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#5ea1ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Variable Other</string> + <key>scope</key> + <string>variable.other</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Variable Language</string> + <key>scope</key> + <string>variable.language</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#bd5eff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Entity Name Module Ruby</string> + <key>scope</key> + <string>entity.name.module.ruby</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#5ef1ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Entity Name Constant Ruby</string> + <key>scope</key> + <string>entity.name.constant.ruby</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#5ea1ff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Support Function Builtin Ruby</string> + <key>scope</key> + <string>support.function.builtin.ruby</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ffffff</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Storage Type Namespace CS</string> + <key>scope</key> + <string>storage.type.namespace.cs</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#ff5ea0</string> + </dict> + </dict> + <dict> + <key>name</key> + <string>Entity Name Namespace CS</string> + <key>scope</key> + <string>entity.name.namespace.cs</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#5ef1ff</string> + </dict> + </dict> + </array> + <key>uuid</key> + <string>68394a4e-1404-4971-bdfc-81dd7f9d29f6</string> + <key>colorSpaceName</key> + <string>sRGB</string> + <key>semanticClass</key> + <string>theme.cyberdream</string> + <key>author</key> + <string>Scott McKendry</string> +</dict> +</plist> diff --git a/dot_config/drydock/config.toml b/dot_config/drydock/config.toml new file mode 100644 index 0000000..7e8879b --- /dev/null +++ b/dot_config/drydock/config.toml @@ -0,0 +1,4 @@ +# drydock: scan the ghq root (~/Code/<host>/<owner>/<repo>, depth 3) directly, +# not the ~/Projects symlink farm. Everything else stays at drydock's defaults +# (`drydock config show` prints them). +roots = ["~/Code"] diff --git a/dot_config/fish b/dot_config/fish new file mode 160000 index 0000000..87d8aa0 --- /dev/null +++ b/dot_config/fish @@ -0,0 +1 @@ +Subproject commit 87d8aa0e9c7096d30f8f4972e041f2aaa3d092c5 diff --git a/dot_config/fontconfig/fonts.conf b/dot_config/fontconfig/fonts.conf new file mode 100644 index 0000000..829a4fc --- /dev/null +++ b/dot_config/fontconfig/fonts.conf @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<!DOCTYPE fontconfig SYSTEM "fonts.dtd"> +<fontconfig> + <match target="pattern"> + <test name="family" qual="any"> + <string>monospace</string> + </test> + <edit name="family" mode="prepend_first" binding="strong"> + <string>VictorMono Nerd Font</string> + </edit> + </match> +</fontconfig> diff --git a/dot_config/gh-dash/config.yml b/dot_config/gh-dash/config.yml new file mode 100644 index 0000000..7e42acd --- /dev/null +++ b/dot_config/gh-dash/config.yml @@ -0,0 +1,95 @@ +prSections: + - title: My Pull Requests + filters: is:open author:@me + - title: Needs My Review + filters: is:open review-requested:@me + - title: Involved + filters: is:open involves:@me -author:@me +issuesSections: + - title: My Issues + filters: is:open author:@me + - title: Assigned + filters: is:open assignee:@me + - title: Involved + filters: is:open involves:@me -author:@me +notificationsSections: + - title: All + filters: "" + - title: Created + filters: reason:author + - title: Participating + filters: reason:participating + - title: Mentioned + filters: reason:mention + - title: Review Requested + filters: reason:review-requested + - title: Assigned + filters: reason:assign + - title: Subscribed + filters: reason:subscribed + - title: Team Mentioned + filters: reason:team-mention +repo: + branchesRefetchIntervalSeconds: 30 + prsRefetchIntervalSeconds: 60 +defaults: + preview: + open: true + width: 0.45 + prsLimit: 20 + prApproveComment: LGTM + issuesLimit: 20 + notificationsLimit: 20 + view: prs + layout: + prs: + updatedAt: + width: 5 + createdAt: + width: 5 + repo: + width: 20 + author: + width: 15 + authorIcon: + hidden: false + assignees: + width: 20 + hidden: true + base: + width: 15 + hidden: true + lines: + width: 15 + issues: + updatedAt: + width: 5 + createdAt: + width: 5 + repo: + width: 15 + creator: + width: 10 + creatorIcon: + hidden: false + assignees: + width: 20 + hidden: true + refetchIntervalMinutes: 30 +keybindings: + prs: + - key: T + command: gh enhance -R {{.RepoName}} {{.PrNumber}} +repoPaths: {} +theme: + ui: + sectionsShowCount: true + table: + showSeparator: true + compact: false +pager: + diff: "hunk pager" +confirmQuit: false +showAuthorIcons: true +smartFilteringAtLaunch: true +includeReadNotifications: true diff --git a/dot_config/gh/private_config.yml b/dot_config/gh/private_config.yml new file mode 100644 index 0000000..8b25011 --- /dev/null +++ b/dot_config/gh/private_config.yml @@ -0,0 +1,27 @@ +# The current version of the config schema +version: 1 +# What protocol to use when performing git operations. Supported values: ssh, https +git_protocol: https +# What editor gh should run when creating issues, pull requests, etc. If blank, will refer to environment. +editor: +# When to interactively prompt. This is a global config that cannot be overridden by hostname. Supported values: enabled, disabled +prompt: enabled +# Preference for editor-based interactive prompting. This is a global config that cannot be overridden by hostname. Supported values: enabled, disabled +prefer_editor_prompt: disabled +# A pager program to send command output to, e.g. "less". If blank, will refer to environment. Set the value to "cat" to disable the pager. +pager: +# Aliases allow you to create nicknames for gh commands +aliases: + co: pr checkout +# The path to a unix socket through which to send HTTP connections. If blank, HTTP traffic will be handled by net/http.DefaultTransport. +http_unix_socket: +# What web browser gh should use when opening URLs. If blank, will refer to environment. +browser: +# Whether to display labels using their RGB hex color codes in terminals that support truecolor. Supported values: enabled, disabled +color_labels: disabled +# Whether customizable, 4-bit accessible colors should be used. Supported values: enabled, disabled +accessible_colors: disabled +# Whether an accessible prompter should be used. Supported values: enabled, disabled +accessible_prompter: disabled +# Whether to use a animated spinner as a progress indicator. If disabled, a textual progress indicator is used instead. Supported values: enabled, disabled +spinner: enabled diff --git a/dot_config/go/env.tmpl b/dot_config/go/env.tmpl new file mode 100644 index 0000000..b7985d8 --- /dev/null +++ b/dot_config/go/env.tmpl @@ -0,0 +1,2 @@ +GOPATH={{ .chezmoi.homeDir }}/.local/share/go +GOBIN={{ .chezmoi.homeDir }}/.local/share/go/bin diff --git a/dot_config/herdr-nvim/config.toml b/dot_config/herdr-nvim/config.toml new file mode 100644 index 0000000..07e6c74 --- /dev/null +++ b/dot_config/herdr-nvim/config.toml @@ -0,0 +1,10 @@ +# ── herdr-nvim (chmarax.herdr-nvim) ── +# Read by the plugin binary from $XDG_CONFIG_HOME/herdr-nvim/config.toml. +# Bound to ctrl+shift+e in kitty/ghostty → prefix+e (\x02e) → herdr-nvim.toggle. + +[sidebar] +# The nvim pane opens to the LEFT of the existing panes. The plugin collapses +# the tab's current layout into one anchor group, splits the editor off it, and +# for "left" round-trips the anchor through a temporary tab so nvim ends up on +# the left edge and the previous panes sit to its right. Default is "right". +position = "left" diff --git a/dot_config/hunk/config.toml b/dot_config/hunk/config.toml new file mode 100644 index 0000000..028b3ec --- /dev/null +++ b/dot_config/hunk/config.toml @@ -0,0 +1,12 @@ +theme = "auto" # any built-in theme id, auto, or custom +mode = "auto" # auto, split, stack +vcs = "git" # git, jj, sl +watch = false +exclude_untracked = true +line_numbers = true +tab_width = 4 # tab stops, 1-16 +wrap_lines = false +menu_bar = true +agent_notes = true +prompt_save_view_preferences = false +transparent_background = true diff --git a/dot_config/hunk/private_state.json b/dot_config/hunk/private_state.json new file mode 100644 index 0000000..b9fc45d --- /dev/null +++ b/dot_config/hunk/private_state.json @@ -0,0 +1,4 @@ +{ + "version": 1, + "lastSeenCliVersion": "0.18.2" +} \ No newline at end of file diff --git a/dot_config/hypr b/dot_config/hypr new file mode 160000 index 0000000..5e15ac1 --- /dev/null +++ b/dot_config/hypr @@ -0,0 +1 @@ +Subproject commit 5e15ac16fc9a6abd8ecc750605c4d20ce884c79d diff --git a/dot_config/lazydocker/config.yml b/dot_config/lazydocker/config.yml new file mode 100644 index 0000000..3343dea --- /dev/null +++ b/dot_config/lazydocker/config.yml @@ -0,0 +1,11 @@ +gui: + border: rounded + theme: + activeBorderColor: + - "#cf716f" + inactiveBorderColor: + - "#a6958f" + selectedLineBgColor: + - "#453130" + optionsTextColor: + - "#a6958f" diff --git a/dot_config/lazygit/config.yml b/dot_config/lazygit/config.yml new file mode 100644 index 0000000..6bfbd26 --- /dev/null +++ b/dot_config/lazygit/config.yml @@ -0,0 +1,498 @@ +gui: + border: rounded + theme: + activeBorderColor: + - "#cf716f" + inactiveBorderColor: + - "#a6958f" + searchingActiveBorderColor: + - "#c17e4a" + optionsTextColor: + - "#a6958f" + selectedLineBgColor: + - "#453130" + cherryPickedCommitBgColor: + - "#453130" + cherryPickedCommitFgColor: + - "#ad6756" + unstagedChangesColor: + - "#ae825f" + defaultFgColor: + - "#dcc1b7" + authorColors: + "*": "#dcc1b7" # The number of lines you scroll by when scrolling the main window + scrollHeight: 2 + # If true, allow scrolling past the bottom of the content in the main window + scrollPastBottom: true + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#scroll-off-margin + scrollOffMargin: 2 + # One of: 'margin' (default) | 'jump' + scrollOffBehavior: margin + # If true, capture mouse events. + # When mouse events are captured, it's a little harder to select text: e.g. requiring you to hold the option key when on macOS. + mouseEvents: true + # If true, do not show a warning when discarding changes in the staging view. + skipDiscardChangeWarning: true + # If true, do not show warning when applying/popping the stash + skipStashWarning: true + # If true, do not show a warning when attempting to commit without any staged files; instead stage all unstaged files. + skipNoStagedFilesWarning: false + # If true, do not show a warning when rewording a commit via an external editor + skipRewordInEditorWarning: false + # Fraction of the total screen width to use for the left side section. You may want to pick a small number (e.g. 0.2) if you're using a narrow screen, so that you can see more of the main section. + # Number from 0 to 1.0. + sidePanelWidth: 0.4 + # If true, increase the height of the focused side window; creating an accordion effect. + expandFocusedSidePanel: true + # The weight of the expanded side panel, relative to the other panels. 2 means + # twice as tall as the other panels. Only relevant if `expandFocusedSidePanel` is true. + expandedSidePanelWeight: 2 + # Sometimes the main window is split in two (e.g. when the selected file has both staged and unstaged changes). This setting controls how the two sections are split. + # Options are: + # - 'horizontal': split the window horizontally + # - 'vertical': split the window vertically + # - 'flexible': (default) split the window horizontally if the window is wide enough, otherwise split vertically + mainPanelSplitMode: horizontal + # How the window is split when in half screen mode (i.e. after hitting '+' once). + # Possible values: + # - 'left': split the window horizontally (side panel on the left, main view on the right) + # - 'top': split the window vertically (side panel on top, main view below) + enlargedSideViewLocation: left + # One of 'auto' (default) | 'en' | 'zh-CN' | 'zh-TW' | 'pl' | 'nl' | 'ja' | 'ko' | 'ru' + language: auto + # Format used when displaying time e.g. commit time. + # Uses Go's time format syntax: https://pkg.go.dev/time#Time.Format + timeFormat: 02 Jan 06 + # Format used when displaying time if the time is less than 24 hours ago. + # Uses Go's time format syntax: https://pkg.go.dev/time#Time.Format + shortTimeFormat: 3:04PM + # Config relating to colors and styles. + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#color-attributes + # Config relating to the commit length indicator + commitLength: + # If true, show an indicator of commit message length + show: true + # If true, show the '5 of 20' footer at the bottom of list views + showListFooter: true + # If true, display the files in the file views as a tree. If false, display the files as a flat list. + # This can be toggled from within Lazygit with the '~' key, but that will not change the default. + showFileTree: true + # If true, show a random tip in the command log when Lazygit starts + showRandomTip: false + # If true, show the command log + showCommandLog: true + # If true, show the bottom line that contains keybinding info and useful buttons. If false, this line will be hidden except to display a loader for an in-progress action. + showBottomLine: false + # If true, show jump-to-window keybindings in window titles. + showPanelJumps: false + # Deprecated: use nerdFontsVersion instead + showIcons: true + # Nerd fonts version to use. + # One of: '2' | '3' | empty string (default) + # If empty, do not show icons. + nerdFontsVersion: "3" + # If true (default), file icons are shown in the file views. Only relevant if NerdFontsVersion is not empty. + showFileIcons: true + # Length of author name in (non-expanded) commits view. 2 means show initials only. + commitAuthorShortLength: 2 + # Length of author name in expanded commits view. 2 means show initials only. + commitAuthorLongLength: 17 + # Length of commit hash in commits view. 0 shows '*' if NF icons aren't on. + commitHashLength: 8 + # If true, show commit hashes alongside branch names in the branches view. + showBranchCommitHash: true + # Whether to show the divergence from the base branch in the branches view. + # One of: 'none' | 'onlyArrow' | 'arrowAndNumber' + showDivergenceFromBaseBranch: arrowAndNumber + # Height of the command log view + commandLogSize: 4 + # Whether to split the main window when viewing file changes. + # One of: 'auto' | 'always' + # If 'auto', only split the main window when a file has both staged and unstaged changes + splitDiff: auto + # Default size for focused window. Window size can be changed from within Lazygit with '+' and '_' (but this won't change the default). + # One of: 'normal' (default) | 'half' | 'full' + screenMode: normal + # If true, show a seriously epic explosion animation when nuking the working tree. + animateExplosion: true + # Whether to stack UI components on top of each other. + # One of 'auto' (default) | 'always' | 'never' + portraitMode: auto + # How things are filtered when typing '/'. + # One of 'substring' (default) | 'fuzzy' + filterMode: fuzzy + # Config relating to the spinner. + spinner: + # The frames of the spinner animation. + frames: + - "|" + - / + - "-" + - \ + # The "speed" of the spinner in milliseconds. + rate: 50 + # Status panel view. + # One of 'dashboard' (default) | 'allBranchesLog' + statusPanelView: allBranchesLog +# Config relating to git +git: + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Pagers.md + diffRenderers: + # - pager: critique --stdin + - # Value of the --color arg in the git diff command. Some pagers want this to be set to 'always' and some want it set to 'never' + colorArg: always + command: delta --dark --paging=never + # e.g. + # diff-so-fancy + # delta --dark --paging=never + # ydiff -p cat -s --wrap --width={{columnWidth}} + # - pager: "git diff | git-split-diffs --color | less -RFX" + # If true, Lazygit will use whatever pager is specified in `$GIT_PAGER`, `$PAGER`, or your *git config*. If the pager ends with something like ` | less` we will strip that part out, because less doesn't play nice with our rendering approach. If the custom pager uses less under the hood, that will also break rendering (hence the `--paging=never` flag for the `delta` pager). + + # Config relating to committing + commit: + # If true, pass '--signoff' flag when committing + signOff: false + # Automatic WYSIWYG wrapping of the commit message as you type + autoWrapCommitMessage: true + # If autoWrapCommitMessage is true, the width to wrap to + autoWrapWidth: 72 + # Config relating to merging + merging: + # If true, run merges in a subprocess so that if a commit message is required, Lazygit will not hang + # Only applicable to unix users. + manualCommit: false + # Extra args passed to `git merge`, e.g. --no-ff + args: "" + # The commit message to use for a squash merge commit. Can contain "{{selectedRef}}" and "{{currentBranch}}" placeholders. + squashMergeMessage: Squash merge {{selectedRef}} into {{currentBranch}} + # list of branches that are considered 'main' branches, used when displaying commits + mainBranches: + - develop # git flow + # Prefix to use when skipping hooks. E.g. if set to 'WIP', then pre-commit hooks will be skipped when the commit message starts with 'WIP' + skipHookPrefix: WIP + # If true, periodically fetch from remote + autoFetch: true + # If true, periodically refresh files and submodules + autoRefresh: true + # If true, pass the --all arg to git fetch + fetchAll: true + # Command used when displaying the current branch git log in the main window + branchLogCmd: git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} -- + # If true, do not spawn a separate process when using GPG + overrideGpg: false + # If true, do not allow force pushes + disableForcePushing: false + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-commit-message-prefix + commitPrefix: + - # pattern to match on. E.g. for 'feature/AB-123' to match on the AB-123 use "^\\w+\\/(\\w+-\\w+).*" + pattern: "" + # Replace directive. E.g. for 'feature/AB-123' to start the commit message with 'AB-123 ' use "[$1] " + replace: "" + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-branch-name-prefix + branchPrefix: "" + # If true, parse emoji strings in commit messages e.g. render :rocket: as 🚀 + # (This should really be under 'gui', not 'git') + parseEmoji: true + # Config for showing the log in the commits view + log: + # One of: 'date-order' | 'author-date-order' | 'topo-order' | 'default' + # 'topo-order' makes it easier to read the git log graph, but commits may not + # appear chronologically. See https://git-scm.com/docs/ + # + # Deprecated: Configure this with `Log menu -> Commit sort order` (<c-l> in the commits window by default). + order: topo-order + # This determines whether the git graph is rendered in the commits panel + # One of 'always' | 'never' | 'when-maximised' + # + # Deprecated: Configure this with `Log menu -> Show git graph` (<c-l> in the commits window by default). + showGraph: always + # displays the whole git graph by default in the commits view (equivalent to passing the `--all` argument to `git log`) + showWholeGraph: true + # When copying commit hashes to the clipboard, truncate them to this + # length. Set to 40 to disable truncation. + truncateCopiedCommitHashesTo: 8 + allBranchesLogCmds: + - git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium +# Periodic update checks +update: + # One of: 'prompt' (default) | 'background' | 'never' + method: background + # Period in days between update checks + days: 14 +# Background refreshes +refresher: + # File/submodule refresh interval in seconds. + # Auto-refresh can be disabled via option 'git.autoRefresh'. + refreshInterval: 10 + # Re-fetch interval in seconds. + # Auto-fetch can be disabled via option 'git.autoFetch'. + fetchInterval: 60 +# If true, show a confirmation popup before quitting Lazygit +confirmOnQuit: false +# If true, exit Lazygit when the user presses escape in a context where there is nothing to cancel/close +quitOnTopLevelReturn: true +# Config relating to things outside of Lazygit like how files are opened, copying to clipboard, etc +os: + # Command for editing a file. Should contain "{{filename}}". + edit: "" + # Command for editing a file at a given line number. Should contain + # "{{filename}}", and may optionally contain "{{line}}". + editAtLine: "" + # Same as EditAtLine, except that the command needs to wait until the + # window is closed. + editAtLineAndWait: "" + # For opening a directory in an editor + openDirInEditor: "" + # A built-in preset that sets all of the above settings. Supported presets + # are defined in the getPreset function in editor_presets.go. + editPreset: "" + # Command for opening a file, as if the file is double-clicked. Should + # contain "{{filename}}", but doesn't support "{{line}}". + open: "" + # Command for opening a link. Should contain "{{link}}". + openLink: "bash -C /home/prad/.local/share/omarchy/bin/omarchy-launch-webapp {{link}}" + # EditCommand is the command for editing a file. + # Deprecated: use Edit instead. Note that semantics are different: + # EditCommand is just the command itself, whereas Edit contains a + # "{{filename}}" variable. + # EditCommandTemplate is the command template for editing a file + # Deprecated: use EditAtLine instead. + # OpenCommand is the command for opening a file + # Deprecated: use Open instead. + # OpenLinkCommand is the command for opening a link + # Deprecated: use OpenLink instead. + # CopyToClipboardCmd is the command for copying to clipboard. + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-and-pasting-from-clipboard + copyToClipboardCmd: "wl-copy" + # ReadFromClipboardCmd is the command for reading the clipboard. + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-and-pasting-from-clipboard + readFromClipboardCmd: "wl-paste" +# If true, don't display introductory popups upon opening Lazygit. +disableStartupPopups: true +# What to do when opening Lazygit outside of a git repo. +# - 'prompt': (default) ask whether to initialize a new repo or open in the most recent repo +# - 'create': initialize a new repo +# - 'skip': open most recent repo +# - 'quit': exit Lazygit +notARepository: skip +# If true, display a confirmation when subprocess terminates. This allows you to view the output of the subprocess before returning to Lazygit. +promptToReturnFromSubprocess: false +# Keybindings +keybinding: + universal: + quit: q + quit-alt1: <c-q> + return: <esc> + quitWithoutChangingDirectory: Q + togglePanel: <tab> + prevItem: <up> + nextItem: <down> + prevItem-alt: k + nextItem-alt: j + prevPage: "," + nextPage: . + scrollLeft: H + scrollRight: L + gotoTop: < + gotoBottom: ">" + toggleRangeSelect: v + rangeSelectDown: <s-down> + rangeSelectUp: <s-up> + prevBlock: <left> + nextBlock: <right> + prevBlock-alt: h + nextBlock-alt: l + nextBlock-alt2: <tab> + prevBlock-alt2: <backtab> + jumpToBlock: + - "1" + - "2" + - "3" + - "4" + - "5" + nextMatch: "n" + prevMatch: "N" + startSearch: / + optionMenu: "?" + select: <space> + goInto: <enter> + confirm: <enter> + confirmInEditor: <a-enter> + remove: d + new: "n" + edit: e + openFile: o + scrollUpMain: <pgup> + scrollDownMain: <pgdown> + scrollUpMain-alt1: K + scrollDownMain-alt1: J + scrollUpMain-alt2: <c-u> + scrollDownMain-alt2: <c-d> + createRebaseOptionsMenu: m + # 'Files' appended for legacy reasons + pushFiles: P + # 'Files' appended for legacy reasons + pullFiles: p + refresh: R + createPatchOptionsMenu: <c-p> + nextTab: "]" + prevTab: "[" + nextScreenMode: + + prevScreenMode: _ + undo: z + redo: <c-z> + filteringMenu: <c-s> + diffingMenu: W + diffingMenu-alt: <c-e> + copyToClipboard: <c-o> + openRecentRepos: <c-r> + submitEditorText: <enter> + extrasMenu: "@" + toggleWhitespaceInDiffView: <c-w> + increaseContextInDiffView: "}" + decreaseContextInDiffView: "{" + increaseRenameSimilarityThreshold: ) + decreaseRenameSimilarityThreshold: ( + openDiffTool: <c-t> + newWorktree: w + status: + checkForUpdate: u + recentRepos: <enter> + allBranchesLogGraph: a + files: + commitChanges: c + commitChangesWithoutHook: w + amendLastCommit: E + commitChangesWithEditor: C + findBaseCommitForFixup: <c-f> + confirmDiscard: x + ignoreFile: i + refreshFiles: r + stashAllChanges: s + viewStashOptions: S + toggleStagedAll: a + viewResetOptions: D + fetch: f + toggleTreeView: "`" + openMergeOptions: M + openStatusFilter: <c-b> + copyFileInfoToClipboard: "y" + branches: + createPullRequest: "1" + viewPullRequestOptions: O + copyPullRequestURL: <c-y> + checkoutBranchByName: c + forceCheckoutBranch: F + rebaseBranch: r + renameBranch: R + mergeIntoCurrentBranch: M + viewGitFlowOptions: i + fastForward: f + createTag: T + pushTag: P + setUpstream: u + fetchRemote: f + sortOrder: s + commits: + squashDown: s + renameCommit: r + renameCommitWithEditor: R + viewResetOptions: g + markCommitAsFixup: f + createFixupCommit: F + squashAboveCommits: S + moveDownCommit: <c-j> + moveUpCommit: <c-k> + resetCommitAuthor: a + pickCommit: p + revertCommit: t + cherryPickCopy: C + pasteCommits: V + markCommitAsBaseForRebase: B + tagCommit: T + checkoutCommit: <space> + resetCherryPick: <c-c> + copyCommitAttributeToClipboard: "y" + openLogMenu: <c-l> + openInBrowser: o + viewBisectOptions: b + startInteractiveRebase: i + amendAttribute: + resetAuthor: a + setAuthor: A + addCoAuthor: c + stash: + popStash: g + renameStash: r + commitFiles: + checkoutCommitFile: c + main: + toggleSelectHunk: a + pickBothHunks: b + editSelectHunk: E + submodules: + init: i + update: u + bulkMenu: b + commitMessage: + commitMenu: <c-o> +customCommands: + - key: "<c-i>" + command: "gitv {{.Repository.Owner}}/{{.Repository.Name}}" + context: "global" + output: terminal + - key: "<c-w>" + command: "gwm" + context: "global" + output: terminal + - key: "<c-a>" + command: "wrkflw" + context: "global" + output: terminal + - key: "<c-p>" + command: "github prs" + context: "global" + output: terminal + - key: "F" + command: "gh repo sync && gh clean-branches --force" + context: "files" + output: log + description: "Sync repo and clean branches, update DuckDB cache" + - key: "A" + description: "Smart commit with AI" + context: "files" + command: "gh commit" + output: terminal + - key: "C" + description: "Smart commit with AI" + context: "files" + command: "gh commit" + output: terminal + - key: "o" + description: "start ai pull request" + command: "gh pr create --fill -w" + context: "localBranches" + - key: "O" + context: "commits" + command: 'hub browse -- "commit/{{.SelectedLocalCommit.Hash}}"' + - key: "C" + command: "gh repo sync && gh clean-branches --force" + context: "localBranches" + output: log + description: "Sync repo, clean branches, update cache" + - key: "a" + context: "files" + command: "git {{if .SelectedFile.HasUnstagedChanges}} add {{else}} reset {{end}} {{.SelectedFile.Name | quote}}" + description: "Toggle file staged" + - key: "L" + context: "files" + command: "livediff" + output: terminal + - key: "<c-d>" + context: "files" + command: "gh dash" + output: terminal + - key: "<c-o>" + context: "files" + command: "gh browse" diff --git a/dot_config/lazygit/ii-theme.yml b/dot_config/lazygit/ii-theme.yml new file mode 100644 index 0000000..a76969c --- /dev/null +++ b/dot_config/lazygit/ii-theme.yml @@ -0,0 +1,28 @@ +# Auto-generated by ii wallpaper theming system +# This is the theme section for lazygit config.yml +gui: + theme: + activeBorderColor: + - "#FFFFFF" + - bold + inactiveBorderColor: + - "#8F9192" + optionsTextColor: + - "#FFFFFF" + selectedLineBgColor: + - "#1F1F1F" + selectedRangeBgColor: + - "#1F1F1F" + cherryPickedCommitFgColor: + - "#FFFFFF" + cherryPickedCommitBgColor: + - "#1F1F1F" + markedBaseCommitFgColor: + - "#FFF17B" + markedBaseCommitBgColor: + - "#1F1F1F" + unstagedChangesColor: + - "#FF9BAD" + defaultFgColor: + - "#DFE3E3" + diff --git a/dot_config/mimeapps.list b/dot_config/mimeapps.list new file mode 100644 index 0000000..c912cf4 --- /dev/null +++ b/dot_config/mimeapps.list @@ -0,0 +1,64 @@ +[Default Applications] +text/plain=vim.desktop +text/x-shellscript=vim.desktop +text/x-python=vim.desktop +text/x-script.python=vim.desktop +text/markdown=obsidian.desktop +application/x-obsidian-canvas=obsidian.desktop +application/x-obsidian-base=obsidian.desktop +x-scheme-handler/obsidian=obsidian.desktop +text/html=brave-origin.desktop +x-scheme-handler/http=brave-origin.desktop +x-scheme-handler/https=brave-origin.desktop +x-scheme-handler/about=chromium.desktop +x-scheme-handler/unknown=chromium.desktop +x-scheme-handler/chrome=brave-origin.desktop +application/x-extension-htm=brave-origin.desktop +application/x-extension-html=brave-origin.desktop +application/x-extension-shtml=brave-origin.desktop +application/xhtml+xml=brave-origin.desktop +application/x-extension-xhtml=brave-origin.desktop +application/x-extension-xht=brave-origin.desktop +x-scheme-handler/figma=figma-linux.desktop +x-scheme-handler/claude=com.anthropic.Claude.desktop +x-scheme-handler/claude-cli=claude-code-url-handler.desktop +x-scheme-handler/com.todoist=todoist.desktop +x-scheme-handler/todoist=todoist.desktop +x-scheme-handler/openhuman=OpenHuman-handler.desktop +application/vnd.microsoft.portable-executable=wine.desktop +x-scheme-handler/slack=slack.desktop +x-scheme-handler/mailto=omamail.desktop +x-scheme-handler/anytype=anytype.desktop +x-scheme-handler/piebald=piebald-handler.desktop +x-scheme-handler/discord-647066573147996160=discord-647066573147996161.desktop +x-scheme-handler/tolaria=tolaria-handler.desktop +x-scheme-handler/antigravity=antigravity.desktop +application/pdf=brave-origin.desktop +x-scheme-handler/opencode=ai.opencode.desktop.desktop +x-scheme-handler/follow=folo.desktop +x-scheme-handler/folo=folo.desktop +x-scheme-handler/tldraw-offline=tldraw-offline.desktop +x-scheme-handler/notion=notion.desktop +inode/directory=io.github.lgse.Strata.desktop +x-scheme-handler/fastmail=com.fastmail.Fastmail.desktop +x-scheme-handler/grokbot=grok-bot.desktop +x-scheme-handler/sand=grok-bot.desktop +x-scheme-handler/tern=so.stencil.tern.url.desktop +x-scheme-handler/openknowledge=openknowledge.desktop + +[Added Associations] +x-scheme-handler/http=brave-origin.desktop;userapp-Floorp-8MTFP3.desktop; +x-scheme-handler/https=brave-origin.desktop;userapp-Floorp-8MTFP3.desktop; +x-scheme-handler/chrome=brave-origin.desktop;userapp-Floorp-8MTFP3.desktop; +text/html=brave-origin.desktop;userapp-Floorp-8MTFP3.desktop; +application/x-extension-htm=brave-origin.desktop;userapp-Floorp-8MTFP3.desktop; +application/x-extension-html=brave-origin.desktop;userapp-Floorp-8MTFP3.desktop; +application/x-extension-shtml=brave-origin.desktop;userapp-Floorp-8MTFP3.desktop; +application/xhtml+xml=brave-origin.desktop;userapp-Floorp-8MTFP3.desktop; +application/x-extension-xhtml=brave-origin.desktop;userapp-Floorp-8MTFP3.desktop; +application/x-extension-xht=brave-origin.desktop;userapp-Floorp-8MTFP3.desktop; +application/vnd.microsoft.portable-executable=wine.desktop; +x-scheme-handler/mailto=userapp-Evolution-PCEYQ4.desktop; +application/pdf=brave-origin.desktop; +x-scheme-handler/opencode=ai.opencode.desktop.desktop; +x-scheme-handler/openknowledge=openknowledge.desktop; diff --git a/dot_config/shell/aliases.sh.tmpl b/dot_config/shell/aliases.sh.tmpl new file mode 100644 index 0000000..edfa55b --- /dev/null +++ b/dot_config/shell/aliases.sh.tmpl @@ -0,0 +1,33 @@ +# Shared aliases for bash and zsh — generated from .chezmoidata/aliases.yaml. +# fish renders the same data via fish/conf.d/20-aliases.fish. Edit the YAML, +# not this file. Sourced from ~/.bashrc and ~/.zshrc (interactive shells only). +{{- range .aliases }} + +# {{ .section }} +{{- range .items }} +alias {{ .name }}='{{ .cmd }}' +{{- end }} +{{- end }} + +# Clipboard +if command -v wl-copy >/dev/null 2>&1; then + alias cpy='wl-copy' + alias pst='wl-paste' +fi + +# q exits the shell; if this shell was spawned from yazi's own `q` bind +# (`shell "$SHELL" --block`), also tell that yazi to quit so exiting +# doesn't bounce back into the file manager. +q() { + if [ -n "$YAZI_ID" ] && command -v ya >/dev/null 2>&1; then + ya emit quit 2>/dev/null + fi + exit +} + +# Typo guards + eza (this file is only sourced by interactive shells) +alias celar='clear' +alias claer='clear' +if command -v eza >/dev/null 2>&1; then + alias ls='eza --icons' +fi diff --git a/dot_config/starship.toml b/dot_config/starship.toml new file mode 100644 index 0000000..118e9d6 --- /dev/null +++ b/dot_config/starship.toml @@ -0,0 +1,140 @@ +"$schema" = 'https://starship.rs/config-schema.json' +palette = "cherryblossom" + + +format = """ +$username\ +$hostname\ +$directory\ +$git_branch\ +$git_state\ +$git_status\ +$cmd_duration\ +$python\ +$character""" + +add_newline = true + +right_format = """$time""" + +# zsh transient prompt (~/.zshrc). `starship prompt --profile` emits +# zsh-escaped output; `starship module` doesn't, which breaks RPROMPT width. +[profiles] +transient = "$character" +transient_right = "$time" + +[directory] +style = "blue" + +[character] +success_symbol = "[❯](purple)" +error_symbol = "[❯](red)" +vimcmd_symbol = "[❮](green)" + +[git_branch] +format = "[$branch]($style)" +style = "bright-black" + +[git_status] +format = "[[(*$conflicted$untracked$modified$staged$renamed$deleted)](218) ($ahead_behind$stashed)]($style)" +style = "cyan" +conflicted = "​" +untracked = "​" +modified = "​" +staged = "​" +renamed = "​" +deleted = "​" +stashed = "≡" + +[git_state] +format = '\([$state( $progress_current/$progress_total)]($style)\) ' +style = "bright-black" + +[cmd_duration] +format = "[$duration]($style) " +style = "yellow" + +[python] +format = "[$virtualenv]($style) " +style = "bright-black" +detect_extensions = [] +detect_files = [] + +[time] +disabled = false +format = '[$time]($style)' +time_format = '%-I:%M %p' +style = "bright-black" + +[palettes.cyberdream] +# https://github.com/scottmckendry/cyberdream.nvim +black = "#1e2124" +red = "#ff6e5e" +green = "#5eff6c" +yellow = "#f1ff5e" +blue = "#5ea1ff" +purple = "#bd5eff" +cyan = "#5ef1ff" +white = "#ffffff" + +bright-black = "#4a4d4f" +bright-red = "#ff8b7e" +bright-green = "#7eff89" +bright-yellow = "#f3ff7e" +bright-blue = "#7eb3ff" +bright-purple = "#ff7ef3" +bright-cyan = "#7ef3ff" +bright-white = "#ffffff" + +# Dim variants (usable as named colors in styles) +dim-black = "#1c1f22" +dim-red = "#d05c50" +dim-green = "#4fd05b" +dim-yellow = "#c5d050" +dim-blue = "#4f85d1" +dim-purple = "#d050c6" +dim-cyan = "#4fc5d1" +dim-white = "#d0d0d1" + +# >>> CHERRYBLOSSOM STARSHIP PALETTE >>> +# CherryBlossom Starship Palette + +[palettes.cherryblossom] +# Standard colors +blue = "#7a858b" +red = "#bf615d" +green = "#8a9a6b" +yellow = "#c17e4a" +cyan = "#a78266" +magenta = "#ad6756" +white = "#dcc1b7" +black = "#201d1c" + +# Extended palette (Catppuccin-compatible names) +rosewater = "#ae825f" +flamingo = "#cf716f" +pink = "#c6745f" +mauve = "#ad6756" +maroon = "#cf716f" +peach = "#ae825f" +teal = "#a78266" +sky = "#baa59d" +sapphire = "#8f9aa0" +lavender = "#c6745f" + +# Text shades +text = "#dcc1b7" +subtext1 = "#dcc1b7" +subtext0 = "#5b5450" + +# Surface shades +overlay2 = "#5b5450" +overlay1 = "#5b5450" +overlay0 = "#201d1c" +surface2 = "#201d1c" +surface1 = "#201d1c" +surface0 = "#222120" +base = "#222120" +mantle = "#222120" +crust = "#222120" +# <<< CHERRYBLOSSOM STARSHIP PALETTE <<< diff --git a/dot_config/systemd/user/kitty-day-save.service b/dot_config/systemd/user/kitty-day-save.service new file mode 100644 index 0000000..87bd183 --- /dev/null +++ b/dot_config/systemd/user/kitty-day-save.service @@ -0,0 +1,13 @@ +[Unit] +Description=Save kitty daily sessions before shutdown/reboot +PartOf=graphical-session.target +After=graphical-session.target + +[Service] +ExecStart=%h/.local/bin/kitty-day-save +# Re-arm after a flush, in case the shutdown is cancelled. +Restart=always +RestartSec=10 + +[Install] +WantedBy=graphical-session.target diff --git a/dot_config/systemd/user/projects-sync.service b/dot_config/systemd/user/projects-sync.service new file mode 100644 index 0000000..e1de7e4 --- /dev/null +++ b/dot_config/systemd/user/projects-sync.service @@ -0,0 +1,6 @@ +[Unit] +Description=Symlink ~/Code repos into ~/Projects + +[Service] +Type=oneshot +ExecStart=%h/.local/bin/projects-sync diff --git a/dot_config/systemd/user/projects-sync.timer b/dot_config/systemd/user/projects-sync.timer new file mode 100644 index 0000000..d1db149 --- /dev/null +++ b/dot_config/systemd/user/projects-sync.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Keep ~/Projects in sync with ~/Code + +# ponytail: polls every 5 min; ghq clones land two levels below ~/Code, out +# of reach of a non-recursive .path unit. Switch to inotify if 5 min is slow. +[Timer] +OnStartupSec=30s +OnUnitActiveSec=5min + +[Install] +WantedBy=timers.target diff --git a/dot_config/topgrade.toml b/dot_config/topgrade.toml new file mode 100644 index 0000000..b7d1d27 --- /dev/null +++ b/dot_config/topgrade.toml @@ -0,0 +1,92 @@ +# ~/.config/topgrade.toml — tailored for Omarchy (Arch · yay · fish) +# Only the keys that matter for this box are uncommented; everything else +# keeps topgrade's sane defaults. + +[misc] +# pacman/yay escalate privileges mid-run; cache sudo creds up front so an +# unattended run doesn't block on a password prompt halfway through. +pre_sudo = true + +# topgrade on this box is cargo-installed (~/.cargo/bin/topgrade), and the +# [cargo] step below (cargo-update) already owns updating it. Self-update +# stays off so two updaters don't fight over the same binary. +no_self_update = true + +# Run distro cleanup after upgrading (paccache). +# Needs `pacman-contrib` for paccache; harmlessly skipped if absent. +cleanup = true + +# Surface *.pacnew / *.pacsave you need to merge — critical on a rolling +# Arch base. (default true; pinned here as a reminder.) +show_distribution_summary = true + +# Globally skipped steps: +# containers → topgrade pulls :latest for every local image on every run, +# which is noisy and can drag in breaking tags. Drop this entry +# if you actually want your dev images auto-refreshed. +disable = ["containers", "config_update"] + +ignore_failures = ["uv", "containers"] + +# NOTE: the [python] pip/conda steps are off by default and left that way — +# that's what protects your pinned torch 2.10.0+rocm7.2.4 from a blind upgrade. + +# Optional: update topgrade on goliath in the same pass. Requires topgrade +# installed there + tmux locally; rides your existing SSH ControlMaster. +# remote_topgrades = ["goliath"] + + +[linux] +# Omarchy's AUR helper is yay. Pin it so topgrade never silently falls back +# to bare `pacman` (which would skip the AUR). +# Valid values: autodetect, aura, garuda_update, pacman, pamac, paru, pikaur, +# trizen, yay +arch_package_manager = "yay" + +# Pull archlinux.org news before the upgrade. Omarchy tracks Arch, so +# manual-intervention advisories (keyring, library bumps) still apply to you. +show_arch_news = true + + +[cargo] +# Also update git-sourced installs (your smartcommit / skillforge CLIs), +# not just crates.io ones. This step is also what keeps topgrade itself fresh. +git = true +# Requires the updater binary: cargo install cargo-update + + +[firmware] +# Check + display only — review fwupd updates before flashing the Z13 rather +# than auto-applying firmware in an unattended run. +upgrade = false + + +[git] +# Predefined repos still get pulled by default. Add your own globs if you want +# configs fetched in the same pass; left commented so topgrade doesn't trip +# over a dirty working tree mid-run. +# repos = ["~/.config/omarchy", "~/Code/prad.codes/env/omarchy"] +# arguments = "--rebase --autostash" + + +[flatpak] +# User-scope flatpaks update without sudo. Only set this if you keep +# system-wide installs. +# use_sudo = true + + +[pre_commands] +# "Emacs Snapshot" = "rm -rf ~/.emacs.d/elpa.bak && cp -rl ~/.emacs.d/elpa ~/.emacs.d/elpa.bak" +# Capture local drift in managed config back into the chezmoi source repo +# before anything upgrades. Note: only re-adds *managed* files; brand-new +# configs still need a manual `chezmoi add`. Review/commit in +# ~/.local/share/chezmoi afterwards. +"Chezmoi Re-Add" = "chezmoi re-add" +"GHQ Update" = "ghq list | ghq get -u -s" + + +# Commands to run after anything +[post_commands] +# "Emacs Snapshot" = "rm -rf ~/.emacs.d/elpa.bak && cp -rl ~/.emacs.d/elpa ~/.emacs.d/elpa.bak" +"Hermes Update" = "hermes update --backup --yes" +"Herdr Update" = "herdr update" diff --git a/dot_config/uwsm/env-hyprland b/dot_config/uwsm/env-hyprland new file mode 100644 index 0000000..6786229 --- /dev/null +++ b/dot_config/uwsm/env-hyprland @@ -0,0 +1,23 @@ +# Sourced by uwsm before Hyprland starts. +# Keep Hyprland on the AMD iGPU (Radeon 8060S, PCI c4:00.0). The Thunderbolt +# eGPU (RTX 5060 Ti) drives no displays and is for compute only; without this, +# aquamarine opens it as a second KMS device. cardN numbering shifts with eGPU +# hotplug timing, so resolve the stable by-path link. Left unset if missing so +# Hyprland still falls back to auto-detection. +igpu=$(readlink -f /dev/dri/by-path/pci-0000:c4:00.0-card 2>/dev/null) +[ -e "$igpu" ] && export AQ_DRM_DEVICES="$igpu" +unset igpu + +# EGL through Mesa only, for Hyprland and every app in the session. glvnd +# otherwise tries NVIDIA's vendor first (10_nvidia.json sorts before +# 50_mesa.json), so the compositor and GL apps open /dev/nvidiactl even +# though they render on the iGPU; when the eGPU drops off the bus, they +# would be holding it. CUDA does not go through EGL and is unaffected. +export __EGL_VENDOR_LIBRARY_FILENAMES=/usr/share/glvnd/egl_vendor.d/50_mesa.json + +# Vulkan through RADV only, same reasoning. The eGPU exists for LM Studio's +# CUDA backend; its Vulkan backend surveying the NVIDIA ICD on first start +# took the machine down (platform reset, no log) while CUDA work on the same +# card (voxtype/parakeet) runs fine. Games and every other Vulkan app stay +# on the iGPU. CUDA does not go through the Vulkan loader. +export VK_DRIVER_FILES=/usr/share/vulkan/icd.d/radeon_icd.json diff --git a/dot_config/waybar/V6.cb.png b/dot_config/waybar/V6.cb.png new file mode 100644 index 0000000000000000000000000000000000000000..881e19ef2e7e4b5c046071c659747fbd54c20fed GIT binary patch literal 374882 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≫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 Z{+GTv$%$-T)8kS&!g=W=G&@IL37Wq$6IoO5 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 B?Q{SD literal 0 HcmV?d00001 diff --git a/dot_config/waybar/config.jsonc b/dot_config/waybar/config.jsonc new file mode 100644 index 0000000..99bbd9b --- /dev/null +++ b/dot_config/waybar/config.jsonc @@ -0,0 +1,324 @@ +{ + "exclusive": true, + "reload_style_on_change": true, + "position": "bottom", + "fixed-center": true, + "spacing": 2, + "margin-top": 1, + "modules-left": [ + "custom/separator", + "custom/omarchy", + "custom/separator", + "hyprland/workspaces", + "custom/separator", + "tray", + "custom/separator", + "custom/voxtype", + "custom/update", + "custom/screenrecording-indicator", + "custom/updatespacman", + "custom/separator", + "idle_inhibitor" + ], + "modules-center": [ + "custom/windowpill" + ], + "modules-right": [ + "group/right-group2", + "group/right-group1" + ], + +"group/right-group1": { + "orientation": "vertical", + "justify": "left", + "align": "left", + "modules": [ + "group/right1" + ] +}, + +"group/right-group2": { + "orientation": "vertical", + "justify": "left", + "align": "left", + "modules": [ + "group/right2" + ] +}, +"group/right1":{ + "orientation": "horizontal", + "modules": ["clock"] +}, +"group/right2":{ + "orientation": "horizontal", + "modules": [ + "group/tray-expander", + ] +}, + "hyprland/workspaces": { + "on-click": "activate", + "cursor": true, + "format": "{icon}", + // Matches the workspace rules in hypr/hyprland.lua: 1-4 on the Studio + // Display, 5-8 on the laptop panel. Waybar keys outputs by connector, so + // update DP-4 if the Studio Display re-docks on another port. + "persistent-workspaces": { + "DP-4": [1, 2, 3, 4], + "eDP-1": [5, 6, 7, 8] + } +}, +"custom/separator": { + "format": "|", + "tooltip": false +}, +"custom/separator2": { + "format": "|", + "tooltip": false +}, +"custom/separator3": { + "format": "|", + "tooltip": false +}, + "custom/omarchy": { + "format": "<span font='omarchy'>\ue900</span>", + "on-click": "omarchy-menu", + "on-click-right": "xdg-terminal-exec", + "tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space" + }, + "custom/update": { + "format": "", + "exec": "omarchy-update-available", + "on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update", + "tooltip-format": "Omarchy update available", + "signal": 7, + "interval": 21600 + }, + "custom/voxtype": { + "exec": "omarchy-voxtype-status", + "return-type": "json", + "format": "{icon}", + "format-icons": { + "idle": "", + "recording": "󰍬", + "transcribing": "󰔟" + }, + "tooltip": true, + "on-click-right": "omarchy-voxtype-config", + "on-click": "omarchy-voxtype-model" + }, + "power-profiles-daemon": { + "format": "{icon}", + "tooltip-format": "Power profile: {profile}\nDriver: {driver}", + "tooltip": true, + "format-icons": { + "performance": "", + "balanced": "", + "power-saver": "" + } + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "󰛊", + "deactivated": "󰾫" + } + }, + "custom/windowpill": { + "format": "{}", + "exec": "~/.config/waybar/window_pill.py", + "return-type": "json", + "restart-interval": 1, + "align": "center", + "justify": "center" + }, + "cpu": { + "interval": 10, + "format": " {usage}%", + "on-click": "omarchy-launch-or-focus-tui btop" + }, + "memory": { + "interval": 2, + "format": " {used:0.1f}G", + "on-click": "omarchy-launch-or-focus-tui btop" + }, + "backlight": { + "device": "intel_backlight", + "format": "{icon}", + "tooltip-format": "{percent}%", + "format-icons": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "clock": { + "justify": "right", + "format": "{:%H:%M\n%d/%m/%Y}", + "format-alt": "{:%H:%M - %d/%m/%Y}", + "tooltip-format": "<span>{calendar}</span>", + "calendar": { + "mode": "month", + "mode-mon-col": 3, + "on-click-right": "mode", + "format": { + "month": "<span color='#ffead3'><b>{}</b></span>", + "weekdays": "<span color='#ffcc66'><b>{}</b></span>", + "today": "<span color='#ff6699'><b>{}</b></span>", + }, + }, + "on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select" + }, + "network": { + "format-icons": [ + "󰤯", + "󰤟", + "󰤢", + "󰤥", + "󰤨" + ], + "format": "{icon}", + "format-wifi": "{icon}", + "format-ethernet": "󰈀", + "format-disconnected": "󰤮", + "tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}", + "tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}", + "tooltip-format-disconnected": "Disconnected", + "interval": 3, + "spacing": 1, + "on-click": "omarchy-launch-wifi" + }, + "battery": { + "format": "{capacity}% {icon}", + "format-discharging": "{capacity}% {icon}", + "format-charging": "{capacity}% {icon}", + "format-plugged": "", + "format-icons": { + "charging": [ + "󰢜", + "󰂆", + "󰂇", + "󰂈", + "󰢝", + "󰂉", + "󰢞", + "󰂊", + "󰂋", + "󰂅" + ], + "default": [ + "󰁺", + "󰁻", + "󰁼", + "󰁽", + "󰁾", + "󰁿", + "󰂀", + "󰂁", + "󰂂", + "󰁹" + ] + }, + "format-full": "󰂅 {capacity}%", + "tooltip-format-discharging": "{timeTo}", + "tooltip-format-charging": "{timeTo}", + "interval": 5, + "on-click": "omarchy-menu power", + "on-click-right": "notify-send -u low \"$(omarchy-battery-status)\"", + "states": { + "warning": 20, + "critical": 10 + } + }, + "bluetooth": { + "format": "", + "format-disabled": "󰂲", + "format-connected": "󰂱", + "tooltip-format": "Devices connected: {num_connections}", + "on-click": "omarchy-launch-bluetooth" + }, + "pulseaudio#input": { + "format-source": "", + "format-source-muted": "", + "format": "{format_source}", + "tooltip-format": "{format_source} {source_volume}%", + "scroll-step": 1, + "smooth-scrolling-threshold": 1, + "max-volume": 100, + "on-click": "omarchy-launch-audio", + "on-click-right": "pamixer -t", + "on-scroll-up": "pactl set-source-volume @DEFAULT_SOURCE@ +1%", + "on-scroll-down": "pactl set-source-volume @DEFAULT_SOURCE@ -1%", + }, + "pulseaudio#output": { + "format": "{icon}", + "tooltip-format": "{icon} {volume}%", + "format-muted": "", + "format-icons": { + "headphone": "", + "default": ["", "", ""] + }, + "max-volume": 100, + "scroll-step": 2, + "smooth-scrolling-threshold": 1, + "on-click": "omarchy-launch-audio", + "on-click-right": "pamixer -t" + }, + "custom/updatespacman": { + "format": "{}{icon}", + "return-type": "json", + "format-icons": { + "has-updates": " 󰏖", + "updated": "" + }, + "exec-if": "which waybar-module-pacman-updates", + "exec": "waybar-module-pacman-updates --no-zero-output" + }, + "custom/screenrecording-indicator": { + "on-click": "omarchy-capture-screenrecording", + "exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh", + "signal": 8, + "return-type": "json" + }, + "group/tray-expander": { + "orientation": "inherit", + "drawer": { + "transition-duration": 600, + "children-class": "tray-group-item" + }, + "modules": [ + "custom/expand-icon", + "backlight", + "bluetooth", + "pulseaudio#output", + "pulseaudio#input", + "power-profiles-daemon", + "network", + "memory", + "cpu", + "battery" + ] + }, + "custom/expand-icon": { + "format": "", + "tooltip": false + }, + "tray": { + "icon-size": 12, + "spacing": 5, + "cursor": true, + "show-passive-items": true + }, + +} diff --git a/dot_config/waybar/style.css b/dot_config/waybar/style.css new file mode 100644 index 0000000..db432e8 --- /dev/null +++ b/dot_config/waybar/style.css @@ -0,0 +1,237 @@ +@import "/home/prad/.local/state/omarchy/current/theme/waybar.css"; + + +* { + /* background-color: @background; */ + /* color: @foreground; */ + + border-radius: 0; + border: none; + text-shadow: none; + padding: 0; + min-height: 0; + font-family: 'CaskaydiaCove Nerd Font Propo'; +} + +#waybar { + background-color: @transparent; +} + +#waybar > box { + color: @foreground; + background-color: @background; + margin: 2px 6px 2px 6px; + padding: 0px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 1); + border-radius: 4px; + font-weight: 700; + font-size: 12px; + transition-property: background-color; + transition-duration: .5s; + min-height: 30px; +} + +.modules-left { + margin-left: 4px; +} + +.modules-right { + margin-right: 4px; +} + +#right2 { + margin-right: 4px; + padding-top: 8px; +} + +#workspaces { + padding: 0 0px; + margin-top: 2px; +} + +#workspaces button { + all: initial; + padding: 0 1px; + margin: 0 3px; + opacity: 0.55; + color: @foreground; + font-size: 12px; + font-weight: bold; +} + +#workspaces button.active { + color: @foreground; + opacity: 1.0; + font-size: 12px; +} + +#workspaces button.empty { + opacity: 0.2; + font-size: 12px; + color: @foreground; +} + +#workspaces button.empty.active { + font-size: 12px; + color: @foreground; + opacity: 1.0; +} + + +#custom-expand-icon, +#tray, +#cpu, +#memory, +#battery, +#backlight, +#network, +#bluetooth, +#pulseaudio, +#power-profiles-daemon, +#idle_inhibitor, +#custom-windowpill, +#group-tray-expander, +#custom-update, +#custom-voxtype, +#custom-voxtype.recording, +#custom-voxtype.transcribing, +#custom-expand-icon, +#custom-omarchy, +#custom-updatespacman, +#custom-screenrecording-indicator { + min-width: 12px; + padding-left: 6px; + padding-right: 6px; + margin: 1px 1px 1px 1px; + padding-top: 0px; + padding-bottom: 0px; +} + +#clock{ + padding-top: 4px; +} + + + +tooltip { + padding: 2px; +} + +#custom-omarchy { + padding-top: 2px; + padding-left: 3px; +} + +#custom-update { + font-size: 10px; +} + +#custom-expand-icon { + margin-right: 0px; + opacity: 0.5; +} + +#tray { + background-color: @background; +} + +#tray > .passive { + -gtk-icon-effect: dim; +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; + background-color: @background; +} + +.hidden { + opacity: 0; +} + +#power-profiles-daemon, +#power-profiles-daemon.performance, +#power-profiles-daemon.balanced, +#power-profiles-daemon.power-saver { + margin: 0; + padding-left: 2px; +} + +#custom-updatespacman { + opacity: 0.55; +} + +#custom-separator { + opacity: 0.25; + padding-left: 2px; + padding-right: 4px; +} + +#custom-separator3 { + opacity: 0.25; + padding-left: 2px; + padding-right: 6px; +} + +tooltip { + padding: 4px; + background: @background; + font-size: 12px; + border-radius: 8px; + border: 1.5px solid rgba(255, 255, 255, 0.25); +} +tooltip label { + color: @foreground; +} + + +/* Specific animation Module */ + +#custom-screenrecording-indicator { + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; + color: transparent; +} + +#custom-screenrecording-indicator.active { + color: #eb7087; + animation-name: blink-recording; + animation-duration: 0.5s; +} + +@keyframes blink-recording { + to { + color: @background; + } +} + +#custom-voxtype { + min-width: 12px; + margin: 0px 0 0 0px; +} + +#custom-voxtype.recording { + color: #a55555; +} + +#battery.warning { + color: #c95d0f; + background-color: @background; +} + +@keyframes blink2 { + to { + background-color: @background; + color: #f53c3c; + } +} + +#battery.critical:not(.charging) { + background-color: transparent; + color: #e6d8ba; + animation-name: blink2; + animation-duration: 0.5s; + animation-timing-function: steps(12); + animation-iteration-count: infinite; + animation-direction: alternate; +} diff --git a/dot_config/waybar/window_pill.py b/dot_config/waybar/window_pill.py new file mode 100644 index 0000000..d6e9e33 --- /dev/null +++ b/dot_config/waybar/window_pill.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 +import os +import socket +import sys +import json +import subprocess +import html +import re + +# Configuration +MAX_TITLE_LEN = 80 + +def get_hyprland_data(command): + try: + output = subprocess.check_output(["hyprctl", command, "-j"], text=True) + return json.loads(output) + except Exception: + return {} + +def print_status(): + # 1. Get Active Window + window = get_hyprland_data("activewindow") + + # Defaults for "Desktop" state + top_line = "Desktop" + bottom_line = "" + + # 2. Determine State + if window and window.get("address"): + # CASE A: Window is active + top_line = window.get("class", "Unknown") or "Unknown" + + title = window.get("title", "") or "" + + # Safely get class (Hyprland may return null) + app_class = (window.get("class") or "").lower() + + # Remove Discord/Vesktop unread counter like "(209) " + if "discord" in app_class or "vesktop" in app_class: + title = re.sub(r"^\(\d+\)\s*", "", title) + title = re.sub(r"^Discord\s*\|\s*", "", title) + + if len(title) > MAX_TITLE_LEN: + title = title[:MAX_TITLE_LEN - 3] + + bottom_line = title + + else: + # CASE B: Desktop / Empty Workspace + workspace = get_hyprland_data("activeworkspace") + ws_id = workspace.get("id", "1") + top_line = f"Workspace {ws_id}" + bottom_line = "\u00A0" + + # 3. Sanitize for Pango + top_line = html.escape(top_line) + bottom_line = html.escape(bottom_line) + + # 4. Format with Pango Markup + text = ( + f"<span size='small' foreground='#a6adc8' rise='-2000'>{top_line}</span>\n " + f"<span size='11000' weight='bold' foreground='#ffffff'>{bottom_line}</span>" + ) + + # 5. Output JSON + print(json.dumps({ + "text": text, + "class": "custom-window", + "tooltip": f"{top_line}: {bottom_line}" + }), flush=True) + +# Initial Run +print_status() + +# Listen to Hyprland Socket for instant updates +hypr_sig = os.getenv("HYPRLAND_INSTANCE_SIGNATURE") +if not hypr_sig: + sys.exit(1) + +socket_path = f"/tmp/hypr/{hypr_sig}/.socket2.sock" + +if os.path.exists(socket_path): + with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as client: + client.connect(socket_path) + while True: + data = client.recv(1024).decode("utf-8", errors="ignore") + if not data: + break + if "activewindow>>" in data or "workspace>>" in data: + print_status() diff --git a/dot_config/xdg-terminals.list b/dot_config/xdg-terminals.list new file mode 100644 index 0000000..c32675b --- /dev/null +++ b/dot_config/xdg-terminals.list @@ -0,0 +1,4 @@ +# Default terminal for xdg-terminal-exec (omarchy-launch-terminal, +# GLib's Terminal=true launches): first entry wins. +com.mitchellh.ghostty.desktop +kitty.desktop diff --git a/dot_config/yazi.toml.tmpl b/dot_config/yazi.toml.tmpl new file mode 100644 index 0000000..1207b91 --- /dev/null +++ b/dot_config/yazi.toml.tmpl @@ -0,0 +1,30 @@ +[mgr] +ratio = [0, 2, 6] + +[opener] +play = [ + { run = "mpv %s", orphan = true, for = "unix" }, +] +edit = [ + # routes into the host nvim when run inside its terminal ($NVIM set); + # plain blocking nvim otherwise. Lives in ~/.local/bin (yazi doesn't + # expand $HOME here). %s = selected/hovered paths (yazi interpolation). + { run = 'yazi-nvim-open %s', block = true, for = "unix" }, +] +open = [ + { run = "xdg-open %s1", desc = "Open" }, +] + +[open] +prepend_rules = [ + { url = "*.{md,markdown}", use = [ "fry", "edit", "open" ] }, +] + +# Preview pane: bat for text-like files (md included, since mdfried is TTY-only) +[[plugin.prepend_previewers]] +mime = "text/*" +run = 'piper -- bat -p --color=always --terminal-width=$w "$1"' + +[[plugin.prepend_previewers]] +mime = "application/{mbox,javascript,wine-extension-ini}" +run = 'piper -- bat -p --color=always --terminal-width=$w "$1"' diff --git a/dot_config/zsh/functions/c.zsh b/dot_config/zsh/functions/c.zsh new file mode 100644 index 0000000..b4d1a0a --- /dev/null +++ b/dot_config/zsh/functions/c.zsh @@ -0,0 +1,8 @@ +# c: clear with no args, cd with one. +c() { + if [ -z "${1-}" ]; then + clear + else + cd "$1" + fi +} diff --git a/dot_config/zsh/functions/cd.zsh b/dot_config/zsh/functions/cd.zsh new file mode 100644 index 0000000..8b15f9a --- /dev/null +++ b/dot_config/zsh/functions/cd.zsh @@ -0,0 +1,23 @@ +# cd with zoxide fallback, else builtin cd. +cd() { + local rc target + if [ $# -eq 0 ]; then + builtin cd "$HOME" + elif [ "$1" = - ]; then + builtin cd - + elif builtin cd "$1" 2>/dev/null; then + : # exact path resolved, nothing else to do + elif command -v zoxide >/dev/null 2>&1; then + target=$(zoxide query -- "$1" 2>/dev/null) + if [ -n "$target" ]; then + builtin cd "$target" + else + builtin cd "$1" # let builtin cd surface the real error + fi + else + builtin cd "$1" + fi + rc=$? + command -v zoxide >/dev/null 2>&1 && zoxide add "$PWD" 2>/dev/null + return $rc +} diff --git a/dot_config/zsh/functions/clip-last.zsh b/dot_config/zsh/functions/clip-last.zsh new file mode 100644 index 0000000..acf08d7 --- /dev/null +++ b/dot_config/zsh/functions/clip-last.zsh @@ -0,0 +1,27 @@ +# Re-run last command, copy output to clipboard. +# History-offset handling: some line editors add the current command to +# history before execution, some after — detect instead of assuming. +clip-last() { + local last copy + last=$(fc -ln -1 -1 2>/dev/null) + last=${last#"${last%%[![:space:]]*}"} # trim leading whitespace + case $last in + clip-last*) + last=$(fc -ln -2 -2 2>/dev/null) + last=${last#"${last%%[![:space:]]*}"} + ;; + esac + if [ -z "$last" ]; then + echo "clip-last: no previous command in history" >&2 + return 1 + fi + if command -v wl-copy >/dev/null 2>&1; then + copy=wl-copy + else + echo "clip-last: no clipboard tool (wl-copy) found" >&2 + return 1 + fi + eval "$last" | "$copy" + command -v notify-send >/dev/null 2>&1 \ + && notify-send -a shell "Clipboard" "Command output copied to clipboard" +} diff --git a/dot_config/zsh/functions/ghg.zsh b/dot_config/zsh/functions/ghg.zsh new file mode 100644 index 0000000..43e1527 --- /dev/null +++ b/dot_config/zsh/functions/ghg.zsh @@ -0,0 +1,8 @@ +# ghq get + cd; clone/path logic lives in ~/.local/bin/ghg-clone. +# (helper is not named ghg: an unrelated cargo binary owns that name) +ghg() { + local dir + dir=$(ghg-clone "$@") || return + cd "$dir" || return + clear && onefetch +} diff --git a/dot_config/zsh/functions/ghn.zsh b/dot_config/zsh/functions/ghn.zsh new file mode 100644 index 0000000..06fb089 --- /dev/null +++ b/dot_config/zsh/functions/ghn.zsh @@ -0,0 +1,6 @@ +# Create a repo (prad.codes/github.com) + cd; logic lives in ~/.local/bin/ghn. +ghn() { + local dir + dir=$(command ghn "$@") || return + cd "$dir" || return +} diff --git a/dot_config/zsh/functions/gho.zsh b/dot_config/zsh/functions/gho.zsh new file mode 100644 index 0000000..2791d18 --- /dev/null +++ b/dot_config/zsh/functions/gho.zsh @@ -0,0 +1,11 @@ +# Pick a ghq repo / Obsidian vault with tv (ghq-repos cable) + cd. +gho() { + local dir + dir=$(tv ghq-repos --inline) || return + [ -n "$dir" ] || return 1 + cd "$dir" || return + clear + if [ -d .git ]; then + onefetch + fi +} diff --git a/dot_config/zsh/functions/yy.zsh b/dot_config/zsh/functions/yy.zsh new file mode 100644 index 0000000..01e775c --- /dev/null +++ b/dot_config/zsh/functions/yy.zsh @@ -0,0 +1,11 @@ +# yazi wrapper: cd to the directory yazi was left in on exit. +yy() { + local tmp cwd + tmp=$(mktemp -t "yazi-cwd.XXXXXX") + command yazi "$@" --cwd-file="$tmp" + cwd=$(cat -- "$tmp" 2>/dev/null) + if [ -n "$cwd" ] && [ "$cwd" != "$PWD" ] && [ -d "$cwd" ]; then + builtin cd -- "$cwd" + fi + rm -f -- "$tmp" +} diff --git a/dot_config/zsh/keybinds.zsh b/dot_config/zsh/keybinds.zsh new file mode 100644 index 0000000..416d59d --- /dev/null +++ b/dot_config/zsh/keybinds.zsh @@ -0,0 +1,114 @@ +# ~/.config/zsh/keybinds.zsh — zle ports of fish_user_key_bindings.fish. +# Keys owned by kitty.conf never reach the shell and are NOT bound here: +# ctrl-h/j/k/l → vim-aware split nav (pass_keys.py). + +bindkey -e # pin emacs keymap ($EDITOR containing "vi" would pick viins) +unsetopt flow_control # free ^Q/^S in zle so the ctrl-q exit bind fires + +# Generic runner: widget `run-<cmd>` executes <cmd> (function or binary) with +# the tty as stdin, then repaints — fish's `commandline -f repaint`. +# cwd changes from gho/yy persist: widgets run in the shell process. +# gho, pj and `tv git-files` (below) open television cables (~/.config/ +# television/cable) — the same keys do the same in fish and bash. +_zle-run() { + local cmd=${WIDGET#run-} + zle -I + $cmd </dev/tty + zle reset-prompt +} +for _cmd in purple clip-last omp-session omp yy lazygit; do + zle -N "run-$_cmd" _zle-run +done +unset _cmd + +# tv pickers run --inline below the prompt. zle -I + reset-prompt redraws the +# prompt where zle last drew it, wiping anything printed below; zle -I alone +# redraws a fresh prompt under the output. So: a cancelled picker (cursor +# left on the line below the prompt) steps back up and resets in place, and +# output that must stay (onefetch after gho's cd, a pj task) gets zle -I only. + +# ctrl-e: tv git-files (bat preview, enter opens nvim, which restores the +# cursor to tv's line). +_zle-tv-git-files() { + zle -I + tv git-files --inline </dev/tty + printf '\033[A' >/dev/tty + zle reset-prompt +} +zle -N tv-git-files _zle-tv-git-files + +# ctrl-o: gho (ghq-repos cable); cd + clear + onefetch when something was +# picked. +_zle-gho() { + local before=$PWD + zle -I + gho </dev/tty + if [[ $PWD == "$before" ]]; then + printf '\033[A' >/dev/tty + zle reset-prompt + fi +} +zle -N gho-inline _zle-gho + +# ctrl-p, and down on an idle empty prompt (fish's _pj_bind_down; otherwise +# normal history / multiline movement). pj reports through $PJ_STATE: `open` +# = cancelled, `ran` = a task printed output, empty = no task sources +# (PJ_QUIET keeps down silent outside projects). +_zle-pj() { + if [[ $WIDGET == pj-down && -n $BUFFER ]]; then + zle down-line-or-history + return + fi + local state + state=$(mktemp) || return + zle -I + if [[ $WIDGET == pj-down ]]; then + PJ_STATE=$state PJ_QUIET=1 pj </dev/tty + else + PJ_STATE=$state pj </dev/tty + fi + case $(<$state) in + open) printf '\033[A' >/dev/tty; zle reset-prompt ;; + ran) ;; + *) zle reset-prompt ;; + esac + rm -f $state +} +zle -N pj-inline _zle-pj +zle -N pj-down _zle-pj + +bindkey '^E' tv-git-files +bindkey '^B' run-purple +bindkey '^Y' run-clip-last +bindkey '^O' gho-inline +bindkey '^P' pj-inline +# ctrl-a: omp-session resumes or starts omp for the repo; after a cancelled +# omp-sessions picker it moves the cursor back up itself. +bindkey '^A' run-omp-session +# ctrl-n: always a new omp session. +bindkey '^N' run-omp +# ctrl-f: yazi; yy cd's to yazi's exit dir on quit. +bindkey '^F' run-yy +bindkey '^G' run-lazygit +bindkey '^[[B' pj-down +bindkey '^[OB' pj-down + +# ctrl-q mirrors ctrl-d's preset (`exit`) — quit the shell. +_zle-exit() { exit } +zle -N _zle-exit +bindkey '^Q' _zle-exit + +# ctrl-c at the prompt: wipe any typed text AND clear screen + kitty +# scrollback (2J/3J drops it, like the fish `clear` wrapper). ^C is the tty +# INTR char, so this lives in TRAPINT — bindkey '^C' would never fire. +# Mid-command SIGINT behaves normally (128+SIGINT). BUFFER is read-only in +# trap context, so builtin widgets are invoked via `zle .name` instead. +TRAPINT() { + if zle; then + zle .kill-buffer + printf '\033[2J\033[3J\033[1;1H' + zle .reset-prompt + return 0 + fi + return $(( 128 + $1 )) +} diff --git a/dot_gitconfig.tmpl b/dot_gitconfig.tmpl new file mode 100644 index 0000000..f258640 --- /dev/null +++ b/dot_gitconfig.tmpl @@ -0,0 +1,61 @@ +[credential "https://github.com"] + helper = + helper = !gh auth git-credential +[credential "https://gist.github.com"] + helper = + helper = !gh auth git-credential +[user] + email = {{ .email }} + name = {{ .name }} +[url "git@github.com:"] + pushInsteadOf = https://github.com/ +[pager] + diff = diffnav +[delta] + dark = true + tabs = 2 + + file-style = omit + file-decoration-style = none + + line-numbers-left-format = "{nm:>4} " + line-numbers-right-format = "│ {np:>4} " + line-numbers-left-style = white dim + line-numbers-right-style = "#1f2335" dim + line-numbers-zero-style = white dim + line-numbers-plus-style = white dim + line-numbers-minus-style = white dim + line-numbers-zero-style = white dim + + wrap-left-symbol = " " + wrap-right-symbol = " " + wrap-right-prefix-symbol = " " + + plus-style = syntax "#0e250e" + plus-emph-style = syntax "#103610" + minus-style = syntax "#402a26" + minus-emph-style = syntax "#45221c" + + hunk-label = " 󰡏 " + hunk-header-line-number-style = "#10233A" + hunk-header-style = "#868E99" + hunk-header-file-style = "#868E99" dim + hunk-header-decoration-style = "#163050" ol ul +[core] + pager = git-split-diffs --color | less -+LFX +[split-diffs] + min-line-width = 40 + theme-name = dark +[diff] + tool = codediff +[difftool "codediff"] + cmd = nvim \"$LOCAL\" \"$REMOTE\" +\"CodeDiff file $LOCAL $REMOTE\" +[push] + autoSetupRemote = true +[beads] + role = maintainer +[advice] + addIgnoredFile = false +[credential "https://prad.codes"] + helper = + helper = !tea login helper diff --git a/dot_leetcode/star-prompt.json b/dot_leetcode/star-prompt.json new file mode 100644 index 0000000..625af7e --- /dev/null +++ b/dot_leetcode/star-prompt.json @@ -0,0 +1,11 @@ +{ + "totalAccepted": 60, + "shownMilestones": [ + 10, + 20 + ], + "submissionsSinceLastPrompt": 43, + "windowStartedAt": 1790356839288, + "lastShownAt": 1790359187702, + "dismissed": true +} diff --git a/dot_leetcode/version-cache.json b/dot_leetcode/version-cache.json new file mode 100644 index 0000000..71af58d --- /dev/null +++ b/dot_leetcode/version-cache.json @@ -0,0 +1,5 @@ +{ + "lastCheck": 1791914670771, + "latestVersion": "3.5.2", + "hasBreakingChanges": false +} diff --git a/dot_leetcode/workspaces.json b/dot_leetcode/workspaces.json new file mode 100644 index 0000000..9e3a2be --- /dev/null +++ b/dot_leetcode/workspaces.json @@ -0,0 +1,6 @@ +{ + "active": "default", + "workspaces": [ + "default" + ] +} diff --git a/dot_leetcode/workspaces/default/collab.json b/dot_leetcode/workspaces/default/collab.json new file mode 100644 index 0000000..1d255b2 --- /dev/null +++ b/dot_leetcode/workspaces/default/collab.json @@ -0,0 +1,3 @@ +{ + "session": null +} diff --git a/dot_leetcode/workspaces/default/config.json b/dot_leetcode/workspaces/default/config.json new file mode 100644 index 0000000..6e29817 --- /dev/null +++ b/dot_leetcode/workspaces/default/config.json @@ -0,0 +1,7 @@ +{ + "workDir": "/home/prad/Code/github.com/prdlk/leetcode/work/1", + "lang": "python3", + "site": "leetcode.com", + "editor": "nvim", + "syncRepo": "https://github.com/prdlk/leetcode.git" +} diff --git a/dot_leetcode/workspaces/default/snapshots/.keep b/dot_leetcode/workspaces/default/snapshots/.keep new file mode 100644 index 0000000..e69de29 diff --git a/dot_leetcode/workspaces/default/timer.json b/dot_leetcode/workspaces/default/timer.json new file mode 100644 index 0000000..b0c10d8 --- /dev/null +++ b/dot_leetcode/workspaces/default/timer.json @@ -0,0 +1,4 @@ +{ + "solveTimes": {}, + "activeTimer": null +} diff --git a/dot_local/bin/executable_ai b/dot_local/bin/executable_ai new file mode 100755 index 0000000..2af4298 --- /dev/null +++ b/dot_local/bin/executable_ai @@ -0,0 +1,11 @@ +#!/bin/sh +# Choose and launch an AI CLI via gum. +choice=$(gum choose --header 'AI CLI' claude opencode codex hermes fractal) || exit 0 +[ -n "$choice" ] || exit 0 + +case "$choice" in + claude) exec claude --dangerously-skip-permissions ;; + # labels match the binary names, so just run it; + # add a dedicated case here if another tool needs flags + *) exec "$choice" ;; +esac diff --git a/dot_local/bin/executable_atuin-pick b/dot_local/bin/executable_atuin-pick new file mode 100755 index 0000000..df89662 --- /dev/null +++ b/dot_local/bin/executable_atuin-pick @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 +"""atuin-pick: atuin history picker for a kitty split (ctrl+shift+p). + +atuin search -i draws its TUI on the tty and prints the selected command +to stdout (Esc prints nothing). Filter to history from the current +directory. Hand the selection to an interactive fish via --init-command: +it runs inside that shell (aliases/abbr resolve, cd persists) with its +output in the split, and the prompt drops down below it. +""" +import os +import shlex +import subprocess + +# kitty's launch env has no ATUIN_SESSION (atuin's shell init never ran), so +# seed it here. atuin itself comes from the package manager, on PATH. +atuin = "atuin" +if "ATUIN_SESSION" not in os.environ: + os.environ["ATUIN_SESSION"] = subprocess.run( + [atuin, "uuid"], stdout=subprocess.PIPE, text=True + ).stdout.strip() + +sel = subprocess.run( + [atuin, "search", "-i", "--filter-mode", "directory"], + stdout=subprocess.PIPE, + text=True, +).stdout.strip() + +argv = ["fish"] +if sel: + argv += ["-C", f"echo {shlex.quote('\u276f ' + sel)}; {sel}"] +os.execvp("fish", argv) diff --git a/dot_local/bin/executable_brave-new-tab b/dot_local/bin/executable_brave-new-tab new file mode 100755 index 0000000..8bed772 --- /dev/null +++ b/dot_local/bin/executable_brave-new-tab @@ -0,0 +1,24 @@ +#!/bin/sh +# brave-new-tab URL +# Open URL in a new tab of the running Brave Origin (its last active window), +# or start Brave Origin with it. Detached, so the caller never blocks. +# Without a scheme, localhost, *.localhost, *.local, and 127.x get http://; +# anything else gets https://. +set -eu + +[ $# -eq 1 ] || { echo "usage: brave-new-tab URL" >&2; exit 2; } + +url=$1 +case $url in +*://* | about:*) ;; +*) + host=${url%%[/?#]*} + host=$(printf '%s' "${host%:*}" | tr '[:upper:]' '[:lower:]') + case $host in + localhost | *.localhost | *.local | 127.*) url="http://$url" ;; + *) url="https://$url" ;; + esac + ;; +esac + +exec setsid -f brave-origin --new-tab "$url" >/dev/null 2>&1 diff --git a/dot_local/bin/executable_c2p b/dot_local/bin/executable_c2p new file mode 100755 index 0000000..a9ba0fb --- /dev/null +++ b/dot_local/bin/executable_c2p @@ -0,0 +1,5 @@ +#!/bin/sh +# Code2Prompt with fuzzy-search template. +tpl=$(fd --type f --extension hbs . "$HOME/.config/code2prompt" | fzf) || exit 0 +[ -n "$tpl" ] || exit 0 +exec code2prompt --template "$tpl" diff --git a/dot_local/bin/executable_cp-appid b/dot_local/bin/executable_cp-appid new file mode 100755 index 0000000..cd2783c --- /dev/null +++ b/dot_local/bin/executable_cp-appid @@ -0,0 +1,43 @@ +#!/bin/sh +# Fuzzy-pick a desktop app ID and copy to clipboard. +existing_dirs="" +for d in /usr/share/applications \ + /usr/local/share/applications \ + "$HOME/.local/share/applications" \ + /var/lib/flatpak/exports/share/applications \ + "$HOME/.local/share/flatpak/exports/share/applications" \ + /var/lib/snapd/desktop/applications; do + [ -d "$d" ] && existing_dirs="$existing_dirs $d" +done + +if [ -z "$existing_dirs" ]; then + echo "No application directories found." >&2 + exit 1 +fi + +# word splitting of $existing_dirs is intended +# shellcheck disable=SC2086 +chosen=$( + fd --type f --extension desktop . $existing_dirs \ + | while IFS= read -r f; do + app_id=$(basename "$f" .desktop) + name=$(sed -n 's/^Name=//p' "$f" | head -n1) + [ -z "$name" ] && name=$app_id + printf '%s\t%s\n' "$name" "$app_id" + done \ + | sort -u -t "$(printf '\t')" -k1 \ + | fzf \ + --delimiter='\t' \ + --with-nth=1,2 \ + --prompt="App ID › " \ + --height=50% \ + --layout=reverse \ + --border=rounded \ + --info=inline +) + +[ -n "$chosen" ] || exit 0 + +app_id=$(printf '%s\n' "$chosen" | cut -f2) +printf '%s' "$app_id" | wl-copy +echo "Copied: $app_id" diff --git a/dot_local/bin/executable_extract_agents b/dot_local/bin/executable_extract_agents new file mode 100755 index 0000000..e6801f5 --- /dev/null +++ b/dot_local/bin/executable_extract_agents @@ -0,0 +1,16 @@ +#!/bin/sh +# Copy all AGENTS.md files to a target directory while preserving structure. +out_dir=$1 + +if [ -z "$out_dir" ]; then + echo "Error: Output directory required." >&2 + echo "Usage: extract_agents <absolute_or_relative_output_path>" >&2 + exit 1 +fi + +mkdir -p "$out_dir" + +# Find and copy preserving relative paths +fd -t f -g "AGENTS.md" -x cp --parents "{}" "$out_dir" + +echo "Extraction complete. Check $out_dir." diff --git a/dot_local/bin/executable_fab b/dot_local/bin/executable_fab new file mode 100755 index 0000000..b8016d4 --- /dev/null +++ b/dot_local/bin/executable_fab @@ -0,0 +1,44 @@ +#!/bin/sh +# Fuzzy find and execute a Fabric pattern. +json_file=$HOME/.config/fabric/pattern_explainations.json + +if [ ! -f "$json_file" ]; then + printf '\033[31mError: %s not found.\033[0m\n' "$json_file" >&2 + exit 1 +fi + +# fabric is aliased to fabric-ai in the shells; resolve the real binary here +if command -v fabric-ai >/dev/null 2>&1; then + fabric_bin=fabric-ai +else + fabric_bin=fabric +fi + +# 1. Safely capture piped input (if any) to a temp file — preserves all +# formatting and newlines, avoids variable escaping issues +temp_input=$(mktemp) +trap 'rm -f "$temp_input"' EXIT INT TERM + +if [ ! -t 0 ]; then + cat > "$temp_input" +fi + +# 2. Parse JSON to TSV -> fzf (name in list, description in preview) +selection=$(jq -r '.[] | "\(.name)\t\(.description)"' "$json_file" \ + | fzf --delimiter '\t' \ + --with-nth 1 \ + --preview 'echo {2}' \ + --preview-window 'right:60%:wrap' \ + --prompt 'Pattern > ' \ + --info inline \ + --bind 'ctrl-/:toggle-preview') + +# 3. Execute with or without the piped data +if [ -n "$selection" ]; then + pattern=$(printf '%s\n' "$selection" | cut -f1) + if [ -s "$temp_input" ]; then + "$fabric_bin" --pattern "$pattern" < "$temp_input" + else + "$fabric_bin" --pattern "$pattern" + fi +fi diff --git a/dot_local/bin/executable_gdc b/dot_local/bin/executable_gdc new file mode 100755 index 0000000..d8b6818 --- /dev/null +++ b/dot_local/bin/executable_gdc @@ -0,0 +1,9 @@ +#!/bin/sh +# Discard all git changes with gum confirmation. +if gum confirm "Discard all uncommitted changes? This is irreversible."; then + git reset --hard HEAD + git clean -fd + echo "Changes wiped." +else + echo "Operation aborted." +fi diff --git a/dot_local/bin/executable_gh-sonr-org-migrate b/dot_local/bin/executable_gh-sonr-org-migrate new file mode 100755 index 0000000..9776c08 --- /dev/null +++ b/dot_local/bin/executable_gh-sonr-org-migrate @@ -0,0 +1,163 @@ +#!/usr/bin/env bash +# gh-sonr-org-migrate +# Migrates all repos from orgs matching "sonr" into sonr-io, +# prompting via gum for renames on collision, then deletes emptied orgs. +# +# Requires: gh (authenticated as org owner on all orgs), gum, jq + +TARGET_ORG=sonr-io + +red() { printf '\033[31m%s\033[0m\n' "$*"; } +green() { printf '\033[32m%s\033[0m\n' "$*"; } +yellow() { printf '\033[33m%s\033[0m\n' "$*"; } +cyan() { printf '\033[36m%s\033[0m\n' "$*"; } +bcyan() { printf '\033[1;36m%s\033[0m\n' "$*"; } +bgreen() { printf '\033[1;32m%s\033[0m\n' "$*"; } + +# ── Preflight ──────────────────────────────────────────────────────────────── +for bin in gh gum jq; do + if ! command -v "$bin" >/dev/null 2>&1; then + red "missing dependency: $bin" + exit 1 + fi +done + +if ! gh auth status >/dev/null 2>&1; then + red "gh is not authenticated" + exit 1 +fi + +# ── Discover source orgs ───────────────────────────────────────────────────── +# All orgs the user belongs to whose login contains "sonr", excluding target. +mapfile -t source_orgs < <(gh api user/orgs --paginate --jq '.[].login' \ + | grep 'sonr' | grep -vx "$TARGET_ORG") + +if [ "${#source_orgs[@]}" -eq 0 ]; then + echo "No source orgs found. Nothing to do." + exit 0 +fi + +cyan "Source orgs:" +printf ' %s\n' "${source_orgs[@]}" +cyan "Target org:" +echo " $TARGET_ORG" +echo + +# Let the user confirm / trim the list interactively +mapfile -t selected_orgs < <(printf '%s\n' "${source_orgs[@]}" | gum choose --no-limit \ + --header "Select orgs to migrate into $TARGET_ORG (space to toggle, enter to confirm)") + +if [ "${#selected_orgs[@]}" -eq 0 ]; then + echo "Nothing selected. Exiting." + exit 0 +fi + +# ── Helpers ────────────────────────────────────────────────────────────────── +repo_exists_in_target() { + gh api "repos/$TARGET_ORG/$1" --silent >/dev/null 2>&1 +} + +transfer_repo() { + # $1 = source org, $2 = repo name, $3 = (optional) new name + local src=$1 repo=$2 new_name=${3:-} + local args=(-f "new_owner=$TARGET_ORG") + if [ -n "$new_name" ]; then + args+=(-f "new_name=$new_name") + fi + gh api -X POST "repos/$src/$repo/transfer" "${args[@]}" --silent +} + +# ── Migration ──────────────────────────────────────────────────────────────── +failed_transfers=() + +for org in "${selected_orgs[@]}"; do + echo + bcyan "── $org ──" + + mapfile -t repos < <(gh api "orgs/$org/repos" --paginate --jq '.[].name') + + if [ "${#repos[@]}" -eq 0 ]; then + echo " (no repos)" + continue + fi + + for repo in "${repos[@]}"; do + new_name="" + + if repo_exists_in_target "$repo"; then + yellow " ⚠ $repo already exists in $TARGET_ORG" + while true; do + new_name=$(gum input \ + --header "New name for $org/$repo (exists in $TARGET_ORG)" \ + --placeholder "$org-$repo" \ + --value "$org-$repo") + if [ -z "$new_name" ]; then + echo " skipped $org/$repo" + new_name=__SKIP__ + break + fi + if repo_exists_in_target "$new_name"; then + yellow " $new_name also exists — pick another" + else + break + fi + done + [ "$new_name" = __SKIP__ ] && continue + fi + + label="$org/$repo → $TARGET_ORG/${new_name:-$repo}" + if transfer_repo "$org" "$repo" "$new_name"; then + green " ✓ $label" + else + red " ✗ failed: $label" + failed_transfers+=("$org/$repo") + fi + done +done + +if [ "${#failed_transfers[@]}" -gt 0 ]; then + echo + red "Failed transfers (orgs containing these will NOT be deleted):" + printf ' %s\n' "${failed_transfers[@]}" +fi + +# ── Wait for transfers to settle ───────────────────────────────────────────── +# GitHub repo transfers are asynchronous; give them time to drain. +echo +gum spin --title "Waiting 30s for transfers to settle..." -- sleep 30 + +# ── Delete emptied orgs ────────────────────────────────────────────────────── +echo +for org in "${selected_orgs[@]}"; do + # Skip orgs with failed transfers + org_had_failure=0 + for f in ${failed_transfers[@]+"${failed_transfers[@]}"}; do + case "$f" in + "$org"/*) org_had_failure=1; break ;; + esac + done + if [ "$org_had_failure" -eq 1 ]; then + yellow "skipping delete: $org (had failures)" + continue + fi + + remaining=$(gh api "orgs/$org/repos" --paginate --jq '. | length' | jq -s 'add // 0') + + if [ "$remaining" -gt 0 ]; then + yellow "skipping delete: $org still has $remaining repo(s) (transfer pending?)" + continue + fi + + if gum confirm "Delete empty org $org?"; then + if gh api -X DELETE "orgs/$org" --silent; then + green "✓ deleted $org" + else + red "✗ could not delete $org (API delete requires org owner; may need manual deletion in Settings)" + fi + else + echo "kept $org" + fi +done + +echo +bgreen "Done." diff --git a/dot_local/bin/executable_ghg-clone b/dot_local/bin/executable_ghg-clone new file mode 100755 index 0000000..5b1145f --- /dev/null +++ b/dot_local/bin/executable_ghg-clone @@ -0,0 +1,116 @@ +#!/bin/sh +# ghq get + resolve the on-disk clone path; prints the repo directory. +# Shell wrappers (fish/bash/zsh `ghg` functions) cd into the printed path — +# a child process can't change the caller's cwd. +# +# Then sets up a prad.codes mirror when the repo has none (best effort; the +# clone never fails over it): +# github.com/<owner>/<name> you admin → pull mirror into a prad.codes org +# (picked with gum, guessed from the language; esc skips), every 8h +# prad.codes/<org>/<name> that isn't itself a mirror → push mirror to +# github.com/<you>/<name> (created if missing), on every push and every 8h +repo=$1 +if [ -z "$repo" ]; then + echo "usage: ghg-clone <repo>" >&2 + exit 1 +fi + +# ghq natively understands https://, ssh://, git@host:…, and host/user/repo. +# Keep its output on stderr so stdout stays clean for the wrapper's cd. +ghq get "$repo" >&2 || exit + +# Reduce the input to ghq's on-disk shape: <host>/<user>/<repo> — +# strip scheme (https://, ssh://, git://), user@ (git@github.com:…), +# turn scp host:path into host/path, drop trailing .git. +rel=$(printf '%s\n' "$repo" \ + | sed -E 's#^[[:alnum:]]+://##; s#^[^@/]+@##; s#:#/#; s#\.git$##') + +# bare "user/repo" with no host → default to github.com +case "$rel" in + *.*/*) ;; + *) rel=github.com/$rel ;; +esac + +dir=$(ghq root)/$rel +if [ ! -d "$dir" ]; then + echo "ghg: expected clone at $dir but it does not exist" >&2 + exit 1 +fi + +command -v zoxide >/dev/null 2>&1 && zoxide add "$dir" + +# ── Mirrors ─────────────────────────────────────────────────────────────── +# Everything below talks on stderr; stdout carries only the final path. +have() { command -v "$1" >/dev/null 2>&1; } + +# prad.codes orgs are per language; guess one from GitHub's primary language. +lang_org() { + case $1 in + Go) echo go ;; + Python | "Jupyter Notebook") echo py ;; + Rust) echo rs ;; + Dart) echo dart ;; + TeX) echo tex ;; + JavaScript | TypeScript | Astro | Svelte | Vue | HTML | CSS) echo js ;; + Markdown | MDX) echo md ;; + *) echo env ;; # Lua, Shell, no code at all (configs) + esac +} + +pull_mirror() { # owner name + info=$(gh repo view "$1/$2" --json viewerPermission,isPrivate,primaryLanguage \ + -q '[.viewerPermission, .isPrivate, .primaryLanguage.name // ""] | @tsv' 2>/dev/null) || return 0 + perm=$(printf '%s\n' "$info" | cut -f1) + private=$(printf '%s\n' "$info" | cut -f2) + lang=$(printf '%s\n' "$info" | cut -f3) + [ "$perm" = ADMIN ] || return 0 # someone else's repo: just a clone + # tea api exits 0 even on errors, hence jq -e on every response. + tea api "/api/v1/repos/search?q=$2&limit=50" | jq -e --arg u "github.com/$1/$2" \ + 'any(.data[]; (.original_url // "") | ascii_downcase | sub("(\\.git)?/?$"; "") | endswith($u | ascii_downcase))' \ + >/dev/null && return 0 + org=$(tea api '/api/v1/orgs?limit=50' | jq -r '.[].username' | + gum choose --header "Pull-mirror github.com/$1/$2 into which prad.codes org? (esc skips)" \ + --selected "$(lang_org "$lang")") || return 0 + [ -n "$org" ] || return 0 + echo "→ pull mirror: github.com/$1/$2 → prad.codes/$org/$2 (every 8h)" >&2 + priv= + [ "$private" = true ] && priv=--private + # shellcheck disable=SC2086 # $priv is one optional flag + tea repos migrate --name "$2" --owner "$org" --clone-url "https://github.com/$1/$2.git" \ + --service git --mirror --mirror-interval 8h --auth-token "$(gh auth token)" $priv >&2 || + echo "ghg: pull mirror failed" >&2 +} + +push_mirror() { # org name + repo=$(tea api "/api/v1/repos/$1/$2") + printf '%s' "$repo" | jq -e '.id and (.mirror | not)' >/dev/null || return 0 + tea api "/api/v1/repos/$1/$2/push_mirrors" | jq -e 'length == 0' >/dev/null || return 0 + me=$(gh api user -q .login 2>/dev/null) || return 0 + if gh repo view "$me/$2" >/dev/null 2>&1; then + gum confirm "Push-mirror prad.codes/$1/$2 to the existing github.com/$me/$2? Mirror pushes overwrite it." || return 0 + else + gum confirm "Push-mirror prad.codes/$1/$2 to a new github.com/$me/$2?" || return 0 + vis=--public + [ "$(printf '%s' "$repo" | jq -r .private)" = true ] && vis=--private + gh repo create "$me/$2" "$vis" --description "Mirror of https://prad.codes/$1/$2" >&2 || return 0 + fi + if jq -n --arg url "https://github.com/$me/$2.git" --arg user "$me" --arg pass "$(gh auth token)" \ + '{remote_address: $url, remote_username: $user, remote_password: $pass, + interval: "8h0m0s", sync_on_commit: true}' | + tea api -d @- "/api/v1/repos/$1/$2/push_mirrors" | jq -e .remote_name >/dev/null; then + tea api -X POST "/api/v1/repos/$1/$2/push_mirrors-sync" >/dev/null # first push now + echo "→ push mirror: prad.codes/$1/$2 → github.com/$me/$2 (on push + every 8h)" >&2 + else + echo "ghg: push mirror failed" >&2 + fi +} + +if have gh && have tea && have jq && have gum; then + owner=${rel#*/} name=${owner#*/} owner=${owner%%/*} + case $rel in + github.com/*/*) pull_mirror "$owner" "$name" ;; + prad.codes/*/*) push_mirror "$owner" "$name" ;; + esac +fi + +printf '%s\n' "$dir" diff --git a/dot_local/bin/executable_ghn b/dot_local/bin/executable_ghn new file mode 100755 index 0000000..0d0360d --- /dev/null +++ b/dot_local/bin/executable_ghn @@ -0,0 +1,28 @@ +#!/bin/sh +# Create a new private repo (prad.codes via tea, or github.com via gh), +# clone it with ghq, and print the clone directory for the shell wrapper to cd. +repo=$1 +if [ -z "$repo" ]; then + echo "usage: ghn <repo-name>" >&2 + exit 1 +fi + +host=$(gum choose "prad.codes" "github.com") || exit 1 + +if [ "$host" = prad.codes ]; then + owner=$(tea organizations list -o simple | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | gum choose) || exit 1 + [ -n "$owner" ] || exit 1 + + tea repos create --name "$repo" --owner "$owner" --private >&2 || exit 1 + + ghq get "https://prad.codes/$owner/$repo" >&2 || exit 1 + printf '%s\n' "$(ghq root)/prad.codes/$owner/$repo" +else + owner=$(gum choose "prdlk" "wltbs") || exit 1 + [ -n "$owner" ] || exit 1 + + gh repo create "$owner/$repo" --private >&2 || exit 1 + + ghq get "github.com/$owner/$repo" >&2 || exit 1 + printf '%s\n' "$(ghq root)/github.com/$owner/$repo" +fi diff --git a/dot_local/bin/executable_ghostty-tmux b/dot_local/bin/executable_ghostty-tmux new file mode 100755 index 0000000..9169c71 --- /dev/null +++ b/dot_local/bin/executable_ghostty-tmux @@ -0,0 +1,22 @@ +#!/bin/bash +# Ghostty's `command`: every Ghostty window gets its own tmux session, never +# a mirror of another window's. Reclaim the oldest detached session (left by +# a closed window, or restored by tmux-continuum after a reboot) so closed +# windows don't pile up sessions; otherwise start a new one. pj-palette's +# background task sessions (@pj_task, named <session>:<task>) are never +# reclaimed, and targets use the session id since names may contain ':'. +# The first window after boot starts the server, which is what triggers +# continuum's restore. +# ponytail: two windows opened in the same instant can claim the same detached +# session; take a lock (flock) here if that ever bites. + +# A server started here inherits this PATH. Ghostty launched from the desktop +# has no shell init, so add mise's shims for tools tmux plugins shell out to +# (bun for tmux-palette, fzf, zoxide). +[[ -d $HOME/.local/share/mise/shims ]] && PATH="$HOME/.local/share/mise/shims:$PATH" + +oldest=$(tmux list-sessions -f '#{&&:#{==:#{session_attached},0},#{!:#{@pj_task}}}' \ + -F '#{session_created} #{session_id}' 2>/dev/null | sort -n | head -1 | cut -d' ' -f2) + +[[ -n $oldest ]] && exec tmux attach-session -t "$oldest" +exec tmux new-session diff --git a/dot_local/bin/executable_git-summary b/dot_local/bin/executable_git-summary new file mode 100755 index 0000000..1dc4d2f --- /dev/null +++ b/dot_local/bin/executable_git-summary @@ -0,0 +1,20 @@ +#!/bin/sh +# Aggregate all AGENTS.md files in the current git repo via code2prompt. +repo_root=$(git rev-parse --show-toplevel 2>/dev/null) +if [ -z "$repo_root" ]; then + echo "git-summary: not inside a git repository" >&2 + exit 1 +fi + +template=$HOME/.config/code2prompt/agents-md.hbs +if [ ! -f "$template" ]; then + echo "git-summary: template not found at $template" >&2 + exit 1 +fi + +# Pass through any extra flags (e.g. --output-file, --tokens) +exec code2prompt "$repo_root" \ + --include "AGENTS.md" \ + --include "**/AGENTS.md" \ + --template "$template" \ + "$@" diff --git a/dot_local/bin/executable_gop b/dot_local/bin/executable_gop new file mode 100755 index 0000000..0ad0086 --- /dev/null +++ b/dot_local/bin/executable_gop @@ -0,0 +1,69 @@ +#!/bin/sh +# Open a git repo's web page in the browser — host-agnostic, so it works for +# github.com, prad.codes (Gitea), or any other forge whose web layout is +# https://<host>/<owner>/<repo> (all of them, in practice). +# +# Usage: gop [<remote> | <owner>/<repo> | <url>] +# no arg → origin, else upstream, else the first remote of the current repo +# bare owner/repo → github.com + +target=$1 +url= + +if [ -n "$target" ]; then + case $target in + *://* | *@*:* | */*) url=$target ;; # explicit url / scp / owner/repo + *) + url=$(git remote get-url "$target" 2>/dev/null) || { + echo "gop: no remote named '$target'" >&2 + exit 1 + } + ;; + esac +else + for remote in origin upstream $(git remote 2>/dev/null); do + url=$(git remote get-url "$remote" 2>/dev/null) && break + url= + done + if [ -z "$url" ]; then + echo "gop: not in a git repo, or it has no remotes" >&2 + exit 1 + fi +fi + +# Reduce any remote form to <host>/<owner>/<repo>. The web page is https +# unless the remote itself says plain http (a LAN forge, typically). +proto=https +case $url in + *://*) + # scheme form: drop scheme and credentials; drop the port for ssh/git + # (their port is not the web port), keep it for http/https. + scheme=${url%%://*} + rest=${url#*://} + rest=${rest#*@} + case $scheme in + ssh | git) + host=${rest%%/*} + rest="${host%%:*}/${rest#*/}" + ;; + http) proto=http ;; + esac + url=$rest + ;; + *@*:*) + # scp form: git@host:owner/repo + url=$(printf '%s\n' "${url#*@}" | sed 's#:#/#') + ;; +esac +url=${url%.git} +url=${url%/} +case $url in + */*/*) ;; # already host/owner/repo + */*) url=github.com/$url ;; + *) + echo "gop: could not parse a repo out of: ${target:-$url}" >&2 + exit 1 + ;; +esac + +exec ${BROWSER:-xdg-open} "$proto://$url" diff --git a/dot_local/bin/executable_kitty-day-save b/dot_local/bin/executable_kitty-day-save new file mode 100755 index 0000000..986dae7 --- /dev/null +++ b/dot_local/bin/executable_kitty-day-save @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +# Save every kitty daily session (~/.config/kitty/day_session.py) right before +# shutdown/reboot. +# +# kitty-day-save.service runs this under a logind "delay" inhibitor. When a +# shutdown or reboot starts, logind broadcasts PrepareForShutdown(true) and +# waits (InhibitDelayMaxSec, 5 s by default) for the lock to be released, which +# happens when this script exits. Nothing has been killed yet at that point, so +# every kitty still has all of its windows. The flush also stops further saves +# for a minute, so windows dying during the shutdown can't shrink the saved day. +# +# Usage: kitty-day-save hold the lock, wait for a shutdown, flush, exit +# kitty-day-save --now flush every running kitty immediately +set -u + +case "${1-}" in +--now) + # Every kitty on kitty.conf listens on @kitty-<pid>; ones that don't own + # a day session ignore the flush. + for s in $(grep -oE '@kitty-[0-9]+$' /proc/net/unix | sort -u); do + timeout 3 kitten @ --to "unix:$s" action kitten day_session.py flush >/dev/null 2>&1 & + done + wait + ;; +--wait) + # grep returns on the first match; gdbus is left to the service's cgroup. + grep -m1 -q 'PrepareForShutdown (true' < <( + gdbus monitor --system --dest org.freedesktop.login1 --object-path /org/freedesktop/login1 + ) && exec "$0" --now + ;; +*) + exec systemd-inhibit --what=shutdown --mode=delay --who=kitty \ + --why='Saving kitty sessions' "$0" --wait + ;; +esac diff --git a/dot_local/bin/executable_launch_omp_livediff_overlay b/dot_local/bin/executable_launch_omp_livediff_overlay new file mode 100755 index 0000000..edc5fa7 --- /dev/null +++ b/dot_local/bin/executable_launch_omp_livediff_overlay @@ -0,0 +1,16 @@ +#!/bin/sh +# Overlay omp on the current kitty window with a livediff split beside it. +# +# kitty appends -PID to config-file listen_on sockets, so a hardcoded +# --to unix:@kitty-local never matches. kitty @ resolves the real +# address from $KITTY_LISTEN_ON on its own. +if [ -z "${KITTY_LISTEN_ON:-}" ]; then + echo "launch_omp_livediff_overlay: no kitty remote-control socket (KITTY_LISTEN_ON unset)" >&2 + exit 1 +fi + +# omp overlays the current window; capture its window id +wid=$(kitty @ launch --type=overlay-main --cwd=current omp) || exit + +# livediff side by side in the same tab; keep focus on omp +exec kitty @ launch --match "id:$wid" --location=vsplit --keep-focus --cwd=current livediff diff --git a/dot_local/bin/executable_lc-elir b/dot_local/bin/executable_lc-elir new file mode 100755 index 0000000..0e2e637 --- /dev/null +++ b/dot_local/bin/executable_lc-elir @@ -0,0 +1,18 @@ +#!/bin/sh +# fzf-pick LeetCode solution files and run /leetcode-eli5 on each via omp. +root=${1:-.} + +# Match only numbered problem files: 1365.some-slug.js anywhere in the tree +files=$(fd --type f '^\d+\..+\.(js|ts)$' "$root" \ + | fzf --multi \ + --prompt='eli5> ' \ + --delimiter=/ \ + --with-nth=-3.. \ + --preview 'bat --color=always --line-range=:40 {}' \ + --preview-window=right:60%) +[ -n "$files" ] || exit 1 + +printf '%s\n' "$files" | while IFS= read -r f; do + echo "── /leetcode-eli5 $f" + omp -p "/leetcode-eli5 $f" +done diff --git a/dot_local/bin/executable_mandible-pick b/dot_local/bin/executable_mandible-pick new file mode 100755 index 0000000..9166212 --- /dev/null +++ b/dot_local/bin/executable_mandible-pick @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +# mandible-pick — pick a tool for mandible (it requires one), then open it. +# fzf over the executables installed on PATH (no shell builtins, keywords or +# aliases). A query with a space, such as "git remote add", or one that +# matches nothing is used as typed (tool + subcommand path). +# Used by the tmux-palette "mandible" item (alias: man). + +list() { # portable: no GNU find -printf + local d f + IFS=: read -ra dirs <<<"$PATH" + for d in "${dirs[@]}"; do + for f in "$d"/*; do [[ -x $f && ! -d $f ]] && printf '%s\n' "${f##*/}"; done + done +} +# enter: a query with a space ("git remote add") is a tool + subcommand path, +# taken as typed; otherwise the highlighted command, or the query if none. +q=$(list | sort -u | fzf --prompt 'mandible> ' --height 100% --reverse \ + --with-shell 'bash -c' \ + --bind 'enter:transform:[[ {q} == *" "* ]] && echo print-query || echo accept-or-print-query') || exit 0 +[ -n "$q" ] || exit 0 +# shellcheck disable=SC2086 # split "git remote" into tool + subcommands +exec mandible $q diff --git a/dot_local/bin/executable_mdcp b/dot_local/bin/executable_mdcp new file mode 100755 index 0000000..14b7bf7 --- /dev/null +++ b/dot_local/bin/executable_mdcp @@ -0,0 +1,17 @@ +#!/bin/sh +# Fetch a URL as markdown, copy to clipboard, preview with mdfried. +url=$1 +if [ -z "$url" ]; then + echo "usage: mdcp <url>" >&2 + exit 1 +fi + +if command -v wl-copy >/dev/null 2>&1; then + copy=wl-copy paste=wl-paste +else + echo "mdcp: no clipboard tool (wl-copy) found" >&2 + exit 1 +fi + +curl.md "$url" | "$copy" +"$paste" | mdfried diff --git a/dot_local/bin/executable_mdp b/dot_local/bin/executable_mdp new file mode 100755 index 0000000..43343e8 --- /dev/null +++ b/dot_local/bin/executable_mdp @@ -0,0 +1,6 @@ +#!/bin/sh +# Interactive Markdown selector and previewer. +file=$(fd --type f --extension md --max-depth 3 \ + | fzf --preview 'mdfried {}' --preview-window=right:60%:wrap) || exit 0 +[ -n "$file" ] || exit 0 +exec mdfried "$file" diff --git a/dot_local/bin/executable_mtime-sort b/dot_local/bin/executable_mtime-sort new file mode 100755 index 0000000..41eea11 --- /dev/null +++ b/dot_local/bin/executable_mtime-sort @@ -0,0 +1,24 @@ +#!/bin/sh +# Sort stdin lines newest-first by mtime — the base order of the television +# cables (tv then layers match quality and frecency on top). +# +# The path is each line's last tab-separated field (the whole line when it +# has no tab). With --repo, <path>/.git/index is stat'ed first, so a repo +# ranks by its last git activity rather than its directory mtime. Lines whose +# path does not exist are dropped; ties keep their input order. +# +# Usage: <lines> | mtime-sort [--repo] +exec perl -e ' + my $repo = @ARGV && $ARGV[0] eq "--repo"; + my ($i, @rows) = (0); + while (my $line = <STDIN>) { + chomp $line; + my $path = (split /\t/, $line)[-1]; + next unless defined $path && length $path; + my $mtime; + $mtime = (stat "$path/.git/index")[9] if $repo; + $mtime = (stat $path)[9] unless defined $mtime; + push @rows, [$mtime, $i++, $line] if defined $mtime; + } + print "$_->[2]\n" for sort { $b->[0] <=> $a->[0] || $a->[1] <=> $b->[1] } @rows; +' -- "$@" diff --git a/dot_local/bin/executable_omarchy-cycle b/dot_local/bin/executable_omarchy-cycle new file mode 100755 index 0000000..f4047c3 --- /dev/null +++ b/dot_local/bin/executable_omarchy-cycle @@ -0,0 +1,189 @@ +#!/bin/bash + +# omarchy:summary=Cycle through the windows of an app, or launch it if none are open +# omarchy:args=<app|browser|terminal|ai|webapp|webapp-NAME|kitty-CLASS> + +set -uo pipefail + +APP="${1:-}" + +if [[ -z $APP ]]; then + echo "Usage: omarchy-cycle <app|browser|terminal|ai|webapp|webapp-NAME|kitty-CLASS>" + exit 1 +fi + +# Per-class launch commands for kitty-* (class -> command run via `kitty -e`). +# Unmapped classes just open a plain kitty with that class. +declare -A KITTY_CMDS=( + # [kitty-lazygit]="lazygit" + # [kitty-btop]="btop" +) + +# --- Hyprland helpers -------------------------------------------------------- + +# Print the addresses of all windows whose class or initialClass matches the +# regex in $1. An optional regex in $2 excludes matches again — used to keep +# scratch windows out of a cycle. Windows are sorted by workspace, then by +# address, so the cycle order stays the same between calls. +addresses_matching() { + hyprctl clients -j | jq -r --arg re "$1" --arg not "${2:-}" ' + [ .[] + | select(((.class // "") | test($re; "i")) or ((.initialClass // "") | test($re; "i"))) + | select($not == "" or ( + (((.class // "") | test($not; "i")) or ((.initialClass // "") | test($not; "i"))) | not + )) + ] + | sort_by(.workspace.id, .address) + | .[].address' +} + +# Same, but drops site-specific app (SSA) windows, so real browsers stay apart +# from web apps that share a class prefix. +addresses_matching_no_ssa() { + hyprctl clients -j | jq -r --arg re "$1" ' + [ .[] + | select(((.class // "") | test($re; "i")) or ((.initialClass // "") | test($re; "i"))) + | select(((.class // "") | test("^(chrome-|webapp-)"; "i")) | not) + ] + | sort_by(.workspace.id, .address) + | .[].address' +} + +focused_address() { + hyprctl activewindow -j 2>/dev/null | jq -r '.address // empty' +} + +focus_window() { + hyprctl dispatch "hl.dsp.focus({ window = \"address:$1\" })" >/dev/null 2>&1 || + hyprctl dispatch focuswindow "address:$1" >/dev/null +} + +spawn() { + exec setsid uwsm-app -- $1 +} + +# --- Find the windows -------------------------------------------------------- + +declare -a INSTANCES + +if [[ $APP == "webapp" ]]; then + # Cycle all web apps: Firefox SSAs (WebApp-*) and Chromium/Brave SSAs (chrome-*). + # Real browsers are excluded, because their class has no SSA prefix. + INSTANCES=($(addresses_matching '^(webapp-|chrome-)')) + FALLBACK_APP="webapp-youtube" + +elif [[ $APP == webapp-* ]]; then + # Extract the web app name (e.g. "webapp-claude" -> "claude"). + WEBAPP_NAME="${APP#webapp-}" + # Firefox SSAs use the class WebApp-<Name>. Chromium SSAs use + # chrome-<host>__-Default, so the name is matched anywhere in the class. + INSTANCES=($(addresses_matching "webapp-${WEBAPP_NAME}|^chrome-.*${WEBAPP_NAME}")) + + if ((${#INSTANCES[@]} == 0)); then + # No window is open. Launch from the desktop entry. + DESKTOP_FILE=$(find ~/.local/share/applications -iname "WebApp-${WEBAPP_NAME}*.desktop" -print -quit 2>/dev/null) + [[ -n $DESKTOP_FILE ]] || + DESKTOP_FILE=$(find ~/.local/share/applications -iname "*${WEBAPP_NAME}*.desktop" -print -quit 2>/dev/null) + + if [[ -n $DESKTOP_FILE ]]; then + exec setsid gtk-launch "$(basename "$DESKTOP_FILE")" + else + echo "No desktop file found for web app: ${WEBAPP_NAME}" + exit 1 + fi + fi + +elif [[ $APP == "kitty" ]]; then + # Cycle all kitty windows, whatever the class (kitty, kitty-nvim, ...). + INSTANCES=($(addresses_matching '^kitty')) + DEFAULT_SPAWN="kitty" + +elif [[ $APP == kitty-* ]]; then + # One kitty class, e.g. kitty-nvim -> class "kitty-nvim". + INSTANCES=($(addresses_matching "^${APP}$")) + + if ((${#INSTANCES[@]} == 0)); then + cmd="${KITTY_CMDS[$APP]:-}" + if [[ -n $cmd ]]; then + spawn "kitty --class $APP -e $cmd" + else + spawn "kitty --class $APP" + fi + fi + +elif [[ $APP == "ghostty" ]]; then + # Cycle Ghostty terminals (class com.mitchellh.ghostty). + INSTANCES=($(addresses_matching 'ghostty')) + DEFAULT_SPAWN="ghostty" + +elif [[ $APP == "browser" ]]; then + # Cycle all browsers. Web apps are left out. + INSTANCES=($(addresses_matching_no_ssa '^(zen|brave|chromium|google-chrome|firefox|librewolf|vivaldi|microsoft-edge|helium)')) + DEFAULT_LAUNCHER="omarchy-launch-browser" + +elif [[ $APP == "brave" ]]; then + # Cycle the Brave Origin browser and all of its web apps. Both the + # real browser (class brave-origin) and the SSAs (class brave-<host>) + # share the brave- prefix, so one regex catches them all. + INSTANCES=($(addresses_matching '^brave')) + DEFAULT_LAUNCHER="omarchy-launch-browser" + +elif [[ $APP == "terminal" ]]; then + # Cycle all terminals. Tern (so.stencil.tern) is the SUPER + A scratch + # terminal and the pattern below already leaves it out. + INSTANCES=($(addresses_matching '(kitty|alacritty|ghostty|foot|wezterm)')) + DEFAULT_LAUNCHER="omarchy-launch-terminal" + +elif [[ $APP == "ai" ]]; then + # Cycle the AI desktop apps (Claude/Hermes). + INSTANCES=($(addresses_matching '(claude|hermes)')) + DEFAULT_SPAWN="hermes desktop" + +else + # Any other app, matched on the full class. + INSTANCES=($(addresses_matching "^${APP}$")) +fi + +# --- Launch if nothing is open ----------------------------------------------- + +if ((${#INSTANCES[@]} == 0)); then + if [[ -n ${DEFAULT_LAUNCHER:-} ]]; then + exec setsid "$DEFAULT_LAUNCHER" + fi + + if [[ -n ${DEFAULT_SPAWN:-} ]]; then + spawn "$DEFAULT_SPAWN" + fi + + if [[ -n ${FALLBACK_APP:-} ]]; then + exec "$0" "$FALLBACK_APP" + fi + + if [[ $APP == "webapp" ]]; then + echo "No ${APP} windows running" + exit 0 + fi + + spawn "$APP" +fi + +# --- Focus, or cycle to the next window -------------------------------------- + +if ((${#INSTANCES[@]} == 1)); then + focus_window "${INSTANCES[0]}" + exit 0 +fi + +FOCUSED=$(focused_address) + +# If the focused window is one of ours, go to the next one. If it is not, +# go to the first one. +next_index=0 +for i in "${!INSTANCES[@]}"; do + if [[ -n $FOCUSED && ${INSTANCES[$i]} == "$FOCUSED" ]]; then + next_index=$(((i + 1) % ${#INSTANCES[@]})) + break + fi +done + +focus_window "${INSTANCES[$next_index]}" diff --git a/dot_local/bin/executable_omarchy-cycle-browser b/dot_local/bin/executable_omarchy-cycle-browser new file mode 100755 index 0000000..a46d265 --- /dev/null +++ b/dot_local/bin/executable_omarchy-cycle-browser @@ -0,0 +1,5 @@ +#!/bin/bash + +# omarchy:summary=Cycle Brave Origin windows and all its web apps; launch brave-origin if none are open. + +exec "$(dirname "$(readlink -f "$0")")/omarchy-cycle" brave diff --git a/dot_local/bin/executable_omarchy-cycle-terminal b/dot_local/bin/executable_omarchy-cycle-terminal new file mode 100755 index 0000000..78d07da --- /dev/null +++ b/dot_local/bin/executable_omarchy-cycle-terminal @@ -0,0 +1,5 @@ +#!/bin/bash + +# omarchy:summary=Cycle through all terminals (ghostty/kitty/alacritty/foot/wezterm); launch the default if none are open. + +exec "$(dirname "$(readlink -f "$0")")/omarchy-cycle" terminal diff --git a/dot_local/bin/executable_omarchy-cycle-window-size b/dot_local/bin/executable_omarchy-cycle-window-size new file mode 100755 index 0000000..19caccc --- /dev/null +++ b/dot_local/bin/executable_omarchy-cycle-window-size @@ -0,0 +1,127 @@ +#!/bin/bash + +# omarchy:summary=Cycle the focused window through preset sizes +# omarchy:args=[next|prev] + +set -uo pipefail + +DIRECTION="${1:-next}" + +# Preset widths, as a fraction of the screen. Edit to taste. +# These only apply to dwindle and to floating windows. On a scrolling +# workspace the layout cycles its own list instead. Set that list with: +# hl.config({ scrolling = { explicit_column_widths = "0.333, 0.5, 0.667, 1.0" } }) +FRACTIONS=(0.333 0.5 0.667) + +# Height of a floating window, as a fraction of the screen. +FLOATING_HEIGHT=0.8 + +STATE_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/omarchy/window-sizes" + +# Try the Lua dispatcher first, then fall back to the legacy name. +hypr_dispatch() { + local lua="$1" + shift + + hyprctl dispatch "$lua" >/dev/null 2>&1 || hyprctl dispatch "$@" >/dev/null +} + +calc() { + awk "BEGIN { printf \"%s\", $1 }" +} + +ACTIVE=$(hyprctl activewindow -j 2>/dev/null) +[[ -n $ACTIVE && $ACTIVE != "{}" ]] || exit 0 + +ADDRESS=$(jq -r '.address // empty' <<<"$ACTIVE") +FLOATING=$(jq -r '.floating // false' <<<"$ACTIVE") +WORKSPACE=$(jq -r '.workspace.id // empty' <<<"$ACTIVE") +LAYOUT=$(hyprctl activeworkspace -j 2>/dev/null | jq -r '.tiledLayout // empty') + +# --- Scrolling: the layout keeps its own preset list ------------------------ + +if [[ $FLOATING != "true" && $LAYOUT == "scrolling" ]]; then + if [[ $DIRECTION == "prev" ]]; then + MSG="colresize -conf" + else + MSG="colresize +conf" + fi + + hypr_dispatch "hl.dsp.layout(\"$MSG\")" layoutmsg "$MSG" + exit 0 +fi + +# --- Step to the next preset ------------------------------------------------ + +# Floating windows keep an index of their own. Tiled windows share one index +# per workspace, because the split is a property of the workspace. +if [[ $FLOATING == "true" ]]; then + STATE_KEY="window-${ADDRESS}" +else + STATE_KEY="workspace-${WORKSPACE}" +fi + +STATE_FILE="$STATE_DIR/${STATE_KEY}.index" +COUNT=${#FRACTIONS[@]} + +INDEX=0 +if [[ -f $STATE_FILE ]]; then + INDEX=$(<"$STATE_FILE") + [[ $INDEX =~ ^[0-9]+$ ]] || INDEX=0 +fi + +if [[ $DIRECTION == "prev" ]]; then + INDEX=$(((INDEX - 1 + COUNT) % COUNT)) +else + INDEX=$(((INDEX + 1) % COUNT)) +fi + +mkdir -p "$STATE_DIR" +printf '%s\n' "$INDEX" >"$STATE_FILE" + +FRACTION=${FRACTIONS[$INDEX]} + +# --- Floating: set an absolute size and center ------------------------------ + +if [[ $FLOATING == "true" ]]; then + read -r MON_W MON_H < <(hyprctl monitors -j | + jq -r '.[] | select(.focused) | "\(((.width / .scale) | floor)) \(((.height / .scale) | floor))"') + + [[ -n ${MON_W:-} && -n ${MON_H:-} ]] || exit 1 + + WIDTH=$(calc "int($MON_W * $FRACTION)") + HEIGHT=$(calc "int($MON_H * $FLOATING_HEIGHT)") + + hypr_dispatch "hl.dsp.window.resize({ x = $WIDTH, y = $HEIGHT })" resizeactive exact "$WIDTH" "$HEIGHT" + hypr_dispatch "hl.dsp.window.center()" centerwindow + exit 0 +fi + +# --- Dwindle: set the split ratio ------------------------------------------- + +# splitratio 1.0 is an even split, so a fraction of 0.5 maps to 1.0. +# With the default split_bias of 0, the ratio goes to the left or top window. +# So when the focused window is the right or bottom one, the fraction is +# mirrored. Which side the window sits on is read from its position. +read -r WIN_X WIN_Y WIN_W WIN_H < <(jq -r '"\(.at[0]) \(.at[1]) \(.size[0]) \(.size[1])"' <<<"$ACTIVE") +read -r MON_X MON_Y MON_W MON_H < <(hyprctl monitors -j | + jq -r '.[] | select(.focused) | "\(.x) \(.y) \(((.width / .scale) | floor)) \(((.height / .scale) | floor))"') + +MIRROR=false +if ((WIN_W * 100 > MON_W * 90)); then + # The window spans the screen, so the split is top and bottom. + ((WIN_Y + WIN_H / 2 > MON_Y + MON_H / 2)) && MIRROR=true +else + ((WIN_X + WIN_W / 2 > MON_X + MON_W / 2)) && MIRROR=true +fi + +if [[ $MIRROR == "true" ]]; then + RATIO=$(calc "2 * (1 - $FRACTION)") +else + RATIO=$(calc "2 * $FRACTION") +fi + +# Hyprland accepts 0.1 to 1.9. +RATIO=$(calc "($RATIO < 0.1 ? 0.1 : ($RATIO > 1.9 ? 1.9 : $RATIO))") + +hypr_dispatch "hl.dsp.layout(\"splitratio $RATIO exact\")" layoutmsg "splitratio $RATIO exact" diff --git a/dot_local/bin/executable_omarchy-launch-browser b/dot_local/bin/executable_omarchy-launch-browser new file mode 100755 index 0000000..289192b --- /dev/null +++ b/dot_local/bin/executable_omarchy-launch-browser @@ -0,0 +1,19 @@ +#!/bin/bash + +# omarchy:summary=Launch the default browser; a cold Brave Origin start reopens the last session without the "Restore pages?" prompt. +# omarchy:args=[url] + +# Shadows /usr/bin/omarchy-launch-browser (~/.local/bin is earlier on PATH) +# and hands off to it. A reboot or power-off kills Brave uncleanly, so the +# next start counts as post-crash: Chromium then skips session restore and +# shows the "Restore pages?" bubble instead. --hide-crash-restore-bubble +# clears that post-crash state, and --restore-last-session reopens every +# window. Added only on a cold, non-private start: a running browser ignores +# both, and Omarchy's launcher would read the first flag as the URL to focus. +if [[ " $* " != *" --private "* ]] && + [[ $(env -u BROWSER xdg-settings get default-web-browser) == brave-origin.desktop ]] && + ! pgrep -f '^/opt/brave-origin-bin/brave( |$)' >/dev/null; then + set -- --restore-last-session --hide-crash-restore-bubble "$@" +fi + +exec /usr/bin/omarchy-launch-browser "$@" diff --git a/dot_local/bin/executable_omarchy-pip b/dot_local/bin/executable_omarchy-pip new file mode 100755 index 0000000..00b7ca1 --- /dev/null +++ b/dot_local/bin/executable_omarchy-pip @@ -0,0 +1,70 @@ +#!/bin/bash + +# omarchy:summary=Toggle a window between picture-in-picture (floating, pinned, bottom-left corner of the focused monitor) and tiled. +# omarchy:args=[toggle|on] [address:0x...] + +set -uo pipefail + +# Usage: omarchy-pip [toggle|on] [address:0x...] +# +# "on" always fits the window: float, pin, resize to FRACTION of the focused +# monitor on both axes and park it in the bottom-left corner, inset by GAP. +# "toggle" (the default) does that unless the window is already floating and +# pinned, in which case it unpins and tiles it again. The window defaults to +# the active one. omarchy-summon calls "on" after carrying its window to the +# focused monitor; the YouTube window rule in hypr/hyprland.lua mirrors the +# same fraction and inset for the first open, so keep the three in sync. +MODE=${1:-toggle} +WINDOW=${2:-} +case $MODE in +toggle | on) ;; +*) + echo "usage: ${0##*/} [toggle|on] [address:0x...]" >&2 + exit 2 + ;; +esac + +FRACTION=0.3 +# Matches general:gaps_out so the window lines up with tiled neighbours and +# its border stays on screen. +GAP=10 + +# Lua dispatcher first, classic name as the pre-lua fallback (same shape as +# the other omarchy-* scripts here). +hypr_dispatch() { + local lua="$1" + shift + hyprctl dispatch "$lua" >/dev/null 2>&1 || hyprctl dispatch "$@" >/dev/null +} + +if [[ -z $WINDOW ]]; then + ACTIVE=$(hyprctl activewindow -j 2>/dev/null) + [[ -n $ACTIVE && $ACTIVE != "{}" ]] || exit 0 + WINDOW="address:$(jq -r '.address' <<<"$ACTIVE")" +else + ACTIVE=$(hyprctl clients -j | jq -c --arg a "${WINDOW#address:}" 'first(.[] | select(.address == $a)) // empty') + [[ -n $ACTIVE ]] || exit 1 +fi + +# The wiki documents action = "set", but on Hyprland 0.56 "set" toggles; +# "on" / "off" are what the dispatcher actually honours. +if [[ $MODE == toggle ]] && [[ $(jq -r '.floating and .pinned' <<<"$ACTIVE") == true ]]; then + hypr_dispatch "hl.dsp.window.pin({ action = \"off\", window = \"$WINDOW\" })" pin "$WINDOW" + hypr_dispatch "hl.dsp.window.float({ action = \"off\", window = \"$WINDOW\" })" settiled "$WINDOW" + exit 0 +fi + +# Focused monitor: origin and logical size. +read -r MON_X MON_Y MON_W MON_H < <(hyprctl monitors -j | + jq -r '.[] | select(.focused) | "\(.x) \(.y) \(((.width / .scale) | floor)) \(((.height / .scale) | floor))"') +[[ -n ${MON_H:-} ]] || exit 1 + +WIDTH=$(awk "BEGIN { printf \"%d\", $MON_W * $FRACTION }") +HEIGHT=$(awk "BEGIN { printf \"%d\", $MON_H * $FRACTION }") +X=$((MON_X + GAP)) +Y=$((MON_Y + MON_H - HEIGHT - GAP)) + +hypr_dispatch "hl.dsp.window.float({ action = \"on\", window = \"$WINDOW\" })" setfloating "$WINDOW" +hypr_dispatch "hl.dsp.window.pin({ action = \"on\", window = \"$WINDOW\" })" pin "$WINDOW" +hypr_dispatch "hl.dsp.window.resize({ x = $WIDTH, y = $HEIGHT, window = \"$WINDOW\" })" resizewindowpixel "exact $WIDTH $HEIGHT,$WINDOW" +hypr_dispatch "hl.dsp.window.move({ x = $X, y = $Y, window = \"$WINDOW\" })" movewindowpixel "exact $X $Y,$WINDOW" diff --git a/dot_local/bin/executable_omarchy-smart-move b/dot_local/bin/executable_omarchy-smart-move new file mode 100755 index 0000000..32031b8 --- /dev/null +++ b/dot_local/bin/executable_omarchy-smart-move @@ -0,0 +1,106 @@ +#!/bin/bash + +# omarchy:summary=Move the focused window into a neighboring group or swap with the neighbor; floating windows go to a screen corner +# omarchy:args=<l|r|u|d> + +set -uo pipefail + +DIR="${1:-}" + +case "$DIR" in +l | r | u | d) ;; +*) + echo "Usage: omarchy-smart-move <l|r|u|d>" + exit 1 + ;; +esac + +hypr_dispatch() { + local lua="$1" + shift + + hyprctl dispatch "$lua" >/dev/null 2>&1 || hyprctl dispatch "$@" >/dev/null +} + +ACTIVE=$(hyprctl activewindow -j 2>/dev/null) +[[ -n $ACTIVE && $ACTIVE != "{}" ]] || exit 0 + +ADDRESS=$(jq -r '.address // empty' <<<"$ACTIVE") +WORKSPACE=$(jq -r '.workspace.id // empty' <<<"$ACTIVE") +GROUPED=$(jq -r '(.grouped // []) | length' <<<"$ACTIVE") + +[[ -n $ADDRESS && -n $WORKSPACE ]] || exit 0 + +# A floating window has no neighbours to swap with, so the four keys park it +# in a corner of its monitor instead, size unchanged, inside the reserved +# area (the bar) and inset by GAP (matches general:gaps_out, same as +# omarchy-pip). h/j/k/l read clockwise from the bottom left: l bottom-left, +# d top-left, u top-right, r bottom-right. +if [[ $(jq -r '.floating' <<<"$ACTIVE") == true ]]; then + GAP=10 + read -r WIN_W WIN_H MON_ID < <(jq -r '"\(.size[0]) \(.size[1]) \(.monitor)"' <<<"$ACTIVE") + read -r MON_X MON_Y MON_W MON_H RES_L RES_T RES_R RES_B < <(hyprctl monitors -j | jq -r --argjson id "$MON_ID" \ + '.[] | select(.id == $id) | "\(.x) \(.y) \(((.width / .scale) | floor)) \(((.height / .scale) | floor)) \(.reserved | join(" "))"') + [[ -n ${RES_B:-} ]] || exit 1 + + LEFT=$((MON_X + RES_L + GAP)) + RIGHT=$((MON_X + MON_W - RES_R - WIN_W - GAP)) + TOP=$((MON_Y + RES_T + GAP)) + BOTTOM=$((MON_Y + MON_H - RES_B - WIN_H - GAP)) + case $DIR in + l) X=$LEFT Y=$BOTTOM ;; + d) X=$LEFT Y=$TOP ;; + u) X=$RIGHT Y=$TOP ;; + r) X=$RIGHT Y=$BOTTOM ;; + esac + + hypr_dispatch "hl.dsp.window.move({ x = $X, y = $Y })" movewindowpixel "exact $X $Y,address:$ADDRESS" + exit 0 +fi + +# Find the nearest window in the given direction. A window counts as a +# neighbor only when it overlaps the focused window on the other axis, so a +# window in a far corner is not picked. +NEIGHBOR_GROUPED=$(hyprctl clients -j | jq -r \ + --arg address "$ADDRESS" \ + --arg dir "$DIR" \ + --argjson workspace "$WORKSPACE" ' + ( [ .[] | select(.address == $address) ] | first ) as $self + | if $self == null then "none" else + ( $self.at[0] + $self.size[0] / 2 ) as $sx + | ( $self.at[1] + $self.size[1] / 2 ) as $sy + | [ .[] + | select(.address != $address) + | select(.workspace.id == $workspace) + | select(.floating == false) + | select(.hidden == false) + | . + { + cx: (.at[0] + .size[0] / 2), + cy: (.at[1] + .size[1] / 2) + } + | select( + if $dir == "l" then .cx < $sx and (.at[1] < ($self.at[1] + $self.size[1])) and (($self.at[1]) < (.at[1] + .size[1])) + elif $dir == "r" then .cx > $sx and (.at[1] < ($self.at[1] + $self.size[1])) and (($self.at[1]) < (.at[1] + .size[1])) + elif $dir == "u" then .cy < $sy and (.at[0] < ($self.at[0] + $self.size[0])) and (($self.at[0]) < (.at[0] + .size[0])) + else .cy > $sy and (.at[0] < ($self.at[0] + $self.size[0])) and (($self.at[0]) < (.at[0] + .size[0])) + end + ) + ] + | sort_by( + if $dir == "l" or $dir == "r" then (.cx - $sx | fabs) else (.cy - $sy | fabs) end + ) + | first + | if . == null then "none" + elif ((.grouped // []) | length) > 0 then "group" + else "single" + end + end') + +# A group on either side means the move is group aware: Hyprland puts the +# window into the neighboring group, or takes it out of its own group at the +# edge. With no group in play, swap places with the neighbor instead. +if [[ $NEIGHBOR_GROUPED == "group" || $GROUPED -gt 1 ]]; then + hypr_dispatch "hl.dsp.window.move({ direction = \"$DIR\", group_aware = true })" movewindoworgroup "$DIR" +else + hypr_dispatch "hl.dsp.window.swap({ direction = \"$DIR\" })" swapwindow "$DIR" +fi diff --git a/dot_local/bin/executable_omarchy-summon b/dot_local/bin/executable_omarchy-summon new file mode 100755 index 0000000..7a17bb4 --- /dev/null +++ b/dot_local/bin/executable_omarchy-summon @@ -0,0 +1,55 @@ +#!/bin/bash + +# omarchy:summary=Launch a floating pinned app (youtube) or bring its window to the focused monitor's bottom-left corner. + +set -uo pipefail + +# Usage: omarchy-summon [youtube] +# +# Each profile is one app kept as a picture-in-picture window: the window +# rule in hypr/hyprland.lua floats, pins, sizes and parks it when it first +# opens, so a plain launch is enough when no window exists. When one does, +# this script carries it to the focused monitor and hands it to omarchy-pip +# to fit it there again: the two panels differ in logical size, and Hyprland +# keeps a floating window's pixel size and offset across a monitor move. +# +# PATTERN is an ERE over the window class. A web app's picture-in-picture +# overlay shares the class, so windows titled Picture-in-Picture are skipped +# (Omarchy's own pip rule owns those). +case ${1:-youtube} in +youtube) + # Chromium derives the class from the app URL, and the same web app has + # shown up under more than one host spelling (youtube.com vs + # www.youtube.com) once a video is playing, so match the family. + PATTERN='^brave-(www\.)?youtube\.com__.*$' + LAUNCH="gtk-launch YouTube" + ;; +*) + echo "usage: ${0##*/} [youtube]" >&2 + exit 2 + ;; +esac + +# Lua dispatcher first, classic name as the pre-lua fallback (same shape as +# the other omarchy-* scripts here). +hypr_dispatch() { + local lua="$1" + shift + hyprctl dispatch "$lua" >/dev/null 2>&1 || hyprctl dispatch "$@" >/dev/null +} + +ADDRESS=$(hyprctl clients -j | jq -r --arg re "$PATTERN" ' + first(.[] | select((.class | test($re)) and ((.title | test("Picture.?in.?[Pp]icture")) | not))) + | .address // empty') + +if [[ -z $ADDRESS ]]; then + exec setsid uwsm-app -- $LAUNCH >/dev/null 2>&1 +fi + +WINDOW="address:$ADDRESS" +MON_NAME=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name') +[[ -n $MON_NAME ]] || exit 1 + +hypr_dispatch "hl.dsp.window.move({ monitor = \"$MON_NAME\", window = \"$WINDOW\" })" movewindow "mon:$MON_NAME,$WINDOW" +omarchy-pip on "$WINDOW" +hypr_dispatch "hl.dsp.focus({ window = \"$WINDOW\" })" focuswindow "$WINDOW" diff --git a/dot_local/bin/executable_omarchy-toggle-layout b/dot_local/bin/executable_omarchy-toggle-layout new file mode 100755 index 0000000..f3e118e --- /dev/null +++ b/dot_local/bin/executable_omarchy-toggle-layout @@ -0,0 +1,41 @@ +#!/bin/bash + +# omarchy:summary=Toggle the workspace layout, and set every column to one width when it becomes scrolling +# omarchy:args=[width] + +set -uo pipefail + +# Column width, as a fraction of the screen, applied to every column on the +# workspace when it turns to scrolling. +WIDTH="${1:-0.75}" + +hypr_dispatch() { + local lua="$1" + shift + + hyprctl dispatch "$lua" >/dev/null 2>&1 || hyprctl dispatch "$@" >/dev/null +} + +current_layout() { + hyprctl activeworkspace -j 2>/dev/null | jq -r '.tiledLayout // empty' +} + +omarchy-hyprland-workspace-layout-toggle || exit 1 + +# The toggle writes a workspace rule, so the new layout can take a moment to +# show up. Read until it does, then act only on the scrolling case: dwindle +# re-tiles on its own and needs no widths. +for _ in {1..6}; do + case "$(current_layout)" in + scrolling) + MSG="colresize all $WIDTH" + hypr_dispatch "hl.dsp.layout(\"$MSG\")" layoutmsg "$MSG" + exit 0 + ;; + dwindle) + exit 0 + ;; + esac + + sleep 0.05 +done diff --git a/dot_local/bin/executable_omarchy-toggle-scratch b/dot_local/bin/executable_omarchy-toggle-scratch new file mode 100755 index 0000000..46e6745 --- /dev/null +++ b/dot_local/bin/executable_omarchy-toggle-scratch @@ -0,0 +1,134 @@ +#!/bin/bash + +# omarchy:summary=Toggle a scratch workspace (scratchpad, claude, fastmail, beeper, home, lmstudio), starting its resident apps when any is missing. + +set -uo pipefail + +# Usage: omarchy-toggle-scratch [scratchpad|claude|fastmail|beeper|home|lmstudio] +# +# Each profile is a special workspace, the monitor it opens on, and its +# resident apps (class pattern -> launch command; the pattern is an anchored +# ERE, so a plain class name matches itself). hypr/hyprland.lua pins every +# class to its workspace, so only the launch and the reveal are left here. A +# resident is launched only when no window on the workspace matches it, which +# is what keeps a launcher that always opens a fresh window (the Chromium +# web apps) from piling up duplicates. The scrolling layout gives each +# resident its own column, in the order they appear. +# +# HOME_MONITOR lists connector names or EDID descriptions, separated by |; +# the first one connected wins (descriptions, as in the workspace rules, +# survive a different DP connector after re-docking). When it is empty or +# none is connected, the workspace opens on the focused monitor. EXTERNAL is +# the main external display: the Studio Display, else the Samsung ultrawide +# (same order as hypr/monitors.lua). +EXTERNAL="Apple Computer Inc StudioDisplay 0x984262A7|Samsung Electric Company S34CG50 HNTY501103" +HOME_MONITOR="" +case ${1:-scratchpad} in +scratchpad) + NAME="scratchpad" + HOME_MONITOR=$EXTERNAL + MEMBERS=("so.stencil.tern|tern") + ;; +claude) + NAME="claude" + HOME_MONITOR=$EXTERNAL + MEMBERS=("com.anthropic.Claude|claude-desktop") + ;; +fastmail) + NAME="fastmail" + HOME_MONITOR="eDP-1" + MEMBERS=("com.fastmail.Fastmail|gtk-launch com.fastmail.Fastmail") + ;; +beeper) + NAME="beeper" + HOME_MONITOR="eDP-1" + MEMBERS=("Beeper|gtk-launch beeper") + ;; +home) + NAME="home" + MEMBERS=("brave-home\.google\.com__.*|gtk-launch 'Google Home'") + ;; +lmstudio) + NAME="lmstudio" + MEMBERS=("ai\.elementlabs\.lmstudio|gtk-launch ai.elementlabs.lmstudio") + ;; +*) + echo "usage: ${0##*/} [scratchpad|claude|fastmail|beeper|home|lmstudio]" >&2 + exit 2 + ;; +esac +WORKSPACE="special:$NAME" + +# Classes of the windows living on the scratchpad, shown or hidden. +scratch_classes() { + hyprctl clients -j | jq -r --arg ws "$WORKSPACE" '.[] | select(.workspace.name == $ws) | .class' +} + +scratch_windows() { + scratch_classes | wc -l +} + +# Name of the monitor currently displaying the scratchpad, if any. +scratch_monitor() { + hyprctl monitors -j | jq -r --arg ws "$WORKSPACE" '.[] | select(.specialWorkspace.name == $ws) | .name' +} + +scratch_visible() { + [[ -n $(scratch_monitor) ]] +} + +# Hyprland's lua config takes lua expressions on `hyprctl dispatch`; the +# classic dispatcher is the pre-lua fallback (same shape as omarchy-cycle). +focus_monitor() { + hyprctl dispatch "hl.dsp.focus({ monitor = \"$1\" })" >/dev/null 2>&1 || + hyprctl dispatch focusmonitor "$1" >/dev/null +} + +# togglespecialworkspace acts on the focused monitor, so focus decides where +# the scratchpad appears (or which copy hides). +toggle_on() { + focus_monitor "$1" + hyprctl dispatch "hl.dsp.workspace.toggle_special(\"$NAME\")" >/dev/null 2>&1 || + hyprctl dispatch togglespecialworkspace "$NAME" >/dev/null +} + +# The first connected home monitor, else whatever is focused. +target_monitor() { + hyprctl monitors -j | jq -r --arg m "$HOME_MONITOR" ' + . as $monitors + | first(($m | split("|"))[] as $want | $monitors[] | select(.name == $want or .description == $want)) + // first($monitors[] | select(.focused)) + | .name' +} + +# Showing: just hide, even if a member is gone. Missing members come back on +# the next reveal. +shown=$(scratch_monitor) +if [[ -n $shown ]]; then + toggle_on "$shown" + exit 0 +fi + +present=$(scratch_classes) +before=$(grep -c . <<<"$present") +launched=0 +for member in "${MEMBERS[@]}"; do + pattern=${member%%|*} + grep -qE "^(${pattern})$" <<<"$present" && continue + # eval so a launch command can quote a desktop id with spaces. + eval "setsid uwsm-app -- ${member#*|}" >/dev/null 2>&1 & + launched=1 +done + +if ((launched)); then + # Reveal once the first newcomer lands (Claude takes a few seconds); any + # later ones drop straight onto the now-visible scratchpad. Deciding the + # reveal after the window lands keeps this correct whether or not the rule + # already showed the workspace. + for _ in {1..80}; do + sleep 0.1 + (($(scratch_windows) > before)) && break + done +fi + +scratch_visible || toggle_on "$(target_monitor)" diff --git a/dot_local/bin/executable_omp-session b/dot_local/bin/executable_omp-session new file mode 100755 index 0000000..a783ccd --- /dev/null +++ b/dot_local/bin/executable_omp-session @@ -0,0 +1,296 @@ +#!/usr/bin/env python3 +"""omp-session — start or resume omp for the current git repo (ctrl-a in fish +and zsh), and the backend of the television `omp-sessions` cable +(~/.config/television/cable/omp-sessions.toml). + +Launch rules, inside a git repo: + default branch resume the newest session on it if it was written less than + 3 hours ago; otherwise pick one with `tv omp-sessions` + (all sessions of the repo). No sessions at all → new session. + other branch resume the newest session on it; none → new session. + detached HEAD pick with `tv omp-sessions` (no sessions → new session). +Outside a git repo: plain `omp`. + +A session belongs to the repo when its cwd is the worktree root or below it, +excluding worktrees nested inside it. omp does not record the git branch, so +a session's branch is the branch HEAD was on (per `git reflog`) when the +session file was last written. + +Cable entry points: + omp-session --list one "display<TAB>session file" record per session + omp-session --preview FILE title, cwd, and the conversation's message text + omp-session --resume FILE the cable's enter action: `omp --resume FILE` + omp-session --new the cable's ctrl-n action: a new `omp` session + +Env: + OMP_SESSION_STATE=FILE --resume/--new write `ran` to it, so the launcher can + tell a started session from a cancelled picker and + only move the cursor back up after a cancel (tv + --inline). + PI_CODING_AGENT_DIR omp's agent dir (default ~/.omp/agent). +""" + +import json +import os +import re +import signal +import subprocess +import sys +import tempfile +import time +from pathlib import Path + +RECENT = 3 * 3600 +SESSIONS = Path(os.environ.get("PI_CODING_AGENT_DIR") or Path.home() / ".omp" / "agent") / "sessions" + +# tv closes the preview pipe early on long sessions; exit quietly. +signal.signal(signal.SIGPIPE, signal.SIG_DFL) + +MOVES = ( + # (pattern, group of the branch HEAD moved to, group of the branch it left) + (re.compile(r"checkout: moving from (.+) to (.+)$"), 2, 1), + (re.compile(r"Branch: renamed refs/heads/(.+) to refs/heads/(.+)$"), 2, 1), + # rebase (start) detaches HEAD; the finish returns to the rebased branch. + (re.compile(r"rebase.*\(finish\): returning to refs/heads/(.+)$"), 1, 1), +) + + +def git(*args): + r = subprocess.run(["git", *args], capture_output=True, text=True) + return r.stdout.strip() if r.returncode == 0 else "" + + +def inside(path, root): + return path == root or path.startswith(root.rstrip("/") + "/") + + +class Session: + __slots__ = ("path", "mtime", "cwd", "title") + + def __init__(self, path, mtime, cwd, title): + self.path, self.mtime, self.cwd, self.title = path, mtime, cwd, title + + +def header(path): + """(cwd, title) from the head of a session file: an optional title record, + then the session record.""" + title = None + try: + with open(path, encoding="utf-8", errors="replace") as fh: + for _, line in zip(range(4), fh): + rec = json.loads(line) + if rec.get("type") == "title": + title = rec.get("title") + elif rec.get("type") == "session": + return rec.get("cwd"), title + except (OSError, ValueError): + pass + return None + + +def repo_sessions(top): + """Sessions whose cwd is inside the worktree `top`, newest first.""" + nested = [ + line[len("worktree "):] + for line in git("worktree", "list", "--porcelain").splitlines() + if line.startswith("worktree ") + ] + nested = [w for w in nested if w != top and inside(w, top)] + out = [] + for path in SESSIONS.glob("*/*.jsonl"): + h = header(path) + if not h or not h[0]: + continue + cwd, title = h + if not inside(cwd, top) or any(inside(cwd, w) for w in nested): + continue + try: + mtime = path.stat().st_mtime + except OSError: + continue + out.append(Session(path, mtime, cwd, title)) + out.sort(key=lambda s: s.mtime, reverse=True) + return out + + +class Timeline: + """Which branch HEAD was on at a given time, from this worktree's reflog.""" + + def __init__(self, current): + self.current = current + self.moves = [] # (unix time, to, from), newest first + for line in git("reflog", "--date=unix", "--format=%gd%x09%gs").splitlines(): + ref, _, subject = line.partition("\t") + m = re.search(r"@\{(\d+)\}", ref) + if not m: + continue + for pat, to, frm in MOVES: + hit = pat.search(subject) + if hit: + self.moves.append((int(m.group(1)), hit.group(to), hit.group(frm))) + break + + def branch_at(self, t): + for ts, to, _ in self.moves: + if ts <= t: + return to + # Older than every recorded move: the branch the oldest move left. + return self.moves[-1][2] if self.moves else self.current + + +def default_branch(): + ref = git("symbolic-ref", "--quiet", "--short", "refs/remotes/origin/HEAD") + if ref: + return ref.split("/", 1)[1] + for b in (git("config", "init.defaultBranch"), "main", "master"): + if b and git("rev-parse", "--verify", "--quiet", f"refs/heads/{b}"): + return b + return "" + + +def first_user_text(path): + try: + with open(path, encoding="utf-8", errors="replace") as fh: + for line in fh: + if '"role":"user"' not in line: + continue + text = message_text(json.loads(line).get("message") or {}) + if text.strip(): + return text.strip().splitlines()[0] + except (OSError, ValueError): + pass + return "" + + +def message_text(msg): + content = msg.get("content") + if isinstance(content, str): + return content + if isinstance(content, list): + return "\n".join(p.get("text", "") for p in content if isinstance(p, dict) and p.get("type") == "text") + return "" + + +def age(seconds): + for unit, size in (("w", 604800), ("d", 86400), ("h", 3600), ("m", 60)): + if seconds >= size: + return f"{int(seconds // size)}{unit}" + return "now" + + +# ── Cable entry points ───────────────────────────────────────────── + + +def cmd_list(): + top = git("rev-parse", "--show-toplevel") + if not top: + return + sessions = repo_sessions(top) + timeline = Timeline(git("branch", "--show-current")) + now = time.time() + rows = [] + for s in sessions: + branch = timeline.branch_at(s.mtime) + title = s.title or first_user_text(s.path) or s.path.stem + sub = os.path.relpath(s.cwd, top) + rows.append((age(now - s.mtime), branch, title + ("" if sub == "." else f" · {sub}"), s.path)) + width = min(max((len(r[1]) for r in rows), default=0), 24) + for when, branch, title, path in rows: + print(f"{when:>4} {branch[:width]:<{width}} {title}\t{path}") + + +def cmd_preview(path): + path = Path(path) + h = header(path) + cwd, title = h if h else ("", None) + updated = time.strftime("%Y-%m-%d %H:%M", time.localtime(path.stat().st_mtime)) + print(f"\033[1m{title or path.stem}\033[0m") + print(f"\033[2m{updated} · {cwd}\033[0m") + colors = {"user": "\033[1;36m", "assistant": "\033[1;35m"} + with open(path, encoding="utf-8", errors="replace") as fh: + for line in fh: + if '"type":"message"' not in line: + continue + try: + msg = json.loads(line).get("message") or {} + except ValueError: + continue + role = msg.get("role") + text = message_text(msg).strip() if role in colors else "" + if text: + print(f"\n{colors[role]}▌ {role}\033[0m\n{text}") + + +def mark_ran(): + state = os.environ.get("OMP_SESSION_STATE") + if state: + Path(state).write_text("ran\n") + + +def cmd_resume(path): + mark_ran() + os.execvp("omp", ["omp", "--resume", str(path)]) + + +# ── Launcher ─────────────────────────────────────────────────────── + + +def new_session(): + mark_ran() + os.execvp("omp", ["omp"]) + + +def pick(sessions): + if not sessions: + new_session() + fd, state = tempfile.mkstemp(prefix="omp-session.") + os.close(fd) + try: + subprocess.run(["tv", "omp-sessions", "--inline"], env={**os.environ, "OMP_SESSION_STATE": state}) + ran = Path(state).read_text().strip() == "ran" + finally: + os.unlink(state) + if not ran: + # Cancelled: tv left the cursor on the line below the prompt. + with open("/dev/tty", "w") as tty: + tty.write("\033[A") + + +def launch(): + top = git("rev-parse", "--show-toplevel") + if not top: + new_session() + sessions = repo_sessions(top) + branch = git("branch", "--show-current") + if not branch: + pick(sessions) + return + timeline = Timeline(branch) + mine = next((s for s in sessions if timeline.branch_at(s.mtime) == branch), None) + if branch == default_branch(): + if mine and time.time() - mine.mtime < RECENT: + cmd_resume(mine.path) + pick(sessions) + elif mine: + cmd_resume(mine.path) + else: + new_session() + + +def main(argv): + if not argv: + launch() + elif argv[0] == "--list": + cmd_list() + elif argv[0] == "--preview" and len(argv) == 2: + cmd_preview(argv[1]) + elif argv[0] == "--resume" and len(argv) == 2: + cmd_resume(argv[1]) + elif argv == ["--new"]: + new_session() + else: + sys.exit("usage: omp-session [--list | --preview FILE | --resume FILE | --new]") + + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/dot_local/bin/executable_pj b/dot_local/bin/executable_pj new file mode 100755 index 0000000..a563670 --- /dev/null +++ b/dot_local/bin/executable_pj @@ -0,0 +1,450 @@ +#!/usr/bin/env bash +# pj — task runner across every task source in the project, picked with the +# television `pj` cable (~/.config/television/cable/pj.toml). +# +# Sources: package.json scripts, Makefile targets, justfile recipes, mise +# tasks, devbox scripts, and pyproject.toml task tables (poe, pdm, rye, +# taskipy, hatch envs, console scripts). +# +# Scanning: cwd upward to the git toplevel (inclusive); outside a repo it +# stops at the nearest directory that holds a task source. A source is only +# listed when its runner is actually installed, so the list is never dead. +# Tasks from the most recently modified manifest come first. +# +# Usage: pj [extra args…] extra args are forwarded to the picked task +# +# Env: +# PJ_QUIET=1 suppress the "no task sources" error — the down-arrow +# bindings use this, where an empty tree is the normal case. +# PJ_STATE=FILE key bindings pass a path; pj writes `open` to it when the +# picker opens and `pj --run` writes `ran`, so the binding +# can tell "no tasks" / "cancelled" / "task printed output" +# apart and redraw the prompt accordingly (tv --inline). +# +# Cable entry points (tab-separated record fields, see `--list`): +# pj --list print one record per task +# pj --preview KIND TARGET ROOT FILE render a task's body +# pj --run KIND TARGET ROOT RUNNER run a task ($PJ_EXTRA holds extra args) + +have() { command -v "$1" >/dev/null 2>&1; } + +# ── pyproject.toml reader ────────────────────────────────────────── +# `list FILE` prints "tool<TAB>target" per task; `show FILE TARGET TOOL` +# prints one task's body. tomllib is stdlib on python 3.11+. +py_toml() { + python3 - "$@" <<'PY' 2>/dev/null +import json, sys, tomllib + +mode, path = sys.argv[1], sys.argv[2] +try: + with open(path, "rb") as fh: + data = tomllib.load(fh) +except Exception: + sys.exit(0) + + +def table(obj, *keys): + for key in keys: + if not isinstance(obj, dict): + return {} + obj = obj.get(key) or {} + return obj if isinstance(obj, dict) else {} + + +def tasks(): + """(tool, target, body) for every supported pyproject task table.""" + out = [] + for tool, tbl in ( + ("poe", table(data, "tool", "poe", "tasks")), + ("pdm", table(data, "tool", "pdm", "scripts")), + ("rye", table(data, "tool", "rye", "scripts")), + ("taskipy", table(data, "tool", "taskipy", "tasks")), + ): + for name, body in tbl.items(): + if tool == "pdm" and (name.startswith("_") or name.startswith("post_")): + continue # pdm's shared/hook keys are not runnable targets + out.append((tool, name, body)) + + for env, cfg in table(data, "tool", "hatch", "envs").items(): + for name, body in table(cfg, "scripts").items(): + out.append(("hatch", f"{env}:{name}", body)) + + seen = set() + for tbl in (table(data, "tool", "poetry", "scripts"), table(data, "project", "scripts")): + for name, body in tbl.items(): + if name in seen: + continue + seen.add(name) + out.append(("script", name, body)) + return out + + +def render(body): + if isinstance(body, str): + return body + if isinstance(body, list): + return "\n".join(x if isinstance(x, str) else json.dumps(x) for x in body) + if isinstance(body, dict): + for key in ("cmd", "shell", "script", "expr", "ref"): + if isinstance(body.get(key), str): + return body[key] + if isinstance(body.get("sequence"), list): + return render(body["sequence"]) + return json.dumps(body, indent=2) + return str(body) + + +if mode == "list": + for tool, name, _ in tasks(): + print(f"{tool}\t{name}") +else: + target, tool = sys.argv[3], sys.argv[4] + for t, name, body in tasks(): + if name == target and t == tool: + print(render(body)) + break +PY +} + +# ── Preview ──────────────────────────────────────────────────────── +if [ "${1-}" = --preview ]; then + kind=${2-} target=${3-} root=${4-} file=${5-} + cd "$root" 2>/dev/null || exit 0 + case $kind in + npm) + jq -r --arg s "$target" '.scripts[$s] // "(no such script)"' "$file" + ;; + make) + awk -v t="$target" ' + !hit && /^[^\t]/ { + ci = index($0, ":") + if (ci > 0) { + rest = substr($0, ci) + if (rest !~ /^::?=/) { + n = split(substr($0, 1, ci - 1), p, /[ \t]+/) + for (i = 1; i <= n; i++) + if (p[i] == t) { hit = 1; print; next } + } + } + } + hit && (/^\t/ || /^ +[^ ]/) { print; next } + hit { exit } + END { if (!hit) print "(no recipe — declared target only)" } + ' "$file" + ;; + just) + just --justfile "$file" --working-directory "$root" --show "$target" 2>&1 + ;; + mise) + mise tasks info "$target" 2>&1 + ;; + devbox) + jq -r --arg s "$target" \ + '.shell.scripts[$s] | if type == "array" then join("\n") else (. // "(no such script)") end' \ + "$file" + ;; + *) + py_toml show "$file" "$target" "$kind" + ;; + esac + exit 0 +fi + +# ── Run (the cable's enter action) ──────────────────────────────── +if [ "${1-}" = --run ]; then + kind=${2-} target=${3-} root=${4-} runner=${5-} + cd "$root" || exit 1 + # Tell the key binding a task ran (its output now sits below the prompt). + [ -n "${PJ_STATE-}" ] && echo ran >"$PJ_STATE" + + # Extra args from `pj a b …`, shell-quoted into $PJ_EXTRA by the picker. + extra=() + [ -n "${PJ_EXTRA-}" ] && eval "extra=($PJ_EXTRA)" + # Runners that need `--` to forward extra args to the task itself. + if [ ${#extra[@]} -gt 0 ]; then + case "$kind:$runner" in + npm:'npm run' | mise:* | devbox:*) extra=(-- "${extra[@]}") ;; + esac + fi + + # shellcheck disable=SC2206 # word splitting is how the runner prefix is built + cmd=(${runner} "$target" "${extra[@]}") + + # Wrap long-running server tasks in openlogs (live log tail for agents). + # Matches dev/start/serve/watch and namespaced variants like dev:web. + wrapper="" + if [[ $target =~ ^(dev|start|serve|watch)(:.*)?$ ]]; then + # Resolve the binary: PATH → mise resolution → mise installs glob + ol=$(command -v openlogs || true) + if [ -z "$ol" ] && have mise; then + ol=$(mise which openlogs 2>/dev/null || true) + fi + if [ -z "$ol" ]; then + for cand in "$HOME"/.local/share/mise/installs/node/*/bin/openlogs; do + [ -x "$cand" ] && { ol=$cand; break; } + done + fi + + if [ -n "$ol" ] && [ -x "$ol" ]; then + wrapper=$ol + else + echo "pj: openlogs not found, running unwrapped" >&2 + fi + fi + + if [ -n "$wrapper" ]; then + echo "→ $wrapper ${cmd[*]}" >&2 + exec "$wrapper" "${cmd[@]}" + else + echo "→ ${cmd[*]}" >&2 + exec "${cmd[@]}" + fi +fi + +# ── Collect targets ──────────────────────────────────────────────── +mise_config() { + local d=$1 c + for c in mise.toml .mise.toml mise/config.toml .mise/config.toml .config/mise/config.toml; do + [ -f "$d/$c" ] && { echo "$d/$c"; return 0; } + done + for c in mise-tasks .mise/tasks mise/tasks; do + [ -d "$d/$c" ] && { echo "$d/$c"; return 0; } + done + return 1 +} + +# Record layout (tab separated): kind, target, root, manifest, runner. +recs=() +add() { recs+=("$1"$'\t'"$2"$'\t'"$3"$'\t'"$4"$'\t'"$5"); } + +collect_npm() { + local dir=$1 pm d s + local pkg=$dir/package.json + [ -f "$pkg" ] || return + + # Priority: packageManager field (corepack) → lockfiles (walking up past + # $dir to catch monorepo-root locks) → npm fallback + pm=$(jq -r '.packageManager // empty' "$pkg" 2>/dev/null) + pm=${pm%%@*} + if [ -z "$pm" ]; then + d=$dir + while [ -z "$pm" ]; do + if [ -f "$d/bun.lockb" ] || [ -f "$d/bun.lock" ]; then + pm=bun + elif [ -f "$d/pnpm-lock.yaml" ]; then + pm=pnpm + elif [ -f "$d/yarn.lock" ]; then + pm=yarn + elif [ -f "$d/package-lock.json" ]; then + pm=npm + fi + [ "$d" = / ] && break + d=$(dirname "$d") + done + [ -n "$pm" ] || pm=npm + fi + have "$pm" || pm=npm + have "$pm" || return + + while IFS= read -r s; do + [ -n "$s" ] && add npm "$s" "$dir" "$pkg" "$pm run" + done < <(jq -r '.scripts // {} | keys[]' "$pkg" 2>/dev/null) +} + +collect_make() { + local dir=$1 f="" c t + have make || return + for c in GNUmakefile makefile Makefile; do + [ -f "$dir/$c" ] && { f=$dir/$c; break; } + done + [ -n "$f" ] || return + + # Text parse: explicit rules plus .PHONY operands (targets built from + # variables only show up in .PHONY). `make -p` is not used — it expands + # $(shell ...) and would run code just to list names. + local -A seen=() + while IFS= read -r t; do + [ -n "$t" ] && [ -z "${seen[$t]-}" ] || continue + seen[$t]=1 + add make "$t" "$dir" "$f" make + done < <(awk ' + /^\t/ { next } + /^[ \t]*#/ { next } + { + line = $0 + sub(/#.*/, "", line) + ci = index(line, ":") + if (ci == 0) next + lhs = substr(line, 1, ci - 1) + rest = substr(line, ci + 1) + if (substr(rest, 1, 1) == "=") next # := assignment + if (lhs ~ /[$%=]/) next # variables, pattern rules + n = split(lhs, parts, /[ \t]+/) + if (parts[1] == ".PHONY") { + sub(/^:+/, "", rest) + n = split(rest, parts, /[ \t]+/) + for (i = 1; i <= n; i++) + if (parts[i] != "" && parts[i] !~ /[$%]/) print parts[i] + next + } + for (i = 1; i <= n; i++) + if (parts[i] != "" && parts[i] !~ /^\./) print parts[i] + } + ' "$f") +} + +collect_just() { + local dir=$1 f="" c t + have just || return + for c in justfile .justfile Justfile JUSTFILE; do + [ -f "$dir/$c" ] && { f=$dir/$c; break; } + done + [ -n "$f" ] || return + + for t in $(just --justfile "$f" --working-directory "$dir" --summary --unsorted 2>/dev/null); do + add just "$t" "$dir" "$f" just + done +} + +collect_mise() { + local dir=$1 cfg t + have mise || return + cfg=$(mise_config "$dir") || return + + # mise also inherits parent-directory configs; filter to tasks defined + # under $dir so parents are not duplicated as we walk up. + while IFS= read -r t; do + [ -n "$t" ] && add mise "$t" "$dir" "$cfg" "mise run" + done < <(mise -C "$dir" tasks ls --json 2>/dev/null | + jq -r --arg dir "$dir/" ' + .[] + | select((.hide // false) | not) + | select((.source // "") | startswith($dir)) + | .name' 2>/dev/null) +} + +collect_devbox() { + local dir=$1 s + local f=$dir/devbox.json + [ -f "$f" ] || return + have devbox || return + + while IFS= read -r s; do + [ -n "$s" ] && add devbox "$s" "$dir" "$f" "devbox run" + done < <(jq -r '.shell.scripts // {} | keys[]' "$f" 2>/dev/null) +} + +# Runner prefix for a pyproject task table, or empty when nothing can run it. +# Tools that live in the project venv (poe, taskipy) fall back to `uv run`. +py_runner() { + case $1 in + poe) have poe && echo poe || { have uv && echo "uv run poe"; } ;; + taskipy) have task && echo task || { have uv && echo "uv run task"; } ;; + pdm) have pdm && echo "pdm run" ;; + rye) have rye && echo "rye run" ;; + hatch) have hatch && echo "hatch run" ;; + script) + if have poetry && grep -q '^\[tool\.poetry' "$2"; then + echo "poetry run" + elif have uv; then + echo "uv run" + fi + ;; + esac +} + +collect_py() { + local dir=$1 tool target runner + local f=$dir/pyproject.toml + [ -f "$f" ] || return + have python3 || return + + local -A runners=() + while IFS=$'\t' read -r tool target; do + [ -n "$tool" ] && [ -n "$target" ] || continue + if [ -z "${runners[$tool]-}" ]; then + runners[$tool]=$(py_runner "$tool" "$f") + [ -n "${runners[$tool]}" ] || runners[$tool]="-" + fi + runner=${runners[$tool]} + [ "$runner" = - ] && continue + add "$tool" "$target" "$dir" "$f" "$runner" + done < <(py_toml list "$f") +} + +# Walk cwd upward: to the git toplevel inside a repo, otherwise until a +# directory actually yields targets (a source file with no tasks in it must +# not hide a parent's Makefile). +git_top=$(git rev-parse --show-toplevel 2>/dev/null) +d=$PWD +while :; do + collect_npm "$d" + collect_make "$d" + collect_just "$d" + collect_mise "$d" + collect_devbox "$d" + collect_py "$d" + + [ "$d" = "$git_top" ] && break + [ "$d" = / ] && break + [ -z "$git_top" ] && [ ${#recs[@]} -gt 0 ] && break + d=$(dirname "$d") +done + +if [ ${#recs[@]} -eq 0 ]; then + [ -n "${PJ_QUIET-}" ] || echo "pj: no task sources found in this tree" >&2 + exit 1 +fi + +# ── List ─────────────────────────────────────────────────────────── +# Record (tab separated): display, kind, target, root, runner, manifest. +# Tag each display with its kind (npm rows use the package manager) so `make`, +# `just` or `poe` are typeable filters. The directory column only appears +# when more than one project contributed. The manifest is the last field so +# mtime-sort ranks tasks by their manifest's mtime. +primary=${recs[0]#*$'\t'} +primary=${primary#*$'\t'} +primary=${primary%%$'\t'*} +multi=0 +for r in "${recs[@]}"; do + root=${r#*$'\t'} + root=${root#*$'\t'} + root=${root%%$'\t'*} + [ "$root" = "$primary" ] || { multi=1; break; } +done + +list() { + local r kind target root file runner tag display + for r in "${recs[@]}"; do + IFS=$'\t' read -r kind target root file runner <<<"$r" + case $kind in + npm) tag=${runner%% *} ;; # npm | pnpm | yarn | bun + script) tag=py ;; # pyproject console entry points + *) tag=$kind ;; + esac + if [ "$multi" = 1 ]; then + display=$(printf '%-8s %-26s %s' "$tag" "$target" "${root##*/}") + else + display=$(printf '%-8s %s' "$tag" "$target") + fi + printf '%s\t%s\t%s\t%s\t%s\t%s\n' "$display" "$kind" "$target" "$root" "$runner" "$file" + done | mtime-sort +} + +if [ "${1-}" = --list ]; then + list + exit 0 +fi + +# ── Pick ─────────────────────────────────────────────────────────── +# The scan already ran, so hand tv the result instead of letting the cable +# re-run `pj --list`; tv's enter action calls `pj --run`. +tmp=$(mktemp "${TMPDIR:-/tmp}/pj.XXXXXX") || exit 1 +trap 'rm -f "$tmp"' EXIT +list >"$tmp" +if [ $# -gt 0 ]; then + PJ_EXTRA=$(printf '%q ' "$@") + export PJ_EXTRA +fi +[ -n "${PJ_STATE-}" ] && echo open >"$PJ_STATE" +tv pj --inline --source-command "cat '$tmp'" --input-header "$primary" diff --git a/dot_local/bin/executable_pj-palette b/dot_local/bin/executable_pj-palette new file mode 100755 index 0000000..11f08fe --- /dev/null +++ b/dot_local/bin/executable_pj-palette @@ -0,0 +1,244 @@ +#!/usr/bin/env bash +# pj-palette — pj's task runner as a tmux-palette source (the "tasks" palette, +# ~/.config/tmux-palette/palettes/tasks.json). +# +# pj-palette print palette items (JSON) for the active pane's +# project: running background tasks, quick actions +# (install, dev, sync, make, compose up, …) and +# every task `pj --list` finds +# pj-palette --run KIND TARGET ROOT RUNNER +# run a pj task (the item's action) +# pj-palette --cmd ROOT CMD… +# run a quick-action command in ROOT +# pj-palette --bg NAME [ROOT CMD…] +# show background session NAME in a popup, first +# starting CMD… in ROOT if it isn't running +# pj-palette --omp print the omp palette's items: this tmux +# session's omp (open or start), every other +# running <session>:omp, and Quit items +# +# One-off items open a full-width split along the bottom of the window (25% of +# its height) in the project root. The command runs in the foreground; ctrl-c +# stops it (the output stays). Once it has exited, enter or ctrl-c closes the +# pane. +# +# Long-running items (dev/start/serve/watch/preview tasks, compose up) run in a +# detached session named <session>:<tool-and-command> (leetcode:bun-run-dev), +# shown in a popup: q hides the popup and leaves the task running, ctrl-c +# asks for confirmation, then stops the task and ends its session. Running +# ones are listed first, under Running, to bring them back. tmux.conf's +# prefix + a starts omp the same way (<session>:omp); omp needs q, so its +# popup hides with ctrl-c (or prefix + a) and ctrl-q quits it. + +set -uo pipefail +self=$(readlink -f "$0") + +# While the task runs, ctrl-c reaches only the task: with SIGINT trapped, +# bash survives the child's death instead of exiting along with it. +interrupted= +trap 'interrupted=1' INT + +finish() { + local status=$1 key + # A background task stopped with ctrl-c ends its session (and popup). + [ -n "${PJ_BG-}" ] && [ -n "$interrupted" ] && exit 0 + printf '\n\033[2m[exit %s] enter or ctrl-c to close\033[0m' "$status" + trap 'exit 0' INT + while IFS= read -rsn1 key; do + [ -z "$key" ] && exit 0 # enter + done + exit 0 +} + +# Id of session NAME. Background session names contain ':', which -t reads +# as session:window, so they are targeted by id. +session_id() { + local id name + while IFS=$'\t' read -r id name; do + [ "$name" = "$1" ] && { printf '%s' "$id"; return 0; } + done < <(tmux list-sessions -F $'#{session_id}\t#{session_name}' 2>/dev/null) + return 1 +} + +case ${1-} in +--run) + shift + pj --run "$@" + finish $? + ;; +--cmd) + cd "$2" || exit 1 + shift 2 + printf '→ %s\n' "$*" >&2 + "$@" + finish $? + ;; +--bg) + name=$2 + if ! id=$(session_id "$name"); then + [ $# -ge 4 ] || exit 0 # a Running item whose task has since ended + root=$3 + shift 3 + id=$(tmux new-session -d -P -F '#{session_id}' -s "$name" -c "$root" -e PJ_BG=1 "$@") || exit 1 + # @pj_task marks the session for the Running list (and for tmux.conf's + # prefix + a, which hides any of these popups). + tmux set -t "$id" @pj_task "$root" \; set -t "$id" status off \; \ + set -t "$id" detach-on-destroy on + # Each session gets a key table for its hide/quit keys; other keys + # reach the program. A task's output takes no input, so q hides and + # ctrl-c (after a y/n confirm) stops the task. Interactive programs + # (omp) need q and typing, so ctrl-c hides and ctrl-q kills the session. + if [ "$1" = "$self" ]; then + tmux set -t "$id" key-table pj-task \; bind -T pj-task q detach-client \; \ + bind -T pj-task C-c confirm-before -p 'Stop #{session_name}? (y/n)' 'send-keys C-c' + else + tmux set -t "$id" key-table pj-app \; bind -T pj-app C-c detach-client \; \ + bind -T pj-app C-q kill-session + fi + fi + # Task output gets a big centered popup; interactive programs (omp) dock + # bottom-right beside the work. Positions past the client edge clamp to + # it (-x R would follow whichever pane tmux picks as current). + geometry=(-w 90% -h 80%) + [ "$(tmux display -p -t "$id" '#{key-table}')" = pj-app ] && + geometry=(-w 35% -h 60% -x '#{client_width}' -y '#{client_height}') + tmux display-popup -E "${geometry[@]}" -b rounded -T " $name " "tmux attach -t '$id'" + exit 0 + ;; +esac + +have() { command -v "$1" >/dev/null 2>&1; } +cwd=$(tmux display -p '#{pane_current_path}' 2>/dev/null) || cwd=$PWD +session=$(tmux display -p '#{session_name}' 2>/dev/null) +cd "$cwd" || exit 1 +root=$(git rev-parse --show-toplevel 2>/dev/null) || root=$cwd + +icon_for() { + case $1 in + bun) printf '' ;; + npm | yarn) printf '' ;; + pnpm) printf '' ;; + make) printf '' ;; + go) printf '' ;; + cargo) printf '' ;; + uv | py | poe | pdm | rye | taskipy | hatch | script) printf '' ;; + *) printf '' ;; + esac +} + +# Tasks that run until stopped: dev/start/serve/watch/preview, also as a +# namespace segment (dev:web, api:dev). +long_running() { [[ $1 =~ (^|:)(dev|start|serve|watch|preview)(:|$) ]]; } +slug() { local s=${*,,}; s=${s//[^a-z0-9]/-}; tr -s - <<<"$s"; } + +# Item action (a bash line the palette evals) running `pj-palette ARGV…`: +# in a full-width bottom split (25%) in DIR, or, given NAME, in the background +# session <session>:NAME shown in a popup. Argv goes to tmux as is (no shell, +# so fish re-parses nothing). +task_action() { # dir name argv… + local dir=$1 name=$2 + shift 2 + if [ -n "$name" ]; then + printf '%q ' "$self" --bg "$session:$name" "$dir" "$self" "$@" + else + printf '%q ' tmux split-window -v -f -l 25% -c "$dir" "$self" "$@" + fi +} + +items=() +item() { # category icon title description aliases(csv) action [icon color] + items+=("$(jq -cn --arg c "$1" --arg i "$2" --arg t "$3" --arg d "$4" --arg a "$5" --arg x "$6" --arg k "${7-}" \ + '{category: $c, icon: $i, title: $t, description: $d, + aliases: ($a | split(",") | map(select(. != ""))), action: {shell: $x}} + + if $k == "" then {} else {iconColor: $k} end')") +} +quick() { # icon title aliases background(0/1) dir argv… + local icon=$1 title=$2 aliases=$3 dir=$5 name="" desc="in ${5/#$HOME/\~}" + [ "$4" = 1 ] && { name=$(slug "$title"); desc+=" · background"; } + shift 5 + item Quick "$icon" "$title" "$desc" "$aliases" "$(task_action "$dir" "$name" --cmd "$dir" "$@")" +} + +# ── omp palette (palettes/omp.json): the <session>:omp agent sessions ────── +if [ "${1-}" = --omp ]; then + here=$session:omp live='#5eff6c' idle='#7b8496' + omps=$(tmux list-sessions -F $'#{session_id}\t#{session_name}\t#{@pj_task}\t#{session_attached}' 2>/dev/null | + awk -F'\t' '$2 ~ /:omp$/ && $3 != ""') + state() { [ "$1" -gt 0 ] && printf open || printf hidden; } + found= + while IFS=$'\t' read -r id name dir attached; do + [ "$name" = "$here" ] || continue + found=1 + item "This session" '' "$name" "$(state "$attached") · in ${dir/#$HOME/\~}" "" \ + "$(printf '%q ' "$self" --bg "$name")" "$live" + done <<<"$omps" + [ -n "$found" ] || item "This session" '' "$here" "not running · start in ${cwd/#$HOME/\~}" "new" \ + "$(printf '%q ' "$self" --bg "$here" "$cwd" omp)" "$idle" + while IFS=$'\t' read -r id name dir attached; do + [ -n "$name" ] && [ "$name" != "$here" ] || continue + item Running '' "$name" "$(state "$attached") · in ${dir/#$HOME/\~}" "" \ + "$(printf '%q ' "$self" --bg "$name")" "$live" + done <<<"$omps" + while IFS=$'\t' read -r id name dir attached; do + [ -n "$name" ] && item Quit '' "Quit $name" "kill the session" "kill" \ + "$(printf '%q ' tmux kill-session -t "$id")" + done <<<"$omps" + printf '%s\n' "${items[@]}" | jq -s . + exit 0 +fi + +# ── Background tasks still running (any project), to bring back ────────── +while IFS=$'\t' read -r name dir; do + [ -n "$dir" ] && item Running '' "$name" "in ${dir/#$HOME/\~}" "" "$(printf '%q ' "$self" --bg "$name")" +done < <(tmux list-sessions -F $'#{session_name}\t#{@pj_task}' 2>/dev/null) + +# ── Quick actions, from the files at the project root ───────────────────── +if [ -f "$root/package.json" ]; then + pm=$(jq -r '.packageManager // empty' "$root/package.json" 2>/dev/null) + pm=${pm%%@*} + if [ -z "$pm" ]; then + if [ -f "$root/bun.lock" ] || [ -f "$root/bun.lockb" ]; then pm=bun + elif [ -f "$root/pnpm-lock.yaml" ]; then pm=pnpm + elif [ -f "$root/yarn.lock" ]; then pm=yarn + else pm=npm + fi + fi + if have "$pm"; then + quick "$(icon_for "$pm")" "$pm install" "install,i" 0 "$root" "$pm" install + jq -e '.scripts.dev' "$root/package.json" >/dev/null 2>&1 && + quick "$(icon_for "$pm")" "$pm run dev" "dev" 1 "$root" "$pm" run dev + fi +fi +if [ -f "$root/pyproject.toml" ] && have uv; then + quick "$(icon_for uv)" "uv sync" "sync,install" 0 "$root" uv sync + quick "$(icon_for uv)" "uv run python" "py,repl" 0 "$root" uv run python +fi +if have make && { [ -f "$root/Makefile" ] || [ -f "$root/makefile" ] || [ -f "$root/GNUmakefile" ]; }; then + quick "$(icon_for make)" "make" "m,build" 0 "$root" make +fi +[ -f "$root/go.mod" ] && have go && quick "$(icon_for go)" "go run ." "run" 0 "$root" go run . +[ -f "$root/Cargo.toml" ] && have cargo && quick "$(icon_for cargo)" "cargo run" "run" 0 "$root" cargo run +if have docker; then + for f in compose.yaml compose.yml docker-compose.yaml docker-compose.yml; do + [ -f "$root/$f" ] || continue + quick '󰡨' "docker compose up" "up,compose" 1 "$root" docker compose up + break + done +fi + +# ── Every task pj finds (npm/bun/pnpm scripts, make, just, mise, devbox, +# pyproject task tables and console scripts) ───────────────────────────── +while IFS=$'\t' read -r display kind target troot runner _file; do + [ -n "$kind" ] || continue + tag=${display%% *} + desc="$runner $target" name="" + [ "$troot" != "$root" ] && desc+=" (${troot#"$root"/})" + long_running "$target" && { name=$(slug "$runner $target"); desc+=" · background"; } + item "Tasks: $tag" "$(icon_for "$tag")" "$target" "$desc" "" \ + "$(task_action "$troot" "$name" --run "$kind" "$target" "$troot" "$runner")" +done < <(PJ_QUIET=1 pj --list 2>/dev/null) + +if [ ${#items[@]} -eq 0 ]; then + item Tasks '' "No tasks found" "in ${cwd/#$HOME/\~}" "" "tmux display-message 'pj: no task sources here'" +fi +printf '%s\n' "${items[@]}" | jq -s . diff --git a/dot_local/bin/executable_projects-sync b/dot_local/bin/executable_projects-sync new file mode 100755 index 0000000..4b77a9e --- /dev/null +++ b/dot_local/bin/executable_projects-sync @@ -0,0 +1,36 @@ +#!/bin/bash +# Mirror every repo under the ghq root (~/Code/<host>/<owner>/<repo>) as a +# symlink ~/Projects/<repo>. Repos sharing a name across owners get +# <owner>-<repo>. Links into ~/Code whose repo is gone are removed; anything +# in ~/Projects that is not such a link is never touched. Run by +# projects-sync.timer (systemd user). +set -euo pipefail + +code=${GHQ_ROOT:-$HOME/Code} +projects=$HOME/Projects +mkdir -p "$projects" + +mapfile -t repos < <(find "$code" -mindepth 4 -maxdepth 4 -name .git -printf '%h\n' 2>/dev/null | sort) + +declare -A count keep +for repo in "${repos[@]}"; do + name=${repo##*/} + count[$name]=$((${count[$name]:-0} + 1)) +done + +for repo in "${repos[@]}"; do + name=${repo##*/} + if ((count[$name] > 1)); then + owner=${repo%/*} + name=${owner##*/}-$name + fi + link=$projects/$name + keep[$name]=1 + [[ -e $link && ! -L $link ]] && continue + [[ $(readlink "$link") == "$repo" ]] || ln -sfn "$repo" "$link" +done + +for link in "$projects"/*; do + [[ -L $link && $(readlink "$link") == "$code"/* && -z ${keep[${link##*/}]:-} ]] && rm "$link" +done +exit 0 diff --git a/dot_local/bin/executable_tmux-sessions b/dot_local/bin/executable_tmux-sessions new file mode 100755 index 0000000..d2f8f4d --- /dev/null +++ b/dot_local/bin/executable_tmux-sessions @@ -0,0 +1,95 @@ +#!/usr/bin/env bash +# tmux-sessions — tmux session switcher as a tmux-palette source (the +# "sessions" palette, ~/.config/tmux-palette/palettes/sessions.json). +# +# tmux-sessions print palette items (JSON): the other sessions +# (last one first), every window of every session, +# zoxide's directories, ~/.config's directories, +# and a Rename and a Kill item per session +# tmux-sessions --new QUERY the palette's query item (what was typed): switch +# to session QUERY, or start it in QUERY if that is +# a directory, else in zoxide's best match for it +# tmux-sessions --dir DIR switch to, or start in DIR, the session named +# after DIR's basename without dots +# +# pj-palette's background task sessions (@pj_task) are left out. Sessions are +# targeted by id since names may contain ':'. + +set -uo pipefail +self=$(readlink -f "$0") + +session_id() { # name + local id name + while IFS=$'\t' read -r id name; do + [ "$name" = "$1" ] && { printf '%s' "$id"; return 0; } + done < <(tmux list-sessions -F $'#{session_id}\t#{session_name}' 2>/dev/null) + return 1 +} + +# Switch to session NAME, first starting it in DIR (when given) if missing. +open() { # name [dir] + local id + id=$(session_id "$1") || + id=$(tmux new-session -d -P -F '#{session_id}' -s "$1" ${2:+-c "$2"}) || exit 1 + tmux switch-client -t "$id" +} + +case ${1-} in +--dir) + dir=${2%/} + name=${dir##*/} + open "${name//./}" "$2" + exit + ;; +--new) + query=$2 + [ -d "${query/#\~/$HOME}" ] && exec "$self" --dir "${query/#\~/$HOME}" + dir= + if ! session_id "$query" >/dev/null; then + read -ra words <<<"$query" + dir=$(zoxide query -- "${words[@]}" 2>/dev/null) + fi + open "$query" "$dir" + exit + ;; +esac + +{ + tmux list-sessions -F $'S\t#{session_id}\t#{session_name}\t#{@pj_task}\t#{session_attached}\t#{session_windows}\t#{session_path}' + tmux list-windows -a -F $'W\t#{session_id}\t#{session_name}\t#{@pj_task}\t#{window_id}\t#{window_index}\t#{window_name}\t#{pane_current_path}' + zoxide query -l 2>/dev/null | sed 's/^/Z\t/' + find -L "$HOME/.config" -mindepth 1 -maxdepth 1 -type d 2>/dev/null | sort | sed 's/^/C\t/' +} | jq -Rn --arg self "$self" --arg home "$HOME" \ + --arg cur "$(tmux display -p '#{session_id}')" --arg last "$(tmux display -p '#{client_last_session}')" ' + def tilde: if startswith($home) then "~" + .[($home | length):] else . end; + def session_name: rtrimstr("/") | split("/") | last | gsub("\\."; ""); + [inputs | split("\t")] as $rows + | ($rows | map(select(.[0] == "S" and .[3] == ""))) as $sessions + | ($rows | map(select(.[0] == "S") | .[2])) as $names + | ($rows | map(select(.[0] == "Z") | .[1])) as $zoxide + | ($sessions | map(select(.[1] != $cur))) as $others + | def dir($category; $icon): + (.[1] | session_name) as $name + | {category: $category, icon: $icon, title: (.[1] | tilde), + description: (if $names | any(. == $name) then "switch to \($name)" else "new session \($name)" end), + action: {shell: "\($self | @sh) --dir \(.[1] | @sh)"}}; + [ + (($others | map(select(.[2] == $last)) + map(select(.[2] != $last)))[] + | {category: "Sessions", icon: "󱂬", title: .[2], + description: "\(.[5]) window\(if .[5] == "1" then "" else "s" end)\(if .[4] != "0" then " · attached" else "" end) · \(.[6] | tilde)", + action: {tmux: "switch-client -t \(.[1] | @sh)"}} + + (if .[4] != "0" then {iconColor: "#5eff6c"} else {} end)), + ($rows[] | select(.[0] == "W" and .[3] == "") + | (.[6] | capture("^(?<icon>[^\\x00-\\x7f]) (?<title>.*)$") // {icon: "", title: .}) as $w + | {category: "Windows", icon: $w.icon, title: $w.title, + description: "\(.[2]):\(.[5]) · \(.[7] | tilde)", + action: {tmux: "switch-client -t \("\(.[1]):\(.[4])" | @sh)"}}), + ($rows[] | select(.[0] == "Z") | dir("Zoxide"; "")), + ($rows[] | select(.[0] == "C" and (.[1] as $d | $zoxide | any(. == $d) | not)) | dir("Config"; "󱃖")), + ($sessions[] + | {category: "Rename", icon: "󰑕", title: "Rename \(.[2])", description: "rename the session", + action: {tmux: "command-prompt -I \(.[2] | @sh) -p \("Rename \(.[2]):" | @sh) \("rename-session -t \(.[1] | @sh) -- \"%%%\"" | @sh)"}}), + ($others[] + | {category: "Kill", icon: "󱂧", title: "Kill \(.[2])", description: "kill the session", + action: {tmux: "kill-session -t \(.[1] | @sh)"}}) + ]' diff --git a/dot_local/bin/executable_yazi-nvim-open b/dot_local/bin/executable_yazi-nvim-open new file mode 100755 index 0000000..87db127 --- /dev/null +++ b/dot_local/bin/executable_yazi-nvim-open @@ -0,0 +1,26 @@ +#!/bin/sh +# Yazi `edit` opener. Inside a Neovim terminal ($NVIM set) files open in the +# HOST instance via _G.EditFromYazi (see ~/.config/nvim/lua/config/yazi_session.lua) +# and the yazi window hides itself; standalone yazi gets a regular blocking nvim. +# +# usage: nvim-open.sh [vsplit|split|tabedit] file... (default mode: edit) + +case "$1" in + vsplit | split | tabedit) mode="$1"; shift ;; + *) mode="edit" ;; +esac + +[ -n "$YAZI_OPEN_TRACE" ] && printf 'NVIM=%s MODE=%s ARGS=%s\n' "$NVIM" "$mode" "$*" >> "$YAZI_OPEN_TRACE" + +if [ -z "$NVIM" ]; then + # split modes are meaningless outside an nvim terminal — quiet no-op + [ "$mode" = "edit" ] || exit 0 + exec nvim "$@" +fi + +for f in "$@"; do + abs=$(realpath -- "$f") || continue + # escape for a vimscript double-quoted string + esc=$(printf '%s' "$abs" | sed 's/[\\"]/\\&/g') + nvim --server "$NVIM" --remote-expr "v:lua.EditFromYazi(\"$mode\", \"$esc\")" +done diff --git a/dot_zshrc b/dot_zshrc new file mode 100644 index 0000000..920bedd --- /dev/null +++ b/dot_zshrc @@ -0,0 +1,133 @@ +# ~/.zshrc — managed by chezmoi + +# History +HISTFILE="$HOME/.zsh_history" +HISTSIZE=10000 +SAVEHIST=10000 +setopt SHARE_HISTORY HIST_IGNORE_DUPS + +# Completion +autoload -Uz compinit && compinit + +# PATH extras / tool envs (machine-optional, guarded) +case ":$PATH:" in *":$HOME/.local/bin:"*) ;; *) PATH="$HOME/.local/bin:$PATH" ;; esac +[ -f "$HOME/.cargo/env" ] && . "$HOME/.cargo/env" +[ -d "$HOME/.maestro/bin" ] && PATH="$PATH:$HOME/.maestro/bin" + +# Go — GOPATH/GOBIN under ~/.local/share to keep $HOME clean. +# GOROOT is provided by mise (toolchain lives under ~/.local/share/mise). +export GOPATH="$HOME/.local/share/go" +export GOBIN="$GOPATH/bin" +case ":$PATH:" in *":$GOBIN:"*) ;; *) PATH="$GOBIN:$PATH" ;; esac + +# Repo roots (ghq) — same as fish's conf.d/10-env.fish; the ghq-repos tv +# cable (ctrl-o) lists this root. +export GHQ_ROOT="$HOME/Code" +export CODE_ROOT="$HOME/Code" + +# Android SDK — relocated under ~/.local/share/android. +export ANDROID_HOME="$HOME/.local/share/android" +export ANDROID_SDK_ROOT="$ANDROID_HOME" +for _adir in "$ANDROID_HOME/platform-tools" "$ANDROID_HOME/cmdline-tools/latest/bin" "$ANDROID_HOME/emulator"; do + case ":$PATH:" in *":$_adir:"*) ;; *) [ -d "$_adir" ] && PATH="$PATH:$_adir" ;; esac +done +unset _adir + +# GITHUB_TOKEN from gh's keyring login — never stored on disk. An inherited +# value wins, so nested shells skip the gh call. +if [ -z "${GITHUB_TOKEN:-}" ] && command -v gh >/dev/null 2>&1; then + _gh_token="$(gh auth token 2>/dev/null)" + [ -n "$_gh_token" ] && export GITHUB_TOKEN="$_gh_token" + unset _gh_token +fi + +# Shared aliases (same set as fish/bash; source of truth: .chezmoidata/aliases.yaml) +[ -f "$HOME/.config/shell/aliases.sh" ] && . "$HOME/.config/shell/aliases.sh" + +# Shell functions — one file per function, zsh ports of the fish ones +# (cwd/history-touching helpers; standalone tools live in ~/.local/bin) +if [ -d "$HOME/.config/zsh/functions" ]; then + for _f in "$HOME/.config/zsh/functions"/*.zsh; do + [ -r "$_f" ] && . "$_f" + done + unset _f +fi + +# ZLE keybinds — zsh ports of fish_user_key_bindings.fish +[ -f "$HOME/.config/zsh/keybinds.zsh" ] && . "$HOME/.config/zsh/keybinds.zsh" + +# suvadu shell history +command -v suv >/dev/null 2>&1 && eval "$(suv init zsh)" + +# Generated for envman. Do not edit. +[ -s "$HOME/.config/envman/load.sh" ] && . "$HOME/.config/envman/load.sh" + +# Prompt — starship, consistent with fish +if command -v starship >/dev/null 2>&1; then + eval "$(starship init zsh)" + ZLE_RPROMPT_INDENT=0 # right_format ($time) flush with the edge + + # Transient prompt (fish has enable_transience; zsh has no starship + # built-in): on Enter, collapse the prompt to ❯ + time, restore it next + # precmd. Must be registered before zsh-syntax-highlighting below. + # Profiles live in starship.toml; strip add_newline's leading \n. + _starship_prompt=$PROMPT _starship_rprompt=$RPROMPT + _starship_profile() { + local s + s=$(starship prompt --profile "$1" --status="${STARSHIP_CMD_STATUS:-}") + print -rn -- "${s#$'\n'}" + } + _starship_transient() { + PROMPT='$(_starship_profile transient)' RPROMPT='$(_starship_profile transient_right)' + zle .reset-prompt + } + _starship_restore() { PROMPT=$_starship_prompt RPROMPT=$_starship_rprompt; } + autoload -Uz add-zle-hook-widget && add-zle-hook-widget line-finish _starship_transient + add-zsh-hook precmd _starship_restore +fi + +# Window title — port of fish_title.fish (+ tmux window name, as in +# fish's conf.d/50-terminal-title.fish) +_set_win_title() { + local t=${(%):-%~} + [[ -n $SSH_TTY ]] && t="${${(%):-%m}[1,10]}:$t" + printf '\e]0;%s\a' "$t" + [[ -n $TMUX ]] && printf '\ek%s\e\\' "$t" +} +autoload -Uz add-zsh-hook && add-zsh-hook precmd _set_win_title + +# television: ctrl-t smart autocomplete (its ctrl-r is taken over by atuin +# below, as in fish) +command -v tv >/dev/null 2>&1 && eval "$(tv init zsh)" + +# Fish-style syntax highlighting (zsh-users/zsh-syntax-highlighting). +# MUST stay last in .zshrc: it wraps every zle widget defined above +# (keybinds, compinit, suv/starship hooks). +for _zsh_hl in \ + /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh \ + /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh; do + [ -r "$_zsh_hl" ] && . "$_zsh_hl" && break +done +unset _zsh_hl + +# atuin comes from the package manager (/usr/bin); see ~/.bashrc. +command -v atuin >/dev/null 2>&1 && eval "$(atuin init zsh)" + +# >>> termium >>> +case ":$PATH:" in *:'/home/prad/.local/bin':*) ;; *) export PATH='/home/prad/.local/bin':"$PATH" ;; esac +# <<< termium <<< + + +# Added by LM Studio CLI (lms) +export PATH="$PATH:/home/prad/.lmstudio/bin" +# End of LM Studio CLI section + + +if command -v wt >/dev/null 2>&1; then eval "$(command wt config shell init zsh)"; fi + +# >>> open-knowledge cli >>> +# ! Contents within this block are managed by OpenKnowledge. Do not edit. +# ! Delete this whole block to opt out — OpenKnowledge will not re-add it. +[ -f "$HOME/.ok/env.sh" ] && . "$HOME/.ok/env.sh" +# <<< open-knowledge cli <<< + diff --git a/run_onchange_after_build-bat-cache.sh.tmpl b/run_onchange_after_build-bat-cache.sh.tmpl new file mode 100755 index 0000000..05552a6 --- /dev/null +++ b/run_onchange_after_build-bat-cache.sh.tmpl @@ -0,0 +1,7 @@ +#!/bin/sh +# Rebuild bat's syntax/theme cache when managed inputs change. +# themes hash: {{ include "dot_config/bat/themes/cyberdream.tmTheme" | sha256sum }} +# config hash: {{ include "dot_config/bat/config" | sha256sum }} +set -eu +command -v bat >/dev/null 2>&1 || exit 0 +bat cache --build >/dev/null diff --git a/run_onchange_after_install-yazi-plugins.sh.tmpl b/run_onchange_after_install-yazi-plugins.sh.tmpl new file mode 100755 index 0000000..41ed347 --- /dev/null +++ b/run_onchange_after_install-yazi-plugins.sh.tmpl @@ -0,0 +1,15 @@ +#!/bin/sh +# Install the yazi plugins pinned in ~/.config/yazi/package.toml whenever it +# changes. ~/.config/yazi is a git-repo external (prdlk/yazi); plugins land in +# its plugins/ dir (gitignored there, except the vendored bunny.yazi). +{{- $pkg := joinPath .chezmoi.homeDir ".config/yazi/package.toml" }} +# package.toml hash: {{ if stat $pkg }}{{ include $pkg | sha256sum }}{{ end }} +set -eu +command -v ya >/dev/null 2>&1 || exit 0 +[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/yazi/package.toml" ] || exit 0 +# ya's clone cache is disposable and clones made by an older ya can break a +# newer one, so rebuild it once before giving up. +ya pkg install || { + rm -rf "${XDG_CACHE_HOME:-$HOME/.cache}/yazi/packages" + ya pkg install +}

*Arvj2qQU@LO2$Gqq+ym*c29TOQ&W@a23rC( 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 z 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 [!NOTE] +> `~/.config/waybar` is part of the role-gated desktop layer in `.chezmoiignore.tmpl`, so it applies on `desktop` and `laptop` roles only. Waybar itself comes from Omarchy and is not in `.chezmoidata/packages.yaml`. + +## Files + +| Source (repo) | Target | +| --- | --- | +| `dot_config/waybar/config.jsonc` | `~/.config/waybar/config.jsonc` | +| `dot_config/waybar/style.css` | `~/.config/waybar/style.css` | +| `dot_config/waybar/window_pill.py` | `~/.config/waybar/window_pill.py` | +| `dot_config/waybar/V6.cb.png` | `~/.config/waybar/V6.cb.png` | + +> [!WARNING] +> `window_pill.py` has no `executable_` prefix, and the repo file is mode `0644`. In symlink mode, chezmoi links `~/.config/waybar/window_pill.py` to that non-executable file. The module's `exec` calls the path directly, so it only runs if the executable bit is set by hand (`chmod +x` on the source) or the file is renamed to `executable_window_pill.py`. + +`V6.cb.png` is a 1920×921 reference screenshot of this bar, taken with a floating btop window over a plain background. No config file references it. + +![Waybar reference screenshot (V6.cb.png)](./waybar-preview.png) + +## Bar settings + +| Option | Value | +| --- | --- | +| `position` | `bottom` | +| `exclusive` | true (reserves space) | +| `fixed-center` | true | +| `spacing` | 2 | +| `margin-top` | 1 | +| `reload_style_on_change` | true | + +## Layout + +**Left** + +- separator +- `custom/omarchy` +- separator +- `hyprland/workspaces` +- separator +- `tray` +- separator +- `custom/voxtype` +- `custom/update` +- `custom/screenrecording-indicator` +- `custom/updatespacman` +- separator +- `idle_inhibitor` + +**Center** + +- `custom/windowpill` + +**Right** + +- `group/right-group2` → `group/right2` → `group/tray-expander` +- `group/right-group1` → `group/right1` → `clock` + +The right side nests groups in vertical wrappers so the drawer and the two-line clock align. `group/tray-expander` is a drawer (600 ms transition, children class `tray-group-item`). It shows only `custom/expand-icon` until hovered, then reveals: `backlight`, `bluetooth`, `pulseaudio#output`, `pulseaudio#input`, `power-profiles-daemon`, `network`, `memory`, `cpu`, `battery`. + +## Modules + +| Module | Configuration | +| --- | --- | +| `custom/separator` (also `separator2`, `separator3`, defined but unused) | Literal `\|`, no tooltip | +| `custom/omarchy` | Omarchy logo glyph (`omarchy` font). Click: `omarchy-menu`. Right-click: `xdg-terminal-exec`. Tooltip "Omarchy Menu — Super + Alt + Space" | +| `hyprland/workspaces` | `format "{icon}"`, click to activate, pointer cursor. Persistent workspaces per output, matching the [Hyprland workspace rules](hyprland.md#workspace-rules): 1–4 on `DP-4` (Studio Display), 5–8 on `eDP-1`. Keyed by connector name, so a re-dock onto another DP port needs the key updated | +| `tray` | Icon size 12, spacing 5, shows passive items | +| `custom/voxtype` | `omarchy-voxtype-status` (JSON). Icons for `idle` (none), `recording`, `transcribing`. Click: `omarchy-voxtype-model`. Right-click: `omarchy-voxtype-config` | +| `custom/update` | `omarchy-update-available` every 6 h (`interval 21600`, `signal 7`). Click runs `omarchy-update` in a floating terminal | +| `custom/screenrecording-indicator` | `$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh` (JSON, `signal 8`). Click: `omarchy-capture-screenrecording` | +| `custom/updatespacman` | `waybar-module-pacman-updates --no-zero-output`, only if that binary exists. Shows an icon when updates are pending | +| `idle_inhibitor` | Activated/deactivated icons | +| `custom/windowpill` | `~/.config/waybar/window_pill.py` (JSON, `restart-interval 1`), centered | +| `clock` | `{:%H:%M\n%d/%m/%Y}` (two lines); alt `{:%H:%M - %d/%m/%Y}`. Month calendar tooltip (3 columns; month `#ffead3`, weekdays `#ffcc66`, today `#ff6699`). Right-click: `omarchy-tz-select` in a floating terminal | +| `backlight` | Device `intel_backlight`, 15-step icon ramp, tooltip shows percent | +| `bluetooth` | Off/on/connected icons, tooltip shows connection count. Click: `omarchy-launch-bluetooth` | +| `pulseaudio#output` | Icon only (headphone or 3-step speaker, muted icon). Max 100%, scroll step 2. Click: `omarchy-launch-audio`. Right-click: `pamixer -t` (mute) | +| `pulseaudio#input` | Mic / muted-mic icon. Max 100%, scroll step 1 via `pactl set-source-volume`. Click: `omarchy-launch-audio`. Right-click: `pamixer -t` | +| `power-profiles-daemon` | Icons for performance / balanced / power-saver. Tooltip shows profile and driver | +| `network` | 5-step Wi-Fi signal icons; ethernet and disconnected icons. Tooltips show ESSID, frequency, and bandwidth. Polls every 3 s. Click: `omarchy-launch-wifi` | +| `memory` | `{used:0.1f}G` every 2 s. Click: `omarchy-launch-or-focus-tui btop` | +| `cpu` | `{usage}%` every 10 s. Click: btop | +| `battery` | `{capacity}% {icon}` with 10-step charging and discharging ramps. Warning at 20%, critical at 10%, polled every 5 s. Click: `omarchy-menu power`. Right-click: `notify-send` of `omarchy-battery-status` | + +Icons are Nerd Font glyphs. + +## window_pill.py + +A Python script that feeds `custom/windowpill` a two-line label for the focused window: + +- **Top line:** the window class, small, `#a6adc8`, lowered with `rise='-2000'`. +- **Bottom line:** the title, bold, size 11000, `#ffffff`, truncated to 80 characters (`MAX_TITLE_LEN`). For Discord/Vesktop it removes the unread counter prefix such as `(209) ` and a leading `Discord | `. +- **No focused window:** shows `Workspace ` over a non-breaking space. + +Text is HTML-escaped for Pango and printed as JSON (`class: custom-window`, tooltip `class: title`). After the first print it connects to Hyprland's event socket `/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock` and reprints on `activewindow>>` and `workspace>>` events. It exits if `HYPRLAND_INSTANCE_SIGNATURE` is unset, which means the module does nothing outside Hyprland. + +## Styling + +`style.css` imports the active Omarchy theme's palette, so colors follow whatever theme Omarchy has selected (for example cyberdream): + +**~/.config/waybar/style.css** + +```css +@import "/home/prad/.local/state/omarchy/current/theme/waybar.css"; +``` + +The import path is hard-coded to `/home/prad`. On another account the import fails and the `@background` / `@foreground` colors are undefined. + +| Element | Style | +| --- | --- | +| All | `font-family: 'CaskaydiaCove Nerd Font Propo'`, no borders or text shadow, square corners | +| Bar box (`#waybar > box`) | `@background` fill, `@foreground` text, 2px/6px margins, 4px radius, `box-shadow 0 1px 2px` black, weight 700, size 12px, min height 30px, 0.5 s background transition | +| Window background | `@transparent` | +| Workspace buttons | Opacity 0.55. Active 1.0. Empty 0.2. Empty and active 1.0. Bold 12px | +| Modules | 6px horizontal padding, 1px margins, min width 12px | +| Separators | Opacity 0.25 | +| `custom/updatespacman` | Opacity 0.55 | +| `custom/expand-icon` | Opacity 0.5 | +| `custom/update` | 10px font | +| Tray | `@background`. Passive items dimmed, attention items highlighted | +| Tooltips | `@background`, 12px, 8px radius, `1.5px solid rgba(255,255,255,0.25)` border | +| Screen recording active | `#eb7087`, blinks to `@background` every 0.5 s | +| Voxtype recording | `#a55555` | +| Battery warning | `#c95d0f` | +| Battery critical (not charging) | `#e6d8ba` on transparent, blinking to `#f53c3c` (0.5 s, 12 steps) | + +## Related + +- [Hyprland](hyprland.md): the compositor this bar is built for. +- [Fonts and default apps](fonts-and-apps.md): Nerd Font packages. diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 0000000..040eef9 --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,101 @@ +# Installation + +Install Omarchy, then install chezmoi and apply these dotfiles with one command. + +## Before you run it + +1. **Omarchy** + + Install [Omarchy](https://omarchy.org) first. It provides Arch Linux, Hyprland, Waybar, the `omarchy-*` commands, the `[omarchy]` pacman repo, and a working AUR helper (`yay`). The desktop layer in this repo (the `dot_config/hypr` submodule, Waybar, `uwsm`, the `omarchy-*` scripts) layers on top of that install and does not replace it. + +2. **age key** + + chezmoi is configured for age encryption with the identity at `~/.config/chezmoi/key.txt`. The key is never committed. Copy it from an existing machine before applying: + + ```sh + mkdir -p ~/.config/chezmoi + scp :.config/chezmoi/key.txt ~/.config/chezmoi/key.txt + chmod 600 ~/.config/chezmoi/key.txt + ``` + +3. **Repository access** + + [env/omarchy](https://prad.codes/env/omarchy) is a public repository on the prad.codes Gitea, so the HTTPS clone needs no credentials. The submodules (`dot_config/fish`, `dot_config/hypr`) are cloned by chezmoi on init. Use the SSH remote (`git@prad.codes:env/omarchy.git`) if you plan to push. + +## One-liner + +```sh +sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply https://prad.codes/env/omarchy.git +``` + +This is chezmoi's official install script. It installs chezmoi to `./bin` (run it from `~` or pass `-b ~/.local/bin`), clones the repo into `~/.local/share/chezmoi`, and runs `chezmoi apply`. + +## Options + +Arguments after `--` go to chezmoi: + +**SSH** + +```sh +sh -c "$(curl -fsLS get.chezmoi.io)" -- -b ~/.local/bin init --apply git@prad.codes:env/omarchy.git +``` + +**Dry run** + +```sh +sh -c "$(curl -fsLS get.chezmoi.io)" -- -b ~/.local/bin init https://prad.codes/env/omarchy.git +chezmoi diff +chezmoi apply +``` + +**chezmoi only** + +```sh +sh -c "$(curl -fsLS get.chezmoi.io)" -- -b ~/.local/bin --version +``` + +| Flag | Effect | +| --- | --- | +| `-b