{ lib, writeText, poetry2nix, python, pythonPackages, gobject-introspection, libblockdev, libbytesize, fetchFromGitHub, pkg-config, parted, systemd, with_dmraid ? false, with_fs_btrfs ? false, with_fs_fat ? false, with_fs_f2fs ? false, with_fs_hfs_plus ? false, with_fs_jfs ? false, with_fs_nfs ? false, with_fs_nfsv4 ? false, with_fs_ntfs ? false, with_fs_reiserfs ? false, with_fs_xfs ? false, with_luks ? false, with_lvm ? false, with_mdadm ? false, with_multipath ? false, with_optical ? false, with_iscsi ? false, dmraid, multipath_tools, lvm2, eject, kmod, utillinux, lsof, openiscsi, coreutils, dosfstools, e2fsprogs, jfsutils, btrfs-progs, xfsprogs, f2fs-tools, hfsprogs, nfs-utils, ntfs3g, ntfsprogs, reiserfsprogs, devicemapper, cryptsetup, mdadm }@args: let # FIXME: blivet/tasks/fsmount.py links to /sbin additionalPackages = lib.optionals with_dmraid [ dmraid ] ++ lib.optionals with_fs_btrfs [ btrfs-progs ] ++ lib.optionals with_fs_fat [ dosfstools ] ++ lib.optionals with_fs_f2fs [ f2fs-tools ] ++ lib.optionals with_fs_hfs_plus [ hfsprogs ] ++ lib.optionals with_fs_jfs [ jfsutils ] ++ lib.optionals with_fs_nfs [ nfs-utils ] ++ lib.optionals with_fs_ntfs [ ntfs3g ntfsprogs ] ++ lib.optionals with_fs_reiserfs [ reiserfsprogs ] ++ lib.optionals with_fs_xfs [ xfsprogs.bin ] ++ lib.optionals with_luks [ devicemapper cryptsetup ] ++ lib.optionals with_lvm [ lvm2 ] ++ lib.optionals with_mdadm [ mdadm ] ++ lib.optionals with_multipath [ multipath_tools ] ++ lib.optionals with_optical [ eject ] ++ lib.optionals with_iscsi [ openiscsi ]; in # nix-shell -E "with import {}; pkgs.mkShell { buildInputs = [ python3 python3Packages.blivet3 ]; }" # nix-shell -E "with import {}; pkgs.mkShell { buildInputs = [ (python3.withPackages(p: [ p.blivet3 ])) ]; }" poetry2nix.mkPoetryApplication { inherit python; propagatedBuildInputs = [ gobject-introspection (pythonPackages.toPythonModule libblockdev) (pythonPackages.toPythonModule libbytesize) ]; src = fetchFromGitHub { owner = "storaged-project"; repo = "blivet"; rev = "blivet-3.3.0"; sha256 = "0ynxm37cxxr2sf2hj18hrdxs1qfw6dgdagkvv5f6g4fmp51m7c3c"; }; overrides = poetry2nix.overrides.withDefaults (self: super: { pyparted = super.pyparted.overridePythonAttrs (old: { buildInputs = old.buildInputs ++ [ parted ]; nativeBuildInputs = old.nativeBuildInputs ++ [ pkg-config ]; }); selinux = super.selinux.overridePythonAttrs (old: { buildInputs = old.buildInputs ++ [ self.setuptools-scm-git-archive ]; nativeBuildInputs = old.nativeBuildInputs ++ [ pkg-config ]; }); }); patches = [ ./fix_path.patch ]; postPatch = let runtimePaths = lib.makeBinPath ([ systemd utillinux kmod e2fsprogs mdadm lsof coreutils ] ++ additionalPackages); libraryPath = builtins.concatStringsSep " " (map (v: "-rpath ${v}/lib -L ${v}/lib") [ systemd.lib ]); giLibraryPath = lib.makeSearchPath "lib/girepository-1.0" [libblockdev gobject-introspection]; addGiPath = writeText "add-gi-path" '' import os newGiPath = "${giLibraryPath}" if newGiPath not in os.environ.get("GI_TYPELIB_PATH", ""): os.environ["GI_TYPELIB_PATH"] = os.environ.get("GI_TYPELIB_PATH", "") + ":" + newGiPath ''; addPath = writeText "add-path" '' import os newPath = "${runtimePaths}" newLibraryPath = "${libraryPath}" if newPath not in os.environ.get("PATH", ""): os.environ["PATH"] = os.environ.get("PATH", "") + ":" + newPath os.environ["NIX_LDFLAGS"] = os.environ.get("NIX_LDFLAGS", "") + " " + newLibraryPath ''; in '' prepend() { mv "$1" "$1.bak" cat ${addPath} "$1.bak" > $1 rm -f "$1.bak" } prepend "blivet/__init__.py" prepend "blivet/iscsi.py" prepend "blivet/tasks/availability.py" prepend "blivet/util.py" prepend "blivet/udev.py" prependGi() { mv "$1" "$1.bak" cat ${addGiPath} "$1.bak" > $1 rm -f "$1.bak" } grep -rl require_version blivet/ | while read i; do prependGi "$i"; done sed -i -e "s@/lib/modules@/run/booted-system/kernel-modules/lib/modules/@" blivet/tasks/fsmount.py ''; postInstall = let in '' rm -rf $out/lib/python*/site-packages/{etc,usr} ''; pyproject = ./pyproject.toml; poetrylock = ./poetry.lock; }