In this case it looks like your goal is to run Element with support for Wayland. It’s not well documented yet but there’s now a built in way to do that:
If you are using Wayland you can choose to use the Ozone Wayland support in Chrome and several Electron apps by setting the environment variable
NIXOS_OZONE_WL=1
(for example viaenvironment.sessionVariables.NIXOS_OZONE_WL = "1"
). This is not enabled by default because Ozone Wayland is still under heavy development and behavior is not always flawless. Furthermore, not all Electron apps use the latest Electron versions.
Using Home Manager this would look like:
home.sessionVariables.NIXOS_OZONE_WL = "1";
This works because the Element package already includes a wrapper that automatically adds --enable-features=UseOzonePlatform
and --ozone-platform=wayland
when NIXOS_OZONE_WL
is set.
To answer your question though, both xdg.dataFile
and xdg.desktopEntries
are intended for creating new files, and they’re totally unaware of any existing entries. The only way to modify the entry created by a package is to modify the package, and each package may be different so you must begin by reading its source.
This package uses makeDesktopItem
and references the result in its installPhase
, so you have to both override makeDesktopItem
and update installPhase
. The process is explained in detail here, but would look something like this:
element-desktop.overrideAttrs (e: rec {
# Add arguments to the .desktop entry
desktopItem = e.desktopItem.override (d: {
exec = "${d.exec} --example-one --example-two";
});
# Update the install script to use the new .desktop entry
installPhase = builtins.replaceStrings [ "${e.desktopItem}" ] [ "${desktopItem}" ] e.installPhase;
})
Since the ability to override makeDesktopItem
is a recent addition, this probably won’t work until NixOS 22.11.