Merge pull request #330634 from r-ryantm/auto-update/circumflex
[NixPkgs.git] / pkgs / desktops / gnome / core / gnome-shell / default.nix
blob3e2b20bcafcb42ace22e353e984c6818b16fc811
1 { fetchurl
2 , fetchpatch
3 , substituteAll
4 , lib, stdenv
5 , meson
6 , ninja
7 , pkg-config
8 , gnome
9 , json-glib
10 , gettext
11 , libsecret
12 , python3
13 , polkit
14 , networkmanager
15 , gi-docgen
16 , at-spi2-core
17 , unzip
18 , shared-mime-info
19 , libgweather
20 , libjxl
21 , librsvg
22 , webp-pixbuf-loader
23 , geoclue2
24 , perl
25 , desktop-file-utils
26 , libpulseaudio
27 , libical
28 , gobject-introspection
29 , wrapGAppsHook4
30 , libxslt
31 , gcr_4
32 , accountsservice
33 , gdk-pixbuf
34 , gdm
35 , upower
36 , ibus
37 , libnma-gtk4
38 , gnome-desktop
39 , gsettings-desktop-schemas
40 , gnome-keyring
41 , glib
42 , gjs
43 , mutter
44 , evolution-data-server-gtk4
45 , gtk4
46 , libadwaita
47 , sassc
48 , systemd
49 , pipewire
50 , gst_all_1
51 , adwaita-icon-theme
52 , gnome-bluetooth
53 , gnome-clocks
54 , gnome-settings-daemon
55 , gnome-autoar
56 , gnome-tecla
57 , asciidoc
58 , bash-completion
59 , mesa
60 , libGL
61 , libXi
62 , libX11
63 , libxml2
66 let
67   pythonEnv = python3.withPackages (ps: with ps; [ pygobject3 ]);
69 stdenv.mkDerivation (finalAttrs: {
70   pname = "gnome-shell";
71   version = "46.3.1";
73   outputs = [ "out" "devdoc" ];
75   src = fetchurl {
76     url = "mirror://gnome/sources/gnome-shell/${lib.versions.major finalAttrs.version}/gnome-shell-${finalAttrs.version}.tar.xz";
77     hash = "sha256-575fxu4sxSitJh3HpVyN5aMkEtPWhAoKB14PwSoH/4s=";
78   };
80   patches = [
81     # Hardcode paths to various dependencies so that they can be found at runtime.
82     (substituteAll {
83       src = ./fix-paths.patch;
84       glib_compile_schemas = "${glib.dev}/bin/glib-compile-schemas";
85       gsettings = "${glib.bin}/bin/gsettings";
86       tecla = "${lib.getBin gnome-tecla}/bin/tecla";
87       unzip = "${lib.getBin unzip}/bin/unzip";
88     })
90     # Use absolute path for libshew installation to make our patched gobject-introspection
91     # aware of the location to hardcode in the generated GIR file.
92     ./shew-gir-path.patch
94     # Make D-Bus services wrappable.
95     ./wrap-services.patch
97     # Fix greeter logo being too big.
98     # https://gitlab.gnome.org/GNOME/gnome-shell/issues/2591
99     # Reverts https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1101
100     ./greeter-logo-size.patch
102     # Work around failing fingerprint auth
103     (fetchpatch {
104       url = "https://src.fedoraproject.org/rpms/gnome-shell/raw/dcd112d9708954187e7490564c2229d82ba5326f/f/0001-gdm-Work-around-failing-fingerprint-auth.patch";
105       hash = "sha256-mgXty5HhiwUO1UV3/eDgWtauQKM0cRFQ0U7uocST25s=";
106     })
107   ];
109   nativeBuildInputs = [
110     meson
111     ninja
112     pkg-config
113     gettext
114     gi-docgen
115     perl
116     wrapGAppsHook4
117     sassc
118     desktop-file-utils
119     libxslt.bin
120     asciidoc
121     gobject-introspection
122   ];
124   buildInputs = [
125     systemd
126     gsettings-desktop-schemas
127     gnome-keyring
128     glib
129     gcr_4
130     accountsservice
131     libsecret
132     polkit
133     gdk-pixbuf
134     librsvg
135     networkmanager
136     gjs
137     mutter
138     libpulseaudio
139     evolution-data-server-gtk4
140     libical
141     gtk4
142     libadwaita
143     gdm
144     geoclue2
145     adwaita-icon-theme
146     gnome-bluetooth
147     gnome-clocks # schemas needed
148     at-spi2-core
149     upower
150     ibus
151     gnome-desktop
152     gnome-settings-daemon
153     mesa
154     libGL # for egl, required by mutter-clutter
155     libXi # required by libmutter
156     libX11
157     libxml2
159     # recording
160     pipewire
161     gst_all_1.gstreamer
162     gst_all_1.gst-plugins-base
163     gst_all_1.gst-plugins-good
165     # not declared at build time, but typelib is needed at runtime
166     libgweather
167     libnma-gtk4
169     # for gnome-extension tool
170     bash-completion
171     gnome-autoar
172     json-glib
174     # for tools
175     pythonEnv
176   ];
178   mesonFlags = [
179     "-Dgtk_doc=true"
180     "-Dtests=false"
181   ];
183   postPatch = ''
184     patchShebangs src/data-to-c.pl
186     # We can generate it ourselves.
187     rm -f man/gnome-shell.1
188     rm data/theme/gnome-shell-{light,dark}.css
189   '';
191   postInstall = ''
192     # Pull in WebP and JXL support for gnome-backgrounds.
193     # In postInstall to run before gappsWrapperArgsHook.
194     export GDK_PIXBUF_MODULE_FILE="${gnome._gdkPixbufCacheBuilder_DO_NOT_USE {
195       extraLoaders = [
196         libjxl
197         librsvg
198         webp-pixbuf-loader
199       ];
200     }}"
201   '';
203   preFixup = ''
204     gappsWrapperArgs+=(
205       # Until glib’s xdgmime is patched
206       # Fixes “Failed to load resource:///org/gnome/shell/theme/noise-texture.png: Unrecognized image file format”
207       --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
208     )
209   '';
211   postFixup = ''
212     # The services need typelibs.
213     for svc in org.gnome.ScreenSaver org.gnome.Shell.Extensions org.gnome.Shell.Notifications org.gnome.Shell.Screencast; do
214       wrapGApp $out/share/gnome-shell/$svc
215     done
217     # Cannot be in postInstall, otherwise _multioutDocs hook in preFixup will move right back.
218     moveToOutput "share/doc" "$devdoc"
219   '';
221   separateDebugInfo = true;
223   passthru = {
224     mozillaPlugin = "/lib/mozilla/plugins";
225     updateScript = gnome.updateScript {
226       packageName = "gnome-shell";
227       attrPath = "gnome.gnome-shell";
228     };
229   };
231   meta = with lib; {
232     description = "Core user interface for the GNOME 3 desktop";
233     homepage = "https://gitlab.gnome.org/GNOME/gnome-shell";
234     license = licenses.gpl2Plus;
235     maintainers = teams.gnome.members;
236     platforms = platforms.linux;
237   };