conky-config/conky.conf

141 lines
3.9 KiB
Plaintext
Raw Normal View History

2022-07-20 00:25:19 -04:00
--------------------------------------------------------------------------------
-- Loading Sequence Overview
--
-- Since this is the most over-engineered conky config ever (actually probably),
-- here are the approximate loading steps:
--
-- 1. bootstrap (this file)
-- 1. set up paths
-- 2. find valid config (a yaml file, see convoluted reasoning below)
-- 3. set up conky variables
-- 2. run startup hook which does some insane dark magic including
-- 1. arranging all modules on the screen
-- 2. 'compiling' super fast functions that don't make computer lag
-- 3. pre-drawing all the crap that doesn't change
-- 4. checking various paths/exes so things don't crash for unknown reasons
-- 3. run main loop
--
-- NOTE: For all brave souls/AIs trying to understand this program, the biggest
-- 'hack' is the fact that this file (conky.conf) is actually not really a
-- config file. The 'real' config file is a yaml file which is validated
-- using a yaml schema. This file is effectively a bootstrap file, but it is
-- not meant to be 'configured' when migrating to a new machine.
--
-- Why bother doing this? Because I got tired of hacking my hard-coded config
-- when switching to different machines.
--------------------------------------------------------------------------------
-- set up paths
2022-07-19 18:11:46 -04:00
local conky_dir = debug.getinfo(1).source:match("@?(.*/)")
local subdirs = {
'src/?.lua',
'src/modules/?.lua',
'src/widget/?.lua',
'src/widget/arc/?.lua',
'src/widget/text/?.lua',
'src/widget/timeseries/?.lua',
'src/widget/rect/?.lua',
'src/widget/line/?.lua',
'lib/share/lua/5.4/?.lua',
'lib/share/lua/5.4/?/init.lua',
}
for i = 1, #subdirs do
subdirs[i] = conky_dir..subdirs[i]
end
package.path = table.concat(subdirs, ';')
package.cpath = conky_dir..'lib/lib/lua/5.4/?.so;'
--------------------------------------------------------------------------------
-- select global config to use (fallback to default if none found)
local yaml = require 'lyaml'
local i_o = require 'i_o'
2023-09-29 00:32:51 -04:00
local validate = require 'validate'
2022-08-11 00:05:06 -04:00
local config_path = '/tmp/conky.yml'
local try_read_config = function(path)
local cmd = string.format('dhall-to-yaml --file %s > %s', path, config_path)
return i_o.exit_code_cmd(cmd)
end
2022-07-19 22:55:17 -04:00
local find_valid_config = function(paths)
for i = 1, #paths do
local path = paths[i]
2022-08-11 00:05:06 -04:00
local rc = try_read_config(path)
if rc == 0 then
i_o.infof('Using config at %s', path)
2023-09-29 00:32:51 -04:00
local config = yaml.load(i_o.read_file(config_path))
validate.validate_config(config)
return config
2022-07-19 22:55:17 -04:00
else
2022-08-11 00:05:06 -04:00
i_o.warnf('could not read %s; trying next', path)
2022-07-19 22:55:17 -04:00
end
end
2022-08-11 00:05:06 -04:00
i_o.assertf(false, 'could not load valid config')
2022-07-19 22:55:17 -04:00
end
2022-07-19 22:55:17 -04:00
local get_config_dir = function()
return (os.getenv("XDG_CONFIG_HOME") or os.getenv("HOME")..'/.config')..'/'
end
2022-07-19 22:55:17 -04:00
local try_config_paths = {
2022-08-11 00:05:06 -04:00
get_config_dir()..'conky.dhall',
conky_dir..'config/fallback.dhall'
2022-07-19 22:55:17 -04:00
}
2022-08-11 00:05:06 -04:00
local config = find_valid_config(try_config_paths)
2022-07-19 22:55:17 -04:00
local bootstrap = config.bootstrap
local startup_hook = string.format(
'start %f %s %s %s',
bootstrap.update_interval,
config_path,
package.path,
package.cpath
)
2022-07-19 18:11:46 -04:00
2016-08-11 23:25:56 -04:00
conky.config = {
2017-07-16 23:49:27 -04:00
background = false,
2016-08-11 23:25:56 -04:00
-- adjust cpu dial sensitivity (1-14)
2016-08-11 23:25:56 -04:00
cpu_avg_samples = 4,
net_avg_samples = 1,
2016-08-11 23:25:56 -04:00
out_to_console = false,
own_window = true,
2020-03-15 12:05:08 -04:00
own_window_type = 'override',
2016-08-11 23:25:56 -04:00
own_window_transparent = true,
own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',
xinerama_head = 0,
2016-08-11 23:25:56 -04:00
double_buffer = true,
2022-08-11 00:05:06 -04:00
minimum_width = bootstrap.dimensions.x,
minimum_height = bootstrap.dimensions.y,
2016-08-11 23:25:56 -04:00
draw_shades = false,
draw_outline = false,
draw_borders = false,
gap_x = 0,
gap_y = 0,
alignment = 'top_left',
no_buffers = true,
-- Lua Load
2022-07-19 18:11:46 -04:00
lua_load = conky_dir..'main.lua',
lua_draw_hook_post = 'main',
lua_startup_hook = startup_hook
2016-08-11 23:25:56 -04:00
}
--control updates entirely in lua
conky.text = [[]]