Files
sydnix/outputs/nixosConfigurations.nix
Madeleine Sydney c48a93ad10 feat: Add host sydpc
My, this is a lot TwT.  Much work was batched as part of the transition from
guix-rebound to nixos-testbed/sydpc.

- Discord/Vesktop module & config.
- Syncthing setup.
- Assorted Emacs changes.
- Waybar config.
- Niri config.
- Steam config.
- Some MPD.
- Stylix config.
- Files/Impermanence things.
- Enable Ghostty.
- God knows what else.
2025-03-20 09:02:25 -06:00

67 lines
2.3 KiB
Nix
Executable File

{ 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;
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
# 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)