72 lines
2.1 KiB
Nix
72 lines
2.1 KiB
Nix
{ config, lib, pkgs, namespace, ... }:
|
|
let
|
|
inherit (lib) types mkIf mkForce mkOption mkEnableOption;
|
|
inherit (lib.${namespace}) mkBoolOpt enabled;
|
|
|
|
cfg = config.${namespace}.system.networking;
|
|
in
|
|
{
|
|
options.${namespace}.system.networking = {
|
|
enable = mkEnableOption "Enable Networking";
|
|
enableIWD = mkEnableOption "Enable IWD";
|
|
useDHCP = mkBoolOpt true "Use DHCP";
|
|
useNetworkd = mkBoolOpt false "Use networkd";
|
|
useStatic = mkOption {
|
|
type = types.nullOr (types.submodule {
|
|
options = {
|
|
interface = mkOption {
|
|
type = lib.types.str;
|
|
description = "Network interface name";
|
|
example = "enp0s3";
|
|
};
|
|
address = mkOption {
|
|
type = types.str;
|
|
description = "Static IP address";
|
|
example = "10.0.20.200";
|
|
};
|
|
defaultGateway = mkOption {
|
|
type = types.str;
|
|
description = "Default gateway IP";
|
|
example = "10.0.20.254";
|
|
};
|
|
nameservers = mkOption {
|
|
type = types.listOf types.str;
|
|
description = "List of DNS servers";
|
|
example = [ "10.0.20.254" "8.8.8.8" ];
|
|
default = [ "8.8.8.8" "8.8.4.4" ];
|
|
};
|
|
};
|
|
});
|
|
default = null;
|
|
description = "Static Network Configuration";
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
environment.systemPackages = with pkgs; [
|
|
mtr
|
|
tcpdump
|
|
traceroute
|
|
];
|
|
|
|
reichard.user.extraGroups = [ "network" ];
|
|
|
|
networking = {
|
|
firewall = enabled;
|
|
useDHCP = mkForce (cfg.useDHCP && cfg.useStatic == null);
|
|
useNetworkd = cfg.useNetworkd;
|
|
} // (lib.optionalAttrs (cfg.enableIWD) {
|
|
wireless.iwd = {
|
|
enable = true;
|
|
settings.General.EnableNetworkConfiguration = true;
|
|
};
|
|
}) // (lib.optionalAttrs (cfg.useStatic != null) {
|
|
inherit (cfg.useStatic) defaultGateway nameservers;
|
|
interfaces.${cfg.useStatic.interface}.ipv4.addresses = [{
|
|
inherit (cfg.useStatic) address;
|
|
prefixLength = 24;
|
|
}];
|
|
});
|
|
};
|
|
}
|