about summary refs log blame commit diff stats
path: root/modules/system/networking/default.nix
blob: c5f0e491b08ea9b5c0737c7c952e6d0a9ab2d4c7 (plain) (tree)
1
2
3
4
5
6
7
8
9
10








                                             










                                                                      







                                           















                                                                 
            

                    
          
        
 



                          
            

                                                            
            


                            
            
        
      
 




                                                                         
      



                                                                                         
 
{
  config,
  lib,
  ...
}: let
  cfg = config.soispha.networking;
in {
  options.soispha.networking = {
    enable = lib.mkEnableOption "networking";

    mode = lib.mkOption {
      type = lib.types.enum ["NetworkManager" "systemd-networkd"];
      example = "systemd-networkd";
      description = "The daemon used to setup networking.";
    };

    userName = lib.mkOption {
      type = lib.types.str;
      default = "soispha";
      description = ''
        The name of the user to allow access to the configured network
      '';
    };

    hostName = lib.mkOption {
      type = lib.types.str;
      example = "apzu";
      description = "The name of the host";
    };
  };

  config = {
    networking.hostName = cfg.hostName;

    systemd.network = lib.mkIf (cfg.mode == "systemd-networkd") {
      networks = {
        "tap0" = {
          name = "tap0";
          bridge = [
            "virbr0"
          ];
        };
        "enp4s0" = {
          name = "enp4s0";
          networkConfig = {
            DHCP = "yes";
            DNSOverTLS = "yes";
            DNSSEC = "yes";
          };
          bridge = [
            "virbr0"
          ];
        };
      };

      netdevs = {
        "tap0" = {
          netdevConfig = {
            Name = "tap0";
            Kind = "tap";
          };
          tapConfig = {
            User = config.users.users."${cfg.userName}".uid;
            Group = "libvirtd";
          };
        };
        "virbr0" = {
          netdevConfig = {
            Name = "br0";
            Kind = "bridge";
          };
        };
      };
    };

    networking.networkmanager = lib.mkIf (cfg.mode == "NetworkManager") {
      enable = true;
      dns = "default";
      wifi = {
        powersave = true;
      };
    };

    users.users."${cfg.userName}".extraGroups = lib.mkIf (cfg.mode == "NetworkManager") [
      "networkmanager" # allows to configure NetworkManager as this user
    ];
  };
}