Commit Graph

1623 Commits

Author SHA1 Message Date
fdd5c5fba0 gitea: hide actions when not logged in
All checks were successful
Build and Deploy / mreow (push) Successful in 56s
Build and Deploy / yarn (push) Successful in 52s
Build and Deploy / muffin (push) Successful in 1m1s
2026-04-22 21:23:47 -04:00
d00ff42e8e site-config: dedupe cross-host values, fix stale dark-reader urls, drop desktop 1g hugepages
new site-config.nix holds values previously duplicated across hosts:
  domain, old_domain, contact_email, timezone, binary_cache (url + pubkey),
  dns_servers, lan (cidr + gateway), hosts.{muffin,yarn} (ip/alias/ssh_host_key),
  ssh_keys.{laptop,desktop,ci_deploy}.

threaded through specialArgs on all three hosts + home-manager extraSpecialArgs +
homeConfigurations.primary + serverLib. service-configs.nix now takes
{ site_config } as a function arg and drops its https namespace; per-service
domains (gitea/matrix/ntfy/mollysocket/livekit/firefox-sync/grafana) are
derived from site_config.domain. ~15 service files and 6 vm tests migrated.

breakage fixes rolled in:
 - home/progs/zen/dark-reader.nix: 5 stale *.gardling.com entries in
   disabledFor rewritten to *.sigkill.computer (caddy 301s the old names so
   these never fired and the new sigkill urls were getting dark-reader applied)
 - modules/desktop-common.nix: drop unused hugepagesz=1G/hugepages=3
   kernelParams (no consumer on mreow or yarn; xmrig on muffin still reserves
   its own via services/monero/xmrig.nix)

verification: muffin toplevel is bit-identical to pre-refactor baseline.
mreow/yarn toplevels differ only in boot.json kernelParams + darkreader
storage.js (nix-diff verified). deployGuardTest and fail2banVaultwardenTest
(latter exercises site_config.domain via bitwarden.nix) pass.
2026-04-22 20:48:29 -04:00
8cdb9c4381 yarn: improve pull-update-apply script
Some checks failed
Build and Deploy / mreow (push) Successful in 2m3s
Build and Deploy / yarn (push) Successful in 1m3s
Build and Deploy / muffin (push) Failing after 28s
2026-04-22 20:11:22 -04:00
3902ad5de3 yarn: fix jovian-stubs
Some checks failed
Build and Deploy / mreow (push) Successful in 1m9s
Build and Deploy / yarn (push) Successful in 4m36s
Build and Deploy / muffin (push) Failing after 33s
2026-04-22 19:54:00 -04:00
0538907674 yarn: simplify stubs
Some checks failed
Build and Deploy / mreow (push) Successful in 41s
Build and Deploy / yarn (push) Failing after 1m8s
Build and Deploy / muffin (push) Failing after 1m39s
2026-04-22 19:44:53 -04:00
90ce41cd9e gitea: move gitea-runner user declaration to actions-runner.nix
Some checks failed
Build and Deploy / mreow (push) Successful in 55s
Build and Deploy / yarn (push) Failing after 58s
Build and Deploy / muffin (push) Has started running
2026-04-22 19:24:18 -04:00
1be21b6c52 split off terminal utilities 2026-04-22 18:45:00 -04:00
c3cc94a305 merge common-*.nix files
Some checks failed
Build and Deploy / mreow (push) Successful in 1h37m19s
Build and Deploy / muffin (push) Has been cancelled
Build and Deploy / yarn (push) Has been cancelled
2026-04-22 18:02:05 -04:00
3317ac7997 update 2026-04-22 17:43:05 -04:00
6ad25c0e49 Revert "kernel: add the penguins" (didn't work)
This reverts commit 9ed48ce841.
2026-04-22 17:41:21 -04:00
d5e6908899 kernel: force amdgpu init on boot
Some checks failed
Build and Deploy / mreow (push) Successful in 1h38m1s
Build and Deploy / yarn (push) Successful in 1m2s
Build and Deploy / muffin (push) Failing after 28s
2026-04-22 15:43:37 -04:00
9ed48ce841 kernel: add the penguins 2026-04-22 15:36:00 -04:00
d8a218524a kernel: disable more things
Some checks failed
Build and Deploy / yarn (push) Has been cancelled
Build and Deploy / muffin (push) Has been cancelled
Build and Deploy / mreow (push) Has been cancelled
2026-04-22 15:32:16 -04:00
f03cc87fc9 update senior project website
All checks were successful
Build and Deploy / mreow (push) Successful in 28s
Build and Deploy / yarn (push) Successful in 9s
Build and Deploy / muffin (push) Successful in 1m19s
2026-04-22 13:10:26 -04:00
0c8b8232c2 yarn: disable steamos-mandatory-update
All checks were successful
Build and Deploy / mreow (push) Successful in 52s
Build and Deploy / yarn (push) Successful in 4m33s
Build and Deploy / muffin (push) Successful in 1m10s
2026-04-22 11:46:37 -04:00
a780c5505a update
Some checks failed
Build and Deploy / mreow (push) Successful in 1h39m40s
Build and Deploy / yarn (push) Successful in 4m26s
Build and Deploy / muffin (push) Failing after 5m12s
2026-04-22 09:16:09 -04:00
b21bb3b33b deploy guard: expose binary
All checks were successful
Build and Deploy / mreow (push) Successful in 1m21s
Build and Deploy / yarn (push) Successful in 45s
Build and Deploy / muffin (push) Successful in 1m26s
2026-04-22 07:28:56 -04:00
b0b4bcb0b3 deploy guard: fix actions
Some checks failed
Build and Deploy / mreow (push) Successful in 2m8s
Build and Deploy / yarn (push) Successful in 1m2s
Build and Deploy / muffin (push) Failing after 27s
2026-04-22 01:18:09 -04:00
aef99e7365 deploy-guard: block activation while users are online
Some checks failed
Build and Deploy / mreow (push) Successful in 51s
Build and Deploy / yarn (push) Successful in 47s
Build and Deploy / muffin (push) Failing after 1m9s
- modules/server-deploy-guard.nix: extendable aggregator registered via
  services.deployGuard.checks.<name>.{description,command}. Installs
  deploy-guard-check with per-check timeout, pass/block reporting, JSON
  output, DEPLOY_GUARD_BYPASS / /run/deploy-guard-bypass (single-shot).
- services/jellyfin/jellyfin-deploy-guard.nix: curl+jq on /Sessions,
  blocks when any session carries NowPlayingItem; soft-fails when unreachable.
- services/minecraft-deploy-guard.nix: mcstatus SLP query on 25565, blocks
  when players.online > 0; soft-fails when unreachable.
- flake.nix: wrap deploy.nodes.muffin activation with activate.custom so
  deploy-guard-check runs before switch-to-configuration. Auto-rollback
  catches the failure. dryActivate/boot branches preserved.
- deploy.sh: SSH preflight for ./deploy.sh muffin with --force /
  DEPLOY_GUARD_FORCE=1 (touches remote bypass marker). Connectivity
  failure is soft; activation still enforces.
- tests/deploy-guard.nix: aggregator contract, bypass mechanics, timeout,
  JSON output.
2026-04-22 00:36:21 -04:00
ddac5e3f04 jellyfin-annotations: preserve state on grafana failure, add grace period
Three edge cases broke annotations on reboot or interrupted sessions:

- state.pop() ran before grafana_close(), so a failed PATCH (Grafana
  still restarting after reboot) permanently lost the grafana_id and
  left the annotation open forever in Grafana.
- a single poll with no sessions closed every active annotation, so
  Jellyfin restarts or client reconnects produced spurious close +
  duplicate-open pairs.
- timeEnd was always now_ms, so a reboot during playback wrote an
  annotation reading as if the user watched through the outage.

Fix: track last_seen_ms and missing_count in state; retain entries
until grafana_close succeeds (retry indefinitely); require
MISSING_THRESHOLD absent polls before close; clamp close_time to
last_seen_ms + (MISSING_THRESHOLD + 1) * POLL_INTERVAL.

Adds three subtests in tests/jellyfin-annotations.nix that each fail
on the old code and pass on the new.
2026-04-22 00:35:26 -04:00
a228f61d34 systemd: patch freezer stuck-state on kill-while-frozen
Reset u->freezer_state to FREEZER_RUNNING when a unit transitions to
inactive/failed. Without this, any SIGKILL path to a frozen unit
(systemctl kill, OOM, watchdog SIGABRT-then-KILL, segfault) leaves
the unit stranded at FreezerState=frozen with no recovery short of
a reboot. Complements upstream PR #38528 which covers only the
watchdog path.

xmrig-auto-pause never calls `systemctl freeze` itself (direct
cgroup.freeze writes bypass the bug class entirely), so the patch
is defensive: benefits systemd-homed on lock, user-session freezing
on suspend, or anything else that may freeze units on muffin.

Patching systemd cascades udev-check-hook hash changes into fuse3 -->
e2fsprogs and into fish. Two test-suite workarounds ride along:
drop e2fsprogs m_hugefile (4 GiB sparse file, fails on some build
sandboxes) and fish doCheck=false (cargo pexpect TTY tests). Both
are environmental, unrelated to the patch.
2026-04-21 23:52:36 -04:00
018b590e0d xmrig-auto-pause: use cgroup.freeze and thaws 2026-04-21 14:30:03 -04:00
a8cf95c7dd soulseek: only retain cache for 1 day
All checks were successful
Build and Deploy / mreow (push) Successful in 1m53s
Build and Deploy / yarn (push) Successful in 42s
Build and Deploy / muffin (push) Successful in 1m18s
2026-04-21 12:56:46 -04:00
e8e3174420 remove timeout stop sec for qbt
All checks were successful
Build and Deploy / mreow (push) Successful in 2m22s
Build and Deploy / yarn (push) Successful in 2m19s
Build and Deploy / muffin (push) Successful in 1m59s
2026-04-20 22:19:24 -04:00
c3d934867c qbt: enbiggen aggregation of reads
Some checks failed
Build and Deploy / mreow (push) Successful in 1m14s
Build and Deploy / yarn (push) Successful in 40s
Build and Deploy / muffin (push) Failing after 3m29s
2026-04-20 22:01:25 -04:00
41efc1f061 update
Some checks failed
Build and Deploy / mreow (push) Successful in 2h15m30s
Build and Deploy / yarn (push) Successful in 2m33s
Build and Deploy / muffin (push) Failing after 3m20s
2026-04-20 17:26:53 -04:00
b99a039ab0 tests: move fail2ban tests into subdirectory 2026-04-20 17:25:45 -04:00
9ddef4bd54 llama.cpp: fail2ban for invalid api keys 2026-04-20 17:20:52 -04:00
b1c3914b8f tests: fix service-configs.nix reference 2026-04-20 15:24:21 -04:00
adbb019977 gitea: move runner and main module to services/gitea 2026-04-20 15:18:37 -04:00
5232211c0a update
All checks were successful
Build and Deploy / mreow (push) Successful in 11m39s
Build and Deploy / yarn (push) Successful in 58s
Build and Deploy / muffin (push) Successful in 1m58s
2026-04-19 20:35:52 -04:00
0a873e8eaa AGENTS.md: nit, wording 2026-04-18 02:03:05 -04:00
primary
3953fd92df readme: bring back the fun 2026-04-18 01:56:35 -04:00
primary
25d6e7eead phase 6: remove legacy git-crypt-key-{dotfiles,server-config} agenix entries
All checks were successful
Build and Deploy / mreow (push) Successful in 1m42s
Build and Deploy / yarn (push) Successful in 45s
Build and Deploy / muffin (push) Successful in 1m10s
Unified CI on nixos repo is proven end-to-end (CI run on 836f80a deployed to
muffin successfully and yarn's pull URL now serves from the new build). The
two per-repo git-crypt keys are no longer in use by any active pipeline.
Old dotfiles and server-config repos had Gitea Actions disabled before this
commit, so no CI race possible.
2026-04-18 01:37:14 -04:00
primary
7ef4e5a68f trigger first ci run
All checks were successful
Build and Deploy / mreow (push) Successful in 41s
Build and Deploy / yarn (push) Successful in 52s
Build and Deploy / muffin (push) Successful in 1m14s
2026-04-18 01:32:02 -04:00
primary
836f80a011 scripts/cutover-muffin.sh: pre-seed nix-deploy + deploy + verify
Some checks failed
Build and Deploy / yarn (push) Has been cancelled
Build and Deploy / muffin (push) Has been cancelled
Build and Deploy / mreow (push) Has been cancelled
Bundles Phases 5.5 + 6.2 + 6.3 into one invocation. Order-sensitive: pre-seed
must happen BEFORE the deploy-rs run so yarn's pull-update URL stays resolvable
across the harmonia /var/lib/dotfiles-deploy \u2192 /var/lib/nix-deploy rename.
2026-04-18 01:17:02 -04:00
primary
c7712e57ff phase 5: add git-crypt-key-nixos agenix entry (additive)
The two legacy entries git-crypt-key-{dotfiles,server-config} stay until
muffin has deployed this config at least once and the new CI pipeline is
green. Phase 6 removes them after cutover.
2026-04-18 01:14:09 -04:00
primary
efa1fb0c07 phase 5: git-crypt re-init + re-encrypt secrets/ under new unified key
- .gitattributes declares secrets/** covered by git-crypt filter
- New symmetric key at $HOME/.nixos-git-crypt.key (chmod 400, not committed)
- All 36 files under secrets/ re-encrypted via the clean filter on 'git add':
  - 5 files in secrets/desktop/ (wifi, secureboot, disk pw, cache netrc, hash)
  - 3 files in secrets/home/ (hm api keys + steam id)
  - 26 files in secrets/server/ (.age + .nix + .tar + livekit_keys)
  - 2 files in secrets/usb-secrets/ (agenix identity)

'git-crypt status' confirms 36 encrypted, 150 non-encrypted.

Old git-crypt keys from the two subtree-merged repos are in the historical subtree commits (pre-Phase 2). To decrypt pre-unify history one still needs the old GPG-encrypted keys, which survive at:
  ~/nixos-migration-aux-*.tar.gz
2026-04-18 01:12:38 -04:00
primary
ba48d223c2 harmonia: /var/lib/dotfiles-deploy → /var/lib/nix-deploy
URL contract (https://nix-cache.sigkill.computer/deploy/<host>) is preserved;
only the on-disk Caddy root and the tmpfiles directory change. Phase 6 seeds
/var/lib/nix-deploy/ from the old path before deploying the new config, so the
pull-update on yarn stays working across the cutover.
2026-04-18 01:09:15 -04:00
primary
01de310296 phase 4: unified CI workflow, deploy.sh wrapper, root AGENTS.md
- .gitea/workflows/deploy.yml: three jobs (mreow, yarn, muffin) sharing a single git-crypt unlock step. muffin job retains the healthcheck + ntfy success/failure notifications from the old server-config pipeline verbatim.
- CI writes to /var/lib/nix-deploy/ (renamed from /var/lib/dotfiles-deploy/). The URL path /deploy/<host> is preserved; only the on-disk directory name changes. Harmonia's Caddy root is updated in Phase 6.
- deploy.sh: inspects hostname, dispatches to nixos-rebuild for desktops or deploy-rs for muffin. Accepts boot/switch/test/build/muffin.
- AGENTS.md: intersected rules from both repos, split into host-agnostic conventions + muffin-specific service pattern. Rewritten layout section reflects the new tree.
2026-04-18 01:07:56 -04:00
primary
3150d29e1a phase 3: delete legacy/ subtree workspaces
Histories remain reachable via the subtree merge commits (dc481c2, 6448a04).
The old flake.nix, flake.lock, AGENTS.md, .gitea/, and .gitattributes are
superseded by the unified versions at the repo root.
2026-04-18 01:05:45 -04:00
primary
56bcaf0580 nix fmt: wrap long expression in yarn home 2026-04-18 01:05:29 -04:00
primary
97ab8bffc0 phase 3: generate flake.lock; fix desktop-networkmanager wifi path
Secret plaintext sits in working tree for Phase 3 eval only; Phase 5 re-encrypts
under the new unified git-crypt key.
2026-04-18 01:05:08 -04:00
primary
1719d54ee0 phase 3: new flake.nix + extract common-{nix,doas,shell-fish}; rewire imports
- New unified flake with two nixpkgs channels (unstable for desktops, 25.11 for muffin)
- modules/common-{doas,shell-fish,nix}.nix extracted from duplicated blocks
- modules/desktop-common.nix: renamed from system/common.nix; secret paths point to secrets/desktop/
- hosts/{mreow,yarn}/default.nix import desktop-common; yarn imports modules/no-rgb.nix
- hosts/muffin/default.nix imports common-* + server-prefixed modules + services/; duplicate doas/fish/nix blocks removed; gc retention preserved as mkForce override
- modules/age-secrets.nix: file paths → ../secrets/server/*.age
- services/{minecraft,matrix/livekit}: secret paths → ../secrets/server/
- home/profiles/*.nix: ./progs/ → ../progs/
- hosts/{mreow,yarn}/home.nix: imports rewired to ../../home/profiles/ and ../../home/progs/
- home/progs/pi.nix and hosts/yarn/home.nix: secret reads → ../../secrets/home/
- tests/*.nix: ../modules/security.nix → ../modules/server-security.nix; ../modules/overlays.nix → ../lib/overlays.nix
- lib/default.nix: takes explicit lib param (defaults to nixpkgs-stable.lib)
2026-04-18 00:58:55 -04:00
primary
05fd05deda phase 2: move secrets → secrets/{desktop,home,server,usb-secrets}/ 2026-04-18 00:48:18 -04:00
primary
d13cec76ba phase 2: move home-manager/ → home/{profiles,progs,util,wallpaper} 2026-04-18 00:48:08 -04:00
primary
30d8cf4c99 phase 2: move modules/ (server-*, desktop-*, shared); drop dotfiles no-rgb (superseded) 2026-04-18 00:47:56 -04:00
primary
999ed05d9f phase 2: promote services/, tests/, patches/, lib/, scripts/ 2026-04-18 00:47:39 -04:00
primary
99e98e39b7 phase 2: move host files to hosts/{mreow,yarn,muffin}/ 2026-04-18 00:47:25 -04:00
primary
6448a0427f Add 'legacy/server-config/' from commit '4bc5d57fa69a393877e7019d7673ceb33c3ab4b4'
git-subtree-dir: legacy/server-config
git-subtree-mainline: dc481c24b0
git-subtree-split: 4bc5d57fa6
2026-04-18 00:45:33 -04:00