forked from pub-solar/os
132 lines
2.9 KiB
Nix
132 lines
2.9 KiB
Nix
|
{ lib, config, pkgs, ... }:
|
||
|
with lib;
|
||
|
let
|
||
|
psCfg = config.pub-solar;
|
||
|
cfg = config.pub-solar.home-controller;
|
||
|
in
|
||
|
{
|
||
|
imports = [
|
||
|
./k3s.nix
|
||
|
./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
|
||
|
'';
|
||
|
};
|
||
|
}
|