mirror of
https://github.com/9001/copyparty.git
synced 2025-08-18 01:22:13 -06:00
nix: format all nix files with nixfmt
This commit is contained in:
parent
e278316615
commit
4895579c72
|
@ -4,26 +4,29 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib;
|
||||||
mkKeyValue = key: value:
|
let
|
||||||
if value == true
|
mkKeyValue =
|
||||||
then
|
key: value:
|
||||||
|
if value == true then
|
||||||
# sets with a true boolean value are coerced to just the key name
|
# sets with a true boolean value are coerced to just the key name
|
||||||
key
|
key
|
||||||
else if value == false
|
else if value == false then
|
||||||
then
|
|
||||||
# or omitted completely when false
|
# or omitted completely when false
|
||||||
""
|
""
|
||||||
else (generators.mkKeyValueDefault {inherit mkValueString;} ": " key value);
|
else
|
||||||
|
(generators.mkKeyValueDefault { inherit mkValueString; } ": " key value);
|
||||||
|
|
||||||
mkAttrsString = value: (generators.toKeyValue { inherit mkKeyValue; } value);
|
mkAttrsString = value: (generators.toKeyValue { inherit mkKeyValue; } value);
|
||||||
|
|
||||||
mkValueString = value:
|
mkValueString =
|
||||||
if isList value
|
value:
|
||||||
then (concatStringsSep ", " (map mkValueString value))
|
if isList value then
|
||||||
else if isAttrs value
|
(concatStringsSep ", " (map mkValueString value))
|
||||||
then "\n" + (mkAttrsString value)
|
else if isAttrs value then
|
||||||
else (generators.mkValueStringDefault {} value);
|
"\n" + (mkAttrsString value)
|
||||||
|
else
|
||||||
|
(generators.mkValueStringDefault { } value);
|
||||||
|
|
||||||
mkSectionName = value: "[" + (escape [ "[" "]" ] value) + "]";
|
mkSectionName = value: "[" + (escape [ "[" "]" ] value) + "]";
|
||||||
|
|
||||||
|
@ -57,7 +60,8 @@ with lib; let
|
||||||
externalCacheDir = "/var/cache/copyparty";
|
externalCacheDir = "/var/cache/copyparty";
|
||||||
externalStateDir = "/var/lib/copyparty";
|
externalStateDir = "/var/lib/copyparty";
|
||||||
defaultShareDir = "${externalStateDir}/data";
|
defaultShareDir = "${externalStateDir}/data";
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
options.services.copyparty = {
|
options.services.copyparty = {
|
||||||
enable = mkEnableOption "web-based file manager";
|
enable = mkEnableOption "web-based file manager";
|
||||||
|
|
||||||
|
@ -128,7 +132,10 @@ 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;
|
||||||
|
@ -139,7 +146,9 @@ in {
|
||||||
example = "/run/keys/copyparty/ed";
|
example = "/run/keys/copyparty/ed";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}));
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
description = ''
|
description = ''
|
||||||
A set of copyparty accounts to create.
|
A set of copyparty accounts to create.
|
||||||
'';
|
'';
|
||||||
|
@ -152,7 +161,10 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
volumes = mkOption {
|
volumes = mkOption {
|
||||||
type = types.attrsOf (types.submodule ({...}: {
|
type = types.attrsOf (
|
||||||
|
types.submodule (
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
options = {
|
options = {
|
||||||
path = mkOption {
|
path = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
|
@ -214,12 +226,16 @@ in {
|
||||||
default = { };
|
default = { };
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}));
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
description = "A set of copyparty volumes to create";
|
description = "A set of copyparty volumes to create";
|
||||||
default = {
|
default = {
|
||||||
"/" = {
|
"/" = {
|
||||||
path = defaultShareDir;
|
path = defaultShareDir;
|
||||||
access = {r = "*";};
|
access = {
|
||||||
|
r = "*";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
example = literalExpression ''
|
example = literalExpression ''
|
||||||
|
@ -238,9 +254,11 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable (let
|
config = mkIf cfg.enable (
|
||||||
|
let
|
||||||
command = "${getExe cfg.package} -c ${runtimeConfigPath}";
|
command = "${getExe cfg.package} -c ${runtimeConfigPath}";
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
systemd.services.copyparty = {
|
systemd.services.copyparty = {
|
||||||
description = "http file sharing hub";
|
description = "http file sharing hub";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
@ -250,15 +268,16 @@ in {
|
||||||
XDG_CONFIG_HOME = externalStateDir;
|
XDG_CONFIG_HOME = externalStateDir;
|
||||||
};
|
};
|
||||||
|
|
||||||
preStart = let
|
preStart =
|
||||||
replaceSecretCommand = name: attrs: "${getExe pkgs.replace-secret} '${
|
let
|
||||||
passwordPlaceholder name
|
replaceSecretCommand =
|
||||||
}' '${attrs.passwordFile}' ${runtimeConfigPath}";
|
name: attrs:
|
||||||
in ''
|
"${getExe pkgs.replace-secret} '${passwordPlaceholder name}' '${attrs.passwordFile}' ${runtimeConfigPath}";
|
||||||
|
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 = {
|
||||||
|
@ -274,21 +293,15 @@ in {
|
||||||
CacheDirectory = lib.mkIf (cfg.settings ? hist) [ "copyparty" ];
|
CacheDirectory = lib.mkIf (cfg.settings ? hist) [ "copyparty" ];
|
||||||
CacheDirectoryMode = lib.mkIf (cfg.settings ? hist) "0700";
|
CacheDirectoryMode = lib.mkIf (cfg.settings ? hist) "0700";
|
||||||
WorkingDirectory = externalStateDir;
|
WorkingDirectory = externalStateDir;
|
||||||
BindReadOnlyPaths =
|
BindReadOnlyPaths = [
|
||||||
[
|
|
||||||
"/nix/store"
|
"/nix/store"
|
||||||
"-/etc/resolv.conf"
|
"-/etc/resolv.conf"
|
||||||
"-/etc/nsswitch.conf"
|
"-/etc/nsswitch.conf"
|
||||||
"-/etc/hosts"
|
"-/etc/hosts"
|
||||||
"-/etc/localtime"
|
"-/etc/localtime"
|
||||||
]
|
] ++ (mapAttrsToList (k: v: "-${v.passwordFile}") cfg.accounts);
|
||||||
++ (mapAttrsToList (k: v: "-${v.passwordFile}") cfg.accounts);
|
|
||||||
BindPaths =
|
BindPaths =
|
||||||
(
|
(if cfg.settings ? hist then [ cfg.settings.hist ] else [ ])
|
||||||
if cfg.settings ? hist
|
|
||||||
then [cfg.settings.hist]
|
|
||||||
else []
|
|
||||||
)
|
|
||||||
++ [ externalStateDir ]
|
++ [ externalStateDir ]
|
||||||
++ (mapAttrsToList (k: v: v.path) cfg.volumes);
|
++ (mapAttrsToList (k: v: v.path) cfg.volumes);
|
||||||
# ProtectSystem = "strict";
|
# ProtectSystem = "strict";
|
||||||
|
@ -332,8 +345,7 @@ in {
|
||||||
mode = ":755";
|
mode = ":755";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
)
|
) cfg.volumes
|
||||||
cfg.volumes
|
|
||||||
);
|
);
|
||||||
|
|
||||||
users.groups.copyparty = lib.mkIf (cfg.user == "copyparty" && cfg.group == "copyparty") { };
|
users.groups.copyparty = lib.mkIf (cfg.user == "copyparty" && cfg.group == "copyparty") { };
|
||||||
|
@ -344,9 +356,7 @@ in {
|
||||||
isSystemUser = true;
|
isSystemUser = true;
|
||||||
};
|
};
|
||||||
environment.systemPackages = lib.mkIf cfg.mkHashWrapper [
|
environment.systemPackages = lib.mkIf cfg.mkHashWrapper [
|
||||||
(pkgs.writeShellScriptBin
|
(pkgs.writeShellScriptBin "copyparty-hash" ''
|
||||||
"copyparty-hash"
|
|
||||||
''
|
|
||||||
set -a # automatically export variables
|
set -a # automatically export variables
|
||||||
# set same environment variables as the systemd service
|
# set same environment variables as the systemd service
|
||||||
${lib.pipe config.systemd.services.copyparty.environment [
|
${lib.pipe config.systemd.services.copyparty.environment [
|
||||||
|
@ -359,5 +369,6 @@ in {
|
||||||
exec ${command} --ah-cli
|
exec ${command} --ah-cli
|
||||||
'')
|
'')
|
||||||
];
|
];
|
||||||
});
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,20 @@
|
||||||
{ lib, stdenv, makeWrapper, fetchurl, util-linux, python, jinja2, impacket, pyftpdlib, pyopenssl, argon2-cffi, pillow, pyvips, pyzmq, ffmpeg, mutagen,
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
makeWrapper,
|
||||||
|
fetchurl,
|
||||||
|
util-linux,
|
||||||
|
python,
|
||||||
|
jinja2,
|
||||||
|
impacket,
|
||||||
|
pyftpdlib,
|
||||||
|
pyopenssl,
|
||||||
|
argon2-cffi,
|
||||||
|
pillow,
|
||||||
|
pyvips,
|
||||||
|
pyzmq,
|
||||||
|
ffmpeg,
|
||||||
|
mutagen,
|
||||||
|
|
||||||
# use argon2id-hashed passwords in config files (sha2 is always available)
|
# use argon2id-hashed passwords in config files (sha2 is always available)
|
||||||
withHashedPasswords ? true,
|
withHashedPasswords ? true,
|
||||||
|
@ -42,8 +58,10 @@ extraPythonPackages ? (_p: [ ]),
|
||||||
|
|
||||||
let
|
let
|
||||||
pinData = lib.importJSON ./pin.json;
|
pinData = lib.importJSON ./pin.json;
|
||||||
pyEnv = python.withPackages (ps:
|
pyEnv = python.withPackages (
|
||||||
with ps; [
|
ps:
|
||||||
|
with ps;
|
||||||
|
[
|
||||||
jinja2
|
jinja2
|
||||||
]
|
]
|
||||||
++ lib.optional withSMB impacket
|
++ lib.optional withSMB impacket
|
||||||
|
@ -57,7 +75,8 @@ let
|
||||||
++ lib.optional withZeroMQ pyzmq
|
++ lib.optional withZeroMQ pyzmq
|
||||||
++ (extraPythonPackages ps)
|
++ (extraPythonPackages ps)
|
||||||
);
|
);
|
||||||
in stdenv.mkDerivation {
|
in
|
||||||
|
stdenv.mkDerivation {
|
||||||
pname = "copyparty";
|
pname = "copyparty";
|
||||||
version = pinData.version;
|
version = pinData.version;
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
|
@ -70,7 +89,9 @@ in stdenv.mkDerivation {
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
install -Dm755 $src $out/share/copyparty-sfx.py
|
install -Dm755 $src $out/share/copyparty-sfx.py
|
||||||
makeWrapper ${pyEnv.interpreter} $out/bin/copyparty \
|
makeWrapper ${pyEnv.interpreter} $out/bin/copyparty \
|
||||||
--set PATH '${lib.makeBinPath ([ util-linux ] ++ extraPackages ++ lib.optional withMediaProcessing ffmpeg)}:$PATH' \
|
--set PATH '${
|
||||||
|
lib.makeBinPath ([ util-linux ] ++ extraPackages ++ lib.optional withMediaProcessing ffmpeg)
|
||||||
|
}:$PATH' \
|
||||||
--add-flags "$out/share/copyparty-sfx.py"
|
--add-flags "$out/share/copyparty-sfx.py"
|
||||||
'';
|
'';
|
||||||
meta.mainProgram = "copyparty";
|
meta.mainProgram = "copyparty";
|
||||||
|
|
20
flake.nix
20
flake.nix
|
@ -4,16 +4,22 @@
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, flake-utils }:
|
outputs =
|
||||||
|
{
|
||||||
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
flake-utils,
|
||||||
|
}:
|
||||||
{
|
{
|
||||||
nixosModules.default = ./contrib/nixos/modules/copyparty.nix;
|
nixosModules.default = ./contrib/nixos/modules/copyparty.nix;
|
||||||
overlays.default = self: super: {
|
overlays.default = self: super: {
|
||||||
copyparty =
|
copyparty = self.python3.pkgs.callPackage ./contrib/package/nix/copyparty {
|
||||||
self.python3.pkgs.callPackage ./contrib/package/nix/copyparty {
|
|
||||||
ffmpeg = self.ffmpeg-full;
|
ffmpeg = self.ffmpeg-full;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
} // flake-utils.lib.eachDefaultSystem (system:
|
}
|
||||||
|
// flake-utils.lib.eachDefaultSystem (
|
||||||
|
system:
|
||||||
let
|
let
|
||||||
pkgs = import nixpkgs {
|
pkgs = import nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
|
@ -22,10 +28,12 @@
|
||||||
};
|
};
|
||||||
overlays = [ self.overlays.default ];
|
overlays = [ self.overlays.default ];
|
||||||
};
|
};
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
packages = {
|
packages = {
|
||||||
inherit (pkgs) copyparty;
|
inherit (pkgs) copyparty;
|
||||||
default = self.packages.${system}.copyparty;
|
default = self.packages.${system}.copyparty;
|
||||||
};
|
};
|
||||||
});
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue