summaryrefslogtreecommitdiff
path: root/hosts/tacitus/default.nix
blob: 8ddd22186db1f3fe7a30d7bec9d6ab9856322dc4 (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
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
{
  lib,
  config,
  ...
}:
{
  imports = [
    ./network.nix
    ./disko.nix
    ./hardware.nix
    ./../../services/mysql.nix
    ./../../services/kanboard.nix
    ./../../services/firefly_iii.nix
  ];

  wilkuu.mjmap = {
    enable = true;
    users = [ "wilkuu" ];
  };
  wilkuu.services = {
    prometheus.enableScraper = true;
    prometheus.enableExporters = true;
    test_endpoint.enable = false;
    mysql.enable = true;
    kanboard = {
      enable = true;
      domain = "kb.wilkuu.xyz";
    };
    firefly-iii = {
      enable = true;
      enable-importer = true;
      domain = "fin.wilkuu.xyz";
      importer-domain = "fin-imp.wilkuu.xyz";
    };
  };

  addons = {
    desktop.xfce.enable = lib.mkForce true;
    gpg.enable = true;
    virtualisation.host = true;
  };
  nix.settings.trusted-users = [ "wilkuu" ];
  # Bootloader and boot setup.
  boot.loader.efi.canTouchEfiVariables = lib.mkDefault true;
  boot.loader.limine = {
    efiSupport = true;
    enable = true;
    secureBoot = {
      enable = true;
      autoGenerateKeys = true;
      autoEnrollKeys = {
        extraArgs = [
          "--microsoft"
          "--firmware-builtin"
        ];
      };
    };
  };

  boot.initrd.systemd.enable = true;
  users.users.wilkuu.extraGroups = [ "tss" ];

  security.tpm2.enable = true;
  security.tpm2.pkcs11.enable = true;
  security.tpm2.tctiEnvironment.enable = true;
  # Networking setup
  networking.hostName = "tacitus";
  services.resolved = {
    enable = true;
    settings.Resolve.DNSOverTLS = "opportunistic";
  };

  # SSH Access
  services.openssh = {
    enable = true;
    ports = [ 22 ];
    openFirewall = true;
    allowSFTP = true;
    settings = {
      PasswordAuthentication = false;
      AllowUsers = [ "wilkuu" ];
      X11Forwarding = true;
      PermitRootLogin = "no";
    };
  };
  users.groups.mikrotik-exporter = { };
  users.users.mikrotik-exporter = {
    isSystemUser = true;
    group = "mikrotik-exporter";
  };

  # TODO: "Make each device hold it's own password."
  sops.secrets."prometheus/mikrotik/username" = {
    owner = "mikrotik-exporter";
    sopsFile = ../../secrets/tacitus/prometheus.yaml;
  };
  sops.secrets."prometheus/mikrotik/password" = {
    owner = "mikrotik-exporter";
    sopsFile = ../../secrets/tacitus/prometheus.yaml;
  };

  sops.templates."prometheus-mikrotik-config" = {
    owner = "mikrotik-exporter";
    content = lib.generators.toYAML { } {
      devices = [
        {
          name = "chronosphere";
          address = "192.168.88.1";
          user = config.sops.placeholder."prometheus/mikrotik/username";
          password = config.sops.placeholder."prometheus/mikrotik/password";
        }
        {
          name = "geneticmutator";
          address = "192.168.88.2";
          user = config.sops.placeholder."prometheus/mikrotik/username";
          password = config.sops.placeholder."prometheus/mikrotik/password";
        }

      ];
      features = {
        dhcp = true;
        dhcpv6 = true;
        optics = true;
        health = true;
        poe = true;
        wlansta = false;
        wlanif = false;
        monitor = true;
        routes = true;
        firware = true;
        netwatch = true;
        conntrack = true;
      };
    };
  };

  services.prometheus.exporters.mikrotik = {
    enable = true;
    group = "mikrotik-exporter";
    user = "mikrotik-exporter";
    configFile = config.sops.templates.prometheus-mikrotik-config.path;
  };
}