From 1da988c8768b8128b2978369b19fca80db529e28 Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Mon, 28 Sep 2026 11:08:17 -0400 Subject: [PATCH] docs: add comprehensive documentation for AI agents, chezmoi workflow, shell setup, desktop configuration, terminal multiplexers, and developer tools --- docs/ai/claude-code.mdx | 200 +++++++++++ docs/ai/index.mdx | 65 ++++ docs/ai/meta.ts | 7 + docs/ai/omp.mdx | 175 ++++++++++ docs/ai/skills.mdx | 174 ++++++++++ docs/chezmoi/config.mdx | 96 ++++++ docs/chezmoi/data.mdx | 189 +++++++++++ docs/chezmoi/externals-and-ignore.mdx | 129 ++++++++ docs/chezmoi/index.mdx | 151 +++++++++ docs/chezmoi/meta.ts | 7 + docs/chezmoi/scripts.mdx | 105 ++++++ docs/desktop/fonts-and-apps.mdx | 101 ++++++ docs/desktop/hyprland.mdx | 356 ++++++++++++++++++++ docs/desktop/index.mdx | 32 ++ docs/desktop/meta.ts | 7 + docs/desktop/niri.mdx | 458 ++++++++++++++++++++++++++ docs/desktop/waybar-preview.png | Bin 0 -> 374882 bytes docs/desktop/waybar.mdx | 143 ++++++++ docs/index.mdx | 53 +++ docs/installation.mdx | 109 ++++++ docs/meta.ts | 14 + docs/shell/aliases.mdx | 121 +++++++ docs/shell/atuin.mdx | 144 ++++++++ docs/shell/bash-zsh.mdx | 124 +++++++ docs/shell/fish.mdx | 300 +++++++++++++++++ docs/shell/index.mdx | 40 +++ docs/shell/meta.ts | 7 + docs/shell/scripts.mdx | 294 +++++++++++++++++ docs/shell/starship.mdx | 88 +++++ docs/terminal/ghostty.mdx | 67 ++++ docs/terminal/herdr.mdx | 94 ++++++ docs/terminal/index.mdx | 22 ++ docs/terminal/kitty.mdx | 195 +++++++++++ docs/terminal/meta.ts | 2 + docs/terminal/tmux.mdx | 95 ++++++ docs/tools/bat.mdx | 72 ++++ docs/tools/git.mdx | 112 +++++++ docs/tools/github-cli.mdx | 165 ++++++++++ docs/tools/hunk.mdx | 59 ++++ docs/tools/index.mdx | 70 ++++ docs/tools/lazydocker.mdx | 46 +++ docs/tools/lazygit.mdx | 294 +++++++++++++++++ docs/tools/leetcode.mdx | 97 ++++++ docs/tools/meta.ts | 19 ++ docs/tools/neovim.mdx | 56 ++++ docs/tools/topgrade.mdx | 78 +++++ docs/tools/yazi.mdx | 253 ++++++++++++++ 47 files changed, 5485 insertions(+) create mode 100644 docs/ai/claude-code.mdx create mode 100644 docs/ai/index.mdx create mode 100644 docs/ai/meta.ts create mode 100644 docs/ai/omp.mdx create mode 100644 docs/ai/skills.mdx create mode 100644 docs/chezmoi/config.mdx create mode 100644 docs/chezmoi/data.mdx create mode 100644 docs/chezmoi/externals-and-ignore.mdx create mode 100644 docs/chezmoi/index.mdx create mode 100644 docs/chezmoi/meta.ts create mode 100644 docs/chezmoi/scripts.mdx create mode 100644 docs/desktop/fonts-and-apps.mdx create mode 100644 docs/desktop/hyprland.mdx create mode 100644 docs/desktop/index.mdx create mode 100644 docs/desktop/meta.ts create mode 100644 docs/desktop/niri.mdx create mode 100644 docs/desktop/waybar-preview.png create mode 100644 docs/desktop/waybar.mdx create mode 100644 docs/index.mdx create mode 100644 docs/installation.mdx create mode 100644 docs/meta.ts create mode 100644 docs/shell/aliases.mdx create mode 100644 docs/shell/atuin.mdx create mode 100644 docs/shell/bash-zsh.mdx create mode 100644 docs/shell/fish.mdx create mode 100644 docs/shell/index.mdx create mode 100644 docs/shell/meta.ts create mode 100644 docs/shell/scripts.mdx create mode 100644 docs/shell/starship.mdx create mode 100644 docs/terminal/ghostty.mdx create mode 100644 docs/terminal/herdr.mdx create mode 100644 docs/terminal/index.mdx create mode 100644 docs/terminal/kitty.mdx create mode 100644 docs/terminal/meta.ts create mode 100644 docs/terminal/tmux.mdx create mode 100644 docs/tools/bat.mdx create mode 100644 docs/tools/git.mdx create mode 100644 docs/tools/github-cli.mdx create mode 100644 docs/tools/hunk.mdx create mode 100644 docs/tools/index.mdx create mode 100644 docs/tools/lazydocker.mdx create mode 100644 docs/tools/lazygit.mdx create mode 100644 docs/tools/leetcode.mdx create mode 100644 docs/tools/meta.ts create mode 100644 docs/tools/neovim.mdx create mode 100644 docs/tools/topgrade.mdx create mode 100644 docs/tools/yazi.mdx diff --git a/docs/ai/claude-code.mdx b/docs/ai/claude-code.mdx new file mode 100644 index 0000000..1ec5809 --- /dev/null +++ b/docs/ai/claude-code.mdx @@ -0,0 +1,200 @@ +--- +title: Claude Code +description: Claude Code settings, hooks, plugins, slash commands, and skill links managed under ~/.claude. +--- + +Claude Code is Anthropic's terminal coding agent. The repo manages its user-level settings, hook scripts, custom slash commands, and the skill links it loads. The `claude` binary itself is not installed by chezmoi. + +## Files + +| Source in repo | Target | Notes | +| --- | --- | --- | +| `dot_claude/settings.json` | `~/.claude/settings.json` | Plain file; in symlink mode the target is a symlink back into the repo | +| `dot_claude/empty_CLAUDE.md` | `~/.claude/CLAUDE.md` | `empty_` keeps the zero-byte file; no global memory instructions | +| `dot_claude/hooks/executable_cmem-to-obsidian.py` | `~/.claude/hooks/cmem-to-obsidian.py` | Executable | +| `dot_claude/hooks/executable_herdr-agent-state.sh` | `~/.claude/hooks/herdr-agent-state.sh` | Executable, generated by herdr | +| `dot_claude/hooks/gitnexus/gitnexus-hook.cjs` | `~/.claude/hooks/gitnexus/gitnexus-hook.cjs` | Present but not wired in `settings.json` | +| `dot_claude/commands/*.md` | `~/.claude/commands/*.md` | User slash commands | +| `dot_claude/skills/symlink_*` | `~/.claude/skills/*` | Symlinks into `~/.agents/skills` | +| `dot_claude/skills//` | `~/.claude/skills//` | Claude-only skills kept as real directories | + +None of these are role-gated. Hook commands in `settings.json` use absolute `/home/prad/...` paths; on a machine with a different home directory, edit them after cloning. + +## settings.json + +### Model and UI + +| Key | Value | Effect | +| --- | --- | --- | +| `model` | `fable` | Default model alias | +| `tui` | `fullscreen` | Full-screen terminal UI | +| `agentPushNotifEnabled` | `true` | Push notifications when the agent needs attention | +| `skipDangerousModePermissionPrompt` | `true` | No confirmation when starting in bypass-permissions mode | +| `skipAutoPermissionPrompt` | `true` | No confirmation when entering auto mode | + +No `statusLine` is configured; Claude Code uses its default status line. + +### Environment + +`env` sets two variables for every session: + +| Variable | Purpose | +| --- | --- | +| `CLAUDE_CODE_DISABLE_AUTO_MEMORY` | Turns off Claude Code's built-in auto memory. Session memory comes from the claude-mem plugin instead. | +| `EDITOR` | Points the external editor at `micro`. | + +### Permissions + +- `defaultMode` is `auto`, so sessions start in auto mode and the classifier approves routine actions. +- The `allow` list pre-approves seven read-only tools from the `codegraph` MCP server: `codegraph_search`, `codegraph_context`, `codegraph_callers`, `codegraph_callees`, `codegraph_impact`, `codegraph_node`, and `codegraph_status`. +- There is no `deny` or `ask` list. + +`autoMode.environment` is a list of trust-boundary notes that auto mode reads when judging risk. It declares no org, cloud provider, secrets manager, or CI target. It names one private personal LeetCode repository as the trusted repo and treats routine work there as low risk. It marks `.env*` files as sensitive. Any host, namespace, or container with `prod` or `production` as a whole name segment counts as a sensitive remote target. IaC changes touching IAM, RBAC, networking, quota, and node pools count as protected. + +### Hooks + +`settings.json` wires six hook commands: + +| Command | What it does | +| --- | --- | +| `pixtuoid-hook` | External binary that receives lifecycle events. Matcher `.*`. | +| `~/.orca/agent-hooks/claude-hook.sh` | Orca's agent hook. Runs through `/bin/sh` only if the file exists and is executable, so machines without Orca skip it silently. | +| `atuin hook claude-code` | Records the agent's `Bash` tool calls in [atuin](/shell/atuin) history. Matcher `Bash`. | +| `python3 ~/.claude/hooks/cmem-to-obsidian.py` | Exports the session's claude-mem learnings to Obsidian ([below](#cmem-to-obsidian)). 15 s timeout. | +| `bash ~/.claude/hooks/herdr-agent-state.sh session` | Reports the session to herdr ([below](#herdr-agent-state)). 10 s timeout. | +| `sh ~/skills/tldraw-offline/inject-server-context.sh SubagentStart` | Injects server context when the `tldraw-offline` subagent starts. The script lives outside this repo. | + +Event wiring: + +| Event | pixtuoid | orca | atuin (`Bash`) | Other | +| --- | :-: | :-: | :-: | --- | +| `SessionStart` | yes | | | herdr-agent-state `session` | +| `UserPromptSubmit` | | yes | | | +| `PreToolUse` | yes | yes | yes | | +| `PermissionRequest` | | yes | | | +| `PostToolUse` | yes | yes | yes | | +| `PostToolUseFailure` | | yes | yes | | +| `Notification` | yes | | | | +| `SubagentStart` | yes | | | tldraw-offline context (matcher `tldraw-offline`) | +| `SubagentStop` | yes | | | | +| `Stop` | | yes | | | +| `StopFailure` | | yes | | | +| `SessionEnd` | yes | | | cmem-to-obsidian | + +### Plugins + +`enabledPlugins`: + +| Plugin | Marketplace | State | +| --- | --- | --- | +| `caveman` | `caveman` | enabled | +| `claude-mem` | `thedotmack` | enabled | +| `context-mode` | `context-mode` | enabled | +| `context7` | `claude-plugins-official` | disabled | +| `council` | `council-of-high-intelligence` | enabled | +| `exa` | `claude-plugins-official` | enabled | +| `frontend-design` | `claude-plugins-official` | enabled | +| `gopls-lsp` | `claude-plugins-official` | enabled | +| `gopls` | `claude-code-lsps` | enabled | +| `lua-lsp` | `claude-plugins-official` | enabled | +| `ponytail` | `ponytail` | enabled | +| `solidity-language-server` | `claude-code-lsps` | enabled | +| `understand-anything` | `understand-anything` | enabled | +| `vtsls` | `claude-code-lsps` | enabled | +| `yaml-lsp` | `zircote-lsp` | enabled | +| `diagram-design` | `diagram-design` | enabled | + +The LSP plugins give the agent language-server diagnostics for Go, Lua, Solidity, TypeScript/JavaScript (vtsls), and YAML. + +### Marketplaces + +`extraKnownMarketplaces` registers eleven plugin sources: + +| Name | Source | +| --- | --- | +| `caveman` | GitHub `JuliusBrussee/caveman` | +| `claude-code-lsps` | GitHub `Piebald-AI/claude-code-lsps` | +| `claude-plugins-official` | GitHub `anthropics/claude-plugins-official` | +| `council-of-high-intelligence` | GitHub `0xNyk/council-of-high-intelligence` | +| `mempalace` | GitHub `MemPalace/mempalace` | +| `omc` | git `https://github.com/Yeachan-Heo/oh-my-claudecode.git` | +| `ponytail` | GitHub `DietrichGebert/ponytail` | +| `thedotmack` | GitHub `thedotmack/claude-mem` | +| `understand-anything` | GitHub `Egonex-AI/Understand-Anything` | +| `zircote-lsp` | GitHub `zircote/lsp-marketplace` | +| `diagram-design` | GitHub `cathrynlavery/diagram-design` | + +`mempalace` and `omc` are registered but no plugin from them is enabled. `context-mode` is enabled but its marketplace is not declared here; it comes from Claude Code's own marketplace state. + +## Hook scripts + +### cmem-to-obsidian.py [#cmem-to-obsidian] + +A stdlib-only Python script run on `SessionEnd`. It reads the hook JSON from stdin and exports that session's claude-mem observations to an Obsidian note. It fails soft: any error is logged and the script exits 0, so it never blocks the session. + +1. Opens the claude-mem SQLite database read-only (`?mode=ro`), so it never locks the live DB or its WAL. +2. Maps the Claude Code `session_id` to claude-mem's memory session via `sdk_sessions.content_session_id`, then loads that session's observations and latest summary. +3. Drops any observation containing ``. +4. Writes `// .md`. The file name is keyed to the session, so re-runs overwrite the same note. +5. Creates `/.md` as a map-of-content note if it is missing, so the `[[project]]` wikilink resolves. + +Note layout: frontmatter (`date`, `project`, `session`, `source: claude-mem`, tags `claude-mem` and `project/`), an abstract callout from the session summary, then sections by observation type. Each bullet links back to the claude-mem viewer at `http://localhost:/?observation=`. + +| Section | Observation types | +| --- | --- | +| Decisions | `decision` (rendered as note callouts) | +| Fixes & gotchas | `bugfix` | +| Insights | `discovery`, `feature`, `change`, `refactor`, plus any unmapped type | + +| Variable | Default | +| --- | --- | +| `CLAUDE_MEM_DB` | `~/.claude-mem/claude-mem.db` | +| `CMEM_OBSIDIAN_DIR` | `~/Documents/Vault/90 - Archive/Learnings` | +| `CLAUDE_MEM_WORKER_PORT` | `37700` | + +Log file: `~/.claude/hooks/cmem-to-obsidian.log`. + +### herdr-agent-state.sh [#herdr-agent-state] + +Generated and versioned by [herdr](/terminal/herdr) (integration id `claude`, version 7). The header says reinstalling herdr's integration overwrites it, so put custom hooks in separate files. It runs on `SessionStart` with the `session` action and exits immediately for any other action. + +It only acts inside a herdr pane: `HERDR_ENV=1`, `HERDR_SOCKET_PATH`, and `HERDR_PANE_ID` must be set, and `python3` must be on `PATH`. It then sends one `pane.report_agent_session` request over herdr's Unix socket with the pane id, the Claude session id, the transcript path, and the session start source. herdr uses this to link the pane to the agent session. Subagent events and `SubagentStop` are ignored, so a finished subagent cannot mark an idle pane as working again. Socket errors are swallowed and the script has a 0.5 s timeout. + +### gitnexus/gitnexus-hook.cjs + +A Node `PreToolUse` handler that adds GitNexus code-graph context to searches. `settings.json` does not reference it, so it is inactive until you add a hook entry. + +- Runs only when `.gitnexus` exists in the working directory or one of its four nearest ancestors. +- Pulls a search pattern from `Grep` (the pattern), `Glob` (the first identifier-like path segment), or `Bash` commands that call `rg` or `grep` (the first non-flag argument). Patterns under three characters are skipped. +- Runs `gitnexus augment `. It tries the bun global install at `~/.bun/install/global/node_modules/gitnexus` first, then `require.resolve`, then `npx -y gitnexus` (8 s or 15 s timeout). +- Returns the CLI's stderr output as `hookSpecificOutput.additionalContext`. + +## Slash commands + +`dot_claude/commands/` becomes `~/.claude/commands/`, one user-level slash command per file. + +| Command | Arguments | Purpose | +| --- | --- | --- | +| `/bd-drain` | optional priority filter (`p0-p2`), epic id, or `dry-run` | Works through every open beads issue until all are closed with tests and builds passing. Records a green baseline first; `dry-run` prints the dependency-sorted plan and stops. Allowed tools: `bd`, `git`, `go`, `pnpm`, `cargo`, `make`, file tools, `Task`. | +| `/cmem-to-beads` | none | Pulls insight, decision, and gotcha learnings out of claude-mem and saves them as beads memories with `bd remember`. Actionable items are skipped. | +| `/cmem-to-linear` | none | Turns actionable claude-mem learnings (bugs, tech debt, follow-ups) into beads tasks, then pushes the new ones to Linear. | +| `/create-task` | `` | Breaks a task into beads issues with dependencies, acceptance criteria, and priorities. The prompt includes live `bd ready`, in-progress, and recently-closed lists. Allowed tools: `bd`, `git log`, `git status`, `rg`, `Task`. | +| `/rams` | optional file | "Rams" accessibility (WCAG 2.1) and visual design review of a component file. Offers a project scan when no file is given. | +| `/web-interface-guidelines` | `` | Reviews UI code against the Vercel Web Interface Guidelines: accessibility, focus, forms, animation, typography, and more. | + +## Skills + +`~/.claude/skills/` holds two kinds of entries: + +- **Symlinks** (`symlink_` in the source). Each file contains a relative target such as `../../.agents/skills/blume`, so `~/.claude/skills/blume` resolves to `~/.agents/skills/blume`. The shared library is documented on the [Skills](/ai/skills) page. +- **Real directories** for Claude-only skills: `absurd`, `agents-sdk`, `cloudflare`, `cloudflare-email-service`, `cloudflare-one`, `cloudflare-one-migrations`, `create-beads-orchestration`, `durable-objects`, `sandbox-sdk`, `todoist-cli`, `turnstile-spin`, `web-perf`, `workers-best-practices`. See [Claude-only skills](/ai/skills#claude-only-skills). + +## Repo-local settings + +This repo's own `.claude/settings.json` applies only to Claude Code sessions opened inside the chezmoi source directory. chezmoi ignores dot-prefixed source entries, so it is never deployed. It runs `bd prime` on `SessionStart` and `PreCompact`, which reloads beads issue context at session start and before compaction. + +## Integrations + +- [kitty](/terminal/kitty) tab bar shows a robot glyph for tabs running `claude`. +- The fish `ai` picker launches `claude --dangerously-skip-permissions`; see [fish](/shell/fish). +- The claude-mem plugin feeds both `cmem-to-obsidian.py` and the `/cmem-to-*` commands. diff --git a/docs/ai/index.mdx b/docs/ai/index.mdx new file mode 100644 index 0000000..8961646 --- /dev/null +++ b/docs/ai/index.mdx @@ -0,0 +1,65 @@ +--- +title: AI agents +description: Claude Code, omp, and the shared agent skill library that both read from. +sidebar: + label: Overview +--- + +The repo manages configuration for two coding agents and a skill library they share. Neither agent binary is installed by chezmoi: `.chezmoidata/packages.yaml` lists no agent CLIs, so install Claude Code and omp yourself. topgrade runs `omp update` as a custom command. + + + + Settings, hooks, plugins, slash commands, and skill links under `~/.claude`. + + + Config, keybindings, MCP servers, theme, commands, and scheduled research loops under `~/.omp`. + + + The `~/.agents/skills` library, its lock file, and the symlinks that expose it to Claude Code. + + + +## Pages + +| Page | Source in repo | Target in `$HOME` | Covers | +| --- | --- | --- | --- | +| [Claude Code](/ai/claude-code) | `dot_claude/` | `~/.claude/` | `settings.json`, hook scripts, `/commands`, empty `CLAUDE.md`, skill symlinks | +| [omp](/ai/omp) | `dot_omp/` | `~/.omp/` | `agent/config.yml`, `keybindings.yml`, `mcp.json`, cyberdream theme, commands, loops | +| [Skills](/ai/skills) | `dot_agents/` | `~/.agents/` | `.skill-lock.json` and every skill directory | + +## Layout + + + +- dot_claude/ + - settings.json + - empty_CLAUDE.md + - commands/ + - hooks/ + - executable_cmem-to-obsidian.py + - executable_herdr-agent-state.sh + - gitnexus/ + - skills/ +- dot_omp/ + - private_agent/ + - private_config.yml + - keybindings.yml + - private_mcp.json + - themes/ + - commands/ + - loops/ + - bin/ + - goals/ +- dot_agents/ + - dot_skill-lock.json + - skills/ + + + +None of these files are role-gated: `.chezmoiignore.tmpl` applies them on every machine role (desktop, laptop, mac, server). + +## 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). +- Ctrl A launches `omp` from the fish and zsh prompts. +- `launch_omp_livediff_overlay` and `lc-elir` are omp helpers in `~/.local/bin`; see [omp](/ai/omp#shell-integration) and [scripts](/shell/scripts). diff --git a/docs/ai/meta.ts b/docs/ai/meta.ts new file mode 100644 index 0000000..3d9665f --- /dev/null +++ b/docs/ai/meta.ts @@ -0,0 +1,7 @@ +import { defineMeta } from "blume"; + +export default defineMeta({ + title: "AI agents", + icon: "bot", + pages: ["index", "claude-code", "omp", "skills"], +}); diff --git a/docs/ai/omp.mdx b/docs/ai/omp.mdx new file mode 100644 index 0000000..b3fa7ed --- /dev/null +++ b/docs/ai/omp.mdx @@ -0,0 +1,175 @@ +--- +title: omp +description: omp agent config, keybindings, MCP servers, cyberdream theme, custom commands, and the scheduled research loops under ~/.omp. +--- + +omp (oh-my-pi) is a terminal coding agent. The repo manages its agent directory (`~/.omp/agent`) and a set of prompt loops in `~/.omp/loops`. chezmoi does not install the `omp` binary; install it yourself. [topgrade](/tools/topgrade) keeps it current with the custom command `"Omp Update" = "omp update"`. + +## Files + +| Source in repo | Target | Notes | +| --- | --- | --- | +| `dot_omp/private_agent/` | `~/.omp/agent/` | Directory mode `0700` | +| `dot_omp/private_agent/private_config.yml` | `~/.omp/agent/config.yml` | Mode `0600` | +| `dot_omp/private_agent/keybindings.yml` | `~/.omp/agent/keybindings.yml` | | +| `dot_omp/private_agent/private_mcp.json` | `~/.omp/agent/mcp.json` | Mode `0600` | +| `dot_omp/private_agent/themes/cyberdream.json` | `~/.omp/agent/themes/cyberdream.json` | Custom theme | +| `dot_omp/private_agent/commands/*.md` | `~/.omp/agent/commands/*.md` | Slash commands | +| `dot_omp/loops/bin/executable_run-loop.sh` | `~/.omp/loops/bin/run-loop.sh` | Loop runner | +| `dot_omp/loops//private_loop.md` | `~/.omp/loops//loop.md` | One prompt per loop, mode `0600` | +| `dot_omp/loops/goals/private_templates.md` | `~/.omp/loops/goals/templates.md` | Unscheduled `/goal` templates | + +No omp file is role-gated. In chezmoi's symlink mode, `private_` and `executable_` entries are written as regular files, not symlinks. + +## config.yml + +```yaml ~/.omp/agent/config.yml +theme: + dark: titanium + light: light +symbolPreset: nerd +setupVersion: 2 +hideThinkingBlock: false +modelRoles: + plan: anthropic/claude-fable-5 +composer: + shape: rule +``` + +| Key | Value | Effect | +| --- | --- | --- | +| `theme.dark` | `titanium` | Theme on a dark terminal background (omp's default, pinned explicitly) | +| `theme.light` | `light` | Theme on a light terminal background (omp's default) | +| `symbolPreset` | `nerd` | Nerd Font glyphs instead of the default `unicode` set; the repo's font is Victor Mono Nerd Font | +| `hideThinkingBlock` | `false` | Thinking blocks stay visible | +| `modelRoles.plan` | `anthropic/claude-fable-5` | Model for the `plan` role; other roles use omp defaults | +| `composer.shape` | `rule` | Built-in `rule` composer style instead of the default `box` | +| `setupVersion` | `2` | Internal settings version marker | + +No API keys are stored in `config.yml`. + +## Keybindings + +```yaml ~/.omp/agent/keybindings.yml +app.editor.external: Ctrl+E +app.exit: Ctrl+Q +``` + +| Key | Action | +| --- | --- | +| Ctrl E | Open the current prompt in the external editor (`app.editor.external`) | +| Ctrl Q | Quit omp (`app.exit`) | + +All other bindings are omp defaults. + +## MCP servers + +`mcp.json` declares three remote MCP servers over HTTP. No credential values are stored in the file. + +| Server | Transport | Endpoint | Auth | +| --- | --- | --- | --- | +| `exa` | `http` | `https://mcp.exa.ai/mcp` | none | +| `cloudflare-api` | `http` | `https://mcp.cloudflare.com/mcp` | OAuth; omp stores the token in its own credential store under a profile credential id | +| `github` | `http` | `https://api.githubcopilot.com/mcp/` | `Authorization` header built at request time by a `!` shell command that reads the token from `gh auth token` | + +The GitHub server therefore needs the [GitHub CLI](/tools/github-cli) to be logged in. The `$schema` key points at omp's `mcp-schema.json` for editor validation. + +## Theme + +`themes/cyberdream.json` ports the cyberdream palette to omp's theme schema. It installs the theme, but `config.yml` currently selects `titanium` for dark mode. To use cyberdream, set `theme.dark: cyberdream`. + +| Var | Hex | Used for | +| --- | --- | --- | +| `bg` | `#16181a` | base background | +| `bgAlt` | `#1e2124` | user/custom message, tool, and status-line backgrounds | +| `bgHighlight` | `#3c4048` | selection | +| `fg` | `#ffffff` | message and tool output text | +| `grey` | `#7b8496` | muted, dim, thinking text, comments, quotes, borders | +| `blue` | `#5ea1ff` | accent, borders, links, functions, status-line path | +| `cyan` | `#5ef1ff` | accent borders, tool titles, inline code, types, context meter | +| `green` | `#5eff6c` | success, diff additions, strings, clean git | +| `red` | `#ff6e5e` | errors, diff removals, untracked files | +| `yellow` | `#f1ff5e` | warnings, variables, bash mode, dirty git | +| `magenta` | `#ff5ef1` | keywords, subagent count | +| `pink` | `#ff5ea0` | operators, spend | +| `orange` | `#ffbd5e` | Markdown headings, cost | +| `purple` | `#bd5eff` | numbers, python mode, model name | + +The thinking-level indicator runs `grey` (off) → `blue` → `cyan` → `green` → `yellow` → `orange` → `red` (max). + +## Commands + +| Command | Invocation | Purpose | +| --- | --- | --- | +| `/leetcode-docs` | `/leetcode-docs [extra instructions]` | Converts a LeetCode solution file into a Fumadocs MDX page at `content/docs/leetcode///-.mdx`. The page has a difficulty callout, problem, examples, constraints, a derived intuition paragraph, the solution copied verbatim (multiple approaches become tabs), and a complexity callout. Prints only the output path. | +| `/leetcode-eli5` | `/leetcode-eli5 [extra instructions]` | Adds beginner-level line-by-line comments and a `// ====` banner to a LeetCode solution. Leaves the header, JSDoc, and code byte-for-byte unchanged. Prints the path and the number of comment lines added. | + +Both expect the on-disk format of the LeetCode solutions repo: a `/* ... */` problem header, a JSDoc block, then the solution function(s). + +## Loops + +`~/.omp/loops` holds scheduled, read-only research prompts. Each loop is a directory with a `loop.md` prompt. `run-loop.sh` creates `state.md` and `runs.log` beside it at runtime; chezmoi does not manage those. + +### run-loop.sh + +```sh +~/.omp/loops/bin/run-loop.sh +``` + +Runs one round of a loop: + + + + Exits if `~/.omp/loops//loop.md` is missing. Seeds `state.md` with `## queue`, `## done`, and `## blocked` headings if it does not exist. + + + Runs `omp -p --no-session --max-time 600 --model kimi-for-coding` with the prompt plus the loop directory, state-file path, and round timestamp appended. Output goes to `runs.log`. + + + If any output line starts with `ESCALATE`, re-runs the round once on omp's default model (Fable) with a 1200 s cap. It logs ` escalated` to `~/.omp/loops/escalations.log`. + + + +At most one round and one escalation per call. Failures from `omp` are logged and do not abort the script. + +### Loop catalogue + +Every loop follows the same contract: read `state.md` first, do one pass, make exactly one change (usually a brief or proposal appended under `## queue`), and log repeated tool failures under `## blocked`. Loops draft only; they never file issues or change repos. The subject is WalletBase, an embedded-wallet project. + +| Loop | Cadence | Inputs | Output per round | Escalates on | +| --- | --- | --- | --- | --- | +| `intel-refresh` (#19) | Mon 06:00 | Exa search over five beats: ERC-4337/AA, EIP-7702, embedded-wallet competitors, agent-payment protocols, Base chain | Up to 5 bullets per beat for the week; proposes swapping a beat that has been quiet for 3 weeks | A development that breaks a core assumption | +| `share-of-model` (#3) | Mon 07:00 | Exa answer mode, fixed set of six buyer questions | Table of vendors named per answer and whether WalletBase appears; biggest rank shift | never | +| `regulatory-digest` (#20) | Tue 07:00 | FinCEN, OFAC, SEC/CFTC, EU MiCA/CASP, Ethereum governance | Only material changes; "no material changes" counts as success; a proposed risk-position edit when an item breaks a standing assumption | MSB scope or OFAC action touching similar infra | +| `brand-radar` (#10) | Wed 07:00 | HN Algolia API (no key), Exa | Mentions grouped into feature asks, pricing pain, security, and integration friction; one drafted `bd create` issue or positioning note | Security discussion of a dependency | +| `answer-gap` (#1) | Thu 07:00 | Exa, rotating developer questions plus ones harvested in earlier rounds | One content brief; up to 3 new questions queued | never | +| `competitor-watch` (#4) | Fri 07:00 | Exa over six competitor blogs | Logs new posts; one content brief for the biggest gap | Competitor launches an agent-economy product | +| `repeat-offender` (#24) | Sun 18:00 | `bd list` across the project's repos, loop `runs.log`, `## blocked` sections, and `escalations.log` | Failure patterns grouped by root cause; one drafted `bd create` systemic fix | Data loss or security-boundary pattern | + +Five prompts cap page fetches or API calls per round (15 to 30); `share-of-model` and `repeat-offender` are bounded by their fixed question set and sources. + +:::note[Scheduling] +Cadences are declared in each prompt header; the repo contains no timer for them. `.chezmoiscripts/run_once_after_30-user-services.sh.tmpl` names `omp-loop` among the personal automation units that are enabled by hand on each machine and never automatically. See [scripts](/chezmoi/scripts). +::: + +### Goal templates + +`goals/templates.md` is not scheduled. It holds two `/goal` prompts to paste into an interactive omp session when facing a decision: + +| Template | Purpose | Cap | +| --- | --- | --- | +| kill-criteria (#22) | One measurable disqualifying condition per option, cited evidence, verdict ALIVE / KILLED / NEEDS-DATA | 40 tool calls | +| pre-mortem (#23) | Writes the post-mortem of a failed decision 12 months out: 3–5 causal chains, each tied to a present-day assumption, with an early warning sign and the cheapest mitigation | 30 tool calls | + +Both count as done only when the full artifact is pasted in the chat. + +## Shell integration + +| Entry point | Source | What it does | +| --- | --- | --- | +| fish completions | `dot_config/fish/completions/omp.fish` | `omp completions fish \| source` generates completions at load time | +| Ctrl A | fish `fish_user_key_bindings`, zsh `keybinds.zsh` | Launches `omp` from the prompt | +| `launch_omp_livediff_overlay` | `dot_local/bin/executable_launch_omp_livediff_overlay`, fish function of the same name | Opens omp as a kitty overlay on the current window with a `livediff` vsplit beside it, focus kept on omp. Needs `KITTY_LISTEN_ON` (kitty remote control). | +| `lc-elir [root]` | `dot_local/bin/executable_lc-elir`, fish function | fzf multi-picks numbered LeetCode files (`1365.slug.js`/`.ts`) with a bat preview and runs `omp -p "/leetcode-eli5 "` on each | + +See [scripts](/shell/scripts) and [fish](/shell/fish). The [kitty](/terminal/kitty) tab bar shows a microchip glyph for tabs running `omp`. diff --git a/docs/ai/skills.mdx b/docs/ai/skills.mdx new file mode 100644 index 0000000..7e03e96 --- /dev/null +++ b/docs/ai/skills.mdx @@ -0,0 +1,174 @@ +--- +title: Skills +description: The shared agent skill library in ~/.agents/skills, its lock file, and how Claude Code links to it. +--- + +Agent skills are folders with a `SKILL.md` file (frontmatter `name` and `description`, then instructions) that agents load on demand. The repo keeps one shared library in `~/.agents/skills`. Agents that follow the open skills layout read it from there, and Claude Code reaches it through symlinks in `~/.claude/skills`. + +## Files + +| Source in repo | Target | Notes | +| --- | --- | --- | +| `dot_agents/skills//` | `~/.agents/skills//` | 82 skill directories; in symlink mode each plain file is a symlink into the repo | +| `dot_agents/dot_skill-lock.json` | `~/.agents/.skill-lock.json` | Install record written by the `skills` CLI | +| `dot_claude/skills/symlink_` | `~/.claude/skills/` | Relative symlink to `../../.agents/skills/` | + +Not role-gated; the library is applied on every machine. + +## Managing skills + +Skills are installed and updated with the Skills CLI (`npx skills`), which the `find-skills` skill documents: + +```sh +npx skills find # search the registry +npx skills add -g -y # install at user level +npx skills check # look for updates +npx skills update # update everything +``` + +A skill installed this way lands in `~/.agents/skills//` as plain files. Add it to the repo with `chezmoi add ~/.agents/skills/`, and commit the updated `.skill-lock.json` alongside it. To expose it to Claude Code, add a `dot_claude/skills/symlink_` file containing `../../.agents/skills/`. + +### .skill-lock.json + +The lock file (`"version": 3`) has one entry per installed skill, keyed by skill name: + +| Field | Meaning | +| --- | --- | +| `source` | Where the skill came from: `owner/repo` for GitHub, or a domain for well-known endpoints | +| `sourceType` | `github` (77 entries) or `well-known` (3 entries, all `mintlify.com`) | +| `sourceUrl` | Git clone URL, or the `.well-known/agent-skills/.../skill.md` URL | +| `skillPath` | Path of `SKILL.md` inside the source repo (GitHub sources only) | +| `skillFolderHash` | Hash of the skill folder at the recorded version (empty for well-known sources) | +| `installedAt` / `updatedAt` | ISO timestamps of first install and last update | + +A top-level `dismissed` object records dismissed CLI prompts (`findSkillsPrompt: true`). + +The lock lists 80 skills. The largest sources are `mattpocock/skills` (23), `vercel-labs/json-render` (16), `Leonxlnx/taste-skill` (7), `haydenbleasel/blume` (3). The lock and the directory do not match exactly: + +- In the lock with no directory in the repo: `Technical Writer`, `codegen`, `ethereum-wingman`, `gh-stack`, `image`, `jotai`, `mcp`, `react-email`, `react-native`, `react-pdf`, `redux`, `remotion`, `solid`, `svelte`, `vue`, `xstate`, `zustand`. +- In the directory with no lock entry (added by hand or copied from elsewhere): shown as `untracked` in the table below. + +## How Claude Code resolves skills + + + + `dot_claude/skills/symlink_blume` is a one-line file containing `../../.agents/skills/blume`. + + + chezmoi's `symlink_` prefix turns it into the symlink `~/.claude/skills/blume`, pointing at `../../.agents/skills/blume`. + + + Relative to `~/.claude/skills/`, the target is `~/.agents/skills/blume`, whose files are in turn symlinks into the chezmoi source directory. Edits to a skill in the repo take effect immediately. + + + +Twelve library skills have no Claude link, so only agents that read `~/.agents/skills` directly can see them. They are the three fumadocs skills, five of the six tanstack skills, `interface-design`, `laws-of-ux`, `ui-ux-pro-max`, and `web-design-guidelines` (marked `—` below). Three Claude-side entries (`cloudflare`, `todoist-cli`, `workers-best-practices`) are separate real directories in `dot_claude/skills/` rather than links, so Claude Code reads its own copy (`own copy` below). + +## Library + +The Description column is the first sentence of each skill's `SKILL.md` frontmatter `description`. Lock source is the `source` field from `.skill-lock.json`. + +| Skill | Lock source | Claude link | Description | +| --- | --- | :-: | --- | +| `blume` | `haydenbleasel/blume` | symlink | Build and maintain documentation sites with Blume, the markdown-first docs framework on Astro and Vite. | +| `blume-migrate` | `haydenbleasel/blume` | symlink | Migrate an existing documentation site (Mintlify, Docusaurus, Fumadocs, Nextra, Starlight, or any docs framework) to Blume, the markdown-first docs framework on Astro. | +| `blume-update-docs` | `haydenbleasel/blume` | symlink | Keep a Blume docs site in sync with the product it documents. | +| `brandkit` | `Leonxlnx/taste-skill` | symlink | 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` | symlink | Fast, modern JavaScript/TypeScript development with the Bun runtime, inspired by oven-sh/bun. | +| `cloudflare` | untracked | own copy | Comprehensive Cloudflare platform skill covering Workers, Pages, storage (KV, D1, R2), AI (Workers AI, Vectorize, Agents SDK), networking (Tunnel, Spectrum), security (WAF, DDoS), and infrastructure-as-code (Terraform, Pulumi). | +| `codebase-design` | `mattpocock/skills` | symlink | Shared vocabulary for designing deep modules. | +| `core` | `vercel-labs/json-render` | symlink | Core package for defining schemas, catalogs, and AI prompt generation for json-render. | +| `deepinit` | `yeachan-heo/oh-my-claudecode` | symlink | Deep codebase initialization with hierarchical AGENTS.md documentation | +| `design-an-interface` | untracked | symlink | Generate multiple radically different interface designs for a module using parallel sub-agents. | +| `design-taste-frontend` | `Leonxlnx/taste-skill` | symlink | Anti-slop frontend skill for landing pages, portfolios, and redesigns. | +| `diagnosing-bugs` | `mattpocock/skills` | symlink | Diagnosis loop for hard bugs and performance regressions. | +| `domain-modeling` | `mattpocock/skills` | symlink | Build and sharpen a project's domain model. | +| `find-skills` | `vercel-labs/skills` | symlink | 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` | untracked | — | Create component documentation with installation, usage examples, and preview sections. | +| `fumadocs-mdx-structure` | untracked | — | Create MDX documentation files with proper frontmatter, imports, and component integration. | +| `fumadocs-registry-integration` | untracked | — | Register 8-bit components in registry.json for shadcn/ui add command. | +| `git-guardrails-claude-code` | `mattpocock/skills` | symlink | 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` | symlink | 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` | symlink | Elite UX/UI & Advanced GSAP Motion Engineer. | +| `grill-me` | `mattpocock/skills` | symlink | A relentless interview to sharpen a plan or design. | +| `grill-with-docs` | `mattpocock/skills` | symlink | A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go. | +| `grilling` | `mattpocock/skills` | symlink | Grill the user relentlessly about a plan, decision, or idea. | +| `handoff` | `mattpocock/skills` | symlink | Compact the current conversation into a handoff document for another agent to pick up. | +| `high-end-visual-design` | `Leonxlnx/taste-skill` | symlink | Teaches the AI to design like a high-end agency. | +| `imagegen-frontend-web` | `Leonxlnx/taste-skill` | symlink | Elite frontend image-direction skill for generating premium, conversion-aware website design references. | +| `implement` | `mattpocock/skills` | symlink | Implement a piece of work based on a spec or set of tickets. | +| `improve-codebase-architecture` | `mattpocock/skills` | symlink | Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick. | +| `interface-design` | untracked | — | This skill is for interface design — dashboards, admin panels, apps, tools, and interactive products. | +| `laws-of-ux` | untracked | — | Review and guide UI implementations using the 21 Laws of UX. | +| `linear` | `openai/skills` | symlink | Manage issues, projects & team workflows in Linear. | +| `linear-cli` | `schpet/linear-cli` | symlink | Manage Linear issues from the command line using the linear cli. | +| `linear-documents` | `finesssee/linear-cli` | symlink | Manage Linear documents. | +| `loop-me` | `mattpocock/skills` | symlink | Grill me about specs for the workflows I want to build, within this workspace. | +| `loopy` | `Forward-Future/loop-library` | symlink | Discover, find, compare, audit, repair, adapt, craft, run, debrief, save, and prepare repeatable AI-agent loops for publication. | +| `migrate-to-shoehorn` | `mattpocock/skills` | symlink | Migrate test files from `as` type assertions to @total-typescript/shoehorn. | +| `minimalist-ui` | `Leonxlnx/taste-skill` | symlink | Clean editorial-style interfaces. | +| `mintlify` | `mintlify.com` | symlink | Build and maintain documentation sites with Mintlify. | +| `mintlify-api` | `mintlify.com` | symlink | Interact with the Mintlify REST API to manage deployments, trigger builds, and query documentation site metadata programmatically. | +| `mintlify-docs` | `mintlify.com` | symlink | Build and maintain documentation sites with Mintlify. | +| `native-sdk` | `vercel-labs/native` | symlink | Discovery skill for the Native SDK, the complete toolkit for building native desktop applications. | +| `obsidian-vault` | untracked | symlink | Search, create, and manage notes in the Obsidian vault with wikilinks and index notes. | +| `openlogs-server-logs` | `charlietlamb/openlogs` | symlink | Fetch and inspect recent local server logs in repos that use openlogs or the `ol` CLI. | +| `prototype` | `mattpocock/skills` | symlink | Build a throwaway prototype to answer a design question. | +| `qa` | untracked | symlink | Interactive QA session where user reports bugs or issues conversationally, and the agent files GitHub issues. | +| `react` | `vercel-labs/json-render` | symlink | React renderer for json-render that turns JSON specs into React components. | +| `redesign-existing-projects` | `Leonxlnx/taste-skill` | symlink | Upgrades existing websites and apps to premium quality. | +| `remix` | `remix-run/remix` | symlink | Build and review Remix 3 applications using the `remix` npm package and subpath imports. | +| `request-refactor-plan` | untracked | symlink | Create a detailed refactor plan with tiny commits via user interview, then file it as a GitHub issue. | +| `resolving-merge-conflicts` | `mattpocock/skills` | symlink | Use when you need to resolve an in-progress git merge/rebase conflict. | +| `rust-async-patterns` | `wshobson/agents` | symlink | Master Rust async programming with Tokio, async traits, error handling, and concurrent patterns. | +| `rust-best-practices` | `apollographql/skills` | symlink | Guide for writing idiomatic Rust code based on Apollo GraphQL's best practices handbook. | +| `rust-testing` | `affaan-m/everything-claude-code` | symlink | Rust testing patterns including unit tests, integration tests, async testing, property-based testing, mocking, and coverage. | +| `scaffold-exercises` | `mattpocock/skills` | symlink | Create exercise directory structures with sections, problems, solutions, and explainers that pass linting. | +| `setup-matt-pocock-skills` | `mattpocock/skills` | symlink | Configure this repo for the engineering skills: set up its issue tracker, triage label vocabulary, and domain doc layout. | +| `setup-pre-commit` | `mattpocock/skills` | symlink | Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. | +| `shadcn` | `shadcn-ui/ui` | symlink | Manages shadcn components and projects — adding, searching, fixing, debugging, styling, and composing UI, including chat interfaces. | +| `solidity-foundry-development` | `whackur/solidity-agent-toolkit` | symlink | Foundry development workflow for Solidity smart contracts. | +| `solidity-security` | `wshobson/agents` | symlink | Master smart contract security best practices to prevent common vulnerabilities and implement secure Solidity patterns. | +| `stop-slop` | `hardikpandya/stop-slop` | symlink | Remove AI writing patterns from prose. | +| `tanstack-form` | untracked | — | Headless, performant, and type-safe form state management for TS/JS, React, Vue, Angular, Solid, Lit, and Svelte. | +| `tanstack-integration-best-practices` | untracked | — | Best practices for integrating TanStack Query with TanStack Router and TanStack Start. | +| `tanstack-query-best-practices` | `deckardger/tanstack-agent-skills` | — | TanStack Query (React Query) best practices for data fetching, caching, mutations, and server state management. | +| `tanstack-router-best-practices` | untracked | — | TanStack Router best practices for type-safe routing, data loading, search params, and navigation. | +| `tanstack-start-best-practices` | `deckardger/tanstack-agent-skills` | symlink | TanStack Start best practices for full-stack React applications. | +| `tanstack-table` | untracked | — | Headless UI for building powerful tables & datagrids for TS/JS, React, Vue, Solid, Svelte, Qwik, Angular, and Lit. | +| `tdd` | `mattpocock/skills` | symlink | Test-driven development. | +| `teach` | `mattpocock/skills` | symlink | Teach the user a new skill or concept, within this workspace. | +| `todoist-cli` | untracked | own copy | Manage Todoist tasks, projects, labels, filters, sections, comments, reminders, and workspaces via the `td` CLI. | +| `triage` | `mattpocock/skills` | symlink | Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs. | +| `typescript-expert` | `remix-run/remix` | symlink | Write, refactor, or review TypeScript code with strict, precise, maintainable types and without unnecessary `any`, type assertions, or type suppressions. | +| `ubiquitous-language` | untracked | symlink | Extract a DDD-style ubiquitous language glossary from the current conversation, flagging ambiguities and proposing canonical terms. | +| `ui-ux-pro-max` | untracked | — | UI/UX design intelligence for web and mobile. | +| `uv-package-manager` | `wshobson/agents` | symlink | Master the uv package manager for fast Python dependency management, virtual environments, and modern Python project workflows. | +| `web-design-guidelines` | `vercel-labs/agent-skills` | — | Review UI code for Web Interface Guidelines compliance. | +| `workers-best-practices` | untracked | own copy | Reviews and authors Cloudflare Workers code against production best practices. | +| `wrangler` | `cloudflare/skills` | symlink | Cloudflare Workers CLI for deploying, developing, and managing Workers, KV, R2, D1, Vectorize, Hyperdrive, Workers AI, Containers, Queues, Workflows, Pipelines, and Secrets Store. | +| `write-tests` | `remix-run/remix` | symlink | Write, refactor, or review tests in the Remix repository. | +| `writing-beats` | `mattpocock/skills` | symlink | Writing, exploit; assemble raw material into a journey of beats, grounding each term before a beat leans on it. | +| `writing-fragments` | `mattpocock/skills` | symlink | Writing, explore: mine raw fragments, no structure yet. | +| `writing-great-skills` | untracked | symlink | Reference for writing and editing skills well — the vocabulary and principles that make a skill predictable. | +| `writing-shape` | `mattpocock/skills` | symlink | Writing, exploit: shape raw material into an article, paragraph by paragraph. | + +## Claude-only skills + +These live as real directories in `dot_claude/skills/` (target `~/.claude/skills//`) and are not part of the shared library or the lock file. See [Claude Code](/ai/claude-code#skills). + +| Skill | Description | +| --- | --- | +| `absurd` | Debug and operate Absurd durable workflows with absurdctl. | +| `agents-sdk` | Build AI agents on Cloudflare Workers using the Agents SDK. | +| `cloudflare` | Comprehensive Cloudflare platform skill covering Workers, Pages, storage (KV, D1, R2), AI (Workers AI, Vectorize, Agents SDK), feature flags (Flagship), networking (Tunnel, Spectrum), security (WAF, DDoS), and infrastructure-as-code (Terraform, Pulumi). | +| `cloudflare-email-service` | Send and receive transactional emails with Cloudflare Email Service (Email Sending + Email Routing). | +| `cloudflare-one` | Guides Cloudflare One Zero Trust and SASE work across Access, Gateway, WARP, Tunnel, Cloudflare WAN, DLP, CASB, device posture, and identity. | +| `cloudflare-one-migrations` | Plans migrations from Zscaler ZIA/ZPA, Palo Alto, legacy VPN, SWG, or SASE stacks to Cloudflare One. | +| `create-beads-orchestration` | Bootstrap lean multi-agent orchestration with beads task tracking. | +| `durable-objects` | Create and review Cloudflare Durable Objects. | +| `sandbox-sdk` | Build sandboxed applications for secure code execution. | +| `todoist-cli` | Manage Todoist tasks, projects, labels, filters, sections, comments, reminders, and workspaces via the `td` CLI. | +| `turnstile-spin` | Set up Cloudflare Turnstile end-to-end in a project. | +| `web-perf` | Analyzes web performance using Chrome DevTools MCP. | +| `workers-best-practices` | Reviews and authors Cloudflare Workers code against production best practices. | diff --git a/docs/chezmoi/config.mdx b/docs/chezmoi/config.mdx new file mode 100644 index 0000000..11b98f9 --- /dev/null +++ b/docs/chezmoi/config.mdx @@ -0,0 +1,96 @@ +--- +title: Config and roles +description: 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 + +```toml .chezmoi.toml.tmpl +{{- $name := promptStringOnce . "name" "Full name" "Prad Nukala" -}} +{{- $email := promptStringOnce . "email" "Email" "prad@sonr.io" -}} +{{- $roleDefault := "desktop" -}} +{{- if eq .chezmoi.os "darwin" -}}{{- $roleDefault = "mac" -}}{{- end -}} +{{- $role := promptChoiceOnce . "role" "Machine role" (list "desktop" "laptop" "mac" "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`, `mac`, `server` | `mac` when `.chezmoi.os` is `darwin`, otherwise `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 (`niri`, `xdg-user-dirs`, `noctalia-shell`) | +| --- | --- | --- | --- | +| `desktop` | Arch Linux | Applied | Installed | +| `laptop` | Arch Linux | Applied | Installed | +| `mac` | macOS | Skipped | n/a (Homebrew list only) | +| `server` | 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](/chezmoi/externals-and-ignore#chezmoiignore) 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](/chezmoi#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 README 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](/chezmoi/data)) 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 (`mac` on darwin) | +| `.chezmoi.os` | `.chezmoiignore.tmpl` | Desktop layer requires `linux` | +| `.chezmoi.os` | `run_onchange_before_10-packages.sh.tmpl` | pacman/paru on `linux`, Homebrew on `darwin` | +| `.chezmoi.os` | `run_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` | `dot_config/yazi/yazi.toml.tmpl` | Yazi's `open` opener runs `open` on darwin, `xdg-open` elsewhere | + +```ini dot_gitconfig.tmpl +[user] + email = {{ .email }} + name = {{ .name }} +``` + +The rest of `~/.gitconfig` is covered under [Tools](/tools). diff --git a/docs/chezmoi/data.mdx b/docs/chezmoi/data.mdx new file mode 100644 index 0000000..4b2be29 --- /dev/null +++ b/docs/chezmoi/data.mdx @@ -0,0 +1,189 @@ +--- +title: Packages and aliases +description: 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`](/chezmoi/scripts#10-packages), [`run_onchange_after_20-gh-extensions.sh.tmpl`](/chezmoi/scripts#20-gh-extensions) | +| `.chezmoidata/aliases.yaml` | `.aliases` | `dot_config/shell/aliases.sh.tmpl` (bash and zsh) | + +## packages.yaml [#packagesyaml] + +One manifest per platform, plus a `shared` block. Any edit to the file changes the hash embedded in the package script, so the next `chezmoi apply` re-runs the install. Installs are idempotent (`pacman --needed`, `paru --needed`, `brew install` on already-installed formulae). + + + + +`packages.arch.pacman`, installed on every Linux machine with `pacman -S --needed --noconfirm`: + +| Group | Packages | +| --- | --- | +| Shell and editors | `fish`, `neovim`, `tmux`, `micro` | +| Terminal | `kitty` | +| TUI tools | `yazi`, `lazygit`, `lazydocker`, `btop`, `fastfetch` | +| VCS and forge | `git`, `github-cli`, `git-delta`, `diffnav` | +| Search and files | `fzf`, `fd`, `ripgrep`, `zoxide`, `eza`, `bat`, `jq`, `duf` | +| Media and preview (yazi deps) | `ffmpeg`, `ffmpegthumbnailer`, `poppler`, `resvg`, `imagemagick`, `7zip`, `unzip` | +| Misc CLI | `gum`, `glow`, `atuin`, `wget`, `starship`, `zsh-syntax-highlighting` | +| Fonts | `ttf-victor-mono-nerd` | + +`packages.arch.aur`, installed with `paru -S --needed --noconfirm` on every Linux machine: `topgrade`. + +`packages.arch.desktop`, added only for roles `desktop` and `laptop`: + +| Source | Packages | +| --- | --- | +| pacman | `niri`, `xdg-user-dirs` | +| AUR | `noctalia-shell` | + + + + +`packages.darwin.brew`, installed with `brew install`: + +`fish`, `neovim`, `tmux`, `yazi`, `lazygit`, `lazydocker`, `btop`, `fastfetch`, `git`, `gh`, `git-delta`, `fzf`, `fd`, `ripgrep`, `zoxide`, `eza`, `bat`, `jq`, `duf`, `ffmpeg`, `ffmpegthumbnailer`, `poppler`, `resvg`, `imagemagick`, `sevenzip`, `gum`, `glow`, `atuin`, `starship`, `zsh-syntax-highlighting`, `topgrade` + +`packages.darwin.cask`, installed with `brew install --cask`: `kitty`, `font-victor-mono-nerd-font`. + +Compared with Arch, macOS has no `micro`, `diffnav`, `unzip`, or `wget`, and gets `topgrade` from Homebrew instead of the AUR. The role does not change the macOS list. + + + + +`packages.shared.gh_extensions`, installed by the gh-extensions script on every OS: + +| 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.go` is an empty list. `packages.shared.cargo` lists `suvadu`. No script in the repo reads either key; they document intent only, and cargo installs are kept current by topgrade's `[cargo]` step. + + + + +:::note +AUR packages need `paru`. Without it the package script prints a warning listing the skipped AUR packages and continues. +::: + +## aliases.yaml [#aliasesyaml] + +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.n` | `yazi ~/.config/niri` | +| `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` | +| `sua` | `shelly upgrade-all -n` | +| `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. + +```sh dot_config/shell/aliases.sh.tmpl +{{- 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, else `pbcopy` / `pbpaste` when `pbcopy` 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: + +```sh dot_bashrc +[ -f "$HOME/.config/shell/aliases.sh" ] && . "$HOME/.config/shell/aliases.sh" +``` + +See [bash and zsh](/shell) 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` | `yazi ~/.local/share/chezmoi/dot_config/kitty` | +| `e.n` | `yazi ~/.config/niri` | `yazi ~/.local/share/chezmoi/dot_config/niri` | +| `e.y` | `yazi ~/.config/yazi` | `yazi ~/.local/share/chezmoi/dot_config/yazi` | +| `e.t` | `nvim ~/.config/tmux/tmux.conf` | `nvim ~/.local/share/chezmoi/dot_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). + +:::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. +::: diff --git a/docs/chezmoi/externals-and-ignore.mdx b/docs/chezmoi/externals-and-ignore.mdx new file mode 100644 index 0000000..ac01909 --- /dev/null +++ b/docs/chezmoi/externals-and-ignore.mdx @@ -0,0 +1,129 @@ +--- +title: Externals and ignore rules +description: 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] + +Externals are content chezmoi fetches instead of storing in the repo. Both entries are `git-repo` externals: chezmoi runs `git clone` when the target directory is missing. Because they are real git checkouts, they are never symlinked into the source tree. + +```toml .chezmoiexternal.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"] +``` + +| 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](/chezmoi/scripts#build-bat-cache) | + +### No refreshPeriod + +Neither entry 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. + +## .chezmoiignore.tmpl [#chezmoiignore] + +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 `.` (`.github/`, `.claude/`, `.crush/`, `.gitignore`) are ignored by chezmoi without needing a rule. + +### Repo docs + +```txt +MIGRATION-NOTES.md +README.md +CLAUDE.md +AGENTS.md +docs +.blume +node_modules +blume.config.ts +package.json +bun.lock +public +dist +``` + +Files at the source root that would otherwise land in `$HOME` as `~/README.md`, `~/docs`, `~/package.json`, and so on. This covers the repo README and agent instruction files, plus this Blume docs site and its build output. + +### Runtime and plugin state inside managed trees + +| Pattern | Why | +| --- | --- | +| `.config/lazygit/.omc/**` | Tool state written inside the lazygit config dir | +| `.config/yazi/plugins/**` | Installed by `ya pkg install` from `package.toml` ([script](/chezmoi/scripts#install-yazi-plugins)) | +| `.config/tmux/plugins/**` | tpm and the plugins it installs ([40-post](/chezmoi/scripts#40-post)) | +| `.config/fish/fish_variables` | fish universal variables, rewritten by fish at runtime | +| `.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`, `dot_config/tmux/plugins`, 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) + +```txt .chezmoiignore.tmpl +{{ if or (ne .chezmoi.os "linux") (and (ne .role "desktop") (ne .role "laptop")) }} +.config/niri +.config/niri/** +.config/noctalia +.config/noctalia/** +.config/niri-dynamic-workspaces +.config/niri-dynamic-workspaces/** +.config/fontconfig +.config/fontconfig/** +.config/mimeapps.list +.config/systemd +.config/systemd/** +.local/bin/niri-launch +.config/fish/auto-Niri.fish +.local/bin/cp-appid +.config/tmux/niri-title.sh +{{ end }} +``` + +The block is emitted, and these paths skipped, unless the OS is `linux` and the role is `desktop` or `laptop`. `mac` and `server` machines, and any non-Linux machine regardless of role, never receive the niri compositor config (`dot_config/niri/`), fontconfig (`dot_config/fontconfig/fonts.conf`), default-app associations (`dot_config/mimeapps.list`), the fish auto-start hook (`dot_config/fish/auto-Niri.fish`), the tmux window-title helper, or the `niri-launch` and `cp-appid` scripts. The `noctalia`, `niri-dynamic-workspaces`, and `systemd` rules match nothing in the current source tree; they only take effect if those configs are added later. + +| Machine | Desktop layer | +| --- | --- | +| Linux, `desktop` or `laptop` | Applied | +| Linux, `server` or `mac` | Ignored | +| macOS or other OS, any role | Ignored | + +See [Desktop](/desktop/niri) for what the layer contains. Gaps in the gate: the block lists `niri-launch` but not its siblings (`niri-launch-ai`, `niri-launch-browser`, `niri-launch-terminal`, `niri-launch-webapp`), and the Hyprland and waybar configs (`dot_config/hypr/`, `dot_config/waybar/`) are not gated at all, so those apply on every role. `dot_config/niri/scripts/` is covered by `.config/niri/**`. + +### Secrets in runtime state + +```txt +.config/noctalia/plugins +.config/noctalia/plugins/** +``` + +noctalia writes plugin state containing embedded tokens here. These paths are ignored on every machine so tokens are never pulled into the repo. + +### Python byte-cache + +```txt +.config/kitty/__pycache__ +.config/kitty/__pycache__/** +``` + +kitty imports `tab_bar.py` and the other Python helpers in `~/.config/kitty`, and Python writes `__pycache__` next to them. In symlink mode that directory would otherwise appear in the source tree. diff --git a/docs/chezmoi/index.mdx b/docs/chezmoi/index.mdx new file mode 100644 index 0000000..ddf4a92 --- /dev/null +++ b/docs/chezmoi/index.mdx @@ -0,0 +1,151 @@ +--- +title: How it works +description: Source layout, naming conventions, symlink mode, and the day-to-day chezmoi workflow for this repo. +sidebar: + label: Overview + icon: settings +--- + +The repo is a [chezmoi](https://chezmoi.io) source directory. It lives at `~/.local/share/chezmoi` and its remote is [prdlk/dotfiles](https://github.com/prdlk/dotfiles). `chezmoi apply` renders it into `$HOME`. The [Installation](/installation) page covers first-time setup. + +## Pages in this section + +| Page | Covers | +| --- | --- | +| [Config and roles](/chezmoi/config) | `.chezmoi.toml.tmpl`: prompts, machine role, symlink mode, age encryption, template data | +| [Packages and aliases](/chezmoi/data) | `.chezmoidata/packages.yaml` and `.chezmoidata/aliases.yaml`, and how they render | +| [Apply scripts](/chezmoi/scripts) | Every `run_*` script: when it runs, what triggers it, what it does per OS and role | +| [Externals and ignore rules](/chezmoi/externals-and-ignore) | `.chezmoiexternal.toml` git clones and every `.chezmoiignore.tmpl` rule | + +## Source layout + + + +- .chezmoi.toml.tmpl +- .chezmoidata/ + - aliases.yaml + - packages.yaml +- .chezmoiexternal.toml +- .chezmoiignore.tmpl +- .chezmoiscripts/ + - run_onchange_before_10-packages.sh.tmpl + - run_onchange_after_20-gh-extensions.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/ + - fish/ + - fontconfig/ + - gh/ + - gh-dash/ + - ghostty/ + - herdr/ + - herdr-nvim/ + - hunk/ + - hypr/ + - kitty/ + - lazydocker/ + - lazygit/ + - mimeapps.list + - niri/ + - shell/ + - starship.toml + - tmux/ + - topgrade.toml + - waybar/ + - yazi/ + - zsh/ +- dot_local/ + - bin/ +- dot_claude/ + - commands/ + - hooks/ + - skills/ + - settings.json + - empty_CLAUDE.md +- dot_agents/ + - skills/ + - dot_skill-lock.json +- dot_omp/ + - loops/ + - private_agent/ +- dot_leetcode/ +- docs/ +- public/ +- blume.config.ts +- package.json +- bun.lock +- README.md + + + +| Path | Target | Purpose | +| --- | --- | --- | +| `.chezmoi.toml.tmpl` | `~/.config/chezmoi/chezmoi.toml` | Config template rendered by `chezmoi init`. See [Config and roles](/chezmoi/config). | +| `.chezmoidata/` | — | YAML merged into template data (`.packages`, `.aliases`). See [Packages and aliases](/chezmoi/data). | +| `.chezmoiexternal.toml` | — | Git repos cloned into `$HOME` (nvim config, a bat syntax). | +| `.chezmoiignore.tmpl` | — | Target paths chezmoi skips; gates the Linux desktop layer by role. | +| `.chezmoiscripts/`, root `run_*` | — | Install and housekeeping scripts. See [Apply scripts](/chezmoi/scripts). | +| `dot_config/` | `~/.config/` | Per-tool config. Documented under [Shell](/shell), [Terminal](/terminal), [Tools](/tools), [Desktop](/desktop). | +| `dot_local/bin/` | `~/.local/bin/` | 33 standalone scripts shared by every shell. | +| `dot_claude/` | `~/.claude/` | Claude Code settings, commands, hooks, and skill symlinks. See [AI agents](/ai/claude-code). | +| `dot_agents/` | `~/.agents/` | The shared agent skill library the `~/.claude/skills` symlinks resolve against. | +| `dot_omp/` | `~/.omp/` | omp agent config and loops. | +| `dot_leetcode/` | `~/.leetcode/` | leetcode CLI workspace state. | +| `docs/`, `public/`, `blume.config.ts`, `package.json`, `bun.lock`, `README.md` | — | This docs site and the repo README. Listed in `.chezmoiignore.tmpl`, never applied. | + +Entries whose source name starts with `.` (`.github/`, `.claude/`, `.crush/`, `.gitignore`) are ignored by chezmoi automatically and stay repo-only. `.github/workflows/docs.yml` builds this site. + +## 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`, `dot_skill-lock.json` → `.skill-lock.json` | +| `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`, `dot_omp/private_agent/`, `dot_omp/loops/*/private_loop.md` | +| `executable_` | Target gets the executable bit | 49 files: every script in `dot_local/bin/`, `dot_config/niri/scripts/`, `dot_config/tmux/executable_niri-title.sh`, Claude hooks, skill helper scripts | +| `exact_` | Directory is exact: entries in the target that are not in the source are deleted | `dot_config/niri/exact_config.d/` (numbered `10-…kdl` through `95-…kdl` fragments) | +| `empty_` | File is kept even when empty | `dot_claude/empty_CLAUDE.md`, `dot_config/herdr/empty_dot_plugins.lock` | +| `symlink_` | Target is a symlink; file content is the link destination | 67 entries in `dot_claude/skills/` (each → `../../.agents/skills/`), `dot_config/kitty/symlink_current-theme.conf` (→ `themes/noctalia.conf`) | +| `.tmpl` | Rendered with Go templates and chezmoi data | `dot_gitconfig.tmpl`, `dot_config/shell/aliases.sh.tmpl`, `dot_config/yazi/yazi.toml.tmpl`, all scripts, the config and ignore files | +| `run_once_` / `run_onchange_` + `before_` / `after_` | Script, with run frequency and phase | See [Apply scripts](/chezmoi/scripts) | + +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/kitty/kitty.conf`) edits `~/.local/share/chezmoi/dot_config/kitty/kitty.conf` directly. The change is live and shows up in `git status` of the repo with no `chezmoi add` step. +- Templates are rendered copies. Editing `~/.gitconfig` or `~/.config/shell/aliases.sh` changes only the copy; the next `chezmoi apply` overwrites it. Edit the `.tmpl` source (`chezmoi edit ~/.gitconfig`) instead. +- `private_` and `executable_` targets are real files too. After editing one in place, run `chezmoi re-add ` to copy it back into the source. +- Tools that rewrite their own config write through the symlink into the repo. The runtime state that would otherwise pollute the source (plugin dirs, lock files, `fish_variables`, `__pycache__`) is excluded in `.chezmoiignore.tmpl` and `.gitignore`; see [Externals and ignore rules](/chezmoi/externals-and-ignore). + +:::note +Several fish aliases (`e.f`, `e.h`, `e.k`, `e.n`, `e.y`, `e.t`, `,,`) open the chezmoi source paths directly. Symlink mode makes that equivalent to editing the live 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 `~/.local/share/chezmoi` 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@github.com:prdlk/dotfiles.git`). diff --git a/docs/chezmoi/meta.ts b/docs/chezmoi/meta.ts new file mode 100644 index 0000000..c2f0239 --- /dev/null +++ b/docs/chezmoi/meta.ts @@ -0,0 +1,7 @@ +import { defineMeta } from "blume"; + +export default defineMeta({ + title: "How it works", + icon: "settings", + pages: ["index", "config", "data", "scripts", "externals-and-ignore"], +}); diff --git a/docs/chezmoi/scripts.mdx b/docs/chezmoi/scripts.mdx new file mode 100644 index 0000000..e86d447 --- /dev/null +++ b/docs/chezmoi/scripts.mdx @@ -0,0 +1,105 @@ +--- +title: Apply scripts +description: Every run_ script chezmoi executes during apply, when each one fires, and what it does on each OS and role. +--- + +Six scripts run during `chezmoi apply`. Four live in `.chezmoiscripts/`, a directory whose scripts run as if they sat at the source root without creating a matching target directory. Two sit at the repo root. All six are templates and all use `#!/bin/sh` with `set -eu`. + +## 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. + + + Install system packages from `packages.yaml`. + chezmoi writes the target state. + Install gh extensions. + Enable systemd user units on Linux. + tpm clone, bat cache, font cache. + Rebuild bat cache when its theme or config changes. + 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_20-gh-extensions.sh.tmpl` | after | onchange | sha256 of `packages.shared.gh_extensions` 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 | Only 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 `dot_config/yazi/package.toml` | + +`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 [#10-packages] + +`.chezmoiscripts/run_onchange_before_10-packages.sh.tmpl` installs everything in [`packages.yaml`](/chezmoi/data#packagesyaml). It runs before files are applied so the tools exist when configs land. + + + + +1. Uses `pacman` directly when running as root, otherwise `sudo pacman`. +2. `pacman -S --needed --noconfirm` with every entry in `packages.arch.pacman`. +3. For roles `desktop` and `laptop`, a second `pacman -S --needed --noconfirm` with `packages.arch.desktop.pacman`. +4. Builds the AUR list: `packages.arch.desktop.aur` plus `packages.arch.aur` for `desktop`/`laptop`, only `packages.arch.aur` for other roles. +5. If the list is non-empty and `paru` exists, runs `paru -S --needed --noconfirm` on it. Without `paru` it prints `warning: paru not found — skipping AUR packages: …` and continues. + + + + +1. Exits with an error pointing at https://brew.sh if `brew` is missing. +2. `brew install` with every entry in `packages.darwin.brew`. +3. `brew install --cask` with every entry in `packages.darwin.cask`. + +The role is not consulted on macOS. + + + + +On any other OS the script renders to just the shebang and comments and does nothing. + +## 20-gh-extensions [#20-gh-extensions] + +`.chezmoiscripts/run_onchange_after_20-gh-extensions.sh.tmpl` installs each `packages.shared.gh_extensions` entry on every OS. + +- 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. + +:::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). +::: + +## 30-user-services [#30-user-services] + +`.chezmoiscripts/run_once_after_30-user-services.sh.tmpl` enables session-critical systemd user units on Linux. + +- If `~/.config/systemd/user/nirinit.service` exists and `systemctl` is available, runs `systemctl --user daemon-reload` and `systemctl --user enable nirinit.service`. Failures are ignored. +- 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. The repo does not currently contain a `dot_config/systemd/` directory, so the unit file has to exist on the machine already for this script to do anything. + +## 40-post [#40-post] + +`.chezmoiscripts/run_onchange_after_40-post.sh.tmpl` is post-apply housekeeping. It has no hash comment, so it only re-runs when the script itself is edited. + +| Step | Condition | Action | +| --- | --- | --- | +| tmux plugin manager | `tmux` installed and `~/.config/tmux/plugins/tpm` missing | `git clone --depth=1 https://github.com/tmux-plugins/tpm ~/.config/tmux/plugins/tpm` | +| bat cache | `bat` installed | `bat cache --build` | +| Font cache | Linux, `fc-cache` installed | `fc-cache -f` | + +Each step ignores failures (`|| true`). `tmux.conf` expects tpm at that path; see [tmux](/terminal/tmux). + +## build-bat-cache [#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`](/chezmoi/externals-and-ignore#externals). + +## install-yazi-plugins [#install-yazi-plugins] + +`run_onchange_after_install-yazi-plugins.sh.tmpl` reinstalls yazi plugins whenever `dot_config/yazi/package.toml` changes. 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`. The installed plugins land in `~/.config/yazi/plugins/`, which `.chezmoiignore.tmpl` excludes. The plugin list is on the [yazi page](/tools/yazi). diff --git a/docs/desktop/fonts-and-apps.mdx b/docs/desktop/fonts-and-apps.mdx new file mode 100644 index 0000000..a278f24 --- /dev/null +++ b/docs/desktop/fonts-and-apps.mdx @@ -0,0 +1,101 @@ +--- +title: Fonts and default apps +description: 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` | + +```xml ~/.config/fontconfig/fonts.conf + + + + 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](/desktop/waybar)), and the terminals set fonts in their own configs (see [kitty](/terminal/kitty)). + +### 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: + +| Platform | Package | Source | +| --- | --- | --- | +| Arch Linux | `ttf-victor-mono-nerd` | pacman (`packages.arch.pacman`) | +| macOS | `font-victor-mono-nerd-font` | Homebrew cask (`packages.darwin.cask`) | + +`fonts.conf` is Linux desktop only, but the font package is also installed on `server` and `mac`. + +## 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` | +| Web pages | `text/html`, `application/xhtml+xml`, `application/x-extension-htm`, `-html`, `-shtml`, `-xhtml`, `-xht` | `brave-origin-nightly.desktop` | +| Web links | `x-scheme-handler/http`, `https`, `chrome` | `brave-origin-nightly.desktop` | +| Browser internals | `x-scheme-handler/about`, `unknown` | `chromium.desktop` | +| PDF | `application/pdf` | `com.brave.Origin.nightly.desktop` | +| Directories | `inode/directory` | `com.thisisgm.flea.desktop` (flea) | +| 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-nightly.desktop`, `userapp-Floorp-8MTFP3.desktop` | +| `x-scheme-handler/mailto` | `userapp-Evolution-PCEYQ4.desktop` | +| `application/vnd.microsoft.portable-executable` | `wine.desktop` | +| `application/pdf` | `com.brave.Origin.nightly.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 + +- [niri](/desktop/niri) and [Hyprland](/desktop/hyprland): the compositors these defaults serve. +- [Installation](/installation): role selection that decides whether this layer applies. diff --git a/docs/desktop/hyprland.mdx b/docs/desktop/hyprland.mdx new file mode 100644 index 0000000..7276073 --- /dev/null +++ b/docs/desktop/hyprland.mdx @@ -0,0 +1,356 @@ +--- +title: Hyprland +description: Hyprland Lua config layered on Omarchy — bindings ported from niri, 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. Most bindings are ported from the [niri config](/desktop/niri) so the same keys do the same jobs. + +:::note +`~/.config/hypr` and the `omarchy-*` scripts are **not** listed in `.chezmoiignore.tmpl`. chezmoi applies them on every role and OS, including `mac` and `server`. They only take effect where Hyprland and Omarchy are installed. +::: + +## 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: + +```lua ~/.config/hypr/hyprland.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 | +| --- | --- | +| 3 | `desc:Apple Computer Inc StudioDisplay 0x984262A7` (EDID match, survives connector changes) | +| 4 | `eDP-1` | +| 5 | `eDP-1` | + +### Window rules + +| Class | Rule | +| --- | --- | +| `^brave-www\.tldraw\.com__-Default$` | Workspace 3 | +| `^tldraw-offline$` | Workspace 5, fullscreen | +| `^com\.anthropic\.Claude$`, `^kitty-herdr$` | `special:scratchpad silent` | +| `^com\.fastmail\.Fastmail$` | `special:fastmail silent` | +| `^Beeper$` | `special:beeper 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` | `desc:Apple Computer Inc StudioDisplay 0x984262A7` | `active_area_size = { 152, 85.5 }`, `active_area_position = { 0, 0 }` — a 16:9 band cropped from the 16:10 tablet | + +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.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: + +```lua ~/.config/hypr/looknfeel.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)). 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` | 2 | +| `DP-4` (Apple Studio Display) | `5120x2880@60` | `0x0` | 2 | +| `eDP-1` (laptop) | `2560x1600@180` | `2560x0` | 2 | + +`GDK_SCALE=2` is exported. The Studio Display sits left of the laptop panel. At scale 2 its logical width is 2560, so `eDP-1` starts at x = 2560. + +## hyprsunset and portal + +```ini ~/.config/hypr/hyprsunset.conf +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. + +```ini ~/.config/hypr/xdph.conf +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` / `T` | Switch to workspace 1 / 2 / 3 / 4 / 5 | — | +| `ALT + SHIFT + Q` / `W` / `E` / `R` / `T` | Move window to workspace 1 / 2 / 3 / 4 / 5 | — | +| `SUPER + CTRL + S` | `omarchy-toggle-scratch scratchpad` | share menu | +| `SUPER + A` | `omarchy-toggle-scratch scratchpad` | — | +| `SUPER + O` | Focus next monitor | pop window out | +| `SUPER + SHIFT + O` | Move window to next monitor | Obsidian | +| `SUPER + CTRL + SHIFT + J` | Move window to next monitor | — | +| `SUPER + CTRL + 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 replace niri-dynamic-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 + H` | Width −100 px | +| `ALT + L` | Width +100 px | +| `ALT + K` | Height −100 px | +| `ALT + 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` | Nautilus: `omarchy-launch-or-focus nautilus "gtk-launch org.gnome.Nautilus"` | — | +| `SUPER + CTRL + ALT + E` | `omarchy-toggle-scratch fastmail` | — | +| `SUPER + CTRL + ALT + M` | `omarchy-toggle-scratch beeper` | — | +| `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 + SHIFT + F` | `flea --gui` | unbound first (default unnamed) | +| `SUPER + ALT + SHIFT + F` | `flea --gui "$(omarchy-cmd-terminal-cwd)"` — file manager in the terminal's cwd | unbound first (default unnamed) | + +The two `flea` bindings and a rule tagging `com.thisisgm.flea.picker` as `+floating-window` sit between `flea --default` / `flea --picker` marker comments. The `flea` tool writes and removes those blocks itself. + +### 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), `SUPER + ALT + SPACE` (apps menu), and `SUPER + SHIFT + RETURN` (browser) keep their Omarchy defaults. + +### 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 Nightly and its web apps) | `brave-origin-nightly` | +| `terminal` | kitty, alacritty, ghostty, foot, wezterm — excluding `^kitty-herdr$` (the scratchpad terminal) | `omarchy-launch-terminal` | +| `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-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|fastmail|beeper] +``` + +| Profile | Special workspace | Home monitor | Residents (class → launch) | +| --- | --- | --- | --- | +| `scratchpad` | `special:scratchpad` | Apple Studio Display | `com.anthropic.Claude` → `claude-desktop`; `kitty-herdr` → `kitty --class=kitty-herdr --config ~/.config/kitty/herdr.conf` | +| `fastmail` | `special:fastmail` | focused | `com.fastmail.Fastmail` → `gtk-launch fastmail` | +| `beeper` | `special:beeper` | focused | `Beeper` → `gtk-launch beeper` | + +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`, and `SUPER + CTRL + ALT + M`. + +## Related + +- [niri](/desktop/niri): the original config these bindings mirror. +- [Waybar](/desktop/waybar): the bar used with this setup. +- [kitty](/terminal/kitty): the `herdr` and `goliath` kitty configs launched here. diff --git a/docs/desktop/index.mdx b/docs/desktop/index.mdx new file mode 100644 index 0000000..49a063d --- /dev/null +++ b/docs/desktop/index.mdx @@ -0,0 +1,32 @@ +--- +title: Desktop +description: The Linux desktop layer — niri and Hyprland compositors, the Waybar bar, fontconfig, and default applications. +sidebar: + label: Overview +--- + +:::note[Role gating] +`.chezmoiignore.tmpl` skips the niri layer unless the machine runs Linux **and** its role is `desktop` or `laptop`. The gated targets are `~/.config/niri`, `~/.config/noctalia`, `~/.config/niri-dynamic-workspaces`, `~/.config/fontconfig`, `~/.config/mimeapps.list`, `~/.config/systemd`, `~/.local/bin/niri-launch`, `~/.local/bin/cp-appid`, `~/.config/fish/auto-Niri.fish`, and `~/.config/tmux/niri-title.sh`. On `mac` and `server` roles these are not applied. + +`~/.config/hypr`, `~/.config/waybar`, the `omarchy-*` scripts, and the `niri-launch-ai` / `-browser` / `-terminal` / `-webapp` wrappers are **not** listed there, so chezmoi applies them on every role and OS. Only the exact path `.local/bin/niri-launch` is ignored, not the wrappers that call it. +::: + +Two Wayland compositors are configured side by side. niri is the original setup, paired with the Noctalia shell. Hyprland runs on top of [Omarchy](https://omarchy.org), and its bindings are ported from the niri config: the same keys launch the same apps where both compositors support it. Waybar is the Hyprland bar. Noctalia replaces it under niri. + +| Page | Covers | +| --- | --- | +| [niri](/desktop/niri) | `~/.config/niri` (base config, Noctalia colors, the `config.d/` fragments, per-display profiles), niri helper scripts, the `niri-launch*` launchers, `cp-appid`, the `nirinit` user service | +| [Hyprland](/desktop/hyprland) | `~/.config/hypr` Lua config on Omarchy: bindings, input, look and feel, monitors, hyprsunset, the portal; every `omarchy-*` script in `~/.local/bin` | +| [Waybar](/desktop/waybar) | `~/.config/waybar`: module layout, stylesheet, the `window_pill.py` title module | +| [Fonts and default apps](/desktop/fonts-and-apps) | `~/.config/fontconfig/fonts.conf`, `~/.config/mimeapps.list`, the Victor Mono Nerd Font packages | + +## 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 | `niri`, `xdg-user-dirs` | +| AUR (via `paru`) | `noctalia-shell` | + +The script skips AUR packages with a warning if `paru` is not installed. Hyprland, Waybar, and the `omarchy-*` commands that the scripts call (`omarchy-menu`, `omarchy-launch-or-focus`, and others) come from an Omarchy install. This repo does not install them. See [chezmoi scripts](/chezmoi/scripts) for the full install flow. diff --git a/docs/desktop/meta.ts b/docs/desktop/meta.ts new file mode 100644 index 0000000..34f573b --- /dev/null +++ b/docs/desktop/meta.ts @@ -0,0 +1,7 @@ +import { defineMeta } from "blume"; + +export default defineMeta({ + title: "Desktop", + icon: "monitor", + pages: ["index", "niri", "hyprland", "waybar", "fonts-and-apps"], +}); diff --git a/docs/desktop/niri.mdx b/docs/desktop/niri.mdx new file mode 100644 index 0000000..7cc30b2 --- /dev/null +++ b/docs/desktop/niri.mdx @@ -0,0 +1,458 @@ +--- +title: niri +description: Scrollable-tiling Wayland compositor config — input, layout, window rules, per-display profiles, keybindings, and launcher scripts. +--- + +[niri](https://github.com/YaLTeR/niri) is a scrollable-tiling Wayland compositor. Here it runs with the Noctalia shell (bar, panels, OSD, notifications), vicinae as the launcher, and `niri-dynamic-workspaces` for named workspaces. + +:::note +Linux `desktop` and `laptop` roles only. `.chezmoiignore.tmpl` skips `~/.config/niri/**`, `~/.local/bin/niri-launch`, and `~/.local/bin/cp-appid` on other roles. The `niri-launch-*` wrappers are not in the ignore list and are applied everywhere. +::: + +## Files + +| Source (repo) | Target | +| --- | --- | +| `dot_config/niri/config.kdl` | `~/.config/niri/config.kdl` | +| `dot_config/niri/noctalia.kdl` | `~/.config/niri/noctalia.kdl` | +| `dot_config/niri/exact_config.d/*.kdl` | `~/.config/niri/config.d/*.kdl` | +| `dot_config/niri/scripts/executable_*` | `~/.config/niri/scripts/*` (executable) | +| `dot_local/bin/executable_niri-launch`, `executable_niri-launch-{ai,browser,terminal,webapp}` | `~/.local/bin/niri-launch*` | +| `dot_local/bin/executable_cp-appid` | `~/.local/bin/cp-appid` | + +`exact_config.d` is a chezmoi **exact** directory. On apply, chezmoi deletes any file in `~/.config/niri/config.d/` that the repo does not manage, so stale fragments cannot linger. None of these files are templates. + + + +- ~/.config/niri/ + - config.kdl + - noctalia.kdl + - config.d/ + - 10-input-and-cursor.kdl + - 20-layout-and-overview.kdl + - 30-window-rules.kdl + - 40-environment.kdl + - 50-startup.kdl + - 60-animations.kdl + - 70-binds.kdl + - 80-layer-rules.kdl + - 90-outputs.kdl + - 91-internal-display.kdl + - 92-ultrawide.kdl + - 93-apple-display.kdl + - 94-portable-hdmi.kdl + - 95-portable-usbc.kdl + - scripts/ + - kill-phantom-display.fish + - ndw-route-workspace.sh + - niri-floating-sidebar.sh + - niri-focus.sh + - niri-move.sh + + + +## Installation + +- `niri` and `xdg-user-dirs` from pacman, `noctalia-shell` from the AUR. Declared under `packages.arch.desktop` in `.chezmoidata/packages.yaml` and installed by `run_onchange_before_10-packages.sh.tmpl` for `desktop`/`laptop` roles. See [chezmoi scripts](/chezmoi/scripts). +- `.chezmoiscripts/run_once_after_30-user-services.sh.tmpl` runs once on Linux. If `~/.config/systemd/user/nirinit.service` exists, it runs `systemctl --user daemon-reload` and `systemctl --user enable nirinit.service`. The script's comment says other personal units (brain-lens, omp-loop, rclone, hermes, voxtype) ship as files only and are enabled by hand. The repo does not currently contain `dot_config/systemd`, so the unit must come from elsewhere for the enable step to run. +- Tools the config calls but does not install: `vicinae`, `cliphist`/`wl-paste`, `polkit-gnome`, `kbuildsycoca6`, `voxtype`, `niri-dynamic-workspaces`, `dot-screenshot`, `niri-smart-close`, `niri-smart-move`, and the `capitaine-cursors-light` cursor theme. `niri-smart-close`, `niri-smart-move`, and `dot-screenshot` are called by path or name but are not in this repo. + +## Load order + +`config.kdl` sets two top-level options and then includes the fragments in numeric order: + +```kdl ~/.config/niri/config.kdl +hotkey-overlay { + skip-at-startup +} + +screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" + +include "config.d/10-input-and-cursor.kdl" +// … 20 through 90 … +include "config.d/90-outputs.kdl" +``` + +After the includes, `config.kdl` repeats inline `input`, `layout`, `gestures`, `cursor`, `overview`, `window-rule`, `animations`, and `environment` blocks, a leftover of the iNiR (illogical-impulse) base it started from. It then sets `debug { honor-xdg-activation-with-invalid-serial }`, which lets Noctalia v5 activate windows from notification actions. It includes `./noctalia.kdl` and ends with `prefer-no-csd`. niri merges repeated sections and later values win, so the inline blocks override the fragments where they differ. Those differences are listed in each section below. + +## Input and cursor + +`config.d/10-input-and-cursor.kdl`: + +| Setting | Value | +| --- | --- | +| Keyboard layout | `us` | +| Repeat delay / rate | 400 ms / 50 Hz | +| Touchpad | `natural-scroll`, `tap`, `tap-button-map "left-right-middle"`, `accel-speed 1.0` | +| Tablet and touch | `map-to-output "eDP-1"` (pen and touchscreen stay on the laptop panel) | +| Mod key | `Super`; `Alt` when nested inside another compositor | +| Cursor | `capitaine-cursors-light`, size 24, `hide-when-typing` | + +The inline `input` block in `config.kdl` repeats the same keyboard and touchpad values without `accel-speed` or the tablet/touch mappings, so those two settings from the fragment still apply. + +## Layout and overview + +`config.d/20-layout-and-overview.kdl`: + +| Setting | Value | +| --- | --- | +| `center-focused-column` | `never` | +| `background-color` | `transparent` (the Noctalia wallpaper shows through as backdrop) | +| `default-column-width` | proportion 0.5 | +| `preset-column-widths` | 0.33333, 0.5, 0.66667 | +| Focus ring | width 1.5 | +| Border | `off` (width 1.5 if enabled) | +| Shadow | `off` (softness 30, spread 5, offset y=5 if enabled) | +| Tab indicator | `place-within-column`, `hide-when-single-tab`, position `left` | +| Overview | `zoom 0.4`, workspace shadow off | + +The `gestures { hot-corners { } }` block is empty in the fragment. The inline block in `config.kdl` sets `hot-corners { off }`, so hot corners are disabled. + +### Colors (Noctalia) + +`noctalia.kdl` is included last, so its colors override the fragment's placeholder colors (`#7fc8ff` ring, `#ffc87f` border): + +| Element | Active | Inactive | Urgent | +| --- | --- | --- | --- | +| Focus ring | `#a398b3` | `#1e1c21` | `#fd4663` | +| Border | `#a398b3` | `#1e1c21` | `#fd4663` | +| Tab indicator | `#a398b3` | `#4a4158` | `#fd4663` | +| Recent-windows highlight | `#a398b3` | — | `#fd4663` | + +Shadow color is `#1e1c2170` and the insert hint is `#a398b380`. The palette follows the Noctalia shell's color scheme, not cyberdream. + +## Window rules + +`config.d/30-window-rules.kdl`: + +| Match | Rule | +| --- | --- | +| All windows | `geometry-corner-radius 10`, `clip-to-geometry true`; background blur on, xray off | +| `dev.noctalia.Noctalia` (Noctalia v5 settings) | Floating, 1080 × 920 | +| `Folo`, `Spotify`, `zen`, `brave-origin-nightly`, `gemini-desktop`, `claude-desktop` | Opacity 0.9, tiled, blur, no border background, open focused | +| `kitty`, `zed`, `obsidian`, `Beeper`, `chromium`, `com.mitchellh.ghostty` | Opacity 0.9, tiled, blur, no border background, open focused | +| `org.gnome.Nautilus`, `com.gabm.satty` | Floating, focused, width proportion 0.5 | +| Title `Picture-in-Picture` (app `zen`) or `Picture in picture` | Floating, not focused, opacity 1.0, 24 px from the top-right corner, on `eDP-1` | +| `zed`, `obsidian`, `sticky-notest-canvas`, title `Sticky Notes`, `vacuumtube`, `Fladder`, `kitty`, `kitty-herdr`, `kitty-tmux` | Open on the Apple Studio Display | + +Global blur settings: `passes 4`, `offset 5.0`, `noise 0.02`, `saturation 2.0`. The inline `window-rule` in `config.kdl` sets `geometry-corner-radius 8` after the fragment, so the effective radius is 8. + +## Environment + +`config.d/40-environment.kdl` (repeated verbatim inline in `config.kdl`): + +| Variable | Value | Purpose | +| --- | --- | --- | +| `XDG_CURRENT_DESKTOP` | `niri` | | +| `XDG_MENU_PREFIX` | `plasma-` | Dolphin/KDE file associations | +| `QT_QPA_PLATFORM` | `wayland` | | +| `ELECTRON_OZONE_PLATFORM_HINT` | `auto` | Native Wayland for Electron | +| `QT_LOGGING_RULES` | `quickshell.dbus.properties=false` | Silence quickshell D-Bus logs | +| `QT_QPA_PLATFORMTHEME` | `kde` | Qt colors from `kdeglobals` (needs `plasma-integration`) | +| `QT_STYLE_OVERRIDE` | `Darkly` | Qt widget style | +| `INIR_VENV`, `ILLOGICAL_IMPULSE_VIRTUAL_ENV` | `$HOME/.local/state/quickshell/.venv` | Quickshell Python venv | + +## Startup + +`config.d/50-startup.kdl` spawns at login: + +| Command | Purpose | +| --- | --- | +| `systemctl --user import-environment XDG_MENU_PREFIX && kbuildsycoca6` | Export the menu prefix to systemd, rebuild the KDE service cache | +| `/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1` | Polkit agent | +| `noctalia` | Shell: bar, panels, notifications, OSD, wallpaper | +| `niri-dynamic-workspaces daemon` | Named dynamic workspaces | +| `vicinae server` | Launcher backend | +| `wl-paste --watch cliphist store` | Clipboard history | + +## Animations + +`config.d/60-animations.kdl` makes every animation a critically damped spring (`damping-ratio=1.0`, `epsilon=0.0001`) with high stiffness: workspace-switch 4000, window-open 5000, window-close 6000, horizontal-view-movement 4500, window-movement 5000, window-resize 5500, config-notification-open-close 5000, screenshot-ui-open 5000. + +The inline `animations` block in `config.kdl` comes later and overrides these with softer springs tuned to match quickshell's Material motion: + +| Animation | Damping ratio | Stiffness | +| --- | --- | --- | +| workspace-switch | 0.78 | 1350 | +| window-open | 0.82 | 1125 | +| window-close | 0.88 | 2025 | +| horizontal-view-movement | 0.80 | 1238 | +| window-movement | 0.85 | 1463 | +| window-resize | 0.88 | 1575 | +| config-notification-open-close | 0.90 | 1800 | +| screenshot-ui-open | 0.85 | 1688 | + +## Keybindings + +All bindings from `config.d/70-binds.kdl`. `Mod` is `Super` (`Alt` when niri runs nested). `Super+…` and `Mod+…` are the same modifier. The table groups bindings by the file's comment headers. + +### System and launcher + +| Keys | Action | +| --- | --- | +| `Mod+Tab` | Toggle overview (no repeat) | +| `Mod+Shift+E` | Quit niri | +| `Mod+Escape` | Toggle keyboard-shortcuts inhibit (cannot itself be inhibited) | +| `Mod+Space` | `vicinae toggle` — launcher | +| `Mod+Shift+Space` | vicinae emoji search | +| `Mod+Shift+Return` | vicinae window switcher | +| `Super+Alt+Ctrl+Return` | vicinae window switcher | +| `Mod+BackSpace` | Focus previous window | +| `Mod+P` | vicinae clipboard history | +| `Mod+Ctrl+R` | Toggle the Noctalia `prdlk/ostt:recorder` plugin | +| `Mod+Period` | Noctalia control center panel | +| `Mod+Comma` | Noctalia settings | +| `Mod+Shift+Q` | Noctalia session menu (hotkey-overlay title "Session Menu: noctalia session") | +| `Mod+F24` | `voxtype record toggle --profile hermes` — dictation | + +### Screenshots + +| Keys | Action | +| --- | --- | +| `Mod+S` | `dot-screenshot region` | +| `Mod+Shift+S` | `dot-screenshot window` | +| `Mod+Ctrl+S` | `dot-screenshot monitor-focused` | +| `Mod+Ctrl+Shift+S` | `dot-screenshot monitor-all` | +| `Print` | niri screenshot UI | +| `Ctrl+Print` | Screenshot the screen | +| `Alt+Print` | Screenshot the window | + +### Applications + +| Keys | Action | +| --- | --- | +| `Mod+Shift+G` | Goliath: `kitty --class=kitty-goliath --title=goliath --config ~/.config/kitty/goliath.conf` (mosh + tmux; see [kitty](/terminal/kitty)) | +| `Super+Ctrl+A` | Claude desktop (via vicinae) | +| `Super+Ctrl+G` | Gemini desktop (via vicinae) | +| `Super+Alt+Ctrl+H` | `niri-launch-ai` — cycle Claude/Hermes windows | +| `Super+Alt+Ctrl+J` | `niri-launch-terminal` — cycle terminals | +| `Super+Alt+Ctrl+K` | `niri-launch-browser` — cycle Brave Origin Nightly | +| `Super+Alt+Ctrl+O` | `niri-launch obsidian` | +| `Super+Alt+Ctrl+Y` | `niri-launch-webapp` — cycle web apps | +| `Super+Alt+Ctrl+W` | tldraw offline (via vicinae) | +| `Super+Alt+Ctrl+E` | Fastmail (via vicinae) | +| `Super+Alt+Ctrl+B` | Beeper (via vicinae) | +| `Super+Alt+Ctrl+M` | Beeper (via vicinae) | +| `Super+Alt+Ctrl+G` | Ghostty (via vicinae) | +| `Super+Alt+Ctrl+L` | Linear web app (via vicinae) | +| `Super+Alt+Ctrl+T` | Todoist (via vicinae) | +| `Super+Alt+Ctrl+N` | Open the Noctalia `noctalia/notes` panel | +| `Super+Alt+Ctrl+F` | Nautilus (via vicinae) | +| `Super+Alt+Ctrl+Space` | Sticky Notes Canvas (via vicinae) | + +### Dynamic workspaces + +| Keys | Action | +| --- | --- | +| `Super+Shift+Alt+Ctrl+W` | `niri-dynamic-workspaces switch w` | +| `Super+Shift+Alt+Ctrl+H` | `niri-dynamic-workspaces switch h` | +| `Super+Alt+Ctrl+X` | `niri-dynamic-workspaces switch x` | + +### Focus and movement + +| Keys | Action | +| --- | --- | +| `Mod+H` | Focus column left (wraps to last) | +| `Mod+L` | Focus column right (wraps to first) | +| `Mod+J` | Focus window below, or workspace below | +| `Mod+K` | Focus window above, or workspace above | +| `Mod+Shift+H` | `niri-smart-move left` | +| `Mod+Shift+L` | `niri-smart-move right` | +| `Mod+Shift+J` | Move column to workspace below | +| `Mod+Shift+K` | Move column to workspace above | +| `Super+Ctrl+H` | Focus first column | +| `Super+Ctrl+L` | Focus last column | +| `Super+Ctrl+Shift+H` | Move column to first | +| `Super+Ctrl+Shift+L` | Move column to last | +| `Mod+Q` | `niri-smart-close` (no repeat) | + +### Monitors + +| Keys | Action | +| --- | --- | +| `Mod+Left` | Focus monitor left | +| `Mod+Up` | Focus monitor up | +| `Mod+Right` | Focus monitor right | +| `Mod+Shift+Down` | Move column to monitor right | +| `Mod+Shift+Up` | Move column to monitor left | +| `Super+O` | Focus next monitor | +| `Super+Ctrl+J` | Focus next monitor | +| `Super+Ctrl+K` | Focus previous monitor | +| `Super+Shift+O` | Move column to next monitor | +| `Mod+Ctrl+Shift+J` | Move column to next monitor | +| `Mod+Ctrl+Shift+K` | Move column to previous monitor | + +### Layout and sizing + +| Keys | Action | +| --- | --- | +| `Mod+R` | Cycle preset column widths | +| `Mod+Shift+R` | Cycle preset window heights | +| `Mod+F` | Expand column to available width | +| `Mod+Shift+F` | Maximize column | +| `Mod+Ctrl+F` | Fullscreen window | +| `Super+C` | Center column | +| `Mod+Ctrl+C` | Center visible columns | +| `Mod+Ctrl+O` | Toggle window floating | +| `Mod+W` | Toggle tabbed column display | +| `Alt+Shift+H` | Column width −10% | +| `Alt+Shift+L` | Column width +10% | +| `Alt+Shift+J` | Window height −10% | +| `Alt+Shift+K` | Window height +10% | + +### Hardware keys + +All of these work while the screen is locked (`allow-when-locked=true`) and go through Noctalia IPC, so the Noctalia OSD shows feedback. The commented `v4:` lines in the file are the old `qs -c noctalia-shell ipc call …` forms. + +| Keys | Action | +| --- | --- | +| `XF86AudioRaiseVolume` | `noctalia msg volume-up` | +| `XF86AudioLowerVolume` | `noctalia msg volume-down` | +| `XF86AudioMute` | `noctalia msg volume-mute` | +| `XF86AudioMicMute` | `noctalia msg mic-mute` | +| `XF86AudioNext` | `noctalia msg media next` | +| `XF86AudioPrev` | `noctalia msg media previous` | +| `XF86AudioPlay` / `XF86AudioPause` | `noctalia msg media toggle` | +| `XF86MonBrightnessUp` | `noctalia msg brightness-up` | +| `XF86MonBrightnessDown` | `noctalia msg brightness-down` | + +## Layer rules + +`config.d/80-layer-rules.kdl`: + +- Noctalia surfaces matching `^noctalia-(bar-…|notification|dock|panel|attached-panel|osd)$` get `background-effect { xray false }`, so their blur samples what is actually behind them. Noctalia publishes blur regions itself when `ext-background-effects` is available. +- `^noctalia-wallpaper` is placed within the backdrop (`place-within-backdrop true`). The wallpaper stays still while workspaces move and shows in the overview. +- `layout { background-color "transparent" }` and overview `workspace-shadow { off }` are restated here so the backdrop is always visible. + +## Outputs and display profiles + +`config.d/90-outputs.kdl` turns `DP-5` off and includes the per-display profiles. An older Apple Display block and a `DP-4 off` block remain as comments. + +```kdl ~/.config/niri/config.d/90-outputs.kdl +include "91-internal-display.kdl" +// include "92-ultrawide.kdl" +include "93-apple-display.kdl" +include "94-portable-hdmi.kdl" +// include "95-portable-usbc.kdl" +``` + +The Apple Studio Display also exposes a phantom connector (DP-4/5/6, varies per boot) whose only mode is 640×480. A commented `spawn-at-startup` for `scripts/kill-phantom-display.fish` handles it by mode signature, since connector name and EDID both shift. + + + + `Tianma Microelectronics Ltd. TL134ADXP03 Unknown`, the laptop panel. **Active.** + + | Setting | Value | + | --- | --- | + | Position / scale | `0,0` / 1.5 | + | VRR | `on-demand=true` | + | Gaps | 8 | + | Default column width | 1.0 | + | Preset widths | 0.5, 1.0 | + | Centering | `always-center-single-column`, `center-focused-column "never"` | + + Named workspaces `1`, `2`, `3` open on this panel. Three window rules open these apps maximized and focused on workspace `1`, without border backgrounds (all three target `"1"` as written): + + - `chrome-youtube.com__-Default`, `chromium` + - `org.gnome.Calendar`, `discord`, `slack`, `com-fastmail-fastmail`, `gemini-desktop`, `Beeper`, `com.anthropic.Claude`, `Hermes`, `todoist` + - `WebApp-CloudflarePersonal7594`, `WebApp-CloudflareWalletbase8881` + + + `Samsung Electric Company S34CG50 HNTY501103`. **Included in the repo but commented out.** + + | Setting | Value | + | --- | --- | + | Mode | `3440x1440@100.00` | + | Position / scale | `0,0` / 1 | + | VRR | `on-demand=true` | + | Gaps | 16 | + | Default column width | 0.3333 | + | Preset widths | 0.3333, 0.5, 0.6667 | + | Centering | `always-center-single-column`, `center-focused-column "never"` | + + + `Apple Computer Inc StudioDisplay 0x984262A7`. **Active.** + + | Setting | Value | + | --- | --- | + | Scale | 1.75 | + | Gaps | 8 | + | Default column width | 0.5 | + | Preset widths | 0.25, 0.3333, 0.5, 0.6667 | + | Centering | `always-center-single-column`, `center-focused-column "never"` | + + + `PNP(AOP) 16PM1QB 14490001D3X00`. **Active.** + + | Setting | Value | + | --- | --- | + | Transform | `90` (portrait) | + | Gaps | 2 | + | Default column width | 1.0 | + | Preset widths | 0.5, 1.0 | + | Centering | `always-center-single-column`, `center-focused-column "never"` | + + + `ASUSTek COMPUTER INC ASUS MB16AC M8LMTF195749`. **Included in the repo but commented out.** + + | Setting | Value | + | --- | --- | + | Position | `0,0` | + | Gaps | 2 | + | Default column width | 1.0 | + | Preset widths | 0.5, 1.0 | + | Centering | `always-center-single-column`, `center-focused-column "never"` | + + + +To switch a profile, uncomment or comment its `include` line in `90-outputs.kdl`. niri reloads config on save. + +## Scripts + +Deployed to `~/.config/niri/scripts/`. `70-binds.kdl` binds none of them, so they run by hand or from other tools. + +| Script | Usage | Behavior | +| --- | --- | --- | +| `kill-phantom-display.fish` | no args | Polls `niri msg -j outputs` up to 10 times, 1 s apart. Any output whose only mode is 640×480 gets `niri msg output off`. Does not handle mid-session hotplug. | +| `ndw-route-workspace.sh` | `$NDW_WORKSPACE_KEY` or `$1` | niri-dynamic-workspaces `on_create` hook. Keys `y g m x z p l a` move the workspace to `HDMI-A-1`. Keys `b f s w c d o` move it to the Apple Studio Display (resolved by make/model through `niri msg --json outputs`), or to `HDMI-A-1` if that display is absent. Other keys exit silently. | +| `niri-floating-sidebar.sh` | `toggle` \| `hide` \| `flip` \| `reorder` \| `help` | Per-workspace floating sidebar on the right edge. Windows are 550 px wide and stack into 4 slots (more as needed) with 15 px gaps and 30/50/20 px top/bottom/side margins. `toggle` floats the focused window into the sidebar or restores it to tiling at its original size. `hide` slides the sidebar off-screen, leaving a 70 px sliver. `flip` switches bottom-up and top-down stacking. State is kept in `/tmp/niri.toggle..*`. | +| `niri-focus.sh` | `up` \| `down` | Cascading focus: next window in the column, then the next *occupied* workspace (skipping the trailing empty one), then the adjacent monitor. Wraps to the far-end monitor at the edge. | +| `niri-move.sh` | `up` \| `down` | Cascading move: reorder within the column, then move to the next workspace (including the empty trailing one), then the adjacent monitor. Wraps at the edge. | + +## Launchers + +### niri-launch + +`~/.local/bin/niri-launch ` focuses an app's window, cycles through its windows on repeated presses (sorted by window id), or launches it when none is open. + +| Argument | Windows matched (app-id) | Launched when none | +| --- | --- | --- | +| `webapp` | `^(webapp-\|chrome-)` (Firefox and Chromium/Brave site-specific apps) | Re-runs as `webapp-youtube` | +| `webapp-NAME` | `WebApp-Name` (case-insensitive) | `gtk-launch` on `~/.local/share/applications/WebApp-Name*.desktop` | +| `kitty` | any app-id starting with `kitty` | `kitty` | +| `kitty-CLASS` | exactly that class | `kitty --class kitty-CLASS` (optional command from the empty `KITTY_CMDS` map) | +| `ghostty` | `ghostty` | nothing, prints a message | +| `browser` | `^(zen\|brave\|chromium\|firefox)` | `zen` | +| `terminal` | `kitty\|alacritty\|ghostty` | `kitty` | +| `ai` | `claude\|hermes` | `hermes desktop` | +| anything else | exact app-id | the argument as a command | + +### Wrappers + +Each wrapper resolves its own symlink and execs `niri-launch` from the same directory: + +| Script | Runs | Bound to | +| --- | --- | --- | +| `niri-launch-ai` | `niri-launch ai` | `Super+Alt+Ctrl+H` | +| `niri-launch-terminal` | `niri-launch terminal` | `Super+Alt+Ctrl+J` | +| `niri-launch-browser` | `niri-launch brave-origin-nightly` (exact app-id, not the `browser` mode) | `Super+Alt+Ctrl+K` | +| `niri-launch-webapp` | `niri-launch webapp` | `Super+Alt+Ctrl+Y` | + +### cp-appid + +`cp-appid` lists every `.desktop` file (via `fd`) in `/usr/share/applications`, `/usr/local/share/applications`, `~/.local/share/applications`, the system and user Flatpak export dirs, and `/var/lib/snapd/desktop/applications`. It shows each entry's `Name=` and ID in `fzf`, then copies the chosen ID to the clipboard with `wl-copy`. Use it to find app-ids for window rules and `niri-launch`. + +## Related + +- [Hyprland](/desktop/hyprland): the Omarchy setup with the same key layout. +- [kitty](/terminal/kitty): `kitty-goliath`, `kitty-herdr`, and `kitty-tmux` classes referenced by the rules. 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 `$HOME/.local/bin`) | +| `-t ` | chezmoi release tag (default `latest`) | +| `-d` | Debug logging | +| `BINDIR` | Same as `-b` | +| `DOTFILES_REPO` | Repo for the default `init --apply` (default `prdlk/dotfiles`) | + +## First apply + + + + `.chezmoi.toml.tmpl` asks once for **name**, **email**, and **role** (`desktop`, `laptop`, `mac`, `server`). Answers are stored in `~/.config/chezmoi/chezmoi.toml` and not asked again. See [Configuration](/chezmoi/config). + + + `run_onchange_before_10-packages` installs everything in `.chezmoidata/packages.yaml` with pacman/paru or Homebrew before any file is written. See [Scripts](/chezmoi/scripts). + + + Configs are linked into `$HOME` (symlink mode). The neovim config and a bat syntax are cloned as externals. See [Externals and ignore rules](/chezmoi/externals-and-ignore). + + + gh extensions, tpm, the bat cache, the font cache, yazi plugins, and the niri user service on Linux. + + + +:::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#20-gh-extensions) for how to re-run it. +::: + +## Updating + +```sh +chezmoi update # git pull + apply +chezmoi diff # what apply would change +``` + +## Refreshing the install script + +`public/install` is a vendored copy. To pick up upstream changes, download `https://get.chezmoi.io/lb` again and re-apply the three changes listed in the header comment of `public/install`. + +## Publishing this site + +The site is a [Blume](https://github.com/haydenbleasel/blume) project (`docs/`, `public/`, `blume.config.ts`). `.github/workflows/docs.yml` builds it with `bun run build` and deploys `dist/` to GitHub Pages on every push to `master` that touches the site. Pages uses **GitHub Actions** as its source, and `dots.prd.lk` is the custom domain set in the repository's Pages settings. That domain needs a DNS `CNAME` record pointing to `prdlk.github.io`. None of these files are applied to `$HOME`; `.chezmoiignore.tmpl` excludes them. diff --git a/docs/meta.ts b/docs/meta.ts new file mode 100644 index 0000000..221ed4c --- /dev/null +++ b/docs/meta.ts @@ -0,0 +1,14 @@ +import { defineMeta } from "blume"; + +export default defineMeta({ + pages: [ + "index", + "installation", + "chezmoi", + "shell", + "terminal", + "tools", + "desktop", + "ai", + ], +}); diff --git a/docs/shell/aliases.mdx b/docs/shell/aliases.mdx new file mode 100644 index 0000000..77ef2a9 --- /dev/null +++ b/docs/shell/aliases.mdx @@ -0,0 +1,121 @@ +--- +title: Aliases +description: 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)), and `dot_config/shell/aliases.sh.tmpl` ranges over it to produce `~/.config/shell/aliases.sh`, which `~/.bashrc` and `~/.zshrc` source: + +```yaml .chezmoidata/aliases.yaml +aliases: + - section: "Editors / file managers" + items: + - { name: "e", cmd: "nvim" } + # … +``` + +```text ~/.config/shell/aliases.sh +# 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` | `yazi ~/.local/share/chezmoi/dot_config/kitty` | +| `e.n` | `yazi ~/.config/niri` | `yazi ~/.local/share/chezmoi/dot_config/niri` | +| `e.v` | `yazi ~/.config/nvim/lua` | ✓ | +| `e.y` | `yazi ~/.config/yazi` | `yazi ~/.local/share/chezmoi/dot_config/yazi` | +| `e.t` | `nvim ~/.config/tmux/tmux.conf` | `nvim ~/.local/share/chezmoi/dot_config/tmux/tmux.conf` | +| `hx` | `helix` | ✓ (listed under Tools in fish) | + +The fish editor aliases open the chezmoi source tree directly. In symlink mode, `~/.config/` files are symlinks into that tree, so both versions edit the same files. + +### 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` | ✓ | +| `sua` | `shelly upgrade-all -n` | ✓ | +| `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, else `pbcopy` | +| `pst` | alias | `wl-paste` if available, else `pbpaste` | +| `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](/shell/fish#functions), [bash and zsh](/shell/bash-zsh#per-shell-functions)). +- `pnpmf`, `pnpmfd`, `pnpmfr`, `pnpmfw`, `pnpmfx`: fish workspace helpers ([fish](/shell/fish#pnpm-filterfish)). +- `ai`, `pj`, `gop`, `fab`, `gdc`, and the other `~/.local/bin` tools: [Scripts](/shell/scripts). diff --git a/docs/shell/atuin.mdx b/docs/shell/atuin.mdx new file mode 100644 index 0000000..010f4d8 --- /dev/null +++ b/docs/shell/atuin.mdx @@ -0,0 +1,144 @@ +--- +title: atuin +description: Shell history search with a daemon, directory-scoped up-arrow, tmux popups, a cyberdream 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/cyberdream.toml` | `~/.config/atuin/themes/cyberdream.toml` | symlink | +| `dot_config/atuin/atuin-receipt.json` | `~/.config/atuin/atuin-receipt.json` | symlink | + +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](/shell/fish#functions)). None of the files are templates, and they apply on every role. + +## Installation + +`atuin` is listed in `.chezmoidata/packages.yaml` for pacman and Homebrew. The shells also expect atuin's standalone installer layout in `~/.atuin/bin`: + +- fish: `conf.d/atuin.env.fish` sources `~/.atuin/bin/env.fish`. +- bash and zsh: `. "$HOME/.atuin/bin/env"` just before `atuin init`. + +Neither line checks that the file exists, so a machine without `~/.atuin/bin` prints a sourcing error at shell start. + +### atuin-receipt.json + +The receipt that atuin's [cargo-dist](https://opensource.axo.dev/cargo-dist/) installer writes. It records how atuin was installed, which the self-updater (`atuin update`) needs: + +| Field | Value | +| --- | --- | +| `binaries` | `["atuin"]` | +| `install_prefix` | `~/.atuin/bin` (stored as an absolute path under `/home/prad`) | +| `install_layout` | `flat` | +| `modify_path` | `true` | +| `provider` | cargo-dist `0.31.0` | +| `source` | GitHub release `atuinsh/atuin` | +| `version` | `18.19.0` | + +## Shell integration + +| Shell | Where | What | +| --- | --- | --- | +| fish | `config.fish`, interactive only | `atuin init fish \| source`, `atuin ai init fish \| source`, and the `?` binding | +| 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`](/shell/scripts#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` and the following to `config.fish`: + +1. `atuin ai init fish | source`, in the interactive block next to `atuin init fish`. +2. A copy of the `_atuin_ai_question_mark` function that `atuin ai init fish` prints, and `bind "?" _atuin_ai_question_mark`. + +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 do not load `atuin ai init`. + +## 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` | `"cyberdream"` | Loads `themes/cyberdream.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/cyberdream.toml` defines a theme named `cyberdream`, using the palette shared with [fish](/shell/fish#theme) and [Starship](/shell/starship#palette): + +| Key | Color | +| --- | --- | +| `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/docs/shell/bash-zsh.mdx b/docs/shell/bash-zsh.mdx new file mode 100644 index 0000000..0491406 --- /dev/null +++ b/docs/shell/bash-zsh.mdx @@ -0,0 +1,124 @@ +--- +title: bash and zsh +description: 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, and ports of the fish helpers that have to change the shell's own directory. zsh also gets ports of the fish key bindings. + +| Source (repo) | Target | +| --- | --- | +| `dot_bashrc` | `~/.bashrc` | +| `dot_zshrc` | `~/.zshrc` | +| `dot_config/zsh/keybinds.zsh` | `~/.config/zsh/keybinds.zsh` | +| `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)). 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, for both pacman and Homebrew. `suvadu` (the `suv` history tool) is declared under `packages.shared.cargo`, but none of the apply scripts install cargo packages, so install it manually if you want it. + +## ~/.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. +2. **Go.** `GOPATH=~/.local/share/go`, `GOBIN=$GOPATH/bin`, and `GOBIN` prepended to `PATH`. mise provides `GOROOT`. +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. +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. **atuin.** Sources `~/.atuin/bin/env`, then `eval "$(atuin init bash)"`. + +bash has no custom key bindings. atuin's init binds 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, and Android blocks as `.bashrc`. +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. `eval "$(starship init zsh)"` if starship is installed. +10. **Syntax highlighting.** Sources the first `zsh-syntax-highlighting.zsh` found in `/usr/share/zsh/plugins/zsh-syntax-highlighting/`, `/opt/homebrew/share/zsh-syntax-highlighting/`, or `/usr/local/share/zsh-syntax-highlighting/`. The comment says this must stay last, because it wraps every zle widget defined before it. +11. **atuin.** Sources `~/.atuin/bin/env` and runs `eval "$(atuin init zsh)"`. These lines come after the syntax-highlighting block, so despite the comment, syntax highlighting is not actually last. + +## 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`, `gho`, `pj`, `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. + +| Key | Action | +| --- | --- | +| ctrl-e | `yy` (yazi, cd to its exit dir) | +| ctrl-f | `yy` | +| ctrl-b | `purple` (an external command; this repo does not provide it) | +| ctrl-y | `clip-last` | +| ctrl-o | `gho` (repo or vault picker, cd) | +| ctrl-p | `pj` (task runner) | +| ctrl-a | `omp` | +| 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), down (`pj`), and ? have no zsh equivalent. ctrl-h/j/k/l belong to kitty ([kitty](/terminal/kitty)) and are not bound here. + +## 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: + +```sh ~/.config/shell/aliases.sh +# Clipboard +if command -v wl-copy >/dev/null 2>&1; then + alias cpy='wl-copy' + alias pst='wl-paste' +elif command -v pbcopy >/dev/null 2>&1; then + alias cpy='pbcopy' + alias pst='pbpaste' +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, else macOS `pbcopy`/`pbpaste`. +- **`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](/shell/aliases) 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` | `command gho`, cd into the printed path, `clear`, and `onefetch` if it is a git repo | +| `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](/shell/scripts#why-some-helpers-are-shell-functions) page explains why these helpers are shell functions and not scripts. diff --git a/docs/shell/fish.mdx b/docs/shell/fish.mdx new file mode 100644 index 0000000..3f45995 --- /dev/null +++ b/docs/shell/fish.mdx @@ -0,0 +1,300 @@ +--- +title: fish +description: 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/auto-Niri.fish` | `~/.config/fish/auto-Niri.fish` (Linux `desktop`/`laptop` only) | + +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 repo directly. `~/.config/fish/fish_variables` (universal variables, including the selected theme) is listed in `.chezmoiignore.tmpl` and stays local to each machine. + +## Installation + +`fish` is in `.chezmoidata/packages.yaml` under `packages.arch.pacman` and `packages.darwin.brew`. `.chezmoiscripts/run_onchange_before_10-packages.sh.tmpl` installs it with pacman on Arch and Homebrew on macOS. The tools that fish initializes (starship, zoxide, atuin, fzf, eza, gum, yazi) come from the same manifest. mise, television, hishtory, envman, and the Bun, Go, Android, and Foundry toolchains are not in the manifest; fish initializes each one only if it is present. + +### Plugins + +`fish_plugins` is a [fisher](https://github.com/jorgebucaran/fisher) manifest with one entry: + +```text ~/.config/fish/fish_plugins +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` | +| `atuin.env.fish` | Sources `~/.atuin/bin/env.fish` (puts atuin's install dir on `PATH`) | +| `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` | +| `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` | +| `EDITOR`, `VISUAL` | `nvim` | +| `BROWSER` | `/usr/bin/brave-origin-nightly` 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`. + +```fish ~/.config/fish/conf.d/10-env.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` if `wl-copy` exists, else `pbcopy`/`pbpaste`. +- `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](/shell/aliases) 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](/shell/starship). +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` and `atuin ai init fish | source`. See [atuin](/shell/atuin). +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)). +8. A copy of the `_atuin_ai_question_mark` function that `atuin ai init fish` emits, 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 | `yy`: yazi, then cd to the directory yazi exited in | +| ctrl-f | `yy` (same as ctrl-e) | +| 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`: pick a ghq repo or Obsidian vault and cd into it | +| ctrl-p | `pj`: fzf task runner ([Scripts](/shell/scripts#pj)) | +| ctrl-a | `omp` (the coding agent, see [AI agents](/ai)) | +| ctrl-w | `atuin ai inline`: natural-language command overlay | +| ctrl-g | `lazygit` | +| down | `_pj_bind_down`: runs `pj` 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_QUIET=1 pj`, so pressing down outside a project does nothing and prints no error. + +:::note +Under kitty, ctrl-g (lazygit overlay), ctrl-a (omp split), 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). +::: + +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) | +| `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](/shell/scripts) 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` | +| `_pj_bind_down` | Down-arrow handler: `pj` on an empty idle prompt, else `down-or-search` | +| `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, see [niri](/desktop/niri)) | +| `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` | Runs `~/.local/bin/gho` (repo/vault picker), 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-e/ctrl-f binds | + +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. +::: + +## auto-Niri.fish + +```fish ~/.config/fish/auto-Niri.fish +# Auto start Niri on tty1 +if test -z "$DISPLAY" ;and test "$XDG_VTNR" -eq 1 + mkdir -p ~/.cache + exec niri-session > ~/.cache/niri.log 2>&1 +end +``` + +This file is applied only on Linux with role `desktop` or `laptop`. It is not in `conf.d/`, so fish does not load it automatically, and nothing in the repo sources it. To start niri on login to tty1, source it from a login-shell snippet. See [niri](/desktop/niri). diff --git a/docs/shell/index.mdx b/docs/shell/index.mdx new file mode 100644 index 0000000..1937c3a --- /dev/null +++ b/docs/shell/index.mdx @@ -0,0 +1,40 @@ +--- +title: Shell +description: fish, bash, and zsh with shared aliases, the starship prompt, atuin history, and the ~/.local/bin scripts. +sidebar: + label: Overview +--- + +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](/shell/fish) | `~/.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](/shell/bash-zsh) | `~/.bashrc`, `~/.zshrc`, zsh key bindings, `~/.config/shell/aliases.sh`, per-shell function ports | +| [Aliases](/shell/aliases) | Every alias from `.chezmoidata/aliases.yaml` plus the fish-only and shell-specific ones | +| [Scripts](/shell/scripts) | Every general-purpose executable in `~/.local/bin` (`pj`, `gho`, `ghn`, `gop`, `atuin-pick`, …) | +| [Starship](/shell/starship) | `~/.config/starship.toml`: format, modules, symbols, cyberdream palette | +| [atuin](/shell/atuin) | `~/.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 | +| 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`, `mac`, `server`) except `~/.config/fish/auto-Niri.fish`. That file is applied only on Linux `desktop`/`laptop` machines, along with the rest of the [desktop layer](/desktop). + +## Packages + +`.chezmoidata/packages.yaml` supplies the shell tooling on Arch (pacman) and macOS (Homebrew): `fish`, `starship`, `atuin`, `zoxide`, `fzf`, `fd`, `ripgrep`, `eza`, `bat`, `jq`, `gum`, `glow`, `yazi`, `lazygit`, and `zsh-syntax-highlighting`. The packages script runs `pacman -S --needed` on Arch and `brew install` on macOS. See [chezmoi scripts](/chezmoi/scripts). diff --git a/docs/shell/meta.ts b/docs/shell/meta.ts new file mode 100644 index 0000000..af6c4b1 --- /dev/null +++ b/docs/shell/meta.ts @@ -0,0 +1,7 @@ +import { defineMeta } from "blume"; + +export default defineMeta({ + title: "Shell", + icon: "terminal", + pages: ["index", "fish", "bash-zsh", "aliases", "scripts", "starship", "atuin"], +}); diff --git a/docs/shell/scripts.mdx b/docs/shell/scripts.mdx new file mode 100644 index 0000000..6d9afb7 --- /dev/null +++ b/docs/shell/scripts.mdx @@ -0,0 +1,294 @@ +--- +title: Scripts +description: 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: + +- `niri-launch`, `niri-launch-ai`, `niri-launch-browser`, `niri-launch-terminal`, `niri-launch-webapp`, `cp-appid`: [niri](/desktop/niri) +- `omarchy-*`: [Hyprland](/desktop/hyprland) + +## 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 the script picked or cloned | +| `clip-last` | Reads the shell's own history (`$history[1]` in fish, `fc` in bash/zsh) | + +For `ghg`, `ghn`, and `gho`, 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`. + +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](/shell/fish#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 | +| [`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 | +| [`gho`](#gho) | sh | Pick a ghq repo or Obsidian vault, 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 | +| [`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 | +| [`mdcp`](#mdcp) | sh | Fetch a URL as Markdown, copy it, preview it | +| [`mdp`](#mdp) | sh | fzf Markdown picker with mdfried preview | +| [`pj`](#pj) | bash | fzf task runner across every project task 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 resolves `atuin` from `PATH` or `~/.atuin/bin/atuin`, 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) and [atuin](/shell/atuin). + +**Needs:** `python3`, `atuin`, `fish`. + +## 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: + + + Checks that `gh`, `gum`, and `jq` exist and that `gh auth status` succeeds. + Lists your GitHub orgs whose login contains `sonr`, excluding the target `sonr-io`. You pick which to migrate with `gum choose --no-limit`. + 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. + Waits 30 seconds (`gum spin`), because GitHub transfers are asynchronous. + 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](/shell/fish#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`. + +**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` in fish), optional `zoxide`. + +## 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`. + +## gho + +```sh +gho +``` + +An fzf picker with two lists. tab switches between them: + +- `repo:`: `ghq list` plus the chezmoi source tree, listed as `github.com/prdlk/dotfiles` and mapped back to `~/.local/share/chezmoi`. `--tiebreak=end` favors matches at the end of the name. +- `vault:`: the Obsidian vaults `~/Documents/Obsidian/Personal`, `Walletbase`, and `Research`. + +It prints the chosen directory. fzf's bind snippets run under `SHELL=/bin/sh`, so they behave the same whatever the login shell. The `gho` shell function cds into the result, clears the screen, and runs `onefetch` in git repos. + +**Launched by:** ctrl-o in fish and zsh. + +**Needs:** `ghq`, `fzf`, `onefetch` (for the wrapper). + +## 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`. + +## 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)), `omp` ([AI agents](/ai)), `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. + +## mdcp + +```sh +mdcp +``` + +Fetches the URL as Markdown with `curl.md`, copies it with `wl-copy` or `pbcopy`, then pastes it back into `mdfried` for a rendered preview. + +**Needs:** `curl.md`, `mdfried`, and `wl-clipboard` or `pbcopy`. + +## 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`. + +## pj + +```sh +pj [extra args…] +``` + +A task runner that searches every task source in the project and lets you pick one with fzf. + +**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 ` 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..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.** 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. The header shows the nearest project root. The preview (top, 6 lines) shows the task body: the npm script string, the Make recipe, `just --show`, `mise tasks info`, the devbox script, or the pyproject entry. + +**Run.** cds into the task's directory and `exec`s the runner. Extra arguments are forwarded, 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. The fish down binding uses it. + +**Launched by:** ctrl-p in fish and zsh, and down on an empty fish prompt. + +**Needs:** `bash`, `fzf`, `jq`, `python3` 3.11+ (for `tomllib`), plus whichever runners the project uses. + +## yazi-nvim-open + +```sh +yazi-nvim-open [vsplit|split|tabedit] … +``` + +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=` to log each call. + +**Used by:** `yazi.toml` (the `edit` opener) and `keymap.toml` (ctrl-v vsplit, ctrl-x split). See [yazi](/tools/yazi). + +**Needs:** `nvim`, `realpath`. diff --git a/docs/shell/starship.mdx b/docs/shell/starship.mdx new file mode 100644 index 0000000..dd7f244 --- /dev/null +++ b/docs/shell/starship.mdx @@ -0,0 +1,88 @@ +--- +title: Starship +description: 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 Homebrew 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` | + +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](/shell/fish#configfish). + +## Layout + +```toml ~/.config/starship.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](/shell/fish#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/ghostty.mdx b/docs/terminal/ghostty.mdx new file mode 100644 index 0000000..dd46ba4 --- /dev/null +++ b/docs/terminal/ghostty.mdx @@ -0,0 +1,67 @@ +--- +title: Ghostty +description: Ghostty configuration and its herdr key sync. +--- + +GPU terminal emulator kept alongside kitty. Its bindings send the same herdr prefix bytes as the kitty herdr host. + +| | | +| --- | --- | +| Source | `dot_config/ghostty/config`, `dot_config/ghostty/config.ghostty`, `dot_config/ghostty/themes/` | +| Target | `~/.config/ghostty/` | +| Install | Not listed in `.chezmoidata/packages.yaml`; install separately | + +Ghostty reads both `config` and `config.ghostty`. `config` holds all settings; `config.ghostty` contains a single line, `theme = noctalia`, which selects the active theme. + +## Options + +| Option | Value | +| --- | --- | +| `font-family` / `font-size` | `Victor Mono NF` / `12.5` | +| `background-opacity` / `background-blur` | `0.9` / `true` | +| `window-decoration` | `false`; `gtk-titlebar = false` | +| `window-padding-x/y` | `12` | +| `cursor-style` | `underline`, blinking | +| `scrollback-limit` | `3023` | +| `mouse-hide-while-typing` | `true` | +| `copy-on-select` | `false` | +| `confirm-close-surface` | `false` | +| `app-notifications` | `no-clipboard-copy,no-config-reload` | +| `quit-after-last-window-closed` | `false`, delay `5m` | +| `shell-integration` | `detect`, features `cursor,sudo,title,no-cursor` | +| `gtk-single-instance` | `true` | + +## Keybindings + +| Key | Action | +| --- | --- | +| `cmd+c` / `cmd+v` | Copy / paste | +| `cmd+n` | New window | +| `ctrl+plus` / `ctrl+minus` / `ctrl+zero` | Font size +1 / -1 / reset | +| `shift+enter` | Sends a literal newline | +| `ctrl+shift+alt+,` | Reload config | + +### herdr sync + +Placed last so they override defaults. Each sends `ctrl+b` (`\x02`) followed by a key; see [herdr](/terminal/herdr). + +| Key | Sends | +| --- | --- | +| `ctrl+shift+n` | `prefix %` (split vertical) | +| `ctrl+shift+t` | `prefix c` | +| `ctrl+tab` / `ctrl+shift+tab` | `prefix n` / `prefix p` | +| `ctrl+shift+f` | `prefix s` (workspace picker) | +| `ctrl+shift+l` / `ctrl+shift+h` | `prefix .` / `prefix ,` (next / previous agent) | +| `ctrl+shift+j` / `ctrl+shift+k` | `prefix j` / `prefix k` (next / previous workspace) | +| `super+enter` | `prefix N` | +| `super+r` | `prefix W` | +| `ctrl+shift+r` | `prefix T` | +| `ctrl+shift+,` | `prefix S` (herdr settings) | + +## Themes + +| Theme | Notes | +| --- | --- | +| `noctalia` | Active. Palette matching the Noctalia shell. | +| `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.mdx b/docs/terminal/herdr.mdx new file mode 100644 index 0000000..0c42e77 --- /dev/null +++ b/docs/terminal/herdr.mdx @@ -0,0 +1,94 @@ +--- +title: herdr +description: 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 | `dot_config/herdr/config.toml`, `dot_config/herdr/plugins.json`, `dot_config/herdr/plugins/config/`, `dot_config/herdr/empty_dot_plugins.lock`, `dot_config/herdr/kitty.conf`, `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](/terminal/kitty)); Ghostty keys send the same prefix bytes | + +## 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 created empty. `plugins/config/official.browser/` and `plugins/config/vim-herdr-navigation/` hold placeholder `.keep` files for per-plugin config. + +| 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) sources `herdr-automatic-rename`'s `shell/hook.fish` if present. + +## herdr-nvim + +```toml ~/.config/herdr-nvim/config.toml +[sidebar] +position = "left" +``` + +The nvim sidebar opens to the left of existing panes (default is right). + +## Claude Code integration + +`dot_claude/hooks/executable_herdr-agent-state.sh` is installed and managed by herdr (integration id `claude`, version 7) and registered in `dot_claude/settings.json` with the `session` argument. It runs only inside herdr (`HERDR_ENV=1`, `HERDR_SOCKET_PATH`, `HERDR_PANE_ID` set), ignores subagent events, and sends a `pane.report_agent_session` JSON request over herdr's Unix socket with the pane id, Claude session id and transcript path. See [Claude Code](/ai/claude-code). + +## 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/index.mdx b/docs/terminal/index.mdx new file mode 100644 index 0000000..ee5d52f --- /dev/null +++ b/docs/terminal/index.mdx @@ -0,0 +1,22 @@ +--- +title: Terminal +description: Terminal emulators and multiplexers configured by the dotfiles. +sidebar: + label: Overview +--- + +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 kept as a secondary terminal whose bindings drive herdr the same way. + +| Page | Source | What it covers | +| --- | --- | --- | +| [kitty](/terminal/kitty) | `dot_config/kitty/` | Main config, host configs (tmux, herdr, goliath), kittens, custom tab bar | +| [Ghostty](/terminal/ghostty) | `dot_config/ghostty/` | Config, herdr key sync, themes | +| [tmux](/terminal/tmux) | `dot_config/tmux/` | Prefix, bindings, tpm plugins, dotbar status line, Niri titles | +| [herdr](/terminal/herdr) | `dot_config/herdr/`, `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/kitty.mdx b/docs/terminal/kitty.mdx new file mode 100644 index 0000000..a69bfea --- /dev/null +++ b/docs/terminal/kitty.mdx @@ -0,0 +1,195 @@ +--- +title: kitty +description: kitty configuration, host variants, custom kittens and the Python tab bar. +--- + +GPU terminal emulator and the primary terminal on every role. + +| | | +| --- | --- | +| Source | `dot_config/kitty/` | +| Target | `~/.config/kitty/` | +| Install | `kitty` in `.chezmoidata/packages.yaml` (pacman on Arch, cask on macOS, plus `font-victor-mono-nerd-font` cask) | + + +- dot_config/kitty/ + - kitty.conf + - tmux.conf + - herdr.conf + - goliath.conf + - ssh.conf + - symlink_current-theme.conf + - tab_bar.py + - pass_keys.py + - navigate_kitty.py + - select_tab.py + - switchtab.py + - window_titler.py + - themes/ + - cyberdream.conf + - koda-dark.conf + - koda-light.conf + - noctalia.conf + + +`__pycache__/` next to `tab_bar.py` is excluded in `.chezmoiignore.tmpl`. + +## Theme and colors + +Every config ends with: + +```conf ~/.config/kitty/kitty.conf +include ~/.local/state/omarchy/current/theme/kitty.conf +``` + +Colors come from the active Omarchy theme; it is included last so it wins. `symlink_current-theme.conf` creates `~/.config/kitty/current-theme.conf` as a symlink to `themes/noctalia.conf`. Only the legacy `dot_config/herdr/kitty.conf` includes `current-theme.conf`; the main config does not. `themes/` holds `cyberdream`, `koda-dark`, `koda-light` and `noctalia` 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`, `angled`, aligned left, top edge, `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) | +| `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`. + +## 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](/terminal/tmux) 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`. Keys mirror the [Ghostty](/terminal/ghostty) config so both drive herdr identically; an uppercase letter after `\x02` is the shift variant. See [herdr](/terminal/herdr). + +| 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 `

*Arvj2qQU@LO2$Gqq+ym*c29TOQ&W@a23rC( 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 z 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 + + **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 1, 2, 3, 4, 5, 7, 8, 9 | +| `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): + +```css ~/.config/waybar/style.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](/desktop/hyprland): the compositor this bar is built for. +- [Fonts and default apps](/desktop/fonts-and-apps): Nerd Font packages. diff --git a/docs/index.mdx b/docs/index.mdx new file mode 100644 index 0000000..fbf045f --- /dev/null +++ b/docs/index.mdx @@ -0,0 +1,53 @@ +--- +title: dots +description: prdlk's dotfiles, managed with chezmoi. One command installs chezmoi and applies the whole setup. +sidebar: + label: Overview + icon: house +--- + +```sh +curl -fsSL https://dots.prd.lk/install | sh +``` + +That command installs chezmoi to `~/.local/bin`, clones [prdlk/dotfiles](https://github.com/prdlk/dotfiles), asks three questions (name, email, machine role), installs packages, and applies every config. See [Installation](/installation) for the options, prerequisites, and the private-repo auth step. + +## What's managed + + + + chezmoi layout, machine roles, symlink mode, age encryption, package manifests, apply scripts, and externals. + + + fish, bash, and zsh with shared aliases, starship, atuin, and the `~/.local/bin` scripts. + + + kitty, ghostty, tmux, and herdr. + + + git, gh and gh-dash, neovim, yazi, lazygit, lazydocker, bat, topgrade, hunk, and more. + + + niri with noctalia, Hyprland with the omarchy helpers, waybar, fonts, and default apps. + + + Claude Code, omp, and the shared agent skill library. + + + +## Machine roles + +The first apply asks for a role. It controls which parts of the repo land on the machine. + +| Role | Platform | Gets | +| --- | --- | --- | +| `desktop` | Arch Linux | Everything: universal toolset plus the Linux desktop layer | +| `laptop` | Arch Linux | Same as `desktop` | +| `mac` | macOS | Universal toolset via Homebrew; no Linux desktop layer | +| `server` | Any | Universal toolset only | + +The default is `mac` on macOS and `desktop` everywhere else. See [Configuration](/chezmoi/config) and [Ignore rules](/chezmoi/externals-and-ignore). + +## Theme + +The shared palette is **cyberdream**. bat, atuin, and yazi select it. fish and omp ship a cyberdream theme but do not select it. kitty takes its colors from the active Omarchy theme. The noctalia, koda, and ii-auto variants are shipped for ghostty, kitty, and yazi. The font is **Victor Mono Nerd Font**. diff --git a/docs/installation.mdx b/docs/installation.mdx new file mode 100644 index 0000000..ebba3b2 --- /dev/null +++ b/docs/installation.mdx @@ -0,0 +1,109 @@ +--- +title: Installation +description: Install chezmoi and apply these dotfiles with one command, or pass your own chezmoi arguments. +sidebar: + icon: download +--- + +## One-liner + +```sh +curl -fsSL https://dots.prd.lk/install | sh +``` + +`/install` is chezmoi's official install script ([get.chezmoi.io/lb](https://get.chezmoi.io/lb)), vendored into this site's `public/` directory with three changes: + +1. chezmoi installs to `$HOME/.local/bin`, whatever directory you run it from. +2. With no arguments, it runs `chezmoi init --apply prdlk/dotfiles` after installing. +3. When the script is piped into `sh`, chezmoi's stdin is reattached to `/dev/tty` so the first-run prompts still work. + +The script checks the release tarball's SHA-256 before installing, as upstream does. + +## Before you run it + + + + **Arch**: `sudo` for pacman. `paru` is needed for AUR packages (`topgrade`, and `noctalia-shell` on desktop roles); without it the package script prints a warning and skips them. + **macOS**: [Homebrew](https://brew.sh) is required; the package script exits with an error if `brew` is missing. + + + `prdlk/dotfiles` is a private repository, so the clone needs credentials: + - **HTTPS** (default): git prompts for your GitHub username and a personal access token with `repo` scope. + - **SSH**: add the machine's key to GitHub first, then use the `--ssh` form below. + + + 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 + ``` + + + +## Options + +Arguments after `--` go to chezmoi and replace the default `init --apply prdlk/dotfiles`: + + + +```sh SSH +sh -c "$(curl -fsSL https://dots.prd.lk/install)" -- init --apply --ssh prdlk/dotfiles +``` + +```sh Dry-run +sh -c "$(curl -fsSL https://dots.prd.lk/install)" -- init prdlk/dotfiles +chezmoi diff +chezmoi apply +``` + +```sh chezmoi-only +sh -c "$(curl -fsSL https://dots.prd.lk/install)" -- --version +``` + + + +| Flag / variable | Effect | +| --- | --- | +| `-b