Add hyprland/wayland config
This commit is contained in:
		| @@ -3,34 +3,28 @@ | ||||
| "zsh/.zimrc" = { target = "~/.zimrc", type = "symbolic" } | ||||
|  | ||||
| [nvim.files] | ||||
| "nvim/init.lua" = { target = "~/.config/nvim/init.lua", type = "symbolic" } | ||||
| "nvim/lua" = { target = "~/.config/nvim/lua", type = "symbolic" } | ||||
| "nvim" = { target = "~/.config/nvim", type = "symbolic" } | ||||
|  | ||||
| [git.files] | ||||
| "git/.gitconfig" = { target = "~/.config/git/config", type = "symbolic" } | ||||
| "git/.gitmessage" = { target = "~/.config/git/message", type = "symbolic" } | ||||
| "git/.gitattributes" = { target = "~/.config/git/attributes", type = "symbolic" } | ||||
|  | ||||
| [grobi.files] | ||||
| "grobi/grobi.conf" = { target = "~/.config/grobi.conf", type = "symbolic" } | ||||
|  | ||||
| [gnupg.files] | ||||
| "gnupg/gpg.conf" = { target = "~/.gnupg/gpg.conf", type = "symbolic" } | ||||
| "gnupg/gpg-agent.conf" = { target = "~/.gnupg/gpg-agent.conf", type = "symbolic" } | ||||
|  | ||||
| [i3.files] | ||||
| "i3/config" = { target = "~/.config/i3/config", type = "symbolic" } | ||||
| "i3/layouts" = { target = "~/.config/i3/layouts", type = "symbolic" } | ||||
| "i3/scripts" = { target = "~/.config/i3/scripts", type = "symbolic" } | ||||
| [kanshi.files] | ||||
| "kanshi" = { target = "~/.config/kanshi", type = "symbolic" } | ||||
|  | ||||
| [picom.files] | ||||
| "picom/picom.conf" = { target = "~/.config/picom.conf", type = "symbolic" } | ||||
| [hyprland.files] | ||||
| "hyprland" = { target = "~/.config/hypr", type = "symbolic" } | ||||
|  | ||||
| [polybar.files] | ||||
| "polybar/config.ini" = { target = "~/.config/polybar/config", type = "symbolic" } | ||||
| [waybar.files] | ||||
| "waybar" = { target = "~/.config/waybar", type = "symbolic" } | ||||
|  | ||||
| [redshift.files] | ||||
| "redshift/redshift.conf" = { target = "~/.config/redshift/redshift.conf", type = "symbolic" } | ||||
| [gammastep.files] | ||||
| "gammastep" = { target = "~/.config/gammastep", type = "symbolic" } | ||||
|  | ||||
| [tmux.files] | ||||
| "tmux/.tmux.conf" = { target = "~/.tmux.conf", type = "symbolic" } | ||||
|   | ||||
| @@ -2,6 +2,3 @@ | ||||
| set -e | ||||
| set -u | ||||
|  | ||||
| # Build i3 config | ||||
| cd i3/conf | ||||
| ./build.sh | ||||
|   | ||||
							
								
								
									
										59
									
								
								gammastep/config.ini
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								gammastep/config.ini
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| ; Global settings | ||||
| [general] | ||||
| ; Set the day and night screen temperatures | ||||
| temp-day=5000 | ||||
| temp-night=3500 | ||||
|  | ||||
| ; Disable the smooth fade between temperatures when Redshift starts and stops. | ||||
| ; 0 will cause an immediate change between screen temperatures. | ||||
| ; 1 will gradually apply the new screen temperature over a couple of seconds. | ||||
| fade=1 | ||||
|  | ||||
| ; Solar elevation thresholds. | ||||
| ; By default, Redshift will use the current elevation of the sun to determine | ||||
| ; whether it is daytime, night or in transition (dawn/dusk). When the sun is | ||||
| ; above the degrees specified with elevation-high it is considered daytime and | ||||
| ; below elevation-low it is considered night. | ||||
| ;elevation-high=3 | ||||
| ;elevation-low=-6 | ||||
|  | ||||
| ; Custom dawn/dusk intervals. | ||||
| ; Instead of using the solar elevation, the time intervals of dawn and dusk | ||||
| ; can be specified manually. The times must be specified as HH:MM in 24-hour | ||||
| ; format. | ||||
| ;dawn-time=6:00-7:45 | ||||
| ;dusk-time=18:35-20:15 | ||||
|  | ||||
| ; Set the screen brightness. Default is 1.0. | ||||
| ;brightness=0.9 | ||||
| ; It is also possible to use different settings for day and night | ||||
| ; since version 1.8. | ||||
| ;brightness-day=0.7 | ||||
| ;brightness-night=0.4 | ||||
| ; Set the screen gamma (for all colors, or each color channel | ||||
| ; individually) | ||||
| gamma=0.8 | ||||
| ;gamma=0.8:0.7:0.8 | ||||
| ; This can also be set individually for day and night since | ||||
| ; version 1.10. | ||||
| ;gamma-day=0.8:0.7:0.8 | ||||
| ;gamma-night=0.6 | ||||
|  | ||||
| ; Set the location-provider: 'geoclue2', 'manual'. | ||||
| ; The location provider settings are in a different section. | ||||
| location-provider=manual | ||||
|  | ||||
| ; Set the adjustment-method: 'randr', 'vidmode', 'drm', 'wayland'. | ||||
| ; 'randr' is the preferred X11 method, 'vidmode' is an older API | ||||
| ; that works in some cases when 'randr' does not. | ||||
| ; The adjustment method settings are in a different section. | ||||
| adjustment-method=wayland | ||||
|  | ||||
| ; Configuration of the location-provider: | ||||
| ; type 'gammastep -l PROVIDER:help' to see the settings. | ||||
| ; ex: 'gammastep -l manual:help' | ||||
| ; Keep in mind that longitudes west of Greenwich (e.g. the Americas) | ||||
| ; are negative numbers. | ||||
| [manual] | ||||
| lat=49.04 | ||||
| lon=8.44 | ||||
							
								
								
									
										97
									
								
								hyprland/hooks/networkmanager.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										97
									
								
								hyprland/hooks/networkmanager.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,97 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| network_print() { | ||||
|     connection_list=$(nmcli -t -f name,type,device,state connection show --order name --active 2>/dev/null | grep -v ':bridge:') | ||||
|     counter=0 | ||||
|  | ||||
|     if [ -n "$connection_list" ] && [ "$(echo "$connection_list" | wc -l)" -gt 0  ]; then | ||||
|         echo "$connection_list" | while read -r line; do | ||||
|             description=$(echo "$line" | sed -e 's/\\:/-/g' | cut -d ':' -f 1) | ||||
|             type=$(echo "$line" | sed -e 's/\\:/-/g' | cut -d ':' -f 2) | ||||
|             device=$(echo "$line" | sed -e 's/\\:/-/g' | cut -d ':' -f 3) | ||||
|             state=$(echo "$line" | sed -e 's/\\:/-/g' | cut -d ':' -f 4) | ||||
|  | ||||
|             if [ "$type" = "loopback" ]; then | ||||
|                 continue | ||||
|             fi | ||||
|             if [ "$type" = "tun" ]; then | ||||
|                 continue | ||||
|             fi | ||||
|  | ||||
|             if [ "$state" = "activated" ]; then | ||||
|                 if [ "$type" = "802-11-wireless" ]; then | ||||
|                     icon="直" | ||||
|  | ||||
|                     signal=$(nmcli -t -f in-use,signal device wifi list ifname "$device" | grep "\*" | cut -d ':' -f 2) | ||||
|                     if [ "$signal" -lt 40 ]; then | ||||
|                         description="$description - %{F#f9cc18}$signal%%{F-}" | ||||
|                     fi | ||||
|                 elif [ "$type" = "802-3-ethernet" ]; then | ||||
|                     icon="" | ||||
|  | ||||
|                     speed="$(cat /sys/class/net/"$device"/speed)" | ||||
|                     if [ "$speed" -ne -1 ]; then | ||||
|                         if [ "$speed" -eq 1000 ]; then | ||||
|                             speed="1G" | ||||
|                         else | ||||
|                             speed=$speed"M" | ||||
|                         fi | ||||
|                     else | ||||
|                         speed="?" | ||||
|                     fi | ||||
|  | ||||
|                     description="$description ($speed)" | ||||
|                 elif [ "$type" = "bluetooth" ]; then | ||||
|                     icon="" | ||||
|                 elif [ "$type" = "wireguard" ]; then | ||||
|                     icon="旅" | ||||
|                 elif [ "$type" = "vpn" ]; then | ||||
|                     icon="旅" | ||||
|                 else | ||||
|                     icon='ﯳ' | ||||
|                 fi | ||||
|             fi | ||||
|  | ||||
|             if [ $counter -gt 0 ]; then | ||||
|                 printf "  %s  %s" "$icon" "$description" | ||||
|             else | ||||
|                 printf "%s   %s" "$icon" "$description" | ||||
|             fi | ||||
|  | ||||
|             counter=$((counter + 1)) | ||||
|         done | ||||
|  | ||||
|         printf "\n" | ||||
|     else | ||||
|         echo "#3" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| network_update() { | ||||
|     pid=$(cat "$path_pid") | ||||
|  | ||||
|     if [ "$pid" != "" ]; then | ||||
|         kill -10 "$pid" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| path_pid="/tmp/hypr-network-networkmanager.pid" | ||||
|  | ||||
| case "$1" in | ||||
|     --update) | ||||
|         network_update | ||||
|         ;; | ||||
|     *) | ||||
|         echo $$ > $path_pid | ||||
|  | ||||
|         trap exit INT | ||||
|         trap "echo" USR1 | ||||
|  | ||||
|         while true; do | ||||
|             network_print | ||||
|  | ||||
|             sleep 60 & | ||||
|             wait | ||||
|         done | ||||
|         ;; | ||||
| esac | ||||
							
								
								
									
										238
									
								
								hyprland/hyprland.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										238
									
								
								hyprland/hyprland.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,238 @@ | ||||
| # | ||||
| # Please note not all available settings / options are set here. | ||||
| # For a full list, see the wiki | ||||
| # | ||||
|  | ||||
| # See https://wiki.hyprland.org/Configuring/Monitors/ | ||||
| # monitor=eDP-1,preferred,auto,1.25 | ||||
| # monitor=,preferred,auto,1 | ||||
|  | ||||
| # See https://wiki.hyprland.org/Configuring/Keywords/ for more | ||||
|  | ||||
| # Allow screensharing | ||||
| exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP | ||||
|  | ||||
| # Execute your favorite apps at launch | ||||
| # exec-once = waybar & hyprpaper & firefox | ||||
| exec-once = swayidle & | ||||
| exec-once = xiccd & | ||||
| exec-once = dunst & | ||||
| exec-once = ibus-daemon -drxR & | ||||
| exec-once = sleep 3 && kanshi & | ||||
| exec-once = bash ~/.config/hypr/scripts/launch_waybar.sh | ||||
|  | ||||
| exec-once = easyeffects --gapplication-service & | ||||
| exec-once = lxqt-policykit-agent & | ||||
| exec-once = thunar --daemon & | ||||
|  | ||||
| exec-once = env QT_QPA_PLATFORM=xcb /usr/lib/kdeconnectd | ||||
| exec-once = env QT_QPA_PLATFORM=xcb kdeconnect-indicator | ||||
|  | ||||
| # On reload: | ||||
| exec = pkill -1 kanshi | ||||
|  | ||||
| # Source a file (multi-file configs) | ||||
| # source = ~/.config/hypr/myColors.conf | ||||
|  | ||||
| # Some default env vars. | ||||
| env = XCURSOR_SIZE,24 | ||||
|  | ||||
| # For all categories, see https://wiki.hyprland.org/Configuring/Variables/ | ||||
| input { | ||||
|     kb_layout = us | ||||
|     kb_variant = | ||||
|     kb_model = | ||||
|     kb_options = compose:caps,mod_led:compose | ||||
|     kb_rules = | ||||
|  | ||||
|     follow_mouse = 1 | ||||
|  | ||||
|     touchpad { | ||||
|         natural_scroll = true | ||||
|     } | ||||
|  | ||||
|     sensitivity = 0 # -1.0 - 1.0, 0 means no modification. | ||||
| } | ||||
|  | ||||
| general { | ||||
|     # See https://wiki.hyprland.org/Configuring/Variables/ for more | ||||
|  | ||||
|     gaps_in = 5 | ||||
|     gaps_out = 5 | ||||
|     border_size = 2 | ||||
|     col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg | ||||
|     col.inactive_border = rgba(595959aa) | ||||
|  | ||||
|     layout = master | ||||
| } | ||||
|  | ||||
| master { | ||||
|     new_is_master = false | ||||
|     allow_small_split = false | ||||
| } | ||||
|  | ||||
| decoration { | ||||
|     # See https://wiki.hyprland.org/Configuring/Variables/ for more | ||||
|  | ||||
|     rounding = 10 | ||||
|  | ||||
|     blur { | ||||
|         enabled = true | ||||
|         size = 3 | ||||
|         passes = 1 | ||||
|     } | ||||
|  | ||||
|     drop_shadow = yes | ||||
|     shadow_range = 4 | ||||
|     shadow_render_power = 3 | ||||
|     col.shadow = rgba(1a1a1aee) | ||||
| } | ||||
|  | ||||
| animations { | ||||
|     enabled = yes | ||||
|  | ||||
|     # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more | ||||
|  | ||||
|     bezier = myBezier, 0.05, 0.9, 0.1, 1.05 | ||||
|  | ||||
|     animation = windows, 1, 7, myBezier | ||||
|     animation = windowsOut, 1, 7, default, popin 80% | ||||
|     animation = border, 1, 10, default | ||||
|     animation = borderangle, 1, 8, default | ||||
|     animation = fade, 1, 7, default | ||||
|     animation = workspaces, 1, 6, default | ||||
| } | ||||
|  | ||||
| gestures { | ||||
|     # See https://wiki.hyprland.org/Configuring/Variables/ for more | ||||
|     workspace_swipe = on | ||||
| } | ||||
|  | ||||
| # Example per-device config | ||||
| # See https://wiki.hyprland.org/Configuring/Keywords/#executing for more | ||||
| device:epic-mouse-v1 { | ||||
|     sensitivity = -0.5 | ||||
| } | ||||
|  | ||||
| # Example windowrule v1 | ||||
| # windowrule = float, ^(kitty)$ | ||||
| # Example windowrule v2 | ||||
| # windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ | ||||
| # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more | ||||
|  | ||||
|  | ||||
| # See https://wiki.hyprland.org/Configuring/Keywords/ for more | ||||
| $mainMod = SUPER | ||||
|  | ||||
| # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more | ||||
| # bind = $mainMod, Q, exec, kitty | ||||
| bind = $mainMod SHIFT, Q, killactive, | ||||
| bind = $mainMod, RETURN, exec, alacritty | ||||
| bind = $mainMod CONTROL, L, exec, loginctl lock-session self | ||||
| bindr = $mainMod, D, exec, dunstctl context | ||||
| bind = $mainMod, F, fullscreen | ||||
|  | ||||
| # Volume control | ||||
| binde = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +100 | ||||
| binde = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -100 | ||||
| binde = SHIFT, XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +1000 | ||||
| binde = SHIFT, XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -1000 | ||||
| bind = , XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle | ||||
|  | ||||
| # Microphone control | ||||
| bind = , XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle | ||||
| bind = $mainMod, c, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle | ||||
|  | ||||
| # Brightness control | ||||
| binde = , XF86MonBrightnessUp, exec, brightnessctl s +2% | ||||
| binde = , XF86MonBrightnessDown, exec, brightnessctl s 2%- | ||||
| binde = SHIFT , XF86MonBrightnessUp, exec, brightnessctl s +10% | ||||
| binde = SHIFT , XF86MonBrightnessDown, exec, brightnessctl s 10%- | ||||
| bind = , XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle | ||||
|  | ||||
| # Flameshot | ||||
| bindr = CONTROL SHIFT, Print, exec, ~/.config/hypr/scripts/screenshot.sh | ||||
| bindr = , Print, exec, ~/.config/hypr/scripts/screenshot.sh | ||||
|  | ||||
| # Media Control | ||||
| bind = , XF86AudioPlay, exec, playerctl play-pause | ||||
| bind = , XF86AudioNext, exec, playerctl next | ||||
| bind = , XF86AudioPrev, exec, playerctl previous | ||||
| bind = , XF86AudioStop, exec, playerctl stop | ||||
|  | ||||
|  | ||||
| # ROFI | ||||
| bind = ALT, SPACE, exec, rofi -show drun | ||||
| bind = $mainMod, TAB, exec, rofi -show window | ||||
| bind = $mainMod SHIFT, N, exec, networkmanager_dmenu --rofi -i | ||||
| bind = $mainMod SHIFT, B, exec, rofi-bluetooth | ||||
| bind = $mainMod SHIFT, E, exec, rofimoji --typer wtype | ||||
|  | ||||
| # bind = $mainMod, M, exit, | ||||
| # bind = $mainMod, E, exec, dolphin | ||||
| bind = $mainMod CONTROL, SPACE, togglefloating, | ||||
| bind = $mainMod, SPACE, layoutmsg, orientationnext | ||||
| bind = $mainMod, M, layoutmsg, addmaster | ||||
| bind = $mainMod SHIFT, M, layoutmsg, removemaster | ||||
|  | ||||
| # Move focus with mainMod + arrow keys | ||||
| bind = $mainMod, h, movefocus, l | ||||
| bind = $mainMod, j, movefocus, d | ||||
| bind = $mainMod, k, movefocus, u | ||||
| bind = $mainMod, l, movefocus, r | ||||
|  | ||||
| # Move windows with mainMod + arrow keys | ||||
| bind = $mainMod SHIFT, h, movewindow, l | ||||
| bind = $mainMod SHIFT, j, movewindow, d | ||||
| bind = $mainMod SHIFT, k, movewindow, u | ||||
| bind = $mainMod SHIFT, l, movewindow, r | ||||
|  | ||||
| # Switch workspaces with mainMod + [0-9] | ||||
| bind = $mainMod, 1, workspace, 1 | ||||
| bind = $mainMod, 2, workspace, 2 | ||||
| bind = $mainMod, 3, workspace, 3 | ||||
| bind = $mainMod, 4, workspace, 4 | ||||
| bind = $mainMod, 5, workspace, 5 | ||||
| bind = $mainMod, 6, workspace, 6 | ||||
| bind = $mainMod, 7, workspace, 7 | ||||
| bind = $mainMod, 8, workspace, 8 | ||||
| bind = $mainMod, 9, workspace, 9 | ||||
| bind = $mainMod, 0, workspace, 10 | ||||
|  | ||||
| # Move active window to a workspace with mainMod + SHIFT + [0-9] | ||||
| bind = $mainMod SHIFT, 1, movetoworkspace, 1 | ||||
| bind = $mainMod SHIFT, 2, movetoworkspace, 2 | ||||
| bind = $mainMod SHIFT, 3, movetoworkspace, 3 | ||||
| bind = $mainMod SHIFT, 4, movetoworkspace, 4 | ||||
| bind = $mainMod SHIFT, 5, movetoworkspace, 5 | ||||
| bind = $mainMod SHIFT, 6, movetoworkspace, 6 | ||||
| bind = $mainMod SHIFT, 7, movetoworkspace, 7 | ||||
| bind = $mainMod SHIFT, 8, movetoworkspace, 8 | ||||
| bind = $mainMod SHIFT, 9, movetoworkspace, 9 | ||||
| bind = $mainMod SHIFT, 0, movetoworkspace, 10 | ||||
|  | ||||
| # Scroll through existing workspaces 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 | ||||
|  | ||||
| bind = $mainMod, M, movecurrentworkspacetomonitor, +1 | ||||
|  | ||||
| # will switch to a submap called resize | ||||
| bind = $mainMod,R,submap,resize | ||||
|  | ||||
| submap = resize | ||||
|     binde = ,H,resizeactive,-10 0 | ||||
|     binde = ,J,resizeactive,0 10 | ||||
|     binde = ,K,resizeactive,0 -10 | ||||
|     binde = ,L,resizeactive,10 0 | ||||
|     bind = ,escape,submap,reset | ||||
|     bind = ,return,submap,reset | ||||
| submap = reset | ||||
|  | ||||
| windowrulev2 = float, title:(KeePassXC -  Access Request) | ||||
| windowrulev2 = float, class:(lxqt-policykit-agent) | ||||
| # vim: ft=hypr | ||||
							
								
								
									
										0
									
								
								hyprland/hyprpaper.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								hyprland/hyprpaper.conf
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										13
									
								
								hyprland/scripts/displaybyname.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								hyprland/scripts/displaybyname.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| LOOK="$*" | ||||
|  | ||||
| IFS=$'\n' | ||||
| for d in $(hyprctl -j monitors | jq -r '.[] | "\(.make) \(.model) \(.serial);\(.name)"'); | ||||
| do | ||||
|         if [[ "$d" == "$LOOK"* ]]; then | ||||
|                 echo "$d" | awk -F';' '{print $2}' | ||||
|                 exit | ||||
|         fi | ||||
| done | ||||
| exit 1 | ||||
							
								
								
									
										20
									
								
								hyprland/scripts/launch_waybar.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								hyprland/scripts/launch_waybar.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| getDisplay () { | ||||
|         local DESK | ||||
|  | ||||
|         DESK="$(~/.config/hypr/scripts/displaybyname.sh Samsung Electric Company S34J55x H4LT100404)" | ||||
|  | ||||
|         [[ -n "$DESK" ]] && echo $DESK && return | ||||
|         echo "eDP-1" | ||||
| } | ||||
|  | ||||
| if [[ -z "$PRIMARY_DISPLAY" ]]; then | ||||
|         PRIMARY_DISPLAY="$(getDisplay)" | ||||
| fi | ||||
|  | ||||
| export PRIMARY_DISPLAY | ||||
| envsubst < ~/.config/waybar/config > /tmp/waybar | ||||
|  | ||||
| pkill waybar | ||||
| waybar -c /tmp/waybar &! | ||||
							
								
								
									
										17
									
								
								hyprland/scripts/lock.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								hyprland/scripts/lock.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| DUNST_STATE=$(dunstctl is-paused) | ||||
| dunstctl set-paused true | ||||
| swaylock \ | ||||
|         --screenshots \ | ||||
|         --clock \ | ||||
|         --indicator \ | ||||
|         --indicator-radius 100 \ | ||||
|         --indicator-thickness 7 \ | ||||
|         --effect-blur 7x5 \ | ||||
|         --effect-vignette 0.5:0.5 \ | ||||
|         --ring-color bb00cc \ | ||||
|         --key-hl-color 880033 \ | ||||
|         --line-color 00000000 \ | ||||
|         --inside-color 00000088 \ | ||||
|         --separator-color 00000000 \ | ||||
|         --fade-in 0.2 | ||||
| dunstctl set-paused "$DUNST_STATE" | ||||
							
								
								
									
										2
									
								
								hyprland/scripts/screenshot.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2
									
								
								hyprland/scripts/screenshot.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| #!/bin/bash | ||||
| grim -g "$(slurp -d)" - | swappy -f - | ||||
							
								
								
									
										12
									
								
								hyprland/scripts/transformbyname.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								hyprland/scripts/transformbyname.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| NAME="$1" | ||||
| TRANSFORM="$2" | ||||
|  | ||||
| TARGET="$(~/.config/hypr/scripts/displaybyname.sh $NAME)" | ||||
|  | ||||
| if [ -z "$TARGET" ]; then | ||||
|         exit 1 | ||||
| fi | ||||
|  | ||||
| hyprctl keyword monitor "${TARGET},transform,${TRANSFORM}" | ||||
							
								
								
									
										1
									
								
								kanshi/config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								kanshi/config
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| include ~/.config/kanshi/config.d/* | ||||
							
								
								
									
										11
									
								
								kanshi/config.d/10-dock
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								kanshi/config.d/10-dock
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| profile Dock { | ||||
|         output "BNQ BenQ GL2450H ACB00126019"                    enable mode 1920x1080     position 0,0      transform 270 scale 1 | ||||
|         output "BNQ BenQ GL2450H X4F00171019"                    enable mode 1920x1080     position 4520,0   transform normal scale 1 | ||||
|         output "Samsung Electric Company S34J55x H4LT100404"     enable mode 3440x1440     position 1080,0   transform normal scale 1 | ||||
|         output eDP-1                                             disable | ||||
|         exec ~/.config/hypr/scripts/transformbyname.sh "BNQ BenQ GL2450H ACB00126019" 1 | ||||
|         exec ~/.config/hypr/scripts/transformbyname.sh "BNQ BenQ GL2450H X4F00171019" 3 | ||||
|         exec systemctl --user start gammastep.service | ||||
|         exec rfkill block wifi | ||||
|         exec bash ~/.config/hypr/scripts/launch_waybar.sh | ||||
| } | ||||
							
								
								
									
										6
									
								
								kanshi/config.d/90-mobile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								kanshi/config.d/90-mobile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| profile mobile { | ||||
|         output eDP-1 enable scale 1.25 position 0,0 | ||||
|         exec systemctl --user start gammastep.service | ||||
|         exec rfkill unblock wifi | ||||
|         exec bash ~/.config/hypr/scripts/launch_waybar.sh | ||||
| } | ||||
							
								
								
									
										152
									
								
								waybar/config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								waybar/config
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,152 @@ | ||||
| // vim: ft=jsonc | ||||
| { | ||||
|     "layer": "top", // Waybar at top layer | ||||
|     // "position": "bottom", // Waybar position (top|bottom|left|right) | ||||
|     // "height": 30, // Waybar height (to be removed for auto height) | ||||
|     // "width": 1280, // Waybar width | ||||
|     "spacing": 4, // Gaps between modules (4px) | ||||
|     "output": "${PRIMARY_DISPLAY}", | ||||
|     // Choose the order of the modules | ||||
|     "modules-left": ["wlr/workspaces", "hyprland/submap", "custom/wifionice", "custom/spotify"], | ||||
|     "modules-center": ["hyprland/window", "custom/dunst"], | ||||
|     "modules-right": ["idle_inhibitor", "pulseaudio", "custom/network", "cpu", "memory", "temperature", "backlight", "battery", "clock", "tray"], | ||||
|     // Modules configuration | ||||
|     "wlr/workspaces": { | ||||
|         "disable-scroll": false, | ||||
|         "sort-by-number": true, | ||||
|         "all-outputs": true, | ||||
|         "warp-on-scroll": false, | ||||
|         "format": "{name}: {icon}", | ||||
|         "format-icons": { | ||||
|             "1": "", | ||||
|             "2": "", | ||||
|             "3": "", | ||||
|             "4": "", | ||||
|             "5": "", | ||||
|             "urgent": "", | ||||
|             "focused": "", | ||||
|             "default": "" | ||||
|         } | ||||
|     }, | ||||
|     "keyboard-state": { | ||||
|         "numlock": true, | ||||
|         "capslock": true, | ||||
|         "format": "{name} {icon}", | ||||
|         "format-icons": { | ||||
|             "locked": "", | ||||
|             "unlocked": "" | ||||
|         } | ||||
|     }, | ||||
|     "custom/spotify": { | ||||
|         "exec": "/usr/bin/python3 ~/.config/waybar/scripts/mediaplayer.py --player spotify", | ||||
|         "format": "{}  ", | ||||
|         "return-type": "json", | ||||
|         "escape": true, | ||||
|         "on-click": "playerctl play-pause", | ||||
|         "on-scroll-up": "playerctl next", | ||||
|         "on-scroll-down": "playerctl previous" | ||||
|     }, | ||||
|     "custom/dunst": { | ||||
|         "exec": "~/.config/waybar/scripts/dunst.sh", | ||||
|         "return-type": "json", | ||||
|         "on-click": "dunstctl set-paused toggle", | ||||
|         "on-click-middle": "dunstctl context", | ||||
|         "on-click-right": "dunstctl history-pop", | ||||
|         "restart-interval": 1 | ||||
|     }, | ||||
|     "custom/wifionice": { | ||||
|         "exec": "~/.config/waybar/scripts/wifionice.sh", | ||||
|         "escape": true | ||||
|     }, | ||||
|     "idle_inhibitor": { | ||||
|         "format": "{icon}", | ||||
|         "format-icons": { | ||||
|             "activated": "", | ||||
|             "deactivated": "" | ||||
|         } | ||||
|     }, | ||||
|     "tray": { | ||||
|         // "icon-size": 21, | ||||
|         "spacing": 10 | ||||
|     }, | ||||
|     "clock": { | ||||
|         // "timezone": "America/New_York", | ||||
|         "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>", | ||||
|         "format-alt": "{:%Y-%m-%d}" | ||||
|     }, | ||||
|     "cpu": { | ||||
|         "format": "{usage}% ", | ||||
|         "tooltip": false | ||||
|     }, | ||||
|     "memory": { | ||||
|         "format": "{}% " | ||||
|     }, | ||||
|     "temperature": { | ||||
|         // "thermal-zone": 2, | ||||
|         // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", | ||||
|         "critical-threshold": 80, | ||||
|         // "format-critical": "{temperatureC}°C {icon}", | ||||
|         "format": "{temperatureC}°C {icon}", | ||||
|         "format-icons": ["", "", ""] | ||||
|     }, | ||||
|     "backlight": { | ||||
|         // "device": "acpi_video1", | ||||
|         "format": "{percent}% {icon}", | ||||
|         "format-icons": ["", "", "", "", "", "", "", "", ""] | ||||
|     }, | ||||
|     "battery": { | ||||
|         "states": { | ||||
|             // "good": 95, | ||||
|             "warning": 30, | ||||
|             "critical": 15 | ||||
|         }, | ||||
|         "format": "{capacity}% {icon}", | ||||
|         "format-charging": "{capacity}% ", | ||||
|         "format-plugged": "{capacity}% ", | ||||
|         "format-alt": "{time} {icon}", | ||||
|         // "format-good": "", // An empty format will hide the module | ||||
|         // "format-full": "", | ||||
|         "format-icons": ["", "", "", "", ""] | ||||
|     }, | ||||
|     "battery#bat2": { | ||||
|         "bat": "BAT2" | ||||
|     }, | ||||
|     "custom/network": { | ||||
|         "format": "{}", | ||||
|         "max-length": 40, | ||||
|         "escape": true, | ||||
|         "exec": "$HOME/.config/hypr/hooks/networkmanager.sh 2> /dev/null" // Script in resources folder | ||||
|     }, | ||||
|     "pulseaudio": { | ||||
|         // "scroll-step": 1, // %, can be a float | ||||
|         "format": "{volume}% {icon} {format_source}", | ||||
|         "format-bluetooth": "{volume}% {icon} {format_source}", | ||||
|         "format-bluetooth-muted": " {icon} {format_source}", | ||||
|         "format-muted": " {format_source}", | ||||
|         "format-source": "{volume}% ", | ||||
|         "format-source-muted": "", | ||||
|         "format-icons": { | ||||
|             "headphone": "", | ||||
|             "hands-free": "", | ||||
|             "headset": "", | ||||
|             "phone": "", | ||||
|             "portable": "", | ||||
|             "car": "", | ||||
|             "default": ["", "", ""] | ||||
|         }, | ||||
|         "on-click": "pavucontrol" | ||||
|     }, | ||||
|     "custom/media": { | ||||
|         "format": "{icon} {}", | ||||
|         "return-type": "json", | ||||
|         "max-length": 40, | ||||
|         "format-icons": { | ||||
|             "spotify": "", | ||||
|             "default": "🎜" | ||||
|         }, | ||||
|         "escape": true, | ||||
|         "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder | ||||
|         // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name | ||||
|     } | ||||
| } | ||||
|  | ||||
							
								
								
									
										37
									
								
								waybar/mocha.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								waybar/mocha.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| /* | ||||
| * | ||||
| * Catppuccin Mocha palette | ||||
| * Maintainer: rubyowo | ||||
| * | ||||
| */ | ||||
|  | ||||
| @define-color base   #1e1e2e; | ||||
| @define-color mantle #181825; | ||||
| @define-color crust  #11111b; | ||||
|  | ||||
| @define-color text     #cdd6f4; | ||||
| @define-color subtext0 #a6adc8; | ||||
| @define-color subtext1 #bac2de; | ||||
|  | ||||
| @define-color surface0 #313244; | ||||
| @define-color surface1 #45475a; | ||||
| @define-color surface2 #585b70; | ||||
|  | ||||
| @define-color overlay0 #6c7086; | ||||
| @define-color overlay1 #7f849c; | ||||
| @define-color overlay2 #9399b2; | ||||
|  | ||||
| @define-color blue      #89b4fa; | ||||
| @define-color lavender  #b4befe; | ||||
| @define-color sapphire  #74c7ec; | ||||
| @define-color sky       #89dceb; | ||||
| @define-color teal      #94e2d5; | ||||
| @define-color green     #a6e3a1; | ||||
| @define-color yellow    #f9e2af; | ||||
| @define-color peach     #fab387; | ||||
| @define-color maroon    #eba0ac; | ||||
| @define-color red       #f38ba8; | ||||
| @define-color mauve     #cba6f7; | ||||
| @define-color pink      #f5c2e7; | ||||
| @define-color flamingo  #f2cdcd; | ||||
| @define-color rosewater #f5e0dc; | ||||
							
								
								
									
										21
									
								
								waybar/scripts/dunst.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										21
									
								
								waybar/scripts/dunst.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| #!/usr/bin/env bash | ||||
| set -euo pipefail | ||||
|  | ||||
| readonly ENABLED=' ' | ||||
| readonly DISABLED=' ' | ||||
| dbus-monitor path='/org/freedesktop/Notifications',interface='org.freedesktop.DBus.Properties',member='PropertiesChanged' --profile | | ||||
|   while read -r _; do | ||||
|     PAUSED="$(dunstctl is-paused)" | ||||
|     if [ "$PAUSED" == 'false' ]; then | ||||
|       CLASS="enabled" | ||||
|       TEXT="$ENABLED" | ||||
|     else | ||||
|       CLASS="disabled" | ||||
|       TEXT="$DISABLED" | ||||
|       COUNT="$(dunstctl count waiting)" | ||||
|       if [ "$COUNT" != '0' ]; then | ||||
|         TEXT="$DISABLED ($COUNT)" | ||||
|       fi | ||||
|     fi | ||||
|     printf '{"text": "%s", "class": "%s"}\n' "$TEXT" "$CLASS" | ||||
|   done | ||||
							
								
								
									
										182
									
								
								waybar/scripts/mediaplayer.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										182
									
								
								waybar/scripts/mediaplayer.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,182 @@ | ||||
| #!/usr/bin/env python3 | ||||
| import gi | ||||
| gi.require_version("Playerctl", "2.0") | ||||
| from gi.repository import Playerctl, GLib | ||||
| from gi.repository.Playerctl import Player | ||||
| import argparse | ||||
| import logging | ||||
| import sys | ||||
| import signal | ||||
| import gi | ||||
| import json | ||||
| import os | ||||
| from typing import List | ||||
|  | ||||
| logger = logging.getLogger(__name__) | ||||
|  | ||||
| def signal_handler(sig, frame): | ||||
|     logger.info("Received signal to stop, exiting") | ||||
|     sys.stdout.write("\n") | ||||
|     sys.stdout.flush() | ||||
|     # loop.quit() | ||||
|     sys.exit(0) | ||||
|  | ||||
|  | ||||
| class PlayerManager: | ||||
|     def __init__(self, selected_player=None): | ||||
|         self.manager = Playerctl.PlayerManager() | ||||
|         self.loop = GLib.MainLoop() | ||||
|         self.manager.connect( | ||||
|             "name-appeared", lambda *args: self.on_player_appeared(*args)) | ||||
|         self.manager.connect( | ||||
|             "player-vanished", lambda *args: self.on_player_vanished(*args)) | ||||
|  | ||||
|         signal.signal(signal.SIGINT, signal_handler) | ||||
|         signal.signal(signal.SIGTERM, signal_handler) | ||||
|         signal.signal(signal.SIGPIPE, signal.SIG_DFL) | ||||
|         self.selected_player = selected_player | ||||
|  | ||||
|         self.init_players() | ||||
|  | ||||
|     def init_players(self): | ||||
|         for player in self.manager.props.player_names: | ||||
|             if self.selected_player is not None and self.selected_player != player.name: | ||||
|                 logger.debug(f"{player.name} is not the filtered player, skipping it") | ||||
|                 continue | ||||
|             self.init_player(player) | ||||
|  | ||||
|     def run(self): | ||||
|         logger.info("Starting main loop") | ||||
|         self.loop.run() | ||||
|  | ||||
|     def init_player(self, player): | ||||
|         logger.info(f"Initialize new player: {player.name}") | ||||
|         player = Playerctl.Player.new_from_name(player) | ||||
|         player.connect("playback-status", | ||||
|                        self.on_playback_status_changed, None) | ||||
|         player.connect("metadata", self.on_metadata_changed, None) | ||||
|         self.manager.manage_player(player) | ||||
|         self.on_metadata_changed(player, player.props.metadata) | ||||
|  | ||||
|     def get_players(self) -> List[Player]: | ||||
|         return self.manager.props.players | ||||
|  | ||||
|     def write_output(self, text, player): | ||||
|         logger.debug(f"Writing output: {text}") | ||||
|  | ||||
|         output = {"text": text, | ||||
|                   "class": "custom-" + player.props.player_name, | ||||
|                   "alt": player.props.player_name} | ||||
|  | ||||
|         sys.stdout.write(json.dumps(output) + "\n") | ||||
|         sys.stdout.flush() | ||||
|  | ||||
|     def clear_output(self): | ||||
|         sys.stdout.write("\n") | ||||
|         sys.stdout.flush() | ||||
|  | ||||
|     def on_playback_status_changed(self, player, status, _=None): | ||||
|         logger.debug(f"Playback status changed for player {player.props.player_name}: {status}") | ||||
|         self.on_metadata_changed(player, player.props.metadata) | ||||
|  | ||||
|     def get_first_playing_player(self): | ||||
|         players = self.get_players() | ||||
|         logger.debug(f"Getting first playing player from {len(players)} players") | ||||
|         if len(players) > 0: | ||||
|             # if any are playing, show the first one that is playing | ||||
|             # reverse order, so that the most recently added ones are preferred | ||||
|             for player in players[::-1]: | ||||
|                 if player.props.status == "Playing": | ||||
|                     return player | ||||
|             # if none are playing, show the first one | ||||
|             return players[0] | ||||
|         else: | ||||
|             logger.debug("No players found") | ||||
|             return None | ||||
|  | ||||
|     def show_most_important_player(self): | ||||
|         logger.debug("Showing most important player") | ||||
|         # show the currently playing player | ||||
|         # or else show the first paused player | ||||
|         # or else show nothing | ||||
|         current_player = self.get_first_playing_player() | ||||
|         if current_player is not None: | ||||
|             self.on_metadata_changed(current_player, current_player.props.metadata) | ||||
|         else:     | ||||
|             self.clear_output() | ||||
|  | ||||
|     def on_metadata_changed(self, player, metadata, _=None): | ||||
|         logger.debug(f"Metadata changed for player {player.props.player_name}") | ||||
|         player_name = player.props.player_name | ||||
|         artist = player.get_artist() | ||||
|         title = player.get_title() | ||||
|  | ||||
|         track_info = "" | ||||
|         if player_name == "spotify" and "mpris:trackid" in metadata.keys() and ":ad:" in player.props.metadata["mpris:trackid"]: | ||||
|             track_info = "Advertisement" | ||||
|         elif artist is not None and title is not None: | ||||
|             track_info = f"{artist} - {title}" | ||||
|         else: | ||||
|             track_info = title | ||||
|  | ||||
|         if track_info: | ||||
|             if player.props.status == "Playing": | ||||
|                 track_info = " " + track_info | ||||
|             else: | ||||
|                 track_info = " " + track_info | ||||
|         # only print output if no other player is playing | ||||
|         current_playing = self.get_first_playing_player() | ||||
|         if current_playing is None or current_playing.props.player_name == player.props.player_name: | ||||
|             self.write_output(track_info, player) | ||||
|         else: | ||||
|             logger.debug(f"Other player {current_playing.props.player_name} is playing, skipping") | ||||
|  | ||||
|     def on_player_appeared(self, _, player): | ||||
|         logger.info(f"Player has appeared: {player.name}") | ||||
|         if player is not None and (self.selected_player is None or player.name == self.selected_player): | ||||
|             self.init_player(player) | ||||
|         else: | ||||
|             logger.debug( | ||||
|                 "New player appeared, but it's not the selected player, skipping") | ||||
|  | ||||
|     def on_player_vanished(self, _, player): | ||||
|         logger.info(f"Player {player.props.player_name} has vanished") | ||||
|         self.show_most_important_player() | ||||
|  | ||||
| def parse_arguments(): | ||||
|     parser = argparse.ArgumentParser() | ||||
|  | ||||
|     # Increase verbosity with every occurrence of -v | ||||
|     parser.add_argument("-v", "--verbose", action="count", default=0) | ||||
|  | ||||
|     # Define for which player we"re listening | ||||
|     parser.add_argument("--player") | ||||
|  | ||||
|     parser.add_argument("--enable-logging", action="store_true") | ||||
|  | ||||
|     return parser.parse_args() | ||||
|  | ||||
|  | ||||
| def main(): | ||||
|     arguments = parse_arguments() | ||||
|  | ||||
|     # Initialize logging | ||||
|     if arguments.enable_logging: | ||||
|         logfile = os.path.join(os.path.dirname( | ||||
|             os.path.realpath(__file__)), "media-player.log") | ||||
|         logging.basicConfig(filename=logfile, level=logging.DEBUG, | ||||
|                             format="%(asctime)s %(name)s %(levelname)s:%(lineno)d %(message)s") | ||||
|  | ||||
|     # Logging is set by default to WARN and higher. | ||||
|     # With every occurrence of -v it's lowered by one | ||||
|     logger.setLevel(max((3 - arguments.verbose) * 10, 0)) | ||||
|  | ||||
|     logger.info("Creating player manager") | ||||
|     if arguments.player: | ||||
|         logger.info(f"Filtering for player: {arguments.player}") | ||||
|     player = PlayerManager(arguments.player) | ||||
|     player.run() | ||||
|  | ||||
|  | ||||
| if __name__ == "__main__": | ||||
|     main() | ||||
							
								
								
									
										72
									
								
								waybar/scripts/wifionice.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										72
									
								
								waybar/scripts/wifionice.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,72 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| icon="🚄" | ||||
| path_pid="/tmp/polybar-network-wifionice.pid" | ||||
|  | ||||
| print_train_info() { | ||||
|     while true; do | ||||
|         if [ "$(iwgetid -r)" = "WIFIonICE" ] || [ "$(iwgetid -r)" = "WIFI@DB" ]; then | ||||
|             wifionice=$(curl -sLf https://iceportal.de/api1/rs/status) | ||||
|  | ||||
|             if [ "$(echo "$wifionice" | jq .connection)" = "true" ]; then | ||||
|                 wifionice_speed=$(echo "$wifionice" | jq .speed) | ||||
|                 wifionice_conn=$( echo "$wifionice" | jq -r .connectivity.currentState ) | ||||
|                 wifionice_nextConn=$( echo "$wifionice" | jq -r .connectivity.nextState ) | ||||
|                 wifionice_connTime=$( echo "$wifionice" | jq -r .connectivity.remainingTimeSeconds | awk '{printf "%d m", $1/60}' ) | ||||
|                 if [ "$wifionice_speed" -ne 0 ]; then | ||||
|                     wifionice_speed=" - $wifionice_speed km/h" | ||||
|                 else | ||||
|                     wifionice_speed="" | ||||
|                 fi | ||||
|  | ||||
|                 station=$(curl -sLf https://iceportal.de/api1/rs/tripInfo/trip | jq '[.[].stops[]? | select(.info.passed == false)][0]') | ||||
|  | ||||
|                 station_name=$(echo "$station" | jq -r '.station.name') | ||||
|  | ||||
|                 station_track=$(echo "$station" | jq -r '.track.actual') | ||||
|  | ||||
|                 station_arrival=$(echo "$station" | jq -r '.timetable.scheduledArrivalTime') | ||||
|                 station_arrival=$(date --date="@$((station_arrival / 1000))" +%H:%M) | ||||
|  | ||||
|                 station_delay=$(echo "$station" | jq -r '.timetable.arrivalDelay') | ||||
|                 if [ -n "$station_delay" ]; then | ||||
|                     station_delay=" ($station_delay)" | ||||
|                 else | ||||
|                     station_delay="" | ||||
|                 fi | ||||
|  | ||||
|                 if [ "${wifionice_conn}" = "NO_INFO" ]; then | ||||
|                     net_text="Net: 🤷" | ||||
|                 else | ||||
|                     net_text="Net: $wifionice_conn → $wifionice_nextConn ($wifionice_connTime)" | ||||
|                 fi | ||||
|  | ||||
|                 echo "$icon $station_arrival$station_delay - $station_name, Gl. $station_track$wifionice_speed | $net_text" | ||||
|             fi | ||||
|             sleep 10 | ||||
|         else | ||||
|             echo "" # hidden | ||||
|             sleep 600 & | ||||
|             wait | ||||
|         fi | ||||
|     done | ||||
| } | ||||
|  | ||||
| network_update() { | ||||
|     pid=$(cat "$path_pid") | ||||
|     if [ "$pid" != "" ]; then | ||||
|         kill -USR1 "$pid" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| case "$1" in | ||||
|     --update) | ||||
|         network_update | ||||
|         ;; | ||||
|     *) | ||||
|         echo $$ > $path_pid | ||||
|         trap exit INT | ||||
|         trap "echo" USR1 | ||||
|         print_train_info # Does not return | ||||
|         ;; | ||||
| esac | ||||
							
								
								
									
										244
									
								
								waybar/style.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										244
									
								
								waybar/style.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,244 @@ | ||||
| @import "mocha.css"; | ||||
|  | ||||
| * { | ||||
|     /* `otf-font-awesome` is required to be installed for icons */ | ||||
|     font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif; | ||||
|     font-size: 13px; | ||||
| } | ||||
|  | ||||
| window#waybar { | ||||
|     background-color: shade(@base, 0.9); | ||||
|     border: 2px solid alpha(@mantle, 0.3); | ||||
|     border-bottom: 3px solid alpha(@crust, 0.5); | ||||
|     color: @text; | ||||
|     transition-property: background-color; | ||||
|     transition-duration: .5s; | ||||
| } | ||||
|  | ||||
| window#waybar.hidden { | ||||
|     opacity: 0.2; | ||||
| } | ||||
|  | ||||
| /* | ||||
| window#waybar.empty { | ||||
|     background-color: transparent; | ||||
| } | ||||
| window#waybar.solo { | ||||
|     background-color: #FFFFFF; | ||||
| } | ||||
| */ | ||||
|  | ||||
| window#waybar.termite { | ||||
|     background-color: #3F3F3F; | ||||
| } | ||||
|  | ||||
| window#waybar.chromium { | ||||
|     background-color: #000000; | ||||
|     border: none; | ||||
| } | ||||
|  | ||||
| button { | ||||
|     /* Use box-shadow instead of border so the text isn't offset */ | ||||
|     box-shadow: inset 0 -3px transparent; | ||||
|     /* Avoid rounded borders under each button name */ | ||||
|     border: none; | ||||
|     border-radius: 0; | ||||
| } | ||||
|  | ||||
| /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ | ||||
| button:hover { | ||||
|     background: inherit; | ||||
|     box-shadow: inset 0 -3px #ffffff; | ||||
| } | ||||
|  | ||||
| #workspaces button { | ||||
|     padding: 0 5px; | ||||
|     background-color: transparent; | ||||
|     color: #ffffff; | ||||
| } | ||||
|  | ||||
| #submap { | ||||
|     padding: 0 10px; | ||||
|     margin: 0 4px; | ||||
|     background-color: @peach; | ||||
|     color: black; | ||||
| } | ||||
|  | ||||
| #dunst { | ||||
|  | ||||
| } | ||||
|  | ||||
| #workspaces button:hover { | ||||
|     background: alpha(@overlay0, 0.2); | ||||
| } | ||||
|  | ||||
| #workspaces button.active { | ||||
|     background-color: @overlay1; | ||||
|     box-shadow: inset 0 -3px #ffffff; | ||||
| } | ||||
|  | ||||
| #workspaces button.urgent { | ||||
|     background-color: @red; | ||||
| } | ||||
|  | ||||
| #mode { | ||||
|     background-color: #64727D; | ||||
|     border-bottom: 3px solid #ffffff; | ||||
| } | ||||
|  | ||||
| #clock, | ||||
| #battery, | ||||
| #cpu, | ||||
| #memory, | ||||
| #disk, | ||||
| #temperature, | ||||
| #backlight, | ||||
| #custom-network, | ||||
| #pulseaudio, | ||||
| #wireplumber, | ||||
| #custom-media, | ||||
| #custom-wifionice, | ||||
| #tray, | ||||
| #mode, | ||||
| #idle_inhibitor, | ||||
| #custom-spotify, | ||||
| #scratchpad, | ||||
| #mpd { | ||||
|     padding: 0 10px; | ||||
|     color: #ffffff; | ||||
|     border-bottom: 3px solid alpha(@crust, 0.5); | ||||
| } | ||||
| #window, | ||||
| #workspaces { | ||||
|     margin: 0 4px; | ||||
| } | ||||
|  | ||||
| /* If workspaces is the leftmost module, omit left margin */ | ||||
| .modules-left > widget:first-child > #workspaces { | ||||
|     margin-left: 0; | ||||
| } | ||||
|  | ||||
| /* If workspaces is the rightmost module, omit right margin */ | ||||
| .modules-right > widget:last-child > #workspaces { | ||||
|     margin-right: 0; | ||||
| } | ||||
|  | ||||
| #clock { | ||||
|     background-color: #64727D; | ||||
| } | ||||
|  | ||||
| #battery { | ||||
|     background-color: @yellow; | ||||
|     color: black; | ||||
| } | ||||
|  | ||||
| #battery.charging, #battery.plugged { | ||||
|     color: black; | ||||
|     background-color: @green; | ||||
| } | ||||
|  | ||||
| @keyframes blink { | ||||
|     to { | ||||
|         background-color: @yellow; | ||||
|         color: black; | ||||
|     } | ||||
| } | ||||
|  | ||||
| #battery.critical:not(.charging) { | ||||
|     background-color: @red; | ||||
|     color: black; | ||||
|     animation-name: blink; | ||||
|     animation-duration: 0.5s; | ||||
|     animation-timing-function: linear; | ||||
|     animation-iteration-count: infinite; | ||||
|     animation-direction: alternate; | ||||
| } | ||||
|  | ||||
| #custom-wifionice { | ||||
|     background-color: @red; | ||||
|     color: black; | ||||
| } | ||||
|  | ||||
| label:focus { | ||||
|     background-color: black; | ||||
| } | ||||
|  | ||||
| #cpu { | ||||
|     background-color: @green; | ||||
|     color: black; | ||||
| } | ||||
|  | ||||
| #memory { | ||||
|     background-color: @lavender; | ||||
| } | ||||
|  | ||||
| #disk { | ||||
|     background-color: @lavender; | ||||
| } | ||||
|  | ||||
| #backlight { | ||||
|     background-color: @overlay1; | ||||
| } | ||||
|  | ||||
| #custom-network { | ||||
|     background-color: @sky; | ||||
|     color: black; | ||||
| } | ||||
|  | ||||
| #network.disconnected { | ||||
|     background-color: @overlay2; | ||||
| } | ||||
|  | ||||
| #pulseaudio { | ||||
|     background-color: @yellow; | ||||
|     color: black; | ||||
| } | ||||
|  | ||||
| #pulseaudio.muted { | ||||
|     background-color: @overlay2; | ||||
|     color: @text; | ||||
| } | ||||
|  | ||||
| #custom-media { | ||||
|     background-color: @base; | ||||
|     color: @text; | ||||
|     min-width: 100px; | ||||
| } | ||||
|  | ||||
| #custom-spotify { | ||||
|     padding: 0 10px; | ||||
|     margin: 0 4px; | ||||
|     background-color: @green; | ||||
|     color: black; | ||||
| } | ||||
|  | ||||
| #temperature { | ||||
|     background-color: @peach; | ||||
|     color: black; | ||||
| } | ||||
|  | ||||
| #temperature.critical { | ||||
|     background-color: @red; | ||||
| } | ||||
|  | ||||
| #tray { | ||||
|     background-color: @base; | ||||
| } | ||||
|  | ||||
| #tray > .passive { | ||||
|     -gtk-icon-effect: dim; | ||||
| } | ||||
|  | ||||
| #tray > .needs-attention { | ||||
|     -gtk-icon-effect: highlight; | ||||
|     background-color: @red; | ||||
| } | ||||
|  | ||||
| #idle_inhibitor { | ||||
|     background-color: @base; | ||||
| } | ||||
|  | ||||
| #idle_inhibitor.activated { | ||||
|     background-color: @lavender; | ||||
|     color: #2d3436; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user