58 lines
1.9 KiB
Nix
58 lines
1.9 KiB
Nix
# https://github.com/NixOS/nixpkgs/issues/126590#issuecomment-3194531220
|
|
{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
...
|
|
}: {
|
|
nixpkgs.overlays = lib.singleton (final: prev: {
|
|
kdePackages =
|
|
prev.kdePackages
|
|
// {
|
|
plasma-workspace = let
|
|
# the package we want to override
|
|
basePkg = prev.kdePackages.plasma-workspace;
|
|
|
|
# a helper package that merges all the XDG_DATA_DIRS into a single directory
|
|
xdgdataPkg = pkgs.stdenv.mkDerivation {
|
|
name = "${basePkg.name}-xdgdata";
|
|
buildInputs = [basePkg];
|
|
dontUnpack = true;
|
|
dontFixup = true;
|
|
dontWrapQtApps = true;
|
|
installPhase = ''
|
|
mkdir -p $out/share
|
|
( IFS=:
|
|
for DIR in $XDG_DATA_DIRS; do
|
|
if [[ -d "$DIR" ]]; then
|
|
cp -r $DIR/. $out/share/
|
|
chmod -R u+w $out/share
|
|
fi
|
|
done
|
|
)
|
|
'';
|
|
};
|
|
|
|
# undo the XDG_DATA_DIRS injection that is usually done in the qt wrapper
|
|
# script and instead inject the path of the above helper package
|
|
derivedPkg = basePkg.overrideAttrs {
|
|
preFixup = ''
|
|
for index in "''${!qtWrapperArgs[@]}"; do
|
|
if [[ ''${qtWrapperArgs[$((index+0))]} == "--prefix" ]] && [[ ''${qtWrapperArgs[$((index+1))]} == "XDG_DATA_DIRS" ]]; then
|
|
unset -v "qtWrapperArgs[$((index+0))]"
|
|
unset -v "qtWrapperArgs[$((index+1))]"
|
|
unset -v "qtWrapperArgs[$((index+2))]"
|
|
unset -v "qtWrapperArgs[$((index+3))]"
|
|
fi
|
|
done
|
|
qtWrapperArgs=("''${qtWrapperArgs[@]}")
|
|
qtWrapperArgs+=(--prefix XDG_DATA_DIRS : "${xdgdataPkg}/share")
|
|
qtWrapperArgs+=(--prefix XDG_DATA_DIRS : "$out/share")
|
|
'';
|
|
};
|
|
in
|
|
derivedPkg;
|
|
};
|
|
});
|
|
}
|