2023-11-10 03:10:06 +00:00
|
|
|
{ lib, ... }:
|
2021-11-15 10:02:05 +00:00
|
|
|
|
|
|
|
with lib;
|
|
|
|
{
|
2023-11-16 00:00:11 +00:00
|
|
|
options.selfprivacy = {
|
2021-11-22 16:53:43 +00:00
|
|
|
# General server options
|
2021-11-15 10:02:05 +00:00
|
|
|
hostname = mkOption {
|
|
|
|
description = "The hostname of the server.";
|
2021-11-16 10:30:11 +00:00
|
|
|
type = types.nullOr types.str;
|
2021-11-15 10:02:05 +00:00
|
|
|
};
|
|
|
|
domain = mkOption {
|
|
|
|
description = ''
|
|
|
|
Domain used by the server
|
|
|
|
'';
|
2023-12-16 05:39:22 +00:00
|
|
|
# see: https://regexr.com/7p7ep, https://stackoverflow.com/a/26987741
|
|
|
|
type = lib.types.strMatching ''^(xn--)?[a-z0-9][a-z0-9_-]{0,61}[a-z0-9]{0,1}\.(xn--)?([a-z0-9\-]{1,61}|[a-z0-9-]{1,30}\.[a-z]{2,})$'';
|
2021-11-15 10:02:05 +00:00
|
|
|
};
|
2021-11-22 16:53:43 +00:00
|
|
|
timezone = mkOption {
|
|
|
|
description = ''
|
|
|
|
Timezone used by the server
|
|
|
|
'';
|
|
|
|
type = types.nullOr types.str;
|
2024-01-18 22:59:29 +00:00
|
|
|
default = "Etc/UTC";
|
2021-11-22 16:53:43 +00:00
|
|
|
};
|
|
|
|
autoUpgrade = {
|
|
|
|
enable = mkOption {
|
|
|
|
description = "Enable auto-upgrade of the server.";
|
2023-11-18 01:40:57 +00:00
|
|
|
default = false;
|
2021-11-22 16:53:43 +00:00
|
|
|
type = types.nullOr types.bool;
|
|
|
|
};
|
|
|
|
allowReboot = mkOption {
|
|
|
|
description = "Allow the server to reboot during the upgrade.";
|
|
|
|
default = false;
|
|
|
|
type = types.nullOr types.bool;
|
|
|
|
};
|
|
|
|
};
|
2023-12-22 15:33:24 +00:00
|
|
|
stateVersion = mkOption {
|
|
|
|
description = "State version of the server";
|
2023-12-22 19:04:03 +00:00
|
|
|
type = types.nullOr types.str;
|
|
|
|
default = null;
|
2023-12-22 15:33:24 +00:00
|
|
|
};
|
2021-11-22 16:53:43 +00:00
|
|
|
########################
|
|
|
|
# Server admin options #
|
|
|
|
########################
|
2021-11-15 10:02:05 +00:00
|
|
|
username = mkOption {
|
|
|
|
description = ''
|
|
|
|
Username that was defined at the initial setup process
|
|
|
|
'';
|
2021-11-16 10:30:11 +00:00
|
|
|
type = types.nullOr types.str;
|
2021-11-15 10:02:05 +00:00
|
|
|
};
|
|
|
|
hashedMasterPassword = mkOption {
|
|
|
|
description = ''
|
|
|
|
Hash of the password that was defined at the initial setup process
|
|
|
|
'';
|
2021-11-16 10:30:11 +00:00
|
|
|
type = types.nullOr types.str;
|
2021-11-15 10:02:05 +00:00
|
|
|
};
|
2021-11-22 16:53:43 +00:00
|
|
|
sshKeys = mkOption {
|
|
|
|
description = ''
|
|
|
|
SSH keys of the user that was defined at the initial setup process
|
|
|
|
'';
|
2021-11-29 19:17:37 +00:00
|
|
|
type = types.nullOr (types.listOf types.str);
|
2021-11-22 16:53:43 +00:00
|
|
|
default = [ ];
|
|
|
|
};
|
|
|
|
#############
|
2023-12-16 05:39:22 +00:00
|
|
|
# DNS #
|
2021-11-22 16:53:43 +00:00
|
|
|
#############
|
2022-11-07 22:44:09 +00:00
|
|
|
dns = {
|
|
|
|
provider = mkOption {
|
2023-12-12 04:25:06 +00:00
|
|
|
description = "DNS provider that was defined at the initial setup process.";
|
2022-11-07 22:44:09 +00:00
|
|
|
type = types.nullOr types.str;
|
|
|
|
};
|
2022-11-16 08:02:20 +00:00
|
|
|
useStagingACME = mkOption {
|
|
|
|
description = "Use staging ACME server. Default is false";
|
|
|
|
type = types.nullOr types.bool;
|
2023-12-12 04:25:06 +00:00
|
|
|
default = false;
|
2022-11-16 08:02:20 +00:00
|
|
|
};
|
2022-11-07 22:44:09 +00:00
|
|
|
};
|
|
|
|
server = {
|
|
|
|
provider = mkOption {
|
2023-12-12 04:25:06 +00:00
|
|
|
description = "Server provider that was defined at the initial setup process.";
|
2023-12-16 05:39:22 +00:00
|
|
|
type = types.str;
|
2022-08-26 10:21:05 +00:00
|
|
|
};
|
2021-11-15 10:02:05 +00:00
|
|
|
};
|
2021-11-22 16:53:43 +00:00
|
|
|
#########
|
|
|
|
# SSH #
|
|
|
|
#########
|
2021-11-15 13:35:04 +00:00
|
|
|
ssh = {
|
|
|
|
enable = mkOption {
|
|
|
|
default = true;
|
|
|
|
type = types.nullOr types.bool;
|
|
|
|
};
|
|
|
|
rootKeys = mkOption {
|
|
|
|
description = ''
|
2023-12-12 04:25:06 +00:00
|
|
|
Root SSH authorized keys
|
2021-11-15 13:35:04 +00:00
|
|
|
'';
|
2021-11-16 10:30:11 +00:00
|
|
|
type = types.nullOr (types.listOf types.str);
|
2021-11-22 16:53:43 +00:00
|
|
|
default = [ "" ];
|
2021-11-15 13:35:04 +00:00
|
|
|
};
|
|
|
|
passwordAuthentication = mkOption {
|
|
|
|
description = ''
|
|
|
|
Password authentication for SSH
|
|
|
|
'';
|
2023-11-23 07:08:59 +00:00
|
|
|
default = false;
|
2021-11-15 13:35:04 +00:00
|
|
|
type = types.nullOr types.bool;
|
|
|
|
};
|
2021-11-15 10:02:05 +00:00
|
|
|
};
|
2021-11-22 16:53:43 +00:00
|
|
|
###########
|
|
|
|
# Users #
|
|
|
|
###########
|
2021-11-15 10:02:05 +00:00
|
|
|
users = mkOption {
|
|
|
|
description = ''
|
|
|
|
Users that will be created on the server
|
|
|
|
'';
|
2021-11-15 10:29:20 +00:00
|
|
|
type = types.nullOr (types.listOf (types.attrsOf types.anything));
|
2021-11-22 16:53:43 +00:00
|
|
|
default = [ ];
|
2021-11-15 10:02:05 +00:00
|
|
|
};
|
2022-08-26 10:21:05 +00:00
|
|
|
##############
|
|
|
|
# Volumes #
|
|
|
|
##############
|
|
|
|
volumes = mkOption {
|
|
|
|
description = ''
|
|
|
|
Volumes that will be created on the server
|
|
|
|
'';
|
|
|
|
type = types.nullOr (types.listOf (types.attrsOf types.anything));
|
|
|
|
default = [ ];
|
|
|
|
};
|
|
|
|
useBinds = mkOption {
|
|
|
|
type = types.nullOr types.bool;
|
|
|
|
default = false;
|
2023-11-10 03:10:06 +00:00
|
|
|
description = "Whether to bind-mount vmail and sieve folders";
|
2022-08-26 10:21:05 +00:00
|
|
|
};
|
2021-11-15 10:02:05 +00:00
|
|
|
};
|
|
|
|
}
|