From 61dba9967975d4a48d33776449c627c11f9bd365 Mon Sep 17 00:00:00 2001 From: David Vazgenovich Shakaryan Date: Mon, 2 Feb 2026 14:14:28 -0800 Subject: support config overrides --- config.lua | 8 ++++++++ util.lua | 30 ++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/config.lua b/config.lua index e4a9c82..6708d83 100644 --- a/config.lua +++ b/config.lua @@ -1,5 +1,8 @@ -- Copyright 2025 David Vazgenovich Shakaryan +local util = require('util') + +local mp_options = require('mp.options') local mp_utils = require('mp.utils') local config = {} @@ -68,4 +71,9 @@ config.cache_dir = mp_utils.join_path(script_dir, 'cache') config.img_dir = mp_utils.join_path(script_dir, 'img') config.favourites_file = mp_utils.join_path(script_dir, 'favourites.json') +-- flatten keys into `foo.bar.baz' form for script-opt overrides +local opts = util.flatten_table(config) +mp_options.read_options(opts) +util.unflatten_table(opts, config) + return config diff --git a/util.lua b/util.lua index 99bba7b..d678a9e 100644 --- a/util.lua +++ b/util.lua @@ -125,6 +125,36 @@ function util.stable_kmerge(t, u, k) return res end +function util.flatten_table(src, dst, prefix) + local dst = dst or {} + for k, v in pairs(src) do + local k = prefix and prefix .. '.' .. k or k + if type(v) == 'table' then + util.flatten_table(v, dst, k) + else + dst[k] = v + end + end + return dst +end + +function util.unflatten_table(src, dst) + local dst = dst or {} + for k, v in pairs(src) do + local t = dst + local prev + for curr in (k .. '.'):gmatch('(.-)%.') do + if prev then + t[prev] = t[prev] or {} + t = t[prev] + end + prev = curr + end + t[prev] = v + end + return dst +end + function util.str_seek_prev_char(str, pos) return util.utf8_seek(str, pos, -1) end -- cgit v1.2.3-70-g09d2