buildFHSUserEnv{Chroot,Bubblewrap}: link gsettings-schemas to the FHS location

We shouldn't need to use wrapGAppsHook in expressions
that use this builder.
This commit is contained in:
Artturin 2022-02-25 01:08:47 +02:00
parent 800013956d
commit 3e7e6ab84a
3 changed files with 54 additions and 0 deletions

View file

@ -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`.

View file

@ -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 {

View file

@ -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 {