oxwm

https://git.tonybtw.com/oxwm.git git://git.tonybtw.com/oxwm.git
4,659 bytes raw
1
const std = @import("std");
2
3
pub const Action = enum {
4
    spawn_terminal,
5
    spawn,
6
    kill_client,
7
    quit,
8
    reload_config,
9
    restart,
10
    show_keybinds,
11
    focus_next,
12
    focus_prev,
13
    move_next,
14
    move_prev,
15
    resize_master,
16
    inc_master,
17
    dec_master,
18
    toggle_floating,
19
    toggle_fullscreen,
20
    toggle_gaps,
21
    cycle_layout,
22
    set_layout,
23
    set_layout_tiling,
24
    set_layout_floating,
25
    view_tag,
26
    view_next_tag,
27
    view_prev_tag,
28
    view_next_nonempty_tag,
29
    view_prev_nonempty_tag,
30
    move_to_tag,
31
    toggle_view_tag,
32
    toggle_tag,
33
    focus_monitor,
34
    send_to_monitor,
35
    scroll_left,
36
    scroll_right,
37
};
38
39
pub const Key_Press = struct {
40
    mod_mask: u32 = 0,
41
    keysym: u64 = 0,
42
};
43
44
pub const Keybind = struct {
45
    keys: [4]Key_Press = [_]Key_Press{.{}} ** 4,
46
    key_count: u8 = 1,
47
    action: Action,
48
    int_arg: i32 = 0,
49
    str_arg: ?[]const u8 = null,
50
};
51
52
pub const Rule = struct {
53
    class: ?[]const u8,
54
    instance: ?[]const u8,
55
    title: ?[]const u8,
56
    tags: u32,
57
    is_floating: bool,
58
    monitor: i32,
59
};
60
61
pub const Block_Type = enum {
62
    static,
63
    datetime,
64
    ram,
65
    shell,
66
    battery,
67
    cpu_temp,
68
};
69
70
pub const Click_Target = enum {
71
    client_win,
72
    root_win,
73
    tag_bar,
74
};
75
76
pub const Mouse_Action = enum {
77
    move_mouse,
78
    resize_mouse,
79
    toggle_floating,
80
};
81
82
pub const Mouse_Button = struct {
83
    click: Click_Target,
84
    mod_mask: u32,
85
    button: u32,
86
    action: Mouse_Action,
87
};
88
89
pub const Block = struct {
90
    block_type: Block_Type,
91
    format: []const u8,
92
    command: ?[]const u8 = null,
93
    interval: u32,
94
    color: u32,
95
    underline: bool = true,
96
    datetime_format: ?[]const u8 = null,
97
    format_charging: ?[]const u8 = null,
98
    format_discharging: ?[]const u8 = null,
99
    format_full: ?[]const u8 = null,
100
    battery_name: ?[]const u8 = null,
101
    thermal_zone: ?[]const u8 = null,
102
};
103
104
pub const Color_Scheme = struct {
105
    fg: u32 = 0xbbbbbb,
106
    bg: u32 = 0x1a1b26,
107
    border: u32 = 0x444444,
108
};
109
110
pub const Config = struct {
111
    allocator: std.mem.Allocator,
112
113
    terminal: []const u8 = "st",
114
    font: []const u8 = "monospace:size=10",
115
    tags: [9][]const u8 = .{ "1", "2", "3", "4", "5", "6", "7", "8", "9" },
116
117
    border_width: i32 = 2,
118
    border_focused: u32 = 0x6dade3,
119
    border_unfocused: u32 = 0x444444,
120
121
    gaps_enabled: bool = true,
122
    smartgaps_enabled: bool = false,
123
    gap_inner_h: i32 = 5,
124
    gap_inner_v: i32 = 5,
125
    gap_outer_h: i32 = 5,
126
    gap_outer_v: i32 = 5,
127
128
    modkey: u32 = (1 << 6),
129
    auto_tile: bool = false,
130
    tag_back_and_forth: bool = false,
131
    hide_vacant_tags: bool = false,
132
133
    layout_tile_symbol: []const u8 = "[]=",
134
    layout_monocle_symbol: []const u8 = "[M]",
135
    layout_floating_symbol: []const u8 = "><>",
136
    layout_scrolling_symbol: []const u8 = "[S]",
137
138
    scheme_normal: Color_Scheme = .{ .fg = 0xbbbbbb, .bg = 0x1a1b26, .border = 0x444444 },
139
    scheme_selected: Color_Scheme = .{ .fg = 0x0db9d7, .bg = 0x1a1b26, .border = 0xad8ee6 },
140
    scheme_occupied: Color_Scheme = .{ .fg = 0x0db9d7, .bg = 0x1a1b26, .border = 0x0db9d7 },
141
    scheme_urgent: Color_Scheme = .{ .fg = 0xf7768e, .bg = 0x1a1b26, .border = 0xf7768e },
142
143
    keybinds: std.ArrayListUnmanaged(Keybind) = .{},
144
    rules: std.ArrayListUnmanaged(Rule) = .{},
145
    blocks: std.ArrayListUnmanaged(Block) = .{},
146
    buttons: std.ArrayListUnmanaged(Mouse_Button) = .{},
147
    autostart: std.ArrayListUnmanaged([]const u8) = .{},
148
149
    pub fn init(allocator: std.mem.Allocator) Config {
150
        return Config{
151
            .allocator = allocator,
152
        };
153
    }
154
155
    pub fn deinit(self: *Config) void {
156
        self.keybinds.deinit(self.allocator);
157
        self.rules.deinit(self.allocator);
158
        self.blocks.deinit(self.allocator);
159
        self.buttons.deinit(self.allocator);
160
        self.autostart.deinit(self.allocator);
161
    }
162
163
    pub fn add_keybind(self: *Config, keybind: Keybind) !void {
164
        try self.keybinds.append(self.allocator, keybind);
165
    }
166
167
    pub fn add_rule(self: *Config, rule: Rule) !void {
168
        try self.rules.append(self.allocator, rule);
169
    }
170
171
    pub fn add_block(self: *Config, block: Block) !void {
172
        try self.blocks.append(self.allocator, block);
173
    }
174
175
    pub fn add_button(self: *Config, button: Mouse_Button) !void {
176
        try self.buttons.append(self.allocator, button);
177
    }
178
179
    pub fn add_autostart(self: *Config, cmd: []const u8) !void {
180
        try self.autostart.append(self.allocator, cmd);
181
    }
182
};
183
184
pub var global_config: ?*Config = null;
185
186
pub fn get_config() ?*Config {
187
    return global_config;
188
}
189
190
pub fn set_config(cfg: *Config) void {
191
    global_config = cfg;
192
}