formatting clean-up with alejandra.

This commit is contained in:
Gabe Venberg 2025-04-22 19:55:24 +02:00
parent 68e7000275
commit 15e200caa2

View file

@ -1,29 +1,31 @@
{ config, pkgs, lib, ... }: {
config,
with lib; pkgs,
lib,
let ...
}:
with lib; let
mkKeyValue = key: value: mkKeyValue = key: value:
if value == true then if value == true
# sets with a true boolean value are coerced to just the key name then
# sets with a true boolean value are coerced to just the key name
key key
else if value == false then else if value == false
# or omitted completely when false then
# or omitted completely when false
"" ""
else else (generators.mkKeyValueDefault {inherit mkValueString;} ": " key value);
(generators.mkKeyValueDefault { inherit mkValueString; } ": " key value);
mkAttrsString = value: (generators.toKeyValue { inherit mkKeyValue; } value); mkAttrsString = value: (generators.toKeyValue {inherit mkKeyValue;} value);
mkValueString = value: mkValueString = value:
if isList value then if isList value
(concatStringsSep ", " (map mkValueString value)) then (concatStringsSep ", " (map mkValueString value))
else if isAttrs value then else if isAttrs value
"\n" + (mkAttrsString value) then "\n" + (mkAttrsString value)
else else (generators.mkValueStringDefault {} value);
(generators.mkValueStringDefault { } value);
mkSectionName = value: "[" + (escape [ "[" "]" ] value) + "]"; mkSectionName = value: "[" + (escape ["[" "]"] value) + "]";
mkSection = name: attrs: '' mkSection = name: attrs: ''
${mkSectionName name} ${mkSectionName name}
@ -94,7 +96,7 @@ in {
}; };
accounts = mkOption { accounts = mkOption {
type = types.attrsOf (types.submodule ({ ... }: { type = types.attrsOf (types.submodule ({...}: {
options = { options = {
passwordFile = mkOption { passwordFile = mkOption {
type = types.str; type = types.str;
@ -109,7 +111,7 @@ in {
description = '' description = ''
A set of copyparty accounts to create. A set of copyparty accounts to create.
''; '';
default = { }; default = {};
example = literalExpression '' example = literalExpression ''
{ {
ed.passwordFile = "/run/keys/copyparty/ed"; ed.passwordFile = "/run/keys/copyparty/ed";
@ -118,7 +120,7 @@ in {
}; };
volumes = mkOption { volumes = mkOption {
type = types.attrsOf (types.submodule ({ ... }: { type = types.attrsOf (types.submodule ({...}: {
options = { options = {
path = mkOption { path = mkOption {
type = types.str; type = types.str;
@ -177,7 +179,7 @@ in {
nohash = "\.iso$"; nohash = "\.iso$";
}; };
''; '';
default = { }; default = {};
}; };
}; };
})); }));
@ -185,7 +187,7 @@ in {
default = { default = {
"/" = { "/" = {
path = defaultShareDir; path = defaultShareDir;
access = { r = "*"; }; access = {r = "*";};
}; };
}; };
example = literalExpression '' example = literalExpression ''
@ -207,7 +209,7 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
systemd.services.copyparty = { systemd.services.copyparty = {
description = "http file sharing hub"; description = "http file sharing hub";
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
environment = { environment = {
PYTHONUNBUFFERED = "true"; PYTHONUNBUFFERED = "true";
@ -215,15 +217,14 @@ in {
}; };
preStart = let preStart = let
replaceSecretCommand = name: attrs: replaceSecretCommand = name: attrs: "${getExe pkgs.replace-secret} '${
"${getExe pkgs.replace-secret} '${ passwordPlaceholder name
passwordPlaceholder name }' '${attrs.passwordFile}' ${runtimeConfigPath}";
}' '${attrs.passwordFile}' ${runtimeConfigPath}";
in '' in ''
set -euo pipefail set -euo pipefail
install -m 600 ${configFile} ${runtimeConfigPath} install -m 600 ${configFile} ${runtimeConfigPath}
${concatStringsSep "\n" ${concatStringsSep "\n"
(mapAttrsToList replaceSecretCommand cfg.accounts)} (mapAttrsToList replaceSecretCommand cfg.accounts)}
''; '';
serviceConfig = { serviceConfig = {
@ -235,18 +236,20 @@ in {
Group = "copyparty"; Group = "copyparty";
RuntimeDirectory = name; RuntimeDirectory = name;
RuntimeDirectoryMode = "0700"; RuntimeDirectoryMode = "0700";
StateDirectory = [ name "${name}/data" "${name}/.config" ]; StateDirectory = [name "${name}/data" "${name}/.config"];
StateDirectoryMode = "0700"; StateDirectoryMode = "0700";
WorkingDirectory = home; WorkingDirectory = home;
TemporaryFileSystem = "/:ro"; TemporaryFileSystem = "/:ro";
BindReadOnlyPaths = [ BindReadOnlyPaths =
"/nix/store" [
"-/etc/resolv.conf" "/nix/store"
"-/etc/nsswitch.conf" "-/etc/resolv.conf"
"-/etc/hosts" "-/etc/nsswitch.conf"
"-/etc/localtime" "-/etc/hosts"
] ++ (mapAttrsToList (k: v: "-${v.passwordFile}") cfg.accounts); "-/etc/localtime"
BindPaths = [ home ] ++ (mapAttrsToList (k: v: v.path) cfg.volumes); ]
++ (mapAttrsToList (k: v: "-${v.passwordFile}") cfg.accounts);
BindPaths = [home] ++ (mapAttrsToList (k: v: v.path) cfg.volumes);
# Would re-mount paths ignored by temporary root # Would re-mount paths ignored by temporary root
#ProtectSystem = "strict"; #ProtectSystem = "strict";
ProtectHome = true; ProtectHome = true;
@ -272,7 +275,7 @@ in {
}; };
}; };
users.groups.copyparty = { }; users.groups.copyparty = {};
users.users.copyparty = { users.users.copyparty = {
description = "Service user for copyparty"; description = "Service user for copyparty";
group = "copyparty"; group = "copyparty";