{ lib, config, ... }: let background = "#282828"; # bg0 — main dark background background-alt = "#3c3836"; # bg1 — slightly lighter panels/buttons background-sec = "#1d2021"; # bg0_h — darker, for mpris/volume contrast text = "#ebdbb2"; # fg1 — main foreground selected = "#83a598"; # blue — accent for borders/active states urgent = "#fb4934"; # bright red — critical notifications hover = "#504945"; # bg2 — hover highlight in { options.custom = { swaync.enable = lib.mkEnableOption "enable swaync - color cat alternative"; }; config = lib.mkIf config.custom.swaync.enable { services.swaync = { enable = true; settings = { positionX = "right"; positionY = "top"; cssPriority = "user"; control-center-width = 380; control-center-height = 860; control-center-margin-top = 2; control-center-margin-bottom = 2; control-center-margin-right = 1; control-center-margin-left = 0; notification-window-width = 400; notification-icon-size = 48; notification-body-image-height = 160; notification-body-image-width = 200; timeout = 4; timeout-low = 2; timeout-critical = 6; fit-to-screen = false; keyboard-shortcuts = true; image-visibility = "when-available"; transition-time = 200; hide-on-clear = true; hide-on-action = false; script-fail-notify = true; scripts = { example-script = { exec = "echo 'Do something...'"; urgency = "Normal"; }; }; notification-visibility = { example-name = { state = "muted"; urgency = "Low"; app-name = "Spotify"; }; }; widgets = [ "mpris" "title" "dnd" "notifications" ]; widget-config = { title = { text = "Notifications"; clear-all-button = true; button-text = " 󰎟 Clear"; }; dnd = { text = "Do not disturb"; }; label = { max-lines = 1; text = " "; }; mpris = { image-size = 96; image-radius = 12; }; volume = { label = "󰕾"; show-per-app = true; }; buttons-grid = { actions = [ { label = " "; command = "amixer set Master toggle"; } { label = ""; command = "amixer set Capture toggle"; } { label = " "; command = "nm-connection-editor"; } { label = "󰂯"; command = "blueman-manager"; } { label = "󰏘"; command = "nwg-look"; } ]; }; }; }; style = '' * { color: ${text}; background-color: ${background} all: unset; font-size: 12px; font-family: "BerkeleyMono Nerd Font Propo"; transition: 200ms; } .notification-row { outline: none; margin: 0; padding: 0px; } .floating-notifications.background .notification-row .notification-background { background: alpha(${background}, 0.9); box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.6); border: 1px solid ${selected}; border-radius: 24px; margin: 16px; padding: 0; } .floating-notifications.background .notification-row .notification-background .notification { padding: 6px; border-radius: 12px; } .floating-notifications.background .notification-row .notification-background .notification.critical { border: 2px solid ${urgent}; } .floating-notifications.background .notification-row .notification-background .notification .notification-content { margin: 14px; } .floating-notifications.background .notification-row .notification-background .notification > *:last-child > * { min-height: 3.4em; } .floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action { border-radius: 8px; background-color: ${background-alt}}; margin: 6px; border: 1px solid transparent; } .floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:hover { background-color: ${hover}; border: 1px solid ${selected}; } .floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:active { background-color: ${selected}; color: ${background}; } .image { margin: 10px 20px 10px 0px; } .summary { font-weight: 800; font-size: 1rem; } .body { font-size: 0.8rem; } .floating-notifications.background .notification-row .notification-background .close-button { margin: 6px; padding: 2px; border-radius: 6px; background-color: ${background}; border: 1px solid transparent; } .floating-notifications.background .notification-row .notification-background .close-button:hover { background-color: ${selected}; } .floating-notifications.background .notification-row .notification-background .close-button:active { background-color: ${selected}; color: ${background}; } .notification.critical progress { background-color: ${selected}; } .notification.low progress, .notification.normal progress { background-color: ${selected}; } * { color: ${text}; all: unset; font-size: 12px; font-family: "BerkeleyMono Nerd Font Propo"; transition: 200ms; } /* Avoid 'annoying' backgroud */ .blank-window { background: transparent; } /* CONTROL CENTER ------------------------------------------------------------------------ */ .control-center { background: alpha(${background}, 0.7); border-radius: 24px; border: 1px solid ${selected}; box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.6); margin: 18px; padding: 12px; } /* Notifications */ .control-center .notification-row .notification-background, .control-center .notification-row .notification-background .notification.critical { background-color: ${background-alt}; border-radius: 16px; margin: 4px 0px; padding: 4px; } .control-center .notification-row .notification-background .notification.critical { color: ${urgent}; } .control-center .notification-row .notification-background .notification .notification-content { margin: 6px; padding: 8px 6px 2px 2px; } .control-center .notification-row .notification-background .notification > *:last-child > * { min-height: 3.4em; } .control-center .notification-row .notification-background .notification > *:last-child > * .notification-action { background: alpha(${selected}, 0.6); color: ${text}; border-radius: 12px; margin: 6px; } .control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:hover { background: ${selected}; } .control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:active { background-color: ${selected}; } /* Buttons */ .control-center .notification-row .notification-background .close-button { background: transparent; border-radius: 6px; color: ${text}; margin: 0px; padding: 4px; } .control-center .notification-row .notification-background .close-button:hover { background-color: ${selected}; } .control-center .notification-row .notification-background .close-button:active { background-color: ${selected}; } progressbar, progress, trough { border-radius: 12px; } progressbar { background-color: rgba(255, 255, 255, 0.1); } /* Notifications expanded-group */ .notification-group { margin: 2px 8px 2px 8px; } .notification-group-headers { font-weight: bold; font-size: 1.25rem; color: ${text}; letter-spacing: 2px; } .notification-group-icon { color: ${text}; } .notification-group-collapse-button, .notification-group-close-all-button { background: transparent; color: ${text}; margin: 4px; border-radius: 6px; padding: 4px; } .notification-group-collapse-button:hover, .notification-group-close-all-button:hover { background: ${hover}; } /* WIDGETS --------------------------------------------------------------------------- */ /* Notification clear button */ .widget-title { font-size: 1.2em; margin: 6px; } .widget-title button { background: ${background-alt}; border-radius: 6px; padding: 4px 16px; } .widget-title button:hover { background-color: ${hover}; } .widget-title button:active { background-color: ${selected}; } /* Do not disturb */ .widget-dnd { margin: 6px; font-size: 1.2rem; } .widget-dnd > switch { background: ${background-alt}; font-size: initial; border-radius: 8px; box-shadow: none; padding: 2px; } .widget-dnd > switch:hover { background: ${hover}; } .widget-dnd > switch:checked { background: ${selected}; } .widget-dnd > switch:checked:hover { background: ${hover}; } .widget-dnd > switch slider { background: ${text}; border-radius: 6px; } /* Buttons menu */ .widget-buttons-grid { font-size: x-large; padding: 6px 2px; margin: 6px; border-radius: 12px; background: ${background-alt}; } .widget-buttons-grid > flowbox > flowboxchild > button { margin: 4px 10px; padding: 6px 12px; background: transparent; border-radius: 8px; } .widget-buttons-grid > flowbox > flowboxchild > button:hover { background: ${hover}; } /* Music player */ .widget-mpris { background: ${background-alt}; border-radius: 16px; color: ${text}; margin: 20px 6px; } /* NOTE: Background need *opacity 1* otherwise will turn into the album art blurred */ .widget-mpris-player { background-color: ${background-sec}; border-radius: 22px; padding: 6px 14px; margin: 6px; } .widget-mpris > box > button { color: ${text}; border-radius: 20px; } .widget-mpris button { color: alpha(${text}, 0.6); } .widget-mpris button:hover { color: ${text}; } .widget-mpris-album-art { border-radius: 16px; } .widget-mpris-title { font-weight: 700; font-size: 1rem; } .widget-mpris-subtitle { font-weight: 500; font-size: 0.8rem; } picture.mpris-background { opacity: 0; } /* Volume */ .widget-volume { background: ${background-sec}; color: ${background}; padding: 4px; margin: 6px; border-radius: 6px; } ''; }; }; }