Remove waybar; relocate bar helper scripts into the shell tree
omarchy-shell's bar plugin replaces waybar on every default path, so the
waybar package, configs, indicator scripts, and toggle/restart/refresh
binaries all go away in this commit.
The four small helper scripts that Bar.qml shells out to (weather.sh and
indicators/*.sh) move with the shell rather than disappear \u2014 they live
at default/quickshell/omarchy-shell/scripts/ now, alongside the rest of
the shell code.
Companion script changes:
- omarchy-shell-ipc gains --if-running so fire-and-forget refresh
callers (toggle-idle, toggle-notification-silencing,
update-available-reset, capture-screenrecording) don't accidentally
spawn the shell when it isn't already up.
- omarchy-theme-set, omarchy-tz-select, omarchy-voxtype-{install,model},
omarchy-toggle-nightlight, omarchy-voxtype-config drop their waybar
branches and comments.
- omarchy-voxtype-status's summary stops claiming it's a Waybar helper.
- omarchy-base.packages drops waybar; install/packaging/fonts.sh's
comment points at the new bar consumer.
- SKILL.md / AGENTS.md / omarchy-menu.jsonc lose their waybar entries.
- test/omarchy-cli-test.sh substitutes a remaining toggle command.
This commit is contained in:
@@ -95,7 +95,7 @@ Exceptions are allowed for bootstrap, preflight, migration, and package-helper s
|
||||
|
||||
# Visual Changes
|
||||
|
||||
When making visual changes, such as Waybar styles or desktop appearance, always take and analyze a screenshot after applying the change to verify the result. Use `omarchy capture screenshot fullscreen save` for fullscreen screenshots.
|
||||
When making visual changes, such as omarchy-shell styling or desktop appearance, always take and analyze a screenshot after applying the change to verify the result. Use `omarchy capture screenshot fullscreen save` for fullscreen screenshots.
|
||||
|
||||
For interactive UI work, use `wtype` to simulate keyboard input when available. Example: start the UI in the background, wait briefly for focus, then run `wtype -k Right -k Return` to exercise keyboard selection and confirm the resulting command output or state change. Prefer this over manual-only verification when a UI returns a selected value or changes a symlink/config.
|
||||
|
||||
|
||||
@@ -250,9 +250,7 @@ stop_screenrecording() {
|
||||
}
|
||||
|
||||
toggle_screenrecording_indicator() {
|
||||
pkill -RTMIN+8 waybar
|
||||
OMARCHY_PATH=${OMARCHY_PATH:-$HOME/.local/share/omarchy}
|
||||
quickshell ipc -p "$OMARCHY_PATH/default/quickshell/omarchy-shell" call bar refreshScreenRecording >/dev/null 2>&1 || true
|
||||
omarchy-shell-ipc --if-running bar refreshScreenRecording >/dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
screenrecording_active() {
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Reset Waybar config to Omarchy defaults
|
||||
# omarchy:examples=omarchy refresh waybar
|
||||
|
||||
WAYBAR_CONFIG="$HOME/.config/waybar/config.jsonc"
|
||||
|
||||
position=$(sed -nE 's/.*"position"[[:space:]]*:[[:space:]]*"(top|bottom|left|right)".*/\1/p' "$WAYBAR_CONFIG" 2>/dev/null | head -n 1)
|
||||
height=$(sed -nE 's/.*"height"[[:space:]]*:[[:space:]]*([0-9]+).*/\1/p' "$WAYBAR_CONFIG" 2>/dev/null | head -n 1)
|
||||
width=$(sed -nE 's/.*"width"[[:space:]]*:[[:space:]]*([0-9]+).*/\1/p' "$WAYBAR_CONFIG" 2>/dev/null | head -n 1)
|
||||
|
||||
omarchy-refresh-config waybar/config.jsonc
|
||||
omarchy-refresh-config waybar/style.css
|
||||
|
||||
[[ -n $position ]] && sed -i -E "s/(\"position\"[[:space:]]*:[[:space:]]*\")[a-z]+(\")/\\1${position}\\2/" "$WAYBAR_CONFIG"
|
||||
[[ -n $height ]] && sed -i -E "s/(\"height\"[[:space:]]*:[[:space:]]*)[0-9]+/\\1${height}/" "$WAYBAR_CONFIG"
|
||||
[[ -n $width ]] && sed -i -E "s/(\"width\"[[:space:]]*:[[:space:]]*)[0-9]+/\\1${width}/" "$WAYBAR_CONFIG"
|
||||
|
||||
omarchy-restart-waybar
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Restart Waybar
|
||||
# omarchy:examples=omarchy restart waybar
|
||||
|
||||
pkill -9 -x waybar
|
||||
setsid uwsm-app -- waybar >/dev/null 2>&1 &
|
||||
+35
-18
@@ -5,9 +5,11 @@
|
||||
|
||||
if [[ $# -eq 0 || $1 == "-h" || $1 == "--help" ]]; then
|
||||
cat <<USAGE
|
||||
Usage: omarchy-shell-ipc <target> <method> [args...]
|
||||
Usage: omarchy-shell-ipc [--if-running] <target> <method> [args...]
|
||||
|
||||
Starts omarchy-shell if not running, then forwards a quickshell ipc call.
|
||||
Forwards a quickshell ipc call to omarchy-shell. Starts the shell if it
|
||||
isn't already running, unless --if-running is passed (in which case the
|
||||
call is silently skipped when no shell instance exists).
|
||||
|
||||
Examples:
|
||||
omarchy-shell-ipc shell ping
|
||||
@@ -16,30 +18,45 @@ Examples:
|
||||
omarchy-shell-ipc shell listPlugins
|
||||
omarchy-shell-ipc shell listShellConfig
|
||||
omarchy-shell-ipc shell rescanPlugins
|
||||
omarchy-shell-ipc --if-running bar refreshIndicators
|
||||
omarchy-shell-ipc image-selector ping
|
||||
omarchy-shell-ipc image-selector cancel ""
|
||||
USAGE
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if_running=0
|
||||
if [[ $1 == "--if-running" ]]; then
|
||||
if_running=1
|
||||
shift
|
||||
fi
|
||||
|
||||
OMARCHY_PATH="${OMARCHY_PATH:-$HOME/.local/share/omarchy}"
|
||||
SHELL_DIR="$OMARCHY_PATH/default/quickshell/omarchy-shell"
|
||||
|
||||
# Serialize concurrent invocations so two CLI callers don't both spawn the shell
|
||||
# when no instance is running yet.
|
||||
lockfile="${XDG_RUNTIME_DIR:-/tmp}/omarchy-shell-ipc.lock"
|
||||
{
|
||||
flock 9
|
||||
if ! quickshell list -p "$SHELL_DIR" 2>/dev/null | grep -q '^Instance '; then
|
||||
# 9<&- so the spawned shell does not inherit (and keep) the lock fd; the
|
||||
# spawned process is long-lived and would otherwise hold the lock for the
|
||||
# remainder of the session, deadlocking every subsequent helper invocation.
|
||||
setsid uwsm-app -- env OMARCHY_PATH="$OMARCHY_PATH" quickshell -p "$SHELL_DIR" >/dev/null 2>&1 9<&- &
|
||||
for _ in 1 2 3 4 5 6 7 8 9 10; do
|
||||
sleep 0.2
|
||||
quickshell list -p "$SHELL_DIR" 2>/dev/null | grep -q '^Instance ' && break
|
||||
done
|
||||
fi
|
||||
} 9>"$lockfile"
|
||||
shell_running() {
|
||||
quickshell list -p "$SHELL_DIR" 2>/dev/null | grep -q '^Instance '
|
||||
}
|
||||
|
||||
if (( if_running )); then
|
||||
shell_running || exit 0
|
||||
else
|
||||
# Serialize concurrent invocations so two CLI callers don't both spawn the shell
|
||||
# when no instance is running yet.
|
||||
lockfile="${XDG_RUNTIME_DIR:-/tmp}/omarchy-shell-ipc.lock"
|
||||
{
|
||||
flock 9
|
||||
if ! shell_running; then
|
||||
# 9<&- so the spawned shell does not inherit (and keep) the lock fd; the
|
||||
# spawned process is long-lived and would otherwise hold the lock for the
|
||||
# remainder of the session, deadlocking every subsequent helper invocation.
|
||||
setsid uwsm-app -- env OMARCHY_PATH="$OMARCHY_PATH" quickshell -p "$SHELL_DIR" >/dev/null 2>&1 9<&- &
|
||||
for _ in 1 2 3 4 5 6 7 8 9 10; do
|
||||
sleep 0.2
|
||||
shell_running && break
|
||||
done
|
||||
fi
|
||||
} 9>"$lockfile"
|
||||
fi
|
||||
|
||||
exec quickshell ipc -p "$SHELL_DIR" call "$@"
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Set Waybar position
|
||||
# omarchy:args=<top|bottom|left|right>
|
||||
# omarchy:examples=omarchy-style-waybar-position top | omarchy style waybar-position bottom
|
||||
|
||||
set -e
|
||||
|
||||
WAYBAR_CONFIG="$HOME/.config/waybar/config.jsonc"
|
||||
|
||||
position=$1
|
||||
|
||||
if [[ ! $position =~ ^(top|bottom|left|right)$ ]]; then
|
||||
echo "Usage: omarchy-style-waybar-position top|bottom|left|right" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ $position == "left" || $position == "right" ]]; then
|
||||
height=0
|
||||
width=28
|
||||
else
|
||||
height=26
|
||||
width=0
|
||||
fi
|
||||
|
||||
sed -i -E "s/(\"position\"[[:space:]]*:[[:space:]]*\")[a-z]+(\")/\\1${position}\\2/" "$WAYBAR_CONFIG"
|
||||
sed -i -E "s/(\"height\"[[:space:]]*:[[:space:]]*)[0-9]+/\\1${height}/; s/(\"width\"[[:space:]]*:[[:space:]]*)[0-9]+/\\1${width}/" "$WAYBAR_CONFIG"
|
||||
|
||||
omarchy-restart-waybar
|
||||
@@ -50,9 +50,6 @@ if [[ $OMARCHY_THEME_SKIP_BACKGROUND != "1" ]]; then
|
||||
fi
|
||||
|
||||
# Restart components to apply new theme
|
||||
if pgrep -x waybar >/dev/null; then
|
||||
omarchy-restart-waybar
|
||||
fi
|
||||
omarchy-restart-swayosd
|
||||
omarchy-restart-terminal
|
||||
omarchy-restart-hyprctl
|
||||
|
||||
@@ -10,6 +10,4 @@ else
|
||||
notify-send -a omarchy-action -u low " Now locking computer when idle"
|
||||
fi
|
||||
|
||||
pkill -RTMIN+9 waybar
|
||||
OMARCHY_PATH=${OMARCHY_PATH:-$HOME/.local/share/omarchy}
|
||||
quickshell ipc -p "$OMARCHY_PATH/default/quickshell/omarchy-shell" call bar refreshIndicators >/dev/null 2>&1 || true
|
||||
omarchy-shell-ipc --if-running bar refreshIndicators >/dev/null 2>&1 || true
|
||||
|
||||
@@ -15,18 +15,10 @@ fi
|
||||
# Query the current temperature
|
||||
CURRENT_TEMP=$(hyprctl hyprsunset temperature 2>/dev/null | grep -oE '[0-9]+')
|
||||
|
||||
restart_nightlighted_waybar() {
|
||||
if grep -q "custom/nightlight" ~/.config/waybar/config.jsonc; then
|
||||
omarchy-restart-waybar # restart waybar in case user has waybar module for hyprsunset
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ $CURRENT_TEMP == $OFF_TEMP ]]; then
|
||||
hyprctl hyprsunset temperature $ON_TEMP
|
||||
notify-send -a omarchy-action -u low " Nightlight screen temperature"
|
||||
restart_nightlighted_waybar
|
||||
else
|
||||
hyprctl hyprsunset temperature $OFF_TEMP
|
||||
notify-send -a omarchy-action -u low " Daylight screen temperature"
|
||||
restart_nightlighted_waybar
|
||||
fi
|
||||
|
||||
@@ -9,5 +9,4 @@ on) omarchy-notification-send "Silenced notifications" -g -e ;;
|
||||
off) omarchy-notification-send "Enabled notifications" -g -e ;;
|
||||
esac
|
||||
|
||||
pkill -RTMIN+10 waybar 2>/dev/null || true
|
||||
omarchy-shell-ipc bar refreshIndicators >/dev/null 2>&1 || true
|
||||
omarchy-shell-ipc --if-running bar refreshIndicators >/dev/null 2>&1 || true
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Toggle Waybar visibility
|
||||
# omarchy:examples=omarchy toggle waybar
|
||||
|
||||
omarchy-toggle waybar-off
|
||||
|
||||
if pgrep -x waybar >/dev/null; then
|
||||
pkill -x waybar
|
||||
else
|
||||
uwsm-app -- waybar >/dev/null 2>&1 &
|
||||
fi
|
||||
@@ -6,4 +6,3 @@
|
||||
timezone=$(timedatectl list-timezones | gum filter --height 20 --header "Set timezone") || exit 1
|
||||
sudo timedatectl set-timezone "$timezone"
|
||||
echo "Timezone is now set to $timezone"
|
||||
omarchy-restart-waybar
|
||||
|
||||
@@ -2,7 +2,5 @@
|
||||
|
||||
# omarchy:summary=Ensure the status bar icon offering the available update is removed
|
||||
|
||||
pkill -RTMIN+7 waybar
|
||||
OMARCHY_PATH=${OMARCHY_PATH:-$HOME/.local/share/omarchy}
|
||||
quickshell ipc -p "$OMARCHY_PATH/default/quickshell/omarchy-shell" call bar refreshUpdate >/dev/null 2>&1 || true
|
||||
omarchy-shell-ipc --if-running bar refreshUpdate >/dev/null 2>&1 || true
|
||||
exit 0
|
||||
|
||||
@@ -4,6 +4,4 @@
|
||||
|
||||
set -e
|
||||
|
||||
# Used by Voxtype waybar module to open config on right click
|
||||
|
||||
exec omarchy-launch-editor ~/.config/voxtype/config.toml
|
||||
|
||||
@@ -20,9 +20,6 @@ if gum confirm "Install Voxtype + AI model (~150MB) to enable dictation?"; then
|
||||
fi
|
||||
voxtype setup systemd
|
||||
|
||||
if pgrep -x waybar >/dev/null; then
|
||||
omarchy-restart-waybar
|
||||
fi
|
||||
omarchy-restart-quickshell
|
||||
notify-send -a omarchy-action " Voxtype Dictation Ready" "Hold F9 to dictate (or toggle with Super + Ctrl + X)." -t 10000
|
||||
fi
|
||||
|
||||
@@ -5,7 +5,4 @@
|
||||
set -e
|
||||
|
||||
omarchy-launch-floating-terminal-with-presentation "voxtype setup model"
|
||||
if pgrep -x waybar >/dev/null; then
|
||||
omarchy-restart-waybar
|
||||
fi
|
||||
omarchy-restart-quickshell
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# omarchy:summary=Clean up the voxtype --follow child when Waybar reloads
|
||||
# omarchy:summary=Stream voxtype --follow status as bar-friendly JSON
|
||||
|
||||
if omarchy-cmd-present voxtype; then
|
||||
coproc VOXTYPE_STATUS { voxtype status --follow --extended --format json; }
|
||||
|
||||
@@ -1,202 +0,0 @@
|
||||
{
|
||||
"reload_style_on_change": true,
|
||||
"layer": "top",
|
||||
"position": "top",
|
||||
"spacing": 0,
|
||||
"height": 26,
|
||||
"width": 0,
|
||||
"modules-left": ["custom/omarchy", "hyprland/workspaces"],
|
||||
"modules-center": ["clock#horizontal", "clock#vertical", "custom/weather", "custom/update", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
|
||||
"modules-right": [
|
||||
"group/tray-expander",
|
||||
"bluetooth",
|
||||
"network",
|
||||
"pulseaudio",
|
||||
"cpu",
|
||||
"battery"
|
||||
],
|
||||
"hyprland/workspaces": {
|
||||
"on-click": "activate",
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"default": "",
|
||||
"1": "1",
|
||||
"2": "2",
|
||||
"3": "3",
|
||||
"4": "4",
|
||||
"5": "5",
|
||||
"6": "6",
|
||||
"7": "7",
|
||||
"8": "8",
|
||||
"9": "9",
|
||||
"10": "0",
|
||||
"active": ""
|
||||
},
|
||||
"persistent-workspaces": {
|
||||
"1": [],
|
||||
"2": [],
|
||||
"3": [],
|
||||
"4": [],
|
||||
"5": []
|
||||
}
|
||||
},
|
||||
"custom/omarchy": {
|
||||
"format": "<span font='omarchy'>\ue900</span>",
|
||||
"on-click": "omarchy-menu",
|
||||
"on-click-right": "xdg-terminal-exec",
|
||||
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
|
||||
},
|
||||
"custom/update": {
|
||||
"format": "",
|
||||
"exec": "omarchy-update-available",
|
||||
"on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
|
||||
"tooltip-format": "Omarchy update available",
|
||||
"signal": 7,
|
||||
"interval": 21600
|
||||
},
|
||||
|
||||
"cpu": {
|
||||
"interval": 5,
|
||||
"format": "",
|
||||
"on-click": "omarchy-launch-or-focus-tui btop",
|
||||
"on-click-right": "alacritty"
|
||||
},
|
||||
"clock#horizontal": {
|
||||
"format": "{:L%A %H:%M}",
|
||||
"format-alt": "{:L%d %B W%V %Y}",
|
||||
"tooltip": false,
|
||||
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
|
||||
},
|
||||
"clock#vertical": {
|
||||
"format": "{:%H\n —\n%M}",
|
||||
"format-alt": "{:L%d %B W%V %Y}",
|
||||
"tooltip": false,
|
||||
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select"
|
||||
},
|
||||
"custom/weather": {
|
||||
"exec": "$OMARCHY_PATH/default/waybar/weather.sh",
|
||||
"return-type": "json",
|
||||
"interval": 60,
|
||||
"tooltip": false,
|
||||
"on-click": "notify-send -u low \"$(omarchy-weather-status)\""
|
||||
},
|
||||
"network": {
|
||||
"format-icons": ["", "", "", "", ""],
|
||||
"format": "{icon}",
|
||||
"format-wifi": "{icon}",
|
||||
"format-ethernet": "",
|
||||
"format-disconnected": "",
|
||||
"tooltip-format-wifi": "{essid} ({frequency} GHz)",
|
||||
"tooltip-format-ethernet": "Connected",
|
||||
"tooltip-format-disconnected": "Disconnected",
|
||||
"interval": 3,
|
||||
"spacing": 1,
|
||||
"on-click": "omarchy-launch-wifi"
|
||||
},
|
||||
"battery": {
|
||||
"format": "{capacity}% {icon}",
|
||||
"format-discharging": "{icon}",
|
||||
"format-charging": "{icon}",
|
||||
"format-plugged": "",
|
||||
"format-icons": {
|
||||
"charging": ["", "", "", "", "", "", "", "", "", ""],
|
||||
"default": ["", "", "", "", "", "", "", "", "", ""]
|
||||
},
|
||||
"format-full": "",
|
||||
"tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%",
|
||||
"tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%",
|
||||
"interval": 5,
|
||||
"on-click": "omarchy-menu power",
|
||||
"on-click-right": "notify-send -u low \"$(omarchy-battery-status)\"",
|
||||
"states": {
|
||||
"warning": 20,
|
||||
"critical": 10
|
||||
}
|
||||
},
|
||||
"bluetooth": {
|
||||
"format": "",
|
||||
"format-off": "",
|
||||
"format-disabled": "",
|
||||
"format-connected": "",
|
||||
"format-no-controller": "",
|
||||
"tooltip-format": "Devices connected: {num_connections}",
|
||||
"on-click": "omarchy-launch-bluetooth"
|
||||
},
|
||||
"pulseaudio": {
|
||||
"format": "{icon}",
|
||||
"on-click": "omarchy-launch-audio",
|
||||
"on-click-right": "pamixer -t",
|
||||
"tooltip-format": "Playing at {volume}%",
|
||||
"scroll-step": 5,
|
||||
"format-muted": "",
|
||||
"format-icons": {
|
||||
"headphone": "",
|
||||
"headset": "",
|
||||
"default": ["", "", ""]
|
||||
}
|
||||
},
|
||||
"group/tray-expander": {
|
||||
"orientation": "inherit",
|
||||
"drawer": {
|
||||
"transition-duration": 600,
|
||||
"children-class": "tray-group-item"
|
||||
},
|
||||
"modules": ["group/expand-icons", "tray"]
|
||||
},
|
||||
"group/expand-icons": {
|
||||
"orientation": "inherit",
|
||||
"modules": ["custom/expand-icon#horizontal", "custom/expand-icon#vertical"]
|
||||
},
|
||||
"custom/expand-icon#horizontal": {
|
||||
"format": "",
|
||||
"tooltip": false,
|
||||
"on-scroll-up": "",
|
||||
"on-scroll-down": "",
|
||||
"on-scroll-left": "",
|
||||
"on-scroll-right": ""
|
||||
},
|
||||
"custom/expand-icon#vertical": {
|
||||
"format": "",
|
||||
"rotate": 270,
|
||||
"tooltip": false,
|
||||
"on-scroll-up": "",
|
||||
"on-scroll-down": "",
|
||||
"on-scroll-left": "",
|
||||
"on-scroll-right": ""
|
||||
},
|
||||
"custom/screenrecording-indicator": {
|
||||
"on-click": "omarchy-capture-screenrecording",
|
||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh",
|
||||
"signal": 8,
|
||||
"return-type": "json"
|
||||
},
|
||||
"custom/idle-indicator": {
|
||||
"on-click": "omarchy-toggle-idle",
|
||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/idle.sh",
|
||||
"signal": 9,
|
||||
"return-type": "json"
|
||||
},
|
||||
"custom/notification-silencing-indicator": {
|
||||
"on-click": "omarchy-toggle-notification-silencing",
|
||||
"exec": "$OMARCHY_PATH/default/waybar/indicators/notification-silencing.sh",
|
||||
"signal": 10,
|
||||
"return-type": "json"
|
||||
},
|
||||
"custom/voxtype": {
|
||||
"exec": "omarchy-voxtype-status",
|
||||
"return-type": "json",
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"idle": "",
|
||||
"recording": "",
|
||||
"transcribing": ""
|
||||
},
|
||||
"tooltip": true,
|
||||
"on-click-right": "omarchy-voxtype-config",
|
||||
"on-click": "omarchy-voxtype-model"
|
||||
},
|
||||
"tray": {
|
||||
"icon-size": 12,
|
||||
"spacing": 17
|
||||
}
|
||||
}
|
||||
@@ -1,189 +0,0 @@
|
||||
@import "../omarchy/current/theme/waybar.css";
|
||||
|
||||
* {
|
||||
background-color: @background;
|
||||
color: @foreground;
|
||||
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
min-height: 0;
|
||||
font-family: 'JetBrainsMono Nerd Font';
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.modules-left {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.modules-right {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
all: initial;
|
||||
padding: 0 6px;
|
||||
margin: 0 1.5px;
|
||||
min-width: 9px;
|
||||
}
|
||||
|
||||
#workspaces button.empty {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
#cpu,
|
||||
#battery,
|
||||
#pulseaudio,
|
||||
#custom-omarchy,
|
||||
#custom-update {
|
||||
min-width: 12px;
|
||||
margin: 0 7.5px;
|
||||
}
|
||||
|
||||
#tray {
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
#bluetooth {
|
||||
margin-right: 17px;
|
||||
}
|
||||
|
||||
#network {
|
||||
margin-right: 13px;
|
||||
}
|
||||
|
||||
#custom-expand-icon {
|
||||
margin-right: 18px;
|
||||
}
|
||||
|
||||
tooltip {
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
#custom-update {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
#clock {
|
||||
margin-left: 8.75px;
|
||||
}
|
||||
|
||||
#custom-weather {
|
||||
margin-left: 7.5px;
|
||||
margin-right: 7.5px;
|
||||
min-width: 14px;
|
||||
}
|
||||
|
||||
#custom-weather.unavailable {
|
||||
min-width: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
#custom-screenrecording-indicator,
|
||||
#custom-idle-indicator,
|
||||
#custom-notification-silencing-indicator {
|
||||
min-width: 12px;
|
||||
margin-left: 5px;
|
||||
margin-right: 0;
|
||||
font-size: 10px;
|
||||
padding-bottom: 1px;
|
||||
}
|
||||
|
||||
#custom-screenrecording-indicator.active {
|
||||
color: #a55555;
|
||||
}
|
||||
|
||||
#custom-idle-indicator.active,
|
||||
#custom-notification-silencing-indicator.active {
|
||||
color: #a55555;
|
||||
}
|
||||
|
||||
#custom-voxtype {
|
||||
min-width: 12px;
|
||||
margin: 0 0 0 7.5px;
|
||||
}
|
||||
|
||||
#custom-voxtype.recording {
|
||||
color: #a55555;
|
||||
}
|
||||
|
||||
.left .modules-left, .right .modules-left { margin: 8px 0 0 0; }
|
||||
.left .modules-right, .right .modules-right { margin: 0 0 8px 0; }
|
||||
|
||||
.left #workspaces button, .right #workspaces button {
|
||||
padding: 6px 0;
|
||||
margin: 1.5px 0;
|
||||
}
|
||||
|
||||
.left #cpu, .right #cpu,
|
||||
.left #battery, .right #battery,
|
||||
.left #pulseaudio, .right #pulseaudio,
|
||||
.left #custom-omarchy, .right #custom-omarchy,
|
||||
.left #custom-update, .right #custom-update {
|
||||
margin: 1.5px 0;
|
||||
padding: 6px 0;
|
||||
min-width: 0;
|
||||
min-height: 12px;
|
||||
}
|
||||
|
||||
.left #tray, .right #tray { margin: 0 0 16px 0; }
|
||||
.left #bluetooth, .right #bluetooth { margin: 1.5px 0; padding: 6px 0; min-height: 12px; }
|
||||
.left #network, .right #network { margin: 1.5px 0; padding: 6px 0; min-height: 12px; }
|
||||
.left #custom-expand-icon, .right #custom-expand-icon { margin: 1.5px 0; padding: 6px 0; min-height: 12px; }
|
||||
.left #clock, .right #clock { margin: 8.75px 0 0 0; }
|
||||
.left #custom-weather, .right #custom-weather { margin: 1.5px 0; padding: 6px 0; min-height: 12px; min-width: 14px; margin-right: 4px; }
|
||||
|
||||
.left #custom-screenrecording-indicator, .right #custom-screenrecording-indicator,
|
||||
.left #custom-idle-indicator, .right #custom-idle-indicator,
|
||||
.left #custom-notification-silencing-indicator, .right #custom-notification-silencing-indicator {
|
||||
margin: 5px 0 0 0;
|
||||
min-width: 0;
|
||||
min-height: 12px;
|
||||
}
|
||||
|
||||
.left #custom-voxtype, .right #custom-voxtype { margin: 7.5px 0 0 0; min-width: 0; min-height: 12px; }
|
||||
|
||||
#custom-expand-icon.vertical,
|
||||
.left #custom-expand-icon.horizontal,
|
||||
.right #custom-expand-icon.horizontal {
|
||||
opacity: 0;
|
||||
font-size: 0;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.left #custom-expand-icon.vertical,
|
||||
.right #custom-expand-icon.vertical {
|
||||
opacity: 1;
|
||||
font-size: inherit;
|
||||
min-width: 0;
|
||||
min-height: 12px;
|
||||
margin: 1.5px 0;
|
||||
padding: 6px 0;
|
||||
}
|
||||
|
||||
#clock.vertical,
|
||||
.left #clock.horizontal,
|
||||
.right #clock.horizontal {
|
||||
opacity: 0;
|
||||
font-size: 0;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.left #clock.vertical,
|
||||
.right #clock.vertical {
|
||||
opacity: 1;
|
||||
font-size: inherit;
|
||||
min-width: 0;
|
||||
min-height: 12px;
|
||||
margin: 8.75px 0 0 0;
|
||||
}
|
||||
@@ -2,12 +2,12 @@
|
||||
name: omarchy
|
||||
description: >
|
||||
REQUIRED for end-user customization of Linux desktop, window manager, or system config.
|
||||
Use when editing ~/.config/hypr/, ~/.config/waybar/, ~/.config/walker/,
|
||||
~/.config/alacritty/, ~/.config/foot/, ~/.config/kitty/, ~/.config/ghostty/,
|
||||
or ~/.config/omarchy/. Triggers: Hyprland, window rules, animations, keybindings,
|
||||
monitors, gaps, borders, blur, opacity, waybar, walker, terminal config, themes,
|
||||
background, night light, idle, lock screen, screenshots, reminders, layer rules,
|
||||
workspace settings, display config, and user-facing omarchy commands. Excludes Omarchy
|
||||
Use when editing ~/.config/hypr/, ~/.config/omarchy/, ~/.config/walker/,
|
||||
~/.config/alacritty/, ~/.config/foot/, ~/.config/kitty/, or ~/.config/ghostty/.
|
||||
Triggers: Hyprland, window rules, animations, keybindings, monitors, gaps, borders,
|
||||
blur, opacity, omarchy-shell, bar, walker, terminal config, themes, background,
|
||||
night light, idle, lock screen, screenshots, reminders, layer rules, workspace
|
||||
settings, display config, and user-facing omarchy commands. Excludes Omarchy
|
||||
source development in ~/.local/share/omarchy/ and `omarchy dev` workflows.
|
||||
---
|
||||
|
||||
@@ -23,7 +23,7 @@ It is not for contributing to Omarchy source code.
|
||||
**ALWAYS invoke this skill for end-user requests involving ANY of these:**
|
||||
|
||||
- Editing ANY file in `~/.config/hypr/` (window rules, animations, keybindings, monitors, etc.)
|
||||
- Editing ANY file in `~/.config/waybar/`, `~/.config/walker/`
|
||||
- Editing `~/.config/omarchy/shell.json` (status bar layout, widgets) or `~/.config/walker/`
|
||||
- Editing terminal configs (alacritty, foot, kitty, ghostty)
|
||||
- Editing ANY file in `~/.config/omarchy/`
|
||||
- Window behavior, animations, opacity, blur, gaps, borders
|
||||
@@ -57,7 +57,7 @@ This directory contains Omarchy's source files managed by git. Any changes will
|
||||
|
||||
**Reading `~/.local/share/omarchy/` is SAFE and useful** - do it freely to:
|
||||
- Understand how omarchy commands work: `omarchy theme set --help` or `cat $(which omarchy-theme-set)`
|
||||
- See default configs before customizing: `cat ~/.local/share/omarchy/config/waybar/config.jsonc`
|
||||
- See default configs before customizing: `cat ~/.local/share/omarchy/default/quickshell/omarchy-shell/shell-defaults.json`
|
||||
- Check stock theme files to copy for customization
|
||||
- Reference default hyprland settings: `cat ~/.local/share/omarchy/default/hypr/*`
|
||||
|
||||
@@ -76,7 +76,7 @@ Omarchy is built on:
|
||||
|-----------|---------|-----------------|
|
||||
| **Arch Linux** | Base OS | `/etc/`, `~/.config/` |
|
||||
| **Hyprland** | Wayland compositor/WM | `~/.config/hypr/` |
|
||||
| **Waybar** | Status bar | `~/.config/waybar/` |
|
||||
| **Omarchy shell** | Status bar + notifications (Quickshell) | `~/.config/omarchy/shell.json` |
|
||||
| **Walker** | App launcher | `~/.config/walker/` |
|
||||
| **Alacritty/Foot/Kitty/Ghostty** | Terminals | `~/.config/<terminal>/` |
|
||||
| **SwayOSD** | On-screen display | `~/.config/swayosd/` |
|
||||
@@ -110,8 +110,8 @@ Run `omarchy --help` for the full list. The most common groups:
|
||||
|
||||
| Group | Purpose | Example |
|
||||
|-------|---------|---------|
|
||||
| `omarchy refresh` | Reset config to defaults (backs up first) | `omarchy refresh waybar` |
|
||||
| `omarchy restart` | Restart a service/app | `omarchy restart waybar` |
|
||||
| `omarchy refresh` | Reset config to defaults (backs up first) | `omarchy refresh shell` |
|
||||
| `omarchy restart` | Restart a service/app | `omarchy restart shell` |
|
||||
| `omarchy toggle` | Toggle feature on/off | `omarchy toggle nightlight` |
|
||||
| `omarchy theme` | Theme management | `omarchy theme set <name>` |
|
||||
| `omarchy install` | Install optional software / packages | `omarchy install docker dbs` |
|
||||
@@ -147,17 +147,20 @@ Run `omarchy --help` for the full list. The most common groups:
|
||||
- If `hyprctl configerrors` reports errors, address them and rerun validation until clean or until a real blocker is identified
|
||||
- Use `omarchy refresh hyprland` to reset to defaults
|
||||
|
||||
### Waybar (Status Bar)
|
||||
### Omarchy shell (Status Bar + Notifications)
|
||||
|
||||
The bar, notification daemon, settings panel, and assorted overlays all run
|
||||
inside a single long-running Quickshell process (`omarchy-shell`).
|
||||
|
||||
```
|
||||
~/.config/waybar/
|
||||
├── config.jsonc # Bar layout and modules (JSONC format)
|
||||
└── style.css # Styling
|
||||
~/.config/omarchy/shell.json # User overrides: bar.position, bar.layout, plugins[]
|
||||
~/.local/share/omarchy/default/quickshell/omarchy-shell/shell-defaults.json # Canonical defaults
|
||||
```
|
||||
|
||||
**Waybar does NOT auto-reload.** You MUST run `omarchy restart waybar` after any config changes.
|
||||
The shell hot-reloads `shell.json` on save — no restart needed for layout
|
||||
changes. For more invasive changes (new plugin, packaged update):
|
||||
|
||||
**Commands:** `omarchy restart waybar`, `omarchy refresh waybar`, `omarchy toggle waybar`
|
||||
**Commands:** `omarchy restart shell`, `omarchy refresh shell`, `omarchy launch settings`
|
||||
|
||||
### Terminals
|
||||
|
||||
@@ -198,7 +201,7 @@ cp ~/.config/hypr/bindings.conf ~/.config/hypr/bindings.conf.bak.$(date +%s)
|
||||
|
||||
# 4. Apply changes
|
||||
# - Hyprland: auto-reloads on save, but MUST validate with `hyprctl reload` and `hyprctl configerrors`
|
||||
# - Waybar: MUST restart with `omarchy restart waybar`
|
||||
# - Omarchy shell: shell.json hot-reloads; use `omarchy restart shell` for plugin/widget code changes
|
||||
# - Walker: MUST restart with `omarchy restart walker`
|
||||
# - Terminals: MUST restart with `omarchy restart terminal`
|
||||
```
|
||||
@@ -236,7 +239,7 @@ When customizations go wrong:
|
||||
|
||||
```bash
|
||||
# Reset specific config (creates backup automatically)
|
||||
omarchy refresh waybar
|
||||
omarchy refresh shell
|
||||
omarchy refresh hyprland
|
||||
|
||||
# The refresh command:
|
||||
@@ -388,4 +391,4 @@ This skill intentionally does not cover Omarchy source development. Do not use t
|
||||
- "Clear all reminders" -> `omarchy reminder clear`
|
||||
- "Customize the catppuccin theme colors" -> Create `~/.config/omarchy/themes/catppuccin-custom/` by copying from stock, then edit
|
||||
- "Run a script every time I change themes" -> Create `~/.config/omarchy/hooks/theme-set`
|
||||
- "Reset waybar to defaults" -> `omarchy refresh waybar`
|
||||
- "Reset shell/bar to defaults" -> `omarchy refresh shell`
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
"setup.default.editor.emacs": {"icon":"","label":"Emacs","when":"omarchy-cmd-present emacs","checked":"default_editor_is emacs","action":"omarchy-default-editor emacs"},
|
||||
"setup.dns": {"icon":"","label":"DNS","keywords":"network","action":"present_terminal omarchy-setup-dns"},
|
||||
"setup.security": {"icon":"","label":"Security","keywords":"fingerprint fido2"},
|
||||
"setup.config": {"icon":"","label":"Config","keywords":"files hyprland bar quickshell walker waybar"},
|
||||
"setup.config": {"icon":"","label":"Config","keywords":"files hyprland bar quickshell walker"},
|
||||
"setup.security.fingerprint": {"icon":"","label":"Fingerprint","action":"present_terminal omarchy-setup-security-fingerprint"},
|
||||
"setup.security.fido2": {"icon":"","label":"Fido2","keywords":"key","action":"present_terminal omarchy-setup-security-fido2"},
|
||||
"setup.config.hyprland": {"icon":"","label":"Hyprland","action":"open_in_editor \"$(hypr_config_file hyprland)\""},
|
||||
|
||||
@@ -750,7 +750,7 @@ Item {
|
||||
|
||||
Process {
|
||||
id: weatherProc
|
||||
command: ["bash", "-lc", root.commandWithOmarchyPath(root.shellQuote(root.omarchyPath + "/default/waybar/weather.sh"))]
|
||||
command: ["bash", "-lc", root.commandWithOmarchyPath(root.shellQuote(root.omarchyPath + "/default/quickshell/omarchy-shell/scripts/weather.sh"))]
|
||||
stdout: StdioCollector {
|
||||
waitForEnd: true
|
||||
onStreamFinished: root.updateWeather(text)
|
||||
@@ -795,7 +795,7 @@ Item {
|
||||
|
||||
Process {
|
||||
id: screenRecordingProc
|
||||
command: ["bash", "-lc", root.commandWithOmarchyPath(root.shellQuote(root.omarchyPath + "/default/waybar/indicators/screen-recording.sh"))]
|
||||
command: ["bash", "-lc", root.commandWithOmarchyPath(root.shellQuote(root.omarchyPath + "/default/quickshell/omarchy-shell/scripts/indicators/screen-recording.sh"))]
|
||||
stdout: StdioCollector {
|
||||
waitForEnd: true
|
||||
onStreamFinished: root.updateIndicator("screenRecording", text)
|
||||
@@ -804,7 +804,7 @@ Item {
|
||||
|
||||
Process {
|
||||
id: idleProc
|
||||
command: ["bash", "-lc", root.commandWithOmarchyPath(root.shellQuote(root.omarchyPath + "/default/waybar/indicators/idle.sh"))]
|
||||
command: ["bash", "-lc", root.commandWithOmarchyPath(root.shellQuote(root.omarchyPath + "/default/quickshell/omarchy-shell/scripts/indicators/idle.sh"))]
|
||||
stdout: StdioCollector {
|
||||
waitForEnd: true
|
||||
onStreamFinished: root.updateIndicator("idle", text)
|
||||
@@ -813,7 +813,7 @@ Item {
|
||||
|
||||
Process {
|
||||
id: notificationSilencingProc
|
||||
command: ["bash", "-lc", root.commandWithOmarchyPath(root.shellQuote(root.omarchyPath + "/default/waybar/indicators/notification-silencing.sh"))]
|
||||
command: ["bash", "-lc", root.commandWithOmarchyPath(root.shellQuote(root.omarchyPath + "/default/quickshell/omarchy-shell/scripts/indicators/notification-silencing.sh"))]
|
||||
stdout: StdioCollector {
|
||||
waitForEnd: true
|
||||
onStreamFinished: root.updateIndicator("notifications", text)
|
||||
|
||||
@@ -135,7 +135,6 @@ ufw-docker
|
||||
unzip
|
||||
usage
|
||||
uwsm
|
||||
waybar
|
||||
whois
|
||||
wireless-regdb
|
||||
wiremix
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Omarchy logo in a font for Waybar use
|
||||
# Omarchy logo glyphs as a font (used by the omarchy-shell bar's left module)
|
||||
mkdir -p ~/.local/share/fonts
|
||||
cp ~/.local/share/omarchy/config/omarchy.ttf ~/.local/share/fonts/
|
||||
fc-cache
|
||||
|
||||
@@ -88,7 +88,7 @@ assert_output_contains "bare group includes browser route" "$output" "omarchy in
|
||||
|
||||
output=$("$CLI" toggle)
|
||||
assert_output_contains "bare root command with children renders help" "$output" "Toggle commands"
|
||||
assert_output_contains "bare toggle help includes child route" "$output" "omarchy toggle waybar"
|
||||
assert_output_contains "bare toggle help includes child route" "$output" "omarchy toggle nightlight"
|
||||
|
||||
output=$("$CLI" pkg --help)
|
||||
assert_output_contains "package group includes pkg add fallback route" "$output" "omarchy pkg add <packages...>"
|
||||
|
||||
Reference in New Issue
Block a user