configured sway and swaync

This commit is contained in:
Rouven Seifert 2023-06-06 12:59:29 +02:00
parent 7e1d2412ef
commit d9c52d3cd1
Signed by: rouven.seifert
GPG key ID: B95E8FE6B11C4D09
11 changed files with 411 additions and 258 deletions

2
TODO
View file

@ -1,2 +0,0 @@
grimshot for screenshots
swaynotificationcenter

View file

@ -165,11 +165,11 @@
]
},
"locked": {
"lastModified": 1685885003,
"narHash": "sha256-+OB0EvZBfGvnlTGg6mtyUCqkMnUp9DkmRUU4d7BZBVE=",
"lastModified": 1685999310,
"narHash": "sha256-gaRMZhc7z4KeU/xS3IWv3kC+WhVcAXOLXXGKLe5zn1Y=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "607d8fad96436b134424b9935166a7cd0884003e",
"rev": "28614ed7a1e3ace824c122237bdc0e5e0b62c5c3",
"type": "github"
},
"original": {
@ -185,11 +185,11 @@
"xdph": "xdph"
},
"locked": {
"lastModified": 1685951361,
"narHash": "sha256-Hx9yVkyEjVf5ohiWW2HmSuGgxDaVOqGLMIGSz/HV6f8=",
"lastModified": 1686037687,
"narHash": "sha256-6jOnzbGk2hM60Se/Mk/TlZm92EHiVoB+kVDMILF6eq8=",
"owner": "hyprwm",
"repo": "Hyprland",
"rev": "1a4e6e6a4b3272118a51bebb4a45ecd642383209",
"rev": "4afeedbd567ca2114f682f14a6de26d4a8188878",
"type": "github"
},
"original": {

View file

@ -22,7 +22,7 @@
colors = config.colorScheme.colors;
in
{
alpha = if (config.colorScheme.kind == "dark") then 0.0 else 1.0;
# alpha = if (config.colorScheme.kind == "dark") then 0.0 else 1.0;
background = colors.base00;
foreground = colors.base05;
regular0 = colors.base02;

View file

@ -1,77 +0,0 @@
{ config, pkgs, ... }:
{
imports = [
./hyprpaper.nix
./session.nix
./waybar.nix
];
wayland.windowManager.hyprland = {
enable = true;
extraConfig = builtins.readFile ./hyprland.conf; # todo nix config when available
recommendedEnvironment = true;
};
home.sessionVariables = {
GRIM_DEFAULT_DIR = "~/Pictures/Screenshots/";
};
home.packages = with pkgs; [
pulseaudio # installed to have pactl
jq
libnotify
fuzzel
wl-clipboard
grim
slurp
swappy
];
xdg.configFile = {
"fuzzel/fuzzel.ini".text = ''
[main]
icon-theme=${config.gtk.iconTheme.name}
show-actions=yes
width=80
terminal=${pkgs.foot}/bin/foot
[colors]
background=${config.colorScheme.colors.base00}ff
text=${config.colorScheme.colors.base05}ff
match=${config.colorScheme.colors.base08}ff
selection=${config.colorScheme.colors.base02}ff
selection-text=${config.colorScheme.colors.base04}ff
border=${config.colorScheme.colors.base01}ff
'';
"swappy/config".text = ''
[Default]
save_dir = ~/Pictures/Screenshots/
early_exit = true
'';
"mako/do-not-disturb.sh".text = ''
if [[ $(makoctl mode) = 'default' ]];then
notify-send 'Enabled Do Not Disturb mode'
sleep 3
makoctl mode -s do-not-disturb
else
makoctl mode -s default
notify-send 'Disabled Do Not Disturb mode'
fi
'';
};
services.mako = {
enable = true;
backgroundColor = "#${config.colorScheme.colors.base02}FF";
borderRadius = 20;
textColor = "#${config.colorScheme.colors.base05}FF";
layer = "overlay";
defaultTimeout = 10000;
extraConfig = ''
[urgency=high]
background-color=#${config.colorScheme.colors.base08}
default-timeout=0
[mode=do-not-disturb]
invisible=1
'';
};
}

View file

@ -1,142 +0,0 @@
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=eDP-1, 1920x1080, 0x0, 1
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
kb_layout = us
kb_variant = dvorak-alt-intl
follow_mouse = 1
touchpad {
natural_scroll = no
}
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
}
general {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
gaps_in = 5
gaps_out = 20
border_size = 2
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
col.inactive_border = rgba(595959aa)
layout = dwindle
}
decoration {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
rounding = 10
blur = yes
blur_size = 4
blur_passes = 2
blur_new_optimizations = on
drop_shadow = yes
shadow_range = 4
shadow_render_power = 3
col.shadow = rgba(1a1a1aee)
}
animations {
enabled = yes
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
}
dwindle {
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = yes # you probably want this
}
master {
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
new_is_master = true
}
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
$mainMod = SUPER
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = $mainMod, Return, exec, footclient
bind = $mainMod SHIFT, Q, killactive,
bind = $mainMod, Space, togglefloating,
bind = $mainMod, F, fullscreen, 0 # fullscreen
bind = $mainMod, M, fullscreen, 1 # maximize
bind = $mainMod SHIFT, F, fakefullscreen, 0
bind = $mainMod, O, swapactiveworkspaces, 0 1
bind = $mainMod, U, focusurgentorlast
bind = ALT, Space, exec, fuzzel
bind = $mainMod, S, togglesplit, # dwindlr
# Move focus with mainMod + arrow keys
bind = $mainMod, H, movefocus, l
bind = $mainMod, L, movefocus, r
bind = $mainMod, K, movefocus, u
bind = $mainMod, J, movefocus, d
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10
# Scroll through existing workspaces wiswaylockth mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
# All the fancy XF86 Keys
bind = ,Print, exec, grim -g "$(slurp)" - | wl-copy -t image/png
bind = ,XF86Launch2, exec, grim -g "$(slurp)" - | swappy -f -
binde = ,XF86MonBrightnessUp, exec, light -A 10
binde = ,XF86MonBrightnessDown, exec, light -U 10
bind = ,XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle
bind = ,XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle
binde = ,XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5%
binde = ,XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5%
binde = SHIFT, XF86AudioRaiseVolume, exec, pactl set-source-volume @DEFAULT_SOURCE@ +5%
binde = SHIFT, XF86AudioLowerVolume, exec, pactl set-source-volume @DEFAULT_SOURCE@ -5%
# even more fancy stuff (aka abusing XF86 keys)
bind = ,XF86Messenger, exec, makoctl dismiss
bind = SHIFT ,XF86Messenger, exec, makoctl restore
bind = ,XF86Go, exec, makoctl invoke
bind = ,Cancel, exec, sh ~/.config/mako/do-not-disturb.sh
bind = ,XF86Display, exec, hyprpaper
bind = ,XF86Favorites, exec, loginctl lock-session
bind = ,XF86PowerOff, exec, wlogout

View file

@ -1,24 +0,0 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
hyprpaper
];
xdg.configFile."hypr/hyprpaper.conf".text = ''
preload = ${../../../../images/wallpaper.png}
wallpaper =eDP-1, ${../../../../images/wallpaper.png}
wallpaper =HDMI-A-1, ${../../../../images/wallpaper.png}
'';
systemd.user.services.hyprpaper = {
Install.WantedBy = [ "graphical-session.target" ];
Service = {
ExecStart = "${pkgs.hyprpaper}/bin/hyprpaper";
Restart = "on-failure";
};
Unit = {
After = "graphical-session.target";
Description = "Blazingly fast wayland wallpaper utility with IPC controls";
Documentation = "https://github.com/hyprwm/hyprpaper";
PartOf = "graphical-session.target";
};
};
}

View file

@ -1,4 +1,4 @@
{ config, pkgs, ... }:
{ config, pkgs, lib, ... }:
{
imports = [
@ -8,8 +8,12 @@
];
wayland.windowManager.sway = {
enable = true;
config = {
config = rec {
startup = [
{
command = "${pkgs.swaybg}/bin/swaybg -i ${../../../../images/wallpaper.png}";
}
];
modifier = "Mod4";
menu = "${pkgs.fuzzel}/bin/fuzzel";
terminal = "${pkgs.foot}/bin/footclient";
@ -24,9 +28,32 @@
xkb_variant = "dvorak-alt-intl";
};
};
keybindings =
lib.mkOptionDefault {
"Mod1+space" = "exec ${menu}";
"Print" = "exec ${pkgs.sway-contrib.grimshot}/bin/grimshot copy area";
"XF86Launch2" = "exec ${pkgs.sway-contrib.grimshot}/bin/grimshot save area - | ${pkgs.swappy}/bin/swappy -f -";
"XF86MonBrightnessUp" = "exec ${pkgs.light}/bin/light -A 10";
"XF86MonBrightnessDown" = "exec ${pkgs.light}/bin/light -U 10";
# audio controls
"XF86AudioMute" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle";
"XF86AudioMicMute" = "exec ${pkgs.pulseaudio}/bin/pactl set-source-mute @DEFAULT_SOURCE@ toggle";
"XF86AudioRaiseVolume" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ +5%";
"XF86AudioLowerVolume" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ -5%";
"Shift+XF86AudioRaiseVolume" = "exec ${pkgs.pulseaudio}/bin/pactl set-source-volume @DEFAULT_SOURCE@ +5%";
"Shift+XF86AudioLowerVolume" = "exec ${pkgs.pulseaudio}/bin/pactl set-source-volume @DEFAULT_SOURCE@ -5%";
"XF86Favorites" = "exec ${pkgs.systemd}/bin/loginctl lock-session";
"XF86PowerOff" = "exec ${pkgs.wlogout}/bin/wlogout";
"XF86Messenger" = "exec ${pkgs.swaynotificationcenter}/bin/swaync-client --toggle-panel";
"Cancel" = "exec ${pkgs.swaynotificationcenter}/bin/swaync-client --hide-latest";
"Shift+Cancel" = "exec ${pkgs.swaynotificationcenter}/bin/swaync-client --cloes-all";
};
};
};
xdg.configFile = {
"swaync".source = ./swaync;
"fuzzel/fuzzel.ini".text = ''
[main]
icon-theme=${config.gtk.iconTheme.name}
@ -42,5 +69,10 @@
selection-text=${config.colorScheme.colors.base04}ff
border=${config.colorScheme.colors.base01}ff
'';
"swappy/config".text = ''
[Default]
save_dir = ~/Pictures/Screenshots/
early_exit = true
'';
};
}

View file

@ -2,7 +2,8 @@
{
home.packages = with pkgs; [
swaylock-effects
wlogout
wl-clipboard
swaynotificationcenter
];
services.swayidle = {
@ -15,6 +16,20 @@
{ timeout = 300; command = "${pkgs.swaylock-effects}/bin/swaylock"; }
];
};
systemd.user.services.swaync = {
Install.WantedBy = [ "graphical-session.target" ];
Service = {
ExecStart = "${pkgs.swaynotificationcenter}/bin/swaync";
Restart = "on-failure";
};
Unit = {
After = "graphical-session.target";
Description = "Simple notification daemon with a GUI built for Sway";
Documentation = "https://github.com/ErikReider/SwayNotificationCenter";
PartOf = "graphical-session.target";
};
environment.PATH = "${pkgs.coreutils}/bin";
};
xdg.configFile = {
"swaylock/config".text = ''
@ -30,7 +45,7 @@
'';
"wlogout/style.css".text = ''
* {
* {
background-image: none;
}
window {

View file

@ -0,0 +1,54 @@
{
"$schema": "/etc/xdg/swaync/configSchema.json",
"positionX": "right",
"positionY": "top",
"control-center-margin-top": 20,
"control-center-margin-bottom": 0,
"control-center-margin-right": 20,
"control-center-margin-left": 0,
"control-center-width": 500,
"control-center-height": 600,
"fit-to-screen": false,
"layer": "top",
"cssPriority": "user",
"notification-icon-size": 64,
"notification-body-image-height": 100,
"notification-body-image-width": 200,
"timeout": 10,
"timeout-low": 5,
"timeout-critical": 0,
"notification-window-width": 500,
"keyboard-shortcuts": true,
"image-visibility": "when-available",
"transition-time": 200,
"hide-on-clear": true,
"hide-on-action": true,
"script-fail-notify": true,
"widgets": [
"title",
"dnd",
"mpris",
"notifications"
],
"widget-config": {
"title": {
"text": "Notifications",
"clear-all-button": true,
"button-text": "Clear All"
},
"dnd": {
"text": "Do Not Disturb"
},
"label": {
"max-lines": 5,
"text": "Label Text"
},
"mpris": {
"image-size": 96,
"image-radius": 12
}
}
}

View file

@ -0,0 +1,297 @@
/* Dracula Theme */
@define-color foreground rgb(248, 248, 242);
@define-color background rgb(40, 42, 54);
@define-color background-alpha rgba(40, 42, 54, 0.8);
@define-color accent rgba(189, 147, 249, 0.8);
@define-color current-line rgb(68, 71, 90);
@define-color comment rgb(98, 114, 164);
.notification-row {
transition: all 200ms ease;
outline: none;
margin-bottom: 4px;
margin-right: 13px;
margin-top: 8px;
border-radius: 80px;
}
.control-center .notification-row:focus,
.control-center .notification-row:hover {
opacity: 1;
background: transparent;
}
.notification-row:focus .notification,
.notification-row:hover .notification {
box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.5);
border: 0px solid @accent;
background: @current-line;
}
.control-center .notification {
box-shadow: none;
}
.control-center .notification-row {
opacity: 0.5;
margin: -5px;
}
.notification {
transition: all 200ms ease;
border-radius: 8px;
margin: 12px 7px 0px 7px;
box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.5);
padding: 0;
}
/* Uncomment to enable specific urgency colors
.low {
background: yellow;
padding: 6px;
border-radius: 12px;
}
.normal {
background: green;
padding: 6px;
border-radius: 12px;
}
.critical {
background: red;
padding: 6px;
border-radius: 12px;
}
*/
.notification-content {
background: transparent;
padding: 6px;
border-radius: 8px;
}
.close-button {
background: @current-line;
color: @foreground;
text-shadow: none;
padding: 0;
border-radius: 100%;
margin-top: 17px;
margin-right: 10px;
box-shadow: none;
border: none;
min-width: 24px;
min-height: 24px;
}
.close-button:hover {
box-shadow: none;
background: @comment;
transition: all 0.15s ease-in-out;
border: none;
}
.notification-default-action,
.notification-action {
padding: 4px;
margin: 0;
box-shadow: none;
background: @current-line;
border: 2px solid @accent;
color: @foreground;
}
.notification-default-action:hover,
.notification-action:hover {
-gtk-icon-effect: none;
background: @current-line;
}
.notification-default-action {
border-radius: 8px;
}
/* When alternative actions are visible */
.notification-default-action:not(:only-child) {
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
}
.notification-action {
border-radius: 0px;
border-top: none;
border-right: none;
}
/* add bottom border radius to eliminate clipping */
.notification-action:first-child {
border-bottom-left-radius: 8px;
}
.notification-action:last-child {
border-bottom-right-radius: 8px;
border-right: 1px solid @accent;
}
.image {
}
.body-image {
margin-top: 6px;
background-color: @foreground;
border-radius: 8px;
}
.summary {
font-size: 16px;
font-weight: bold;
background: transparent;
color: @foreground;
text-shadow: none;
}
.time {
font-size: 16px;
font-weight: bold;
background: transparent;
color: @foreground;
text-shadow: none;
margin-right: 18px;
}
.body {
font-size: 15px;
font-weight: normal;
background: transparent;
color: @foreground;
text-shadow: none;
}
/* The "Notifications" and "Do Not Disturb" text widget */
.top-action-title {
color: @foreground;
text-shadow: none;
}
.control-center-clear-all {
color: @foreground;
text-shadow: none;
background: @background;
border: 2px solid @accent;
box-shadow: none;
border-radius: 8px;
}
.control-center-clear-all:hover {
background: @background;
}
.control-center-dnd {
border-radius: 8px;
background: @background;
border: 1px solid @accent;
box-shadow: none;
}
.control-center-dnd:checked {
background: @accent;
}
.control-center-dnd slider {
background: @background;
border-radius: 8px;
}
.control-center {
background: @background-alpha;
border-radius: 10px;
background-clip: border-box;
padding: 4px;
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.7),
0 2px 6px 2px rgba(0, 0, 0, 0.3);
color: @foreground;
border: 2px solid @accent;
}
.control-center-list {
background: transparent;
}
.floating-notifications {
background: transparent;
}
/* Window behind control center and on all other monitors */
.blank-window {
background: transparent;
}
/*** Widgets ***/
/* Title widget */
.widget-title {
margin: 8px;
font-size: 1.5rem;
}
.widget-title > button {
font-size: initial;
color: @foreground;
text-shadow: none;
background: @background;
border: 2px solid @accent;
box-shadow: none;
border-radius: 8px;
}
.widget-title > button:hover {
background: @background;
}
/* DND widget */
.widget-dnd {
margin: 8px;
font-size: 1.1rem;
}
.widget-dnd > switch {
font-size: initial;
border-radius: 8px;
background: @background;
border: 1px solid @accent;
box-shadow: none;
}
.widget-dnd > switch:checked {
background: @accent;
}
.widget-dnd > switch slider {
background: @background;
border-radius: 8px;
border: 1px solid @foreground;
}
/* Label widget */
.widget-label {
margin: 8px;
}
.widget-label > label {
font-size: 1.1rem;
}
/* Mpris widget */
.widget-mpris {
/* The parent to all players */
}
.widget-mpris-player {
padding: 8px;
margin: 8px;
background-color: @background;
border-radius: 8px;
border: 2px solid @accent;
color: @foreground;
}
.widget-mpris-title {
font-weight: bold;
font-size: 1.25rem;
}
.widget-mpris-subtitle {
font-size: 1.1rem;
}

View file

@ -1,4 +1,4 @@
{ self, config, pkgs, ... }:
{ self, config, ... }:
{
# systemd.user.services.waybar.Service.Environment = "PATH=${pkgs.hyprland}/bin";
programs.waybar = {