flake: reformat with nixfmt
This commit is contained in:
parent
a79e641851
commit
eaf4f56ac0
117 changed files with 2667 additions and 1592 deletions
|
@ -1,4 +1,9 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
|
@ -48,19 +53,25 @@ let
|
|||
|
||||
savePath = "${cfg.stateDir}/saves/${cfg.saveName}.zip";
|
||||
|
||||
mkCmd = options: toString ([
|
||||
"${lib.getExe cfg.package}"
|
||||
"--config=${cfg.configFile}"
|
||||
(optionalString (cfg.mods != [ ]) "--mod-directory=${modDir}")
|
||||
(optionalString (cfg.mods != [ ]) "--mod-directory=${modDir}")
|
||||
(optionalString (cfg.mapGenSettings != { }) "--map-gen-settings=${mapGenSettingsFile}")
|
||||
(optionalString (cfg.mapSettings != { }) "--map-settings=${mapSettingsFile}")
|
||||
"--server-settings=${
|
||||
if (cfg.extraSettingsFile != null)
|
||||
then "${cfg.stateDir}/server-settings.json"
|
||||
else serverSettingsFile
|
||||
}"
|
||||
] ++ options);
|
||||
mkCmd =
|
||||
options:
|
||||
toString (
|
||||
[
|
||||
"${lib.getExe cfg.package}"
|
||||
"--config=${cfg.configFile}"
|
||||
(optionalString (cfg.mods != [ ]) "--mod-directory=${modDir}")
|
||||
(optionalString (cfg.mods != [ ]) "--mod-directory=${modDir}")
|
||||
(optionalString (cfg.mapGenSettings != { }) "--map-gen-settings=${mapGenSettingsFile}")
|
||||
(optionalString (cfg.mapSettings != { }) "--map-settings=${mapSettingsFile}")
|
||||
"--server-settings=${
|
||||
if (cfg.extraSettingsFile != null) then
|
||||
"${cfg.stateDir}/server-settings.json"
|
||||
else
|
||||
serverSettingsFile
|
||||
}"
|
||||
]
|
||||
++ options
|
||||
);
|
||||
in
|
||||
{
|
||||
disabledModules = [ "services/games/factorio.nix" ];
|
||||
|
@ -234,7 +245,9 @@ in
|
|||
extraSettings = mkOption {
|
||||
type = types.attrs;
|
||||
default = { };
|
||||
example = { admins = [ "username" ]; };
|
||||
example = {
|
||||
admins = [ "username" ];
|
||||
};
|
||||
description = lib.mdDoc ''
|
||||
Extra game configuration that will go into server-settings.json
|
||||
'';
|
||||
|
@ -338,18 +351,20 @@ in
|
|||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network.target" ];
|
||||
|
||||
preStart = ''
|
||||
if [[ ! -e "${savePath}" ]]; then
|
||||
${mkCmd [
|
||||
"--create=${savePath}"
|
||||
]}
|
||||
fi
|
||||
'' + (optionalString (cfg.extraSettingsFile != null) ''
|
||||
echo ${lib.strings.escapeShellArg serverSettingsString} \
|
||||
"$(cat ${cfg.extraSettingsFile})" \
|
||||
| ${lib.getExe pkgs.jq} -s add \
|
||||
> ${cfg.stateDir}/server-settings.json
|
||||
'');
|
||||
preStart =
|
||||
''
|
||||
if [[ ! -e "${savePath}" ]]; then
|
||||
${mkCmd [
|
||||
"--create=${savePath}"
|
||||
]}
|
||||
fi
|
||||
''
|
||||
+ (optionalString (cfg.extraSettingsFile != null) ''
|
||||
echo ${lib.strings.escapeShellArg serverSettingsString} \
|
||||
"$(cat ${cfg.extraSettingsFile})" \
|
||||
| ${lib.getExe pkgs.jq} -s add \
|
||||
> ${cfg.stateDir}/server-settings.json
|
||||
'');
|
||||
|
||||
serviceConfig = {
|
||||
User = cfg.user;
|
||||
|
@ -362,11 +377,7 @@ in
|
|||
ExecStart = mkCmd [
|
||||
"--port=${toString cfg.port}"
|
||||
"--bind=${cfg.bind}"
|
||||
(
|
||||
if cfg.loadLatestSave
|
||||
then "--start-server-load-latest"
|
||||
else "--start-server=${savePath}"
|
||||
)
|
||||
(if cfg.loadLatestSave then "--start-server-load-latest" else "--start-server=${savePath}")
|
||||
(optionalString (cfg.admins != [ ]) "--server-adminlist=${serverAdminsFile}")
|
||||
];
|
||||
|
||||
|
@ -379,7 +390,12 @@ in
|
|||
ProtectControlGroups = true;
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
RestrictAddressFamilies = [ "AF_UNIX" "AF_INET" "AF_INET6" "AF_NETLINK" ];
|
||||
RestrictAddressFamilies = [
|
||||
"AF_UNIX"
|
||||
"AF_INET"
|
||||
"AF_INET6"
|
||||
"AF_NETLINK"
|
||||
];
|
||||
RestrictRealtime = true;
|
||||
RestrictNamespaces = true;
|
||||
MemoryDenyWriteExecute = true;
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
|
@ -16,22 +21,29 @@ let
|
|||
HYDRA_DATA = "${baseDir}";
|
||||
};
|
||||
|
||||
env = {
|
||||
NIX_REMOTE = "daemon";
|
||||
SSL_CERT_FILE = "/etc/ssl/certs/ca-certificates.crt"; # Remove in 16.03
|
||||
PGPASSFILE = "${baseDir}/pgpass";
|
||||
NIX_REMOTE_SYSTEMS = concatStringsSep ":" cfg.buildMachinesFiles;
|
||||
} // optionalAttrs (cfg.smtpHost != null) {
|
||||
EMAIL_SENDER_TRANSPORT = "SMTP";
|
||||
EMAIL_SENDER_TRANSPORT_host = cfg.smtpHost;
|
||||
} // hydraEnv // cfg.extraEnv;
|
||||
env =
|
||||
{
|
||||
NIX_REMOTE = "daemon";
|
||||
SSL_CERT_FILE = "/etc/ssl/certs/ca-certificates.crt"; # Remove in 16.03
|
||||
PGPASSFILE = "${baseDir}/pgpass";
|
||||
NIX_REMOTE_SYSTEMS = concatStringsSep ":" cfg.buildMachinesFiles;
|
||||
}
|
||||
// optionalAttrs (cfg.smtpHost != null) {
|
||||
EMAIL_SENDER_TRANSPORT = "SMTP";
|
||||
EMAIL_SENDER_TRANSPORT_host = cfg.smtpHost;
|
||||
}
|
||||
// hydraEnv
|
||||
// cfg.extraEnv;
|
||||
|
||||
serverEnv = env // {
|
||||
HYDRA_TRACKER = cfg.tracker;
|
||||
XDG_CACHE_HOME = "${baseDir}/www/.cache";
|
||||
COLUMNS = "80";
|
||||
PGPASSFILE = "${baseDir}/pgpass-www"; # grrr
|
||||
} // (optionalAttrs cfg.debugServer { DBIC_TRACE = "1"; });
|
||||
serverEnv =
|
||||
env
|
||||
// {
|
||||
HYDRA_TRACKER = cfg.tracker;
|
||||
XDG_CACHE_HOME = "${baseDir}/www/.cache";
|
||||
COLUMNS = "80";
|
||||
PGPASSFILE = "${baseDir}/pgpass-www"; # grrr
|
||||
}
|
||||
// (optionalAttrs cfg.debugServer { DBIC_TRACE = "1"; });
|
||||
|
||||
localDB = "dbi:Pg:dbname=hydra;user=hydra;";
|
||||
|
||||
|
@ -39,7 +51,9 @@ let
|
|||
|
||||
hydra-package =
|
||||
let
|
||||
makeWrapperArgs = concatStringsSep " " (mapAttrsToList (key: value: "--set-default \"${key}\" \"${value}\"") hydraEnv);
|
||||
makeWrapperArgs = concatStringsSep " " (
|
||||
mapAttrsToList (key: value: "--set-default \"${key}\" \"${value}\"") hydraEnv
|
||||
);
|
||||
in
|
||||
pkgs.buildEnv rec {
|
||||
name = "hydra-env";
|
||||
|
@ -236,7 +250,10 @@ in
|
|||
type = types.listOf types.path;
|
||||
default = optional (config.nix.buildMachines != [ ]) "/etc/nix/machines";
|
||||
defaultText = literalExpression ''optional (config.nix.buildMachines != []) "/etc/nix/machines"'';
|
||||
example = [ "/etc/nix/machines" "/var/lib/hydra/provisioner/machines" ];
|
||||
example = [
|
||||
"/etc/nix/machines"
|
||||
"/var/lib/hydra/provisioner/machines"
|
||||
];
|
||||
description = "List of files containing build machines.";
|
||||
};
|
||||
|
||||
|
@ -257,7 +274,6 @@ in
|
|||
|
||||
};
|
||||
|
||||
|
||||
###### implementation
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
@ -312,7 +328,10 @@ in
|
|||
use-substitutes = ${if cfg.useSubstitutes then "1" else "0"}
|
||||
'';
|
||||
|
||||
environment.systemPackages = [ hydra-package pkgs.git ];
|
||||
environment.systemPackages = [
|
||||
hydra-package
|
||||
pkgs.git
|
||||
];
|
||||
|
||||
environment.variables = hydraEnv;
|
||||
|
||||
|
@ -320,7 +339,11 @@ in
|
|||
{
|
||||
keep-outputs = true;
|
||||
keep-derivations = true;
|
||||
extra-trusted-users = [ "hydra" "hydra-queue-runner" "hydra-www" ];
|
||||
extra-trusted-users = [
|
||||
"hydra"
|
||||
"hydra-queue-runner"
|
||||
"hydra-www"
|
||||
];
|
||||
}
|
||||
|
||||
(mkIf (versionOlder (getVersion config.nix.package.out) "2.4pre") {
|
||||
|
@ -419,8 +442,17 @@ in
|
|||
wantedBy = [ "multi-user.target" ];
|
||||
requires = [ "hydra-init.service" ];
|
||||
wants = [ "network-online.target" ];
|
||||
after = [ "hydra-init.service" "network.target" ];
|
||||
path = [ hydra-package pkgs.nettools pkgs.openssh pkgs.bzip2 config.nix.package ];
|
||||
after = [
|
||||
"hydra-init.service"
|
||||
"network.target"
|
||||
];
|
||||
path = [
|
||||
hydra-package
|
||||
pkgs.nettools
|
||||
pkgs.openssh
|
||||
pkgs.bzip2
|
||||
config.nix.package
|
||||
];
|
||||
restartTriggers = [ hydraConf ];
|
||||
environment = env // {
|
||||
PGPASSFILE = "${baseDir}/pgpass-queue-runner"; # grrr
|
||||
|
@ -444,8 +476,16 @@ in
|
|||
wantedBy = [ "multi-user.target" ];
|
||||
requires = [ "hydra-init.service" ];
|
||||
wants = [ "network-online.target" ];
|
||||
after = [ "hydra-init.service" "network.target" "network-online.target" ];
|
||||
path = with pkgs; [ hydra-package nettools jq ];
|
||||
after = [
|
||||
"hydra-init.service"
|
||||
"network.target"
|
||||
"network-online.target"
|
||||
];
|
||||
path = with pkgs; [
|
||||
hydra-package
|
||||
nettools
|
||||
jq
|
||||
];
|
||||
restartTriggers = [ hydraConf ];
|
||||
environment = env // {
|
||||
HYDRA_DBI = "${env.HYDRA_DBI};application_name=hydra-evaluator";
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
cfg = config.programs.steam;
|
||||
|
@ -8,7 +13,9 @@ let
|
|||
|
||||
steam-gamescope =
|
||||
let
|
||||
exports = builtins.attrValues (builtins.mapAttrs (n: v: "export ${n}=${v}") cfg.gamescopeSession.env);
|
||||
exports = builtins.attrValues (
|
||||
builtins.mapAttrs (n: v: "export ${n}=${v}") cfg.gamescopeSession.env
|
||||
);
|
||||
in
|
||||
pkgs.writeShellScriptBin "steam-gamescope" ''
|
||||
${builtins.concatStringsSep "\n" exports}
|
||||
|
@ -22,7 +29,10 @@ let
|
|||
Comment=A digital distribution platform
|
||||
Exec=${steam-gamescope}/bin/steam-gamescope
|
||||
Type=Application
|
||||
'').overrideAttrs (_: { passthru.providedSessions = [ "steam" ]; });
|
||||
'').overrideAttrs
|
||||
(_: {
|
||||
passthru.providedSessions = [ "steam" ];
|
||||
});
|
||||
in
|
||||
{
|
||||
disabledModules = [ "programs/steam.nix" ];
|
||||
|
@ -46,29 +56,40 @@ in
|
|||
];
|
||||
}
|
||||
'';
|
||||
apply = steam: steam.override (prev: {
|
||||
extraEnv = (lib.optionalAttrs (cfg.extraCompatPackages != [ ]) {
|
||||
STEAM_EXTRA_COMPAT_TOOLS_PATHS = extraCompatPaths;
|
||||
}) // (lib.optionalAttrs cfg.extest.enable {
|
||||
LD_PRELOAD = "${pkgs.pkgsi686Linux.extest}/lib/libextest.so";
|
||||
}) // (prev.extraEnv or { });
|
||||
extraLibraries = pkgs:
|
||||
let
|
||||
prevLibs = if prev ? extraLibraries then prev.extraLibraries pkgs else [ ];
|
||||
additionalLibs = with config.hardware.graphics;
|
||||
if pkgs.stdenv.hostPlatform.is64bit
|
||||
then [ package ] ++ extraPackages
|
||||
else [ package32 ] ++ extraPackages32;
|
||||
in
|
||||
prevLibs ++ additionalLibs;
|
||||
extraPkgs = p: (cfg.extraPackages ++ lib.optionals (prev ? extraPkgs) (prev.extraPkgs p));
|
||||
} // lib.optionalAttrs (cfg.gamescopeSession.enable && gamescopeCfg.capSysNice)
|
||||
{
|
||||
buildFHSEnv = pkgs.buildFHSEnv.override {
|
||||
# use the setuid wrapped bubblewrap
|
||||
bubblewrap = "${config.security.wrapperDir}/..";
|
||||
};
|
||||
});
|
||||
apply =
|
||||
steam:
|
||||
steam.override (
|
||||
prev:
|
||||
{
|
||||
extraEnv =
|
||||
(lib.optionalAttrs (cfg.extraCompatPackages != [ ]) {
|
||||
STEAM_EXTRA_COMPAT_TOOLS_PATHS = extraCompatPaths;
|
||||
})
|
||||
// (lib.optionalAttrs cfg.extest.enable {
|
||||
LD_PRELOAD = "${pkgs.pkgsi686Linux.extest}/lib/libextest.so";
|
||||
})
|
||||
// (prev.extraEnv or { });
|
||||
extraLibraries =
|
||||
pkgs:
|
||||
let
|
||||
prevLibs = if prev ? extraLibraries then prev.extraLibraries pkgs else [ ];
|
||||
additionalLibs =
|
||||
with config.hardware.graphics;
|
||||
if pkgs.stdenv.hostPlatform.is64bit then
|
||||
[ package ] ++ extraPackages
|
||||
else
|
||||
[ package32 ] ++ extraPackages32;
|
||||
in
|
||||
prevLibs ++ additionalLibs;
|
||||
extraPkgs = p: (cfg.extraPackages ++ lib.optionals (prev ? extraPkgs) (prev.extraPkgs p));
|
||||
}
|
||||
// lib.optionalAttrs (cfg.gamescopeSession.enable && gamescopeCfg.capSysNice) {
|
||||
buildFHSEnv = pkgs.buildFHSEnv.override {
|
||||
# use the setuid wrapped bubblewrap
|
||||
bubblewrap = "${config.security.wrapperDir}/..";
|
||||
};
|
||||
}
|
||||
);
|
||||
description = ''
|
||||
The Steam package to use. Additional libraries are added from the system
|
||||
configuration to ensure graphics work properly.
|
||||
|
@ -201,18 +222,24 @@ in
|
|||
programs.steam.extraPackages = cfg.fontPackages;
|
||||
|
||||
programs.gamescope.enable = lib.mkDefault cfg.gamescopeSession.enable;
|
||||
services.displayManager.sessionPackages = lib.mkIf cfg.gamescopeSession.enable [ gamescopeSessionFile ];
|
||||
services.displayManager.sessionPackages = lib.mkIf cfg.gamescopeSession.enable [
|
||||
gamescopeSessionFile
|
||||
];
|
||||
|
||||
# optionally enable 32bit pulseaudio support if pulseaudio is enabled
|
||||
services.pulseaudio.support32Bit = config.services.pulseaudio.enable;
|
||||
|
||||
hardware.steam-hardware.enable = true;
|
||||
|
||||
home.home.packages = [
|
||||
cfg.package
|
||||
cfg.package.run
|
||||
] ++ lib.optional cfg.gamescopeSession.enable steam-gamescope
|
||||
++ lib.optional cfg.protontricks.enable (cfg.protontricks.package.override { inherit extraCompatPaths; });
|
||||
home.home.packages =
|
||||
[
|
||||
cfg.package
|
||||
cfg.package.run
|
||||
]
|
||||
++ lib.optional cfg.gamescopeSession.enable steam-gamescope
|
||||
++ lib.optional cfg.protontricks.enable (
|
||||
cfg.protontricks.package.override { inherit extraCompatPaths; }
|
||||
);
|
||||
|
||||
networking.firewall = lib.mkMerge [
|
||||
(lib.mkIf (cfg.remotePlay.openFirewall || cfg.localNetworkGameTransfers.openFirewall) {
|
||||
|
@ -221,7 +248,12 @@ in
|
|||
|
||||
(lib.mkIf cfg.remotePlay.openFirewall {
|
||||
allowedTCPPorts = [ 27036 ];
|
||||
allowedUDPPortRanges = [{ from = 27031; to = 27035; }];
|
||||
allowedUDPPortRanges = [
|
||||
{
|
||||
from = 27031;
|
||||
to = 27035;
|
||||
}
|
||||
];
|
||||
})
|
||||
|
||||
(lib.mkIf cfg.dedicatedServer.openFirewall {
|
||||
|
|
|
@ -1,27 +1,42 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.thelounge;
|
||||
configJsData = "module.exports = " + builtins.toJSON (
|
||||
{ inherit (cfg) public port; } // cfg.extraConfig
|
||||
);
|
||||
configJsData =
|
||||
"module.exports = " + builtins.toJSON ({ inherit (cfg) public port; } // cfg.extraConfig);
|
||||
pluginManifest = {
|
||||
dependencies = builtins.listToAttrs (builtins.map (pkg: { name = getName pkg; value = getVersion pkg; }) cfg.plugins);
|
||||
dependencies = builtins.listToAttrs (
|
||||
builtins.map (pkg: {
|
||||
name = getName pkg;
|
||||
value = getVersion pkg;
|
||||
}) cfg.plugins
|
||||
);
|
||||
};
|
||||
plugins = pkgs.runCommandLocal "thelounge-plugins" { } ''
|
||||
mkdir -p $out/node_modules
|
||||
echo ${escapeShellArg (builtins.toJSON pluginManifest)} >> $out/package.json
|
||||
${concatMapStringsSep "\n" (pkg: ''
|
||||
ln -s ${pkg}/lib/node_modules/${getName pkg} $out/node_modules/${getName pkg}
|
||||
ln -s ${pkg}/lib/node_modules/${getName pkg} $out/node_modules/${getName pkg}
|
||||
'') cfg.plugins}
|
||||
'';
|
||||
in
|
||||
{
|
||||
disabledModules = [ "services/networking/thelounge.nix" ];
|
||||
|
||||
imports = [ (mkRemovedOptionModule [ "services" "thelounge" "private" ] "The option was renamed to `services.thelounge.public` to follow upstream changes.") ];
|
||||
imports = [
|
||||
(mkRemovedOptionModule [
|
||||
"services"
|
||||
"thelounge"
|
||||
"private"
|
||||
] "The option was renamed to `services.thelounge.public` to follow upstream changes.")
|
||||
];
|
||||
|
||||
options.services.thelounge = {
|
||||
enable = mkEnableOption (lib.mdDoc "The Lounge web IRC client");
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
|
@ -8,17 +13,27 @@ let
|
|||
group = config.users.groups.vaultwarden.name;
|
||||
|
||||
# Convert name from camel case (e.g. disable2FARemember) to upper case snake case (e.g. DISABLE_2FA_REMEMBER).
|
||||
nameToEnvVar = name:
|
||||
nameToEnvVar =
|
||||
name:
|
||||
let
|
||||
parts = builtins.split "([A-Z0-9]+)" name;
|
||||
partsToEnvVar = parts: foldl'
|
||||
(key: x:
|
||||
let last = stringLength key - 1; in
|
||||
if isList x then key + optionalString (key != "" && substring last 1 key != "_") "_" + head x
|
||||
partsToEnvVar =
|
||||
parts:
|
||||
foldl' (
|
||||
key: x:
|
||||
let
|
||||
last = stringLength key - 1;
|
||||
in
|
||||
if isList x then
|
||||
key + optionalString (key != "" && substring last 1 key != "_") "_" + head x
|
||||
else if key != "" && elem (substring 0 1 x) lowerChars then # to handle e.g. [ "disable" [ "2FAR" ] "emember" ]
|
||||
substring 0 last key + optionalString (substring (last - 1) 1 key != "_") "_" + substring last 1 key + toUpper x
|
||||
else key + toUpper x) ""
|
||||
parts;
|
||||
substring 0 last key
|
||||
+ optionalString (substring (last - 1) 1 key != "_") "_"
|
||||
+ substring last 1 key
|
||||
+ toUpper x
|
||||
else
|
||||
key + toUpper x
|
||||
) "" parts;
|
||||
in
|
||||
if builtins.match "[A-Z0-9_]+" name != null then name else partsToEnvVar parts;
|
||||
|
||||
|
@ -26,17 +41,24 @@ let
|
|||
# we can only check for values consistently after converting them to their corresponding environment variable name.
|
||||
configEnv =
|
||||
let
|
||||
configEnv = concatMapAttrs
|
||||
(name: value: optionalAttrs (value != null) {
|
||||
configEnv = concatMapAttrs (
|
||||
name: value:
|
||||
optionalAttrs (value != null) {
|
||||
${nameToEnvVar name} = if isBool value then boolToString value else toString value;
|
||||
})
|
||||
cfg.config;
|
||||
}
|
||||
) cfg.config;
|
||||
in
|
||||
{ DATA_FOLDER = cfg.dataDir; } // optionalAttrs (!(configEnv ? WEB_VAULT_ENABLED) || configEnv.WEB_VAULT_ENABLED == "true") {
|
||||
{
|
||||
DATA_FOLDER = cfg.dataDir;
|
||||
}
|
||||
// optionalAttrs (!(configEnv ? WEB_VAULT_ENABLED) || configEnv.WEB_VAULT_ENABLED == "true") {
|
||||
WEB_VAULT_FOLDER = "${cfg.webVaultPackage}/share/vaultwarden/vault";
|
||||
} // configEnv;
|
||||
}
|
||||
// configEnv;
|
||||
|
||||
configFile = pkgs.writeText "vaultwarden.env" (concatStrings (mapAttrsToList (name: value: "${name}=${value}\n") configEnv));
|
||||
configFile = pkgs.writeText "vaultwarden.env" (
|
||||
concatStrings (mapAttrsToList (name: value: "${name}=${value}\n") configEnv)
|
||||
);
|
||||
|
||||
vaultwarden = cfg.package.override { inherit (cfg) dbBackend; };
|
||||
|
||||
|
@ -52,7 +74,11 @@ in
|
|||
enable = mkEnableOption (lib.mdDoc "vaultwarden");
|
||||
|
||||
dbBackend = mkOption {
|
||||
type = enum [ "sqlite" "mysql" "postgresql" ];
|
||||
type = enum [
|
||||
"sqlite"
|
||||
"mysql"
|
||||
"postgresql"
|
||||
];
|
||||
default = "sqlite";
|
||||
description = lib.mdDoc ''
|
||||
Which database backend vaultwarden will be using.
|
||||
|
@ -77,7 +103,13 @@ in
|
|||
};
|
||||
|
||||
config = mkOption {
|
||||
type = attrsOf (nullOr (oneOf [ bool int str ]));
|
||||
type = attrsOf (
|
||||
nullOr (oneOf [
|
||||
bool
|
||||
int
|
||||
str
|
||||
])
|
||||
);
|
||||
default = {
|
||||
ROCKET_ADDRESS = "::1"; # default to localhost
|
||||
ROCKET_PORT = 8222;
|
||||
|
@ -186,10 +218,12 @@ in
|
|||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
assertions = [{
|
||||
assertion = cfg.backupDir != null -> cfg.dbBackend == "sqlite";
|
||||
message = "Backups for database backends other than sqlite will need customization";
|
||||
}];
|
||||
assertions = [
|
||||
{
|
||||
assertion = cfg.backupDir != null -> cfg.dbBackend == "sqlite";
|
||||
message = "Backups for database backends other than sqlite will need customization";
|
||||
}
|
||||
];
|
||||
|
||||
users.users.vaultwarden = {
|
||||
inherit group;
|
||||
|
@ -218,11 +252,19 @@ in
|
|||
wantedBy = [ "multi-user.target" ];
|
||||
};
|
||||
|
||||
systemd.tmpfiles.settings."10-vaultwarden" = {
|
||||
${cfg.dataDir}.d = { inherit user group; mode = "0700"; };
|
||||
} // optionalAttrs (cfg.backupDir != null) {
|
||||
${cfg.backupDir}.d = { inherit user group; mode = "0770"; };
|
||||
};
|
||||
systemd.tmpfiles.settings."10-vaultwarden" =
|
||||
{
|
||||
${cfg.dataDir}.d = {
|
||||
inherit user group;
|
||||
mode = "0700";
|
||||
};
|
||||
}
|
||||
// optionalAttrs (cfg.backupDir != null) {
|
||||
${cfg.backupDir}.d = {
|
||||
inherit user group;
|
||||
mode = "0770";
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.backup-vaultwarden = mkIf (cfg.backupDir != null) {
|
||||
aliases = [ "backup-bitwarden_rs.service" ];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue