summaryrefslogtreecommitdiff
path: root/modules/xnet/net/default.nix
blob: 2255f5338271e6a9a977bbc75fb6a7a27f600611 (plain)
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
{ config, lib, ... }:
let
  cfg = config.xnet.net;
  inherit (lib) mkOption mkIf types;
  prefix = "10.26.4";
in
{
  imports = [
    ./sshd.nix
  ];

  options.xnet.net = {
    interface = mkOption {
      type = types.str;
      default = "";
      description = "Network interface connecting to xnet.";
    };

    addr = mkOption {
      type = types.ints.between 0 255;
      description = "Final octet for xnet address.";
      example = 4;
    };
  };

  # TODO:
  #   - Add assertion that each address is only used once across config
  #   - Add each host to each other hosts dns configuration
  config = mkIf (builtins.stringLength cfg.interface > 0) {
    networking.vlans = {
      "${cfg.interface}.4" = {
        inherit (cfg) interface;
        id = 4;
      };
    };

    networking.interfaces = {
      "${cfg.interface}.4".ipv4.addresses = [{
        address = "${prefix}.${toString cfg.addr}";
        prefixLength = 24;
      }];
    };
  };
}