oxwm

https://git.tonybtw.com/oxwm.git git://git.tonybtw.com/oxwm.git
8,433 bytes raw
1
---@meta
2
---OXWM Test Configuration File (Lua)
3
---Using the new functional API
4
---Edit this file and reload with Mod+Alt+R
5
6
---Load type definitions for LSP (lua-language-server)
7
---Option 1: Copy templates/oxwm.lua to the same directory as your config
8
---Option 2: Add to your LSP settings (e.g., .luarc.json):
9
---  {
10
---    "workspace.library": [
11
---      "/path/to/oxwm/templates"
12
---    ]
13
---  }
14
---Option 3: Symlink templates/oxwm.lua to your config directory
15
---@module 'oxwm'
16
17
18
local colors = {
19
    lavender = 0xa9b1d6,
20
    light_blue = 0x7aa2f7,
21
    grey = 0xbbbbbb,
22
    purple = 0xad8ee6,
23
    cyan = 0x0db9d7,
24
    bg = 0x1a1b26,
25
    green = 0x9ece6a,
26
    red = 0xf7768e,
27
    fg = 0xbbbbbb,
28
    blue = 0x6dade3,
29
}
30
31
32
local modkey = "Mod1"
33
34
oxwm.set_terminal("st")
35
oxwm.set_modkey(modkey)
36
oxwm.set_tags({ "1", "2", "3", "4", "5", "6", "7", "8", "9" })
37
oxwm.auto_tile(true);
38
oxwm.bar.set_hide_vacant_tags(true);
39
40
oxwm.set_layout_symbol("tiling", "[T]")
41
oxwm.set_layout_symbol("normie", "[F]")
42
43
oxwm.border.set_width(2)
44
oxwm.border.set_focused_color(colors.blue)
45
oxwm.border.set_unfocused_color(colors.grey)
46
47
oxwm.gaps.set_enabled(true)
48
oxwm.gaps.set_smart(true) -- Disable outer gaps when only 1 window (dwm smartgaps)
49
oxwm.gaps.set_inner(5, 5)
50
oxwm.gaps.set_outer(5, 5)
51
52
oxwm.rule.add({ class = "firefox", title = "Library", floating = true })
53
oxwm.rule.add({ instance = "gimp", tag = 5 })
54
oxwm.rule.add({ instance = "mpv", floating = true })
55
56
oxwm.bar.set_font("JetBrainsMono Nerd Font:style=Bold:size=12")
57
58
oxwm.bar.set_scheme_normal(colors.fg, colors.bg, 0x444444)
59
oxwm.bar.set_scheme_occupied(colors.cyan, colors.bg, colors.cyan)
60
oxwm.bar.set_scheme_selected(colors.cyan, colors.bg, colors.purple)
61
oxwm.bar.set_scheme_urgent(colors.red, colors.bg, colors.red)
62
63
oxwm.key.chord({
64
    { { modkey }, "Space" },
65
    { {},         "T" }
66
}, oxwm.spawn_terminal())
67
68
oxwm.key.bind({ modkey }, "Return", oxwm.spawn_terminal())
69
oxwm.key.bind({ modkey }, "D", oxwm.spawn({ "sh", "-c", "dmenu_run -l 10" }))
70
oxwm.key.bind({ modkey }, "S", oxwm.spawn({ "sh", "-c", "maim -s | xclip -selection clipboard -t image/png" }))
71
oxwm.key.bind({ modkey }, "Q", oxwm.client.kill())
72
73
oxwm.key.bind({ modkey, "Shift" }, "Slash", oxwm.show_keybinds())
74
75
oxwm.key.bind({ modkey, "Shift" }, "F", oxwm.client.toggle_fullscreen())
76
oxwm.key.bind({ modkey, "Shift" }, "Space", oxwm.client.toggle_floating())
77
78
oxwm.key.bind({ modkey }, "F", oxwm.layout.set("normie"))
79
oxwm.key.bind({ modkey }, "C", oxwm.layout.set("tiling"))
80
oxwm.key.bind({ modkey }, "G", oxwm.layout.set("scrolling"))
81
oxwm.key.bind({ modkey }, "N", oxwm.layout.cycle())
82
83
oxwm.key.bind({ modkey }, "Left", oxwm.layout.scroll_left())
84
oxwm.key.bind({ modkey }, "Right", oxwm.layout.scroll_right())
85
86
oxwm.key.bind({ modkey }, "A", oxwm.toggle_gaps())
87
88
-- Master area controls
89
oxwm.key.bind({ modkey }, "BracketLeft", oxwm.set_master_factor(-5)) -- Decrease master area
90
oxwm.key.bind({ modkey }, "BracketRight", oxwm.set_master_factor(5)) -- Increase master area
91
oxwm.key.bind({ modkey }, "I", oxwm.inc_num_master(1))               -- More master windows
92
oxwm.key.bind({ modkey }, "P", oxwm.inc_num_master(-1))              -- Fewer master windows
93
94
-- Multi-monitor controls (dwm-style)
95
oxwm.key.bind({ modkey }, "Comma", oxwm.monitor.focus(-1))        -- Focus previous monitor
96
oxwm.key.bind({ modkey }, "Period", oxwm.monitor.focus(1))        -- Focus next monitor
97
oxwm.key.bind({ modkey, "Shift" }, "Comma", oxwm.monitor.tag(-1)) -- Send window to previous monitor
98
oxwm.key.bind({ modkey, "Shift" }, "Period", oxwm.monitor.tag(1)) -- Send window to next monitor
99
100
oxwm.key.bind({ modkey, "Shift" }, "Q", oxwm.quit())
101
oxwm.key.bind({ modkey, "Shift" }, "R", oxwm.restart())
102
103
oxwm.key.bind({ modkey }, "J", oxwm.client.focus_stack(1))
104
oxwm.key.bind({ modkey }, "K", oxwm.client.focus_stack(-1))
105
106
oxwm.key.bind({ modkey, "Shift" }, "J", oxwm.client.move_stack(1))
107
oxwm.key.bind({ modkey, "Shift" }, "K", oxwm.client.move_stack(-1))
108
109
-- View tag (switch workspace)
110
oxwm.key.bind({ modkey }, "1", oxwm.tag.view(0))
111
oxwm.key.bind({ modkey }, "2", oxwm.tag.view(1))
112
oxwm.key.bind({ modkey }, "3", oxwm.tag.view(2))
113
oxwm.key.bind({ modkey }, "4", oxwm.tag.view(3))
114
oxwm.key.bind({ modkey }, "5", oxwm.tag.view(4))
115
oxwm.key.bind({ modkey }, "6", oxwm.tag.view(5))
116
oxwm.key.bind({ modkey }, "7", oxwm.tag.view(6))
117
oxwm.key.bind({ modkey }, "8", oxwm.tag.view(7))
118
oxwm.key.bind({ modkey }, "9", oxwm.tag.view(8))
119
120
-- Move window to tag
121
oxwm.key.bind({ modkey, "Shift" }, "1", oxwm.tag.move_to(0))
122
oxwm.key.bind({ modkey, "Shift" }, "2", oxwm.tag.move_to(1))
123
oxwm.key.bind({ modkey, "Shift" }, "3", oxwm.tag.move_to(2))
124
oxwm.key.bind({ modkey, "Shift" }, "4", oxwm.tag.move_to(3))
125
oxwm.key.bind({ modkey, "Shift" }, "5", oxwm.tag.move_to(4))
126
oxwm.key.bind({ modkey, "Shift" }, "6", oxwm.tag.move_to(5))
127
oxwm.key.bind({ modkey, "Shift" }, "7", oxwm.tag.move_to(6))
128
oxwm.key.bind({ modkey, "Shift" }, "8", oxwm.tag.move_to(7))
129
oxwm.key.bind({ modkey, "Shift" }, "9", oxwm.tag.move_to(8))
130
131
-- Toggle view (view multiple tags at once) - dwm-style multi-tag viewing
132
-- Example: Mod+Ctrl+2 while on tag 1 will show BOTH tags 1 and 2
133
oxwm.key.bind({ modkey, "Control" }, "1", oxwm.tag.toggleview(0))
134
oxwm.key.bind({ modkey, "Control" }, "2", oxwm.tag.toggleview(1))
135
oxwm.key.bind({ modkey, "Control" }, "3", oxwm.tag.toggleview(2))
136
oxwm.key.bind({ modkey, "Control" }, "4", oxwm.tag.toggleview(3))
137
oxwm.key.bind({ modkey, "Control" }, "5", oxwm.tag.toggleview(4))
138
oxwm.key.bind({ modkey, "Control" }, "6", oxwm.tag.toggleview(5))
139
oxwm.key.bind({ modkey, "Control" }, "7", oxwm.tag.toggleview(6))
140
oxwm.key.bind({ modkey, "Control" }, "8", oxwm.tag.toggleview(7))
141
oxwm.key.bind({ modkey, "Control" }, "9", oxwm.tag.toggleview(8))
142
143
-- Toggle tag (window on multiple tags) - dwm-style sticky windows
144
-- Example: Mod+Ctrl+Shift+2 puts focused window on BOTH current tag and tag 2
145
oxwm.key.bind({ modkey, "Control", "Shift" }, "1", oxwm.tag.toggletag(0))
146
oxwm.key.bind({ modkey, "Control", "Shift" }, "2", oxwm.tag.toggletag(1))
147
oxwm.key.bind({ modkey, "Control", "Shift" }, "3", oxwm.tag.toggletag(2))
148
oxwm.key.bind({ modkey, "Control", "Shift" }, "4", oxwm.tag.toggletag(3))
149
oxwm.key.bind({ modkey, "Control", "Shift" }, "5", oxwm.tag.toggletag(4))
150
oxwm.key.bind({ modkey, "Control", "Shift" }, "6", oxwm.tag.toggletag(5))
151
oxwm.key.bind({ modkey, "Control", "Shift" }, "7", oxwm.tag.toggletag(6))
152
oxwm.key.bind({ modkey, "Control", "Shift" }, "8", oxwm.tag.toggletag(7))
153
oxwm.key.bind({ modkey, "Control", "Shift" }, "9", oxwm.tag.toggletag(8))
154
155
oxwm.key.bind({ modkey }, "Tab", oxwm.tag.view_next())
156
oxwm.key.bind({ modkey, "Shift" }, "Tab", oxwm.tag.view_previous())
157
158
oxwm.key.bind({ modkey, "Control" }, "Tab", oxwm.tag.view_next_nonempty())
159
oxwm.key.bind({ modkey, "Control", "Shift" }, "Tab", oxwm.tag.view_previous_nonempty())
160
161
oxwm.bar.set_blocks({
162
163
    oxwm.bar.block.battery({
164
        fmt_charging = "⚡ Bat: {}%",
165
        fmt_discharging = "- Bat: {}%",
166
        fmt_full = "✓ Bat: {}%",
167
        interval = 30,
168
        color = colors.green,
169
        underline = true,
170
        battery_name = "BAT1"
171
    }),
172
    -- oxwm.bar.block.battery({
173
    --     charging = "󰂄 Bat: {}%",
174
    --     discharging = "󰁹 Bat: {}%",
175
    --     full = "󰁹 Bat: {}%",
176
    --     format = "",
177
    --     interval = 30,
178
    --     color = colors.green,
179
    --     underline = true
180
    -- }),
181
    oxwm.bar.block.static({
182
        text = "│",
183
        format = "",
184
        interval = 999999999,
185
        color = colors.lavender,
186
        underline = false
187
    }),
188
    oxwm.bar.block.ram({
189
        format = "  {used}/{total} GB",
190
        interval = 5,
191
        color = colors.light_blue,
192
        underline = true
193
    }),
194
    oxwm.bar.block.static({
195
        text = "│",
196
        format = "",
197
        interval = 999999999,
198
        color = colors.lavender,
199
        underline = false
200
    }),
201
    oxwm.bar.block.shell({
202
        command = "uname -r",
203
        format = " {}",
204
        interval = 999999999,
205
        color = colors.red,
206
        underline = true
207
    }),
208
    oxwm.bar.block.static({
209
        text = "│",
210
        format = "",
211
        interval = 999999999,
212
        color = colors.lavender,
213
        underline = false
214
    }),
215
    oxwm.bar.block.datetime({
216
        format = "󰸘 {}",
217
        interval = 1,
218
        color = colors.cyan,
219
        underline = true,
220
        date_format = "%a, %b %d - %-I:%M %P"
221
    })
222
})