Commit Graph
100 Commits
Author SHA1 Message Date
Ryan Yin b4dae701d4 chore: upgrade vinput 2026-10-15 10:16:31 +08:00
Ryan Yin c888dd65e9 fix(justfile): build colmena deploys on the target host
A deploy from an aarch64 machine built the x86_64 system locally and died on the first platform-specific derivation; colmena 0.5.0 can build on the target instead.

Assisted-by: DeepSeek Harness (deepseek-flash)
2026-10-14 20:15:01 +08:00
Ryan Yin 492dcb13fe fix(ai): match the wired NIC by prefix, not by name
Assisted-by: DeepSeek Harness (deepseek-flash)
2026-10-14 20:15:01 +08:00
Ryan Yin 55b7741108 refactor(ai): return ai to the MSI MAG B760M MORTAR and the RTX 4090
The second NVMe and its LUKS volume leave with the Z890 board, so the data-disk disko module is deleted; `ai` must activate this change before the disk is pulled, or its initrd blocks on the missing volume.

Assisted-by: DeepSeek Harness (deepseek-flash)
2026-10-14 20:15:01 +08:00
Ryan Yin 72a7a2ae88 feat(aquamarine): revive aquamarine as a two-GPU inference host
The Z890 board and its root SSD move here from `ai`, and the retired VM's name and 192.168.5.101 are reused.

Assisted-by: DeepSeek Harness (deepseek-flash)
2026-10-14 20:15:01 +08:00
Ryan Yin 9c84636f10 fix(shoukei): pick up Asahi U-Boot DTC fix
Assisted-by: DeepSeek Harness (gpt-6-sol)
2026-10-14 18:34:48 +08:00
Ryan Yin b24f30c38c fix(shoukei): route DNS through the mihomo TUN
Assisted-by: DeepSeek Harness (gpt-6-astra)
2026-10-14 18:34:48 +08:00
Ryan Yin 7c09a1d082 fix(mihomo): force TUN v6 up so a cold boot keeps IPv6
Without it mihomo skips the TUN's v6 half when no NIC has an IPv6 address at startup, yet still installs its strict-route v6 blackhole, which locks the host out of IPv6.

Assisted-by: DeepSeek Harness (qwen3.8-flash-iq3s-text)
2026-10-10 21:27:45 +08:00
Ryan Yin 0041afc2e7 fix(hosts): drop the legacy ctx7 preservation entry
The ctx7 login still lives in the old directory; activation without moving it loses the login.

Assisted-by: DeepSeek Harness (qwen3.8-flash-iq3s-text)
2026-10-10 19:58:33 +08:00
Ryan Yin 648e375b88 test(agents): add git-delivery fixtures and an A/B run
Assisted-by: DeepSeek Harness (claude-opus-5-5, deepseek-flash, gpt-6.1-sol, gpt-6-luna)
2026-10-10 19:49:45 +08:00
Ryan Yin 7bba1abbc9 feat(agents): cap delivery text and shorten git-delivery
Assisted-by: DeepSeek Harness (claude-opus-5-5, deepseek-flash, qwen3.8-flash-next iq3, gpt-6.1-sol, gpt-6-luna)
2026-10-10 19:49:44 +08:00
Ryan Yin a100790ff2 feat(agents): require self-explaining artifacts and readable brevity
Assisted-by: DeepSeek Harness (qwen3.8-flash-next iq3, gpt-6.1-sol, gpt-6-luna)
2026-10-10 19:49:44 +08:00
Ryan Yin 0e70582642 docs(agents): convert prose tables to grouped lists
Assisted-by: DeepSeek Harness (claude-opus-5-5, qwen3.8-flash-next iq3)
2026-10-10 19:49:44 +08:00
Ryan Yin d808dd914d docs(agents): correct rule boundaries and eval scenarios
Assisted-by: DeepSeek Harness (claude-opus-5-5, deepseek-flash, qwen3.8-flash-next iq3)
2026-10-10 19:49:44 +08:00
Ryan Yin 7b21ea5adb feat(agents): rewrite find-docs onto the nixpkgs ctx7 CLI
Assisted-by: DeepSeek Harness (claude-opus-5-5, deepseek-flash, qwen3.8-flash-next iq3)
2026-10-10 19:49:44 +08:00
Ryan Yin 3b63028a05 fix: repair skill frontmatter and cap commit message length 2026-10-10 09:02:08 +08:00
Ryan Yin d64f9c71f1 fix(typos): keep wluma's als key and fix a flagged typo
The pre-commit hook runs typos with write = true, so the next edit to wluma.nix would silently rename wluma's ambient-light-sensor keys to also.
2026-10-10 08:42:38 +08:00
Ryan Yin 5a4a1d0c20 fix(darwin): run the rollback as root
darwin-rebuild rejects switch, activate, rollback and check unless it runs as
root, so the recipe could only ever print an error.
2026-10-10 08:42:38 +08:00
Ryan Yin 8843df1508 docs: correct stale claims found while reviewing the skills
No host defines a *-nixos-tests output; the pod firewall drops 5900-5903
from pod sources; the mihomo core keeps geodata and cache in its
StateDirectory; WA-020 was used twice and the cited WA-028 had no row.
2026-10-10 08:42:38 +08:00
Ryan Yin 60b80e64c8 fix(microvm): restart the guest unit on the physical host to deploy
microvm.nix's sshSwitch step runs nix-store --load-db against the guest's
read-only virtiofs /nix/store and dies there, so the recipe installs the
runner on the physical host and restarts microvm@<guest> instead.
2026-10-10 08:42:38 +08:00
Ryan Yin a2cfa5549c fix(skills): correct stale guidance and widen task triggers 2026-10-10 08:42:38 +08:00
Ryan Yin 2d07dc8da5 docs(agents): close rule gaps behind repeated corrections
Clause-level extensions only, no new sections. Publishing gains modals in both directions: the old sentence read as forbidding pushes to the user's own private repositories while leaving the disclosure direction a preference. The diagnosis scenario moves to Smoke because a cross-cutting rule has no area for the Extended trigger to select, and the guide separates cheap checks from behavioral runs so a modal-only edit does not cost a scenario suite.
2026-10-10 08:42:38 +08:00
Ryan Yin 3b2c328fd2 docs(idols-ai): mark the mixed-memory settings as daily-use verified 2026-10-10 07:19:45 +08:00
Ryan Yin bee8d5449f fix(ssh): prevent GitHub IPv6 regression
Restore the IPv4 pin removed by 1e6702db (feat(mihomo): answer AAAA and keep the tailnet off the TUN). Fake IPv6 SSH connections can authenticate and then hang.
2026-10-10 00:19:35 +08:00
Ryan Yin c3f72689d3 feat(darwin): start terminals fullscreen 2026-10-10 00:10:38 +08:00
Ryan Yin 7b1b8f6382 docs(agents): require per-push confirmation for default branches 2026-10-09 23:40:56 +08:00
Ryan Yin 2d2f2ca7c6 docs(agents): make concision and pre-publish scan rules enforceable 2026-10-09 23:31:48 +08:00
Ryan Yin dbe0f73ed5 feat(agents): link the global rules into dsh too
dsh reads ~/.dsh/AGENTS.md, plus ~/.agents/AGENTS.md from 0.2.1-alpha.2;
identical content renders once.
2026-10-09 22:53:46 +08:00
Ryan Yin c102e2489d fix(mihomo): name the Singapore nodes instead of matching 新
The single-char keyword also matched 新西兰, so the Singapore group held a New
Zealand node and url-test flipped the exit country mid-session.
2026-10-09 18:34:48 +08:00
Ryan Yin 5a6cdf63ac feat(mihomo): sniff on the gateway, not on the desktop
LAN clients using DoH dial the IPs they resolved, and a node may not reach an IP a
foreign resolver handed out. The gateway recovers the name from the handshake; on the
desktop the fake-ip table already names every flow. Its binary is a static release
build, not a package: update it by hand and validate the live config with the new core.
2026-10-09 18:34:48 +08:00
Ryan Yin 7a4f62383f fix(mihomo): keep the fake IPv6 pool out of fc00::/7
The v6 fake pool is a lookup key, not the egress path, so it can be a public range: the
shipped ULA default reads as "local" to browsers and prompts for local-network access on
every site. The gvisor stack override goes with it -- mips is upstream's default, and
nftables rules out the kernel stack here.
2026-10-09 18:34:04 +08:00
Ryan Yin d9714337f3 feat(mihomo): generate the config from the repo, not a copy in the live dir
`just mihomo-gen` runs generate.nu from the module and validates with the core
the service runs. ~/.config/mihomo keeps only sources.yaml and config.yaml.
2026-10-09 18:34:04 +08:00
Ryan Yin 1e6702db2c feat(mihomo): answer AAAA and keep the tailnet off the TUN
fake-ip needs one pool per family, and the family a client picks does not pick the
egress family. Exclude the cluster ULA and the Tailscale ranges from the TUN; the ssh
pin and the WA-028 record cover the fake-AAAA stall.
2026-10-09 18:34:04 +08:00
Ryan Yin 9cf0a92a30 fix(microvm): pin guest IPv6 identity to a cluster ULA
The ISP retires delegated prefixes, so a guest that registers its WAN prefix
loses it and Cilium never refreshes the node address. Derive the identity from
the IPv4 octets inside fd05:5::/64 and trust that ULA in the guest firewall.
2026-10-09 18:30:13 +08:00
Ryan Yin 4c165ad7da docs(agents): prefer E2E verification of real workflows 2026-10-09 15:58:36 +08:00
Ryan Yin fe302fa950 docs(idols-ai): record overnight mixed-memory voltage tests 2026-10-09 07:44:51 +08:00
Ryan Yin 841214c325 docs(idols-ai): summarize mixed-memory voltage tests
Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2026-10-09 00:30:15 +08:00
Ryan Yin dd46fb3fb2 docs(agents): clarify credential boundaries and rule maintenance 2026-10-08 23:45:47 +08:00
Ryan Yin 19b9aff7bf fix(tuios): handle stopped daemon during shell startup 2026-10-08 23:39:38 +08:00
Ryan Yin 9ba2cf5229 chore: pin tuios to v0.9.0; require pinned third-party inputs 2026-10-08 15:47:20 +08:00
Ryan Yin 0b29b15697 feat: add nh 2026-10-08 09:44:19 +08:00
Ryan Yin e9d706aa96 fix(apparmor): correct the sudo profile comment's conclusion
The abort needs havePrivateMountNs == false AND /nix/store still ro:
remountReadOnlyWritable() returns early while the store is writable. Nix
<= 2.34 left it rw until reboot; 2.35 remounts in a private namespace, so
only a freshly booted host hits it. The repro command also uses an open-only
exec 7<..., since cat fails on the read even when the open succeeds.

While here, trim the comments and drop the disabled default_deny/nix
policies plus the explicit killUnconfinedConfinables=false (nixpkgs
default). 82 -> 34 lines.
2026-10-07 20:22:43 +08:00
Ryan Yin 124bcd8490 docs: drop the stale "just test exit code" caveat
`just test` has enforced the suite result since #350: the recipe raises unless
`evalTests` is `true`, so a zero exit already means pass. Update the places that
still described the old raw-`nix eval` behaviour: AGENTS.md, README.md,
SECURITY.md, outputs/README.md, and the nix-config-debug / nix-config-new-host /
nix-config-update skills.

The exit-0 caveat is kept only where the raw `nix eval .#evalTests` command is
documented, because that command genuinely exits 0 even on `false`.
2026-10-07 19:54:32 +08:00
Ryan Yin 0d800c4d9c fix(apparmor): attach disconnected paths in the sudo profile
Nix 2.35's root nix-env -- used by nixos-rebuild to set the system profile --
calls saveMountNamespace(), which opens /proc/self/ns/mnt before remounting
the read-only /nix/store writable. Those magic links have no connected path,
so AppArmor cannot match them against any rule and denies the open with
EACCES even in complain mode. The private mount namespace is then never
created and nixos-rebuild aborts with:

  cannot remount "/nix/store" writable: not in a private mount namespace

Adding flags=(attach_disconnected) lets AppArmor re-root those paths on / so
the existing `file /**` rule matches. This also fixes any other sudo'd tool
that needs namespaces (unshare, nsenter, bwrap, ...).

Rolling this out to a host that already has the old profile loaded needs one
deploy with --no-reexec, so the current system's Nix performs nix-env --set
instead of the new system's; after that generation is active, plain
`just niri` works and the Nix version is never rolled back.
2026-10-07 19:39:42 +08:00
Ryan Yin 94312fc2e5 ci: bound and retry the Gitee mirror push
Gitee's SSH gateway intermittently accepts the connection and key, then never
answers the initial git-receive-pack and drops the session ~100s later with
"the remote end hung up upon initial contact". The same failure mode shows up
sporadically since 2026-10-02 and spiked on 2026-10-07 (9 of 14 runs failed).

Bound each push attempt with `timeout`, retry up to six times with exponential
backoff, and add ssh connect/keepalive timeouts. Serialize runs (a push to main
and a tag on the same commit used to race for Gitee's per-repo push lock), cap
the job at 30 minutes, and allow manual workflow_dispatch reruns.
2026-10-07 19:02:46 +08:00
Ryan Yin 13fe324507 refactor(nixpkgs): drop the repo-wide pkgs-x64 package set
Every remaining pkgs-x64 consumer runs only on x86_64-linux hosts, where the
native pkgs already carries the same allowUnfree config
(modules/nixos/base/nix.nix) and overlays (modules/base/overlays.nix), so
replace the references with pkgs and drop the extra nixpkgs instantiation
(which also removes an eval on aarch64-darwin).

media.nix keeps the native Zoom app on x86_64 hosts only, since zoom-us has
no aarch64 Linux build.
2026-10-07 15:56:58 +08:00
Ryan Yin 3e4e093869 feat(shoukei): run x86/x86_64 apps and games via muvm+FEX
Apple Silicon's 16K pages mean FEX cannot run natively and qemu-user cannot
run complex x86_64 binaries. Wire the maintained rowanG077/nix-x86-on-aarch64
runtime (FEX inside a 4K muvm microVM) into shoukei so games, Steam, Wine and
other x86/x86_64 programs work, and let the module own the x86 ELF handlers
instead of qemu-user.

The input is pinned to our fork (ryan4yin/nix-x86-on-aarch64) at the reviewed
commit. Dropping boot.binfmt.emulatedSystems also removes x86_64 from
nix.settings.extra-platforms, so the qemu-user/uncached-x86-build gap is
recorded as WA-022.

- flake.nix: add nix-x86-on-aarch64 input (WA-021)
- hosts/12kingdoms-shoukei/game/: programs.x86-on-arm + steam/wine, 6 GiB VM
- hardware-configuration.nix: drop emulatedSystems/preferStaticEmulators
- apple-silicon.nix: drop the now-redundant box64
- docs: WA-012 resolved; WA-021 and WA-022 added; host README updated
2026-10-07 15:55:55 +08:00
Ryan Yin fabccbafda fix(monitoring): ignore openapi discovery in apiserver latency alert
KubernetesApiServerLatency fired continuously on the p99 of
apiserver_request_duration_seconds_bucket. Every firing series was
verb="GET", subresource="openapi/v3" (kubelet, kube-controller-manager,
kube-scheduler, apiserver) at ~8s, while real verbs (POST/LIST/DELETE)
stay around 0.2s.

openapi/v3 is a streaming discovery endpoint, like WATCH, so exclude
subresource=~"^openapi/" from the rule.
2026-10-07 13:21:43 +08:00
Ryan Yin a7cc474a50 docs(hosts): update the idols-ai memory notes for 1.28 V
The bring-up runs at the default 1.25 V; afterwards Gear mode is set to
Gear2 and VDD/VDDQ are raised to 1.28 V, changing nothing else. 1.29 V and
up do not train. Also record that the 1.25 V config passed stressapptest
but still hard-froze under a real llama.cpp load, so a passing test is not
proof of stability.
2026-10-07 07:38:52 +08:00
Ryan Yin a091fe1aca docs(hosts): refresh the ai screenshots and correct its hardware notes
- replace the btop screenshot with the 2026-10-06 annotated capture
  (btop + fastfetch + the strata/llama.cpp serving logs); the old
  2026-10-01 file is gone, so the README link moves to the new name
- drop the Helix/AI-agents screenshot and its README reference
- fix stale hardware descriptions: the hosts/README.md inventory row and
  the idols-ai header comment still said i5-13600KF, and the zswap pool
  comment sized its percentages against the old 96G of RAM (now 128G)
- record the hardware history: the platform was rebuilt on 2026-04-27
  (PR #257/#258) onto the Colorful CVN Z890 ARK FROZEN + Core Ultra 7
  270K Plus, replacing the MSI board and i5-13600KF the host was added
  with in 2023-05; the 2x48G kit predates that rebuild, the 2x16G kit
  was added 2026-10-06
- make the DIMM bring-up order mandatory and record its failure mode:
  with the 48G pair in first, or all four DIMMs from the start, the
  board does not POST
- gloss the Chinese BIOS labels in English, marked as translations of
  the labels rather than the firmware's own English wording

Left alone on purpose: the 96G swapfile in hosts/idols-ai/disko-fs.nix.
It was grown from 20G to 1x-RAM on 2026-10-02 (a26ab3be), when the host
still had 96G; resizing it again means re-running disko on the machine,
so that stays a separate decision.
2026-10-06 22:32:34 +08:00
Ryan Yin 87e87aad7d fix(agents): perserve dsh data 2026-10-06 17:00:01 +08:00
Ryan Yin 975d2668a8 feat(idols-ai): back up the dsh state directory (~/.dsh) with restic
dsh keeps its session transcripts, workspace storages, and profiles in
DSH_HOME=~/.dsh, which was outside the backup allowlist. Exclude its
.credentials.yaml like the module's other credential paths.
2026-10-05 23:46:04 +08:00
Ryan Yin 2e77458766 feat(noctalia): add 10s confirm countdown to session menu actions
Explicit session action lists replace the built-in defaults, so re-declare all
five actions; lock stays immediate, logout/suspend/reboot/shutdown arm a 10 s
countdown that a second press runs immediately.
2026-10-05 23:33:15 +08:00
Ryan Yin d7e169d56c docs(rime): reload the rime addon via busctl instead of fcitx5-remote 2026-10-05 23:27:03 +08:00
Ryan Yin 9cc5d92451 fix(desktop): restore dynamic light/dark for Qt apps
QT_QPA_PLATFORMTHEME=gtk3 (from #386) made Qt derive its color scheme
from GTK3, which has no dynamic dark/light signal, so Telegram and other Qt
apps were stuck on the light palette after Noctalia's theme mode changed.

Use the portal theme instead: Qt then follows
org.gnome.desktop.interface color-scheme, which Noctalia writes. The trade-off
is Qt's built-in "Sans Serif" 9pt font, which a font-providing platform theme
would be needed to change.
2026-10-05 23:14:28 +08:00
Ryan Yin a52e9dbbd7 fix(noctalia): drop the duplicate Now Playing OSD
go-musicfox posts its own desktop notification on every track change and both popups sit at bottom_right, so the media OSD was a second, redundant popup.
2026-10-05 22:46:13 +08:00
Ryan Yin 9442a82d91 feat(fcitx5): switch CN/EN with Ctrl+Space and right Shift
Clear AltTriggerKeys, whose Shift_L default toggled on left Shift. Left Shift is now a plain modifier and right Shift switches through the shared Rime config.
2026-10-05 22:41:49 +08:00
Ryan Yin 8e3f12aa19 feat(vinput): open the command palette with right Ctrl
Pin keyd's right-hand modifiers (rightcontrol/rightshift/rightmeta) to their own keycodes; keyd otherwise folds them into the left keys. Set Vinput's MenuKey to right Ctrl and clear CommandKeys, which would shadow it.
2026-10-05 22:41:48 +08:00
Ryan Yin 5e5707dd13 feat(rime): share the Rime config and user dictionary across Linux and macOS
Move the Rime data, preferences, and user dictionary into home/base/gui/rime so fcitx5-rime and Squirrel read the same files.
2026-10-05 22:41:48 +08:00
Ryan Yin bbd230e6fd fix: update nixpkgs-patched to drop openvino 2026.4.1 bump
The cherry-picked openvino 2026.4.1 bump (upstream PR #564046, still
unmerged) made onnxruntime 1.27.1 fail its OpenVINO EP MatMulNBits
numerical test, breaking sherpa-onnx and the ai-niri system build.
The fork branch now stays at upstream openvino 2026.4.0.
2026-10-04 21:17:20 +08:00
Ryan Yin ac18edd273 docs(agents): scope nixpkgs review guidance 2026-10-04 19:51:22 +08:00
Ryan Yin a695a3ce3d feat(vinput): add NPU speech input on ai 2026-10-04 19:51:22 +08:00
Ryan Yin 97237f352d docs(agents): use the Nix-managed GitHub SSH config
Restore the rule dropped in 9822dafa: keep GitHub Git remotes on SSH, make sure the Nix-managed ~/.ssh/config is used, and rerun outside the sandbox when it is rejected.
2026-10-04 14:32:32 +08:00
Ryan Yin 98dc5884ed chore: bump nur-ryan4yin input to the 10.26.9 flypy data 2026-10-04 13:38:29 +08:00
Ryan Yin 5b1bdf20ed chore: bump nur-ryan4yin input 2026-10-04 13:29:56 +08:00
Ryan Yin d463760e4a refactor(fcitx5): ship flypy rime data from NUR
Move the flypy schema data to the rime-data-flypy package in
ryan4yin/nur-packages and keep only the personal user dictionary
(flypy_user.txt) here. The overlay merges the NUR data with that file
and exposes the result as pkgs.rime-data, fcitx5-rime's rimeDataPkgs,
and pkgs.flypy-squirrel.
2026-10-04 13:29:56 +08:00
Ryan Yin bf193e4082 chore(agents): drop the kimi-code CLI
Kimi Code moved its desktop client into an internal repository in July 2026 (MoonshotAI/kimi-code#1849), so the polished surface is no longer open source; the CLI that stays behind overlaps opencode2 and pi. Removing it drops one more redundant harness.
2026-10-04 12:52:50 +08:00
Ryan Yin 349fe7f5cf chore(agents): drop the oh-my-pi (omp) CLI
oh-my-pi is a feature-complete superset of pi, so its role is already covered: opencode2 for a batteries-included harness, pi for the minimal/local-model one. Keeping it meant maintaining two nearly identical harnesses.
2026-10-04 12:39:08 +08:00
Ryan Yin 571973da34 chore(tuios): update local configuration 2026-10-04 12:34:22 +08:00
Ryan Yin f19de2e6f6 flake.lock: Update
Flake lock file updates:

• Updated input 'llm-agents':
    'github:numtide/llm-agents.nix/54b915b290377072e2903d2fcdae122dd37f64fc?narHash=sha256-Qhw25MEtJdqzYshdaLc1EPGpIQOwxI%2B%2BD50w/A7p1rs%3D' (2026-10-02)
  → 'github:numtide/llm-agents.nix/4e0a04f23b1113a125efb0246f57752674ade3d9?narHash=sha256-hm%2BVeaOyLQLe37IvSADW4IKIxTvm9W/nZDd%2BS7flKzU%3D' (2026-10-04)
2026-10-04 12:15:38 +08:00
Ryan Yin 524770b351 security(shoukei): disable prometheus exporters 2026-10-03 17:21:37 +08:00
Ryan Yin 0d2665c286 docs(security): drop abandoned kernel-status reporter plan
The optional kernel reboot-visibility change was closed without merging, so remove the planned-reporter wording. Replace it with the manual booted-vs-selected kernel check and update the P1 TODO accordingly.
2026-10-03 16:40:01 +08:00
ryan4yin | 二花 01e93c2b65 Merge pull request #363 from ryan4yin/fix/smartctl-exporter-describe-descriptors
chore(workarounds): add a registry; pin smartctl_exporter to the #329 fix
2026-10-03 13:13:36 +08:00
Ryan Yin 0a8fb5cf01 docs(workarounds): clarify removal and recovery conditions 2026-10-03 13:12:31 +08:00
Ryan Yin 7fe63a4719 docs: fix the muvm workaround entry reasoning
muvm is disabled because it does not build/run on nixos-apple-silicon yet, not because of a permanent hardware limitation; the 16k page size is the reason it is wanted, and the removal condition is muvm building and working.
2026-10-03 12:59:45 +08:00
Ryan Yin 39d351ade2 docs: group the workaround registry by type
Split the single table into Pins / Workarounds / Known issues / WIP sections so the registry is readable by section instead of scanning a Type column.
2026-10-03 12:56:31 +08:00
Ryan Yin e975f69383 docs: add a workaround registry with removal conditions
WORKAROUNDS.md collects temporary workarounds, version pins, carried patches, and known gaps, each with a removal condition, so they can be re-evaluated and rolled back on a schedule. AGENTS.md points to it and states the convention: a change that adds a workaround adds a row in the same PR.
2026-10-03 12:53:30 +08:00
Ryan Yin 0a847c1f55 refactor(overlays): pin smartctl_exporter to the upstream #329 commit
Replace the backported patch with a src/version/vendorHash override that pins prometheus-smartctl-exporter to upstream 6274decc (2026-09-28), which already carries the Describe() fix from PR #329. Simpler to maintain than a patch file and it tracks the upstream change directly; drop the overlay once smartctl_exporter 0.15.0 is packaged in nixpkgs.
2026-10-03 12:53:30 +08:00
Ryan Yin e8764b802a fix(overlays): backport smartctl_exporter Describe fix (upstream #329)
smartctl_exporter 0.14.0 derives Describe() from the devices it can read at startup. A device that only becomes readable later (an NVMe whose ACL arrives late, or an HDD waking from standby) then makes Collect() emit metrics with unregistered descriptors, so /metrics returns HTTP 500 and the whole scrape fails, hiding even the healthy disks.

Backport upstream PR #329, which makes Describe() send the full explicit descriptor set. Carry it as an overlay until smartctl_exporter 0.15.0 is released and packaged in nixpkgs.

Refs: https://github.com/prometheus-community/smartctl_exporter/pull/329
2026-10-03 12:49:36 +08:00
Ryan Yin d9208f492b fix(preservation): keep logrotate state in a persisted directory 2026-10-03 09:42:14 +08:00
Ryan Yin efdf153f0a fix(shoukei): stop latched nscd failures on resolvconf restarts 2026-10-03 09:42:13 +08:00
Ryan Yin a1ec97d3a2 refactor(bwraps): source wechat from nixpkgs-master and reuse its AppImage
Reuse the already-extracted, libtiff-patched AppImage from the nixpkgs wechat package (`wechat.src`) instead of keeping our own CDN URLs and hashes, which had to be refreshed whenever Tencent replaced the versionless files. Take the package from nixpkgs-master, which carries the newest builds.
2026-10-03 00:14:00 +08:00
Ryan Yin d27818e948 docs: update stale workaround comments
- wechat.nix: repacking is needed because nixpkgs' wechat package does not expose its AppImage wrapper args for `.override`, not because wrapAppImage lacks overriding (it forwards args to buildFHSEnv).
- peripherals.nix: drop a link to an already-closed issue and fix a typo.
2026-10-03 00:14:00 +08:00
Ryan Yin 6e33a28609 chore(blender): pin nixpkgs-blender and drop obsolete OIDN override
nixpkgs-blender tracked the nixpkgs master branch, so every `just up` re-bumped it and started a full Blender/CUDA source rebuild even though Blender stayed at 5.2.2 LTS. Pin it to a fixed rev so bumps are deliberate.

The OIDN cmake override is obsolete: nixpkgs#545542 made setupCudaHook add nvcc to CUDAToolkit_ROOT, fixing the CMake 4.3+ split-root failure (nixpkgs#544701). Dropping it also stops Blender's derivation from depending on nixpkgs-stable.
2026-10-03 00:14:00 +08:00
Ryan Yin facf33615e fix(nixos): install terminfo only for terminals in use
environment.enableAllTerminfo installs every terminal's terminfo, including rxvt-unicode, which no longer builds with GCC 16 (NixOS/nixpkgs#568896). Install just the terminals we use (alacritty, foot, ghostty, kitty) instead. This also makes the aarch64 jasper workaround unnecessary.
2026-10-03 00:14:00 +08:00
Ryan Yin 8b13ab2ae2 feat(tools): add tuios terminal multiplexer 2026-10-03 00:14:00 +08:00
Ryan Yin c2a5f6643a flake.lock: Update
16 inputs moved; nixpkgs -> c59305bab206 (nixos-unstable, 2026-10-01), plus the
master/stable/darwin/blender/patched nixpkgs inputs and the module flakes
(home-manager, microvm, nixos-apple-silicon, nix-gaming, nixpak, llm-agents,
rust-overlay, flake-parts, git-hooks, nu_scripts).

Audited each moved revision through the GitHub compare API: no red flags
(substituters, trusted-users, activationScript, pre-commit hooks) in the inputs
examined.  home-manager carries the rl-2611 extraConfig/mkForce change (affects
mbsync/lieer/mujmap/notmuch/astroid/grobi; none used here).  The home-manager
compare is large, so the audit is not exhaustive and relies on the build.

Validated with `just test` (true), eval-host on the NixOS hosts, and
`just build-host ai-niri`; deployment passed.  The build initially failed on
rxvt-unicode-unwrapped (GCC 16 std::lerp regression, nixpkgs#568896), pulled in
by environment.enableAllTerminfo; terminfo is now scoped to the terminals in use.
2026-10-03 00:14:00 +08:00
Ryan Yin a26ab3be63 chore(disko): grow swapfile from 20G to 96G
Running strata with qwen3.8-flash-next keeps ~53G of model weights
resident, leaving little RAM for the desktop side and pushing ~13G of
anonymous pages into the 20G swapfile. With swap that full, a burst
risks OOM-killing processes. Disk space is not a constraint (1.9T
btrfs, ~1.4T free), so grow the swapfile to the classic 1x-RAM size.

Keep zram off and zswap at 10%: zram's compressed pool would steal page
cache that the mmap'd weights rely on.
2026-10-02 19:45:08 +08:00
Ryan Yin 54aacd12d5 docs(nixpkgs-review): add closure-size review guidance
Prefer the narrowest output of a dependency (for example stdenv.cc.cc.lib
instead of stdenv.cc.cc) and measure the built closure, since a full
toolchain can add hundreds of MiB. Also note how to check what is actually
needed (DT_NEEDED, exec'd tools) before trimming.
2026-10-02 17:11:31 +08:00
Ryan Yin 6a026ecf9f chore(desktop): make podman rootless-only
Disable the rootful system podman.socket on desktop hosts and drop the module's autoPrune, which prunes the rootful store and pulls in the rootful API service. Add a weekly per-user timer that prunes the rootless store instead.
2026-10-02 15:58:12 +08:00
Ryan Yin ef61c458e6 chore(go-musicfox): declare config.toml and reset it on rebuild
Manage ~/.config/go-musicfox/config.toml declaratively: the upstream default plus the mpv engine, ~/Music download dir, 2 GiB cache and cover art.

The app rewrites the file with a temp file plus rename, which would replace a plain symlink, so use force = true like fcitx5's profile: the repo copy is restored on every rebuild and runtime edits are ephemeral. Runtime data and state stay on the persistent volume.
2026-10-02 14:39:19 +08:00
Ryan Yin 25f059a49b chore: add go-musicfox 2026-10-02 14:12:05 +08:00
Ryan Yin a4206c17a9 docs(agents): note nushell is the interactive shell 2026-10-02 11:39:36 +08:00
Ryan Yin 1d43fd2802 docs(agents): label the post-merge cleanup rule 2026-10-02 11:24:18 +08:00
Ryan Yin 044862110e docs(agents): clean up after a merged PR 2026-10-02 11:21:19 +08:00
Ryan Yin 1f8db1fccf fix(catppuccin): drop the ignored user-level cache entry
Catppuccin's home-manager module writes extra-substituters/extra-trusted-public-keys
for catppuccin.cachix.org into the user-level ~/.config/nix/nix.conf. Since the
normal user is no longer a trusted-user (modules/base/nix.nix), Nix ignores those
client-specified settings and warns on every command. The ports build locally, so
turn the user-level cache off instead.
2026-10-01 21:25:55 +08:00
Ryan Yin 14db49660b chore(preservation): drop persist entries for removed apps 2026-10-01 20:10:08 +08:00
Ryan Yin a6553b25a5 chore: drop archived terraformer and unused netbird 2026-10-01 20:10:07 +08:00
Ryan Yin 1546e54bb2 chore(noctalia): move OSD and notifications to the bottom-right 2026-10-01 14:09:16 +08:00
Ryan Yin 872901007e docs(agents): use terraform plan, drop nonexistent helm diff 2026-10-01 11:34:34 +08:00