mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 17:12:13 -06:00
Silences warnings like "getExe: Package "copyparty-1.16.15" does not have the meta.mainProgram attribute. We'll assume that the main program has the same name for now, but this behavior is deprecated, because it leads to surprising errors when the assumption does not hold. If the package has a main program, please set `meta.mainProgram` in its definition to make this warning go away. Otherwise, if the package does not have a main program, or if you don't control its definition, use getExe' to specify the name to the program, such as lib.getExe' foo "bar"."
69 lines
2.3 KiB
Nix
69 lines
2.3 KiB
Nix
{ lib, stdenv, makeWrapper, fetchurl, utillinux, python, jinja2, impacket, pyftpdlib, pyopenssl, argon2-cffi, pillow, pyvips, pyzmq, ffmpeg, mutagen,
|
|
|
|
# use argon2id-hashed passwords in config files (sha2 is always available)
|
|
withHashedPasswords ? true,
|
|
|
|
# generate TLS certificates on startup (pointless when reverse-proxied)
|
|
withCertgen ? false,
|
|
|
|
# create thumbnails with Pillow; faster than FFmpeg / MediaProcessing
|
|
withThumbnails ? true,
|
|
|
|
# create thumbnails with PyVIPS; even faster, uses more memory
|
|
# -- can be combined with Pillow to support more filetypes
|
|
withFastThumbnails ? false,
|
|
|
|
# enable FFmpeg; thumbnails for most filetypes (also video and audio), extract audio metadata, transcode audio to opus
|
|
# -- possibly dangerous if you allow anonymous uploads, since FFmpeg has a huge attack surface
|
|
# -- can be combined with Thumbnails and/or FastThumbnails, since FFmpeg is slower than both
|
|
withMediaProcessing ? true,
|
|
|
|
# if MediaProcessing is not enabled, you probably want this instead (less accurate, but much safer and faster)
|
|
withBasicAudioMetadata ? false,
|
|
|
|
# send ZeroMQ messages from event-hooks
|
|
withZeroMQ ? true,
|
|
|
|
# enable FTPS support in the FTP server
|
|
withFTPS ? false,
|
|
|
|
# samba/cifs server; dangerous and buggy, enable if you really need it
|
|
withSMB ? false,
|
|
|
|
}:
|
|
|
|
let
|
|
pinData = lib.importJSON ./pin.json;
|
|
pyEnv = python.withPackages (ps:
|
|
with ps; [
|
|
jinja2
|
|
]
|
|
++ lib.optional withSMB impacket
|
|
++ lib.optional withFTPS pyopenssl
|
|
++ lib.optional withCertgen cfssl
|
|
++ lib.optional withThumbnails pillow
|
|
++ lib.optional withFastThumbnails pyvips
|
|
++ lib.optional withMediaProcessing ffmpeg
|
|
++ lib.optional withBasicAudioMetadata mutagen
|
|
++ lib.optional withHashedPasswords argon2-cffi
|
|
++ lib.optional withZeroMQ pyzmq
|
|
);
|
|
in stdenv.mkDerivation {
|
|
pname = "copyparty";
|
|
version = pinData.version;
|
|
src = fetchurl {
|
|
url = pinData.url;
|
|
hash = pinData.hash;
|
|
};
|
|
buildInputs = [ makeWrapper ];
|
|
dontUnpack = true;
|
|
dontBuild = true;
|
|
installPhase = ''
|
|
install -Dm755 $src $out/share/copyparty-sfx.py
|
|
makeWrapper ${pyEnv.interpreter} $out/bin/copyparty \
|
|
--set PATH '${lib.makeBinPath ([ utillinux ] ++ lib.optional withMediaProcessing ffmpeg)}:$PATH' \
|
|
--add-flags "$out/share/copyparty-sfx.py"
|
|
'';
|
|
meta.mainProgram = "copyparty";
|
|
}
|