Commit Graph

425 Commits

Author SHA1 Message Date
naps62 dd04becb9c chore: drop pipx
Its test suite fails to build on this nixpkgs pin, blocking the whole
generation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 12:40:59 +00:00
naps62 21d9f89674 feat: add missing cli tooling
Ports what was apt-installed on the ubuntu box. rtk matters most: the
claude hooks rewrite commands through it, and it silently no-ops without.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 12:39:11 +00:00
naps62 4ce204d46f chore: drop postgresql from yolo
Nothing connects to it — every database here runs in a container.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 12:15:06 +00:00
naps62 38bfd6a76d fix: raise sunshine fd limit
It leaks a /dev/dri/renderD fd per encoder probe, hits the 1024 default,
and mesa can then no longer dlopen the GBM driver — capture degrades to a
black picture with no error surfaced.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 09:05:28 +00:00
naps62 c97f5999e5 chore: bump agent-skills for hooks and scripts
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 08:56:53 +00:00
naps62 37e44b9a3d fix: sunshine capture value is wlr, not wlgrab
wlgrab is the name the backend logs under, not a valid config value.
Sunshine rejects it, then starts anyway with no encoder — moonlight sees
a 503.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 08:51:55 +00:00
naps62 1cddd495cd feat: alias a=aoe
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 08:44:33 +00:00
naps62 4dcf84d41c feat: per-host claude settings and machine profile
settings.json carries skipDangerousModePermissionPrompt and the rev hook
wiring, so yolo gets its own; other hosts keep the shared one. Machine
profile picks which agent-skills machines/<name>.md is imported.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 08:39:08 +00:00
naps62 032cea0db8 feat: adopt agent-skills, scope aoe config to yolo
Drops the stale skills/commands/CLAUDE.md from home/common/programs/claude
in favour of the agent-skills flake, which is the maintained copy. The
module keeps what agent-skills does not own: packages, statusline and
settings.json.

aoe's config.toml moves to home/yolo — it sets yolo_mode_default, which
starts sessions with permission checks skipped.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 08:35:08 +00:00
naps62 352b87192d fix: disable zram on yolo, use aoe-with-web
zram wedged shutdown faulting stored pages back in, and the VM already
has a real swap partition. aoe-with-web is the same binary plus `serve`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 08:12:48 +00:00
naps62 4bea767b2e feat: serial console on yolo
Needed before switching to vga: virtio-gl, which leaves no QEMU console
surface for noVNC or screendump.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 08:05:24 +00:00
naps62 2e23c695a2 feat: install codex cli, add yolo ssh host aliases
cliPackage only points the desktop app at codex; it never put the cli on
PATH, so `codex` was missing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 07:59:34 +00:00
naps62 e0e71a44d1 chore: drop claude-rc
No longer used.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 07:49:39 +00:00
naps62 0501db564d fix: create claude-rc log dir
systemd does not create the parent of StandardOutput=append:, failing
every instance with 209/STDOUT on a fresh machine.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 07:46:26 +00:00
naps62 52618a852a feat: add node and pnpm to the shared dev tooling
nodejs.nix shipped only the language server, so a fresh machine has no
node runtime — rev's clone cannot install its dependencies.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 07:44:08 +00:00
naps62 0fa1a31489 fix: flattened repo layout under ~/tea
Repos moved from ~/tea/<org>/<repo> to ~/tea/<repo>, so the rev and
agent-skills unit paths no longer resolved. Also captures aoe schema keys
added on first run.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 07:40:42 +00:00
naps62 bb65e34bca chore: move yolo flake path to ~/tea/nixos-config
Also overrides the home-manager nh.flake, which sets NH_FLAKE and was
still pointing at the ~/projects default, so bare `nh home switch` never
resolved on this host.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 07:38:15 +00:00
naps62 7dc2b581d3 feat: declare aoe config as a shared module
Vendors config.toml and moves the package into common/programs/aoe, so
any host that wants aoe imports one thing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 06:46:15 +00:00
naps62 de79327942 fix: write claude-rc@ template as a plain file
home-manager starts every unit it manages, and starting a template with
no instance errors out, failing activation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 06:41:32 +00:00
naps62 77bdbe108d feat: add yolo host
New NixOS VM on proxmox, replacing the Ubuntu box. Reuses the existing
Hyprland config; remote access is Sunshine/Moonlight rather than xrdp,
since xrdp cannot drive a wayland compositor.

Two fixes here are not yolo-specific and affect any fresh install:
git at system level (nix needs it for the type = "git" hyprland input,
but git only came from home-manager, so neither rebuild could run), and
dropping the yogurt input, whose private repo made home-manager
un-evaluatable without GitHub auth.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 06:30:54 +00:00
Miguel Palhas f7947375e3 wip
CI / lint (push) Successful in 33s
CI / eval (push) Failing after 1m37s
2026-08-10 09:49:14 +01:00
Miguel Palhas 3d9c273fd3 wip
CI / lint (push) Successful in 33s
CI / eval (push) Failing after 1m41s
2026-07-30 13:18:47 +01:00
Miguel Palhas 8cfa920ea8 wip
CI / lint (push) Successful in 33s
CI / eval (push) Failing after 1m40s
2026-07-29 16:08:21 +01:00
Miguel Palhas 5ed3026903 updates 2026-07-29 15:49:43 +01:00
Miguel Palhas a1c03448e9 wip
CI / lint (push) Successful in 32s
CI / eval (push) Failing after 1m40s
2026-07-16 17:59:22 +01:00
Miguel Palhas 938a900fbe feat(home): package Claude Desktop and T3 Code, with per-host UI scaling
Add two Electron AI desktop apps built from their official upstream
binaries and wire them into the home config (x86_64 only):

- claude-desktop: Anthropic's official Linux .deb, unpacked via dpkg +
  autoPatchelfHook. Wrapper disables the SUID sandbox (nix store can't
  set it up) and adds the NixOS GL driver path so it hardware-accelerates
  instead of falling back to software rendering.
- t3-code: pingdotgg/t3code AppImage via appimageTools.wrapType2, with
  desktop entry + hicolor icons.

Both share a new custom.aiApps.deviceScaleFactor option feeding
--force-device-scale-factor; konishi's 4K@1x monitors set it to "1.5",
arrakis stays native.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 14:06:55 +01:00
Miguel Palhas f64cc3a803 fix(ci): fetch yogurt input over https so CI can eval without ssh key
CI / lint (push) Successful in 1m5s
CI / eval (push) Failing after 2m28s
The yogurt flake input was pinned via git+ssh://, which the Gitea CI
runner can't fetch (no GitHub SSH key), failing the eval job. Switch to
git+https:// — repo is anonymously cloneable, same rev/narHash.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 11:27:18 +01:00
Miguel Palhas 79d4bcc989 fixing
CI / lint (push) Successful in 1m8s
CI / eval (push) Failing after 2m31s
2026-07-08 10:15:41 +01:00
Miguel Palhas 3c7a65b190 retroarch
CI / lint (push) Successful in 1m21s
CI / eval (push) Failing after 2m29s
2026-07-06 16:28:40 +01:00
Miguel Palhas eea9bdb095 sunshine fixes 2026-07-06 09:54:23 +01:00
Miguel Palhas c4a5515297 gaming: move home module to gaming/ dir, add moonlight client toggle
CI / lint (push) Successful in 1m5s
CI / eval (push) Failing after 2m20s
Mirror the hosts/common/features/gaming/ layout on the home side: turn the
single gaming.nix into a gaming/ directory. Moonlight (the client
counterpart to the Sunshine host) becomes moonlight.nix, gated by its own
custom.gaming.moonlight option so a host can install just the streaming
client without the full launcher/Proton toolkit (custom.gaming.enable).

- gaming.nix -> gaming/default.nix (imports moonlight.nix)
- gaming/moonlight.nix: custom.gaming.moonlight -> moonlight-qt
- arrakis: import gaming module, set custom.gaming.moonlight = true
  (replaces the one-off home.packages line)
- konishi: update import path to the directory

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-06 09:49:04 +01:00
Miguel Palhas afd9646189 zen: switch from twilight nightly to stable channel
CI / lint (push) Successful in 1m8s
CI / eval (push) Failing after 2m24s
twilight re-publishes under the same 1.22t tag, so the pinned hash goes
stale and `nh home switch` fails with a fixed-output hash mismatch. Move
to the stable `default` package (branded zen-beta, 1.21.5b), which uses
proper versioned releases.

- zen-browser.nix: twilight-official -> default
- xdg.nix: zen-twilight.desktop -> zen-beta.desktop mimeapp defaults
- flake.lock: bump zen-browser input

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-06 09:38:31 +01:00
Miguel Palhas eab82e8ff0 claude updates 2026-07-06 08:45:22 +01:00
Miguel Palhas 75198e4429 konishi: autologin straight into hyprlock
CI / lint (push) Successful in 1m11s
CI / eval (push) Failing after 2m28s
SDDM auto-logs naps62 in and Hyprland locks immediately via hyprlock
(exec-once), so a cold boot lands on the themeable lock screen instead of
the SDDM greeter. Safe here (no FDE makes SDDM-vs-autologin marginal) and it
lets Moonlight reach the box after a cold boot, not just from suspend, since
Sunshine only runs once a session exists. konishi-only.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-05 15:55:22 +01:00
Miguel Palhas 4f2438d383 hyprland: replace noctalia locker with hyprlock
noctalia's built-in lock screen is hard to theme and opaque to logind
(LockedHint never flips). Swap to hyprlock: clean dark theme, drive it from
hypridle (idle + before-sleep via loginctl lock-session) so logind tracks
lock state, and add a $mod CTRL+L manual lock bind. Applies to both hosts
that share this module (konishi + arrakis).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-05 15:55:22 +01:00
Miguel Palhas 923b884eff gaming: pin Steam Big Picture + games to DP-1/ws3
Big Picture shares the plain `steam` WM_CLASS, so it opened on whatever
monitor the cursor was on rather than the streamed one; match its title
instead and pin to ws3 (DP-1's persistent workspace, what the stream
captures). Move the steam_app_ game rule from ws6 to ws3 too so games and
Big Picture share one streamed workspace and launching a game doesn't flip
DP-1 to a different workspace.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-05 14:59:22 +01:00
Miguel Palhas 624315821b konishi: enable Wake-on-LAN on enp5s0
Arm magic-packet WoL on the Intel igc NIC (re-applied every boot) so
Moonlight can wake the box from suspend to stream. Still needs "Wake on
LAN" enabled in BIOS.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-05 14:59:22 +01:00
Miguel Palhas 4d4f9a0b5e steam: stop Big Picture GPU sandbox crash (-cef-disable-gpu-sandbox)
Steam's CEF UI intermittently crashed its GPU child (exit_code=8704) on
NVIDIA+Wayland, falling back to CPU rendering and making Big Picture a
slideshow at 4K/HiDPI. Bake -cef-disable-gpu-sandbox into every steam
invocation via extraArgs so it covers all entry points (desktop, CLI,
Sunshine's Big Picture tile) — launch flags only apply on the invocation
that first starts Steam.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-05 14:59:22 +01:00
Miguel Palhas e4b96ba019 konishi/hyprland: launch Steam games fullscreen on DP-1
CI / lint (push) Successful in 1m6s
CI / eval (push) Failing after 2m23s
Steam/Proton titles run under XWayland with WM_CLASS steam_app_<appid>.
Without a rule they open tiled on whatever monitor Steam is on (the
primary, bottom-left HDMI-A-1). Match steam_app_.* and send them
fullscreen to workspace 6 (DP-1, top-left). Native games use their own
class and can be added individually.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-04 14:16:29 +01:00
Miguel Palhas fa9be89d68 flake: bump nixpkgs (sunshine 2025.924 -> 2026.516, security fix)
CI / lint (push) Successful in 1m4s
CI / eval (push) Failing after 2m31s
nixpkgs 2026-06-10 -> 2026-06-29. Pulls in Sunshine 2026.516.143833,
which ships critical security fixes (flagged in the Sunshine web UI).
CUDA/NVENC override carries over: verified the new build still probes
h264_nvenc / hevc_nvenc / av1_nvenc.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-03 17:04:50 +01:00
Miguel Palhas a273e10d29 sunshine: enable NVENC hardware encoding on NVIDIA
Default nixpkgs sunshine is built -DSUNSHINE_ENABLE_CUDA=FALSE, so every
NVENC probe died with "Couldn't scale frame" and it fell back to CPU
x264. Fix:

- package = sunshine.override { cudaSupport = true; } — gives it the
  CUDA scaling/colour-conversion path. Verified: probe now finds
  h264_nvenc / hevc_nvenc / av1_nvenc.
- LD_LIBRARY_PATH=/run/opengl-driver/lib on the service so libcuda.so.1
  (NVIDIA driver) is discoverable.
- capSysAdmin = false — Hyprland/wlroots capture via wlr-screencopy needs
  no CAP_SYS_ADMIN, and the setcap wrapper's secure-exec mode would strip
  LD_LIBRARY_PATH and break libcuda loading.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-03 10:56:38 +01:00
Miguel Palhas c81454c680 claude: sync settings.json (model opus[1m], tui fullscreen)
Bring the live ~/.claude/settings.json changes upstream so the
mutable-file guard stops aborting home activation.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-03 10:50:58 +01:00
Miguel Palhas 7fff73e776 gaming: add Steam/Sunshine stack + user-space toolkit
Host (hosts/common/features/gaming/):
- move steam.nix under gaming/, add gamemode + gamescope (capSysNice)
- sunshine.nix: Sunshine stream host for Moonlight/Nvidia Shield
  (openFirewall, capSysAdmin for Wayland/KMS capture, autoStart)

Home (home/common/programs/gaming.nix):
- reusable custom.gaming module: Lutris, Heroic, ProtonPlus,
  protontricks, MangoHud, vkbasalt, vulkan-tools
- NVIDIA-specific extras isolated behind custom.gaming.nvidia

Wire konishi: host imports ../gaming; home enables custom.gaming
with nvidia = true.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-03 10:50:38 +01:00
Miguel Palhas ff408faf69 yogurt
CI / eval (push) Failing after 3m22s
CI / lint (push) Successful in 55s
2026-07-03 07:14:01 +01:00
Miguel Palhas 1f89394e40 ssh
CI / lint (push) Successful in 2m26s
CI / eval (push) Successful in 5m34s
2026-07-01 18:42:17 +01:00
Miguel Palhas 195ee328de spicetify: switch to comfy theme (rose-pine)
CI / lint (push) Successful in 1m15s
CI / eval (push) Successful in 3m7s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 10:57:36 +01:00
Miguel Palhas 233939d77d ssh: auto-forward yolo ports 47100/47101
Add LocalForward entries for 47100/47101 to the yolo host, and set
LogLevel=ERROR to silence the INFO-level "channel open failed: connection
refused" noise when a forwarded port has nothing listening yet.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 10:57:36 +01:00
Miguel Palhas 498cea267d home: add nh + bump zen-browser
Enable the home-manager programs.nh module (installs nh, sets NH_FLAKE so
`nh home switch` finds this repo). Re-pin zen-browser to the 2026-06-28
revision to clear a stale twilight fixed-output-derivation hash mismatch.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 10:57:36 +01:00
Miguel Palhas d9000c0d00 ci: eval configs via nix eval (allow IFD) instead of flake check --no-build
CI / lint (push) Successful in 1m11s
CI / eval (push) Successful in 3m9s
user.nix fetches SSH keys via fetchurl+readFile (import-from-derivation);
--no-build blocks the IFD fetch, failing eval in a fresh store. Evaluating
the toplevel/activation drvPaths permits IFD without building the toplevels.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 20:34:26 +01:00
Miguel Palhas 82205727cd ci: make lint steps non-gating (step-level continue-on-error)
CI / lint (push) Successful in 1m25s
CI / eval (push) Failing after 2m6s
Job-level continue-on-error still rendered red and skipped statix/deadnix
after nixfmt failed. Step-level lets all three run without failing the job.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 18:56:33 +01:00