chore: bootstrap .memory/ project knowledge files

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
This commit is contained in:
2026-03-09 12:27:12 +00:00
parent 2b2dd11575
commit 20b7ef0ea6
5 changed files with 353 additions and 0 deletions

59
.memory/decisions.md Normal file
View File

@@ -0,0 +1,59 @@
# 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