selfprivacy-nixos-config/selfprivacy-module.nix
2024-01-19 02:59:29 +04:00

134 lines
3.6 KiB
Nix

{ lib, ... }:
with lib;
{
options.selfprivacy = {
# General server options
hostname = mkOption {
description = "The hostname of the server.";
type = types.nullOr types.str;
};
domain = mkOption {
description = ''
Domain used by the server
'';
# 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,})$'';
};
timezone = mkOption {
description = ''
Timezone used by the server
'';
type = types.nullOr types.str;
default = "Etc/UTC";
};
autoUpgrade = {
enable = mkOption {
description = "Enable auto-upgrade of the server.";
default = false;
type = types.nullOr types.bool;
};
allowReboot = mkOption {
description = "Allow the server to reboot during the upgrade.";
default = false;
type = types.nullOr types.bool;
};
};
stateVersion = mkOption {
description = "State version of the server";
type = types.nullOr types.str;
default = null;
};
########################
# Server admin options #
########################
username = mkOption {
description = ''
Username that was defined at the initial setup process
'';
type = types.nullOr types.str;
};
hashedMasterPassword = mkOption {
description = ''
Hash of the password that was defined at the initial setup process
'';
type = types.nullOr types.str;
};
sshKeys = mkOption {
description = ''
SSH keys of the user that was defined at the initial setup process
'';
type = types.nullOr (types.listOf types.str);
default = [ ];
};
#############
# DNS #
#############
dns = {
provider = mkOption {
description = "DNS provider that was defined at the initial setup process.";
type = types.nullOr types.str;
};
useStagingACME = mkOption {
description = "Use staging ACME server. Default is false";
type = types.nullOr types.bool;
default = false;
};
};
server = {
provider = mkOption {
description = "Server provider that was defined at the initial setup process.";
type = types.str;
};
};
#########
# SSH #
#########
ssh = {
enable = mkOption {
default = true;
type = types.nullOr types.bool;
};
rootKeys = mkOption {
description = ''
Root SSH authorized keys
'';
type = types.nullOr (types.listOf types.str);
default = [ "" ];
};
passwordAuthentication = mkOption {
description = ''
Password authentication for SSH
'';
default = false;
type = types.nullOr types.bool;
};
};
###########
# Users #
###########
users = mkOption {
description = ''
Users that will be created on the server
'';
type = types.nullOr (types.listOf (types.attrsOf types.anything));
default = [ ];
};
##############
# 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;
description = "Whether to bind-mount vmail and sieve folders";
};
};
}