anchor.diff:  { lib
  -, stdenv
  +, autoreconfHook
  +, bash-completion
  +, bridge-utils
  +, cmake
  +, coreutils
  +, curl
  +, darwin
  +, dbus
  +, dnsmasq
  +, docutils
  +, fetchFromGitLab
   , fetchurl
  -, fetchFromGitLab
  -, makeWrapper
  -, autoreconfHook
  -, fetchpatch
  -, coreutils
  -, libxml2
  +, gettext
  +, glib
   , gnutls
  -, perl
  -, python3
  -, attr
  -, glib
  -, docutils
   , iproute2
  -, readline
  -, lvm2
  -, util-linux
  -, systemd
  -, libpciaccess
  -, gettext
  -, libtasn1
   , iptables
   , libgcrypt
  -, yajl
  -, pmutils
  -, libcap_ng
  -, libapparmor
  -, dnsmasq
  -, libnl
   , libpcap
  +, libtasn1
  +, libxml2
   , libxslt
  -, xhtml1
  -, numad
  -, numactl
  -, perlPackages
  -, curl
  -, parted
  -, bridge-utils
  -, dmidecode
  -, dbus
  -, libtirpc
  -, rpcsvc-proto
  -, darwin
  +, makeWrapper
   , meson
   , ninja
  -, audit
  -, cmake
  -, bash-completion
  +, perl
  +, perlPackages
   , pkg-config
  -, enableCeph ? false, ceph ? null
  -, enableGlusterfs ? false, glusterfs ? null
  -, enableIscsi ? false, openiscsi ? null
  -, enableXen ? false, xen ? null
  -, enableZfs ? true, zfs ? null
  -# Darwin
  -, gmp
  -, libiconv
  +, pmutils
  +, python3
  +, readline
  +, rpcsvc-proto
  +, stdenv
  +, xhtml1
  +, yajl
  +
  +  # Linux
  +, acl ? null
  +, attr ? null
  +, audit ? null
  +, dmidecode ? null
  +, fuse ? null
  +, kmod ? null
  +, libapparmor ? null
  +, libcap_ng ? null
  +, libnl ? null
  +, libpciaccess ? null
  +, libtirpc ? null
  +, lvm2 ? null
  +, numactl ? null
  +, numad ? null
  +, parted ? null
  +, systemd ? null
  +, util-linux ? null
  +
  +  # Darwin
  +, gmp ? null
  +, libiconv ? null
   , Carbon ? null
   , AppKit ? null
  +
  +  # Options
  +, enableCeph ? false
  +, ceph ? null
  +, enableGlusterfs ? false
  +, glusterfs ? null
  +, enableIscsi ? false
  +, openiscsi ? null
  +, libiscsi ? null
  +, enableXen ? false
  +, xen ? null
  +, enableZfs ? stdenv.isLinux
  +, zfs ? null
   }:
   
   with lib;
   
  -assert enableXen -> stdenv.isLinux && stdenv.isx86_64;
  -assert enableCeph -> stdenv.isLinux;
  -assert enableGlusterfs -> stdenv.isLinux;
  -assert enableZfs -> stdenv.isLinux;
  +let
  +  inherit (stdenv) isDarwin isLinux isx86_64;
  +  binPath = makeBinPath ([
  +    dnsmasq
  +  ] ++ optionals isLinux [
  +    bridge-utils
  +    dmidecode
  +    dnsmasq
  +    iproute2
  +    iptables
  +    kmod
  +    lvm2
  +    numactl
  +    numad
  +    pmutils
  +    systemd
  +  ] ++ optionals enableIscsi [
  +    libiscsi
  +    openiscsi
  +  ]);
  +in
  +
  +assert enableXen -> isLinux && isx86_64;
  +assert enableCeph -> isLinux;
  +assert enableGlusterfs -> isLinux;
  +assert enableZfs -> isLinux;
   
   # if you update, also bump <nixpkgs/pkgs/development/python-modules/libvirt/default.nix> and SysVirt in <nixpkgs/pkgs/top-level/perl-packages.nix>
  -let
  -  buildFromTarball = stdenv.isDarwin;
  -in
   stdenv.mkDerivation rec {
     pname = "libvirt";
     version = "8.1.0";
   
     src =
  -    if buildFromTarball then
  +    if isDarwin then
         fetchurl
           {
             url = "https://libvirt.org/sources/${pname}-${version}.tar.xz";
  
positive.code:   ];
  
    nativeBuildInputs = [
      ninja
      meson
      cmake
      makeWrapper
      pkg-config
      docutils
    ] ++ optional (!stdenv.isDarwin) [
      rpcsvc-proto
    ] ++ optionals stdenv.isDarwin [
      darwin.developer_cmds # needed for rpcgen
    ];
  
    buildInputs = [
      bash-completion
      pkg-config
      libxml2
      gnutls
      perl
      python3
      readline
      gettext
      libtasn1
      libgcrypt
      yajl
      libxslt
      xhtml1
      perlPackages.XMLXPath
      curl
      libpcap
      glib
      dbus
    ] ++ optionals stdenv.isLinux [
      audit
      libpciaccess
      lvm2
      util-linux
      systemd
      libnl
      numad
      libapparmor
      libcap_ng
      numactl
      attr
      parted
      libtirpc
    ] ++ optionals enableCeph [
      ceph
    ] ++ optionals enableGlusterfs [
      glusterfs
    ] ++ optionals enableIscsi [
      openiscsi
    ] ++ optionals enableXen [
      xen
    ] ++ optionals enableZfs [
      zfs
    ] ++ optionals stdenv.isDarwin [
      libiconv
      gmp
      Carbon
      AppKit
    ];
  
    preConfigure =
      let
  
negative.code:         QEMU_BRIDGE_HELPER = "/run/wrappers/bin/qemu-bridge-helper";
          QEMU_PR_HELPER = "/run/libvirt/nix-helpers/qemu-pr-helper";
        };
  
        patchBuilder = var: value: ''
          sed -i meson.build -e "s|conf.set_quoted('${var}',.*|conf.set_quoted('${var}','${value}')|"
        '';
      in
      ''
        PATH="${binPath}:$PATH"
        # the path to qemu-kvm will be stored in VM's .xml and .save files
        # do not use "''${qemu_kvm}/bin/qemu-kvm" to avoid bound VMs to particular qemu derivations
        substituteInPlace src/lxc/lxc_conf.c \
          --replace 'lxc_path,' '"/run/libvirt/nix-emulators/libvirt_lxc",'
  
        substituteInPlace build-aux/meson.build \
          --replace "gsed" "sed" \
          --replace "gmake" "make" \
          --replace "ggrep" "grep"
  
        patchShebangs .
      ''
      + (lib.concatStringsSep "\n" (lib.mapAttrsToList patchBuilder overrides));
  
    mesonAutoFeatures = "disabled";
  
    mesonFlags =
      let
        cfg = option: val: "-D${option}=${val}";
        feat = option: enable: cfg option (if enable then "enabled" else "disabled");
        driver = name: feat "driver_${name}";
        storage = name: feat "storage_${name}";
      in
      [
        "--localstatedir=${placeholder "out"}/var/"
        (cfg "init_script" (if isDarwin then "none" else "systemd"))
  
        (feat "apparmor" isLinux)
        (feat "attr" isLinux)
        (feat "audit" isLinux)
        (feat "bash_completion" true)
        (feat "blkid" isLinux)
        (feat "capng" isLinux)
        (feat "curl" true)
        (feat "docs" true)
        (feat "expensive_tests" true)
        (feat "firewalld" isLinux)
        (feat "firewalld_zone" isLinux)
        (feat "fuse" isLinux)
        (feat "glusterfs" enableGlusterfs)
        (feat "host_validate" true)
        (feat "libiscsi" enableIscsi)
        (feat "libnl" isLinux)
        (feat "libpcap" true)
        (feat "libssh2" true)
        (feat "login_shell" isLinux)
        (feat "nss" isLinux)
        (feat "numactl" isLinux)
        (feat "numad" isLinux)
        (feat "pciaccess" isLinux)
        (feat "polkit" true)
        (feat "readline" true)
        (feat "secdriver_apparmor" isLinux)
        (feat "tests" true)
        (feat "udev" isLinux)
        (feat "yajl" true)
  
        (driver "ch" isLinux)
        (driver "esx" true)
        (driver "interface" isLinux)
        (driver "libvirtd" true)
        (driver "libxl" enableXen)
        (driver "lxc" isLinux)
        (driver "network" true)
        (driver "openvz" isLinux)
        (driver "qemu" true)
        (driver "remote" true)
        (driver "secrets" true)
        (driver "test" true)
        (driver "vbox" true)
        (driver "vmware" true)
  
        (storage "dir" true)
        (storage "disk" isLinux)
        (storage "fs" isLinux)
        (storage "gluster" enableGlusterfs)
        (storage "iscsi" enableIscsi)
        (storage "iscsi_direct" enableIscsi)
        (storage "lvm" isLinux)
        (storage "mpath" isLinux)
        (storage "rbd" enableCeph)
        (storage "scsi" true)
        (storage "vstorage" isLinux)
        (storage "zfs" enableZfs)
      ];
  
    postInstall = ''
      substituteInPlace $out/bin/virt-xml-validate \
        --replace xmllint ${libxml2}/bin/xmllint
  
      substituteInPlace $out/libexec/libvirt-guests.sh \
        --replace 'ON_BOOT="start"'       'ON_BOOT=''${ON_BOOT:-start}' \
        --replace 'ON_SHUTDOWN="suspend"' 'ON_SHUTDOWN=''${ON_SHUTDOWN:-suspend}' \
        --replace "$out/bin"              '${gettext}/bin' \
        --replace 'lock/subsys'           'lock' \
        --replace 'gettext.sh'            'gettext.sh
      # Added in nixpkgs:
      gettext() { "${gettext}/bin/gettext" "$@"; }
      '
    '' + optionalString isLinux ''
      substituteInPlace $out/lib/systemd/system/libvirtd.service --replace /bin/kill ${coreutils}/bin/kill
      rm $out/lib/systemd/system/{virtlockd,virtlogd}.*
      wrapProgram $out/sbin/libvirtd \
        --prefix PATH : /run/libvirt/nix-emulators:${binPath}
    '';
  
    meta = {
      homepage = "https://libvirt.org/";
  