From 3c79a42686239c84ab6531f21f51882e4c622732 Mon Sep 17 00:00:00 2001 From: Collin Williams <96917990+bluedragon1221@users.noreply.github.com> Date: Tue, 30 Dec 2025 10:26:25 -0600 Subject: allow for configuring dhcp via networkd --- modules/services/nixos/networking/default.nix | 5 ++- modules/services/nixos/networking/networkd.nix | 50 ++++++++++++++++++++++++++ modules/services/nixos/networking/static.nix | 40 --------------------- modules/services/options.nix | 33 +++++++++++------ 4 files changed, 77 insertions(+), 51 deletions(-) create mode 100644 modules/services/nixos/networking/networkd.nix delete mode 100644 modules/services/nixos/networking/static.nix (limited to 'modules') diff --git a/modules/services/nixos/networking/default.nix b/modules/services/nixos/networking/default.nix index de573fe..076dc33 100644 --- a/modules/services/nixos/networking/default.nix +++ b/modules/services/nixos/networking/default.nix @@ -2,13 +2,16 @@ imports = [ ./iwd.nix ./networkmanager.nix - ./static.nix + ./networkd.nix ]; # DNS services.resolved = { enable = true; + dnsovertls = "opportunistic"; domains = [ + "9.9.9.9#dns.quad9.net" + "149.112.112.112#dns.quad9.net" "1.1.1.1" "1.0.0.1" ]; diff --git a/modules/services/nixos/networking/networkd.nix b/modules/services/nixos/networking/networkd.nix new file mode 100644 index 0000000..df14a08 --- /dev/null +++ b/modules/services/nixos/networking/networkd.nix @@ -0,0 +1,50 @@ +{ + lib, + config, + ... +}: let + cfg = config.collinux.services.networking.networkd; + + dhcp_enabled = cfg.static == null; +in + lib.mkIf cfg.enable { + networking = { + wireless = { + enable = true; + networks.${cfg.ssid}.pskRaw = "ext:psk"; + secretsFile = cfg.pskFile; + }; + + # Disable default networking stuff + dhcpcd.enable = false; + useDHCP = false; + networkmanager.enable = false; + }; + + systemd.network = { + enable = true; + networks."10-static-lan" = { + name = "wl*"; + + networkConfig = + ( + if dhcp_enabled + then { + DHCP = "yes"; + } + else { + Address = cfg.static.ip; + Gateway = cfg.static.gateway; + # DNS is managed by systemd-resolvd + DHCP = "no"; + } + ) + // { + # diable ipv6 addresses + IPv6AcceptRA = "no"; + IPv6PrivacyExtensions = "no"; + LinkLocalAddressing = "no"; + }; + }; + }; + } diff --git a/modules/services/nixos/networking/static.nix b/modules/services/nixos/networking/static.nix deleted file mode 100644 index 9338a6a..0000000 --- a/modules/services/nixos/networking/static.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ - lib, - config, - ... -}: let - cfg = config.collinux.services.networking.static; -in - lib.mkIf cfg.enable { - networking = { - wireless = { - enable = true; - networks.${cfg.ssid}.pskRaw = "ext:psk"; - secretsFile = config.age.secrets.${cfg.pskFile}.path; - }; - - # Disable default networking stuff - dhcpcd.enable = false; - useDHCP = false; - networkmanager.enable = false; - }; - - systemd.network = { - enable = true; - networks."10-static-lan" = { - name = "wl*"; - - networkConfig = { - Address = "${cfg.ip}/24"; - Gateway = cfg.gateway; - DNS = "1.1.1.1"; - DHCP = "no"; - - # diable ipv6 addresses - IPv6AcceptRA = "no"; - IPv6PrivacyExtensions = "no"; - LinkLocalAddressing = "no"; - }; - }; - }; - } diff --git a/modules/services/options.nix b/modules/services/options.nix index 78a5a8f..59b8e01 100644 --- a/modules/services/options.nix +++ b/modules/services/options.nix @@ -7,21 +7,29 @@ in { options = { collinux.services = { - networking = { + networking = let + ip_addr = lib.types.strMatching "^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$"; + ip_addr_cidr = lib.types.strMatching "^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])/(3[0-2]|[12]?[0-9])$"; + in { enable = mkEnableOption "wifi"; + iwd.enable = mkEnableOption "lightweight wifi daemon"; networkmanager.enable = mkEnableOption "heavier wifi daemon"; - static = let - ip_addr = - lib.types.strMatching - "^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$"; - in { + networkd = { enable = mkEnableOption "set static IP (systemd-networkd)"; ssid = mkOption {type = lib.types.str;}; - ip = mkOption {type = ip_addr;}; - gateway = mkOption {type = ip_addr;}; pskFile = mkOption {type = lib.types.str;}; + + static = lib.mkOption { + type = lib.types.nullOr (lib.types.submodule { + options = { + ip = mkOption {type = ip_addr_cidr;}; + gateway = mkOption {type = ip_addr;}; + }; + }); + default = null; + }; }; tailscale.enable = mkEnableOption "tailscale"; sshd.enable = mkEnableOption "OpenSSH server"; @@ -46,7 +54,12 @@ in { }; }; adguard.enable = mkEnableOption "AdGuardHome network-wide adblocking"; - caddy.enable = mkEnableOption "caddy https server"; + caddy = { + enable = mkEnableOption "caddy https server"; + envFile = mkOption { + type = lib.types.str; + }; + }; }; }; }; @@ -54,7 +67,7 @@ in { config = { assertions = [ { - assertion = with config.collinux.services.networking; (iwd.enable && !networkmanager.enable && !static.enable) || (!iwd.enable && networkmanager.enable && !static.enable) || (!iwd.enable && !networkmanager.enable && static.enable); + assertion = with config.collinux.services.networking; (iwd.enable && !networkmanager.enable && !networkd.enable) || (!iwd.enable && networkmanager.enable && !networkd.enable) || (!iwd.enable && !networkmanager.enable && networkd.enable); message = "only one networking method (iwd, networkmanager, static) can be active"; } ]; -- cgit v1.3.1