285 lines
6.6 KiB
Nix
285 lines
6.6 KiB
Nix
{
|
||
...
|
||
}:
|
||
{
|
||
services.swaync = {
|
||
enable = true;
|
||
settings = {
|
||
ignore = [
|
||
"com.spotify.Client"
|
||
];
|
||
|
||
positionX = "right";
|
||
positionY = "top";
|
||
layer = "overlay";
|
||
control-center-layer = "top";
|
||
layer-shell = true;
|
||
cssPriority = "application";
|
||
|
||
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-icon-size = 64;
|
||
notification-body-image-height = 100;
|
||
notification-body-image-width = 200;
|
||
|
||
timeout = 10;
|
||
timeout-low = 5;
|
||
timeout-critical = 0;
|
||
|
||
control-center-width = 500;
|
||
control-center-height = 600;
|
||
notification-window-width = 500;
|
||
|
||
keyboard-shortcuts = true;
|
||
image-visibility = "when-available";
|
||
transition-time = 200;
|
||
hide-on-clear = false;
|
||
hide-on-action = true;
|
||
script-fail-notify = true;
|
||
|
||
widgets = [
|
||
"inhibitors"
|
||
"title"
|
||
"dnd"
|
||
"volume"
|
||
"backlight"
|
||
"mpris"
|
||
"buttons-grid#quick"
|
||
"notifications"
|
||
];
|
||
|
||
# Widget configurations
|
||
widget-config = {
|
||
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";
|
||
mpris = {
|
||
image-size = 96;
|
||
image-radius = 12;
|
||
};
|
||
volume = {
|
||
label = "";
|
||
show-per-app = true;
|
||
};
|
||
backlight = {
|
||
label = "";
|
||
device = "intel_backlight";
|
||
};
|
||
"buttons-grid#quick" = {
|
||
columns = 4; # adjust: 3/4/5
|
||
icon-size = 20; # tweak to taste
|
||
actions = [
|
||
# Power
|
||
{
|
||
label = "";
|
||
tooltip = "Shutdown";
|
||
command = "confirm-action 'systemctl poweroff' 'Shutdown?'";
|
||
}
|
||
{
|
||
label = "";
|
||
tooltip = "Reboot";
|
||
command = "confirm-action 'systemctl reboot' 'Reboot?'";
|
||
}
|
||
{
|
||
label = "";
|
||
tooltip = "Logout";
|
||
command = "confirm-action 'hyprctl dispatch exit' 'Logout?'";
|
||
}
|
||
{
|
||
label = "";
|
||
tooltip = "Suspend";
|
||
command = "systemctl suspend";
|
||
}
|
||
|
||
# Network (requires NetworkManager/nmcli)
|
||
{
|
||
label = "";
|
||
tooltip = "Toggle Wi‑Fi";
|
||
command = "nmcli radio wifi toggle";
|
||
}
|
||
{
|
||
label = "";
|
||
tooltip = "Wi‑Fi Settings";
|
||
command = "wofi-wifi-menu";
|
||
}
|
||
|
||
# Bluetooth (requires bluez/bluetoothctl, blueman optional)
|
||
{
|
||
label = "";
|
||
tooltip = "Toggle Bluetooth";
|
||
command = "bluetoothctl power toggle";
|
||
}
|
||
{
|
||
label = "";
|
||
tooltip = "Bluetooth Settings";
|
||
command = "wofi-bluetooth-menu";
|
||
}
|
||
|
||
# Media
|
||
{
|
||
label = "";
|
||
tooltip = "Toggle Mic Mute";
|
||
command = "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
|
||
}
|
||
|
||
# Toggles
|
||
{
|
||
label = "";
|
||
tooltip = "Toggle Airplane Mode";
|
||
command = "toggle-airplane-mode";
|
||
}
|
||
{
|
||
label = "";
|
||
tooltip = "Toggle Power Profile";
|
||
command = "toggle-power-profile";
|
||
}
|
||
];
|
||
};
|
||
};
|
||
};
|
||
|
||
# Custom CSS for the control center
|
||
style = ''
|
||
.control-center {
|
||
background: #1a1b26;
|
||
border: 2px solid #7dcae4;
|
||
border-radius: 12px;
|
||
}
|
||
|
||
.control-center-list {
|
||
background: transparent;
|
||
}
|
||
|
||
.control-center .notification-row:focus,
|
||
.control-center .notification-row:hover {
|
||
opacity: 1;
|
||
background: #24283b;
|
||
}
|
||
|
||
.notification {
|
||
border-radius: 8px;
|
||
margin: 6px 12px;
|
||
box-shadow: 0 0 0 1px rgba(125, 196, 228, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.7), 0 2px 6px 2px rgba(0, 0, 0, 0.3);
|
||
padding: 0;
|
||
}
|
||
|
||
/* Widget styling */
|
||
.widget-title {
|
||
margin: 8px;
|
||
font-size: 1.5rem;
|
||
color: #c0caf5;
|
||
}
|
||
|
||
.widget-dnd {
|
||
margin: 8px;
|
||
font-size: 1.1rem;
|
||
color: #c0caf5;
|
||
}
|
||
|
||
.widget-dnd > switch {
|
||
font-size: initial;
|
||
border-radius: 8px;
|
||
background: #414868;
|
||
border: 1px solid #7dcae4;
|
||
}
|
||
|
||
.widget-dnd > switch:checked {
|
||
background: #7dcae4;
|
||
}
|
||
|
||
.widget-mpris {
|
||
color: #c0caf5;
|
||
background: #24283b;
|
||
padding: 8px;
|
||
margin: 8px;
|
||
border-radius: 8px;
|
||
}
|
||
|
||
.widget-mpris-player {
|
||
padding: 8px;
|
||
margin: 8px;
|
||
}
|
||
|
||
.widget-mpris-title {
|
||
font-weight: bold;
|
||
font-size: 1.25rem;
|
||
}
|
||
|
||
.widget-mpris-subtitle {
|
||
font-size: 1.1rem;
|
||
color: #9ece6a;
|
||
}
|
||
|
||
.widget-volume {
|
||
background: #24283b;
|
||
padding: 8px;
|
||
margin: 8px;
|
||
border-radius: 8px;
|
||
color: #c0caf5;
|
||
}
|
||
|
||
.widget-backlight {
|
||
background: #24283b;
|
||
padding: 8px;
|
||
margin: 8px;
|
||
border-radius: 8px;
|
||
color: #c0caf5;
|
||
}
|
||
|
||
.widget-menubar {
|
||
background: #24283b;
|
||
padding: 8px;
|
||
margin: 8px;
|
||
border-radius: 8px;
|
||
color: #c0caf5;
|
||
}
|
||
|
||
.widget-menubar .menu-item button {
|
||
background: #1f2335;
|
||
color: #c0caf5;
|
||
border-radius: 8px;
|
||
padding: 6px 10px;
|
||
margin: 4px;
|
||
border: 1px solid #2e3440;
|
||
font-family: "JetBrainsMonoNL Nerd Font";
|
||
}
|
||
|
||
.widget-menubar .menu-item button:hover {
|
||
background: #414868;
|
||
border-color: #7dcae4;
|
||
}
|
||
|
||
.topbar-buttons button {
|
||
border: none;
|
||
background: transparent;
|
||
color: #c0caf5;
|
||
font-size: 1.1rem;
|
||
border-radius: 8px;
|
||
margin: 0 4px;
|
||
padding: 8px;
|
||
}
|
||
|
||
.topbar-buttons button:hover {
|
||
background: #414868;
|
||
}
|
||
|
||
.topbar-buttons button:active {
|
||
background: #7dcae4;
|
||
color: #1a1b26;
|
||
}
|
||
'';
|
||
};
|
||
}
|