Name: sl-blue-dux-theme Version: 1.2.3 Release: 100.2.2%{?dist} Summary: Sl's blue theme for Dux Shell License: Apache-2.0 URL: https://slsrepo.com BuildArch: noarch Requires: jq Requires: dms Requires: shadow-utils Provides: sl-blue-dms-theme = %{version}-%{release} Obsoletes: sl-blue-dms-theme < 1.2.4 Conflicts: sl-blue-dms-theme < 1.2.3-2 %description Sl's theme for Dux Shell with blue colors, including a matching DankCalendar theme and Ghostty, Fuzzel, and Nautilus settings. %prep %build %install install -d %{buildroot}%{_datadir}/sl-blue-dms-theme install -d %{buildroot}%{_libexecdir} cat > %{buildroot}%{_datadir}/sl-blue-dms-theme/sl-blue.json <<'EOF_THEME' { "dark": { "name": "Sl Blue Dark", "primary": "#78B7FF", "secondary": "#A8CEFF", "primaryText": "#07131F", "primaryContainer": "#102840", "surfaceTint": "#78B7FF", "surface": "#1D2128", "surfaceText": "#F7FAFF", "surfaceVariant": "#262D37", "surfaceVariantText": "#C2CFDC", "background": "#15191F", "backgroundText": "#F7FAFF", "outline": "#6F91AD", "surfaceContainer": "#202731", "surfaceContainerHigh": "#2A3440", "surfaceContainerHighest": "#354556", "error": "#FF6961", "warning": "#FFB340", "info": "#64B5F6", "success": "#4CD964" }, "light": { "name": "Sl Blue Light", "primary": "#006EAE", "primaryText": "#FFFFFF", "primaryContainer": "#5A89AE", "primaryContainerText": "#FFFFFF", "secondary": "#277DB5", "secondaryText": "#FFFFFF", "secondaryContainer": "#6696B8", "secondaryContainerText": "#FFFFFF", "tertiary": "#3A82AE", "tertiaryText": "#FFFFFF", "tertiaryContainer": "#6B9ABA", "tertiaryContainerText": "#FFFFFF", "surfaceTint": "#0A84FF", "surface": "#6F9DBC", "surfaceText": "#FFFFFF", "surfaceVariant": "#6794B4", "surfaceVariantText": "#FFFFFF", "background": "#78A5C3", "backgroundText": "#FFFFFF", "outline": "#E6F3FC", "outlineVariant": "#C4DEEF", "surfaceContainerLowest": "#82ACC7", "surfaceContainerLow": "#78A4C2", "surfaceContainer": "#6D9BBB", "surfaceContainerHigh": "#6291B2", "surfaceContainerHighest": "#5788AA", "error": "#B3261E", "errorText": "#FFFFFF", "warning": "#9A5800", "info": "#00639A", "success": "#146C2E", "onPrimaryContainer": "#FFFFFF", "onSecondaryContainer": "#FFFFFF", "onTertiaryContainer": "#FFFFFF", "surfaceBright": "#88B1CA", "surfaceDim": "#5C8CAD", "inverseSurface": "#3E6E91", "inverseOnSurface": "#FFFFFF", "errorContainer": "#8C1D18", "errorContainerText": "#FFFFFF" } } EOF_THEME cat > %{buildroot}%{_datadir}/sl-blue-dms-theme/settings-overlay.json <<'EOF_OVERLAY' { "currentThemeName": "custom", "customThemeFile": "__SL_BLUE_THEME__", "registryThemeVariants": { "catppuccin": { "light": { "flavor": "latte", "accent": "blue" }, "dark": { "flavor": "frappe", "accent": "blue" } } }, "radiusStrength": 38, "blurBorderCustomColor": "#42a5f5", "fontFamily": "SF Pro Rounded", "monoFontFamily": "SF Mono", "displayFontFamily": "SF Pro Display", "fontScale": 1.1, "textRenderType": 2, "powerActionHoldDuration": 1, "powerMenuActions": [ "reboot", "logout", "poweroff", "lock", "restart", "suspend", "switchuser", "softreboot" ], "dockConfigs": [ { "id": "dock", "name": "Dock", "enabled": true, "screenPreferences": [ "all" ], "showOnLastDisplay": true, "position": 1, "mode": "compact", "taskbarAlign": "center", "widgetExpansion": "popout", "iconSize": 32, "spacing": 12, "itemSpacing": 4, "margin": 5, "bottomGap": 0, "transparency": 0.2, "followInterfaceStyle": true, "autoHide": false, "smartAutoHide": false, "useOverlayLayer": false, "editOnRightClick": false, "showOnFullscreen": false, "openOnOverview": false, "groupByApp": true, "separatePinnedAndRunningApps": false, "restoreSpecialWorkspaceOnClick": false, "isolateDisplays": false, "indicatorStyle": "circle", "borderEnabled": true, "borderColor": "surfaceText", "borderOpacity": 0.15, "borderThickness": 1, "launcherEnabled": true, "launcherLogoMode": "apps", "launcherLogoCustomPath": "__SL_BLUE_LOGO__", "launcherLogoColorOverride": "", "launcherLogoSizeOffset": 0, "launcherLogoBrightness": 0.5, "launcherLogoContrast": 1, "maxVisibleApps": 0, "maxVisibleRunningApps": 0, "showOverflowBadge": true, "showTrash": true, "trashFileManager": "nautilus", "trashCustomCommand": "", "magnification": false, "magnificationScale": 130, "magnificationProfile": "parabolic", "magnificationExpand": false, "order": [], "widgets": [ { "id": "dock_launcher", "widgetId": "dockLauncher", "enabled": true }, { "id": "dock_apps", "widgetId": "appsDock", "enabled": true, "appsDockColorizeActive": false, "appsDockEnlargeOnHover": false, "runningAppsCurrentWorkspace": false }, { "id": "dock_trash", "widgetId": "dockTrash", "enabled": true } ] } ], "currentThemeCategory": "custom", "popupTransparency": 0.2, "floatingWindowSyncGlobal": false, "floatingWindowTransparency": 0.33, "floatingWindowForegroundTransparency": 0.8, "dmsWindowsFloatingSeeded": [ "niri", "hyprland", "mango" ], "niriLayoutGapsOverride": -2, "niriLayoutRadiusOverride": 20, "niriLayoutBorderSize": 4, "touchpadScrollMethod": "two-finger", "audioShowStreamDevices": true, "motionEffect": 2, "m3ElevationOpacity": 10, "m3ElevationLightDirection": "bottom", "barElevationEnabled": false, "blurEnabled": true, "blurredWallpaperLayer": true, "systemTrayIconTintMode": "monochrome", "controlCenterWidgets": [ { "id": "user", "enabled": true, "w": 5, "h": 1, "background": true, "col": 0, "row": 0 }, { "id": "settings", "enabled": true, "w": 1, "h": 1, "col": 5, "row": 0 }, { "id": "lock", "enabled": true, "w": 1, "h": 1, "col": 6, "row": 0 }, { "id": "power", "enabled": true, "w": 1, "h": 1, "col": 7, "row": 0 }, { "id": "volumeSlider", "enabled": true, "w": 4, "h": 1, "col": 0, "row": 1 }, { "id": "brightnessSlider", "enabled": true, "deviceName": "backlight:gmux_backlight", "w": 4, "h": 1, "col": 4, "row": 1 }, { "id": "wifi", "enabled": true, "w": 4, "h": 1, "col": 0, "row": 2 }, { "id": "bluetooth", "enabled": true, "w": 4, "h": 1, "col": 4, "row": 2 }, { "id": "audioOutput", "enabled": true, "w": 4, "h": 1, "col": 0, "row": 3 }, { "id": "audioInput", "enabled": true, "w": 4, "h": 1, "col": 4, "row": 3 }, { "id": "nightMode", "enabled": true, "w": 4, "h": 1, "col": 0, "row": 4 }, { "id": "darkMode", "enabled": true, "w": 4, "h": 1, "col": 4, "row": 4 }, { "id": "builtin_vpn", "enabled": true, "w": 4, "h": 1, "col": 0, "row": 5 }, { "id": "idleInhibitor", "enabled": true, "w": 4, "h": 1, "col": 4, "row": 5 }, { "id": "diskUsage", "enabled": true, "instanceId": "mhwbcg743ip8b3xlo8lksd20k19aa7", "mountPath": "/", "w": 4, "h": 1, "col": 0, "row": 6 }, { "id": "builtin_cups", "enabled": true, "w": 4, "h": 1, "col": 4, "row": 6 }, { "id": "doNotDisturb", "enabled": true, "w": 4, "h": 1, "col": 0, "row": 7 }, { "id": "builtin_tailscale", "enabled": true, "w": 4, "h": 1, "col": 4, "row": 7 }, { "id": "builtin_display_profiles", "enabled": true, "w": 4, "h": 1, "col": 0, "row": 8 }, { "id": "plugin_autohide-toggle", "enabled": true, "w": 4, "h": 1, "col": 4, "row": 8 }, { "id": "edit", "enabled": true, "w": 1, "h": 1, "small": true, "col": 7, "row": 9 }, { "id": "runningApps", "enabled": true, "w": 4.5, "h": 1, "col": 0, "row": 9, "small": true } ], "bluetoothMprisEnabled": true, "appIdSubstitutions": [ { "pattern": "Spotify", "replacement": "spotify", "type": "exact" }, { "pattern": "beepertexts", "replacement": "beeper", "type": "exact" }, { "pattern": "home assistant desktop", "replacement": "homeassistant-desktop", "type": "exact" }, { "pattern": "com.transmissionbt.transmission", "replacement": "transmission-gtk", "type": "contains" }, { "pattern": "^steam_app_(\\d+)$", "replacement": "steam_icon_$1", "type": "regex" }, { "pattern": "localsend", "replacement": "org.localsend.localsend_app", "type": "exact" }, { "pattern": "Fastmail", "replacement": "com-fastmail-fastmail", "type": "exact" }, { "pattern": "Fastmail", "replacement": "com.fastmail.Fastmail", "type": "exact" } ], "clockDateFormat": "ddd, d בMMM", "spotlightSectionViewModes": { "apps": "grid" }, "appDrawerSectionViewModes": { "apps": "grid" }, "dankLauncherV2BorderEnabled": true, "dankLauncherV2IncludeFilesInAll": true, "dankLauncherV2IncludeFoldersInAll": true, "launcherUseOverlayLayer": true, "spotlightBarShowModeChips": true, "dashTabs": [ { "id": "overview", "enabled": true }, { "id": "media", "enabled": true }, { "id": "wallpaper", "enabled": true }, { "id": "weather", "enabled": true }, { "id": "notifications", "enabled": true } ], "dashOptions": { "media": { "animatedArt": true, "titleFont": "ui" }, "weather": { "city": true }, "wellbeing": { "panelRows": 5 } }, "networkPreference": "wifi", "iconThemeDark": "Darwin", "cursorSettings": { "theme": "macOS-27", "size": 32, "niri": { "hideWhenTyping": false, "hideAfterInactiveMs": 0 }, "hyprland": { "hideOnKeyPress": false, "hideOnTouch": false, "inactiveTimeout": 0 }, "dwl": { "cursorHideTimeout": 0 } }, "useSystemSoundTheme": true, "muteSoundsWhenMediaPlaying": false, "batteryNotifyLow": true, "batteryCriticalNotificationType": 0, "loginctlLockIntegration": false, "matugenTemplateNeovim": true, "modalDarkenBackground": false, "maxFprintTries": 3, "notificationDndWhileScreenSharing": false, "notificationFocusedMonitor": true, "osdAlwaysShowValue": true, "osdPosition": 0, "osdMediaPlaybackEnabled": true, "osdPowerProfileEnabled": true, "customPowerActionLock": "loginctl lock-session", "updaterCheckOnStart": true, "updaterAllowAUR": false, "screenPreferences": { "wallpaper": [ "all" ] }, "displayShowDisconnected": true, "barConfigs": [ { "id": "default", "name": "Main Bar", "enabled": true, "position": 0, "screenPreferences": [ "all" ], "showOnLastDisplay": false, "leftWidgets": [ { "id": "launcherButton", "enabled": true, "launcherLogoMode": "custom", "launcherLogoCustomPath": "__SL_BLUE_LOGO__", "launcherLogoSizeOffset": -5 }, { "id": "workspaceSwitcher", "enabled": true, "showWorkspaceIndex": true, "workspaceFollowFocus": true, "workspaceOccupiedColorMode": "secondaryContainer", "workspaceFocusedBorderEnabled": true, "workspaceFocusedBorderColor": "secondaryContainer" }, { "id": "focusedWindow", "enabled": true, "focusedWindowShowIcon": false } ], "centerWidgets": [], "rightWidgets": [ { "id": "music", "enabled": true }, { "id": "privacyIndicator", "enabled": true }, { "id": "systemTray", "enabled": true }, { "id": "cpuUsage", "enabled": true, "minimumWidth": true }, { "id": "memUsage", "enabled": true, "minimumWidth": true, "showInGb": false }, { "id": "systemUpdate", "enabled": true }, { "id": "colorPicker", "enabled": true }, { "id": "clipboard", "enabled": true }, { "id": "weather", "enabled": true }, { "id": "keyboard_layout_name", "enabled": true, "keyboardLayoutNameCompactMode": false, "keyboardLayoutNameShowIcon": false }, { "id": "battery", "enabled": true, "showBatteryPowerDischarging": true, "showBatteryPowerCharging": true, "showBatteryTime": true }, { "id": "controlCenterButton", "enabled": true, "showMicIcon": false, "showMicPercent": false, "showBrightnessIcon": false, "showBrightnessPercent": false, "showIdleInhibitorIcon": true, "showDoNotDisturbIcon": true, "showAudioPercent": false, "showPrinterIcon": true }, { "id": "notificationButton", "enabled": true }, { "id": "clock", "enabled": true } ], "spacing": 4, "innerPadding": 4, "bottomGap": 0, "transparency": 0, "widgetTransparency": 0.25, "squareCorners": false, "noBackground": false, "gothCornersEnabled": false, "gothCornerRadiusOverride": false, "gothCornerRadiusValue": 12, "borderEnabled": false, "borderColor": "surfaceText", "borderOpacity": 1, "borderThickness": 1, "fontScale": 1, "autoHide": false, "autoHideDelay": 250, "openOnOverview": false, "visible": true, "popupGapsAuto": true, "popupGapsManual": 4, "widgetOutlineEnabled": true, "shadowColorMode": "default", "maximizeWidgetText": false, "maximizeWidgetIcons": false, "shadowIntensity": 0, "widgetOutlineColor": "surfaceText", "shadowOpacity": 60, "clickThrough": false, "widgetPadding": 12, "iconScale": 1, "widgetOutlineOpacity": 0.15, "widgetOutlineThickness": 1, "useOverlayLayer": false, "hoverPopouts": false, "batteryColorMode": "theme", "followInterfaceStyle": false, "dot": false, "attachToScreenEdge": false, "widgetFollowInterfaceStyle": false }, { "id": "dot1790134397654", "name": "Dot", "enabled": false, "position": 0, "screenPreferences": [ "all" ], "showOnLastDisplay": true, "leftWidgets": [ { "id": "launcherButton", "enabled": true, "launcherLogoMode": "custom", "launcherLogoCustomPath": "__SL_BLUE_LOGO__", "launcherLogoSizeOffset": -5 }, { "id": "workspaceSwitcher", "enabled": true, "showWorkspaceIndex": true, "workspaceFollowFocus": true, "workspaceOccupiedColorMode": "secondaryContainer", "workspaceFocusedBorderEnabled": true, "workspaceFocusedBorderColor": "secondaryContainer" }, { "id": "focusedWindow", "enabled": true, "focusedWindowShowIcon": false } ], "centerWidgets": [], "rightWidgets": [ { "id": "music", "enabled": true }, { "id": "privacyIndicator", "enabled": true }, { "id": "systemTray", "enabled": true }, { "id": "cpuUsage", "enabled": true, "minimumWidth": true }, { "id": "memUsage", "enabled": true, "minimumWidth": true, "showInGb": false }, { "id": "systemUpdate", "enabled": true }, { "id": "colorPicker", "enabled": true }, { "id": "clipboard", "enabled": true }, { "id": "weather", "enabled": true }, { "id": "keyboard_layout_name", "enabled": true, "keyboardLayoutNameCompactMode": false, "keyboardLayoutNameShowIcon": false }, { "id": "battery", "enabled": true }, { "id": "controlCenterButton", "enabled": true, "showMicIcon": false, "showMicPercent": false, "showBrightnessIcon": false, "showBrightnessPercent": false, "showIdleInhibitorIcon": true, "showDoNotDisturbIcon": true, "showAudioPercent": false, "showPrinterIcon": true }, { "id": "notificationButton", "enabled": true }, { "id": "clock", "enabled": true } ], "spacing": 4, "innerPadding": 4, "bottomGap": 0, "transparency": 0, "widgetTransparency": 0.25, "squareCorners": false, "noBackground": false, "gothCornersEnabled": false, "gothCornerRadiusOverride": false, "gothCornerRadiusValue": 12, "borderEnabled": false, "borderColor": "surfaceText", "borderOpacity": 1, "borderThickness": 1, "fontScale": 1, "autoHide": false, "autoHideDelay": 250, "openOnOverview": false, "visible": false, "popupGapsAuto": true, "popupGapsManual": 4, "widgetOutlineEnabled": true, "shadowColorMode": "default", "maximizeWidgetText": false, "maximizeWidgetIcons": false, "shadowIntensity": 0, "widgetOutlineColor": "surfaceText", "shadowOpacity": 60, "clickThrough": false, "widgetPadding": 12, "iconScale": 1, "widgetOutlineOpacity": 0.15, "widgetOutlineThickness": 1, "useOverlayLayer": false, "hoverPopouts": true, "batteryColorMode": "theme", "followInterfaceStyle": false, "dot": true, "widgetFollowInterfaceStyle": false } ], "desktopWidgetInstances": [ { "id": "dw_1766711771302_mqb8dm119", "widgetType": "desktopClock", "name": "שעון", "enabled": false, "config": { "style": "analog", "transparency": 0.55, "colorMode": "primary", "customColor": "#ffffff", "showDate": true, "showAnalogNumbers": true, "showAnalogSeconds": true, "displayPreferences": [ "all" ] } }, { "id": "dw_1766711862146_bv3bs1tk6", "widgetType": "systemMonitor", "name": "מנטר המערכת", "enabled": false, "config": { "showHeader": true, "transparency": 0.8, "colorMode": "primary", "customColor": "#ffffff", "showCpu": true, "showCpuGraph": true, "showCpuTemp": true, "showGpuTemp": false, "gpuPciId": "1002:67ef", "showMemory": true, "showMemoryGraph": true, "showNetwork": true, "showNetworkGraph": true, "showDisk": true, "showTopProcesses": true, "topProcessCount": 10, "topProcessSortBy": "memory", "layoutMode": "auto", "graphInterval": 60, "displayPreferences": [ "all" ] } }, { "id": "dw_1766711893665_h3c0i5o9d", "widgetType": "dankDesktopWeather", "name": "מזג האוויר", "enabled": false, "config": { "displayPreferences": [ "all" ], "showPressure": true, "showHourlyForecast": true } } ], "builtInPluginSettings": { "dms_settings_search": { "trigger": "?" }, "dms_clipboard_search": { "trigger": "cb" }, "dms_qr_generator": { "trigger": "qrg" }, "dms_power": { "trigger": "pw" } }, "clipboardVisibleEntryActions": [ "delete", "edit", "pin", "paste", "copy" ], "frameThickness": 6, "frameShowOnOverview": true, "frameLauncherArcExtender": true, "frameMode": "separate", "barInsetPaddingSyncAll": true, "configVersion": 42, "displayProfileAutoSelect": false, "avatarRing": "primary", "showDock": true, "dockOpenOnOverview": false, "dankBarOpenOnOverview": false, "blurBorderOpacity": 0.2, "niriOverviewLauncherStyle": "spotlight" } EOF_OVERLAY cat > %{buildroot}%{_datadir}/sl-blue-dms-theme/sl-blue-dankcalendar.json <<'EOF_DANKCAL_THEME' { "dark": { "name": "Sl Blue Dark", "primary": "#78B7FF", "secondary": "#A8CEFF", "primaryText": "#07131F", "primaryContainer": "#102840", "surfaceTint": "#78B7FF", "surface": "#1D2128", "surfaceText": "#F7FAFF", "surfaceVariant": "#262D37", "surfaceVariantText": "#C2CFDC", "background": "#15191F", "backgroundText": "#F7FAFF", "outline": "#6F91AD", "surfaceContainer": "#202731", "surfaceContainerHigh": "#2A3440", "surfaceContainerHighest": "#354556", "error": "#FF6961", "warning": "#FFB340", "info": "#64B5F6", "success": "#4CD964" }, "light": { "name": "Sl Blue Light for DankCalendar", "primary": "#006EAE", "primaryText": "#FFFFFF", "primaryContainer": "#5A89AE", "primaryContainerText": "#FFFFFF", "secondary": "#277DB5", "secondaryText": "#FFFFFF", "secondaryContainer": "#6696B8", "secondaryContainerText": "#FFFFFF", "tertiary": "#3A82AE", "tertiaryText": "#FFFFFF", "tertiaryContainer": "#6B9ABA", "tertiaryContainerText": "#FFFFFF", "surfaceTint": "#0A84FF", "surface": "#6F9DBC", "surfaceText": "#FFFFFF", "surfaceVariant": "#6794B4", "surfaceVariantText": "#FFFFFF", "background": "#78A5C3", "backgroundText": "#FFFFFF", "outline": "#E6F3FC", "outlineVariant": "#C4DEEF", "surfaceContainerLowest": "#82ACC7", "surfaceContainerLow": "#78A4C2", "surfaceContainer": "#6D9BBB", "surfaceContainerHigh": "#6291B2", "surfaceContainerHighest": "#5788AA", "error": "#B3261E", "errorText": "#FFFFFF", "warning": "#9A5800", "info": "#00639A", "success": "#146C2E", "onPrimaryContainer": "#FFFFFF", "onSecondaryContainer": "#FFFFFF", "onTertiaryContainer": "#FFFFFF", "surfaceBright": "#88B1CA", "surfaceDim": "#5C8CAD", "inverseSurface": "#3E6E91", "inverseOnSurface": "#FFFFFF", "errorContainer": "#8C1D18", "errorContainerText": "#FFFFFF" } } EOF_DANKCAL_THEME cat > %{buildroot}%{_datadir}/sl-blue-dms-theme/apple-logo.svg <<'EOF_LOGO' EOF_LOGO cat > %{buildroot}%{_datadir}/sl-blue-dms-theme/ghostty-config <<'EOF_GHOSTTY' # Sl's Ghostty Config language = he macos-titlebar-style = "tabs" macos-icon = "custom-style" macos-icon-frame = "aluminum" macos-option-as-alt = "right" gtk-titlebar = "true" adw-toolbar-style = "raised-border" window-title-font-family="SF Mono" window-theme = "auto" window-height = 30 window-width = 96 window-padding-x = 4 window-padding-y = 4 window-inherit-working-directory = true background-opacity = 0.95 background-blur-radius = 20 unfocused-split-opacity = 0.6 theme = dark:Catppuccin Frappe,light:Catppuccin Latte font-family = "SF Mono" cursor-color = #53A5FB cursor-text = #F1F1F1 cursor-style = "block" cursor-style-blink = "true" cursor-click-to-move = "true" copy-on-select = "true" clipboard-paste-protection = "false" quit-after-last-window-closed = "false" bell-features = audio bell-audio-path = /usr/share/sounds/MacErrorSounds/Funk.aiff auto-update=download shell-integration-features = "no-cursor,sudo,title" keybind = global:ctrl+opt+`=toggle_quick_terminal image-storage-limit = 335544320 scrollback-limit = 10485760 EOF_GHOSTTY cat > %{buildroot}%{_datadir}/sl-blue-dms-theme/fuzzel.ini <<'EOF_FUZZEL' dpi-aware=yes icon-theme=Darwin font=SF Mono:size=13 fields=name,generic,comment,categories,filename,keywords terminal=ghostty -e prompt="❯ " show-actions=yes exit-on-keyboard-focus-loss=no [colors] background=282a36fa selection=3d4474fa border=fffffffa [border] radius=20 [dmenu] exit-immediately-if-empty=yes EOF_FUZZEL cat > %{buildroot}%{_datadir}/sl-blue-dms-theme/nautilus-gtk.css <<'EOF_GTK4_CSS' window.nautilus-window { background: alpha(@window_bg_color,0.80); } window.nautilus-window .sidebar-pane { background: transparent; } window.nautilus-window .content-pane { background-color: @view_bg_color; } EOF_GTK4_CSS cat > %{buildroot}%{_datadir}/sl-blue-dms-theme/gtk-4.0-settings.ini <<'EOF_GTK4_SETTINGS' [Settings] gtk-icon-theme-name=Darwin gtk-application-prefer-dark-theme=0 gtk-print-backends=file,lpr EOF_GTK4_SETTINGS cat > %{buildroot}%{_libexecdir}/sl-blue-dms-theme-apply <<'EOF_SCRIPT' #!/usr/bin/env bash set -euo pipefail # Apply the packaged Dux profile. --remove is used by uninstall hooks. ACTION=apply TARGET_USER="" while (($#)); do case "$1" in --remove) ACTION=remove ;; --help|-h) echo 'Usage: sl-blue-dms-theme-apply [--remove] [username]' echo 'Apply the Slash Blue profile to your own account.' echo 'When running as root, an explicit username is required.' echo 'Reapplying replaces settings managed by the profile.' exit 0 ;; -*) echo "Unrecognized option: $1" >&2; exit 64 ;; *) if [[ -n "$TARGET_USER" ]]; then echo 'Only one username is accepted.' >&2 exit 64 fi TARGET_USER="$1" ;; esac shift done if [[ $(id -u) -eq 0 ]]; then if [[ -z "$TARGET_USER" || "$TARGET_USER" == root ]]; then echo 'Specify a target username when running as root.' >&2 exit 64 fi if ! getent passwd "$TARGET_USER" >/dev/null; then echo "Unknown user: $TARGET_USER" >&2 exit 64 fi args=() [[ "$ACTION" == remove ]] && args+=(--remove) exec runuser -u "$TARGET_USER" -- env \ -u XDG_CONFIG_HOME -u XDG_STATE_HOME -u XDG_CACHE_HOME \ -u XDG_RUNTIME_DIR -u WAYLAND_DISPLAY \ "$0" "${args[@]}" fi if [[ -z "$TARGET_USER" || "$TARGET_USER" == root ]]; then TARGET_USER="$(id -un)" fi if [[ "$TARGET_USER" != "$(id -un)" ]]; then echo 'Run as the target user, or as root with a target username.' >&2 exit 64 fi USER_HOME="$(getent passwd "$TARGET_USER" | cut -d: -f6)" [[ -n "$USER_HOME" ]] || USER_HOME="${HOME:-}" [[ -n "$USER_HOME" ]] || exit 0 export HOME="$USER_HOME" ASSET_DIR="${SL_BLUE_THEME_ASSET_DIR:-/usr/share/sl-blue-dms-theme}" CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" DMS_CURRENT="$CONFIG_HOME/dms" DMS_LEGACY="$CONFIG_HOME/DankMaterialShell" if [[ -f "$DMS_CURRENT/settings.json" || ! -f "$DMS_LEGACY/settings.json" ]]; then DMS_DIR="$DMS_CURRENT" else DMS_DIR="$DMS_LEGACY" fi DMS_CONFIG="$DMS_DIR/settings.json" THEME_DEST="$DMS_DIR/themes/sl-blue.json" LOGO_DEST="$DMS_DIR/apple-logo.svg" DANKCAL_DIR="$CONFIG_HOME/dankcal" DANKCAL_CONFIG="$DANKCAL_DIR/ui-settings.json" DANKCAL_THEME_DEST="$DANKCAL_DIR/themes/sl-blue-calendar.json" GHOSTTY_CONFIG="$CONFIG_HOME/ghostty/config" FUZZEL_CONFIG="$CONFIG_HOME/fuzzel/fuzzel.ini" GTK4_CSS="$CONFIG_HOME/gtk-4.0/gtk.css" GTK4_SETTINGS="$CONFIG_HOME/gtk-4.0/settings.ini" backup_file() { if [[ -f "$1" ]]; then cp -p -- "$1" "$1.bak-$(date +%%Y%%m%%d-%%H%%M%%S-%%N)" fi } install_config() { local source_file="$1" destination="$2" [[ -r "$source_file" ]] || { echo "Missing theme asset: $source_file" >&2; return 1; } mkdir -p -- "$(dirname -- "$destination")" if [[ -f "$destination" ]] && cmp -s -- "$source_file" "$destination"; then return fi backup_file "$destination" install -m 0644 -- "$source_file" "$destination" } if [[ "$ACTION" == remove ]]; then # Never remove users' actual Dux configuration during package uninstall. rm -f -- "$THEME_DEST" "$LOGO_DEST" "$DANKCAL_THEME_DEST" exit 0 fi PROFILE_SOURCE="$ASSET_DIR/settings-overlay.json" for asset in "$PROFILE_SOURCE" "$ASSET_DIR/sl-blue.json" "$ASSET_DIR/apple-logo.svg" "$ASSET_DIR/sl-blue-dankcalendar.json"; do [[ -r "$asset" ]] || { echo "Missing theme asset: $asset" >&2; exit 1; } done command -v jq >/dev/null 2>&1 || { echo 'jq is required.' >&2; exit 127; } mkdir -p -- "$DMS_DIR/themes" "$DANKCAL_DIR/themes" install_config "$ASSET_DIR/sl-blue.json" "$THEME_DEST" install_config "$ASSET_DIR/apple-logo.svg" "$LOGO_DEST" install_config "$ASSET_DIR/sl-blue-dankcalendar.json" "$DANKCAL_THEME_DEST" # Expand asset paths in the packaged profile. resolved="$(mktemp "$DMS_DIR/.sl-blue-profile.XXXXXX")" output="$(mktemp "$DMS_DIR/.sl-blue-settings.XXXXXX")" trap 'rm -f -- "$resolved" "$output"' EXIT jq --arg theme "$THEME_DEST" --arg logo "$LOGO_DEST" ' def resolve: if type == "object" then with_entries(.value |= resolve) elif type == "array" then map(resolve) elif . == "__SL_BLUE_THEME__" then $theme elif . == "__SL_BLUE_LOGO__" then $logo else . end; resolve | .currentThemeName = "custom" | .currentThemeCategory = "custom" | .customThemeFile = $theme ' "$PROFILE_SOURCE" > "$resolved" # An explicit application resets the packaged keys. Package upgrades do not # invoke this script, so user changes survive normal updates. if [[ -f "$DMS_CONFIG" ]] && jq -e 'type == "object"' "$DMS_CONFIG" >/dev/null 2>&1; then jq -s '.[0] as $old | (.[0] * .[1]) | if ($old.configVersion // 0) > (.configVersion // 0) then .configVersion = $old.configVersion else . end' \ "$DMS_CONFIG" "$resolved" > "$output" else cp -- "$resolved" "$output" fi if [[ ! -f "$DMS_CONFIG" ]] || ! cmp -s -- "$output" "$DMS_CONFIG"; then backup_file "$DMS_CONFIG" chmod 0600 "$output" mv -f -- "$output" "$DMS_CONFIG" fi # Apply matching application themes. dankcal_tmp="$(mktemp "$DANKCAL_DIR/.sl-blue-calendar.XXXXXX")" trap 'rm -f -- "$resolved" "$output" "$dankcal_tmp"' EXIT if [[ -f "$DANKCAL_CONFIG" ]] && jq -e 'type == "object"' "$DANKCAL_CONFIG" >/dev/null 2>&1; then jq --arg theme "$DANKCAL_THEME_DEST" '. + {colorSource: "custom", customThemeFile: $theme}' "$DANKCAL_CONFIG" > "$dankcal_tmp" else jq -n --arg theme "$DANKCAL_THEME_DEST" '{colorSource: "custom", customThemeFile: $theme}' > "$dankcal_tmp" fi if [[ ! -f "$DANKCAL_CONFIG" ]] || ! cmp -s -- "$dankcal_tmp" "$DANKCAL_CONFIG"; then backup_file "$DANKCAL_CONFIG" chmod 0600 "$dankcal_tmp" mv -f -- "$dankcal_tmp" "$DANKCAL_CONFIG" fi install_config "$ASSET_DIR/ghostty-config" "$GHOSTTY_CONFIG" install_config "$ASSET_DIR/fuzzel.ini" "$FUZZEL_CONFIG" install_config "$ASSET_DIR/nautilus-gtk.css" "$GTK4_CSS" install_config "$ASSET_DIR/gtk-4.0-settings.ini" "$GTK4_SETTINGS" # Let sl-layout reconcile its saved Dux chrome without changing the layout. if command -v sl-layout >/dev/null 2>&1; then sl-layout reapply fi EOF_SCRIPT chmod 0755 %{buildroot}%{_libexecdir}/sl-blue-dms-theme-apply install -d %{buildroot}%{_bindir} ln -s ../libexec/sl-blue-dms-theme-apply %{buildroot}%{_bindir}/sl-blue-dms-theme-apply chmod 0644 %{buildroot}%{_datadir}/sl-blue-dms-theme/* %post -p /bin/bash echo "Run sl-blue-dms-theme-apply as each user to apply the Slash Blue theme." %files %dir %{_datadir}/sl-blue-dms-theme %{_datadir}/sl-blue-dms-theme/sl-blue.json %{_datadir}/sl-blue-dms-theme/settings-overlay.json %{_datadir}/sl-blue-dms-theme/sl-blue-dankcalendar.json %{_datadir}/sl-blue-dms-theme/apple-logo.svg %{_datadir}/sl-blue-dms-theme/ghostty-config %{_datadir}/sl-blue-dms-theme/fuzzel.ini %{_datadir}/sl-blue-dms-theme/nautilus-gtk.css %{_datadir}/sl-blue-dms-theme/gtk-4.0-settings.ini %{_libexecdir}/sl-blue-dms-theme-apply %{_bindir}/sl-blue-dms-theme-apply %changelog * Thu Oct 22 2026 Sl (Shahaf Levi) - 1.2.3-2 - Keep package transactions from modifying user settings; require explicit apply. - Use the public sl-layout theme reconciliation command. - Rename the package to sl-blue-dux-theme, retaining existing apply commands and paths. - Apply the single Dux profile, with its bar and dock visible by default. - Reconcile the selected sl-layout frame and refresh its saved Dux chrome. - Install the existing theme apply command on PATH. * Wed Oct 21 2026 Sl (Shahaf Levi) - 1.2.1-2 - Expand the Dux Shell Sl Blue appearance preset using verified settings exports. - Preserve user configuration and support modern and legacy settings paths. * Wed Oct 21 2026 Sl (Shahaf Levi) - 1.2.0-2 - Prefer current Dux Shell settings, retain legacy settings fallback. - Clean theme files from either location on uninstall. * Sat Sep 19 2026 Sl (Shahaf Levi) - 1.2.0-1 - Update DMS settings for sparse configuration storage. - Improve Sl Blue colors for the Material 3 Expressive interface. - Remove legacy theme-managed DMS settings on upgrade. * Fri Jul 10 2026 Sl (Shahaf Levi) - 1.1.0-1 - Restore the original packaging structure without checksum lists. - Improve the DMS appearance. - Add a coordinated DankCalendar theme and application settings. * Sat Jun 20 2026 Sl (Shahaf Levi) - 1.0.2-1 - Initial COPR package for Slash