nixpkgs/pkgs/by-name/gn/gnome-settings-daemon/package.nix
Alyssa Ross acf6b15f94 gnome-settings-daemon: add withSystemd option
Since 7f2a6f17fc ("xdg-desktop-portal-gtk: Enable all default
portals unconditionally"), building gnome-settings-daemon is necessary
to build xdg-desktop-portal-gtk, but it wasn't possible for systems
that can't use systemd.

I've called the option "withSystemd" as it's the most common name for
this kind of option in Nixpkgs.

A couple of backports are required for it to build.  They can be
removed when we update to GNOME 47.
2024-10-13 11:51:39 +02:00

147 lines
3.1 KiB
Nix

{
stdenv,
lib,
substituteAll,
fetchurl,
fetchpatch,
meson,
ninja,
pkg-config,
gnome,
perl,
gettext,
gtk3,
glib,
libnotify,
libgnomekbd,
libpulseaudio,
alsa-lib,
libcanberra-gtk3,
upower,
colord,
libgweather,
polkit,
gsettings-desktop-schemas,
geoclue2,
systemd,
libgudev,
libwacom,
libxslt,
libxml2,
modemmanager,
networkmanager,
gnome-desktop,
geocode-glib_2,
docbook_xsl,
wrapGAppsHook3,
python3,
tzdata,
gcr_4,
gnome-session-ctl,
withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "gnome-settings-daemon";
version = "46.0";
src = fetchurl {
url = "mirror://gnome/sources/gnome-settings-daemon/${lib.versions.major finalAttrs.version}/gnome-settings-daemon-${finalAttrs.version}.tar.xz";
hash = "sha256-C5oPZPoYqOfgm0yVo/dU+gM8LNvS3DVwHwYYVywcs9c=";
};
patches = [
# https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/merge_requests/202
./add-gnome-session-ctl-option.patch
(substituteAll {
src = ./fix-paths.patch;
inherit tzdata;
})
(fetchpatch {
name = "backport-no-systemd-fix-1.patch";
url = "https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/commit/46f998d7308cb18832666bc34ee54b1d9c27739f.patch";
includes = [ "plugins/sharing/gsd-sharing-manager.c" ];
hash = "sha256-P5FJUY50Pg3MuwHwGUz28/TMZkT7j+fmGPozWb9rVYo=";
})
(fetchpatch {
name = "backport-no-systemd-fix-2.patch";
url = "https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/commit/1a4d50f4ee611bdede6072c0bfd2a1b2e327c5fc.patch";
hash = "sha256-pROhnE9GziS9h0nMWZBsd8YtW6RxMrwmaSOe0UtkUJU=";
})
];
nativeBuildInputs = [
meson
ninja
pkg-config
perl
gettext
libxml2
libxslt
docbook_xsl
wrapGAppsHook3
python3
];
buildInputs =
[
gtk3
glib
gsettings-desktop-schemas
modemmanager
networkmanager
libnotify
libgnomekbd # for org.gnome.libgnomekbd.keyboard schema
gnome-desktop
libpulseaudio
alsa-lib
libcanberra-gtk3
upower
colord
libgweather
polkit
geocode-glib_2
geoclue2
libgudev
libwacom
gcr_4
]
++ lib.optionals withSystemd [
systemd
];
mesonFlags =
[
"-Dudev_dir=${placeholder "out"}/lib/udev"
(lib.mesonBool "systemd" withSystemd)
]
++ lib.optionals withSystemd [
"-Dgnome_session_ctl_path=${gnome-session-ctl}/libexec/gnome-session-ctl"
];
# Default for release buildtype but passed manually because
# we're using plain
env.NIX_CFLAGS_COMPILE = "-DG_DISABLE_CAST_CHECKS";
postPatch = ''
for f in gnome-settings-daemon/codegen.py plugins/power/gsd-power-constants-update.pl; do
chmod +x $f
patchShebangs $f
done
'';
passthru = {
updateScript = gnome.updateScript {
packageName = "gnome-settings-daemon";
};
};
meta = with lib; {
license = licenses.gpl2Plus;
maintainers = teams.gnome.members;
platforms = platforms.linux;
};
})