Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions doc/builders/special/fhs-environments.section.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,5 @@ One can create a simple environment using a `shell.nix` like that:
```

Running `nix-shell` would then drop you into a shell with these libraries and binaries available. You can use this to run closed-source applications which expect FHS structure without hassles: simply change `runScript` to the application path, e.g. `./bin/start.sh` -- relative paths are supported.

Additionally, the FHS builder links all relocated gsettings-schemas (the glib setup-hook moves them to `share/gsettings-schemas/${name}/glib-2.0/schemas`) to their standard FHS location. This means you don't need to wrap binaries with `wrapGAppsHook`.
2 changes: 2 additions & 0 deletions pkgs/build-support/appimage/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ rec {
xdg-utils
iana-etc
krb5
gsettings-desktop-schemas
hicolor-icon-theme # dont show a gtk warning about hicolor not being installed
];

# list of libraries expected in an appimage environment:
Expand Down
26 changes: 26 additions & 0 deletions pkgs/build-support/build-fhs-userenv-bubblewrap/env.nix
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,32 @@ let
paths = [ etcPkg ldconfig ] ++ basePkgs ++ targetPaths;
extraOutputsToInstall = [ "out" "lib" "bin" ] ++ extraOutputsToInstall;
ignoreCollisions = true;
postBuild = ''
if [[ -d $out/share/gsettings-schemas/ ]]; then
# Recreate the standard schemas directory if its a symlink to make it writable
if [[ -L $out/share/glib-2.0 ]]; then
ln -s $(readlink $out/share/glib-2.0) $out/share/glib-2.0.old
rm -rf $out/share/glib-2.0
fi

mkdir -p $out/share/glib-2.0/schemas

# symlink any schema files or overrides to the standard schema directory
if [[ -e $out/share/glib-2.0.old/schemas ]]; then
ln -fs $out/share/glib-2.0.old/schemas/*.xml $out/share/glib-2.0/schemas
ln -fs $out/share/glib-2.0.old/schemas/*.gsettings-schemas.override $out/share/glib-2.0/schemas
fi

for d in $out/share/gsettings-schemas/*; do
# Force symlink, in case there are duplicates
ln -fs $d/glib-2.0/schemas/*.xml $out/share/glib-2.0/schemas
ln -fs $d/glib-2.0/schemas/*.gschema.override $out/share/glib-2.0/schemas
done

# and compile them
${pkgs.glib.dev}/bin/glib-compile-schemas $out/share/glib-2.0/schemas
fi
'';
};

staticUsrProfileMulti = buildEnv {
Expand Down
26 changes: 26 additions & 0 deletions pkgs/build-support/build-fhs-userenv/env.nix
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,32 @@ let
paths = [ etcPkg ] ++ basePkgs ++ targetPaths;
extraOutputsToInstall = [ "out" "lib" "bin" ] ++ extraOutputsToInstall;
ignoreCollisions = true;
postBuild = ''
if [[ -d $out/share/gsettings-schemas/ ]]; then
# Recreate the standard schemas directory if its a symlink to make it writable
if [[ -L $out/share/glib-2.0 ]]; then
ln -s $(readlink $out/share/glib-2.0) $out/share/glib-2.0.old
rm -rf $out/share/glib-2.0
fi

mkdir -p $out/share/glib-2.0/schemas

# symlink any schema files or overrides to the standard schema directory
if [[ -e $out/share/glib-2.0.old/schemas ]]; then
ln -fs $out/share/glib-2.0.old/schemas/*.xml $out/share/glib-2.0/schemas
ln -fs $out/share/glib-2.0.old/schemas/*.gsettings-schemas.override $out/share/glib-2.0/schemas
fi

for d in $out/share/gsettings-schemas/*; do
# Force symlink, in case there are duplicates
ln -fs $d/glib-2.0/schemas/*.xml $out/share/glib-2.0/schemas
ln -fs $d/glib-2.0/schemas/*.gschema.override $out/share/glib-2.0/schemas
done

# and compile them
${pkgs.glib.dev}/bin/glib-compile-schemas $out/share/glib-2.0/schemas
fi
'';
};

staticUsrProfileMulti = buildEnv {
Expand Down