From fef8f9c80e3f479384322ae8e5becc031c205274 Mon Sep 17 00:00:00 2001 From: ndwarshuis Date: Sun, 17 Jul 2022 01:25:53 -0400 Subject: [PATCH] ENH use yaml config --- .gitignore | 1 + config.yml | 48 +++++++++++++ drawing/filesystem.lua | 10 +-- drawing/graphics.lua | 7 -- drawing/power.lua | 2 +- main.lua | 62 ++++------------ schema.yml | 158 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 223 insertions(+), 65 deletions(-) create mode 100644 .gitignore create mode 100644 config.yml create mode 100644 schema.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7951405 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +lib \ No newline at end of file diff --git a/config.yml b/config.yml new file mode 100644 index 0000000..bb7ae2a --- /dev/null +++ b/config.yml @@ -0,0 +1,48 @@ +modules: + filesystem: + show_smart: true + fs_paths: + - path: / + name: root + - path: /boot + name: boot + - path: /home + name: home + - path: /mnt/data + name: data + - path: /mnt/dcache + name: dcache + - path: /tmp + name: tmpfs + graphics: + show_temp: true + show_clock: true + show_gpu_util: true + show_mem_util: true + show_vid_util: true + memory: + show_stats: true + show_plot: true + show_table: true + power: + battery: BAT0 + rapl_specs: + - name: PKG0 + address: intel-rapl:0 + - name: DRAM + address: intel-rapl:0:2 + processor: + show_cores: true + show_stats: true + show_plot: true + show_table: true + readwrite: + devices: [sda, nvme0n1] +layout: + anchor: [12, 11] + panels: + - !!seq [[system, 19, graphics, 16, processor]] + - 10 + - !!seq [[readwrite], 20, [network]] + - 10 + - !!seq [[pacman, 24, filesystem, 24, power, 19, memory]] diff --git a/drawing/filesystem.lua b/drawing/filesystem.lua index 72dee0e..782d5f6 100644 --- a/drawing/filesystem.lua +++ b/drawing/filesystem.lua @@ -6,9 +6,6 @@ local impure = require 'impure' -- ASSUME pathspecs will be at least 1 long return function(config, main_state, point) - -- local config = { - -- show_smart = true - -- } local SPACING = 20 local BAR_PAD = 100 local SEPARATOR_SPACING = 20 @@ -48,7 +45,9 @@ return function(config, main_state, point) -- filesystem bar chart local mk_bars = function(y) - local paths, names = table.unpack(pure.unzip(config.fs_paths)) + local paths = pure.map_keys('path', config.fs_paths) + local names = pure.map_keys('name', config.fs_paths) + -- local paths, names = table.unpack(pure.unzip(config.fs_paths)) local CONKY_CMDS = pure.map( pure.partial(string.format, '${fs_used_perc %s}', true), paths @@ -89,8 +88,5 @@ return function(config, main_state, point) geometry.SECTION_WIDTH, {{mk_smart, config.show_smart, SEPARATOR_SPACING}}, common.mk_section(SEPARATOR_SPACING, mk_sep, {mk_bars, true, 0}) - -- common.mk_block(mk_sep, config.show_smart, SEPARATOR_SPACING), - -- common.mk_block(mk_bars, true, 0), - -- } ) end diff --git a/drawing/graphics.lua b/drawing/graphics.lua index 70dd69f..74ba213 100644 --- a/drawing/graphics.lua +++ b/drawing/graphics.lua @@ -4,13 +4,6 @@ local common = require 'common' local geometry = require 'geometry' return function(update_freq, config, point) - -- local config = { - -- show_temp = true, - -- show_clock = true, - -- show_gpu_util = true, - -- show_mem_util = true, - -- show_vid_util = true - -- } local SEPARATOR_SPACING = 20 local TEXT_SPACING = 20 local PLOT_SEC_BREAK = 20 diff --git a/drawing/power.lua b/drawing/power.lua index 9cb0864..6bccc95 100644 --- a/drawing/power.lua +++ b/drawing/power.lua @@ -51,7 +51,7 @@ return function(update_freq, config, point) end local mk_rate_blockspec = function(spec) - local f = pure.partial(mk_rate_plot, table.unpack(spec)) + local f = pure.partial(mk_rate_plot, spec.name, spec.address) return {f, true, TEXT_SPACING} end diff --git a/main.lua b/main.lua index 213a4e8..c6b907f 100644 --- a/main.lua +++ b/main.lua @@ -14,12 +14,12 @@ package.path = ABS_PATH..'?.lua;'.. ABS_PATH..'core/widget/text/?.lua;'.. ABS_PATH..'core/widget/timeseries/?.lua;'.. ABS_PATH..'core/widget/rect/?.lua;'.. - ABS_PATH..'core/widget/line/?.lua;' + ABS_PATH..'core/widget/line/?.lua;'.. + ABS_PATH..'lib/share/lua/5.4/?.lua;' local i_o = require 'i_o' local geom = require 'geom' local pure = require 'pure' -local sys = require 'sys' local system = require 'system' local network = require 'network' local processor = require 'processor' @@ -30,6 +30,7 @@ local readwrite = require 'readwrite' local graphics = require 'graphics' local memory = require 'memory' local static = require 'static' +local yaml = require 'tinyyaml' local draw_dynamic @@ -40,60 +41,21 @@ function conky_start(update_interval) local main_state = {} - local config = { - filesystem = { - show_smart = true, - fs_paths = { - {'/', 'root'}, - {'/boot', 'boot'}, - {'/home', 'home'}, - {'/mnt/data', 'data'}, - {'/mnt/dcache', 'dcache'}, - {'/tmp', 'tmpfs'} - } - }, - graphics = { - show_temp = true, - show_clock = true, - show_gpu_util = true, - show_mem_util = true, - show_vid_util = true - }, - memory = { - show_stats = true, - show_plot = true, - show_table = true, - }, - power = { - battery = 'BAT0', - rapl_specs = { - {'PKG0', 'intel-rapl:0'}, - {'DRAM', 'intel-rapl:0:2'} - } - }, - processor = { - show_cores = true, - show_stats = true, - show_plot = true, - show_table = true, - }, - readwrite = { - devices = {'sda', 'nvme0n1'}, - }, - } + local config = yaml.parse(i_o.read_file(ABS_PATH..'config.yml')) + local cmods = config.modules - local mem = pure.partial(memory, update_freq, config.memory) - local rw = pure.partial(readwrite, update_freq, config.readwrite) + local mem = pure.partial(memory, update_freq, cmods.memory) + local rw = pure.partial(readwrite, update_freq, cmods.readwrite) local net = pure.partial(network, update_freq) - local pwr = pure.partial(power, update_freq, config.power) - local fs = pure.partial(filesystem, config.filesystem, main_state) + local pwr = pure.partial(power, update_freq, cmods.power) + local fs = pure.partial(filesystem, cmods.filesystem, main_state) local stm = pure.partial(system, main_state) - local gfx = pure.partial(graphics, update_freq, config.graphics) - local proc = pure.partial(processor, update_freq, config.processor, main_state) + local gfx = pure.partial(graphics, update_freq, cmods.graphics) + local proc = pure.partial(processor, update_freq, cmods.processor, main_state) local pcm = pure.partial(pacman, main_state) local compiled = static( - geom.make_point(12, 11), + geom.make_point(table.unpack(config.layout.anchor)), { {{stm, 19, gfx, 16, proc}}, 10, diff --git a/schema.yml b/schema.yml new file mode 100644 index 0000000..304de5b --- /dev/null +++ b/schema.yml @@ -0,0 +1,158 @@ +$schema: "http://json-schema.org/draft-07/schema#" +description: over-engineered conky schema +required: [modules, layout] +additionalProperties: false +properties: + + modules: + additionalProperties: false + properties: + filesystem: + required: [show_smart, fs_paths] + additionalProperties: false + properties: + show_smart: + description: show the smart deamon indicator + type: boolean + fs_paths: + description: the filesystem paths for which usage should be shown + type: array + minItems: 1 + items: + type: object + required: [name, path] + additionalProperties: false + properties: + name: + type: string + path: + type: string + + graphics: + required: [show_temp, show_clock, show_gpu_util, show_mem_util, show_vid_util] + additionalProperties: false + properties: + show_temp: + description: show the GPU temp + type: boolean + show_clock: + description: show the GPU clock speeds + type: boolean + show_gpu_util: + description: show the GPU utilization plot + type: boolean + show_mem_util: + description: show the GPU memory utilization plot + type: boolean + show_vid_util: + description: show the GPU video utilization plot + type: boolean + + memory: + required: [show_stats, show_plot, show_table] + additionalProperties: false + properties: + show_stats: + description: show memory stats/dial + type: boolean + show_plot: + description: show the RAM utilization plot + type: boolean + show_table: + description: show the memory process table + type: boolean + + power: + required: [battery, rapl_specs] + additionalProperties: false + properties: + battery: + description: the battery device to use (if applicable) + anyOf: + - type: string + - type: "null" + rapl_specs: + description: the Intel RAPL specs for which plots should be made + type: array + items: + type: object + required: [name, address] + additionalProperties: false + properties: + name: + type: string + address: + type: string + + processor: + required: [show_cores, show_stats, show_plot, show_table] + additionalProperties: false + properties: + show_cores: + description: show individual CPU cores + type: boolean + show_stats: + description: show frequency/HWP stats + type: boolean + show_plot: + description: show CPU utilization plot + type: boolean + show_table: + description: show the CPU process table + type: boolean + + readwrite: + required: [devices] + additionalProperties: false + properties: + devices: + description: the devices to include in I/O summations + type: array + minItems: 1 + items: + type: string + + layout: + required: [anchor, panels] + additionalProperties: false + properties: + anchor: + description: the coordinates of the upper-left corner to anchor the app + type: array + minItems: 2 + maxItems: 2 + items: + type: integer + panels: + description: either a panel (array) or padding between panels (int) + type: array + items: + anyOf: + - type: integer + minimum: 0 + - type: array + description: | + either a list of columns in a panel (array) or padding between + columns (int) + minItems: 1 + items: + anyOf: + - type: integer + minimum: 0 + - type: array + description: | + either a list of modules in a panel column (array) or + padding between modules + minItems: 1 + items: + anyOf: + - type: integer + minimum: 0 + - type: string + pattern: + "^system|graphics|processor|readwrite|\ + network|pacman|filesystem|power|memory$" + + + +