From 810060dc101256d2b357be63edbe019f33fe6cce Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Thu, 22 Jan 2026 08:16:55 +0100 Subject: [PATCH] fixes waybar. moves stuff to vicinae --- .config/hypr/config/animations.conf | 2 +- .config/hypr/config/autostart.conf | 8 +- .config/hypr/config/colors.conf | 38 +- .config/hypr/config/decorations.conf | 2 +- .config/hypr/config/defaults.conf | 4 +- .config/hypr/config/keybinds.conf | 17 +- .config/hypr/config/plugins.conf | 12 + .config/hypr/config/variables.conf | 1 + .config/hypr/config/windowrules.conf | 306 ++++++++++-- .config/hypr/config/windowrules.conf_bak | 77 +++ .config/hypr/scripts/record-or-screenshot.sh | 40 +- .config/wallust/templates/alacritty.toml | 35 +- .config/wallust/templates/tofi | 6 +- .config/wallust/templates/vicinae.toml | 119 +++++ .config/wallust/wallust.toml | 1 + .config/waybar/colors-wallust.css | 38 +- .config/waybar/config | 385 --------------- .config/waybar/config.jsonc | 439 ++++++++++++++++++ .config/waybar/mediaplayer.py | 127 +++++ .config/waybar/modules/power_menu.xml | 31 ++ .config/waybar/modules/power_profiles.py | 150 ++++++ .../waybar/modules/power_profiles_menu.xml | 20 + .config/waybar/style.css | 114 +++-- .config/waybar/waybar.sh | 10 + .config/waypaper/config.ini | 11 +- 25 files changed, 1435 insertions(+), 558 deletions(-) create mode 100644 .config/hypr/config/plugins.conf create mode 100644 .config/hypr/config/windowrules.conf_bak create mode 100644 .config/wallust/templates/vicinae.toml delete mode 100644 .config/waybar/config create mode 100644 .config/waybar/config.jsonc create mode 100755 .config/waybar/mediaplayer.py create mode 100644 .config/waybar/modules/power_menu.xml create mode 100755 .config/waybar/modules/power_profiles.py create mode 100644 .config/waybar/modules/power_profiles_menu.xml create mode 100755 .config/waybar/waybar.sh diff --git a/.config/hypr/config/animations.conf b/.config/hypr/config/animations.conf index 95c09b4..588d966 100644 --- a/.config/hypr/config/animations.conf +++ b/.config/hypr/config/animations.conf @@ -7,7 +7,7 @@ animations { enabled = yes bezier = overshot, 0.13, 0.99, 0.29, 1.1 - animation = windowsIn, 1, 4, overshot, slide + animation = windowsIn, 1, 4, overshot, popin animation = windowsOut, 1, 5, default, popin 80% animation = border, 1, 5, default animation = workspacesIn, 1, 6, overshot, slide diff --git a/.config/hypr/config/autostart.conf b/.config/hypr/config/autostart.conf index 8716775..c107eb0 100644 --- a/.config/hypr/config/autostart.conf +++ b/.config/hypr/config/autostart.conf @@ -5,7 +5,6 @@ source = ~/.config/hypr/config/defaults.conf # Autostart wiki https://wiki.hyprland.org/0.45.0/Configuring/Keywords/#executing # - exec-once = /home/michaelb/.config/hypr/scripts/launch-waybar.sh & exec-once = blueman-applet & exec-once = fcitx5 -d & @@ -26,8 +25,11 @@ exec-once = $idlehandler # Clipboard fix # https://github.com/hyprwm/Hyprland/issues/2319#issuecomment-2409983376 -exec-once = wl-paste -t text -w xclip -selection clipboard & -exec-once = wl-paste --watch cliphist store & +#exec-once = wl-paste -t text -w xclip -selection clipboard & +#exec-once = wl-paste --watch cliphist store & + +# vicinae +exec-once = vicinae server # pyprland exec-once = /usr/bin/pypr --debug /tmp/pypr.log diff --git a/.config/hypr/config/colors.conf b/.config/hypr/config/colors.conf index 9c0b5cf..8ec54c1 100644 --- a/.config/hypr/config/colors.conf +++ b/.config/hypr/config/colors.conf @@ -1,19 +1,19 @@ -$wallpaper = /usr/share/wallpapers/downloaded/pexels-eberhardgross-1421903.jpg -$background = rgb(0D0E0E) -$foreground = rgb(E9FDFF) -$color0 = rgb(383939) -$color1 = rgb(6E544A) -$color2 = rgb(727F7E) -$color3 = rgb(93796E) -$color4 = rgb(839CA5) -$color5 = rgb(BCA592) -$color6 = rgb(C0FAFF) -$color7 = rgb(D7F4F7) -$color8 = rgb(97ABAD) -$color9 = rgb(6E544A) -$color10 = rgb(727F7E) -$color11 = rgb(93796E) -$color12 = rgb(839CA5) -$color13 = rgb(BCA592) -$color14 = rgb(C0FAFF) -$color15 = rgb(D7F4F7) \ No newline at end of file +$wallpaper = /usr/share/wallpapers/downloaded/pexels-jplenio-1102912.jpg +$background = rgb(0E0E11) +$foreground = rgb(FDF2DE) +$color0 = rgb(38393C) +$color1 = rgb(424652) +$color2 = rgb(6A3E40) +$color3 = rgb(736956) +$color4 = rgb(897C88) +$color5 = rgb(9B8166) +$color6 = rgb(F9D9A2) +$color7 = rgb(F4E4C8) +$color8 = rgb(AA9F8C) +$color9 = rgb(424652) +$color10 = rgb(6A3E40) +$color11 = rgb(736956) +$color12 = rgb(897C88) +$color13 = rgb(9B8166) +$color14 = rgb(F9D9A2) +$color15 = rgb(F4E4C8) \ No newline at end of file diff --git a/.config/hypr/config/decorations.conf b/.config/hypr/config/decorations.conf index af37b8a..f102f59 100644 --- a/.config/hypr/config/decorations.conf +++ b/.config/hypr/config/decorations.conf @@ -9,7 +9,7 @@ source = ~/.config/hypr/config/colors.conf decoration { active_opacity = 1 inactive_opacity = 0.7 - rounding = 3 + rounding = 1 dim_inactive = true dim_strength = 0.1 diff --git a/.config/hypr/config/defaults.conf b/.config/hypr/config/defaults.conf index 2d31d87..5c6fd2c 100644 --- a/.config/hypr/config/defaults.conf +++ b/.config/hypr/config/defaults.conf @@ -3,8 +3,10 @@ # ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ $filemanager = nemo -$applauncher = tofi-drun --drun-launch=true +#$applauncher = tofi-drun --drun-launch=true #$applauncher = rofi -show combi -modi window,run,combi -combi-modi window,run +$dmenu = vicinae dmenu --placeholder +$applauncher = vicinae toggle $terminal = kitty $idlehandler = swayidle -w timeout 300 'swaylock -f -c 000000' before-sleep 'swaylock -f -c 000000' $capturing = grim -g "$(slurp)" - | swappy -f - diff --git a/.config/hypr/config/keybinds.conf b/.config/hypr/config/keybinds.conf index cb4046b..6f0367b 100644 --- a/.config/hypr/config/keybinds.conf +++ b/.config/hypr/config/keybinds.conf @@ -1,14 +1,11 @@ - -# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ -# ┃ Keybinds ┃ -# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ - +# 0. Includes source = ~/.config/hypr/config/defaults.conf +# 1. Applications # https://wiki.hyprland.org/Configuring/Binds/ bindd = $mainMod, RETURN, Opens your preferred terminal emulator ($terminal), exec, $terminal bindd = $mainMod, E, Opens your preferred filemanager ($filemanager), exec, $filemanager -bindd = $mainMod, A, Screen capture selection, exec, $capturing +#bindd = $mainMod, A, Screen capture selection, exec, $capturing bindd = $mainMod, Q, Closes (not kill) current window, killactive, bindd = $mainMod SHIFT, M, Exits Hyprland by terminating the user sessions, exec, loginctl terminate-user "" bindd = $mainMod, V, Switches current window between floating and tiling mode, togglefloating, @@ -146,14 +143,14 @@ bind = , PRINT, exec, hyprshot -m output # Screenshot a region bind = $shiftMod, PRINT, exec, hyprshot -m region # Screenrec -bind = $mainMod, S, exec, ~/.config/hypr/scripts/record-or-screenshot.sh +bind = $mainMod, S, exec, ~/.config/hypr/scripts/record-or-screenshot.sh -d "$dmenu" # ======= Color Picker ======= bindd = $mainMod, P, Launch hyprpicker to pick a color, exec, hyprpicker -a # ======= Additional Settings ======= - -bind = $mainMod, c, exec, cliphist list | tofi --prompt-text="clip:" | cliphist decode | wl-copy +#bind = $mainMod, c, exec, cliphist list | tofi --prompt-text="clip:" | cliphist decode | wl-copy +bind = $mainMod, c, exec, vicinae vicinae://extensions/vicinae/clipboard/history # https://wiki.hyprland.org/Configuring/Binds binds { @@ -177,4 +174,4 @@ bind = $mainMod, F8, exec, ~/.config/hypr/scripts/monitor-toggle.sh toggle-exte # Explicit profiles bind = $mainMod, F8, exec, ~/.config/hypr/scripts/monitor-toggle.sh laptop bind = $mainMod, F9, exec, ~/.config/hypr/scripts/monitor-toggle.sh dual -bind = $mainMod, F10, exec, ~/.config/hypr/scripts/monitor-toggle.sh triple +bind = $mainMod, F10, exec, ~/.config/hypr/scripts/monitor-toggle.sh triple \ No newline at end of file diff --git a/.config/hypr/config/plugins.conf b/.config/hypr/config/plugins.conf new file mode 100644 index 0000000..9db57b6 --- /dev/null +++ b/.config/hypr/config/plugins.conf @@ -0,0 +1,12 @@ +# https://github.com/sandwichfarm/hyprexpo-plus +# currently not working +plugin { + hyprexpo { + columns = 3 + gap_size = 5 + workspace_method = center current # [center/first] [workspace] e.g. first 1 or center m+1 + keynav_enable = 1 + keynav_wrap_h = 1 # wrap horizontally at row edges + keynav_wrap_v = 1 # wrap vertically at column edges + } +} diff --git a/.config/hypr/config/variables.conf b/.config/hypr/config/variables.conf index 0d86cdb..e4fe6c3 100644 --- a/.config/hypr/config/variables.conf +++ b/.config/hypr/config/variables.conf @@ -58,6 +58,7 @@ misc { vrr = 2 # Hypridle cmatrix fix: session_lock_xray = true + middle_click_paste = false } # https://wiki.hyprland.org/0.45.0/Configuring/Variables/#render diff --git a/.config/hypr/config/windowrules.conf b/.config/hypr/config/windowrules.conf index 7cf42b1..7d55223 100644 --- a/.config/hypr/config/windowrules.conf +++ b/.config/hypr/config/windowrules.conf @@ -5,49 +5,217 @@ # Windows Rules https://wiki.hyprland.org/0.45.0/Configuring/Window-Rules/ # # Float Necessary Windows -windowrule = float, title:Rofi -windowrule = float, class:^(org.pulseaudio.pavucontrol) -windowrule = float, class:^()$,title:^(Picture in picture)$ -windowrule = float, class:^()$,title:^(Save File)$ -windowrule = float, class:^()$,title:^(Open File)$ -windowrule = float, class:^(LibreWolf)$,title:^(Picture-in-Picture)$ -windowrule = float, class:^(blueman-manager)$ -windowrule = float, class:^(xdg-desktop-portal-gtk|xdg-desktop-portal-kde|xdg-desktop-portal-hyprland)(.*)$ -windowrule = float, class:^(pomodorolm)$ -windowrule = float, title:^(Extension:.*)$ -windowrule = float, class:^(polkit-gnome-authentication-agent-1|hyprpolkitagent|org.org.kde.polkit-kde-authentication-agent-1)(.*)$ -windowrule = float, class:^(CachyOSHello)$ -windowrule = float, class:^(zenity)$ -windowrule = float, class:^()$,title:^(Steam - Self Updater)$ -windowrule = float, class:^(Zotero)$,title:^(Progress)$ +windowrule { + name = windowrule-1 + float = on + match:title = Rofi +} + +windowrule { + name = windowrule-2 + float = on + match:class = ^(org.pulseaudio.pavucontrol) +} + +windowrule { + name = windowrule-3 + float = on + match:class = ^()$ + match:title = ^(Picture in picture)$ +} + +windowrule { + name = windowrule-4 + float = on + match:class = ^()$ + match:title = ^(Save File)$ +} + +windowrule { + name = windowrule-5 + float = on + match:class = ^()$ + match:title = ^(Open File)$ +} + +windowrule { + name = windowrule-6 + float = on + match:class = ^(LibreWolf)$ + match:title = ^(Picture-in-Picture)$ +} + +windowrule { + name = windowrule-7 + float = on + match:class = ^(blueman-manager)$ +} + +windowrule { + name = windowrule-8 + float = on + match:class = ^(xdg-desktop-portal-gtk|xdg-desktop-portal-kde|xdg-desktop-portal-hyprland)(.*)$ +} + +windowrule { + name = windowrule-9 + float = on + size = 260 340 + match:class = ^(pomodorolm)$ +} + +windowrule { + name = windowrule-10 + float = on + match:title = ^(Extension:.*)$ +} + +windowrule { + name = windowrule-11 + float = on + match:class = ^(polkit-gnome-authentication-agent-1|hyprpolkitagent|org.org.kde.polkit-kde-authentication-agent-1)(.*)$ +} + +windowrule { + name = windowrule-12 + float = on + match:class = ^(CachyOSHello)$ +} + +windowrule { + name = windowrule-13 + float = on + match:class = ^(zenity)$ +} + +windowrule { + name = windowrule-14 + float = on + match:class = ^()$ + match:title = ^(Steam - Self Updater)$ +} + +windowrule { + name = windowrule-15 + float = on + match:class = ^(Zotero)$ + match:title = ^(Progress)$ +} + # Increase the opacity -windowrule = opacity 0.92, class:^(thunar|nemo|dolphin)$ -windowrule = opacity 0.96, class:^(discord|armcord|webcord)$ -windowrule = opacity 0.95, title:^(QQ|Telegram)$ -windowrule = opacity 0.95, title:^(NetEase Cloud Music Gtk4)$ -windowrule = opacity 1, class:^(kitty)$ +windowrule { + name = windowrule-16 + opacity = 0.92 + match:class = ^(thunar|nemo|dolphin)$ +} + +windowrule { + name = windowrule-17 + opacity = 0.96 + match:class = ^(discord|armcord|webcord)$ +} + +windowrule { + name = windowrule-18 + opacity = 0.95 + match:title = ^(QQ|Telegram)$ +} + +windowrule { + name = windowrule-19 + opacity = 0.95 + match:title = ^(NetEase Cloud Music Gtk4)$ +} + +windowrule { + name = windowrule-20 + opacity = 1 + match:class = ^(kitty)$ +} + # General window rules -windowrule = size 260 340, class:^(pomodorolm)$ -windowrule = float, title:^(Picture-in-Picture)$ -windowrule = size 960 540, title:^(Picture-in-Picture)$ -windowrule = move 25%-, title:^(Picture-in-Picture)$ -windowrule = float, title:^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp|nwg-look|nwg-displays)$ -windowrule = move 25%-, title:^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp)$ -windowrule = size 960 540, title:^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp)$ -windowrule = pin, title:^(danmufloat)$ -windowrule = rounding 5, title:^(danmufloat|termfloat)$ -windowrule = animation slide right, class:^(kitty|Alacritty)$ -windowrule = noblur, class:^(org.mozilla.firefox)$ -windowrule = nodim, class:^(zen)$ -windowrule = float, title:^(Zotero Settings)$ +windowrule { + name = windowrule-21 + float = on + size = 960 540 + move = ((monitor_w*0.25)-) + match:title = ^(Picture-in-Picture)$ +} + +windowrule { + name = windowrule-22 + float = on + match:title = ^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp|nwg-look|nwg-displays)$ +} + +windowrule { + name = windowrule-23 + move = ((monitor_w*0.25)-) + size = 960 540 + match:title = ^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp)$ +} + +windowrule { + name = windowrule-24 + pin = on + match:title = ^(danmufloat)$ +} + +windowrule { + name = windowrule-25 + rounding = 5 + match:title = ^(danmufloat|termfloat)$ +} + +windowrule { + name = windowrule-26 + animation = slide right + match:class = ^(kitty|Alacritty)$ +} + +windowrule { + name = windowrule-27 + no_blur = on + match:class = ^(org.mozilla.firefox)$ +} + +windowrule { + name = windowrule-28 + no_dim = on + match:class = ^(zen)$ +} + +windowrule { + name = windowrule-29 + float = on + match:title = ^(Zotero Settings)$ +} + # Decorations related to floating windows on workspaces 1 to 10 -windowrule = bordersize 2, floating:1, onworkspace:w[fv1-10] -windowrule = bordercolor $color4, floating:1, onworkspace:w[fv1-10] -windowrule = rounding 8, floating:1, onworkspace:w[fv1-10] +windowrule { + name = windowrule-30 + border_size = 2 + border_color = $color4 + rounding = 8 + match:float = 1 + match:workspace = w[fv1-10] +} + # Decorations related to tiling windows on workspaces 1 to 10 -windowrule = bordersize 3, floating:0, onworkspace:f[1-10] -windowrule = rounding 4, floating:0, onworkspace:f[1-10] -windowrule = opacity 0.9, title:^(.+nvim$) +windowrule { + name = windowrule-31 + border_size = 3 + rounding = 4 + match:float = 0 + match:workspace = f[1-10] +} + +windowrule { + name = windowrule-32 + opacity = 0.9 + match:title = ^(.+nvim$) +} + # Windows Rules End # # Workspaces Rules https://wiki.hyprland.org/0.45.0/Configuring/Workspace-Rules/ # @@ -64,13 +232,61 @@ windowrule = opacity 0.9, title:^(.+nvim$) # Workspaces Rules End # # Layers Rules # -layerrule = animation slide top, logout_dialog +layerrule { + name = layerrule-1 + animation = slide top + match:namespace = logout_dialog +} + # layerrule = animation popin 50%, waybar -layerrule = animation slide down, waybar -layerrule = animation fade 50%, wallpaper +layerrule { + name = layerrule-2 + animation = slide down + match:namespace = waybar +} + +layerrule { + name = layerrule-3 + animation = fade 50% + match:namespace = wallpaper +} + +# vicinae +layerrule { + name = vicinae-blur + blur = on + animation = popin + dim_around = on + ignore_alpha = 1 + match:namespace = vicinae +} + # Layers Rules End # # Zotero Libreoffice -windowrule = float,class:^(Zotero)$,title:^(Citation Dialog)$ -windowrule = center,class:^(Zotero)$,title:^(Citation Dialog)$ -windowrule = noanim,class:^(Zotero)$,title:^(Citation Dialog)$ +windowrule { + name = windowrule-33 + float = on + center = on + no_anim = on + match:class = ^(Zotero)$ + match:title = ^(Citation Dialog)$ +} + +# gnome calendar +windowrule { + name = windowrule-cal + float = on + center = on + match:class = ^(org.gnome.Calendar)$ + match:title = ^(Calendar)$ + animation = popin + opacity = 0.8 +} + +windowrule { + name = waypaper-fix + match:class = ^(waypaper)$ + float = on + center = on +} \ No newline at end of file diff --git a/.config/hypr/config/windowrules.conf_bak b/.config/hypr/config/windowrules.conf_bak new file mode 100644 index 0000000..c81679c --- /dev/null +++ b/.config/hypr/config/windowrules.conf_bak @@ -0,0 +1,77 @@ +# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +# ┃ Windowrules Configuration ┃ +# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +# Windows Rules https://wiki.hyprland.org/0.45.0/Configuring/Window-Rules/ # + +# Float Necessary Windows +windowrule = float, title:Rofi +windowrule = float, class:^(org.pulseaudio.pavucontrol) +windowrule = float, class:^()$,title:^(Picture in picture)$ +windowrule = float, class:^()$,title:^(Save File)$ +windowrule = float, class:^()$,title:^(Save File)$ +windowrule = float, class:^()$,title:^(Open File)$ +windowrule = float, class:^(LibreWolf)$,title:^(Picture-in-Picture)$ +windowrule = float, class:^(blueman-manager)$ +windowrule = float, class:^(xdg-desktop-portal-gtk|xdg-desktop-portal-kde|xdg-desktop-portal-hyprland)(.*)$ +windowrule = float, class:^(pomodorolm)$ +windowrule = float, title:^(Extension:.*)$ +windowrule = float, class:^(polkit-gnome-authentication-agent-1|hyprpolkitagent|org.org.kde.polkit-kde-authentication-agent-1)(.*)$ +windowrule = float, class:^(CachyOSHello)$ +windowrule = float, class:^(zenity)$ +windowrule = float, class:^()$,title:^(Steam - Self Updater)$ +windowrule = float, class:^(Zotero)$,title:^(Progress)$ +# Increase the opacity +windowrule = opacity 0.92, class:^(thunar|nemo|dolphin)$ +windowrule = opacity 0.96, class:^(discord|armcord|webcord)$ +windowrule = opacity 0.95, title:^(QQ|Telegram)$ +windowrule = opacity 0.95, title:^(NetEase Cloud Music Gtk4)$ +windowrule = opacity 1, class:^(kitty)$ +# General window rules +windowrule = size 260 340, class:^(pomodorolm)$ +windowrule = float, title:^(Picture-in-Picture)$ +windowrule = size 960 540, title:^(Picture-in-Picture)$ +windowrule = move 25%-, title:^(Picture-in-Picture)$ +windowrule = float, title:^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp|nwg-look|nwg-displays)$ +windowrule = move 25%-, title:^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp)$ +windowrule = size 960 540, title:^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp)$ +windowrule = pin, title:^(danmufloat)$ +windowrule = rounding 5, title:^(danmufloat|termfloat)$ +windowrule = animation slide right, class:^(kitty|Alacritty)$ +windowrule = noblur, class:^(org.mozilla.firefox)$ +windowrule = nodim, class:^(zen)$ +windowrule = float, title:^(Zotero Settings)$ +# Decorations related to floating windows on workspaces 1 to 10 +windowrule = bordersize 2, floating:1, onworkspace:w[fv1-10] +windowrule = bordercolor $color4, floating:1, onworkspace:w[fv1-10] +windowrule = rounding 8, floating:1, onworkspace:w[fv1-10] +# Decorations related to tiling windows on workspaces 1 to 10 +windowrule = bordersize 3, floating:0, onworkspace:f[1-10] +windowrule = rounding 4, floating:0, onworkspace:f[1-10] +windowrule = opacity 0.9, title:^(.+nvim$) +# Windows Rules End # + +# Workspaces Rules https://wiki.hyprland.org/0.45.0/Configuring/Workspace-Rules/ # +# workspace = 1, default:true, monitor:$priMon +# workspace = 6, default:true, monitor:$secMon +# Workspace selectors https://wiki.hyprland.org/0.45.0/Configuring/Workspace-Rules/#workspace-selectors +# workspace = r[1-5], monitor:$priMon +# workspace = r[6-10], monitor:$secMon +# workspace = special:scratchpad, on-created-empty:$applauncher +# no_gaps_when_only deprecated instead workspaces rules with selectors can do the same +# Smart gaps from 0.45.0 https://wiki.hyprland.org/0.45.0/Configuring/Workspace-Rules/#smart-gaps +#workspace = w[tv1-10], gapsout:5, gapsin:3 +#workspace = f[1], gapsout:5, gapsin:3 +# Workspaces Rules End # + +# Layers Rules # +layerrule = animation slide top, logout_dialog +# layerrule = animation popin 50%, waybar +layerrule = animation slide down, waybar +layerrule = animation fade 50%, wallpaper +# Layers Rules End # + +# Zotero Libreoffice +windowrule = float,class:^(Zotero)$,title:^(Citation Dialog)$ +windowrule = center,class:^(Zotero)$,title:^(Citation Dialog)$ +windowrule = noanim,class:^(Zotero)$,title:^(Citation Dialog)$ diff --git a/.config/hypr/scripts/record-or-screenshot.sh b/.config/hypr/scripts/record-or-screenshot.sh index a9f8574..8cfc58c 100755 --- a/.config/hypr/scripts/record-or-screenshot.sh +++ b/.config/hypr/scripts/record-or-screenshot.sh @@ -1,20 +1,22 @@ #!/bin/env bash -# Menu launcher wrapper -menu_prompt() { - if command -v tofi &>/dev/null; then - printf "%b" "$1" | tofi --prompt-text="$2" - elif command -v fuzzel &>/dev/null; then - printf "%b" "$1" | fuzzel -d -p "$2" -w 25 -l 10 - elif command -v wofi &>/dev/null; then - printf "%b" "$1" | wofi --dmenu --prompt="$2" - elif command -v rofi &>/dev/null; then - printf "%b" "$1" | rofi -dmenu -p "$2" - else - notify-send "No compatible launcher found" "Install tofi, fuzzel, wofi, or rofi." - exit 1 - fi -} +# CLI options +DMENU_CMD="" +while getopts ":d:" opt; do + case "$opt" in + d) DMENU_CMD="$OPTARG" ;; + *) ;; + esac +done +shift $((OPTIND - 1)) + +if [ -z "$DMENU_CMD" ]; then + notify-send "Missing launcher" "Use -d to provide a dmenu command" + exit 1 +fi +read -r -a DMENU_ARR <<< "$DMENU_CMD" +DMENU_BIN="${DMENU_ARR[0]}" +command -v "$DMENU_BIN" &>/dev/null || { notify-send "Launcher not found" "$DMENU_BIN is not installed"; exit 1; } # Directories SCREENSHOT_DIR="${HOME}/Pictures" @@ -29,7 +31,7 @@ if pgrep -u "$USER" wl-screenrec > /dev/null; then notify-send "Recording stopped" # Ask if user wants to compress the video - COMPRESS=$(menu_prompt "✅ compress\n❌ keep original" "🗜️ Compress video?") + COMPRESS=$(printf "%b" "✅ compress\n❌ keep original" | "${DMENU_ARR[@]}" "🗜️ Compress video?") if [[ "$COMPRESS" == "✅ compress" ]]; then # Find the most recent video file LATEST_VIDEO=$(find "$RECORDING_DIR" -name "*.mp4" -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -d' ' -f2-) @@ -39,7 +41,7 @@ if pgrep -u "$USER" wl-screenrec > /dev/null; then if ffmpeg -i "$LATEST_VIDEO" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k "$COMPRESSED_VIDEO" -y &>/dev/null; then notify-send "Compression complete" "$COMPRESSED_VIDEO" # Ask if user wants to delete original - DELETE_ORIGINAL=$(menu_prompt "🗑️ delete original\n📁 keep both" "Delete original?") + DELETE_ORIGINAL=$(printf "%b" "🗑️ delete original\n📁 keep both" | "${DMENU_ARR[@]}" "Delete original?") if [[ "$DELETE_ORIGINAL" == "🗑️ delete original" ]]; then rm "$LATEST_VIDEO" notify-send "Original deleted" "Keeping compressed version only" @@ -66,12 +68,12 @@ record all EOF ) -SELECTION=$(menu_prompt "$OPTIONS" "󰄀 ") +SELECTION=$(printf "%b" "$OPTIONS" | "${DMENU_ARR[@]}" "󰄀 ") [ -z "$SELECTION" ] && exit 0 # Ask for audio mode if it's a recording select_audio_mode() { - AUDIO_MODE=$(menu_prompt "🎤 mic\n💻 internal\n🚫 none" "🎙️ Audio?") + AUDIO_MODE=$(printf "%b" "🎤 mic\n💻 internal\n🚫 none" | "${DMENU_ARR[@]}" "🎙️ Audio?") [ -z "$AUDIO_MODE" ] && echo "__cancel__" && return case "$AUDIO_MODE" in diff --git a/.config/wallust/templates/alacritty.toml b/.config/wallust/templates/alacritty.toml index ccd84bf..e680344 100644 --- a/.config/wallust/templates/alacritty.toml +++ b/.config/wallust/templates/alacritty.toml @@ -1,26 +1,25 @@ [colors.bright] -black = "{{color8}}" -red = "{{color9}}" -green = "{{color10}}" -yellow = "{{color11}}" -blue = "{{color12}}" -magenta = "{{color13}}" -cyan = "{{color14}}" -white = "{{color15}}" - +black = "{{color8}}" # Often a brighter version of normal black, could be slightly desaturated light grey +red = "{{color9}}" # More saturated red for emphasis +green = "{{color10}}" # More saturated green for emphasis +yellow = "{{color11}}" # More saturated yellow, good for prompts or warnings +blue = "{{color12}}" # More saturated blue +magenta = "{{color13}}" # More saturated magenta +cyan = "{{color14}}" # Make cyan lighter to stand out on dark backgrounds +white = "{{color15}}" # Should be the brightest possible [colors.cursor] cursor = "{{cursor}}" [colors.normal] -black = "{{color0}}" -red = "{{color1}}" -green = "{{color2}}" -yellow = "{{color3}}" -blue = "{{color4}}" -magenta = "{{color5}}" -cyan = "{{color6}}" -white = "{{color7}}" +black = "{{color0}}" # Main dark grey/black +red = "{{color1}}" # Normal red +green = "{{color2}}" # Normal green +yellow = "{{color3}}" # Normal yellow +blue = "{{color4}}" # Normal blue +magenta = "{{color5}}" # Normal magenta +cyan = "{{color6}}" # This needs attention. If background is dark, this should be brighter than the background. If background is light, darker. +white = "{{color7}}" # Main light grey/white [colors.primary] background = "{{background}}" -foreground = "{{foreground}}" \ No newline at end of file +foreground = "{{foreground}}" # Force foreground to be the absolute brightest color from the palette diff --git a/.config/wallust/templates/tofi b/.config/wallust/templates/tofi index bac752b..9a98e34 100644 --- a/.config/wallust/templates/tofi +++ b/.config/wallust/templates/tofi @@ -12,9 +12,9 @@ width = 100% height = 100% hide-cursor = false -text-color = #{{ color1 | strip }}55 -prompt-color = #{{ foreground | strip }}77 +text-color = #{{ color1 | strip }}88 +prompt-color = #{{ foreground | strip }}99 selection-color = #{{ color5 | strip }} background-color = #{{ background | strip }}99 -history = true \ No newline at end of file +history = true diff --git a/.config/wallust/templates/vicinae.toml b/.config/wallust/templates/vicinae.toml new file mode 100644 index 0000000..9b74105 --- /dev/null +++ b/.config/wallust/templates/vicinae.toml @@ -0,0 +1,119 @@ +# Vicinae Theme - Wallust Generated +# This file is a template. Place it in your wallust templates directory +# and configure wallust.toml to output it to your vicinae themes folder. +# obtained from https://github.com/saatvik333/niri-dotfiles + +[meta] +name = "Wallust Generated" +description = "Dynamic theme generated from current wallpaper" +variant = "dark" # Wallust defaults to dark variants usually. +inherits = "vicinae-dark" + +# ============================================================================ +# Core Colors +# ============================================================================ + +[colors.core] +accent = "{{color4}}" # Standard ANSI Blue for primary actions +accent_foreground = "{{background}}" # Text on accent should be dark for contrast +background = "{{background}}" # Main wallpaper-derived background +foreground = "{{foreground}}" # Main text color +secondary_background = "{{color0 | lighten(0.05)}}" # Slightly elevated surface +border = "{{color8 | darken(0.3)}}" # Subtler border than raw bright-black + +# ============================================================================ +# Window-Specific Colors +# ============================================================================ + +[colors.main_window] +border = "{{color8 | darken(0.3)}}" + +[colors.settings_window] +border = "{{color8 | darken(0.3)}}" + +# ============================================================================ +# Accent Colors +# ============================================================================ + +[colors.accents] +blue = "{{color4}}" +green = "{{color2}}" +magenta = "{{color5}}" +orange = "{{color3}}" # ANSI Yellow/Orange are often swapped or similar +red = "{{color1}}" +yellow = "{{color3}}" +cyan = "{{color6}}" +purple = "{{color5}}" + +# ============================================================================ +# Text Colors +# ============================================================================ + +[colors.text] +default = "{{foreground}}" +muted = "{{foreground | darken(0.4)}}" # Derived from foreground for consistent tone +danger = "{{color1}}" # Red for errors +success = "{{color2}}" # Green for success +placeholder = "{{foreground | darken(0.6)}}" # Even darker than muted +selection = { background = "{{color4}}", foreground = "{{background}}" } + +[colors.text.links] +default = "{{color4}}" +visited = "{{color5 | darken(0.1)}}" + +# ============================================================================ +# Input Fields +# ============================================================================ + +[colors.input] +border = "{{color8 | darken(0.3)}}" +border_focus = "{{color4}}" +border_error = "{{color1}}" + +# ============================================================================ +# Buttons +# ============================================================================ + +[colors.button.primary] +background = "{{color0 | lighten(0.1)}}" # Explicitly elevated button background +foreground = "{{foreground}}" +hover = { background = "{{color8 | darken(0.1)}}" } # Smoother hover state +focus = { outline = "{{color4}}" } + +# ============================================================================ +# Lists +# ============================================================================ + +[colors.list.item.hover] +background = "{{color8 | darken(0.2)}}" # darker hover for better text contrast +foreground = "{{foreground}}" + +[colors.list.item.selection] +background = "{{color8}}" # Selected item background +foreground = "{{foreground}}" +secondary_background = "{{color8}}" +secondary_foreground = "{{foreground}}" + +# ============================================================================ +# Grid Items +# ============================================================================ + +[colors.grid.item] +background = "{{color0 | lighten(0.05)}}" +hover = { outline = "{{foreground | darken(0.2)}}" } +selection = { outline = "{{color4}}" } + +# ============================================================================ +# Scrollbars +# ============================================================================ + +[colors.scrollbars] +background = "{{color0}}" + +# ============================================================================ +# Loading Indicators +# ============================================================================ + +[colors.loading] +bar = "{{color4}}" +spinner = "{{color4}}" diff --git a/.config/wallust/wallust.toml b/.config/wallust/wallust.toml index 62f8828..fd9fa87 100644 --- a/.config/wallust/wallust.toml +++ b/.config/wallust/wallust.toml @@ -41,6 +41,7 @@ check_contrast = true [templates] waybar = { template = 'waybar.css', target = '~/.config/waybar/colors-wallust.css' } +vicinae = { src = 'vicinae.toml', dst = '~/.local/share/vicinae/themes/wallust.toml'} # alacritty = { template = 'alacritty.toml', target = '~/.config/alacritty/colors.toml' } hyprland = { template = 'hyprland.conf', target = '~/.config/hypr/config/colors.conf' } vscode = { template = 'vscode', target = '~/.cache/wal/colors' } diff --git a/.config/waybar/colors-wallust.css b/.config/waybar/colors-wallust.css index 7759b48..b1639f9 100644 --- a/.config/waybar/colors-wallust.css +++ b/.config/waybar/colors-wallust.css @@ -1,19 +1,19 @@ -@define-color cursor #AA9BB0; -@define-color background #1B1D1E; -@define-color foreground #E1E9EE; -@define-color color0 #424345; -@define-color color1 #58120D; -@define-color color2 #744E72; -@define-color color3 #517185; -@define-color color4 #DD2A4A; -@define-color color5 #DEACB3; -@define-color color6 #A9BFCE; -@define-color color7 #CCD7DE; -@define-color color8 #8E969B; -@define-color color9 #58120D; -@define-color color10 #744E72; -@define-color color11 #517185; -@define-color color12 #DD2A4A; -@define-color color13 #DEACB3; -@define-color color14 #A9BFCE; -@define-color color15 #CCD7DE; +@define-color cursor #9D7C73; +@define-color background #0E0E11; +@define-color foreground #FDF2DE; +@define-color color0 #38393C; +@define-color color1 #424652; +@define-color color2 #6A3E40; +@define-color color3 #736956; +@define-color color4 #897C88; +@define-color color5 #9B8166; +@define-color color6 #F9D9A2; +@define-color color7 #F4E4C8; +@define-color color8 #AA9F8C; +@define-color color9 #424652; +@define-color color10 #6A3E40; +@define-color color11 #736956; +@define-color color12 #897C88; +@define-color color13 #9B8166; +@define-color color14 #F9D9A2; +@define-color color15 #F4E4C8; diff --git a/.config/waybar/config b/.config/waybar/config deleted file mode 100644 index fede372..0000000 --- a/.config/waybar/config +++ /dev/null @@ -1,385 +0,0 @@ -{ - // ------------------------------------------------------------------------- - // Global configuration - // ------------------------------------------------------------------------- - - "layer": "top", - - "position": "top", - - "height": 20, - - "margin-left": 10, - "margin-bottom": 0, - "margin-right": 10, - - "spacing": 5, // Gaps between modules (4px) - - "modules-left": [ - //"custom/rofi", - "hyprland/workspaces", - "custom/weather", - "clock", - //"hyprland/submap", - "temperature", - //"idle_inhibitor", - //"mpd", - "custom/spotify" - ], - "modules-center": [ - "hyprland/window" - //"custom/gammastep" - ], - "modules-right": [ - "backlight", - "custom/storage", - "memory", - "cpu", - "battery", - //"pulseaudio", - "wireplumber", - "bluetooth", - //"custom/screenshot_t", - "tray", - "custom/power" - ], - - // ------------------------------------------------------------------------- - // Modules - // ------------------------------------------------------------------------- - - "custom/sp1": { - "format": " | ", - "tooltip": false - }, - "custom/sp2": { - "format": " |", - "tooltip": false - }, - - "custom/rofi": { - "format": "", - "tooltip": false, - "on-click-right": "nwg-drawer", - "on-click": "wofi --show run", - "on-click-middle": "pkill -9 wofi" - }, - "custom/screenshot_t":{ - "format":" ", - "on-click": "~/.config/hypr/scripts/screenshot_full", - "on-click-right":"~/.config/hypr/scripts/screenshot_area" - }, - - "clock#1": { - "format": " {:%a}", - "tooltip": false, - "on-click": "gsimplecal" - }, - "clock#2": { - "format": " {:%d-%h-%Y}", - "tooltip": false, - "on-click": "gsimplecal" - }, - "clock#3": { - "format": " {:%H:%M:%S %p}", - "tooltip": false, - "on-click": "gsimplecal" - }, - - "bluetooth": { - // "controller": "controller1", // specify the alias of the controller if there are more than 1 on the system - "format": "", - "format-connected": " {num_connections} connected", - "tooltip-format": "{controller_alias}\t{controller_address}", - "tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{device_enumerate}", - "tooltip-format-enumerate-connected": "{device_alias}\t{device_address}", - "on-click": "blueman-manager" - }, - - "temperature": { - // "thermal-zone": 1, - "interval": 4, - //"hwmon-path": "/sys/class/hwmon/hwmon3/temp1_input", - "critical-threshold": 80, - // "format-critical": " {temperatureC}°C", - "format-critical": " {temperatureC}°C", - "format": "{icon} {temperatureC}°C", - "format-icons": ["", "", ""], - "max-length": 7, - "min-length": 7, - "on-click": "xsensors" - }, - - "memory": { - "interval": 30, - "format": " {used:0.2f} / {total:0.0f} GB", - "on-click": "alacritty -e btop" - }, - - "battery": { - "interval": 2, - "states": { - "good": 95, - "warning": 30, - "critical": 15 - }, - "format": "{icon} {capacity}%", - "format-charging": " {capacity}%", - "format-plugged": " {capacity}%", - "format-icons": [ - "", - "", - "", - "", - "" - ] - }, - "network": { - "format-wifi": " {essid} ({signalStrength}%)", - "format-ethernet": "{ifname}: {ipaddr}/{cidr} ", - "format-linked": "{ifname} (No IP) ", - "format": "", - "format-disconnected": "", - "format-alt": "{ifname}: {ipaddr}/{cidr}", - "on-click": "wl-copy $(ip address show up scope global | grep inet | head -n1 | cut -d/ -f 1 | tr -d [:space:] | cut -c5-)", - "on-click-right": "wl-copy $(ip address show up scope global | grep inet6 | head -n1 | cut -d/ -f 1 | tr -d [:space:] | cut -c6-)", - "tooltip-format": " {bandwidthUpBits}  {bandwidthDownBits}\n{ifname}\n{ipaddr}/{cidr}\n", - "tooltip-format-wifi": " {essid} {frequency}MHz\nStrength: {signaldBm}dBm ({signalStrength}%)\nIP: {ipaddr}/{cidr}\n {bandwidthUpBits}  {bandwidthDownBits}", - "interval": 10 - }, - "custom/storage": { - "format": " {}", - "format-alt": "{percentage}% ", - "format-alt-click": "click-right", - "return-type": "json", - "interval": 60, - "exec": "~/.config/waybar/modules/storage.sh" - }, - - "backlight": { - "device": "intel_backlight", - "format": "{icon} {percent}%", - "format-alt": "{percent}% {icon}", - "format-alt-click": "click-right", - //"format-icons": ["", ""], - "format-icons": ["", ""], - "on-scroll-down": "brightnessctl s 5%-", - "on-scroll-up": "brightnessctl s +5%" - }, - "idle_inhibitor": { - "format": "{icon}", - "format-icons": { - "activated": "", - "deactivated": "" - }, - "tooltip": "true" - }, - "custom/weather": { - "format": "{}", - "format-alt": "{alt}: {}", - "format-alt-click": "click-right", - "interval": 3600, - "exec": "curl -s 'https://wttr.in/?format=1'", - //"return-type": "json", - //"exec": "~/.config/waybar/modules/weather.sh", - "exec-if": "ping wttr.in -c1" - }, - "custom/pacman": { - "format": "􏆲 {}", - "interval": 3600, // every hour - "exec": "checkupdates | wc -l", // # of updates - "exec-if": "exit 0", // always run; consider advanced run conditions - "on-click": "alacritty -e 'paru'; pkill -SIGRTMIN+8 waybar", // update system - "signal": 8, - "max-length": 5, - "min-length": 3 - }, - -"custom/spotify": { - "exec": "~/.config/waybar/mediaplayer.py --player spotify", - "format": "{} ", - "return-type": "json", - "on-click": "playerctl play-pause", - "on-scroll-up": "playerctl next", - "on-scroll-down": "playerctl previous" -}, - - "custom/media": { - "format": "{0} {1}", - "return-type": "json", - "max-length": 40, - "format-icons": { - "spotify": "", - "default": "🎜" - }, - "escape": true, - //"exec": "~/.config/waybar/mediaplayer.py" // Script in resources folder - // "exec": "~/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name - }, - - "custom/power": { - "format": " 󰐥 ", - "tooltip": false, - "on-click": "wlogout" - }, - - "clock": { - "format": " {:%H:%M  %e %b}", - "tooltip-format": "{:%Y %B}\n{calendar}", - "today-format": "{}" - }, - - "clock#date": { - "format": "󰥔 {:%H:%M \n %e %b}", - "tooltip-format": "{:%Y %B}\n{calendar}", - "today-format": "{}" - }, - - "custom/gammastep": { - "interval": 5, - "return-type": "json", - "exec": { - "pre": "if unit_status=\"$(systemctl --user is-active gammastep)\"; then\nstatus=\"$unit_status ($(journalctl --user -u gammastep.service -g 'Period: ' | tail -1 | cut -d ':' -f6 | xargs))\"\nelse\nstatus=\"$unit_status\"\nfi", - "alt": "${status:-inactive}", - "tooltip": "Gammastep is $status", - }, - "format": "{icon}", - "format-icons": { - "activating": "󰁪 ", - "deactivating": "󰁪 ", - "inactive": "? ", - "active (Night)": " ", - "active (Nighttime)": " ", - "active (Transition (Night)": " ", - "active (Transition (Nighttime)": " ", - "active (Day)": " ", - "active (Daytime)": " ", - "active (Transition (Day)": " ", - "active (Transition (Daytime)": " ", - }, - "on-click": "systemctl --user is-active gammastep && systemctl --user stop gammastep || systemctl --user start gammastep", - }, - - "cpu": { - "interval": 1, - //"format": " {}%", // Icon: microchip - "format": "{max_frequency}GHz | {usage}%", - "max-length": 13, - "min-length": 13 - }, - - "mpd": { - "max-length": 25, - "format": " {title}", - "format-paused": " {title}", - "format-stopped": "", - "format-disconnected": "", - "on-click": "mpc --quiet toggle", - "on-click-right": "mpc update; mpc ls | mpc add", - "on-click-middle": "alacritty -e ncmpcpp", - "on-scroll-up": "mpc --quiet prev", - "on-scroll-down": "mpc --quiet next", - "smooth-scrolling-threshold": 5, - "tooltip-format": "{title} - {artist} ({elapsedTime:%M:%S}/{totalTime:%H:%M:%S})" - }, - - "custom/title": { - "format": "{}", - "interval": 0, - "return-type": "json", - //"max-length": 35, - "tooltip": false - }, - - "custom/title#name": { - "format": "{}", - "interval": 0, - "return-type": "json", - - "max-length": 35, - "exec": "$HOME/.scripts/title" - }, - - /*"custom/keyboard": { - "format": " {}", - "interval": 1, - "exec": "$HOME/.config/waybar/get_kbdlayout.sh" - },*/ - - "hyprland/workspaces": { - "all-outputs": true, - "format": "{name}", - "format-icons": { - "1": "一", - "2": "二", - "3": "三", - "4": "四", - "5": "五", - "6": "六", - "7": "七", - "8": "八", - "9": "九", - "10": "十", - }, - "on-scroll-up": "hyprctl dispatch workspace e+1 1>/dev/null", - "on-scroll-down": "hyprctl dispatch workspace e-1 1>/dev/null", - "sort-by-number": true, - "active-only": false, - }, - - "hyprland/window": { - "max-length": 100, - "separate-outputs": true - }, - - "pulseaudio": { - "scroll-step": 3, // %, can be a float - "format": "{icon} {volume}% {format_source}", - "format-bluetooth": "{volume}% {icon} {format_source}", - "format-bluetooth-muted": " {icon} {format_source}", - "format-muted": " {format_source}", - //"format-source": "{volume}% ", - //"format-source-muted": "", - "format-source": "", - "format-source-muted": "", - "format-icons": { - "headphone": "", - "hands-free": "", - "headset": "", - "phone": "", - "portable": "", - "car": "", - "default": ["", "", ""] - }, - "on-click": "pavucontrol", - "on-click-right": "amixer sset Master toggle" - }, - - "wireplumber": { - "on-click": "pavucontrol", - "on-click-right": "amixer sset Master toggle 1>/dev/null", - //on-click: "${wpctl} set-mute @DEFAULT_AUDIO_SINK@ toggle"; - //on-scroll-down: "${wpctl} set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 0.04+"; - //on-scroll-up: "${wpctl} set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 0.04-"; - "format": "{icon} {volume}%", - "format-muted": " ", - "format-source": "", - "format-source-muted": "", - //"format-muted": "", - //"format-icons": [ "" ] - "format-icons": { - "headphone": " ", - "hands-free": " ", - "headset": " ", - "phone": " ", - "portable": " ", - "car": " ", - "default": [" ", " ", " "] - }, - }, - - "tray": { - "icon-size": 15, - "spacing": 5 - } -} diff --git a/.config/waybar/config.jsonc b/.config/waybar/config.jsonc new file mode 100644 index 0000000..09f10c4 --- /dev/null +++ b/.config/waybar/config.jsonc @@ -0,0 +1,439 @@ +{ + // ------------------------------------------------------------------------- + // Global configuration + // ------------------------------------------------------------------------- + + "layer": "top", + + "position": "top", + + "height": 36, + + "margin-left": 2, + "margin-bottom": 1, + "margin-right": 2, + + "spacing": 1, // Gaps between modules (4px) + + "modules-left": [ + "clock", + "custom/weather", + //"custom/rofi", + "hyprland/workspaces", + //"hyprland/submap", + //"idle_inhibitor", + //"mpd", + "custom/spotify", + "hyprland/window", + ], + // "modules-center": [ + // //"custom/gammastep" + // ], + "modules-right": [ + //"wlr/taskbar", + //"custom/storage", + "memory", + "cpu", + "temperature", + "battery", + //"pulseaudio", + "wireplumber", + "cava", + //"backlight", + "bluetooth", + //"custom/screenshot_t", + "custom/power_profiles", + //"tray", + "custom/power", + ], + + // ------------------------------------------------------------------------- + // Modules + // ------------------------------------------------------------------------- + + "wlr/taskbar": { + "on-click": "activate", + "on-click-middle": "close", + "format": "{icon}", + "icon-size": 12, + "icon-theme": "Numix-Circle", + }, + + "custom/sp1": { + "format": " | ", + "tooltip": false, + }, + "custom/sp2": { + "format": " |", + "tooltip": false, + }, + + "custom/rofi": { + "format": "", + "tooltip": false, + "on-click-right": "nwg-drawer", + "on-click": "wofi --show run", + "on-click-middle": "pkill -9 wofi", + }, + "custom/screenshot_t": { + "format": " ", + "on-click": "~/.config/hypr/scripts/screenshot_full", + "on-click-right": "~/.config/hypr/scripts/screenshot_area", + }, + + "clock#1": { + "format": " {:%a}", + "tooltip": false, + "on-click": "gnome-calendar", + }, + "clock#2": { + "format": " {:%d-%h-%Y}", + "tooltip": false, + "on-click": "gnome-calendar", + }, + "clock#3": { + "format": " {:%H:%M:%S %p}", + "tooltip": false, + "on-click": "gnome-calendar", + }, + + "bluetooth": { + // "controller": "controller1", // specify the alias of the controller if there are more than 1 on the system + "format": "ᛒ {status}", + "format-connected": "ᛒ {device_alias}", + "format-disabled": "ᛒ off", + "tooltip-format": "{controller_alias}\t{controller_address}", + "tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{device_enumerate}", + "tooltip-format-enumerate-connected": "{device_alias}\t{device_address}", + "on-click": "blueman-manager", + }, + + "temperature": { + // "thermal-zone": 1, + "interval": 4, + //"hwmon-path": "/sys/class/hwmon/hwmon3/temp1_input", + "critical-threshold": 80, + // "format-critical": " {temperatureC}°C", + "format-critical": " {temperatureC}°C", + "format": "{icon} {temperatureC}°C", + "format-icons": ["", "", ""], + "max-length": 7, + "min-length": 7, + "on-click": "xsensors", + }, + + "memory": { + "interval": 30, + "format": " {used:0.2f} / {total:0.0f} GB", + "on-click": "kitty -e btop", + }, + + "battery": { + "interval": 2, + "states": { + "good": 95, + "warning": 30, + "critical": 15, + }, + "format": "{icon} {capacity}%", + "format-charging": " {capacity}%", + "format-plugged": " {capacity}%", + "format-icons": ["", "", "", "", ""], + }, + "network": { + "format-wifi": " {essid} ({signalStrength}%)", + "format-ethernet": "{ifname}: {ipaddr}/{cidr} ", + "format-linked": "{ifname} (No IP) ", + "format": "", + "format-disconnected": "", + "format-alt": "{ifname}: {ipaddr}/{cidr}", + "on-click": "wl-copy $(ip address show up scope global | grep inet | head -n1 | cut -d/ -f 1 | tr -d [:space:] | cut -c5-)", + "on-click-right": "wl-copy $(ip address show up scope global | grep inet6 | head -n1 | cut -d/ -f 1 | tr -d [:space:] | cut -c6-)", + "tooltip-format": " {bandwidthUpBits}  {bandwidthDownBits}\n{ifname}\n{ipaddr}/{cidr}\n", + "tooltip-format-wifi": " {essid} {frequency}MHz\nStrength: {signaldBm}dBm ({signalStrength}%)\nIP: {ipaddr}/{cidr}\n {bandwidthUpBits}  {bandwidthDownBits}", + "interval": 10, + }, + "custom/storage": { + "format": " {}", + "format-alt": "{percentage}% ", + "format-alt-click": "click-right", + "return-type": "json", + "interval": 60, + "exec": "~/.config/waybar/modules/storage.sh", + }, + + "backlight": { + "device": "intel_backlight", + "format": "{icon} {percent}%", + "format-alt": "{percent}% {icon}", + "format-alt-click": "click-right", + //"format-icons": ["", ""], + "format-icons": ["", ""], + "on-scroll-down": "brightnessctl s 5%-", + "on-scroll-up": "brightnessctl s +5%", + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "", + }, + "tooltip": "true", + }, + "custom/weather": { + "format": "{}", + "format-alt": "{alt}: {}", + "format-alt-click": "click-right", + "interval": 3600, + "exec": "curl -s 'https://wttr.in/?format=1'", + //"return-type": "json", + //"exec": "~/.config/waybar/modules/weather.sh", + "exec-if": "ping wttr.in -c1", + }, + "custom/pacman": { + "format": "􏆲 {}", + "interval": 3600, // every hour + "exec": "checkupdates | wc -l", // # of updates + "exec-if": "exit 0", // always run; consider advanced run conditions + "on-click": "alacritty -e 'paru'; pkill -SIGRTMIN+8 waybar", // update system + "signal": 8, + "max-length": 5, + "min-length": 3, + }, + + "custom/spotify": { + "exec": "~/.config/waybar/mediaplayer.py --player spotify", + "format": "{} ", + "return-type": "json", + "on-click": "playerctl play-pause", + "on-scroll-up": "playerctl next", + "on-scroll-down": "playerctl previous", + }, + + "custom/media": { + "format": "{0} {1}", + "return-type": "json", + "max-length": 40, + "format-icons": { + "spotify": "", + "default": "🎜", + }, + "escape": true, + //"exec": "~/.config/waybar/mediaplayer.py" // Script in resources folder + // "exec": "~/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name + }, + + "clock": { + "format": " {:%H:%M  %e %b}", + "tooltip-format": "{:%Y %B}\n{calendar}", + "today-format": "{}", + "on-click": "gnome-calendar", + }, + + "clock#date": { + "format": "󰥔 {:%H:%M \n %e %b}", + "tooltip-format": "{:%Y %B}\n{calendar}", + "today-format": "{}", + }, + + "custom/gammastep": { + "interval": 5, + "return-type": "json", + "exec": { + "pre": "if unit_status=\"$(systemctl --user is-active gammastep)\"; then\nstatus=\"$unit_status ($(journalctl --user -u gammastep.service -g 'Period: ' | tail -1 | cut -d ':' -f6 | xargs))\"\nelse\nstatus=\"$unit_status\"\nfi", + "alt": "${status:-inactive}", + "tooltip": "Gammastep is $status", + }, + "format": "{icon}", + "format-icons": { + "activating": "󰁪 ", + "deactivating": "󰁪 ", + "inactive": "? ", + "active (Night)": " ", + "active (Nighttime)": " ", + "active (Transition (Night)": " ", + "active (Transition (Nighttime)": " ", + "active (Day)": " ", + "active (Daytime)": " ", + "active (Transition (Day)": " ", + "active (Transition (Daytime)": " ", + }, + "on-click": "systemctl --user is-active gammastep && systemctl --user stop gammastep || systemctl --user start gammastep", + }, + + "cpu": { + "interval": 1, + //"format": " {}%", // Icon: microchip + "format": "{max_frequency}GHz | {usage}%", + "max-length": 13, + "min-length": 13, + }, + + "mpd": { + "max-length": 25, + "format": " {title}", + "format-paused": " {title}", + "format-stopped": "", + "format-disconnected": "", + "on-click": "mpc --quiet toggle", + "on-click-right": "mpc update; mpc ls | mpc add", + "on-click-middle": "alacritty -e ncmpcpp", + "on-scroll-up": "mpc --quiet prev", + "on-scroll-down": "mpc --quiet next", + "smooth-scrolling-threshold": 5, + "tooltip-format": "{title} - {artist} ({elapsedTime:%M:%S}/{totalTime:%H:%M:%S})", + }, + + "custom/title": { + "format": "{}", + "interval": 0, + "return-type": "json", + //"max-length": 35, + "tooltip": false, + }, + + "custom/title#name": { + "format": "{}", + "interval": 0, + "return-type": "json", + + "max-length": 35, + "exec": "$HOME/.scripts/title", + }, + + /*"custom/keyboard": { + "format": " {}", + "interval": 1, + "exec": "$HOME/.config/waybar/get_kbdlayout.sh" + },*/ + + "hyprland/workspaces": { + "all-outputs": false, + "format": "{name}", + "format-icons": { + "1": "一", + "2": "二", + "3": "三", + "4": "四", + "5": "五", + "6": "六", + "7": "七", + "8": "八", + "9": "九", + "10": "十", + }, + "on-scroll-up": "hyprctl dispatch workspace e+1 1>/dev/null", + "on-scroll-down": "hyprctl dispatch workspace e-1 1>/dev/null", + "sort-by-number": true, + "active-only": false, + }, + + "hyprland/window": { + "max-length": 200, + "separate-outputs": true, + }, + + "pulseaudio": { + "scroll-step": 3, // %, can be a float + "format": "{icon} {volume}% {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " {icon} {format_source}", + "format-muted": " {format_source}", + //"format-source": "{volume}% ", + //"format-source-muted": "", + "format-source": "", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""], + }, + "on-click": "pavucontrol", + "on-click-right": "amixer sset Master toggle", + }, + + "wireplumber": { + "on-click": "pavucontrol", + "on-click-right": "amixer sset Master toggle 1>/dev/null", + //on-click: "${wpctl} set-mute @DEFAULT_AUDIO_SINK@ toggle"; + //on-scroll-down: "${wpctl} set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 0.04+"; + //on-scroll-up: "${wpctl} set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 0.04-"; + "format": "{icon} {volume}%", + "format-muted": " ", + "format-source": "", + "format-source-muted": "", + //"format-muted": "", + //"format-icons": [ "" ] + "format-icons": { + "headphone": " ", + "hands-free": " ", + "headset": " ", + "phone": " ", + "portable": " ", + "car": " ", + "default": [" ", " ", " "], + }, + }, + + "tray": { + "icon-size": 15, + "spacing": 5, + }, + + "custom/power_profiles": { + "format": "{}", + "return-type": "json", + "interval": 2, + "exec": "~/.config/waybar/modules/power_profiles.py", + "menu": "on-click", + "menu-file": "~/.config/waybar/modules/power_profiles_menu.xml", + "menu-actions": { + "performance": "~/.config/waybar/modules/power_profiles.py --set performance", + "balanced": "~/.config/waybar/modules/power_profiles.py --set balanced", + "power-saver": "~/.config/waybar/modules/power_profiles.py --set power-saver", + }, + "tooltip": true, + }, + + "custom/power": { + "format": "⏻ ", + "tooltip": false, + "menu": "on-click", + "menu-file": "~/.config/waybar/modules/power_menu.xml", + "menu-actions": { + "shutdown": "shutdown", + "reboot": "reboot", + "suspend": "systemctl suspend", + "hibernate": "systemctl hibernate", + }, + }, + + "cava": { + // "cava_config": "$XDG_CONFIG_HOME/cava/cava.conf", + "framerate": 30, + "autosens": 1, + "sensitivity": 100, + "bars": 14, + "lower_cutoff_freq": 50, + "higher_cutoff_freq": 10000, + "hide_on_silence": false, + // "format_silent": "quiet", + "method": "pulse", + "source": "auto", + "stereo": true, + "reverse": false, + "bar_delimiter": 0, + "monstercat": false, + "waves": false, + "noise_reduction": 0.77, + "input_delay": 2, + "format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"], + "actions": { + "on-click-right": "mode", + }, + }, +} diff --git a/.config/waybar/mediaplayer.py b/.config/waybar/mediaplayer.py new file mode 100755 index 0000000..7404f48 --- /dev/null +++ b/.config/waybar/mediaplayer.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python3 +import argparse +import logging +import sys +import signal +import gi +import json +gi.require_version('Playerctl', '2.0') +from gi.repository import Playerctl, GLib + +logger = logging.getLogger(__name__) + + +def write_output(text, player): + logger.info('Writing output') + + output = {'text': text, + 'class': 'custom-' + player.props.player_name, + 'alt': player.props.player_name} + + sys.stdout.write(json.dumps(output) + '\n') + sys.stdout.flush() + + +def on_play(player, status, manager): + logger.info('Received new playback status') + on_metadata(player, player.props.metadata, manager) + + +def on_metadata(player, metadata, manager): + logger.info('Received new metadata') + track_info = '' + + if player.props.player_name == 'spotify' and \ + 'mpris:trackid' in metadata.keys() and \ + ':ad:' in player.props.metadata['mpris:trackid']: + track_info = 'AD PLAYING' + elif player.get_artist() != '' and player.get_title() != '': + track_info = '{artist} - {title}'.format(artist=player.get_artist(), + title=player.get_title()) + else: + track_info = player.get_title() + + if player.props.status != 'Playing' and track_info: + track_info = ' ' + track_info + write_output(track_info, player) + + +def on_player_appeared(manager, player, selected_player=None): + if player is not None and (selected_player is None or player.name == selected_player): + init_player(manager, player) + else: + logger.debug("New player appeared, but it's not the selected player, skipping") + + +def on_player_vanished(manager, player): + logger.info('Player has vanished') + sys.stdout.write('\n') + sys.stdout.flush() + + +def init_player(manager, name): + logger.debug('Initialize player: {player}'.format(player=name.name)) + player = Playerctl.Player.new_from_name(name) + player.connect('playback-status', on_play, manager) + player.connect('metadata', on_metadata, manager) + manager.manage_player(player) + on_metadata(player, player.props.metadata, manager) + + +def signal_handler(sig, frame): + logger.debug('Received signal to stop, exiting') + sys.stdout.write('\n') + sys.stdout.flush() + # loop.quit() + sys.exit(0) + + +def parse_arguments(): + parser = argparse.ArgumentParser() + + # Increase verbosity with every occurance of -v + parser.add_argument('-v', '--verbose', action='count', default=0) + + # Define for which player we're listening + parser.add_argument('--player') + + return parser.parse_args() + + +def main(): + arguments = parse_arguments() + + # Initialize logging + logging.basicConfig(stream=sys.stderr, level=logging.DEBUG, + format='%(name)s %(levelname)s %(message)s') + + # Logging is set by default to WARN and higher. + # With every occurrence of -v it's lowered by one + logger.setLevel(max((3 - arguments.verbose) * 10, 0)) + + # Log the sent command line arguments + logger.debug('Arguments received {}'.format(vars(arguments))) + + manager = Playerctl.PlayerManager() + loop = GLib.MainLoop() + + manager.connect('name-appeared', lambda *args: on_player_appeared(*args, arguments.player)) + manager.connect('player-vanished', on_player_vanished) + + signal.signal(signal.SIGINT, signal_handler) + signal.signal(signal.SIGTERM, signal_handler) + + for player in manager.props.player_names: + if arguments.player is not None and arguments.player != player.name: + logger.debug('{player} is not the filtered player, skipping it' + .format(player=player.name) + ) + continue + + init_player(manager, player) + + loop.run() + + +if __name__ == '__main__': + main() diff --git a/.config/waybar/modules/power_menu.xml b/.config/waybar/modules/power_menu.xml new file mode 100644 index 0000000..5ec4417 --- /dev/null +++ b/.config/waybar/modules/power_menu.xml @@ -0,0 +1,31 @@ + + + + + + + + Suspend + + + + + Hibernate + + + + + Shutdown + + + + + + + + Reboot + + + + + diff --git a/.config/waybar/modules/power_profiles.py b/.config/waybar/modules/power_profiles.py new file mode 100755 index 0000000..20744e8 --- /dev/null +++ b/.config/waybar/modules/power_profiles.py @@ -0,0 +1,150 @@ +#!/usr/bin/env python3 +import subprocess +import json +import sys +from pathlib import Path + +def get_current_profile(): + """Get the current power profile""" + try: + result = subprocess.run( + ["powerprofilesctl", "get"], + capture_output=True, + text=True, + timeout=5 + ) + if result.returncode == 0: + return result.stdout.strip() + except Exception as e: + print(f"Error getting profile: {e}", file=sys.stderr) + return "unknown" + +def get_available_profiles(): + """Get list of available power profiles""" + try: + result = subprocess.run( + ["powerprofilesctl", "list"], + capture_output=True, + text=True, + timeout=5 + ) + if result.returncode == 0: + profiles = [] + for line in result.stdout.split('\n'): + line = line.strip() + if line and ':' in line and not line.startswith('Cpu') and not line.startswith('Platform') and not line.startswith('Degraded'): + profile_name = line.split(':')[0].strip() + if profile_name and not profile_name.startswith('*'): + profiles.append(profile_name) + elif profile_name.startswith('*'): + profiles.append(profile_name[1:].strip()) + return profiles + except Exception as e: + print(f"Error getting profiles: {e}", file=sys.stderr) + return [] + +def set_profile(profile): + """Set the power profile""" + try: + subprocess.run( + ["powerprofilesctl", "set", profile], + capture_output=True, + timeout=5 + ) + except Exception as e: + print(f"Error setting profile: {e}", file=sys.stderr) + +def write_menu_file(menu_path, profiles, current): + """Write a GTK menu XML file for Waybar.""" + items = [] + if not profiles: + items.append( + " \n" + " \n" + " No profiles\n" + " false\n" + " \n" + " \n" + ) + else: + for profile in profiles: + label = profile + if profile == current: + label = f"{profile} (current)" + items.append( + " \n" + f" \n" + f" {label}\n" + " \n" + " \n" + ) + + content = ( + "\n" + "\n" + " \n" + + "".join(items) + + " \n" + "\n" + ) + try: + menu_path.parent.mkdir(parents=True, exist_ok=True) + menu_path.write_text(content) + except Exception as e: + print(f"Error writing menu file: {e}", file=sys.stderr) + +def format_output(profile): + """Format output for waybar""" + # Icons for each profile + icons = { + "performance": "⚡", + "balanced": "⚖", + "power-saver": "🔋" + } + + icon = icons.get(profile, "⚡") + + output = { + "text": f"{icon}", + "alt": profile, + "class": f"power-profile-{profile}", + "tooltip": f"Current: {profile}" + } + + return json.dumps(output) + +def main(): + menu_path = Path("~/.config/waybar/modules/power_profiles_menu.xml").expanduser() + + if len(sys.argv) > 2 and sys.argv[1] == "--set": + target = sys.argv[2] + set_profile(target) + current = get_current_profile() + available = get_available_profiles() + write_menu_file(menu_path, available, current) + print(format_output(current)) + return + + if len(sys.argv) > 1 and sys.argv[1] == "--next": + # Cycle to next profile + current = get_current_profile() + available = get_available_profiles() + write_menu_file(menu_path, available, current) + + if current in available and available: + idx = available.index(current) + next_profile = available[(idx + 1) % len(available)] + set_profile(next_profile) + print(format_output(next_profile)) + else: + print(format_output(current)) + return + + # Just display current profile + current = get_current_profile() + available = get_available_profiles() + write_menu_file(menu_path, available, current) + print(format_output(current)) + +if __name__ == "__main__": + main() diff --git a/.config/waybar/modules/power_profiles_menu.xml b/.config/waybar/modules/power_profiles_menu.xml new file mode 100644 index 0000000..36c4fcc --- /dev/null +++ b/.config/waybar/modules/power_profiles_menu.xml @@ -0,0 +1,20 @@ + + + + + + performance + + + + + balanced (current) + + + + + power-saver + + + + diff --git a/.config/waybar/style.css b/.config/waybar/style.css index 43b15ca..4f8ff1d 100644 --- a/.config/waybar/style.css +++ b/.config/waybar/style.css @@ -1,31 +1,33 @@ /* Import wallust colors */ @import url("colors-wallust.css"); +/* Global defaults */ * { - font-family: "Fira Sans Semibold", "Font Awesome 6 Free", FontAwesome, Roboto, + font-family: + "Fira Sans Condensed", "Font Awesome 6 Free", FontAwesome, Roboto, Helvetica, Arial, sans-serif; font-size: 12px; - font-weight: 900; + font-weight: 500; margin: 0; padding: 0; - transition-property: background-color; - transition-duration: 0.5s; -} - -/* Reset all styles */ -* { border: none; border-radius: 3px; min-height: 0; - margin: 0; + transition: background-color 0.5s; +} + +.modules-left, +.modules-right { + background-color: rgba(17, 24, 39, 0.5); + margin-top: 2px; + border-radius: 3px; + padding: 3px 6px; } /* The whole bar */ #waybar { background-color: alpha(@background, 0); color: @foreground; - transition-property: background-color; - transition-duration: 0.5s; border-radius: 0px; margin: 0; } @@ -48,6 +50,12 @@ window#waybar.empty #window { font-size: 9px; /* Slightly smaller font size */ } +#workspaces { + background-color: transparent; + margin: 0; + padding: 0; +} + #workspaces button.active { color: @foreground; background: @color3; @@ -61,21 +69,15 @@ window#waybar.empty #window { background-color: @color9; } -#workspaces { - background-color: rgba(17, 24, 39, 0.5); - margin-top: 2px; - border-radius: 3px; - padding: 3px 6px; -} - #window { - background-color: alpha(@background, 0.5); + background-color: alpha(@background, 0.1); color: @foreground; border-radius: 3px; padding: 1px 10px; /* Reduced padding */ margin: 2px; } +/* Shared module styling */ #clock, #battery, #cpu, @@ -84,27 +86,52 @@ window#waybar.empty #window { #custom-weather, #bluetooth, #custom-media, +#custom-power_profiles, +#custom-power, #temperature, #backlight, #network, #wireplumber, #pulseaudio { - background-color: alpha(@background, 0.3); + background-color: alpha(@foreground, 0.15); color: @foreground; - padding: 0 10px; + padding: 0px 10px; margin: 2px; } +#clock:hover, +#battery:hover, +#cpu:hover, +#memory:hover, +#custom-storage:hover, +#custom-weather:hover, +#bluetooth:hover, +#custom-media:hover, +#custom-power_profiles:hover, +#custom-power:hover, +#temperature:hover, +#backlight:hover, +#network:hover, +#wireplumber:hover, +#pulseaudio:hover { + background: @color2; +} + +#bluetooth { + background-color: alpha(@color3, 0.3); +} + #bluetooth.disabled { - background-color: alpha(@color8, 0); + background-color: alpha(@color2, 1); } #battery.critical:not(.charging) { color: @color1; + background-color: alpha(@color2, 1); } #temperature.critical { - background-color: alpha(@foreground, 0.5); + background-color: alpha(@color2, 1); } #tray > .passive { @@ -125,20 +152,22 @@ window#waybar.empty #window { color: rgba(45, 52, 54, 1); } -#language { - background: rgba(0, 176, 147, 0.5); - color: rgba(116, 8, 100, 0.5); +/* Language + keyboard state */ +#language, +#keyboard-state { padding: 0 0px; margin: 0 5px; min-width: 16px; } +#language { + background: rgba(0, 176, 147, 0.5); + color: rgba(116, 8, 100, 0.5); +} + #keyboard-state { background: rgba(151, 225, 173, 0.5); color: rgba(0, 0, 0, 0.5); - padding: 0 0px; - margin: 0 5px; - min-width: 16px; } #keyboard-state > label { @@ -148,3 +177,30 @@ window#waybar.empty #window { #keyboard-state > label.locked { background: rgba(0, 0, 0, 0.2); } + +#taskbar { + padding: 0; +} + +#taskbar button { + padding: 0px 3px 0px 6px; + margin: 2px 1px; + border-radius: 6px; + color: @foreground; + transition: all 0.3s ease-in-out; +} + +#taskbar button.active { + background: alpha(@foreground, 0.2); + transition: all 0.4s ease-in-out; +} + +menu { + border-radius: 15px; + background: rgba(22, 19, 32, 0); + color: #b5e8e0; + padding: 5px; +} +menuitem { + border-radius: 15px; +} diff --git a/.config/waybar/waybar.sh b/.config/waybar/waybar.sh new file mode 100755 index 0000000..d03b9eb --- /dev/null +++ b/.config/waybar/waybar.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env sh + +# Terminate already running bar instances +killall -q waybar + +# Wait until the processes have been shut down +while pgrep -x waybar >/dev/null; do sleep 1; done + +# Launch main +waybar & diff --git a/.config/waypaper/config.ini b/.config/waypaper/config.ini index eac8432..43f62c3 100644 --- a/.config/waypaper/config.ini +++ b/.config/waypaper/config.ini @@ -2,9 +2,9 @@ language = en folder = /usr/share/wallpapers monitors = All -wallpaper = /usr/share/wallpapers/wallpaper/lofoten2.jpg +wallpaper = /usr/share/wallpapers/downloaded/pexels-blooddrainer-1655901.jpg show_path_in_tooltip = True -backend = swww +backend = swaybg fill = fill sort = name color = #ffffff @@ -12,9 +12,9 @@ subfolders = True all_subfolders = False show_hidden = False show_gifs_only = False -post_command = wallust run '$wallpaper' +post_command = wallust run '$wallpaper' -s number_of_columns = 3 -swww_transition_type = none +swww_transition_type = wipe swww_transition_step = 90 swww_transition_angle = 0 swww_transition_duration = 2 @@ -22,5 +22,6 @@ swww_transition_fps = 60 mpvpaper_sound = False mpvpaper_options = use_xdg_state = False -zen_mode = False +zen_mode = True +stylesheet = /home/michaelb/.config/waypaper/style.css