Name: sl-blue-dms-theme Version: 1.1.0 Release: 100.1.1%{?dist} Summary: Sl's blue theme for DankMaterialShell License: MIT URL: https://slsrepo.com BuildArch: noarch Requires: jq Requires: DankMaterialShell Requires: shadow-utils %description Sl's theme for DankMaterialShell with blue colors, including a matching DankCalendar theme and Ghostty, Fuzzel, and Nautilus settings. The package ships a reusable apply command so normal installed systems and live ISO builders can apply the theme after the target user exists. %prep # No external source. Theme assets are generated during install. %build # Nothing to 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": "#0074B8", "secondary": "#2F86CC", "tertiary": "#4D97D0", "primaryText": "#FFFFFF", "primaryContainer": "#D6EAFB", "secondaryContainer": "#769BB8", "tertiaryContainer": "#6F95B0", "surfaceTint": "#0A84FF", "surface": "#D9E8F4", "surfaceText": "#DDDFE6", "surfaceVariant": "#6F879C", "surfaceVariantText": "#DDDFE6", "background": "#EFF6FC", "backgroundText": "#DDDFE6", "outline": "#B6D7EE", "outlineVariant": "#95BAD5", "surfaceContainerLowest": "#E7F1F8", "surfaceContainerLow": "#C4D4E0", "surfaceContainer": "#9EB7CA", "surfaceContainerHigh": "#7898B0", "surfaceContainerHighest": "#5D7D98", "error": "#FF453A", "warning": "#FF9F0A", "info": "#1687D9", "success": "#34A853" } } EOF_THEME cat > %{buildroot}%{_datadir}/sl-blue-dms-theme/settings-overlay.json <<'EOF_OVERLAY' { "popupTransparency": 0.46, "dockTransparency": 0.2, "widgetBackgroundColor": "sch", "widgetColorMode": "default", "controlCenterTileColorMode": "primary", "buttonColorMode": "primary", "cornerRadius": 12, "niriLayoutGapsOverride": -2, "niriLayoutRadiusOverride": 20, "niriLayoutBorderSize": 4, "animationSpeed": 1, "customAnimationDuration": 500, "syncComponentAnimationSpeeds": true, "popoutAnimationSpeed": 1, "popoutCustomAnimationDuration": 150, "modalAnimationSpeed": 1, "modalCustomAnimationDuration": 150, "enableRippleEffects": true, "animationVariant": 0, "motionEffect": 2, "m3ElevationEnabled": true, "m3ElevationIntensity": 12, "m3ElevationOpacity": 14, "m3ElevationColorMode": "default", "m3ElevationLightDirection": "bottom", "m3ElevationCustomColor": "#000000", "modalElevationEnabled": true, "popoutElevationEnabled": true, "barElevationEnabled": true, "blurEnabled": true, "blurForegroundLayers": true, "blurLayerOutlineOpacity": 0.16, "blurBorderColor": "outline", "blurBorderCustomColor": "#42A5F5", "blurBorderOpacity": 0.26, "blurredWallpaperLayer": true, "blurWallpaperOnOverview": false, "systemTrayIconTintMode": "monochrome", "systemTrayIconTintSaturation": 50, "systemTrayIconTintStrength": 135, "workspaceColorMode": "primary", "workspaceOccupiedColorMode": "secondaryContainer", "workspaceUnfocusedColorMode": "default", "workspaceUrgentColorMode": "default", "workspaceFocusedBorderEnabled": true, "workspaceFocusedBorderColor": "primary", "workspaceFocusedBorderThickness": 2, "dankLauncherV2Size": "compact", "dankLauncherV2ShowSourceBadges": true, "dankLauncherV2BorderEnabled": true, "dankLauncherV2BorderThickness": 2, "dankLauncherV2BorderColor": "primary", "dankLauncherV2ShowFooter": true, "launcherUseOverlayLayer": true, "launcherStyle": "spotlight", "spotlightBarShowModeChips": true, "showDock": true, "dockAutoHide": false, "dockSmartAutoHide": false, "dockUseOverlayLayer": false, "dockGroupByApp": true, "dockOpenOnOverview": true, "dockPosition": 1, "dockSpacing": 12, "dockBottomGap": 0, "dockMargin": 5, "dockIconSize": 32, "dockIndicatorStyle": "circle", "dockBorderEnabled": true, "dockBorderColor": "surfaceText", "dockBorderOpacity": 0.15, "dockBorderThickness": 1, "dockLauncherEnabled": true, "dockLauncherLogoMode": "apps", "dockShowTrash": true, "dockTrashFileManager": "nautilus", "notificationPopupShadowEnabled": true, "modalDarkenBackground": false, "barConfigs": [ { "id": "default", "name": "Main Bar", "enabled": true, "position": 0, "screenPreferences": [ "all" ], "showOnLastDisplay": true, "leftWidgets": [ "launcherButton", { "id": "workspaceSwitcher", "enabled": true }, { "id": "focusedWindow", "enabled": true, "focusedWindowSize": 1, "focusedWindowCompactMode": false } ], "centerWidgets": [], "rightWidgets": [ { "id": "privacyIndicator", "enabled": true }, { "id": "music", "enabled": true }, { "id": "systemTray", "enabled": true, "trayUseInlineExpansion": false }, { "id": "cpuUsage", "enabled": true, "minimumWidth": true }, { "id": "memUsage", "enabled": true, "minimumWidth": true, "showSwap": false, "showInGb": false }, { "id": "systemUpdate", "enabled": true }, { "id": "clipboard", "enabled": true }, { "id": "weather", "enabled": true }, { "id": "capsLockIndicator", "enabled": true }, { "id": "keyboard_layout_name", "enabled": true, "keyboardLayoutNameCompactMode": false, "keyboardLayoutNameShowIcon": false }, { "id": "battery", "enabled": true, "showBatteryPercent": true, "showBatteryPercentOnlyOnBattery": false, "showBatteryTime": false }, { "id": "controlCenterButton", "enabled": true, "showAudioIcon": true, "showAudioPercent": false, "showBrightnessIcon": false, "showBrightnessPercent": false, "showMicIcon": false, "showMicPercent": false, "showBatteryIcon": false, "showIdleInhibitorIcon": true, "showDoNotDisturbIcon": true }, { "id": "notificationButton", "enabled": true }, { "id": "clock", "enabled": true, "clockCompactMode": false } ], "spacing": 4, "innerPadding": 4, "bottomGap": 0, "transparency": 0, "widgetTransparency": 0.25, "squareCorners": false, "noBackground": false, "gothCornersEnabled": false, "borderEnabled": false, "fontScale": 1, "autoHide": false, "autoHideDelay": 250, "openOnOverview": true, "visible": true, "popupGapsAuto": true, "popupGapsManual": 4, "widgetOutlineEnabled": true, "shadowColorMode": "default", "shadowIntensity": 8, "shadowOpacity": 35, "removeWidgetPadding": false, "maximizeWidgetText": false, "maximizeWidgetIcons": false, "widgetOutlineColor": "surfaceText", "widgetOutlineOpacity": 0.15, "widgetOutlineThickness": 1, "clickThrough": false, "widgetPadding": 12, "iconScale": 1, "useOverlayLayer": false, "hoverPopouts": false } ] } 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": "#FFFFFF", "secondary": "#D6EAFB", "primaryText": "#0074B8", "primaryContainer": "#D6EAFB", "surfaceTint": "#0A84FF", "surface": "#7B9CB5", "surfaceText": "#FFFFFF", "surfaceVariant": "#6F879C", "surfaceVariantText": "#DDDFE6", "background": "#9EB7CA", "backgroundText": "#DDDFE6", "outline": "#B6D7EE", "surfaceContainer": "#5D7D98", "surfaceContainerHigh": "#7898B0", "surfaceContainerHighest": "#526F89", "error": "#FF453A", "warning": "#FF9F0A", "info": "#D6EAFB", "success": "#A8E6BF" } } 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' # This is the configuration file for Ghostty. # # This template file has been automatically created at the following # path since Ghostty couldn't find any existing config files on your system: # # /home/USER/.config/ghostty/config # # The template does not set any default options, since Ghostty ships # with sensible defaults for all options. Users should only need to set # options that they want to change from the default. # # Run `ghostty +show-config --default --docs` to view a list of # all available config options and their default values. # # Additionally, each config option is also explained in detail # on Ghostty's website, at https://ghostty.org/docs/config. # Config syntax crash course # ========================== # # The config file consists of simple key-value pairs, # # separated by equals signs. # font-family = Iosevka # window-padding-x = 2 # # # Spacing around the equals sign does not matter. # # All of these are identical: # key=value # key= value # key =value # key = value # # # Any line beginning with a # is a comment. It's not possible to put # # a comment after a config option, since it would be interpreted as a # # part of the value. For example, this will have a value of "#123abc": # background = #123abc # # # Empty values are used to reset config keys to default. # key = # # # Some config options have unique syntaxes for their value, # # which is explained in the docs for that config option. # # Just for example: # resize-overlay-duration = 4s 200ms # Sl's Ghostty Config # Docs: https://ghostty.org/docs/config/reference # https://ghostty.zerebos.com/settings/application language = he macos-titlebar-style = "tabs" macos-icon = "custom-style" macos-icon-frame = "aluminum" # macos-icon-ghost-color = #52fc85 # macos-icon-screen-color = #0f2213 macos-option-as-alt = "right" gtk-titlebar = "true" # gtk-custom-css = "~/Downloads/ghostty.css" # gtk-adwaita = "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" # mouse-hide-while-typing = "true" # mouse-shift-capture = "false" copy-on-select = "true" clipboard-paste-protection = "false" quit-after-last-window-closed = "false" bell-features=system auto-update=download shell-integration-features = "no-cursor,sudo,title" keybind = global:ctrl+opt+`=toggle_quick_terminal # 320MB for the kitty image protocol image-storage-limit = 335544320 # 10MB of scrollback history 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 -e ACTION="apply" if [ "${1:-}" = "--remove" ]; then ACTION="remove" shift fi TARGET_USER="${1:-${SUDO_USER:-}}" if [ "$(id -u)" -eq 0 ]; then if [ -z "$TARGET_USER" ] || [ "$TARGET_USER" = "root" ]; then TARGET_USER="$(awk -F: '$3 >= 1000 && $1 != "nobody" {print $1; exit}' /etc/passwd)" fi [ -n "$TARGET_USER" ] || exit 0 if [ "$ACTION" = "remove" ]; then exec runuser -u "$TARGET_USER" -- "$0" --remove "$TARGET_USER" else exec runuser -u "$TARGET_USER" -- "$0" "$TARGET_USER" fi fi if [ -z "$TARGET_USER" ] || [ "$TARGET_USER" = "root" ]; then TARGET_USER="$(id -un)" 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="/usr/share/sl-blue-dms-theme" DMS_DIR="$HOME/.config/DankMaterialShell" DMS_CONFIG="$DMS_DIR/settings.json" THEME_DEST="$DMS_DIR/themes/sl-blue.json" LOGO_DEST="$DMS_DIR/apple-logo.svg" DANKCAL_DIR="$HOME/.config/dankcal" DANKCAL_CONFIG="$DANKCAL_DIR/ui-settings.json" DANKCAL_THEME_DEST="$DANKCAL_DIR/themes/sl-blue-calendar.json" GHOSTTY_CONFIG="$HOME/.config/ghostty/config" FUZZEL_CONFIG="$HOME/.config/fuzzel/fuzzel.ini" GTK4_CSS="$HOME/.config/gtk-4.0/gtk.css" GTK4_SETTINGS="$HOME/.config/gtk-4.0/settings.ini" backup_file() { if [ -f "$1" ]; then cp -p "$1" "$1.bak-$(date +%%Y%%m%%d%%H%%M%%S)" fi } install_config() { source_file="$1" destination="$2" 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 rm -f "$THEME_DEST" "$LOGO_DEST" "$DANKCAL_THEME_DEST" exit 0 fi mkdir -p "$DMS_DIR/themes" "$DANKCAL_DIR/themes" install -m 0644 "$ASSET_DIR/sl-blue.json" "$THEME_DEST" install -m 0644 "$ASSET_DIR/apple-logo.svg" "$LOGO_DEST" install -m 0644 "$ASSET_DIR/sl-blue-dankcalendar.json" "$DANKCAL_THEME_DEST" DYNAMIC_TMP=$(mktemp) NEW_CONFIG=$(mktemp) jq -n --arg theme "$THEME_DEST" --arg logo "$LOGO_DEST" '{ currentThemeName: "custom", currentThemeCategory: "custom", customThemeFile: $theme, launcherLogoMode: "custom", launcherLogoCustomPath: $logo, launcherLogoColorOverride: "", launcherLogoColorInvertOnMode: false, launcherLogoBrightness: 0.5, launcherLogoContrast: 1, launcherLogoSizeOffset: -5 }' > "$DYNAMIC_TMP" if [ -f "$DMS_CONFIG" ] && jq empty "$DMS_CONFIG" >/dev/null 2>&1; then backup_file "$DMS_CONFIG" jq -s '.[0] * .[1] * .[2]' "$DMS_CONFIG" "$ASSET_DIR/settings-overlay.json" "$DYNAMIC_TMP" > "$NEW_CONFIG" else jq -s '.[0] * .[1]' "$ASSET_DIR/settings-overlay.json" "$DYNAMIC_TMP" > "$NEW_CONFIG" fi mv -f "$NEW_CONFIG" "$DMS_CONFIG" chmod 0600 "$DMS_CONFIG" rm -f "$DYNAMIC_TMP" DANKCAL_TMP=$(mktemp) if [ -f "$DANKCAL_CONFIG" ] && jq empty "$DANKCAL_CONFIG" >/dev/null 2>&1; then backup_file "$DANKCAL_CONFIG" 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 mv -f "$DANKCAL_TMP" "$DANKCAL_CONFIG" chmod 0600 "$DANKCAL_CONFIG" 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" EOF_SCRIPT chmod 0755 %{buildroot}%{_libexecdir}/sl-blue-dms-theme-apply chmod 0644 %{buildroot}%{_datadir}/sl-blue-dms-theme/* %post -p /bin/bash /usr/libexec/sl-blue-dms-theme-apply || true %preun -p /bin/bash if [ "$1" -eq 0 ]; then /usr/libexec/sl-blue-dms-theme-apply --remove || true fi %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 %changelog * 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