68 lines
2.3 KiB
Nix
68 lines
2.3 KiB
Nix
{ nixpkgs, ... }@inputs:
|
|
|
|
let
|
|
# Given a hostName, return a NixOS module defining each user specified by
|
|
# `sydnix.users.users`.
|
|
mkHostUsers = hostName: { config, lib, ... }: {
|
|
users.users =
|
|
(lib.mapAttrs
|
|
# Only import the user's system configuration. The code responsible for
|
|
# importing the user's home configuration lives in
|
|
# outputs/homeConfigurations.
|
|
(username: _: (import ../users/${username}).systemConfiguration)
|
|
# The directory users/ hosts a 'universe' of user profiles, which
|
|
# specific hosts may select any subset of, by setting the option
|
|
# `sydnix.users.users` to a list of choice usernames.
|
|
(lib.filterAttrs
|
|
(username: _: builtins.elem username config.sydnix.users.users)
|
|
(builtins.readDir ../users)));
|
|
};
|
|
|
|
mkHost = hostName:
|
|
let system = import ../hosts/${hostName}/system.nix;
|
|
in nixpkgs.lib.nixosSystem {
|
|
# Pass `inputs` to all modules as a 'special arg,' like `config` or `lib`.
|
|
specialArgs = inputs // { inherit system; };
|
|
inherit system;
|
|
modules = [
|
|
../hosts/${hostName}/configuration.nix
|
|
|
|
inputs.self.nixosModules.default
|
|
|
|
# TODO: Move imports to their own respective modules.
|
|
inputs.disko.nixosModules.disko
|
|
inputs.sops-nix.nixosModules.sops
|
|
inputs.impermanence.nixosModules.impermanence
|
|
inputs.copyparty.nixosModules.default
|
|
inputs.niri.nixosModules.niri
|
|
inputs.stylix.nixosModules.stylix
|
|
inputs.nixarr.nixosModules.default
|
|
|
|
# Directory name should always match host name.
|
|
({ ... }: { networking.hostName = hostName; })
|
|
|
|
(mkHostUsers hostName)
|
|
|
|
# home-manager configuration.
|
|
inputs.home-manager.nixosModules.home-manager
|
|
({ config, lib, self, ... }: {
|
|
home-manager.useGlobalPkgs = true;
|
|
|
|
home-manager.users =
|
|
lib.filterAttrs
|
|
(username: _: builtins.elem username config.sydnix.users.users)
|
|
self.homeConfigurations;
|
|
|
|
home-manager.extraSpecialArgs = {
|
|
utils = import ../lib/utils.nix {
|
|
inherit config lib;
|
|
pkgs = nixpkgs;
|
|
};
|
|
inherit inputs system;
|
|
};
|
|
})
|
|
];
|
|
};
|
|
in
|
|
builtins.mapAttrs (dirName: _: mkHost dirName) (builtins.readDir ../hosts)
|