all repos — nixfiles @ f8c4531f388268ab0a5517d02f619525d121356d

System and user configuration, managed by nix and home-manager

system/hosts/r5.nix (view raw)

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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
{
  config,
  lib,
  pkgs,
  ...
}:
let
  hostName = "r5";
  domain = "home.arpa";
  tailnet = "fin-marlin.ts.net";
in
{
  imports = [
    ../roles/server.nix
  ];
  age.secrets = {
    acme.file = ../../secrets/acme.age;
    syncthing.file = ../../secrets/syncthing.age;
  };

  networking = {
    useDHCP = true;
    inherit domain hostName;
    hosts = {
      "fd7a:115c:a1e0::53" = [
        "tailscale"
        "ts"
      ];
      "192.168.100.1" = [
        "modem"
        "pyur"
      ];
    };
    nameservers = [
      "9.9.9.11"
      "149.112.112.11"
      "2620:fe::11"
      "2620:fe::fe:11"
    ];
    nftables.enable = true;
  };
  systemd.network = {
    enable = true;
  };
  services.resolved = {
    enable = true;
    settings.Resolve = {
      DNS = [ ];
      LLMNR = false;
      MulticastDNS = true;
    };
  };

  environment.systemPackages = with pkgs; [
    file
    tree
    knot-dns
  ];

  users.users.alin = {
    isNormalUser = true;
    extraGroups = [ "wheel" ];
    openssh.authorizedKeys.keys = [
      "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBENXbdPPOq0mA+9bPklpUkikvIXjCEKE5IRwNPNMr5/Ta1J/ND737fexCjEb7YPoAJtaf0gD/JThQQi/RxDTvy4= alin@secretive.marvin.local"
    ];
  };

  services.caddy = {
    globalConfig = ''
      pki {
        ca home {
          name "Home CA"
        }
      }
    '';
    virtualHosts = {
      "${hostName}.${domain}" = {
        serverAliases = [ "${hostName}.${tailnet}" ];
        extraConfig = ''
          tls {
            issuer internal {
              ca home
            }
          }
          root /var/lib/caddy/ca
          file_server browse
        '';
      };
      "ca.${domain}" = {
        extraConfig = ''
          tls {
            issuer internal {
              ca home
            }
          }
          acme_server {
            allow {
              domains *.test *.${domain}
            }
          }
        '';
      };
    };
  };

  nix = {
    settings = {
      max-jobs = 2;
      builders-use-substitutes = true;
    };
  };

  services.timesyncd.enable = false;
  services.chrony = {
    enable = true;
    extraConfig = ''
      rtcdevice /dev/rtc0
      rtcfile /var/lib/chrony/rtc
      rtcautotrim 30

      allow 10.0.0.0/8
      allow fd12:d04f:65d:42::0/56
    '';
  };

  system.stateVersion = "25.11";
}