62 lines
1.9 KiB
Nix
62 lines
1.9 KiB
Nix
{ pkgs
|
|
# ,nixpkgs
|
|
, proj_root
|
|
# ,agenix
|
|
, nixosDefaultVersion ? "22.05"
|
|
, defaultSystem ? "x86_64-linux"
|
|
, ...
|
|
}@inputs:
|
|
let
|
|
lib = pkgs.lib;
|
|
inputs_w_lib = (inputs // { inherit lib; });
|
|
serde = import ./serde.nix inputs_w_lib;
|
|
shellAsDrv = { script, pname }: (pkgs.callPackage
|
|
(
|
|
# just a pattern that we must remember: args to this are children of pkgs.
|
|
{ writeShellScriptBin }: writeShellScriptBin pname script
|
|
)
|
|
{ });
|
|
trimNull = lib.filterAttrs (name: value: value != null);
|
|
# ssh
|
|
flattenPubkey = lib.mapAttrs (_identity: meta_config: lib.attrByPath [ "metadata" "ssh_pubkey" ] null meta_config);
|
|
getPubkey = config: (lib.pipe config [ flattenPubkey trimNull ]);
|
|
# procedure =
|
|
in
|
|
{
|
|
# short-hand to create a shell derivation
|
|
# NOTE: this is pure. This means, env vars from devShells might not
|
|
# be accessible unless MAYBE they are `export`ed
|
|
inherit shellAsDrv trimNull flattenPubkey getPubkey;
|
|
ssh = {
|
|
inherit flattenPubkey getPubkey;
|
|
};
|
|
# Configures hosts as nixosConfiguration
|
|
# mkHost = {hostName
|
|
# , nixosBareConfiguration
|
|
# , finalInputs
|
|
# , users ? {}
|
|
# , nixosVersion? nixosDefaultVersion
|
|
# , system? defaultSystem
|
|
# , preset? "base"}: # base | minimal
|
|
# let
|
|
# hardwareConfig = hostname: import "${proj_root.hosts.path}/${hostName}/hardware-configuration.nix";
|
|
# in nixpkgs.lib.nixosSystem (nixosBareConfiguration // {
|
|
# inherit system;
|
|
# modules = [
|
|
# {
|
|
# system.stateVersion = nixosVersion;
|
|
# networking.hostName = hostName;
|
|
# users.users = users;
|
|
# }
|
|
# {
|
|
# _module.args = finalInputs;
|
|
# }
|
|
# import "${proj_root.modules.path}/secrets.nix"
|
|
# import "${proj_root.modules.path}/${preset}.sys.nix"
|
|
# ] ++ nixosBareConfiguration.modules;
|
|
# lib = finalInputs.lib;
|
|
# });
|
|
inherit serde;
|
|
inherit (serde) fromYaml fromYamlPath;
|
|
}
|