]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
scripts: support populating from configurable theme dir
authorAlfonso Sánchez-Beato <alfonso.sanchez-beato@canonical.com>
Thu, 23 Sep 2021 12:46:23 +0000 (14:46 +0200)
committerRay Strode <halfline@gmail.com>
Mon, 27 Sep 2021 10:03:53 +0000 (10:03 +0000)
Support populating initramfs with themes from the configurable theme
directory.

scripts/plymouth-populate-initrd.in

index 0ff1f12455c8fa2d9292e9f1c1086492482f43cc..2703d483c9fa9f1f8451716a3c65f45756afdfd8 100755 (executable)
@@ -18,6 +18,7 @@
 [ -z "$PLYMOUTH_LOGO_FILE" ] && PLYMOUTH_LOGO_FILE="@PLYMOUTH_LOGO_FILE@"
 [ -n "$PLYMOUTH_THEME_NAME" ] && THEME_OVERRIDE=1
 [ -z "$PLYMOUTH_THEME_NAME" ] && PLYMOUTH_THEME_NAME=$(plymouth-set-default-theme)
+[ -n "$PLYMOUTH_CONFIGURED_DIR_PATH" ] && THEME_DIR_OVERRIDE=1
 [ -z "$PLYMOUTH_CONFDIR" ] && PLYMOUTH_CONFDIR="@PLYMOUTH_CONF_DIR@"
 [ -z "$PLYMOUTH_POLICYDIR" ] && PLYMOUTH_POLICYDIR="@PLYMOUTH_POLICY_DIR@"
 [ -z "$PLYMOUTH_DAEMON_PATH" ] && PLYMOUTH_DAEMON_PATH="@PLYMOUTH_DAEMON_DIR@/plymouthd"
@@ -374,6 +375,43 @@ inst_recur() {
     done
 }
 
+# $1: Configuration file
+# $2: Setting name
+function read_setting_from_file()
+{
+    echo $(grep -v '^#' $1 2> /dev/null |
+               awk '
+                        BEGIN {
+                        FS="[=[:space:]]+";
+                        OFS="";
+                        ORS=""
+                     }
+                     $1 ~/^'"$2"'$/ { print $2 }
+               ')
+}
+
+# $1: Configuration file
+function set_configured_theme_path_from_file()
+{
+    CONFIGURED_THEME_DIR=$(read_setting_from_file "$1" "ThemeDir")
+    CONFIGURED_THEME_NAME=$(read_setting_from_file "$1" "Theme")
+}
+
+function set_theme_dir()
+{
+    set_configured_theme_path_from_file ${PLYMOUTH_CONFDIR}/plymouthd.conf
+    if [ -z "$CONFIGURED_THEME_DIR" ] || [ ! -d "$CONFIGURED_THEME_DIR/$CONFIGURED_THEME_NAME" ]; then
+        set_configured_theme_path_from_file ${PLYMOUTH_POLICYDIR}/plymouthd.defaults
+    fi
+
+    if [ -n "$CONFIGURED_THEME_DIR" ] && [ -d "$CONFIGURED_THEME_DIR/$CONFIGURED_THEME_NAME" ]; then
+        PLYMOUTH_THEME_NAME=$CONFIGURED_THEME_NAME
+        PLYMOUTH_THEME_DIR=$CONFIGURED_THEME_DIR/$CONFIGURED_THEME_NAME
+    else
+        PLYMOUTH_THEME_DIR=$PLYMOUTH_DATADIR/plymouth/themes/$PLYMOUTH_THEME_NAME
+    fi
+}
+
 function usage() {
     local output="/proc/self/fd/1"
     local rc=0
@@ -432,6 +470,9 @@ if [ -z "$PLYMOUTH_THEME_NAME" ]; then
     exit 1
 fi
 
+set_theme_dir
+mkdir -p ${INITRDDIR}${PLYMOUTH_THEME_DIR}
+
 if [ $THEME_OVERRIDE ]; then
     conf=$INITRDDIR/${PLYMOUTH_CONFDIR}/plymouthd.conf
     echo "modifying plymouthd.conf: Theme=$PLYMOUTH_THEME_NAME" >&2
@@ -439,10 +480,15 @@ if [ $THEME_OVERRIDE ]; then
     grep -q "^ *\[Daemon\]" $conf || echo "[Daemon]" >> $conf
     grep -q "^ *Theme *=" $conf || echo "Theme=fade-in" >> $conf
     sed -i "s/^ *Theme *=.*/# theme modified by plymouth-populate-initrd\nTheme=$PLYMOUTH_THEME_NAME/" $conf
+    if [ "$THEME_DIR_OVERRIDE" ]; then
+        echo "modifying plymouthd.conf: ThemeDir=$PLYMOUTH_CONFIGURED_DIR_PATH" >&2
+        grep -q "^ *ThemeDir *=" $conf || echo "ThemeDir=/some/path" >> $conf
+        sed -i "s@^ *ThemeDir *=.*@# theme dir modified by plymouth-populate-initrd\nThemeDir=$PLYMOUTH_CONFIGURED_DIR_PATH@" $conf
+        PLYMOUTH_THEME_DIR=${PLYMOUTH_CONFIGURED_DIR_PATH}
+    fi
 fi
 
-PLYMOUTH_MODULE_NAME=$(grep "ModuleName *= *" ${PLYMOUTH_SYSROOT}${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ModuleName *= *//')
-PLYMOUTH_THEME_DIR="${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}"
+PLYMOUTH_MODULE_NAME=$(grep "ModuleName *= *" ${PLYMOUTH_SYSROOT}${PLYMOUTH_THEME_DIR}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ModuleName *= *//')
 PLYMOUTH_IMAGE_DIR=$(grep "ImageDir *= *" ${PLYMOUTH_SYSROOT}${PLYMOUTH_THEME_DIR}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ImageDir *= *//')
 
 if [ ! -f ${PLYMOUTH_SYSROOT}${PLYMOUTH_PLUGIN_PATH}/${PLYMOUTH_MODULE_NAME}.so ]; then