Files
nixconfig/modules/shared/syscfg/server.nix
soraefir 8569c40183 fix
2026-06-07 16:21:21 +02:00

158 lines
5.2 KiB
Nix

{ lib,... }:
let
inherit (lib) mkOption;
inherit (lib.types) attrsOf coercedTo listOf str submodule nullOr port bool oneOf anything enum;
pathEntryType = coercedTo str (path: { inherit path; }) (submodule {
options = {
path = mkOption { type = str; };
owner = mkOption {
type = str;
default = "root:root";
};
mode = mkOption {
type = str;
default = "0755";
};
dirs = mkOption {
type = listOf str;
default = [ ];
};
};
});
mkPathOption = defaultPath: defaults: mkOption {
type = pathEntryType;
default = { path = defaultPath; } // defaults;
};
in with lib; {
domain = mkOption { type = types.str; };
mail = {
domain = mkOption { type = types.nullOr types.str; default = null;};
server = mkOption { type = types.nullOr types.str; default = null;};
};
path = mkOption {
type = types.submodule {
freeformType = attrsOf pathEntryType;
options = {
config = mkPathOption "/media/config" { };
data = mkPathOption "/media/data" { };
download = mkPathOption "/media/data/download" { owner = "1000:1000"; };
cloud = mkPathOption "/media/media/cloud" { owner = "33:33"; };
film = mkPathOption "/media/media/film" { owner = "1000:1000"; };
book = mkPathOption "/media/media/book" { owner = "1000:1000"; };
manga = mkPathOption "/media/media/manga" { owner = "1000:1000"; };
photo = mkPathOption "/media/media/photo" { owner = "1000:1000"; };
# music = mkPathOption "/media/media/music" { owner = "1000:1000"; };
dlComplete = mkPathOption "/media/download/complete" { owner = "1000:1000"; };
dlIncomplete = mkPathOption "/media/download/incomplete" { owner = "1000:1000"; };
dlConverted = mkPathOption "/media/download/converted" { owner = "1000:1000"; };
};
};
default = {};
};
colorScheme = mkOption {
type = types.attrs;
default = (lib.evalModules { modules =[ { freeformType = with lib.types; attrsOf anything; } ../colors ];}).config.colorScheme ;
};
loadedContainers = lib.mkOption {
readOnly = true;
type = lib.types.attrsOf (lib.types.submodule ({ name, ... }: {
options = {
name = lib.mkOption {type = lib.types.str; default = name;};
requires = {
secrets = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
};
databases = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
};
};
exports = {
authentik = {
blueprints = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
};
};
};
runtime = {
paths = lib.mkOption {type = lib.types.listOf lib.types.attrs; default = [ ];};
containers = lib.mkOption {type = lib.types.attrsOf lib.types.attrs; default = { };};
vm = lib.mkOption {type = lib.types.nullOr lib.types.attrs; default = null;};
cron = lib.mkOption {type = lib.types.listOf lib.types.str; default = [ ];};
setup = lib.mkOption {
type = lib.types.submodule {
options = {
trigger = lib.mkOption {type = lib.types.str; default = "";};
script = lib.mkOption {type = lib.types.nullOr lib.types.package; default = null;};
envFile = lib.mkOption {
type = with lib.types; coercedTo str (x: [x]) (listOf str);
default = [ ];
};
};
};
default = { };
};
};
};
}));
};
containers = mkOption {
type = types.attrsOf (types.submodule {
options = {
subdomain = mkOption { type = types.nullOr types.str; default=null;};
subpath = mkOption { type = types.nullOr types.str; default=null;};
port = mkOption { type = types.nullOr types.port; default = null; };
extra = mkOption { type = types.attrs; default = {}; };
};
});
default = {};
};
openssh = mkOption {
type = types.bool;
default = false;
};
wireguard = mkOption {
type = types.bool;
default = false;
};
web = mkOption {
type = types.bool;
default = false;
};
ipfw = {
enable = mkOption {
type = types.bool;
default = false;
};
ifs = mkOption {
type = types.listOf types.str;
default = [ ];
};
ports = mkOption {
type = types.listOf (types.listOf (types.oneOf [ types.str types.int ]));
default = [];
description = "Forwarding rules: [ [srcInterface dstAddr srcPort dstPort] ... ]";
example = [
[ "ens3" "10.10.1.2" "IPV6" 22 2222 ]
[ "ens3" "10.10.1.2" "IPV6" 80 80 ]
[ "ens3" "10.10.1.2" "IPV6" 443 443 ]
];
};
};
db = mkOption {
type = types.listOf (types.str);
default = [ ];
};
}