nixpkgs/pkgs/applications/system/zxfer/default.nix
2024-02-11 03:19:15 +01:00

88 lines
1.9 KiB
Nix

{ lib
, bash
, fetchFromGitHub
, installShellFiles
, coreutils
, gawk
, gnugrep
, gnused
, openssh
, resholve
, rsync
, which
, zfs
}:
resholve.mkDerivation rec {
pname = "zxfer";
version = "1.1.7";
src = fetchFromGitHub {
owner = "allanjude";
repo = pname;
rev = "v${version}";
hash = "sha256-11SQJcD3GqPYBIgaycyKkc62/diVKPuuj2Or97j+NZY=";
};
nativeBuildInputs = [ installShellFiles ];
# these may point to paths on remote systems, calculated at runtime, thus we cannot fix them
# we can only set their initial values, and let them remain dynamic
postPatch = ''
substituteInPlace zxfer \
--replace 'LCAT=""' 'LCAT=${coreutils}/bin/cat' \
--replace 'LZFS=$( which zfs )' 'LZFS=${zfs}/bin/zfs'
'';
installPhase = ''
runHook preInstall
installManPage zxfer.1m zxfer.8
install -Dm755 zxfer -t $out/bin/
runHook postInstall
'';
solutions.default = {
scripts = [ "bin/zxfer" ];
interpreter = "${bash}/bin/sh";
inputs = [
coreutils
gawk
gnugrep
gnused
openssh
rsync
which
];
fake.external = [
"kldload" # bsd builtin
"kldstat" # bsd builtin
"svcadm" # solaris builtin
];
keep = {
"$LCAT" = true;
"$LZFS" = true;
"$PROGRESS_DIALOG" = true;
"$RZFS" = true;
"$input_optionts" = true;
"$option_O" = true;
"$option_T" = true;
};
fix = {
"$AWK" = [ "awk" ];
"$RSYNC" = [ "rsync" ];
};
execer = [ "cannot:${rsync}/bin/rsync" ];
};
meta = with lib; {
description = "A popular script for managing ZFS snapshot replication";
homepage = "https://github.com/allanjude/zxfer";
changelog = "https://github.com/allanjude/zxfer/releases/tag/v${version}";
license = licenses.bsd2;
maintainers = with lib.maintainers; [ urandom ];
mainProgram = "zxfer";
};
}