mirror of
https://github.com/ItsDrike/dotfiles.git
synced 2024-12-26 13:14:35 +00:00
Dynamically resize xmobar for trayer
This commit is contained in:
parent
d83382e570
commit
a88bea6ba2
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/bash
|
#!/bin/sh
|
||||||
|
|
||||||
if [ $# -lt 1 ]; then
|
if [ $# -lt 1 ]; then
|
||||||
echo "Invalid amount of arguments passed!"
|
echo "Invalid amount of arguments passed!"
|
||||||
|
@ -10,7 +10,7 @@ MONITOR_AMOUT="$1"
|
||||||
WIDTH=1920
|
WIDTH=1920
|
||||||
WORK_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/xmobar"
|
WORK_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/xmobar"
|
||||||
|
|
||||||
make_line(){
|
make_position_line(){
|
||||||
xpos=$(($1 * $WIDTH))
|
xpos=$(($1 * $WIDTH))
|
||||||
line=", position = Static { xpos = $xpos, ypos = 0, width = $WIDTH, height = 24 }"
|
line=", position = Static { xpos = $xpos, ypos = 0, width = $WIDTH, height = 24 }"
|
||||||
echo "$line"
|
echo "$line"
|
||||||
|
@ -20,8 +20,22 @@ make_line(){
|
||||||
# Remove all already existing specific xmobar configurations
|
# Remove all already existing specific xmobar configurations
|
||||||
find $WORK_DIR -regex '\./xmobarrc[0-9]+' -exec rm {} +
|
find $WORK_DIR -regex '\./xmobarrc[0-9]+' -exec rm {} +
|
||||||
|
|
||||||
|
xmobarhs_content="$(cat $WORK_DIR/xmobarrc.hs)"
|
||||||
|
position_line_0="$(make_position_line 0)"
|
||||||
|
|
||||||
for ((n=0;n<MONITOR_AMOUT;n++)); do
|
for ((n=0;n<MONITOR_AMOUT;n++)); do
|
||||||
cur_file="$WORK_DIR/xmobarrc$n"
|
cur_file="$WORK_DIR/xmobarrc$n"
|
||||||
sed "s/$(make_line 0)/$(make_line $n)/g" "$WORK_DIR/xmobarrc.hs" > "$cur_file"
|
|
||||||
|
# Replace position line to accomodate for multiple monitors
|
||||||
|
position_line="$(make_position_line $n)"
|
||||||
|
contents="${xmobarhs_content/$position_line_0/$position_line}"
|
||||||
|
|
||||||
|
# Only keep trayer spacer in 1st xmobar
|
||||||
|
if [ $n -ne 0 ]; then
|
||||||
|
#contents="${contents/'%trayerpad%'/''}"
|
||||||
|
contents="$(grep -v trayerpad <<< $contents)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$contents" > "$cur_file"
|
||||||
echo "$cur_file created."
|
echo "$cur_file created."
|
||||||
done
|
done
|
||||||
|
|
49
home/.config/xmobar/trayer-padding-icon.sh
Executable file
49
home/.config/xmobar/trayer-padding-icon.sh
Executable file
|
@ -0,0 +1,49 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copied from https://github.com/jaor/xmobar/issues/239#issuecomment-233206552
|
||||||
|
# Detects the width of running trayer-srg window (xprop name 'panel')
|
||||||
|
# and creates an XPM icon of that width, 1px height, and transparent.
|
||||||
|
# Outputs an <icon>-tag for use in xmobar to display the generated
|
||||||
|
# XPM icon.
|
||||||
|
#
|
||||||
|
# Run script from xmobar:
|
||||||
|
# `Run Com "/where/ever/trayer-padding-icon.sh" [] "trayerpad" 10`
|
||||||
|
# and use `%trayerpad%` in your template.
|
||||||
|
|
||||||
|
|
||||||
|
# Function to create a transparent Wx1 px XPM icon
|
||||||
|
create_xpm_icon () {
|
||||||
|
timestamp=$(date)
|
||||||
|
pixels=$(for i in `seq $1`; do echo -n "."; done)
|
||||||
|
|
||||||
|
cat << EOF > "$2"
|
||||||
|
/* XPM *
|
||||||
|
static char * trayer_pad_xpm[] = {
|
||||||
|
/* This XPM icon is used for padding in xmobar to */
|
||||||
|
/* leave room for trayer-srg. It is dynamically */
|
||||||
|
/* updated by by trayer-padding-icon.sh which is run */
|
||||||
|
/* by xmobar. */
|
||||||
|
/* Created: ${timestamp} */
|
||||||
|
/* <w/cols> <h/rows> <colors> <chars per pixel> */
|
||||||
|
"$1 1 1 1",
|
||||||
|
/* Colors (none: transparent) */
|
||||||
|
". c none",
|
||||||
|
/* Pixels */
|
||||||
|
"$pixels"
|
||||||
|
};
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# Width of the trayer window
|
||||||
|
width=$(xprop -name panel | grep 'program specified minimum size' | cut -d ' ' -f 5)
|
||||||
|
|
||||||
|
# Icon file name
|
||||||
|
iconfile="/tmp/trayer-padding-${width}px.xpm"
|
||||||
|
|
||||||
|
# If the desired icon does not exist create it
|
||||||
|
if [ ! -f $iconfile ]; then
|
||||||
|
create_xpm_icon $width $iconfile
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Output the icon tag for xmobar
|
||||||
|
echo "<icon=${iconfile}/>"
|
||||||
|
|
|
@ -12,7 +12,8 @@ Config { font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=t
|
||||||
, hideOnStart = False
|
, hideOnStart = False
|
||||||
, allDesktops = True
|
, allDesktops = True
|
||||||
, persistent = True
|
, persistent = True
|
||||||
--, iconRoot = "." -- default: "."
|
-- apparently there's no way to use env var or relpaths here
|
||||||
|
, iconRoot = "/home/itsdrike/.config/xmobar/xpm"
|
||||||
, commands = [
|
, commands = [
|
||||||
-- Time and date
|
-- Time and date
|
||||||
Run Date "<fn=2>\xf017</fn> %b %d %Y - (%H:%M) " "date" 50
|
Run Date "<fn=2>\xf017</fn> %b %d %Y - (%H:%M) " "date" 50
|
||||||
|
@ -26,6 +27,10 @@ Config { font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=t
|
||||||
, Run DiskU [("/", "<fn=2>\xf0c7</fn> hdd: <free> free")] [] 60
|
, Run DiskU [("/", "<fn=2>\xf0c7</fn> hdd: <free> free")] [] 60
|
||||||
-- Runs a standard shell command 'uname -r' to get kernel version
|
-- Runs a standard shell command 'uname -r' to get kernel version
|
||||||
, Run Com "uname" ["-r"] "" 3600
|
, Run Com "uname" ["-r"] "" 3600
|
||||||
|
-- Add dynamic invisible XPM icon that resizes to accomodate trayer
|
||||||
|
-- this needs to be an absolute string path, env vars or relpaths aren't accepted
|
||||||
|
-- this should only be on 1 monitor (single file), so ignore this comment on others
|
||||||
|
, Run Com "/home/itsdrike/.config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 10
|
||||||
-- Allow mouse clicking by using unsafe stdin reader
|
-- Allow mouse clicking by using unsafe stdin reader
|
||||||
, Run UnsafeStdinReader
|
, Run UnsafeStdinReader
|
||||||
]
|
]
|
||||||
|
@ -37,7 +42,9 @@ Config { font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=t
|
||||||
\<fc=#666666>|</fc> <fc=#ff6c6b> <action=`alacritty -e htop`>%memory%</action> </fc> \
|
\<fc=#666666>|</fc> <fc=#ff6c6b> <action=`alacritty -e htop`>%memory%</action> </fc> \
|
||||||
\<fc=#666666>|</fc> <fc=#51afef> <action=`alacritty -e htop`>%disku%</action> </fc> \
|
\<fc=#666666>|</fc> <fc=#51afef> <action=`alacritty -e htop`>%disku%</action> </fc> \
|
||||||
\<fc=#666666>|</fc> <fc=#98be65> <action=`alacritty -e sudo iftop`>%wlp2s0%</action> </fc> \
|
\<fc=#666666>|</fc> <fc=#98be65> <action=`alacritty -e sudo iftop`>%wlp2s0%</action> </fc> \
|
||||||
\<fc=#666666>|</fc> <fc=#46d9ff> %date% </fc>"
|
\<fc=#666666>|</fc> <fc=#46d9ff> %date% </fc> \
|
||||||
|
\%trayerpad%\
|
||||||
|
\ "
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,8 @@ Config { font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=t
|
||||||
, hideOnStart = False
|
, hideOnStart = False
|
||||||
, allDesktops = True
|
, allDesktops = True
|
||||||
, persistent = True
|
, persistent = True
|
||||||
--, iconRoot = "." -- default: "."
|
-- apparently there's no way to use env var or relpaths here
|
||||||
|
, iconRoot = "/home/itsdrike/.config/xmobar/xpm"
|
||||||
, commands = [
|
, commands = [
|
||||||
-- Time and date
|
-- Time and date
|
||||||
Run Date "<fn=2>\xf017</fn> %b %d %Y - (%H:%M) " "date" 50
|
Run Date "<fn=2>\xf017</fn> %b %d %Y - (%H:%M) " "date" 50
|
||||||
|
@ -26,6 +27,10 @@ Config { font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=t
|
||||||
, Run DiskU [("/", "<fn=2>\xf0c7</fn> hdd: <free> free")] [] 60
|
, Run DiskU [("/", "<fn=2>\xf0c7</fn> hdd: <free> free")] [] 60
|
||||||
-- Runs a standard shell command 'uname -r' to get kernel version
|
-- Runs a standard shell command 'uname -r' to get kernel version
|
||||||
, Run Com "uname" ["-r"] "" 3600
|
, Run Com "uname" ["-r"] "" 3600
|
||||||
|
-- Add dynamic invisible XPM icon that resizes to accomodate trayer
|
||||||
|
-- this needs to be an absolute string path, env vars or relpaths aren't accepted
|
||||||
|
-- this should only be on 1 monitor (single file), so ignore this comment on others
|
||||||
|
, Run Com "/home/itsdrike/.config/xmobar/trayer-padding-icon.sh" [] "trayerpad" 10
|
||||||
-- Allow mouse clicking by using unsafe stdin reader
|
-- Allow mouse clicking by using unsafe stdin reader
|
||||||
, Run UnsafeStdinReader
|
, Run UnsafeStdinReader
|
||||||
]
|
]
|
||||||
|
@ -37,7 +42,7 @@ Config { font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=t
|
||||||
\<fc=#666666>|</fc> <fc=#ff6c6b> <action=`alacritty -e htop`>%memory%</action> </fc> \
|
\<fc=#666666>|</fc> <fc=#ff6c6b> <action=`alacritty -e htop`>%memory%</action> </fc> \
|
||||||
\<fc=#666666>|</fc> <fc=#51afef> <action=`alacritty -e htop`>%disku%</action> </fc> \
|
\<fc=#666666>|</fc> <fc=#51afef> <action=`alacritty -e htop`>%disku%</action> </fc> \
|
||||||
\<fc=#666666>|</fc> <fc=#98be65> <action=`alacritty -e sudo iftop`>%wlp2s0%</action> </fc> \
|
\<fc=#666666>|</fc> <fc=#98be65> <action=`alacritty -e sudo iftop`>%wlp2s0%</action> </fc> \
|
||||||
\<fc=#666666>|</fc> <fc=#46d9ff> %date% </fc>"
|
\<fc=#666666>|</fc> <fc=#46d9ff> %date% </fc> \
|
||||||
|
\%trayerpad%\
|
||||||
|
\ "
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,8 @@ Config { font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=t
|
||||||
, hideOnStart = False
|
, hideOnStart = False
|
||||||
, allDesktops = True
|
, allDesktops = True
|
||||||
, persistent = True
|
, persistent = True
|
||||||
--, iconRoot = "." -- default: "."
|
-- apparently there's no way to use env var or relpaths here
|
||||||
|
, iconRoot = "/home/itsdrike/.config/xmobar/xpm"
|
||||||
, commands = [
|
, commands = [
|
||||||
-- Time and date
|
-- Time and date
|
||||||
Run Date "<fn=2>\xf017</fn> %b %d %Y - (%H:%M) " "date" 50
|
Run Date "<fn=2>\xf017</fn> %b %d %Y - (%H:%M) " "date" 50
|
||||||
|
@ -26,6 +27,9 @@ Config { font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=t
|
||||||
, Run DiskU [("/", "<fn=2>\xf0c7</fn> hdd: <free> free")] [] 60
|
, Run DiskU [("/", "<fn=2>\xf0c7</fn> hdd: <free> free")] [] 60
|
||||||
-- Runs a standard shell command 'uname -r' to get kernel version
|
-- Runs a standard shell command 'uname -r' to get kernel version
|
||||||
, Run Com "uname" ["-r"] "" 3600
|
, Run Com "uname" ["-r"] "" 3600
|
||||||
|
-- Add dynamic invisible XPM icon that resizes to accomodate trayer
|
||||||
|
-- this needs to be an absolute string path, env vars or relpaths aren't accepted
|
||||||
|
-- this should only be on 1 monitor (single file), so ignore this comment on others
|
||||||
-- Allow mouse clicking by using unsafe stdin reader
|
-- Allow mouse clicking by using unsafe stdin reader
|
||||||
, Run UnsafeStdinReader
|
, Run UnsafeStdinReader
|
||||||
]
|
]
|
||||||
|
@ -37,7 +41,6 @@ Config { font = "xft:Ubuntu:weight=bold:pixelsize=11:antialias=true:hinting=t
|
||||||
\<fc=#666666>|</fc> <fc=#ff6c6b> <action=`alacritty -e htop`>%memory%</action> </fc> \
|
\<fc=#666666>|</fc> <fc=#ff6c6b> <action=`alacritty -e htop`>%memory%</action> </fc> \
|
||||||
\<fc=#666666>|</fc> <fc=#51afef> <action=`alacritty -e htop`>%disku%</action> </fc> \
|
\<fc=#666666>|</fc> <fc=#51afef> <action=`alacritty -e htop`>%disku%</action> </fc> \
|
||||||
\<fc=#666666>|</fc> <fc=#98be65> <action=`alacritty -e sudo iftop`>%wlp2s0%</action> </fc> \
|
\<fc=#666666>|</fc> <fc=#98be65> <action=`alacritty -e sudo iftop`>%wlp2s0%</action> </fc> \
|
||||||
\<fc=#666666>|</fc> <fc=#46d9ff> %date% </fc>"
|
\<fc=#666666>|</fc> <fc=#46d9ff> %date% </fc> \
|
||||||
|
\ "
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue