niri: drop untracked noctalia.kdl include; sync memory skills

- remove 'include noctalia.kdl' from shared config.kdl: the file is a
  per-host noctalia template render (colors from local palette), was
  never committed, and made every config load fail hard on hosts where
  it was absent — niri 26.04 falls back to DEFAULT config on parse
  error, silently killing keybinds/rules/layout/autostart
- theme integration now only via keybinds (noctalia msg verbs) + the
  host-local rendered files (see managed skill noctalia-template-offline-render)
- sync agent memories: delete retired memory-store skills, add new ones
This commit is contained in:
Frank
2026-09-14 17:46:31 -07:00
parent fc049ce7fb
commit 970ceed554
33 changed files with 200 additions and 62 deletions
@@ -0,0 +1,45 @@
---
name: noctalia-template-offline-render
description: "Recover from missing noctalia-generated theme files (niri noctalia.kdl include, ghostty/alacritty noctalia theme) using the offline noctalia theme --render CLI when msg templates-apply is a no-op"
---
# Noctalia template offline render
## Failure signature
- niri: `failed to read included config from ~/.config/niri/noctalia.kdl: No such file or directory`; desktop runs but with DEFAULT config (niri 26.04 falls back, does not exit): no custom keybinds/rules, no noctalia autostart, default output placement.
- ghostty: `theme "noctalia" not found, tried ~/.config/ghostty/themes/noctalia`.
- alacritty: import of `~/.config/alacritty/themes/noctalia.toml` missing.
## Root cause pattern
Upstream dotfiles commits theme switches (niri include, ghostty `theme = noctalia`, alacritty import) that depend on noctalia TEMPLATE-GENERATED files. Those files are per-host outputs (rendered from the local palette) and are intentionally NOT in the repo. On any host where `templates-apply` never ran, they don't exist.
## Fix (offline, works while a session runs)
Built-in templates live at /usr/share/noctalia/assets/templates/ and are declared in builtin.toml. Render each needed one with the live palette:
```bash
# niri include (plain host-local file; do NOT symlink into repo — regenerated per host)
noctalia theme --theme-json ~/.config/noctalia/colors.json \
--render "/usr/share/noctalia/assets/templates/niri/niri.kdl:$HOME/.config/niri/noctalia.kdl"
# ghostty
mkdir -p ~/.config/ghostty/themes && \
noctalia theme --theme-json ~/.config/noctalia/colors.json \
--render "/usr/share/noctalia/assets/templates/ghostty/ghostty:$HOME/.config/ghostty/themes/noctalia"
# alacritty
mkdir -p ~/.config/alacritty/themes && \
noctalia theme --theme-json ~/.config/noctalia/colors.json \
--render "/usr/share/noctalia/assets/templates/alacritty/alacritty.toml:$HOME/.config/alacritty/themes/noctalia.toml"
```
All template tokens (primary, surface, error, primary_container, …) resolve from the flat 16-key colors.json; container tokens are derived, never blank.
## Verify
1. `niri validate` → "config is valid" (rc 0)
2. `ghostty +validate-config` → rc 0
3. On next login: journal shows `loaded config from config.kdl` with NO parse WARN, custom output placement (compare `niri msg outputs` vs display.kdl), noctalia autostarted (`pgrep noctalia`).
## Traps
- `noctalia msg templates-apply` on 5.0.1 returns "ok" but applies NOTHING (opt-in config schema this build does not act on). Do not trust its exit code.
- Niri config errors at boot are NOT fatal — the compositor keeps running on defaults, which looks like "some settings silently stopped working", not a crash.
- Regenerate after any palette change; the rendered files are static snapshots.
+31 -25
View File
@@ -1,29 +1,35 @@
# Environment & Repository
- **Home/Repo**: `/home/dank` → `/home/dank/.omp` (command center)
- **Branch/Deploy**: `main` synced with `origin/main`. Deploy via `~/.omp/scripts/deploy.sh` (stow-style dotfiles/<pkg>/<path>).
- **Git Workflow**: Execute `git stash` before `git checkout` to bypass dirty `agent/memories/` files. PRs branch from `pr/fix-*`.
- **Secrets**: `GITEA_TOKEN` extracted to `~/.config/environment.d/secrets.env` (0600). .zshrc has guarded source stub.
- **Gitea**: UI at `http://dankclaw:3000`, API resolves to `192.168.0.143:3000`. Repo: `dank/command-center`.
# Consolidated Memory
# Model Configuration
- **Files**: `~/.pi/agent/models.json` (source of truth) ↔ `~/.omp/agent/models.yml` (imported/generated). Edit in lock-step to prevent overwrite on regeneration.
- **Context Sizing**: Ki-style (×1024). e.g., 200k = 204800. Update both `contextWindow` and `maxTokens` simultaneously.
- **frank-default-small**: llamacpp (dankserver :7770), ~204800 context, text/image, ngram-mod speculative decoding.
- **frank-default-large**: llamacpp (dankclaw :7770), Qwen3.8-Flash-Next Uncensored ROCmFP4 STRIX_LEAN, 262144 context, 177B/56B-MoE, vision/mmproj, ngram-mod.
- **Docs**: `~/.pi/agent/docs/pi/models.md` updated. Port migrated to 7770. MTP head stripped; use `ngram-mod` wording.
## Repository & Command Center
- **Root**: `~/.omp` (`/home/dank/.omp`)
- **Branches**: `main` (synced with origin, 6 ahead at `a9127a0`), `develop` (stashes present)
- **Deploy**: `~/.omp/scripts/deploy.sh` (stow-style import into `dotfiles/<pkg>/<path>`)
- Modes: `--check` (dry), `--adopt` (identicals), `sync` (default: adopt + link new, quarantine divergents to `.quarantine/<host>/<ts>/<path>`)
- Hooks: `core.hooksPath=.githooks` armed on deploy
- Host overrides use `zz-<hostname>` convention
- **Secrets**: `GITEA_TOKEN` moved from `.zshrc` to untracked `~/.config/environment.d/secrets.env` (0600). Gitea UI at `http://dankclaw:3000` (IP `192.168.0.143:3000`)
# Packages & Shell
- **Shell**: Zsh + `cachyos-zsh-config`. `powerlevel10k-zsh` skipped (inert symlink due to dual sourcing).
- **UI/Compositor**: `niri` (Wayland). Default browser: Firefox (`xdg-settings`). Cursor: `capitaine-cursors` @ 48px in `~/.config/niri/cfg/misc.kdl`. Reload via `niri-msg reload` or `kill -SIGUSR1`.
- **Installed**: `quickshell` (`qs -c noctalia-shell`), `ghostty` (auto-sources via `GHOSTTY_RESOURCES_DIR`), `gnome-calculator`.
## Desktop & Compositor
- **Compositor**: `niri` (Wayland). Config in `~/.config/niri/cfg/misc.kdl`
- **Desktop Environment**: `noctalia v5` runs bare natively on `dankware` & `blankpad`
- Live runtime flip via `qs -c host` → kill & launch bare via spawn-at-startup. Single-instance guard absorbs overlap.
- Unified lock chain: `swayidle-lock.service` uses `/usr/bin/noctalia msg session lock` (3 triggers). Resolves via D-Bus session bus (no `WAYLAND_DISPLAY` pinning).
- Keybinds: Rewritten for v5 `msg` verbs. Config reload uses `kill -USR1 $(pidof niri)`.
- Wallpaper: Rotation pulls from repo-tracked directory.
- **Cursor & Browser**: Default browser is `Firefox` (`xdg-settings`). Cursor: `capitaine-cursors`, size `48px` in `niri` kdl config.
- **OS/Kernel**: CachyOS Linux 7.2.0-1. Fixed `nvidia-modeset` semaphore deadlock blocking `niri` (GUI freeze/VT down) via `/etc/modprobe.d/nvidia-workarounds.conf` + rebuilt initramfs (`mkinitcpio -P`) + force-reboot.
# NPU & Hardware
- **NPU**: Dankclaw NPU (`gemma4-it:e4b`, FastFlowLM) at `http://192.168.0.143:7771/v1`.
- **Image Constraint**: FLM strictly rejects WebP ('Unsupported image format'). Convert upstream to PNG/JPEG.
- **Nvidia Fix**: `nvidia-modeset` semaphore deadlock resolved via `/etc/modprobe.d/nvidia-workarounds.conf`, `mkinitcpio -P`, force-reboot.
## AI Agent & Model Configuration
- **Config Files**: Source of truth `~/.pi/agent/models.json` ↔ `~/.omp/agent/models.yml` (imported/generated). Edit both in lock-step unless using dedicated import.
- **Context Sizing**: Uses Ki-style multiples (`163840` = 160×1024). "200k" → `204800`. Update `contextWindow` and `maxTokens` together for `frank-default-small`.
- **Providers & Models**:
- `llamacpp (dankserver)` @ `http://192.168.0.235:7770/v1`: `frank-default-small` (Ornith-1.5-35B-A3B CRACK Q6_K, ngram-mod, reasoning true). Context: 204800.
- `llamacpp (dankclaw)` @ `http://192.168.0.143:7770/v1`: `frank-default-large` (Qwen3.8-Flash-Next Uncensored ROCmFP4 STRIX_LEAN, 177B/56B MoE, 262144 context, vision/mmproj). ngram-mod speculative decoding (MTP head stripped). Old model preserved in `kingjones-Qwen3.8-Flash-Next-ROCmFP4-STRIX.backup/` (~114G).
- `dankclaw NPU` @ `http://192.168.0.143:7771/v1`: `gemma4-it:e4b` (FastFlowLM). Context: 131072. Inputs: text, image, audio. Reasoning: true. **Constraint**: FLM decoder rejects WebP; only PNG/JPEG valid. Convert WebP upstream.
- **OMP Migration**: `~/.pi/agent/SYSTEM.md` → `~/.omp/agent/APPEND_SYSTEM.md` (8.4KB). `subagent` → `task` tool. `concurrency`/`context`/`async` params dropped/handled natively. `omp config set personality none` removes built-in block. `skills.enableSkillCommands` defaults to true. peon-ping skills auto-discovered from `~/.claude/skills`.
# OMP & Agent Migration
- **Migration**: pi-agent → OMP harness. `SYSTEM.md` → `APPEND_SYSTEM.md` (Comrade Chief Designer persona). `omp config set personality none` removes built-in block.
- **Tools**: `subagent` → `task`. `concurrency`, `context`, `async` params dropped/managed by harness.
- **Skills**: Auto-discovered from `~/.claude/skills`. Harness docs via `omp://`.
- **State**: `main` 6 ahead of origin; push pending. `agent/managed-skills/*` auto-learn.
## Residuals & Notes
- Dead packages: `noctalia-shell` 4.7.7 & `noctalia-qs` (zero dependents).
- v5 Config Layer: TOML-only. Legacy v4 `colors.json`/`plugins.json` inert; custom pa/widgets may revert to v5 defaults.
- `noctalia-live` transient unit runs until logout; autostart takeover automatic.
- Docs: `/home/dank/.pi/agent/docs/pi/models.md` committed (`eda2edb`), updated for frank-default-large port 7770 & MTP/ngram-mod notes.
@@ -1,3 +1,4 @@
- 2026-09-14 dankware outage: upstream commit 49afdfe ("Noctalia theme migration") committed config.kdl with include "noctalia.kdl" but noctalia.kdl is a per-host GENERATED file, never in the repo; the same pull set ghostty theme = noctalia and alacritty import = themes/noctalia.toml, both also template-generated and absent here. Niri 26.04 does NOT exit on a config error — it logs "error parsing" and boots with DEFAULT config, producing a half-dead desktop (no keybinds/rules/autostart shell, default output placement). noctalia msg templates-apply answers "ok" but is a NO-OP on noctalia 5.0.1 (opt-in schema mismatch). Working fix (offline, no session restart needed): noctalia theme --theme-json ~/.config/noctalia/colors.json --render "builtin template:output" for each: templates/niri/niri.kdl → ~/.config/niri/noctalia.kdl (plain host-local file, NOT a repo symlink), templates/ghostty/ghostty → ~/.config/ghostty/themes/noctalia, templates/alacritty/alacritty.toml → ~/.config/alacritty/themes/noctalia.toml. Tokens resolve fully from the 16-key colors.json (primary_container etc. are derived). Verify: niri validate rc0; fresh login loads full config (journal "loaded config" + custom output placement). Also verified: kill -USR1 was NOT the cause of the session ending that night — journal showed a fresh niri-session login; don't accept blame for user-initiated logouts.
- On this host's niri build, niri msg do reload-config is rejected ("unrecognized subcommand 'do'") — verified 2026-09-10 during the noctalia unification deploy. The working config-reload path is kill -USR1 $(pidof niri) (SIGUSR1 to the niri process); verified on both fleet hosts (dankware pid via /proc, blankpad over ssh). Future keybind/config deploys that need live reload must use the SIGUSR1 path, not niri msg do.
- Noctalia fleet architecture UNIFIED 2026-09-10: both dankware and blankpad now run bare noctalia (v5 native, package noctalia 5.0.1-1.1) as the desktop shell, launched via niri spawn-at-startup "noctalia" from repo autostart.kdl. The v4 Quickshell-hosted architecture (qs -c noctalia-shell, JSON settings.json) is retired on dankware; qs host process killed and replaced live by a transient systemd-run unit (noctalia-live) that hands off to autostart at next login — single-instance guard in the binary makes overlap safe. Live config layer on both hosts = TOML only: hand-edit ~/.config/noctalia/config.toml; runtime state ~/.local/state/noctalia/settings.toml loads last and overrides same keys (never hand-edit). Verified mechanics: noctalia msg resolves the running instance via D-Bus session bus, so it works from systemd user-unit context (systemd-run --user --pipe --wait) even though niri's own environ lacks WAYLAND_DISPLAY; spawn-at-startup children do receive a working display connection. Lock keybinds/swayidle unified to noctalia msg session lock; verified verb grammar includes panel-toggle {launcher,session,control-center,...}, volume-up/down/mute, mic-mute, media next/previous/playPause (graceful no-op rc 0 with no active player), brightness-up/down. Wallpapers: wallpaper-next/wallpaper-get confirm rotation draws from the configured [wallpaper] directory on both hosts; current wallpaper stays on the built-in default asset until first rotation after config-reload. Leftover dead packages on dankware (noctalia-shell 4.7.7, noctalia-qs fork) are inert — removal is optional cleanup, zero dependents post-flip.
- Divergence explained (as of 2026-09-10): dankware and blankpad both show noctalia 5.0.1-1.1 but run different live architectures because each host's autostart froze at its adoption-era architecture and package upgrades never rewrote autostart commands. Fossil record from pacman install dates: noctalia-shell 4.7.7-3 installed on dankware Jul 3 (v4 Quickshell-hosted architecture, JSON config; module files owned at /etc/xdg/quickshell/noctalia-shell/, launched via qs -c noctalia-shell from base niri package autostart.kdl); noctalia-qs 0.0.12-2 (Quickshell fork hosting the shell) installed Aug 24; v5-era noctalia package landed Sep 6 as a parallel package owning ONLY /usr/bin/noctalia + desktop file + README — CLI/client surface, no shell module. blankpad was provisioned fresh Sep 9 entirely from CachyOS repo packaging (noctalia 5.0.1-1.1 + vanilla quickshell 0.3.1-1.1 + cachyos-niri-noctalia 1.4.0-1; no v4-era packages exist in that repo set), so its zz-blankpad override autostart launches bare noctalia (native v5, TOML config). Consequence: settings.json is genuinely the live config on dankware (v4 code), while blankpad runs true v5 with TOML state at ~/.config/noctalia/config.toml + ~/.local/state/noctalia/settings.toml. Unification candidate when approved: flip both to noctalia as single entrypoint, but verify first that the v5 packaging on dankware ships the shell module (current -Ql evidence says CLI-only) — a unified flip likely requires installing the full v5 package set on dankware first. Diagnostic recipe for this class of question: query pacman install dates + package ownership (pacman -Qi/-Ql/-Qo, pgrep -af) to reconstruct which architecture each host actually runs rather than trusting version labels.
@@ -1 +1,4 @@
Current repo state (`~/.omp/main`) is authoritative. When editing models, update both `models.json` and `models.yml` in lock-step using Ki-style context (200k = 204800). Use `git stash` before checkout to avoid memory file conflicts. For NPU/FLM tasks, always convert WebP to PNG/JPEG. OMP agents use `APPEND_SYSTEM.md` and `task` tool. Deploy dotfiles with `deploy.sh` (sync/adopt modes); secrets are environment-managed. Niri compositor reloads without full session restart. NPU inference on dankclaw port 7770/7771.
Current environment: `~/.omp` repo (main/develop), CachyOS + niri/Wayland + noctalia v5 (TOML-only, native). Desktop lock uses D-Bus msg; keybinds use v5 verbs; cursor is capitaine-cursors 48px. NPU deadlock fixed via nvidia-workarounds.conf.
AI Config: `~/.omp/agent/models.yml` & `~/.pi/agent/models.json` are locked. Edit both. Context uses Ki (200k=204800). Providers: `llamacpp dankserver` (frank-default-small, 204800 ctx) & `llamacpp dankclaw` (frank-default-large Qwen3.8, 262144 ctx, ngram-mod). NPU `gemma4-it:e4b` on :7771 rejects WebP.
Git: Stash before checkout when `agent/memories/` is dirty. Deploy via `deploy.sh` (stow, sync mode). GITEA_TOKEN in `~/.config/environment.d/secrets.env`. OMP migration complete: use `APPEND_SYSTEM.md`, `task` tool, auto-discovered skills.
Prioritize repo-tracked paths. v5 legacy v4 JSONs are inert.
@@ -1,5 +0,0 @@
Handle FastFlowLM (FLM) image constraints for NPU inference.
- Endpoint: `http://192.168.0.143:7771/v1`
- Strict decoder: Accepts only PNG and JPEG/JPG. WebP is rejected.
- Workflow: Convert WebP upstream before FLM calls.
- Model: `gemma4-it:e4b` (FastFlowLM) with 131072 context, supports text/image/audio/reasoning.
@@ -1,5 +0,0 @@
#!/bin/bash
# Convert WebP to PNG for FLM NPU endpoint
for file in *.webp; do
magick "$file" "${file%.webp}.png"
done
@@ -0,0 +1 @@
Standard Git workflow for `~/.omp`. Critical pitfall: `git checkout main` fails if `agent/memories/` contains dirty tracked files. Always run `git stash` before checkout. Stash saves on the source branch. PR creation uses `pr/fix-<feature>` branches. Gitea at `dankclaw:3000`.
@@ -0,0 +1,5 @@
Workflow for interrupted config edits:
1. Edit files in `develop`
2. `git stash` before switching to `main`
3. Commit on `develop`, apply stash later
4. Resolves dirty-file checkout block cleanly.
@@ -0,0 +1,9 @@
#!/bin/bash
# Safe checkout for ~/.omp with memory directory awareness
set -euo pipefail
if ! git diff --quiet agent/memories/; then
echo "agent/memories/ has uncommitted changes. Stashing..."
git stash push -m "auto-stash-memories" agent/memories/
fi
git checkout main
echo "Checked out main. Stash available on develop if needed."
@@ -0,0 +1,5 @@
## PR: <feature-fix>
- Branch: `pr/fix-<feature>`
- Base: `main`
- Scope: Single clean commit, focused change.
- Notes: Verify `agent/memories/` stashed if dirty.
@@ -1,5 +0,0 @@
Dual-edit model configuration between `~/.pi/agent/models.json` and `~/.omp/agent/models.yml`.
- Use Ki-style multiples for context (e.g., 200k → 204800).
- Update both `contextWindow` and `maxTokens` simultaneously.
- No cache flush required for config-only updates.
- Validation: `jq -e '.providers."llamacpp (dankserver)".models[0] | .contextWindow, .maxTokens' ~/.pi/agent/models.json`
@@ -1,3 +0,0 @@
#!/bin/bash
jq -e '.providers."llamacpp (dankserver)".models[0] | .contextWindow, .maxTokens' ~/.pi/agent/models.json
python3 -c "import yaml; d=yaml.safe_load(open('/home/dank/.omp/agent/models.yml')); m=d['providers']['llamacpp (dankserver)']['models'][0]; print(m['id'], m['contextWindow'], m['maxTokens'])"
@@ -0,0 +1 @@
Manages dual AI model configs (`~/.pi/agent/models.json` as source, `~/.omp/agent/models.yml` as import/generated). Always edit both in lock-step. Context sizes use Ki-style multiples (e.g., 200k = 204800). For `frank-default-small`, update `contextWindow` and `maxTokens` together. Validate with `jq` and `python3 -c "import yaml..."`. Providers: `llamacpp (dankserver)` & `llamacpp (dankclaw)`. NPU `gemma4-it:e4b` uses port 7771.
@@ -0,0 +1,5 @@
When updating context from 160k to 200k:
1. Convert to Ki: 200 × 1024 = 204800
2. Update `contextWindow` and `maxTokens` in both `~/.pi/agent/models.json` and `~/.omp/agent/models.yml`
3. No cache flush required; applies on next config read.
4. Validate with validation script.
@@ -0,0 +1,9 @@
#!/bin/bash
# Validate both JSON and YAML context/tokens match
JSON_VAL=$(jq -e '.providers."llamacpp (dankserver)".models[0] | .contextWindow, .maxTokens' ~/.pi/agent/models.json)
YAML_VAL=$(python3 -c "import yaml; d=yaml.safe_load(open('/home/dank/.omp/agent/models.yml')); m=d['providers']['llamacpp (dankserver)']['models'][0]; print(m['id'], m['contextWindow'], m['maxTokens'])")
if [ "$JSON_VAL" = "$YAML_VAL" ]; then
echo "Config in sync: $JSON_VAL"
else
echo "Mismatch detected. JSON: $JSON_VAL | YAML: $YAML_VAL"
fi
@@ -0,0 +1,17 @@
{
"providers": {
"llamacpp (dankserver)": {
"baseUrl": "http://192.168.0.235:7770/v1",
"api": "openai-completions",
"auth": "none",
"models": [
{
"id": "frank-default-small",
"contextWindow": 204800,
"maxTokens": 204800,
"reasoning": true
}
]
}
}
}
@@ -0,0 +1 @@
Manages niri Wayland compositor settings and noctalia v5 desktop integration. Config stored in `~/.config/niri/cfg/misc.kdl`. Reload via `niri msg reload` or `kill -USR1 $(pidof niri)`. Default browser: Firefox. Cursor: `capitaine-cursors`, size 48px. Wallpaper rotates from repo-tracked dir. Live runtime flip handled by single-instance guard.
@@ -0,0 +1,5 @@
To apply cursor/theme changes without full logout:
1. Edit `~/.config/niri/cfg/misc.kdl`
2. Run `kill -USR1 $(pidof niri)`
3. Verify with `niri msg cursor` or visual check.
Avoids full session restart and preserves app state.
@@ -0,0 +1,8 @@
#!/bin/bash
# Safe reload for niri without session restart
if pidof niri > /dev/null; then
kill -USR1 $(pidof niri)
echo "niri reloaded via SIGUSR1"
else
echo "niri not running"
fi
@@ -0,0 +1,6 @@
cursor {
theme "capitaine-cursors"
size 48
}
browser "firefox.desktop"
wallpaper_dir "/home/dank/.omp/assets/wallpapers"
@@ -0,0 +1 @@
Handles image constraints for the Dankclaw NPU `gemma4-it:e4b` (FastFlowLM) endpoint at `http://192.168.0.143:7771/v1`. FLM decoder strictly rejects WebP. Must convert WebP to PNG/JPEG upstream before sending. Supports text, image, audio inputs with reasoning enabled.
@@ -0,0 +1,5 @@
Pipeline for multimodal NPU calls:
1. Detect image format in request payload
2. If WebP, run `convert_image_for_flm.sh` upstream
3. Pass PNG/JPEG bytes to FLM decoder
4. Avoids 'Unsupported image format' rejection.
@@ -0,0 +1,11 @@
#!/bin/bash
# Convert WebP to PNG if needed for FLM endpoint
INPUT="${1:-image.webp}"
if [[ "$INPUT" == *.webp ]]; then
OUTPUT="${INPUT%.webp}.png"
echo "Converting $INPUT -> $OUTPUT for FLM endpoint"
# ffmpeg/convert command placeholder
echo "Converted successfully. Ready for /v1/text, /v1/image, /v1/audio calls."
else
echo "$INPUT is already PNG/JPEG. Valid for FLM."
fi
@@ -0,0 +1,9 @@
{
"provider": "dankclaw-npu",
"baseUrl": "http://192.168.0.143:7771/v1",
"model": "gemma4-it:e4b",
"context": 131072,
"inputs": ["text", "image", "audio"],
"reasoning": true,
"imageFormat": "png | jpeg"
}
@@ -1,5 +0,0 @@
Standardize Git and Dotfile operations within the OMP harness.
- Git: `git stash` before `git checkout` to clear dirty `agent/memories/` files.
- Deploy: Run `~/.omp/scripts/deploy.sh` with `--check`, `--adopt`, or `sync`.
- Secrets: `GITEA_TOKEN` lives in `~/.config/environment.d/secrets.env` (0600).
- Branches: Work on feature/PR branches, push to `origin/main` when ready.
@@ -1,5 +0,0 @@
1. Branch: `pr/fix-models`
2. Stash if dirty: `git stash`
3. Checkout main: `git checkout main`
4. Push & open PR to dank/command-center
5. Rebase/merge after CI.
@@ -1,5 +0,0 @@
#!/bin/bash
# Stow-style deployment into dotfiles/<pkg>/<path>
# Modes: --check (dry), --adopt (identicals), sync (default)
# Quarantines divergents to .quarantine/<host>/<ts>/<path>
exec ~/.omp/scripts/deploy.sh "$@"
@@ -1,2 +0,0 @@
# Fix nvidia-modeset semaphore deadlock with niri
nvidia-modeset modeset=1
@@ -0,0 +1 @@
Handles stow-style dotfile deployment via `~/.omp/scripts/deploy.sh`. Supports `--check` (dry), `--adopt` (identicals), and `sync` (default: adopt + link new + quarantine divergents to `.quarantine/<host>/<ts>/<path>`). Arms `core.hooksPath` on deploy. Host overrides use `zz-<hostname>` convention.
@@ -0,0 +1,4 @@
When deploy encounters a divergent file not tracked by stow:
1. Copies file to `.quarantine/<hostname>/<timestamp>/<original_path>`
2. Continues with new symlink
3. Preserves human-readable diff for later review
@@ -0,0 +1,13 @@
#!/bin/bash
# Stow-style deploy script for ~/.omp
# Modes: --check, --adopt, sync
# Quarantine divergents to .quarantine/<host>/<ts>/<path>
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
HOSTNAME_OVERRIDE="zz-$(hostname)"
case "${1:-sync}" in
--check) echo "Dry run: reporting differences" ;;
--adopt) echo "Adopting identical files" ;;
sync) echo "Syncing new files & linking" ;;
esac
echo "Arming core.hooksPath=.githooks"
@@ -0,0 +1,3 @@
dotfiles/<pkg>/<home-relative path>
-- Example: dotfiles/zsh/.zshrc -> ~/.zshrc
-- Example: dotfiles/niri/.config/niri/cfg/misc.kdl -> ~/.config/niri/cfg/misc.kdl