{ self
, agenix
, lix-module
, nixpkgs
, nixpkgs-full
, home-manager
, homepage
, nixos-hardware
, nixos-generators
, ...
}@inputs:
let
  lixModule = lix-module.nixosModules.default;

  nixosSystem = { n_nixpkgs ? nixpkgs, system ? "x86_64-linux", extraModules ? [ ] }: n_nixpkgs.lib.nixosSystem {
    inherit system;

    modules = [
      lixModule
      {
        nixpkgs.overlays = n_nixpkgs.lib.attrValues self.overlays;
      }
    ] ++ (n_nixpkgs.lib.attrValues self.nixosModules) ++ [ agenix.nixosModules.age ] ++ extraModules;
  };
in
{
  gorgon = nixosSystem rec {
    n_nixpkgs = nixpkgs-full;

    system = "x86_64-linux";

    extraModules = [
      {
        nixpkgs.overlays = nixpkgs.lib.attrValues self.overlays;
        dadada.pkgs = self.packages.${system};
        dadada.inputs = inputs // { dadada = self; };
      }

      nixos-hardware.nixosModules.lenovo-thinkpad-t14s-amd-gen1

      home-manager.nixosModules.home-manager
      ({ pkgs, lib, ... }:
        {
          home-manager.useGlobalPkgs = true;
          home-manager.useUserPackages = true;
          home-manager.sharedModules = (nixpkgs.lib.attrValues self.hmModules) ++ [
            { dadada.home.helix.package = pkgs.helix; }
            { manual.manpages.enable = false; }
          ];
          home-manager.users.dadada = import ../home;
        })
      ./gorgon/configuration.nix
    ];
  };

  surgat = nixosSystem {
    system = "x86_64-linux";
    extraModules = [
      {
        dadada.homepage.package = homepage;
      }
      ./modules/profiles/server.nix
      ./surgat/configuration.nix
    ];
  };

  agares = nixosSystem {
    extraModules = [
      ./agares/configuration.nix
    ];
  };

  installer = nixpkgs.lib.nixosSystem {
    system = "x86_64-linux";
    modules = [
      lixModule
      nixos-generators.nixosModules.install-iso
      self.nixosModules.admin
      {
        isoImage.isoName = nixpkgs.lib.mkForce "dadada-nixos-installer.iso";
        networking.tempAddresses = "disabled";
        dadada.admin.enable = true;
        documentation.enable = true;
        documentation.nixos.enable = true;
        i18n.defaultLocale = "en_US.UTF-8";
        console = {
          font = "Lat2-Terminus16";
          keyMap = "us";
        };
      }
    ];
  };

  ninurta = nixosSystem {
    n_nixpkgs = nixpkgs-full;
    extraModules = [
      ./ninurta/configuration.nix
    ];
  };
}