i3_configuration/i3status/mytopbar.sh

436 lines
10 KiB
Bash
Raw Normal View History

2025-09-22 21:36:45 +02:00
#!/bin/sh
# i3 config in ~/.config/i3/config :
# bar {
# status_command exec /home/you/.config/i3status/mybar.sh
# }
bg_bar_color="#282A36"
# Print a left caret separator
# @params {string} $1 text color, ex: "#FF0000"
# @params {string} $2 background color, ex: "#FF0000"
separator() {
echo -n "{"
echo -n "\"full_text\":\"\"," # CTRL+Ue0b2
echo -n "\"separator\":false,"
echo -n "\"separator_block_width\":0,"
echo -n "\"border\":\"$bg_bar_color\","
echo -n "\"border_left\":0,"
echo -n "\"border_right\":0,"
echo -n "\"border_top\":2,"
echo -n "\"border_bottom\":2,"
echo -n "\"color\":\"$1\","
echo -n "\"background\":\"$2\""
echo -n "}"
}
common() {
echo -n "\"border\": \"$bg_bar_color\","
echo -n "\"separator\":false,"
echo -n "\"separator_block_width\":0,"
echo -n "\"border_top\":2,"
echo -n "\"border_bottom\":2,"
echo -n "\"border_left\":0,"
echo -n "\"border_right\":0"
}
root_text() {
local bg="#000000"
local text_color="#D48F06"
separator $bg "#FFD180"
echo -n ",{"
echo -n "\"name\":\"id_root_text\","
echo -n "\"color\":\"$text_color\","
2025-09-24 21:55:26 +02:00
echo -n "\"full_text\":\"  $(echo -n 'Root:')\","
2025-09-22 21:36:45 +02:00
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
root_usage() {
local bg="#000000"
local text_color="#00A300"
separator $bg "#2E7D32"
echo -n ",{"
echo -n "\"name\":\"id_root_usage\","
echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\"$(df --output=pcent / | grep -v Uti)\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
home_text() {
local bg="#000000"
local text_color="#D48F06"
separator $bg "#FFD180"
echo -n ",{"
echo -n "\"name\":\"id_home_text\","
echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\" $(echo -n 'Home:')\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
home_usage() {
local bg="#000000"
local text_color="#00A300"
separator $bg "#2E7D32"
echo -n ",{"
echo -n "\"name\":\"id_home_usage\","
echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\"$(df --output=pcent /home | grep -v Uti)\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
src_usage() {
local bg="#000000"
local text_color="#00A300"
separator $bg "#2E7D32"
echo -n ",{"
echo -n "\"name\":\"id_src_usage\","
echo -n "\"color\":\"$text_color\","
2025-09-25 00:10:50 +02:00
echo -n "\"full_text\":\"$(df --output=pcent /usr/src | grep -v Uti) \","
2025-09-22 21:36:45 +02:00
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
src_text() {
local bg="#000000"
local text_color="#D48F06"
separator $bg "#FFD180"
echo -n ",{"
echo -n "\"name\":\"id_src_text\","
echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\" $(echo -n 'Src:')\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
seclists_usage() {
local bg="#000000"
local text_color="#00A300"
separator $bg "#2E7D32"
echo -n ",{"
echo -n "\"name\":\"id_seclists_usage\","
echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\"$(df --output=pcent /usr/share/seclists | grep -v Uti)\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
seclists_text() {
local bg="#000000"
local text_color="#D48F06"
separator $bg "#FFD180"
echo -n ",{"
echo -n "\"name\":\"id_boot_text\","
echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\" $(echo -n 'Sec:')\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
boot_usage() {
local bg="#000000"
local text_color="#00A300"
separator $bg "#2E7D32"
echo -n ",{"
echo -n "\"name\":\"id_boot_usage\","
echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\"$(df --output=pcent /boot | grep -v Uti)\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
boot_text() {
local bg="#000000"
local text_color="#D48F06"
separator $bg "#FFD180"
echo -n ",{"
echo -n "\"name\":\"id_boot_text\","
echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\" $(echo -n 'Boot:')\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
memory_text() {
local bg="#000000"
local text_color="#D48F06"
separator $bg "#FFD180"
echo -n ",{"
echo -n "\"name\":\"id_memory_text\","
echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\" $(echo -n ' Mem: ')\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
memory() {
local bg="#000000"
local text_color="#00A300"
separator $bg "#FFD180"
echo -n ",{"
echo -n "\"color\":\"$text_color\","
echo -n "\"name\":\"id_memory\","
echo -n "\"full_text\":\"$(free | awk '/^Mem/ { printf("%.2f", $3/$2 * 100.0) }')%\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
cpu_usage() {
local text_color="#00A300"
separator $bg "#FFD180"
echo -n ",{"
echo -n "\"color\":\"$text_color\","
echo -n "\"name\":\"id_cpu_usage\","
echo -n "\"full_text\":\"$(ps -A -o pcpu | tail -n+2 | paste -sd+ | bc)% \","
echo -n "\"background\":\"#000000\","
common
echo -n "},"
}
cpu_text() {
local bg="#000000"
local text_color="#D48F06"
separator $bg "#FFD180"
echo -n ",{"
echo -n "\"name\":\"id_cpu_text\","
echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\" $(echo -n ' CPU: ')\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
mydate() {
local bg="#000000"
separator $bg "#FFD190"
echo -n ",{"
echo -n "\"name\":\"id_time\","
echo -n "\"full_text\":\"  $(date "+%a %d/%m %H:%M") \","
echo -n "\"color\":\"#D48F06\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
bat_text() {
local bg="#000000"
local text_color="#D48F06"
charging=$(cat /sys/class/power_supply/BAT0/uevent | grep "POWER_SUPPLY_STATUS" | cut -d'=' -f2) # POWER_SUPPLY_STATUS=Discharging|Charging
icon=""
if [ "$charging" == "Charging" ]; then
icon=""
fi
separator $bg "#FFD180"
echo -n ",{"
echo -n "\"name\":\"id_bat_text\","
echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\"${icon}$(echo -n ' Bat: ')\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
battery0() {
if [ -f /sys/class/power_supply/BAT0/uevent ]; then
local bg="#000000"
separator $bg "#E0E0E0"
bg_separator_previous=$bg
prct=$(cat /sys/class/power_supply/BAT0/uevent | grep "POWER_SUPPLY_CAPACITY=" | cut -d'=' -f2)
echo -n ",{"
echo -n "\"name\":\"battery0\","
echo -n "\"full_text\":\"${prct}% \","
echo -n "\"color\":\"#00A300\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
else
bg_separator_previous="#E0E0E0"
fi
}
volume() {
local bg="#000000"
local text_color="#D48F06"
separator $bg $bg_separator_previous
vol=$(pulsemixer --get-volume)
echo -n ",{"
echo -n "\"name\":\"id_volume\","
echo -n "\"color\":\"$text_color\","
if [ $vol -le 0 ]; then
echo -n "\"full_text\":\"  ${vol}% \","
else
echo -n "\"full_text\":\"  ${vol}% \","
fi
echo -n "\"background\":\"$bg\","
common
echo -n "},"
2025-10-02 17:22:47 +02:00
#separator $bg_bar_color $bg
2025-09-22 21:36:45 +02:00
}
systemupdate() {
local nb=$(checkupdates | wc -l)
if (( $nb > 0)); then
echo -n ",{"
echo -n "\"name\":\"id_systemupdate\","
echo -n "\"full_text\":\"  ${nb}\""
echo -n "}"
fi
}
2025-09-24 21:55:26 +02:00
Artist_text() {
local bg="#000000"
local text_color="#D48F06"
separator $bg "#FFD180"
echo -n ",{"
echo -n "\"name\":\"id_artist_text\","
echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\"🎧 $(ncmpcpp --current-song "{%a} ")\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
Music_text() {
local bg="#000000"
local text_color="#00A300"
separator $bg "#FFD180"
echo -n ",{"
echo -n "\"name\":\"id_music_text\","
echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\"$(ncmpcpp --current-song "{%t} ")\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
2025-10-02 17:22:47 +02:00
Backlight_text() {
local bg="#000000"
local text_color="#D48F06"
separator $bg "#FFD180"
echo -n ",{"
echo -n "\"name\":\"id_backlight_text\","
echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\"🞻 $( xbacklight -get)%\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
separator $bg_bar_color $bg
}
2025-09-24 21:55:26 +02:00
Album_text() {
local bg="#000000"
local text_color="#D48F06"
separator $bg "#FFD180"
echo -n ",{"
echo -n "\"name\":\"id_album_text\","
echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\"$(ncmpcpp --current-song " {%b} ")\","
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
cutator() {
local bg="#000000"
local text_color="#919191"
separator $bg "#FFD180"
echo -n ",{"
echo -n "\"name\":\"id_cutator_text\","
2025-09-25 00:10:50 +02:00
# echo -n "\"color\":\"$text_color\","
echo -n "\"full_text\":\"$(echo -n '☢')\","
2025-09-24 21:55:26 +02:00
echo -n "\"background\":\"$bg\","
common
echo -n "},"
}
2025-09-22 21:36:45 +02:00
logout() {
echo -n ",{"
echo -n "\"name\":\"id_logout\","
echo -n "\"full_text\":\"  \""
echo -n "}"
}
# https://github.com/i3/i3/blob/next/contrib/trivial-bar-script.sh
echo '{ "version": 1, "click_events":true }' # Send the header so that i3bar knows we want to use JSON:
echo '[' # Begin the endless array.
echo '[]' # We send an empty first array of blocks to make the loop simpler:
# Now send blocks with information forever:
(while :;
do
echo -n ",["
2025-09-24 21:55:26 +02:00
Artist_text
Music_text
Album_text
cutator
2025-09-22 21:36:45 +02:00
root_text
root_usage
home_text
home_usage
boot_text
boot_usage
src_text
src_usage
2025-09-24 21:55:26 +02:00
# seclists_text
# seclists_usage
cutator
2025-09-22 21:36:45 +02:00
memory_text
memory
cpu_text
cpu_usage
2025-09-24 21:55:26 +02:00
cutator
2025-09-22 21:36:45 +02:00
mydate
bat_text
battery0
volume
2025-10-02 17:22:47 +02:00
Backlight_text
2025-09-22 21:36:45 +02:00
logout
echo "]"
sleep 1
done) &
# click events
while read line;
do
# echo $line > /home/you/gitclones/github/i3/tmp.txt
# {"name":"id_vpn","button":1,"modifiers":["Mod2"],"x":2982,"y":9,"relative_x":67,"relative_y":9,"width":95,"height":22}
# CPU
if [[ $line == *"name"*"id_cpu_usage"* ]]; then
wezterm --config-file /home/pierre/.config/i3status/wezterm_htop.lua -e --class term_date htop &
# TIME
elif [[ $line == *"name"*"id_time"* ]]; then
wezterm --config-file /home/pierre/.config/i3status/wezterm_date.lua -e --position screen:1582,21 --class term_date /home/pierre/.config/i3status/click_time.sh &
# VOLUME
elif [[ $line == *"name"*"id_volume"* ]]; then
wezterm -e --class term_date -e pulsemixer &
2025-09-24 21:55:26 +02:00
elif [[ $line == *"name"*"artist"* ]]; then
wezterm -e --class term_date -e ncmpcpp &
#
2025-09-22 21:36:45 +02:00
# LOGOUT
elif [[ $line == *"name"*"id_logout"* ]]; then
i3-nagbar -t warning -m 'Log out ?' -b 'yes' 'i3-msg exit' > /dev/null &
fi
done