# Environment & Tooling Memory (Frank workstation / blankpad) ## Persistent facts - User: `blank`. Home: `/home/blank`. Dotfiles repo: `~/.omp` (Gitea `dank/command-center` at 192.168.0.143:3000, local `git push` pattern). `serverAppConfig` cloned to `~/Projects/serverAppConfig`. - Desktop: Noctalia (Niri-based DE at `/usr/bin/noctalia`). Configs `~/.config/noctalia/config.toml` + `noctalia.kdl`; IPC via `noctalia msg ` (panel-toggle, session, lock, launcher). App templates in `/usr/share/noctalia/assets/templates/`. Palette generated via `noctalia theme [image]`. GTK accent #b267e4. - Ghostty: `theme = noctalia`; text AA via `freetype-load-flags` (not `font-hinting`). Alacritty: `font.antialias=false`. - Niri display config: `~/.config/niri/cfg/display.kdl`. Transform values are absolute; in portrait, a 180° flip = swap 90° ↔ 270°. - Hardware: Lenovo laptop eDP-1 (1920x1080, scale 1.25) + two PNP(XYM) PM1601 externals (1920x1200, scale 1, portrait). Current blankpad layout: DP-2@x=0 → HDMI-A-1@x=1200 → eDP-1@x=2400. - Frank desktop: cursor size 36, capitaine-cursors theme, Authenik 2026.8. Authenik caches claims per session (1-24h TTL) → silent 403s after group add. - Inference: `handy` app (`/usr/bin/handy`, hub op=start, application=/usr/bin/handy, pty=true, persist=true) with 69 catalog models. FLM NPU gemma4-it on port 7771 — PNG/JPEG only (no WebP), needs `thinkingLevelMap` in models.json, `.xclbin` symlinks under `~/.config/flm/xclbins/`. - Halogen runtime (frank-large): baked-in chat template, no file swap; accepts `chat_template_kwargs` (enable_thinking, preserve_thinking, reasoning_effort). Sampler defaults: temp=1.0, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=0.0, repetition_penalty=1.0. `preserve_thinking=true` in `agent/models.yml`. - `sudo usermod -aG input blank` was required for `/dev/input` device access (660 root:input). - Compositor AA in niri 26.04 is limited to corner rounding via `niri_rounding_alpha()`; blur/noise settings cause softness, not AA. Client-side text AA is not controlled by niri. ## Durable workflows 1. **Noctalia theme change**: edit generated palette/theme source before hardcoding per-app colors; terminal text color must match accent in both palette and terminal override. `noctalia msg` for IPC; `git add && git commit && git push` in dotfiles repo. 2. **Niri display rotation**: `niri msg outputs` → read `display.kdl` → edit transforms → `niri validate -c ` → `niri msg action load-config-file` → verify → git commit/push. 3. **Ghostty AA fix**: replace `font-hinting = hinting` with `freetype-load-flags = hinting,light`. Reload via USR1: `pgrep ghostty | while read pid; do kill -USR1 "$pid"; done`. 4. **Handy restart**: `pkill -f handy`, then hub daemon start with pty=true, persist=true, ready timeout 10s. 5. **llama.cpp parallelism**: layer (default) = pipeline; tensor (experimental) = true tensor parallelism requiring flash attention + non-quantized KV; row (deprecated); none = single GPU. `--parallel` is serving-level concurrency, not model parallelism. No context/sequence parallelism mode. ## Pitfalls - Portrait 180° rotation in niri is 90°↔270° swap, NOT adding 180°. - Tensor mode: flash attention required, KV cache non-quantized, MoE/Mamba/SSM unsupported, `--fit` disabled. - Authenik session claim caching causes silent 403s post-group-add. - Local dir `serverAppConfig` vs remote repo `serverAppConfigs` name mismatch (trivial, pull/push unaffected). - Git LFS lock warnings: mitigate with `git config lfs.http:///info/lfs.locksverify true`. - Noctalia crispness: no single compositor-AA switch; scoped options only (hard corners; hard corners + no blur/noise; full crispness with opacity 1.0/blur 0/fontconfig AA off; terminal-only).