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