diff --git a/hosts/types/nix-lxc.nix b/hosts/types/nix-lxc.nix index 462d181..0f43597 100644 --- a/hosts/types/nix-lxc.nix +++ b/hosts/types/nix-lxc.nix @@ -37,4 +37,8 @@ system.stateVersion = "25.11"; } ) + { + modules.sw.enable = true; + modules.sw.type = "headless"; + } ] diff --git a/sw/default.nix b/sw/default.nix index 1558f49..c4c604c 100644 --- a/sw/default.nix +++ b/sw/default.nix @@ -31,6 +31,7 @@ in type = types.enum [ "desktop" "kiosk" + "headless" ]; default = "desktop"; description = "Type of system configuration: 'desktop' for normal OS, 'kiosk' for tablet/kiosk mode."; @@ -110,5 +111,15 @@ in ; } )) + (mkIf (cfg.type == "headless") ( + import ./headless { + inherit + config + lib + pkgs + inputs + ; + } + )) ]); } diff --git a/sw/headless/default.nix b/sw/headless/default.nix new file mode 100644 index 0000000..f6d2028 --- /dev/null +++ b/sw/headless/default.nix @@ -0,0 +1,26 @@ +{ + config, + lib, + pkgs, + inputs, + ... +}: + +lib.mkMerge [ + (import ./programs.nix { + inherit + config + lib + pkgs + inputs + ; + }) + (import ./services.nix { + inherit + config + lib + pkgs + inputs + ; + }) +] diff --git a/sw/headless/programs.nix b/sw/headless/programs.nix new file mode 100644 index 0000000..10e3f5b --- /dev/null +++ b/sw/headless/programs.nix @@ -0,0 +1,36 @@ +{ + config, + lib, + pkgs, + inputs, + ... +}: + +with lib; + +let + cfg = config.modules.sw; + basePackages = with pkgs; [ + uv + perl + openssh + ncurses + tmux + htop + binutils + man + git + oh-my-posh + zsh + lm_sensors + ]; +in +{ + environment.systemPackages = subtractLists cfg.excludePackages (basePackages ++ cfg.extraPackages); + + programs.mtr.enable = true; + programs.gnupg.agent = { + enable = true; + enableSSHSupport = true; + }; +} diff --git a/sw/headless/services.nix b/sw/headless/services.nix new file mode 100644 index 0000000..2b981c1 --- /dev/null +++ b/sw/headless/services.nix @@ -0,0 +1,35 @@ +{ + config, + lib, + pkgs, + ... +}: + +{ + services.openssh = { + enable = true; + settings = { + AllowUsers = null; + PasswordAuthentication = true; + PermitRootLogin = "yes"; + }; + }; + + networking = { + dhcpcd.enable = false; + useDHCP = false; + useHostResolvConf = false; + }; + + systemd.network = { + enable = true; + networks."50-eth0" = { + matchConfig.Name = "eth0"; + networkConfig = { + DHCP = "ipv4"; + IPv6AcceptRA = true; + }; + linkConfig.RequiredForOnline = "routable"; + }; + }; +}