Files
arthur-os/default/quickshell/bar
2026-05-14 02:21:47 -04:00
..
2026-05-14 02:21:47 -04:00
2026-05-14 02:21:47 -04:00
2026-05-14 02:21:47 -04:00

Omarchy bar

This is the Quickshell implementation of the Omarchy status bar.

  • shell.qml is Omarchy-owned bar engine code. Users should not edit it directly.
  • bar-defaults.json is the Omarchy-owned default layout and module settings.
  • User overrides live in ~/.config/omarchy/bar.json and are merged over defaults at runtime.
  • omarchy-style-bar-position updates 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")
  }
}