Fediversity/infra/common/options.nix

123 lines
3.2 KiB
Nix

{ lib, ... }:
let
inherit (lib) mkOption;
inherit (lib.types) types;
in
{
options.fediversityVm = {
name = mkOption {
description = ''
The name of the machine. Most of the time, this will look like `vm02XXX`
or `fediYYY`.
'';
};
proxmox = mkOption {
type = types.nullOr (
types.enum [
"procolix"
"fediversity"
]
);
description = ''
The Proxmox instance. This is used for provisioning only and should be
set to `null` if the machine is not a VM.
'';
};
vmId = mkOption {
# REVIEW: There is `types.ints.between` but maybe not `types.ints.above`?
type = types.nullOr (types.addCheck types.int (x: x >= 100));
description = ''
The id of the machine in the corresponding Proxmox. This is used for
provisioning only and should be set to `null` if the machine is not a
VM.
'';
};
sockets = mkOption {
type = types.int;
description = "The number of sockets of the VM.";
default = 1;
};
cores = mkOption {
type = types.int;
description = "The number of cores of the VM.";
default = 1;
};
memory = mkOption {
type = types.int;
description = "The amount of memory of the VM in MiB.";
default = 2048;
};
domain = mkOption {
description = ''
The domain hosting the machine. Most of the time, this will be either of
`procolix.com`, `fediversity.eu` or `abundos.eu`.
'';
default = "procolix.com";
};
ipv4 = {
address = mkOption {
description = ''
The IP address of the machine, version 4. It will be injected as a
value in `networking.interfaces.eth0`, but it will also be used to
communicate with the machine via NixOps4.
'';
};
prefixLength = mkOption {
description = ''
The subnet mask of the interface, specified as the number of bits in
the prefix.
'';
default = 24;
};
gateway = mkOption {
description = ''
The IP address of the default gateway.
'';
default = "185.206.232.1"; # FIXME: compute default from `address` and `prefixLength`.
};
};
ipv6 = {
address = mkOption {
description = ''
The IP address of the machine, version 6. It will be injected as a
value in `networking.interfaces.eth0`, but it will also be used to
communicate with the machine via NixOps4.
'';
};
prefixLength = mkOption {
description = ''
The subnet mask of the interface, specified as the number of bits in
the prefix.
'';
default = 64;
};
gateway = mkOption {
description = ''
The IP address of the default gateway.
'';
default = "2a00:51c0:12:1201::1"; # FIXME: compute default from `address` and `prefixLength`.
};
};
hostPublicKey = mkOption {
description = ''
The host public key of the machine. It is used to filter Age secrets and
only keep the relevant ones, and to feed to NixOps4.
'';
};
};
}