1
0
Fork 0
Commit graph

97 commits

Author SHA1 Message Date
5b5ae288b4 herdr: manage config.toml via chezmoi
Ignore herdr runtime state (session.json, logs, sockets, plugin lock).
2026-08-22 21:56:53 -04:00
ca9d9d206b kitty: bump background opacity to 0.85 2026-08-22 21:56:53 -04:00
1286fbdd34 kitty: bump background opacity to 0.8 2026-08-22 21:46:22 -04:00
3c61391f3f Gate sway stack configs on sway_setup via .chezmoiignore.tmpl
Only the install script respected the flag; dot_sway/wofi/foot/mako/
waybar deployed unconditionally. Now ignored when sway_setup=false.
2026-08-22 20:33:41 -04:00
a0b92d65a0 show thinking blocks: hideThinkingBlock false 2026-08-21 17:32:12 -04:00
bacafdf715 fold omp runtime config and remaining pi extensions into source 2026-08-21 17:29:47 -04:00
6c3a47f350 pi: manage caveman-native extension via chezmoi template 2026-08-21 17:29:47 -04:00
fd4eb2a059 pi: add powerline-footer and themes-bundle, fold runtime settings 2026-08-21 17:29:47 -04:00
0c363443bb llama-swap: require LLAMA_SWAP_API_KEY auth 2026-08-21 17:29:47 -04:00
6f4e0c8b68 zsh: auto-update omp before launch 2026-08-21 17:29:47 -04:00
488d613cbb pi: trim extensions to 10, drop 22 unused
Remove from settings + npm manifest + disk: pi-powerline, pi-bar,
pi-subagents, gentle-engram, pi-prompt-template-model, pi-simplify,
pi-add-dir, pi-slopchop, pi-btw, pi-interactive-shell, pi-terminal-theme,
@plannotator/pi-extension, @tmustier/pi-raw-paste, @tmustier/pi-usage-extension,
@victor-software-house/pi-curated-themes, ponytail, pi-caveman.
Also drop unregistered pi-token-speed, pi-web-access, statusline-pi,
@juanibiapina/pi-powerbar (dup of pi-powerline), context-mode.
Keep: pi-mcp-adapter, pi-intercom, pi-ask-user, @juanibiapina/pi-extension-settings,
@devkade/pi-plan, @tmustier/pi-ralph-wiggum, @danielmeneses/pi-llama-swap,
pi-llama-cpp-stats, firecrawl, autoresearch.
2026-08-20 19:12:19 -04:00
eccb9b8c7b pi: default to miche.llama/qwen38-27b, changelog 0.84.2; restore exec bit on update-neovim.sh 2026-08-19 13:08:55 -04:00
6d6deb459f kitty: add transparency, no noctalia include 2026-08-19 13:08:55 -04:00
a223473fc2 Scope update-neovim.sh to debian: arch gets neovim from pacman; guard no-ops elsewhere 2026-08-19 13:08:55 -04:00
f692fbf01e Remove update-neovim.sh tarball installer — neovim comes from system package (pacman), topgrade keeps it current 2026-08-19 13:08:55 -04:00
bdcf11467a pi: add host-aware llama-swap extension (byte.llama + miche.llama providers) 2026-08-17 22:48:32 -04:00
358c66b8f6 age: add rain (new Arch box) recipient, re-encrypt secrets 2026-08-17 21:49:56 -04:00
986f300a85 chore(paru): disable SudoLoop
paru's SudoLoop keeps sudo credentials alive for the whole run instead of
prompting per operation. Disable it — matches the local edit in
~/.config/paru/paru.conf.
2026-08-05 19:28:18 -04:00
ae18077d97 fix(topgrade): make managed config effective, fix disable list
- Merge active settings from shadow ~/.config/topgrade.toml (set_title,
  assume_yes, disable, git repos) into chezmoi-managed file; topgrade
  prefers the former path, so the managed config was never read.
- Replace invalid 'oh-my-zsh' step with 'shell' (no per-framework
  variant) — config failed to deserialize, so no steps were disabled.
- Delete shadow config; topgrade now reads the chezmoi-managed file.
2026-08-05 19:21:55 -04:00
8013d616fc omp: re-encrypt models.yml with tadbit + bopad recipients
re-add preserved the old 7-recipient set; re-encrypted to the full
9 recipients so every box can decrypt models.yml
2026-08-05 19:13:25 -04:00
86df3f33ab chore(dotfiles): sync omp + pi agent configs to chezmoi
- omp: re-add config.yml as private_config.yml (matches live fallback
  chains; minimax removed, slow -> deepseek/deepseek-v4-pro:high)
- omp: re-encrypt models.yml; llama-swap.miche static list synced to
  live /v1/models (21 models), stale entries dropped
- pi: fix broken settings.json tracking — dir_dot_pi/ mapped to a
  literal ~/dir_dot_pi, real ~/.pi/agent/settings.json was never
  managed. Track it via dot_pi/agent/settings.json.tmpl
2026-08-05 19:11:51 -04:00
df30dab5f6 Re-encrypt secrets: add bopad recipient (fixed rekey) 2026-07-29 13:13:52 -04:00
461b0bab56 Re-encrypt secrets with bopad recipient 2026-07-29 13:08:50 -04:00
cb98092783 Add bopad (CachyOS) to age recipients 2026-07-29 13:07:33 -04:00
5c06f37c4d omp: drop static model lists, fix stale model refs (miche)
- Remove static model lists from llama-swap.miche and llama-swap.byte
  (discovery: type: proxy now fetches live models from /v1/models)
- Update byte model IDs: qwen3.6-35b-heretic-mtp/a3b-mtp -> qwen36-35b-genesis,
  gemma-4-12b-heretic -> gemma4-12b-hauhau
- Update miche model IDs: gemma4-12b -> gemma4-12b-hauhau,
  qwen3.6-27b-mtp-rocmfp4-turbo -> qwen3.6-27b-mtp,
  qwen3.6-35b-a3b-mtp-rocmfp4 -> qwen36-35b-genesis
2026-07-06 13:34:38 -04:00
78754a31de omp: drop static model lists, use proxy discovery only
- Remove static model lists from llama-swap.byte and llama-swap.miche
  (discovery: type: proxy fetches live models from /v1/models)
- Update byte model IDs in config.yml to current roster:
  qwen3.6-35b-heretic-mtp -> qwen36-35b-genesis
  gemma-4-12b-heretic -> gemma4-12b-hauhau
  qwen3.6-35b-a3b-mtp -> qwen36-35b-genesis
2026-07-06 13:24:11 -04:00
42d647b9c3 feat(pi): add settings.json to chezmoi tracking (includes pi-llama-cpp-stats) 2026-07-05 17:06:31 -04:00
309c7cf9f6 feat(zshrc): add Firecrawl env vars for self-hosted instance on kaiser.local 2026-07-05 16:23:04 -04:00
13fa1a01dc chore: drop lazy-lock from chezmoi; sync omp agent config + dir mode from host 2026-07-02 18:11:11 -04:00
b78e23aa16 gentoo install scripts: guard with os_family like overlays
Both run_once_20-install-user-packages-gentoo.sh.tmpl and
run_once_40-install-sway-gentoo.sh.tmpl were missing the os_family
template guard (the overlays script got it in the previous fix but
these two slipped through). On non-gentoo boxes — arch, debian —
chezmoi apply would run them and they'd try to 'emerge', failing
with 'sudo: emerge: command not found' and exit status 1, which
breaks topgrade.

Wrap each body in '$0{ if eq .os_family "gentoo" }' / '$0{ else }',
mirroring the chaotic-aur script's pattern and the overlays fix from
the previous commit. On non-gentoo boxes the rendered script reduces
to a single 'skipping' log line and exits 0; on gentoo boxes the full
body (including the existing .sway_setup gate on the sway script) is
preserved.

Verified by rendering both scripts with a gentoo-config override:
  arch (live)  -> 'skipping gentoo user-packages' / 'skipping sway'
  gentoo        -> full body (293 / 87 lines)
Both pass bash -n and actually exit 0 when run on this arch box.
2026-06-25 18:58:27 -04:00
c54e770914 topgrade: drop ignore_failures so step failures halt the run
Previously 'node' failures were silently skipped. With this removed,
any non-zero step exit code aborts the run, matching the user
preference of 'I dont want it to skip anything'.
2026-06-25 18:41:21 -04:00
6b64fe0625 gentoo-overlays: guard with os_family so non-gentoo boxes skip it
The script's body was never wrapped in an os_family template conditional
despite the header claiming it was 'guarded by the chezmoi template
engine'. So topgrade/chezmoi apply would run it on every box and die
with '/var/db/repos/gentoo missing' on arch/debian.

Wrap the body in '{{ if eq .os_family "gentoo" }}' / '{{ else }}' (same
pattern the arch-only chaotic-aur script already uses). On non-gentoo
boxes the rendered script reduces to a single 'skipping' log line.
Also fix two stale comments in the header (filename was 05, not 10).

Verified by rendering with --config override: arch → no-op log line,
gentoo → full body intact, both pass bash -n.
2026-06-25 18:33:58 -04:00
d61ffacc22 omp secrets: use encrypted_private_ prefix (decrypts + 0600)
chezmoi parses attribute prefixes left-to-right and 'encrypted_' must
precede 'private_'. The 'private_encrypted_' order silently breaks
decryption: chezmoi consumes 'private_', then treats 'encrypted_foo.age'
as a literal filename and copies the ciphertext verbatim instead of
decrypting it.

models.yml was named 'private_encrypted_models.yml.age' since commit
3c3fab7 and was never decrypting — a stale 'encrypted_models.yml.age'
blob was sitting in ~/.omp/agent/ and the plaintext models.yml was an
unmanaged leftover. .env and zai.key used the plain 'encrypted_'
prefix and were decrypting at umask 0644 (world-readable in isolation;
the 700 ~/.omp/agent/ dir was the only thing shielding them).

This commit:

  * renames all three to encrypted_private_{zai.key,.env,models.yml}.age
    so chezmoi decrypts AND lands them at 0600 natively
  * rewrites run_onchange_35 as 'ensure-omp-secret-perms.sh' covering
    all three, as belt-and-suspenders for any box where a secret still
    sits at 0644 from a prior apply
  * removes the stale encrypted_models.yml.age verbatim blob and its
    orphan state entry
  * corrects the README perms section to document the prefix-order
    gotcha (was misleadingly claiming 'private_' alone gave 0600)

Verified end-to-end on this box: chezmoi managed lists all three as
decrypted targets, scoped apply writes them at 600, chmod script is
idempotent. Other boxes need a 'chezmoi apply' to pick up the rename
and the onchange chmod.
2026-06-25 18:33:58 -04:00
27ae3a3b18 sway: drop -t 2000/-t 3000 from notify-send, source restore-wayland-env in toggle-dropdown/wifi-menu
The actual cause of 'caffeine notification doesn't show' was the
-t 2000 timeout: the notification popped for 2 seconds and self-cleared
before the user could see it. Manual notify-send from a terminal (no
-t flag) used mako's default-timeout=5000 and was visible — so the user
saw my test notifications but not their own clicks.

Fix: drop the -t flag everywhere so mako config owns the duration.
Added: source restore-wayland-env.sh in toggle-dropdown.sh and
wifi-menu.sh — same env-loss pattern as caffeine.sh, would have
been next on the bug list.

Verified on tadbit: -t 2000 notification visible at +0.5s, gone at
+2.5s (user missed it). No -t flag: visible at +0.5s, gone at +5.5s
(visible long enough to read).
2026-06-23 22:24:16 -04:00
d78ba4152b sway: factor env restoration into restore-wayland-env.sh, fix caffeine notify
caffeine.sh click was working (icon toggled, swayidle restarted) but
the 'Caffeine ON/OFF' notification never appeared. Same root cause as
the prior swayidle bug: waybar's on-click context strips WAYLAND_DISPLAY
from the spawned script's env. notify-send writes to D-Bus (exit 0) but
mako can't display because it has no Wayland socket to render on. Click
appears to do nothing visually.

Fix: extract the /proc/*/environ probe into a shared helper
(restore-wayland-env.sh) and source it from both caffeine.sh AND
start-swayidle.sh. Now any future on-click script in this repo can
`. restore-wayland-env.sh` to inherit the right env.

Verified on tadbit:
- click 1 (caffeine ON): swayidle killed, flag set, 'Caffeine ON'
  notification appeared in mako
- click 2 (caffeine OFF): swayidle restarted, flag cleared, 'Caffeine
  OFF' notification appeared in mako

Both are visible in makoctl history now.
2026-06-23 22:18:01 -04:00
05e75bc41e sway: extract start-swayidle.sh as single source of truth (fix caffeine)
caffeine.sh click was silently breaking idle lock. Two bugs that
compounded:

1. caffeine.sh inlined its own swayidle command (with swaylock -f -i
   , not lock-fancy.sh), drifted out of sync with sway/config
   which used lock-fancy.sh. Toggle off would restart swayidle with a
   different lock command than the rest of the session.

2. WAYLAND_DISPLAY isn't set in waybar's on-click context. When
   caffeine.sh called 'swaymsg output * power off' (part of the
   restart command) and later called swaylock / grim (via lock-fancy),
   those failed silently. swayidle itself can run without
   WAYLAND_DISPLAY but it can't actually monitor input/output, so it
   exits immediately. Result: user clicks caffeine off, flag clears,
   icon goes back to 'inactive', but auto-lock is silently dead.
   The user thinks they turned caffeine off. They didn't. They're
   just unprotected.

Fix:
- new start-swayidle.sh holds the canonical swayidle command
- sway/config: exec $HOME/.config/sway/start-swayidle.sh
- caffeine.sh: killall swayidle; start-swayidle.sh &
- start-swayidle.sh probes /proc/*/environ for a Wayland client's
  env (mako always has it) and exports WAYLAND_DISPLAY /
  DBUS_SESSION_BUS_ADDRESS / XDG_RUNTIME_DIR / DISPLAY if missing
  before exec'ing swayidle

Single source of truth + env restoration = click works on every box
that has the same Wayland-capable process tree (mako, swaybar, etc.),
no matter who/what is calling the script.

Verified on tadbit: pre-fix toggle off killed swayidle permanently.
Post-fix: toggle off restarts swayidle successfully, env inherited
from mako's /proc/PID/environ.
2026-06-23 21:51:09 -04:00
6644666cb1 Font install check: anchor to exact family 'Maple Mono NF'
The previous substring check (*"Maple Mono NF"* glob / grep -q substring)
matched 'Maple Mono NF CN' too, which silently skipped the Latin-only NF
install on boxes that had only the CJK variant installed (byte, kaiser —
they shipped with maple-font system package that defaults to NF CN).

Result: foot (and any other config asking for 'Maple Mono NF') silently
fell back to system sans on byte and kaiser, while looking like a
working terminal. Compounded by foot.ini asking for 'Maple Mono CN'
(see prior commit c6779c5), which masked the missing NF install on
miche (which has both CN and NF).

Fix: use fc-list : family | grep -qxF 'Maple Mono NF' which:
- prints one family per line (no style suffixes to confuse grep)
- -x anchors whole line
- -F fixed string (no regex)
- matches exactly 'Maple Mono NF' and nothing else

Why not fc-match? fc-match reports a substitute when the family isn't
installed (Noto/Liberation/DejaVu depending on distro), so it can't
distinguish 'NF installed' from 'NF not installed, fell back'.

Verified on byte: fc-list : family | grep -qxF 'Maple Mono NF' returns
1 (false) because byte has only 'Maple Mono NF CN', so the install will
now run on next chezmoi apply.
2026-06-23 20:31:33 -04:00
c6779c57ce foot.ini: fix Maple Mono CN -> Maple Mono NF (was rendering Liberation Sans)
The font= line referenced 'Maple Mono CN', the CJK variant from a separate
release zip we don't install. The repo only installs Maple Mono NF (Latin
Nerd Font variant from subframe7536/Maple-font).

foot silently falls back to the system sans font when the requested family
is missing, so on every box except miche foot was rendering Liberation Sans
(noto, dejavu, etc.) while looking like a working terminal. miche has both
CN and NF installed from prior tinkering, which is why it was the only
box where the bug was invisible.

Every other config in this repo (nvim, wofi, waybar, mako) already uses
'Maple Mono NF' correctly. Only foot had the wrong suffix.

Removed the 'Terminus:size=14' fallback — Terminus isn't installed either,
so it was dead weight that also triggered foot to fall through to system
default if Maple Mono CN failed to match.

Verified: fc-match 'Maple Mono NF' now returns MapleMono-NF-Regular.ttf on
tadbit (was: Liberation Sans).
2026-06-23 20:29:03 -04:00
c51dc864d8 README: document omp zai-coding provider quirk + models.yml encrypted
Explains why models.yml is in chezmoi (encrypted) and why the literal
Z.ai API key is in apiKey: rather than in zai.key — short version:
omp v16.1.16's built-in zai provider routes to /api/anthropic which
rejects Bearer auth, so a custom zai-coding provider is needed at
/api/coding/paas/v4 which does accept Bearer. The custom provider's
apiKey field requires a literal value, so the key is embedded in the
encrypted file. See references/omp-provider-secrets.md in the chezmoi
skill for the long version + verification commands.
2026-06-23 19:47:19 -04:00
3927acd64f Add run_onchange to chmod 600 ~/.omp/agent/models.yml
The encrypted models.yml is named private_encrypted_models.yml.age so
chezmoi *should* set 600 on decrypt, but on boxes where the file
already existed from a prior apply (before the rename), the perm stays
at umask default (644). This run_onchange script normalizes to 600.

Runs only when the script body changes (chezmoi hashes the rendered
content). On a fresh apply, it brings the perm to 600 once, then stays
silent on subsequent applies until the body changes again.
2026-06-23 19:45:03 -04:00
3c3fab709b omp models.yml: rename to private_ prefix (chmod 600 on decrypt) 2026-06-23 19:44:09 -04:00
5b6ae8aa86 Add encrypted omp models.yml with literal zai key (fix 401)
omp v16.1.16 hardcodes the built-in zai provider to
https://api.z.ai/api/anthropic (Anthropic-compatible endpoint) which
requires 'x-api-key' header. omp only sends 'Authorization: Bearer', so
the built-in zai provider always returns 401 on real Z.ai API keys.

The OpenAI-compatible endpoint https://api.z.ai/api/coding/paas/v4
accepts Authorization: Bearer and works fine. The user's existing
~/.omp/agent/models.yml defines a custom 'zai-coding' provider pointed at
this endpoint, but the apiKey field was set to 'ZAI_CODING_API_KEY' which
omp treats as a literal string (not an env var reference), so the request
was 'Authorization: Bearer ZAI_CODING_API_KEY' which 401s.

Fix: include the literal zai API key in the apiKey field. This is
identical to the existing encrypted zai.key secret (same key, decrypted
on apply). The encrypted file is in chezmoi so it stays encrypted at rest
and chmod 644 on disk — same perms as the existing zai.key.

Verified manually on byte before commit:
  omp --print --model zai-coding/glm-5.2:xhigh 'hi'
  → 'Hi! What can I help you with today?'
  (was: '401 token expired or incorrect')

After applying this commit on all boxes:
  omp --print --model zai-coding/glm-5.2:xhigh 'hi'
should work everywhere.
2026-06-23 19:38:51 -04:00
252f166f15 Gentoo user-packages: add omp install via bun (was missing)
The universal arch/debian scripts had omp install via 'bun add -g
@oh-my-pi/pi-coding-agent' for both OSes. The gentoo script was
missing this block entirely — only the universal's os_family guard
handled arch/debian. On tadbit this meant omp never got installed.

Fix: added an omp install block to the gentoo script after the bun
verification step. Same wrapping in a subshell for undervoltage
safety. Now all three OSes install omp the same way (via bun global).
2026-06-23 17:58:25 -04:00
620eb0c633 Gentoo font unzip: add -o flag to overwrite without prompting
The universal arch/debian script extracts to $USER_HOME/.local/share/
fonts/maple-mono-nf/ (a subdir, no conflicts). The gentoo script
extracts directly to $USER_HOME/.local/share/fonts/ which already
contains existing fonts. 'unzip' prompts on overwrite in interactive
mode; in a non-interactive chezmoi apply this stalls forever with
EOF/timeout. Adding -o flag makes it overwrite without prompting.

Caught during tadbit onboarding: extracted font dir had
MapleMono-NF-ExtraBoldItalic.ttf already (from a previous run);
the unzip prompted, hit EOF, and the script exited 1.
2026-06-23 17:54:27 -04:00
a4434a1f01 Gentoo emerge: use --autounmask-continue (auto-apply + continue)
--autounmask-write=y writes the unmask file but emerge still
aborts because CONFIG_PROTECT marks the file as needing manual
review. --autounmask-continue=y is the right flag — it writes the
unmask AND continues the merge without aborting.

Discovered via the 'Autounmask changes successfully written.' message
followed by an immediate abort. The error message about
'autounmask-write' was actually about re-running with that flag,
not about what happened.

Applied to all three emerge invocations (main + GURU + sway).
2026-06-23 17:51:56 -04:00
0460a8c653 Gentoo emerge: add --autounmask-write (the missing piece for ~amd64)
Discovered via man: --autounmask=y alone only DISPLAYS the needed
keyword changes and aborts. The actual write to /etc/portage/...
files requires --autounmask-write=y (or --autounmask-continue=y
which also auto-continues after writing). Without --autounmask-write,
every lazygit (and any other ~amd64-only GURU package) install
fails with:

  The following keyword changes are necessary to proceed:
  =dev-vcs/lazygit-0.62.2 ~amd64
  Use --autounmask-write to write changes to config files

Added to all three emerge invocations:
- run_once_20-install-user-packages-gentoo.sh.tmpl: main loop
- run_once_20-install-user-packages-gentoo.sh.tmpl: GURU loop
- run_once_40-install-sway-gentoo.sh.tmpl
2026-06-23 17:50:51 -04:00
6ec6958a73 Gentoo GURU emerge: add --autounmask=y to handle ~amd64 keyword
The GURU emerge in run_once_20-install-user-packages-gentoo.sh.tmpl
was missing --autounmask=y (only had --autounmask-license=y). Same
fix as the main pkg loop: GURU packages like dev-vcs/lazygit are
~amd64-only and need the keyword unmask to be auto-written.

Symptom: 'The following keyword changes are necessary to proceed:
=dev-vcs/lazygit-0.62.2 ~amd64' even though --autounmask=y was
already on the main pkg loop. Fix: add the same flag to the GURU loop.
2026-06-23 17:49:37 -04:00
598ad9dfae Gentoo: add --autounmask=y to handle ~amd64 keyword unmask
lazygit and most GURU packages are ~amd64 only. Without --autounmask=y,
emerge fails with: =dev-vcs/lazygit-0.62.2 ~amd64 required.

Applied to run_once_20-install-user-packages-gentoo.sh.tmpl and
run_once_40-install-sway-gentoo.sh.tmpl.
2026-06-23 17:01:44 -04:00
03338d1f39 Gentoo user-packages: skip package if binary exists but not in portage
Some packages on tadbit have binaries installed OUTSIDE portage
(bat was installed by cargo earlier; eza/fd from a previous run
that the script didn't track). qlist -I correctly reports them as
not-in-portage, but command -v <bin> finds them on PATH.

Without this guard, every apply would re-emerge these packages,
causing spurious failures (e.g. 'there are no ebuilds to satisfy
app-text/bat' even though /usr/bin/bat works fine).

The detection now does:
  1. If qlist reports the package is in portage: skip
  2. If the binary is on PATH: log + skip
  3. Otherwise: add to MISSING_PKGS

Same fix applied to the GURU_MISSING detection.
2026-06-23 16:55:16 -04:00
94d3c0ebaf Gentoo user-packages: use qlist for missing-detect (handles non-binary pkgs)
The previous missing-detect used 'command -v <basename>' which
fails for packages that don't ship a binary of the same name
(zsh-completions installs /usr/share/zsh files, not
/usr/bin/zsh-completions). After the previous run installed these
packages, the next apply falsely reported them as missing and
tried to re-install them.

Switch to qlist -I which correctly reports whether a package is
in the installed-db. qlist is from app-portage/gentoolkit which
is already installed on gentoo. Fall back to equery, then to
the basename check, in case qlist is missing.
2026-06-23 16:47:11 -04:00