113 lines
2.6 KiB
Nix
113 lines
2.6 KiB
Nix
{
|
|
nixpkgs,
|
|
home-manager,
|
|
inputs,
|
|
...
|
|
}:
|
|
let
|
|
allOverlays = import (../overlays) { inherit nixpkgs; };
|
|
getPkgs =
|
|
system:
|
|
import nixpkgs {
|
|
inherit system;
|
|
overlays = allOverlays;
|
|
};
|
|
in
|
|
{
|
|
mkSystem =
|
|
{
|
|
hostname,
|
|
system ? "x86_64-linux",
|
|
users ? [ ],
|
|
extraModules ? [ ],
|
|
homeUsers ? { },
|
|
extraSpecialArgs ? { },
|
|
}:
|
|
let
|
|
pkgs_with_overlays = import nixpkgs {
|
|
inherit system;
|
|
overlays = allOverlays;
|
|
};
|
|
hostModule = import ../hosts/${hostname} {
|
|
inherit inputs;
|
|
pkgs = pkgs_with_overlays;
|
|
};
|
|
userModules = map (
|
|
name:
|
|
import ../users/${name} {
|
|
pkgs = pkgs_with_overlays;
|
|
lib = nixpkgs.lib;
|
|
}
|
|
) users;
|
|
|
|
formattedHomeUsers = nixpkgs.lib.mapAttrs (username: moduleList: {
|
|
imports = moduleList;
|
|
}) homeUsers;
|
|
in
|
|
nixpkgs.lib.nixosSystem {
|
|
inherit system;
|
|
modules = [
|
|
hostModule
|
|
]
|
|
++ userModules
|
|
++ extraModules
|
|
++ (
|
|
if homeUsers != { } then
|
|
[
|
|
home-manager.nixosModules.home-manager
|
|
{
|
|
#home-manager.useGlobalPkgs = true; # NOTE: Incompatible with nixpkgs.{config,overlays}
|
|
home-manager.useUserPackages = true;
|
|
home-manager.backupFileExtension = "hm-bak";
|
|
|
|
# Directly inject the module lists? (isn't this the problem?)
|
|
home-manager.users = formattedHomeUsers;
|
|
home-manager.extraSpecialArgs = { inherit inputs; };
|
|
}
|
|
]
|
|
else
|
|
[ ]
|
|
);
|
|
specialArgs = {
|
|
inherit inputs hostname;
|
|
}
|
|
// extraSpecialArgs;
|
|
};
|
|
|
|
getUserHomeModule =
|
|
username: pkgs: inputs:
|
|
import ../users/${username}/home.nix {
|
|
inherit username pkgs inputs;
|
|
lib = nixpkgs.lib;
|
|
};
|
|
|
|
/**
|
|
This function returns an attribute set { module, config }.
|
|
*/
|
|
mkHome =
|
|
{
|
|
username,
|
|
system ? "x86_64-linux",
|
|
extraModules ? [ ],
|
|
}:
|
|
let
|
|
pkgs_with_overlays = getPkgs system;
|
|
moduleList = [
|
|
(import ../users/${username}/home.nix {
|
|
inherit inputs username;
|
|
pkgs = pkgs_with_overlays;
|
|
lib = nixpkgs.lib;
|
|
})
|
|
]
|
|
++ extraModules;
|
|
in
|
|
{
|
|
module = moduleList;
|
|
config = home-manager.lib.homeManagerConfiguration {
|
|
pkgs = pkgs_with_overlays;
|
|
modules = moduleList;
|
|
};
|
|
};
|
|
|
|
mkHomeConfigs = userProfiles: nixpkgs.lib.mapAttrs (username: profile: profile.config) userProfiles;
|
|
}
|