Compare commits

...

4 Commits

Author SHA1 Message Date
88cca79368 feat: Update hypr configs 2025-11-15 13:16:46 +11:00
5857d4a0ed feat: Update lockscreen 2025-10-23 13:49:17 +11:00
7f9b095859 feat: Update hypr config 2025-10-22 22:21:09 +11:00
6d3b2e7445 feat: Update lockscreen to be nicer 2025-10-22 18:35:56 +11:00
11 changed files with 350 additions and 197 deletions

View File

@@ -22,6 +22,14 @@ source = ~/.config/hypr/start-exec.conf
source = ~/.config/hypr/windowrules.conf
source = ~/.config/hypr/before-exit.conf
source = ~/.config/hypr/keybinds.conf
# Plugins
# hyprlang noerror true
source = ~/.config/hypr/plugins/split-monitor-workspaces.conf
# hyprlang noerror false
env = HYPRSHOT_DIR,/home/$USER/Pictures/Screenshots
env = XDG_MENU_PREFIX,arch-
@@ -134,11 +142,8 @@ master {
gestures {
# See https://wiki.hyprland.org/Configuring/Guestures/ for more
# hyprlang noerror true
gesture = 3, right, dispatcher, prevdesk
gesture = 3, left, dispatcher, nextdesk
# hyprlang noerror false
gesture = 3, horizontal, workspace
gesture = 3, vertical, special, terminal
}
cursor {
@@ -149,22 +154,15 @@ misc {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
disable_splash_rendering = 1
disable_hyprland_logo = 1
focus_on_activate = 0 # This breaks vdesks
focus_on_activate = 1 # This breaks vdesks
anr_missed_pings = 10
}
ecosystem {
no_donation_nag = 1
}
# hyprlang noerror true
plugin {
virtual-desktops {
names = 1:Coding, 2:Internet, 3:3,4:4, 5:Social
cycleworkspaces = 0
rememberlayout = none
notifyinit = 0
verbose_logging = 0
}
}
plugin {
hyprexpo {
columns = 3

View File

@@ -34,19 +34,99 @@ background {
# AUTO BACKGROUND
# AUTO BACKGROUND END
# TIME
# Time-Hour
label {
text = $TIME
color = rgb(255, 255, 255)
font_size = 90
font_family = $font
position = 75, 0
halign = left
valign = top
monitor =
text = cmd[update:1000] echo "<span>$(date +"%I")</span>"
color = rgba(255, 255, 255, 1)
font_size = 125
font_family = StretchPro
position = -80, 290
halign = center
valign = center
shadow_passes = 3
shadow_size = 3
shadow_color = rgba(0, 0, 0, 1)
}
# Time-Minute
label {
monitor =
text = cmd[update:1000] echo "<span>$(date +"%M")</span>"
color = rgba(147, 196, 255, 1)
font_size = 125
font_family = StretchPro
position = 0, 170
halign = center
valign = center
shadow_passes = 3
shadow_size = 3
shadow_color = rgba(0, 0, 0,1)
}
# Day-Month-Date
label {
monitor =
text = cmd[update:1000] echo -e "$(date +"%d %B")"
color = rgba(255, 255, 255, 1)
font_size = 22
font_family = Suisse Int'l Mono
position = 20, 92
halign = center
valign = center
shadow_passes = 3
shadow_size = 5
shadow_color = rgba(0, 0, 0, 1)
}
# USER AVATAR
image {
monitor =
path = $HOME/.face
rounding = 25
size = 200
# border_color = rgb(0, 0, 0)
border_size = 0
position = 0, -100
halign = center
valign = center
}
# INPUT FIELD
input-field {
monitor =
size = 300, 60
outline_thickness = 2
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
outer_color = rgba(255, 255, 255, 1)
inner_color = rgba(0, 0, 0, 1)
font_color = rgb(200, 200, 200)
fade_on_empty = false
font_family = SF Pro Display Bold
placeholder_text = <i><span foreground="##ffffff99">Password...</span></i>
hide_input = false
position = 0, -290
halign = center
valign = center
}
# CURRENT SONG
label {
monitor = eDP-1
text = cmd[update:1000] echo "$(~/.config/hypr/scripts/songdetail.sh)"
color = rgba(147, 196, 255, 1)
font_size = 18
font_family = JetBrains Mono Nerd, SF Pro Display Bold
position = 0, 20
halign = center
valign = bottom
}
# Battery
label {
monitor = eDP-1
text = cmd[update:1000] /home/nathan/.config/hypr/scripts/battery.sh
color = rgb(255, 255, 255)
font_size = 20
@@ -56,62 +136,15 @@ label {
valign = bottom
}
# DATE
# label {
# # monitor =
# text = cmd[update:43200000] date +"%A, %d %B %Y"
# color = rgb(255, 255, 255)
# font_size = 25
# font_family = $font
# position = 30, -150
# halign = left
# valign = top
# }
shape {
monitor =
size = 500, 100%
color = rgba(255, 255, 255, 0.18)
rounding = 25
# border_size = 4
# border_color = rgba(255, 255, 255, 1.0)
position = -25, 0
# Stats
label {
monitor = eDP-1
text = cmd[update:15000] /home/nathan/.config/hypr/scripts/stats.sh
color = rgb(255, 255, 255)
font_size = 10
font_family = Symbols Nerd Font Mono
position = 10, 10
halign = left
valign = center
}
# USER AVATAR
image {
# monitor =
path = $HOME/.face
rounding = 25
size = 200
# border_color = rgb(0, 0, 0)
border_size = 0
position = 150, 100
halign = left
valign = center
}
# INPUT FIELD
input-field {
# monitor =
size = 300, 60
position = 100, -47
outline_thickness = 4
dots_size = 0.2
dots_spacing = 0.2
dots_center = true
outer_color = rgb(0, 0, 0)
inner_color = rgb(255, 255, 255)
font_color = rgb(0, 0, 0)
fade_on_empty = false
placeholder_text = <span foreground="black"><i>󰌾</i> Nathan</span>
hide_input = false
check_color = rgb(212, 130, 6)
fail_color = rgb(255, 0, 0)
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i>
capslock_color = rgb(255, 0, 0)
halign = left
valign = center
valign = bottom
}

View File

@@ -4,13 +4,9 @@ $fileManager = dolphin
$menu = pgrep -x tofi-drun && pkill -x tofi-drun || tofi-drun --drun-launch=true > ~/.logs/tofi-drun.log 2>&1 &
$clipboard = /home/nathan/.local/bin/clipse
$StartWallpaperTimer = systemctl --user start wallpaper.timer && WallRizz -r -n -d ~/.config/backgrounds
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
$mainMod = SUPER
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = CTRL ALT, T, exec, $terminal
bind = $mainMod, Q, killactive,
bind = $mainMod, F, togglefloating,
@@ -18,14 +14,17 @@ bind = $mainMod, space, exec, $menu
bind = ALT, SPACE, exec, ~/.config/hypr/scripts/search-windows.sh
bind = $mainMod, L, exec, ~/.config/hypr/scripts/lock.sh
bind = $mainMod, H, exec, alacritty --class float -e ~/.config/hypr/scripts/help.py
bind = CTRL ALT, DELETE, exec, hyprpanel t powermenu
#bind = $mainMod, V, exec, [float] alacritty --class clipse -e /home/nathan/.local/bin/clipse
bind = $mainMod, V, exec, [float] kitty --class float-80 -e $clipboard
# bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, togglesplit,
# Layout
bind = $mainMod, J, togglesplit, # Split direction
bind = $mainMod, code:35, togglesplit, # Split direction
bind = $mainMod SHIFT, J,swapsplit # Swap master and secondary in dwindle
# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
@@ -33,59 +32,22 @@ bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Switch workspaces with mainMod + [0-9]
# bind = $mainMod ALT, 1, workspace, 1
# bind = $mainMod ALT, 2, workspace, 2
# bind = $mainMod ALT, 3, workspace, 3
# bind = $mainMod ALT, 4, workspace, 4
# bind = $mainMod ALT, 5, workspace, 5
# bind = $mainMod ALT, 6, workspace, 6
# bind = $mainMod ALT, 7, workspace, 7
# bind = $mainMod ALT, 8, workspace, 8
# bind = $mainMod ALT, 9, workspace, 9
# bind = $mainMod ALT, 0, workspace, 10
# hyprlang noerror true
bind = $mainMod, 1, vdesk, 1
bind = $mainMod, 2, vdesk, 2
bind = $mainMod, 3, vdesk, 3
bind = $mainMod, 4, vdesk, 4
bind = $mainMod, 5, vdesk, 5
bind = $mainMod, 6, vdesk, 6
bind = $mainMod, 7, vdesk, 7
bind = $mainMod, 8, vdesk, 8
bind = $mainMod, 9, vdesk, 9
bind = $mainMod, 0, vdesk, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetodesk, 1
bind = $mainMod SHIFT, 2, movetodesk, 2
bind = $mainMod SHIFT, 3, movetodesk, 3
bind = $mainMod SHIFT, 4, movetodesk, 4
bind = $mainMod SHIFT, 5, movetodesk, 5
bind = $mainMod SHIFT, 6, movetodesk, 6
bind = $mainMod SHIFT, 7, movetodesk, 7
bind = $mainMod SHIFT, 8, movetodesk, 8
bind = $mainMod SHIFT, 9, movetodesk, 9
bind = $mainMod SHIFT, 0, movetodesk, 10
# Example special workspace (scratchpad)
# Dedicated special workspace for terminal
bind = $mainMod, S, togglespecialworkspace, terminal
bind = $mainMod CTRL, S, movetoworkspace, special:terminal
bind = CTRL ALT, TAB, togglespecialworkspace, terminal
# Screenshots
bind = $mainMod SHIFT, S, exec, hyprshot -m region
bind = $mainMod CTRL SHIFT, S, exec, hyprshot -m window -m active
# hyprlang noerror true
# Used to use overview:toggle, but that resises the windows
# bind = $mainMod, TAB, overview:toggle
# bind = CTRL ALT, TAB, overview:toggle
# hyprlang noerror true
bind = $mainMod, TAB, hyprexpo:expo, toggle
bind = ALT, TAB, lastdesk
bind = CTRL ALT, TAB, togglespecialworkspace, terminal
# hyprlang noerror false
@@ -105,7 +67,7 @@ bindl=, XF86AudioNext, exec, playerctl next
bindl=, XF86AudioPrev, exec, playerctl previous
# Other FN keys
bindl= $mainMod CTRL, XF86TouchpadToggle, exec, hyprctl notify -1 2000 -1 "TODO Touchpad Toggle"
bind= $mainMod CTRL, XF86TouchpadToggle, exec, hyprctl notify -1 2000 -1 "TODO Touchpad Toggle"
bind = $mainMod, P, exec, hyprctl notify -1 2000 -1 "TODO Screen Settings"
bindl = , Print, exec, hyprshot -m output -m active
bind = $mainMod, Print, exec, hyprshot -m window -m active
@@ -155,7 +117,6 @@ bind = , 3, togglespecialworkspace, alternate
bind = , 3, submap, reset
bind = , T, exec, hyprctl notify 5 2000 0 "Select text to copy to clipboard..."
bind = , T, exec, ~/.config/OCR4Linux/OCR4Linux.sh --lang eng -r
bind = , T, submap, reset

View File

@@ -0,0 +1,31 @@
# https://github.com/Duckonaut/split-monitor-workspaces
bind = $mainMod, 1, split-workspace, 1
bind = $mainMod, 2, split-workspace, 2
bind = $mainMod, 3, split-workspace, 3
bind = $mainMod, 4, split-workspace, 4
bind = $mainMod, 5, split-workspace, 5
bind = $mainMod, 6, split-workspace, 6
bind = $mainMod, 7, split-workspace, 7
bind = $mainMod, 8, split-workspace, 8
bind = $mainMod, 9, split-workspace, 9
bind = $mainMod, 0, split-workspace, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, split-movetoworkspace, 1
bind = $mainMod SHIFT, 2, split-movetoworkspace, 2
bind = $mainMod SHIFT, 3, split-movetoworkspace, 3
bind = $mainMod SHIFT, 4, split-movetoworkspace, 4
bind = $mainMod SHIFT, 5, split-movetoworkspace, 5
bind = $mainMod SHIFT, 6, split-movetoworkspace, 6
bind = $mainMod SHIFT, 7, split-movetoworkspace, 7
bind = $mainMod SHIFT, 8, split-movetoworkspace, 8
bind = $mainMod SHIFT, 9, split-movetoworkspace, 9
bind = $mainMod SHIFT, 0, split-movetoworkspace, 10
bind = ALT, TAB, lastdesk
# Window rules for sticky apps
windowrule = workspace 5, class:vesktop
windowrule = workspace 5, class:org.telegram.desktop
windowrule = workspace 5, class:Slack

View File

@@ -0,0 +1,44 @@
# https://github.com/levnikmyskin/hyprland-virtual-desktops
bind = $mainMod, 1, vdesk, 1
bind = $mainMod, 2, vdesk, 2
bind = $mainMod, 3, vdesk, 3
bind = $mainMod, 4, vdesk, 4
bind = $mainMod, 5, vdesk, 5
bind = $mainMod, 6, vdesk, 6
bind = $mainMod, 7, vdesk, 7
bind = $mainMod, 8, vdesk, 8
bind = $mainMod, 9, vdesk, 9
bind = $mainMod, 0, vdesk, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetodesk, 1
bind = $mainMod SHIFT, 2, movetodesk, 2
bind = $mainMod SHIFT, 3, movetodesk, 3
bind = $mainMod SHIFT, 4, movetodesk, 4
bind = $mainMod SHIFT, 5, movetodesk, 5
bind = $mainMod SHIFT, 6, movetodesk, 6
bind = $mainMod SHIFT, 7, movetodesk, 7
bind = $mainMod SHIFT, 8, movetodesk, 8
bind = $mainMod SHIFT, 9, movetodesk, 9
bind = $mainMod SHIFT, 0, movetodesk, 10
bind = ALT, TAB, lastdesk
stickyrule = class:discord,5
stickyrule = class:vesktop,5
stickyrule = class:org.telegram.desktop,5
stickyrule = class:Slack,5
gesture = 3, right, dispatcher, prevdesk
gesture = 3, left, dispatcher, nextdesk
plugin {
virtual-desktops {
names = 1:Coding, 2:Internet, 3:3,4:4, 5:Social
cycleworkspaces = 0
rememberlayout = none
notifyinit = 0
verbose_logging = 0
}
}

View File

@@ -11,10 +11,12 @@ nextcloud &
# discord --start-minimized & Using vesktop now
sleep 2
vesktop --start-minimized &
vesktop --ozone-platform-hint=auto --start-minimized &
kdeconnect-indicator &
WallRizz -r -n -d ~/.config/backgrounds
walker --gapplication-service &
# Misc
/home/nathan/scripts/mute.sh

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env bash
echo "Preparing hyprlock configuration..."
# Path to hyprlock configuration file
CONF="$HOME/.config/hypr/hyprlock.conf"
# Get the list of outputs
mapfile -t outputs < <(hyprctl -j monitors | jq -r '.[].name')
@@ -25,44 +25,29 @@ awk -v content="$block" '
{ print }
' "$CONF" > "${CONF}.tmp" && mv "${CONF}.tmp" "$CONF"
echo "Starting hyprlock..."
/home/nathan/Git/hyprlock/build/hyprlock &
echo "Taking screenshots for lock screen..."
# Take a screenshot of each output before locking (!THIS IS SLOW!)
for output in "${outputs[@]}"; do
# grim -o "$output" "/tmp/${output}-lockscreen.png" &
$HOME/.config/hypr/scripts/spots.sh -s 8 <(grim -o "$output" -) "/tmp/${output}-lockscreen.png" &
done
while pgrep -x grim >/dev/null; do
sleep 0.1
done
# Start hyprlock while we process the images
# Apply image effect to each screenshot
# for output in "${outputs[@]}"; do
# # Apply blur effect using spots.sh
# /home/nathan/.config/hypr/scripts/spots.sh -s 8 "/tmp/${output}-lockscreen.png" "/tmp/${output}-lockscreen.png" &
# done
echo "Waiting for screenshots to complete..."
# Wait for all image processing to complete
while pgrep -x spots.sh >/dev/null; do
sleep 0.1
done
# Notify hyprlock to reload backgrounds
echo "Reloading hyprlock backgrounds..."
pkill -USR2 hyprlock
# Wait for hyprlock to exit
while pgrep -x hyprlock >/dev/null; do
echo "Waiting for hyprlock to exit..."
sleep 1
done
wait
echo "Hyprlock exited. Cleaning up..."
# Cleanup: Restore hyprlock.conf to original state
sed -i '/^# AUTO BACKGROUND$/,/^# AUTO BACKGROUND END$/{//!d}' "$CONF"

View File

@@ -0,0 +1,5 @@
#!/bin/bash
song_info=$(playerctl metadata --format '{{title}}  {{artist}}')
echo "$song_info"

View File

@@ -291,25 +291,25 @@ else
fi
# test input image
convert -quiet "$infile" $bricon -clamp +repage "$tmpA1" ||
magick -quiet "$infile" $bricon -clamp +repage "$tmpA1" ||
errMsg "--- FILE $infile DOES NOT EXIST OR IS NOT AN ORDINARY FILE, NOT READABLE OR HAS ZERO SIZE ---"
# test spot file if exists
if [ "$spotfile" != "" ]; then
convert -quiet "$spotfile" -alpha off +repage "$tmpA2" ||
magick -quiet "$spotfile" -alpha off +repage "$tmpA2" ||
errMsg "--- FILE $spotfile DOES NOT EXIST OR IS NOT AN ORDINARY FILE, NOT READABLE OR HAS ZERO SIZE ---"
fi
# get image width, height and aspect
ww=`convert $tmpA1 -ping -format "%w" info:`
hh=`convert $tmpA1 -ping -format "%h" info:`
ww=`magick $tmpA1 -ping -format "%w" info:`
hh=`magick $tmpA1 -ping -format "%h" info:`
# get size of spot and center of spot and last pixel of spot and pad size
if [ "$spotfile" = "" ]; then
sw=`echo $size | cut -dx -f1`
sh=`echo $size | cut -dx -f2`
scx=`convert xc: -format "%[fx:($sw-1)/2]" info:`
scy=`convert xc: -format "%[fx:($sh-1)/2]" info:`
scx=`magick xc: -format "%[fx:($sw-1)/2]" info:`
scy=`magick xc: -format "%[fx:($sh-1)/2]" info:`
lx=$((sw-1))
ly=$((sh-1))
@@ -318,8 +318,8 @@ if [ "$spotfile" = "" ]; then
ph=$((sh+2*pad))
else
pw=`convert $tmpA2 -ping -format "%w" info:`
ph=`convert $tmpA2 -ping -format "%h" info:`
pw=`magick $tmpA2 -ping -format "%w" info:`
ph=`magick $tmpA2 -ping -format "%h" info:`
fi
@@ -332,19 +332,19 @@ if [ "$spotfile" = "" ]; then
# create spot template
if [ "$type" = "circle" ]; then
convert -size ${sw}x${sh} xc:black \
magick -size ${sw}x${sh} xc:black \
+antialias -fill white -draw "ellipse $scx,$scy $scx,$scy 0,360" -alpha off \
$padding \
$tmpA2
elif [ "$type" = "square" ]; then
convert -size ${sw}x${sh} xc:black \
magick -size ${sw}x${sh} xc:black \
+antialias -fill white -draw "rectangle 0,0 $lx,$ly" -alpha off \
$padding \
$tmpA2
elif [ "$type" = "diamond" ]; then
convert -size ${sw}x${sh} xc:black \
magick -size ${sw}x${sh} xc:black \
+antialias -fill white -draw "polygon $scx,0 $lx,$scy $scx,$ly 0,$scy" -alpha off \
$padding \
$tmpA2
@@ -352,22 +352,22 @@ if [ "$spotfile" = "" ]; then
fi
# compute xmin and ymin and virtual canvas size
xmin=`convert xc: -format "%[fx:ceil($ww/$pw)]" info:`
ymin=`convert xc: -format "%[fx:ceil($hh/$ph)]" info:`
www=`convert xc: -format "%[fx:$xmin*$pw]" info:`
hhh=`convert xc: -format "%[fx:$ymin*$ph]" info:`
xmin=`magick xc: -format "%[fx:ceil($ww/$pw)]" info:`
ymin=`magick xc: -format "%[fx:ceil($hh/$ph)]" info:`
www=`magick xc: -format "%[fx:$xmin*$pw]" info:`
hhh=`magick xc: -format "%[fx:$ymin*$ph]" info:`
# process image
if [ "$edge" = "0" ]; then
convert \( $tmpA1 -define distort:viewport=${www}x${hhh}+0+0 -virtual-pixel mirror -distort SRT 0 \
magick \( $tmpA1 -define distort:viewport=${www}x${hhh}+0+0 -virtual-pixel mirror -distort SRT 0 \
-scale ${xmin}x${ymin}! -scale ${www}x${hhh}! -crop ${ww}x${hh}+0+0 +repage \) \
\( $tmpA2 -write mpr:tile +delete -size ${ww}x${hh}! tile:mpr:tile \) \
-alpha off -compose copy_opacity -composite -compose over \
-background $bgcolor -flatten \
"$outfile"
else
convert \( $tmpA1 -define distort:viewport=${www}x${hhh}+0 -virtual-pixel mirror -distort SRT 0 \
magick \( $tmpA1 -define distort:viewport=${www}x${hhh}+0 -virtual-pixel mirror -distort SRT 0 \
-scale ${xmin}x${ymin}! -scale ${www}x${hhh}! -crop ${ww}x${hh}+0+0 +repage \) \
\( $tmpA2 -write mpr:tile +delete -size ${ww}x${hh}! tile:mpr:tile \) \
\( -clone 1 -threshold 0 -edge $edge -clamp -fill $ecolor -opaque white -transparent black \) \

103
.config/hypr/scripts/stats.sh Executable file
View File

@@ -0,0 +1,103 @@
#!/usr/bin/env bash
# Get system statistics
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}' | cut -d. -f1)
MEMORY_USAGE=$(free -m | awk 'NR==2{printf "%.0f", $3*100/$2 }')
CPU_TEMP=""
# Get temp info (CPU temp)
if [ -r /sys/class/thermal/thermal_zone0/temp ]; then
CPU_TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp)
CPU_TEMP_C=$((CPU_TEMP_RAW / 1000))
CPU_TEMP="${CPU_TEMP_C}°C"
fi
echo "${CPU_USAGE}%${CPU_TEMP}${MEMORY_USAGE}%"
# GPU info
GPU_USAGE=$(cat /sys/class/drm/card1/device/gpu_busy_percent)
GPU_VRAM_USED=$(cat /sys/class/drm/card1/device/mem_info_vram_used)
GPU_VRAM_TOTAL=$(cat /sys/class/drm/card1/device/mem_info_vram_total)
GPU_VRAM_USAGE=$((GPU_VRAM_USED * 100 / GPU_VRAM_TOTAL))
echo "${GPU_USAGE}%  ${GPU_VRAM_USAGE}%"
# Battery time: find battery device via upower and parse "time to full" / "time to empty"
# fallback to sysfs if upower not available
BAT_PATH=""
if command -v upower >/dev/null 2>&1; then
BAT_PATH=$(upower -e | grep -E "battery|BAT" | head -n1)
fi
if [ -z "$BAT_PATH" ]; then
# try linux sysfs battery status file
if [ -r /sys/class/power_supply/BAT0/status ]; then
BAT_STATUS_FILE="/sys/class/power_supply/BAT0/status"
else
BAT_STATUS_FILE=""
fi
BATTERY_STATUS=""
if [ -n "$BAT_STATUS_FILE" ]; then
BATTERY_STATUS=$(cat "$BAT_STATUS_FILE")
fi
else
# use upower to read battery properties
BATTERY_STATUS=$(upower -i "$BAT_PATH" | awk -F: '/state:/ {gsub(/^[ \t]+|[ \t]+$/,"",$2); print $2; exit}')
fi
if [ "$BATTERY_STATUS" = "charging" ] || [ "$BATTERY_STATUS" = "Charging" ]; then
if [ -n "$BAT_PATH" ]; then
# get everything after the colon and trim
TIME_TO_FULL=$(upower -i "$BAT_PATH" | sed -n 's/^[ \t]*time to full:[ \t]*//Ip')
else
TIME_TO_FULL=""
fi
if [ -n "$TIME_TO_FULL" ]; then
echo "${TIME_TO_FULL} to full"
else
echo " Charging"
fi
elif [ "$BATTERY_STATUS" = "discharging" ] || [ "$BATTERY_STATUS" = "Discharging" ]; then
if [ -n "$BAT_PATH" ]; then
TIME_TO_EMPTY=$(upower -i "$BAT_PATH" | sed -n 's/^[ \t]*time to empty:[ \t]*//Ip')
else
TIME_TO_EMPTY=""
fi
if [ -n "$TIME_TO_EMPTY" ]; then
echo "${TIME_TO_EMPTY} to empty"
else
echo " Discharging"
fi
fi
# Check if internet is up by pinging a reliable host
if ping -c 1 -W 1 woodburn.au > /dev/null 2>&1; then
INTERNET_STATUS="up"
else
INTERNET_STATUS="down"
fi
# Get WIFI SSID if connected
echo " Internet: ${INTERNET_STATUS}"
# Get network info for each active interface
for IFACE in $(ls /sys/class/net/ | grep -E '^(en|wl|wg|tailscale|tun)'); do
IFACE_STATE=""
# safe read operstate
if [ -r "/sys/class/net/$IFACE/operstate" ]; then
IFACE_STATE=$(cat "/sys/class/net/$IFACE/operstate")
fi
# show physical interfaces when up, and always show virtual interfaces (tailscale/wg/tun)
if [ "$IFACE_STATE" = "up" ] || [[ "$IFACE" == tailscale* ]] || [[ "$IFACE" == wg* ]] || [[ "$IFACE" == tun* ]]; then
RX_BYTES=$(cat "/sys/class/net/$IFACE/statistics/rx_bytes" 2>/dev/null || echo 0)
TX_BYTES=$(cat "/sys/class/net/$IFACE/statistics/tx_bytes" 2>/dev/null || echo 0)
RX_HR=$(numfmt --to=iec --suffix=B "$RX_BYTES")
TX_HR=$(numfmt --to=iec --suffix=B "$TX_BYTES")
echo "${IFACE}: 󰇚 ${RX_HR} 󰕒 ${TX_HR}"
fi
done
# curl https://wttr.in/Canberra\?format\="%l:+%t+UV:+%u"

View File

@@ -1,4 +1,4 @@
# hyprlang noerror true
# Default floating rules to stop windows being too large or small
windowrulev2 = size <80% <80%,floating:1
@@ -28,24 +28,17 @@ windowrulev2 = move onscreen cursor,class:^(brave-)(.*)(-.*)$
windowrulev2 = move onscreen cursor -50% 0,class:^(com.nextcloud.desktopclient.nextcloud)$
windowrulev2 = float,class:^(com.nextcloud.desktopclient.nextcloud)$
windowrulev2 = size 800px, 500px,class:^(com.nextcloud.desktopclient.nextcloud)$
# # Start windows
stickyrule = class:discord,5
stickyrule = class:vesktop,5
stickyrule = class:org.telegram.desktop,5
stickyrule = class:Slack,5
windowrule = size 800 500,class:^(com.nextcloud.desktopclient.nextcloud)$
workspace = special:gromit, gapsin:0, gapsout:0, shadow:0, on-created-empty: gromit-mpx -a
windowrule = noblur, class:^(Gromit-mpx)$
windowrule = opacity 1 override, 1 override, class:^(Gromit-mpx)$
windowrule = opacity 1 override 1 override, class:^(Gromit-mpx)$
windowrule = noshadow, class:^(Gromit-mpx)$
windowrule = size 100% 100%, class:^(Gromit-mpx)$
# Floating broken windows
windowrule = opacity 1 override 1 override class:^(xdg-desktop-portal-gtk)$
windowrule = opacity 1 override 1 override, class:^(xdg-desktop-portal-gtk)$
windowrule = stayfocused, class:^(xdg-desktop-portal-gtk)$
windowrule = stayfocused, class:^(soffice)$
windowrule = stayfocused, class:^(virt-manager)$, title:^$
@@ -60,23 +53,21 @@ windowrulev2 = stayfocused, class:^(Sparrow)$, title:^$, xwayland:1
# No Opacity windowrules
windowrule = opacity 1 override 1 override class:brave-browser
windowrule = opacity 1 override 1 override class:mpv
windowrule = opacity 1 override 1 override class:virt-manager
windowrule = opacity 1 override 1 override class:^(Bootstrap Studio)$
windowrule = opacity 1 override 1 override class:^(Minecraft)(.*)$
windowrule = opacity 1 override 1 override class:^(gimp)$
windowrule = opacity 1 override 1 override class:^(com.obsproject.Studio)$
windowrule = opacity 1 override 1 override class:^$
windowrule = opacity 1 override 1 override, class:^(brave-browser)$
windowrule = opacity 1 override 1 override, class:^(mpv)$
windowrule = opacity 1 override 1 override, class:^(virt-manager)$
windowrule = opacity 1 override 1 override, class:^(Bootstrap Studio)$
windowrule = opacity 1 override 1 override, class:^(Minecraft)(.*)$
windowrule = opacity 1 override 1 override, class:^(gimp)$
windowrule = opacity 1 override 1 override, class:^(com.obsproject.Studio)$
windowrule = opacity 1 override 1 override, class:^$
# Disable opacity for Alacritty (as it already has a transparent background)
windowrule = opacity 1 override 0.75 override class:^(Alacritty)$
windowrule = opacity 1 override 0.75 override, class:^(Alacritty)$
workspace = special:terminal, on-created-empty: alacritty
# hyprlang noerror false
# Tags for opacity
windowrule = opacity 0.1 override 0.1 override, tag:opacity:0.1
windowrule = opacity 0.2 override 0.2 override, tag:opacity:0.2
@@ -91,15 +82,15 @@ windowrule = opacity 1 override 1 override, tag:opacity:1
# freeRDP - Remote Desktop Protocol Client
windowrulev2 = float, xclass:xfreerdp
windowrule = float, class:^(xfreerdp)$
# match by X11 WM_CLASS you set in xfreerdp
windowrulev2 = float, xclass:Autodesk Fusion
windowrulev2 = center, xclass:Autodesk Fusion
windowrule = float, class:^(Autodesk Fusion)$
windowrule = center, class:^(Autodesk Fusion)$
# prevent tiling / auto-fullscreen for these windows
#windowrulev2 = disableautotile, xclass:Autodesk Fusion
windowrule = float, xclass:Autodesk Fusion
windowrule = float, class:^(Autodesk Fusion)$
# optionally force borderless (if you prefer)
windowrulev2 = noborder, xclass:Autodesk Fusion
windowrule = noborder, class:^(Autodesk Fusion)$