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