From 26f8c797676ddd9e27b30d9d013623a1afe945d1 Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Sun, 2 Nov 2025 23:53:10 +0100 Subject: [PATCH] update --- btop/btop.conf | 5 +- fish/functions/mpv_vr.fish | 3 + hypr/hyprqt6engine.conf | 3 + hypr/modules/env.conf | 3 + hypr/modules/input.conf | 5 - hypr/modules/keybinds.conf | 2 + hypr/modules/window_rules.conf | 7 +- mimeapps.list | 26 +- waybar/config.jsonc | 47 +- waybar/config.jsonc.new | 402 ++++++++++++++++++ waybar/scripts/droidcam_status.sh | 7 + waybar/scripts/gpu-screen-recorder-status.sh | 4 +- waybar/scripts/network.sh | 62 +++ waybar/style.css | 19 +- .../60-specific-device-rates.conf | 22 +- 15 files changed, 568 insertions(+), 49 deletions(-) create mode 100644 fish/functions/mpv_vr.fish create mode 100644 hypr/hyprqt6engine.conf create mode 100644 waybar/config.jsonc.new create mode 100755 waybar/scripts/droidcam_status.sh create mode 100755 waybar/scripts/network.sh diff --git a/btop/btop.conf b/btop/btop.conf index 694fb6a..f6da38a 100644 --- a/btop/btop.conf +++ b/btop/btop.conf @@ -1,4 +1,4 @@ -#? Config file for btop v. 1.4.4 +#? Config file for btop v. 1.4.5 #* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. #* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" @@ -115,6 +115,9 @@ cpu_bottom = False #* Shows the system uptime in the CPU box. show_uptime = True +#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo. +show_cpu_watts = True + #* Show cpu temperature. check_temp = True diff --git a/fish/functions/mpv_vr.fish b/fish/functions/mpv_vr.fish new file mode 100644 index 0000000..e3dd979 --- /dev/null +++ b/fish/functions/mpv_vr.fish @@ -0,0 +1,3 @@ +function mpv_vr --wraps='mpv --script=360plugin.lua --script-opts=360plugin-enabled=yes' --description 'alias mpv_vr=mpv --script=360plugin.lua --script-opts=360plugin-enabled=yes' + mpv --script=~/.config/mpv/scripts/360plugin.lua --script-opts=360plugin-enabled=yes $argv; +end diff --git a/hypr/hyprqt6engine.conf b/hypr/hyprqt6engine.conf new file mode 100644 index 0000000..27d2300 --- /dev/null +++ b/hypr/hyprqt6engine.conf @@ -0,0 +1,3 @@ +color_scheme=/usr/share/qt6ct/colors/catppuccin-mocha-maroon.conf +icon_theme=Papirus +style=Fusion diff --git a/hypr/modules/env.conf b/hypr/modules/env.conf index a16fbad..9b21d75 100644 --- a/hypr/modules/env.conf +++ b/hypr/modules/env.conf @@ -12,3 +12,6 @@ env = LIBVA_DRIVER_NAME,radeonsi env = VDPAU_DRIVER,radeonsi env = MOZ_ENABLE_WAYLAND,1 env = ELECTRON_OZONE_PLATFORM_HINT,wayland +env = AMD_VULKAN_ICD,RADV +env = WLR_NO_HARDWARE_CURSORS,0 +env = QT_QPA_PLATFORMTHEME,hyprqt6engine diff --git a/hypr/modules/input.conf b/hypr/modules/input.conf index aaa3090..a10e853 100644 --- a/hypr/modules/input.conf +++ b/hypr/modules/input.conf @@ -17,8 +17,3 @@ input { natural_scroll = false } } - -# https://wiki.hyprland.org/Configuring/Variables/#gestures -gestures { - workspace_swipe = false -} diff --git a/hypr/modules/keybinds.conf b/hypr/modules/keybinds.conf index 76d57b8..705ca0b 100644 --- a/hypr/modules/keybinds.conf +++ b/hypr/modules/keybinds.conf @@ -62,6 +62,8 @@ bind = ALT, Tab, changegroupactive, next # Example special workspace (scratchpad) bind = $mainMod, S, togglespecialworkspace, magic bind = $mainMod SHIFT, S, movetoworkspace, special:magic +bind = $mainMod, D, togglespecialworkspace, discord +bind = $mainMod SHIFT, D, movetoworkspace, special:discord # Scroll through existing workspaces with mainMod + scroll bind = $mainMod, mouse_down, workspace, e+1 diff --git a/hypr/modules/window_rules.conf b/hypr/modules/window_rules.conf index 3bd4377..d6ad726 100644 --- a/hypr/modules/window_rules.conf +++ b/hypr/modules/window_rules.conf @@ -63,9 +63,10 @@ windowrulev2=noblur,class:^(pavucontrol|blueman-manager|nm-connection-editor)$ # windowrule=workspace 3,class:^(Code)$ -windowrulev2=workspace special:magic silent,class:^(Spotify)$ -windowrulev2=workspace special:magic silent,class:^(spotify)$ -windowrulev2=workspace special:magic silent,class:^(discord|vesktop)$ +windowrulev2=workspace special:magic,class:^(Spotify)$ +windowrulev2=workspace special:magic,class:^(spotify)$ +windowrulev2=workspace special:discord,class:^(discord|vesktop)$ +# windowrulev2=workspace 2, class:^(brave-browser)$ # steam rules diff --git a/mimeapps.list b/mimeapps.list index 0b49f09..4136533 100644 --- a/mimeapps.list +++ b/mimeapps.list @@ -1,15 +1,35 @@ [Default Applications] -text/html=brave-browser.desktop -x-scheme-handler/http=brave-browser.desktop -x-scheme-handler/https=brave-browser.desktop +text/html=zen.desktop +x-scheme-handler/http=zen.desktop +x-scheme-handler/https=zen.desktop x-scheme-handler/about=brave-browser.desktop x-scheme-handler/unknown=brave-browser.desktop image/png=feh.desktop x-scheme-handler/discord=vesktop.desktop image/jpeg=feh.desktop audio/flac=mpv.desktop +x-scheme-handler/ror2mm=r2modman.desktop +image/webp=feh.desktop +x-scheme-handler/chrome=zen.desktop +application/x-extension-htm=zen.desktop +application/x-extension-html=zen.desktop +application/x-extension-shtml=zen.desktop +application/xhtml+xml=zen.desktop +application/x-extension-xhtml=zen.desktop +application/x-extension-xht=zen.desktop [Added Associations] image/png=feh.desktop; image/jpeg=feh.desktop; audio/flac=mpv.desktop; +image/webp=feh.desktop; +x-scheme-handler/http=zen.desktop; +x-scheme-handler/https=zen.desktop; +x-scheme-handler/chrome=zen.desktop; +text/html=zen.desktop; +application/x-extension-htm=zen.desktop; +application/x-extension-html=zen.desktop; +application/x-extension-shtml=zen.desktop; +application/xhtml+xml=zen.desktop; +application/x-extension-xhtml=zen.desktop; +application/x-extension-xht=zen.desktop; diff --git a/waybar/config.jsonc b/waybar/config.jsonc index 55b8b2d..9f095e7 100644 --- a/waybar/config.jsonc +++ b/waybar/config.jsonc @@ -14,8 +14,9 @@ "custom/mem", "custom/cpu", "custom/gpu", + "custom/network", "custom/disk-root", - "custom/disk-gdrive", + // "custom/disk-gdrive", "custom/disk-data", "custom/disk-games", // "network", @@ -23,9 +24,16 @@ "wireplumber", "tray", "custom/gpu-screen-recorder", + "custom/droidcam", "custom/gamemode", "clock" ], + "custom/network": { + "exec": "~/.config/waybar/scripts/network.sh", + "interval": 2, // in seconds + "format": "{}", + "return-type": "json" + }, "hyprland/workspaces": { "format": "{icon}", "on-click": "activate" @@ -37,7 +45,7 @@ "clock": { "format": "{:%a %d %b %H:%M}", "format-alt": false, - "on-click-right": "xdg-open https://calendar.proton.me/u/0/month &> /dev/null & disown", + "on-click-right": "xdg-open https://calendar.proton.me/u/0/month > /dev/null ", "tooltip": false, }, "cpu": { @@ -63,8 +71,8 @@ "hands-free": "", "default": ["", "", ""] }, - "on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle", - "on-click-right": "~/.config/waybar/scripts/audio.sh cycle", + "on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle ", + "on-click-right": "~/.config/waybar/scripts/audio.sh cycle ", "on-click-middle": "pavucontrol", "scroll-step": 1 }, @@ -74,7 +82,7 @@ "return-type": "json", "exec": "~/.config/waybar/scripts/bluetooth_audio.sh", "interval": 3, - "on-click": "~/.config/waybar/scripts/bluetooth_audio.sh disconnect & disown" + "on-click": "~/.config/waybar/scripts/bluetooth_audio.sh disconnect " }, "pulseaudio": { @@ -89,7 +97,7 @@ "car": "", "default": ["", ""] }, - "on-click": "pavucontrol & disown" + "on-click": "pavucontrol " }, "tray": { "icon-size": 18, @@ -98,7 +106,7 @@ "custom/power": { "format": "", "tooltip": false, - "on-click": "~/.config/hypr/scripts/powermenu.sh & disown" + "on-click": "~/.config/hypr/scripts/powermenu.sh " }, "custom/tlp": { "format": "{}", @@ -123,44 +131,51 @@ "return-type": "json", "exec": "~/.config/waybar/scripts/pixelbuds_pro_control.sh", "interval": 5, - "on-click": "~/.config/waybar/scripts/pixelbuds_pro_control.sh connect & disown", - "on-click-right": "~/.config/waybar/scripts/pixelbuds_pro_control.sh cycle_anc & disown" + "on-click": "~/.config/waybar/scripts/pixelbuds_pro_control.sh connect ", + "on-click-right": "~/.config/waybar/scripts/pixelbuds_pro_control.sh cycle_anc " }, "custom/audio-output": { "format": "{}", "return-type": "json", "exec": "/home/narl/.config/waybar/scripts/audio.sh show", - "on-click": "/home/narl/.config/waybar/scripts/audio.sh cycle & disown", + "on-click": "/home/narl/.config/waybar/scripts/audio.sh cycle ", "interval": 1 }, "custom/gamemode": { "format": "{}", "return-type": "json", "exec": "~/.config/waybar/scripts/gamemode_status.sh", - "on-click": "~/.config/hypr/scripts/gamemode.sh & disown", + "on-click": "~/.config/hypr/scripts/gamemode.sh ", "interval": 1 }, + "custom/droidcam": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/droidcam_status.sh", + "on-click": "~/.config/hypr/scripts/droidcam-ctrl.sh toggle", + "interval": 1 + }, "custom/gpu-screen-recorder": { "format": "{}", "return-type": "json", "exec": "~/.config/waybar/scripts/gpu-screen-recorder-status.sh", - "on-click-right": "~/.config/hypr/scripts/replay-ctrl.sh save & disown", - "on-click-middle": "nautilus ~/Videos/replay & disown", - "on-click": "~/.config/waybar/scripts/toggle-replay.sh & disown", + "on-click-right": "~/.config/hypr/scripts/replay-ctrl.sh save ", + "on-click-middle": "nautilus ~/Videos/replay ", + "on-click": "~/.config/waybar/scripts/toggle-replay.sh ", "interval": 1 }, "custom/gpu": { "format": "{}", "return-type": "json", "exec": "~/.config/waybar/scripts/gpu_info.sh", - "on-click": "lact gui & disown", + "on-click": "lact gui ", "interval": 3 }, "custom/cpu": { "format": "{}", "return-type": "json", "exec": "~/.config/waybar/scripts/cpu_info.sh", - "on-click": "zenmonitor & disown", + "on-click": "zenmonitor ", "interval": 3 }, "custom/mem": { diff --git a/waybar/config.jsonc.new b/waybar/config.jsonc.new new file mode 100644 index 0000000..af69767 --- /dev/null +++ b/waybar/config.jsonc.new @@ -0,0 +1,402 @@ +// ~/.config/waybar/config.jsonc +[{ + "layer": "top", + "position": "top", + "output": "eDP-1", + "height": 30, + "modules-left": ["hyprland/workspaces"], + "modules-center": [], + "modules-right": [ + "custom/pixelbuds_pro", + "wireplumber", + "custom/audio-output", + "custom/network", + "custom/mem", + "custom/cpu", + "custom/disk-root", + "custom/disk-gdrive", + "custom/tlp", + "tray", + "clock" + ], + + "hyprland/workspaces": { + "format": "{icon}", + "on-click": "activate" + }, + "hyprland/window": { + "format": "{}", + "max-length": 35 + }, + "clock": { + "format": "{:%a %d %b %H:%M}", + "format-alt": false, + "on-click-right": "xdg-open https://calendar.proton.me/u/0/month &> /dev/null & disown", + "tooltip": false, + }, + "cpu": { + "format": "CPU: {usage}%", + "tooltip": true, + "interval": 1 + }, + "memory": { + "format": "MEM: {used}/{total}GB", + "interval": 3 + }, + "network": { + "format-wifi": "{essid} ({signalStrength}%): {ipaddr}", + "format-ethernet": "{ifname}: {ipaddr}", + "format-disconnected": "Disconnected", + "tooltip-format": "{ifname} via {gwaddr}" + }, + "wireplumber": { + "format": "{volume}% {icon}", + "format-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "default": ["", "", ""] + }, + "on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle", + "on-click-right": "~/.config/waybar/scripts/audio.sh cycle", + "on-click-middle": "pavucontrol", + "scroll-step": 1 + }, + + "custom/bluetooth-audio": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/bluetooth_audio.sh", + "interval": 3, + "on-click": "~/.config/waybar/scripts/bluetooth_audio.sh disconnect & disown" + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": " Muted", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", ""] + }, + "on-click": "pavucontrol & disown" + }, + "tray": { + "icon-size": 18, + "spacing": 6 + }, + "custom/power": { + "format": "", + "tooltip": false, + "on-click": "~/.config/hypr/scripts/powermenu.sh & disown" + }, + "custom/tlp": { + "format": "{}", + "exec": "~/.config/waybar/scripts/tlp-profile.sh", + "return-type": "json", + "interval": 5 + }, + "battery": { + "states": { + "warning": 30, + "critical": 15 + }, + "format": "{capacity}%", + "format-charging": "{capacity}%", + "format-plugged": "{capacity}%", + "format-alt": "{time} {icon}", + "format-full": "{capacity}%", + "format-icons": ["", "", "", "", ""] + }, + "custom/pixelbuds_pro": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/pixelbuds_pro_control.sh", + "interval": 5, + "on-click": "~/.config/waybar/scripts/pixelbuds_pro_control.sh connect & disown", + "on-click-right": "~/.config/waybar/scripts/pixelbuds_pro_control.sh cycle_anc & disown" + }, + "custom/audio-output": { + "format": "{}", + "return-type": "json", + "exec": "/home/narl/.config/waybar/scripts/audio.sh show", + "on-click": "/home/narl/.config/waybar/scripts/audio.sh cycle & disown", + "interval": 1 + }, + "custom/gamemode": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/gamemode_status.sh", + "on-click": "~/.config/hypr/scripts/gamemode.sh & disown", + "interval": 1 + }, + "custom/gpu-screen-recorder": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/gpu-screen-recorder-status.sh", + "on-click-right": "~/.config/hypr/scripts/replay-ctrl.sh save & disown", + "on-click-middle": "nautilus ~/Videos/replay & disown", + "on-click": "~/.config/waybar/scripts/toggle-replay.sh & disown", + "interval": 1 + }, + "custom/gpu": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/gpu_info.sh", + "on-click": "lact gui & disown", + "interval": 3 + }, + "custom/cpu": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/cpu_info.sh", + "on-click": "zenmonitor & disown", + "interval": 3 + }, + "custom/mem": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/memory.sh", + "interval": 3 + }, + "custom/btrfs": { + "format": "{}", + "exec": "~/.config/waybar/scripts/btrfs.sh", + "return-type": "json", + "interval": 30 + }, + "custom/disk-root": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/disk_info.sh /", + "interval": 30 + }, + "custom/disk-gdrive": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/disk_info.sh ~/gdrive", + "interval": 30 + }, + "custom/disk-data": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/disk_info.sh ~/data", + "interval": 30 + }, + "custom/disk-games": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/disk_info.sh ~/games", + "interval": 30 + }, + "custom/network": { + "exec": "~/.config/waybar/scripts/network.sh", + "interval": 2, // in seconds + "format": "{}", + "return-type": "json" + } +},{ + "layer": "top", + "position": "top", + "output": "!eDP-1", + "height": 30, + "modules-left": ["hyprland/workspaces"], + "modules-center": [], + "modules-right": [ + // "custom/pixelbuds_pro", + "wireplumber", + "custom/audio-output", + "custom/network", + "custom/mem", + "custom/cpu", + "custom/disk-root", + "custom/disk-gdrive", + "custom/tlp", + "tray", + "clock" + ], + + "hyprland/workspaces": { + "format": "{icon}", + "on-click": "activate" + }, + "hyprland/window": { + "format": "{}", + "max-length": 35 + }, + "clock": { + "format": "{:%a %d %b %H:%M}", + "format-alt": false, + "on-click-right": "xdg-open https://calendar.proton.me/u/0/month &> /dev/null & disown", + "tooltip": false, + }, + "cpu": { + "format": "CPU: {usage}%", + "tooltip": true, + "interval": 1 + }, + "memory": { + "format": "MEM: {used}/{total}GB", + "interval": 3 + }, + "network": { + "format-wifi": "{essid} ({signalStrength}%): {ipaddr}", + "format-ethernet": "{ifname}: {ipaddr}", + "format-disconnected": "Disconnected", + "tooltip-format": "{ifname} via {gwaddr}" + }, + "wireplumber": { + "format": "{volume}% {icon}", + "format-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "default": ["", "", ""] + }, + "on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle", + "on-click-right": "~/.config/waybar/scripts/audio.sh cycle", + "on-click-middle": "pavucontrol", + "scroll-step": 1 + }, + + "custom/bluetooth-audio": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/bluetooth_audio.sh", + "interval": 3, + "on-click": "~/.config/waybar/scripts/bluetooth_audio.sh disconnect & disown" + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-muted": " Muted", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", ""] + }, + "on-click": "pavucontrol & disown" + }, + "tray": { + "icon-size": 18, + "spacing": 6 + }, + "custom/power": { + "format": "", + "tooltip": false, + "on-click": "~/.config/hypr/scripts/powermenu.sh & disown" + }, + "custom/tlp": { + "format": "{}", + "exec": "~/.config/waybar/scripts/tlp-profile.sh", + "return-type": "json", + "interval": 5 + }, + "battery": { + "states": { + "warning": 30, + "critical": 15 + }, + "format": "{capacity}%", + "format-charging": "{capacity}%", + "format-plugged": "{capacity}%", + "format-alt": "{time} {icon}", + "format-full": "{capacity}%", + "format-icons": ["", "", "", "", ""] + }, + "custom/pixelbuds_pro": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/pixelbuds_pro_control.sh", + "interval": 5, + "on-click": "~/.config/waybar/scripts/pixelbuds_pro_control.sh connect & disown", + "on-click-right": "~/.config/waybar/scripts/pixelbuds_pro_control.sh cycle_anc & disown" + }, + "custom/audio-output": { + "format": "{}", + "return-type": "json", + "exec": "/home/narl/.config/waybar/scripts/audio.sh show", + "on-click": "/home/narl/.config/waybar/scripts/audio.sh cycle & disown", + "interval": 1 + }, + "custom/gamemode": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/gamemode_status.sh", + "on-click": "~/.config/hypr/scripts/gamemode.sh & disown", + "interval": 1 + }, + "custom/gpu-screen-recorder": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/gpu-screen-recorder-status.sh", + "on-click-right": "~/.config/hypr/scripts/replay-ctrl.sh save & disown", + "on-click-middle": "nautilus ~/Videos/replay & disown", + "on-click": "~/.config/waybar/scripts/toggle-replay.sh & disown", + "interval": 1 + }, + "custom/gpu": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/gpu_info.sh", + "on-click": "lact gui & disown", + "interval": 3 + }, + "custom/cpu": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/cpu_info.sh", + "on-click": "zenmonitor & disown", + "interval": 3 + }, + "custom/mem": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/memory.sh", + "interval": 3 + }, + "custom/btrfs": { + "format": "{}", + "exec": "~/.config/waybar/scripts/btrfs.sh", + "return-type": "json", + "interval": 30 + }, + "custom/disk-root": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/disk_info.sh /", + "interval": 30 + }, + "custom/disk-gdrive": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/disk_info.sh ~/gdrive", + "interval": 30 + }, + "custom/disk-data": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/disk_info.sh ~/data", + "interval": 30 + }, + "custom/disk-games": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/scripts/disk_info.sh ~/games", + "interval": 30 + }, + "custom/network": { + "exec": "~/.config/waybar/scripts/network.sh", + "interval": 2, // in seconds + "format": "{}", + "return-type": "json" + } +}] diff --git a/waybar/scripts/droidcam_status.sh b/waybar/scripts/droidcam_status.sh new file mode 100755 index 0000000..3b80ab0 --- /dev/null +++ b/waybar/scripts/droidcam_status.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +if [ -f /tmp/droidcam.pid ]; then + echo "{\"text\": \"\", \"class\": \"active\"}" +else + echo "{\"text\": \"\"}" +fi diff --git a/waybar/scripts/gpu-screen-recorder-status.sh b/waybar/scripts/gpu-screen-recorder-status.sh index 3f67326..e22fe99 100755 --- a/waybar/scripts/gpu-screen-recorder-status.sh +++ b/waybar/scripts/gpu-screen-recorder-status.sh @@ -1,8 +1,8 @@ #!/bin/bash PID_FILE="/tmp/gpu-screen-recorder.pid" -FORMAT_RECORDING="" -FORMAT_STOPPED="" +FORMAT_RECORDING="󰄄" +FORMAT_STOPPED="󰄄" if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") diff --git a/waybar/scripts/network.sh b/waybar/scripts/network.sh new file mode 100755 index 0000000..5eb9fae --- /dev/null +++ b/waybar/scripts/network.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +# Path for the temporary file to store previous stats +STATS_FILE="/tmp/waybar_net_stats" + +# Find the primary default network interface by sorting routing metrics. +# This correctly prioritizes a VPN connection when it's active. +INTERFACE_INFO=$(ip route list | grep '^default' | sort -k 9 -n | head -n1) +INTERFACE=$(echo "$INTERFACE_INFO" | awk '{print $5}') + +# Exit if no active interface is found +if [ -z "$INTERFACE" ]; then + echo "{\"text\": \"No connection\"}" + exit 0 +fi + +# Get the IP address for the interface +IP_ADDR=$(ip -4 addr show "$INTERFACE" | grep -oP 'inet \K[\d.]+') + +# Get current time and byte counts +TIME_NOW=$(date +%s) +RX_BYTES_NOW=$(cat "/sys/class/net/$INTERFACE/statistics/rx_bytes") +TX_BYTES_NOW=$(cat "/sys/class/net/$INTERFACE/statistics/tx_bytes") + +# Initialize speeds to 0 +RX_MBPS="0.00" +TX_MBPS="0.00" + +# Read previous values if the stats file exists +if [ -f "$STATS_FILE" ]; then + source "$STATS_FILE" # This loads PREV_TIME, PREV_RX_BYTES, PREV_TX_BYTES +fi + +# Calculate speed if we have previous data and time has passed +if [ -n "$PREV_TIME" ] && [ "$TIME_NOW" -gt "$PREV_TIME" ]; then + TIME_DIFF=$((TIME_NOW - PREV_TIME)) + + RX_BPS=$(( (RX_BYTES_NOW - PREV_RX_BYTES) / TIME_DIFF )) + TX_BPS=$(( (TX_BYTES_NOW - PREV_TX_BYTES) / TIME_DIFF )) + + # Using printf for better formatting (forces two decimal places) + RX_MBPS=$(printf "%.2f" "$(echo "$RX_BPS / 1024 / 1024" | bc -l)") + TX_MBPS=$(printf "%.2f" "$(echo "$TX_BPS / 1024 / 1024" | bc -l)") +fi + +# Save current values for the next run +echo "PREV_TIME=$TIME_NOW" > "$STATS_FILE" +echo "PREV_RX_BYTES=$RX_BYTES_NOW" >> "$STATS_FILE" +echo "PREV_TX_BYTES=$TX_BYTES_NOW" >> "$STATS_FILE" + +# Format the main output string +OUTPUT_TEXT="$INTERFACE ($IP_ADDR):  ${RX_MBPS} MB/s  ${TX_MBPS} MB/s" + +# Prepend a VPN icon if a common VPN interface is active +case "$INTERFACE" in + tun*|wg*|ppp*|pvpn*) + OUTPUT_TEXT=" $OUTPUT_TEXT" + ;; +esac + +# Output JSON for Waybar +echo "{\"text\": \"$OUTPUT_TEXT\"}" diff --git a/waybar/style.css b/waybar/style.css index 53f51bb..f480a8e 100644 --- a/waybar/style.css +++ b/waybar/style.css @@ -63,6 +63,7 @@ window#waybar.hidden { #backlight, #wireplumber, #network, +#custom-network, #clock, #tray, #custom-disk-root, @@ -73,7 +74,8 @@ window#waybar.hidden { #custom-bluetooth-audio, #custom-audio-output, #custom-btrfs, -#custom-gpu-screen-recorder { +#custom-gpu-screen-recorder, +#custom-droidcam { border-radius: 10px; margin: 0px 3px; padding: 6px 12px; @@ -94,7 +96,13 @@ window#waybar.hidden { #custom-gpu-screen-recorder, #custom-gpu-screen-recorder.recording { - padding-right: 18px; + padding-right: 14px; + padding-left: 10px; +} + +#custom-droidcam, +#custom-droidcam.active { + padding-right: 14px; padding-left: 10px; } @@ -124,7 +132,8 @@ window#waybar.hidden { } #custom-gpu-screen-recorder, -#custom-gamemode { +#custom-gamemode, +#custom-droidcam { background-color: @base; color: @subtext1; border-bottom: 3px solid @subtext1; @@ -135,7 +144,8 @@ window#waybar.hidden { } #custom-gpu-screen-recorder.recording, -#custom-gamemode.active { +#custom-gamemode.active, +#custom-droidcam.active { color: @maroon; border-bottom: 3px solid @maroon; } @@ -205,6 +215,7 @@ window#waybar.hidden { #memory, #cpu, #disk, +#custom-network, #custom-gpu.normal, #custom-cpu.normal, #custom-mem.normal, diff --git a/wireplumber/wireplumber.conf.d/60-specific-device-rates.conf b/wireplumber/wireplumber.conf.d/60-specific-device-rates.conf index bec1267..06093bb 100644 --- a/wireplumber/wireplumber.conf.d/60-specific-device-rates.conf +++ b/wireplumber/wireplumber.conf.d/60-specific-device-rates.conf @@ -2,7 +2,12 @@ monitor.alsa.rules = [ { matches = [ { - node.name = "alsa_output.usb-iFi__by_AMR__iFi__by_AMR__HD_USB_Audio_0003-00.analog-stereo" + # iFi (by AMR) HD USB Audio + device.name = "*iFi*" + }, + { + # UMC204HD 192k + node.description = "*UMC204HD*" } ] actions = { @@ -12,18 +17,5 @@ monitor.alsa.rules = [ session.suspend-timeout-seconds = 0 } } - }, - { - matches = [ - { - node.name = "alsa_output.hw_U192k_0" - } - ] - actions = { - update-props = { - audio.format = "S32_LE" - audio.rate = 96000 - } - } } -] \ No newline at end of file +]