otter-bar is the Otter Shell status bar. It anchors to the top or bottom of each output through zwlr_layer_shell_v1. Config and theme reload without a restart.
Features
- Workspace indicator and switcher (otter-tag, Mango/dwl IPC, ext-workspace)
- Active window title with icon
- Clock with timezone-aware formatting and date tooltip
- Battery via UPower (auto-hides when no battery)
- Brightness from
/sys/class/backlight/ - Power profiles (power-profiles-daemon / tuned-ppd)
- CPU, temperature, memory, and network widgets
- Volume via PipeWire with scroll-to-adjust and device popup
- MPRIS media player: left-click opens playback controls; middle-click toggles play/pause. Intentionally blurred artwork covers the full popup with aspect-preserving cropping.
- System tray (StatusNotifierItem) with context menus
- Do Not Disturb toggle shared with notifications and OSD
- Night Light toggle (
nightlight) for otter-nightlight - Keyboard layout indicator (
keyboard_layout) - Weather from the
otter-weathercache - Custom button widgets with an icon and a command
- HiDPI scaling per output
Usage
otter-launcher by default. Change it with button_menu_command.
The power button runs otter-logout by default. It is enabled and sits at the end of the default right layout.
Lua widgets
The built-in widgets are drawn by Lua plugins by default.otter-bar installs them under /usr/share/otter-shell/plugins/<name>. A layout name such as clock loads plugin:clock, which reads the same clock_* keys from otter-bar.conf and draws the same widget. Every button_<name> loads the shared button plugin.
To keep the native widget instead, do one of these:
- Write
native:<name>in the layout, for examplenative:clock. - Set
<plugin-id>_enabled = falsein~/.config/otter-shell/plugins.conf, for exampleclock_enabled = false. For the shared button renderer, usebutton_enabled = false.
~/.local/share/otter-shell/plugins/<name> and edit it.
Third-party widgets load as plugin:<id> slots. Enable them in otter-settings Plugins, then drag the chip into the layout. See Plugins. To write your own widget, see Plugin development.
otter-bluetooth-plugin installs plugin:bluetooth-applet and depends on bluez and otter-term. Enable it under Plugins, then add plugin:bluetooth-applet to a layout. Click the chip for status and device controls. Advanced device management opens bluetoothctl in Otter Terminal.
Configuration
Config:~/.config/otter-shell/otter-bar.conf (fallback: /etc/otter-shell/otter-bar.conf). Created on first run.
Key settings:
theme.conf updates bar widget colors without editing otter-bar.conf.
Do Not Disturb
Adddnd to any layout section. Click its bell icon to pause or resume notification and OSD popups. Notifications stay queued while DND is on.
Night Light
Addnightlight to any layout section. Left-click enables or disables otter-nightlight. Right-click for temperature presets, the schedule window, and a one-hour suspend. The widget does nothing if the daemon is not running.
Keyboard layout
Addkeyboard_layout to a layout section to show the current XKB layout. Set keyboard_layout_notify_on_change = true to show layout changes through otter-osd. Niri and Hyprland report layouts over native IPC. Other compositors rely on Wayland keyboard events.
System tray
Setsystem_tray_always_show = true to show tray icons without the expand button.
Weather widget
Addweather to a layout section, then run the cache watcher:
~/.config/otter-shell/otter-weather.conf. See otter-weather.
Calendar popover
Left-click the clock to open the calendar popover. Click the bar or outside the popover to close it. The popover lists today’s agenda lines from~/.config/otter-shell/agenda, one YYYY-MM-DD text entry per line. Set clock_agenda_path to read another file.
Dependencies
- Wayland compositor with
zwlr_layer_shell_v1 - D-Bus services for battery, power profiles, MPRIS, network, and system tray
- PipeWire for the volume widget

