aboutsummaryrefslogblamecommitdiff
path: root/nix/flake/hosts.nix
blob: 3ce8c6bcdf3a4657251e563bfb4dc595afff980d (plain) (tree)























































































































































































                                                                                                   
{
  inputs,
  self,
  withSystem,
  ...
}:
let
  inherit (inputs.nixpkgs.lib // builtins)
    filterAttrs
    foldl'
    makeOverridable
    mapAttrs'
    mapAttrsToList
    mkForce
    mkIf
    nixosSystem
    readDir
    replaceStrings
    substring
    ;

  inherit (inputs.darwin.lib) darwinSystem;

  nixSettings = {
    nix.registry.nixpkgs = {
      flake = inputs.nixpkgs;
    };
  };

  mapSystems =
    dir: mapAttrsToList (name: _: name) (filterAttrs (_: type: type == "directory") (readDir dir));

  mapHosts = foldl' (
    hosts: system:
    hosts
    // (mapAttrs' (
      filename: _:
      let
        name = replaceStrings [ ".nix" ] [ "" ] filename;
      in
      {
        inherit name;
        value = {
          inherit system;
          hostconf = ../machines/nixos + "/${system}/${filename}";
        };
      }
    ) (builtins.readDir ../machines/nixos/${system}))
  ) { };

  mapMacs = foldl' (
    hosts: system:
    hosts
    // (mapAttrs' (
      filename: _:
      let
        name = replaceStrings [ ".nix" ] [ "" ] filename;
      in
      {
        inherit name;
        value = {
          inherit system;
          hostconf = ../machines/darwin + "/${system}/${filename}";
        };
      }
    ) (builtins.readDir ../machines/darwin/${system}))
  ) { };

  defaultModules = [
    nixSettings
    inputs.agenix.nixosModules.age
    inputs.disko.nixosModules.disko
    inputs.home-manager.nixosModules.home-manager
    ../modules/default.nix
  ];

  darwinDefaultModules = [
    nixSettings
    inputs.agenix.darwinModules.age
    inputs.home-manager.darwinModules.home-manager
    ../modules/default-darwin.nix
  ];

  darwinConfigurations = mapAttrs' (
    name: conf:
    let
      inherit (conf) system hostconf;
      adminUser = {
        name = "fcuny";
        userinfo = {
          email = "franck@fcuny.net";
          fullName = "Franck Cuny";
        };
      };
    in
    {
      inherit name;
      value = withSystem system (
        { pkgs, ... }:
        makeOverridable darwinSystem {
          inherit system;
          specialArgs = {
            hostName = name;
            inherit adminUser;
            inherit self;
            inherit inputs;
          };
          modules =
            [
              { inherit adminUser; }
              {
                nixpkgs.pkgs = pkgs;
                nixpkgs.hostPlatform = system;
                system.stateVersion = 5;
                environment.systemPackages = [
                  pkgs.git
                ];
              }
            ]
            ++ darwinDefaultModules
            ++ [
              hostconf
            ];
        }
      );
    }
  ) (mapMacs (mapSystems ../machines/darwin));

  nixosConfigurations = mapAttrs' (
    name: conf:
    let
      inherit (conf) system hostconf;
      adminUser = {
        name = "fcuny";
        userinfo = {
          email = "franck@fcuny.net";
          fullName = "Franck Cuny";
        };
      };
    in
    {
      inherit name;
      value = withSystem system (
        { pkgs, ... }:
        makeOverridable nixosSystem {
          inherit system;
          specialArgs = {
            hostName = name;
            inherit adminUser;
            inherit self;
            hostConfigurations = mapAttrs' (name: conf: {
              inherit name;
              value = conf.config;
            }) nixosConfigurations;
            inherit inputs;
          };
          modules =
            [
              {
                inherit adminUser;
              }
              {
                system.configurationRevision = mkIf (self ? rev) self.rev;
                system.nixos.versionSuffix = mkForce "git.${substring 0 11 inputs.nixpkgs.rev}";
                nixpkgs.pkgs = pkgs;
                environment.systemPackages = [
                  pkgs.git
                ];
              }
            ]
            ++ defaultModules
            ++ [
              hostconf
            ];
        }
      );
    }
  ) (mapHosts (mapSystems ../machines/nixos));
in
{
  flake = {
    inherit nixosConfigurations darwinConfigurations;
  };
}