{
  self,
  config,
  pkgs,
  lib,
  ...
}: {
  config = {
    facter.reportPath = ./facter.json;
    system.stateVersion = "23.05";
    users.users.root.openssh.authorizedKeys.keys = config.pim.ssh.keys.pim ++ config.pim.ssh.keys.niels;
    sops.defaultSopsFile = "${self}/secrets/lewis/nixos.yaml";
    environment.systemPackages = [pkgs.beets];

    deployment = {
      targetHost = "lewis";
      targetUser = "root";
      tags = ["server" "kubernetes"];
    };

    pim = {
      k3s.serverAddr = "https://jefke.dmz:6443";

      backups.borgBackups = {
        bazarr = {
          paths = ["/mnt/longhorn/persistent/volumes/bazarr"];
          deploymentName = "bazarr";
          deploymentNamespace = "media";
        };

        deluge = {
          paths = ["/mnt/longhorn/persistent/volumes/deluge"];
          deploymentName = "deluge";
          deploymentNamespace = "media";
        };

        jellyfin = {
          paths = ["/mnt/longhorn/persistent/volumes/jellyfin"];
          deploymentName = "jellyfin";
          deploymentNamespace = "media";
        };

        jellyseerr = {
          paths = ["/mnt/longhorn/persistent/volumes/jellyseerr"];
          deploymentName = "jellyseerr";
          deploymentNamespace = "media";
        };

        prowlarr = {
          paths = ["/mnt/longhorn/persistent/volumes/prowlarr"];
          deploymentName = "prowlarr";
          deploymentNamespace = "media";
        };

        radarr = {
          paths = ["/mnt/longhorn/persistent/volumes/radarr"];
          deploymentName = "radarr";
          deploymentNamespace = "media";
        };

        sonarr = {
          paths = ["/mnt/longhorn/persistent/volumes/sonarr"];
          deploymentName = "sonarr";
          deploymentNamespace = "media";
        };
      };
    };

    systemd = {
      timers.read-dir-sizes = {
        wantedBy = ["timers.target"];
        timerConfig = {
          OnBootSec = "5m";
          OnUnitActiveSec = "5m";
          Unit = "read-dir-sizes.service";
        };
      };

      services."read-dir-sizes" = {
        script = let
          script = pkgs.writeShellScriptBin "read-dir-sizes.sh" ''
            DIRS=(
              "/mnt/longhorn/persistent/media/movies"
              "/mnt/longhorn/persistent/media/shows"
            )

            temp_file=$(mktemp)
            trap 'rm -f "$temp_file"' EXIT

            for DIR_PATH in "''${DIRS[@]}"; do
                # Find all top-level subdirectories and calculate their size
                find "$DIR_PATH" -mindepth 1 -maxdepth 1 -type d | while read -r subdir; do
                    # Calculate the size of the top-level subdirectory
                    du --block-size=1 -s "$subdir" | while read -r size path; do
                        # Print size in Prometheus format
                        echo "directory_size_bytes{dir=\"$path\"} $size" >> $temp_file
                    done
                done
            done
            mkdir -p /var/lib/node_exporter/textfile_collector
            cp $temp_file /var/lib/node_exporter/textfile_collector/dir_sizes.prom
            chmod o=r /var/lib/node_exporter/textfile_collector/dir_sizes.prom
          '';
        in "${lib.getExe script}";
        serviceConfig = {
          Type = "oneshot";
          User = "root";
        };
      };

      tmpfiles.rules = [
        "d /mnt/longhorn/persistent/media/torrents 775 414 51 8d"
      ];
    };

    services.prometheus.exporters.node.extraFlags = ["--collector.textfile.directory=/var/lib/node_exporter/textfile_collector"];
  };
}