Commit Graph
100 Commits
Author SHA1 Message Date
Alexander Heldt 540099f56b Update ct flake input 2026-10-28 15:10:23 +01:00
Alexander Heldt cd807b550f pinwheel: Add ct for side threads in Claude Code sessions
Install ct from its flake, with its config, a tmux menu on prefix T and a user service for the web UI. Also keep Claude Code transcripts for ten years instead of 30 days, since threads are meant to be revisited.
2026-10-27 14:49:43 +01:00
Alexander Heldt a74e75d9ab pinwheel: Add screenshot annotation with satty
Shift-prefixed screenshot bindings pipe the capture to satty, and notifications use a short timeout so they are not captured.
2026-10-27 09:59:09 +01:00
Alexander Heldt b74c715164 pinwheel: Copy to clipboard via OSC 52 in Emacs so it works over SSH 2026-10-26 15:41:53 +01:00
Alexander Heldt 8088bc5199 pinwheel: Add Emacs command to copy file path with line number 2026-10-26 15:41:53 +01:00
Alexander Heldt 93c9484541 Update dagbok flake input 2026-10-26 14:41:27 +00:00
Alexander Heldt c3c83b07b7 Update dagbok flake input 2026-10-26 12:50:52 +00:00
Alexander HeldtandClaude Opus 5.5 c9ca657416 manatee: Alert on kitchen water leak
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 07:37:24 +00:00
Alexander Heldt ae22edcbee Update dagbok flake input 2026-10-23 12:00:14 +02:00
Alexander Heldt 48248e8c7d pinwheel: Lock instead of suspend on lid close
Have logind ignore the lid switch and suspend/hibernate keys so the
machine stays reachable over SSH with the lid closed. SUPER + SHIFT + x
remains the way to suspend; closing the lid now only locks the screen.
2026-10-22 19:37:42 +02:00
Alexander Heldt 36292c4f14 pinwheel: Fix webcam frame drops and raise resolution to 1080p
With the default 6 icamerasrc buffers the camera HAL ran out of pending
requests and dropped every fourth sensor frame, capping output at ~22.5 fps.
Using 10 buffers keeps the request queue fed and restores 30 fps.
2026-10-22 19:37:42 +02:00
Alexander Heldt 647415b549 Update dagbok flake input 2026-10-22 17:37:20 +00:00
Alexander Heldt 3c01ed4698 Update dagbok flake input 2026-10-21 08:36:30 +02:00
Alexander Heldt 4d0977c482 backwards/pinwheel: Add SSH key for backwards to access pinwheel
Pinwheel's sshd had no way to accept keys from other hosts. Give it the
same `authorizedKeysCommand` setup as backwards and manatee, and authorize
a new `alex.backwards-pinwheel` key that backwards uses for `ssh pinwheel`.
2026-10-20 21:59:21 +02:00
Alexander Heldt 4f2c93d2b0 backwards: Disable rtw88 power saving 2026-10-20 21:20:31 +02:00
Alexander Heldt 0c3b0a26e1 backwards: Disable i915 display power saving 2026-10-20 21:20:31 +02:00
Alexander Heldt ccd58b62ce backwards: Enable Steam and let it use the 8BitDo pad
`hid_nintendo` claims the pad when it is in Nintendo Switch mode, which
leaves Steam unable to reach it through hidraw. Blacklist the module and
tag the device with `uaccess` so Steam can open it.
2026-10-20 21:20:31 +02:00
Alexander Heldt 657be047ec backwards: Replace nix-gc-env with nh clean
`nix.gc` run as root cannot prune generations under
`~/.local/state/nix/profiles` (NixOS/nix#8508), and `nix-gc-env` only
looks in `/nix/var/nix/profiles`. Home-manager generations therefore
accumulated since August 2024 and filled the disk.

`nh clean all` enumerates users and walks their per-user profiles too.
It replaces `nix.gc.automatic`, which cannot be enabled alongside it.
2026-10-20 21:20:31 +02:00
Alexander Heldt 062321ee7f backwards/manatee/tadpole: Clean /tmp on boot
Only `pinwheel` set this. Elsewhere files in `/tmp` survived reboots,
and leftover `nh` build result symlinks there kept acting as GC roots,
pinning store paths that should have been collected.
2026-10-20 21:20:31 +02:00
Alexander Heldt 951428e7a1 backwards: Add tailscale-qs GNOME extension for switching exit nodes 2026-10-20 21:20:31 +02:00
Alexander Heldt dc390606aa Update dagbok flake input 2026-10-20 14:01:47 +02:00
Alexander Heldt cea16ebd3a Update schema flake input 2026-10-20 09:04:31 +00:00
Alexander Heldt c345949301 Update dagbok flake input 2026-10-20 09:04:17 +00:00
Alexander Heldt 350e576994 Update dagbok flake input 2026-10-15 11:52:40 +00:00
Alexander Heldt 21a1039fff manatee: Remove stale restic locks before each backup 2026-10-15 13:38:44 +02:00
Alexander Heldt 57040a5bd8 Update dagbok flake input 2026-10-13 12:47:11 +00:00
Alexander Heldt 0db6cf99eb Update dagbok flake input 2026-10-13 09:50:12 +00:00
Alexander Heldt 7ace09785d Update whib-frontend flake input 2026-10-13 11:48:14 +02:00
Alexander Heldt 8f64ce6fe7 Update dagbok flake input 2026-10-13 07:55:28 +00:00
Alexander Heldt 40b9f3e861 pinwheel: Add dagbok Emacs client
Built from the dagbok flake's Emacs overlay, reading the shared token
from agenix.
2026-10-12 16:31:14 +02:00
Alexander Heldt 154f33f258 manatee: Add dagbok
Served at dagbok.ppp.pm through nginx from 127.0.0.1:8093, with its token
from agenix, a Hetzner DNS-01 certificate, a dynamic DNS record and a
state backup snapshot.
2026-10-12 16:31:14 +02:00
Alexander Heldt bbae47fd77 Update schema flake input 2026-10-12 14:18:36 +00:00
Alexander Heldt 7429a82857 Update schema and puppy-tracker flake inputs 2026-10-04 18:24:42 +00:00
Alexander Heldt 1dc9571e1b manatee: Drop the schema/puppy-tracker link and its secret
The link was removed from both apps, so the commented-out config for it
and the shared schema-puppy-token secret go too.
2026-10-04 18:18:08 +00:00
Alexander Heldt 7a7499ba6d manatee: Back up SQLite databases of DynamicUser services
/var/lib/<name> is a symlink into /var/lib/private for those, so find
stopped at the link and the state dump never copied their databases
(schema, puppy-tracker, todo, …). Follow it with find -H.
2026-10-04 16:36:33 +00:00
Alexander Heldt ab700c0368 manatee: Cap ZFS ARC at 4 GiB 2026-10-04 16:36:33 +00:00
Alexander Heldt 00475b637b pinwheel: Give the webcam v4l2loopback device more buffers 2026-10-02 09:45:20 +02:00
Alexander Heldt cae7c4cbcf pinwheel: Route browser links to work firefox profile from work checkouts 2026-10-02 09:16:32 +02:00
Alexander Heldt 935b3022e2 pinwheel: Open gcloud links in work firefox profile 2026-10-02 08:59:12 +02:00
Alexander Heldt 5d4f43c5f8 pinwheel: Use alt instead of ctrl for atuin numeric shortcuts 2026-10-02 08:55:17 +02:00
Alexander Heldt 6ee912e39f pinwheel: Skip local network access checks for work domains in firefox 2026-10-02 08:54:52 +02:00
Alexander Heldt 94232b1ff6 pinwheel: Read atuin key from age secret, keep up arrow for zsh history 2026-10-01 08:56:55 +02:00
Alexander Heldt e1989d913a manatee: Disable atuin open registration 2026-10-01 08:56:55 +02:00
Alexander Heldt 19e6929219 pinwheel: Add atuin, syncing to manatee 2026-10-01 08:34:32 +02:00
Alexander Heldt f25207b429 manatee: Add self-hosted atuin sync server 2026-10-01 08:34:32 +02:00
Alexander Heldt 779ddacd24 Update whib flake inputs 2026-09-30 17:48:39 +00:00
Alexander HeldtandClaude Opus 5.5 ac62a8e4d3 test-vm: Serve whib-frontend with nginx
The WHIB frontend module no longer runs a container or has a `port`
option. Forward host port 8081 to nginx in the VM instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 17:46:06 +00:00
Alexander Heldt f638b7d331 pinwheel: Use empty strings for ai attribution settings 2026-09-30 10:00:14 +02:00
Alexander Heldt 6dfe49d961 Update puppy-tracker flake input 2026-09-30 07:49:25 +00:00
Alexander Heldt 29608efd8c manatee: Fetch schema from gitea
Point the schema input at its repo instead of a local path, so the
config builds from anywhere.
2026-09-30 07:48:39 +00:00
Alexander Heldt 3a115df8a7 manatee: Add schema
The household weekly plan at schema.ppp.pm: its module, certificate,
DNS record, backup and secrets. The link to puppy-tracker is prepared
but commented out until puppy-tracker with the integration feed is
deployed.
2026-09-30 07:33:57 +00:00
Alexander Heldt eb6477d34a romm: Let the database container own its data directory
tmpfiles re-applied root:root to /var/lib/romm/db on every switch. A
MariaDB running as uid 999 then could not delete tc.log on shutdown,
so the next start took it for a crash and failed recovery with "Bad
magic header in tc log".
2026-09-30 07:33:57 +00:00
Alexander Heldt ac51b04b93 certs: Use lego v5 flag names
lego v5 renamed --dns.propagation-wait to --dns.propagation.wait and
--dns-timeout to --dns.timeout, and exits on the old names, so ordering
or renewing any certificate failed. The six identical cert blocks are
now one definition applied to each domain.
2026-09-30 07:33:57 +00:00
Alexander Heldt 17885cf054 pinwheel: Disable commit and PR attribution in ai settings 2026-09-30 09:32:21 +02:00
Alexander Heldt 53644b5d25 pinwheel: Open graphite links in work firefox profile 2026-09-30 09:30:46 +02:00
Alexander Heldt 07a9703730 pinwheel: Add encrypted naviterm config 2026-09-30 08:50:47 +02:00
Alexander Heldt b27c4be4f4 pinwheel: Set alex as tailscale operator 2026-09-30 08:42:58 +02:00
Alexander Heldt dbd9425843 pinwheel: Add naviterm config secret, fix syncthing dir ownership 2026-09-29 16:42:47 +02:00
Alexander Heldt 1ce4d10e4b pinwheel: Swap to new machine 2026-09-29 16:41:55 +02:00
Alexander Heldt 5c5c87d5f7 pinwheel: Fix swapped ai shell aliases, default to personal account 2026-09-29 15:08:34 +02:00
Alexander Heldt da2fbe4f42 pinwheel: fix ~/code/work ownership, drop custom secret paths
systemd-tmpfiles now ensures ~/code and ~/code/work are owned by
alex, since agenix previously created ~/code/work as root when the
work secrets pointed there directly.

Also drop the custom path= on work-gitconfig, work-github-token, and
work-go-private so they use agenix's default secret path instead of
living under ~/code/work.
2026-09-29 09:20:18 +02:00
Alexander Heldt c795bcd492 pinwheel: enable IPU6 MIPI webcam (ov08x40)
Adds hardware.ipu6 for the built-in MIPI camera, plus two overlay
fixes needed for it to actually work on this hardware:

- Pin icamerasrc-ipu6epmtl to the same release tag already used by
  ipu6-camera-bins/ipu6-camera-hal (20250923_ov02e). The version
  nixpkgs currently pulls is an Intel internal IoT/Panther-Lake
  validation build whose device table only lists external USB
  AR0234 test sensors, never the real ov08x40, so the camera never
  gets selected.

- Patch ipu6-camera-hal's hardcoded IVSC/CVS entity name from
  "Intel IVSC CSI" (the out-of-tree ivsc driver's name) to "Intel
  CVS" (the mainlined intel_cvs driver's name). The mismatch broke
  I2C bus address resolution for the sensor, which cascaded into
  wrong stream configs and black/missing video.
2026-09-29 08:25:37 +02:00
Alexander Heldt 64d786553e Update flake inputs 2026-09-25 19:37:29 +02:00
Alexander Heldt 5768159618 flake: Move nh input to nix-community org
viperML/nh was moved to nix-community/nh and the old repo deleted, so
the pinned URL 404s on any re-fetch. The pinned commit still exists in
the new repo, so keep the exact rev and only change the owner.
2026-09-23 12:07:41 +02:00
Alexander Heldt babec6336f waybar: Pin battery module to BAT0
Bluetooth HID devices (e.g. a mouse) appearing as power_supply
entries in sysfs make waybar's Battery::refreshBatteries() throw
an uncaught exception and abort. Restricting to BAT0 avoids
enumerating those devices.
2026-09-01 10:07:07 +02:00
Alexander Heldt 5ec6f7d636 hyprland: Fix mouse binds, hl.bindm does not exist
Hyprland's lua API only registers hl.bind; there is no separate
hl.bindm. The settings.bindm key rendered as a literal hl.bindm(...)
call, which errored with "attempt to call a nil value" at runtime.
Fold the mouse binds into settings.bind with { mouse = true }, per
the wiki's own example config.
2026-08-26 14:14:07 +02:00
Alexander Heldt acebeaf180 hyprland: Migrate config to Lua, bump back to current
Hyprland 0.56.x dropped the hyprlang (.conf) config backend in favor
of Lua-only config. Switch configType to "lua" and rewrite monitors,
workspace/window rules, binds, env vars, and autostart using the new
hl.* dispatcher API. Un-pin the hyprland flake input (back to current,
following root nixpkgs) now that the config no longer depends on the
old hyprlang backend.

Every module that injects Hyprland keybinds (foot, wezterm, bemenu,
music, light, sound, screenshot, physlock, hyprlock) is converted to
the same Lua bind syntax, since the config is all-or-nothing per
configType. hyprlock's swayidle dpms toggle and the hyprland-monitors
hotplug script's hyprctl dispatch calls are updated to the new
hl.dsp.* expression syntax the same way.

One behavior change: hl.workspace_rule keeps only the last monitor set
per workspace (unlike hyprlang's rule list), so workspaces that used
to declare two candidate monitors now declare one static default;
the hyprland-monitors service still re-dispatches the correct monitor
on startup and hotplug.
2026-08-26 14:08:28 +02:00
Alexander Heldt 548507d60b flake: Pin hyprland to pre-0.56.0 rev, keep own nixpkgs
Hyprland 0.56.0 dropped the hyprlang (.conf) config backend entirely
in favor of a Lua-only config, breaking the deployed hyprland.conf on
pinwheel. Pin back to 79bc0ca (last hyprlang-supporting build) until
the config is migrated to Lua.

Also drop hyprland's nixpkgs.follows override: building the old
Hyprland rev against the current (newer) root nixpkgs caused a
libstdc++ ABI mismatch between the cached hyprtoolkit binary and a
freshly-compiled hyprland-guiutils.
2026-08-26 12:54:43 +02:00
Alexander Heldt 9d15eb0e9f Update flake inputs 2026-08-18 09:39:02 +00:00
Alexander Heldt 4dbd2ccded Update todo flake input 2026-08-18 09:32:39 +00:00
Alexander Heldt b5c2c8d187 flake: Flip todo input to git.ppp.pm gitea host 2026-08-16 14:34:57 +00:00
Alexander Heldt 34990eaaa4 manatee: Back up service state (databases etc.) via restic 2026-08-16 14:23:51 +00:00
Alexander Heldt f5d62b276d backwards: Remove syncthing, repoint pinwheel folders to manatee 2026-08-16 13:48:10 +00:00
Alexander Heldt 7a170ff59c manatee: Sync personal, work and phone-gps, peer phone to org 2026-08-16 13:41:52 +00:00
Alexander Heldt 0a5da7a293 backwards: Pin firefox legacy configPath 2026-08-16 14:19:59 +02:00
Alexander Heldt fbf8db1558 pinwheel: Manage claude settings through nix 2026-08-16 14:19:58 +02:00
Alexander Heldt 8eefa99ca8 tadpole: Use programs.ssh.settings 2026-08-16 14:19:58 +02:00
Alexander Heldt 0d2496c600 backwards: Use programs.ssh.settings 2026-08-16 14:19:58 +02:00
Alexander Heldt 81a1b9714f pinwheel: Use programs.ssh.settings 2026-08-16 14:19:58 +02:00
Alexander Heldt 77628fd6bb pinwheel: Pin firefox legacy configPath 2026-08-16 14:19:58 +02:00
Alexander Heldt 5aaf0fc7f8 pinwheel: Use beamPackages.erlang 2026-08-16 14:19:58 +02:00
Alexander Heldt f33c26a5e4 pinwheel: Enable programs.fuse for sshfs 2026-08-16 14:19:58 +02:00
Alexander Heldt 2a8a72b7cb backwards/manatee: Move restic backup to mantee 2026-08-16 14:02:33 +02:00
Alexander Heldt 6f68f7d9e6 manatee: Add support for pdfs in komga-reader 2026-08-16 07:41:45 +00:00
Alexander Heldt cffaec5fe8 manatee: add self-hosted todo app
Wire the offline-first todo app (github: local /home/alex/code/todo) into
manatee, following the app-module convention:

- flake input `todo` (local git checkout for now; gitea URL commented) with
  nixpkgs following.
- hosts/manatee/modules/todo: mod.todo option importing the app's NixOS module;
  runs on 127.0.0.1:8091, secureCookies, token from agenix; the host owns the
  nginx vhost (todo.ppp.pm, forceSSL + useACMEHost) and homepage card.
- mod.todo.enable = true.
- certs: todo.ppp.pm DNS-01 cert via hetzner.
- home-assistant DNS updater: add `todo` to the Hetzner subdomain list.
- secrets: todo-token.age (encrypted access token) + recipients in secrets.nix.
2026-08-13 12:36:18 +00:00
Alexander Heldt d0ef7f5b7e manatee: Add wl-clipboard 2026-07-26 07:36:05 +00:00
Alexander Heldt 5eacb60b50 manatee: Add claude 2026-07-26 07:35:53 +00:00
Alexander Heldt a33a22aa50 Update solo-referee flake input 2026-07-26 07:34:21 +00:00
Alexander Heldt 56c04b1f70 manatee: Guard podman containers against crash-looping
Add a start-limit (5 restarts / 5 min) to the romm, romm-db, romm-redis
and homeassistant podman services so a failing container enters a
`failed` state instead of retrying forever. A slow crash-loop (~5s per
attempt) stays under systemd's default 5-starts-per-10s limit, so a
longer window is needed to catch it.
2026-07-26 07:32:16 +00:00
Alexander Heldt cd81da9bfd Update puppy-tracker flake input 2026-07-24 15:19:12 +00:00
Alexander Heldt ed3e5844a0 Update puppy-tracker flake input 2026-07-24 12:31:14 +00:00
Alexander Heldt 08a3bae6c6 manatee: Add solo-referee module 2026-07-24 12:26:33 +00:00
Alexander Heldt cdb657bd36 pinwheel: Set hyprland config variant 2026-07-23 10:56:37 +02:00
Alexander Heldt 538fb0390a pinwheel: set ASKPASS
And cache the git signing key
2026-07-23 10:56:01 +02:00
Alexander Heldt 8f22f82066 pinwheel: Fix emacs startup
And don't force the async path, wait at least 0.1sec for terminal to
answer with capabilities. Using the async path broke the answer and
inserted 4 spaces in the beginning of the buffer
2026-07-23 10:55:00 +02:00
Alexander Heldt 82b7ce8ccc pinwheel/tadpole: Rename alex.pinwheel-tadpole-ed25519 2026-07-21 09:38:35 +02:00
Alexander Heldt 99b5cb3380 Update puppy-tracker flake input 2026-07-21 07:20:31 +00:00
Alexander Heldt 100a7c455f pinwheel: Remove bitwarden gui client 2026-07-21 08:58:55 +02:00
Alexander Heldt 23bc741d5e Update flake inputs 2026-07-21 08:58:53 +02:00
Alexander Heldt 64e71cce31 pinwheel: Add ai module
With work/personal claude configs
2026-07-21 08:58:52 +02:00