about summary refs log tree commit diff stats
path: root/modules/by-name/ne/networking/module.nix
blob: c5f0e491b08ea9b5c0737c7c952e6d0a9ab2d4c7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
{
  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
    ];
  };
}