{
  pkgs,
  config,
  ...
}:
{
  sops = {
    defaultSopsFile = ../../secrets/passwords.yaml;
    secrets."services/grafana/admin_password" = {
      mode = "0440";
      owner = "grafana";
      group = "grafana";
      restartUnits = [ "grafana.service" ];
    };
    secrets."services/loki/basic_auth" = {
      mode = "0777";
    };
  };

  # configure static IP address
  networking.useDHCP = false;
  systemd.network = {
    enable = true;
    networks = {
      "10-mgmtNet" = {
        matchConfig.MACAddress = "BC:24:11:FC:C2:26";
        address = [ "10.20.25.4/24" ];
        gateway = [ "10.20.25.2" ];
      };
    };
  };

  networking.firewall.allowedTCPPorts = [ 80 ];

  services.alloy = {
    enable = true;
    configPath = "/etc/alloy/config.alloy";
  };

  environment.etc."alloy/config.alloy" = {
    text = ''
      prometheus.remote_write "default" {
        endpoint {
          url = "http://127.0.0.1:9009/api/v1/push"
        }
      }
      loki.write "default" {
        endpoint {
          url = "http://127.0.0.1:3100/loki/api/v1/push" 
        }
      }

      loki.relabel "journal" {
        forward_to = []

        rule {
          source_labels = ["__journal__systemd_unit"]
          target_label  = "unit"
        }
      }

      loki.source.journal "read_journal"  {
        forward_to    = [loki.write.default.receiver]
        relabel_rules = loki.relabel.journal.rules
        labels        = {component = "loki.source.journal", host = "${config.networking.hostName}"}
      }

      logging {
        level = "info"
        format = "logfmt"
      }

      prometheus.exporter.unix "local_system" { }

      prometheus.scrape "scrape_metrics" {
        targets         = prometheus.exporter.unix.local_system.targets
        forward_to      = [prometheus.remote_write.default.receiver]
        scrape_interval = "10s"
      }
    '';
  };

  imports = [
    ./grafana.nix
    ./mimir.nix
    ./loki.nix
  ];

  # DO NOT CHANGE
  # this defines the first version of NixOS that was installed on the machine so that programs with non-migratable data files are kept compatible
  home-manager.users.noc.home.stateVersion = "24.11";
  system.stateVersion = "24.11";
}