diff --git a/fixes/plasma-fix.nix b/fixes/plasma-fix.nix new file mode 100644 index 0000000..35e95f9 --- /dev/null +++ b/fixes/plasma-fix.nix @@ -0,0 +1,57 @@ +# 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; + }; + }); +} diff --git a/flake.nix b/flake.nix index 90c37d8..4e08568 100644 --- a/flake.nix +++ b/flake.nix @@ -85,7 +85,13 @@ isHM = false; }; modules = [ - ({...}: {nixpkgs.overlays = [overlay-unstable self.overlays.default audio.overlays.default];}) + ({...}: { + nixpkgs.overlays = [ + overlay-unstable + self.overlays.default + audio.overlays.default + ]; + }) ({...}: { nixpkgs.config.allowUnfree = true; nixpkgs.config.nvidia.acceptLicense = true; @@ -99,6 +105,7 @@ nixos-hardware.nixosModules.lenovo-thinkpad-t14-amd-gen1 inputs.sops-nix.nixosModules.sops nixos-cosmic.nixosModules.default + ./fixes/plasma-fix.nix ./modules ./hosts/monolith/configuration.nix ];