| 1 | ---@meta |
| 2 | ------------------------------------------------------------------------------- |
| 3 | -- OXWM Configuration File |
| 4 | ------------------------------------------------------------------------------- |
| 5 | -- This is the default configuration for OXWM, a dynamic window manager. |
| 6 | -- Edit this file and reload with Mod+Shift+R (no compilation needed) |
| 7 | -- |
| 8 | -- For more information about configuring OXWM, see the documentation. |
| 9 | -- The Lua Language Server provides autocomplete and type checking. |
| 10 | ------------------------------------------------------------------------------- |
| 11 | |
| 12 | ---Load type definitions for LSP |
| 13 | ---@module 'oxwm' |
| 14 | |
| 15 | ------------------------------------------------------------------------------- |
| 16 | -- Variables |
| 17 | ------------------------------------------------------------------------------- |
| 18 | -- Define your variables here for easy customization throughout the config. |
| 19 | -- This makes it simple to change keybindings, colors, and settings in one place. |
| 20 | |
| 21 | -- Modifier key: "Mod4" is the Super/Windows key, "Mod1" is Alt |
| 22 | local modkey = "Mod4" |
| 23 | |
| 24 | -- Terminal emulator command (defaults to alacritty) |
| 25 | local terminal = "st" |
| 26 | |
| 27 | local scripts = "/home/stevedylandev/dotfiles/scripts" |
| 28 | local rofi_scripts = "/home/stevedylandev/dotfiles/rofi/scripts" |
| 29 | |
| 30 | -- Spawn one of those scripts. They resolve their own siblings relative to |
| 31 | -- themselves, so an absolute path is all they need — PATH is not involved. |
| 32 | -- Extra arguments are passed straight through: script("txtcliphist.sh", "sel"). |
| 33 | local function script(name, ...) |
| 34 | local cmd = { scripts .. "/" .. name } |
| 35 | for _, arg in ipairs({ ... }) do |
| 36 | cmd[#cmd + 1] = arg |
| 37 | end |
| 38 | return oxwm.spawn(cmd) |
| 39 | end |
| 40 | |
| 41 | -- Same idea for the rofi menus in rofi/scripts. They are launchers, not |
| 42 | -- daemons: each one opens rofi, does the thing that was picked, and exits. |
| 43 | local function rofi_script(name, ...) |
| 44 | local cmd = { rofi_scripts .. "/" .. name } |
| 45 | for _, arg in ipairs({ ... }) do |
| 46 | cmd[#cmd + 1] = arg |
| 47 | end |
| 48 | return oxwm.spawn(cmd) |
| 49 | end |
| 50 | |
| 51 | -- Rofi's own modes need no script at all: drun reads .desktop files, window |
| 52 | -- lists what is already open, filebrowser walks directories, ssh reads |
| 53 | -- ~/.ssh/config. Behaviour for all of them lives in rofi/config.rasi. |
| 54 | local function rofi_mode(mode) |
| 55 | return oxwm.spawn({ "rofi", "-show", mode }) |
| 56 | end |
| 57 | |
| 58 | -- Color palette - customize these to match your theme |
| 59 | -- Alternatively you can import other files in here, such as |
| 60 | -- local colors = require("colors.lua") and make colors.lua a file |
| 61 | -- in the ~/.config/oxwm directory |
| 62 | -- Darkmatter (matches wezterm/ghostty theme) |
| 63 | local colors = { |
| 64 | fg = "#ffffff", |
| 65 | red = "#e78a53", |
| 66 | bg = "#121113", |
| 67 | cyan = "#aaaaaa", |
| 68 | green = "#fbcb97", |
| 69 | lavender = "#999999", |
| 70 | light_blue = "#888888", |
| 71 | grey = "#333333", |
| 72 | blue = "#5f8787", |
| 73 | purple = "#c1c1c1", |
| 74 | } |
| 75 | |
| 76 | -- Workspace tags - can be numbers, names, or icons (requires a Nerd Font) |
| 77 | -- The number of tags is deduced from the size of this table (up to a max of 12). |
| 78 | -- The default is 9. To use more, add entries here and uncomment the matching |
| 79 | -- keybinds for tags 10-12 further down in this file. |
| 80 | local tags = { "1", "2", "3", "4", "5", "6", "7", "8", "9" } |
| 81 | -- local tags = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" } -- Example of 12 tags |
| 82 | -- local tags = { "", "", "", "", "", "", "", "", "" } -- Example of nerd font icon tags |
| 83 | |
| 84 | -- Font for the status bar (use "fc-list" to see available fonts) |
| 85 | local bar_font = "BerkeleyMono Nerd Font:style=Bold:size=11" |
| 86 | |
| 87 | -- Define your blocks |
| 88 | -- Similar to widgets in qtile, or dwmblocks |
| 89 | local blocks = { |
| 90 | oxwm.bar.block.ram({ |
| 91 | format = "Ram: {used}/{total} GB", |
| 92 | interval = 5, |
| 93 | color = colors.blue, |
| 94 | underline = true, |
| 95 | }), |
| 96 | oxwm.bar.block.static({ |
| 97 | text = "│", |
| 98 | interval = 999999999, |
| 99 | color = colors.green, |
| 100 | underline = false, |
| 101 | }), |
| 102 | -- SSID, "off" when the link is down, "none" without a wireless card. |
| 103 | -- wifi-status supplies its own Nerd Font icon, which tracks signal |
| 104 | -- strength while connected, so the format is just its output. |
| 105 | -- Click opens the dmenu network menu (connect/disconnect wifi and eth0). |
| 106 | oxwm.bar.block.shell({ |
| 107 | format = "{}", |
| 108 | command = scripts .. "/wifi-status", |
| 109 | interval = 10, |
| 110 | color = colors.lavender, |
| 111 | underline = true, |
| 112 | click = { command = rofi_scripts .. "/rofi-wifi" }, |
| 113 | }), |
| 114 | oxwm.bar.block.static({ |
| 115 | text = "│", |
| 116 | interval = 999999999, |
| 117 | color = colors.green, |
| 118 | underline = false, |
| 119 | }), |
| 120 | -- Volume percentage of the default sink; click toggles mute. |
| 121 | -- vol-status supplies its own Nerd Font icon for the level (or mute). |
| 122 | -- The vol-* keybinds also fire a notification, so this can lag a second. |
| 123 | oxwm.bar.block.shell({ |
| 124 | format = "{}", |
| 125 | command = scripts .. "/vol-status", |
| 126 | interval = 2, |
| 127 | color = colors.purple, |
| 128 | underline = true, |
| 129 | click = { command = scripts .. "/vol-mute" }, |
| 130 | }), |
| 131 | oxwm.bar.block.static({ |
| 132 | text = "│", |
| 133 | interval = 999999999, |
| 134 | color = colors.green, |
| 135 | underline = false, |
| 136 | }), |
| 137 | oxwm.bar.block.shell({ |
| 138 | format = "{}", |
| 139 | command = scripts .. "/weather.sh -h", |
| 140 | interval = 999999999, |
| 141 | color = colors.red, |
| 142 | underline = true, |
| 143 | }), |
| 144 | oxwm.bar.block.static({ |
| 145 | text = "│", |
| 146 | interval = 999999999, |
| 147 | color = colors.green, |
| 148 | underline = false, |
| 149 | }), |
| 150 | oxwm.bar.block.datetime({ |
| 151 | format = "{}", |
| 152 | date_format = "%a, %b %d - %-I:%M %P", |
| 153 | interval = 1, |
| 154 | color = colors.cyan, |
| 155 | underline = true, |
| 156 | }), |
| 157 | -- Uncomment to add battery status (useful for laptops) |
| 158 | oxwm.bar.block.battery({ |
| 159 | format = "Bat: {}%", |
| 160 | charging = "⚡ Bat: {}%", |
| 161 | discharging = "- Bat: {}%", |
| 162 | full = "✓ Bat: {}%", |
| 163 | interval = 30, |
| 164 | color = colors.green, |
| 165 | underline = true, |
| 166 | -- click: run a command when the block is clicked |
| 167 | -- click = "alacritty -e btop", |
| 168 | -- click = { command = "bluetui", floating = true }, |
| 169 | }), |
| 170 | }; |
| 171 | |
| 172 | ------------------------------------------------------------------------------- |
| 173 | -- Basic Settings |
| 174 | ------------------------------------------------------------------------------- |
| 175 | oxwm.set_terminal(terminal) |
| 176 | oxwm.set_modkey(modkey) -- This is for Mod + mouse binds, such as drag/resize |
| 177 | oxwm.set_tags(tags) |
| 178 | |
| 179 | -- Set default layout (tiling by default) |
| 180 | oxwm.set_layout("dwindle") |
| 181 | |
| 182 | ------------------------------------------------------------------------------- |
| 183 | -- Layouts |
| 184 | ------------------------------------------------------------------------------- |
| 185 | -- Set custom symbols for layouts (displayed in the status bar) |
| 186 | -- Available layouts: "tiling", "normie" (floating), "grid", "monocle", "tabbed", "dwindle" |
| 187 | oxwm.set_layout_symbol("normie", "[F]") |
| 188 | oxwm.set_layout_symbol("tiling", "[T]") |
| 189 | oxwm.set_layout_symbol("tabbed", "[=]") |
| 190 | oxwm.set_layout_symbol("dwindle", "[\\]") |
| 191 | |
| 192 | -- Example: bind dwindle (fibonacci) layout |
| 193 | oxwm.key.bind({ modkey }, "R", oxwm.layout.set("dwindle")) |
| 194 | |
| 195 | -- Set default layout of specific tag (tag_index, layout_name) |
| 196 | -- Unset value uses oxwm.set_layout value |
| 197 | -- oxwm.set_tag_layout(1, "grid") |
| 198 | |
| 199 | ------------------------------------------------------------------------------- |
| 200 | -- Appearance |
| 201 | ------------------------------------------------------------------------------- |
| 202 | -- Border configuration |
| 203 | |
| 204 | -- Width in pixels |
| 205 | oxwm.border.set_width(2) |
| 206 | -- Color of focused window border |
| 207 | oxwm.border.set_focused_color(colors.blue) |
| 208 | -- Color of unfocused window borders |
| 209 | oxwm.border.set_unfocused_color(colors.bg) |
| 210 | |
| 211 | -- Where floating windows spawn: "top-left", "top-center", "top-right", |
| 212 | -- "center-left", "center", "center-right", "bottom-left", "bottom-center", "bottom-right" |
| 213 | oxwm.set_floating_position("center") |
| 214 | |
| 215 | -- Smart Enabled = No border if 1 window |
| 216 | oxwm.gaps.set_smart(false) |
| 217 | -- Inner gaps (horizontal, vertical) in pixels |
| 218 | oxwm.gaps.set_inner(12, 12) |
| 219 | -- Outer gaps (horizontal, vertical) in pixels |
| 220 | oxwm.gaps.set_outer(12, 12) |
| 221 | |
| 222 | ------------------------------------------------------------------------------- |
| 223 | -- Window Rules |
| 224 | ------------------------------------------------------------------------------- |
| 225 | -- Rules allow you to automatically configure windows based on their properties |
| 226 | -- You can match windows by class, instance, title, or role |
| 227 | -- Available properties: floating, tag, fullscreen, etc. |
| 228 | -- |
| 229 | -- Common use cases: |
| 230 | -- - Force floating for certain applications (dialogs, utilities) |
| 231 | -- - Send specific applications to specific workspaces |
| 232 | -- - Configure window behavior based on title or class |
| 233 | |
| 234 | -- Examples (uncomment to use): |
| 235 | oxwm.rule.add({ instance = "chromium", floating = true, tag = 2 }) |
| 236 | oxwm.rule.add({ instance = "helium.AppImage", floating = true, tag = 2 }) |
| 237 | oxwm.rule.add({ instance = "gimp", floating = true}) |
| 238 | -- oxwm.rule.add({ class = "Alacritty", tag = 9, focus = true }) |
| 239 | -- oxwm.rule.add({ class = "firefox", title = "Library", floating = true }) |
| 240 | -- oxwm.rule.add({ class = "firefox", tag = 2 }) |
| 241 | -- oxwm.rule.add({ instance = "mpv", floating = true }) |
| 242 | |
| 243 | -- To find window properties, use xprop and click on the window |
| 244 | -- WM_CLASS(STRING) shows both instance and class (instance, class) |
| 245 | |
| 246 | ------------------------------------------------------------------------------- |
| 247 | -- Status Bar Configuration |
| 248 | ------------------------------------------------------------------------------- |
| 249 | -- Font configuration |
| 250 | oxwm.bar.set_font(bar_font) |
| 251 | |
| 252 | -- Position configuration (top/bottom, top is default) |
| 253 | -- oxwm.bar.set_position("bottom") |
| 254 | |
| 255 | -- Set your blocks here (defined above) |
| 256 | oxwm.bar.set_blocks(blocks) |
| 257 | |
| 258 | -- Bar color schemes (for workspace tag display) |
| 259 | -- Parameters: foreground, background, border |
| 260 | |
| 261 | -- Unoccupied tags |
| 262 | oxwm.bar.set_scheme_normal(colors.fg, colors.bg, colors.grey) |
| 263 | -- Occupied tags |
| 264 | oxwm.bar.set_scheme_occupied(colors.cyan, colors.bg, colors.cyan) |
| 265 | -- Currently selected tag |
| 266 | oxwm.bar.set_scheme_selected(colors.cyan, colors.bg, colors.purple) |
| 267 | -- Urgent tags (windows requesting attention) |
| 268 | oxwm.bar.set_scheme_urgent(colors.red, colors.bg, colors.red) |
| 269 | |
| 270 | -- Hide tags that have no windows and are not selected |
| 271 | -- oxwm.bar.set_hide_vacant_tags(true) |
| 272 | |
| 273 | ------------------------------------------------------------------------------- |
| 274 | -- Keybindings |
| 275 | ------------------------------------------------------------------------------- |
| 276 | -- Keybindings are defined using oxwm.key.bind(modifiers, key, action) |
| 277 | -- Modifiers: {"Mod4"}, {"Mod1"}, {"Shift"}, {"Control"}, or combinations like {"Mod4", "Shift"} |
| 278 | -- Keys: Use uppercase for letters (e.g., "Return", "H", "J", "K", "L") |
| 279 | -- Actions: Functions that return actions (e.g., oxwm.spawn(), oxwm.client.kill()) |
| 280 | -- |
| 281 | -- A list of available keysyms can be found in the X11 keysym definitions. |
| 282 | -- Common keys: Return, Space, Tab, Escape, Backspace, Delete, Left, Right, Up, Down |
| 283 | |
| 284 | -- Basic window management |
| 285 | |
| 286 | oxwm.key.bind({ modkey }, "Return", oxwm.spawn_terminal()) |
| 287 | -- Application launcher (.desktop entries, with icons and search) |
| 288 | oxwm.key.bind({ modkey }, "D", rofi_mode("drun")) |
| 289 | -- Bare executables on PATH, for the things that ship no .desktop file |
| 290 | oxwm.key.bind({ modkey, "Shift" }, "D", rofi_mode("run")) |
| 291 | -- Jump to a window that is already open, wherever it is tagged |
| 292 | oxwm.key.bind({ modkey }, "Tab", rofi_mode("window")) |
| 293 | -- Browse the filesystem and open a file with its default application |
| 294 | oxwm.key.bind({ modkey }, "E", rofi_mode("filebrowser")) |
| 295 | -- Save screenshot to ~/Downloads |
| 296 | oxwm.key.bind({ modkey }, "S", oxwm.spawn({ "sh", "-c", "maim -s ~/Downloads/screenshot-$(date +%Y%m%d-%H%M%S).png" })) |
| 297 | oxwm.key.bind({ modkey }, "O", oxwm.spawn({ "sh", "-c", "helium.AppImage --no-sandbox" })) |
| 298 | oxwm.key.bind({ modkey }, "W", oxwm.client.kill()) |
| 299 | |
| 300 | -- Volume control (media keys, with Mod+Shift fallbacks for boards without them) |
| 301 | oxwm.key.bind({}, "XF86AudioRaiseVolume", script("vol-up")) |
| 302 | oxwm.key.bind({}, "XF86AudioLowerVolume", script("vol-down")) |
| 303 | oxwm.key.bind({}, "XF86AudioMute", script("vol-mute")) |
| 304 | oxwm.key.bind({ modkey, "Shift" }, "Equal", script("vol-up")) |
| 305 | oxwm.key.bind({ modkey, "Shift" }, "Minus", script("vol-down")) |
| 306 | oxwm.key.bind({ modkey, "Shift" }, "M", script("vol-mute")) |
| 307 | -- Audio menu (volume, mute, mic, pick an output) - rofi, no terminal needed |
| 308 | oxwm.key.bind({ modkey, "Shift" }, "U", rofi_script("rofi-audio")) |
| 309 | |
| 310 | -- WiFi menu: scan, connect (passphrase prompt is hidden), disconnect |
| 311 | oxwm.key.bind({ modkey, "Shift" }, "N", rofi_script("rofi-wifi")) |
| 312 | |
| 313 | -- Clipboard history. rofi-clipd (autostarted at the bottom of this file) |
| 314 | -- records everything that passes through the CLIPBOARD selection into |
| 315 | -- ~/.cache/rofi-clipboard; Mod+V picks an earlier entry back out. Shift+Del |
| 316 | -- inside the menu forgets an entry. |
| 317 | oxwm.key.bind({ modkey }, "V", rofi_script("rofi-clip")) |
| 318 | |
| 319 | -- Emoji and kaomoji picker; the pick lands in the clipboard, ready to paste |
| 320 | oxwm.key.bind({ modkey, "Shift" }, "E", rofi_script("rofi-emoji")) |
| 321 | -- Calculator: type an expression, Enter evaluates, Enter again copies |
| 322 | oxwm.key.bind({ modkey, "Shift" }, "C", rofi_script("rofi-calc")) |
| 323 | -- Search the web: pick an engine, type the query |
| 324 | oxwm.key.bind({ modkey }, "Slash", rofi_script("rofi-websearch")) |
| 325 | -- Screenshot menu (Mod+S still takes a plain region shot without asking) |
| 326 | oxwm.key.bind({ modkey, "Shift" }, "S", rofi_script("rofi-screenshot")) |
| 327 | -- Lock / suspend / reboot / shutdown / log out, each with a confirmation |
| 328 | oxwm.key.bind({ modkey, "Shift" }, "X", rofi_script("rofi-power")) |
| 329 | |
| 330 | -- Keybind overlay - Shows important keybindings on screen |
| 331 | oxwm.key.bind({ modkey, "Shift" }, "Slash", oxwm.show_keybinds()) |
| 332 | |
| 333 | -- Window state toggles |
| 334 | --oxwm.key.bind({ modkey, "Shift" }, "A", oxwm.client.toggle_fullscreen()) |
| 335 | oxwm.key.bind({ modkey, "Shift" }, "F", oxwm.client.toggle_floating()) |
| 336 | |
| 337 | -- Layout management |
| 338 | oxwm.key.bind({ modkey }, "F", oxwm.layout.set("normie")) |
| 339 | --oxwm.key.bind({ modkey }, "C", oxwm.layout.set("tiling")) |
| 340 | -- Cycle through layouts |
| 341 | oxwm.key.bind({ modkey }, "N", oxwm.layout.cycle()) |
| 342 | |
| 343 | -- Master area controls (tiling layout) |
| 344 | |
| 345 | -- Decrease/Increase master area width |
| 346 | oxwm.key.bind({ modkey }, "H", oxwm.set_master_factor(-5)) |
| 347 | oxwm.key.bind({ modkey }, "L", oxwm.set_master_factor(5)) |
| 348 | -- Enable tiled resize mode: Mod+RMB drag adjusts mfact instead of floating |
| 349 | -- oxwm.tiled_resize_mode(true) |
| 350 | -- Increment/Decrement number of master windows |
| 351 | --oxwm.key.bind({ modkey }, "I", oxwm.inc_num_master(1)) |
| 352 | --oxwm.key.bind({ modkey }, "P", oxwm.inc_num_master(-1)) |
| 353 | |
| 354 | -- Gaps toggle |
| 355 | oxwm.key.bind({ modkey }, "A", oxwm.toggle_gaps()) |
| 356 | -- Bar toggle |
| 357 | oxwm.key.bind({ modkey }, "B", oxwm.toggle_bar()) |
| 358 | |
| 359 | -- Window manager controls |
| 360 | oxwm.key.bind({ modkey, "Shift" }, "Q", oxwm.quit()) |
| 361 | oxwm.key.bind({ modkey, "Shift" }, "R", oxwm.restart()) |
| 362 | |
| 363 | -- Focus movement [1 for up in the stack, -1 for down] |
| 364 | oxwm.key.bind({ modkey }, "J", oxwm.client.focus_stack(1)) |
| 365 | oxwm.key.bind({ modkey }, "K", oxwm.client.focus_stack(-1)) |
| 366 | |
| 367 | -- Window movement (swap position in stack) |
| 368 | oxwm.key.bind({ modkey, "Shift" }, "J", oxwm.client.move_stack(1)) |
| 369 | oxwm.key.bind({ modkey, "Shift" }, "K", oxwm.client.move_stack(-1)) |
| 370 | |
| 371 | -- Multi-monitor support |
| 372 | |
| 373 | -- Focus next/previous Monitors |
| 374 | oxwm.key.bind({ modkey }, "Comma", oxwm.monitor.focus(-1)) |
| 375 | oxwm.key.bind({ modkey }, "Period", oxwm.monitor.focus(1)) |
| 376 | -- Move window to next/previous Monitors |
| 377 | oxwm.key.bind({ modkey, "Shift" }, "Comma", oxwm.monitor.tag(-1)) |
| 378 | oxwm.key.bind({ modkey, "Shift" }, "Period", oxwm.monitor.tag(1)) |
| 379 | |
| 380 | -- Warp the cursor to the focused monitor when switching monitors |
| 381 | -- oxwm.monitor.warp_cursor(true) |
| 382 | -- Warp the cursor along when sending a window to another monitor |
| 383 | -- oxwm.monitor.warp_cursor_on_send(true) |
| 384 | |
| 385 | -- Workspace (tag) navigation |
| 386 | -- Switch to workspace N (tags are 0-indexed, so tag "1" is index 0) |
| 387 | oxwm.key.bind({ modkey }, "1", oxwm.tag.view(0)) |
| 388 | oxwm.key.bind({ modkey }, "2", oxwm.tag.view(1)) |
| 389 | oxwm.key.bind({ modkey }, "3", oxwm.tag.view(2)) |
| 390 | oxwm.key.bind({ modkey }, "4", oxwm.tag.view(3)) |
| 391 | oxwm.key.bind({ modkey }, "5", oxwm.tag.view(4)) |
| 392 | oxwm.key.bind({ modkey }, "6", oxwm.tag.view(5)) |
| 393 | oxwm.key.bind({ modkey }, "7", oxwm.tag.view(6)) |
| 394 | oxwm.key.bind({ modkey }, "8", oxwm.tag.view(7)) |
| 395 | oxwm.key.bind({ modkey }, "9", oxwm.tag.view(8)) |
| 396 | -- Tags 10-12 (opt-in): set 12 tags above, then pick keys you like and uncomment. |
| 397 | -- oxwm.key.bind({ modkey }, "0", oxwm.tag.view(9)) |
| 398 | -- oxwm.key.bind({ modkey }, "minus", oxwm.tag.view(10)) |
| 399 | -- oxwm.key.bind({ modkey }, "equal", oxwm.tag.view(11)) |
| 400 | |
| 401 | -- Move focused window to workspace N |
| 402 | oxwm.key.bind({ modkey, "Shift" }, "1", oxwm.tag.move_to(0)) |
| 403 | oxwm.key.bind({ modkey, "Shift" }, "2", oxwm.tag.move_to(1)) |
| 404 | oxwm.key.bind({ modkey, "Shift" }, "3", oxwm.tag.move_to(2)) |
| 405 | oxwm.key.bind({ modkey, "Shift" }, "4", oxwm.tag.move_to(3)) |
| 406 | oxwm.key.bind({ modkey, "Shift" }, "5", oxwm.tag.move_to(4)) |
| 407 | oxwm.key.bind({ modkey, "Shift" }, "6", oxwm.tag.move_to(5)) |
| 408 | oxwm.key.bind({ modkey, "Shift" }, "7", oxwm.tag.move_to(6)) |
| 409 | oxwm.key.bind({ modkey, "Shift" }, "8", oxwm.tag.move_to(7)) |
| 410 | oxwm.key.bind({ modkey, "Shift" }, "9", oxwm.tag.move_to(8)) |
| 411 | -- oxwm.key.bind({ modkey, "Shift" }, "0", oxwm.tag.move_to(9)) |
| 412 | -- oxwm.key.bind({ modkey, "Shift" }, "minus", oxwm.tag.move_to(10)) |
| 413 | -- oxwm.key.bind({ modkey, "Shift" }, "equal", oxwm.tag.move_to(11)) |
| 414 | |
| 415 | -- Combo view (view multiple tags at once) {argos_nothing} |
| 416 | -- Example: Mod+Ctrl+2 while on tag 1 will show BOTH tags 1 and 2 |
| 417 | oxwm.key.bind({ modkey, "Control" }, "1", oxwm.tag.toggleview(0)) |
| 418 | oxwm.key.bind({ modkey, "Control" }, "2", oxwm.tag.toggleview(1)) |
| 419 | oxwm.key.bind({ modkey, "Control" }, "3", oxwm.tag.toggleview(2)) |
| 420 | oxwm.key.bind({ modkey, "Control" }, "4", oxwm.tag.toggleview(3)) |
| 421 | oxwm.key.bind({ modkey, "Control" }, "5", oxwm.tag.toggleview(4)) |
| 422 | oxwm.key.bind({ modkey, "Control" }, "6", oxwm.tag.toggleview(5)) |
| 423 | oxwm.key.bind({ modkey, "Control" }, "7", oxwm.tag.toggleview(6)) |
| 424 | oxwm.key.bind({ modkey, "Control" }, "8", oxwm.tag.toggleview(7)) |
| 425 | oxwm.key.bind({ modkey, "Control" }, "9", oxwm.tag.toggleview(8)) |
| 426 | -- oxwm.key.bind({ modkey, "Control" }, "0", oxwm.tag.toggleview(9)) |
| 427 | -- oxwm.key.bind({ modkey, "Control" }, "minus", oxwm.tag.toggleview(10)) |
| 428 | -- oxwm.key.bind({ modkey, "Control" }, "equal", oxwm.tag.toggleview(11)) |
| 429 | |
| 430 | -- Multi tag (window on multiple tags) |
| 431 | -- Example: Mod+Ctrl+Shift+2 puts focused window on BOTH current tag and tag 2 |
| 432 | oxwm.key.bind({ modkey, "Control", "Shift" }, "1", oxwm.tag.toggletag(0)) |
| 433 | oxwm.key.bind({ modkey, "Control", "Shift" }, "2", oxwm.tag.toggletag(1)) |
| 434 | oxwm.key.bind({ modkey, "Control", "Shift" }, "3", oxwm.tag.toggletag(2)) |
| 435 | oxwm.key.bind({ modkey, "Control", "Shift" }, "4", oxwm.tag.toggletag(3)) |
| 436 | oxwm.key.bind({ modkey, "Control", "Shift" }, "5", oxwm.tag.toggletag(4)) |
| 437 | oxwm.key.bind({ modkey, "Control", "Shift" }, "6", oxwm.tag.toggletag(5)) |
| 438 | oxwm.key.bind({ modkey, "Control", "Shift" }, "7", oxwm.tag.toggletag(6)) |
| 439 | oxwm.key.bind({ modkey, "Control", "Shift" }, "8", oxwm.tag.toggletag(7)) |
| 440 | oxwm.key.bind({ modkey, "Control", "Shift" }, "9", oxwm.tag.toggletag(8)) |
| 441 | -- oxwm.key.bind({ modkey, "Control", "Shift" }, "0", oxwm.tag.toggletag(9)) |
| 442 | -- oxwm.key.bind({ modkey, "Control", "Shift" }, "minus", oxwm.tag.toggletag(10)) |
| 443 | -- oxwm.key.bind({ modkey, "Control", "Shift" }, "equal", oxwm.tag.toggletag(11)) |
| 444 | |
| 445 | ------------------------------------------------------------------------------- |
| 446 | -- Advanced: Keychords |
| 447 | ------------------------------------------------------------------------------- |
| 448 | -- Keychords allow you to bind multiple-key sequences (like Emacs or Vim) |
| 449 | -- Format: {{modifiers}, key1}, {{modifiers}, key2}, ... |
| 450 | -- Example: Press Mod4+Space, then release and press T to spawn a terminal |
| 451 | oxwm.key.chord({ |
| 452 | { { modkey }, "Space" }, |
| 453 | { {}, "T" } |
| 454 | }, oxwm.spawn_terminal()) |
| 455 | |
| 456 | ------------------------------------------------------------------------------- |
| 457 | -- Autostart |
| 458 | ------------------------------------------------------------------------------- |
| 459 | -- Commands to run once when OXWM starts |
| 460 | -- Uncomment and modify these examples, or add your own |
| 461 | |
| 462 | -- Clipboard history daemon. Without it Mod+V has nothing to show: an X |
| 463 | -- selection lives in the process that owns it, so a copied string dies with |
| 464 | -- the window it was copied from unless something keeps its own copy. |
| 465 | oxwm.autostart(rofi_scripts .. "/rofi-clipd") |
| 466 | |
| 467 | -- oxwm.autostart("picom") |
| 468 | -- oxwm.autostart("feh --bg-scale ~/wallpaper.jpg") |
| 469 | -- oxwm.autostart("dunst") |
| 470 | -- oxwm.autostart("nm-applet") |