MonoWM
Introduction
This environment is built around the mono window manager. This is a very simple window manager that only allows you to have one window occupying your entire screen at a time. Kind of like a mobile OS. Therefore you are going to have to rely on keybinds to quickly navigate to where you need to go. You probably noticed you can only have 9 windows open at a time (Not really, you can set in the monowm config to have up to 128, but I don't recommend it). Instead, you should rely on the terminal and tmux to get a lot of work done in just one terminal. I've included a very minimal tmux setup, which you can activate by entering tm in the terminal.
Default Keybinds
Window Keybinds
| Keybinding | Action |
|---|---|
super+tab |
Cycle windows (similar to macOS Cmd+Tab or Windows Alt+Tab) |
super+1-9 |
Go directly to an open window |
super+q |
Quit / close window |
Utility Keybinds
| Keybinding | Action |
|---|---|
Super+enter |
Open Terminal (kitty) |
Super+b |
Open Browser (chromium) |
Super+space |
Open Application Launcher (dmenu) |
Super+p |
Color Picker |
PrtSc |
Screenshot (Saves to ~/Pictures/ and to your clipboard) |
super+i |
View system information (time, battery, date) |
Configuration
You may configure monowm in ~/.config/monowm/.
Here's the default configuration found in config.conf to give you an idea on how to change things:
# Maximum number of windows that can be open at the same time (max 128)
max_windows = 9
# Internal Window Manager Keybindings
# Format: modifiers+keysym (modifiers can be: super, shift, control, alt)
bind_quit = super+q
bind_cycle = super+Tab
cycle_enabled = 0
bind_switch_window_mod = super
bind_reload = super+F4
bind_toggle_bar = super+F5
# Autostart Commands (run when monowm starts)
run = dunst
run = feh --bg-fill ~/.config/monos-themes/current/bg.png
run = ~/.config/monos-themes/current/alttab.sh
run = dbus-update-activation-environment --systemd --all
# Format: keybind = modifiers+keysym : command
keybind = super+Return : kitty
keybind = super+space : ~/.config/monos-themes/current/dmenu.sh
keybind = super+b : chromium
keybind = super+i : ~/.local/share/monos/bin/info-monos
keybind = super+p : ~/.local/share/monos/bin/colorpicker-monos
keybind = Print : ~/.local/share/monos/bin/screenshot-monos
keybind = XF86AudioRaiseVolume : ~/.local/bin/monowm-volume up
keybind = XF86AudioLowerVolume : ~/.local/bin/monowm-volume down
keybind = XF86AudioMute : ~/.local/bin/monowm-volume mute
keybind = XF86AudioMicMute : wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
keybind = XF86MonBrightnessUp : ~/.local/bin/monowm-brightness up
keybind = XF86MonBrightnessDown : ~/.local/bin/monowm-brightness down
Add a Custom Keybind
keybind = key : action
For custom scripts, it is recommended to use direct paths (Ex. ~/scripts/example-script).
Autostart Commands
To run applications or commands automatically when MonoWM starts, add run directives to ~/.config/monowm/config.conf:
# Format: run = command
run = dunst
run = feh --bg-fill ~/.config/monos-themes/current/bg.png
run = dbus-update-activation-environment --systemd --all
Complex Startup Scripts (autostart)
For more complex startup tasks — such as setting display resolution with xrandr, configuring power management with xset, or executing multi-step shell scripts — you can put them inside ~/.config/monowm/autostart. Make sure the file is executable (chmod +x ~/.config/monowm/autostart).
Example ~/.config/monowm/autostart:
#!/bin/bash
# Display & Idle Settings
xset s 300 300
xset +dpms
Bar Configuration
The status bar is configured separately in ~/.config/monowm/bar.conf. Below is the default bar.conf file:
# ==============================================================================
# Monowm Bar Configuration (bar.conf)
# ==============================================================================
# General Bar Settings
bar_enabled = 1
bar_height = 24
bar_font_name = JetBrainsMono Nerd Font
bar_font_size = 14
bar_update_interval = 5 # In seconds. Lower for worst performance but more responsive bar updates
bar_position = top # Options: top, bottom
# Bar Colors (Hex formats or '-' for default)
bar_color_active_fg = #ffffff
bar_color_active_bg = #555555
bar_color_inactive_fg = #aaaaaa
bar_color_inactive_bg = -
bar_color_bg = -
bar_color_fg = -
bar_color_time_fg = -
bar_color_volume_fg = -
bar_color_battery_fg = -
# Bar Module Positions ('l' = left, 'c' = center, 'r' = right)
bar_show_windows = 1
bar_windows_position = l
bar_show_time = 1
bar_time_position = r
bar_time_format = %I:%M %p
bar_show_battery = 1
bar_battery_position = r
bar_battery_path = /sys/class/power_supply/BAT0
bar_battery_icon_full =
bar_battery_icon_75 =
bar_battery_icon_50 =
bar_battery_icon_25 =
bar_battery_icon_empty =
bar_battery_icon_charging =
bar_show_volume = 0
bar_volume_position = r
bar_volume_cmd = wpctl get-volume @DEFAULT_AUDIO_SINK@ | awk '{print int($2 * 100)}'
bar_volume_mute_cmd = wpctl get-volume @DEFAULT_AUDIO_SINK@ | grep -q MUTED && echo "yes" || echo "no"
bar_volume_icon_high =
bar_volume_icon_med =
bar_volume_icon_low =
bar_volume_icon_mute =
# Recording Module Setup (Shows an indicator when active recording is detected)
bar_show_recording = 1
bar_recording_position = r
# Command that exits with 0 when recording, and non-zero when not recording
bar_recording_cmd = pgrep -x ffmpeg >/dev/null || pgrep -x obs >/dev/null || pgrep -x simplescreenrecorder >/dev/null || pgrep -x gpu-screen-recorder >/dev/null || pgrep -x wf-recorder >/dev/null
bar_recording_icon =
bar_color_recording_fg = #ff5555
# Default Application Icon
default_icon =
# Application Icon Mappings
# Format: icon = res_class : icon_string
icon = firefox :
icon = st :
icon = alacritty :
icon = kitty :
icon = chromium :
Key Bar Options
- General Options:
bar_enabled: Set to1to show the status bar, or0to hide it.bar_position: Set totoporbottom.bar_height: Bar height in pixels.bar_font_name&bar_font_size: Font name and font size used by the bar.bar_update_interval: Update frequency in seconds.- Colors:
- Specify hex color values (
#RRGGBB) or set to-to fall back to default window manager theme colors. - Active and inactive window item text/background colors (
bar_color_active_fg,bar_color_active_bg, etc.). - Individual module foreground colors (
bar_color_time_fg,bar_color_volume_fg,bar_color_battery_fg,bar_color_recording_fg). - Modules & Positions:
- Modules can be aligned to
l(left),c(center), orr(right). - Windows:
bar_show_windows(1/0) andbar_windows_position. - Time:
bar_show_time(1/0),bar_time_position, andbar_time_format(uses standardstrftimespecifiers such as%I:%M %p). - Battery:
bar_show_battery(1/0),bar_battery_position,bar_battery_path, and custom state icons. - Volume:
bar_show_volume(1/0),bar_volume_position, volume/mute checking commands (bar_volume_cmd,bar_volume_mute_cmd), and volume level icons. - Recording:
bar_show_recording(1/0), active recording check command (bar_recording_cmd), icon, and highlight color. - Application Icons:
default_icon: Icon used when a window's class has no explicit mapping.icon = res_class : icon_string: Map window resource classes (e.g.,kitty,chromium,firefox) to specific icon characters or glyphs.