oxwm

https://git.tonybtw.com/oxwm.git git://git.tonybtw.com/oxwm.git
1,770 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
        gap_inner_horizontal: builder_data.gap_inner_horizontal,
36
        gap_inner_vertical: builder_data.gap_inner_vertical,
37
        gap_outer_horizontal: builder_data.gap_outer_horizontal,
38
        gap_outer_vertical: builder_data.gap_outer_vertical,
39
        terminal: builder_data.terminal,
40
        modkey: builder_data.modkey,
41
        tags: builder_data.tags,
42
        layout_symbols: builder_data.layout_symbols,
43
        keybindings: builder_data.keybindings,
44
        status_blocks: builder_data.status_blocks,
45
        scheme_normal: builder_data.scheme_normal,
46
        scheme_occupied: builder_data.scheme_occupied,
47
        scheme_selected: builder_data.scheme_selected,
48
        autostart: builder_data.autostart,
49
    })
50
}