ADD font and cpu core count to config

This commit is contained in:
Nathan Dwarshuis 2022-07-18 00:36:44 -04:00
parent d20a9637d1
commit e5e83c5b79
5 changed files with 115 additions and 65 deletions

View File

@ -17,17 +17,18 @@ modules:
memory:
show_stats: true
show_plot: true
show_table: true
table_rows: 5
power:
battery: BAT0
rapl_specs:
- {name: PKG0, address: intel-rapl:0}
- {name: DRAM, address: intel-rapl:0:2}
processor:
show_cores: true
core_rows: 1
core_padding: 0
show_stats: true
show_plot: true
show_table: true
table_rows: 5
readwrite:
devices: [sda, nvme0n1]
@ -49,7 +50,13 @@ layout:
margins: [20, 10]
theme:
font: Neuropolitical
font:
family: Neuropolitical
sizes:
normal: 13
plot_label: 8
table: 11
header: 15
patterns:
header: 0xefefef
panel:

View File

@ -56,17 +56,13 @@ return function(config)
local M = {}
local patterns = compile_patterns(config.theme.patterns)
local font = config.theme.font
local font_sizes = font.sizes
local font_family = font.family
-----------------------------------------------------------------------------
-- constants
local FONT = config.theme.font
local NORMAL_FONT_SIZE = 13
local PLOT_LABEL_FONT_SIZE = 8
local TABLE_FONT_SIZE = 11
local HEADER_FONT_SIZE = 15
local HEADER_HEIGHT = 45
local HEADER_UNDERLINE_CAP = CAIRO_LINE_CAP_ROUND
local HEADER_UNDERLINE_OFFSET = 26
@ -103,13 +99,13 @@ return function(config)
return {
family = f,
size = size,
weight = bold and CAIRO_FONT_WEIGHT_BOLD or CAIRO_FONT_WEIGHT_NORMAL,
slant = CAIRO_FONT_WEIGHT_NORMAL,
weight = bold and CAIRO_font_family_WEIGHT_BOLD or CAIRO_font_family_WEIGHT_NORMAL,
slant = CAIRO_font_family_WEIGHT_NORMAL,
}
end
local normal_font_spec = make_font_spec(FONT, NORMAL_FONT_SIZE, false)
local label_font_spec = make_font_spec(FONT, PLOT_LABEL_FONT_SIZE, false)
local normal_font_spec = make_font_spec(font_family, font_sizes.normal, false)
local label_font_spec = make_font_spec(font_family, font_sizes.plot_label, false)
local _text_row_style = function(x_align, color)
return text.config(normal_font_spec, color, x_align, 'center')
@ -218,7 +214,7 @@ return function(config)
geom.make_point(x, y),
_text,
text.config(
make_font_spec(FONT, HEADER_FONT_SIZE, true),
make_font_spec(font_family, font_sizes.header, true),
patterns.header,
'left',
'top'
@ -629,7 +625,7 @@ return function(config)
-----------------------------------------------------------------------------
-- table
local default_table_font_spec = make_font_spec(FONT, TABLE_FONT_SIZE, false)
local default_table_font_spec = make_font_spec(font_family, font_sizes.table, false)
local default_table_config = function(label)
return tbl.config(
@ -673,6 +669,10 @@ return function(config)
)
end
M.table_height = function(n)
return TABLE_VERT_PAD * 2 + TABLE_HEADER_PAD + 13 * n
end
-----------------------------------------------------------------------------
-- panel

View File

@ -13,7 +13,6 @@ return function(update_freq, config, common, width, point)
local PLOT_SECTION_BREAK = 22
local PLOT_HEIGHT = 56
local TABLE_SECTION_BREAK = 20
local TABLE_HEIGHT = 114
local __string_match = string.match
local __math_floor = math.floor
@ -141,8 +140,9 @@ return function(update_freq, config, common, width, point)
-- memory top table
local mk_tbl = function(y)
local NUM_ROWS = 5
local TABLE_CONKY = pure.map_n(
local num_rows = config.table_rows
local table_height = common.table_height(num_rows)
local table_conky = pure.map_n(
function(i)
return {
comm = '${top_mem name '..i..'}',
@ -150,25 +150,25 @@ return function(update_freq, config, common, width, point)
mem = '${top_mem mem '..i..'}',
}
end,
NUM_ROWS)
num_rows)
local obj = common.make_text_table(
point.x,
y,
width,
TABLE_HEIGHT,
NUM_ROWS,
table_height,
num_rows,
'Mem (%)'
)
local update = function()
for r = 1, NUM_ROWS do
text_table.set(obj, 1, r, i_o.conky(TABLE_CONKY[r].comm, '(%S+)'))
text_table.set(obj, 2, r, i_o.conky(TABLE_CONKY[r].pid))
text_table.set(obj, 3, r, i_o.conky(TABLE_CONKY[r].mem))
for r = 1, num_rows do
text_table.set(obj, 1, r, i_o.conky(table_conky[r].comm, '(%S+)'))
text_table.set(obj, 2, r, i_o.conky(table_conky[r].pid))
text_table.set(obj, 3, r, i_o.conky(table_conky[r].mem))
end
end
return common.mk_acc(
width,
TABLE_HEIGHT,
table_height,
update,
pure.partial(text_table.draw_static, obj),
pure.partial(text_table.draw_dynamic, obj)
@ -186,7 +186,7 @@ return function(update_freq, config, common, width, point)
top = {
{mk_stats, config.show_stats, PLOT_SECTION_BREAK},
{mk_plot, config.show_plot, TABLE_SECTION_BREAK},
{mk_tbl, config.show_table, 0},
{mk_tbl, config.table_rows > 0, 0},
}
}
end

View File

@ -10,12 +10,12 @@ return function(update_freq, config, main_state, common, width, point)
local DIAL_INNER_RADIUS = 30
local DIAL_OUTER_RADIUS = 42
local DIAL_THICKNESS = 5.5
local DIAL_SPACING = 20
local SEPARATOR_SPACING = 20
local TEXT_SPACING = 22
local PLOT_SECTION_BREAK = 23
local PLOT_HEIGHT = 56
local TABLE_SECTION_BREAK = 20
local TABLE_HEIGHT = 114
-----------------------------------------------------------------------------
-- processor state
@ -33,6 +33,22 @@ return function(update_freq, config, main_state, common, width, point)
local ncores = cpu.get_core_number()
local nthreads = ncpus / ncores
local show_cores = false
if config.core_rows > 0 then
if math.fmod(ncores, config.core_rows) == 0 then
show_cores = true
else
print(
string.format(
'WARNING: could not evenly distribute %i cores over %i rows',
ncores,
config.core_rows
)
)
end
end
local create_core = function(x, y)
return {
loads = common.make_compound_dial(
@ -57,12 +73,23 @@ return function(update_freq, config, main_state, common, width, point)
local mk_cores = function(y)
local coretemp_paths = cpu.get_coretemp_paths()
local core_cols = ncores / config.core_rows
local cores = {}
-- TODO what happens when the number of cores changes?
for c = 1, ncores do
local dial_x = point.x + DIAL_OUTER_RADIUS +
(width - 2 * DIAL_OUTER_RADIUS) * (c - 1) / 3
local dial_y = y + DIAL_OUTER_RADIUS
local dial_x
local dial_y
if core_cols == 1 then
dial_x = point.x + width / 2
dial_y = y + DIAL_OUTER_RADIUS +
(2 * DIAL_OUTER_RADIUS + DIAL_SPACING) * (c - 1)
else
dial_x = point.x + config.core_padding + DIAL_OUTER_RADIUS +
(width - 2 * (DIAL_OUTER_RADIUS + config.core_padding))
* math.fmod(c - 1, core_cols) / (core_cols - 1)
dial_y = y + DIAL_OUTER_RADIUS +
(2 * DIAL_OUTER_RADIUS + DIAL_SPACING)
* math.floor((c - 1) / core_cols) / (core_cols - 1)
end
cores[c] = create_core(dial_x, dial_y)
end
local update = function()
@ -92,7 +119,8 @@ return function(update_freq, config, main_state, common, width, point)
end
return common.mk_acc(
width,
DIAL_OUTER_RADIUS * 2,
(DIAL_OUTER_RADIUS * 2 + DIAL_SPACING) * config.core_rows
- DIAL_SPACING,
update,
static,
dynamic
@ -166,38 +194,36 @@ return function(update_freq, config, main_state, common, width, point)
-- cpu top table
local mk_tbl = function(y)
local NUM_ROWS = 5
local TABLE_CONKY = pure.map_n(
local num_rows = config.table_rows
local table_height = common.table_height(num_rows)
local table_conky = pure.map_n(
function(i) return {pid = '${top pid '..i..'}', cpu = '${top cpu '..i..'}'} end,
NUM_ROWS
num_rows
)
local tbl = common.make_text_table(
point.x,
y,
width,
TABLE_HEIGHT,
NUM_ROWS,
table_height,
num_rows,
'CPU (%)'
)
local update = function(state_)
for r = 1, NUM_ROWS do
local pid = i_o.conky(TABLE_CONKY[r].pid, '(%d+)') -- may have leading spaces
local update = function()
for r = 1, num_rows do
local pid = i_o.conky(table_conky[r].pid, '(%d+)') -- may have leading spaces
if pid ~= '' then
text_table.set(tbl, 1, r, i_o.read_file('/proc/'..pid..'/comm', '(%C+)'))
text_table.set(tbl, 2, r, pid)
text_table.set(tbl, 3, r, i_o.conky(TABLE_CONKY[r].cpu))
text_table.set(tbl, 3, r, i_o.conky(table_conky[r].cpu))
end
end
return state_
end
local static = pure.partial(text_table.draw_static, tbl)
local dynamic = pure.partial(text_table.draw_dynamic, tbl)
return common.mk_acc(
width,
TABLE_HEIGHT,
table_height,
update,
static,
dynamic
pure.partial(text_table.draw_static, tbl),
pure.partial(text_table.draw_dynamic, tbl)
)
end
@ -210,13 +236,13 @@ return function(update_freq, config, main_state, common, width, point)
width = width,
set_state = update_state,
top = {
{mk_cores, config.show_cores, TEXT_SPACING},
{mk_cores, show_cores, TEXT_SPACING},
{mk_hwp_freq, config.show_stats, SEPARATOR_SPACING},
},
common.mk_section(
SEPARATOR_SPACING,
{mk_load_plot, config.show_plot, TABLE_SECTION_BREAK},
{mk_tbl, config.show_table, 0}
{mk_tbl, config.table_rows > 0, 0}
)
}
end

View File

@ -49,7 +49,7 @@ properties:
type: boolean
memory:
required: [show_stats, show_plot, show_table]
required: [show_stats, show_plot, table_rows]
additionalProperties: false
properties:
show_stats:
@ -58,9 +58,10 @@ properties:
show_plot:
description: show the RAM utilization plot
type: boolean
show_table:
description: show the memory process table
type: boolean
table_rows: &table
descrition: the number of rows in the table (0 for no table)
type: integer
minimum: 0
power:
required: [battery, rapl_specs]
@ -85,21 +86,24 @@ properties:
type: string
processor:
required: [show_cores, show_stats, show_plot, show_table]
required: [core_rows, show_stats, show_plot, table_rows]
additionalProperties: false
properties:
show_cores:
description: show individual CPU cores
type: boolean
core_rows:
description: the number of rows over which to show discrete cores
type: integer
minimum: 0
core_padding:
description: horizontal padding to apply to the core layout
type: integer
minimum: 0
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
table_rows: *table
readwrite:
required: [devices]
@ -178,8 +182,21 @@ properties:
additionalProperties: false
properties:
font:
description: the font to use
type: string
required: [family, sizes]
additionalProperties: false
properties:
family:
type: string
sizes:
required: [normal, plot_label, table, header]
additionalProperties: false
properties:
normal: &font_size
type: integer
minimum: 5
plot_label: *font_size
table: *font_size
header: *font_size
patterns:
required: [header, panel, text, border, plot, indicator]
additionalProperties: false