setups: allow home-manager and NixOS to set individual modules

This commit is contained in:
Gabriel Arazas 2023-12-23 20:28:54 +08:00
parent e234807139
commit 7a3b5404ec
No known key found for this signature in database
GPG Key ID: ADE0C41DAB221FCC

View File

@ -338,9 +338,11 @@
}; };
# A function that generates a Nix module from host metadata. # A function that generates a Nix module from host metadata.
hostSpecificModule = host: metadata: hostSpecificModule = host: metadata: let
modules = metadata.modules or [];
in
{ lib, ... }: { { lib, ... }: {
imports = [ imports = modules ++ [
inputs.${metadata.home-manager-channel or "home-manager"}.nixosModules.home-manager inputs.${metadata.home-manager-channel or "home-manager"}.nixosModules.home-manager
hostSharedConfig hostSharedConfig
@ -358,6 +360,32 @@
{ networking.domain = lib.mkForce metadata.domain; }) { networking.domain = lib.mkForce metadata.domain; })
]; ];
}; };
# A function that generates a home-manager module from a given user
# metadata.
userSpecificModule = user: metadata: let
name = metadata.username or metadata._name or user;
modules = metadata.modules or [];
in
{ lib, pkgs, config, ... }: {
imports = modules ++ [
userSharedConfig
nixSettingsSharedConfig
./users/home-manager/${name}
];
# Don't create the user directories since they are assumed to
# be already created by a pre-installed system (which should
# already handle them).
xdg.userDirs.createDirectories = lib.mkForce false;
# Setting the homely options.
home.username = lib.mkForce name;
home.homeDirectory = lib.mkForce (metadata.home-directory or "/home/${config.home.username}");
programs.home-manager.enable = lib.mkForce true;
targets.genericLinux.enable = true;
};
in in
{ {
# Exposes only my library with the custom functions to make it easier to # Exposes only my library with the custom functions to make it easier to
@ -383,33 +411,12 @@
# NICE! # NICE!
homeConfigurations = homeConfigurations =
lib'.mapAttrs lib'.mapAttrs
(filename: metadata: (user: metadata:
let mkHome {
name = metadata.username or metadata._name or filename;
pkgs = import inputs.${metadata.nixpkgs-channel or "nixpkgs"} { pkgs = import inputs.${metadata.nixpkgs-channel or "nixpkgs"} {
system = metadata._system; system = metadata._system;
}; };
extraModules = [ extraModules = [(userSpecificModule user metadata)];
({ lib, pkgs, config, ... }: {
# Don't create the user directories since they are assumed to
# be already created by a pre-installed system (which should
# already handle them).
xdg.userDirs.createDirectories = lib.mkForce false;
# Setting the homely options.
home.username = lib.mkForce name;
home.homeDirectory = lib.mkForce (metadata.home-directory or "/home/${config.home.username}");
programs.home-manager.enable = lib.mkForce true;
targets.genericLinux.enable = true;
})
userSharedConfig
nixSettingsSharedConfig
./users/home-manager/${name}
];
in
mkHome {
inherit pkgs extraModules;
home-manager-channel = metadata.home-manager-channel or "home-manager"; home-manager-channel = metadata.home-manager-channel or "home-manager";
}) })
(listImagesWithSystems users); (listImagesWithSystems users);