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
+]