aboutsummaryrefslogblamecommitdiff
path: root/flake/hosts.nix
blob: f053c8845b66ab1fca75b396690e5547fa3d8260 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
















                                          
















                                                                                                   






                                                              




                    






                                                               






                                                 



                                     





                                                  

                                     

























                                      














                                            


         
                                                     






                                     
                   





















                                                         














                                                                                              


         
                                                     





                                                     
{
  inputs,
  self,
  withSystem,
  ...
}:
let
  inherit (inputs.nixpkgs.lib // builtins)
    filterAttrs
    foldl'
    makeOverridable
    mapAttrs'
    mapAttrsToList
    mkForce
    mkIf
    nixosSystem
    readDir
    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' (name: _: {
      inherit name;
      value = {
        inherit system;
        hostconf = "${self}/machines/nixos/${system}/${name}";
      };
    }) (builtins.readDir "${self}/machines/nixos/${system}"))
  ) { };

  mapMacs = foldl' (
    hosts: system:
    hosts
    // (mapAttrs' (name: _: {
      inherit name;
      value = {
        inherit system;
        hostconf = "${self}/machines/darwin/${system}/${name}";
      };
    }) (builtins.readDir "${self}/machines/darwin/${system}"))
  ) { };

  defaultModules = [
    nixSettings
    inputs.agenix.nixosModules.age
    inputs.disko.nixosModules.disko
    inputs.home-manager.nixosModules.home-manager
    "${self}/modules/home.nix"
    "${self}/modules/host-config.nix"
    "${self}/modules/nas-client.nix"
    "${self}/modules/backups.nix"
  ];

  darwinDefaultModules = [
    nixSettings
    inputs.agenix.darwinModules.age
    inputs.home-manager.darwinModules.home-manager
    "${self}/modules/home.nix"
    "${self}/modules/host-config.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";
        uid = 1000;
        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;
  };
}