Commit Graph
77 Commits
Author SHA1 Message Date
ryan4yin | 二花 e8819de40c feat(vinput): own the config here and read keys from the environment (#445)
* feat(vinput): read provider keys from an EnvironmentFile
* feat(vinput): manage the config from this repository
2026-10-15 13:54:20 +08:00
ryan4yin | 二花 9c38819517 docs: review and correct comments and documentation (#436) 2026-10-12 10:02:38 +08:00
ryan4yin | 二花 3e66bbf24f feat(hosts): add WiVRn CLI streaming for Quest 3 #392 2026-10-10 22:49:48 +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 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
ryan4yin | 二花 0e12440148 refactor(secrets): move nushell-secrets.nu out of agenix (#423) 2026-10-09 22:40:50 +08:00
ryan4yin | 二花 48ac4f76bf fix(tuios): keep sessions across reboots and split them by purpose (#416) 2026-10-08 20:29:52 +08:00
ryan4yin | 二花 9e2633f496 feat(gaming): generic umu game installer, skill, and desktop entries (#411) 2026-10-08 14:59:11 +08:00
ryan4yin | 二花 95b849420e feat(gaming): declarative Proton and dGPU game rendering (#393) 2026-10-07 13:14:42 +08:00
Ryan Yin 87e87aad7d fix(agents): perserve dsh data 2026-10-06 17:00:01 +08:00
ryan4yin | 二花 502d0c85c7 fix(preservation): keep vinput config and models across reboots (#381)
Vinput stores its core config in ~/.config/vinput/config.json and its
downloaded sherpa-onnx models in ~/.local/share/vinput/models/. Neither
was bind-mounted from /persistent on the tmpfs-root hosts, so a reboot
wiped both and vinput-daemon started with "Local ASR provider model is
not configured". Persist both directories and document the one-shot CLI
model setup in the vinput README.
2026-10-05 00:18:01 +08:00
ryan4yin | 二花 bbfe1fa53b feat(desktop): replace Clash Verge with native mihomo on all NixOS hosts (#379) 2026-10-04 21:04:41 +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
ryan4yin | 二花 2ee0b9c7eb chore(tui): remove standalone herdr, superseded by tuios (#374) 2026-10-04 11:23:16 +08:00
Ryan Yin d9208f492b fix(preservation): keep logrotate state in a persisted directory 2026-10-03 09:42:14 +08:00
ryan4yin | 二花 9254b63a18 chore(idols-ai): move tmp state off RAM onto btrfs and harden tmp mounts (#348)
* feat(idols-ai): persist /var/tmp and small state dirs, wipe /var/tmp at boot

Move the strata model staging area (~3G) off the root tmpfs onto the
persistent btrfs volume to free RAM, preserve btrbk/cups/logrotate
state, and wipe /var/tmp at boot so it only accumulates between
reboots.

* chore(idols-ai): add nosuid,nodev to root tmpfs and tmp btrfs mounts

Hardens /, /tmp and /snapshots; safe because /dev, /run, /nix and
/run/setuid-programs are separate mounts, so nothing there needs suid
bits or device nodes.

* chore(idols-ai): add noatime to the @tmp btrfs mount

Temp files do not need access times; matches the @nix subvolume style
and saves btrfs metadata writes.

* chore(idols-ai): harden the /var/tmp bind mount with nosuid,nodev

World-writable staging data should not honor suid bits or device
nodes, same as /tmp and /snapshots.

* fix(idols-ai): preserve logrotate state as a file, fix persisted dir ownership

- /var/lib/logrotate.status is a regular file, not a directory: move it from
  preservation directories to files. A missing state entry makes logrotate
  treat every log as freshly rotated, so it must survive reboots.
- keep /var/lib/btrbk owned by btrbk:btrbk 0750 so preservation does not
  override the btrbk module's rule with root:root.
- set /var/tmp mode 1777 explicitly instead of relying on systemd's tmp.conf
  ordering.
- rewrite comments to describe the paths generically.

* chore(idols-ai): cap journal, wipe coredumps at boot, persist upower/noctalia

- services.journald.settings.Journal: SystemMaxUse=10G, RuntimeMaxUse=256M,
  matching the cap already set on idols-kana/idols-ruby.
- wipe /var/lib/systemd/coredump at boot: it lives in the persisted
  /var/lib/systemd and crash dumps can contain secrets copied from memory.
- persist /var/lib/upower (device battery history) and
  ~/.local/state/noctalia (shell settings, notification/clipboard history).
2026-10-02 21:58:21 +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
ryan4yin | 二花 2b0f01d99c chore(agents): workspace layout, related repositories, and ~/src checkouts (#340)
* docs(skills): point nix-config-secrets at the private repo under ~/codes

Record where the private nix-secrets checkout lives and that agents should
do the mechanical secret work themselves, handing back only the
interactive/sudo agenix operations and pushes.

* docs(agents): add related repositories to nix-config

* chore(agents): adopt ~/src for source checkouts

Move third-party/source checkouts from ~/codes/src to ~/src so the home
layout reads as three siblings: ~/codes (personal), ~/work (work),
~/src (checkouts). Preserve and back up the new path, and update the
global rule and the two nixpkgs skill references.

* docs(agents): tighten the code layout rule

* docs(agents): fold the work-confidentiality note into the layout line

* docs(agents): base the confidentiality rule on repo visibility

* docs(agents): drop the stale KubeVirt mention
2026-10-02 11:16:24 +08:00
Ryan Yin 14db49660b chore(preservation): drop persist entries for removed apps 2026-10-01 20:10:08 +08:00
ryan4yin | 二花 ab2fd0fee9 feat: add plocate filesystem search and cap podman log size (#333) 2026-10-01 20:00:53 +08:00
ryan4yin | 二花 8f9fdda2bb refactor: trim unused virtualisation config and packages (#332) 2026-10-01 19:42:20 +08:00
Ryan Yin 853747425f chore(idols-ai): drop the davfs WebDAV fileshare mount
davfs2 caches the whole opened file regardless of cache_size, so opening media on /mnt/fileshare downloads it fully and blocks the mount. The share is no longer used.
2026-09-26 23:47:29 +08:00
Ryan Yin e401a75ca5 chore(agents): remove crush
Crush hardcodes banned bash commands, blocking many operations. Drop the package, its AGENTS.md/CRUSH.md install target, env vars, and preservation entries.
2026-09-25 00:30:12 +08:00
Ryan Yin 8c62b5433d chore(agents): remove Cursor integrations 2026-09-18 21:20:33 +08:00
Ryan Yin bcee9f2ac8 feat(agents): add Crush and disable usage tracking 2026-09-18 21:20:33 +08:00
Ryan Yin 23258a06d4 feat(agents): add Pi and OMP 2026-09-18 21:20:33 +08:00
Ryan Yin 46266dd8ea chore(agents): remove Claude integrations 2026-09-18 21:20:33 +08:00
Ryan Yin b10b059d1f chore: add microsoft-edge, chromium and brave-origin
Install microsoft-edge on x86_64 Linux via Home Manager and on macOS via
a brew cask. Enable the chromium and brave-origin Home Manager options
alongside google-chrome, dropping the google-chrome aarch64 fallback to
chromium since google-chrome supports aarch64-linux.

Persist the Brave Origin and microsoft-edge profile directories on the
ephemeral-root hosts.
2026-09-16 18:51:23 +08:00
Ryan Yin c8642fcac4 feat(herdr): declare config in home-manager and persist state 2026-09-14 13:18:57 +08:00
Ryan Yin 324e5d8820 feat(moonlight): persist client data 2026-09-04 20:21:52 +08:00
Ryan Yin f08b45d2bc feat(editors): restore vscode alongside zed for build123d workflows
- linux: programs.vscode via pkgs-master with gnome-libsecret password store
- darwin: visual-studio-code cask + aerospace window rules
- idols-ai: persist .vscode and .config/Code (Settings Sync handles extensions)
- xdg: code.desktop editor association and vscode:// scheme handler
2026-08-29 17:05:44 +08:00
ryan4yin | 二花 6e0d44c50d feat(nixos): manage scattered trash dirs with trash-cli retention timer (#265)
* feat(nushell): add trash command using the home trash can

On a tmpfs root with persistent dirs bind-mounted in, `rm --trash`
scatters items into per-mount .Trash-$uid dirs that file managers never
show, and gio refuses to trash on those internal mounts.

Add a `trash` command implementing the freedesktop trash spec
'failsafe' mode: items are moved to ~/.local/share/Trash with
spec-compliant .trashinfo entries, so Thunar can list and restore them.

Also preserve ~/.local/share/Trash on idols-ai so the trash survives
reboots.

* feat(nixos): manage scattered trash dirs with trash-cli retention timer

Replace the hand-written nushell trash command with the established
trash-cli tooling. On a tmpfs root with persistent dirs bind-mounted
in, the trash crate (nushell rm --trash) scatters items into per-mount
.Trash-$uid dirs that file managers never show and nothing cleans up.

- add trash-cli to system packages: trash-list scans/trash-restore
  handles every mount point's trash dir
- daily systemd timer runs 'trash-empty 30 -f', purging items older
  than 30 days across the home trash and all mount points
- drop the hand-written trash.nu module
- note in preservation.nix: do NOT persist ~/.local/share/Trash; a
  bind-mounted trash dir breaks the trash crate's home-topdir match
  for files straight under $HOME (it would try /.Trash-$uid, EACCES)

* fix(nixos): order trash-empty after preservation.target

The scattered .Trash-$uid dirs live inside the preservation bind
mounts, which use DefaultDependencies=no and are therefore NOT ordered
after local-fs.target. Add preservation.target to After= so trash-empty
only runs once all those mounts are up.
2026-08-23 23:40:53 +08:00
Ryan Yin 6f100d94a9 feat(gh): persist user-managed configuration 2026-08-04 17:45:24 +08:00
Ryan Yin dda800f65d chore: preserve kimi-code data 2026-07-17 10:45:55 +08:00
Ryan Yin c44aa91e96 chore: preserve bambu studio's data 2026-07-10 13:07:05 +08:00
Ryan Yin 0e5f1801cf feat(nixos): add orca-slicer
Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2026-06-25 22:19:14 +08:00
Ryan Yin cfc192afc4 feat: replace vscode with zed-editor (#263)
* feat: replace vscode with zed-editor
* docs: helix
2026-06-04 23:20:59 +08:00
Ryan Yin 27e2fb0df0 fix: remove unused pipx 2026-06-01 10:34:02 +08:00
Ryan Yin 9eb532a461 chore: remove kimi-cli, add opencode permission template 2026-05-29 08:38:00 +08:00
Ryan Yin 7c286099b6 chore: remove gemini-cli 2026-05-20 16:15:48 +08:00
Ryan Yin 495ed3f938 chore: remove aagl, run them via steam+dw-proton instead
Signed-off-by: Ryan Yin <xiaoyin_c@qq.com>
2026-05-10 12:42:02 +08:00
Ryan Yin 3a6a75c703 feat: helix - use stable version 2026-04-27 00:40:49 +08:00
Ryan Yin f373f5ee5b feat(nixos): add cursor-cli/claude-code/gemini-cli/opencode 2026-03-24 12:20:47 +08:00
Ryan Yin 914239487c feat(nixos): add cursor-cli 2026-03-24 10:45:20 +08:00
Ryan Yin f5444150ef feat: agents 2026-03-21 20:54:40 +08:00
Ryan Yin 4db8d0d2cb fix: persist ~/Desktop 2026-03-20 18:10:57 +08:00
Ryan Yin be9be72aff chore: preserve davfs2 driver's cache to avoid large memory usage 2026-03-20 00:31:44 +08:00
Ryan Yin 28a4fb9a26 chore: preserve ~/.agents 2026-03-16 16:42:16 +08:00