feat: refactoring + system types

This commit is contained in:
Kat Inskip 2022-10-02 12:34:00 -07:00
parent a0f9d0ab48
commit 9794026f6c
Signed by: kat
GPG key ID: 465E64DECEA8CF0F
36 changed files with 653 additions and 537 deletions

View file

@ -1,4 +1,4 @@
{ inputs, config, pkgs, lib, ... }:
{ inputs, tree, config, pkgs, lib, ... }:
/*
This module:
@ -32,7 +32,7 @@ in
{
imports = [
"${toString inputs.tf-nix}/modules/run.nix"
] ++ (optional (builtins.pathExists ../../tf/tf.nix) (../../tf/tf.nix));
];
options = {
deploy = {
dataDir = mkOption {
@ -73,8 +73,9 @@ in
};
config.tf = mkMerge (singleton
({ ... }: {
imports = [
../../tf.nix
imports = if name == "home" then attrValues (removeAttrs tree.impure.modules.tf [ "acme" "__functor" ])
else [
tree.impure.modules.tf
];
deploy.gcroot = {
name = mkDefault "kw-${config.name}";

7
modules/meta/genesis.nix Normal file
View file

@ -0,0 +1,7 @@
{ config, pkgs, root, ... }: {
runners.lazy = {
file = root;
args = [ "--show-trace" ];
};
deploy.targets.dummy.enable = false;
}

View file

@ -32,8 +32,8 @@ with lib;
(root + "/nixos/systems/HN/nixos.nix")
]);
esphomeImports = mkDefault (map (path: toString path) [
(root + "/esphome/HN.nix")
(root + "/esphome/HN/esphome.nix")
(root + "/esphome/boards/HN.nix")
(root + "/esphome/boards/HN/esphome.nix")
]);
darwinImports = mkDefault (map (path: toString path) [
(root + "/darwin/systems/HN.nix")

View file

@ -55,7 +55,7 @@ with lib;
};
nodes.esphome = let
esphomeType = types.submoduleWith {
modules = [ { _module.args.pkgs = pkgs; } ] ++ config.network.esphome.extraModules;
modules = config.network.esphome.extraModules;
inherit (config.network.esphome) specialArgs;
};
in mkOption {
@ -140,6 +140,7 @@ with lib;
esphome = {
extraModules = [
meta.modules.esphome
meta.modules.system.genesis
];
specialArgs = {
target = config.deploy.targets.home;
@ -149,8 +150,9 @@ with lib;
};
darwin = {
extraModules = [
inputs.home-manager.darwinModules.home-manager
inputs.home-manager.darwinModules.home-manager
meta.modules.darwin
meta.modules.system.genesis
meta.modules.system
meta.system
];
@ -161,7 +163,8 @@ with lib;
};
nixos = {
extraModules = [
inputs.home-manager.nixosModules.home-manager
inputs.home-manager.nixosModules.home-manager
meta.modules.system.genesis
meta.modules.nixos
meta.modules.system
meta.nixos.network

26
modules/meta/networks.nix Normal file
View file

@ -0,0 +1,26 @@
{ config, lib, ... }: with lib; {
options = {
networks = mkOption {
type = with types; attrsOf (submodule ({ name, config, ... }: {
options = {
member_configs = mkOption {
type = unspecified;
};
members = mkOption {
type = unspecified;
};
};
}));
};
};
config = {
networks = let
names = [ "gensokyo" "chitei" "internet" "tailscale" ];
network_filter = network: rec {
member_configs = filterAttrs (_: nodeConfig: nodeConfig.networks.${network}.interfaces != []) config.network.nodes.nixos;
members = mapAttrs (_: nodeConfig: nodeConfig.networks.${network}) member_configs;
};
networks' = genAttrs names network_filter;
in networks';
};
}

View file

@ -1,5 +1,9 @@
{ config, lib, ... }: with lib; {
{ config, pkgs, lib, ... }: with lib; {
options.kw.secrets.command = mkOption {
type = types.str;
default = let
bitw = pkgs.writeShellScriptBin "bitw" ''${pkgs.rbw-bitw}/bin/bitw -p gpg://${config.network.nodes.all.${builtins.getEnv "HOME_HOSTNAME"}.kw.secrets.repo.bitw.source} "$@"'';
in
"${bitw}/bin/bitw get";
};
}

View file

@ -0,0 +1,42 @@
{ config, pkgs, lib, root, ... }: with lib; let
home = config.deploy.targets.home.tf;
in {
options = {
tailnet_uri = mkOption {
type = types.str;
};
tailnet = mkOption {
type = types.attrsOf (types.submodule ({ name, config, ... }: {
options = {
ipv4 = mkOption {
type = types.str;
};
ipv6 = mkOption {
type = types.str;
};
pp = mkOption {
type = types.unspecified;
default = family: port: "http://${config."ipv${toString family}"}:${toString port}/";
};
ppp = mkOption {
type = types.unspecified;
default = family: port: path: "http://${config."ipv${toString family}"}:${toString port}/${path}";
};
tags = mkOption {
type = types.listOf types.str;
};
};
}));
};
};
config = {
tailnet_uri = "inskip.me";
tailnet = let
raw = home.resources.tailnet_devices.importAttr "devices";
in mkIf (home.state.enable) (mapListToAttrs (elet: nameValuePair (removeSuffix ".${config.tailnet_uri}" elet.name) {
tags = elet.tags;
ipv4 = head (filter (e: hasInfix "." e) elet.addresses);
ipv6 = head (filter (e: hasInfix ":" e) elet.addresses);
}) raw);
};
}