From 417ac8832a535ea23d3af8d2e13fd57a9d8faff8 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Sun, 22 Dec 2024 03:15:09 +0100 Subject: [PATCH 1/2] glib: Format the expression - Format with `nixfmt-rfc-style`. - Move `outputs` and `setupHook` to top. - Move `strictDeps` above `inputs`. - Move `nativeCheckInputs` next to the rest of the inputs. - Move `env` above phases. - Expand `env.NIX_CFLAGS_COMPILE` to a nested attribute set. --- pkgs/development/libraries/glib/default.nix | 449 ++++++++++++-------- 1 file changed, 261 insertions(+), 188 deletions(-) diff --git a/pkgs/development/libraries/glib/default.nix b/pkgs/development/libraries/glib/default.nix index e8a44bde7edb1..53cb4efe2f137 100644 --- a/pkgs/development/libraries/glib/default.nix +++ b/pkgs/development/libraries/glib/default.nix @@ -1,34 +1,47 @@ -{ config -, lib -, stdenv -, fetchurl -, gettext -, meson -, ninja -, pkg-config -, perl -, python3 -, python3Packages -, libiconv, zlib, libffi, pcre2, elfutils, gnome, libselinux, bash, gnum4, libxslt -, docutils, gi-docgen -# use util-linuxMinimal to avoid circular dependency (util-linux, systemd, glib) -, util-linuxMinimal ? null -, buildPackages - -# this is just for tests (not in the closure of any regular package) -, dbus, tzdata -, desktop-file-utils, shared-mime-info -, darwin -, makeHardcodeGsettingsPatch -, testers -, gobject-introspection -, libsystemtap -, libsysprof-capture -, mesonEmulatorHook -, withIntrospection ? - stdenv.hostPlatform.emulatorAvailable buildPackages && - lib.meta.availableOn stdenv.hostPlatform gobject-introspection && - stdenv.hostPlatform.isLittleEndian == stdenv.buildPlatform.isLittleEndian +{ + config, + lib, + stdenv, + fetchurl, + gettext, + meson, + ninja, + pkg-config, + perl, + python3, + python3Packages, + libiconv, + zlib, + libffi, + pcre2, + elfutils, + gnome, + libselinux, + bash, + gnum4, + libxslt, + docutils, + gi-docgen, + # use util-linuxMinimal to avoid circular dependency (util-linux, systemd, glib) + util-linuxMinimal ? null, + buildPackages, + + # this is just for tests (not in the closure of any regular package) + dbus, + tzdata, + desktop-file-utils, + shared-mime-info, + darwin, + makeHardcodeGsettingsPatch, + testers, + gobject-introspection, + libsystemtap, + libsysprof-capture, + mesonEmulatorHook, + withIntrospection ? + stdenv.hostPlatform.emulatorAvailable buildPackages + && lib.meta.availableOn stdenv.hostPlatform gobject-introspection + && stdenv.hostPlatform.isLittleEndian == stdenv.buildPlatform.isLittleEndian, }: assert stdenv.hostPlatform.isLinux -> util-linuxMinimal != null; @@ -40,183 +53,238 @@ let x11Support = false; }; - librarySuffix = if (stdenv.hostPlatform.extensions.library == ".so") then "2.0.so.0" - else if (stdenv.hostPlatform.extensions.library == ".dylib") then "2.0.0.dylib" - else if (stdenv.hostPlatform.extensions.library == ".a") then "2.0.a" - else if (stdenv.hostPlatform.extensions.library == ".dll") then "2.0-0.dll" - else "2.0-0.lib"; + librarySuffix = + if (stdenv.hostPlatform.extensions.library == ".so") then + "2.0.so.0" + else if (stdenv.hostPlatform.extensions.library == ".dylib") then + "2.0.0.dylib" + else if (stdenv.hostPlatform.extensions.library == ".a") then + "2.0.a" + else if (stdenv.hostPlatform.extensions.library == ".dll") then + "2.0-0.dll" + else + "2.0-0.lib"; systemtap' = buildPackages.linuxPackages.systemtap.override { withStap = false; }; + withDtrace = - lib.meta.availableOn stdenv.buildPlatform systemtap' && - # dtrace support requires sys/sdt.h header - lib.meta.availableOn stdenv.hostPlatform libsystemtap; + lib.meta.availableOn stdenv.buildPlatform systemtap' + && + # dtrace support requires sys/sdt.h header + lib.meta.availableOn stdenv.hostPlatform libsystemtap; in stdenv.mkDerivation (finalAttrs: { pname = "glib"; version = "2.82.1"; + outputs = [ + "bin" + "out" + "dev" + "devdoc" + ]; + + setupHook = ./setup-hook.sh; + src = fetchurl { url = "mirror://gnome/sources/glib/${lib.versions.majorMinor finalAttrs.version}/glib-${finalAttrs.version}.tar.xz"; hash = "sha256-R4Y0RAv1LuTsRCjVWHhzmMC+awQ8UhvrMIM0s9tEiaY="; }; - patches = lib.optionals stdenv.hostPlatform.isDarwin [ - ./darwin-compilation.patch - ] ++ lib.optionals stdenv.hostPlatform.isMusl [ - ./quark_init_on_demand.patch - ./gobject_init_on_demand.patch - ] ++ [ - # This patch lets GLib's GDesktopAppInfo API watch and notice changes - # to the Nix user and system profiles. That way, the list of available - # applications shown by the desktop environment is immediately updated - # when the user installs or removes any - # (see ). - - # It does so by monitoring /nix/var/nix/profiles (for changes to the system - # profile) and /nix/var/nix/profiles/per-user/USER (for changes to the user - # profile) as well as /etc/profiles/per-user (for chanes to the user - # environment profile) and crawling their share/applications sub-directory when - # changes happen. - ./glib-appinfo-watch.patch - - ./schema-override-variable.patch - - # Add support for Pantheon’s terminal emulator. - ./elementary-terminal-support.patch - - # GLib contains many binaries used for different purposes; - # we will install them to different outputs: - # 1. Tools for desktop environment and introspection ($bin) - # * gapplication (non-darwin) - # * gdbus - # * gi-compile-repository - # * gi-decompile-typelib - # * gi-inspect-typelib - # * gio - # * gio-launch-desktop (symlink to $out) - # * gsettings - # 2. Development/build tools ($dev) - # * gdbus-codegen - # * gio-querymodules - # * glib-compile-resources - # * glib-compile-schemas - # * glib-genmarshal - # * glib-gettextize - # * glib-mkenums - # * gobject-query - # * gresource - # * gtester - # * gtester-report - # 3. Tools for desktop environment that cannot go to $bin due to $out depending on them ($out) - # * gio-launch-desktop - ./split-dev-programs.patch - - # Tell Meson to install gdb scripts next to the lib - # GDB only looks there and in ${gdb}/share/gdb/auto-load, - # and by default meson installs in to $out/share/gdb/auto-load - # which does not help - ./gdb_script.patch - ]; - - outputs = [ "bin" "out" "dev" "devdoc" ]; - - setupHook = ./setup-hook.sh; - - buildInputs = [ - finalAttrs.setupHook - ] ++ lib.optionals (!stdenv.hostPlatform.isFreeBSD) [ - libsysprof-capture - ] ++ [ - pcre2 - ] ++ lib.optionals (!stdenv.hostPlatform.isWindows) [ - bash gnum4 # install glib-gettextize and m4 macros for other apps to use - ] ++ lib.optionals (lib.meta.availableOn stdenv.hostPlatform elfutils) [ - elfutils - ] ++ lib.optionals withDtrace [ - libsystemtap - ] ++ lib.optionals stdenv.hostPlatform.isLinux [ - libselinux - util-linuxMinimal # for libmount - ] ++ lib.optionals stdenv.hostPlatform.isDarwin (with darwin.apple_sdk.frameworks; [ - AppKit Carbon Cocoa CoreFoundation CoreServices Foundation - ]); + patches = + lib.optionals stdenv.hostPlatform.isDarwin [ + ./darwin-compilation.patch + ] + ++ lib.optionals stdenv.hostPlatform.isMusl [ + ./quark_init_on_demand.patch + ./gobject_init_on_demand.patch + ] + ++ [ + # This patch lets GLib's GDesktopAppInfo API watch and notice changes + # to the Nix user and system profiles. That way, the list of available + # applications shown by the desktop environment is immediately updated + # when the user installs or removes any + # (see ). + + # It does so by monitoring /nix/var/nix/profiles (for changes to the system + # profile) and /nix/var/nix/profiles/per-user/USER (for changes to the user + # profile) as well as /etc/profiles/per-user (for chanes to the user + # environment profile) and crawling their share/applications sub-directory when + # changes happen. + ./glib-appinfo-watch.patch + + ./schema-override-variable.patch + + # Add support for Pantheon’s terminal emulator. + ./elementary-terminal-support.patch + + # GLib contains many binaries used for different purposes; + # we will install them to different outputs: + # 1. Tools for desktop environment and introspection ($bin) + # * gapplication (non-darwin) + # * gdbus + # * gi-compile-repository + # * gi-decompile-typelib + # * gi-inspect-typelib + # * gio + # * gio-launch-desktop (symlink to $out) + # * gsettings + # 2. Development/build tools ($dev) + # * gdbus-codegen + # * gio-querymodules + # * glib-compile-resources + # * glib-compile-schemas + # * glib-genmarshal + # * glib-gettextize + # * glib-mkenums + # * gobject-query + # * gresource + # * gtester + # * gtester-report + # 3. Tools for desktop environment that cannot go to $bin due to $out depending on them ($out) + # * gio-launch-desktop + ./split-dev-programs.patch + + # Tell Meson to install gdb scripts next to the lib + # GDB only looks there and in ${gdb}/share/gdb/auto-load, + # and by default meson installs in to $out/share/gdb/auto-load + # which does not help + ./gdb_script.patch + ]; strictDeps = true; + buildInputs = + [ + finalAttrs.setupHook + ] + ++ lib.optionals (!stdenv.hostPlatform.isFreeBSD) [ + libsysprof-capture + ] + ++ [ + pcre2 + ] + ++ lib.optionals (!stdenv.hostPlatform.isWindows) [ + bash + gnum4 # install glib-gettextize and m4 macros for other apps to use + ] + ++ lib.optionals (lib.meta.availableOn stdenv.hostPlatform elfutils) [ + elfutils + ] + ++ lib.optionals withDtrace [ + libsystemtap + ] + ++ lib.optionals stdenv.hostPlatform.isLinux [ + libselinux + util-linuxMinimal # for libmount + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin ( + with darwin.apple_sdk.frameworks; + [ + AppKit + Carbon + Cocoa + CoreFoundation + CoreServices + Foundation + ] + ); + depsBuildBuild = [ pkg-config # required to find native gi-docgen ]; - nativeBuildInputs = [ - docutils # for rst2man, rst2html5 - meson - ninja - pkg-config - perl - python3 - python3Packages.packaging # mostly used to make meson happy - python3Packages.wrapPython # for patchPythonScript + nativeBuildInputs = + [ + docutils # for rst2man, rst2html5 + meson + ninja + pkg-config + perl + python3 + python3Packages.packaging # mostly used to make meson happy + python3Packages.wrapPython # for patchPythonScript + gettext + libxslt + ] + ++ lib.optionals withIntrospection [ + gi-docgen + gobject-introspection' + ] + ++ lib.optionals (withIntrospection && !stdenv.buildPlatform.canExecute stdenv.hostPlatform) [ + mesonEmulatorHook + ] + ++ lib.optionals withDtrace [ + systemtap' # for dtrace + ]; + + propagatedBuildInputs = [ + zlib + libffi gettext - libxslt - ] ++ lib.optionals withIntrospection [ - gi-docgen - gobject-introspection' - ] ++ lib.optionals (withIntrospection && !stdenv.buildPlatform.canExecute stdenv.hostPlatform) [ - mesonEmulatorHook - ] ++ lib.optionals withDtrace [ - systemtap' # for dtrace + libiconv ]; - propagatedBuildInputs = [ zlib libffi gettext libiconv ]; - - mesonFlags = [ - "-Dglib_debug=disabled" # https://gitlab.gnome.org/GNOME/glib/-/issues/3421#note_2206315 - "-Ddocumentation=true" # gvariant specification can be built without gi-docgen - (lib.mesonEnable "dtrace" withDtrace) - (lib.mesonEnable "systemtap" withDtrace) # requires dtrace option to be enabled - "-Dnls=enabled" - "-Ddevbindir=${placeholder "dev"}/bin" - (lib.mesonEnable "introspection" withIntrospection) - # FIXME: Fails when linking target glib/tests/libconstructor-helper.so - # relocation R_X86_64_32 against hidden symbol `__TMC_END__' can not be used when making a shared object - "-Dtests=${lib.boolToString (!stdenv.hostPlatform.isStatic)}" - ] ++ lib.optionals (!lib.meta.availableOn stdenv.hostPlatform elfutils) [ - "-Dlibelf=disabled" - ] ++ lib.optionals stdenv.hostPlatform.isFreeBSD [ - "-Db_lundef=false" - "-Dxattr=false" - "-Dsysprof=disabled" # sysprof-capture does not build on FreeBSD + nativeCheckInputs = [ + tzdata + desktop-file-utils + shared-mime-info ]; - env.NIX_CFLAGS_COMPILE = toString [ - "-Wno-error=nonnull" - # Default for release buildtype but passed manually because - # we're using plain - "-DG_DISABLE_CAST_CHECKS" - ]; + mesonFlags = + [ + "-Dglib_debug=disabled" # https://gitlab.gnome.org/GNOME/glib/-/issues/3421#note_2206315 + "-Ddocumentation=true" # gvariant specification can be built without gi-docgen + (lib.mesonEnable "dtrace" withDtrace) + (lib.mesonEnable "systemtap" withDtrace) # requires dtrace option to be enabled + "-Dnls=enabled" + "-Ddevbindir=${placeholder "dev"}/bin" + (lib.mesonEnable "introspection" withIntrospection) + # FIXME: Fails when linking target glib/tests/libconstructor-helper.so + # relocation R_X86_64_32 against hidden symbol `__TMC_END__' can not be used when making a shared object + "-Dtests=${lib.boolToString (!stdenv.hostPlatform.isStatic)}" + ] + ++ lib.optionals (!lib.meta.availableOn stdenv.hostPlatform elfutils) [ + "-Dlibelf=disabled" + ] + ++ lib.optionals stdenv.hostPlatform.isFreeBSD [ + "-Db_lundef=false" + "-Dxattr=false" + "-Dsysprof=disabled" # sysprof-capture does not build on FreeBSD + ]; - postPatch = '' - patchShebangs glib/gen-unicode-tables.pl - patchShebangs glib/tests/gen-casefold-txt.py - patchShebangs glib/tests/gen-casemap-txt.py - patchShebangs tools/gen-visibility-macros.py - patchShebangs tests - - # Needs machine-id, comment the test - sed -e '/\/gdbus\/codegen-peer-to-peer/ s/^\/*/\/\//' -i gio/tests/gdbus-peer.c - sed -e '/g_test_add_func/ s/^\/*/\/\//' -i gio/tests/gdbus-address-get-session.c - # All gschemas fail to pass the test, upstream bug? - sed -e '/g_test_add_data_func/ s/^\/*/\/\//' -i gio/tests/gschema-compile.c - # Cannot reproduce the failing test_associations on hydra - sed -e '/\/appinfo\/associations/d' -i gio/tests/appinfo.c - # Needed because of libtool wrappers - sed -e '/g_subprocess_launcher_set_environ (launcher, envp);/a g_subprocess_launcher_setenv (launcher, "PATH", g_getenv("PATH"), TRUE);' -i gio/tests/gsubprocess.c - '' + lib.optionalString stdenv.hostPlatform.isWindows '' - substituteInPlace gio/win32/meson.build \ - --replace "libintl, " "" - ''; + env = { + NIX_CFLAGS_COMPILE = toString [ + "-Wno-error=nonnull" + # Default for release buildtype but passed manually because + # we're using plain + "-DG_DISABLE_CAST_CHECKS" + ]; + }; + + postPatch = + '' + patchShebangs glib/gen-unicode-tables.pl + patchShebangs glib/tests/gen-casefold-txt.py + patchShebangs glib/tests/gen-casemap-txt.py + patchShebangs tools/gen-visibility-macros.py + patchShebangs tests + + # Needs machine-id, comment the test + sed -e '/\/gdbus\/codegen-peer-to-peer/ s/^\/*/\/\//' -i gio/tests/gdbus-peer.c + sed -e '/g_test_add_func/ s/^\/*/\/\//' -i gio/tests/gdbus-address-get-session.c + # All gschemas fail to pass the test, upstream bug? + sed -e '/g_test_add_data_func/ s/^\/*/\/\//' -i gio/tests/gschema-compile.c + # Cannot reproduce the failing test_associations on hydra + sed -e '/\/appinfo\/associations/d' -i gio/tests/appinfo.c + # Needed because of libtool wrappers + sed -e '/g_subprocess_launcher_set_environ (launcher, envp);/a g_subprocess_launcher_setenv (launcher, "PATH", g_getenv("PATH"), TRUE);' -i gio/tests/gsubprocess.c + '' + + lib.optionalString stdenv.hostPlatform.isWindows '' + substituteInPlace gio/win32/meson.build \ + --replace "libintl, " "" + ''; postConfigure = '' patchShebangs gio/gdbus-2.0/codegen/gdbus-codegen gobject/glib-{genmarshal,mkenums} @@ -258,8 +326,6 @@ stdenv.mkDerivation (finalAttrs: { moveToOutput "share/doc" "$devdoc" ''; - nativeCheckInputs = [ tzdata desktop-file-utils shared-mime-info ]; - # Conditional necessary to break infinite recursion with passthru.tests preCheck = lib.optionalString finalAttrs.finalPackage.doCheck or config.doCheckByDefault or false '' export LD_LIBRARY_PATH="$NIX_BUILD_TOP/glib-${finalAttrs.version}/glib/.libs''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH" @@ -302,7 +368,9 @@ stdenv.mkDerivation (finalAttrs: { getSchemaDataDirPath = pkg: makeSchemaDataDirPath pkg pkg.name; tests = { - withChecks = finalAttrs.finalPackage.overrideAttrs (_: { doCheck = true; }); + withChecks = finalAttrs.finalPackage.overrideAttrs (_: { + doCheck = true; + }); pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage; }; @@ -326,15 +394,20 @@ stdenv.mkDerivation (finalAttrs: { meta = with lib; { description = "C library of programming buildings blocks"; - homepage = "https://gitlab.gnome.org/GNOME/glib"; - license = licenses.lgpl21Plus; - maintainers = teams.gnome.members ++ (with maintainers; [ lovek323 raskin ]); + homepage = "https://gitlab.gnome.org/GNOME/glib"; + license = licenses.lgpl21Plus; + maintainers = + teams.gnome.members + ++ (with maintainers; [ + lovek323 + raskin + ]); pkgConfigModules = [ "gio-2.0" "gobject-2.0" "gthread-2.0" ]; - platforms = platforms.unix ++ platforms.windows; + platforms = platforms.unix ++ platforms.windows; longDescription = '' GLib provides the core application building blocks for libraries From f9f55e4b29c729ec0590a7c7c2b1ed8193ac7495 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Sun, 22 Dec 2024 03:17:16 +0100 Subject: [PATCH 2/2] glib: move to by-name --- .../libraries => by-name/gl}/glib/darwin-compilation.patch | 0 .../gl}/glib/elementary-terminal-support.patch | 0 .../{development/libraries => by-name/gl}/glib/gdb_script.patch | 0 .../libraries => by-name/gl}/glib/glib-appinfo-watch.patch | 0 .../libraries => by-name/gl}/glib/gobject_init_on_demand.patch | 0 .../libraries/glib/default.nix => by-name/gl/glib/package.nix} | 0 .../libraries => by-name/gl}/glib/quark_init_on_demand.patch | 0 .../gl}/glib/schema-override-variable.patch | 0 pkgs/{development/libraries => by-name/gl}/glib/setup-hook.sh | 0 .../libraries => by-name/gl}/glib/split-dev-programs.patch | 0 pkgs/top-level/all-packages.nix | 2 +- 11 files changed, 1 insertion(+), 1 deletion(-) rename pkgs/{development/libraries => by-name/gl}/glib/darwin-compilation.patch (100%) rename pkgs/{development/libraries => by-name/gl}/glib/elementary-terminal-support.patch (100%) rename pkgs/{development/libraries => by-name/gl}/glib/gdb_script.patch (100%) rename pkgs/{development/libraries => by-name/gl}/glib/glib-appinfo-watch.patch (100%) rename pkgs/{development/libraries => by-name/gl}/glib/gobject_init_on_demand.patch (100%) rename pkgs/{development/libraries/glib/default.nix => by-name/gl/glib/package.nix} (100%) rename pkgs/{development/libraries => by-name/gl}/glib/quark_init_on_demand.patch (100%) rename pkgs/{development/libraries => by-name/gl}/glib/schema-override-variable.patch (100%) rename pkgs/{development/libraries => by-name/gl}/glib/setup-hook.sh (100%) rename pkgs/{development/libraries => by-name/gl}/glib/split-dev-programs.patch (100%) diff --git a/pkgs/development/libraries/glib/darwin-compilation.patch b/pkgs/by-name/gl/glib/darwin-compilation.patch similarity index 100% rename from pkgs/development/libraries/glib/darwin-compilation.patch rename to pkgs/by-name/gl/glib/darwin-compilation.patch diff --git a/pkgs/development/libraries/glib/elementary-terminal-support.patch b/pkgs/by-name/gl/glib/elementary-terminal-support.patch similarity index 100% rename from pkgs/development/libraries/glib/elementary-terminal-support.patch rename to pkgs/by-name/gl/glib/elementary-terminal-support.patch diff --git a/pkgs/development/libraries/glib/gdb_script.patch b/pkgs/by-name/gl/glib/gdb_script.patch similarity index 100% rename from pkgs/development/libraries/glib/gdb_script.patch rename to pkgs/by-name/gl/glib/gdb_script.patch diff --git a/pkgs/development/libraries/glib/glib-appinfo-watch.patch b/pkgs/by-name/gl/glib/glib-appinfo-watch.patch similarity index 100% rename from pkgs/development/libraries/glib/glib-appinfo-watch.patch rename to pkgs/by-name/gl/glib/glib-appinfo-watch.patch diff --git a/pkgs/development/libraries/glib/gobject_init_on_demand.patch b/pkgs/by-name/gl/glib/gobject_init_on_demand.patch similarity index 100% rename from pkgs/development/libraries/glib/gobject_init_on_demand.patch rename to pkgs/by-name/gl/glib/gobject_init_on_demand.patch diff --git a/pkgs/development/libraries/glib/default.nix b/pkgs/by-name/gl/glib/package.nix similarity index 100% rename from pkgs/development/libraries/glib/default.nix rename to pkgs/by-name/gl/glib/package.nix diff --git a/pkgs/development/libraries/glib/quark_init_on_demand.patch b/pkgs/by-name/gl/glib/quark_init_on_demand.patch similarity index 100% rename from pkgs/development/libraries/glib/quark_init_on_demand.patch rename to pkgs/by-name/gl/glib/quark_init_on_demand.patch diff --git a/pkgs/development/libraries/glib/schema-override-variable.patch b/pkgs/by-name/gl/glib/schema-override-variable.patch similarity index 100% rename from pkgs/development/libraries/glib/schema-override-variable.patch rename to pkgs/by-name/gl/glib/schema-override-variable.patch diff --git a/pkgs/development/libraries/glib/setup-hook.sh b/pkgs/by-name/gl/glib/setup-hook.sh similarity index 100% rename from pkgs/development/libraries/glib/setup-hook.sh rename to pkgs/by-name/gl/glib/setup-hook.sh diff --git a/pkgs/development/libraries/glib/split-dev-programs.patch b/pkgs/by-name/gl/glib/split-dev-programs.patch similarity index 100% rename from pkgs/development/libraries/glib/split-dev-programs.patch rename to pkgs/by-name/gl/glib/split-dev-programs.patch diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 27d706ce16a6f..14752cfb4d9ae 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -9298,7 +9298,7 @@ with pkgs; grantlee = libsForQt5.callPackage ../development/libraries/grantlee { }; - glib = callPackage ../development/libraries/glib (let + glib = callPackage ../by-name/gl/glib/package.nix (let glib-untested = glib.overrideAttrs { doCheck = false; }; in { # break dependency cycles