From 4f502322bd0d6dfc91831856954299a2fc09896d Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Thu, 7 May 2026 12:21:04 -0400 Subject: [PATCH 01/31] Update pi package source --- install/packaging/npx.sh | 2 +- migrations/1778079164.sh | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 migrations/1778079164.sh diff --git a/install/packaging/npx.sh b/install/packaging/npx.sh index c68c83f7..172a37a2 100644 --- a/install/packaging/npx.sh +++ b/install/packaging/npx.sh @@ -3,5 +3,5 @@ omarchy-npx-install @google/gemini-cli gemini omarchy-npx-install @github/copilot copilot omarchy-npx-install opencode-ai opencode omarchy-npx-install playwright playwright-cli -omarchy-npx-install @mariozechner/pi-coding-agent pi +omarchy-npx-install @earendil-works/pi-coding-agent pi omarchy-npx-install @kitlangton/ghui ghui diff --git a/migrations/1778079164.sh b/migrations/1778079164.sh new file mode 100644 index 00000000..6e8fa632 --- /dev/null +++ b/migrations/1778079164.sh @@ -0,0 +1,7 @@ +echo "Update Pi CLI wrapper package" + +pi_bin="$HOME/.local/bin/pi" + +if [[ -f $pi_bin ]] && grep -q '^package="@mariozechner/pi-coding-agent"$' "$pi_bin"; then + sed -i 's|^package="@mariozechner/pi-coding-agent"$|package="@earendil-works/pi-coding-agent"|' "$pi_bin" +fi From 402da79f54e6442b0b63724106a6ae99e1fe723a Mon Sep 17 00:00:00 2001 From: Mateusz Kowalczyk Date: Thu, 7 May 2026 19:12:48 +0200 Subject: [PATCH 02/31] Install hardware video acceleration for non-X-series Panther Lake Chips (#5655) * Adjust condition to also match non-X series Panther Lake GPUs. * Add migration to install GPU acceleration on non-X Panther Lake systems. * Update comment with Non-Arc Panther Lake GPUs mentioned. * Simplify conditions in the migration --- install/config/hardware/intel/video-acceleration.sh | 4 ++-- migrations/1778165347.sh | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 migrations/1778165347.sh diff --git a/install/config/hardware/intel/video-acceleration.sh b/install/config/hardware/intel/video-acceleration.sh index 33cc6fbe..bbcc1fe9 100644 --- a/install/config/hardware/intel/video-acceleration.sh +++ b/install/config/hardware/intel/video-acceleration.sh @@ -1,8 +1,8 @@ # This installs hardware video acceleration for Intel GPUs if INTEL_GPU=$(lspci | grep -iE 'vga|3d|display' | grep -i 'intel'); then - # HD Graphics / Iris / Xe / Arc use intel-media-driver + VPL - if [[ ${INTEL_GPU,,} =~ (hd\ graphics|uhd\ graphics|xe|iris|arc) ]]; then + # HD Graphics / Iris / Xe / Arc / Non-Arc Panther Lake use intel-media-driver + VPL + if [[ ${INTEL_GPU,,} =~ (hd\ graphics|uhd\ graphics|xe|iris|arc|panther\ lake) ]]; then omarchy-pkg-add intel-media-driver libvpl vpl-gpu-rt elif [[ ${INTEL_GPU,,} =~ "gma" ]]; then # Older generations from 2008 to ~2014-2017 use libva-intel-driver diff --git a/migrations/1778165347.sh b/migrations/1778165347.sh new file mode 100644 index 00000000..cbd35fec --- /dev/null +++ b/migrations/1778165347.sh @@ -0,0 +1,5 @@ +echo "Install hardware video acceleration for Intel GPUs on non-X Panther Lake systems" + +if lspci | grep -iE 'vga|3d|display' | grep -i 'intel' | grep -i 'panther lake' | grep -qi 'intel graphics'; then + bash "$OMARCHY_PATH/install/config/hardware/intel/video-acceleration.sh" +fi From fa1ed01cd72246b91f94a5996e5f19a05201931f Mon Sep 17 00:00:00 2001 From: Patrick Rodrigues <263442757+patrickrodrigues-aa@users.noreply.github.com> Date: Thu, 7 May 2026 11:43:27 -0600 Subject: [PATCH 03/31] Run SwayOSD as a session service (#5656) * Run SwayOSD as a session service * Restart SwayOSD after clean exits * We don't need the input backend (as we manage the hotkeys in Hyprland) * Ensure we cleanup the old service starter * Not needed * Not needed either * Clean up migration --------- Co-authored-by: David Heinemeier Hansson --- bin/omarchy-first-run | 1 + bin/omarchy-restart-swayosd | 6 +++++- config/systemd/user/swayosd-server.service | 13 +++++++++++++ default/hypr/autostart.conf | 1 - install/first-run/swayosd.sh | 2 ++ migrations/1778171768.sh | 12 ++++++++++++ 6 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 config/systemd/user/swayosd-server.service create mode 100644 install/first-run/swayosd.sh create mode 100644 migrations/1778171768.sh diff --git a/bin/omarchy-first-run b/bin/omarchy-first-run index 6ad54141..023d1a65 100755 --- a/bin/omarchy-first-run +++ b/bin/omarchy-first-run @@ -16,6 +16,7 @@ if [[ -f $FIRST_RUN_MODE ]]; then bash "$OMARCHY_PATH/install/first-run/firewall.sh" bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh" bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh" + bash "$OMARCHY_PATH/install/first-run/swayosd.sh" bash "$OMARCHY_PATH/install/first-run/gtk-primary-paste.sh" bash "$OMARCHY_PATH/install/first-run/elephant.sh" omarchy-hook-install post-update "$OMARCHY_PATH/install/first-run/install-voxtype.hook" diff --git a/bin/omarchy-restart-swayosd b/bin/omarchy-restart-swayosd index 19f4e78d..22a14217 100755 --- a/bin/omarchy-restart-swayosd +++ b/bin/omarchy-restart-swayosd @@ -2,4 +2,8 @@ # omarchy:summary=Restart the SwayOSD server -omarchy-restart-app swayosd-server +if systemctl --user is-enabled --quiet swayosd-server.service; then + systemctl --user restart swayosd-server.service +else + omarchy-restart-app swayosd-server +fi diff --git a/config/systemd/user/swayosd-server.service b/config/systemd/user/swayosd-server.service new file mode 100644 index 00000000..55c7f9c2 --- /dev/null +++ b/config/systemd/user/swayosd-server.service @@ -0,0 +1,13 @@ +[Unit] +Description=SwayOSD server +PartOf=graphical-session.target +After=graphical-session.target + +[Service] +Type=simple +ExecStart=/usr/bin/swayosd-server +Restart=always +RestartSec=2 + +[Install] +WantedBy=graphical-session.target diff --git a/default/hypr/autostart.conf b/default/hypr/autostart.conf index 394a5f32..5cdb875d 100644 --- a/default/hypr/autostart.conf +++ b/default/hypr/autostart.conf @@ -3,7 +3,6 @@ exec-once = uwsm-app -- mako exec-once = ! omarchy-toggle-enabled waybar-off && uwsm-app -- waybar exec-once = uwsm-app -- fcitx5 --disable notificationitem exec-once = uwsm-app -- swaybg -i ~/.config/omarchy/current/background -m fill -exec-once = uwsm-app -- swayosd-server exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 exec-once = omarchy-first-run exec-once = omarchy-powerprofiles-init diff --git a/install/first-run/swayosd.sh b/install/first-run/swayosd.sh new file mode 100644 index 00000000..49db63f3 --- /dev/null +++ b/install/first-run/swayosd.sh @@ -0,0 +1,2 @@ +systemctl --user daemon-reload +systemctl --user enable --now swayosd-server.service diff --git a/migrations/1778171768.sh b/migrations/1778171768.sh new file mode 100644 index 00000000..ae7e5789 --- /dev/null +++ b/migrations/1778171768.sh @@ -0,0 +1,12 @@ +echo "Run SwayOSD as a supervised session service" + +mkdir -p ~/.config/systemd/user +cp "$OMARCHY_PATH/config/systemd/user/swayosd-server.service" ~/.config/systemd/user/swayosd-server.service + +if [[ -f ~/.config/hypr/autostart.conf ]]; then + sed -i '/^exec-once = uwsm-app -- swayosd-server$/d' ~/.config/hypr/autostart.conf +fi + +pkill -x swayosd-server || true + +bash "$OMARCHY_PATH/install/first-run/swayosd.sh" From 0c6bd1929fd32ba9ef9eed6a4da484998e613e04 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 7 May 2026 19:44:19 +0200 Subject: [PATCH 04/31] Force metric return units --- bin/omarchy-weather-status | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-weather-status b/bin/omarchy-weather-status index 4175e345..e3e5b6bb 100755 --- a/bin/omarchy-weather-status +++ b/bin/omarchy-weather-status @@ -2,7 +2,7 @@ # omarchy:summary=Returns a formatted weather status string with temperature and wind speed. -weather=$(curl -fsS --max-time 4 "https://wttr.in?format=%l|%t|%w" 2>/dev/null | tr -d '\n') +weather=$(curl -fsS --max-time 4 "https://wttr.in?m&format=%l|%t|%w" 2>/dev/null | tr -d '\n') if [[ -z $weather ]]; then echo "Weather unavailable" From 5c3ca6084b057db29970bd7b4518bfca5e7a7463 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 8 May 2026 08:35:28 +0200 Subject: [PATCH 05/31] Group duplicate notifications --- default/mako/core.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/default/mako/core.ini b/default/mako/core.ini index 78c24452..d8837b92 100644 --- a/default/mako/core.ini +++ b/default/mako/core.ini @@ -1,4 +1,5 @@ anchor=top-right +group-by=app-name,summary,body default-timeout=5000 width=420 outer-margin=20 From a43c304d212a6753f8973d93f3dc39276a17a5e1 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 8 May 2026 08:39:25 +0200 Subject: [PATCH 06/31] Add post-boot.d hooks and give daily weather as an example --- config/omarchy/hooks/post-boot.d/weather.sample | 10 ++++++++++ default/hypr/autostart.conf | 3 +++ migrations/1778222128.sh | 7 +++++++ 3 files changed, 20 insertions(+) create mode 100644 config/omarchy/hooks/post-boot.d/weather.sample create mode 100644 migrations/1778222128.sh diff --git a/config/omarchy/hooks/post-boot.d/weather.sample b/config/omarchy/hooks/post-boot.d/weather.sample new file mode 100644 index 00000000..60a1c88f --- /dev/null +++ b/config/omarchy/hooks/post-boot.d/weather.sample @@ -0,0 +1,10 @@ +#!/bin/bash + +# Show the weather status notification after Omarchy has started. +# To put it into use, remove .sample from this file name. + +weather=$(omarchy-weather-status 2>/dev/null) || true + +if [[ -n $weather && $weather != "Weather unavailable" ]]; then + notify-send -u low "$weather" +fi diff --git a/default/hypr/autostart.conf b/default/hypr/autostart.conf index 5cdb875d..0a226db1 100644 --- a/default/hypr/autostart.conf +++ b/default/hypr/autostart.conf @@ -11,3 +11,6 @@ exec-once = uwsm-app -- omarchy-hyprland-monitor-watch # Slow app launch fix -- set systemd vars exec-once = systemctl --user import-environment $(env | cut -d'=' -f 1) exec-once = dbus-update-activation-environment --systemd --all + +# Run post-boot hooks after startup config has loaded +exec-once = sleep 2 && omarchy-hook post-boot diff --git a/migrations/1778222128.sh b/migrations/1778222128.sh new file mode 100644 index 00000000..d348b389 --- /dev/null +++ b/migrations/1778222128.sh @@ -0,0 +1,7 @@ +echo "Add sample post-boot hook" + +mkdir -p ~/.config/omarchy/hooks/post-boot.d + +if [[ ! -f ~/.config/omarchy/hooks/post-boot.d/weather.sample ]]; then + cp "$OMARCHY_PATH/config/omarchy/hooks/post-boot.d/weather.sample" ~/.config/omarchy/hooks/post-boot.d/weather.sample +fi From 5971bab9d1dc9319267ece2a496fcb9e621137e1 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 8 May 2026 09:01:09 +0200 Subject: [PATCH 07/31] Extract notification command for using the correct spacing --- bin/omarchy-notification-send | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100755 bin/omarchy-notification-send diff --git a/bin/omarchy-notification-send b/bin/omarchy-notification-send new file mode 100755 index 00000000..0a1c4e7c --- /dev/null +++ b/bin/omarchy-notification-send @@ -0,0 +1,32 @@ +#!/bin/bash + +# omarchy:summary=Send a desktop notification with Omarchy glyph and body spacing +# omarchy:args= [description] [notify-send options] +# omarchy:examples=omarchy notification send "󰔛" "Reminder" "5 minutes are up" -u critical + +set -euo pipefail + +if (($# < 2)); then + echo "Usage: omarchy-notification-send [description] [notify-send options]" + exit 1 +fi + +glyph=$1 +headline=$2 +description=${3:-} +shift 2 + +if (($# > 0)) && [[ $1 != -* ]]; then + shift +else + description="" +fi + +summary="$glyph $headline" + +if [[ -n $description ]]; then + description=$(sed 's/^/ /' <<<"$description") + notify-send "$@" "$summary" "$description" +else + notify-send "$@" "$summary" +fi From 9f187b55da990fac72d3a47b20deb157a0e6e082 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 8 May 2026 11:56:06 +0200 Subject: [PATCH 08/31] Make sure the Omarchy agent skill is available for all harnesses --- install/config/omarchy-ai-skill.sh | 9 ++++++--- migrations/1778233760.sh | 3 +++ 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 migrations/1778233760.sh diff --git a/install/config/omarchy-ai-skill.sh b/install/config/omarchy-ai-skill.sh index 31f748cf..8eec4b95 100644 --- a/install/config/omarchy-ai-skill.sh +++ b/install/config/omarchy-ai-skill.sh @@ -1,3 +1,6 @@ -# Place in ~/.claude/skills since all tools populate from there as well as their own sources -mkdir -p ~/.claude/skills -ln -s $OMARCHY_PATH/default/omarchy-skill ~/.claude/skills/omarchy +# Place in each assistant's global skills directory so the Omarchy skill is available on first install +mkdir -p ~/.agents/skills ~/.claude/skills ~/.codex/skills ~/.pi/agent/skills +ln -sfn "$OMARCHY_PATH/default/omarchy-skill" ~/.agents/skills/omarchy +ln -sfn "$OMARCHY_PATH/default/omarchy-skill" ~/.claude/skills/omarchy +ln -sfn "$OMARCHY_PATH/default/omarchy-skill" ~/.codex/skills/omarchy +ln -sfn "$OMARCHY_PATH/default/omarchy-skill" ~/.pi/agent/skills/omarchy diff --git a/migrations/1778233760.sh b/migrations/1778233760.sh new file mode 100644 index 00000000..522f14ab --- /dev/null +++ b/migrations/1778233760.sh @@ -0,0 +1,3 @@ +echo "Add Omarchy AI skill to pi, Codex, and shared Agent Skills directories" + +source "$OMARCHY_PATH/install/config/omarchy-ai-skill.sh" From 129c39448c8f44342861957def7e27838507b4a8 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 8 May 2026 11:58:12 +0200 Subject: [PATCH 09/31] Reminders (#5669) * Extract notification command for using the correct spacing * Add easy to set reminders * More human * Clear and direct hotkeys * Split * Bake reminders into the skill --- bin/omarchy | 1 + bin/omarchy-menu | 46 ++++++++- bin/omarchy-reminder | 139 +++++++++++++++++++++++++++ default/hypr/bindings/utilities.conf | 7 +- default/omarchy-skill/SKILL.md | 21 +++- 5 files changed, 209 insertions(+), 5 deletions(-) create mode 100755 bin/omarchy-reminder diff --git a/bin/omarchy b/bin/omarchy index d4fd2570..eda79a74 100755 --- a/bin/omarchy +++ b/bin/omarchy @@ -54,6 +54,7 @@ GROUP_DESCRIPTIONS[plymouth]="Plymouth boot theme management" GROUP_DESCRIPTIONS[powerprofiles]="Power profile management" GROUP_DESCRIPTIONS[refresh]="Reset config to defaults" GROUP_DESCRIPTIONS[reinstall]="Reinstall and reset workflows" +GROUP_DESCRIPTIONS[reminder]="Desktop notification reminders" GROUP_DESCRIPTIONS[remove]="Removal workflows" GROUP_DESCRIPTIONS[restart]="Restart Omarchy components" GROUP_DESCRIPTIONS[setup]="Interactive setup wizards" diff --git a/bin/omarchy-menu b/bin/omarchy-menu index ec9a5aae..c8746cfb 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -43,6 +43,12 @@ menu() { echo -e "$options" | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 630 -p "$prompt…" "${args[@]}" 2>/dev/null } +input() { + local prompt="$1" + + omarchy-launch-walker --dmenu --inputonly --width 295 --minheight 1 --maxheight 1 -p "$prompt…" 2>/dev/null +} + terminal() { xdg-terminal-exec --app-id=org.omarchy.terminal "$@" } @@ -93,7 +99,8 @@ show_learn_menu() { } show_trigger_menu() { - case $(menu "Trigger" " Capture\n󰧸 Transcode\n Share\n󰔎 Toggle\n Hardware") in + case $(menu "Trigger" "󰔛 Reminder\n Capture\n󰧸 Transcode\n Share\n󰔎 Toggle\n Hardware") in + *Reminder*) show_reminder_menu ;; *Capture*) show_capture_menu ;; *Transcode*) show_transcode_menu ;; *Share*) show_share_menu ;; @@ -103,6 +110,41 @@ show_trigger_menu() { esac } +show_reminder_menu() { + case $(menu "Reminder" "󰔛 Set one\n󰔛 Show all\n󰔛 Clear all") in + *Set*) show_custom_reminder_input ;; + *"Show all"*) omarchy-reminder show ;; + *"Clear all"*) omarchy-reminder clear ;; + *) back_to show_trigger_menu ;; + esac +} + +show_custom_reminder_input() { + local minutes + minutes=$(input "Remind in minutes") + + if [[ $minutes =~ ^[0-9]+$ ]] && ((minutes > 0)); then + show_reminder_message_input "$minutes" + elif [[ -n $minutes ]]; then + omarchy-notification-send "󰔛" "Invalid reminder" "Enter the number of minutes" -u critical + show_custom_reminder_input + else + back_to show_reminder_menu + fi +} + +show_reminder_message_input() { + local minutes="$1" + local message + message=$(input "Reminder message") + + if [[ -n $message ]]; then + omarchy-reminder "$minutes" "$message" + else + omarchy-reminder "$minutes" + fi +} + show_capture_menu() { case $(menu "Capture" " Screenshot\n Screenrecord\n󰴑 Text Extraction\n󰃉 Color") in *Screenshot*) omarchy-capture-screenshot ;; @@ -816,6 +858,8 @@ go_to_menu() { *hardware*) show_hardware_menu ;; *share*) show_share_menu ;; *transcode*) show_transcode_menu ;; + *reminder-set*) show_custom_reminder_input ;; + *reminder*) show_reminder_menu ;; *background*) show_background_menu ;; *capture*) show_capture_menu ;; *style*) show_style_menu ;; diff --git a/bin/omarchy-reminder b/bin/omarchy-reminder new file mode 100755 index 00000000..1dc59097 --- /dev/null +++ b/bin/omarchy-reminder @@ -0,0 +1,139 @@ +#!/bin/bash + +# omarchy:summary=Set and show lightweight desktop notification reminders +# omarchy:args= [message] | show | clear +# omarchy:examples=omarchy reminder 5 | omarchy reminder 30 "Check the oven" | omarchy reminder show | omarchy reminder clear + +set -euo pipefail + +format_remaining() { + local seconds=$1 + local minutes=$((seconds / 60)) + local remainder=$((seconds % 60)) + + if ((minutes > 0 && remainder > 0)); then + echo "${minutes}m ${remainder}s" + elif ((minutes > 0)); then + echo "${minutes}m" + else + echo "${remainder}s" + fi +} + +parse_systemd_timespan() { + local timespan="$1" + local total=0 + local value unit whole + + while read -r value unit; do + whole=${value%.*} + + case $unit in + d) total=$((total + whole * 86400)) ;; + h) total=$((total + whole * 3600)) ;; + min) total=$((total + whole * 60)) ;; + s) total=$((total + whole)) ;; + ms | us) ;; + esac + done < <(grep -oE '[0-9]+([.][0-9]+)?(d|h|min|s|ms|us)' <<<"$timespan" | sed -E 's/^([0-9.]+)([a-z]+)$/\1 \2/') + + echo "$total" +} + +show_reminders() { + local timers timer next next_seconds uptime remaining body="" + local reminder_dir="${XDG_RUNTIME_DIR:-/tmp}/omarchy-reminders" + local reminder_message="" + + timers=$(systemctl --user list-timers --all --no-legend --no-pager "omarchy-reminder-*.timer" 2>/dev/null | awk '{ print $(NF - 1) }') + uptime=${SECONDS_SINCE_BOOT:-$(awk '{ print int($1) }' /proc/uptime)} + + for timer in $timers; do + next=$(systemctl --user show -P NextElapseUSecMonotonic "$timer" 2>/dev/null || true) + [[ -z $next ]] && continue + + next_seconds=$(parse_systemd_timespan "$next") + ((next_seconds <= uptime)) && continue + + remaining=$((next_seconds - uptime)) + reminder=${timer%.timer} + reminder=${reminder#omarchy-reminder-} + set_at=${reminder##*-} + reminder_minutes=${reminder%%m-*} + reminder_message="" + [[ -f $reminder_dir/${timer%.timer}.message ]] && reminder_message=$(<"$reminder_dir/${timer%.timer}.message") + + if [[ -n $reminder_message ]]; then + body+="$reminder_message in $(format_remaining $remaining) ($(date -d "@$((set_at + reminder_minutes * 60))" +%-H:%M))"$'\n' + else + body+="${reminder_minutes}-min reminder in $(format_remaining $remaining) ($(date -d "@$((set_at + reminder_minutes * 60))" +%-H:%M))"$'\n' + fi + done + + if [[ -z $body ]]; then + omarchy-notification-send "󰔛" "Upcoming reminders" "No outstanding reminders" -u low + else + omarchy-notification-send "󰔛" "Upcoming reminders" "${body%$'\n'}" -u low + fi +} + +clear_reminders() { + local units + local reminder_dir="${XDG_RUNTIME_DIR:-/tmp}/omarchy-reminders" + + units=$(systemctl --user list-timers --all --no-legend --no-pager "omarchy-reminder-*.timer" 2>/dev/null | awk '{ print $(NF - 1), $NF }') + + if [[ -n $units ]]; then + xargs -r systemctl --user stop <<<"$units" || true + fi + + rm -f "$reminder_dir"/omarchy-reminder-*.message 2>/dev/null || true + omarchy-notification-send "󰔛" "All reminders have been cleared" -u low +} + +case ${1:-} in +show | list) + show_reminders + exit 0 + ;; +clear) + clear_reminders + exit 0 + ;; +esac + +minutes=${1:-} +shift || true +message="$*" +custom_message="$message" + +if [[ -z $minutes ]] || [[ ! $minutes =~ ^[0-9]+$ ]] || ((minutes == 0)); then + echo "Usage: omarchy-reminder [message]" + echo " omarchy-reminder show" + echo " omarchy-reminder clear" + exit 1 +fi + +if [[ -z $message ]]; then + message="Your ${minutes} minutes are up" +fi + +set_at=$(date +%s) +remind_at=$(date -d "+${minutes} minutes" +%H:%M) +unit="omarchy-reminder-${minutes}m-$set_at" +reminder_dir="${XDG_RUNTIME_DIR:-/tmp}/omarchy-reminders" +message_file="$reminder_dir/$unit.message" +confirmation="You'll be reminded at $remind_at" +confirmation_title="Reminder set for ${minutes} minutes" + +mkdir -p "$reminder_dir" + +if [[ -n $custom_message ]]; then + printf "%s" "$custom_message" >"$message_file" + confirmation_title="$custom_message in ${minutes} minutes" +fi + +systemd-run --user --quiet --collect --on-active="${minutes}m" --unit="$unit" \ + bash -c 'omarchy-notification-send "󰔛" "Reminder" "$1" -u critical; rm -f "$2"' bash "$message" "$message_file" + +omarchy-notification-send "󰔛" "$confirmation_title" "$confirmation" -u low diff --git a/default/hypr/bindings/utilities.conf b/default/hypr/bindings/utilities.conf index c152f884..8bac901a 100644 --- a/default/hypr/bindings/utilities.conf +++ b/default/hypr/bindings/utilities.conf @@ -44,7 +44,12 @@ bindd = SUPER CTRL, PRINT, Extract text (OCR) from screenshot, exec, omarchy-cap bindd = SUPER CTRL, S, Share, exec, omarchy-menu share # Transcoding -bindd = SUPER CTRL, R, Transcode, exec, omarchy-menu transcode +bindd = SUPER CTRL, PERIOD, Transcode, exec, omarchy-menu transcode + +# Reminders +bindd = SUPER CTRL, R, Set reminder, exec, omarchy-menu reminder-set +bindd = SUPER CTRL ALT, R, Show reminders, exec, omarchy-reminder show +bindd = SUPER SHIFT CTRL, R, Clear reminders, exec, omarchy-reminder clear # Waybar-less information bindd = SUPER CTRL ALT, T, Show time, exec, notify-send -u low " $(date +"%A %H:%M · %d %B %Y · Week %V")" diff --git a/default/omarchy-skill/SKILL.md b/default/omarchy-skill/SKILL.md index 5f9d5a7e..8aa5ffaf 100644 --- a/default/omarchy-skill/SKILL.md +++ b/default/omarchy-skill/SKILL.md @@ -6,8 +6,8 @@ description: > ~/.config/alacritty/, ~/.config/foot/, ~/.config/kitty/, ~/.config/ghostty/, ~/.config/mako/, or ~/.config/omarchy/. Triggers: Hyprland, window rules, animations, keybindings, monitors, gaps, borders, blur, opacity, waybar, walker, terminal config, themes, - wallpaper, night light, idle, lock screen, screenshots, layer rules, workspace - settings, display config, and user-facing omarchy commands. Excludes Omarchy + wallpaper, 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. --- @@ -30,7 +30,7 @@ It is not for contributing to Omarchy source code. - Layer rules, workspace settings, display/monitor configuration - Themes, wallpapers, fonts, appearance changes - User-facing `omarchy` commands (`omarchy theme ...`, `omarchy refresh ...`, `omarchy restart ...`, etc.) -- Screenshots, screen recording, night light, idle behavior, lock screen +- Screenshots, screen recording, reminders, night light, idle behavior, lock screen **If you're about to edit a config file in ~/.config/ on this system, STOP and use this skill first.** @@ -118,6 +118,7 @@ Run `omarchy --help` for the full list. The most common groups: | `omarchy install` | Install optional software / packages | `omarchy install docker dbs` | | `omarchy launch` | Launch apps | `omarchy launch browser` | | `omarchy capture` | Screenshots and recordings | `omarchy capture screenshot` | +| `omarchy reminder` | Desktop notification reminders | `omarchy reminder 15 "Pickup Jack"` | | `omarchy pkg` | Package management | `omarchy pkg install ` | | `omarchy setup` | Initial setup tasks | `omarchy setup fingerprint` | | `omarchy update` | System updates | `omarchy update` | @@ -358,6 +359,17 @@ When user requests system changes: 5. **Is it a package install?** Use `omarchy install package ` (or `omarchy pkg aur add ` for AUR-only packages) 6. **Unsure if command exists?** Run `omarchy commands` (or `omarchy --help` for one group) +### Reminder Requests + +When the user asks to set a reminder, use `omarchy reminder [message]` directly. Convert natural language durations to minutes and title-case short reminder labels when appropriate. + +```bash +omarchy reminder 15 "Pickup Jack" +omarchy reminder 60 "Check laundry" +omarchy reminder show +omarchy reminder clear +``` + ## Out of Scope This skill intentionally does not cover Omarchy source development. Do not use this skill for: @@ -372,6 +384,9 @@ This skill intentionally does not cover Omarchy source development. Do not use t - "Configure my external monitor" -> Edit `~/.config/hypr/monitors.conf` - "Make the window gaps smaller" -> Edit `~/.config/hypr/looknfeel.conf` - "Set up night light to turn on at sunset" -> `omarchy toggle nightlight` or edit `~/.config/hypr/hyprsunset.conf` +- "Set a reminder to pickup jack in 15 minutes" -> `omarchy reminder 15 "Pickup Jack"` +- "Show my reminders" -> `omarchy reminder show` +- "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` From cbf4044c70f3692002f7db4eafce7de9c52441c2 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 8 May 2026 12:40:37 +0200 Subject: [PATCH 10/31] Omarchy menu helpers Get more stuff out of the terminal --- bin/omarchy-menu-file | 45 +++++++++++++++++++++++++++++++++++++++++ bin/omarchy-menu-input | 16 +++++++++++++++ bin/omarchy-menu-select | 38 ++++++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+) create mode 100755 bin/omarchy-menu-file create mode 100755 bin/omarchy-menu-input create mode 100755 bin/omarchy-menu-select diff --git a/bin/omarchy-menu-file b/bin/omarchy-menu-file new file mode 100755 index 00000000..37048e9e --- /dev/null +++ b/bin/omarchy-menu-file @@ -0,0 +1,45 @@ +#!/bin/bash + +# omarchy:summary=Pick a file with Walker +# omarchy:group=menu +# omarchy:name=file +# omarchy:args=label paths formats [walker args...] +# omarchy:examples=omarchy menu file "Select image" "$HOME/Pictures" "jpg png webp"|omarchy-menu-file "Select media" "$HOME/Pictures:$HOME/Videos" "jpg png mp4 mov" --width 800 + +set -euo pipefail + +if (( $# < 3 )); then + echo "Usage: omarchy-menu-file