-- vim: ft=lua:ts=4:sw=4:et:ai:cin -- !! WARNING !! -- Do *NOT* modify this file for customization. Instead, create a `local.conf` -- file from `local.conf.example` and make changes over there. local _dir_ = debug.getinfo(1, "S").source:sub(2):match("(.*[/\\])") or "./" if not string.find(package.path, _dir_ .. "lib/?.lua;", 1, true) then package.path = _dir_ .. "lib/?.lua;" .. _dir_ .. "lib/?/init.lua;" .. package.path end local utils = require("utils") -- the global LCC object -- NOTE: lcc must be global for other globally scoped functions to access it -- (e.g. tform functions rely on `lcc.config.scale`) _G.lcc = { root_dir = _dir_ } -- ensure global conky object, if not already available (when loaded by main.lua) _G.conky = _G.conky or {} require("tform") -- global `T_` created and available require("components") -- global `C_` created and available lcc.config = { scale = 1, -- scale the whole panel (>1 to enlarge, <1 to shrink) spacing = 18, -- vertical spacing between components (in pixels *before* scaling) width = 270, -- full-width of panel content (in pixels *before* scaling) width_half = 130, -- half-width of panel, for bars and graphs (in pixels *before* scaling) storage_include_fs = "", -- filesystem types to include (comma-separated string) storage_exclude_fs = "", -- filesystem types to exclude (comma-separated string) storage_exclude_paths = { -- mount paths to exclude (array or comma-separated string) "^/boot/", "^/var/snap/", }, } -- NOTE: when local_conf is ready, custom lcc.config.scale (if specified in -- local.conf) is also effective. and transform functions will work properly -- for global settings below. local local_conf = { lcc = {}, conky = {} } do setmetatable(local_conf, { __index = _G }) -- global fallback -- update global lcc.config with local values, this has to be done on the fly -- in `local.conf` so that other settings (e.g. fonts) can use the correct -- config values -- NOTE: __newindex only gets called for an absent key, a second assignment -- won't change the global value setmetatable(local_conf.lcc, { __newindex = function(t, k, v) rawset(t, k, v) if k ~= "config" then return end if _G.lcc[k] == nil then _G.lcc[k] = {} end utils.table.update(_G.lcc[k], v) end }) utils.load_in_env(_dir_ .. "local.conf", local_conf) setmetatable(local_conf, nil) end -- font definitions lcc.fonts = { icon = T_ "LeanConkyConfig:normal:size=$sc{12}", -- icons icon_s = T_ "LeanConkyConfig:normal:size=$sc{8.5}", -- icons (small) h1 = T_ "sans-serif:bold:size=$sc{10}", -- heading 1 h2 = T_ "sans-serif:bold:size=$sc{8}", -- heading 2 date = T_ "sans-serif:normal:size=$sc{18}", -- date week = T_ "sans-serif:bold:size=$sc{7}", -- week year = T_ "sans-serif:normal:size=$sc{7}", -- year time = T_ "LeanConkyConfig:normal:size=$sc{18}", -- time time_alt = T_ "sans-serif:bold:size=$sc{18}" -- time (fallback) } -- Conky settings conky.config = { alignment = "top_right", background = false, border_inner_margin = T_.sr(8), border_outer_margin = T_.sr(0), border_width = T_.sr(1), cpu_avg_samples = 2, default_bar_height = T_.sr(4), default_bar_width = 0, default_color = "white", default_graph_height = T_.sr(32), default_graph_width = 0, default_outline_color = "#555555", default_shade_color = "#555555", diskio_avg_samples = 2, double_buffer = true, draw_borders = false, draw_graph_borders = true, draw_outline = true, draw_shades = false, extra_newline = false, font = T_ "sans-serif:normal:size=$sc{8}", gap_x = T_.sr(0), gap_y = T_.sr(0), lua_load = _dir_ .. "main.lua", maximum_width = T_.sr(lcc.config.width), minimum_height = T_.sr(32), minimum_width = T_.sr(lcc.config.width), net_avg_samples = 2, no_buffers = true, out_to_console = false, out_to_stderr = false, override_utf8_locale = true, own_window = true, own_window_argb_value = 128, own_window_argb_visual = true, own_window_class = "conky", own_window_hints = "undecorated,below,sticky,skip_taskbar,skip_pager", own_window_title = "conky-lcc", own_window_transparent = false, own_window_type = "desktop", show_graph_range = false, show_graph_scale = false, stippled_borders = T_.sr(0), store_graph_data_explicitly = false, top_cpu_separate = false, update_interval = 2, uppercase = false, use_spacer = "none", use_xft = true, xinerama_head = 0, -- COLORS -- color0 = "white", -- clock color color1 = "white", -- heading 1 color color2 = "white", -- heading 2 color color3 = "lightgray", -- chart color } -- update global settings with custom values utils.table.update(lcc.fonts, local_conf.lcc.fonts) utils.table.update(conky.config, local_conf.conky.config) -- NOTE: for backward compatibility, will be deprecated in a future release utils.table.update(lcc.fonts, local_conf.local_fonts) utils.table.update(conky.config, local_conf.local_config) -- remove unavailable fonts do for k, _ in pairs(lcc.fonts) do local font = lcc.fonts[k] local p = font:find(":") if p then font = font:sub(1, p - 1) end font = utils.trim(font) if #font > 0 and font ~= "sans-serif" and font ~= "serif" and font ~= "courier" and font ~= "monospace" then local s = utils.sys_call('fc-list -f "%{family[0]}" "' .. font .. '"', true) if #s < 1 then lcc.fonts[k] = nil end elseif not p then lcc.fonts[k] = nil end end end -- extra context variables to be used by templates or hooks utils.table.update(lcc, { half_bar_size = string.format("%d,%d", conky.config.default_bar_height, T_.sr(lcc.config.width_half)), half_graph_size = string.format("%d,%d", conky.config.default_graph_height, T_.sr(lcc.config.width_half)) }) -- define panel with components lcc.panel_presets = { default = { "datetime", "system", "cpu", "memory", "storage", "network", { "vspace", -20 }, -- hack: remove excessive space } } lcc.panel = lcc.panel_presets.default -- NOTE: the panel is *replaced* in whole by the local one, while other settings -- are just partially overridden if local_conf.lcc.panel then lcc.panel = local_conf.lcc.panel end -- build the panel conky.text = C_.build_panel()