mirror of
https://github.com/foo-dogsquared/nixos-config.git
synced 2025-02-07 06:19:00 +00:00
flake-parts/setups/nixos: refactor
This commit is contained in:
parent
42a24ada02
commit
7b77035949
@ -329,12 +329,96 @@ let
|
||||
inputs.${config.homeManagerBranch}.nixosModules.home-manager
|
||||
../../../configs/nixos/${name}
|
||||
|
||||
# Mapping the declarative home-manager users (if it has one) into NixOS
|
||||
# users.
|
||||
(lib.mkIf (config.homeManagerUsers.users != { })
|
||||
(
|
||||
let
|
||||
setupConfig = config;
|
||||
hasHomeManagerUsers = config.homeManagerUsers.users != { };
|
||||
inherit (config.homeManagerUsers) nixpkgsInstance;
|
||||
isNixpkgs = state: hasHomeManagerUsers && nixpkgsInstance == state;
|
||||
in
|
||||
{ config, lib, pkgs, ... }: {
|
||||
config = lib.mkMerge [
|
||||
(lib.mkIf hasHomeManagerUsers {
|
||||
users.users =
|
||||
lib.mkMerge
|
||||
(lib.mapAttrsToList
|
||||
(name: hmUser: { ${name} = hmUser.userConfig; })
|
||||
setupConfig.homeManagerUsers.users);
|
||||
|
||||
home-manager.users = lib.mkMerge
|
||||
(lib.mapAttrsToList
|
||||
(name: hmUser: {
|
||||
${name} = { lib, ... }: {
|
||||
imports =
|
||||
partsConfig.setups.home-manager.configs.${name}.modules
|
||||
++ hmUser.additionalModules;
|
||||
};
|
||||
})
|
||||
setupConfig.homeManagerUsers.users);
|
||||
})
|
||||
|
||||
(lib.mkIf (isNixpkgs "global") {
|
||||
home-manager.useGlobalPkgs = lib.mkForce true;
|
||||
|
||||
# Disable all options that are going to be blocked once
|
||||
# `home-manager.useGlobalPkgs` is used.
|
||||
home-manager.users =
|
||||
lib.mkMerge
|
||||
(lib.mapAttrsToList
|
||||
(name: _: {
|
||||
${name} = {
|
||||
nixpkgs.overlays = lib.mkForce null;
|
||||
nixpkgs.config = lib.mkForce null;
|
||||
};
|
||||
})
|
||||
setupConfig.homeManagerUsers.users);
|
||||
|
||||
# Then apply all of the user overlays into the nixpkgs instance
|
||||
# of the NixOS system.
|
||||
nixpkgs.overlays =
|
||||
let
|
||||
hmUsersOverlays =
|
||||
lib.mapAttrsToList
|
||||
(name: _:
|
||||
partsConfig.setups.home-manager.configs.${name}.overlays)
|
||||
setupConfig.homeManagerUsers.users;
|
||||
|
||||
overlays = lib.lists.flatten hmUsersOverlays;
|
||||
in
|
||||
# Most of the overlays are going to be imported from a
|
||||
# variable anyways. This should massively reduce the step
|
||||
# needed for nixpkgs to do its thing.
|
||||
#
|
||||
# Though, it becomes unpredictable due to the way how the
|
||||
# overlay list is constructed. However, this is much more
|
||||
# preferable than letting a massive list with duplicated
|
||||
# overlays from different home-manager users to be applied.
|
||||
lib.lists.unique overlays;
|
||||
})
|
||||
|
||||
(lib.mkIf (isNixpkgs "separate") {
|
||||
home-manager.useGlobalPkgs = lib.mkForce false;
|
||||
home-manager.users =
|
||||
lib.mkMerge
|
||||
(lib.mapAttrsToList
|
||||
(name: _: {
|
||||
${name} = {
|
||||
nixpkgs.overlays =
|
||||
partsConfig.setups.home-manager.configs.${name}.overlays;
|
||||
};
|
||||
})
|
||||
setupConfig.homeManagerUsers.users);
|
||||
})
|
||||
];
|
||||
}))
|
||||
|
||||
# Setting up the typical configuration.
|
||||
(
|
||||
let
|
||||
setupConfig = config;
|
||||
hasHomeManagerUsers = config.homeManagerUsers.users != { };
|
||||
inherit (config.homeManagerUsers) nixpkgsInstance;
|
||||
isNixpkgs = state: hasHomeManagerUsers && nixpkgsInstance == state;
|
||||
in
|
||||
{ config, lib, ... }: {
|
||||
config = lib.mkMerge [
|
||||
@ -346,78 +430,6 @@ let
|
||||
(lib.mkIf (setupConfig.domain != null) {
|
||||
networking.domain = lib.mkDefault setupConfig.domain;
|
||||
})
|
||||
|
||||
(lib.mkIf hasHomeManagerUsers {
|
||||
users.users =
|
||||
lib.mkMerge
|
||||
(lib.mapAttrsToList
|
||||
(name: hmUser: { ${name} = hmUser.userConfig; })
|
||||
setupConfig.homeManagerUsers.users);
|
||||
|
||||
home-manager.users = lib.mkMerge
|
||||
(lib.mapAttrsToList
|
||||
(name: hmUser: {
|
||||
${name} = { lib, ... }: {
|
||||
imports =
|
||||
partsConfig.setups.home-manager.configs.${name}.modules
|
||||
++ hmUser.additionalModules;
|
||||
};
|
||||
})
|
||||
setupConfig.homeManagerUsers.users);
|
||||
})
|
||||
|
||||
(lib.mkIf (isNixpkgs "global") {
|
||||
home-manager.useGlobalPkgs = lib.mkForce true;
|
||||
|
||||
# Disable all options that are going to be blocked once
|
||||
# `home-manager.useGlobalPkgs` is used.
|
||||
home-manager.users =
|
||||
lib.mkMerge
|
||||
(lib.mapAttrsToList
|
||||
(name: _: {
|
||||
${name} = {
|
||||
nixpkgs.overlays = lib.mkForce null;
|
||||
nixpkgs.config = lib.mkForce null;
|
||||
};
|
||||
})
|
||||
setupConfig.homeManagerUsers.users);
|
||||
|
||||
# Then apply all of the user overlays into the nixpkgs instance
|
||||
# of the NixOS system.
|
||||
nixpkgs.overlays =
|
||||
let
|
||||
hmUsersOverlays =
|
||||
lib.mapAttrsToList
|
||||
(name: _:
|
||||
partsConfig.setups.home-manager.configs.${name}.overlays)
|
||||
setupConfig.homeManagerUsers.users;
|
||||
|
||||
overlays = lib.lists.flatten hmUsersOverlays;
|
||||
in
|
||||
# Most of the overlays are going to be imported from a
|
||||
# variable anyways. This should massively reduce the step
|
||||
# needed for nixpkgs to do its thing.
|
||||
#
|
||||
# Though, it becomes unpredictable due to the way how the
|
||||
# overlay list is constructed. However, this is much more
|
||||
# preferable than letting a massive list with duplicated
|
||||
# overlays from different home-manager users to be applied.
|
||||
lib.lists.unique overlays;
|
||||
})
|
||||
|
||||
(lib.mkIf (isNixpkgs "separate") {
|
||||
home-manager.useGlobalPkgs = lib.mkForce false;
|
||||
home-manager.users =
|
||||
lib.mkMerge
|
||||
(lib.mapAttrsToList
|
||||
(name: _: {
|
||||
${name} = {
|
||||
nixpkgs.overlays =
|
||||
partsConfig.setups.home-manager.configs.${name}.overlays;
|
||||
};
|
||||
})
|
||||
setupConfig.homeManagerUsers.users);
|
||||
})
|
||||
];
|
||||
}
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user