From f4208fe9f91ece19e4ecfe040400bb245d26c408 Mon Sep 17 00:00:00 2001 From: Edmund Wu Date: Wed, 8 Apr 2020 17:04:57 -0400 Subject: [PATCH 1/5] nixos/plymouth: use upstream defaults https://gitlab.freedesktop.org/plymouth/plymouth/-/issues/101 https://gitlab.freedesktop.org/plymouth/plymouth/-/blob/75204a2517658c01bd1d39f2dff845512c9cab12/src/plymouthd.defaults --- nixos/modules/system/boot/plymouth.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/modules/system/boot/plymouth.nix b/nixos/modules/system/boot/plymouth.nix index ef916899944..f16ff26a672 100644 --- a/nixos/modules/system/boot/plymouth.nix +++ b/nixos/modules/system/boot/plymouth.nix @@ -24,6 +24,7 @@ let configFile = pkgs.writeText "plymouthd.conf" '' [Daemon] ShowDelay=0 + DeviceTimeout=8 Theme=${cfg.theme} ${cfg.extraConfig} ''; From dd8805658ec27ef62e1b0a31ce0fb16f59f9df6d Mon Sep 17 00:00:00 2001 From: WORLDofPEACE Date: Sun, 21 Feb 2021 16:03:54 -0500 Subject: [PATCH 2/5] plymouth: 0.9.4 -> 2020-12-07 * default to bgrt * don't use KillMode=none https://gitlab.freedesktop.org/plymouth/plymouth/-/issues/123 * multiple outputs * fix spinfinity logo file --- pkgs/os-specific/linux/plymouth/default.nix | 111 ++++++++++++++------ 1 file changed, 79 insertions(+), 32 deletions(-) diff --git a/pkgs/os-specific/linux/plymouth/default.nix b/pkgs/os-specific/linux/plymouth/default.nix index c167b202c8d..8cb2a00987e 100644 --- a/pkgs/os-specific/linux/plymouth/default.nix +++ b/pkgs/os-specific/linux/plymouth/default.nix @@ -1,64 +1,111 @@ -{ stdenv, fetchurl, autoreconfHook, pkg-config, libxslt, docbook_xsl -, gtk3, udev, systemd, lib +{ lib +, stdenv +, fetchpatch +, fetchFromGitLab +, pkg-config +, autoreconfHook +, libxslt +, docbook-xsl-nons +, gettext +, gtk3 +, systemd +, pango +, cairo +, libdrm }: stdenv.mkDerivation rec { - pname = "plymouth"; - version = "0.9.4"; + pname = "plymouth-unstable"; + version = "2020-12-07"; - src = fetchurl { - url = "https://www.freedesktop.org/software/plymouth/releases/${pname}-${version}.tar.xz"; - sha256 = "0l8kg7b2vfxgz9gnrn0v2w4jvysj2cirp0nxads5sy05397pl6aa"; + outputs = [ + "out" + "dev" + ]; + + src = fetchFromGitLab { + domain = "gitlab.freedesktop.org"; + owner = "plymouth"; + repo = "plymouth"; + rev = "c4ced2a2d70edea7fbb95274aa1d01d95928df1b"; + sha256 = "7CPuKMA0fTt8DBsaA4Td74kHT/O7PW8N3awP04nUnOI="; }; nativeBuildInputs = [ - autoreconfHook pkg-config libxslt docbook_xsl + autoreconfHook + docbook-xsl-nons + gettext + libxslt + pkg-config ]; buildInputs = [ - gtk3 udev systemd + cairo + gtk3 + libdrm + pango + systemd + ]; + + patches = [ + # KillMode=none is deprecated + # https://gitlab.freedesktop.org/plymouth/plymouth/-/issues/123 + (fetchpatch { + url = "https://gitlab.freedesktop.org/plymouth/plymouth/-/commit/b406b0895a95949db2adfedaeda451f36f2b51c3.patch"; + sha256 = "/UBImNuFO0G/oxlttjGIXon8YXMXlc9XU8uVuR9QuxY="; + }) ]; postPatch = '' sed -i \ - -e "s#\$(\$PKG_CONFIG --variable=systemdsystemunitdir systemd)#$out/etc/systemd/system#g" \ -e "s#plymouthplugindir=.*#plymouthplugindir=/etc/plymouth/plugins/#" \ -e "s#plymouththemedir=.*#plymouththemedir=/etc/plymouth/themes#" \ -e "s#plymouthpolicydir=.*#plymouthpolicydir=/etc/plymouth/#" \ + -e "s#plymouthconfdir=.*#plymouthconfdir=/etc/plymouth/#" \ configure.ac ''; + configurePlatforms = [ "host" ]; + configureFlags = [ - "--sysconfdir=/etc" - "--with-systemdunitdir=${placeholder "out"}/etc/systemd/system" - "--localstatedir=/var" - "--with-logo=/etc/plymouth/logo.png" - "--with-background-color=0x000000" - "--with-background-start-color-stop=0x000000" - "--with-background-end-color-stop=0x000000" - "--with-release-file=/etc/os-release" - "--without-system-root-install" - "--without-rhgb-compat-link" - "--enable-tracing" - "--enable-systemd-integration" - "--enable-pango" - "--enable-gdm-transition" + "--enable-documentation" + "--enable-drm" "--enable-gtk" + "--enable-pango" + "--enable-systemd-integration" + "--enable-tracing" + "--localstatedir=/var" + "--sysconfdir=/etc" + "--with-background-color=0x000000" + "--with-background-end-color-stop=0x000000" + "--with-background-start-color-stop=0x000000" + "--with-logo=/etc/plymouth/logo.png" + "--with-release-file=/etc/os-release" + "--with-runtimedir=/run" + "--with-systemdunitdir=${placeholder "out"}/etc/systemd/system" + "--without-rhgb-compat-link" + "--without-system-root-install" "ac_cv_path_SYSTEMD_ASK_PASSWORD_AGENT=${lib.getBin systemd}/bin/systemd-tty-ask-password-agent" ]; - configurePlatforms = [ "host" ]; - installFlags = [ - "plymouthd_defaultsdir=$(out)/share/plymouth" - "plymouthd_confdir=$(out)/etc/plymouth" + "localstatedir=\${TMPDIR}" + "plymouthd_confdir=${placeholder "out"}/etc/plymouth" + "plymouthd_defaultsdir=${placeholder "out"}/share/plymouth" + "sysconfdir=${placeholder "out"}/etc" ]; + postInstall = '' + # Makes a symlink to /usr/share/pixmaps/system-logo-white.png + # We'll handle it in the nixos module. + rm $out/share/plymouth/themes/spinfinity/header-image.png + ''; + meta = with lib; { - homepage = "http://www.freedesktop.org/wiki/Software/Plymouth"; - description = "A graphical boot animation"; - license = licenses.gpl2; - maintainers = [ maintainers.goibhniu ]; + homepage = "https://www.freedesktop.org/wiki/Software/Plymouth/"; + description = "Boot splash and boot logger"; + license = licenses.gpl2Plus; + maintainers = [ maintainers.goibhniu teams.gnome.members ]; platforms = platforms.linux; }; } From 726dd9804ef249d8d20832e37b9e52caf340c534 Mon Sep 17 00:00:00 2001 From: WORLDofPEACE Date: Mon, 22 Feb 2021 07:35:00 -0500 Subject: [PATCH 3/5] nixos/plymouth: exit on missing theme Much better to provide a helpful message than to get an obscure sed message. --- nixos/modules/system/boot/plymouth.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/nixos/modules/system/boot/plymouth.nix b/nixos/modules/system/boot/plymouth.nix index f16ff26a672..554e8bf375d 100644 --- a/nixos/modules/system/boot/plymouth.nix +++ b/nixos/modules/system/boot/plymouth.nix @@ -118,6 +118,12 @@ in copy_bin_and_libs ${pkgs.plymouth}/bin/plymouthd copy_bin_and_libs ${pkgs.plymouth}/bin/plymouth + # Check if the actual requested theme is here + if [[ ! -d ${themesEnv}/share/plymouth/themes/${cfg.theme} ]]; then + echo "The requested theme: ${cfg.theme} is not provided by any of the packages in boot.plymouth.themePackages" + exit 1 + fi + moduleName="$(sed -n 's,ModuleName *= *,,p' ${themesEnv}/share/plymouth/themes/${cfg.theme}/${cfg.theme}.plymouth)" mkdir -p $out/lib/plymouth/renderers From 6bd4f9a3c5f4c814f3d0eac5f89deacc97fbb360 Mon Sep 17 00:00:00 2001 From: WORLDofPEACE Date: Mon, 22 Feb 2021 07:40:00 -0500 Subject: [PATCH 4/5] nixos/plymouth: use bgrt theme The BGRT theme is probably a close as to "FlickerFree" we can get without https://github.com/NixOS/nixpkgs/pull/74842. It's more agnostic than the Breeze theme. We also install all of themes provided by the packages, as it's possible that one theme needs the ImageDir of another, and they're small files anyways. Lastly, how plymouth handles logo and header files is a total mess, so hopefully when they have an actual release we won't need to do all this symlinking. --- nixos/modules/system/boot/plymouth.nix | 57 +++++++++++++++++++------- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/nixos/modules/system/boot/plymouth.nix b/nixos/modules/system/boot/plymouth.nix index 554e8bf375d..35af20030cd 100644 --- a/nixos/modules/system/boot/plymouth.nix +++ b/nixos/modules/system/boot/plymouth.nix @@ -4,8 +4,7 @@ with lib; let - inherit (pkgs) plymouth; - inherit (pkgs) nixos-icons; + inherit (pkgs) plymouth nixos-icons; cfg = config.boot.plymouth; @@ -16,9 +15,31 @@ let osVersion = config.system.nixos.release; }; + plymouthLogos = pkgs.runCommand "plymouth-logos" { inherit (cfg) logo; } '' + mkdir -p $out + + # For themes that are compiled with PLYMOUTH_LOGO_FILE + mkdir -p $out/etc/plymouth + ln -s $logo $out/etc/plymouth/logo.png + + # Logo for bgrt theme + # Note this is technically an abuse of watermark for the bgrt theme + # See: https://gitlab.freedesktop.org/plymouth/plymouth/-/issues/95#note_813768 + mkdir -p $out/share/plymouth/themes/spinner + ln -s $logo $out/share/plymouth/themes/spinner/watermark.png + + # Logo for spinfinity theme + # See: https://gitlab.freedesktop.org/plymouth/plymouth/-/issues/106 + mkdir -p $out/share/plymouth/themes/spinfinity + ln -s $logo $out/share/plymouth/themes/spinfinity/header-image.png + ''; + themesEnv = pkgs.buildEnv { name = "plymouth-themes"; - paths = [ plymouth ] ++ cfg.themePackages; + paths = [ + plymouth + plymouthLogos + ] ++ cfg.themePackages; }; configFile = pkgs.writeText "plymouthd.conf" '' @@ -48,7 +69,7 @@ in }; themePackages = mkOption { - default = [ nixosBreezePlymouth ]; + default = lib.optional (cfg.theme == "breeze") nixosBreezePlymouth; type = types.listOf types.package; description = '' Extra theme packages for plymouth. @@ -56,7 +77,7 @@ in }; theme = mkOption { - default = "breeze"; + default = "bgrt"; type = types.str; description = '' Splash screen theme. @@ -111,12 +132,12 @@ in systemd.services.plymouth-poweroff.wantedBy = [ "poweroff.target" ]; systemd.services.plymouth-reboot.wantedBy = [ "reboot.target" ]; systemd.services.plymouth-read-write.wantedBy = [ "sysinit.target" ]; - systemd.services.systemd-ask-password-plymouth.wantedBy = ["multi-user.target"]; - systemd.paths.systemd-ask-password-plymouth.wantedBy = ["multi-user.target"]; + systemd.services.systemd-ask-password-plymouth.wantedBy = [ "multi-user.target" ]; + systemd.paths.systemd-ask-password-plymouth.wantedBy = [ "multi-user.target" ]; boot.initrd.extraUtilsCommands = '' - copy_bin_and_libs ${pkgs.plymouth}/bin/plymouthd - copy_bin_and_libs ${pkgs.plymouth}/bin/plymouth + copy_bin_and_libs ${plymouth}/bin/plymouth + copy_bin_and_libs ${plymouth}/bin/plymouthd # Check if the actual requested theme is here if [[ ! -d ${themesEnv}/share/plymouth/themes/${cfg.theme} ]]; then @@ -134,21 +155,29 @@ in mkdir -p $out/share/plymouth/themes cp ${plymouth}/share/plymouth/plymouthd.defaults $out/share/plymouth - # copy themes into working directory for patching + # Copy themes into working directory for patching mkdir themes - # use -L to copy the directories proper, not the symlinks to them - cp -r -L ${themesEnv}/share/plymouth/themes/{text,details,${cfg.theme}} themes - # patch out any attempted references to the theme or plymouth's themes directory + # Use -L to copy the directories proper, not the symlinks to them. + # Copy all themes because they're not large assets, and bgrt depends on the ImageDir of + # the spinner theme. + cp -r -L ${themesEnv}/share/plymouth/themes/* themes + + # Patch out any attempted references to the theme or plymouth's themes directory chmod -R +w themes find themes -type f | while read file do sed -i "s,/nix/.*/share/plymouth/themes,$out/share/plymouth/themes,g" $file done + # Install themes cp -r themes/* $out/share/plymouth/themes - cp ${cfg.logo} $out/share/plymouth/logo.png + # Install logo + mkdir -p $out/etc/plymouth + cp -r -L ${themesEnv}/etc/plymouth $out + + # Setup font mkdir -p $out/share/fonts cp ${cfg.font} $out/share/fonts mkdir -p $out/etc/fonts From 9e84dc00b00748abdad66812c2464fac189bad44 Mon Sep 17 00:00:00 2001 From: WORLDofPEACE Date: Thu, 25 Feb 2021 13:50:04 -0500 Subject: [PATCH 5/5] nixos/plymouth: use white nixos logo This looks cohesive with the spinner in the bgrt theme. --- nixos/modules/system/boot/plymouth.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nixos/modules/system/boot/plymouth.nix b/nixos/modules/system/boot/plymouth.nix index 35af20030cd..2a545e55251 100644 --- a/nixos/modules/system/boot/plymouth.nix +++ b/nixos/modules/system/boot/plymouth.nix @@ -86,7 +86,8 @@ in logo = mkOption { type = types.path; - default = "${nixos-icons}/share/icons/hicolor/128x128/apps/nix-snowflake.png"; + # Dimensions are 48x48 to match GDM logo + default = "${nixos-icons}/share/icons/hicolor/48x48/apps/nix-snowflake-white.png"; defaultText = ''pkgs.fetchurl { url = "https://nixos.org/logo/nixos-hires.png"; sha256 = "1ivzgd7iz0i06y36p8m5w48fd8pjqwxhdaavc0pxs7w1g7mcy5si";