From c50a704c0fa5a80e65a4887ff3564c561d698393 Mon Sep 17 00:00:00 2001 From: ndwarshuis Date: Fri, 12 Aug 2022 00:20:01 -0400 Subject: [PATCH] ENH use disgusting yaml union type hack for module layout --- config/config.dhall | 80 ++++++++++++++------------------------ config/fallback.dhall | 72 ++++++++++++++++------------------ src/compile.lua | 20 +++++----- src/modules/filesystem.lua | 2 +- src/modules/network.lua | 2 +- src/modules/pacman.lua | 2 +- src/modules/processor.lua | 2 +- src/modules/system.lua | 2 +- 8 files changed, 77 insertions(+), 105 deletions(-) diff --git a/config/config.dhall b/config/config.dhall index 3815d24..f6e3fc4 100644 --- a/config/config.dhall +++ b/config/config.dhall @@ -38,38 +38,21 @@ let Power = { battery : Text, rapl_specs : List RaplSpec } let ReadWrite = { devices : List Text } -let Modules = - { Type = - { filesystem : Optional FileSystem - , graphics : Optional Graphics - , memory : Optional Memory - , processor : Optional Processor - , power : Optional Power - , readwrite : Optional ReadWrite - } - , default = - { filesystem = None FileSystem - , graphics = None Graphics - , memory = None Memory - , processor = None Processor - , power = None Power - , readwrite = None ReadWrite - } - } - let ModType = - < filesystem - | graphics - | memory + < filesystem : FileSystem + | graphics : Graphics + | memory : Memory | network | pacman - | processor - | power - | readwrite + | processor : Processor + | power : Power + | readwrite : ReadWrite | system > -let Block = < Pad : Natural | Mod : ModType > +let Annotated = \(a : Type) -> { type : Text, data : a } + +let Block = < Pad : Natural | Mod : Annotated ModType > let Column_ = { blocks : List Block, width : Natural } @@ -153,18 +136,18 @@ let Pattern = | GradientRGBA : List StopRGBA > -let Annotated = \(a : Type) -> { type : Text, data : a } - -let annotate = +let annotatePattern = \(a : Pattern) -> { type = showConstructor a, data = a } : Annotated Pattern +let mod = \(a : ModType) -> Block.Mod { type = showConstructor a, data = a } + let APattern = Annotated Pattern let symGradient = \(c0 : Natural) -> \(c1 : Natural) -> - annotate + annotatePattern ( Pattern.GradientRGB [ { color = c0, stop = 0.0 } , { color = c1, stop = 0.5 } @@ -188,27 +171,28 @@ let Patterns = { bg : APattern, fg : { active : APattern, critical : APattern } } } , default = - { header = annotate (Pattern.RGB 0xefefef) - , panel.bg = annotate (Pattern.RGBA { color = 0x121212, alpha = 0.7 }) + { header = annotatePattern (Pattern.RGB 0xefefef) + , panel.bg + = annotatePattern (Pattern.RGBA { color = 0x121212, alpha = 0.7 }) , text = - { active = annotate (Pattern.RGB 0xbfe1ff) - , inactive = annotate (Pattern.RGB 0xc8c8c8) - , critical = annotate (Pattern.RGB 0xff8282) + { active = annotatePattern (Pattern.RGB 0xbfe1ff) + , inactive = annotatePattern (Pattern.RGB 0xc8c8c8) + , critical = annotatePattern (Pattern.RGB 0xff8282) } - , border = annotate (Pattern.RGB 0x888888) + , border = annotatePattern (Pattern.RGB 0x888888) , plot = - { grid = annotate (Pattern.RGB 0x666666) - , outline = annotate (Pattern.RGB 0x777777) + { grid = annotatePattern (Pattern.RGB 0x666666) + , outline = annotatePattern (Pattern.RGB 0x777777) , data = { border = - annotate + annotatePattern ( Pattern.GradientRGB [ { color = 0x003f7c, stop = 0.0 } , { color = 0x1e90ff, stop = 1.0 } ] ) , fill = - annotate + annotatePattern ( Pattern.GradientRGBA [ { color = 0x316ece, stop = 0.2, alpha = 0.5 } , { color = 0x8cc7ff, stop = 1.0, alpha = 1.0 } @@ -238,23 +222,17 @@ let Theme = let Bootstrap = { update_interval : Natural, dimensions : Point } -let Config = - { bootstrap : Bootstrap - , theme : Theme.Type - , layout : Layout - , modules : Modules.Type - } +let Config = { bootstrap : Bootstrap, theme : Theme.Type, layout : Layout } let toConfig = \(i : Natural) -> - \(d : Point) -> + \(x : Natural) -> + \(y : Natural) -> \(t : Theme.Type) -> \(l : Layout) -> - \(m : Modules.Type) -> - { bootstrap = { update_interval = i, dimensions = d } + { bootstrap = { update_interval = i, dimensions = { x, y } } , theme = t , layout = l - , modules = m } : Config @@ -264,7 +242,6 @@ in { toConfig , ModType , Layout , Panel - , Modules , FSPath , FileSystem , Graphics @@ -273,4 +250,5 @@ in { toConfig , Power , ReadWrite , Theme + , mod } diff --git a/config/fallback.dhall b/config/fallback.dhall index 308438f..54576b5 100644 --- a/config/fallback.dhall +++ b/config/fallback.dhall @@ -1,47 +1,41 @@ let C = ./config.dhall +let memory = + C.ModType.memory + { show_stats = False + , show_swap = False + , show_plot = True + , table_rows = 3 + } + +let processor = + C.ModType.processor + { core_rows = 0 + , core_padding = 0 + , show_stats = False + , show_plot = True + , table_rows = 3 + } + let layout = - { anchor = { x = 12, y = 11 } - , panels = - [ C.Panel.PPanel - { columns = - [ C.Column.CCol - { 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 - } + { anchor = { x = 12, y = 11 } + , panels = + [ C.Panel.PPanel + { columns = + [ C.Column.CCol + { blocks = + [ C.mod C.ModType.network + , C.Block.Pad 10 + , C.mod memory + , C.Block.Pad 10 + , C.mod processor ] - , margins = { x = 20, y = 10 } + , width = 436 } ] - : 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 - ) + , margins = { x = 20, y = 10 } + } + ] } -in C.toConfig 1 { x = 1920, y = 1080 } C.Theme::{=} layout modules +in C.toConfig 1 1920 1080 C.Theme::{=} layout diff --git a/src/compile.lua b/src/compile.lua index 708dff2..304aaa2 100644 --- a/src/compile.lua +++ b/src/compile.lua @@ -18,7 +18,8 @@ local reduce_modules_y = function(common_, modlist, init_x, width, acc, new) if type(new) == "number" then acc.next_y = acc.next_y + new else - local m = modlist[new](common_, width, geom.make_point(init_x, acc.next_y)) + local m = modlist[new.type](new.data, common_, width, geom.make_point(init_x, acc.next_y)) + -- local m = modlist[new](common_, width, geom.make_point(init_x, acc.next_y)) local r = common_.compile_module( m.header, m.point, @@ -147,19 +148,18 @@ end return function(update_interval, config_path) local update_freq = 1 / update_interval local config = yaml.load(i_o.read_file(config_path)) - local cmods = config.modules local main_state = {} - local mods = { - memory = pure.partial(memory, update_freq, cmods.memory), - readwrite = pure.partial(readwrite, update_freq, cmods.readwrite), + local modlist = { + memory = pure.partial(memory, update_freq), + readwrite = pure.partial(readwrite, update_freq), network = pure.partial(network, update_freq), - power = pure.partial(power, update_freq, cmods.power), - filesystem = pure.partial(filesystem, cmods.filesystem, main_state), + power = pure.partial(power, update_freq), + filesystem = pure.partial(filesystem, main_state), system = pure.partial(system, main_state), - graphics = pure.partial(graphics, update_freq, cmods.graphics), - processor = pure.partial(processor, update_freq, cmods.processor, main_state), + graphics = pure.partial(graphics, update_freq), + processor = pure.partial(processor, update_freq, main_state), pacman = pure.partial(pacman, main_state) } @@ -168,7 +168,7 @@ return function(update_interval, config_path) local compiled = compile_layout( common(config), geom.make_point(anchor.x, anchor.y), - mods, + modlist, config.layout.panels ) diff --git a/src/modules/filesystem.lua b/src/modules/filesystem.lua index 8c36ebb..79d7248 100644 --- a/src/modules/filesystem.lua +++ b/src/modules/filesystem.lua @@ -2,7 +2,7 @@ local i_o = require 'i_o' local pure = require 'pure' local impure = require 'impure' -return function(config, main_state, common, width, point) +return function(main_state, config, common, width, point) local SPACING = 20 local BAR_PAD = 100 local SEPARATOR_SPACING = 20 diff --git a/src/modules/network.lua b/src/modules/network.lua index a0e0065..c1fb4ae 100644 --- a/src/modules/network.lua +++ b/src/modules/network.lua @@ -3,7 +3,7 @@ local pure = require 'pure' local i_o = require 'i_o' local sys = require 'sys' -return function(update_freq, common, width, point) +return function(update_freq, _, common, width, point) local PLOT_SEC_BREAK = 20 local PLOT_HEIGHT = 56 local interface_paths = sys.get_net_interface_paths() diff --git a/src/modules/pacman.lua b/src/modules/pacman.lua index fa6b8e2..f1739a9 100644 --- a/src/modules/pacman.lua +++ b/src/modules/pacman.lua @@ -1,6 +1,6 @@ local pure = require 'pure' -return function(main_state, common, width, point) +return function(main_state, _, common, width, point) local TEXT_SPACING = 20 local __string_match = string.match diff --git a/src/modules/processor.lua b/src/modules/processor.lua index 25497f9..7ed6bce 100644 --- a/src/modules/processor.lua +++ b/src/modules/processor.lua @@ -6,7 +6,7 @@ local pure = require 'pure' local __math_floor = math.floor -return function(update_freq, config, main_state, common, width, point) +return function(update_freq, main_state, config, common, width, point) local DIAL_INNER_RADIUS = 30 local DIAL_OUTER_RADIUS = 42 local DIAL_THICKNESS = 5.5 diff --git a/src/modules/system.lua b/src/modules/system.lua index 050a790..9a47ccb 100644 --- a/src/modules/system.lua +++ b/src/modules/system.lua @@ -1,7 +1,7 @@ local i_o = require 'i_o' local pure = require 'pure' -return function(main_state, common, width, point) +return function(main_state, _, common, width, point) local TEXT_SPACING = 20 local __string_match = string.match