diff --git a/.gitignore b/.gitignore index 1247faf..56fe045 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ !wireplumber/ !systemd/ fish/fish_variables +waybar/fluxo-rs diff --git a/waybar/config.jsonc b/waybar/config.jsonc index 5bf3113..785ea11 100644 --- a/waybar/config.jsonc +++ b/waybar/config.jsonc @@ -19,6 +19,7 @@ ], "modules-right": [ "tray", + "custom/gamemode", "custom/power_status" ], @@ -41,9 +42,17 @@ "spacing": 10 }, + "custom/gamemode": { + "format": "{}", + "return-type": "json", + "exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs game", + "on-click": "~/.config/hypr/scripts/gamemode.sh & disown", + "interval": 1 + }, + // --- Fluxo-rs Power --- "custom/power_status": { - "format": "{}", + "format": "{} ", "return-type": "json", "exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs power", "on-click": "~/.config/hypr/scripts/powermenu.sh & disown", @@ -64,13 +73,12 @@ "custom/sys", "custom/cpu", "custom/mem", - "custom/network" + "custom/network", + "custom/disk-root" ], "modules-center": [ - "custom/gamemode" ], "modules-right": [ - "custom/disk-root", "custom/bluetooth-audio", "custom/volume", "custom/mic" @@ -110,13 +118,6 @@ "exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs disk /", "interval": 30 }, - "custom/gamemode": { - "format": "{}", - "return-type": "json", - "exec": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs game", - "on-click": "~/.config/hypr/scripts/gamemode.sh & disown", - "interval": 1 - }, // --- Fluxo-rs Audio & BT --- "custom/volume": { @@ -128,7 +129,7 @@ "on-scroll-down": "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-", "on-click-right": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs vol --cycle", "on-click-middle": "pavucontrol", - "interval": 2 + "interval": 1 }, "custom/mic": { "format": "{}", @@ -139,7 +140,7 @@ "on-scroll-down": "wpctl set-volume @DEFAULT_AUDIO_SOURCE@ 5%-", "on-click-right": "~/.config/waybar/fluxo-rs/target/release/fluxo-rs mic --cycle", "on-click-middle": "pavucontrol", - "interval": 2 + "interval": 1 }, "custom/bluetooth-audio": { "format": "{}", diff --git a/waybar/scripts/network.sh b/waybar/scripts/network.sh index 5eb9fae..7acff8d 100755 --- a/waybar/scripts/network.sh +++ b/waybar/scripts/network.sh @@ -28,11 +28,16 @@ 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 + # shellcheck source=/dev/null + # Use a lock to ensure we don't source while another instance is writing + { + flock -s 200 || exit 1 + source "$STATS_FILE" 2>/dev/null + } 200>"$STATS_FILE.lock" fi # Calculate speed if we have previous data and time has passed -if [ -n "$PREV_TIME" ] && [ "$TIME_NOW" -gt "$PREV_TIME" ]; then +if [ -n "$PREV_TIME" ] && [ -n "$PREV_RX_BYTES" ] && [ -n "$PREV_TX_BYTES" ] && [ "$TIME_NOW" -gt "$PREV_TIME" ]; then TIME_DIFF=$((TIME_NOW - PREV_TIME)) RX_BPS=$(( (RX_BYTES_NOW - PREV_RX_BYTES) / TIME_DIFF )) @@ -43,10 +48,14 @@ if [ -n "$PREV_TIME" ] && [ "$TIME_NOW" -gt "$PREV_TIME" ]; then 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" +# Save current values for the next run safely using a lock +# We use a subshell with flock to ensure atomic updates and prevent race conditions +( + flock -x 200 || exit 1 + 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" +) 200>"$STATS_FILE.lock" # Format the main output string OUTPUT_TEXT="$INTERFACE ($IP_ADDR):  ${RX_MBPS} MB/s  ${TX_MBPS} MB/s"