@@ -636,32 +636,70 @@ func cloudInitOptionalWriteFiles(cfg Config) string {
636636 content: |
637637 #!/bin/sh
638638 set -eu
639+ requested_mode="${1:-${CRABBOX_DESKTOP_THEME:-}}"
639640 user="${CRABBOX_DESKTOP_USER:-crabbox}"
640641 home_dir="$(getent passwd "$user" | cut -d: -f6)"
641642 if [ -z "$home_dir" ]; then
642643 home_dir="/home/$user"
643644 fi
644645 config_dir="$home_dir/.config"
645- gtk_theme=Adwaita-dark
646- for candidate in Arc-Dark Greybird-dark Adwaita-dark Greybird; do
646+ mode="$requested_mode"
647+ if [ -z "$mode" ] && [ -f "$config_dir/crabbox/desktop-theme" ]; then
648+ mode="$(cat "$config_dir/crabbox/desktop-theme" 2>/dev/null || true)"
649+ fi
650+ case "$mode" in
651+ light|dark) ;;
652+ *) mode=dark ;;
653+ esac
654+ if [ "$mode" = "light" ]; then
655+ gtk_theme=Adwaita
656+ gtk_prefer_dark=false
657+ gtk_prefer_dark_ini=0
658+ gsettings_scheme=prefer-light
659+ root_color="#f4f6f8"
660+ terminal_fg="#1f2937"
661+ terminal_bg="#f8fafc"
662+ terminal_cursor="#111827"
663+ panel_rgba="0.94 0.95 0.97 1"
664+ panel_css_bg="#eef2f7"
665+ panel_css_fg="#111827"
666+ gtk_candidates="Arc Greybird Adwaita"
667+ xfwm_candidates="Arc Greybird Daloa Default"
668+ else
669+ gtk_theme=Adwaita-dark
670+ gtk_prefer_dark=true
671+ gtk_prefer_dark_ini=1
672+ gsettings_scheme=prefer-dark
673+ root_color="#20242b"
674+ terminal_fg="#e5e7eb"
675+ terminal_bg="#111827"
676+ terminal_cursor="#f3f4f6"
677+ panel_rgba="0.12 0.13 0.15 1"
678+ panel_css_bg="#20242b"
679+ panel_css_fg="#e5e7eb"
680+ gtk_candidates="Arc-Dark Greybird-dark Adwaita-dark Greybird"
681+ xfwm_candidates="Arc-Dark Greybird-dark Daloa Default"
682+ fi
683+ for candidate in $gtk_candidates; do
647684 if [ -d "/usr/share/themes/$candidate/gtk-3.0" ]; then
648685 gtk_theme="$candidate"
649686 break
650687 fi
651688 done
652689 xfwm_theme=Default
653- for candidate in Arc-Dark Greybird-dark Daloa Default ; do
690+ for candidate in $xfwm_candidates ; do
654691 if [ -d "/usr/share/themes/$candidate/xfwm4" ]; then
655692 xfwm_theme="$candidate"
656693 break
657694 fi
658695 done
659696 if [ "$(id -u)" -eq 0 ]; then
660- install -d -m 0700 -o "$user" "$config_dir/xfce4/xfconf/xfce-perchannel-xml" "$config_dir/xfce4/terminal" "$config_dir/gtk-3.0"
697+ install -d -m 0700 -o "$user" "$config_dir/xfce4/xfconf/xfce-perchannel-xml" "$config_dir/xfce4/terminal" "$config_dir/gtk-3.0" "$config_dir/crabbox"
661698 else
662- mkdir -p "$config_dir/xfce4/xfconf/xfce-perchannel-xml" "$config_dir/xfce4/terminal" "$config_dir/gtk-3.0"
663- chmod 0700 "$config_dir" "$config_dir/xfce4" "$config_dir/xfce4/xfconf" "$config_dir/xfce4/xfconf/xfce-perchannel-xml" "$config_dir/xfce4/terminal" "$config_dir/gtk-3.0"
699+ mkdir -p "$config_dir/xfce4/xfconf/xfce-perchannel-xml" "$config_dir/xfce4/terminal" "$config_dir/gtk-3.0" "$config_dir/crabbox"
700+ chmod 0700 "$config_dir" "$config_dir/xfce4" "$config_dir/xfce4/xfconf" "$config_dir/xfce4/xfconf/xfce-perchannel-xml" "$config_dir/xfce4/terminal" "$config_dir/gtk-3.0" "$config_dir/crabbox"
664701 fi
702+ printf '%s\n' "$mode" > "$config_dir/crabbox/desktop-theme"
665703 cat > "$config_dir/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml" <<XML
666704 <?xml version="1.0" encoding="UTF-8"?>
667705 <channel name="xsettings" version="1.0">
@@ -670,7 +708,7 @@ func cloudInitOptionalWriteFiles(cfg Config) string {
670708 <property name="IconThemeName" type="string" value="Adwaita"/>
671709 </property>
672710 <property name="Gtk" type="empty">
673- <property name="ApplicationPreferDarkTheme" type="bool" value="true "/>
711+ <property name="ApplicationPreferDarkTheme" type="bool" value="$gtk_prefer_dark "/>
674712 </property>
675713 </channel>
676714 XML
@@ -684,38 +722,99 @@ func cloudInitOptionalWriteFiles(cfg Config) string {
684722 </channel>
685723 XML
686724 fi
687- cat > "$config_dir/xfce4/terminal/terminalrc" <<' EOF'
725+ cat > "$config_dir/xfce4/terminal/terminalrc" <<EOF
688726 [Configuration]
689- ColorForeground=#e5e7eb
690- ColorBackground=#111827
691- ColorCursor=#f3f4f6
727+ ColorForeground=$terminal_fg
728+ ColorBackground=$terminal_bg
729+ ColorCursor=$terminal_cursor
692730 MiscBell=FALSE
693731 EOF
694732 cat > "$config_dir/gtk-3.0/settings.ini" <<EOF
695733 [Settings]
696734 gtk-theme-name=$gtk_theme
697735 gtk-icon-theme-name=Adwaita
698- gtk-application-prefer-dark-theme=1
736+ gtk-application-prefer-dark-theme=$gtk_prefer_dark_ini
699737 EOF
700738 cat > "$home_dir/.gtkrc-2.0" <<EOF
701739 gtk-theme-name="$gtk_theme"
702740 gtk-icon-theme-name="Adwaita"
703- gtk-application-prefer-dark-theme=1
741+ gtk-application-prefer-dark-theme=$gtk_prefer_dark_ini
704742 EOF
743+ css_file="$config_dir/gtk-3.0/gtk.css"
744+ css_tmp="$(mktemp)"
745+ if [ -f "$css_file" ]; then
746+ sed '/^[/][*] crabbox desktop theme start [*][/]$/,/^[/][*] crabbox desktop theme end [*][/]$/d' "$css_file" > "$css_tmp" || true
747+ fi
748+ cat >> "$css_tmp" <<EOF
749+ /* crabbox desktop theme start */
750+ .xfce4-panel { background: $panel_css_bg; background-color: $panel_css_bg; color: $panel_css_fg; }
751+ .xfce4-panel * { color: $panel_css_fg; text-shadow: none; -gtk-icon-shadow: none; }
752+ .xfce4-panel button,
753+ .xfce4-panel button.flat,
754+ .xfce4-panel button:hover,
755+ .xfce4-panel button:active,
756+ .xfce4-panel button:checked,
757+ .xfce4-panel button:focus,
758+ .xfce4-panel button:backdrop,
759+ .xfce4-panel .tasklist button,
760+ .xfce4-panel .tasklist button:hover,
761+ .xfce4-panel .tasklist button:active,
762+ .xfce4-panel .tasklist button:checked,
763+ .xfce4-panel .tasklist button:checked:hover,
764+ .xfce4-panel .tasklist button:focus,
765+ .xfce4-panel .tasklist button:backdrop,
766+ .xfce4-panel .tasklist .toggle,
767+ .xfce4-panel .tasklist .toggle:hover,
768+ .xfce4-panel .tasklist .toggle:checked,
769+ .xfce4-panel .tasklist .toggle:checked:hover,
770+ .xfce4-panel .tasklist button:checked,
771+ .xfce4-panel .tasklist button:active {
772+ background: $panel_css_bg;
773+ background-image: none;
774+ background-color: $panel_css_bg;
775+ border-image: none;
776+ border-color: $panel_css_fg;
777+ box-shadow: none;
778+ color: $panel_css_fg;
779+ outline-color: transparent;
780+ text-shadow: none;
781+ -gtk-icon-shadow: none;
782+ }
783+ .xfce4-panel .tasklist button label,
784+ .xfce4-panel .tasklist .toggle label {
785+ color: $panel_css_fg;
786+ text-shadow: none;
787+ }
788+ /* crabbox desktop theme end */
789+ EOF
790+ mv "$css_tmp" "$css_file"
705791 if [ "$(id -u)" -eq 0 ]; then
706792 chown -R "$user" "$config_dir" "$home_dir/.gtkrc-2.0"
707793 fi
708794 if [ -n "${DISPLAY:-}" ] && command -v xfconf-query >/dev/null 2>&1; then
709795 xfconf-query -c xsettings -p /Net/ThemeName -n -t string -s "$gtk_theme" >/dev/null 2>&1 || true
710796 xfconf-query -c xsettings -p /Net/IconThemeName -n -t string -s Adwaita >/dev/null 2>&1 || true
711- xfconf-query -c xsettings -p /Gtk/ApplicationPreferDarkTheme -n -t bool -s true >/dev/null 2>&1 || true
797+ xfconf-query -c xsettings -p /Gtk/ApplicationPreferDarkTheme -n -t bool -s "$gtk_prefer_dark" >/dev/null 2>&1 || true
712798 xfconf-query -c xfwm4 -p /general/theme -n -t string -s "$xfwm_theme" >/dev/null 2>&1 || true
713- xfconf-query -c xfce4-panel -p /panels/dark-mode -n -t bool -s true >/dev/null 2>&1 || true
714- pkill -USR1 -x xfce4-panel >/dev/null 2>&1 || true
715- xfwm4 --replace >/tmp/crabbox-xfwm4-replace.log 2>&1 &
799+ xfconf-query -c xfce4-panel -p /panels/dark-mode -n -t bool -s "$gtk_prefer_dark" >/dev/null 2>&1 || true
800+ set -- $panel_rgba
801+ for panel_id in panel-1 panel-2; do
802+ xfconf-query -c xfce4-panel -p "/panels/$panel_id/background-style" -n -t int -s 1 >/dev/null 2>&1 || true
803+ xfconf-query -c xfce4-panel -p "/panels/$panel_id/background-rgba" -n -a -t double -s "$1" -t double -s "$2" -t double -s "$3" -t double -s "$4" >/dev/null 2>&1 || true
804+ done
805+ if [ "$(id -un)" = "$user" ]; then
806+ pkill -TERM -x xfce4-panel >/dev/null 2>&1 || true
807+ (sleep 0.4; xfce4-panel >"/tmp/crabbox-xfce4-panel-$user.log" 2>&1 &) >/dev/null 2>&1 &
808+ else
809+ pkill -USR1 -x xfce4-panel >/dev/null 2>&1 || true
810+ fi
811+ xfwm4 --replace >"/tmp/crabbox-xfwm4-replace-$user.log" 2>&1 &
812+ fi
813+ if [ -n "${DISPLAY:-}" ] && command -v xsetroot >/dev/null 2>&1; then
814+ xsetroot -solid "$root_color" || true
716815 fi
717816 if command -v gsettings >/dev/null 2>&1; then
718- gsettings set org.gnome.desktop.interface color-scheme prefer-dark >/dev/null 2>&1 || true
817+ gsettings set org.gnome.desktop.interface color-scheme "$gsettings_scheme" >/dev/null 2>&1 || true
719818 gsettings set org.gnome.desktop.interface gtk-theme "$gtk_theme" >/dev/null 2>&1 || true
720819 fi
721820 - path: /etc/systemd/system/crabbox-desktop.service
@@ -741,9 +840,6 @@ func cloudInitOptionalWriteFiles(cfg Config) string {
741840 set -eu
742841 export DISPLAY="${DISPLAY:-:99}"
743842 CRABBOX_DESKTOP_USER="$(id -un)" /usr/local/bin/crabbox-configure-desktop-theme || true
744- if command -v xsetroot >/dev/null 2>&1; then
745- xsetroot -solid '#20242b' || true
746- fi
747843 if command -v xfce4-terminal >/dev/null 2>&1 && ! pgrep -u "$(id -u)" -f 'xfce4-terminal.*Crabbox Desktop' >/dev/null 2>&1; then
748844 xfce4-terminal --title='Crabbox Desktop' --geometry=110x32+48+48 &
749845 elif command -v xterm >/dev/null 2>&1 && ! pgrep -u "$(id -u)" -f 'xterm -title Crabbox Desktop' >/dev/null 2>&1; then
0 commit comments