# Dotfiles Decisions ## Desktop Environment: Hyprland + Wayland - **Decision:** Hyprland as primary compositor, full Wayland stack - **Rationale:** Modern Wayland compositor with tiling, animations, and good HiDPI support - **Constraints:** XWayland needed for legacy apps; special window rule to suppress maximize events - **Input:** Caps Lock remapped to Super (`caps:super`), `alts_toggle` for US/BR layout switching ## Shell: Fish (not Bash/Zsh) - **Decision:** Fish as primary interactive shell; bash/zsh configs retained for compatibility - **Rationale:** Better autocompletion, syntax highlighting, friendly defaults - **Plugin manager:** fisher (minimal, text-file-based) - **No `oh-my-fish`** — prefer minimal plugin set (just catppuccin theme) ## Theme: Catppuccin Mocha (global) - **Decision:** Single colorscheme (Catppuccin Mocha) applied uniformly across all tools - **Rationale:** Consistent visual identity; official plugins available for Fish, Neovim, Kitty - **Other variants installed:** Frappe, Macchiato, Mocha static — available in `fish/themes/` but Mocha is active - **No per-tool theming exceptions** — all tools must use Catppuccin Mocha ## Editor: Neovim with lazy.nvim - **Decision:** Neovim (not VSCode or other) as primary editor - **Plugin manager:** lazy.nvim (not packer, not vim-plug) — auto-bootstrapped from init.lua - **LSP strategy:** mason.nvim for tooling installation + mason-lspconfig for auto-enable; capabilities injected globally via cmp_nvim_lsp - **Format strategy:** conform.nvim with format-on-save (not LSP formatting directly); lsp_fallback=true for unconfigured filetypes - **No treesitter-based formatting** — explicit per-filetype formatters in conform ## OpenCode: Custom Multi-Agent Config - **Decision:** Fully custom multi-agent configuration (not default OpenCode setup) - **10 specialized agents** each with tailored instructions, model, temperature, permissions - **Memory pattern:** `.memory/` directory tracked in git; agents write to `.memory/*` directly - **Permission model:** Full edit for lead/coder/librarian; all others restricted to `.memory/*` writes (instruction-level enforcement, not tool-level) - **AGENTS.md exception:** In the opencode subdir, `AGENTS.md` is NOT a symlink (it's the global OpenCode config file, distinct from the per-project `AGENTS.md` pattern) - See [OpenCode Architecture](research/opencode-architecture.md) for details ## Waybar CPU Monitor: Ghostty (not Kitty) - **Observation:** `cpu` module in Waybar opens `ghostty -e htop` on click — Ghostty may be installed as secondary terminal - **Impact:** Kitty is the primary terminal (SUPER+Return), but Ghostty is referenced in Waybar config ## Git Credentials: gh CLI - **Decision:** Use `gh auth git-credential` as credential helper for GitHub + Gist - **Rationale:** Centralizes auth through GitHub CLI; no plaintext tokens in git config ## SSH Key Type: Ed25519 - **Decision:** Ed25519 for SSH key (not RSA) - **Rationale:** Modern, fast, smaller key size ## No Global `.gitignore` in Dotfiles - **Observation:** No global gitignore file visible; tracking is managed per-repo - **Pattern:** Sensitive SSH private key `.ssh/id_ed25519` is tracked — implies this repo may use filesystem permissions for security