From 0c4172b14909ef9290be1e297bac078da66b656b Mon Sep 17 00:00:00 2001 From: ndwarshuis Date: Thu, 11 Aug 2022 00:05:06 -0400 Subject: [PATCH] ENH update conky to use dhall --- config/config.dhall | 96 +++++++++++++++++++----------------------- config/fallback.dhall | 45 ++++++++++++++++++++ conky.conf | 58 +++++++++++++------------ src/color.lua | 14 ++++-- src/compile.lua | 8 ++-- src/modules/common.lua | 8 ++-- 6 files changed, 139 insertions(+), 90 deletions(-) create mode 100644 config/fallback.dhall diff --git a/config/config.dhall b/config/config.dhall index 50d46a3..7aca51c 100644 --- a/config/config.dhall +++ b/config/config.dhall @@ -4,7 +4,9 @@ let Point = Vector2 Natural let Margin = Vector2 Natural -let FileSystem = { show_smart : Bool, paths : List Text } +let FSPath = { name : Text, path : Text } + +let FileSystem = { show_smart : Bool, fs_paths : List FSPath } let Graphics = { dev_power : Text @@ -56,14 +58,14 @@ let Modules = } let ModType = - < FileSystem - | Graphics - | Memory - | Network - | Pacman - | Processor - | ReadWrite - | System + < fileSystem + | graphics + | memory + | network + | pacman + | processor + | readwrite + | system > let Block = < Pad : Natural | Mod : ModType > @@ -220,50 +222,40 @@ let Theme = { font = Font::{=}, geometry = Geometry::{=}, patterns = Patterns::{=} } } -let layout = - { anchor = { x = 12, y = 11 } - , panels = - [ { columns = - [ { blocks = - [ Block.Mod ModType.Network - , Block.Pad 10 - , Block.Mod ModType.Memory - , Block.Pad 10 - , Block.Mod ModType.Processor - ] - , width = 436 - } - ] - , margins = { x = 20, y = 10 } - } - ] - : List Panel - } - : Layout +let Bootstrap = { update_interval : Natural, dimensions : Point } -let modules = - Modules::{ - , memory = Some - ( { show_stats = False - , show_swap = False - , show_plot = True - , table_rows = 3 - } - : Memory - ) - , processor = Some - ( { core_rows = 0 - , core_padding = 0 - , show_stats = False - , show_plot = True - , table_rows = 3 - } - : Processor - ) +let Config = + { bootstrap : Bootstrap + , theme : Theme.Type + , layout : Layout + , modules : Modules.Type } -in { bootstrap = { update_interval = 1, dimensions = { x = 1920, y = 1080 } } - , theme = Theme::{=} - , layout - , modules +let toConfig = + \(i : Natural) -> + \(d : Point) -> + \(t : Theme.Type) -> + \(l : Layout) -> + \(m : Modules.Type) -> + { bootstrap = { update_interval = i, dimensions = d } + , theme = t + , layout = l + , modules = m + } + : Config + +in { toConfig + , Block + , ModType + , Layout + , Panel + , Modules + , FSPath + , FileSystem + , Graphics + , Memory + , Processor + , Power + , ReadWrite + , Theme } diff --git a/config/fallback.dhall b/config/fallback.dhall new file mode 100644 index 0000000..ce9c7e3 --- /dev/null +++ b/config/fallback.dhall @@ -0,0 +1,45 @@ +let C = ./config.dhall + +let layout = + { anchor = { x = 12, y = 11 } + , panels = + [ { columns = + [ { blocks = + [ C.Block.Mod C.ModType.network + , C.Block.Pad 10 + , C.Block.Mod C.ModType.memory + , C.Block.Pad 10 + , C.Block.Mod C.ModType.processor + ] + , width = 436 + } + ] + , margins = { x = 20, y = 10 } + } + ] + : List C.Panel + } + : C.Layout + +let modules = + C.Modules::{ + , memory = Some + ( { show_stats = False + , show_swap = False + , show_plot = True + , table_rows = 3 + } + : C.Memory + ) + , processor = Some + ( { core_rows = 0 + , core_padding = 0 + , show_stats = False + , show_plot = True + , table_rows = 3 + } + : C.Processor + ) + } + +in C.toConfig 1 { x = 1920, y = 1080 } C.Theme::{=} layout modules diff --git a/conky.conf b/conky.conf index 897cd6a..6bed01a 100644 --- a/conky.conf +++ b/conky.conf @@ -55,37 +55,41 @@ package.cpath = conky_dir..'lib/lib/lua/5.4/?.so;' local yaml = require 'lyaml' local i_o = require 'i_o' -local schema_path = conky_dir..'/config/schema.yml' -local validate_config +-- local schema_path = conky_dir..'/config/schema.yml' +-- local validate_config -if i_o.exe_exists('yajsv') then - validate_config = function(config_path) - local cmd = string.format('yajsv -q -s %s %s', schema_path, config_path) - return i_o.exit_code_cmd(cmd) == 0 - end -else - validate_config = function(_) - i_o.warnf('could not validate config') - return true - end +-- if i_o.exe_exists('yajsv') then +-- validate_config = function(config_path) +-- local cmd = string.format('yajsv -q -s %s %s', schema_path, config_path) +-- return i_o.exit_code_cmd(cmd) == 0 +-- end +-- else +-- validate_config = function(_) +-- i_o.warnf('could not validate config') +-- return true +-- end +-- end + +local config_path = '/tmp/conky.yml' + +local try_read_config = function(path) + print(path) + local cmd = string.format('dhall-to-yaml --file %s > %s', path, config_path) + return i_o.exit_code_cmd(cmd) end local find_valid_config = function(paths) for i = 1, #paths do local path = paths[i] - local r = i_o.read_file(path) - if r ~= nil then - if validate_config(path) then - i_o.infof('Using config at %s', path) - return path, yaml.load(r) - else - i_o.warnf('%s did not pass; trying next', path) - end + local rc = try_read_config(path) + if rc == 0 then + i_o.infof('Using config at %s', path) + return yaml.load(i_o.read_file(config_path)) else - i_o.infof('could not find %s; trying next', path) + i_o.warnf('could not read %s; trying next', path) end end - i_o.assertf(false, 'ERROR: could not load valid config') + i_o.assertf(false, 'could not load valid config') end local get_config_dir = function() @@ -93,11 +97,11 @@ local get_config_dir = function() end local try_config_paths = { - get_config_dir()..'conky.yml', - conky_dir..'config/fallback.yml' + get_config_dir()..'conky.dhall', + conky_dir..'config/fallback.dhall' } -local config_path, config = find_valid_config(try_config_paths) +local config = find_valid_config(try_config_paths) local bootstrap = config.bootstrap @@ -125,8 +129,8 @@ conky.config = { xinerama_head = 0, double_buffer = true, - minimum_width = bootstrap.dimensions[1], - minimum_height = bootstrap.dimensions[2], + minimum_width = bootstrap.dimensions.x, + minimum_height = bootstrap.dimensions.y, draw_shades = false, draw_outline = false, diff --git a/src/color.lua b/src/color.lua index 69a2b35..c834493 100644 --- a/src/color.lua +++ b/src/color.lua @@ -15,6 +15,7 @@ local rgba = function(hex, alpha) a = alpha, } ) + print(hex, obj.r, obj.g, obj.b) return err.set_type(obj, "color") end @@ -65,10 +66,15 @@ compile_patterns = function(patterns) r[k] = rgb(v) elseif v.color ~= nil then r[k] = rgba(v.color, v.alpha) - elseif v.gradient ~= nil then - r[k] = compile_gradient(v.gradient) - elseif v.gradient_alpha ~= nil then - r[k] = compile_gradient_alpha(v.gradient_alpha) + elseif #v > 0 then + if v[1].alpha ~= nil then + r[k] = compile_gradient_alpha(v) + else + -- for k, v in pairs(compile_gradient(v)) do + -- print(k, v.r) + -- end + r[k] = compile_gradient(v) + end else r[k] = compile_patterns(v) end diff --git a/src/compile.lua b/src/compile.lua index e727ab8..708dff2 100644 --- a/src/compile.lua +++ b/src/compile.lua @@ -99,8 +99,8 @@ local reduce_static = function(common_, mods, y, acc, panel_mods) acc.next_x = acc.next_x + panel_mods else local margins = panel_mods.margins - local margin_x = margins[1] - local margin_y = margins[2] + local margin_x = margins.x + local margin_y = margins.y local mpoint = geom.make_point(acc.next_x + margin_x, y + margin_y) local r = arrange_panel_modules(common_, mods, mpoint, panel_mods.columns) local w = r.width + margin_x * 2 @@ -163,9 +163,11 @@ return function(update_interval, config_path) pacman = pure.partial(pacman, main_state) } + local anchor = config.layout.anchor + local compiled = compile_layout( common(config), - geom.make_point(table.unpack(config.layout.anchor)), + geom.make_point(anchor.x, anchor.y), mods, config.layout.panels ) diff --git a/src/modules/common.lua b/src/modules/common.lua index 7275d94..10e8975 100644 --- a/src/modules/common.lua +++ b/src/modules/common.lua @@ -104,8 +104,8 @@ return function(config) -- timeseries helper functions local _default_grid_config = timeseries.grid_config( - geometry.plot.ticks[1], - geometry.plot.ticks[2], + geometry.plot.ticks.x, + geometry.plot.ticks.y, patterns.plot.grid ) @@ -615,8 +615,8 @@ return function(config) local gtable = geometry.table local padding = gtable.padding - local xpad = padding[1] - local ypad = padding[2] + local xpad = padding.x + local ypad = padding.y local default_table_font_spec = make_font_spec(font_family, font_sizes.table, false)