2022-08-13 09:09:38 +00:00
|
|
|
{ lib, config, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
psCfg = config.pub-solar;
|
|
|
|
cfg = config.pub-solar.home-controller;
|
|
|
|
in
|
|
|
|
{
|
|
|
|
imports = [
|
2023-01-28 21:30:37 +00:00
|
|
|
#./k3s.nix
|
2022-08-13 09:09:38 +00:00
|
|
|
./wireguard.nix
|
|
|
|
];
|
|
|
|
|
|
|
|
options.pub-solar.home-controller = {
|
|
|
|
enable = mkEnableOption "Control your home";
|
|
|
|
|
|
|
|
role = mkOption {
|
|
|
|
description = ''
|
|
|
|
Whether the node should run as a server or agent.
|
|
|
|
Note that the server, by default, also runs as an agent.
|
|
|
|
'';
|
|
|
|
default = "server";
|
|
|
|
type = types.enum [ "server" "agent" ];
|
|
|
|
};
|
|
|
|
|
|
|
|
ownIp = mkOption {
|
|
|
|
description = ''
|
|
|
|
Internal ip in wireguard used for cluster control-plane communication.
|
|
|
|
'';
|
|
|
|
type = types.str;
|
|
|
|
};
|
|
|
|
|
|
|
|
k3s = {
|
|
|
|
enableLocalStorage = mkOption {
|
|
|
|
description = ''
|
|
|
|
Enable local storage provisioner.
|
|
|
|
'';
|
|
|
|
default = false;
|
|
|
|
type = types.bool;
|
|
|
|
};
|
|
|
|
|
|
|
|
defaultLocalStoragePath = mkOption {
|
|
|
|
description = ''
|
|
|
|
Default path to use for local storage provisioner.
|
|
|
|
'';
|
|
|
|
default = "/var/lib/rancher/k3s/storage";
|
|
|
|
type = types.path;
|
|
|
|
};
|
|
|
|
|
|
|
|
flannelBackend = mkOption {
|
|
|
|
description = ''
|
|
|
|
Flannel backend to use.
|
|
|
|
'';
|
|
|
|
default = "wireguard-native";
|
|
|
|
type = types.str;
|
|
|
|
};
|
|
|
|
|
|
|
|
serverAddr = mkOption {
|
|
|
|
description = ''
|
|
|
|
Set server address of master
|
|
|
|
'';
|
|
|
|
default = "";
|
|
|
|
type = types.str;
|
|
|
|
example = "https://api.kube:6443";
|
|
|
|
};
|
|
|
|
|
|
|
|
tokenFile = mkOption {
|
|
|
|
description = ''
|
|
|
|
Location of token file used to join cluster.
|
|
|
|
'';
|
|
|
|
default = "";
|
|
|
|
type = types.str;
|
|
|
|
};
|
|
|
|
|
|
|
|
enableZfs = mkOption {
|
|
|
|
description = ''
|
|
|
|
Enable when k3s should use a ZFS compatible runtime.
|
|
|
|
'';
|
|
|
|
default = false;
|
|
|
|
type = types.bool;
|
|
|
|
};
|
|
|
|
|
|
|
|
zfsPool = mkOption {
|
|
|
|
description = ''
|
|
|
|
The ZFS pool to use and create a containerd volume in.
|
|
|
|
'';
|
|
|
|
default = "zroot";
|
|
|
|
type = types.str;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
wireguard = {
|
|
|
|
privateKeyFile = mkOption {
|
|
|
|
description = ''
|
|
|
|
Location of private key file
|
|
|
|
'';
|
|
|
|
type = types.path;
|
|
|
|
};
|
|
|
|
|
|
|
|
listenPort = mkOption {
|
|
|
|
description = ''
|
|
|
|
Port for wireguard.
|
|
|
|
'';
|
|
|
|
default = 51899;
|
|
|
|
type = types.int;
|
|
|
|
};
|
|
|
|
|
|
|
|
peers = mkOption {
|
|
|
|
description = ''
|
|
|
|
Wireguard peers.
|
|
|
|
'';
|
|
|
|
type = types.listOf types.attrs;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
config = mkIf cfg.enable {
|
|
|
|
boot.kernelModules = [ "rbd" ];
|
|
|
|
|
|
|
|
networking.extraHosts =
|
|
|
|
''
|
|
|
|
192.168.42.231 ringo.local
|
|
|
|
192.168.42.232 giggles.local
|
|
|
|
192.168.42.234 cox.local
|
|
|
|
192.168.42.236 companion.local
|
|
|
|
10.0.1.11 api.kube giggles.kube
|
|
|
|
10.0.1.12 cox.kube
|
|
|
|
10.0.1.13 companion.kube
|
|
|
|
10.0.1.21 ringo.kube
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
}
|