diff --git a/doc/builders/packages/fuse.section.md b/doc/builders/packages/fuse.section.md
new file mode 100644
index 000000000000..5603481115e7
--- /dev/null
+++ b/doc/builders/packages/fuse.section.md
@@ -0,0 +1,19 @@
+# FUSE {#sec-fuse}
+
+Some packages rely on
+[FUSE](https://www.kernel.org/doc/html/latest/filesystems/fuse.html) to provide
+support for additional filesystems not supported by the kernel.
+
+In general, FUSE software are primarily developed for Linux but many of them can
+also run on macOS. Nixpkgs supports FUSE packages on macOS, but it requires
+[macFUSE](https://osxfuse.github.io) to be installed outside of Nix. macFUSE
+currently isn't packaged in Nixpkgs mainly because it includes a kernel
+extension, which isn't supported by Nix outside of NixOS.
+
+If a package fails to run on macOS with an error message similar to the
+following, it's a likely sign that you need to have macFUSE installed.
+
+ dyld: Library not loaded: /usr/local/lib/libfuse.2.dylib
+ Referenced from: /nix/store/w8bi72bssv0bnxhwfw3xr1mvn7myf37x-sshfs-fuse-2.10/bin/sshfs
+ Reason: image not found
+ [1] 92299 abort /nix/store/w8bi72bssv0bnxhwfw3xr1mvn7myf37x-sshfs-fuse-2.10/bin/sshfs
diff --git a/doc/builders/packages/index.xml b/doc/builders/packages/index.xml
index e1e2fef3f16a..9653bae472d4 100644
--- a/doc/builders/packages/index.xml
+++ b/doc/builders/packages/index.xml
@@ -12,6 +12,7 @@
+
diff --git a/pkgs/development/python-modules/llfuse/default.nix b/pkgs/development/python-modules/llfuse/default.nix
index 4e68beba532b..e74263cdb77e 100644
--- a/pkgs/development/python-modules/llfuse/default.nix
+++ b/pkgs/development/python-modules/llfuse/default.nix
@@ -1,5 +1,5 @@
{ lib, stdenv, fetchPypi, fetchpatch, buildPythonPackage, pkg-config, pytest, fuse, attr, which
-, contextlib2, macfuse-stubs, DiskArbitration
+, contextlib2
}:
buildPythonPackage rec {
@@ -21,9 +21,7 @@ buildPythonPackage rec {
nativeBuildInputs = [ pkg-config ];
- buildInputs =
- lib.optionals stdenv.isLinux [ fuse ]
- ++ lib.optionals stdenv.isDarwin [ DiskArbitration macfuse-stubs ];
+ buildInputs = [ fuse ];
checkInputs = [ pytest which ] ++
lib.optionals stdenv.isLinux [ attr ];
diff --git a/pkgs/os-specific/darwin/macfuse/default.nix b/pkgs/os-specific/darwin/macfuse/default.nix
index a5162b3aed27..7e1b4ed7763c 100644
--- a/pkgs/os-specific/darwin/macfuse/default.nix
+++ b/pkgs/os-specific/darwin/macfuse/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, cpio, xar, undmg, libtapi }:
+{ lib, stdenv, fetchurl, cpio, xar, undmg, libtapi, DiskArbitration }:
stdenv.mkDerivation rec {
pname = "macfuse-stubs";
@@ -10,6 +10,7 @@ stdenv.mkDerivation rec {
};
nativeBuildInputs = [ cpio xar undmg libtapi ];
+ propagatedBuildInputs = [ DiskArbitration ];
postUnpack = ''
xar -xf 'Install macFUSE.pkg'
@@ -40,6 +41,11 @@ stdenv.mkDerivation rec {
meta = with lib; {
homepage = "https://osxfuse.github.io";
description = "Build time stubs for FUSE on macOS";
+ longDescription = ''
+ macFUSE is required for this package to work on macOS. To install macFUSE,
+ use the installer from the
+ project website.
+ '';
platforms = platforms.darwin;
maintainers = with maintainers; [ midchildan ];
diff --git a/pkgs/tools/filesystems/bindfs/default.nix b/pkgs/tools/filesystems/bindfs/default.nix
index a6d2382a1a66..12052100db32 100644
--- a/pkgs/tools/filesystems/bindfs/default.nix
+++ b/pkgs/tools/filesystems/bindfs/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, fuse, pkg-config, macfuse-stubs }:
+{ lib, stdenv, fetchurl, fuse, pkg-config }:
stdenv.mkDerivation rec {
version = "1.15.1";
@@ -10,9 +10,7 @@ stdenv.mkDerivation rec {
};
nativeBuildInputs = [ pkg-config ];
- buildInputs = if stdenv.isDarwin
- then [ macfuse-stubs ]
- else [ fuse ];
+ buildInputs = [ fuse ];
postFixup = ''
ln -s $out/bin/bindfs $out/bin/mount.fuse.bindfs
'';
diff --git a/pkgs/tools/filesystems/s3fs/default.nix b/pkgs/tools/filesystems/s3fs/default.nix
index 63a6153e8ca6..95b5b6ab34aa 100644
--- a/pkgs/tools/filesystems/s3fs/default.nix
+++ b/pkgs/tools/filesystems/s3fs/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, curl, openssl, libxml2, fuse, macfuse-stubs }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, curl, openssl, libxml2, fuse }:
stdenv.mkDerivation rec {
pname = "s3fs-fuse";
@@ -11,9 +11,7 @@ stdenv.mkDerivation rec {
sha256 = "sha256-Agb0tq7B98Ioe0G/XEZCYcFQKnMuYXX9x0yg4Gvu3/k=";
};
- buildInputs = [ curl openssl libxml2 ]
- ++ lib.optionals stdenv.isLinux [ fuse ]
- ++ lib.optionals stdenv.isDarwin [ macfuse-stubs ];
+ buildInputs = [ curl openssl libxml2 fuse ];
nativeBuildInputs = [ autoreconfHook pkg-config ];
configureFlags = [
diff --git a/pkgs/tools/filesystems/unionfs-fuse/default.nix b/pkgs/tools/filesystems/unionfs-fuse/default.nix
index acfd3b1e9a0b..6a34657d3d17 100644
--- a/pkgs/tools/filesystems/unionfs-fuse/default.nix
+++ b/pkgs/tools/filesystems/unionfs-fuse/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchFromGitHub, cmake, fuse, macfuse-stubs }:
+{ lib, stdenv, fetchFromGitHub, cmake, fuse }:
stdenv.mkDerivation rec {
pname = "unionfs-fuse";
@@ -21,11 +21,11 @@ stdenv.mkDerivation rec {
postPatch = lib.optionalString stdenv.isDarwin ''
substituteInPlace CMakeLists.txt \
- --replace '/usr/local/include/osxfuse/fuse' '${macfuse-stubs}/include/fuse'
+ --replace '/usr/local/include/osxfuse/fuse' '${fuse}/include/fuse'
'';
nativeBuildInputs = [ cmake ];
- buildInputs = [ (if stdenv.isDarwin then macfuse-stubs else fuse) ];
+ buildInputs = [ fuse ];
# Put the unionfs mount helper in place as mount.unionfs-fuse. This makes it
# possible to do:
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index d0b90828b87d..d53d3750606e 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -19286,7 +19286,7 @@ in
fusePackages = dontRecurseIntoAttrs (callPackage ../os-specific/linux/fuse {
util-linux = util-linuxMinimal;
});
- fuse = lowPrio fusePackages.fuse_2;
+ fuse = lowPrio (if stdenv.isDarwin then macfuse-stubs else fusePackages.fuse_2);
fuse3 = fusePackages.fuse_3;
fuse-common = hiPrio fusePackages.fuse_3.common;
@@ -19425,6 +19425,7 @@ in
macfuse-stubs = callPackage ../os-specific/darwin/macfuse {
inherit (darwin) libtapi;
+ inherit (darwin.apple_sdk.frameworks) DiskArbitration;
};
osxsnarf = callPackage ../os-specific/darwin/osxsnarf { };
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 782c0e16326a..c723f37456f6 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -3974,7 +3974,6 @@ in {
llfuse = callPackage ../development/python-modules/llfuse {
inherit (pkgs) fuse;
- inherit (pkgs.darwin.apple_sdk.frameworks) DiskArbitration;
};
llvmlite = callPackage ../development/python-modules/llvmlite {