Commit cb0918c4 authored by epsi sayidina's avatar epsi sayidina

herbstluftwm dual statusbar

parent 9bcad76e
......@@ -50,7 +50,7 @@ function get_bottom_panel_geometry() {
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----
# dzen Parameters
function get_dzen2_parameters() {
function get_params_top() {
local monitor=$1
local panel_height=$2
......@@ -59,10 +59,31 @@ function get_dzen2_parameters() {
local bgcolor="#000000"
local fgcolor="#ffffff"
local font="-*-takaopgothic-medium-*-*-*-12-*-*-*-*-*-*-*"
local font='-*-takaopgothic-medium-*-*-*-12-*-*-*-*-*-*-*'
dzen2_parameters=" -x $xpos -y $ypos -w $width -h $height"
dzen2_parameters+=" -ta l -bg $bgcolor -fg $fgcolor"
dzen2_parameters+=" -title-name dzentop"
dzen2_parameters+=" -fn $font"
}
function get_params_bottom() {
local monitor=$1
local panel_height=$2
get_geometry $monitor
get_bottom_panel_geometry $panel_height "${geometry[@]}"
local bgcolor="#000000"
local fgcolor="#ffffff"
local font='-*-fixed-medium-*-*-*-11-*-*-*-*-*-*-*'
dzen2_parameters=" -x $xpos -y $ypos -w $width -h $height"
dzen2_parameters+=" -ta l -bg $bgcolor -fg $fgcolor"
dzen2_parameters+=" -title-name dzentop"
dzen2_parameters+=" -fn $font"
}
function get_dzen2_parameters() {
get_params_top $monitor $panel_height
}
......@@ -12,23 +12,21 @@ DIR=$(dirname "$0")
. ${DIR}/pipehandler.sh
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----
# initialize
# main
panel_height=24
get_monitor ${@}
get_dzen2_parameters $monitor $panel_height
# do `man herbsluftclient`, and type \pad to search what it means
herbstclient pad $monitor $panel_height 0 $panel_height 0
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----
# pipe
# remove all dzen2 instance
pkill dzen2
herbstclient pad $monitor $panel_height 0 $panel_height 0
# run process in the background
get_params_top $monitor $panel_height
detach_dzen2 $monitor $dzen2_parameters
get_params_bottom $monitor $panel_height
detach_dzen2_conky $dzen2_parameters
# optional transparency
detach_transset
#!/usr/bin/env bash
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----
# pipe
function handle_command_event() {
local monitor=$1
shift
local event=$@
# find out event origin
IFS=$'\t' column=($event);
origin=${column[0]}
# find out event origin
case $origin in
reload)
pkill dzen2
;;
quit_panel)
exit
;;
tag*)
# http://www.tldp.org/LDP/abs/html/x17837.html#HERESTRINGSREF
# echo "resetting tags" >&2
set_tag_value $monitor
;;
focus_changed|window_title_changed)
[[ ${#column[@]} > 2 ]] && title=${column[2]} || title=''
set_windowtitle "$title"
;;
interval)
set_datetime
;;
esac
}
function content_init() {
monitor=$1
# initialize statusbar before loop
set_tag_value $monitor
set_windowtitle ''
set_datetime
get_statusbar_text $monitor
echo $buffer
}
function content_event_idle() {
# wait for each event
herbstclient --idle
}
function content_event_interval() {
# endless loop
while :; do
echo "interval"
sleep 1
done
}
function content_walk() {
monitor=$1
{
content_event_idle &
pid_idle=$!
content_event_interval &
pid_interval=$!
} | while read event; do
handle_command_event $monitor "$event"
get_statusbar_text $monitor
echo $buffer
done
}
function run_dzen2() {
monitor=$1
shift
parameters=$@
command_out="dzen2 $parameters"
{
content_init $monitor
content_walk $monitor # loop for each event
} | $command_out
}
function detach_dzen2() {
monitor=$1
shift
parameters=$@
run_dzen2 $monitor $parameters &
}
function detach_dzen2_conky() {
parameters=$@
command_out="dzen2 $parameters"
{
dirname=$(dirname $(readlink -f "$0"))
path="$dirname/../conky"
conky -c "$path/conky.lua"
} | $command_out &
}
function detach_transset() {
{
sleep 1
exec `(transset .8 -n dzentop >/dev/null)`
exec `(transset .8 -n dzenbottom >/dev/null)`
} &
}
......@@ -99,9 +99,23 @@ function detach_dzen2() {
run_dzen2 $monitor $parameters &
}
function detach_dzen2_conky() {
parameters=$@
command_out="dzen2 $parameters"
{
dirname=$(dirname $(readlink -f "$0"))
path="$dirname/../conky"
conky -c "$path/conky.lua"
} | $command_out &
}
function detach_transset() {
{
sleep 1
exec `(transset .8 -n dzentop >/dev/null)`
exec `(transset .8 -n dzentop >/dev/null)`
exec `(transset .8 -n dzenbottom >/dev/null)`
} &
}
-- vim: ts=4 sw=4 noet ai cindent syntax=lua
-- for use with bright dzen2 panel
deco = helper.decoDoubleArrowLeft
--[[
disabled = ''
.. parts.mpd()
.. parts.uptime()
.. parts.memory()
.. parts.battery()
.. parts.date()
.. parts.time()
.. parts.cputemp()
.. parts.machine()
.. helper.separator()
]]
enabled = ''
.. parts.transition(deco, colWhite, colGreen400)
.. parts.host(colGreen400)
.. parts.transition(deco, colGreen400, colGreen500)
.. parts.volume(colGreen500)
.. parts.transition(deco, colGreen500, colGreen600)
.. parts.cpu0(colGreen600)
.. parts.transition(deco, colGreen600, colBlue500)
.. parts.ssid(colBlue500)
.. parts.transition(deco, colBlue500, colBlue600)
.. parts.network(colBlue600)
.. parts.transition(deco, colBlue600, colWhite)
-- vim: ts=4 sw=4 noet ai cindent syntax=lua
--[[
disabled = ''
.. parts.mpd()
.. parts.uptime()
.. parts.battery()
.. parts.date()
.. parts.time()
.. parts.machine()
]]
enabled = ''
.. parts.host()
.. parts.volume()
.. parts.memory()
.. parts.cpu0()
.. parts.cputemp()
.. parts.ssid()
.. parts.network()
.. helper.separator()
-- vim: ts=4 sw=4 noet ai cindent syntax=lua
--[[
Conky, a system monitor, based on torsmo
]]
conky.config = {
out_to_x = false,
out_to_console = true,
short_units = true,
update_interval = 1
}
-- presetName = 'bright-background'
-- assemblyName = 'back-arrow'
-- presetName = 'bright-separator'
-- assemblyName = 'separator'
presetName = 'dark-separator'
assemblyName = 'separator'
local dirname = debug.getinfo(1).source:match("@?(.*/)")
dofile(dirname .. 'gmc.lua')
dofile(dirname .. 'presets/' .. presetName .. '.lua')
dofile(dirname .. 'helper.lua')
dofile(dirname .. 'parts.lua')
dofile(dirname .. 'assemblies/' .. assemblyName .. '.lua')
conky.text = [[\
]] .. enabled .. [[\
]]
-- vim: ts=4 sw=4 noet ai cindent syntax=lua
-- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---
-- google material colors
-- https://material.io/guidelines/style/color.html
colWhite = '\\#ffffff'
colBlack = '\\#000000'
colGrey50 = '\\#fafafa'
colGrey100 = '\\#f5f5f5'
colGrey200 = '\\#eeeeee'
colGrey300 = '\\#e0e0e0'
colGrey400 = '\\#bdbdbd'
colGrey500 = '\\#9e9e9e'
colGrey600 = '\\#757575'
colGrey700 = '\\#616161'
colGrey800 = '\\#424242'
colGrey900 = '\\#212121'
colRed50 = '\\#ffebee'
colRed100 = '\\#ffcdd2'
colRed200 = '\\#ef9a9a'
colRed300 = '\\#e57373'
colRed400 = '\\#ef5350'
colRed500 = '\\#f44336'
colRed600 = '\\#e53935'
colRed700 = '\\#d32f2f'
colRed800 = '\\#c62828'
colRed900 = '\\#b71c1c'
colRedA100 = '\\#ff8a80'
colRedA200 = '\\#ff5252'
colRedA400 = '\\#ff1744'
colRedA700 = '\\#d50000'
colPink50 = '\\#fce4ec'
colPink100 = '\\#f8bbd0'
colPink200 = '\\#f48fb1'
colPink300 = '\\#f06292'
colPink400 = '\\#ec407a'
colPink500 = '\\#e91e63'
colPink600 = '\\#d81b60'
colPink700 = '\\#c2185b'
colPink800 = '\\#ad1457'
colPink900 = '\\#880e4f'
colPinkA100 = '\\#ff80ab'
colPinkA200 = '\\#ff4081'
colPinkA400 = '\\#f50057'
colPinkA700 = '\\#c51162'
colIndigo50 = '\\#e8eaf6'
colIndigo100 = '\\#c5cae9'
colIndigo200 = '\\#9fa8da'
colIndigo300 = '\\#7986cb'
colIndigo400 = '\\#5c6bc0'
colIndigo500 = '\\#3f51b5'
colIndigo600 = '\\#3949ab'
colIndigo700 = '\\#303f9f'
colIndigo800 = '\\#283593'
colIndigo900 = '\\#1a237e'
colIndigoA100 = '\\#8c9eff'
colIndigoA200 = '\\#536dfe'
colIndigoA400 = '\\#3d5afe'
colIndigoA700 = '\\#304ffe'
colBlue50 = '\\#e3f2fd'
colBlue100 = '\\#bbdefb'
colBlue200 = '\\#90caf9'
colBlue300 = '\\#64b5f6'
colBlue400 = '\\#42a5f5'
colBlue500 = '\\#2196f3'
colBlue600 = '\\#1e88e5'
colBlue700 = '\\#1976d2'
colBlue800 = '\\#1565c0'
colBlue900 = '\\#0d47a1'
colBlueA100 = '\\#82b1ff'
colBlueA200 = '\\#448aff'
colBlueA400 = '\\#2979ff'
colBlueA700 = '\\#2962ff'
colYellow50 = '\\#fffde7'
colYellow100 = '\\#fff9c4'
colYellow200 = '\\#fff59d'
colYellow300 = '\\#fff176'
colYellow400 = '\\#ffee58'
colYellow500 = '\\#ffeb3b'
colYellow600 = '\\#fdd835'
colYellow700 = '\\#fbc02d'
colYellow800 = '\\#f9a825'
colYellow900 = '\\#f57f17'
colYellowA100 = '\\#ffff8d'
colYellowA200 = '\\#ffff00'
colYellowA400 = '\\#ffea00'
colYellowA700 = '\\#ffd600'
colTeal50 = '\\#e0f2f1'
colTeal100 = '\\#b2dfdb'
colTeal200 = '\\#80cbc4'
colTeal300 = '\\#4db6ac'
colTeal400 = '\\#26a69a'
colTeal500 = '\\#009688'
colTeal600 = '\\#00897b'
colTeal700 = '\\#00796b'
colTeal800 = '\\#00695c'
colTeal900 = '\\#004d40'
colTealA100 = '\\#a7ffeb'
colTealA200 = '\\#64ffda'
colTealA400 = '\\#1de9b6'
colTealA700 = '\\#00bfa5'
colGreen50 = '\\#e8f5e9'
colGreen100 = '\\#c8e6c9'
colGreen200 = '\\#a5d6a7'
colGreen300 = '\\#81c784'
colGreen400 = '\\#66bb6a'
colGreen500 = '\\#4caf50'
colGreen600 = '\\#43a047'
colGreen700 = '\\#388e3c'
colGreen800 = '\\#2e7d32'
colGreen900 = '\\#1b5e20'
colGreenA100 = '\\#b9f6ca'
colGreenA200 = '\\#69f0ae'
colGreenA400 = '\\#00e676'
colGreenA700 = '\\#00c853'
colOrange50 = '\\#fff3e0'
colOrange100 = '\\#ffe0b2'
colOrange200 = '\\#ffcc80'
colOrange300 = '\\#ffb74d'
colOrange400 = '\\#ffa726'
colOrange500 = '\\#ff9800'
colOrange600 = '\\#fb8c00'
colOrange700 = '\\#f57c00'
colOrange800 = '\\#ef6c00'
colOrange900 = '\\#e65100'
colOrangeA100 = '\\#ffd180'
colOrangeA200 = '\\#ffab40'
colOrangeA400 = '\\#ff9100'
colOrangeA700 = '\\#ff6d00'
colDeepOrange50 = '\\#fbe9e7'
colDeepOrange100 = '\\#ffccbc'
colDeepOrange200 = '\\#ffab91'
colDeepOrange300 = '\\#ff8a65'
colDeepOrange400 = '\\#ff7043'
colDeepOrange500 = '\\#ff5722'
colDeepOrange600 = '\\#f4511e'
colDeepOrange700 = '\\#e64a19'
colDeepOrange800 = '\\#d84315'
colDeepOrange900 = '\\#bf360c'
colDeepOrangeA100 = '\\#ff9e80'
colDeepOrangeA200 = '\\#ff6e40'
colDeepOrangeA400 = '\\#ff3d00'
colDeepOrangeA700 = '\\#dd2c00'
-- vim: ts=4 sw=4 noet ai cindent syntax=lua-- global
helper = {}
-- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---
-- constant
-- glyph icon decoration
local decoPath = 'Documents/standalone/dzen2/assets/xbm'
-- diagonal corner
helper.decoCornerTopLeft = '^i(' .. decoPath .. '/dc-024-tl.xbm)'
helper.decoCornerTopRight = '^i(' .. decoPath .. '/dc-024-tr.xbm)'
helper.decoCornerBottomLeft = '^i(' .. decoPath .. '/dc-024-bl.xbm)'
helper.decoCornerBottomRight = '^i(' .. decoPath .. '/dc-024-br.xbm)'
-- single arrow and double arrow
helper.decoSingleArrowLeft = '^i(' .. decoPath .. '/sa-024-l.xbm)'
helper.decoSingleArrowRight = '^i(' .. decoPath .. '/sa-024-r.xbm)'
helper.decoDoubleArrowLeft = '^i(' .. decoPath .. '/da-024-l.xbm)'
helper.decoDoubleArrowRight = '^i(' .. decoPath .. '/da-024-r.xbm)'
-- http://fontawesome.io/
local fontAwesome = '^fn(FontAwesome-9)'
-- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---
-- initialization
--local colorPreset = nil
-- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ---
function helper.icon(text, color)
color = color or colorPreset.icon
local preIcon = '^fg(' .. color .. ')' .. fontAwesome
local postIcon = '^fn()^fg()'
return ' ' .. preIcon .. text .. postIcon .. ' '
end
function helper.label(text, color)
color = color or colorPreset.label
return '^fg(' .. color .. ')' .. text
end
function helper.separator(color)
color = color or colorPreset.separator
return '^fg(' .. color .. ')' .. '|'
end
function helper.value(text, color)
color = color or colorPreset.value
return '^fg(' .. color .. ')' .. text
end
function helper.common(icon, label, value, colorBg)
colorBg = colorBg or colorPreset.background
text=''
if colorBg then text = text .. '^bg(' .. colorBg .. ')' end
if not colorBg then text = helper.separator() end
if icon then text = text .. ' ' .. helper.icon(icon) end
if label then text = text .. ' ' .. helper.label(label) end
if value then text = text .. ' ' .. helper.value(value) .. ' ' end
return text
end
#!/usr/bin/env bash
generated_output() {
conky -c ~/Documents/standalone/dzen2/conky/conky.lua
}
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----
# parameters
xpos=0
ypos=0
width=640
height=24
bgcolor="#000000"
fgcolor="#ffffff"
# bgcolor="#ffffff"
# fgcolor="#000000"
font="-*-fixed-medium-*-*-*-12-*-*-*-*-*-*-*"
parameters=" -x $xpos -y $ypos -w $width -h $height"
parameters+=" -fn $font"
parameters+=" -ta c -bg $bgcolor -fg $fgcolor"
parameters+=" -title-name dzentop"
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----
# main
# remove all dzen2 instance
pkill dzen2
# execute dzen
generated_output | dzen2 $parameters &
# optional transparency
sleep 1 && exec `(transset .8 -n dzentop >/dev/null 2>&1 &)` &
-- vim: ts=4 sw=4 noet ai cindent syntax=lua
--[[
You may consider change glyph using FontAwesome icon
http://fontawesome.io/cheatsheet/
* Sample: Battery Icon: 
]]
parts = {}
-- user variables
local wlandev = 'wlp0s3f3u2'
-- shortcut
local _h = helper
-- template variables: Color Indicator
local color_indicator_dark = {
good = '',
degraded = '\\#b27d12',
bad = '\\#802828'
}
local color_indicator_bright = {
good = '',
degraded = colRed900,
bad = colRed500
}
local ci = color_indicator_bright
-- transition image
function parts.transition(decoIcon, decoBg, decoFg)
text = '^bg(' .. decoBg .. ')'
.. '^fg(' .. decoFg .. ')' .. decoIcon
return text
end
-- Time
function parts.time(colorBg)
return _h.common('', nil, '${time %H:%M }', colorBg)
end
-- Date
function parts.date(colorBg)
return _h.common('', nil, '${time %D}', colorBg)
end
-- Volume
function parts.volume(colorBg)
local volume_command = [[amixer get Master | tail -1 | sed 's/.*\[\([0-9]*%\)\].*/\1/']]
return _h.common('', 'Vol', "${execi 1 " .. volume_command .. "}", colorBg)
end
-- Host
function parts.host(colorBg)
return _h.common('', 'Host', '$nodename', colorBg)
end
-- Uptime
function parts.uptime(colorBg)
return _h.common('', 'Uptime', '$uptime', colorBg)
end
-- Memory
function parts.mem(colorBg)
return _h.common('', 'RAM', '$mem/$memmax', colorBg)
end
-- SSID
function parts.ssid(colorBg)
return _h.common(' ', '', '$wireless_essid', colorBg)
end
-- Lua Function Demo
-- https://github.com/brndnmtthws/conky/issues/62
function _h.exec(command)
local file = assert(io.popen(command, 'r'))
local s = file:read('*all')
file:close()
s = string.gsub(s, '^%s+', '')
s = string.gsub(s, '%s+$', '')
s = string.gsub(s, '[\n\r]+', ' ')
return s
end
-- read once
local machine = _h.exec('uname -r')
function parts.machine(colorBg)
return _h.common('', nil, machine, colorBg)
end
-- Media Player Daemon
function parts.mpd(colorBg)
local mpd = [[\
${if_mpd_playing}\
]] .. _h.icon('')
.. _h.value(' ${mpd_artist 20} ')
.. _h.icon('')
.. _h.value(' ${mpd_title 30}') ..[[
${else}]] .. _h.icon('') .. [[${endif}\
]]
return _h.common(nil, nil, mpd, colorBg)
end
-- CPU temperature:
function parts.cputemp(colorBg)
local cputemp =