aboutsummaryrefslogblamecommitdiff
path: root/flake/hosts.nix
blob: ecfcca1a0450b4e49a8578840b36f4323554ba30 (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 = "${self}/machines/nixos/${system}/${filename}";
        };
      }
    ) (builtins.readDir "${self}/machines/nixos/${system}"))
  ) { };

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

  defaultModules = [
    nixSettings
    inputs.agenix.nixosModules.age
    inputs.disko.nixosModules.disko
    inputs.home-manager.nixosModules.home-manager
    "${self}/modules/default.nix"
  ];

  darwinDefaultModules = [
    nixSettings
    inputs.agenix.darwinModules.age
    inputs.home-manager.darwinModules.home-manager
    "${self}/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 "${self}/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 "${self}/machines/nixos"));
in
{
  flake = {
    inherit nixosConfigurations darwinConfigurations;
  };
}