{ self, inputs, lib, ... }:
let
  defaultModules = [
    {
      # Let 'nixos-version --json' know about the Git revision
      system.configurationRevision = self.rev or "dirty";
    }
    {
      nixpkgs.overlays = (lib.attrValues self.overlays) ++ [
        inputs.nur.overlay
      ];
    }
    # Include generic settings
    "${self}/modules/nixos"
  ];

  buildHost = name: system: lib.nixosSystem {
    inherit system;
    modules = defaultModules ++ [
      "${self}/hosts/nixos/${name}"
    ];
    specialArgs = {
      # Use my extended lib in NixOS configuration
      inherit (self) lib;
      # Inject inputs to use them in global registry
      inherit inputs;
    };
  };
in
{
  flake.nixosConfigurations = lib.mapAttrs buildHost {
    aramis = "x86_64-linux";
    porthos = "x86_64-linux";
  };
}