Add initial .memory/ knowledge base for the dotfiles repo: - knowledge.md: full desktop stack, tool configs, keybindings, conventions - decisions.md: architectural choices (Hyprland, Fish, Catppuccin Mocha, Neovim, OpenCode) - research/opencode-architecture.md: detailed OpenCode multi-agent system breakdown
60 lines
3.2 KiB
Markdown
60 lines
3.2 KiB
Markdown
# 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
|