home/.config/conky/gen.sh

270 lines
7.2 KiB
Bash
Executable File

#! /bin/bash
# _
# ___ ___ _ __ | | ___ _ __ _ ___ _ __
# / __/ _ \| '_ \| |/ / | | |/ _` |/ _ \ '_ \
# | (_| (_) | | | | <| |_| | (_| | __/ | | |
# \___\___/|_| |_|_|\_\\__, |\__, |\___|_| |_|
# |___/ |___/
#
# conkygen.sh
# Create a Conky configuration file dynamically
#
# Copyright (c) 2020 Vintage Salt <rehashedsalt@cock.li>
# Distributed under the terms of the MIT License
#
set -e
# Read-only set-once variables
declare -r _name="$(basename -- "$0")"
# Options
declare _optout="./conky.conf"
declare -i _opthelp
declare -i _optverbose
# Working variables
declare -a _args
declare _return
# Helper functions
log() {
# Print a line to the terminal if _optverbose is greater than $2
# $2 defaults to 0
# loglevel 0: Daily-use messages
# loglevel 1: Detailed but not quite debugging
# loglevel 2: Definitely debugging
[ -z "$1" ] && return 1
if (( _optverbose >= ${2:-0} )); then
printf "%s\\n" "$1"
fi
}
warn() {
# Print a yellow line to the terminal, respecting _optverbose
[ -z "$1" ] && return 1
if (( _optverbose >= ${2:-0} )); then
if [ -t 1 ]; then
printf "\\e[33m%s\\e[0m\\n" "$1"
else
printf "WARN: %s\\n" "$1"
fi
fi
}
error() {
# Print a red line to the terminal, exit if $2 is specified
[ -z "$1" ] && return 1
if [ -t 2 ]; then
printf "\\e[31m%s\\e[0m\\n" "$1" 1>&2
else
printf "ERROR: %s\\n" "$1" 1>&2
fi
[ -z "$2" ] && return
exit "${2:-1}"
}
has() {
# Parse out all arguments and try to find them in path
# If an argument cannot be found, set _return and fail
for prog in "$@"; do
if ! command -v "$prog" > /dev/null 2>&1; then
_return="$prog"
return 1
fi
done
return 0
}
# Core program functions
printhelp() {
cat << EOF
Usage: $_name [OPTION]...
Generate a conky.conf configuration file in the current directory
-o Specify output file. Defaults to ./conky.conf
-h Print this help text
-v Print more status messages. Stacks
Copyright (c) 2020 rehashedsalt@cock.li
Licensed under the MIT license
EOF
}
step_header() {
# Clobber output file with header
cat << EOF > "$_optout"
-- vim: ts=4 sw=4 noet ai cindent syntax=lua
-- WARNING:
-- This file was generated with conkygen. See gen.sh if you need to edit this!
-- Any changes you make here can and probably will be clobbered!
EOF
}
step_config() {
# Append config to the output file
cat << EOF >> "$_optout"
conky.config = {
own_window = true,
own_window_title = 'Conky',
own_window_class = 'Conky',
own_window_type = 'desktop',
own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',
own_window_argb_visual = true,
own_window_transparent = true,
own_window_colour = '000000',
double_buffer = true,
cpu_avg_samples = 2,
net_avg_samples = 2,
no_buffers = true,
update_interval = 1,
use_xft = true,
font = 'Roboto:style=Light:size=9',
default_color = '#fffcf6',
color1 = '383c4a', -- Background
color2 = 'fffcf6', -- Foreground
color3 = '4b5162', -- Background-alt
color4 = '11d116', -- Green (Battery)
color6 = '1abc9c', -- Cyan (Network)
color7 = 'fdbc4b', -- Yellow (Disk)
color8 = '1d99f3', -- Blue (CPU)
color9 = '9b59b6', -- Magenta (Memory)
alignment = 'bottom_right',
xinerama_head = 0,
minimum_height = 0,
minimum_width = 304,
border_width = 0,
border_outer_margin = 1,
border_inner_margin = 16,
gap_x = 32,
gap_y = 48,
format_human_readable = true,
temperature_unit = "celsius",
if_up_strictness = "link",
default_bar_height = 11,
default_bar_width = 130,
default_graph_height = 36,
draw_borders = true,
draw_outline = false,
draw_graph_borders = true,
draw_shades = false
}
EOF
}
step_text() {
# Generate our actual functional Conky stuff
# Header
cat << 'EOF' >> "$_optout"
conky.text = [[
${font Roboto:style=Light:size=30}$alignr${no_update $nodename_short}$font
${font Roboto:style=Light:size=17}$alignr${time %I:%M %p}$font
${font Roboto:style=Light:size=12}${acpitemp}°C$alignr${time %A, %B %d, %Y}$font
EOF
# CPU info
cat << 'EOF' >> "$_optout"
${color3}$hr$color
${font Roboto:style=Medium:size=9}CPU$font: $freq_g GHz$alignr$cpu%
${color8}${cpugraph cpu1 36,200} ${cpugraph cpu2 36,200}
${cpugraph cpu3 36,200} ${cpugraph cpu4 36,200}$color
${color8}${top name 1}$color$alignr${top cpu 1}%
${color8}${top name 2}$color$alignr${top cpu 2}%
${color8}${top name 3}$color$alignr${top cpu 3}%
${color8}${top name 4}$color$alignr${top cpu 4}%
EOF
# Memory info
cat << 'EOF' >> "$_optout"
${color3}$hr$color
${font Roboto:style=Medium:size=9}Memory$font: $mem / $memmax used$alignr$memperc%
${color9}${memgraph}$color
Memory$alignr$memeasyfree ${color9}${membar}$color
Swap$alignr$swapfree ${color9}${swapbar}$color
${color9}${top_mem name 1}$color$alignr${top_mem mem 1}%
${color9}${top_mem name 2}$color$alignr${top_mem mem 2}%
${color9}${top_mem name 3}$color$alignr${top_mem mem 3}%
${color9}${top_mem name 4}$color$alignr${top_mem mem 4}%
EOF
# Disk info
cat << 'EOF' >> "$_optout"
${color3}$hr$color
${font Roboto:style=Medium:size=9}Disk$font (R/W):$alignr${diskio /dev/sda}
${color7}${diskiograph_read /dev/sda 36,200} ${diskiograph_write /dev/sda 36,200}$color
/$alignr${fs_free /} ${color7}${fs_bar /}$color
/home$alignr${fs_free /home} ${color7}${fs_bar /home}$color
/boot$alignr${fs_free /boot} ${color7}${fs_bar /boot}$color
/boot/efi$alignr${fs_free /boot/efi} ${color7}${fs_bar /boot/efi}$color
${color7}${top_io name 1}$color$alignr${top_io io_perc 1}%
${color7}${top_io name 2}$color$alignr${top_io io_perc 2}%
${color7}${top_io name 3}$color$alignr${top_io io_perc 3}%
${color7}${top_io name 4}$color$alignr${top_io io_perc 4}%
EOF
# Networking
cat << 'EOF' >> "$_optout"
${color3}$hr$color
${font Roboto:style=Medium:size=9}Network$font:${alignr}Default $gw_iface${if_up wlp1s0}
wlp1s0 (U/D):$alignr${addr wlp1s0} / ${wireless_essid wlp1s0}
${color6}${upspeedgraph wlp1s0 36,200} ${downspeedgraph wlp1s0 36,200}$color$endif${if_up wlp5s0}
wlp5s0 (U/D):$alignr${addr wlp5s0} / ${wireless_essid wlp5s0}
${color6}${upspeedgraph wlp5s0 36,200} ${downspeedgraph wlp5s0 36,200}$color$endif${if_up enp0s31f6}
enp0s31f6 (U/D):$alignr${addr enp0s31f6}
${color6}${upspeedgraph enp0s31f6 36,200} ${downspeedgraph enp0s31f6 36,200}$color$endif${if_up eno1}
eno1 (U/D):$alignr${addr eno1}
${color6}${upspeedgraph eno1 36,200} ${downspeedgraph eno1 36,200}$color$endif${if_up enp0s20f0u2}
enp0s20f0u2 (U/D):$alignr${addr enp0s20f0u2}
${color6}${upspeedgraph enp0s20f0u2 36,200} ${downspeedgraph enp0s20f0u2 36,200}$color$endif
]]
EOF
}
genconfig() {
log "Generating config: $_optout"
step_header
step_config
step_text
}
# Main
main() {
# Parse out arguments
while [ -n "$1" ]; do
# Parse out flags
while getopts ":ho:v" opt; do
case $opt in
o)
_optout="$OPTARG"
;;
h)
_opthelp=1
;;
v)
_optverbose+=1
;;
:)
error "Option requires argument: -$OPTARG" 2
;;
*)
error "Invalid option: -$OPTARG" 2
;;
esac
done
# Store arguments
shift $((OPTIND - 1))
if [ -n "$1" ]; then
_args+=("$1")
shift
fi
unset OPTIND
done
# Early hook for help
[ -n "$_opthelp" ] && printhelp && exit 0
# Validate critical options
# TODO: That
# Validate core program dependencies
log "Validating dependencies" 2
if ! has basename; then
error "Failed to find program: $_return" 1
fi
# Do the do
genconfig
exit 0
}
main "$@"