diff --git a/flake.nix b/flake.nix index 3796fa9..4b95516 100644 --- a/flake.nix +++ b/flake.nix @@ -43,6 +43,7 @@ system = "x86_64-linux"; specialArgs = { inherit unstablePkgs updatePkgs nixos-hardware; }; modules = [ + { nixpkgs.overlays = [ (import ./overlays/zfs-replicate.nix) ]; } ./hosts/axl/configuration.nix home-manager.nixosModules.home-manager { diff --git a/overlays/zfs-replicate-env-fix.patch b/overlays/zfs-replicate-env-fix.patch new file mode 100644 index 0000000..f58ca5f --- /dev/null +++ b/overlays/zfs-replicate-env-fix.patch @@ -0,0 +1,74 @@ +diff --git a/zfs/replicate/filesystem/create.py b/zfs/replicate/filesystem/create.py +index 0349159..f98831c 100644 +--- a/zfs/replicate/filesystem/create.py ++++ b/zfs/replicate/filesystem/create.py +@@ -50,4 +50,4 @@ def create(filesystem: FileSystem, ssh_command: str) -> None: + + + def _create(filesystem: str) -> str: +- return f"/usr/bin/env - zfs create -o readonly=on {filesystem}" ++ return f"/usr/bin/env zfs create -o readonly=on {filesystem}" +diff --git a/zfs/replicate/filesystem/destroy.py b/zfs/replicate/filesystem/destroy.py +index 7e590d5..dd1b75a 100644 +--- a/zfs/replicate/filesystem/destroy.py ++++ b/zfs/replicate/filesystem/destroy.py +@@ -21,4 +21,4 @@ def destroy(filesystem: FileSystem, ssh_command: str) -> None: + + + def _destroy(filesystem: FileSystem) -> str: +- return f"/usr/bin/env - zfs destroy -r '{filesystem}'" ++ return f"/usr/bin/env zfs destroy -r '{filesystem}'" +diff --git a/zfs/replicate/filesystem/list.py b/zfs/replicate/filesystem/list.py +index 5e892e6..f33e11e 100644 +--- a/zfs/replicate/filesystem/list.py ++++ b/zfs/replicate/filesystem/list.py +@@ -42,7 +42,7 @@ def list( # pylint: disable=W0622 + def _list(filesystem: FileSystem) -> str: + options = ["-H", "-o name,readonly", "-t filesystem,volume", "-r"] + +- return f"/usr/bin/env - zfs list {' '.join(options)} '{filesystem.name}'" ++ return f"/usr/bin/env zfs list {' '.join(options)} '{filesystem.name}'" + + + def _filesystems(zfs_list_output: bytes) -> List[FileSystem]: +diff --git a/zfs/replicate/snapshot/destroy.py b/zfs/replicate/snapshot/destroy.py +index a2558b1..2a92360 100644 +--- a/zfs/replicate/snapshot/destroy.py ++++ b/zfs/replicate/snapshot/destroy.py +@@ -21,4 +21,4 @@ def destroy(snapshot: Snapshot, ssh_command: str) -> None: + + + def _destroy(snapshot: Snapshot) -> str: +- return f"/usr/bin/env - zfs destroy '{snapshot.filesystem.name}@{snapshot.name}'" ++ return f"/usr/bin/env zfs destroy '{snapshot.filesystem.name}@{snapshot.name}'" +diff --git a/zfs/replicate/snapshot/list.py b/zfs/replicate/snapshot/list.py +index 033f6ee..c29abac 100644 +--- a/zfs/replicate/snapshot/list.py ++++ b/zfs/replicate/snapshot/list.py +@@ -45,7 +45,7 @@ def _list(filesystem: FileSystem, recursive: bool) -> str: # pylint: disable=W0 + if not recursive: + options.append("-d 1") + +- return f"/usr/bin/env - zfs list {' '.join(options)} '{filesystem.name}'" ++ return f"/usr/bin/env zfs list {' '.join(options)} '{filesystem.name}'" + + + def _snapshots(zfs_list_output: bytes) -> List[Snapshot]: +diff --git a/zfs/replicate/snapshot/send.py b/zfs/replicate/snapshot/send.py +index 9ebe9f2..20e4c08 100644 +--- a/zfs/replicate/snapshot/send.py ++++ b/zfs/replicate/snapshot/send.py +@@ -62,9 +62,9 @@ def _send( + if previous is not None: + options.append(f"-i '{previous.filesystem.name}@{previous.name}'") + +- return f"/usr/bin/env - zfs send {' '.join(options)} '{current.filesystem.name}@{current.name}'" ++ return f"/usr/bin/env zfs send {' '.join(options)} '{current.filesystem.name}@{current.name}'" + + + def _receive(remote: FileSystem, current: Snapshot, decompress_command: str) -> str: + destination = filesystem.remote_dataset(remote, current.filesystem) +- return f"{decompress_command}/usr/bin/env - zfs receive -F -d '{destination.name}'" ++ return f"{decompress_command}/usr/bin/env zfs receive -F -d '{destination.name}'" +-- +2.51.2 diff --git a/overlays/zfs-replicate.nix b/overlays/zfs-replicate.nix new file mode 100644 index 0000000..5999f53 --- /dev/null +++ b/overlays/zfs-replicate.nix @@ -0,0 +1,7 @@ +final: prev: { + zfs-replicate = prev.zfs-replicate.overrideAttrs (oldAttrs: { + patches = (oldAttrs.patches or []) ++ [ + ./zfs-replicate-env-fix.patch + ]; + }); +}