Commit Graph

396 Commits

Author SHA1 Message Date
zuckerberg 36a2a424c5 Update flake
Check Flake / check-flake (push) Has been cancelled
2026-05-15 09:32:58 -07:00
zuckerberg 4899a37a82 Add gamescope (steam) login option 2026-03-14 18:58:29 -07:00
zuckerberg 99200dc201 Initial KDE Plasma Bigscreen mode 2026-03-14 18:58:29 -07:00
zuckerberg eac627765a Disable bolt for now since I don't use it and it sometimes randomly hangs 2026-03-14 18:58:29 -07:00
zuckerberg 84745a3dc7 Remove recyclarr, I'm not using it currently 2026-03-14 18:58:29 -07:00
zuckerberg 23b0695cf2 Add DDR5 DIMM temperature monitoring with ntfy alerts
Monitors spd5118 sensors every 5 minutes and sends an ntfy
notification if any DIMM exceeds 55°C. Opt-in via
ntfy-alerts.dimmTempCheck.enable, enabled on s0.
2026-03-14 18:58:29 -07:00
zuckerberg b1a26b681f Add Music Assistant to Dashy and Gatus 2026-03-14 18:58:29 -07:00
zuckerberg cd864b4061 Remove LanguageTool service 2026-03-14 18:58:29 -07:00
zuckerberg c6eeea982e Add ignoredUnits option; skip logrotate failures on s0 because they are spurious 2026-03-03 21:46:19 -08:00
zuckerberg 43ec75741d Fix memos failing to open SQLite database on ZFS
Check Flake / check-flake (push) Failing after 18s
ProtectSystem=strict with ReadWritePaths fails silently on ZFS submounts
(/var/lib is a separate dataset), leaving the data dir read-only. Downgrade
to ProtectSystem=full which leaves /var writable while still protecting
/usr and /boot.
2026-03-01 17:54:11 -08:00
zuckerberg 000bbd7f4d Update interface names because usePredictableInterfaceNames is now off 2026-03-01 17:52:42 -08:00
zuckerberg 7ec85cb406 Move s0 to using systemd networkd 2026-03-01 12:36:10 -08:00
zuckerberg e9e925eb46 Fix annoying 'refused connection' logs spamming dmesg due to spotify connect 2026-03-01 12:36:10 -08:00
zuckerberg 2ed58e1ec5 Update flake inputs; drop navidrome; fix noto-fonts subset glob
- Update nixpkgs (Feb 27), home-manager, microvm, nix-index-database,
  claude-code-nix, dailybot
- Remove navidrome service, nginx proxy, dashy entry, and gatus monitor
- Add noto-fonts-subset patch for libreoffice/collabora (noto-fonts
  2026.02.01 switched from variable to static font filenames)
- Add incus-lts writableTmpDirAsHomeHook overlay for sandbox HOME fix
- Add samba4Full overlay to disable CephFS (ceph pinned to python3.11)
2026-03-01 12:36:10 -08:00
zuckerberg facaa261bc Add missing services to Gatus monitoring and Dashy dashboard
Check Flake / check-flake (push) Successful in 3m50s
Gatus: Add Roundcube, Collabora, and all s0 services (Jellyfin,
servarr stack, Home Assistant, ESPHome, Zigbee2MQTT, Frigate,
Valetudo, Sandman, Vikunja, Actual Budget, Linkwarden, Memos,
Outline, LanguageTool, Unifi) in a new "s0" group.

Dashy: Add missing public services (ntfy, Librechat, Owncast,
Navidrome, Collabora, Gatus) to Services section. Add new Home
Automation and Productivity sections. Add Unifi to Network.
Remove disabled Jitsi Meet.
2026-02-26 23:41:06 -08:00
zuckerberg f2f5761c83 Rewrite PIA VPN as multi-container bridge architecture
Check Flake / check-flake (push) Successful in 3m15s
Replace the single VPN container (veth pair, host-side auth scripts) with a
multi-container setup on a shared bridge network:

- Dedicated VPN container handles all PIA auth, WireGuard config, NAT, and
  optional port forwarding DNAT
- Service containers default-route through VPN container (leak-proof by topology)
- Host runs tinyproxy on bridge for PIA API bootstrap before WG is up
- WG interface is still created in host netns and moved into VPN container
  namespace
- Monthly renewal to ensure that connection stays up (PIA allows connections to
  last up to 2 months)
- Drop OpenVPN support entirely
2026-02-26 19:51:35 -08:00
zuckerberg 288a2841aa Replace Uptime Kuma with Gatus for declarative uptime monitoring
Check Flake / check-flake (push) Successful in 2m4s
Gatus is configured entirely via YAML (mapped from Nix attrsets),
making nix-config the single source of truth for all monitoring
config instead of Uptime Kuma's web UI/SQLite database.
2026-02-22 17:30:03 -08:00
zuckerberg a697ea10ad Add daily ZFS health check with ntfy alerts and introduce ntfy role
Add a zfs-alerts module that runs a daily health check on ZFS machines,
sending detailed ntfy notifications for degraded pools, data errors, or
drive errors. Introduce an "ntfy" system role to decouple ntfy alerting
from the server/personal roles, and assign it to all machines.
2026-02-22 17:17:40 -08:00
zuckerberg 339eac52c6 Add uptime kuma
Check Flake / check-flake (push) Successful in 9m15s
2026-02-22 15:49:26 -08:00
zuckerberg 156f0183bd Add ntfy push notification server on ponyo 2026-02-21 23:29:36 -08:00
zuckerberg 8b92e51ef7 Remove phil machine and aarch64 ISO/kexec 2026-02-21 21:43:12 -08:00
zuckerberg 5a0a525f64 Add Attic binary cache and containerize gitea runner
Replace nix-serve-only setup with Attic for managed binary caching with
upstream filtering and GC. Move gitea actions runner from host into an
isolated NixOS container with private networking. nix-serve kept alongside
Attic during migration.
2026-02-21 21:43:08 -08:00
zuckerberg 9154595910 Ad Incus sandbox on fry I've already been using for a while now
Check Flake / check-flake (push) Successful in 3m35s
2026-02-17 21:35:23 -08:00
zuckerberg 99ef62d31a Fix unused vars
Check Flake / check-flake (push) Successful in 1m21s
2026-02-11 23:12:00 -08:00
zuckerberg 10f3e3a7bf Remove old stale/unused configuration 2026-02-11 22:47:38 -08:00
zuckerberg d6a0e8ec49 Disable tailscaleAuth for now because it doesn't work with tailscale's ACL tagged group
Check Flake / check-flake (push) Failing after 35s
2026-02-09 19:57:20 -08:00
zuckerberg cf71b74d6f Add Incus container support to sandboxed workspaces
- Add incus.nix module for fully declarative Incus/LXC containers
- Build NixOS LXC images using nixpkgs.lib.nixosSystem
- Ephemeral containers: recreated on each start, cleaned up on stop
- Use flock to serialize concurrent container operations
- Deterministic MAC addresses via lib.mkMac to prevent ARP cache issues
- Add veth* to NetworkManager unmanaged interfaces
- Update CLAUDE.md with coding conventions and shared lib docs
2026-02-08 15:16:40 -08:00
zuckerberg 87db330e5b Add sandboxed-workspace module for isolated dev environments
Provides isolated development environments using either VMs (microvm.nix)
or containers (systemd-nspawn) with a unified configuration interface.

Features:
- Unified options with required type field ("vm" or "container")
- Shared base configuration for networking, SSH, users, packages
- Automatic SSH host key generation and persistence
- Shell aliases for workspace management (start/stop/status/ssh)
- Automatic /etc/hosts entries for workspace hostnames
- restartIfChanged support for both VMs and containers
- Passwordless doas in workspaces

Container backend:
- Uses hostBridge for proper bridge networking with /24 subnet
- systemd-networkd for IP configuration
- systemd-resolved for DNS

VM backend:
- TAP interface with deterministic MAC addresses
- virtiofs shares for workspace directories
- vsock CID generation
2026-02-07 22:43:08 -08:00
zuckerberg 2810ba1412 Enable flakes in kexec image and comma integration
Check Flake / check-flake (push) Successful in 20m21s
2026-01-24 15:02:42 -08:00
zuckerberg d8eff26864 VLAN workaround for now 2026-01-14 18:56:24 -08:00
zuckerberg 5f7335c2a0 Simplify kexec and iso image generation 2026-01-14 18:54:55 -08:00
zuckerberg da9a8f8c03 Update nixpkgs 2026-01-11 14:25:03 -08:00
zuckerberg 415cbca33e VLAN workaround for now 2026-01-10 23:04:48 -08:00
zuckerberg 51272a172b Add system76-keyboard-configurator to fry 2026-01-10 23:03:19 -08:00
zuckerberg f053c677e8 Set up openwebui + ollama 2026-01-10 23:02:43 -08:00
zuckerberg e0af023ac9 barrier was removed from nixpkgs 2026-01-10 22:51:09 -08:00
zuckerberg c0088553ff jellyfin-media-player was removed from nixpkgs 2026-01-10 22:49:04 -08:00
zuckerberg cf087b0e39 Add fry
Check Flake / check-flake (push) Successful in 1h22m48s
2025-10-12 13:36:02 -07:00
zuckerberg cb1c4752ec Use latest kernel on Howl 2025-10-12 13:35:23 -07:00
zuckerberg 0c455baebd Add languagetool
Check Flake / check-flake (push) Successful in 5m13s
2025-08-16 19:04:10 -07:00
zuckerberg b58df0632a Add outline service
Check Flake / check-flake (push) Successful in 15m2s
2025-08-10 20:49:50 -07:00
zuckerberg 4956e41285 Add memos service 2025-08-10 19:03:35 -07:00
zuckerberg ead6653de1 Add services to tailscale auth 2025-08-10 19:02:47 -07:00
zuckerberg dd4a5729d4 Workaround for broken librespot spotify api integration
Check Flake / check-flake (push) Successful in 4m49s
2025-08-10 15:18:29 -07:00
zuckerberg f248c129c8 Open port 8095 for music assistant too 2025-08-10 15:17:52 -07:00
zuckerberg c011faab18 Use flaresolverr with linkwarden 2025-08-10 15:17:27 -07:00
zuckerberg a5d0b3b748 Bring back APU2 router for more experimentation
Check Flake / check-flake (push) Successful in 19m21s
2025-08-05 19:45:50 -07:00
zuckerberg ed3bee2e4e Improve minimal iso so it can boot on APU2 from sd card 2025-08-05 19:44:49 -07:00
zuckerberg dbde2a40f2 Add linkwarden 2025-08-05 19:42:29 -07:00
zuckerberg 6c69d82156 Add support for Home Assistant voice (whisper + piper + cloud llm) and Music Assistant via Spotify by librespot
Music assistant has custom modifications they made to librespot that they haven't bothered to even try to upstream.
Thus, they require a custom librespot.  I tried and tried and tried and tried to just override the one already in nixpkgs
but I had trouble doing so despite copying the pattern already shown in nixpkgs for overriding the src of a cargo pkg
(See mopidy) but it just didn't work... Oh well. So I just patch nixpkgs instead with the new source. It works I guess.

This is about where I gave up...

```nix
nixpkgs.overlays = [
  (final: prev: {
    # Cannot use librespot upstream because music-assistant requires custom changes
    # that they never bothered to even try to uptream
    librespot = prev.librespot.overrideAttrs (oldAttrs: rec {
      src = prev.fetchFromGitHub {
        owner = "music-assistant";
        repo = "librespot";
        rev = "786cc46199e583f304a84c786acb0a9b37bc3fbd";
        sha256 = "sha256-xaOrqC8yCjF23Tz31RD3CzqZ3xxrDM6ncW1yoovEaGQ=";
      };

      cargoDeps = oldAttrs.cargoDeps.overrideAttrs (oldAttrs': {
        vendorStaging = oldAttrs'.vendorStaging.overrideAttrs {
          outputHash = "sha256-SqvJSHkyd1IicT6c4pE96dBJNNodULhpyG14HRGVWCk=";
        };
      });
    });
  })
];
```
2025-08-05 19:37:50 -07:00