tree-wide: buildFHSUserEnv -> buildFHSEnv

Atemu f63a12f2 1baab4e1

Changed files
+114 -110
doc
builders
nixos
doc
manual
modules
services
computing
boinc
pkgs
applications
blockchains
sparrow
editors
android-studio
quartus-prime
vscode
graphics
unigine-superposition
misc
bottles
houdini
lutris
pdfstudio
sidequest
networking
cisco-packet-tracer
dropbox
expressvpn
pcloud
remote
vmware-horizon-client
science
electronics
bitscope
misc
foldingathome
video
davinci-resolve
lightworks
webtorrent_desktop
virtualization
vmware-workstation
build-support
appimage
build-fhsenv-bubblewrap
build-fhsenv-chroot
development
compilers
flutter
embedded
arduino
arduino-cli
arduino-core
platformio
interpreters
nextflow
python-modules
mlflow
tools
electron-fiddle
hover
unityhub
games
anki
clonehero
heroic
left4gore
runescape-launcher
shticker-book-unwritten
steam
unvanquished
servers
onlyoffice-documentserver
plex
tools
networking
burpsuite
package-management
appimage-run
conda
security
beyond-identity
top-level
+3 -3
doc/builders/special/fhs-environments.section.md
···
-
# buildFHSUserEnv {#sec-fhs-environments}
-
`buildFHSUserEnv` provides a way to build and run FHS-compatible lightweight sandboxes. It creates an isolated root with bound `/nix/store`, so its footprint in terms of disk space needed is quite small. This allows one to run software which is hard or unfeasible to patch for NixOS -- 3rd-party source trees with FHS assumptions, games distributed as tarballs, software with integrity checking and/or external self-updated binaries. It uses Linux namespaces feature to create temporary lightweight environments which are destroyed after all child processes exit, without root user rights requirement. Accepted arguments are:
- `name`
Environment name.
···
```nix
{ pkgs ? import <nixpkgs> {} }:
-
(pkgs.buildFHSUserEnv {
name = "simple-x11-env";
targetPkgs = pkgs: (with pkgs;
[ udev
···
+
# buildFHSEnv {#sec-fhs-environments}
+
`buildFHSEnv` provides a way to build and run FHS-compatible lightweight sandboxes. It creates an isolated root with bound `/nix/store`, so its footprint in terms of disk space needed is quite small. This allows one to run software which is hard or unfeasible to patch for NixOS -- 3rd-party source trees with FHS assumptions, games distributed as tarballs, software with integrity checking and/or external self-updated binaries. It uses Linux namespaces feature to create temporary lightweight environments which are destroyed after all child processes exit, without root user rights requirement. Accepted arguments are:
- `name`
Environment name.
···
```nix
{ pkgs ? import <nixpkgs> {} }:
+
(pkgs.buildFHSEnv {
name = "simple-x11-env";
targetPkgs = pkgs: (with pkgs;
[ udev
+1 -1
nixos/doc/manual/configuration/adding-custom-packages.section.md
···
Then instead of running the AppImage "as-is", run `appimage-run foo.appimage`.
To make other pre-built executables work on NixOS, you need to package them
-
with Nix and special helpers like `autoPatchelfHook` or `buildFHSUserEnv`. See
the [Nixpkgs manual](https://nixos.org/nixpkgs/manual) for details. This
is complex and often doing a source build is easier.
···
Then instead of running the AppImage "as-is", run `appimage-run foo.appimage`.
To make other pre-built executables work on NixOS, you need to package them
+
with Nix and special helpers like `autoPatchelfHook` or `buildFHSEnv`. See
the [Nixpkgs manual](https://nixos.org/nixpkgs/manual) for details. This
is complex and often doing a source build is easier.
+1 -1
nixos/modules/services/computing/boinc/client.nix
···
cfg = config.services.boinc;
allowRemoteGuiRpcFlag = optionalString cfg.allowRemoteGuiRpc "--allow_remote_gui_rpc";
-
fhsEnv = pkgs.buildFHSUserEnv {
name = "boinc-fhs-env";
targetPkgs = pkgs': [ cfg.package ] ++ cfg.extraEnvPackages;
runScript = "/bin/boinc_client";
···
cfg = config.services.boinc;
allowRemoteGuiRpcFlag = optionalString cfg.allowRemoteGuiRpc "--allow_remote_gui_rpc";
+
fhsEnv = pkgs.buildFHSEnv {
name = "boinc-fhs-env";
targetPkgs = pkgs': [ cfg.package ] ++ cfg.extraEnvPackages;
runScript = "/bin/boinc_client";
+2 -2
pkgs/applications/blockchains/sparrow/fhsenv.nix
···
{ lib
-
, buildFHSUserEnv
, sparrow-unwrapped
}:
-
buildFHSUserEnv {
name = "sparrow";
runScript = "${sparrow-unwrapped}/bin/sparrow";
···
{ lib
+
, buildFHSEnv
, sparrow-unwrapped
}:
+
buildFHSEnv {
name = "sparrow";
runScript = "${sparrow-unwrapped}/bin/sparrow";
+2 -2
pkgs/applications/editors/android-studio/common.nix
···
{ alsa-lib
, bash
-
, buildFHSUserEnv
, cacert
, coreutils
, dbus
···
# Android Studio downloads prebuilt binaries as part of the SDK. These tools
# (e.g. `mksdcard`) have `/lib/ld-linux.so.2` set as the interpreter. An FHS
# environment is used as a work around for that.
-
fhsEnv = buildFHSUserEnv {
name = "${drvName}-fhs-env";
multiPkgs = pkgs: [
ncurses5
···
{ alsa-lib
, bash
+
, buildFHSEnv
, cacert
, coreutils
, dbus
···
# Android Studio downloads prebuilt binaries as part of the SDK. These tools
# (e.g. `mksdcard`) have `/lib/ld-linux.so.2` set as the interpreter. An FHS
# environment is used as a work around for that.
+
fhsEnv = buildFHSEnv {
name = "${drvName}-fhs-env";
multiPkgs = pkgs: [
ncurses5
+2 -2
pkgs/applications/editors/android-studio/default.nix
···
-
{ callPackage, makeFontsConf, gnome2, buildFHSUserEnv, tiling_wm ? false }:
let
mkStudio = opts: callPackage (import ./common.nix opts) {
···
fontDirectories = [];
};
inherit (gnome2) GConf gnome_vfs;
-
inherit buildFHSUserEnv;
inherit tiling_wm;
};
stableVersion = {
···
+
{ callPackage, makeFontsConf, gnome2, buildFHSEnv, tiling_wm ? false }:
let
mkStudio = opts: callPackage (import ./common.nix opts) {
···
fontDirectories = [];
};
inherit (gnome2) GConf gnome_vfs;
+
inherit buildFHSEnv;
inherit tiling_wm;
};
stableVersion = {
+2 -2
pkgs/applications/editors/quartus-prime/default.nix
···
-
{ stdenv, lib, buildFHSUserEnv, callPackage, makeDesktopItem, writeScript
, supportedDevices ? [ "Arria II" "Cyclone V" "Cyclone IV" "Cyclone 10 LP" "MAX II/V" "MAX 10 FPGA" ]
, unwrapped ? callPackage ./quartus.nix { inherit supportedDevices; }
}:
···
categories = [ "Development" ];
};
# I think modelsim_ase/linux/vlm checksums itself, so use FHSUserEnv instead of `patchelf`
-
in buildFHSUserEnv rec {
name = "quartus-prime-lite"; # wrapped
targetPkgs = pkgs: with pkgs; [
···
+
{ stdenv, lib, buildFHSEnv, callPackage, makeDesktopItem, writeScript
, supportedDevices ? [ "Arria II" "Cyclone V" "Cyclone IV" "Cyclone 10 LP" "MAX II/V" "MAX 10 FPGA" ]
, unwrapped ? callPackage ./quartus.nix { inherit supportedDevices; }
}:
···
categories = [ "Development" ];
};
# I think modelsim_ase/linux/vlm checksums itself, so use FHSUserEnv instead of `patchelf`
+
in buildFHSEnv rec {
name = "quartus-prime-lite"; # wrapped
targetPkgs = pkgs: with pkgs; [
+3 -3
pkgs/applications/editors/vscode/generic.nix
···
{ stdenv, lib, makeDesktopItem
, unzip, libsecret, libXScrnSaver, libxshmfence, buildPackages
, atomEnv, at-spi2-atk, autoPatchelfHook
-
, systemd, fontconfig, libdbusmenu, glib, buildFHSUserEnvBubblewrap, wayland
# Populate passthru.tests
, tests
···
# in order to create or update extensions.
# See: #83288 #91179 #73810 #41189
#
-
# buildFHSUserEnv allows for users to use the existing vscode
# extension tooling without significant pain.
-
fhs = { additionalPkgs ? pkgs: [] }: buildFHSUserEnvBubblewrap {
# also determines the name of the wrapped command
name = executableName;
···
{ stdenv, lib, makeDesktopItem
, unzip, libsecret, libXScrnSaver, libxshmfence, buildPackages
, atomEnv, at-spi2-atk, autoPatchelfHook
+
, systemd, fontconfig, libdbusmenu, glib, buildFHSEnvBubblewrap, wayland
# Populate passthru.tests
, tests
···
# in order to create or update extensions.
# See: #83288 #91179 #73810 #41189
#
+
# buildFHSEnv allows for users to use the existing vscode
# extension tooling without significant pain.
+
fhs = { additionalPkgs ? pkgs: [] }: buildFHSEnvBubblewrap {
# also determines the name of the wrapped command
name = executableName;
+3 -3
pkgs/applications/graphics/unigine-superposition/default.nix
···
, mkDerivation
, xkeyboard_config
, fetchurl
-
, buildFHSUserEnv
, openal
, makeDesktopItem
}:
···
in
# We can patch the "/bin/superposition", but "/bin/launcher" checks it for changes.
-
# For that we need use a buildFHSUserEnv.
-
buildFHSUserEnv {
name = "Superposition";
targetPkgs = pkgs: [
···
, mkDerivation
, xkeyboard_config
, fetchurl
+
, buildFHSEnv
, openal
, makeDesktopItem
}:
···
in
# We can patch the "/bin/superposition", but "/bin/launcher" checks it for changes.
+
# For that we need use a buildFHSEnv.
+
buildFHSEnv {
name = "Superposition";
targetPkgs = pkgs: [
+3 -3
pkgs/applications/misc/bottles/fhsenv.nix
···
{ lib
-
, buildFHSUserEnvBubblewrap
, symlinkJoin
, bottles-unwrapped
, gst_all_1
···
symlinkJoin {
name = "bottles";
paths = [
-
(buildFHSUserEnvBubblewrap (fhsEnv // { name = "bottles"; runScript = "bottles"; }))
-
(buildFHSUserEnvBubblewrap (fhsEnv // { name = "bottles-cli"; runScript = "bottles-cli"; }))
];
postBuild = ''
mkdir -p $out/share
···
{ lib
+
, buildFHSEnvBubblewrap
, symlinkJoin
, bottles-unwrapped
, gst_all_1
···
symlinkJoin {
name = "bottles";
paths = [
+
(buildFHSEnvBubblewrap (fhsEnv // { name = "bottles"; runScript = "bottles"; }))
+
(buildFHSEnvBubblewrap (fhsEnv // { name = "bottles-cli"; runScript = "bottles-cli"; }))
];
postBuild = ''
mkdir -p $out/share
+2 -2
pkgs/applications/misc/houdini/default.nix
···
-
{ lib, stdenv, writeScript, callPackage, buildFHSUserEnv, unwrapped ? callPackage ./runtime.nix {} }:
-
buildFHSUserEnv rec {
name = "houdini-${unwrapped.version}";
targetPkgs = pkgs: with pkgs; [
···
+
{ lib, stdenv, writeScript, callPackage, buildFHSEnv, unwrapped ? callPackage ./runtime.nix {} }:
+
buildFHSEnv rec {
name = "houdini-${unwrapped.version}";
targetPkgs = pkgs: with pkgs; [
+2 -2
pkgs/applications/misc/lutris/fhsenv.nix
···
-
{ lib, buildFHSUserEnv, lutris-unwrapped
, extraPkgs ? pkgs: [ ]
, extraLibraries ? pkgs: [ ]
, steamSupport ? true
···
libXxf86vm libXinerama libSM libXv libXaw libXi libXcursor libXcomposite
];
-
in buildFHSUserEnv {
name = "lutris";
runScript = "lutris";
···
+
{ lib, buildFHSEnv, lutris-unwrapped
, extraPkgs ? pkgs: [ ]
, extraLibraries ? pkgs: [ ]
, steamSupport ? true
···
libXxf86vm libXinerama libSM libXv libXaw libXi libXcursor libXcomposite
];
+
in buildFHSEnv {
name = "lutris";
runScript = "lutris";
+2 -2
pkgs/applications/misc/pdfstudio/common.nix
···
, version
, desktopName
, longDescription
-
, buildFHSUserEnv
, extraBuildInputs ? [ ]
, jdk
, stdenv
···
in
# Package with cups in FHS sandbox, because JAVA bin expects "/usr/bin/lpr" for printing.
-
buildFHSUserEnv {
name = pname;
targetPkgs = pkgs: [
cups
···
, version
, desktopName
, longDescription
+
, buildFHSEnv
, extraBuildInputs ? [ ]
, jdk
, stdenv
···
in
# Package with cups in FHS sandbox, because JAVA bin expects "/usr/bin/lpr" for printing.
+
buildFHSEnv {
name = pname;
targetPkgs = pkgs: [
cups
+2 -2
pkgs/applications/misc/sidequest/default.nix
···
-
{ stdenv, lib, fetchurl, buildFHSUserEnv, makeDesktopItem, makeWrapper, atomEnv, libuuid, at-spi2-atk, icu, openssl, zlib }:
let
pname = "sidequest";
version = "0.10.24";
···
"$out/lib/SideQuest/sidequest"
'';
};
-
in buildFHSUserEnv {
name = "SideQuest";
passthru = {
···
+
{ stdenv, lib, fetchurl, buildFHSEnv, makeDesktopItem, makeWrapper, atomEnv, libuuid, at-spi2-atk, icu, openssl, zlib }:
let
pname = "sidequest";
version = "0.10.24";
···
"$out/lib/SideQuest/sidequest"
'';
};
+
in buildFHSEnv {
name = "SideQuest";
passthru = {
+2 -2
pkgs/applications/networking/cisco-packet-tracer/7.nix
···
{ stdenv
, lib
-
, buildFHSUserEnvBubblewrap
, copyDesktopItems
, dpkg
, lndir
···
mimeTypes = [ "application/x-pkt" "application/x-pka" "application/x-pkz" ];
};
-
fhs = buildFHSUserEnvBubblewrap {
name = "packettracer7";
runScript = "${ptFiles}/bin/packettracer7";
···
{ stdenv
, lib
+
, buildFHSEnvBubblewrap
, copyDesktopItems
, dpkg
, lndir
···
mimeTypes = [ "application/x-pkt" "application/x-pka" "application/x-pkz" ];
};
+
fhs = buildFHSEnvBubblewrap {
name = "packettracer7";
runScript = "${ptFiles}/bin/packettracer7";
+2 -2
pkgs/applications/networking/cisco-packet-tracer/8.nix
···
, lib
, alsa-lib
, autoPatchelfHook
-
, buildFHSUserEnvBubblewrap
, copyDesktopItems
, dbus
, dpkg
···
mimeTypes = [ "application/x-pkt" "application/x-pka" "application/x-pkz" ];
};
-
fhs = buildFHSUserEnvBubblewrap {
name = "packettracer8";
runScript = "${ptFiles}/bin/packettracer";
targetPkgs = pkgs: [ libudev0-shim ];
···
, lib
, alsa-lib
, autoPatchelfHook
+
, buildFHSEnvBubblewrap
, copyDesktopItems
, dbus
, dpkg
···
mimeTypes = [ "application/x-pkt" "application/x-pka" "application/x-pkz" ];
};
+
fhs = buildFHSEnvBubblewrap {
name = "packettracer8";
runScript = "${ptFiles}/bin/packettracer";
targetPkgs = pkgs: [ libudev0-shim ];
+2 -2
pkgs/applications/networking/dropbox/default.nix
···
-
{ stdenv, lib, buildFHSUserEnv, writeScript, makeDesktopItem }:
let platforms = [ "i686-linux" "x86_64-linux" ]; in
···
};
in
-
buildFHSUserEnv {
name = "dropbox";
targetPkgs = pkgs: with pkgs; with xorg; [
···
+
{ stdenv, lib, buildFHSEnv, writeScript, makeDesktopItem }:
let platforms = [ "i686-linux" "x86_64-linux" ]; in
···
};
in
+
buildFHSEnv {
name = "dropbox";
targetPkgs = pkgs: with pkgs; with xorg; [
+2 -2
pkgs/applications/networking/expressvpn/default.nix
···
{ autoPatchelfHook
-
, buildFHSUserEnv
, dpkg
, fetchurl
, inotify-tools
···
'';
};
-
expressvpndFHS = buildFHSUserEnv {
name = "expressvpnd";
# When connected, it directly creates/deletes resolv.conf to change the DNS entries.
···
{ autoPatchelfHook
+
, buildFHSEnv
, dpkg
, fetchurl
, inotify-tools
···
'';
};
+
expressvpndFHS = buildFHSEnv {
name = "expressvpnd";
# When connected, it directly creates/deletes resolv.conf to change the DNS entries.
+1 -1
pkgs/applications/networking/pcloud/default.nix
···
# of applications.
#
# What Nix does, simplifying a bit, is that it extracts an AppImage and starts
-
# it via buildFHSUserEnv - this is totally fine for majority of apps, but makes
# it by-design *impossible* to launch SUID wrappers [^1]; in case of pCloud,
# it's fusermount.
# (so pCloud starts, but silently fails to mount the FUSE drive.)
···
# of applications.
#
# What Nix does, simplifying a bit, is that it extracts an AppImage and starts
+
# it via buildFHSEnv - this is totally fine for majority of apps, but makes
# it by-design *impossible* to launch SUID wrappers [^1]; in case of pCloud,
# it's fusermount.
# (so pCloud starts, but silently fails to mount the FUSE drive.)
+2 -2
pkgs/applications/networking/remote/vmware-horizon-client/default.nix
···
{ stdenv
, lib
-
, buildFHSUserEnv
, fetchurl
, gsettings-desktop-schemas
, makeDesktopItem
···
'';
};
-
vmwareFHSUserEnv = name: buildFHSUserEnv {
inherit name;
runScript = "${vmwareHorizonClientFiles}/bin/${name}_wrapper";
···
{ stdenv
, lib
+
, buildFHSEnv
, fetchurl
, gsettings-desktop-schemas
, makeDesktopItem
···
'';
};
+
vmwareFHSUserEnv = name: buildFHSEnv {
inherit name;
runScript = "${vmwareHorizonClientFiles}/bin/${name}_wrapper";
+2 -2
pkgs/applications/science/electronics/bitscope/common.nix
···
{ atk
-
, buildFHSUserEnv
, cairo
, dpkg
, gdk-pixbuf
···
${(wrapBinary libs) attrs.toolName}
'';
});
-
in buildFHSUserEnv {
name = "${attrs.toolName}-${attrs.version}";
runScript = "${pkg.outPath}/bin/${attrs.toolName}";
} // { inherit (pkg) meta name; }
···
{ atk
+
, buildFHSEnv
, cairo
, dpkg
, gdk-pixbuf
···
${(wrapBinary libs) attrs.toolName}
'';
});
+
in buildFHSEnv {
name = "${attrs.toolName}-${attrs.version}";
runScript = "${pkg.outPath}/bin/${attrs.toolName}";
} // { inherit (pkg) meta name; }
+2 -2
pkgs/applications/science/misc/foldingathome/client.nix
···
{ lib, stdenv
, autoPatchelfHook
-
, buildFHSUserEnv
, dpkg
, fetchurl
, gcc-unwrapped
···
installPhase = "cp -ar usr $out";
};
in
-
buildFHSUserEnv {
name = fahclient.name;
targetPkgs = pkgs': [
···
{ lib, stdenv
, autoPatchelfHook
+
, buildFHSEnv
, dpkg
, fetchurl
, gcc-unwrapped
···
installPhase = "cp -ar usr $out";
};
in
+
buildFHSEnv {
name = fahclient.name;
targetPkgs = pkgs': [
+2 -2
pkgs/applications/video/davinci-resolve/default.nix
···
, addOpenGLRunpath
, libGLU
, xorg
-
, buildFHSUserEnv
, bash
, writeText
, ocl-icd
···
}
);
in
-
buildFHSUserEnv {
name = "davinci-resolve";
targetPkgs = pkgs: with pkgs; [
librsvg
···
, addOpenGLRunpath
, libGLU
, xorg
+
, buildFHSEnv
, bash
, writeText
, ocl-icd
···
}
);
in
+
buildFHSEnv {
name = "davinci-resolve";
targetPkgs = pkgs: with pkgs; [
librsvg
+2 -2
pkgs/applications/video/lightworks/default.nix
···
-
{ lib, stdenv, fetchurl, dpkg, makeWrapper, buildFHSUserEnv
, gtk3, gdk-pixbuf, cairo, libjpeg_original, glib, pango, libGLU
, libGL, nvidia_cg_toolkit, zlib, openssl, libuuid , alsa-lib, udev, libjack2
}:
···
};
# Lightworks expects some files in /usr/share/lightworks
-
in buildFHSUserEnv {
name = lightworks.name;
targetPkgs = pkgs: [
···
+
{ lib, stdenv, fetchurl, dpkg, makeWrapper, buildFHSEnv
, gtk3, gdk-pixbuf, cairo, libjpeg_original, glib, pango, libGLU
, libGL, nvidia_cg_toolkit, zlib, openssl, libuuid , alsa-lib, udev, libjack2
}:
···
};
# Lightworks expects some files in /usr/share/lightworks
+
in buildFHSEnv {
name = lightworks.name;
targetPkgs = pkgs: [
+2 -2
pkgs/applications/video/webtorrent_desktop/default.nix
···
## - export ELECTRON_SKIP_BINARY_DOWNLOAD=1
## - jq "del(.scripts.preinstall)" node_modules/shellcheck/package.json | sponge node_modules/shellcheck/package.json
{
-
lib, stdenv, buildFHSUserEnvBubblewrap, runCommand, writeScript, fetchurl, fetchzip
}:
let
pname = "webtorrent-desktop";
···
else
throw "Webtorrent is not currently supported on ${stdenv.hostPlatform.system}";
-
fhs = buildFHSUserEnvBubblewrap rec {
name = "fhsEnterWebTorrent";
runScript = "${src}/WebTorrent";
## use the trampoline, if you need to shell into the fhsenv
···
## - export ELECTRON_SKIP_BINARY_DOWNLOAD=1
## - jq "del(.scripts.preinstall)" node_modules/shellcheck/package.json | sponge node_modules/shellcheck/package.json
{
+
lib, stdenv, buildFHSEnvBubblewrap, runCommand, writeScript, fetchurl, fetchzip
}:
let
pname = "webtorrent-desktop";
···
else
throw "Webtorrent is not currently supported on ${stdenv.hostPlatform.system}";
+
fhs = buildFHSEnvBubblewrap rec {
name = "fhsEnterWebTorrent";
runScript = "${src}/WebTorrent";
## use the trampoline, if you need to shell into the fhsenv
+2 -2
pkgs/applications/virtualization/vmware-workstation/default.nix
···
{ stdenv
-
, buildFHSUserEnv
, fetchurl
, lib
, zlib
···
'';
});
-
vmware-unpack-env = buildFHSUserEnv rec {
name = "vmware-unpack-env";
targetPkgs = pkgs: [ zlib ];
};
···
{ stdenv
+
, buildFHSEnv
, fetchurl
, lib
, zlib
···
'';
});
+
vmware-unpack-env = buildFHSEnv rec {
name = "vmware-unpack-env";
targetPkgs = pkgs: [ zlib ];
};
+2 -2
pkgs/build-support/appimage/default.nix
···
, libarchive
, pv
, squashfsTools
-
, buildFHSUserEnv
, pkgs
}:
···
extraPkgs,
meta ? {},
...
-
}: buildFHSUserEnv
(defaultFhsEnvArgs // {
inherit name;
···
, libarchive
, pv
, squashfsTools
+
, buildFHSEnv
, pkgs
}:
···
extraPkgs,
meta ? {},
...
+
}: buildFHSEnv
(defaultFhsEnvArgs // {
inherit name;
pkgs/build-support/build-fhs-userenv-bubblewrap/buildFHSEnv.nix pkgs/build-support/build-fhsenv-bubblewrap/buildFHSEnv.nix
pkgs/build-support/build-fhs-userenv-bubblewrap/default.nix pkgs/build-support/build-fhsenv-bubblewrap/default.nix
pkgs/build-support/build-fhs-userenv/chrootenv/default.nix pkgs/build-support/build-fhsenv-chroot/chrootenv/default.nix
pkgs/build-support/build-fhs-userenv/chrootenv/src/chrootenv.c pkgs/build-support/build-fhsenv-chroot/chrootenv/src/chrootenv.c
pkgs/build-support/build-fhs-userenv/chrootenv/src/meson.build pkgs/build-support/build-fhsenv-chroot/chrootenv/src/meson.build
pkgs/build-support/build-fhs-userenv/default.nix pkgs/build-support/build-fhsenv-chroot/default.nix
pkgs/build-support/build-fhs-userenv/env.nix pkgs/build-support/build-fhsenv-chroot/env.nix
+2 -2
pkgs/development/compilers/flutter/flutter.nix
···
}:
{ bash
-
, buildFHSUserEnv
, cacert
, git
, runCommand
···
# Wrap flutter inside an fhs user env to allow execution of binary,
# like adb from $ANDROID_HOME or java from android-studio.
-
fhsEnv = buildFHSUserEnv {
name = "${drvName}-fhs-env";
multiPkgs = pkgs: [
# Flutter only use these certificates
···
}:
{ bash
+
, buildFHSEnv
, cacert
, git
, runCommand
···
# Wrap flutter inside an fhs user env to allow execution of binary,
# like adb from $ANDROID_HOME or java from android-studio.
+
fhsEnv = buildFHSEnv {
name = "${drvName}-fhs-env";
multiPkgs = pkgs: [
# Flutter only use these certificates
+3 -3
pkgs/development/embedded/arduino/arduino-cli/default.nix
···
-
{ lib, stdenv, buildGoModule, fetchFromGitHub, buildFHSUserEnv, installShellFiles }:
let
···
in
if stdenv.isLinux then
-
# buildFHSUserEnv is needed because the arduino-cli downloads compiler
# toolchains from the internet that have their interpreters pointed at
# /lib64/ld-linux-x86-64.so.2
-
buildFHSUserEnv
{
inherit (pkg) name meta;
···
+
{ lib, stdenv, buildGoModule, fetchFromGitHub, buildFHSEnv, installShellFiles }:
let
···
in
if stdenv.isLinux then
+
# buildFHSEnv is needed because the arduino-cli downloads compiler
# toolchains from the internet that have their interpreters pointed at
# /lib64/ld-linux-x86-64.so.2
+
buildFHSEnv
{
inherit (pkg) name meta;
+2 -2
pkgs/development/embedded/arduino/arduino-core/chrootenv.nix
···
-
{ lib, buildFHSUserEnv, arduino-core-unwrapped, withGui ? false, withTeensyduino ? false }:
let
arduino-unwrapped = arduino-core-unwrapped.override { inherit withGui withTeensyduino; };
in
-
buildFHSUserEnv {
name = "arduino";
targetPkgs =
···
+
{ lib, buildFHSEnv, arduino-core-unwrapped, withGui ? false, withTeensyduino ? false }:
let
arduino-unwrapped = arduino-core-unwrapped.override { inherit withGui withTeensyduino; };
in
+
buildFHSEnv {
name = "arduino";
targetPkgs =
+2 -2
pkgs/development/embedded/platformio/chrootenv.nix
···
-
{ lib, buildFHSUserEnv, platformio-core }:
let
pio-pkgs = pkgs:
···
]);
in
-
buildFHSUserEnv {
name = "platformio";
targetPkgs = pio-pkgs;
···
+
{ lib, buildFHSEnv, platformio-core }:
let
pio-pkgs = pkgs:
···
]);
in
+
buildFHSEnv {
name = "platformio";
targetPkgs = pio-pkgs;
+2 -2
pkgs/development/interpreters/nextflow/default.nix
···
, gnused
, gawk
, coreutils
-
, buildFHSUserEnv
}:
let
···
};
in
if stdenv.isLinux then
-
buildFHSUserEnv
{
name = "nextflow";
targetPkgs = pkgs: [ nextflow ];
···
, gnused
, gawk
, coreutils
+
, buildFHSEnv
}:
let
···
};
in
if stdenv.isLinux then
+
buildFHSEnv
{
name = "nextflow";
targetPkgs = pkgs: [ nextflow ];
+1 -1
pkgs/development/python-modules/mlflow/default.nix
···
# no tests in PyPI dist
# run into https://stackoverflow.com/questions/51203641/attributeerror-module-alembic-context-has-no-attribute-config
-
# also, tests use conda so can't run on NixOS without buildFHSUserEnv
doCheck = false;
meta = with lib; {
···
# no tests in PyPI dist
# run into https://stackoverflow.com/questions/51203641/attributeerror-module-alembic-context-has-no-attribute-config
+
# also, tests use conda so can't run on NixOS without buildFHSEnv
doCheck = false;
meta = with lib; {
+2 -2
pkgs/development/tools/electron-fiddle/default.nix
···
-
{ buildFHSUserEnv
, electron_22
, fetchFromGitHub
, fetchYarnDeps
···
};
in
-
buildFHSUserEnv {
name = "electron-fiddle";
runScript = "${electron}/bin/electron ${unwrapped}/lib/electron-fiddle/resources/app.asar";
···
+
{ buildFHSEnv
, electron_22
, fetchFromGitHub
, fetchYarnDeps
···
};
in
+
buildFHSEnv {
name = "electron-fiddle";
runScript = "${electron}/bin/electron ${unwrapped}/lib/electron-fiddle/resources/app.asar";
+2 -2
pkgs/development/tools/hover/default.nix
···
{ lib
, buildGoModule
-
, buildFHSUserEnv
, binutils
, dejavu_fonts
, pkg-config
···
};
in
-
buildFHSUserEnv rec {
name = pname;
targetPkgs = pkgs: [
binutils
···
{ lib
, buildGoModule
+
, buildFHSEnv
, binutils
, dejavu_fonts
, pkg-config
···
};
in
+
buildFHSEnv rec {
name = pname;
targetPkgs = pkgs: [
binutils
+2 -2
pkgs/development/tools/unityhub/default.nix
···
-
{ lib, stdenv, fetchurl, dpkg, makeWrapper, buildFHSUserEnv
, extraPkgs ? pkgs: [ ]
, extraLibs ? pkgs: [ ]
}:
···
makeWrapper
];
-
fhsEnv = buildFHSUserEnv {
name = "${pname}-fhs-env";
runScript = "";
···
+
{ lib, stdenv, fetchurl, dpkg, makeWrapper, buildFHSEnv
, extraPkgs ? pkgs: [ ]
, extraLibs ? pkgs: [ ]
}:
···
makeWrapper
];
+
fhsEnv = buildFHSEnv {
name = "${pname}-fhs-env";
runScript = "";
+3 -3
pkgs/games/anki/bin.nix
···
-
{ fetchurl, stdenv, lib, buildFHSUserEnv, appimageTools, writeShellScript, anki, undmg, zstd, commandLineArgs ? [] }:
let
pname = "anki-bin";
···
passthru = { inherit sources; };
-
fhsUserEnvAnki = buildFHSUserEnv (appimageTools.defaultFhsEnvArgs // {
inherit pname version;
name = null; # Appimage sets it to "appimage-env"
···
});
in
-
if stdenv.isLinux then fhsUserEnvAnki
else stdenv.mkDerivation {
inherit pname version passthru;
···
+
{ fetchurl, stdenv, lib, buildFHSEnv, appimageTools, writeShellScript, anki, undmg, zstd, commandLineArgs ? [] }:
let
pname = "anki-bin";
···
passthru = { inherit sources; };
+
fhsEnvAnki = buildFHSEnv (appimageTools.defaultFhsEnvArgs // {
inherit pname version;
name = null; # Appimage sets it to "appimage-env"
···
});
in
+
if stdenv.isLinux then fhsEnvAnki
else stdenv.mkDerivation {
inherit pname version passthru;
+2 -2
pkgs/games/clonehero/fhs-wrapper.nix
···
{ clonehero-unwrapped
, makeDesktopItem
-
, buildFHSUserEnv
, liberation_ttf
, callPackage
}:
···
categories = [ "Game" ];
};
in
-
buildFHSUserEnv {
inherit name;
inherit (clonehero-unwrapped) meta;
···
{ clonehero-unwrapped
, makeDesktopItem
+
, buildFHSEnv
, liberation_ttf
, callPackage
}:
···
categories = [ "Game" ];
};
in
+
buildFHSEnv {
inherit name;
inherit (clonehero-unwrapped) meta;
+2 -2
pkgs/games/heroic/fhsenv.nix
···
{ lib
-
, buildFHSUserEnv
, heroic-unwrapped
, extraPkgs ? pkgs: [ ]
, extraLibraries ? pkgs: [ ]
}:
-
buildFHSUserEnv {
name = "heroic";
runScript = "heroic";
···
{ lib
+
, buildFHSEnv
, heroic-unwrapped
, extraPkgs ? pkgs: [ ]
, extraLibraries ? pkgs: [ ]
}:
+
buildFHSEnv {
name = "heroic";
runScript = "heroic";
+2 -2
pkgs/games/left4gore/default.nix
···
-
{ stdenvNoCC, lib, fetchurl, buildFHSUserEnv }:
let
version = "2.3";
···
};
# FHS env, as patchelf will not work
-
env = buildFHSUserEnv {
name = "left4gore-env-${version}";
targetPkgs = _: [ left4gore-unwrapped ];
runScript = "left4gore";
···
+
{ stdenvNoCC, lib, fetchurl, buildFHSEnv }:
let
version = "2.3";
···
};
# FHS env, as patchelf will not work
+
env = buildFHSEnv {
name = "left4gore-env-${version}";
targetPkgs = _: [ left4gore-unwrapped ];
runScript = "left4gore";
+3 -3
pkgs/games/runescape-launcher/default.nix
···
{ stdenv
, lib
, autoPatchelfHook
-
, buildFHSUserEnv
, cairo
, dpkg
, fetchurl
···
/*
* We can patch the runescape launcher, but it downloads a client at runtime and checks it for changes.
-
* For that we need use a buildFHSUserEnv.
* FHS simulates a classic linux shell
*/
-
buildFHSUserEnv {
name = "RuneScape";
targetPkgs = pkgs: [
runescape
···
{ stdenv
, lib
, autoPatchelfHook
+
, buildFHSEnv
, cairo
, dpkg
, fetchurl
···
/*
* We can patch the runescape launcher, but it downloads a client at runtime and checks it for changes.
+
* For that we need use a buildFHSEnv.
* FHS simulates a classic linux shell
*/
+
buildFHSEnv {
name = "RuneScape";
targetPkgs = pkgs: [
runescape
+2 -2
pkgs/games/shticker-book-unwritten/default.nix
···
-
{ buildFHSUserEnv, callPackage, lib }:
let
shticker-book-unwritten-unwrapped = callPackage ./unwrapped.nix { };
-
in buildFHSUserEnv {
name = "shticker_book_unwritten";
targetPkgs = pkgs: with pkgs; [
alsa-lib
···
+
{ buildFHSEnv, callPackage, lib }:
let
shticker-book-unwritten-unwrapped = callPackage ./unwrapped.nix { };
+
in buildFHSEnv {
name = "shticker_book_unwritten";
targetPkgs = pkgs: with pkgs; [
alsa-lib
+2 -2
pkgs/games/steam/default.nix
···
{ makeScopeWithSplicing, generateSplicesForMkScope
-
, stdenv, buildFHSUserEnv, pkgsi686Linux
}:
let
···
if self.steamArch == "amd64"
then pkgsi686Linux.steamPackages.steam-runtime-wrapped
else null;
-
inherit buildFHSUserEnv;
};
steam-fhsenv-small = steam-fhsenv.override { withGameSpecificLibraries = false; };
steamcmd = callPackage ./steamcmd.nix { };
···
{ makeScopeWithSplicing, generateSplicesForMkScope
+
, stdenv, buildFHSEnv, pkgsi686Linux
}:
let
···
if self.steamArch == "amd64"
then pkgsi686Linux.steamPackages.steam-runtime-wrapped
else null;
+
inherit buildFHSEnv;
};
steam-fhsenv-small = steam-fhsenv.override { withGameSpecificLibraries = false; };
steamcmd = callPackage ./steamcmd.nix { };
+3 -3
pkgs/games/steam/fhsenv.nix
···
-
{ lib, stdenv, writeShellScript, buildFHSUserEnv, steam, glxinfo-i686
, steam-runtime-wrapped, steam-runtime-wrapped-i686 ? null
, extraPkgs ? pkgs: [ ] # extra packages to add to targetPkgs
, extraLibraries ? pkgs: [ ] # extra packages to add to multiPkgs
···
envScript = lib.toShellVars extraEnv;
-
in buildFHSUserEnv rec {
name = "steam";
targetPkgs = pkgs: with pkgs; [
···
# breaks the ability for application to reference shared memory.
unsharePid = false;
-
passthru.run = buildFHSUserEnv {
name = "steam-run";
targetPkgs = commonTargetPkgs;
···
+
{ lib, stdenv, writeShellScript, buildFHSEnv, steam, glxinfo-i686
, steam-runtime-wrapped, steam-runtime-wrapped-i686 ? null
, extraPkgs ? pkgs: [ ] # extra packages to add to targetPkgs
, extraLibraries ? pkgs: [ ] # extra packages to add to multiPkgs
···
envScript = lib.toShellVars extraEnv;
+
in buildFHSEnv rec {
name = "steam";
targetPkgs = pkgs: with pkgs; [
···
# breaks the ability for application to reference shared memory.
unsharePid = false;
+
passthru.run = buildFHSEnv {
name = "steam-run";
targetPkgs = commonTargetPkgs;
+2 -2
pkgs/games/unvanquished/default.nix
···
, fetchFromGitHub
, fetchpatch
, SDL2
-
, buildFHSUserEnv
, cmake
, copyDesktopItems
, curl
···
'';
};
-
fhsEnv = buildFHSUserEnv {
name = "unvanquished-fhs-wrapper";
targetPkgs = pkgs: [ libstdcpp-preload-for-unvanquished-nacl ];
···
, fetchFromGitHub
, fetchpatch
, SDL2
+
, buildFHSEnv
, cmake
, copyDesktopItems
, curl
···
'';
};
+
fhsEnv = buildFHSEnv {
name = "unvanquished-fhs-wrapper";
targetPkgs = pkgs: [ libstdcpp-preload-for-unvanquished-nacl ];
+2 -2
pkgs/servers/onlyoffice-documentserver/default.nix
···
{ lib
, stdenv
-
, buildFHSUserEnvBubblewrap
, corefonts
, dejavu_fonts
, dpkg
···
dontStrip = true;
passthru = {
-
fhs = buildFHSUserEnvBubblewrap {
name = "onlyoffice-wrapper";
targetPkgs = pkgs: [
···
{ lib
, stdenv
+
, buildFHSEnvBubblewrap
, corefonts
, dejavu_fonts
, dpkg
···
dontStrip = true;
passthru = {
+
fhs = buildFHSEnvBubblewrap {
name = "onlyoffice-wrapper";
targetPkgs = pkgs: [
+2 -2
pkgs/servers/plex/default.nix
···
# The actual Plex package that we run is a FHS userenv of the "raw" package.
{ stdenv
-
, buildFHSUserEnvBubblewrap
, writeScript
, plexRaw
···
, dataDir ? "/var/lib/plex"
}:
-
buildFHSUserEnvBubblewrap {
name = "plexmediaserver";
inherit (plexRaw) meta;
···
# The actual Plex package that we run is a FHS userenv of the "raw" package.
{ stdenv
+
, buildFHSEnvBubblewrap
, writeScript
, plexRaw
···
, dataDir ? "/var/lib/plex"
}:
+
buildFHSEnvBubblewrap {
name = "plexmediaserver";
inherit (plexRaw) meta;
+2 -2
pkgs/tools/networking/burpsuite/default.nix
···
-
{ lib, fetchurl, jdk, buildFHSUserEnv, unzip, makeDesktopItem }:
let
version = "2023.2.4";
···
};
in
-
buildFHSUserEnv {
inherit name;
runScript = "${jdk}/bin/java -jar ${src}";
···
+
{ lib, fetchurl, jdk, buildFHSEnv, unzip, makeDesktopItem }:
let
version = "2023.2.4";
···
};
in
+
buildFHSEnv {
inherit name;
runScript = "${jdk}/bin/java -jar ${src}";
+2 -2
pkgs/tools/package-management/appimage-run/default.nix
···
-
{ appimageTools, buildFHSUserEnv, makeDesktopItem, extraPkgs ? pkgs: [], appimage-run-tests ? null }:
let
name = "appimage-run";
···
mimeTypes = ["application/vnd.appimage" "application/x-iso9660-appimage"];
categories = ["PackageManager" "Utility"];
};
-
in buildFHSUserEnv (fhsArgs // {
inherit name;
targetPkgs = pkgs: [ appimageTools.appimage-exec ]
···
+
{ appimageTools, buildFHSEnv, makeDesktopItem, extraPkgs ? pkgs: [], appimage-run-tests ? null }:
let
name = "appimage-run";
···
mimeTypes = ["application/vnd.appimage" "application/x-iso9660-appimage"];
categories = ["PackageManager" "Utility"];
};
+
in buildFHSEnv (fhsArgs // {
inherit name;
targetPkgs = pkgs: [ appimageTools.appimage-exec ]
+2 -2
pkgs/tools/package-management/conda/default.nix
···
, fetchurl
, runCommand
, makeWrapper
-
, buildFHSUserEnv
, libselinux
, libarchive
, libGL
···
--prefix "LD_LIBRARY_PATH" : "${libPath}"
'');
in
-
buildFHSUserEnv {
name = "conda-shell";
targetPkgs = pkgs: (builtins.concatLists [ [ conda ] condaDeps extraPkgs]);
profile = ''
···
, fetchurl
, runCommand
, makeWrapper
+
, buildFHSEnv
, libselinux
, libarchive
, libGL
···
--prefix "LD_LIBRARY_PATH" : "${libPath}"
'');
in
+
buildFHSEnv {
name = "conda-shell";
targetPkgs = pkgs: (builtins.concatLists [ [ conda ] condaDeps extraPkgs]);
profile = ''
+2 -2
pkgs/tools/security/beyond-identity/default.nix
···
-
{ lib, stdenv, fetchurl, dpkg, buildFHSUserEnv
, glibc, glib, openssl, tpm2-tss
, gtk3, gnome, polkit, polkit_gnome
}:
···
'';
};
# /usr/bin/pkcheck is hardcoded in binary - we need FHS
-
in buildFHSUserEnv {
inherit meta;
name = pname;
···
+
{ lib, stdenv, fetchurl, dpkg, buildFHSEnv
, glibc, glib, openssl, tpm2-tss
, gtk3, gnome, polkit, polkit_gnome
}:
···
'';
};
# /usr/bin/pkcheck is hardcoded in binary - we need FHS
+
in buildFHSEnv {
inherit meta;
name = pname;
+4
pkgs/top-level/aliases.nix
···
bud = throw "bud has been removed: abandoned by upstream"; # Added 2022-03-14
inherit (libsForQt5.mauiPackages) buho; # added 2022-05-17
buttersink = throw "buttersink has been removed: abandoned by upstream"; # Added 2022-04-05
# bitwarden_rs renamed to vaultwarden with release 1.21.0 (2021-04-30)
bitwarden_rs = vaultwarden;
···
bud = throw "bud has been removed: abandoned by upstream"; # Added 2022-03-14
inherit (libsForQt5.mauiPackages) buho; # added 2022-05-17
buttersink = throw "buttersink has been removed: abandoned by upstream"; # Added 2022-04-05
+
# Shorter names; keep the longer name for back-compat. Added 2023-04-11
+
buildFHSUserEnv = buildFHSEnv;
+
buildFHSUserEnvChroot = buildFHSEnvChroot;
+
buildFHSUserEnvBubblewrap = buildFHSEnvBubblewrap;
# bitwarden_rs renamed to vaultwarden with release 1.21.0 (2021-04-30)
bitwarden_rs = vaultwarden;
+4 -4
pkgs/top-level/all-packages.nix
···
buildEnv = callPackage ../build-support/buildenv { }; # not actually a package
-
buildFHSUserEnv = buildFHSUserEnvBubblewrap;
-
buildFHSUserEnvChroot = callPackage ../build-support/build-fhs-userenv { };
-
buildFHSUserEnvBubblewrap = callPackage ../build-support/build-fhs-userenv-bubblewrap { };
buildMaven = callPackage ../build-support/build-maven.nix { };
···
zulip = callPackage ../applications/networking/instant-messengers/zulip {
# Bubblewrap breaks zulip, see https://github.com/NixOS/nixpkgs/pull/97264#issuecomment-704454645
appimageTools = pkgs.appimageTools.override {
-
buildFHSUserEnv = pkgs.buildFHSUserEnv;
};
};
···
buildEnv = callPackage ../build-support/buildenv { }; # not actually a package
+
buildFHSEnv = buildFHSEnvBubblewrap;
+
buildFHSEnvChroot = callPackage ../build-support/build-fhsenv-chroot { };
+
buildFHSEnvBubblewrap = callPackage ../build-support/build-fhsenv-bubblewrap { };
buildMaven = callPackage ../build-support/build-maven.nix { };
···
zulip = callPackage ../applications/networking/instant-messengers/zulip {
# Bubblewrap breaks zulip, see https://github.com/NixOS/nixpkgs/pull/97264#issuecomment-704454645
appimageTools = pkgs.appimageTools.override {
+
buildFHSEnv = pkgs.buildFHSEnvChroot;
};
};