aboutsummaryrefslogblamecommitdiff
path: root/nix/lib/mkSystem.nix
blob: cb581c75f44069ea3fd08751c2d7fbf5fda7a429 (plain) (tree)
1
2
3
4
5
6
7
8
9








                                                                  
                                      
























                                                                               


                                                        
                          
        

     

                                      











                                                                         
# This function creates a NixOS system based on our VM setup for a
# particular architecture.
{ nixpkgs, inputs }:

name:
{ system, user, darwin ? false, }:

let
  # The config files for this system.
  machineConfig = ../machines/${name};
  userOSConfig = ../users/${user}/${if darwin then "darwin" else "nixos"}.nix;
  userHMConfig = ../users/${user}/home-manager.nix;

  # NixOS vs nix-darwin functionst
  systemFunc =
    if darwin then inputs.darwin.lib.darwinSystem else nixpkgs.lib.nixosSystem;
  home-manager =
    if darwin then
      inputs.home-manager.darwinModules
    else
      inputs.home-manager.nixosModules;
in
systemFunc rec {
  inherit system;

  modules = [
    # Allow unfree packages.
    { nixpkgs.config.allowUnfree = true; }

    machineConfig
    userOSConfig
    home-manager.home-manager
    {
      home-manager.useGlobalPkgs = true;
      home-manager.useUserPackages = true;
      home-manager.users.${user} = import userHMConfig {
        inputs = inputs;
        darwin = darwin;
        systemName = name;
      };
    }

    inputs.agenix.nixosModules.default

    # We expose some extra arguments so that our modules can parameterize
    # better based on these values.
    {
      config._module.args = {
        currentSystem = system;
        currentSystemName = name;
        currentSystemUser = user;
        inputs = inputs;
      };
    }
  ];
}