oxwm

https://git.tonybtw.com/oxwm.git git://git.tonybtw.com/oxwm.git
1,922 bytes raw
1
use crate::errors::ConfigError;
2
use mlua::Lua;
3
4
use super::lua_api;
5
6
pub fn parse_lua_config(
7
    input: &str,
8
    config_dir: Option<&std::path::Path>,
9
) -> Result<crate::Config, ConfigError> {
10
    let lua = Lua::new();
11
12
    if let Some(dir) = config_dir {
13
        if let Some(dir_str) = dir.to_str() {
14
            let setup_code = format!("package.path = '{}/?.lua;' .. package.path", dir_str);
15
            lua.load(&setup_code)
16
                .exec()
17
                .map_err(|e| ConfigError::LuaError(format!("Failed to set package.path: {}", e)))?;
18
        }
19
    }
20
21
    let builder = lua_api::register_api(&lua)?;
22
23
    lua.load(input)
24
        .exec()
25
        .map_err(|e| ConfigError::LuaError(format!("{}", e)))?;
26
27
    let builder_data = builder.borrow().clone();
28
29
    return Ok(crate::Config {
30
        border_width: builder_data.border_width,
31
        border_focused: builder_data.border_focused,
32
        border_unfocused: builder_data.border_unfocused,
33
        font: builder_data.font,
34
        gaps_enabled: builder_data.gaps_enabled,
35
        smartgaps_enabled: builder_data.smartgaps_enabled,
36
        gap_inner_horizontal: builder_data.gap_inner_horizontal,
37
        gap_inner_vertical: builder_data.gap_inner_vertical,
38
        gap_outer_horizontal: builder_data.gap_outer_horizontal,
39
        gap_outer_vertical: builder_data.gap_outer_vertical,
40
        terminal: builder_data.terminal,
41
        modkey: builder_data.modkey,
42
        tags: builder_data.tags,
43
        layout_symbols: builder_data.layout_symbols,
44
        keybindings: builder_data.keybindings,
45
        window_rules: builder_data.window_rules,
46
        status_blocks: builder_data.status_blocks,
47
        scheme_normal: builder_data.scheme_normal,
48
        scheme_occupied: builder_data.scheme_occupied,
49
        scheme_selected: builder_data.scheme_selected,
50
        autostart: builder_data.autostart,
51
        auto_tile: builder_data.auto_tile,
52
    });
53
}