Files
nixpkgs/pkgs/by-name/gn/gnome-shell/package.nix
Victor Fuentes 0658011fdb gnome-shell: refresh icons after profile switches
GNOME checks for icon changes based on directory modification time.
Since Nix hardcodes modification time to 1, GNOME never detects when icons are changed,
leading to missing icons in the application menu on newly installed programs.

To fix we now also invalidate icon cache on device and inode changes.
2026-09-26 17:57:22 -07:00

274 lines
6.1 KiB
Nix
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
fetchurl,
fetchpatch,
replaceVars,
lib,
stdenv,
docutils,
meson,
ninja,
pkg-config,
gnome,
json-glib,
gettext,
libsecret,
python3,
polkit,
networkmanager,
gi-docgen,
at-spi2-core,
unzip,
shared-mime-info,
libgweather,
libjxl,
librsvg,
webp-pixbuf-loader,
geoclue2,
desktop-file-utils,
libpulseaudio,
libical,
gobject-introspection,
wrapGAppsHook4,
libxslt,
gcr_4,
accountsservice,
gdk-pixbuf,
gdm,
upower,
ibus,
libnma-gtk4,
gnome-desktop,
gsettings-desktop-schemas,
gnome-keyring,
glib,
gjs,
mutter,
evolution-data-server-gtk4,
gtk4,
libadwaita,
sassc,
systemd,
pipewire,
gst_all_1,
adwaita-icon-theme,
glycin-loaders,
gnome-bluetooth,
gnome-clocks,
gnome-settings-daemon,
gnome-autoar,
bash-completion,
lcms2,
libgbm,
libGL,
libxi,
libx11,
libxkbcommon,
libsoup_3,
libxml2,
webkitgtk_6_0,
}:
let
pythonEnv = python3.withPackages (ps: with ps; [ pygobject3 ]);
in
stdenv.mkDerivation (finalAttrs: {
pname = "gnome-shell";
version = "50.4";
outputs = [
"out"
"devdoc"
];
src = fetchurl {
url = "mirror://gnome/sources/gnome-shell/${lib.versions.major finalAttrs.version}/gnome-shell-${finalAttrs.version}.tar.xz";
hash = "sha256-xTGTlTnbMWpBrvI2cDcKvRMw0yVPhLyw+fTa5dbjYs8=";
};
patches = [
# Hardcode paths to various dependencies so that they can be found at runtime.
(replaceVars ./fix-paths.patch {
glib_compile_schemas = "${glib.dev}/bin/glib-compile-schemas";
gsettings = "${glib.bin}/bin/gsettings";
unzip = "${lib.getBin unzip}/bin/unzip";
})
# Use absolute path for libshew installation to make our patched gobject-introspection
# aware of the location to hardcode in the generated GIR file.
./shew-gir-path.patch
# Make D-Bus services wrappable.
./wrap-services.patch
# Detect profile switches even when icon directory mtimes are unchanged.
./icon-theme-directory-identity.patch
# Fix greeter logo being too big.
# https://gitlab.gnome.org/GNOME/gnome-shell/issues/2591
# Reverts https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1101
./greeter-logo-size.patch
# Work around failing fingerprint auth
(fetchpatch {
url = "https://src.fedoraproject.org/rpms/gnome-shell/raw/dcd112d9708954187e7490564c2229d82ba5326f/f/0001-gdm-Work-around-failing-fingerprint-auth.patch";
hash = "sha256-mgXty5HhiwUO1UV3/eDgWtauQKM0cRFQ0U7uocST25s=";
})
];
nativeBuildInputs = [
docutils # for rst2man
meson
ninja
pkg-config
gettext
gi-docgen
wrapGAppsHook4
sassc
desktop-file-utils
libxslt.bin
gobject-introspection
];
buildInputs = [
systemd
gsettings-desktop-schemas
gnome-keyring
glib
gcr_4
accountsservice
libsecret
polkit
gdk-pixbuf
librsvg
networkmanager
gjs
mutter
libpulseaudio
evolution-data-server-gtk4
libical
gtk4
libadwaita
gdm
geoclue2
adwaita-icon-theme
gnome-bluetooth
gnome-clocks # schemas needed
at-spi2-core
upower
ibus
gnome-desktop
gnome-settings-daemon
lcms2 # required by mutter-clutter
libgbm
libGL # for egl, required by mutter-clutter
libxi # required by libmutter
libx11
libxkbcommon
libsoup_3
libxml2
# recording
pipewire
gst_all_1.gstreamer
gst_all_1.gst-plugins-base
gst_all_1.gst-plugins-good
# not declared at build time, but typelib is needed at runtime
libgweather
libnma-gtk4
webkitgtk_6_0 # for gnome-shell-portal-helper
# for gnome-extension tool
bash-completion
gnome-autoar
json-glib
# for tools
pythonEnv
];
mesonFlags = [
"-Dgtk_doc=true"
"-Dtests=false"
];
postPatch = ''
patchShebangs \
src/data-to-c.py \
build-aux/generate-app-list.py
# We can generate it ourselves.
rm -f man/gnome-shell.1
rm data/theme/gnome-shell-{light,dark}.css
substituteInPlace meson.build subprojects/extensions-app/meson.build \
--replace-fail "gjs = find_program('gjs')" "gjs = find_program('${lib.getExe gjs}')"
'';
preInstall = ''
# gnome-shell contains GSettings schema overrides for Mutter.
schemadir="$out/share/glib-2.0/schemas"
mkdir -p "$schemadir"
cp "${glib.getSchemaPath mutter}/org.gnome.mutter.gschema.xml" "$schemadir"
'';
postInstall = ''
# Pull in WebP and JXL support for gnome-backgrounds.
# In postInstall to run before gappsWrapperArgsHook.
export GDK_PIXBUF_MODULE_FILE="${
gnome._gdkPixbufCacheBuilder_DO_NOT_USE {
extraLoaders = [
libjxl
librsvg
webp-pixbuf-loader
];
}
}"
'';
preFixup = ''
gappsWrapperArgs+=(
--prefix XDG_DATA_DIRS : ${
lib.makeSearchPath "share" [
# Until glib’s xdgmime is patched
# Fixes “Failed to load resource:///org/gnome/shell/theme/noise-texture.png: Unrecognized image file format”
shared-mime-info
# For background images https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4554
glycin-loaders
]
}
)
'';
postFixup = ''
# The services need typelibs.
for svc in org.gnome.ScreenSaver org.gnome.Shell.Extensions org.gnome.Shell.Notifications org.gnome.Shell.Screencast; do
wrapGApp $out/share/gnome-shell/$svc
done
# Cannot be in postInstall, otherwise _multioutDocs hook in preFixup will move right back.
moveToOutput "share/doc" "$devdoc"
'';
separateDebugInfo = true;
passthru = {
mozillaPlugin = "/lib/mozilla/plugins";
updateScript = gnome.updateScript {
packageName = "gnome-shell";
};
};
strictDeps = true;
meta = {
description = "Core user interface for the GNOME desktop";
homepage = "https://gitlab.gnome.org/GNOME/gnome-shell";
changelog = "https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/${finalAttrs.version}/NEWS?ref_type=tags";
license = lib.licenses.gpl2Plus;
teams = [ lib.teams.gnome ];
platforms = lib.platforms.linux;
};
})