From 46faf5b8de414f721dd087883f4d07d4164feaea Mon Sep 17 00:00:00 2001 From: nekochemist Date: Mon, 16 Mar 2026 20:26:36 +0500 Subject: [PATCH] modified: apps-list.md modified: config/hyprwave/config.conf modified: config/hyprwave/style.css modified: config/niri/config.kdl new file: config/swaync/config.json new file: config/swaync/style.css new file: config/swayosd/style.css new file: local/share/hyprwave/style.css new file: local/share/hyprwave/themes/zzz.css --- apps-list.md | 9 +- config/hyprwave/config.conf | 16 +- config/hyprwave/style.css | 622 ++++++++-------- config/niri/config.kdl | 64 +- config/swaync/config.json | 99 +++ config/swaync/style.css | 569 +++++++++++++++ config/swayosd/style.css | 51 ++ local/share/hyprwave/style.css | 1055 +++++++++++++++++++++++++++ local/share/hyprwave/themes/zzz.css | 555 ++++++++++++++ 9 files changed, 2711 insertions(+), 329 deletions(-) create mode 100644 config/swaync/config.json create mode 100644 config/swaync/style.css create mode 100644 config/swayosd/style.css create mode 100644 local/share/hyprwave/style.css create mode 100644 local/share/hyprwave/themes/zzz.css diff --git a/apps-list.md b/apps-list.md index 9457bc6..2690b5b 100644 --- a/apps-list.md +++ b/apps-list.md @@ -32,6 +32,7 @@ cava clipse clock-tui cloudflared +cmatrix cmus cool-retro-term cowsay @@ -72,6 +73,7 @@ floorp-bin fluffychat-bin foliate foot +fractal freerdp fsel-git fuzzel @@ -139,6 +141,7 @@ gvfs-nfs gvfs-onedrive gvfs-smb gvfs-wsdd +hdparm helix helm-bin helvum @@ -146,6 +149,7 @@ hylauncher-bin hyprland hyprlock hyprpicker +hyprpwcenter hyprshot hyprwave hytale-f2p-git @@ -202,6 +206,7 @@ lla lmms loupe lsd +lshw lutris ly mailsend-go @@ -228,6 +233,7 @@ microsocks mihomo milou mpd +mpdris2 mplayer mpv neovide @@ -258,6 +264,7 @@ openrazer-daemon oxygen oxygen-cursors oxygen-sounds +pandoc-cli papers papirus-icon-theme paru @@ -298,6 +305,7 @@ print-manager pwvucontrol python-babel python-i3ipc +python-mutagen python-openrazer python-pip python-pipx @@ -343,7 +351,6 @@ tcsh tecla telegram-cli-git telegram-desktop -termusic tesseract-data-eng throne-bin timr diff --git a/config/hyprwave/config.conf b/config/hyprwave/config.conf index c162c97..d1fcd60 100644 --- a/config/hyprwave/config.conf +++ b/config/hyprwave/config.conf @@ -5,15 +5,17 @@ # Options: right, left, top, bottom edge = top + # Margin from the screen edge (in pixels) -margin = 10 +margin = 20 # Layer to render on # Options: background, bottom, top, overlay -layer = top +layer = overlay +idle_timeout= 1 # Exclusive zone: 0 = respect other surfaces, -1 = overlap everything -exclusive_zone = 0 +exclusive_zone = -1 [Notifications] enabled = true @@ -21,15 +23,15 @@ now_playing = true [Visualizer] # Enable/disable visualizer (horizontal layout only) -enabled = true +enabled = false # Idle timeout in seconds before visualizer appears # Set to 0 to disable auto-activation -idle_timeout = 5 +idle_timeout = 1 [VerticalDisplay] enabled=true -idle_timeout=5 +idle_timeout=1 [MusicPlayer] -preference = spotify,vlc +preference = mpd diff --git a/config/hyprwave/style.css b/config/hyprwave/style.css index 56abd18..42d7017 100644 --- a/config/hyprwave/style.css +++ b/config/hyprwave/style.css @@ -4,108 +4,109 @@ ======================================== */ :root { - /* Background Colors - Deep Void */ - --bg-primary: rgba(15, 12, 30, 0.75); - --bg-secondary: rgba(20, 18, 40, 0.75); - --bg-album-cover: rgba(25, 22, 48, 0.85); - --bg-album-secondary: rgba(30, 28, 55, 0.85); - - /* Button Colors - Default (Prev/Next) - Mystic Purple */ - --btn-default: rgba(140, 100, 180, 0.85); - --btn-default-secondary: rgba(130, 90, 170, 0.85); - --btn-default-hover: rgba(160, 120, 200, 0.92); - --btn-default-hover-secondary: rgba(150, 110, 190, 0.92); - - /* Button Colors - Play/Pause - Bright Pink Portal */ - --btn-play: rgba(255, 100, 200, 0.95); - --btn-play-secondary: rgba(240, 80, 180, 0.95); - --btn-play-hover: rgba(255, 120, 215, 0.98); - --btn-play-hover-secondary: rgba(255, 110, 205, 0.98); - --btn-play-active: rgba(230, 70, 170, 0.95); - --btn-play-active-secondary: rgba(220, 60, 160, 0.95); - - /* Button Colors - Expand - Deep Violet */ - --btn-expand: rgba(120, 60, 200, 0.95); - --btn-expand-secondary: rgba(110, 50, 190, 0.95); - --btn-expand-hover: rgba(140, 80, 220, 0.98); - --btn-expand-hover-secondary: rgba(130, 70, 210, 0.98); - --btn-expand-active: rgba(100, 40, 180, 0.95); - --btn-expand-active-secondary: rgba(90, 35, 170, 0.95); - - /* Progress Bar Colors */ - --progress-bg: rgba(40, 30, 60, 0.25); - --progress-fill-start: rgba(255, 100, 200, 0.95); - --progress-fill-end: rgba(120, 60, 200, 0.95); - - /* Slider Handle Colors */ - --handle-color: rgba(255, 100, 200, 0.98); - --handle-hover: rgba(255, 120, 215, 1.0); - --handle-border: rgba(230, 70, 170, 0.5); - --handle-shadow: rgba(255, 100, 200, 0.6); - - /* Text Colors - Soft pink/purple on dark */ - --text-primary: rgba(255, 220, 245, 0.95); - --text-secondary: rgba(230, 190, 220, 0.85); - --text-tertiary: rgba(200, 160, 195, 0.75); - --text-muted: rgba(160, 120, 165, 0.65); - - /* Border Colors */ - --border-primary: rgba(100, 70, 140, 0.35); - --border-button: rgba(120, 85, 160, 0.3); - --border-button-hover: rgba(140, 100, 180, 0.45); - --border-play: rgba(255, 100, 200, 0.4); - --border-play-hover: rgba(255, 120, 215, 0.55); - --border-expand: rgba(120, 60, 200, 0.4); - --border-expand-hover: rgba(140, 80, 220, 0.55); - - /* Shadow Colors */ - --shadow-default: rgba(0, 0, 0, 0.6); - --shadow-button: rgba(0, 0, 0, 0.5); - --shadow-play: rgba(255, 100, 200, 0.5); - --shadow-play-hover: rgba(255, 120, 215, 0.7); - --shadow-expand: rgba(120, 60, 200, 0.5); - --shadow-expand-hover: rgba(140, 80, 220, 0.7); - --shadow-focus: rgba(255, 100, 200, 0.7); - - /* Spacing & Sizes */ - --border-radius-container: 100px; - --border-radius-section: 20px; - --border-radius-album: 16px; - --border-radius-button: 50%; - --border-radius-progress: 2px; - - --padding-container: 12px; - --padding-section: 16px; + /* Background Colors - Deep Void */ + --bg-primary: rgba(15, 12, 30, 1.0); + --bg-secondary: rgba(20, 18, 40, 0.75); + --bg-album-cover: rgba(25, 22, 48, 0.85); + --bg-album-secondary: rgba(30, 28, 55, 0.85); + + /* Button Colors - Default (Prev/Next) - Mystic Purple */ + --btn-default: rgba(140, 100, 180, 0.85); + --btn-default-secondary: rgba(130, 90, 170, 0.85); + --btn-default-hover: rgba(160, 120, 200, 0.92); + --btn-default-hover-secondary: rgba(150, 110, 190, 0.92); + + /* Button Colors - Play/Pause - Bright Pink Portal */ + --btn-play: rgba(255, 100, 200, 0.95); + --btn-play-secondary: rgba(240, 80, 180, 0.95); + --btn-play-hover: rgba(255, 120, 215, 0.98); + --btn-play-hover-secondary: rgba(255, 110, 205, 0.98); + --btn-play-active: rgba(230, 70, 170, 0.95); + --btn-play-active-secondary: rgba(220, 60, 160, 0.95); + + /* Button Colors - Expand - Deep Violet */ + --btn-expand: rgba(120, 60, 200, 0.95); + --btn-expand-secondary: rgba(110, 50, 190, 0.95); + --btn-expand-hover: rgba(140, 80, 220, 0.98); + --btn-expand-hover-secondary: rgba(130, 70, 210, 0.98); + --btn-expand-active: rgba(100, 40, 180, 0.95); + --btn-expand-active-secondary: rgba(90, 35, 170, 0.95); + + /* Progress Bar Colors */ + --progress-bg: rgba(40, 30, 60, 0.25); + --progress-fill-start: rgba(255, 100, 200, 0.95); + --progress-fill-end: rgba(120, 60, 200, 0.95); + + /* Slider Handle Colors */ + --handle-color: rgba(255, 100, 200, 0.98); + --handle-hover: rgba(255, 120, 215, 1.0); + --handle-border: rgba(230, 70, 170, 0.5); + --handle-shadow: rgba(255, 100, 200, 0.6); + + /* Text Colors - Soft pink/purple on dark */ + --text-primary: rgba(255, 220, 245, 0.95); + --text-secondary: rgba(230, 190, 220, 0.85); + --text-tertiary: rgba(200, 160, 195, 0.75); + --text-muted: rgba(160, 120, 165, 0.65); + + /* Border Colors */ + /*--border-primary: rgba(100, 70, 140, 0.35);*/ + --border-button: rgba(120, 85, 160, 0.3); + --border-button-hover: rgba(140, 100, 180, 0.45); + --border-play: rgba(255, 100, 200, 0.4); + --border-play-hover: rgba(255, 120, 215, 0.55); + --border-expand: rgba(120, 60, 200, 0.4); + --border-expand-hover: rgba(140, 80, 220, 0.55); + + /* Shadow Colors */ + --shadow-default: rgba(0, 0, 0, 0.6); + --shadow-button: rgba(0, 0, 0, 0.5); + --shadow-play: rgba(255, 100, 200, 0.5); + --shadow-play-hover: rgba(255, 120, 215, 0.7); + --shadow-expand: rgba(120, 60, 200, 0.5); + --shadow-expand-hover: rgba(140, 80, 220, 0.7); + --shadow-focus: rgba(255, 100, 200, 0.7); + + /* Spacing & Sizes */ + --border-radius-container: 100px; + --border-radius-section: 20px; + --border-radius-album: 16px; + --border-radius-button: 50%; + --border-radius-progress: 2px; + + --padding-container: 12px; + --padding-section: 16px; } /* Visualizer bars - mystic portal glow */ .visualizer-bar { - background: linear-gradient(180deg, - rgba(255, 120, 215, 0.98), - rgba(180, 100, 220, 0.98), - rgba(140, 80, 220, 0.98)); - border-radius: 0px; - transition: all 0.05s ease-out; - margin: 0px; - min-width: 1px; - min-height: 3px; - box-shadow: 0 0 16px rgba(255, 100, 200, 0.8), - 0 0 10px rgba(140, 80, 220, 0.6); + background: linear-gradient(180deg, + rgba(255, 120, 215, 0.98), + rgba(180, 100, 220, 0.98), + rgba(140, 80, 220, 0.98)); + border-radius: 0px; + transition: all 0.05s ease-out; + margin: 0px; + min-width: 1px; + min-height: 3px; + box-shadow: 0 0 16px rgba(255, 100, 200, 0.8), + 0 0 10px rgba(140, 80, 220, 0.6); } .vertical-display-label { - font-family: 'VT323', monospace; - font-size: 28px; - font-weight: bold; - color: rgba(255, 120, 215, 0.98); - letter-spacing: 0px; - line-height: 1.2; + font-family: 'VT323', monospace; + font-size: 28px; + font-weight: bold; + color: rgba(255, 120, 215, 0.98); + letter-spacing: 0px; + line-height: 1.2; } + /* CRITICAL: Disable CSS transitions during JavaScript animations */ .no-transition, .no-transition * { - transition: none !important; - animation: none !important; + transition: none !important; + animation: none !important; } /* ======================================== @@ -113,21 +114,21 @@ ======================================== */ /* GTK4 transparent window - CRITICAL for compositor transparency */ -window, +window, window.background, .hyprwave-window { - background-color: transparent; - background-image: none; + background-color: transparent; + background-image: none; } /* Ensure ALL window-level elements are transparent */ -window > * { - background: transparent; +window>* { + background: transparent; } /* Main container - transparent */ .main-container { - background: transparent; + background: transparent; } /* ======================================== @@ -135,12 +136,12 @@ window > * { ======================================== */ .control-container { - background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); - border-radius: var(--border-radius-container); - border: 1px solid var(--border-primary); + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-container); + border: 4px solid rgb(255, 1, 0, 1.0); - padding: var(--padding-container); - margin: 0; + padding: var(--padding-container); + margin: 0; } /* ======================================== @@ -149,15 +150,16 @@ window > * { ======================================== */ .control-container-horizontal { - /* Match the vertical style exactly for consistency */ - background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); - border-radius: var(--border-radius-container); /* Keeps the pill shape */ - border: 1px solid var(--border-primary); + /* Match the vertical style exactly for consistency */ + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-container); + /* Keeps the pill shape */ + border: 4px solid var(--border-primary); - /* Horizontal padding is critical here to prevent buttons + /* Horizontal padding is critical here to prevent buttons from touching the rounded edges */ - padding: 8px 24px; - margin: 0; + padding: 8px 24px; + margin: 0; } /* ======================================== @@ -165,12 +167,13 @@ window > * { ======================================== */ .expanded-section { - background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); - border-radius: var(--border-radius-section); - border: 1px solid var(--border-primary); - padding: var(--padding-section); - margin: 0; - margin-top: 4px; /* Reduced spacing from control bar */ + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + padding: var(--padding-section); + margin: 0; + margin-top: 4px; + /* Reduced spacing from control bar */ } @@ -181,26 +184,27 @@ window > * { ======================================== */ .expanded-section-horizontal { - background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); - border-radius: var(--border-radius-section); - border: 1px solid var(--border-primary); + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 1px solid var(--border-primary); - - /* Slightly different padding/margin to look good below/above the bar */ - padding: var(--padding-section); - margin-top: 2px; /* Adds gap between control bar and this panel */ - margin-bottom: 2px; - - /* Ensure it doesn't get too squeezed */ - min-width: 300px; + + /* Slightly different padding/margin to look good below/above the bar */ + padding: var(--padding-section); + margin-top: 2px; + /* Adds gap between control bar and this panel */ + margin-bottom: 2px; + + /* Ensure it doesn't get too squeezed */ + min-width: 300px; } /* Album cover */ .album-cover { - background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary)); - border-radius: var(--border-radius-album); - border: 1px solid var(--border-button); - box-shadow: 0 4px 16px var(--shadow-button); + background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary)); + border-radius: var(--border-radius-album); + border: 1px solid var(--border-button); + box-shadow: 0 4px 16px var(--shadow-button); } /* ======================================== @@ -209,36 +213,36 @@ window > * { /* Source label (e.g., "Spotify") */ .source-label { - color: var(--text-muted); - font-size: 11px; - font-weight: 500; - margin-top: 8px; - text-transform: uppercase; - letter-spacing: 0.5px; + color: var(--text-muted); + font-size: 11px; + font-weight: 500; + margin-top: 8px; + text-transform: uppercase; + letter-spacing: 0.5px; } /* Track title */ .track-title { - color: var(--text-primary); - font-size: 14px; - font-weight: 600; - margin-top: 4px; + color: var(--text-primary); + font-size: 14px; + font-weight: 600; + margin-top: 4px; } /* Artist label */ .artist-label { - color: var(--text-secondary); - font-size: 12px; - font-weight: 500; - margin-top: 2px; + color: var(--text-secondary); + font-size: 12px; + font-weight: 500; + margin-top: 2px; } /* Time remaining */ .time-remaining { - color: var(--text-tertiary); - font-size: 12px; - font-weight: 500; - margin-top: 2px; + color: var(--text-tertiary); + font-size: 12px; + font-weight: 500; + margin-top: 2px; } /* ======================================== @@ -246,36 +250,36 @@ window > * { ======================================== */ .track-progress { - min-height: 4px; - margin-top: 8px; - margin-bottom: 4px; + min-height: 4px; + margin-top: 8px; + margin-bottom: 4px; } /* The background track */ .track-progress trough { - background: var(--progress-bg); - border-radius: var(--border-radius-progress); - min-height: 4px; + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 4px; } /* The filled progress portion - GTK4 specific */ .track-progress progress { - background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end)); - border-radius: var(--border-radius-progress); - min-height: 4px; + background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end)); + border-radius: var(--border-radius-progress); + min-height: 4px; } /* GTK4 also needs this for the fill bar to show */ progressbar trough { - background: var(--progress-bg); - border-radius: var(--border-radius-progress); - min-height: 4px; + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 4px; } progressbar progress { - background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end)); - border-radius: var(--border-radius-progress); - min-height: 4px; + background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end)); + border-radius: var(--border-radius-progress); + min-height: 4px; } /* ======================================== @@ -284,39 +288,40 @@ progressbar progress { /* All control buttons - base styles */ .control-button { - padding: 0; - - /* Add margin to compensate for removed border */ - margin: 1.5px; /* Same as the old border width */ - - min-width: 44px; - min-height: 44px; - - background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); - - border: none; - box-shadow: - inset 0 0 0 1.5px var(--border-button), - 0 4px 16px var(--shadow-button), - inset 0 1px 1px rgba(255, 255, 255, 0.2); - - border-radius: 50%; + padding: 0; + + /* Add margin to compensate for removed border */ + margin: 1.5px; + /* Same as the old border width */ + + min-width: 44px; + min-height: 44px; + + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + + border: none; + box-shadow: + inset 0 0 0 1.5px var(--border-button), + 0 4px 16px var(--shadow-button), + inset 0 1px 1px rgba(255, 255, 255, 0.2); + + border-radius: 50%; } .control-button:hover { - background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); - border-color: var(--border-button-hover); - box-shadow: - 0 6px 20px var(--shadow-button), - inset 0 1px 1px rgba(255, 255, 255, 0.25); - transform: translateY(-1px); + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); + border-color: var(--border-button-hover); + box-shadow: + 0 6px 20px var(--shadow-button), + inset 0 1px 1px rgba(255, 255, 255, 0.25); + transform: translateY(-1px); } .control-button:active { - transform: scale(0.96); - box-shadow: - 0 2px 8px var(--shadow-button), - inset 0 2px 4px rgba(0, 0, 0, 0.2); + transform: scale(0.96); + box-shadow: + 0 2px 8px var(--shadow-button), + inset 0 2px 4px rgba(0, 0, 0, 0.2); } /* ======================================== @@ -324,26 +329,26 @@ progressbar progress { ======================================== */ .play-button { - background: linear-gradient(135deg, var(--btn-play), var(--btn-play-secondary)); - border-color: var(--border-play); - box-shadow: - 0 4px 16px var(--shadow-play), - inset 0 1px 1px rgba(255, 255, 255, 0.3); + background: linear-gradient(135deg, var(--btn-play), var(--btn-play-secondary)); + border-color: var(--border-play); + box-shadow: + 0 4px 16px var(--shadow-play), + inset 0 1px 1px rgba(255, 255, 255, 0.3); } .play-button:hover { - background: linear-gradient(135deg, var(--btn-play-hover), var(--btn-play-hover-secondary)); - border-color: var(--border-play-hover); - box-shadow: - 0 6px 20px var(--shadow-play-hover), - inset 0 1px 1px rgba(255, 255, 255, 0.4); + background: linear-gradient(135deg, var(--btn-play-hover), var(--btn-play-hover-secondary)); + border-color: var(--border-play-hover); + box-shadow: + 0 6px 20px var(--shadow-play-hover), + inset 0 1px 1px rgba(255, 255, 255, 0.4); } .play-button:active { - background: linear-gradient(135deg, var(--btn-play-active), var(--btn-play-active-secondary)); - box-shadow: - 0 2px 10px var(--shadow-play), - inset 0 2px 4px rgba(0, 0, 0, 0.15); + background: linear-gradient(135deg, var(--btn-play-active), var(--btn-play-active-secondary)); + box-shadow: + 0 2px 10px var(--shadow-play), + inset 0 2px 4px rgba(0, 0, 0, 0.15); } /* ======================================== @@ -351,38 +356,40 @@ progressbar progress { ======================================== */ .expand-button { - background: linear-gradient(135deg, var(--btn-expand), var(--btn-expand-secondary)); - border-color: var(--border-expand); - box-shadow: - 0 4px 16px var(--shadow-expand), - inset 0 1px 1px rgba(255, 255, 255, 0.3); + background: linear-gradient(135deg, var(--btn-expand), var(--btn-expand-secondary)); + border-color: var(--border-expand); + box-shadow: + 0 4px 16px var(--shadow-expand), + inset 0 1px 1px rgba(255, 255, 255, 0.3); } .expand-button:hover { - background: linear-gradient(135deg, var(--btn-expand-hover), var(--btn-expand-hover-secondary)); - border-color: var(--border-expand-hover); - box-shadow: - 0 6px 20px var(--shadow-expand-hover), - inset 0 1px 1px rgba(255, 255, 255, 0.4); + background: linear-gradient(135deg, var(--btn-expand-hover), var(--btn-expand-hover-secondary)); + border-color: var(--border-expand-hover); + box-shadow: + 0 6px 20px var(--shadow-expand-hover), + inset 0 1px 1px rgba(255, 255, 255, 0.4); } .expand-button:active { - background: linear-gradient(135deg, var(--btn-expand-active), var(--btn-expand-active-secondary)); - box-shadow: - 0 2px 10px var(--shadow-expand), - inset 0 2px 4px rgba(0, 0, 0, 0.15); + background: linear-gradient(135deg, var(--btn-expand-active), var(--btn-expand-active-secondary)); + box-shadow: + 0 2px 10px var(--shadow-expand), + inset 0 2px 4px rgba(0, 0, 0, 0.15); } /* ======================================== Previous/Next Buttons ======================================== */ -.prev-button, .next-button { - background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); +.prev-button, +.next-button { + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); } -.prev-button:hover, .next-button:hover { - background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); +.prev-button:hover, +.next-button:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); } /* ======================================== @@ -390,15 +397,15 @@ progressbar progress { ======================================== */ button { - outline: none; + outline: none; } button:focus { - outline: none; - box-shadow: - 0 0 0 3px var(--shadow-focus), - 0 4px 16px var(--shadow-play), - inset 0 1px 1px rgba(255, 255, 255, 0.3); + outline: none; + box-shadow: + 0 0 0 3px var(--shadow-focus), + 0 4px 16px var(--shadow-play), + inset 0 1px 1px rgba(255, 255, 255, 0.3); } /* ======================================== @@ -406,45 +413,54 @@ button:focus { ======================================== */ .notification-window { - background: transparent; + background: transparent; } .notification-container { - background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); - border-radius: var(--border-radius-section); - border: 1px solid var(--border-primary); - padding: 10px 12px; /* Reduced from 12px to 10px vertical padding */ - min-width: 280px; /* Reduced from 320px */ - max-width: 300px; /* Added max-width */ + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 1px solid var(--border-primary); + padding: 10px 12px; + /* Reduced from 12px to 10px vertical padding */ + min-width: 280px; + /* Reduced from 320px */ + max-width: 300px; + /* Added max-width */ } .notification-album { - background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary)); - border-radius: var(--border-radius-album); - border: 1px solid var(--border-button); + background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary)); + border-radius: var(--border-radius-album); + border: 1px solid var(--border-button); } .notification-header { - color: var(--text-muted); - font-size: 10px; /* Reduced from 11px */ - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.5px; - margin-bottom: 6px; /* Reduced from 8px */ + color: var(--text-muted); + font-size: 10px; + /* Reduced from 11px */ + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + margin-bottom: 6px; + /* Reduced from 8px */ } .notification-song { - color: var(--text-primary); - font-size: 13px; /* Reduced from 14px */ - font-weight: 600; - line-height: 1.2; /* Added for tighter spacing */ + color: var(--text-primary); + font-size: 13px; + /* Reduced from 14px */ + font-weight: 600; + line-height: 1.2; + /* Added for tighter spacing */ } .notification-artist { - color: var(--text-secondary); - font-size: 11px; /* Reduced from 12px */ - font-weight: 500; - line-height: 1.2; /* Added for tighter spacing */ + color: var(--text-secondary); + font-size: 11px; + /* Reduced from 12px */ + font-weight: 500; + line-height: 1.2; + /* Added for tighter spacing */ } /* ======================================== @@ -452,75 +468,75 @@ button:focus { ======================================== */ .volume-container { - background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); - border-radius: var(--border-radius-section); - border: 1px solid var(--border-primary); - padding: 12px; - margin: 0px; + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 1px solid var(--border-primary); + padding: 12px; + margin: 0px; } .volume-icon { - min-width: 20px; - min-height: 20px; + min-width: 20px; + min-height: 20px; } .volume-percentage { - color: var(--text-primary); - font-size: 13px; - font-weight: 600; - min-width: 40px; + color: var(--text-primary); + font-size: 13px; + font-weight: 600; + min-width: 40px; } /* Volume slider - similar to progress bar but with different colors */ .volume-slider { - min-height: 24px; - min-width: 24px; + min-height: 24px; + min-width: 24px; } /* The background track */ .volume-slider trough { - background: var(--progress-bg); - border-radius: var(--border-radius-progress); - min-height: 6px; - min-width: 6px; + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 6px; + min-width: 6px; } /* The filled portion */ .volume-slider progress { - background: linear-gradient(90deg, var(--btn-default), var(--btn-default-secondary)); - border-radius: var(--border-radius-progress); - min-height: 6px; - min-width: 6px; + background: linear-gradient(90deg, var(--btn-default), var(--btn-default-secondary)); + border-radius: var(--border-radius-progress); + min-height: 6px; + min-width: 6px; } /* The slider handle */ .volume-slider slider { - min-height: 16px; - min-width: 16px; - background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); - border: 2px solid var(--border-button); - border-radius: 50%; + min-height: 16px; + min-width: 16px; + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + border: 2px solid var(--border-button); + border-radius: 50%; } .volume-slider slider:hover { - background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); - border-color: var(--border-button-hover); - transform: scale(1.1); + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); + border-color: var(--border-button-hover); + transform: scale(1.1); } .volume-slider slider:active { - background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); - transform: scale(0.95); + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + transform: scale(0.95); } /* GTK4 specific for vertical sliders */ .volume-slider.vertical trough { - min-width: 6px; + min-width: 6px; } .volume-slider.vertical progress { - min-width: 6px; + min-width: 6px; } @@ -530,38 +546,40 @@ button:focus { /* Container padding to keep bars inside control bar edges */ .visualizer-container { - padding: 0px; /* 5px padding on left/right keeps bars inside */ - padding-bottom: 1px; /* Small bottom padding to align with control bar bottom */ - border-radius: 0 0 12px 12px; + padding: 0px; + /* 5px padding on left/right keeps bars inside */ + padding-bottom: 1px; + /* Small bottom padding to align with control bar bottom */ + border-radius: 0 0 12px 12px; } -Smooth control bar height transitions for idle mode */ -.control-container-horizontal { - transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +Smooth control bar height transitions for idle mode */ .control-container-horizontal { + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* Smooth button fade transitions */ .control-button { - transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1), - opacity 0.3s ease-in-out; + transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1), + opacity 0.3s ease-in-out; } /* Ensure overlay respects size changes */ overlay { - transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* Vertical Display (for vertical layouts) */ .vertical-display-container { - background: transparent; - padding: 8px 4px; + background: transparent; + padding: 8px 4px; } .vertical-display-label { - font-family: 'VT323', monospace; - font-size: 28px; - font-weight: bold; - color: white; /* Match visualizer bar color */ - letter-spacing: 0px; - line-height: 1.2; + font-family: 'VT323', monospace; + font-size: 28px; + font-weight: bold; + color: white; + /* Match visualizer bar color */ + letter-spacing: 0px; + line-height: 1.2; } diff --git a/config/niri/config.kdl b/config/niri/config.kdl index 37a6801..17e7215 100644 --- a/config/niri/config.kdl +++ b/config/niri/config.kdl @@ -115,7 +115,7 @@ layout { //off width 4 active-color "#25c39f" - inactive-color "#c1d6d6" + inactive-color "#eef7fd" } shadow { @@ -169,6 +169,8 @@ cursor { } spawn-at-startup "niri-screen-time" "-daemon" + +spawn-at-startup "mpDris2" spawn-at-startup "swayosd-server" spawn-at-startup "walker" "--gapplication-service" @@ -212,49 +214,56 @@ animations { // Slow down all animations by this factor. Values below 1 speed them up instead. slowdown 1.0 workspace-switch { - spring damping-ratio=0.8 stiffness=1000 epsilon=0.00001 + spring damping-ratio=0.65 stiffness=600 epsilon=0.0001 } window-open { - duration-ms 200 - curve "ease-out-quad" + // duration-ms 200 + // curve "ease-out-quad" + // + spring damping-ratio=0.65 stiffness=600 epsilon=0.0001 + } window-close { - duration-ms 200 + //duration-ms 200 - curve "ease-out-quad" + //curve "ease-out-quad" + // + spring damping-ratio=0.65 stiffness=600 epsilon=0.0001 } horizontal-view-movement { - spring damping-ratio=0.8 stiffness=1000 epsilon=0.0001 + spring damping-ratio=0.65 stiffness=600 epsilon=0.0001 } window-movement { - spring damping-ratio=0.8 stiffness=800 epsilon=0.0001 + spring damping-ratio=0.65 stiffness=600 epsilon=0.0001 } window-resize { - spring damping-ratio=0.8 stiffness=800 epsilon=0.0001 + spring damping-ratio=0.65 stiffness=600 epsilon=0.0001 } config-notification-open-close { - spring damping-ratio=0.6 stiffness=1000 epsilon=0.001 + spring damping-ratio=0.65 stiffness=600 epsilon=0.0001 } exit-confirmation-open-close { - spring damping-ratio=0.6 stiffness=500 epsilon=0.01 + spring damping-ratio=0.65 stiffness=600 epsilon=0.0001 } screenshot-ui-open { - duration-ms 200 - curve "ease-out-quad" + // duration-ms 200 + //curve "ease-out-quad" + spring damping-ratio=0.65 stiffness=600 epsilon=0.0001 } overview-open-close { - spring damping-ratio=0.8 stiffness=800 epsilon=0.0001 + spring damping-ratio=0.65 stiffness=600 epsilon=0.0001 } recent-windows-close { - spring damping-ratio=1.0 stiffness=800 epsilon=0.001 + spring damping-ratio=0.65 stiffness=600 epsilon=0.0001 + } } @@ -384,6 +393,23 @@ xwayland-satellite { binds { + // MOD+SHIFT+M { spawn "hyprwave-toggle visibility"; } + // MOD+M { spawn-sh "hyprwave-toggle expand"; } + + //Mod+M { spawn "hyprwave-toggle" "visibility"; } + // Media Controls + Mod+P { spawn-sh "playerctl -p mpd play-pause"; } + Mod+Period { spawn-sh "playerctl -p mpd next"; } + Mod+Comma { spawn-sh "playerctl -p mpd previous"; } + + // Theme Switching (v1.0) + // MOD+SHIFT+T { spawn-sh "hyprwave-toggle set-theme zzz"; } + + // Position Switching (v1.0) + // MOD+SHIFT+LEFT { spawn-sh "hyprwave-toggle set-position left"; } + //MOD+SHIFT+RIGHT { spawn-sh "hyprwave-toggle set-position right"; } + //MOD+SHIFT+UP { spawn-sh "hyprwave-toggle set-position top"; } + //MOD+SHIFT+DOWN { spawn-sh "hyprwave-toggle set-position bottom"; } @@ -668,12 +694,12 @@ binds { // * adjust width as a percentage of screen width: "-10%" or "+10%" // Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0, // set-column-width "100" will make the column occupy 200 physical screen pixels. - Mod+Minus { set-column-width "-10%"; } - Mod+Equal { set-column-width "+10%"; } + Mod+Minus { set-column-width "-5%"; } + Mod+Equal { set-column-width "+5%"; } // Finer height adjustments when in column with other windows. - Mod+Shift+Minus { set-window-height "-10%"; } - Mod+Shift+Equal { set-window-height "+10%"; } + Mod+Shift+Minus { set-window-height "-5%"; } + Mod+Shift+Equal { set-window-height "+5%"; } Mod+V { toggle-window-floating; } // Move the focused window between the floating and the tiling layout. diff --git a/config/swaync/config.json b/config/swaync/config.json new file mode 100644 index 0000000..565fea5 --- /dev/null +++ b/config/swaync/config.json @@ -0,0 +1,99 @@ +{ + "$schema": "/etc/xdg/swaync/configSchema.json", + "ignore-gtk-theme": true, + "positionX": "right", + "positionY": "top", + "layer": "overlay", + "control-center-layer": "top", + "layer-shell": true, + "layer-shell-cover-screen": true, + "cssPriority": "user", + "control-center-margin-top": 0, + "control-center-margin-bottom": 0, + "control-center-margin-right":0, + "control-center-margin-left": 0, + "notification-2fa-action": true, + "notification-inline-replies": false, + "notification-body-image-height": 100, + "notification-body-image-width": 200, + "timeout": 10, + "timeout-low": 5, + "timeout-critical": 0, + "fit-to-screen": true, + "relative-timestamps": true, + "control-center-width": 500, + "control-center-height": 600, + "notification-window-width": 500, + "keyboard-shortcuts": true, + "notification-grouping": true, + "image-visibility": "when-available", + "transition-time": 200, + "hide-on-clear": false, + "hide-on-action": true, + "text-empty": "No Notifications", + "script-fail-notify": true, + "scripts": { + "example-script": { + "exec": "echo 'Do something...'", + "urgency": "Normal" + }, + "example-action-script": { + "exec": "echo 'Do something actionable!'", + "urgency": "Normal", + "run-on": "action" + } + }, + "notification-visibility": { + "example-name": { + "state": "muted", + "urgency": "Low", + "app-name": "Spotify" + } + }, + "widgets": [ + "inhibitors", + "title", + "dnd", + "notifications" + ], + "widget-config": { + "notifications": { + "vexpand": true + }, + "inhibitors": { + "text": "Inhibitors", + "button-text": "Clear All", + "clear-all-button": true + }, + "title": { + "text": "Notifications", + "clear-all-button": true, + "button-text": "Clear All" + }, + "dnd": { + "text": "Do Not Disturb" + }, + "label": { + "max-lines": 5, + "text": "Label Text" + }, + "mpris": { + "blacklist": [], + "autohide": false, + "show-album-art": "always", + "loop-carousel": false + }, + "buttons-grid": { + "buttons-per-row": 7, + "actions": [ + { + "label": "яки", + "type": "toggle", + "active": true, + "command": "sh -c '[[ $SWAYNC_TOGGLE_STATE == true ]] && nmcli radio wifi on || nmcli radio wifi off'", + "update-command": "sh -c '[[ $(nmcli radio wifi) == \"enabled\" ]] && echo true || echo false'" + } + ] + } + } +} diff --git a/config/swaync/style.css b/config/swaync/style.css new file mode 100644 index 0000000..e82145b --- /dev/null +++ b/config/swaync/style.css @@ -0,0 +1,569 @@ +:root { + --cc-bg: #07090b; + --noti-border-color: #eef7fd; + --noti-bg: #07090b; + --noti-bg-alpha: 0.0; + --noti-bg-darker: #07090b; + --noti-bg-hover: #07090b; + --noti-bg-focus: #07090b; + --noti-close-bg: #1f2830; + --noti-close-bg-hover: #444446; + --text-color: #eef7fd; + --text-color-disabled: rgb(150, 150, 150); + --bg-selected: #1f2830; + --notification-icon-size: 64px; + --notification-app-icon-size: calc(var(--notification-icon-size) / 3); + --notification-group-icon-size: 32px; + --border: 4px solid var(--noti-border-color); + --border-radius: 10px; + --notification-shadow: 0 rgba(0, 0, 0, 0); + --font-size-body: 15px; + --font-size-summary: 16px; + /* Deprecated variables (because of their typos). Keeeping them around for backwards compatibility. */ + --hover-tranistion: background 0.15s ease-out-quad; + --group-collapse-tranistion: opacity 100ms ease-out-quad; + --hover-transition: var(--hover-tranistion); + --group-collapse-transition: var(--group-collapse-tranistion); +} + +/* Fallback for older CSS themes */ +/* Fallback for older CSS themes +@define-color cc-bg #07090b; +@define-color noti-border-color #eef7fd; +@define-color noti-bg rgba(48, 48, 48, 0.8); +@define-color noti-bg-opaque rgb(48, 48, 48); +@define-color noti-bg-darker rgb(38, 38, 38); +@define-color noti-bg-hover rgb(56, 56, 56); +@define-color noti-bg-hover-opaque rgb(56, 56, 56); +@define-color noti-bg-focus rgba(68, 68, 68, 0.6); +@define-color noti-close-bg rgba(255, 255, 255, 0.1); +@define-color noti-close-bg-hover rgba(255, 255, 255, 0.15); +@define-color text-color rgb(255, 255, 255); +@define-color text-color-disabled rgb(150, 150, 150); +@define-color bg-selected rgb(0, 128, 255); +*/ +notificationwindow, +blankwindow, +blankwindow { + background: #07090b; +} + +.close-button { + /* The notification Close Button */ + background: var(--noti-close-bg); + color: var(--text-color); + text-shadow: none; + padding: 0; + border-radius: 20%; + margin-top: 8px; + margin-right: 8px; + box-shadow: none; + border: none; + min-width: 24px; + min-height: 24px; +} + +.close-button:hover { + box-shadow: none; + background: var(--noti-close-bg-hover); + transition: var(--hover-tranistion); + border: none; +} + +.notification-row { + background: none; + outline: none; +} + +.notification-row:focus { + background: var(--noti-bg-focus); +} + +.notification-row .notification-background { + padding: 6px 12px; +} + +.notification-row .notification-background .notification { + /* The actual notification */ + border-radius: var(--border-radius); + border: var(--border); + padding: 0; + transition: var(--hover-tranistion); + background: rgba(var(--noti-bg), var(--noti-bg-alpha)); +} + +.notification-row .notification-background .notification.low { + /* Low Priority Notification */ +} + +.notification-row .notification-background .notification.normal { + /* Normal Priority Notification */ +} + +.notification-row .notification-background .notification.critical { + /* Critical Priority Notification */ +} + +.notification-row .notification-background .notification .notification-default-action { + /* The large action that also displays the notification summary and body */ + padding: 10px; + margin: 0; + box-shadow: none; + background: #07090b; + border: none; + color: var(--text-color); + transition: var(--hover-tranistion); + border-radius: var(--border-radius); +} + +.notification-row .notification-background .notification .notification-default-action:hover { + -gtk-icon-filter: none; + background: var(--noti-bg-hover); +} + +.notification-row .notification-background .notification .notification-default-action:not(:only-child) { + /* When alternative actions are visible */ + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content { + background: #07090b; + border-radius: var(--border-radius); + padding: 0; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .image { + /* Notification Primary Image */ + -gtk-icon-filter: none; + -gtk-icon-size: var(--notification-icon-size); + border-radius: 20px; + /* Size in px */ + margin: 10px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .app-icon { + /* Notification app icon (only visible when the primary image is set) */ + -gtk-icon-filter: none; + -gtk-icon-size: var(--notification-app-icon-size); + -gtk-icon-shadow: 0 1px 4px black; + margin: 5px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .text-box label { + /* Fixes base GTK 4 CSS setting a filter of opacity 50% for some odd reason */ + filter: none; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .summary { + /* Notification summary/title */ + font-size: var(--font-size-summary); + font-weight: bold; + background: #07090b; + color: var(--text-color); + text-shadow: none; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .time { + /* Notification time-ago */ + font-size: var(--font-size-summary); + font-weight: bold; + background: #07090b; + color: var(--text-color); + text-shadow: none; + margin-right: 30px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .body { + /* Notification body */ + font-size: var(--font-size-body); + font-weight: normal; + background: #07090b; + color: var(--text-color); + text-shadow: none; + margin: 10px; + padding: 10px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content progressbar { + /* The optional notification progress bar */ + margin-top: 20px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .body-image { + /* The "extra" optional bottom notification image */ + margin-top: 4px; + background-color: white; + -gtk-icon-filter: none; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply { + /* The inline reply section */ + margin-top: 4px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-entry { + background: var(--noti-bg-darker); + color: var(--text-color); + caret-color: var(--text-color); + border: var(--border); + border-radius: var(--border-radius); +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button { + margin-left: 4px; + background: rgba(var(--noti-bg), var(--noti-bg-alpha)); + border: var(--border); + border-radius: var(--border-radius); + color: var(--text-color); +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button:disabled { + background: initial; + color: var(--text-color-disabled); + border: var(--border); + border-color: #07090b; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button:hover { + background: var(--noti-bg-hover); +} + +.notification-row .notification-background .notification .notification-alt-actions { + background: none; + border-bottom-left-radius: var(--border-radius); + border-bottom-right-radius: var(--border-radius); + padding: 4px; +} + +.notification-row .notification-background .notification .notification-action { + /* The alternative actions below the default action */ + margin: 4px; + padding: 0; +} + +.notification-row .notification-background .notification .notification-action>button { + border-radius: var(--border-radius); + color: var(--text-color); +} + +.notification-group { + /* Styling only for Grouped Notifications */ + transition: opacity 200ms ease-in-out; + /* The groups close button */ +} + +.notification-group:focus { + background: var(--noti-bg-focus); +} + +.notification-group.low { + /* Low Priority Group */ +} + +.notification-group.normal { + /* Low Priority Group */ +} + +.notification-group.critical { + /* Low Priority Group */ +} + +.notification-group .notification-group-close-button .close-button { + margin: 20px 20px; +} + +.notification-group .notification-group-buttons, +.notification-group .notification-group-headers { + margin: 0 16px; + color: var(--text-color); +} + +.notification-group .notification-group-headers { + /* Notification Group Headers */ +} + +.notification-group .notification-group-headers .notification-group-icon { + color: var(--text-color); + -gtk-icon-size: var(--notification-group-icon-size); +} + +.notification-group .notification-group-headers .notification-group-header { + color: var(--text-color); +} + +.notification-group .notification-group-buttons { + /* Notification Group Buttons */ +} + +.notification-group.collapsed { + /* When another group is expanded, lower the opacity of the collapsed ones */ +} + +.notification-group.collapsed.not-expanded { + opacity: 1.0; +} + +.notification-group.collapsed .notification-row .notification { + background-color: rgba(var(--noti-bg), 1); +} + +.notification-group.collapsed .notification-row:not(:last-child) { + /* Top notification in stack */ + /* Set lower stacked notifications opacity to 0 */ +} + +.notification-group.collapsed .notification-row:not(:last-child) .notification-action, +.notification-group.collapsed .notification-row:not(:last-child) .notification-default-action { + opacity: 0; +} + +.notification-group.collapsed:hover .notification-row:not(:only-child) .notification { + background-color: var(--noti-bg-hover); +} + +.control-center { + /* The Control Center which contains the old notifications + widgets */ + background: var(--cc-bg); + color: var(--text-color); + border-radius: var(--border-radius); + padding: 10px; + margin: 10px; + border: 4px solid var(--noti-border-color); +} + +.control-center .control-center-list-placeholder { + /* The placeholder when there are no notifications */ + opacity: 1.0; +} + +.control-center .control-center-list { + /* List of notifications */ + background: #07090b; +} + +.control-center .control-center-list .notification { + box-shadow: var(--notification-shadow); +} + +.control-center .control-center-list .notification .notification-default-action, +.control-center .control-center-list .notification .notification-action { + transition: var(--group-collapse-tranistion), var(--hover-tranistion); +} + +.control-center .control-center-list .notification .notification-default-action:hover, +.control-center .control-center-list .notification .notification-action:hover { + background-color: var(--noti-bg-hover); +} + +.blank-window { + /* Window behind control center and on all other monitors */ + background: transparent; +} + +.floating-notifications { + background: transparent; +} + +.floating-notifications .notification { + box-shadow: none; +} + +/*** Widgets ***/ +.widget { + margin: 8px; + padding: 8px; + border-radius: var(--border-radius); +} + +/* Title widget */ +.widget-title>label { + margin-right: 8px; + font-size: 1.5rem; +} + +.widget-title>button { + margin-left: 8px; + border-radius: var(--border-radius); +} + +/* DND widget */ +.widget-dnd label { + color: var(--text-color); + margin-right: 8px; + font-size: 1.1rem; +} + +.widget-dnd switch { + border-radius: var(--border-radius); + margin-left: 8px; +} + +.widget-dnd switch slider { + border-radius: var(--border-radius); +} + +/* Label widget */ +.widget-label>label { + font-size: 1.1rem; +} + +/* Mpris widget */ +:root { + --mpris-album-art-overlay: rgba(0, 0, 0, 0.55); + --mpris-button-hover: rgba(0, 0, 0, 0.5); + --mpris-album-art-icon-size: 96px; + --mpris-album-art-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75); +} + +.widget-mpris { + padding: 0; + /* The parent to all players */ +} + +.widget-mpris .widget-mpris-player { + margin: 16px 20px; + border-radius: var(--border-radius); + box-shadow: var(--mpris-album-art-shadow); +} + +.widget-mpris .widget-mpris-player .mpris-background { + filter: blur(10px); +} + +.widget-mpris .widget-mpris-player .mpris-overlay { + padding: 16px; + background-color: var(--mpris-album-art-overlay); +} + +.widget-mpris .widget-mpris-player .mpris-overlay button:hover { + /* The media player buttons (play, pause, next, etc...) */ + background: var(--noti-bg-hover); +} + +.widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-album-art { + border-radius: var(--border-radius); + box-shadow: var(--mpris-album-art-shadow); + -gtk-icon-size: var(--mpris-album-art-icon-size); +} + +.widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-title { + font-weight: bold; + font-size: 1.25rem; +} + +.widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-subtitle { + font-size: 1.1rem; +} + +.widget-mpris .widget-mpris-player .mpris-overlay>box>button { + /* Change player control buttons */ +} + +.widget-mpris .widget-mpris-player .mpris-overlay>box>button:hover { + background-color: var(--mpris-button-hover); +} + +.widget-mpris>box>button { + /* Change player side buttons */ +} + +.widget-mpris>box>button:disabled { + /* Change player side buttons insensitive */ +} + +/* Buttons widget */ +.widget-buttons-grid flowboxchild>button { + border-radius: var(--border-radius); +} + +.widget-buttons-grid flowboxchild>button.toggle:checked { + /* style given to the active toggle button */ +} + +/* Menubar widget */ +.widget-menubar { + /* The revealer buttons */ + /* .AnyName { Name defined in config after # + background-color: rgba(var(--noti-bg), 1.0); + padding: 8px; + margin: 8px; + border-radius: 12px; + } + + .AnyName>button { + background: transparent; + border: none; + } + + .AnyName>button:hover { + background-color: var(--noti-bg-hover); + } */ +} + +.widget-menubar>.menu-button-bar { + /* The left button container */ + /* The right button container */ + /* The left and right button container */ +} + +.widget-menubar>.menu-button-bar>.start { + margin-left: 8px; +} + +.widget-menubar>.menu-button-bar>.end { + margin-right: 8px; +} + +.widget-menubar>.menu-button-bar>.widget-menubar-container button { + border-radius: var(--border-radius); + margin: 0 4px; +} + +.widget-menubar>revealer * { + margin-top: 8px; +} + +.widget-menubar>revealer * button { + border-radius: var(--border-radius); + margin: 8px; + margin-top: 0; +} + +.widget-menubar>revealer * button:last-child { + margin-bottom: 0; +} + +/* Volume widget */ +:root { + --widget-volume-row-icon-size: 24px; +} + +/* Each row app icon */ +.widget-volume row image { + -gtk-icon-size: var(--widget-volume-row-icon-size); +} + +.per-app-volume { + background-color: var(--noti-bg-alt); + margin: 8px; + margin-bottom: 0; + border-radius: var(--border-radius); +} + +/* Slider widget */ +.widget-slider label { + font-size: inherit; +} + +/* Backlight widget */ +/* Inhibitors widget */ +.widget-inhibitors>label { + margin-right: 8px; + font-size: 1.5rem; +} + +.widget-inhibitors>button { + margin-left: 8px; + border-radius: var(--border-radius); +} diff --git a/config/swayosd/style.css b/config/swayosd/style.css new file mode 100644 index 0000000..2461c74 --- /dev/null +++ b/config/swayosd/style.css @@ -0,0 +1,51 @@ +window#osd { + border-radius: 20px; + border: 4px solid #eef7fd; + background: #07090b; + + #container { + margin: 16px; + } + + image, + label { + color: #eef7fd; + } + + progressbar:disabled, + image:disabled { + opacity: 1.0; + } + + progressbar, + segmentedprogress { + min-height: 6px; + border-radius: 999px; + background: #d2dee7; + border: none; + } + + trough, + segment { + min-height: inherit; + border-radius: inherit; + border: none; + background: #07090b; + } + + progress, + segment.active { + min-height: inherit; + border-radius: inherit; + border: none; + background: #eef7fd; + } + + segment { + margin-left: 8px; + + &:first-child { + margin-left: 0; + } + } +} diff --git a/local/share/hyprwave/style.css b/local/share/hyprwave/style.css new file mode 100644 index 0000000..1da6755 --- /dev/null +++ b/local/share/hyprwave/style.css @@ -0,0 +1,1055 @@ +/* ======================================== + HyprWave - OCTANE Theme + Pure black and white with bright white accents + ======================================== */ + +:root { + /* Background Colors - Deep Black */ + --bg-primary: #07090b; + --bg-secondary: #07090b; + --bg-album-cover: #07090b; + --bg-album-secondary: #07090b; + + /* Button Colors - Default (Prev/Next) - Soft White */ + --btn-default: #eef7fd; + --btn-default-secondary: #eef7fd; + + --btn-default-active: #82d1b9; + --btn-default-hover: #d2dee7; + --btn-default-hover-secondary: #d2dee7; + + /* Button Colors - Play/Pause - Bright White */ + --btn-play: #eef7fd; + --btn-play-secondary: #eef7fd; + --btn-play-hover: #d2dee7; + --btn-play-hover-secondary: #d2dee7; + --btn-play-active: #82d1b9; + --btn-play-active-secondary: #82d1b9; + + /* Button Colors - Expand - Cool White */ + --btn-expand: #eef7fd; + --btn-expand-secondary: #eef7fd; + --btn-expand-hover: #d2dee7; + --btn-expand-hover-secondary: #d2dee7; + --btn-expand-active: #82d1b9; + --btn-expand-active-secondary: #82d1b9; + + /* Progress Bar Colors */ + --progress-bg: #1f2830; + --progress-fill-start: #ff0100; + --progress-fill-end: #eef7fd; + + /* Slider Handle Colors */ + --handle-color: #eef7fd; + --handle-hover: #eef7fd; + --handle-border: #8fd2f7; + --handle-shadow: #8fd2f7; + + /* Text Colors - Bright white on pure black */ + --text-primary: #eef7fd; + --text-secondary: #d2dee7; + --text-tertiary: #d2dee7; + --text-muted: #33424f; + + /* Border Colors */ + --border-primary: #eef7fd; + --border-button: rgba(100, 100, 100, 0); + --border-button-hover: rgba(120, 120, 120, 0); + --border-play: rgba(255, 255, 255, 0); + --border-play-hover: rgba(255, 255, 255, 0); + --border-expand: rgba(235, 235, 240, 0); + --border-expand-hover: rgba(245, 245, 250, 0); + + /* Shadow Colors */ + --shadow-default: rgba(0, 0, 0, 0); + --shadow-button: rgba(0, 0, 0, 0); + --shadow-play: rgba(255, 255, 255, 0); + --shadow-play-hover: rgba(255, 255, 255, 0); + --shadow-expand: rgba(235, 235, 240, 0); + --shadow-expand-hover: rgba(245, 245, 250, 0); + --shadow-focus: rgba(255, 255, 255, 0); + + /* Spacing & Sizes */ + --border-radius-container: 20px; + --border-radius-section: 20px; + --border-radius-album: 4px; + --border-radius-button: 50%; + --border-radius-progress: 4px; + + --padding-container: 20px; + --padding-section: 20px; +} + +/* Visualizer bars - pure white with strong glow */ + +/* ======================================== + Base Styles + ======================================== */ + +/* GTK4 transparent window - CRITICAL for compositor transparency */ +window { + background-color: transparent; +} + +/* Ensure ALL window-level elements are transparent */ + + +/* Main container - transparent */ +.main-container { + background: transparent; +} + +/* ======================================== + Control Container (Vertical Bar) + ======================================== */ + +.control-container { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-container); + border: 10px solid var(--border-primary); + ; + + padding: var(--padding-container); + margin: 0; +} + +/* ======================================== + Control Container (Horizontal Bar) + For Top/Bottom Layouts + ======================================== */ + +.control-container-horizontal { + /* Match the vertical style exactly for consistency */ + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-container); + /* Keeps the pill shape */ + border: 4px solid var(--border-primary); + + /* Horizontal padding is critical here to prevent buttons + from touching the rounded edges */ + padding: 8px 24px; + margin: 0; +} + +/* ======================================== + Expanded Section (Album Details Card) + ======================================== */ + +.expanded-section { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + padding: var(--padding-section); + margin: 0; + margin-top: 4px; + /* Reduced spacing from control bar */ + + +} + +/* ======================================== + Expanded Section (Horizontal Layout) + For Top/Bottom Layouts + ======================================== */ + +.expanded-section-horizontal { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + + + /* Slightly different padding/margin to look good below/above the bar */ + padding: var(--padding-section); + margin-top: 2px; + /* Adds gap between control bar and this panel */ + margin-bottom: 2px; + + /* Ensure it doesn't get too squeezed */ + min-width: 300px; +} + +/* Album cover */ +.album-cover { + background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary)); + border-radius: var(--border-radius-album); + border: 4px solid var(--border-button); + box-shadow: 0 4px 16px var(--shadow-button); +} + +/* ======================================== + Text Styles + ======================================== */ + +/* Source label (e.g., "Spotify") */ +.source-label { + color: var(--text-muted); + font-size: 11px; + font-weight: 500; + margin-top: 8px; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +/* Track title */ +.track-title { + color: var(--text-primary); + font-size: 14px; + font-weight: 600; + margin-top: 4px; +} + +/* Artist label */ +.artist-label { + color: var(--text-secondary); + font-size: 12px; + font-weight: 500; + margin-top: 2px; +} + +/* Time remaining */ +.time-remaining { + color: var(--text-tertiary); + font-size: 12px; + font-weight: 500; + margin-top: 2px; +} + +/* ======================================== + Progress Bar - FIXED FOR GTK4 + ======================================== */ + +.track-progress { + min-height: 4px; + margin-top: 8px; + margin-bottom: 4px; +} + +/* The background track */ +.track-progress trough { + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +/* The filled progress portion - GTK4 specific */ +.track-progress progress { + background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end)); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +/* GTK4 also needs this for the fill bar to show */ +progressbar trough { + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +progressbar progress { + background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end)); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +/* ======================================== + Control Buttons - FIXED ROUNDED SHAPE + ======================================== */ + +/* All control buttons - base styles */ +.control-button { + padding: 0; + + /* Add margin to compensate for removed border */ + margin: 1.5px; + /* Same as the old border width */ + + min-width: 44px; + min-height: 44px; + + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + + border: none; + box-shadow: + inset 0 0 0 1.5px var(--border-button), + 0 4px 16px var(--shadow-button), + inset 0 1px 1px rgba(255, 255, 255, 0.2); + + border-radius: 50%; +} + +.control-button:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); + border-color: var(--border-button-hover); + box-shadow: + 0 6px 20px var(--shadow-button), + inset 0 1px 1px rgba(255, 255, 255, 0.25); + transform: translateY(-1px); +} + +.control-button:active { + transform: scale(0.96); + box-shadow: + 0 2px 8px var(--shadow-button), + inset 0 2px 4px rgba(0, 0, 0, 0.2); +} + +/* ======================================== + Play/Pause Button (Blue) + ======================================== */ + +.play-button { + background: linear-gradient(135deg, var(--btn-play), var(--btn-play-secondary)); + border-color: var(--border-play); + box-shadow: + 0 4px 16px var(--shadow-play), + inset 0 1px 1px rgba(255, 255, 255, 0.3); +} + +.play-button:hover { + background: linear-gradient(135deg, var(--btn-play-hover), var(--btn-play-hover-secondary)); + border-color: var(--border-play-hover); + box-shadow: + 0 6px 20px var(--shadow-play-hover), + inset 0 1px 1px rgba(255, 255, 255, 0.4); +} + +.play-button:active { + background: linear-gradient(135deg, var(--btn-play-active), var(--btn-play-active-secondary)); + box-shadow: + 0 2px 10px var(--shadow-play), + inset 0 2px 4px rgba(0, 0, 0, 0.15); +} + +/* ======================================== + Expand Button (Purple) + ======================================== */ + +.expand-button { + background: linear-gradient(135deg, var(--btn-expand), var(--btn-expand-secondary)); + border-color: var(--border-expand); + box-shadow: + 0 4px 16px var(--shadow-expand), + inset 0 1px 1px rgba(255, 255, 255, 0.3); +} + +.expand-button:hover { + background: linear-gradient(135deg, var(--btn-expand-hover), var(--btn-expand-hover-secondary)); + border-color: var(--border-expand-hover); + box-shadow: + 0 6px 20px var(--shadow-expand-hover), + inset 0 1px 1px rgba(255, 255, 255, 0.4); +} + +.expand-button:active { + background: linear-gradient(135deg, var(--btn-expand-active), var(--btn-expand-active-secondary)); + box-shadow: + 0 2px 10px var(--shadow-expand), + inset 0 2px 4px rgba(0, 0, 0, 0.15); +} + +/* ======================================== + Previous/Next Buttons + ======================================== */ + +.prev-button, +.next-button { + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); +} + +.prev-button:hover, +.next-button:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); +} + +/* ======================================== + Focus & Accessibility + ======================================== */ + +button { + outline: none; +} + +button:focus { + outline: none; + box-shadow: + 0 0 0 3px var(--shadow-focus), + 0 4px 16px var(--shadow-play), + inset 0 1px 1px rgba(255, 255, 255, 0.3); +} + +/* ======================================== + Notification Styles + ======================================== */ + +.notification-window { + background: transparent; +} + +.notification-container { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + padding: 10px 12px; + /* Reduced from 12px to 10px vertical padding */ + min-width: 280px; + /* Reduced from 320px */ + max-width: 300px; + /* Added max-width */ +} + +.notification-album { + background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary)); + border-radius: var(--border-radius-album); + border: 1px solid var(--border-button); + margin: 5px; +} + +.notification-header { + color: var(--text-muted); + font-size: 10px; + /* Reduced from 11px */ + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + margin-bottom: 6px; + /* Reduced from 8px */ +} + +.notification-song { + color: var(--text-primary); + font-size: 13px; + /* Reduced from 14px */ + font-weight: 600; + line-height: 1.2; + /* Added for tighter spacing */ +} + +.notification-artist { + color: var(--text-secondary); + font-size: 11px; + /* Reduced from 12px */ + font-weight: 500; + line-height: 1.2; + /* Added for tighter spacing */ +} + +/* ======================================== + Volume Control Styles + ======================================== */ + +.volume-container { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + padding: 12px; + margin: 0px; +} + +.volume-icon { + min-width: 20px; + min-height: 20px; +} + +.volume-percentage { + color: var(--text-primary); + font-size: 13px; + font-weight: 600; + min-width: 40px; +} + +/* Volume slider - similar to progress bar but with different colors */ +.volume-slider { + min-height: 24px; + min-width: 24px; +} + +/* The background track */ +.volume-slider trough { + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 6px; + min-width: 6px; +} + +/* The filled portion */ +.volume-slider progress { + background: linear-gradient(90deg, var(--btn-default), var(--btn-default-secondary)); + border-radius: var(--border-radius-progress); + min-height: 6px; + min-width: 6px; +} + +/* The slider handle */ +.volume-slider slider { + min-height: 16px; + min-width: 16px; + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + border: 2px solid var(--border-button); + border-radius: 50%; + +} + +.volume-slider slider:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); + border-color: var(--border-button-hover); + transform: scale(1.1); +} + +.volume-slider slider:active { + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + transform: scale(0.95); +} + +/* GTK4 specific for vertical sliders */ +.volume-slider.vertical trough { + min-width: 6px; +} + +.volume-slider.vertical progress { + min-width: 6px; +} + + +/* ======================================== + Visualizer Bars - Idle Mode Animation + ======================================== */ + +/* Container padding to keep bars inside control bar edges */ +.visualizer-container { + padding: 0px; + /* 5px padding on left/right keeps bars inside */ + padding-bottom: 1px; + /* Small bottom padding to align with control bar bottom */ + border-radius: 0 0 12px 12px; +} + +Smooth control bar height transitions for idle mode */ .control-container-horizontal { + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +/* Smooth button fade transitions */ +.control-button { + transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1), + opacity 0.3s ease-in-out; +} + +/* Ensure overlay respects size changes */ +overlay { + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +/* Vertical Display (for vertical layouts) */ +.vertical-display-container { + background: transparent; + padding: 8px 4px; +} + +.vertical-display-label { + font-family: 'IosevkaTerm Nerd Font', monospace; + font-size: 28px; + font-weight: bold; + color: white; + /* Match visualizer bar color */ + letter-spacing: 0px; + line-height: 1.2; +} +/* CRITICAL: Disable CSS transitions during JavaScript animations */ +.no-transition, +.no-transition * { + transition: none !important; + animation: none !important; +} + +/* ======================================== + Base Styles + ======================================== */ + +/* GTK4 transparent window - CRITICAL for compositor transparency */ +window, +window.background, +.hyprwave-window { + background-color: transparent; + background-image: none; +} + +/* Ensure ALL window-level elements are transparent */ +window>* { + background: transparent; +} + +/* Main container - transparent */ +.main-container { + background: transparent; + +} + +/* ======================================== + Control Container (Vertical Bar) + ======================================== */ + +.control-container { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-container); + border: 4px solid var(--border-primary); + + padding: var(--padding-container); + margin: 0; +} + +/* ======================================== + Control Container (Horizontal Bar) + For Top/Bottom Layouts + ======================================== */ + +.control-container-horizontal { + /* Match the vertical style exactly for consistency */ + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-container); + /* Keeps the pill shape */ + border: 4px solid var(--border-primary); + + /* Horizontal padding is critical here to prevent buttons + from touching the rounded edges */ + padding: 8px 24px; + margin: 0; + width: 150%; + height: auto; +} + +/* ======================================== + Expanded Section (Album Details Card) + ======================================== */ + +.expanded-section { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + padding: var(--padding-section); + margin: 20px 50px 20px 50px; + margin-top: 4px; + /* Reduced spacing from control bar */ + + +} + +/* ======================================== + Expanded Section (Horizontal Layout) + For Top/Bottom Layouts + ======================================== */ + +.expanded-section-horizontal { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + + + /* Slightly different padding/margin to look good below/above the bar */ + padding: var(--padding-section); + margin-top: 2px; + /* Adds gap between control bar and this panel */ + margin-bottom: 2px; + + /* Ensure it doesn't get too squeezed */ + min-width: 300px; +} + +/* Album cover */ +.album-cover { + background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary)); + border-radius: var(--border-radius-album); + border: 1px solid var(--border-button); + box-shadow: 0 4px 16px var(--shadow-button); +} + +/* ======================================== + Text Styles + ======================================== */ + +/* Source label (e.g., "Spotify") */ +.source-label { + color: var(--text-muted); + font-size: 11px; + font-weight: 500; + margin-top: 8px; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +/* Track title */ +.track-title { + color: var(--text-primary); + font-size: 14px; + font-weight: 600; + margin-top: 4px; +} + +/* Artist label */ +.artist-label { + color: var(--text-secondary); + font-size: 12px; + font-weight: 500; + margin-top: 2px; +} + +/* Time remaining */ +.time-remaining { + color: var(--text-tertiary); + font-size: 12px; + font-weight: 500; + margin-top: 2px; +} + +/* ======================================== + Progress Bar - FIXED FOR GTK4 + ======================================== */ + +.track-progress { + min-height: 4px; + margin-top: 8px; + margin-bottom: 4px; +} + +/* The background track */ +.track-progress trough { + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +/* The filled progress portion - GTK4 specific */ +.track-progress progress { + background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end)); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +/* GTK4 also needs this for the fill bar to show */ +progressbar trough { + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +progressbar progress { + background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end)); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +/* ======================================== + Control Buttons - FIXED ROUNDED SHAPE + ======================================== */ + +/* All control buttons - base styles */ +.control-button { + padding: 0; + + /* Add margin to compensate for removed border */ + margin: 1.5px; + /* Same as the old border width */ + + min-width: 44px; + min-height: 44px; + + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + + border: none; + box-shadow: + inset 0 0 0 1.5px var(--border-button), + 0 4px 16px var(--shadow-button), + inset 0 1px 1px rgba(255, 255, 255, 0.2); + + border-radius: 50%; +} + +.control-button:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); + border-color: var(--border-button-hover); + box-shadow: + 0 6px 20px var(--shadow-button), + inset 0 1px 1px rgba(255, 255, 255, 0.25); + transform: translateY(-1px); +} + +.control-button:active { + transform: scale(0.96); + box-shadow: + 0 2px 8px var(--shadow-button), + inset 0 2px 4px rgba(0, 0, 0, 0.2); +} + +/* ======================================== + Play/Pause Button (Blue) + ======================================== */ + +.play-button { + background: linear-gradient(135deg, var(--btn-play), var(--btn-play-secondary)); + border-color: var(--border-play); + box-shadow: + 0 4px 16px var(--shadow-play), + inset 0 1px 1px rgba(255, 255, 255, 0.3); +} + +.play-button:hover { + background: linear-gradient(135deg, var(--btn-play-hover), var(--btn-play-hover-secondary)); + border-color: var(--border-play-hover); + box-shadow: + 0 6px 20px var(--shadow-play-hover), + inset 0 1px 1px rgba(255, 255, 255, 0.4); +} + +.play-button:active { + background: linear-gradient(135deg, var(--btn-play-active), var(--btn-play-active-secondary)); + box-shadow: + 0 2px 10px var(--shadow-play), + inset 0 2px 4px rgba(0, 0, 0, 0.15); +} + +/* ======================================== + Expand Button (Purple) + ======================================== */ + +.expand-button { + background: linear-gradient(135deg, var(--btn-expand), var(--btn-expand-secondary)); + border-color: var(--border-expand); + box-shadow: + 0 4px 16px var(--shadow-expand), + inset 0 1px 1px rgba(255, 255, 255, 0.3); +} + +.expand-button:hover { + background: linear-gradient(135deg, var(--btn-expand-hover), var(--btn-expand-hover-secondary)); + border-color: var(--border-expand-hover); + box-shadow: + 0 6px 20px var(--shadow-expand-hover), + inset 0 1px 1px rgba(255, 255, 255, 0.4); +} + +.expand-button:active { + background: linear-gradient(135deg, var(--btn-expand-active), var(--btn-expand-active-secondary)); + box-shadow: + 0 2px 10px var(--shadow-expand), + inset 0 2px 4px rgba(0, 0, 0, 0.15); +} + +/* ======================================== + Previous/Next Buttons + ======================================== */ + +.prev-button, +.next-button { + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); +} + +.prev-button:hover, +.next-button:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); +} + +.prev-button:active { + background: linear-gradient(135deg, var(--btn-expand-active), var(--btn-expand-active-secondary)); + box-shadow: + 0 2px 10px var(--shadow-expand), + inset 0 2px 4px rgba(0, 0, 0, 0.15); +} + +.next-button:active { + background: linear-gradient(135deg, var(--btn-expand-active), var(--btn-expand-active-secondary)); + box-shadow: + 0 2px 10px var(--shadow-expand), + inset 0 2px 4px rgba(0, 0, 0, 0.15); +} + + + +/* ======================================== + Focus & Accessibility + ======================================== */ + +button { + outline: none; +} + +button:focus { + outline: none; + box-shadow: + 0 0 0 3px var(--shadow-focus), + 0 4px 16px var(--shadow-play), + inset 0 1px 1px rgba(255, 255, 255, 0.3); +} + +/* ======================================== + Notification Styles + ======================================== */ + +.notification-window { + background: transparent; +} + +.notification-container { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + padding: 10px 12px; + /* Reduced from 12px to 10px vertical padding */ + min-width: 280px; + /* Reduced from 320px */ + max-width: 300px; + /* Added max-width */ +} + +.notification-album { + background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary)); + border-radius: var(--border-radius-album); + border: 1px solid var(--border-button); +} + +.notification-header { + color: var(--text-muted); + font-size: 10px; + /* Reduced from 11px */ + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + margin-bottom: 6px; + /* Reduced from 8px */ +} + +.notification-song { + color: var(--text-primary); + font-size: 13px; + /* Reduced from 14px */ + font-weight: 600; + line-height: 1.2; + /* Added for tighter spacing */ +} + +.notification-artist { + color: var(--text-secondary); + font-size: 11px; + /* Reduced from 12px */ + font-weight: 500; + line-height: 1.2; + /* Added for tighter spacing */ +} + +/* ======================================== + Volume Control Styles + ======================================== */ + +.volume-container { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 1px solid var(--border-primary); + padding: 12px; + margin: 0px; +} + +.volume-icon { + min-width: 20px; + min-height: 20px; +} + +.volume-percentage { + color: var(--text-primary); + font-size: 13px; + font-weight: 600; + min-width: 40px; +} + +/* Volume slider - similar to progress bar but with different colors */ +.volume-slider { + min-height: 24px; + min-width: 24px; +} + +/* The background track */ +.volume-slider trough { + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 6px; + min-width: 6px; +} + +/* The filled portion */ +.volume-slider progress { + background: linear-gradient(90deg, var(--btn-default), var(--btn-default-secondary)); + border-radius: var(--border-radius-progress); + min-height: 6px; + min-width: 6px; +} + +/* The slider handle */ +.volume-slider slider { + min-height: 16px; + min-width: 16px; + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + border: 2px solid var(--border-button); + border-radius: 50%; + +} + +.volume-slider slider:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); + border-color: var(--border-button-hover); + transform: scale(1.1); +} + +.volume-slider slider:active { + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + transform: scale(0.95); +} + +/* GTK4 specific for vertical sliders */ +.volume-slider.vertical trough { + min-width: 6px; +} + +.volume-slider.vertical progress { + min-width: 6px; +} + + +/* ======================================== + Visualizer Bars - Idle Mode Animation + ======================================== */ + +/* Container padding to keep bars inside control bar edges */ +.visualizer-container { + padding: 0px; + /* 5px padding on left/right keeps bars inside */ + padding-bottom: 1px; + /* Small bottom padding to align with control bar bottom */ + border-radius: 0 0 12px 12px; +} + +Smooth control bar height transitions for idle mode */ .control-container-horizontal { + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +/* Smooth button fade transitions */ +.control-button { + transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1), + opacity 0.3s ease-in-out; +} + +/* Ensure overlay respects size changes */ +overlay { + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +/* Vertical Display (for vertical layouts) */ +.vertical-display-container { + background: transparent; + padding: 8px 4px; +} + +.vertical-display-label { + font-family: 'VT323', monospace; + font-size: 28px; + font-weight: bold; + color: white; + /* Match visualizer bar color */ + letter-spacing: 0px; + line-height: 1.2; +} diff --git a/local/share/hyprwave/themes/zzz.css b/local/share/hyprwave/themes/zzz.css new file mode 100644 index 0000000..ce49fab --- /dev/null +++ b/local/share/hyprwave/themes/zzz.css @@ -0,0 +1,555 @@ +/* ======================================== + HyprWave - OCTANE Theme + Pure black and white with bright white accents + ======================================== */ + +:root { + /* Background Colors - Deep Black */ + --bg-primary: #07090b; + --bg-secondary: #07090b; + --bg-album-cover: #07090b; + --bg-album-secondary: #07090b; + + /* Button Colors - Default (Prev/Next) - Soft White */ + --btn-default: #eef7fd; + --btn-default-secondary: #eef7fd; + + --btn-default-active: #82d1b9; + --btn-default-hover: #d2dee7; + --btn-default-hover-secondary: #d2dee7; + + /* Button Colors - Play/Pause - Bright White */ + --btn-play: #eef7fd; + --btn-play-secondary: #eef7fd; + --btn-play-hover: #d2dee7; + --btn-play-hover-secondary: #d2dee7; + --btn-play-active: #82d1b9; + --btn-play-active-secondary: #82d1b9; + + /* Button Colors - Expand - Cool White */ + --btn-expand: #eef7fd; + --btn-expand-secondary: #eef7fd; + --btn-expand-hover: #d2dee7; + --btn-expand-hover-secondary: #d2dee7; + --btn-expand-active: #82d1b9; + --btn-expand-active-secondary: #82d1b9; + + /* Progress Bar Colors */ + --progress-bg: #1f2830; + --progress-fill-start: #ff0100; + --progress-fill-end: #eef7fd; + + /* Slider Handle Colors */ + --handle-color: #eef7fd; + --handle-hover: #eef7fd; + --handle-border: #8fd2f7; + --handle-shadow: #8fd2f7; + + /* Text Colors - Bright white on pure black */ + --text-primary: #eef7fd; + --text-secondary: #d2dee7; + --text-tertiary: #d2dee7; + --text-muted: #33424f; + + /* Border Colors */ + --border-primary: #eef7fd; + --border-button: rgba(100, 100, 100, 0); + --border-button-hover: rgba(120, 120, 120, 0); + --border-play: rgba(255, 255, 255, 0); + --border-play-hover: rgba(255, 255, 255, 0); + --border-expand: rgba(235, 235, 240, 0); + --border-expand-hover: rgba(245, 245, 250, 0); + + /* Shadow Colors */ + --shadow-default: rgba(0, 0, 0, 0); + --shadow-button: rgba(0, 0, 0, 0); + --shadow-play: rgba(255, 255, 255, 0); + --shadow-play-hover: rgba(255, 255, 255, 0); + --shadow-expand: rgba(235, 235, 240, 0); + --shadow-expand-hover: rgba(245, 245, 250, 0); + --shadow-focus: rgba(255, 255, 255, 0); + + /* Spacing & Sizes */ + --border-radius-container: 20px; + --border-radius-section: 20px; + --border-radius-album: 4px; + --border-radius-button: 50%; + --border-radius-progress: 4px; + + --padding-container: 20px; + --padding-section: 20px; +} + +/* Visualizer bars - pure white with strong glow */ + +/* ======================================== + Base Styles + ======================================== */ + +/* GTK4 transparent window - CRITICAL for compositor transparency */ +window { + background-color: transparent; +} + +/* Ensure ALL window-level elements are transparent */ + + +/* Main container - transparent */ +.main-container { + background: transparent; +} + +/* ======================================== + Control Container (Vertical Bar) + ======================================== */ + +.control-container { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-container); + border: 10px solid var(--border-primary); + ; + + padding: var(--padding-container); + margin: 0; +} + +/* ======================================== + Control Container (Horizontal Bar) + For Top/Bottom Layouts + ======================================== */ + +.control-container-horizontal { + /* Match the vertical style exactly for consistency */ + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-container); + /* Keeps the pill shape */ + border: 4px solid var(--border-primary); + + /* Horizontal padding is critical here to prevent buttons + from touching the rounded edges */ + padding: 8px 24px; + margin: 0; +} + +/* ======================================== + Expanded Section (Album Details Card) + ======================================== */ + +.expanded-section { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + padding: var(--padding-section); + margin: 0; + margin-top: 4px; + /* Reduced spacing from control bar */ + + +} + +/* ======================================== + Expanded Section (Horizontal Layout) + For Top/Bottom Layouts + ======================================== */ + +.expanded-section-horizontal { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + + + /* Slightly different padding/margin to look good below/above the bar */ + padding: var(--padding-section); + margin-top: 2px; + /* Adds gap between control bar and this panel */ + margin-bottom: 2px; + + /* Ensure it doesn't get too squeezed */ + min-width: 300px; +} + +/* Album cover */ +.album-cover { + background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary)); + border-radius: var(--border-radius-album); + border: 4px solid var(--border-button); + box-shadow: 0 4px 16px var(--shadow-button); +} + +/* ======================================== + Text Styles + ======================================== */ + +/* Source label (e.g., "Spotify") */ +.source-label { + color: var(--text-muted); + font-size: 11px; + font-weight: 500; + margin-top: 8px; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +/* Track title */ +.track-title { + color: var(--text-primary); + font-size: 14px; + font-weight: 600; + margin-top: 4px; +} + +/* Artist label */ +.artist-label { + color: var(--text-secondary); + font-size: 12px; + font-weight: 500; + margin-top: 2px; +} + +/* Time remaining */ +.time-remaining { + color: var(--text-tertiary); + font-size: 12px; + font-weight: 500; + margin-top: 2px; +} + +/* ======================================== + Progress Bar - FIXED FOR GTK4 + ======================================== */ + +.track-progress { + min-height: 4px; + margin-top: 8px; + margin-bottom: 4px; +} + +/* The background track */ +.track-progress trough { + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +/* The filled progress portion - GTK4 specific */ +.track-progress progress { + background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end)); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +/* GTK4 also needs this for the fill bar to show */ +progressbar trough { + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +progressbar progress { + background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end)); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +/* ======================================== + Control Buttons - FIXED ROUNDED SHAPE + ======================================== */ + +/* All control buttons - base styles */ +.control-button { + padding: 0; + + /* Add margin to compensate for removed border */ + margin: 1.5px; + /* Same as the old border width */ + + min-width: 44px; + min-height: 44px; + + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + + border: none; + box-shadow: + inset 0 0 0 1.5px var(--border-button), + 0 4px 16px var(--shadow-button), + inset 0 1px 1px rgba(255, 255, 255, 0.2); + + border-radius: 50%; +} + +.control-button:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); + border-color: var(--border-button-hover); + box-shadow: + 0 6px 20px var(--shadow-button), + inset 0 1px 1px rgba(255, 255, 255, 0.25); + transform: translateY(-1px); +} + +.control-button:active { + transform: scale(0.96); + box-shadow: + 0 2px 8px var(--shadow-button), + inset 0 2px 4px rgba(0, 0, 0, 0.2); +} + +/* ======================================== + Play/Pause Button (Blue) + ======================================== */ + +.play-button { + background: linear-gradient(135deg, var(--btn-play), var(--btn-play-secondary)); + border-color: var(--border-play); + box-shadow: + 0 4px 16px var(--shadow-play), + inset 0 1px 1px rgba(255, 255, 255, 0.3); +} + +.play-button:hover { + background: linear-gradient(135deg, var(--btn-play-hover), var(--btn-play-hover-secondary)); + border-color: var(--border-play-hover); + box-shadow: + 0 6px 20px var(--shadow-play-hover), + inset 0 1px 1px rgba(255, 255, 255, 0.4); +} + +.play-button:active { + background: linear-gradient(135deg, var(--btn-play-active), var(--btn-play-active-secondary)); + box-shadow: + 0 2px 10px var(--shadow-play), + inset 0 2px 4px rgba(0, 0, 0, 0.15); +} + +/* ======================================== + Expand Button (Purple) + ======================================== */ + +.expand-button { + background: linear-gradient(135deg, var(--btn-expand), var(--btn-expand-secondary)); + border-color: var(--border-expand); + box-shadow: + 0 4px 16px var(--shadow-expand), + inset 0 1px 1px rgba(255, 255, 255, 0.3); +} + +.expand-button:hover { + background: linear-gradient(135deg, var(--btn-expand-hover), var(--btn-expand-hover-secondary)); + border-color: var(--border-expand-hover); + box-shadow: + 0 6px 20px var(--shadow-expand-hover), + inset 0 1px 1px rgba(255, 255, 255, 0.4); +} + +.expand-button:active { + background: linear-gradient(135deg, var(--btn-expand-active), var(--btn-expand-active-secondary)); + box-shadow: + 0 2px 10px var(--shadow-expand), + inset 0 2px 4px rgba(0, 0, 0, 0.15); +} + +/* ======================================== + Previous/Next Buttons + ======================================== */ + +.prev-button, +.next-button { + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); +} + +.prev-button:hover, +.next-button:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); +} + +/* ======================================== + Focus & Accessibility + ======================================== */ + +button { + outline: none; +} + +button:focus { + outline: none; + box-shadow: + 0 0 0 3px var(--shadow-focus), + 0 4px 16px var(--shadow-play), + inset 0 1px 1px rgba(255, 255, 255, 0.3); +} + +/* ======================================== + Notification Styles + ======================================== */ + +.notification-window { + background: transparent; +} + +.notification-container { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + padding: 10px 12px; + /* Reduced from 12px to 10px vertical padding */ + min-width: 280px; + /* Reduced from 320px */ + max-width: 300px; + /* Added max-width */ +} + +.notification-album { + background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary)); + border-radius: var(--border-radius-album); + border: 1px solid var(--border-button); + margin: 5px; +} + +.notification-header { + color: var(--text-muted); + font-size: 10px; + /* Reduced from 11px */ + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + margin-bottom: 6px; + /* Reduced from 8px */ +} + +.notification-song { + color: var(--text-primary); + font-size: 13px; + /* Reduced from 14px */ + font-weight: 600; + line-height: 1.2; + /* Added for tighter spacing */ +} + +.notification-artist { + color: var(--text-secondary); + font-size: 11px; + /* Reduced from 12px */ + font-weight: 500; + line-height: 1.2; + /* Added for tighter spacing */ +} + +/* ======================================== + Volume Control Styles + ======================================== */ + +.volume-container { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + padding: 12px; + margin: 0px; +} + +.volume-icon { + min-width: 20px; + min-height: 20px; +} + +.volume-percentage { + color: var(--text-primary); + font-size: 13px; + font-weight: 600; + min-width: 40px; +} + +/* Volume slider - similar to progress bar but with different colors */ +.volume-slider { + min-height: 24px; + min-width: 24px; +} + +/* The background track */ +.volume-slider trough { + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 6px; + min-width: 6px; +} + +/* The filled portion */ +.volume-slider progress { + background: linear-gradient(90deg, var(--btn-default), var(--btn-default-secondary)); + border-radius: var(--border-radius-progress); + min-height: 6px; + min-width: 6px; +} + +/* The slider handle */ +.volume-slider slider { + min-height: 16px; + min-width: 16px; + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + border: 2px solid var(--border-button); + border-radius: 50%; + +} + +.volume-slider slider:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); + border-color: var(--border-button-hover); + transform: scale(1.1); +} + +.volume-slider slider:active { + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + transform: scale(0.95); +} + +/* GTK4 specific for vertical sliders */ +.volume-slider.vertical trough { + min-width: 6px; +} + +.volume-slider.vertical progress { + min-width: 6px; +} + + +/* ======================================== + Visualizer Bars - Idle Mode Animation + ======================================== */ + +/* Container padding to keep bars inside control bar edges */ +.visualizer-container { + padding: 0px; + /* 5px padding on left/right keeps bars inside */ + padding-bottom: 1px; + /* Small bottom padding to align with control bar bottom */ + border-radius: 0 0 12px 12px; +} + +Smooth control bar height transitions for idle mode */ .control-container-horizontal { + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +/* Smooth button fade transitions */ +.control-button { + transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1), + opacity 0.3s ease-in-out; +} + +/* Ensure overlay respects size changes */ +overlay { + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +/* Vertical Display (for vertical layouts) */ +.vertical-display-container { + background: transparent; + padding: 8px 4px; +} + +.vertical-display-label { + font-family: 'IosevkaTerm Nerd Font', monospace; + font-size: 28px; + font-weight: bold; + color: white; + /* Match visualizer bar color */ + letter-spacing: 0px; + line-height: 1.2; +}