{
options,
config,
lib,
inputs,
...
}:
with lib;
with lib.frajul;
let
cfg = config.modules.nixos.home;
in
{
imports = with inputs; [
home-manager.nixosModules.home-manager
nix-colors.homeManagerModules.default
prism.homeModules.prism
];
options.modules.nixos.home = with types; {
enable = mkBoolOpt false "Enable or disable nixos home";
};
options.home = with types; {
file = mkOpt attrs { } "A set of files to be managed by home-manager's .";
configFile =
mkOpt attrs { }
"A set of files to be managed by home-manager's .";
programs = mkOpt attrs { } "Programs to be managed by home-manager.";
extraOptions = mkOpt attrs { } "Options to pass directly to home-manager.";
persist = mkOpt attrs { } "Files and directories to persist in the home";
};
config = mkIf cfg.enable {
home.extraOptions = {
home.stateVersion = config.system.stateVersion;
home.file = mkAliasDefinitions options.home.file;
xdg.enable = true;
xdg.configFile = mkAliasDefinitions options.home.configFile;
programs = mkAliasDefinitions options.home.programs;
};
home-manager = {
useUserPackages = true;
users.${config.user.name} = mkAliasDefinitions options.home.extraOptions;
};
environment.persistence."/persist".users.${config.user.name} = mkIf options.impermanence.enable.value (
mkAliasDefinitions options.home.persist
);
};
}