Initial commit
This commit is contained in:
89
config/hypr/bindings.conf
Normal file
89
config/hypr/bindings.conf
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
source = ./bindings/media.conf
|
||||||
|
source = ./bindings/tiling.conf
|
||||||
|
source = ./bindings/utilities.conf
|
||||||
|
|
||||||
|
## Tiling
|
||||||
|
#
|
||||||
|
#bindd = SUPER SHIFT, left, Swap window to the left, swapwindow, l
|
||||||
|
#bindd = SUPER SHIFT, right, Swap window to the right, swapwindow, r
|
||||||
|
#bindd = SUPER SHIFT, up, Swap window up, swapwindow, u
|
||||||
|
#bindd = SUPER SHIFT, down, Swap window down, swapwindow, d
|
||||||
|
|
||||||
|
# Applications
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Keywords/
|
||||||
|
$mainMod = SUPER # Sets "Windows" key as main modifier
|
||||||
|
|
||||||
|
bindd = $mainMod, B, Launch Browser, exec, flatpak run app.zen_browser.zen
|
||||||
|
bindd = $mainMod, T, System Monitor, exec, $terminal btop
|
||||||
|
bindd = $mainMod, U, Todoist, exec, todoist
|
||||||
|
bindd = $mainMod, I, Notion, exec, notion-app
|
||||||
|
bindd = $mainMod, G, Telegram, exec, Telegram
|
||||||
|
bindd = $mainMod SHIFT, G, Signal, exec, signal-desktop
|
||||||
|
bindd = $mainMod, F, WhatsApp, exec, gtk-launch WebApp-WhatsAppWeb7770.desktop
|
||||||
|
|
||||||
|
bind = $mainMod, return, exec, $terminal
|
||||||
|
bind = $mainMod, Q, killactive,
|
||||||
|
bind = $mainMod SHIFT ALT, Q, exit,
|
||||||
|
bind = $mainMod, E, exec, $fileManager
|
||||||
|
#bind = $mainMod, V, togglefloating,
|
||||||
|
bind = $mainMod, R, exec, $menu
|
||||||
|
bind = $mainMod, P, pseudo, # dwindle
|
||||||
|
#bind = $mainMod, J, togglesplit, # dwindle
|
||||||
|
bindd = $mainMod, L, Lock screen, exec, ~/.config/hypr/scripts/lock-screen
|
||||||
|
|
||||||
|
## Move focus with mainMod + arrow keys
|
||||||
|
#bind = $mainMod, left, movefocus, l
|
||||||
|
#bind = $mainMod, right, movefocus, r
|
||||||
|
#bind = $mainMod, up, movefocus, u
|
||||||
|
#bind = $mainMod, down, movefocus, d
|
||||||
|
#
|
||||||
|
## Switch workspaces with mainMod + [0-9]
|
||||||
|
#bind = $mainMod, 1, workspace, 1
|
||||||
|
#bind = $mainMod, 2, workspace, 2
|
||||||
|
#bind = $mainMod, 3, workspace, 3
|
||||||
|
#bind = $mainMod, 4, workspace, 4
|
||||||
|
#bind = $mainMod, 5, workspace, 5
|
||||||
|
#bind = $mainMod, 6, workspace, 6
|
||||||
|
#bind = $mainMod, 7, workspace, 7
|
||||||
|
#bind = $mainMod, 8, workspace, 8
|
||||||
|
#bind = $mainMod, 9, workspace, 9
|
||||||
|
#bind = $mainMod, 0, workspace, 10
|
||||||
|
#
|
||||||
|
## Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||||
|
#bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||||
|
#bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||||
|
#bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||||
|
#bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||||
|
#bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||||
|
#bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||||
|
#bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||||
|
#bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||||
|
#bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||||
|
#bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||||
|
#
|
||||||
|
## Example special workspace (scratchpad)
|
||||||
|
#bind = $mainMod, S, togglespecialworkspace, magic
|
||||||
|
#bind = $mainMod SHIFT, S, movetoworkspace, special:magic
|
||||||
|
#
|
||||||
|
## Scroll through existing workspaces with mainMod + scroll
|
||||||
|
#bind = $mainMod, mouse_down, workspace, e+1
|
||||||
|
#bind = $mainMod, mouse_up, workspace, e-1
|
||||||
|
#
|
||||||
|
## Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
#bindm = $mainMod, mouse:272, movewindow
|
||||||
|
#bindm = $mainMod, mouse:273, resizewindow
|
||||||
|
#
|
||||||
|
## Laptop multimedia keys for volume and LCD brightness
|
||||||
|
#bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
|
||||||
|
#bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||||
|
#bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||||
|
#bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
||||||
|
#bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
|
||||||
|
#bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
|
||||||
|
#
|
||||||
|
## Requires playerctl
|
||||||
|
#bindl = , XF86AudioNext, exec, playerctl next
|
||||||
|
#bindl = , XF86AudioPause, exec, playerctl play-pause
|
||||||
|
#bindl = , XF86AudioPlay, exec, playerctl play-pause
|
||||||
|
#bindl = , XF86AudioPrev, exec, playerctl previous
|
||||||
25
config/hypr/bindings/media.conf
Normal file
25
config/hypr/bindings/media.conf
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# Only display the OSD on the currently focused monitor
|
||||||
|
$osdclient = swayosd-client --monitor "$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')"
|
||||||
|
|
||||||
|
# Laptop multimedia keys for volume and LCD brightness (with OSD)
|
||||||
|
bindeld = ,XF86AudioRaiseVolume, Volume up, exec, $osdclient --output-volume raise
|
||||||
|
bindeld = ,XF86AudioLowerVolume, Volume down, exec, $osdclient --output-volume lower
|
||||||
|
bindeld = ,XF86AudioMute, Mute, exec, $osdclient --output-volume mute-toggle
|
||||||
|
bindeld = ,XF86AudioMicMute, Mute microphone, exec, $osdclient --input-volume mute-toggle
|
||||||
|
bindeld = ,XF86MonBrightnessUp, Brightness up, exec, $osdclient --brightness raise
|
||||||
|
bindeld = ,XF86MonBrightnessDown, Brightness down, exec, $osdclient --brightness lower
|
||||||
|
|
||||||
|
# Precise 1% multimedia adjustments with Alt modifier
|
||||||
|
bindeld = ALT, XF86AudioRaiseVolume, Volume up precise, exec, $osdclient --output-volume +1
|
||||||
|
bindeld = ALT, XF86AudioLowerVolume, Volume down precise, exec, $osdclient --output-volume -1
|
||||||
|
bindeld = ALT, XF86MonBrightnessUp, Brightness up precise, exec, $osdclient --brightness +1
|
||||||
|
bindeld = ALT, XF86MonBrightnessDown, Brightness down precise, exec, $osdclient --brightness -1
|
||||||
|
|
||||||
|
# Requires playerctl
|
||||||
|
bindld = , XF86AudioNext, Next track, exec, $osdclient --playerctl next
|
||||||
|
bindld = , XF86AudioPause, Pause, exec, $osdclient --playerctl play-pause
|
||||||
|
bindld = , XF86AudioPlay, Play, exec, $osdclient --playerctl play-pause
|
||||||
|
bindld = , XF86AudioPrev, Previous track, exec, $osdclient --playerctl previous
|
||||||
|
|
||||||
|
# Switch audio output with Super + Mute
|
||||||
|
bindld = SUPER, XF86AudioMute, Switch audio output, exec, omarchy-cmd-audio-switch
|
||||||
73
config/hypr/bindings/tiling.conf
Normal file
73
config/hypr/bindings/tiling.conf
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
# Close windows
|
||||||
|
bindd = SUPER, Q, Close active window, killactive,
|
||||||
|
#bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-cmd-close-all-windows
|
||||||
|
|
||||||
|
# Control tiling
|
||||||
|
bindd = SUPER, J, Toggle split, togglesplit, # dwindle
|
||||||
|
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
|
||||||
|
bindd = SUPER, V, Toggle floating, togglefloating,
|
||||||
|
bindd = SHIFT, F11, Force full screen, fullscreen, 0
|
||||||
|
bindd = ALT, F11, Full width, fullscreen, 1
|
||||||
|
bindd = SUPER SHIFT, RETURN, Full width, fullscreen, 1
|
||||||
|
bindd = SUPER, numbersign, 1:1 split, splitratio, exact 1
|
||||||
|
|
||||||
|
# Move focus with SUPER + arrow keys
|
||||||
|
bindd = SUPER, left, Move focus left, movefocus, l
|
||||||
|
bindd = SUPER, right, Move focus right, movefocus, r
|
||||||
|
bindd = SUPER, up, Move focus up, movefocus, u
|
||||||
|
bindd = SUPER, down, Move focus down, movefocus, d
|
||||||
|
|
||||||
|
# Switch workspaces with SUPER + [0-9]
|
||||||
|
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
|
||||||
|
bindd = SUPER, code:11, Switch to workspace 2, workspace, 2
|
||||||
|
bindd = SUPER, code:12, Switch to workspace 3, workspace, 3
|
||||||
|
bindd = SUPER, code:13, Switch to workspace 4, workspace, 4
|
||||||
|
bindd = SUPER, code:14, Switch to workspace 5, workspace, 5
|
||||||
|
bindd = SUPER, code:15, Switch to workspace 6, workspace, 6
|
||||||
|
bindd = SUPER, code:16, Switch to workspace 7, workspace, 7
|
||||||
|
bindd = SUPER, code:17, Switch to workspace 8, workspace, 8
|
||||||
|
bindd = SUPER, code:18, Switch to workspace 9, workspace, 9
|
||||||
|
bindd = SUPER, code:19, Switch to workspace 10, workspace, 10
|
||||||
|
|
||||||
|
# Move active window to a workspace with SUPER + SHIFT + [0-9]
|
||||||
|
bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1
|
||||||
|
bindd = SUPER SHIFT, code:11, Move window to workspace 2, movetoworkspace, 2
|
||||||
|
bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3
|
||||||
|
bindd = SUPER SHIFT, code:13, Move window to workspace 4, movetoworkspace, 4
|
||||||
|
bindd = SUPER SHIFT, code:14, Move window to workspace 5, movetoworkspace, 5
|
||||||
|
bindd = SUPER SHIFT, code:15, Move window to workspace 6, movetoworkspace, 6
|
||||||
|
bindd = SUPER SHIFT, code:16, Move window to workspace 7, movetoworkspace, 7
|
||||||
|
bindd = SUPER SHIFT, code:17, Move window to workspace 8, movetoworkspace, 8
|
||||||
|
bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9
|
||||||
|
bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10
|
||||||
|
|
||||||
|
# Tab between workspaces
|
||||||
|
bindd = SUPER, TAB, Next workspace, workspace, e+1
|
||||||
|
bindd = SUPER SHIFT, TAB, Previous workspace, workspace, e-1
|
||||||
|
bindd = SUPER CTRL, TAB, Former workspace, workspace, previous
|
||||||
|
|
||||||
|
# Swap active window with the one next to it with SUPER + SHIFT + arrow keys
|
||||||
|
bindd = SUPER SHIFT, left, Swap window to the left, swapwindow, l
|
||||||
|
bindd = SUPER SHIFT, right, Swap window to the right, swapwindow, r
|
||||||
|
bindd = SUPER SHIFT, up, Swap window up, swapwindow, u
|
||||||
|
bindd = SUPER SHIFT, down, Swap window down, swapwindow, d
|
||||||
|
|
||||||
|
# Cycle through applications on active workspace
|
||||||
|
bindd = ALT, Tab, Cycle to next window, cyclenext
|
||||||
|
bindd = ALT SHIFT, Tab, Cycle to prev window, cyclenext, prev
|
||||||
|
bindd = ALT, Tab, Reveal active window on top, bringactivetotop
|
||||||
|
bindd = ALT SHIFT, Tab, Reveal active window on top, bringactivetotop
|
||||||
|
|
||||||
|
# Resize active window
|
||||||
|
bindd = SUPER, code:20, Expand window left, resizeactive, -100 0 # - key
|
||||||
|
bindd = SUPER, code:21, Shrink window left, resizeactive, 100 0 # = key
|
||||||
|
bindd = SUPER SHIFT, code:20, Shrink window up, resizeactive, 0 -100
|
||||||
|
bindd = SUPER SHIFT, code:21, Expand window down, resizeactive, 0 100
|
||||||
|
|
||||||
|
# Scroll through existing workspaces with SUPER + scroll
|
||||||
|
bindd = SUPER, mouse_down, Scroll active workspace forward, workspace, e+1
|
||||||
|
bindd = SUPER, mouse_up, Scroll active workspace backward, workspace, e-1
|
||||||
|
|
||||||
|
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
bindmd = SUPER, mouse:272, Move window, movewindow
|
||||||
|
bindmd = SUPER, mouse:273, Resize window, resizewindow
|
||||||
49
config/hypr/bindings/utilities.conf
Normal file
49
config/hypr/bindings/utilities.conf
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
# Menus
|
||||||
|
bindd = SUPER, SPACE, Launch apps, exec, walker -p "Start…"
|
||||||
|
bindd = SUPER CTRL, E, Emoji picker, exec, walker -m Emojis
|
||||||
|
bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu
|
||||||
|
bindd = SUPER, ESCAPE, Power menu, exec, omarchy-menu system
|
||||||
|
bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system
|
||||||
|
bindd = SUPER, K, Show key bindings, exec, omarchy-menu-keybindings
|
||||||
|
bindd = , XF86Calculator, Calculator, exec, gnome-calculator
|
||||||
|
|
||||||
|
bindd = SUPER, N, Notification center, exec, swaync-client -op
|
||||||
|
|
||||||
|
# Aesthetics
|
||||||
|
bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, omarchy-toggle-waybar
|
||||||
|
bindd = SUPER CTRL, SPACE, Next background in theme, exec, omarchy-theme-bg-next
|
||||||
|
bindd = SUPER SHIFT CTRL, SPACE, Pick new theme, exec, omarchy-menu theme
|
||||||
|
bindd = SUPER, BACKSPACE, Toggle window transparency, exec, hyprctl dispatch setprop "address:$(hyprctl activewindow -j | jq -r '.address')" opaque toggle
|
||||||
|
|
||||||
|
# Notifications
|
||||||
|
bindd = SUPER, COMMA, Dismiss last notification, exec, makoctl dismiss
|
||||||
|
bindd = SUPER SHIFT, COMMA, Dismiss all notifications, exec, makoctl dismiss --all
|
||||||
|
bindd = SUPER CTRL, COMMA, Toggle silencing notifications, exec, makoctl mode -t do-not-disturb && makoctl mode | grep -q 'do-not-disturb' && notify-send "Silenced notifications" || notify-send "Enabled notifications"
|
||||||
|
|
||||||
|
# Toggle idling
|
||||||
|
bindd = SUPER CTRL, I, Toggle locking on idle, exec, omarchy-toggle-idle
|
||||||
|
|
||||||
|
# Toggle nightlight
|
||||||
|
bindd = SUPER CTRL, N, Toggle nightlight, exec, omarchy-toggle-nightlight
|
||||||
|
|
||||||
|
# Control Apple Display brightness
|
||||||
|
bindd = CTRL, F1, Apple Display brightness down, exec, omarchy-cmd-apple-display-brightness -5000
|
||||||
|
bindd = CTRL, F2, Apple Display brightness up, exec, omarchy-cmd-apple-display-brightness +5000
|
||||||
|
bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, omarchy-cmd-apple-display-brightness +60000
|
||||||
|
|
||||||
|
# Screenshots
|
||||||
|
bindd = , PRINT, Screenshot of region, exec, ~/.config/hypr/scripts/cmd-screenshot region
|
||||||
|
bindd = SHIFT, PRINT, Screenshot of window, exec, ~/.config/hypr/scripts/cmd-screenshot windows
|
||||||
|
bindd = CTRL, PRINT, Screenshot of display, exec, ~/.config/hypr/scripts/cmd-screenshot fullscreen
|
||||||
|
|
||||||
|
# Screen recordings
|
||||||
|
bindd = ALT, PRINT, Screen record a region, exec, omarchy-cmd-screenrecord region
|
||||||
|
bindd = ALT SHIFT, PRINT, Screen record a region with audio, exec, omarchy-cmd-screenrecord region audio
|
||||||
|
bindd = CTRL ALT, PRINT, Screen record display, exec, omarchy-cmd-screenrecord output
|
||||||
|
bindd = CTRL ALT SHIFT, PRINT, Screen record display with audio, exec, omarchy-cmd-screenrecord output audio
|
||||||
|
|
||||||
|
# Color picker
|
||||||
|
bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a
|
||||||
|
|
||||||
|
# File sharing
|
||||||
|
bindd = CTRL SUPER, S, Share, exec, omarchy-menu share
|
||||||
22
config/hypr/hypridle.conf
Normal file
22
config/hypr/hypridle.conf
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
general {
|
||||||
|
lock_cmd = ~/.config/hypr/scripts/lock-screen # lock screen and 1password
|
||||||
|
before_sleep_cmd = loginctl lock-session # lock before suspend.
|
||||||
|
after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
|
||||||
|
inhibit_sleep = 3 # wait until screen is locked
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 600 # 5min
|
||||||
|
on-timeout = loginctl lock-session # lock screen when timeout has passed
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 630 # 5.5min
|
||||||
|
on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
|
||||||
|
on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 1800 # 30 minutes
|
||||||
|
on-timeout = ~/.config/hypr/scripts/suspend_on_battery
|
||||||
|
}
|
||||||
290
config/hypr/hyprland.conf
Normal file
290
config/hypr/hyprland.conf
Normal file
@@ -0,0 +1,290 @@
|
|||||||
|
$terminal = kitty
|
||||||
|
$fileManager = nautilus
|
||||||
|
$menu = wofi --show drun
|
||||||
|
|
||||||
|
source = ~/.config/hypr/bindings.conf
|
||||||
|
source = ~/.config/hypr/monitors.conf
|
||||||
|
source = ~/.config/hypr/rules.conf
|
||||||
|
|
||||||
|
#env = XDG_CURRENT_DESKTOP,GNOME
|
||||||
|
|
||||||
|
exec-once = hyprpaper
|
||||||
|
exec-once = waybar
|
||||||
|
exec-once = hypridle
|
||||||
|
exec-once = systemctl --user start hyprpolkitagent
|
||||||
|
exec-once = eval $(/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh)
|
||||||
|
#exec-once = gnome-keyring-daemon --unlock --components=pkcs11,secrets,ssh && dbus-update-activation-environment --all
|
||||||
|
#exec-once = gnome-keyring-daemon --start --components=pkcs11
|
||||||
|
#exec-once = gnome-keyring-daemon --start --components=secrets
|
||||||
|
#exec-once = gnome-keyring-daemon --start --components=ssh
|
||||||
|
|
||||||
|
exec-once = swayosd-server
|
||||||
|
exec-once = elephant & walker --gapplication-service
|
||||||
|
|
||||||
|
#############################
|
||||||
|
### ENVIRONMENT VARIABLES ###
|
||||||
|
#############################
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Environment-variables/
|
||||||
|
|
||||||
|
env = XCURSOR_SIZE,24
|
||||||
|
env = HYPRCURSOR_SIZE,24
|
||||||
|
|
||||||
|
###################
|
||||||
|
### PERMISSIONS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Permissions/
|
||||||
|
# Please note permission changes here require a Hyprland restart and are not applied on-the-fly
|
||||||
|
# for security reasons
|
||||||
|
|
||||||
|
# ecosystem {
|
||||||
|
# enforce_permissions = 1
|
||||||
|
# }
|
||||||
|
|
||||||
|
# permission = /usr/(bin|local/bin)/grim, screencopy, allow
|
||||||
|
# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow
|
||||||
|
# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow
|
||||||
|
|
||||||
|
|
||||||
|
#####################
|
||||||
|
### LOOK AND FEEL ###
|
||||||
|
#####################
|
||||||
|
|
||||||
|
# Refer to https://wiki.hypr.land/Configuring/Variables/
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#general
|
||||||
|
general {
|
||||||
|
gaps_in = 4
|
||||||
|
gaps_out = 8
|
||||||
|
border_size = 2
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#variable-types for info about colors
|
||||||
|
# col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||||
|
col.active_border = rgba(33ccffee) rgba(f50087ee) 45deg
|
||||||
|
col.inactive_border = rgba(595959aa)
|
||||||
|
|
||||||
|
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||||
|
resize_on_border = false
|
||||||
|
|
||||||
|
# Please see https://wiki.hypr.land/Configuring/Tearing/ before you turn this on
|
||||||
|
allow_tearing = false
|
||||||
|
|
||||||
|
layout = dwindle
|
||||||
|
}
|
||||||
|
|
||||||
|
dwindle {
|
||||||
|
force_split = 2
|
||||||
|
smart_resizing = false
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#decoration
|
||||||
|
decoration {
|
||||||
|
rounding = 4
|
||||||
|
rounding_power = 2
|
||||||
|
|
||||||
|
# Change transparency of focused and unfocused windows
|
||||||
|
active_opacity = 1.0
|
||||||
|
inactive_opacity = 0.8
|
||||||
|
|
||||||
|
shadow {
|
||||||
|
enabled = true
|
||||||
|
range = 3
|
||||||
|
render_power = 3
|
||||||
|
color = rgba(1a1a1aee)
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#blur
|
||||||
|
blur {
|
||||||
|
enabled = true
|
||||||
|
size = 8
|
||||||
|
passes = 2
|
||||||
|
|
||||||
|
vibrancy = 0.1696
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#animations
|
||||||
|
animations {
|
||||||
|
enabled = yes, please :)
|
||||||
|
|
||||||
|
# Default curves, see https://wiki.hypr.land/Configuring/Animations/#curves
|
||||||
|
# NAME, X0, Y0, X1, Y1
|
||||||
|
bezier = easeOutQuint, 0.23, 1, 0.32, 1
|
||||||
|
bezier = easeInOutCubic, 0.65, 0.05, 0.36, 1
|
||||||
|
bezier = linear, 0, 0, 1, 1
|
||||||
|
bezier = almostLinear, 0.5, 0.5, 0.75, 1
|
||||||
|
bezier = quick, 0.15, 0, 0.1, 1
|
||||||
|
|
||||||
|
# Default animations, see https://wiki.hypr.land/Configuring/Animations/
|
||||||
|
# NAME, ONOFF, SPEED, CURVE, [STYLE]
|
||||||
|
animation = global, 1, 10, default
|
||||||
|
animation = border, 1, 5.39, easeOutQuint
|
||||||
|
animation = borderangle, 1, 20, quick
|
||||||
|
animation = windows, 1, 4.79, easeOutQuint
|
||||||
|
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
|
||||||
|
animation = windowsOut, 1, 1.49, linear, popin 87%
|
||||||
|
animation = fadeIn, 1, 1.73, almostLinear
|
||||||
|
animation = fadeOut, 1, 1.46, almostLinear
|
||||||
|
animation = fade, 1, 3.03, quick
|
||||||
|
animation = layers, 1, 3.81, easeOutQuint
|
||||||
|
animation = layersIn, 1, 4, easeOutQuint, fade
|
||||||
|
animation = layersOut, 1, 1.5, linear, fade
|
||||||
|
animation = fadeLayersIn, 1, 1.79, almostLinear
|
||||||
|
animation = fadeLayersOut, 1, 1.39, almostLinear
|
||||||
|
animation = workspaces, 1, 1.94, almostLinear, fade
|
||||||
|
animation = workspacesIn, 1, 1.21, almostLinear, fade
|
||||||
|
animation = workspacesOut, 1, 1.94, almostLinear, fade
|
||||||
|
animation = zoomFactor, 1, 7, quick
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ref https://wiki.hypr.land/Configuring/Workspace-Rules/
|
||||||
|
# "Smart gaps" / "No gaps when only"
|
||||||
|
# uncomment all if you wish to use that.
|
||||||
|
# workspace = w[tv1], gapsout:0, gapsin:0
|
||||||
|
# workspace = f[1], gapsout:0, gapsin:0
|
||||||
|
# windowrule = bordersize 0, floating:0, onworkspace:w[tv1]
|
||||||
|
# windowrule = rounding 0, floating:0, onworkspace:w[tv1]
|
||||||
|
# windowrule = bordersize 0, floating:0, onworkspace:f[1]
|
||||||
|
# windowrule = rounding 0, floating:0, onworkspace:f[1]
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Dwindle-Layout/ for more
|
||||||
|
dwindle {
|
||||||
|
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||||
|
preserve_split = true # You probably want this
|
||||||
|
}
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Master-Layout/ for more
|
||||||
|
master {
|
||||||
|
new_status = master
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#misc
|
||||||
|
misc {
|
||||||
|
force_default_wallpaper = 1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||||
|
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#############
|
||||||
|
### INPUT ###
|
||||||
|
#############
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#input
|
||||||
|
input {
|
||||||
|
kb_layout = de
|
||||||
|
kb_variant =
|
||||||
|
kb_model =
|
||||||
|
kb_options =
|
||||||
|
kb_rules =
|
||||||
|
|
||||||
|
follow_mouse = 1
|
||||||
|
|
||||||
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
|
|
||||||
|
touchpad {
|
||||||
|
natural_scroll = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Gestures
|
||||||
|
gesture = 3, horizontal, workspace
|
||||||
|
|
||||||
|
# Example per-device config
|
||||||
|
# See https://wiki.hypr.land/Configuring/Keywords/#per-device-input-configs for more
|
||||||
|
device {
|
||||||
|
name = epic-mouse-v1
|
||||||
|
sensitivity = -0.5
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### KEYBINDINGS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Keywords/
|
||||||
|
#$mainMod = SUPER # Sets "Windows" key as main modifier
|
||||||
|
#
|
||||||
|
#bindd = $mainMod, B, Launch Browser, exec, flatpak run app.zen_browser.zen
|
||||||
|
#
|
||||||
|
## Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more
|
||||||
|
#bind = $mainMod, return, exec, $terminal
|
||||||
|
#bind = $mainMod, Q, killactive,
|
||||||
|
#bind = $mainMod, M, exit,
|
||||||
|
#bind = $mainMod, E, exec, $fileManager
|
||||||
|
#bind = $mainMod, V, togglefloating,
|
||||||
|
#bind = $mainMod, R, exec, $menu
|
||||||
|
#bind = $mainMod, P, pseudo, # dwindle
|
||||||
|
#bind = $mainMod, J, togglesplit, # dwindle
|
||||||
|
#
|
||||||
|
## Move focus with mainMod + arrow keys
|
||||||
|
#bind = $mainMod, left, movefocus, l
|
||||||
|
#bind = $mainMod, right, movefocus, r
|
||||||
|
#bind = $mainMod, up, movefocus, u
|
||||||
|
#bind = $mainMod, down, movefocus, d
|
||||||
|
#
|
||||||
|
## Switch workspaces with mainMod + [0-9]
|
||||||
|
#bind = $mainMod, 1, workspace, 1
|
||||||
|
#bind = $mainMod, 2, workspace, 2
|
||||||
|
#bind = $mainMod, 3, workspace, 3
|
||||||
|
#bind = $mainMod, 4, workspace, 4
|
||||||
|
#bind = $mainMod, 5, workspace, 5
|
||||||
|
#bind = $mainMod, 6, workspace, 6
|
||||||
|
#bind = $mainMod, 7, workspace, 7
|
||||||
|
#bind = $mainMod, 8, workspace, 8
|
||||||
|
#bind = $mainMod, 9, workspace, 9
|
||||||
|
#bind = $mainMod, 0, workspace, 10
|
||||||
|
#
|
||||||
|
## Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||||
|
#bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||||
|
#bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||||
|
#bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||||
|
#bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||||
|
#bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||||
|
#bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||||
|
#bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||||
|
#bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||||
|
#bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||||
|
#bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||||
|
#
|
||||||
|
## Example special workspace (scratchpad)
|
||||||
|
#bind = $mainMod, S, togglespecialworkspace, magic
|
||||||
|
#bind = $mainMod SHIFT, S, movetoworkspace, special:magic
|
||||||
|
#
|
||||||
|
## Scroll through existing workspaces with mainMod + scroll
|
||||||
|
#bind = $mainMod, mouse_down, workspace, e+1
|
||||||
|
#bind = $mainMod, mouse_up, workspace, e-1
|
||||||
|
#
|
||||||
|
## Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
#bindm = $mainMod, mouse:272, movewindow
|
||||||
|
#bindm = $mainMod, mouse:273, resizewindow
|
||||||
|
#
|
||||||
|
## Laptop multimedia keys for volume and LCD brightness
|
||||||
|
#bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
|
||||||
|
#bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||||
|
#bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||||
|
#bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
||||||
|
#bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
|
||||||
|
#bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
|
||||||
|
#
|
||||||
|
## Requires playerctl
|
||||||
|
#bindl = , XF86AudioNext, exec, playerctl next
|
||||||
|
#bindl = , XF86AudioPause, exec, playerctl play-pause
|
||||||
|
#bindl = , XF86AudioPlay, exec, playerctl play-pause
|
||||||
|
#bindl = , XF86AudioPrev, exec, playerctl previous
|
||||||
|
|
||||||
|
##############################
|
||||||
|
### WINDOWS AND WORKSPACES ###
|
||||||
|
##############################
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Window-Rules/ for more
|
||||||
|
# See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules
|
||||||
|
|
||||||
|
# Example windowrule
|
||||||
|
# windowrule = float,class:^(kitty)$,title:^(kitty)$
|
||||||
|
|
||||||
|
# Ignore maximize requests from apps. You'll probably like this.
|
||||||
|
windowrule = suppressevent maximize, class:.*
|
||||||
|
|
||||||
|
# Fix some dragging issues with XWayland
|
||||||
|
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
||||||
91
config/hypr/hyprlock.conf
Normal file
91
config/hypr/hyprlock.conf
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
$font = Mononoki Nerd Font
|
||||||
|
|
||||||
|
general {
|
||||||
|
hide_cursor = false
|
||||||
|
}
|
||||||
|
|
||||||
|
auth {
|
||||||
|
fingerprint {
|
||||||
|
enabled = true
|
||||||
|
ready_message = Scan fingerprint to unlock
|
||||||
|
present_message = Scanning...
|
||||||
|
retry_delay = 250 # in milliseconds
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
animations {
|
||||||
|
enabled = true
|
||||||
|
bezier = linear, 1, 1, 0, 0
|
||||||
|
animation = fadeIn, 1, 5, linear
|
||||||
|
animation = fadeOut, 1, 5, linear
|
||||||
|
animation = inputFieldDots, 1, 1, linear
|
||||||
|
}
|
||||||
|
|
||||||
|
background {
|
||||||
|
monitor =
|
||||||
|
path = screenshot
|
||||||
|
blur_passes = 4
|
||||||
|
brightness = 0.68
|
||||||
|
vibrancy = 0.18
|
||||||
|
}
|
||||||
|
|
||||||
|
input-field {
|
||||||
|
monitor =
|
||||||
|
size = 420, 56
|
||||||
|
outline_thickness = 3
|
||||||
|
inner_color = rgba(0, 0, 0, 0.0) # no fill
|
||||||
|
|
||||||
|
outer_color = rgba(33ccffee) rgba(f50087ee) 335deg
|
||||||
|
check_color = rgba(33ccffee) rgba(f50087ee) 180deg
|
||||||
|
fail_color = rgba(f50087ee)
|
||||||
|
|
||||||
|
font_color = rgb(255, 255, 255)
|
||||||
|
fade_on_empty = false
|
||||||
|
rounding = 4
|
||||||
|
|
||||||
|
font_family = $font
|
||||||
|
placeholder_text = Passwort
|
||||||
|
fail_text = $PAMFAIL
|
||||||
|
|
||||||
|
dots_spacing = 0.3
|
||||||
|
|
||||||
|
position = 0, -72
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fingerprint messages
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = $FPRINTPROMPT
|
||||||
|
font_size = 12
|
||||||
|
font_family = $font
|
||||||
|
position = 0, -192
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# TIME
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = $TIME
|
||||||
|
font_size = 72
|
||||||
|
font_family = $font
|
||||||
|
|
||||||
|
position = 0, 148
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# DATE
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:60000] date +"%A, %d %B %Y" # update every 60 seconds
|
||||||
|
font_size = 24
|
||||||
|
font_family = $font
|
||||||
|
|
||||||
|
position = 0, 48
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
3
config/hypr/hyprpaper.conf
Normal file
3
config/hypr/hyprpaper.conf
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
preload = /home/vektron/Bilder/wallpaper/omarchy/3-Milad-Fakurian-Abstract-Purple-Blue.jpg
|
||||||
|
wallpaper = , /home/vektron/Bilder/wallpaper/omarchy/3-Milad-Fakurian-Abstract-Purple-Blue.jpg
|
||||||
|
|
||||||
20
config/hypr/monitors.conf
Normal file
20
config/hypr/monitors.conf
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||||
|
# List current monitors and resolutions possible: hyprctl monitors
|
||||||
|
# Format: monitor = [port], resolution, position, scale
|
||||||
|
# You must relaunch Hyprland after changing any envs (use Super+Esc, then Relaunch)
|
||||||
|
|
||||||
|
env = GDK_SCALE,1
|
||||||
|
monitor=eDP-1,1920x1080,auto,1
|
||||||
|
monitor=,preferred,auto,auto
|
||||||
|
|
||||||
|
# Good compromise for 27" or 32" 4K monitors (but fractional!)
|
||||||
|
# env = GDK_SCALE,1.75
|
||||||
|
# monitor=,preferred,auto,1.666667
|
||||||
|
|
||||||
|
# Straight 1x setup for low-resolution displays like 1080p or 1440p
|
||||||
|
# env = GDK_SCALE,1
|
||||||
|
# monitor=,preferred,auto,1
|
||||||
|
|
||||||
|
# Example for Framework 13 w/ 6K XDR Apple display
|
||||||
|
# monitor = DP-5, 6016x3384@60, auto, 2
|
||||||
|
# monitor = eDP-1, 2880x1920@120, auto, 2
|
||||||
14
config/hypr/rules.conf
Normal file
14
config/hypr/rules.conf
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
layerrule = blur, waybar
|
||||||
|
layerrule = blurpopups, waybar
|
||||||
|
layerrule = ignorezero, waybar
|
||||||
|
layerrule = blur, swaync-control-center
|
||||||
|
layerrule = blur, swaync-notification-window
|
||||||
|
layerrule = ignorezero, swaync-control-center
|
||||||
|
layerrule = ignorezero, swaync-notification-window
|
||||||
|
layerrule = ignorealpha 0.5, swaync-control-center
|
||||||
|
layerrule = ignorealpha 0.5, swaync-notification-window
|
||||||
|
layerrule = blur, swayosd
|
||||||
|
layerrule = ignorezero, swayosd
|
||||||
|
layerrule = blur, walker
|
||||||
|
layerrule = ignorezero, walker
|
||||||
|
layerrule = ignorealpha 0.5, walker
|
||||||
83
config/hypr/scripts/cmd-screenshot
Executable file
83
config/hypr/scripts/cmd-screenshot
Executable file
@@ -0,0 +1,83 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
[[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs
|
||||||
|
OUTPUT_DIR="${OMARCHY_SCREENSHOT_DIR:-${XDG_PICTURES_DIR:-$HOME/Pictures}}"
|
||||||
|
|
||||||
|
if [[ ! -d "$OUTPUT_DIR" ]]; then
|
||||||
|
notify-send "Screenshot directory does not exist: $OUTPUT_DIR" -u critical -t 3000
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
pkill slurp && exit 0
|
||||||
|
|
||||||
|
MODE="${1:-smart}"
|
||||||
|
PROCESSING="${2:-slurp}"
|
||||||
|
|
||||||
|
get_rectangles() {
|
||||||
|
local active_workspace=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .activeWorkspace.id')
|
||||||
|
hyprctl monitors -j | jq -r --arg ws "$active_workspace" '.[] | select(.activeWorkspace.id == ($ws | tonumber)) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"'
|
||||||
|
hyprctl clients -j | jq -r --arg ws "$active_workspace" '.[] | select(.workspace.id == ($ws | tonumber)) | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Select based on mode
|
||||||
|
case "$MODE" in
|
||||||
|
region)
|
||||||
|
wayfreeze & PID=$!
|
||||||
|
sleep .1
|
||||||
|
SELECTION=$(slurp 2>/dev/null)
|
||||||
|
kill $PID 2>/dev/null
|
||||||
|
;;
|
||||||
|
windows)
|
||||||
|
wayfreeze & PID=$!
|
||||||
|
sleep .1
|
||||||
|
SELECTION=$(get_rectangles | slurp -r 2>/dev/null)
|
||||||
|
kill $PID 2>/dev/null
|
||||||
|
;;
|
||||||
|
fullscreen)
|
||||||
|
SELECTION=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"')
|
||||||
|
;;
|
||||||
|
smart|*)
|
||||||
|
RECTS=$(get_rectangles)
|
||||||
|
wayfreeze & PID=$!
|
||||||
|
sleep .1
|
||||||
|
SELECTION=$(echo "$RECTS" | slurp 2>/dev/null)
|
||||||
|
kill $PID 2>/dev/null
|
||||||
|
|
||||||
|
# If the selction area is L * W < 20, we'll assume you were trying to select whichever
|
||||||
|
# window or output it was inside of to prevent accidental 2px snapshots
|
||||||
|
if [[ "$SELECTION" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+)$ ]]; then
|
||||||
|
if (( ${BASH_REMATCH[3]} * ${BASH_REMATCH[4]} < 20 )); then
|
||||||
|
click_x="${BASH_REMATCH[1]}"
|
||||||
|
click_y="${BASH_REMATCH[2]}"
|
||||||
|
|
||||||
|
while IFS= read -r rect; do
|
||||||
|
if [[ "$rect" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+) ]]; then
|
||||||
|
rect_x="${BASH_REMATCH[1]}"
|
||||||
|
rect_y="${BASH_REMATCH[2]}"
|
||||||
|
rect_width="${BASH_REMATCH[3]}"
|
||||||
|
rect_height="${BASH_REMATCH[4]}"
|
||||||
|
|
||||||
|
if (( click_x >= rect_x && click_x < rect_x+rect_width && click_y >= rect_y && click_y < rect_y+rect_height )); then
|
||||||
|
SELECTION="${rect_x},${rect_y} ${rect_width}x${rect_height}"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$RECTS"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
[ -z "$SELECTION" ] && exit 0
|
||||||
|
|
||||||
|
if [[ $PROCESSING == "slurp" ]]; then
|
||||||
|
grim -g "$SELECTION" - |
|
||||||
|
satty --filename - \
|
||||||
|
--output-filename "$OUTPUT_DIR/screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png" \
|
||||||
|
--early-exit \
|
||||||
|
--actions-on-enter save-to-clipboard \
|
||||||
|
--save-after-copy \
|
||||||
|
--copy-command 'wl-copy'
|
||||||
|
else
|
||||||
|
grim -g "$SELECTION" - | wl-copy
|
||||||
|
fi
|
||||||
4
config/hypr/scripts/lock-screen
Executable file
4
config/hypr/scripts/lock-screen
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Lock the screen
|
||||||
|
pidof hyprlock || hyprlock &
|
||||||
22
config/hypr/scripts/suspend_on_battery
Executable file
22
config/hypr/scripts/suspend_on_battery
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Find all battery devices (BAT0, BAT1, etc.)
|
||||||
|
BATTERY_DEVICES=$(upower -e | grep 'BAT')
|
||||||
|
ON_BATTERY=false
|
||||||
|
|
||||||
|
# Iterate through all detected batteries
|
||||||
|
for DEVICE in $BATTERY_DEVICES; do
|
||||||
|
# Get the state for the current battery device
|
||||||
|
STATE=$(upower -i $DEVICE | grep "state" | awk '{print $2}')
|
||||||
|
|
||||||
|
# Check if the state is 'discharging' for ANY battery
|
||||||
|
if [ "$STATE" = "discharging" ]; then
|
||||||
|
ON_BATTERY=true
|
||||||
|
break # Exit the loop as soon as one is found to be discharging
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check the final condition and suspend if true
|
||||||
|
if $ON_BATTERY; then
|
||||||
|
systemctl suspend
|
||||||
|
fi
|
||||||
99
config/swaync/config.json
Normal file
99
config/swaync/config.json
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
{
|
||||||
|
"$schema": "/etc/xdg/swaync/configSchema.json",
|
||||||
|
"ignore-gtk-theme": true,
|
||||||
|
"positionX": "right",
|
||||||
|
"positionY": "top",
|
||||||
|
"layer": "overlay",
|
||||||
|
"control-center-layer": "top",
|
||||||
|
"layer-shell": true,
|
||||||
|
"layer-shell-cover-screen": true,
|
||||||
|
"cssPriority": "highest",
|
||||||
|
"control-center-margin-top": 0,
|
||||||
|
"control-center-margin-bottom": 0,
|
||||||
|
"control-center-margin-right": 0,
|
||||||
|
"control-center-margin-left": 0,
|
||||||
|
"notification-2fa-action": true,
|
||||||
|
"notification-inline-replies": false,
|
||||||
|
"notification-body-image-height": 100,
|
||||||
|
"notification-body-image-width": 200,
|
||||||
|
"timeout": 10,
|
||||||
|
"timeout-low": 5,
|
||||||
|
"timeout-critical": 0,
|
||||||
|
"fit-to-screen": true,
|
||||||
|
"relative-timestamps": true,
|
||||||
|
"control-center-width": 500,
|
||||||
|
"control-center-height": 600,
|
||||||
|
"notification-window-width": 500,
|
||||||
|
"keyboard-shortcuts": true,
|
||||||
|
"notification-grouping": true,
|
||||||
|
"image-visibility": "when-available",
|
||||||
|
"transition-time": 200,
|
||||||
|
"hide-on-clear": false,
|
||||||
|
"hide-on-action": true,
|
||||||
|
"text-empty": "No Notifications",
|
||||||
|
"script-fail-notify": true,
|
||||||
|
"scripts": {
|
||||||
|
"example-script": {
|
||||||
|
"exec": "echo 'Do something...'",
|
||||||
|
"urgency": "Normal"
|
||||||
|
},
|
||||||
|
"example-action-script": {
|
||||||
|
"exec": "echo 'Do something actionable!'",
|
||||||
|
"urgency": "Normal",
|
||||||
|
"run-on": "action"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-visibility": {
|
||||||
|
"example-name": {
|
||||||
|
"state": "muted",
|
||||||
|
"urgency": "Low",
|
||||||
|
"app-name": "Spotify"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"widgets": [
|
||||||
|
"inhibitors",
|
||||||
|
"title",
|
||||||
|
"dnd",
|
||||||
|
"notifications"
|
||||||
|
],
|
||||||
|
"widget-config": {
|
||||||
|
"notifications": {
|
||||||
|
"vexpand": true
|
||||||
|
},
|
||||||
|
"inhibitors": {
|
||||||
|
"text": "Inhibitors",
|
||||||
|
"button-text": "Clear All",
|
||||||
|
"clear-all-button": true
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"text": "Notifications",
|
||||||
|
"clear-all-button": true,
|
||||||
|
"button-text": "Clear All"
|
||||||
|
},
|
||||||
|
"dnd": {
|
||||||
|
"text": "Do Not Disturb"
|
||||||
|
},
|
||||||
|
"label": {
|
||||||
|
"max-lines": 5,
|
||||||
|
"text": "Label Text"
|
||||||
|
},
|
||||||
|
"mpris": {
|
||||||
|
"blacklist": [],
|
||||||
|
"autohide": false,
|
||||||
|
"show-album-art": "always",
|
||||||
|
"loop-carousel": false
|
||||||
|
},
|
||||||
|
"buttons-grid": {
|
||||||
|
"buttons-per-row": 7,
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"label": "直",
|
||||||
|
"type": "toggle",
|
||||||
|
"active": true,
|
||||||
|
"command": "sh -c '[[ $SWAYNC_TOGGLE_STATE == true ]] && nmcli radio wifi on || nmcli radio wifi off'",
|
||||||
|
"update-command": "sh -c '[[ $(nmcli radio wifi) == \"enabled\" ]] && echo true || echo false'"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
749
config/swaync/configSchema.json
Normal file
749
config/swaync/configSchema.json
Normal file
@@ -0,0 +1,749 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"title": "SwayNotificationCenter JSON schema",
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"$schema": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Pointer to the schema against which this document should be validated."
|
||||||
|
},
|
||||||
|
"ignore-gtk-theme": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Unsets the GTK_THEME environment variable, fixing a lot of issues with GTK themes ruining the users custom CSS themes.",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"positionX": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Horizontal position of control center and notification window",
|
||||||
|
"default": "right",
|
||||||
|
"enum": ["right", "left", "center"]
|
||||||
|
},
|
||||||
|
"layer": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Layer of notification window",
|
||||||
|
"default": "overlay",
|
||||||
|
"enum": ["background", "bottom", "top", "overlay"]
|
||||||
|
},
|
||||||
|
"layer-shell": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether or not the windows should be opened as layer-shell surfaces. Note: Requires swaync restart to apply",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"layer-shell-cover-screen": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether or not the windows should cover the whole screen when layer-shell is used. May exceed the height of the monitor if the value is too large. Fixes animations in compositors like Hyprland.",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"cssPriority": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Which GTK priority to use when loading the default and user CSS files. Pick \"user\" to override XDG_CONFIG_HOME/gtk-4.0/gtk.css",
|
||||||
|
"default": "highest",
|
||||||
|
"enum": ["application", "user"]
|
||||||
|
},
|
||||||
|
"positionY": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Vertical position of control center and notification window",
|
||||||
|
"default": "top",
|
||||||
|
"enum": ["top", "center", "bottom"]
|
||||||
|
},
|
||||||
|
"control-center-positionX": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Optional: Horizontal position of the control center. Supersedes positionX if not set to `none`",
|
||||||
|
"default": "none",
|
||||||
|
"enum": ["right", "left", "center", "none"]
|
||||||
|
},
|
||||||
|
"control-center-positionY": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Optional: Vertical position of the control center. Supersedes positionY if not set to `none`",
|
||||||
|
"default": "none",
|
||||||
|
"enum": ["top", "bottom", "none"]
|
||||||
|
},
|
||||||
|
"control-center-margin-top": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "The margin (in pixels) at the top of the control center. 0 to disable",
|
||||||
|
"default": 0
|
||||||
|
},
|
||||||
|
"control-center-margin-bottom": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "The margin (in pixels) at the bottom of the control center. 0 to disable",
|
||||||
|
"default": 0
|
||||||
|
},
|
||||||
|
"control-center-margin-right": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "The margin (in pixels) at the right of the control center. 0 to disable",
|
||||||
|
"default": 0
|
||||||
|
},
|
||||||
|
"control-center-margin-left": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "The margin (in pixels) at the left of the control center. 0 to disable",
|
||||||
|
"default": 0
|
||||||
|
},
|
||||||
|
"control-center-layer": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Layer of control center window",
|
||||||
|
"default": "none",
|
||||||
|
"enum": ["background", "bottom", "top", "overlay", "none"]
|
||||||
|
},
|
||||||
|
"control-center-exclusive-zone": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether or not the control center should follow the compositors exclusive zones. An example would be setting it to \"false\" to cover your panel/dock.",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"notification-2fa-action": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "If each notification should display a 'COPY \"1234\"' action",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"notification-inline-replies": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "If notifications should display a text field to reply if the sender requests it. NOTE: Replying in popup notifications is only available if the compositor supports GTK Layer-Shell ON_DEMAND keyboard interactivity.",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
|
"notification-icon-size": {
|
||||||
|
"type": "integer",
|
||||||
|
"deprecated": true,
|
||||||
|
"description": "deprecated (change the CSS root variable \"--notification-icon-size\"): The notification icon size (in pixels). The app icon size is 1/3",
|
||||||
|
"default": -1
|
||||||
|
},
|
||||||
|
"notification-body-image-height": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "The notification body image height (in pixels)",
|
||||||
|
"default": 100,
|
||||||
|
"minimum": 100
|
||||||
|
},
|
||||||
|
"notification-body-image-width": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "The notification body image width (in pixels)",
|
||||||
|
"default": 200,
|
||||||
|
"minimum": 200
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "The notification timeout for notifications with normal priority",
|
||||||
|
"default": 10
|
||||||
|
},
|
||||||
|
"timeout-low": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "The notification timeout for notifications with low priority",
|
||||||
|
"default": 5
|
||||||
|
},
|
||||||
|
"timeout-critical": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "The notification timeout for notifications with critical priority. 0 to disable",
|
||||||
|
"default": 0
|
||||||
|
},
|
||||||
|
"notification-window-width": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Width of the notification in pixels",
|
||||||
|
"default": 500
|
||||||
|
},
|
||||||
|
"notification-window-height": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Max height of the notification in pixels. -1 to use the full amount of space given by the compositor.",
|
||||||
|
"default": -1
|
||||||
|
},
|
||||||
|
"notification-window-preferred-output": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The preferred output to open the notification window (popup notifications). Can either be the monitor connector name (ex: \"DP-1\"), or the full name, manufacturer model serial (ex: \"Acer Technologies XV272U V 503023B314202\"). If the output is not found, the currently focused one is picked"
|
||||||
|
},
|
||||||
|
"fit-to-screen": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "If the control center should expand to both edges of the screen",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"relative-timestamps": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Display notification timestamps relative to now e.g. \"26 minutes ago\". If false, a local iso8601-formatted absolute timestamp is displayed.",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"control-center-height": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Height of the control center in pixels. A value of -1 means that it will fit to the content. Ignored when 'fit-to-screen' is set to 'true'. Also limited to the height of the monitor, unless 'layer-shell-cover-screen' is set to false.",
|
||||||
|
"default": 500,
|
||||||
|
"minimum": -1
|
||||||
|
},
|
||||||
|
"control-center-width": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Width of the control center in pixels",
|
||||||
|
"default": 500,
|
||||||
|
"minimum": 300
|
||||||
|
},
|
||||||
|
"control-center-preferred-output": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The preferred output to open the control center. Can either be the monitor connector name (ex: \"DP-1\"), or the full name, manufacturer model serial (ex: \"Acer Technologies XV272U V 503023B314202\"). If the output is not found, the currently focused one is picked"
|
||||||
|
},
|
||||||
|
"keyboard-shortcuts": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "If control center should use keyboard shortcuts",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"notification-grouping": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "If notifications should be grouped by app name",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"image-visibility": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The notification image visibility when no icon is available.",
|
||||||
|
"default": "when-available",
|
||||||
|
"enum": ["always", "when-available", "never"]
|
||||||
|
},
|
||||||
|
"transition-time": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "The notification animation duration. 0 to disable",
|
||||||
|
"default": 200
|
||||||
|
},
|
||||||
|
"hide-on-clear": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Hides the control center after pressing \"Clear All\"",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
|
"hide-on-action": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Hides the control center when clicking on notification action",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"text-empty": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Text that appears when there are no notifications to show",
|
||||||
|
"default": "No Notifications"
|
||||||
|
},
|
||||||
|
"script-fail-notify": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Sends a notification if a script fails to run",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Which scripts to check and potentially run for every notification. If the notification doesn't include one of the properties, that property will be ignored. All properties (except for exec) use regex. If all properties match the given notification, the script will be run. Only the first matching script will be run.",
|
||||||
|
"minProperties": 1,
|
||||||
|
"additionalProperties": false,
|
||||||
|
"patternProperties": {
|
||||||
|
"^.{1,}$": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Your script object.",
|
||||||
|
"required": ["exec"],
|
||||||
|
"minProperties": 2,
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"exec": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The script to run. Can also run regular shell commands."
|
||||||
|
},
|
||||||
|
"app-name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The app-name. Uses Regex."
|
||||||
|
},
|
||||||
|
"desktop-entry": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The desktop-entry. Uses Regex."
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The summary of the notification. Uses Regex."
|
||||||
|
},
|
||||||
|
"body": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The body of the notification. Uses Regex."
|
||||||
|
},
|
||||||
|
"urgency": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The urgency of the notification.",
|
||||||
|
"default": "Normal",
|
||||||
|
"enum": ["Low", "Normal", "Critical"]
|
||||||
|
},
|
||||||
|
"category": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Which category the notification belongs to. Uses Regex."
|
||||||
|
},
|
||||||
|
"sound-file": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Which sound file the notification requested. Uses Regex."
|
||||||
|
},
|
||||||
|
"sound-name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Which sound name the notification requested. Uses Regex."
|
||||||
|
},
|
||||||
|
"run-on": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Whether to run the script on an action being activated, or when the notification is received.",
|
||||||
|
"enum": ["action", "receive"],
|
||||||
|
"default": "receive"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-visibility": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Set the visibility of each incoming notification. If the notification doesn't include one of the properties, that property will be ignored. All properties (except for state) use regex. If all properties match the given notification, the notification will be follow the provided state. Only the first matching object will be used.",
|
||||||
|
"minProperties": 1,
|
||||||
|
"additionalProperties": false,
|
||||||
|
"patternProperties": {
|
||||||
|
"^.{1,}$": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Your script object.",
|
||||||
|
"required": ["state"],
|
||||||
|
"minProperties": 2,
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"state": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The notification visibility state.",
|
||||||
|
"default": "enabled",
|
||||||
|
"enum": ["ignored", "muted", "enabled", "transient"]
|
||||||
|
},
|
||||||
|
"app-name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The app-name. Uses Regex."
|
||||||
|
},
|
||||||
|
"desktop-entry": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The desktop-entry. Uses Regex."
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The summary of the notification. Uses Regex."
|
||||||
|
},
|
||||||
|
"body": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The body of the notification. Uses Regex."
|
||||||
|
},
|
||||||
|
"urgency": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The urgency of the notification.",
|
||||||
|
"default": "Normal",
|
||||||
|
"enum": ["Low", "Normal", "Critical"]
|
||||||
|
},
|
||||||
|
"override-urgency": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The new urgency of the notification (optional)",
|
||||||
|
"default": "unset",
|
||||||
|
"enum": ["unset", "low", "normal", "critical"]
|
||||||
|
},
|
||||||
|
"category": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Which category the notification belongs to. Uses Regex."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"widgets": {
|
||||||
|
"type": "array",
|
||||||
|
"uniqueItems": true,
|
||||||
|
"description": "Which order and which widgets to display. If the \"notifications\" widget isn't specified, it will be placed at the bottom.",
|
||||||
|
"default": ["inhibitors", "title", "dnd", "notifications"],
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"$comment": "Sadly can't use regex and enums at the same time. Fix in the future?",
|
||||||
|
"pattern": "^[a-zA-Z0-9_-]{1,}(#[a-zA-Z0-9_-]{1,}){0,1}?$"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"widget-config": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Configure specific widget properties.",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"$comment": "New widgets go here in \"patternProperties\" ↓",
|
||||||
|
"patternProperties": {
|
||||||
|
"notifications": {
|
||||||
|
"$comment": "References the widget structure from \"widgets\" below",
|
||||||
|
"$ref": "#/widgets/notifications"
|
||||||
|
},
|
||||||
|
"^title(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
|
||||||
|
"$comment": "References the widget structure from \"widgets\" below",
|
||||||
|
"$ref": "#/widgets/title"
|
||||||
|
},
|
||||||
|
"^dnd(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
|
||||||
|
"$ref": "#/widgets/dnd"
|
||||||
|
},
|
||||||
|
"^label(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
|
||||||
|
"$ref": "#/widgets/label"
|
||||||
|
},
|
||||||
|
"^mpris(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
|
||||||
|
"$ref": "#/widgets/mpris"
|
||||||
|
},
|
||||||
|
"^buttons-grid(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
|
||||||
|
"$ref": "#/widgets/buttons-grid"
|
||||||
|
},
|
||||||
|
"^menubar(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
|
||||||
|
"$ref": "#/widgets/menubar"
|
||||||
|
},
|
||||||
|
"^slider(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
|
||||||
|
"$ref": "#/widgets/slider"
|
||||||
|
},
|
||||||
|
"^volume(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
|
||||||
|
"$ref": "#/widgets/volume"
|
||||||
|
},
|
||||||
|
"^backlight(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
|
||||||
|
"$ref": "#/widgets/backlight"
|
||||||
|
},
|
||||||
|
"^inhibitors(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
|
||||||
|
"$comment": "References the widget structure from \"widgets\" below",
|
||||||
|
"$ref": "#/widgets/inhibitors"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"widgets": {
|
||||||
|
"$comment": "New widgets go here",
|
||||||
|
"notifications": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Control Center Title Widget",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"vexpand": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether or not the notifications widget should vertically expand or not",
|
||||||
|
"default": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Control Center Title Widget",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"text": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The title of the widget",
|
||||||
|
"default": "Notifications"
|
||||||
|
},
|
||||||
|
"clear-all-button": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether to display a \"Clear All\" button",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"button-text": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "\"Clear All\" button text",
|
||||||
|
"default": "Clear All"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dnd": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Control Center Do Not Disturb Widget",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"text": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The title of the widget",
|
||||||
|
"default": "Do Not Disturb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"label": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "A generic widget that allows the user to add custom text",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"text": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The text content of the widget",
|
||||||
|
"default": "Label Text"
|
||||||
|
},
|
||||||
|
"max-lines": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "The maximum lines",
|
||||||
|
"default": 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mpris": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "A widget that displays multiple music players",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"image-size": {
|
||||||
|
"type": "integer",
|
||||||
|
"deprecated": true,
|
||||||
|
"description": "deprecated (change the CSS root variable \"--mpris-album-art-icon-size\"): The size of the album art",
|
||||||
|
"default": -1
|
||||||
|
},
|
||||||
|
"show-album-art": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Whether or not the album art should be hidden, always visible, or only visible when a valid album art is provided.",
|
||||||
|
"default": "always",
|
||||||
|
"enum": ["always", "when-available", "never"]
|
||||||
|
},
|
||||||
|
"autohide": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether to hide the widget when the player has no metadata.",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
|
"blacklist": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "Audio sources for the mpris widget to ignore.",
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Audio source/app name. Regex allowed."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"loop-carousel": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether to loop through the mpris carousel.",
|
||||||
|
"default": "false"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"buttons-grid": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "A widget to add a grid of buttons that execute shell commands",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"buttons-per-row": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "How many buttons should be shown in a buttons-grid row"
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "A list of actions containing a label and a command",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"label": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Text to be displayed in button",
|
||||||
|
"default": "label"
|
||||||
|
},
|
||||||
|
"command": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Command to be executed on click",
|
||||||
|
"default": ""
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Type of the button; toggle buttons receive the .active css class and an env variable 'SWAYNC_TOGGLE_STATE' is set. See example in the default config.json",
|
||||||
|
"default": "normal",
|
||||||
|
"enum": ["normal", "toggle"]
|
||||||
|
},
|
||||||
|
"update-command": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Command to be executed on visibility change of cc to update the active state of the toggle button (should echo true or false)",
|
||||||
|
"default": ""
|
||||||
|
},
|
||||||
|
"active": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether the toggle button is active as default or not",
|
||||||
|
"default": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"menubar": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "A bar that contains action-buttons and buttons to open a dropdown with action-buttons",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"patternProperties": {
|
||||||
|
"^menu(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "A button that opens a dropdown with action-buttons",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"label": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Text to be displayed in button",
|
||||||
|
"default": "Menu"
|
||||||
|
},
|
||||||
|
"position": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Horizontal position of the button in the bar",
|
||||||
|
"default": "right",
|
||||||
|
"enum": ["right", "left"]
|
||||||
|
},
|
||||||
|
"animation-type": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "slide_down",
|
||||||
|
"description": "Animation type for menu",
|
||||||
|
"enum": ["slide_down", "slide_up", "none"]
|
||||||
|
},
|
||||||
|
"animation-duration": {
|
||||||
|
"type": "integer",
|
||||||
|
"default": 250,
|
||||||
|
"description": "Duration of animation in milliseconds"
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"$ref": "#/widgets/buttons-grid/properties/actions"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"^buttons(#[a-zA-Z0-9_-]{1,}){0,1}?$": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "A list of action-buttons to be displayed in the topbar",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"position": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Horizontal position of the button in the bar",
|
||||||
|
"default": "right",
|
||||||
|
"enum": ["right", "left"]
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"$ref": "#/widgets/buttons-grid/properties/actions"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"slider": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "general slider control",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"label": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Text displayed in front of the slider",
|
||||||
|
"default": "slider"
|
||||||
|
},
|
||||||
|
"cmd_setter": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "command to set the value. Use $value to get the current value",
|
||||||
|
"default": ""
|
||||||
|
},
|
||||||
|
"cmd_getter": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "command to get the actual value. Use $value to get the current value",
|
||||||
|
"default": ""
|
||||||
|
},
|
||||||
|
"min": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "minimum value of the slider range",
|
||||||
|
"default": 0
|
||||||
|
},
|
||||||
|
"max": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "maximum value of the slider range",
|
||||||
|
"default": 100
|
||||||
|
},
|
||||||
|
"min_limit": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "limit minimum value of the slider",
|
||||||
|
"default": 0
|
||||||
|
},
|
||||||
|
"max_limit": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "limit maximum value of the slider",
|
||||||
|
"default": 100
|
||||||
|
},
|
||||||
|
"value_scale": {
|
||||||
|
"type": "integer",
|
||||||
|
"default": 0,
|
||||||
|
"description": "scale small value, slider round digits"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"volume": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Slider to control pulse volume",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"label": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Text displayed in front of the volume slider",
|
||||||
|
"default": "Volume"
|
||||||
|
},
|
||||||
|
"show-per-app": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false,
|
||||||
|
"description": "Show per app volume control"
|
||||||
|
},
|
||||||
|
"show-per-app-icon": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": true,
|
||||||
|
"description": "Show application icon in per app control"
|
||||||
|
},
|
||||||
|
"show-per-app-label": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false,
|
||||||
|
"description": "Show application name in per app control"
|
||||||
|
},
|
||||||
|
"empty-list-label": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "No active sink input",
|
||||||
|
"description": "Text displayed when there are not active sink inputs"
|
||||||
|
},
|
||||||
|
"expand-button-label": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "⇧",
|
||||||
|
"description": "Label displayed on button to show per app volume control"
|
||||||
|
},
|
||||||
|
"collapse-button-label": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "⇩",
|
||||||
|
"description": "Label displayed on button to hide per app volume control"
|
||||||
|
},
|
||||||
|
"icon-size": {
|
||||||
|
"type": "integer",
|
||||||
|
"deprecated": true,
|
||||||
|
"default": -1,
|
||||||
|
"description": "deprecated (change the CSS root variable \"--widget-volume-row-icon-size\"): Size of the application icon in per app volume control"
|
||||||
|
},
|
||||||
|
"animation-type": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "slide_down",
|
||||||
|
"description": "Animation type for menu",
|
||||||
|
"enum": ["slide_down", "slide_up", "none"]
|
||||||
|
},
|
||||||
|
"animation-duration": {
|
||||||
|
"type": "integer",
|
||||||
|
"default": 250,
|
||||||
|
"description": "Duration of animation in milliseconds"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"backlight": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Slider to control monitor brightness",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"label": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Text displayed in front of the backlight slider",
|
||||||
|
"default": "Brightness"
|
||||||
|
},
|
||||||
|
"device": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Name of monitor (find possible devices using `ls /sys/class/backlight` or `ls /sys/class/leds`)",
|
||||||
|
"default": "intel_backlight"
|
||||||
|
},
|
||||||
|
"subsystem": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Kernel subsystem for brightness control",
|
||||||
|
"default": "backlight",
|
||||||
|
"enum": ["backlight", "leds"]
|
||||||
|
},
|
||||||
|
"min": {
|
||||||
|
"type": "integer",
|
||||||
|
"default": 0,
|
||||||
|
"description": "Lowest possible value for brightness"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"inhibitors": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Control Center Inhibitors Widget",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"properties": {
|
||||||
|
"text": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The title of the widget",
|
||||||
|
"default": "Inhibitors"
|
||||||
|
},
|
||||||
|
"clear-all-button": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether to display a \"Clear All\" button",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"button-text": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "\"Clear All\" button text",
|
||||||
|
"default": "Clear All"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
565
config/swaync/style.css
Normal file
565
config/swaync/style.css
Normal file
@@ -0,0 +1,565 @@
|
|||||||
|
:root {
|
||||||
|
--bg-raw: 26, 27, 38;
|
||||||
|
--bg: rgb(var(--bg-raw));
|
||||||
|
--cc-bg: rgba(var(--bg-raw), 0.6);
|
||||||
|
--noti-border-color: #33ccff;
|
||||||
|
--noti-bg: 26, 27, 38;
|
||||||
|
--noti-bg-alpha: 0.8;
|
||||||
|
--noti-bg-darker: rgb(16, 17, 25);
|
||||||
|
--noti-bg-hover: rgb(32, 35, 50);
|
||||||
|
--noti-bg-focus: rgba(40, 44, 62, 0.6);
|
||||||
|
--noti-close-bg: rgb(48, 53, 75);
|
||||||
|
--noti-close-bg-hover: rgb(94, 94, 94);
|
||||||
|
--text-color: rgb(255, 255, 255);
|
||||||
|
--text-color-disabled: rgb(150, 150, 150);
|
||||||
|
--bg-selected: rgb(0, 128, 255);
|
||||||
|
--notification-icon-size: 64px;
|
||||||
|
--notification-app-icon-size: calc(var(--notification-icon-size) / 3);
|
||||||
|
--notification-group-icon-size: 32px;
|
||||||
|
--border: 1px solid var(--noti-border-color);
|
||||||
|
--border-radius: 8px;
|
||||||
|
--border-radius-center: 0;
|
||||||
|
--notification-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3),
|
||||||
|
0 1px 3px 1px rgba(0, 0, 0, 0.7), 0 2px 6px 2px rgba(0, 0, 0, 0.3);
|
||||||
|
--font-size-body: 15px;
|
||||||
|
--font-size-summary: 16px;
|
||||||
|
/* Deprecated variables (because of their typos). Keeeping them around for backwards compatibility. */
|
||||||
|
--hover-tranistion: background 0.15s ease-in-out;
|
||||||
|
--group-collapse-tranistion: opacity 400ms ease-in-out;
|
||||||
|
--hover-transition: var(--hover-tranistion);
|
||||||
|
--group-collapse-transition: var(--group-collapse-tranistion);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fallback for older CSS themes */
|
||||||
|
/* Fallback for older CSS themes */
|
||||||
|
@define-color cc-bg rgba(46, 46, 46, 0.7);
|
||||||
|
@define-color noti-border-color rgba(255, 255, 255, 0.15);
|
||||||
|
@define-color noti-bg rgba(48, 48, 48, 0.8);
|
||||||
|
@define-color noti-bg-opaque rgb(48, 48, 48);
|
||||||
|
@define-color noti-bg-darker rgb(38, 38, 38);
|
||||||
|
@define-color noti-bg-hover rgb(56, 56, 56);
|
||||||
|
@define-color noti-bg-hover-opaque rgb(56, 56, 56);
|
||||||
|
@define-color noti-bg-focus rgba(68, 68, 68, 0.6);
|
||||||
|
@define-color noti-close-bg rgba(255, 255, 255, 0.1);
|
||||||
|
@define-color noti-close-bg-hover rgba(255, 255, 255, 0.15);
|
||||||
|
@define-color text-color rgb(255, 255, 255);
|
||||||
|
@define-color text-color-disabled rgb(150, 150, 150);
|
||||||
|
@define-color bg-selected rgb(0, 128, 255);
|
||||||
|
notificationwindow, blankwindow, blankwindow {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close-button {
|
||||||
|
/* The notification Close Button */
|
||||||
|
background: var(--noti-close-bg);
|
||||||
|
color: var(--text-color);
|
||||||
|
text-shadow: none;
|
||||||
|
padding: 0;
|
||||||
|
border-radius: 100%;
|
||||||
|
margin-top: 8px;
|
||||||
|
margin-right: 8px;
|
||||||
|
box-shadow: none;
|
||||||
|
border: none;
|
||||||
|
min-width: 24px;
|
||||||
|
min-height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close-button:hover {
|
||||||
|
box-shadow: none;
|
||||||
|
background: var(--noti-close-bg-hover);
|
||||||
|
transition: var(--hover-tranistion);
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row {
|
||||||
|
background: none;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row:focus {
|
||||||
|
background: var(--noti-bg-focus);
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background {
|
||||||
|
padding: 6px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification {
|
||||||
|
/* The actual notification */
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
border: var(--border);
|
||||||
|
padding: 0;
|
||||||
|
transition: var(--hover-tranistion);
|
||||||
|
background: rgba(var(--noti-bg), var(--noti-bg-alpha));
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification.low {
|
||||||
|
/* Low Priority Notification */
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification.normal {
|
||||||
|
/* Normal Priority Notification */
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification.critical {
|
||||||
|
/* Critical Priority Notification */
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action {
|
||||||
|
/* The large action that also displays the notification summary and body */
|
||||||
|
padding: 12px;
|
||||||
|
margin: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
color: var(--text-color);
|
||||||
|
transition: var(--hover-tranistion);
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action:hover {
|
||||||
|
-gtk-icon-filter: none;
|
||||||
|
background: var(--noti-bg-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action:not(:only-child) {
|
||||||
|
/* When alternative actions are visible */
|
||||||
|
border-bottom-left-radius: 0px;
|
||||||
|
border-bottom-right-radius: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action .notification-content {
|
||||||
|
background: transparent;
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action .notification-content .image {
|
||||||
|
/* Notification Primary Image */
|
||||||
|
-gtk-icon-filter: none;
|
||||||
|
-gtk-icon-size: var(--notification-icon-size);
|
||||||
|
border-radius: 100px;
|
||||||
|
/* Size in px */
|
||||||
|
margin: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action .notification-content .app-icon {
|
||||||
|
/* Notification app icon (only visible when the primary image is set) */
|
||||||
|
-gtk-icon-filter: none;
|
||||||
|
-gtk-icon-size: var(--notification-app-icon-size);
|
||||||
|
-gtk-icon-shadow: 0 1px 4px black;
|
||||||
|
margin: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action .notification-content .text-box label {
|
||||||
|
/* Fixes base GTK 4 CSS setting a filter of opacity 50% for some odd reason */
|
||||||
|
filter: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .summary {
|
||||||
|
/* Notification summary/title */
|
||||||
|
font-size: var(--font-size-summary);
|
||||||
|
font-weight: bold;
|
||||||
|
background: transparent;
|
||||||
|
color: var(--text-color);
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .time {
|
||||||
|
/* Notification time-ago */
|
||||||
|
font-size: var(--font-size-summary);
|
||||||
|
font-weight: bold;
|
||||||
|
background: transparent;
|
||||||
|
color: var(--text-color);
|
||||||
|
text-shadow: none;
|
||||||
|
margin-right: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .body {
|
||||||
|
/* Notification body */
|
||||||
|
font-size: var(--font-size-body);
|
||||||
|
font-weight: normal;
|
||||||
|
background: transparent;
|
||||||
|
color: var(--text-color);
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action .notification-content progressbar {
|
||||||
|
/* The optional notification progress bar */
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action .notification-content .body-image {
|
||||||
|
/* The "extra" optional bottom notification image */
|
||||||
|
margin-top: 4px;
|
||||||
|
background-color: white;
|
||||||
|
-gtk-icon-filter: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply {
|
||||||
|
/* The inline reply section */
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-entry {
|
||||||
|
background: var(--noti-bg-darker);
|
||||||
|
color: var(--text-color);
|
||||||
|
caret-color: var(--text-color);
|
||||||
|
border: var(--border);
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button {
|
||||||
|
margin-left: 4px;
|
||||||
|
background: rgba(var(--noti-bg), var(--noti-bg-alpha));
|
||||||
|
border: var(--border);
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
color: var(--text-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button:disabled {
|
||||||
|
background: initial;
|
||||||
|
color: var(--text-color-disabled);
|
||||||
|
border: var(--border);
|
||||||
|
border-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button:hover {
|
||||||
|
background: var(--noti-bg-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-alt-actions {
|
||||||
|
background: none;
|
||||||
|
border-bottom-left-radius: var(--border-radius);
|
||||||
|
border-bottom-right-radius: var(--border-radius);
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-action {
|
||||||
|
/* The alternative actions below the default action */
|
||||||
|
margin: 4px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-row .notification-background .notification .notification-action > button {
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
color: var(--text-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group {
|
||||||
|
/* Styling only for Grouped Notifications */
|
||||||
|
transition: opacity 200ms ease-in-out;
|
||||||
|
/* The groups close button */
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group:focus {
|
||||||
|
background: var(--noti-bg-focus);
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group.low {
|
||||||
|
/* Low Priority Group */
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group.normal {
|
||||||
|
/* Low Priority Group */
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group.critical {
|
||||||
|
/* Low Priority Group */
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group .notification-group-close-button .close-button {
|
||||||
|
margin: 12px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group .notification-group-buttons, .notification-group .notification-group-headers {
|
||||||
|
margin: 0 16px;
|
||||||
|
color: var(--text-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group .notification-group-headers {
|
||||||
|
/* Notification Group Headers */
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group .notification-group-headers .notification-group-icon {
|
||||||
|
color: var(--text-color);
|
||||||
|
-gtk-icon-size: var(--notification-group-icon-size);
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group .notification-group-headers .notification-group-header {
|
||||||
|
color: var(--text-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group .notification-group-buttons {
|
||||||
|
/* Notification Group Buttons */
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group.collapsed {
|
||||||
|
/* When another group is expanded, lower the opacity of the collapsed ones */
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group.collapsed.not-expanded {
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group.collapsed .notification-row .notification {
|
||||||
|
background-color: rgba(var(--noti-bg), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group.collapsed .notification-row:not(:last-child) {
|
||||||
|
/* Top notification in stack */
|
||||||
|
/* Set lower stacked notifications opacity to 0 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group.collapsed .notification-row:not(:last-child) .notification-action,
|
||||||
|
.notification-group.collapsed .notification-row:not(:last-child) .notification-default-action {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification-group.collapsed:hover .notification-row:not(:only-child) .notification {
|
||||||
|
background-color: var(--noti-bg-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center {
|
||||||
|
/* The Control Center which contains the old notifications + widgets */
|
||||||
|
background: var(--cc-bg);
|
||||||
|
|
||||||
|
color: var(--text-color);
|
||||||
|
border-radius: var(--border-radius-center);
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center .control-center-list-placeholder {
|
||||||
|
/* The placeholder when there are no notifications */
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center .control-center-list {
|
||||||
|
/* List of notifications */
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center .control-center-list .notification {
|
||||||
|
box-shadow: var(--notification-shadow);
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center .control-center-list .notification .notification-default-action,
|
||||||
|
.control-center .control-center-list .notification .notification-action {
|
||||||
|
transition: var(--group-collapse-tranistion), var(--hover-tranistion);
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-center .control-center-list .notification .notification-default-action:hover,
|
||||||
|
.control-center .control-center-list .notification .notification-action:hover {
|
||||||
|
background-color: var(--noti-bg-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.blank-window {
|
||||||
|
/* Window behind control center and on all other monitors */
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-notifications .notification {
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Widgets ***/
|
||||||
|
.widget {
|
||||||
|
margin: 8px;
|
||||||
|
padding: 8px;
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Title widget */
|
||||||
|
.widget-title > label {
|
||||||
|
margin-right: 8px;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-title > button {
|
||||||
|
margin-left: 8px;
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DND widget */
|
||||||
|
.widget-dnd label {
|
||||||
|
color: var(--text-color);
|
||||||
|
margin-right: 8px;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-dnd switch {
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-dnd switch slider {
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Label widget */
|
||||||
|
.widget-label > label {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mpris widget */
|
||||||
|
:root {
|
||||||
|
--mpris-album-art-overlay: rgba(0, 0, 0, 0.55);
|
||||||
|
--mpris-button-hover: rgba(0, 0, 0, 0.5);
|
||||||
|
--mpris-album-art-icon-size: 96px;
|
||||||
|
--mpris-album-art-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75);
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-mpris {
|
||||||
|
padding: 0;
|
||||||
|
/* The parent to all players */
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-mpris .widget-mpris-player {
|
||||||
|
margin: 16px 20px;
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
box-shadow: var(--mpris-album-art-shadow);
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-mpris .widget-mpris-player .mpris-background {
|
||||||
|
filter: blur(10px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-mpris .widget-mpris-player .mpris-overlay {
|
||||||
|
padding: 16px;
|
||||||
|
background-color: var(--mpris-album-art-overlay);
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-mpris .widget-mpris-player .mpris-overlay button:hover {
|
||||||
|
/* The media player buttons (play, pause, next, etc...) */
|
||||||
|
background: var(--noti-bg-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-album-art {
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
box-shadow: var(--mpris-album-art-shadow);
|
||||||
|
-gtk-icon-size: var(--mpris-album-art-icon-size);
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-title {
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-subtitle {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-mpris .widget-mpris-player .mpris-overlay > box > button {
|
||||||
|
/* Change player control buttons */
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-mpris .widget-mpris-player .mpris-overlay > box > button:hover {
|
||||||
|
background-color: var(--mpris-button-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-mpris > box > button {
|
||||||
|
/* Change player side buttons */
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-mpris > box > button:disabled {
|
||||||
|
/* Change player side buttons insensitive */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Buttons widget */
|
||||||
|
.widget-buttons-grid flowboxchild > button {
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-buttons-grid flowboxchild > button.toggle:checked {
|
||||||
|
/* style given to the active toggle button */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Menubar widget */
|
||||||
|
.widget-menubar {
|
||||||
|
/* The revealer buttons */
|
||||||
|
/* .AnyName { Name defined in config after #
|
||||||
|
background-color: rgba(var(--noti-bg), 1.0);
|
||||||
|
padding: 8px;
|
||||||
|
margin: 8px;
|
||||||
|
border-radius: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.AnyName>button {
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.AnyName>button:hover {
|
||||||
|
background-color: var(--noti-bg-hover);
|
||||||
|
} */
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-menubar > .menu-button-bar {
|
||||||
|
/* The left button container */
|
||||||
|
/* The right button container */
|
||||||
|
/* The left and right button container */
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-menubar > .menu-button-bar > .start {
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-menubar > .menu-button-bar > .end {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-menubar > .menu-button-bar > .widget-menubar-container button {
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
margin: 0 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-menubar > revealer * {
|
||||||
|
margin-top: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-menubar > revealer * button {
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
margin: 8px;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-menubar > revealer * button:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Volume widget */
|
||||||
|
:root {
|
||||||
|
--widget-volume-row-icon-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Each row app icon */
|
||||||
|
.widget-volume row image {
|
||||||
|
-gtk-icon-size: var(--widget-volume-row-icon-size);
|
||||||
|
}
|
||||||
|
|
||||||
|
.per-app-volume {
|
||||||
|
background-color: var(--noti-bg-alt);
|
||||||
|
margin: 8px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Slider widget */
|
||||||
|
.widget-slider label {
|
||||||
|
font-size: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Backlight widget */
|
||||||
|
/* Inhibitors widget */
|
||||||
|
.widget-inhibitors > label {
|
||||||
|
margin-right: 8px;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-inhibitors > button {
|
||||||
|
margin-left: 8px;
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
}
|
||||||
6
config/swayosd/style.css
Normal file
6
config/swayosd/style.css
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
window#osd {
|
||||||
|
background: rgba(26, 27, 38, 0.6);
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid #33ccff;
|
||||||
|
}
|
||||||
|
|
||||||
159
config/walker/config.toml
Normal file
159
config/walker/config.toml
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
force_keyboard_focus = false # forces keyboard forcus to stay in Walker
|
||||||
|
close_when_open = true # close walker when invoking while already opened
|
||||||
|
click_to_close = true # closes walker if clicking outside of the main content area
|
||||||
|
selection_wrap = false # wrap list if at bottom or top
|
||||||
|
global_argument_delimiter = "#" # query: firefox#https://benz.dev => part after delimiter will be ignored when querying. this should be the same as in the elephant config
|
||||||
|
exact_search_prefix = "'" # disable fuzzy searching
|
||||||
|
theme = "hyprtron" # theme to use
|
||||||
|
disable_mouse = false # disable mouse (on input and list only)
|
||||||
|
debug = false # enables debug printing for some stuff, f.e. keybinds
|
||||||
|
additional_theme_location = "~/.config/walker/themes"
|
||||||
|
|
||||||
|
[shell]
|
||||||
|
anchor_top = true
|
||||||
|
anchor_bottom = true
|
||||||
|
anchor_left = true
|
||||||
|
anchor_right = true
|
||||||
|
|
||||||
|
[placeholders]
|
||||||
|
"default" = { input = "Search", list = "No Results" } # placeholders for input and empty list, key is the providers name, so f.e. "desktopapplications" or "menus:other"
|
||||||
|
|
||||||
|
[keybinds]
|
||||||
|
close = ["Escape"]
|
||||||
|
next = ["Down"]
|
||||||
|
previous = ["Up"]
|
||||||
|
toggle_exact = ["ctrl e"]
|
||||||
|
resume_last_query = ["ctrl r"]
|
||||||
|
quick_activate = ["F1", "F2", "F3", "F4"]
|
||||||
|
|
||||||
|
[providers]
|
||||||
|
default = [
|
||||||
|
"desktopapplications",
|
||||||
|
"calc",
|
||||||
|
"runner",
|
||||||
|
"menus",
|
||||||
|
"websearch",
|
||||||
|
] # providers to be queried by default
|
||||||
|
empty = ["desktopapplications"] # providers to be queried when query is empty
|
||||||
|
max_results = 50 # global max results
|
||||||
|
|
||||||
|
[providers.sets] # define your own defaults/empty sets of providers
|
||||||
|
[providers.max_results_provider] # define max results per provider in here
|
||||||
|
|
||||||
|
[[providers.prefixes]]
|
||||||
|
prefix = ";"
|
||||||
|
provider = "providerlist"
|
||||||
|
|
||||||
|
[[providers.prefixes]]
|
||||||
|
prefix = ">"
|
||||||
|
provider = "runner"
|
||||||
|
|
||||||
|
[[providers.prefixes]]
|
||||||
|
prefix = "/"
|
||||||
|
provider = "files"
|
||||||
|
|
||||||
|
[[providers.prefixes]]
|
||||||
|
prefix = "."
|
||||||
|
provider = "symbols"
|
||||||
|
|
||||||
|
[[providers.prefixes]]
|
||||||
|
prefix = "!"
|
||||||
|
provider = "todo"
|
||||||
|
|
||||||
|
[[providers.prefixes]]
|
||||||
|
prefix = "="
|
||||||
|
provider = "calc"
|
||||||
|
|
||||||
|
[[providers.prefixes]]
|
||||||
|
prefix = "@"
|
||||||
|
provider = "websearch"
|
||||||
|
|
||||||
|
[[providers.prefixes]]
|
||||||
|
prefix = ":"
|
||||||
|
provider = "clipboard"
|
||||||
|
|
||||||
|
[providers.clipboard]
|
||||||
|
time_format = "%d.%m. - %H:%M" # format for the clipboard item date
|
||||||
|
|
||||||
|
[providers.actions] # This will be MERGED/OVEWRITTEN with what the user specifies
|
||||||
|
fallback = [
|
||||||
|
{ action = "menus:open", label = "open", after = "Nothing" },
|
||||||
|
{ action = "menus:default", label = "run", after = "Close" },
|
||||||
|
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "AsyncReload" },
|
||||||
|
]
|
||||||
|
|
||||||
|
dmenu = [{ action = "select", default = true, bind = "Return" }]
|
||||||
|
|
||||||
|
providerlist = [
|
||||||
|
{ action = "activate", default = true, bind = "Return", after = "ClearReload" },
|
||||||
|
]
|
||||||
|
|
||||||
|
bluetooth = [
|
||||||
|
{ action = "find", global = true, bind = "ctrl f", after = "AsyncClearReload" },
|
||||||
|
{ action = "trust", bind = "ctrl t", after = "AsyncReload" },
|
||||||
|
{ action = "untrust", bind = "ctrl t", after = "AsyncReload" },
|
||||||
|
{ action = "pair", bind = "Return", after = "AsyncReload" },
|
||||||
|
{ action = "remove", bind = "ctrl d", after = "AsyncReload" },
|
||||||
|
{ action = "connect", bind = "Return", after = "AsyncReload" },
|
||||||
|
{ action = "disconnect", bind = "Return", after = "AsyncReload" },
|
||||||
|
]
|
||||||
|
|
||||||
|
archlinuxpkgs = [
|
||||||
|
{ action = "install", bind = "Return", default = true },
|
||||||
|
{ action = "remove", bind = "Return" },
|
||||||
|
]
|
||||||
|
|
||||||
|
calc = [
|
||||||
|
{ action = "copy", default = true, bind = "Return" },
|
||||||
|
{ action = "delete", bind = "ctrl d", after = "AsyncReload" },
|
||||||
|
{ action = "save", bind = "ctrl s", after = "AsyncClearReload" },
|
||||||
|
]
|
||||||
|
|
||||||
|
websearch = [{ action = "search", default = true, bind = "Return" }]
|
||||||
|
|
||||||
|
desktopapplications = [
|
||||||
|
{ action = "start", default = true, bind = "Return" },
|
||||||
|
{ action = "start:keep", label = "open+next", bind = "shift Return", after = "KeepOpen" },
|
||||||
|
{ action = "pin", bind = "ctrl p", after = "AsyncReload" },
|
||||||
|
{ action = "unpin", bind = "ctrl p", after = "AsyncReload" },
|
||||||
|
{ action = "pinup", bind = "ctrl n", after = "AsyncReload" },
|
||||||
|
{ action = "pindown", bind = "ctrl m", after = "AsyncReload" },
|
||||||
|
]
|
||||||
|
|
||||||
|
files = [
|
||||||
|
{ action = "open", default = true, bind = "Return" },
|
||||||
|
{ action = "opendir", label = "open dir", bind = "ctrl Return" },
|
||||||
|
{ action = "copypath", label = "copy path", bind = "ctrl shift c" },
|
||||||
|
{ action = "copyfile", label = "copy file", bind = "ctrl c" },
|
||||||
|
]
|
||||||
|
|
||||||
|
todo = [
|
||||||
|
{ action = "save", default = true, bind = "Return", after = "ClearReload" },
|
||||||
|
{ action = "delete", bind = "ctrl d", after = "ClearReload" },
|
||||||
|
{ action = "active", bind = "Return", after = "ClearReload" },
|
||||||
|
{ action = "inactive", bind = "Return", after = "ClearReload" },
|
||||||
|
{ action = "done", bind = "ctrl f", after = "ClearReload" },
|
||||||
|
{ action = "clear", bind = "ctrl x", after = "ClearReload", global = true },
|
||||||
|
]
|
||||||
|
|
||||||
|
runner = [
|
||||||
|
{ action = "run", default = true, bind = "Return" },
|
||||||
|
{ action = "runterminal", label = "run in terminal", bind = "shift Return" },
|
||||||
|
]
|
||||||
|
|
||||||
|
symbols = [
|
||||||
|
{ action = "run_cmd", label = "select", default = true, bind = "Return" },
|
||||||
|
]
|
||||||
|
|
||||||
|
unicode = [
|
||||||
|
{ action = "run_cmd", label = "select", default = true, bind = "Return" },
|
||||||
|
]
|
||||||
|
|
||||||
|
clipboard = [
|
||||||
|
{ action = "copy", default = true, bind = "Return" },
|
||||||
|
{ action = "remove", bind = "ctrl d", after = "AsyncClearReload" },
|
||||||
|
{ action = "remove_all", global = true, label = "clear", bind = "ctrl shift d", after = "AsyncClearReload" },
|
||||||
|
{ action = "toggle_images", global = true, label = "toggle images", bind = "ctrl i", after = "AsyncClearReload" },
|
||||||
|
{ action = "edit", bind = "ctrl o" },
|
||||||
|
]
|
||||||
|
|
||||||
184
config/walker/themes/hyprtron/style.css
Normal file
184
config/walker/themes/hyprtron/style.css
Normal file
@@ -0,0 +1,184 @@
|
|||||||
|
@import "../../../../.local/share/hyprtron/theme/style.css";
|
||||||
|
@define-color window_bg_color #1f1f28;
|
||||||
|
@define-color accent_bg_color #54546d;
|
||||||
|
@define-color theme_fg_color #f2ecbc;
|
||||||
|
@define-color error_bg_color #C34043;
|
||||||
|
@define-color error_fg_color #DCD7BA;
|
||||||
|
|
||||||
|
* {
|
||||||
|
all: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.normal-icons {
|
||||||
|
-gtk-icon-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.large-icons {
|
||||||
|
-gtk-icon-size: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
scrollbar {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box-wrapper {
|
||||||
|
box-shadow:
|
||||||
|
0 19px 38px rgba(0, 0, 0, 0.3),
|
||||||
|
0 15px 12px rgba(0, 0, 0, 0.22);
|
||||||
|
/*background: @window_bg_color;*/
|
||||||
|
background: @background-t0;
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
border: 1px solid @border;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-box,
|
||||||
|
.elephant-hint,
|
||||||
|
.placeholder {
|
||||||
|
color: @theme_fg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box {
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-container {
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input placeholder {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input {
|
||||||
|
caret-color: @theme_fg_color;
|
||||||
|
background: lighter(@window_bg_color);
|
||||||
|
padding: 10px;
|
||||||
|
color: @theme_fg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input:focus,
|
||||||
|
.input:active {
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-container {
|
||||||
|
}
|
||||||
|
|
||||||
|
.placeholder {
|
||||||
|
}
|
||||||
|
|
||||||
|
.scroll {
|
||||||
|
}
|
||||||
|
|
||||||
|
.list {
|
||||||
|
color: @theme_fg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
child {
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-box {
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-quick-activation {
|
||||||
|
margin-left: 10px;
|
||||||
|
background: alpha(@accent_bg_color, 0.25);
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
child:hover .item-box,
|
||||||
|
child:selected .item-box {
|
||||||
|
background: alpha(@accent_bg_color, 0.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-text-box {
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-text {
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-subtext {
|
||||||
|
font-size: 12px;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-image,
|
||||||
|
.item-image-text {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-image-text {
|
||||||
|
font-size: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview {
|
||||||
|
border: 1px solid alpha(@accent_bg_color, 0.25);
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 10px;
|
||||||
|
color: @theme_fg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calc .item-text {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calc .item-subtext {
|
||||||
|
}
|
||||||
|
|
||||||
|
.symbols .item-image {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.todo.done .item-text-box {
|
||||||
|
opacity: 0.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
.todo.urgent {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.todo.active {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bluetooth.disconnected {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview .large-icons {
|
||||||
|
-gtk-icon-size: 64px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.keybinds-wrapper {
|
||||||
|
border-top: 1px solid lighter(@window_bg_color);
|
||||||
|
font-size: 12px;
|
||||||
|
opacity: 0.5;
|
||||||
|
color: @theme_fg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.keybinds {
|
||||||
|
}
|
||||||
|
|
||||||
|
.keybind {
|
||||||
|
}
|
||||||
|
|
||||||
|
.keybind-bind {
|
||||||
|
/* color: lighter(@window_bg_color); */
|
||||||
|
font-weight: bold;
|
||||||
|
text-transform: lowercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.keybind-label {
|
||||||
|
}
|
||||||
|
|
||||||
|
.error {
|
||||||
|
padding: 10px;
|
||||||
|
background: @error_bg_color;
|
||||||
|
color: @error_fg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.current {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
132
config/waybar/config.jsonc
Normal file
132
config/waybar/config.jsonc
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
{
|
||||||
|
"reload_style_on_change": true,
|
||||||
|
"layer": "top",
|
||||||
|
"position": "top",
|
||||||
|
"spacing": 0,
|
||||||
|
"height": 26,
|
||||||
|
"margin-top": 0,
|
||||||
|
// "modules-left": ["custom/omarchy", "hyprland/workspaces"],
|
||||||
|
"modules-left": ["hyprland/workspaces"],
|
||||||
|
"modules-center": ["clock", "custom/update", "custom/screenrecording-indicator"],
|
||||||
|
"modules-right": [
|
||||||
|
"tray",
|
||||||
|
"bluetooth",
|
||||||
|
"network",
|
||||||
|
"pulseaudio",
|
||||||
|
"cpu",
|
||||||
|
"battery"
|
||||||
|
],
|
||||||
|
"hyprland/workspaces": {
|
||||||
|
"on-click": "activate",
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"default": "",
|
||||||
|
"1": "1",
|
||||||
|
"2": "2",
|
||||||
|
"3": "3",
|
||||||
|
"4": "4",
|
||||||
|
"5": "5",
|
||||||
|
"6": "6",
|
||||||
|
"7": "7",
|
||||||
|
"8": "8",
|
||||||
|
"9": "9",
|
||||||
|
"active": ""
|
||||||
|
},
|
||||||
|
"persistent-workspaces": {
|
||||||
|
"1": [],
|
||||||
|
"2": [],
|
||||||
|
"3": [],
|
||||||
|
"4": [],
|
||||||
|
"5": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"custom/omarchy": {
|
||||||
|
"format": "<span font='omarchy'>Vektron</span>",
|
||||||
|
"on-click": "omarchy-menu",
|
||||||
|
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
|
||||||
|
},
|
||||||
|
"custom/update": {
|
||||||
|
"format": "",
|
||||||
|
"exec": "omarchy-update-available",
|
||||||
|
"on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
|
||||||
|
"tooltip-format": "Omarchy update available",
|
||||||
|
"signal": 7,
|
||||||
|
"interval": 3600
|
||||||
|
},
|
||||||
|
|
||||||
|
"cpu": {
|
||||||
|
"interval": 5,
|
||||||
|
"format": "",
|
||||||
|
"on-click": "$TERMINAL -e btop"
|
||||||
|
},
|
||||||
|
"clock": {
|
||||||
|
"locale": "de_DE",
|
||||||
|
"format": "{:L%A %H:%M}",
|
||||||
|
"format-alt": "{:L%d %B W%V %Y}",
|
||||||
|
"tooltip": false,
|
||||||
|
"on-click-right": "omarchy-cmd-tzupdate"
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"format-icons": ["", "", "", "", ""],
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-wifi": "{icon}",
|
||||||
|
"format-ethernet": "",
|
||||||
|
"format-disconnected": "",
|
||||||
|
"tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
|
||||||
|
"tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
|
||||||
|
"tooltip-format-disconnected": "Disconnected",
|
||||||
|
"interval": 3,
|
||||||
|
"spacing": 1,
|
||||||
|
"on-click": "omarchy-launch-wifi"
|
||||||
|
},
|
||||||
|
"battery": {
|
||||||
|
"justify": "center",
|
||||||
|
"format": "{icon} {capacity}%",
|
||||||
|
"format-plugged": "",
|
||||||
|
"format-icons": {
|
||||||
|
"charging": ["", "", "", "", "", "", "", "", "", ""],
|
||||||
|
"default": ["", "", "", "", "", "", "", "", "", ""]
|
||||||
|
},
|
||||||
|
"format-full": "",
|
||||||
|
"tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%",
|
||||||
|
"tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%",
|
||||||
|
"interval": 5,
|
||||||
|
// "on-click": "omarchy-menu power",
|
||||||
|
"states": {
|
||||||
|
"warning": 20,
|
||||||
|
"critical": 10
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bluetooth": {
|
||||||
|
"format": "",
|
||||||
|
"format-disabled": "",
|
||||||
|
"format-connected": "",
|
||||||
|
"tooltip-format": "Devices connected: {num_connections}",
|
||||||
|
"on-click": "blueberry"
|
||||||
|
},
|
||||||
|
"pulseaudio": {
|
||||||
|
"format": "{icon}",
|
||||||
|
"on-click": "$TERMINAL --class=Wiremix -e wiremix",
|
||||||
|
"on-click-right": "pamixer -t",
|
||||||
|
"tooltip-format": "Playing at {volume}%",
|
||||||
|
"scroll-step": 5,
|
||||||
|
"format-muted": "",
|
||||||
|
"format-icons": {
|
||||||
|
"default": ["", "", ""]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"custom/expand-icon": {
|
||||||
|
"format": " ",
|
||||||
|
"tooltip": false
|
||||||
|
},
|
||||||
|
"custom/screenrecording-indicator": {
|
||||||
|
"on-click": "omarchy-cmd-screenrecord",
|
||||||
|
"exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh",
|
||||||
|
"signal": 8,
|
||||||
|
"return-type": "json"
|
||||||
|
},
|
||||||
|
"tray": {
|
||||||
|
"icon-size": 16,
|
||||||
|
"spacing": 14
|
||||||
|
}
|
||||||
|
}
|
||||||
86
config/waybar/style.css
Normal file
86
config/waybar/style.css
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
@define-color foreground #FFFFFF;
|
||||||
|
@define-color background rgba(26, 27, 38, 0.6);
|
||||||
|
|
||||||
|
* {
|
||||||
|
color: @foreground;
|
||||||
|
border: none;
|
||||||
|
border-radius: 0;
|
||||||
|
min-height: 0;
|
||||||
|
font-family: Mononoki Nerd Font;
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces, #clock {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar {
|
||||||
|
background-color: @background;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modules-left, .modules-right, #clock {
|
||||||
|
padding: 4px 0;
|
||||||
|
margin: 0 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
all: initial;
|
||||||
|
padding: 0 6px;
|
||||||
|
margin: 0 1.5px;
|
||||||
|
min-width: 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.empty {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray,
|
||||||
|
#cpu,
|
||||||
|
#battery,
|
||||||
|
#network,
|
||||||
|
#bluetooth,
|
||||||
|
#pulseaudio,
|
||||||
|
#custom-omarchy,
|
||||||
|
#custom-screenrecording-indicator,
|
||||||
|
#custom-update {
|
||||||
|
min-width: 12px;
|
||||||
|
margin: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bluetooth {
|
||||||
|
margin: 0 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray {
|
||||||
|
padding-right: 16px;
|
||||||
|
border-right: 1px solid @foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-expand-icon {
|
||||||
|
margin-right: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
tooltip {
|
||||||
|
padding: 2px;
|
||||||
|
background-color: @background;
|
||||||
|
border: 1px solid #33ccff;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-update {
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-screenrecording-indicator {
|
||||||
|
min-width: 12px;
|
||||||
|
margin-left: 8.75px;
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-screenrecording-indicator.active {
|
||||||
|
color: #a55555;
|
||||||
|
}
|
||||||
9
local/share/hyprtron/theme/style.css
Normal file
9
local/share/hyprtron/theme/style.css
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
@define-color background rgb(26, 27, 38);
|
||||||
|
@define-color background-t0 alpha(@background, 0.8);
|
||||||
|
@define-color background-t1 alpha(@background, 0.7);
|
||||||
|
@define-color background-t2 alpha(@background, 0.6);
|
||||||
|
@define-color border #33ccff;
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--border-radius: 8px;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user