Omarchy bar
This is the Quickshell implementation of the Omarchy status bar.
shell.qmlis Omarchy-owned bar engine code. Users should not edit it directly.bar-defaults.jsonis the Omarchy-owned default layout and module settings.- User overrides live in
~/.config/omarchy/bar.jsonand are merged over defaults at runtime. omarchy-style-bar-positionupdates only the user override file.- Wi-Fi/LAN state is polled from the active route and NetworkManager so the QML can mirror Waybar's network icons.
- Tooltips use a small Quickshell
PopupWindow, not Qt Quick Controls' clipped default tooltip.
Example user override:
{
"position": "right",
"layout": {
"left": ["omarchy", "workspaces"],
"center": ["clock", "weather", "update"],
"right": ["tray", "bluetooth", "network", "audio", "cpu", "battery"]
},
"modules": {
"clock": {
"format": "HH:mm",
"formatAlt": "dd MMMM 'W'ww yyyy",
"verticalFormat": "HH\n—\nmm"
}
}
}
centerAnchor defaults to clock. When the anchor module is present in the center list, it is pinned to the exact center of the bar and modules before/after it flank that anchor. If the anchor is not in the center list, the center list is centered as a group.
Available built-in modules: omarchy, workspaces, clock, weather, update, voxtype, screenRecording, idle, notifications, tray, bluetooth, network, audio, cpu, battery.
Custom modules
Add a module name to a layout list, then define it under modules in ~/.config/omarchy/bar.json.
For simple text/JSON output, use a command module:
{
"layout": {
"right": ["tray", "vpn", "audio", "cpu"]
},
"modules": {
"vpn": {
"type": "command",
"exec": "~/.config/omarchy/bar/scripts/vpn-status",
"interval": 5,
"tooltip": "VPN",
"onClick": "nm-connection-editor"
}
}
}
The command may print plain text or Waybar-style JSON, for example:
{"text":"","tooltip":"Work VPN","class":"active"}
For advanced custom UI, use QML:
{
"layout": {
"right": ["gpu", "audio", "cpu"]
},
"modules": {
"gpu": {
"type": "qml"
}
}
}
Then create ~/.config/omarchy/bar/modules/gpu.qml. If you want to store it elsewhere, add a source path.
Custom QML modules should be an Item with implicitWidth and implicitHeight. They may optionally define these properties, which the bar fills after loading:
import QtQuick
Item {
property var bar
property string moduleName
property var settings
implicitWidth: 28
implicitHeight: bar ? bar.barSize : 26
Text {
anchors.centerIn: parent
text: "GPU"
color: bar ? bar.foreground : "white"
font.family: bar ? bar.fontFamily : "monospace"
font.pixelSize: 12
}
MouseArea {
anchors.fill: parent
onClicked: if (bar) bar.run("omarchy-launch-or-focus-tui btop")
}
}