# SPDX-FileCopyrightText: 2024 Auxolotl Infrastructure Contributors
# SPDX-FileCopyrightText: 2024 Clicks Codes
#
# SPDX-License-Identifier: GPL-3.0-only

{
  pkgs,
  modulesPath,
  lib,
  config,
  ...
}:
{
  boot.loader.systemd-boot.enable = true;
  boot.loader.efi.canTouchEfiVariables = true;

  time.timeZone = "Etc/UTC";

  environment.systemPackages = with pkgs; [ neovim ];

  clicks = {
    nix.enable = true;

    backups.key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHYH3yYKcrsDz8U45HF6201BN1nBDQIr4qsGeKh94K6T root@vermilion";

    security = {
      doas.enable = true;

      acme = {
        enable = true;
        defaults = {
          email = "minion@clicks.codes";
          dnsProvider = "cloudflare";
          environmentFile = config.clicks.secrets."${lib.clicks.secrets.name ./acme.sops.env.bin}".path;
        };
      };
    };

    sites."docs.auxolotl.org".enable = true;

    services = {
      ssh.enable = true;
      headscale = {
        enable = true;
        domain = "clicks.domains";
        addr = lib.clicks.constants.hosts.generic;
        oidc = {
          enable = true;
          issuer = "https://login.clicks.codes/realms/master";
          allowed_groups = [ "/clicks" ];
          client_secret_path =
            config.clicks.secrets."${lib.clicks.secrets.name ./headscale.sops.json}".paths.oidc_client_secret;
        };
        database_password_path =
          config.clicks.secrets."${lib.clicks.secrets.name ./headscale.sops.json}".paths.database_password;
        noise_private_key_path =
          config.clicks.secrets."${lib.clicks.secrets.name ./headscale.sops.json}".paths.noise_private_key;
        private_key_path =
          config.clicks.secrets."${lib.clicks.secrets.name ./headscale.sops.json}".paths.private_key;
        acl =
          let
            internet = [
              "0.0.0.0/5"
              "8.0.0.0/7"
              "11.0.0.0/8"
              "12.0.0.0/6"
              "16.0.0.0/4"
              "32.0.0.0/3"
              "64.0.0.0/3"
              "96.0.0.0/6"
              "100.0.0.0/10"
              "100.128.0.0/9"
              "101.0.0.0/8"
              "102.0.0.0/7"
              "104.0.0.0/5"
              "112.0.0.0/4"
              "128.0.0.0/3"
              "160.0.0.0/5"
              "168.0.0.0/8"
              "169.0.0.0/9"
              "169.128.0.0/10"
              "169.192.0.0/11"
              "169.224.0.0/12"
              "169.240.0.0/13"
              "169.248.0.0/14"
              "169.252.0.0/15"
              "169.255.0.0/16"
              "170.0.0.0/7"
              "172.0.0.0/12"
              "172.32.0.0/11"
              "172.64.0.0/10"
              "172.128.0.0/9"
              "173.0.0.0/8"
              "174.0.0.0/7"
              "176.0.0.0/4"
              "192.0.0.0/9"
              "192.128.0.0/11"
              "192.160.0.0/13"
              "192.169.0.0/16"
              "192.170.0.0/15"
              "192.172.0.0/14"
              "192.176.0.0/12"
              "192.192.0.0/10"
              "193.0.0.0/8"
              "194.0.0.0/7"
              "196.0.0.0/6"
              "200.0.0.0/5"
              "208.0.0.0/4"
              "224.0.0.0/3"
              "ipv6-internet"
              # A nasty hack used because ipv6 colons were messing with dst
              # ports
            ]; # Should be replaceable with autogroup:internet in next release
          in
          {
            groups."group:users" = [
              "coded"
              "maddie"
              "minion"
              "pineafan"
              "zanderp25"
            ];
            groups."group:areas" = [
              # Some phonetic alphabet names are excluded here to avoid confusing
              # them with given names
              "alpha"
              "bravo"
              "echo"
              "foxtrot"
              "hotel"
              "india"
              "kilo"
              "lima"
              "november"
              "papa"
              "sierra"
              "tango"
              "uniform"
              "whiskey"
              "xray"
              "yankee"
              "zulu"
            ];
            hosts.ipv6-internet = "2000::/3";

            acls = [
              {
                action = "accept";
                src = [ "group:users" ];
                dst = [
                  "group:users:*"
                  "group:areas:*"
                ] ++ (lib.forEach internet (host: "${host}:*"));
              }
              {
                action = "accept";
                src = [ "group:areas" ];
                dst = [ "group:areas:*" ];
              }
            ];
          };
      };
    };

    networking.tailscale = {
      enable = true;
      authKeyFile =
        config.clicks.secrets."${lib.clicks.secrets.name ./tailscale.sops.json}".paths.authKey;
    };

    storage = {
      raid.enable = true;
      impermanence = {
        enable = true;
        devices = {
          root = "/dev/disk/by-uuid/ab5c2f52-a737-4b29-a505-e3d0b9d0714c";
          persist = "/dev/md/a1d1:persist";
        };
      };
    };
  };

  boot.initrd.availableKernelModules = [
    "nvme"
    "xhci_pci"
    "ahci"
    "usbhid"
    "uas"
    "usb_storage"
    "sd_mod"
  ];
  boot.initrd.kernelModules = [ ];
  boot.kernelModules = [ "kvm-amd" ];
  boot.extraModulePackages = [ ];

  fileSystems."/nix" = {
    device = "/dev/disk/by-uuid/ab5c2f52-a737-4b29-a505-e3d0b9d0714c";
    fsType = "btrfs";
    options = [ "subvol=@nix" ];
  };

  fileSystems."/boot" = {
    device = "/dev/disk/by-uuid/880D-BBAB";
    fsType = "vfat";
    options = [
      "fmask=0022"
      "dmask=0022"
    ];
  };

  swapDevices = [ ];

  networking.useDHCP = true;

  system.stateVersion = "24.05";

  clicks.secrets."${lib.clicks.secrets.name ./headscale.sops.json}" = {
    file = ./headscale.sops.json;
    group = "headscale";
    keys = [
      "oidc_client_secret"
      "database_password"
      "noise_private_key"
      "private_key"
    ];
    neededForUsers = false;
  };

  clicks.secrets."${lib.clicks.secrets.name ./tailscale.sops.json}" = {
    file = ./tailscale.sops.json;
    keys = [ "authKey" ];
  };

  clicks.secrets."${lib.clicks.secrets.name ./acme.sops.env.bin}".file = ./acme.sops.env.bin;
}
