From ce12c90affc3245474f357c188f239ac0dfbb348 Mon Sep 17 00:00:00 2001 From: alexion Date: Mon, 10 Aug 2026 21:50:22 -0400 Subject: [PATCH] feat(actualbudget): add NixOS guest --- guests/actualbudget.nix | 23 ++++++++++++++++++ hosts/pikachu/default.nix | 49 +++++++++++++++++++++++++++++++++++---- 2 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 guests/actualbudget.nix diff --git a/guests/actualbudget.nix b/guests/actualbudget.nix new file mode 100644 index 0000000..24da98a --- /dev/null +++ b/guests/actualbudget.nix @@ -0,0 +1,23 @@ +args@{ my, ... }: +# Actual Budget in a NixOS guest, with durable state bind-mounted from the host. +my.guest { + name = "actualbudget"; + interior = { + users.users.actual = { + isSystemUser = true; + uid = 20001; + group = "storage"; + }; + + services.actual = { + enable = true; + openFirewall = true; + user = "actual"; + group = "storage"; + settings = { + port = 5006; + dataDir = "/var/lib/actual"; + }; + }; + }; +} args diff --git a/hosts/pikachu/default.nix b/hosts/pikachu/default.nix index 4ba4cae..fd7b355 100644 --- a/hosts/pikachu/default.nix +++ b/hosts/pikachu/default.nix @@ -20,14 +20,42 @@ systemd.network = { enable = true; - networks."10-uplink" = { - matchConfig.MACAddress = "78:55:36:07:af:49"; - networkConfig.DHCP = "yes"; - linkConfig.RequiredForOnline = "routable"; + netdevs = { + "40-br-vlan20".netdevConfig = { + Name = "br-vlan20"; + Kind = "bridge"; + }; + "40-vlan20" = { + netdevConfig = { + Name = "vlan20"; + Kind = "vlan"; + }; + vlanConfig.Id = 20; + }; + }; + + networks = { + "10-uplink" = { + matchConfig.MACAddress = "78:55:36:07:af:49"; + networkConfig.DHCP = "yes"; + vlan = [ "vlan20" ]; + linkConfig.RequiredForOnline = "routable"; + }; + "40-vlan20" = { + matchConfig.Name = "vlan20"; + networkConfig.Bridge = "br-vlan20"; + linkConfig.RequiredForOnline = "no"; + }; + "40-br-vlan20" = { + matchConfig.Name = "br-vlan20"; + linkConfig.RequiredForOnline = "no"; + }; }; }; networking.useDHCP = false; + modules.network.vlans = [ 20 ]; + boot.zfs.forceImportRoot = false; modules.zfs = { @@ -43,6 +71,19 @@ modules.git.enable = true; modules.toolkit.enable = true; + guests.actualbudget = { + enable = true; + autoStart = false; + vlan = 20; + mac = "BC:24:11:C1:CD:28"; + mounts."/var/lib/actual".hostPath = "/pikachu/data/actualbudget"; + limits = { + memory = "2G"; + cpu = "200%"; + tasksMax = 512; + }; + }; + environment.systemPackages = with pkgs; [ pciutils smartmontools