dotfiles/hosts/default.nix

94 lines
3.3 KiB
Nix
Raw Normal View History

2022-12-27 04:22:07 +00:00
{nixpkgs, agenix, home-manager, flake-utils, nixgl, rust-overlay, flake-compat
2022-12-27 05:58:24 +00:00
,pkgs, lib, proj_root, nixosDefaultVersion? "22.05", defaultSystem? "x86_64-linux",...}@finalInputs: let
config = {
bao.metadata = {
# req
hostName = "bao";
# opts
ssh_pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIBuAaAE7TiQmMH300VRj/pYCri1qPmHjd+y9aX2J0Fs";
nixosVersion = "22.11";
system = "x86_64-linux";
preset = "base";
2022-12-27 04:22:07 +00:00
};
2023-01-12 17:50:46 +00:00
# TODO: add override so that we can add wsl config on top
2022-12-27 05:58:24 +00:00
bao.nixosConfig = {
modules = [
2023-01-12 17:50:46 +00:00
(import ../modules/nvgpu.sys.nix)
(import ../modules/kde.sys.nix)
(import ../modules/pulseaudio.sys.nix)
(import ../modules/storage.perso.sys.nix)
2022-12-27 05:58:24 +00:00
];
};
};
2023-01-12 17:50:46 +00:00
# This middle function propagates variables to be used by mkHostFromPropagated
# The purpose is to debug things
2022-12-27 05:58:24 +00:00
propagate = hostConfig@{metadata, nixosConfig}: let
# req
inherit (metadata) hostName;
# opts
ssh_pubkey = lib.attrByPath ["ssh_pubkey"] null metadata; # metadata.ssh_pubkey??undefined
users = lib.attrByPath ["users"] {} metadata;
nixosVersion = lib.attrByPath ["nixosVersion"] nixosDefaultVersion metadata;
system = lib.attrByPath ["system"] defaultSystem metadata;
preset = lib.attrByPath ["preset"] "base" metadata;
# infer
hardwareConfig = import "${proj_root.hosts.path}/${hostName}/hardware-configuration.nix";
2023-01-12 17:50:46 +00:00
# alias to prevent infinite recursion
_nixosConfig = nixosConfig;
# debug stuffs (removable)
debugModule = ({lib, proj_root, ...}: let debugAttrOpt = debugVar: lib.mkOption {
type = lib.types.attrs;
description = "Debug for info for ${debugVar}";
visible = false;
internal = true;
readOnly = true;
}; in {
options = {
debugLib = debugAttrOpt "lib";
debug_proj_root = debugAttrOpt "proj_root";
};
config.debugLib = lib;
config.debug_proj_root = proj_root;
});
2022-12-27 05:58:24 +00:00
in {
inherit hostName ssh_pubkey users nixosVersion system preset hardwareConfig;
2023-01-12 17:50:46 +00:00
debugLib = finalInputs.lib;
nixosConfig = _nixosConfig // {
2022-12-27 05:58:24 +00:00
inherit system;
modules = [
2023-01-12 17:50:46 +00:00
{
config._module.args = {
inherit proj_root;
my-lib = finalInputs.lib;
};
}
hardwareConfig
2022-12-27 05:58:24 +00:00
{
system.stateVersion = nixosVersion;
networking.hostName = hostName;
users.users = users;
}
2023-01-12 17:50:46 +00:00
debugModule
2022-12-27 05:58:24 +00:00
{
2023-01-12 17:50:46 +00:00
imports = [agenix.nixosModule];
environment.systemPackages = [agenix.defaultPackage.x86_64-linux];
2022-12-27 05:58:24 +00:00
}
2023-01-12 17:50:46 +00:00
(import "${proj_root.modules.path}/secrets.nix")
(import "${proj_root.modules.path}/${preset}.sys.nix")
] ++ _nixosConfig.modules;
2022-12-27 05:58:24 +00:00
};
};
2023-01-12 17:50:46 +00:00
# we are blessed by the fact that we engulfed nixpkgs.lib.* at top level
2022-12-27 05:58:24 +00:00
mkHostFromPropagated = propagatedHostConfig@{nixosConfig,...}: nixpkgs.lib.nixosSystem nixosConfig;
mkHost = hostConfig: (lib.pipe [propagate mkHostFromPropagated] hostConfig);
trimNull = lib.filterAttrsRecursive (name: value: value != null);
2022-12-27 05:58:24 +00:00
flattenPubkey = lib.mapAttrs (hostName: meta_config: meta_config.metadata.ssh_pubkey);
in {
2023-01-12 17:50:46 +00:00
nixosConfigurations = lib.mapAttrs (name: hostConfig: mkHost hostConfig) config;
# {bao = "ssh-ed25519 ..."; another_host = "ssh-rsa ...";}
pubKeys = trimNull (flattenPubkey config);
2022-12-27 05:58:24 +00:00
debug = {
propagated = lib.mapAttrs (name: hostConfig: propagate hostConfig) config;
};
2022-12-27 04:22:07 +00:00
}