---
title: decisions
type: note
permalink: dotfiles/decisions
---

# 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