about summary refs log blame commit diff
path: root/hosts/default.nix
blob: 10d9b5081ee13ff7e11ee02534626af3ed1ff0c4 (plain) (tree)




































                                             
                                     
                                                 

                              


                         
 



                                                                                                                
 

                                                                                                                                                                                        


                             




                                
                               
                     





                                                        

                            
                                    
                  

                
                                                   


                                 


                                 

















                                                      

                                               







                                     
 


                                                                                                              
  
    


                                                                                                                         
    









                                                             
{
  lib,
  inputs,
  secrets,
  dotfiles,
  hosts,
  hardwares,
  systems,
  isNixOS,
  isMacOS,
  isIso,
  isHardware,
  user,
  nixpkgs,
  home-manager,
  nix-darwin,
  ...
}: let
  mkHost = {
    host,
    hardware,
    stateVersion,
    system,
    timezone,
    location,
    extraOverlays,
    extraModules,
  }: isNixOS: isMacOS: isIso: isHardware: let
    pkgs = import nixpkgs {
      inherit system;
      config = {
        allowUnfree = true;
        allowBroken = true;
        allowUnsupportedSystem = true;
      };
      overlays =
        [
          inputs.nur.overlays.default
          # inputs.neovim-nightly-overlay.overlay
          (import ../packages)
          (import ../overlays)
        ]
        ++ extraOverlays;
    };

    extraArgs = {
      inherit pkgs inputs isIso isHardware user secrets dotfiles timezone location hardware system stateVersion;
      hostname = host + "-" + hardware;
    };

    extraSpecialModules = extraModules ++ lib.optional isHardware ../hardware/${hardware} ++ lib.optional isIso "${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix";
  in
    if isNixOS
    then
      nixpkgs.lib.nixosSystem
      {
        inherit system;
        specialArgs = extraArgs;
        modules =
          [
            ./configuration.nix
            ./${host}
            home-manager.nixosModules.home-manager
            {
              home-manager.useGlobalPkgs = true;
              home-manager.useUserPackages = true;
              home-manager.extraSpecialArgs = extraArgs;
              home-manager.users.${user} = {
                imports = [
                  ./home.nix
                  ./${host}/home.nix
                ];
              };
            }
            inputs.nix-index.nixosModules.nix-index
          ]
          ++ extraSpecialModules;
      }
    else if isMacOS
    then
      nix-darwin.lib.darwinSystem
      {
        inherit system;
        specialArgs = extraArgs;
        modules = [
          ./darwin.nix
          home-manager.darwinModules.home-manager
          {
            home-manager.useGlobalPkgs = true;
            home-manager.useUserPackages = true;
            home-manager.extraSpecialArgs = extraArgs;
            home-manager.users."manuel.palenzuela" = {
              imports = [
                ./home-darwin.nix
              ];
            };
          }
        ];
      }
    else
      home-manager.lib.homeManagerConfiguration
      {
        inherit pkgs;
        extraSpecialArgs = extraArgs;
        modules = [
          ./home.nix
          ./${host}/home.nix
        ];
      };

  hardwarePermutatedHosts = lib.concatMap (hardware: map (host: host // hardware) hosts) hardwares;
  systemsPermutatedHosts = lib.concatMap (system: map (host: host // system) hardwarePermutatedHosts) systems;
  permutatedHosts = systemsPermutatedHosts;
in
  /*
  We have a list of sets.
  Map each element of the list applying the mkHost function to its elements and returning a set in the listToAttrs format
  builtins.listToAttrs on the result
  */
  builtins.listToAttrs (map (mInput @ {
      host,
      hardware,
      system,
      ...
    }: {
      name = host + "-" + hardware + "-" + system;
      value = mkHost mInput isNixOS isMacOS isIso isHardware;
    })
    permutatedHosts)