Compare commits
7 Commits
ae154bcaa7
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 5e55b51220 | |||
| 73d6ca5bec | |||
| 8a6e480d58 | |||
| 810060dc10 | |||
| 03e8aa1343 | |||
| 649e324ac7 | |||
| b58b194797 |
@@ -7,7 +7,7 @@
|
|||||||
animations {
|
animations {
|
||||||
enabled = yes
|
enabled = yes
|
||||||
bezier = overshot, 0.13, 0.99, 0.29, 1.1
|
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 = windowsOut, 1, 5, default, popin 80%
|
||||||
animation = border, 1, 5, default
|
animation = border, 1, 5, default
|
||||||
animation = workspacesIn, 1, 6, overshot, slide
|
animation = workspacesIn, 1, 6, overshot, slide
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
source = ~/.config/hypr/config/defaults.conf
|
source = ~/.config/hypr/config/defaults.conf
|
||||||
|
|
||||||
# Autostart wiki https://wiki.hyprland.org/0.45.0/Configuring/Keywords/#executing #
|
# Autostart wiki https://wiki.hyprland.org/0.45.0/Configuring/Keywords/#executing #
|
||||||
|
|
||||||
exec-once = /home/michaelb/.config/hypr/scripts/launch-waybar.sh &
|
exec-once = /home/michaelb/.config/hypr/scripts/launch-waybar.sh &
|
||||||
exec-once = blueman-applet &
|
exec-once = blueman-applet &
|
||||||
exec-once = fcitx5 -d &
|
exec-once = fcitx5 -d &
|
||||||
@@ -26,5 +25,11 @@ exec-once = $idlehandler
|
|||||||
|
|
||||||
# Clipboard fix
|
# Clipboard fix
|
||||||
# https://github.com/hyprwm/Hyprland/issues/2319#issuecomment-2409983376
|
# https://github.com/hyprwm/Hyprland/issues/2319#issuecomment-2409983376
|
||||||
exec-once = wl-paste -t text -w xclip -selection clipboard &
|
#exec-once = wl-paste -t text -w xclip -selection clipboard &
|
||||||
exec-once = wl-paste --watch cliphist store &
|
#exec-once = wl-paste --watch cliphist store &
|
||||||
|
|
||||||
|
# vicinae
|
||||||
|
exec-once = vicinae server
|
||||||
|
|
||||||
|
# pyprland
|
||||||
|
exec-once = /usr/bin/pypr --debug /tmp/pypr.log
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
$wallpaper = /usr/share/wallpapers/downloaded/pexels-zetong-li-880728-18780512.jpg
|
$wallpaper = /usr/share/wallpapers/downloaded/pexels-8kspain-21564213.jpg
|
||||||
$background = rgb(0D0F10)
|
$background = rgb(252425)
|
||||||
$foreground = rgb(FCF1D3)
|
$foreground = rgb(F9F1D9)
|
||||||
$color0 = rgb(38393A)
|
$color0 = rgb(505051)
|
||||||
$color1 = rgb(7F4E47)
|
$color1 = rgb(9C604E)
|
||||||
$color2 = rgb(7D7F54)
|
$color2 = rgb(807A52)
|
||||||
$color3 = rgb(8B7C7D)
|
$color3 = rgb(908BAB)
|
||||||
$color4 = rgb(61868C)
|
$color4 = rgb(B7815F)
|
||||||
$color5 = rgb(D2D1E6)
|
$color5 = rgb(B9BECA)
|
||||||
$color6 = rgb(F5D782)
|
$color6 = rgb(EED793)
|
||||||
$color7 = rgb(F2E3B8)
|
$color7 = rgb(EEE3C1)
|
||||||
$color8 = rgb(A99F81)
|
$color8 = rgb(A79F87)
|
||||||
$color9 = rgb(7F4E47)
|
$color9 = rgb(9C604E)
|
||||||
$color10 = rgb(7D7F54)
|
$color10 = rgb(807A52)
|
||||||
$color11 = rgb(8B7C7D)
|
$color11 = rgb(908BAB)
|
||||||
$color12 = rgb(61868C)
|
$color12 = rgb(B7815F)
|
||||||
$color13 = rgb(D2D1E6)
|
$color13 = rgb(B9BECA)
|
||||||
$color14 = rgb(F5D782)
|
$color14 = rgb(EED793)
|
||||||
$color15 = rgb(F2E3B8)
|
$color15 = rgb(EEE3C1)
|
||||||
@@ -9,16 +9,16 @@ source = ~/.config/hypr/config/colors.conf
|
|||||||
decoration {
|
decoration {
|
||||||
active_opacity = 1
|
active_opacity = 1
|
||||||
inactive_opacity = 0.7
|
inactive_opacity = 0.7
|
||||||
rounding = 10
|
rounding = 1
|
||||||
dim_inactive = true
|
dim_inactive = true
|
||||||
dim_strength = 0.1
|
dim_strength = 0.1
|
||||||
|
|
||||||
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#blur
|
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#blur
|
||||||
blur {
|
blur {
|
||||||
size = 15
|
size = 30
|
||||||
passes = 2 # more passes = more resource intensive.
|
passes = 2 # more passes = more resource intensive.
|
||||||
xray = true
|
xray = true
|
||||||
noise = 0.03
|
noise = 0.01
|
||||||
}
|
}
|
||||||
|
|
||||||
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#shadow
|
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#shadow
|
||||||
|
|||||||
@@ -2,9 +2,11 @@
|
|||||||
# ┃ Defaults Configuration ┃
|
# ┃ Defaults Configuration ┃
|
||||||
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
||||||
|
|
||||||
$filemanager = dolphin
|
$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
|
#$applauncher = rofi -show combi -modi window,run,combi -combi-modi window,run
|
||||||
|
$dmenu = vicinae dmenu --placeholder
|
||||||
|
$applauncher = vicinae toggle
|
||||||
$terminal = kitty
|
$terminal = kitty
|
||||||
$idlehandler = swayidle -w timeout 300 'swaylock -f -c 000000' before-sleep 'swaylock -f -c 000000'
|
$idlehandler = swayidle -w timeout 300 'swaylock -f -c 000000' before-sleep 'swaylock -f -c 000000'
|
||||||
$capturing = grim -g "$(slurp)" - | swappy -f -
|
$capturing = grim -g "$(slurp)" - | swappy -f -
|
||||||
|
|||||||
@@ -2,18 +2,20 @@
|
|||||||
# ┃ Enviroment Configuration ┃
|
# ┃ Enviroment Configuration ┃
|
||||||
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
||||||
|
|
||||||
envd = HYPRCURSOR_SIZE,24
|
envd = HYPRCURSOR_THEME,vimix-kanagawa-hyprcursors-lotus
|
||||||
envd = XCURSOR_SIZE,24
|
envd = HYPRCURSOR_SIZE,34
|
||||||
envd = QT_CURSOR_SIZE,24
|
env = XCURSOR_THEME,vimix-kanagawa-hyprcursors-lotus
|
||||||
|
envd = XCURSOR_SIZE,34
|
||||||
|
envd = QT_CURSOR_SIZE,34
|
||||||
|
|
||||||
# Force electron apps to use wayland
|
# Force electron apps to use wayland
|
||||||
# env = ELECTRON_OZONE_PLATFORM_HINT, auto
|
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
|
||||||
# env = QT_QPA_PLATFORM, wayland
|
env = QT_QPA_PLATFORM, wayland
|
||||||
# env = SDL_VIDEODRIVER, wayland
|
env = SDL_VIDEODRIVER, wayland
|
||||||
# env = CLUTTER_BACKEND, wayland
|
env = CLUTTER_BACKEND, wayland
|
||||||
# env = XDG_SESSION_TYPE, wayland
|
env = XDG_SESSION_TYPE, wayland
|
||||||
# env = MOZ_ENABLE_WAYLAND, 1
|
env = MOZ_ENABLE_WAYLAND, 1
|
||||||
# env = NIXOS_OZONE_WL, 1
|
env = NIXOS_OZONE_WL, 1
|
||||||
|
|
||||||
# fixes full screen flickering
|
# fixes full screen flickering
|
||||||
env = WLR_DRM_NO_DIRECT_SCANOUT,1
|
env = WLR_DRM_NO_DIRECT_SCANOUT,1
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
|
# 0. Includes
|
||||||
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
|
||||||
# ┃ Keybinds ┃
|
|
||||||
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
|
||||||
|
|
||||||
source = ~/.config/hypr/config/defaults.conf
|
source = ~/.config/hypr/config/defaults.conf
|
||||||
|
|
||||||
|
# 1. Applications
|
||||||
# https://wiki.hyprland.org/Configuring/Binds/
|
# https://wiki.hyprland.org/Configuring/Binds/
|
||||||
bindd = $mainMod, RETURN, Opens your preferred terminal emulator ($terminal), exec, $terminal
|
bindd = $mainMod, RETURN, Opens your preferred terminal emulator ($terminal), exec, $terminal
|
||||||
bindd = $mainMod, E, Opens your preferred filemanager ($filemanager), exec, $filemanager
|
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, Q, Closes (not kill) current window, killactive,
|
||||||
bindd = $mainMod SHIFT, M, Exits Hyprland by terminating the user sessions, exec, loginctl terminate-user ""
|
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,
|
bindd = $mainMod, V, Switches current window between floating and tiling mode, togglefloating,
|
||||||
@@ -140,20 +137,20 @@ bindd = $mainMod ALT SHIFT, F1, Move active window to s~/.config/hypr/scripts/pe
|
|||||||
|
|
||||||
# ======= Screenshot =======
|
# ======= Screenshot =======
|
||||||
# Screenshot a window
|
# Screenshot a window
|
||||||
bind = $mainMod, PRINT, exec, hyprshot -m window
|
bind = $mainMod, PRINT, exec, hyprshot -m window
|
||||||
# Screenshot a monitor
|
# Screenshot a monitor
|
||||||
bind = , PRINT, exec, hyprshot -m output
|
bind = , PRINT, exec, hyprshot -m output
|
||||||
# Screenshot a region
|
# Screenshot a region
|
||||||
bind = $shiftMod, PRINT, exec, hyprshot -m region
|
bind = $shiftMod, PRINT, exec, hyprshot -m region
|
||||||
# Screenrec
|
# 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 =======
|
# ======= Color Picker =======
|
||||||
bindd = $mainMod, P, Launch hyprpicker to pick a color, exec, hyprpicker -a
|
bindd = $mainMod, P, Launch hyprpicker to pick a color, exec, hyprpicker -a
|
||||||
|
|
||||||
# ======= Additional Settings =======
|
# ======= 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
|
# https://wiki.hyprland.org/Configuring/Binds
|
||||||
binds {
|
binds {
|
||||||
@@ -166,6 +163,13 @@ binds {
|
|||||||
|
|
||||||
# Toggle Waybar
|
# Toggle Waybar
|
||||||
bind = $mainMod, W, exec, killall -SIGUSR1 waybar
|
bind = $mainMod, W, exec, killall -SIGUSR1 waybar
|
||||||
|
bind = $mainMod SHIFT, W, exec, killall -SIGUSR2 waybar # restart
|
||||||
|
|
||||||
|
# ======= Monitors =======
|
||||||
# Toggle Monitor Flip
|
# Toggle Monitor Flip
|
||||||
bind = $mainMod, F7, exec, ~/.config/hypr/scripts/rotate_current_screen.sh
|
bind = $mainMod, F7, exec, ~/.config/hypr/scripts/rotate_current_screen.sh
|
||||||
|
|
||||||
|
bind = $mainMod, F8, exec, ~/.config/hypr/scripts/monitor-toggle.sh toggle-externals
|
||||||
|
# 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
|
||||||
@@ -4,10 +4,13 @@
|
|||||||
|
|
||||||
# Monitor wiki https://wiki.hyprland.org/0.45.0/Configuring/Monitors/
|
# Monitor wiki https://wiki.hyprland.org/0.45.0/Configuring/Monitors/
|
||||||
|
|
||||||
monitor = eDP-2, highres@highrr, 0x0, 1, vrr, 0
|
monitor = eDP-2, highres@highrr, 0x0, 1, vrr, 1
|
||||||
monitor = DP-2, highres@highrr, auto-left, 1, vrr, 0
|
|
||||||
|
|
||||||
monitor = HDMI-A-1, highres@highrr, auto-left, 1, transform, 1
|
#monitor = HDMI-A-1, highres@highrr, auto-right, 1, transform, 1
|
||||||
|
monitor = desc:Samsung Electric Company S24F350 H4ZR302705, highres@highrr, auto-right, 1
|
||||||
|
monitor = desc:Samsung Electric Company S24F350 H4ZK111233, highres@highrr, auto-right, 1, transform, 1
|
||||||
|
|
||||||
|
# monitor = HDMI-A-1, highres@highrr, auto-right, 1, vrr, 0
|
||||||
|
|
||||||
# If you need to scale things like steam etc, please uncomment these lines.
|
# If you need to scale things like steam etc, please uncomment these lines.
|
||||||
# Adjust GDK_SCALE accordingly to your liking.
|
# Adjust GDK_SCALE accordingly to your liking.
|
||||||
|
|||||||
12
.config/hypr/config/plugins.conf
Normal file
12
.config/hypr/config/plugins.conf
Normal file
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,8 +9,8 @@ general {
|
|||||||
gaps_in = 2
|
gaps_in = 2
|
||||||
gaps_out = 1
|
gaps_out = 1
|
||||||
border_size = 1
|
border_size = 1
|
||||||
col.active_border = $color2
|
col.active_border = $color4
|
||||||
col.inactive_border = $color4
|
col.inactive_border = $color2
|
||||||
layout = dwindle # master|dwindle
|
layout = dwindle # master|dwindle
|
||||||
resize_on_border = true
|
resize_on_border = true
|
||||||
extend_border_grab_area = 10
|
extend_border_grab_area = 10
|
||||||
@@ -20,15 +20,6 @@ general {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#gestures
|
|
||||||
gestures {
|
|
||||||
workspace_swipe = true
|
|
||||||
workspace_swipe_fingers = 4
|
|
||||||
workspace_swipe_distance = 250
|
|
||||||
workspace_swipe_min_speed_to_force = 15
|
|
||||||
workspace_swipe_create_new = false
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#group
|
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#group
|
||||||
group {
|
group {
|
||||||
col.border_active = $color6
|
col.border_active = $color6
|
||||||
@@ -64,7 +55,10 @@ misc {
|
|||||||
enable_swallow = true
|
enable_swallow = true
|
||||||
swallow_regex = ^(cachy-browser|firefox|nautilus|nemo|thunar|btrfs-assistant.)$
|
swallow_regex = ^(cachy-browser|firefox|nautilus|nemo|thunar|btrfs-assistant.)$
|
||||||
focus_on_activate = true
|
focus_on_activate = true
|
||||||
vrr = 2
|
vrr = 0
|
||||||
|
# Hypridle cmatrix fix:
|
||||||
|
session_lock_xray = true
|
||||||
|
middle_click_paste = false
|
||||||
}
|
}
|
||||||
|
|
||||||
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#render
|
# https://wiki.hyprland.org/0.45.0/Configuring/Variables/#render
|
||||||
@@ -88,3 +82,8 @@ master {
|
|||||||
cursor {
|
cursor {
|
||||||
no_hardware_cursors = true
|
no_hardware_cursors = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
device {
|
||||||
|
name = logitech-gaming-mouse-g502
|
||||||
|
sensitivity=0.9
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,43 +5,217 @@
|
|||||||
# Windows Rules https://wiki.hyprland.org/0.45.0/Configuring/Window-Rules/ #
|
# Windows Rules https://wiki.hyprland.org/0.45.0/Configuring/Window-Rules/ #
|
||||||
|
|
||||||
# Float Necessary Windows
|
# Float Necessary Windows
|
||||||
windowrule = float, title:Rofi
|
windowrule {
|
||||||
windowrule = float, class:^(org.pulseaudio.pavucontrol)
|
name = windowrule-1
|
||||||
windowrule = float, class:^()$,title:^(Picture in picture)$
|
float = on
|
||||||
windowrule = float, class:^()$,title:^(Save File)$
|
match:title = Rofi
|
||||||
windowrule = float, class:^()$,title:^(Open File)$
|
}
|
||||||
windowrule = float, class:^(LibreWolf)$,title:^(Picture-in-Picture)$
|
|
||||||
windowrule = float, class:^(blueman-manager)$
|
windowrule {
|
||||||
windowrule = float, class:^(xdg-desktop-portal-gtk|xdg-desktop-portal-kde|xdg-desktop-portal-hyprland)(.*)$
|
name = windowrule-2
|
||||||
windowrule = float, class:^(polkit-gnome-authentication-agent-1|hyprpolkitagent|org.org.kde.polkit-kde-authentication-agent-1)(.*)$
|
float = on
|
||||||
windowrule = float, class:^(CachyOSHello)$
|
match:class = ^(org.pulseaudio.pavucontrol)
|
||||||
windowrule = float, class:^(zenity)$
|
}
|
||||||
windowrule = float, class:^()$,title:^(Steam - Self Updater)$
|
|
||||||
|
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
|
# Increase the opacity
|
||||||
windowrule = opacity 0.92, class:^(thunar|nemo|dolphin)$
|
windowrule {
|
||||||
windowrule = opacity 0.96, class:^(discord|armcord|webcord)$
|
name = windowrule-16
|
||||||
windowrule = opacity 0.95, title:^(QQ|Telegram)$
|
opacity = 0.92
|
||||||
windowrule = opacity 0.95, title:^(NetEase Cloud Music Gtk4)$
|
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
|
# General window rules
|
||||||
windowrule = float, title:^(Picture-in-Picture)$
|
windowrule {
|
||||||
windowrule = size 960 540, title:^(Picture-in-Picture)$
|
name = windowrule-21
|
||||||
windowrule = move 25%-, title:^(Picture-in-Picture)$
|
float = on
|
||||||
windowrule = float, title:^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp)$
|
size = 960 540
|
||||||
windowrule = move 25%-, title:^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp)$
|
move = ((monitor_w*0.25)-)
|
||||||
windowrule = size 960 540, title:^(imv|mpv|danmufloat|termfloat|nemo|ncmpcpp)$
|
match:title = ^(Picture-in-Picture)$
|
||||||
windowrule = pin, title:^(danmufloat)$
|
}
|
||||||
windowrule = rounding 5, title:^(danmufloat|termfloat)$
|
|
||||||
windowrule = animation slide right, class:^(kitty|Alacritty)$
|
windowrule {
|
||||||
windowrule = noblur, class:^(org.mozilla.firefox)$
|
name = windowrule-22
|
||||||
windowrule = opacity 0.88, class:Code
|
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
|
# Decorations related to floating windows on workspaces 1 to 10
|
||||||
windowrule = bordersize 2, floating:1, onworkspace:w[fv1-10]
|
windowrule {
|
||||||
windowrule = bordercolor $color4, floating:1, onworkspace:w[fv1-10]
|
name = windowrule-30
|
||||||
windowrule = rounding 8, floating:1, onworkspace:w[fv1-10]
|
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
|
# Decorations related to tiling windows on workspaces 1 to 10
|
||||||
windowrule = bordersize 3, floating:0, onworkspace:f[1-10]
|
windowrule {
|
||||||
windowrule = rounding 4, floating:0, onworkspace:f[1-10]
|
name = windowrule-31
|
||||||
windowrule = opacity 0.9, title:^(.+nvim$)
|
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 #
|
# Windows Rules End #
|
||||||
|
|
||||||
# Workspaces Rules https://wiki.hyprland.org/0.45.0/Configuring/Workspace-Rules/ #
|
# Workspaces Rules https://wiki.hyprland.org/0.45.0/Configuring/Workspace-Rules/ #
|
||||||
@@ -58,16 +232,84 @@ windowrule = opacity 0.9, title:^(.+nvim$)
|
|||||||
# Workspaces Rules End #
|
# Workspaces Rules End #
|
||||||
|
|
||||||
# Layers Rules #
|
# 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 popin 50%, waybar
|
||||||
layerrule = animation slide down, waybar
|
layerrule {
|
||||||
layerrule = animation fade 50%, wallpaper
|
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 #
|
# Layers Rules End #
|
||||||
|
|
||||||
# Zotero Libreoffice
|
# Zotero Libreoffice
|
||||||
windowrule = float,class:^(Zotero)$,title:^(Citation Dialog)$
|
windowrule {
|
||||||
windowrule = center,class:^(Zotero)$,title:^(Citation Dialog)$
|
name = windowrule-33
|
||||||
windowrule = noanim,class:^(Zotero)$,title:^(Citation Dialog)$
|
float = on
|
||||||
|
center = on
|
||||||
|
no_anim = on
|
||||||
|
match:class = ^(Zotero)$
|
||||||
|
match:title = ^(Citation Dialog)$
|
||||||
|
}
|
||||||
|
|
||||||
windowrule = fullscreen, class:matrix
|
windowrule {
|
||||||
windowrule = opacity 0.8, class:matrix
|
name = libreoffice-opaque
|
||||||
|
match:class = ^(libreoffice.*)$
|
||||||
|
|
||||||
|
# active, inactive, fullscreen (all forced to 1.0)
|
||||||
|
opacity = 1.0 override 1.0 override 1.0 override
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# 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
|
||||||
|
}
|
||||||
|
|
||||||
|
windowrule {
|
||||||
|
name = calcure
|
||||||
|
match:title = ^(calcure)$
|
||||||
|
float = on
|
||||||
|
center = on
|
||||||
|
}
|
||||||
|
|
||||||
|
windowrule {
|
||||||
|
name = gnome-calculator-fix
|
||||||
|
match:class = ^(org.gnome.Calculator)$
|
||||||
|
float = on
|
||||||
|
center = on
|
||||||
|
}
|
||||||
|
|||||||
77
.config/hypr/config/windowrules.conf_bak
Normal file
77
.config/hypr/config/windowrules.conf_bak
Normal file
@@ -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)$
|
||||||
@@ -6,11 +6,9 @@ workspace = 1, monitor:eDP-2
|
|||||||
workspace = 2, monitor:eDP-2
|
workspace = 2, monitor:eDP-2
|
||||||
workspace = 3, monitor:eDP-2
|
workspace = 3, monitor:eDP-2
|
||||||
workspace = 4, monitor:eDP-2
|
workspace = 4, monitor:eDP-2
|
||||||
|
workspace = 5, monitor:eDP-2
|
||||||
|
workspace = 6, monitor:eDP-2
|
||||||
|
workspace = 7, monitor:eDP-2
|
||||||
|
|
||||||
workspace = 5, monitor:DP-2
|
|
||||||
workspace = 6, monitor:DP-2
|
|
||||||
workspace = 7, monitor:DP-2
|
|
||||||
workspace = 8, monitor:DP-2
|
workspace = 8, monitor:DP-2
|
||||||
|
workspace = 9, monitor:HDMI-A-1
|
||||||
workspace = 7, monitor:HDMI-A-1
|
|
||||||
workspace = 8, monitor:HDMI-A-1
|
|
||||||
|
|||||||
@@ -5,25 +5,25 @@ general {
|
|||||||
}
|
}
|
||||||
|
|
||||||
listener {
|
listener {
|
||||||
timeout = 150 # 2.5min.
|
timeout = 7200 # 2.5min.
|
||||||
on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||||
on-resume = brightnessctl -r # monitor backlight restore.
|
on-resume = brightnessctl -r # monitor backlight restore.
|
||||||
}
|
}
|
||||||
|
|
||||||
# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
|
# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
|
||||||
listener {
|
listener {
|
||||||
timeout = 150 # 2.5min.
|
timeout = 7200 # 2.5min.
|
||||||
on-timeout = brightnessctl -sd asus::kbd_backlight set 0 # turn off keyboard backlight.
|
on-timeout = brightnessctl -sd asus::kbd_backlight set 0 # turn off keyboard backlight.
|
||||||
on-resume = brightnessctl -rd asus::kbd_backlight # turn on keyboard backlight.
|
on-resume = brightnessctl -rd asus::kbd_backlight # turn on keyboard backlight.
|
||||||
}
|
}
|
||||||
|
|
||||||
listener {
|
listener {
|
||||||
timeout = 300 # 5min
|
timeout = 7200 # 5min
|
||||||
on-timeout = ~/.config/swaylock/lockscript.sh # lock screen when timeout has passed
|
on-timeout = ~/.config/swaylock/lockscript.sh # lock screen when timeout has passed
|
||||||
}
|
}
|
||||||
|
|
||||||
listener {
|
# listener {
|
||||||
timeout = 900 # 15min
|
# timeout = 900 # 15min
|
||||||
on-timeout = hyprctl dispatch dpms off 5.5 # screen off when timeout has passed
|
# on-timeout = hyprctl dispatch dpms off 5.5 # screen off when timeout has passed
|
||||||
on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected after timeout has fired.
|
# on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected after timeout has fired.
|
||||||
}
|
# }
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ source = ~/.config/hypr/config/monitor.conf
|
|||||||
source = ~/.config/hypr/config/variables.conf
|
source = ~/.config/hypr/config/variables.conf
|
||||||
source = ~/.config/hypr/config/windowrules.conf
|
source = ~/.config/hypr/config/windowrules.conf
|
||||||
source = ~/.config/hypr/config/workspaces.conf
|
source = ~/.config/hypr/config/workspaces.conf
|
||||||
|
source = ~/.config/hypr/config/plugins.conf
|
||||||
|
|
||||||
# Modifying these configs can be done by creating a user defined config in the home directory, e.g.
|
# Modifying these configs can be done by creating a user defined config in the home directory, e.g.
|
||||||
## ~/.config/hypr/config/user-config.conf
|
## ~/.config/hypr/config/user-config.conf
|
||||||
# source ~/.config/hypr/config/user-config.conf
|
# source ~/.config/hypr/config/user-config.conf
|
||||||
6
.config/hypr/monitors.conf
Normal file
6
.config/hypr/monitors.conf
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# Generated by nwg-displays on 2026-02-04 at 14:45:07. Do not edit manually.
|
||||||
|
|
||||||
|
monitor=desc:BOE NE156FHM-NX6,1920x1080@144.0,0x0,1.0
|
||||||
|
monitor=desc:Samsung Electric Company S24F350 H4ZK111233,1920x1080@60.0,1920x0,1.0
|
||||||
|
monitor=desc:Samsung Electric Company S24F350 H4ZK111233,transform,1
|
||||||
|
monitor=desc:Samsung Electric Company S24F350 H4ZR302705,1920x1080@60.0,3000x0,1.0
|
||||||
4
.config/hypr/pyprland.toml
Normal file
4
.config/hypr/pyprland.toml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[pyprland]
|
||||||
|
plugins = [
|
||||||
|
"shift_monitors",
|
||||||
|
]
|
||||||
257
.config/hypr/scripts/monitor-toggle.sh
Executable file
257
.config/hypr/scripts/monitor-toggle.sh
Executable file
@@ -0,0 +1,257 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
PRIMARY="eDP-2"
|
||||||
|
RIGHT_EXTERNAL_NAME="DP-2"
|
||||||
|
MIDDLE_EXTERNAL_NAME="HDMI-A-1"
|
||||||
|
|
||||||
|
# Exact enable lines (from your config)
|
||||||
|
EXT1='desc:Samsung Electric Company S24F350 H4ZR302705, highres@highrr, auto-right, 1'
|
||||||
|
EXT2='desc:Samsung Electric Company S24F350 H4ZK111233, highres@highrr, auto-right, 1, transform, 1'
|
||||||
|
|
||||||
|
# In dual mode, which one do we prefer?
|
||||||
|
DUAL_MAIN="$EXT1"
|
||||||
|
|
||||||
|
# Optional: restart Waybar after layout changes (0=off, 1=on)
|
||||||
|
RESTART_WAYBAR=1
|
||||||
|
|
||||||
|
# Dock/MST settle timing (tune if needed)
|
||||||
|
SETTLE_SECS=1.0
|
||||||
|
DPMS_KICK_RETRIES=2
|
||||||
|
DPMS_KICK_SLEEP=0.35
|
||||||
|
|
||||||
|
notify() {
|
||||||
|
if command -v notify-send >/dev/null 2>&1; then
|
||||||
|
notify-send -a "Hyprland" "$1" "${2:-}"
|
||||||
|
else
|
||||||
|
[ -n "${2:-}" ] && printf '%s: %s\n' "$1" "$2" >&2 || printf '%s\n' "$1" >&2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
hypr() {
|
||||||
|
local out
|
||||||
|
if ! out="$(hyprctl "$@" 2>&1)"; then
|
||||||
|
notify "hyprctl failed" "$out"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
printf '%s' "$out"
|
||||||
|
}
|
||||||
|
|
||||||
|
hypr_batch() {
|
||||||
|
local out
|
||||||
|
if ! out="$(hyprctl --batch "$1" 2>&1)"; then
|
||||||
|
notify "hyprctl --batch failed" "$out"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
printf '%s' "$out"
|
||||||
|
}
|
||||||
|
|
||||||
|
restart_waybar() {
|
||||||
|
[ "${RESTART_WAYBAR:-0}" -eq 1 ] || return 0
|
||||||
|
if pgrep -x waybar >/dev/null 2>&1; then
|
||||||
|
pkill -SIGUSR2 waybar >/dev/null 2>&1 || true
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
jqok() { command -v jq >/dev/null 2>&1; }
|
||||||
|
monjson() { hyprctl -j monitors 2>/dev/null || true; }
|
||||||
|
|
||||||
|
sleep_s() { python - <<PY 2>/dev/null || sleep 1
|
||||||
|
import time
|
||||||
|
time.sleep(float("$1"))
|
||||||
|
PY
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- monitor discovery helpers ---
|
||||||
|
|
||||||
|
enabled_monitor_names() {
|
||||||
|
if jqok; then
|
||||||
|
monjson | jq -r '.[] | select(.disabled != true) | .name'
|
||||||
|
else
|
||||||
|
# Fallback is weaker; jq is strongly recommended
|
||||||
|
hyprctl monitors | awk '
|
||||||
|
/^Monitor /{name=$2}
|
||||||
|
/disabled: false/{print name}
|
||||||
|
'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
focused_monitor_name() {
|
||||||
|
if jqok; then
|
||||||
|
monjson | jq -r '.[] | select(.focused==true) | .name // empty'
|
||||||
|
else
|
||||||
|
hyprctl monitors | awk '
|
||||||
|
/^Monitor /{name=$2}
|
||||||
|
/focused: yes/{print name; exit}
|
||||||
|
'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
external_enabled() {
|
||||||
|
local n
|
||||||
|
while IFS= read -r n; do
|
||||||
|
[ "$n" != "$PRIMARY" ] && return 0
|
||||||
|
done < <(enabled_monitor_names)
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# We don’t try to parse desc lines; we just treat them as “enable rules”
|
||||||
|
enable_rule() {
|
||||||
|
local rule="$1"
|
||||||
|
[ -n "$rule" ] && printf 'keyword monitor %s; ' "$rule"
|
||||||
|
}
|
||||||
|
|
||||||
|
disable_by_name() {
|
||||||
|
local name="$1"
|
||||||
|
[ -n "$name" ] && printf 'keyword monitor %s, disable; ' "$name"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Disable all *currently enabled* externals by name (minimal churn)
|
||||||
|
batch_disable_enabled_externals() {
|
||||||
|
local batch="" n=""
|
||||||
|
while IFS= read -r n; do
|
||||||
|
[ "$n" = "$PRIMARY" ] && continue
|
||||||
|
batch+="$(disable_by_name "$n")"
|
||||||
|
done < <(enabled_monitor_names)
|
||||||
|
printf '%s' "$batch"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Dock settle wait: give MST/alt-mode time to re-enumerate before we apply rules / kick DPMS
|
||||||
|
dock_settle() {
|
||||||
|
sleep_s "$SETTLE_SECS"
|
||||||
|
}
|
||||||
|
|
||||||
|
# DPMS kick for all enabled externals (works well for dock hotplug weirdness)
|
||||||
|
kick_externals() {
|
||||||
|
local names=() n=""
|
||||||
|
if jqok; then
|
||||||
|
mapfile -t names < <(monjson | jq -r --arg P "$PRIMARY" '
|
||||||
|
.[] | select(.name != $P and (.disabled != true)) | .name
|
||||||
|
')
|
||||||
|
else
|
||||||
|
mapfile -t names < <(enabled_monitor_names | awk -v P="$PRIMARY" '$0!=P')
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ "${#names[@]}" -eq 0 ] && return 0
|
||||||
|
|
||||||
|
for _ in $(seq 1 "$DPMS_KICK_RETRIES"); do
|
||||||
|
for n in "${names[@]}"; do hypr dispatch dpms off "$n" >/dev/null 2>&1 || true; done
|
||||||
|
sleep_s "$DPMS_KICK_SLEEP"
|
||||||
|
for n in "${names[@]}"; do hypr dispatch dpms on "$n" >/dev/null 2>&1 || true; done
|
||||||
|
sleep_s "$DPMS_KICK_SLEEP"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
enforce_triple_order() {
|
||||||
|
# Keep HDMI between the laptop panel and DP-2, with DP-2 always on the right.
|
||||||
|
enabled_monitor_names | grep -qx "$MIDDLE_EXTERNAL_NAME" || return 0
|
||||||
|
enabled_monitor_names | grep -qx "$RIGHT_EXTERNAL_NAME" || return 0
|
||||||
|
|
||||||
|
local py=0 px=0 pspan=1920 mspan=1920 mx rx
|
||||||
|
if jqok; then
|
||||||
|
read -r px py pspan < <(monjson | jq -r --arg N "$PRIMARY" '
|
||||||
|
.[] | select(.name == $N) |
|
||||||
|
(.transform // 0) as $t |
|
||||||
|
"\(.x // 0) \(.y // 0) \(if (($t % 2) == 1) then (.height // 1080) else (.width // 1920) end)"
|
||||||
|
')
|
||||||
|
read -r mspan < <(monjson | jq -r --arg N "$MIDDLE_EXTERNAL_NAME" '
|
||||||
|
.[] | select(.name == $N) |
|
||||||
|
(.transform // 0) as $t |
|
||||||
|
"\(if (($t % 2) == 1) then (.height // 1080) else (.width // 1920) end)"
|
||||||
|
')
|
||||||
|
fi
|
||||||
|
|
||||||
|
mx=$((px + pspan))
|
||||||
|
rx=$((mx + mspan))
|
||||||
|
|
||||||
|
hypr keyword monitor "$MIDDLE_EXTERNAL_NAME, highres@highrr, ${mx}x${py}, 1, transform, 1" >/dev/null 2>&1 || true
|
||||||
|
hypr keyword monitor "$RIGHT_EXTERNAL_NAME, highres@highrr, ${rx}x${py}, 1" >/dev/null 2>&1 || true
|
||||||
|
}
|
||||||
|
|
||||||
|
apply_profile() {
|
||||||
|
local label="$1"
|
||||||
|
local batch="$2"
|
||||||
|
dock_settle
|
||||||
|
[ -n "$batch" ] && hypr_batch "$batch" >/dev/null
|
||||||
|
dock_settle
|
||||||
|
kick_externals
|
||||||
|
notify "Profile: $label" ""
|
||||||
|
restart_waybar
|
||||||
|
}
|
||||||
|
|
||||||
|
profile_laptop() {
|
||||||
|
# Minimal: disable only currently enabled externals
|
||||||
|
local batch=""
|
||||||
|
batch+="$(batch_disable_enabled_externals)"
|
||||||
|
apply_profile "Laptop-only" "$batch"
|
||||||
|
}
|
||||||
|
|
||||||
|
profile_dual() {
|
||||||
|
# Disable enabled externals, then enable preferred main external rule
|
||||||
|
local batch=""
|
||||||
|
batch+="$(batch_disable_enabled_externals)"
|
||||||
|
batch+="$(enable_rule "$DUAL_MAIN")"
|
||||||
|
apply_profile "Dual" "$batch"
|
||||||
|
}
|
||||||
|
|
||||||
|
profile_triple() {
|
||||||
|
# Disable enabled externals, then enable both rules
|
||||||
|
# Order: EXT2 first so it tends to appear “middle” with auto-right
|
||||||
|
local batch=""
|
||||||
|
batch+="$(batch_disable_enabled_externals)"
|
||||||
|
batch+="$(enable_rule "$EXT2")"
|
||||||
|
batch+="$(enable_rule "$EXT1")"
|
||||||
|
apply_profile "Triple" "$batch"
|
||||||
|
dock_settle
|
||||||
|
enforce_triple_order
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle_externals() {
|
||||||
|
if external_enabled; then
|
||||||
|
profile_laptop
|
||||||
|
else
|
||||||
|
if [ -n "$EXT1" ] && [ -n "$EXT2" ]; then
|
||||||
|
profile_triple
|
||||||
|
else
|
||||||
|
profile_dual
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
dpms_toggle_focused() {
|
||||||
|
local name
|
||||||
|
name="$(focused_monitor_name)"
|
||||||
|
[ -z "$name" ] && { notify "No focused monitor" ""; exit 2; }
|
||||||
|
hypr dispatch dpms toggle "$name" >/dev/null
|
||||||
|
notify "DPMS toggle" "$name"
|
||||||
|
}
|
||||||
|
|
||||||
|
status() {
|
||||||
|
echo "Enabled monitors:"
|
||||||
|
enabled_monitor_names | sed 's/^/ - /'
|
||||||
|
echo
|
||||||
|
echo "Focused: $(focused_monitor_name || true)"
|
||||||
|
}
|
||||||
|
|
||||||
|
case "${1:-}" in
|
||||||
|
laptop) profile_laptop ;;
|
||||||
|
dual) profile_dual ;;
|
||||||
|
triple) profile_triple ;;
|
||||||
|
toggle-externals) toggle_externals ;;
|
||||||
|
dpms-toggle-focused) dpms_toggle_focused ;;
|
||||||
|
kick-externals) dock_settle; kick_externals; notify "Kicked externals (DPMS)" "" ;;
|
||||||
|
status) status ;;
|
||||||
|
*)
|
||||||
|
cat <<EOF
|
||||||
|
Usage:
|
||||||
|
$(basename "$0") laptop # eDP-2 only (disable enabled externals)
|
||||||
|
$(basename "$0") dual # eDP-2 + preferred external
|
||||||
|
$(basename "$0") triple # eDP-2 + both externals
|
||||||
|
$(basename "$0") toggle-externals # laptop-only <-> (dual/triple)
|
||||||
|
$(basename "$0") dpms-toggle-focused # blank/unblank focused output (layout unchanged)
|
||||||
|
$(basename "$0") kick-externals # DPMS off/on for enabled externals
|
||||||
|
$(basename "$0") status # print enabled + focused
|
||||||
|
EOF
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
@@ -1,20 +1,22 @@
|
|||||||
#!/bin/env bash
|
#!/bin/env bash
|
||||||
|
|
||||||
# Menu launcher wrapper
|
# CLI options
|
||||||
menu_prompt() {
|
DMENU_CMD=""
|
||||||
if command -v tofi &>/dev/null; then
|
while getopts ":d:" opt; do
|
||||||
printf "%b" "$1" | tofi --prompt-text="$2"
|
case "$opt" in
|
||||||
elif command -v fuzzel &>/dev/null; then
|
d) DMENU_CMD="$OPTARG" ;;
|
||||||
printf "%b" "$1" | fuzzel -d -p "$2" -w 25 -l 10
|
*) ;;
|
||||||
elif command -v wofi &>/dev/null; then
|
esac
|
||||||
printf "%b" "$1" | wofi --dmenu --prompt="$2"
|
done
|
||||||
elif command -v rofi &>/dev/null; then
|
shift $((OPTIND - 1))
|
||||||
printf "%b" "$1" | rofi -dmenu -p "$2"
|
|
||||||
else
|
if [ -z "$DMENU_CMD" ]; then
|
||||||
notify-send "No compatible launcher found" "Install tofi, fuzzel, wofi, or rofi."
|
notify-send "Missing launcher" "Use -d to provide a dmenu command"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
# Directories
|
||||||
SCREENSHOT_DIR="${HOME}/Pictures"
|
SCREENSHOT_DIR="${HOME}/Pictures"
|
||||||
@@ -29,7 +31,7 @@ if pgrep -u "$USER" wl-screenrec > /dev/null; then
|
|||||||
notify-send "Recording stopped"
|
notify-send "Recording stopped"
|
||||||
|
|
||||||
# Ask if user wants to compress the video
|
# 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
|
if [[ "$COMPRESS" == "✅ compress" ]]; then
|
||||||
# Find the most recent video file
|
# 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-)
|
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
|
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"
|
notify-send "Compression complete" "$COMPRESSED_VIDEO"
|
||||||
# Ask if user wants to delete original
|
# 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
|
if [[ "$DELETE_ORIGINAL" == "🗑️ delete original" ]]; then
|
||||||
rm "$LATEST_VIDEO"
|
rm "$LATEST_VIDEO"
|
||||||
notify-send "Original deleted" "Keeping compressed version only"
|
notify-send "Original deleted" "Keeping compressed version only"
|
||||||
@@ -55,23 +57,33 @@ fi
|
|||||||
# Get current outputs dynamically
|
# Get current outputs dynamically
|
||||||
OUTPUTS=$(hyprctl monitors | grep "Monitor" | awk '{print $2}' | paste -sd " " -)
|
OUTPUTS=$(hyprctl monitors | grep "Monitor" | awk '{print $2}' | paste -sd " " -)
|
||||||
|
|
||||||
OPTIONS=$(
|
TOP_LEVEL=$(printf "%b" "screenshot\nrecord" | "${DMENU_ARR[@]}" " ")
|
||||||
cat <<EOF
|
[ -z "$TOP_LEVEL" ] && exit 0
|
||||||
|
|
||||||
|
if [ "$TOP_LEVEL" = "screenshot" ]; then
|
||||||
|
OPTIONS=$(
|
||||||
|
cat <<EOF
|
||||||
screenshot selection
|
screenshot selection
|
||||||
$(for OUTPUT in $OUTPUTS; do echo "screenshot $OUTPUT"; done)
|
$(for OUTPUT in $OUTPUTS; do echo "screenshot $OUTPUT"; done)
|
||||||
screenshot all
|
screenshot all
|
||||||
|
EOF
|
||||||
|
)
|
||||||
|
else
|
||||||
|
OPTIONS=$(
|
||||||
|
cat <<EOF
|
||||||
record selection
|
record selection
|
||||||
$(for OUTPUT in $OUTPUTS; do echo "record $OUTPUT"; done)
|
$(for OUTPUT in $OUTPUTS; do echo "record $OUTPUT"; done)
|
||||||
record all
|
record all
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
|
fi
|
||||||
|
|
||||||
SELECTION=$(menu_prompt "$OPTIONS" " ")
|
SELECTION=$(printf "%b" "$OPTIONS" | "${DMENU_ARR[@]}" " ")
|
||||||
[ -z "$SELECTION" ] && exit 0
|
[ -z "$SELECTION" ] && exit 0
|
||||||
|
|
||||||
# Ask for audio mode if it's a recording
|
# Ask for audio mode if it's a recording
|
||||||
select_audio_mode() {
|
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
|
[ -z "$AUDIO_MODE" ] && echo "__cancel__" && return
|
||||||
|
|
||||||
case "$AUDIO_MODE" in
|
case "$AUDIO_MODE" in
|
||||||
@@ -90,6 +102,11 @@ select_audio_mode() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open_in_satty() {
|
||||||
|
[ -x "$(command -v satty)" ] || return 0
|
||||||
|
satty -f "$1" >/dev/null 2>&1 &
|
||||||
|
}
|
||||||
|
|
||||||
# Screenshot or record depending on selection
|
# Screenshot or record depending on selection
|
||||||
case "$SELECTION" in
|
case "$SELECTION" in
|
||||||
"screenshot selection")
|
"screenshot selection")
|
||||||
@@ -97,6 +114,7 @@ case "$SELECTION" in
|
|||||||
IMG="${SCREENSHOT_DIR}/${TIMESTAMP}.png"
|
IMG="${SCREENSHOT_DIR}/${TIMESTAMP}.png"
|
||||||
grim -g "$(slurp)" "$IMG" || { notify-send "Error" "Failed to take screenshot"; exit 1; }
|
grim -g "$(slurp)" "$IMG" || { notify-send "Error" "Failed to take screenshot"; exit 1; }
|
||||||
[ -x "$(command -v wl-copy)" ] && wl-copy < "$IMG"
|
[ -x "$(command -v wl-copy)" ] && wl-copy < "$IMG"
|
||||||
|
open_in_satty "$IMG"
|
||||||
notify-send "Screenshot Taken" "$IMG"
|
notify-send "Screenshot Taken" "$IMG"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@@ -112,6 +130,7 @@ case "$SELECTION" in
|
|||||||
montage "${TEMP_FILES[@]}" -tile x1 -geometry +0+0 "$IMG"
|
montage "${TEMP_FILES[@]}" -tile x1 -geometry +0+0 "$IMG"
|
||||||
rm "${TEMP_FILES[@]}"
|
rm "${TEMP_FILES[@]}"
|
||||||
[ -x "$(command -v wl-copy)" ] && wl-copy < "$IMG"
|
[ -x "$(command -v wl-copy)" ] && wl-copy < "$IMG"
|
||||||
|
open_in_satty "$IMG"
|
||||||
notify-send "Screenshot Taken" "$IMG"
|
notify-send "Screenshot Taken" "$IMG"
|
||||||
else
|
else
|
||||||
notify-send "Error" "Not enough outputs to montage"
|
notify-send "Error" "Not enough outputs to montage"
|
||||||
@@ -151,6 +170,7 @@ case "$SELECTION" in
|
|||||||
OUT=$(echo "$SELECTION" | awk '{print $2}')
|
OUT=$(echo "$SELECTION" | awk '{print $2}')
|
||||||
grim -c -o "$OUT" "$IMG" || { notify-send "Error" "Failed to screenshot $OUT"; exit 1; }
|
grim -c -o "$OUT" "$IMG" || { notify-send "Error" "Failed to screenshot $OUT"; exit 1; }
|
||||||
[ -x "$(command -v wl-copy)" ] && wl-copy < "$IMG"
|
[ -x "$(command -v wl-copy)" ] && wl-copy < "$IMG"
|
||||||
|
open_in_satty "$IMG"
|
||||||
notify-send "Screenshot Taken" "$IMG"
|
notify-send "Screenshot Taken" "$IMG"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|||||||
0
.config/hypr/workspaces.conf
Normal file
0
.config/hypr/workspaces.conf
Normal file
@@ -1,22 +1,26 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
USER_HOME="/home/michaelb"
|
set -Eeuo pipefail
|
||||||
|
|
||||||
|
USER_HOME="$HOME"
|
||||||
MATRIX_SCRIPT="$USER_HOME/.config/swaylock/matrix.sh"
|
MATRIX_SCRIPT="$USER_HOME/.config/swaylock/matrix.sh"
|
||||||
ALACRITTY_CONF="$USER_HOME/.config/swaylock/alacritty-matrix.toml"
|
ALACRITTY_CONF="$USER_HOME/.config/swaylock/alacritty-matrix.toml"
|
||||||
|
|
||||||
mtrx_command="alacritty \
|
# 1) Spawn matrix per monitor
|
||||||
--config-file \"$ALACRITTY_CONF\" \
|
mapfile -t MONS < <(hyprctl -j monitors | jq -r '.[].name')
|
||||||
--class matrix \
|
for mon in "${MONS[@]}"; do
|
||||||
-e \"$MATRIX_SCRIPT\""
|
hyprctl dispatch focusmonitor "$mon"
|
||||||
|
printf "Monitor: $mon\n"
|
||||||
# 1) Spawn Matrix windows per-monitor
|
sleep 0.06
|
||||||
screens=$(hyprctl -j monitors | jq length)
|
kitty \
|
||||||
for (( i = -1; i < screens; i++ )); do
|
--class matrix \
|
||||||
hyprctl dispatch focusmonitor $i
|
--title "matrix-$mon" \
|
||||||
eval $mtrx_command &
|
--start-as fullscreen \
|
||||||
|
bash -lc "$MATRIX_SCRIPT" &
|
||||||
|
sleep 0.15
|
||||||
done
|
done
|
||||||
|
|
||||||
# 2) Lock (blocks until unlock)
|
# 2) Lock screen (blocks until unlock)
|
||||||
swaylock
|
swaylock
|
||||||
|
|
||||||
# 3) Tear down Matrix
|
# 3) Tear down matrix
|
||||||
pkill -f "$MATRIX_SCRIPT"
|
pkill -f "$MATRIX_SCRIPT" || true
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
sleep 0.03
|
sleep 0.21
|
||||||
cmatrix
|
cmatrix
|
||||||
|
|||||||
@@ -1,26 +1,25 @@
|
|||||||
[colors.bright]
|
[colors.bright]
|
||||||
black = "{{color8}}"
|
black = "{{color8}}" # Often a brighter version of normal black, could be slightly desaturated light grey
|
||||||
red = "{{color9}}"
|
red = "{{color9}}" # More saturated red for emphasis
|
||||||
green = "{{color10}}"
|
green = "{{color10}}" # More saturated green for emphasis
|
||||||
yellow = "{{color11}}"
|
yellow = "{{color11}}" # More saturated yellow, good for prompts or warnings
|
||||||
blue = "{{color12}}"
|
blue = "{{color12}}" # More saturated blue
|
||||||
magenta = "{{color13}}"
|
magenta = "{{color13}}" # More saturated magenta
|
||||||
cyan = "{{color14}}"
|
cyan = "{{color14}}" # Make cyan lighter to stand out on dark backgrounds
|
||||||
white = "{{color15}}"
|
white = "{{color15}}" # Should be the brightest possible
|
||||||
|
|
||||||
[colors.cursor]
|
[colors.cursor]
|
||||||
cursor = "{{cursor}}"
|
cursor = "{{cursor}}"
|
||||||
|
|
||||||
[colors.normal]
|
[colors.normal]
|
||||||
black = "{{color0}}"
|
black = "{{color0}}" # Main dark grey/black
|
||||||
red = "{{color1}}"
|
red = "{{color1}}" # Normal red
|
||||||
green = "{{color2}}"
|
green = "{{color2}}" # Normal green
|
||||||
yellow = "{{color3}}"
|
yellow = "{{color3}}" # Normal yellow
|
||||||
blue = "{{color4}}"
|
blue = "{{color4}}" # Normal blue
|
||||||
magenta = "{{color5}}"
|
magenta = "{{color5}}" # Normal magenta
|
||||||
cyan = "{{color6}}"
|
cyan = "{{color6}}" # This needs attention. If background is dark, this should be brighter than the background. If background is light, darker.
|
||||||
white = "{{color7}}"
|
white = "{{color7}}" # Main light grey/white
|
||||||
|
|
||||||
[colors.primary]
|
[colors.primary]
|
||||||
background = "{{background}}"
|
background = "{{background}}"
|
||||||
foreground = "{{foreground}}"
|
foreground = "{{foreground}}" # Force foreground to be the absolute brightest color from the palette
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ width = 100%
|
|||||||
height = 100%
|
height = 100%
|
||||||
|
|
||||||
hide-cursor = false
|
hide-cursor = false
|
||||||
text-color = #{{ color1 | strip }}55
|
text-color = #{{ color1 | strip }}88
|
||||||
prompt-color = #{{ foreground | strip }}77
|
prompt-color = #{{ foreground | strip }}99
|
||||||
selection-color = #{{ color5 | strip }}
|
selection-color = #{{ color5 | strip }}
|
||||||
background-color = #{{ background | strip }}99
|
background-color = #{{ background | strip }}99
|
||||||
|
|
||||||
history = true
|
history = true
|
||||||
|
|||||||
119
.config/wallust/templates/vicinae.toml
Normal file
119
.config/wallust/templates/vicinae.toml
Normal file
@@ -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}}"
|
||||||
@@ -41,6 +41,7 @@ check_contrast = true
|
|||||||
|
|
||||||
[templates]
|
[templates]
|
||||||
waybar = { template = 'waybar.css', target = '~/.config/waybar/colors-wallust.css' }
|
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' }
|
# alacritty = { template = 'alacritty.toml', target = '~/.config/alacritty/colors.toml' }
|
||||||
hyprland = { template = 'hyprland.conf', target = '~/.config/hypr/config/colors.conf' }
|
hyprland = { template = 'hyprland.conf', target = '~/.config/hypr/config/colors.conf' }
|
||||||
vscode = { template = 'vscode', target = '~/.cache/wal/colors' }
|
vscode = { template = 'vscode', target = '~/.cache/wal/colors' }
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
@define-color cursor #AA9BB0;
|
@define-color cursor #AAA27D;
|
||||||
@define-color background #1B1D1E;
|
@define-color background #252425;
|
||||||
@define-color foreground #E1E9EE;
|
@define-color foreground #F9F1D9;
|
||||||
@define-color color0 #424345;
|
@define-color color0 #505051;
|
||||||
@define-color color1 #58120D;
|
@define-color color1 #9C604E;
|
||||||
@define-color color2 #744E72;
|
@define-color color2 #807A52;
|
||||||
@define-color color3 #517185;
|
@define-color color3 #908BAB;
|
||||||
@define-color color4 #DD2A4A;
|
@define-color color4 #B7815F;
|
||||||
@define-color color5 #DEACB3;
|
@define-color color5 #B9BECA;
|
||||||
@define-color color6 #A9BFCE;
|
@define-color color6 #EED793;
|
||||||
@define-color color7 #CCD7DE;
|
@define-color color7 #EEE3C1;
|
||||||
@define-color color8 #8E969B;
|
@define-color color8 #A79F87;
|
||||||
@define-color color9 #58120D;
|
@define-color color9 #9C604E;
|
||||||
@define-color color10 #744E72;
|
@define-color color10 #807A52;
|
||||||
@define-color color11 #517185;
|
@define-color color11 #908BAB;
|
||||||
@define-color color12 #DD2A4A;
|
@define-color color12 #B7815F;
|
||||||
@define-color color13 #DEACB3;
|
@define-color color13 #B9BECA;
|
||||||
@define-color color14 #A9BFCE;
|
@define-color color14 #EED793;
|
||||||
@define-color color15 #CCD7DE;
|
@define-color color15 #EEE3C1;
|
||||||
|
|||||||
@@ -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": "<big></big> {}",
|
|
||||||
"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": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
|
|
||||||
"today-format": "<b>{}</b>"
|
|
||||||
},
|
|
||||||
|
|
||||||
"clock#date": {
|
|
||||||
"format": " {:%H:%M \n %e %b}",
|
|
||||||
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
|
|
||||||
"today-format": "<b>{}</b>"
|
|
||||||
},
|
|
||||||
|
|
||||||
"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 <span color=\"darkgray\">| {usage}%</span>",
|
|
||||||
"max-length": 13,
|
|
||||||
"min-length": 13
|
|
||||||
},
|
|
||||||
|
|
||||||
"mpd": {
|
|
||||||
"max-length": 25,
|
|
||||||
"format": "<span foreground='#bb9af7'></span> {title}",
|
|
||||||
"format-paused": " {title}",
|
|
||||||
"format-stopped": "<span foreground='#bb9af7'></span>",
|
|
||||||
"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": "<span foreground='#fab387'>{icon}</span> {volume}%",
|
|
||||||
"format-muted": " ",
|
|
||||||
"format-source": "",
|
|
||||||
"format-source-muted": "",
|
|
||||||
//"format-muted": "<span foreground='#fab387'> </span>",
|
|
||||||
//"format-icons": [ "<span foreground='#fab387'></span>" ]
|
|
||||||
"format-icons": {
|
|
||||||
"headphone": " ",
|
|
||||||
"hands-free": " ",
|
|
||||||
"headset": " ",
|
|
||||||
"phone": " ",
|
|
||||||
"portable": " ",
|
|
||||||
"car": " ",
|
|
||||||
"default": [" ", " ", " "]
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
"tray": {
|
|
||||||
"icon-size": 15,
|
|
||||||
"spacing": 5
|
|
||||||
}
|
|
||||||
}
|
|
||||||
445
.config/waybar/config.jsonc
Normal file
445
.config/waybar/config.jsonc
Normal file
@@ -0,0 +1,445 @@
|
|||||||
|
{
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Global configuration
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
"layer": "top",
|
||||||
|
"swap-icon-label": true,
|
||||||
|
"position": "top",
|
||||||
|
|
||||||
|
"height": 36,
|
||||||
|
|
||||||
|
"margin-left": 2,
|
||||||
|
"margin-bottom": 1,
|
||||||
|
"margin-right": 2,
|
||||||
|
|
||||||
|
"spacing": 1, // Gaps between modules (4px)
|
||||||
|
|
||||||
|
"modules-left": [
|
||||||
|
"clock",
|
||||||
|
"custom/weather",
|
||||||
|
"tray",
|
||||||
|
//"custom/rofi",
|
||||||
|
"hyprland/workspaces",
|
||||||
|
//"hyprland/submap",
|
||||||
|
//"idle_inhibitor",
|
||||||
|
//"mpd",
|
||||||
|
"custom/spotify",
|
||||||
|
"hyprland/window",
|
||||||
|
],
|
||||||
|
// "modules-center": [
|
||||||
|
// //"custom/gammastep"
|
||||||
|
// ],
|
||||||
|
"modules-right": [
|
||||||
|
"cava",
|
||||||
|
"wireplumber",
|
||||||
|
//"wlr/taskbar",
|
||||||
|
//"custom/storage",
|
||||||
|
"memory",
|
||||||
|
"cpu",
|
||||||
|
"temperature",
|
||||||
|
"battery",
|
||||||
|
|
||||||
|
//"pulseaudio",
|
||||||
|
//"backlight",
|
||||||
|
"bluetooth",
|
||||||
|
//"custom/screenshot_t",
|
||||||
|
"custom/power_profiles",
|
||||||
|
"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": "kitty -e calcure --class=\"float\" -T calcure",
|
||||||
|
},
|
||||||
|
"clock#2": {
|
||||||
|
"format": " {:%d-%h-%Y}",
|
||||||
|
"tooltip": false,
|
||||||
|
"on-click": "kitty -e calcure --class=\"float\" -T calcure",
|
||||||
|
},
|
||||||
|
"clock#3": {
|
||||||
|
"format": " {:%H:%M:%S %p}",
|
||||||
|
"tooltip": false,
|
||||||
|
"on-click": "kitty -e calcure --class=\"float\" -T calcure",
|
||||||
|
},
|
||||||
|
|
||||||
|
"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": "<big></big> {}",
|
||||||
|
"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": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
|
||||||
|
"today-format": "<b>{}</b>",
|
||||||
|
"on-click": "kitty -e calcure --class=\"float\" -T calcure",
|
||||||
|
},
|
||||||
|
|
||||||
|
"clock#date": {
|
||||||
|
"format": " {:%H:%M \n %e %b}",
|
||||||
|
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
|
||||||
|
"today-format": "<b>{}</b>",
|
||||||
|
},
|
||||||
|
|
||||||
|
"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 <span color=\"darkgray\">| {usage}%</span>",
|
||||||
|
"max-length": 13,
|
||||||
|
"min-length": 13,
|
||||||
|
},
|
||||||
|
|
||||||
|
"mpd": {
|
||||||
|
"max-length": 25,
|
||||||
|
"format": "<span foreground='#bb9af7'></span> {title}",
|
||||||
|
"format-paused": " {title}",
|
||||||
|
"format-stopped": "<span foreground='#bb9af7'></span>",
|
||||||
|
"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": "<span foreground='#fab387'>{icon}</span> {volume}%",
|
||||||
|
"format-muted": " ",
|
||||||
|
"format-source": "",
|
||||||
|
"format-source-muted": "",
|
||||||
|
//"format-muted": "<span foreground='#fab387'> </span>",
|
||||||
|
//"format-icons": [ "<span foreground='#fab387'></span>" ]
|
||||||
|
"format-icons": {
|
||||||
|
"headphone": " ",
|
||||||
|
"hands-free": " ",
|
||||||
|
"headset": " ",
|
||||||
|
"phone": " ",
|
||||||
|
"portable": " ",
|
||||||
|
"car": " ",
|
||||||
|
"default": [" ", " ", " "],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
"tray": {
|
||||||
|
"icon-size": 11,
|
||||||
|
"spacing": 5,
|
||||||
|
"show-passive-items": true,
|
||||||
|
},
|
||||||
|
|
||||||
|
"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": {
|
||||||
|
"suspend": "systemctl suspend",
|
||||||
|
"hibernate": "systemctl hibernate",
|
||||||
|
"logout": "hyprctl dispatch exit",
|
||||||
|
"shutdown": "shutdown",
|
||||||
|
"reboot": "reboot",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
"cava": {
|
||||||
|
"on-click": "pavucontrol",
|
||||||
|
// "cava_config": "$XDG_CONFIG_HOME/cava/cava.conf",
|
||||||
|
"framerate": 30,
|
||||||
|
"sensitivity": 3,
|
||||||
|
"autosens": 1,
|
||||||
|
"bars": 12,
|
||||||
|
"lower_cutoff_freq": 10,
|
||||||
|
"higher_cutoff_freq": 10000,
|
||||||
|
"hide_on_silence": false,
|
||||||
|
"format_silent": "quiet",
|
||||||
|
"method": "pipewire",
|
||||||
|
"source": "auto",
|
||||||
|
"stereo": false,
|
||||||
|
"reverse": false,
|
||||||
|
"bar_delimiter": 0,
|
||||||
|
"bar_spacing": 1,
|
||||||
|
"monstercat": true,
|
||||||
|
"waves": true,
|
||||||
|
"noise_reduction": 0.77,
|
||||||
|
"input_delay": 2,
|
||||||
|
"eq": { "1": 1.8, "2": 1.4, "3": 1.1, "4": 1.0, "5": 1.0 },
|
||||||
|
"format-icons": ["", "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"],
|
||||||
|
"actions": {
|
||||||
|
"on-click-right": "mode",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
127
.config/waybar/mediaplayer.py
Executable file
127
.config/waybar/mediaplayer.py
Executable file
@@ -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()
|
||||||
35
.config/waybar/modules/power_menu.xml
Normal file
35
.config/waybar/modules/power_menu.xml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<object class="GtkMenu" id="menu">
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="suspend">
|
||||||
|
<property name="label">Suspend</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="hibernat">
|
||||||
|
<property name="label">Hibernate</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="logout">
|
||||||
|
<property name="label">Logout</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="shutdown">
|
||||||
|
<property name="label">Shutdown</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSeparatorMenuItem" id="delimiter1"/>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="reboot">
|
||||||
|
<property name="label">Reboot</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
||||||
150
.config/waybar/modules/power_profiles.py
Executable file
150
.config/waybar/modules/power_profiles.py
Executable file
@@ -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(
|
||||||
|
" <child>\n"
|
||||||
|
" <object class=\"GtkMenuItem\" id=\"none\">\n"
|
||||||
|
" <property name=\"label\">No profiles</property>\n"
|
||||||
|
" <property name=\"sensitive\">false</property>\n"
|
||||||
|
" </object>\n"
|
||||||
|
" </child>\n"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
for profile in profiles:
|
||||||
|
label = profile
|
||||||
|
if profile == current:
|
||||||
|
label = f"{profile} (current)"
|
||||||
|
items.append(
|
||||||
|
" <child>\n"
|
||||||
|
f" <object class=\"GtkMenuItem\" id=\"{profile}\">\n"
|
||||||
|
f" <property name=\"label\">{label}</property>\n"
|
||||||
|
" </object>\n"
|
||||||
|
" </child>\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
content = (
|
||||||
|
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
||||||
|
"<interface>\n"
|
||||||
|
" <object class=\"GtkMenu\" id=\"menu\">\n"
|
||||||
|
+ "".join(items) +
|
||||||
|
" </object>\n"
|
||||||
|
"</interface>\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()
|
||||||
20
.config/waybar/modules/power_profiles_menu.xml
Normal file
20
.config/waybar/modules/power_profiles_menu.xml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<object class="GtkMenu" id="menu">
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="performance">
|
||||||
|
<property name="label">performance</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="balanced">
|
||||||
|
<property name="label">balanced</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="power-saver">
|
||||||
|
<property name="label">power-saver (current)</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
||||||
@@ -1,31 +1,32 @@
|
|||||||
/* Import wallust colors */
|
/* Import wallust colors */
|
||||||
@import url("colors-wallust.css");
|
@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;
|
Helvetica, Arial, sans-serif;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-weight: 900;
|
font-weight: 500;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
transition-property: background-color;
|
|
||||||
transition-duration: 0.5s;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Reset all styles */
|
|
||||||
* {
|
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
margin: 0;
|
transition: background-color 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modules-left,
|
||||||
|
.modules-right {
|
||||||
|
background-color: rgba(17, 24, 39, 0.1);
|
||||||
|
margin: 2px;
|
||||||
|
padding: 1px 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The whole bar */
|
/* The whole bar */
|
||||||
#waybar {
|
#waybar {
|
||||||
background-color: alpha(@background, 0);
|
background-color: alpha(@background, 0);
|
||||||
color: @foreground;
|
color: @foreground;
|
||||||
transition-property: background-color;
|
|
||||||
transition-duration: 0.5s;
|
|
||||||
border-radius: 0px;
|
border-radius: 0px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
@@ -38,14 +39,15 @@ window#waybar.empty #window {
|
|||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* --- Workspaces --- */
|
||||||
#workspaces button {
|
#workspaces button {
|
||||||
padding: 3px 2px;
|
padding: 3px 10px;
|
||||||
margin: 3px 2px;
|
margin: 2px;
|
||||||
border-radius: 6px;
|
border-radius: 3px;
|
||||||
color: @foreground;
|
color: @foreground;
|
||||||
background-color: @color0;
|
background-color: alpha(@foreground, 0.15);
|
||||||
transition: all 0.3s ease-in-out;
|
transition: all 0.3s ease-in-out;
|
||||||
font-size: 9px; /* Slightly smaller font size */
|
font-size: 9px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#workspaces button.active {
|
#workspaces button.active {
|
||||||
@@ -62,20 +64,43 @@ window#waybar.empty #window {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#workspaces {
|
#workspaces {
|
||||||
background-color: rgba(17, 24, 39, 0.5);
|
background-color: transparent;
|
||||||
margin-top: 2px;
|
margin: 0;
|
||||||
border-radius: 3px;
|
padding: 0;
|
||||||
padding: 3px 6px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#window {
|
/* --- Tray --- */
|
||||||
background-color: alpha(@background, 0.5);
|
#tray {
|
||||||
color: @foreground;
|
|
||||||
border-radius: 3px;
|
|
||||||
padding: 1px 10px; /* Reduced padding */
|
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#tray > * {
|
||||||
|
background-color: alpha(@foreground, 0.15);
|
||||||
|
margin: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray > * > image,
|
||||||
|
#tray > * image {
|
||||||
|
padding: 0px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray > *:hover {
|
||||||
|
background: @color2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray > .needs-attention {
|
||||||
|
background-color: @color9;
|
||||||
|
}
|
||||||
|
|
||||||
|
#window {
|
||||||
|
background-color: alpha(@background, 0.1);
|
||||||
|
color: @foreground;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 1px 10px;
|
||||||
|
margin: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Shared module styling --- */
|
||||||
#clock,
|
#clock,
|
||||||
#battery,
|
#battery,
|
||||||
#cpu,
|
#cpu,
|
||||||
@@ -84,36 +109,76 @@ window#waybar.empty #window {
|
|||||||
#custom-weather,
|
#custom-weather,
|
||||||
#bluetooth,
|
#bluetooth,
|
||||||
#custom-media,
|
#custom-media,
|
||||||
|
#custom-power_profiles,
|
||||||
|
#custom-power,
|
||||||
#temperature,
|
#temperature,
|
||||||
#backlight,
|
#backlight,
|
||||||
#network,
|
#network,
|
||||||
|
#pulseaudio,
|
||||||
#wireplumber,
|
#wireplumber,
|
||||||
#pulseaudio {
|
#cava {
|
||||||
background-color: alpha(@background, 0.3);
|
background-color: alpha(@foreground, 0.15);
|
||||||
color: @foreground;
|
color: @foreground;
|
||||||
padding: 0 10px;
|
padding: 0px 10px;
|
||||||
margin: 2px;
|
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,
|
||||||
|
#cava:hover {
|
||||||
|
background: @color2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wireplumber {
|
||||||
|
border-radius: 0px 3px 3px 0px;
|
||||||
|
margin-left: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cava {
|
||||||
|
border-radius: 3px 0px 0px 3px;
|
||||||
|
margin-right: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bluetooth {
|
||||||
|
background-color: alpha(@color3, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
#bluetooth.disabled {
|
#bluetooth.disabled {
|
||||||
background-color: alpha(@color8, 0);
|
}
|
||||||
|
|
||||||
|
#bluetooth.on {
|
||||||
|
background-color: alpha(@color2, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#bluetooth.connected {
|
||||||
|
background-color: alpha(@color4, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#bluetooth.connected:hover,
|
||||||
|
#bluetooth.on:hover {
|
||||||
|
background-color: alpha(@color3, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
#battery.critical:not(.charging) {
|
#battery.critical:not(.charging) {
|
||||||
color: @color1;
|
color: @color1;
|
||||||
|
background-color: alpha(@color2, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#temperature.critical {
|
#temperature.critical {
|
||||||
background-color: alpha(@foreground, 0.5);
|
background-color: alpha(@color2, 1);
|
||||||
}
|
|
||||||
|
|
||||||
#tray > .passive {
|
|
||||||
-gtk-icon-effect: dim;
|
|
||||||
}
|
|
||||||
|
|
||||||
#tray > .needs-attention {
|
|
||||||
-gtk-icon-effect: highlight;
|
|
||||||
background-color: rgba(253, 77, 75, 0.5);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#idle_inhibitor {
|
#idle_inhibitor {
|
||||||
@@ -125,20 +190,22 @@ window#waybar.empty #window {
|
|||||||
color: rgba(45, 52, 54, 1);
|
color: rgba(45, 52, 54, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#language {
|
/* Language + keyboard state */
|
||||||
background: rgba(0, 176, 147, 0.5);
|
#language,
|
||||||
color: rgba(116, 8, 100, 0.5);
|
#keyboard-state {
|
||||||
padding: 0 0px;
|
padding: 0 0px;
|
||||||
margin: 0 5px;
|
margin: 0 5px;
|
||||||
min-width: 16px;
|
min-width: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#language {
|
||||||
|
background: rgba(0, 176, 147, 0.5);
|
||||||
|
color: rgba(116, 8, 100, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
#keyboard-state {
|
#keyboard-state {
|
||||||
background: rgba(151, 225, 173, 0.5);
|
background: rgba(151, 225, 173, 0.5);
|
||||||
color: rgba(0, 0, 0, 0.5);
|
color: rgba(0, 0, 0, 0.5);
|
||||||
padding: 0 0px;
|
|
||||||
margin: 0 5px;
|
|
||||||
min-width: 16px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#keyboard-state > label {
|
#keyboard-state > label {
|
||||||
@@ -148,3 +215,31 @@ window#waybar.empty #window {
|
|||||||
#keyboard-state > label.locked {
|
#keyboard-state > label.locked {
|
||||||
background: rgba(0, 0, 0, 0.2);
|
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: 5px;
|
||||||
|
border: 0px;
|
||||||
|
background: rgba(22, 19, 32, 0.5);
|
||||||
|
color: #b5e8e0;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
menuitem {
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|||||||
10
.config/waybar/waybar.sh
Executable file
10
.config/waybar/waybar.sh
Executable file
@@ -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 &
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
language = en
|
language = en
|
||||||
folder = /usr/share/wallpapers
|
folder = /usr/share/wallpapers
|
||||||
monitors = All
|
monitors = All
|
||||||
wallpaper = /usr/share/wallpapers/wallpaper/lofoten2.jpg
|
wallpaper = /usr/share/wallpapers/downloaded/pexels-blooddrainer-1655901.jpg
|
||||||
show_path_in_tooltip = True
|
show_path_in_tooltip = True
|
||||||
backend = swww
|
backend = swaybg
|
||||||
fill = fill
|
fill = fill
|
||||||
sort = name
|
sort = name
|
||||||
color = #ffffff
|
color = #ffffff
|
||||||
@@ -12,9 +12,9 @@ subfolders = True
|
|||||||
all_subfolders = False
|
all_subfolders = False
|
||||||
show_hidden = False
|
show_hidden = False
|
||||||
show_gifs_only = False
|
show_gifs_only = False
|
||||||
post_command = wallust run '$wallpaper'
|
post_command = wallust run '$wallpaper' -s
|
||||||
number_of_columns = 3
|
number_of_columns = 3
|
||||||
swww_transition_type = none
|
swww_transition_type = wipe
|
||||||
swww_transition_step = 90
|
swww_transition_step = 90
|
||||||
swww_transition_angle = 0
|
swww_transition_angle = 0
|
||||||
swww_transition_duration = 2
|
swww_transition_duration = 2
|
||||||
@@ -22,5 +22,6 @@ swww_transition_fps = 60
|
|||||||
mpvpaper_sound = False
|
mpvpaper_sound = False
|
||||||
mpvpaper_options =
|
mpvpaper_options =
|
||||||
use_xdg_state = False
|
use_xdg_state = False
|
||||||
zen_mode = False
|
zen_mode = True
|
||||||
|
stylesheet = /home/michaelb/.config/waypaper/style.css
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user