Compare commits

..
Author SHA1 Message Date
David Heinemeier Hansson 11b695e642 One more 2026-05-11 12:57:33 +02:00
David Heinemeier Hansson 4b8e941380 Use consistent glyph 2026-05-11 12:57:08 +02:00
David Heinemeier Hansson 3071dd5509 Extract selection logic into cli 2026-05-11 12:54:34 +02:00
David Heinemeier Hansson 112282679f Tweak installer 2026-05-11 12:49:18 +02:00
David Heinemeier Hansson 97e7bae6b9 Turn a single RetroArch game into its own application launcher 2026-05-11 12:39:09 +02:00
David Heinemeier Hansson fc787cd040 Agents should use the notification helper 2026-05-11 12:13:33 +02:00
David Heinemeier Hansson b2f89061c7 Add hunk for diffing as a lazy-install npx 2026-05-11 11:31:42 +02:00
92f93cb0e5 Persist Bluetooth power state across reboots (#5683)
* Persist Bluetooth power state across reboots

BlueZ defaults to AutoEnable=true, which forces controllers on at boot
regardless of the last user-set state. Setting AutoEnable=false makes
bluetoothd respect the persisted Powered state, so toggling off in
bluetui (or any DBus client) survives a reboot.

Adds the change to the install path and a migration for existing setups.

* Set reboot-required in Bluetooth persistence migration

Per review feedback, the AutoEnable=false change only takes effect on
bluetoothd startup. Without setting reboot-required, omarchy-update-restart
won't prompt the user to reboot, so the fix would only kick in at their
next organic reboot — by which time the bug may appear unfixed.

Matches the convention in migrations/1776346552.sh and similar.

* No need to ask for a reboot when this is available on the next one

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-05-11 10:21:16 +02:00
c4dbf12920 Add pre-refresh-pacman.d hooks for custom repository support (#5681)
Fires after the channel template is copied to /etc/pacman.conf and before
`pacman -Syyuu` runs, letting users layer custom Pacman repositories or
IgnorePkg directives onto the freshly-written config so they're respected
by the upgrade. Useful for users running on overlay distros (CachyOS,
Chaotic-AUR, internal company repos) where a wipe-and-reinstall would
otherwise pull vanilla Arch versions.

Ships with `pre-refresh-pacman.d/add-custom-repo.sample` showing the
pattern.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 10:19:12 +02:00
RenéandGitHub 324c9a4054 Fix fontconfig monospace binding overriding app-specific fonts (#5700)
Change monospace match from mode="assign" binding="strong" to
mode="append" binding="same" so the system font acts as a fallback
instead of overriding explicit app font configs like Ghostty's font-family.

Add migration to fix existing user configs.

Fixes #5675
2026-05-11 10:15:37 +02:00
David Heinemeier Hansson 378ba984ca Checkout the full git so branch switching is still possible
Closes #5701
2026-05-11 10:11:53 +02:00
David Heinemeier Hansson 705e26eb8a Migrate the existing imv configs 2026-05-11 10:00:28 +02:00
Jon KinneyandGitHub cea144bc51 Trash imv deletes; add Ctrl+E to edit in Satty (#5721)
* Trash imv deletes; add Ctrl+E to edit in Satty

Ctrl+X / Ctrl+Shift+X now move the image to the freedesktop trash via
`gio trash` instead of unconditional `rm`, so accidental presses are
recoverable from the file manager's Trash.

Adds Ctrl+E to open the current image in Satty (already in
omarchy-base.packages) and quit imv, mirroring the typical
screenshot → annotate workflow.

* Add -- separator to gio trash invocations

Prevents filenames starting with - from being parsed as options.
2026-05-11 10:00:20 +02:00
46365b7d4d Scope branding image pickers to ~/Pictures, fix About transcode mode (#5733)
* Scope branding image pickers to ~/Pictures, fix About transcode mode

The "Set From Image" path in both Style → About and Style → Screensaver
was scanning all of $HOME for *.svg / *.png and feeding the result into
Walker dmenu. On a populated home directory this can be tens of thousands
of entries, leaving the picker effectively unusable.

Scope the picker to ${XDG_PICTURES_DIR:-$HOME/Pictures}, matching the
pattern already used in omarchy-capture-screenshot.

While here, drop the hardcoded --mode block from omarchy-branding-about
so the About transcode falls back to the default braille mode, matching
what omarchy-branding-screensaver does and what stock about.txt ships
with. The reduced --width 54 stays so the result fits the fastfetch
logo column.

* Explain the scope of the picker

---------

Co-authored-by: Gavin Nugent <245706154+28allday@users.noreply.github.com>
Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-05-11 09:53:07 +02:00
David Heinemeier Hansson 6afb51298c Hide the unused bits 2026-05-10 21:29:58 +02:00
David Heinemeier Hansson cd461059d0 Just a little wider 2026-05-10 20:33:34 +02:00
David Heinemeier Hansson f09743b2e9 libretro-vice is now an explosion of minor pkgs 2026-05-10 16:47:21 +02:00
David Heinemeier Hansson 8788dd2eb2 Fix arg order 2026-05-10 16:44:09 +02:00
David Heinemeier Hansson 0af7cc4a76 Fix overlap 2026-05-10 16:39:01 +02:00
David Heinemeier Hansson f426ae0de8 Lookup code symbols for better keybindings list 2026-05-10 16:31:08 +02:00
642d87d443 Add fine and coarse window resize steps (#5717)
* add additional window resize shortcuts

* add additional window resize shortcuts

* Use bigger difference between the steps

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-05-10 16:26:02 +02:00
afcfaf6b1e Control Waybar position (#5730)
* Waybar positioning and shape

* Reveal weather again on left/right

* Fix indicators moving bar left/right

* Clean it up

* Cleanup

* One step forward, one step backwards

* Fix styles

* More style massage

* More tweaks

* Just position for now

* Fix keys

* No longer needed

* No need to reset

* Simplify

* Reset but protect waybar configs

* Not needed

* Fix glyph

* Not needed

* Cleanup

* Better wording

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-10 15:42:26 +02:00
David Heinemeier Hansson f26cc8f157 Send a notification when we switch 2026-05-10 15:22:41 +02:00
David Heinemeier Hansson 566c106ec1 Better wording 2026-05-10 15:11:47 +02:00
David Heinemeier Hansson 5346bc6db1 Only return state when we are toggling
Otherwise we know it!
2026-05-10 15:08:33 +02:00
David Heinemeier Hansson 0075645f0e Set hyprlock corners too 2026-05-10 15:05:34 +02:00
David Heinemeier Hansson f10c945e00 Add Receive as an option to sharing 2026-05-10 14:50:48 +02:00
David Heinemeier Hansson 8a94891e77 Better glyph 2026-05-10 14:34:44 +02:00
David Heinemeier Hansson 2e29714eee Add integrated Style > Corner controls across hyprland, mako, walker 2026-05-10 14:29:51 +02:00
David Heinemeier Hansson 40a20e2a5c Fix glyph for Zen 2026-05-10 14:28:18 +02:00
David Heinemeier Hansson 8a38615f19 Fix for new notification send 2026-05-10 11:50:30 +02:00
David Heinemeier Hansson 887c7e3751 Set mako corners round or sharp 2026-05-10 11:50:19 +02:00
David Heinemeier Hansson e099f47d53 Add toggling of hyprland window rounded corners 2026-05-10 11:31:02 +02:00
David Heinemeier Hansson 26c1f9c546 Refactor toggles and notifications 2026-05-10 11:26:59 +02:00
David Heinemeier Hansson d3a082ef11 Fix upcoming reminders listing
It was comparing NextElapseUSecMonotonic against /proc/uptime, but those
values aren’t in the same monotonic timeline for user timers, so valid
upcoming reminders were being skipped.
2026-05-10 10:52:20 +02:00
David Heinemeier Hansson 2ab639ac0a Latest version from HANCORE 2026-05-10 10:41:34 +02:00
David Heinemeier Hansson 3d42142b88 Fix group coloring 2026-05-09 22:48:23 +02:00
David Heinemeier Hansson aa6b7f2975 Make the border highlight clearer 2026-05-09 22:35:18 +02:00
David Heinemeier Hansson 47a53a18ba Add Solitude theme by HANCORE 2026-05-09 22:33:10 +02:00
David Heinemeier Hansson b2fb238453 Add Last Horizon theme by HANCORE 2026-05-09 22:05:54 +02:00
David Heinemeier Hansson 676a278653 Slim down now that we are auto-detecting GDK_SCALE 2026-05-09 20:13:04 +02:00
David Heinemeier Hansson 890e3fc8c5 Set the initial GDK_SCALE to match the monitor scale 2026-05-09 19:55:15 +02:00
David Heinemeier Hansson 3eca9573ea Make GDK_SCALE change alongside the general monitor scaling 2026-05-09 19:29:22 +02:00
87 changed files with 1088 additions and 124 deletions
+1
View File
@@ -82,6 +82,7 @@ Use these instead of raw shell commands:
- `omarchy-cmd-missing` / `omarchy-cmd-present` - check for commands
- `omarchy-pkg-missing` / `omarchy-pkg-present` - check for packages
- `omarchy-pkg-add` - install packages (handles both pacman and AUR)
- `omarchy-notification-send` - send desktop notifications; do not call `notify-send` directly
- `omarchy-hw-asus-rog` - detect ASUS ROG hardware (and similar `hw-*` commands)
Exceptions are allowed for bootstrap, preflight, migration, and package-helper scripts where the helper may not be available yet, where the helper itself is being implemented, or where direct package-manager behavior is required.
@@ -0,0 +1,2 @@
[Desktop Entry]
Hidden=true
@@ -0,0 +1,2 @@
[Desktop Entry]
Hidden=true
@@ -0,0 +1,2 @@
[Desktop Entry]
Hidden=true
@@ -0,0 +1,2 @@
[Desktop Entry]
Hidden=true
@@ -0,0 +1,2 @@
[Desktop Entry]
Hidden=true
Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

+3
View File
@@ -40,12 +40,14 @@ GROUP_DESCRIPTIONS[default]="Default application selection"
GROUP_DESCRIPTIONS[dev]="Omarchy development tools"
GROUP_DESCRIPTIONS[drive]="Drive selection and encryption"
GROUP_DESCRIPTIONS[font]="Font management"
GROUP_DESCRIPTIONS[games]="Game launchers and helpers"
GROUP_DESCRIPTIONS[hibernation]="Hibernation setup and removal"
GROUP_DESCRIPTIONS[hook]="User hook runner"
GROUP_DESCRIPTIONS[hw]="Hardware detection and controls"
GROUP_DESCRIPTIONS[hyprland]="Hyprland window, monitor, and toggle controls"
GROUP_DESCRIPTIONS[install]="Optional software installers"
GROUP_DESCRIPTIONS[launch]="Application launchers"
GROUP_DESCRIPTIONS[mako]="Mako notification controls"
GROUP_DESCRIPTIONS[menu]="Omarchy menu commands"
GROUP_DESCRIPTIONS[migrate]="Migration runner"
GROUP_DESCRIPTIONS[notification]="Notification helpers"
@@ -61,6 +63,7 @@ GROUP_DESCRIPTIONS[restart]="Restart Omarchy components"
GROUP_DESCRIPTIONS[setup]="Interactive setup wizards"
GROUP_DESCRIPTIONS[screensaver]="Screensaver branding and animation"
GROUP_DESCRIPTIONS[snapshot]="System snapshots"
GROUP_DESCRIPTIONS[style]="Global UI style controls"
GROUP_DESCRIPTIONS[sudo]="Sudo configuration helpers"
GROUP_DESCRIPTIONS[swayosd]="SwayOSD status display helpers"
GROUP_DESCRIPTIONS[system]="Reboot, shutdown, logout, and lock"
+4 -2
View File
@@ -8,10 +8,12 @@
set -euo pipefail
SOURCE_DIR="${XDG_PICTURES_DIR:-$HOME/Pictures}"
case "${1:-}" in
image)
image=$(omarchy-menu-file "Logo image" "$HOME" "svg png")
if [[ -n $image ]] && omarchy-transcode-ascii "$image" ~/.config/omarchy/branding/about.txt --width 54 --height 26 --mode block; then
image=$(omarchy-menu-file "Pick png/svg from $SOURCE_DIR" "${SOURCE_DIR}" "svg png")
if [[ -n $image ]] && omarchy-transcode-ascii "$image" ~/.config/omarchy/branding/about.txt --width 54 --height 26; then
omarchy-launch-about >/dev/null 2>&1
fi
;;
+3 -1
View File
@@ -8,9 +8,11 @@
set -euo pipefail
SOURCE_DIR="${XDG_PICTURES_DIR:-$HOME/Pictures}"
case "${1:-}" in
image)
image=$(omarchy-menu-file "Logo image" "$HOME" "svg png")
image=$(omarchy-menu-file "Pick png/svg from $SOURCE_DIR" "${SOURCE_DIR}" "svg png")
if [[ -n $image ]] && omarchy-transcode-ascii "$image" ~/.config/omarchy/branding/screensaver.txt; then
omarchy-launch-screensaver force >/dev/null 2>&1
fi
+1 -1
View File
@@ -25,7 +25,7 @@ brave) desktop_id="brave-browser.desktop"; name="Brave"; glyph="󰖟" ;;
brave-origin) desktop_id="brave-origin-beta.desktop"; name="Brave Origin"; glyph="󰖟" ;;
edge) desktop_id="microsoft-edge.desktop"; name="Edge"; glyph="󰇩" ;;
firefox) desktop_id="firefox.desktop"; name="Firefox"; glyph="󰈹" ;;
zen) desktop_id="zen.desktop"; name="Zen"; glyph="󰰷" ;;
zen) desktop_id="zen.desktop"; name="Zen"; glyph="󰖟" ;;
*)
echo "Usage: omarchy-default-browser <chromium|chrome|brave|brave-origin|edge|firefox|zen>"
exit 1
+1
View File
@@ -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/gdk-scale.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"
+39
View File
@@ -0,0 +1,39 @@
#!/bin/bash
# omarchy:summary=List installed RetroArch core names
set -e
core_dir="/usr/lib/libretro"
preferred_cores=(
"Amstrad CPC|cap32"
"Arcade FBNeo|fbneo"
"Arcade MAME|mame"
"Commodore Amiga|puae"
"Commodore C128|vice_x128"
"Commodore C64|vice_x64"
"Commodore VIC-20|vice_xvic"
"Nintendo DS|desmume"
"Nintendo Game Boy / Color|gambatte"
"Nintendo Game Boy Advance|mgba"
"Nintendo GameCube / Wii|dolphin"
"Nintendo NES / Famicom|mesen"
"Nintendo 64|parallel_n64"
"Nintendo SNES / SFC|snes9x"
"NEC PC Engine / TurboGrafx-16|mednafen_pce_fast"
"NEC PC Engine CD / TurboGrafx-CD|mednafen_pce"
"NEC PC Engine SuperGrafx|mednafen_supergrafx"
"Sega Dreamcast|flycast"
"Sega Mega Drive / Master System / Game Gear|genesis_plus_gx"
"Sega Saturn|kronos"
"Sony PlayStation|mednafen_psx_hw"
"Sony PlayStation Portable|ppsspp"
)
[[ -d $core_dir ]] || exit 0
for preferred_core in "${preferred_cores[@]}"; do
label="${preferred_core%%|*}"
core="${preferred_core#*|}"
[[ -f $core_dir/${core}_libretro.so ]] && printf '%s (%s)\n' "$label" "$core"
done
+76
View File
@@ -0,0 +1,76 @@
#!/bin/bash
# omarchy:summary=Create a desktop launcher for a RetroArch game
# omarchy:args=[core path-to-game]
# omarchy:examples=omarchy games retro install snes9x ~/Games/roms/snes/game.sfc | omarchy-games-retro-install /usr/lib/libretro/mgba_libretro.so ~/Games/roms/gba/game.gba
set -e
if (( $# == 0 )); then
mapfile -t cores < <(omarchy-games-retro-cores)
if (( ${#cores[@]} == 0 )); then
omarchy-notification-send -g "󰯉" "No RetroArch cores found" "/usr/lib/libretro"
exit 1
fi
core=$(omarchy-menu-select "RetroArch core" "${cores[@]}") || exit 0
[[ -n $core ]] || exit 0
core="${core##*(}"
core="${core%)}"
game_path=$(omarchy-menu-file "Retro game" "$HOME/Games/roms" "7z bin ccd chd cue dmg elf fds gb gba gbc iso lha m3u md n64 nds nes pbp sfc smc swc zip z64") || exit 0
[[ -n $game_path ]] || exit 0
elif (( $# == 2 )); then
core="$1"
game_path="$2"
else
echo "Usage: omarchy-games-retro-install [core path-to-game]"
echo "Example: omarchy-games-retro-install snes9x ~/Games/roms/snes/game.sfc"
exit 1
fi
if [[ ! -f $game_path ]]; then
echo "Game not found: $game_path"
exit 1
fi
if [[ $core == */* ]]; then
core_path="$core"
else
core_path="/usr/lib/libretro/${core}_libretro.so"
fi
if [[ ! -f $core_path ]]; then
echo "Core not found: $core_path"
exit 1
fi
game_name=$(printf '%s' "${game_path##*/}" | sed 's/\.[^.]*$//; s/[[:space:]]*([^)]*)//g; s/[[:space:]]\+/ /g; s/^ //; s/ $//' | perl -Mopen=locale -pe 's/(^|[[:space:]])([^[:space:]])/$1\U$2/g')
desktop_name="$game_name"
desktop_id=$(printf '%s' "$desktop_name" | tr '[:upper:]' '[:lower:]' | tr -cs '[:alnum:]' '-' | sed 's/^-//; s/-$//')
desktop_dir="$HOME/.local/share/applications"
desktop_file="$desktop_dir/$desktop_id.desktop"
icon_dir="$desktop_dir/icons"
icon_path="$icon_dir/Retro Gaming.png"
mkdir -p "$desktop_dir" "$icon_dir"
[[ -f $icon_path ]] || cp "$HOME/.local/share/omarchy/applications/icons/Retro Gaming.png" "$icon_path"
cat >"$desktop_file" <<EOF
[Desktop Entry]
Version=1.0
Name=$desktop_name
Comment=Play $game_name with RetroArch
Exec=retroarch -L "$core_path" "$game_path"
Terminal=false
Type=Application
Icon=$icon_path
StartupNotify=true
Categories=Game;Emulator;
EOF
chmod +x "$desktop_file"
update-desktop-database "$desktop_dir" &>/dev/null || true
omarchy-notification-send -g "󰯉" "$game_name installed" "Start it with Super + Space"
+22 -12
View File
@@ -10,34 +10,44 @@ MIRROR_TOGGLE="internal-monitor-mirror"
# Get internal monitor name dynamically
INTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP")).name' | head -n 1)
enable() {
if omarchy-hyprland-toggle-enabled "$TOGGLE"; then
omarchy-hyprland-toggle --disabled-notification "󰍹 Laptop display enabled" "$TOGGLE"
on() {
if omarchy-hyprland-toggle-enabled $TOGGLE; then
omarchy-hyprland-toggle $TOGGLE off
omarchy-notification-send -g 󰍹 "Laptop display enabled"
fi
}
disable() {
off() {
if ! omarchy-hw-external-monitors; then
notify-send -u low "󰍹 Can't disable the only active display"
omarchy-notification-send -g 󰍹 "Can't disable the only active display"
exit 1
fi
if omarchy-hyprland-toggle-disabled "$TOGGLE" && omarchy-hyprland-toggle-disabled "$MIRROR_TOGGLE"; then
if omarchy-hyprland-toggle-disabled $TOGGLE && omarchy-hyprland-toggle-disabled $MIRROR_TOGGLE; then
echo "monitor=$INTERNAL,disable" >"$TOGGLE_FLAG"
notify-send -u low "󰍹 Laptop display disabled"
omarchy-notification-send -g 󰍹 "Laptop display disabled"
hyprctl reload
fi
}
recover() {
if ! omarchy-hw-external-monitors && omarchy-hyprland-toggle-enabled "$TOGGLE"; then
omarchy-hyprland-toggle "$TOGGLE"
if ! omarchy-hw-external-monitors; then
omarchy-hyprland-toggle $TOGGLE off
fi
}
toggle() {
if omarchy-hyprland-toggle-enabled $TOGGLE; then
on
else
off
fi
}
case "$1" in
on) enable ;;
off) disable ;;
toggle) if omarchy-hyprland-toggle-enabled "$TOGGLE"; then enable; else disable; fi ;;
on) on ;;
off) off ;;
toggle) toggle ;;
recover) recover ;;
*)
echo "Usage: $(basename "$0") {on|off|toggle|recover}" >&2
+24 -20
View File
@@ -12,44 +12,48 @@ INTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP")).na
# Get the first available external monitor
EXTERNAL=$(hyprctl monitors -j | jq -r '.[] | select(.name | contains("eDP") | not).name' | head -n 1)
enable() {
if [[ -z "$EXTERNAL" ]]; then
notify-send -u low "󰍹 No external monitors found for mirror"
on() {
if [[ -z $EXTERNAL ]]; then
omarchy-notification-send -g 󰍹 "No external monitors found for mirror"
exit 1
fi
if [[ -z "$INTERNAL" ]]; then
notify-send -u low "󰍹 No laptop monitor found to mirror"
if [[ -z $INTERNAL ]]; then
omarchy-notification-send -g 󰍹 "No laptop monitor found to mirror"
exit 1
fi
if omarchy-hyprland-toggle-enabled "$DISABLE_TOGGLE"; then
omarchy-hyprland-toggle "$DISABLE_TOGGLE"
fi
omarchy-hyprland-toggle $DISABLE_TOGGLE off
echo "monitor=$EXTERNAL, preferred, auto, 1, mirror, $INTERNAL" >"$TOGGLE_FLAG"
omarchy-notification-send -g 󰍹 "Mirroring enabled ($EXTERNAL)"
hyprctl reload
}
if omarchy-hyprland-toggle-disabled "$TOGGLE"; then
echo "monitor=$EXTERNAL, preferred, auto, 1, mirror, $INTERNAL" > "$TOGGLE_FLAG"
notify-send -u low "󰍹 Mirroring enabled ($EXTERNAL)"
hyprctl reload
off() {
if omarchy-hyprland-toggle-enabled $TOGGLE; then
omarchy-hyprland-toggle $TOGGLE off
omarchy-notification-send -g 󰍹 "Extended mode restored"
fi
}
disable() {
if omarchy-hyprland-toggle-enabled "$TOGGLE"; then
omarchy-hyprland-toggle --disabled-notification "󰍹 Extended mode restored" "$TOGGLE"
toggle() {
if omarchy-hyprland-toggle-enabled $TOGGLE; then
off
else
on
fi
}
recover() {
if ! omarchy-hw-external-monitors && omarchy-hyprland-toggle-enabled "$TOGGLE"; then
omarchy-hyprland-toggle "$TOGGLE"
if ! omarchy-hw-external-monitors; then
omarchy-hyprland-toggle $TOGGLE off
fi
}
case "$1" in
on) enable ;;
off) disable ;;
toggle) if omarchy-hyprland-toggle-enabled "$TOGGLE"; then disable; else enable; fi ;;
on) on ;;
off) off ;;
toggle) toggle ;;
recover) recover ;;
*)
echo "Usage: $(basename "$0") {on|off|toggle|recover}" >&2
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# omarchy:summary=Print the monitor scale of the internal monitor or first other monitor
hyprctl monitors -j | jq -r '([.[] | select(.name | contains("eDP"))][0] // .[0]).scale // empty | tonumber | if . == floor then floor else . end'
+4 -1
View File
@@ -40,7 +40,10 @@ MONITOR_CONF="$HOME/.config/hypr/monitors.conf"
if [[ -f $MONITOR_CONF ]]; then
mapfile -t ACTIVE_LINES < <(grep -E '^[[:space:]]*monitor=' "$MONITOR_CONF" | grep -vE 'disable[[:space:]]*$')
if [[ ${#ACTIVE_LINES[@]} -eq 1 ]] && [[ "${ACTIVE_LINES[0]}" =~ ^monitor=,preferred,auto, ]]; then
sed -i -E "s|^(monitor=,preferred,auto,).*|\\1${NEW_SCALE}|" "$MONITOR_CONF"
sed -i -E \
-e "s|^(monitor=,preferred,auto,).*|\\1${NEW_SCALE}|" \
-e "s|^([[:space:]]*env[[:space:]]*=[[:space:]]*GDK_SCALE,).*|\\1${NEW_SCALE}|" \
"$MONITOR_CONF"
fi
fi
+36 -23
View File
@@ -1,32 +1,45 @@
#!/bin/bash
# omarchy:summary=Toggle permanent Hyprland flags by copying them into a directory that's sourced entirely.
# omarchy:args=[--enabled-notification <text>] [--disabled-notification <text>] <flag-name>
ENABLED_NOTIFICATION=""
DISABLED_NOTIFICATION=""
while [[ $# -gt 1 ]]; do
case $1 in
--enabled-notification) ENABLED_NOTIFICATION="$2"; shift 2 ;;
--disabled-notification) DISABLED_NOTIFICATION="$2"; shift 2 ;;
*) break ;;
esac
done
# omarchy:args=<flag-name> [on|off]
FLAG_NAME="$1"
ACTION="${2:-toggle}"
FLAG="$HOME/.local/state/omarchy/toggles/hypr/$FLAG_NAME.conf"
FLAG_SOURCE="$OMARCHY_PATH/default/hypr/toggles/$FLAG_NAME.conf"
if [[ -f $FLAG ]]; then
rm $FLAG
[[ -n $DISABLED_NOTIFICATION ]] && notify-send -u low "$DISABLED_NOTIFICATION"
elif [[ -f $FLAG_SOURCE ]]; then
cp $FLAG_SOURCE $FLAG
[[ -n $ENABLED_NOTIFICATION ]] && notify-send -u low "$ENABLED_NOTIFICATION"
else
echo "Flag not found: $FLAG_NAME"
exit 1
fi
on() {
if [[ -f $FLAG_SOURCE ]]; then
mkdir -p "$(dirname "$FLAG")"
cp "$FLAG_SOURCE" "$FLAG"
else
echo "Flag not found: $FLAG_NAME"
exit 1
fi
}
hyprctl reload
off() {
rm -f "$FLAG"
}
toggle() {
if [[ -f $FLAG ]]; then
off
echo "off"
else
on
echo "on"
fi
}
case $ACTION in
on) on ;;
off) off ;;
toggle) toggle ;;
*)
echo "Usage: omarchy-hyprland-toggle <flag-name> [on|off]"
exit 1
;;
esac
hyprctl reload >/dev/null
@@ -2,7 +2,7 @@
# omarchy:summary=Toggle single-window square aspect ratio.
omarchy-hyprland-toggle \
--enabled-notification "Enable single-window square aspect ratio" \
--disabled-notification "Disable single-window square aspect ratio" \
single-window-aspect-ratio
case $(omarchy-hyprland-toggle single-window-aspect-ratio) in
on) omarchy-notification-send -g  "Enable single-window square aspect ratio" ;;
off) omarchy-notification-send -g  "Disable single-window square aspect ratio" ;;
esac
+27 -4
View File
@@ -120,7 +120,7 @@ show_custom_reminder_input() {
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
omarchy-notification-send -g 󰔛 "Invalid reminder" "Enter the number of minutes" -u critical
show_custom_reminder_input
else
back_to show_reminder_menu
@@ -195,7 +195,8 @@ show_screenrecord_menu() {
}
show_share_menu() {
case $(menu "Share" " Clipboard\n File \n Folder") in
case $(menu "Share" " Clipboard\n File \n Folder\n󰥦 Receive") in
*Receive*) uwsm-app -- localsend ;;
*Clipboard*) omarchy-menu-share clipboard ;;
*File*) terminal bash -c "omarchy-menu-share file" ;;
*Folder*) terminal bash -c "omarchy-menu-share folder" ;;
@@ -264,18 +265,39 @@ show_hardware_touchpad_haptics_menu() {
}
show_style_menu() {
case $(menu "Style" "󰸌 Theme\n󰟵 Unlock\n Font\n Background\n Hyprland\n󱄄 Screensaver\n About") in
case $(menu "Style" "󰸌 Theme\n󰟵 Unlock\n Font\n Background\n󰍜 Waybar\n󰘇 Corners\n Hyprland\n󱄄 Screensaver\n About") in
*Theme*) show_theme_menu ;;
*Unlock*) omarchy-launch-walker -m menus:omarchyunlocks --width 800 --minheight 400 ;;
*Font*) show_font_menu ;;
*Background*) show_background_menu ;;
*Corners*) show_style_corners_menu ;;
*Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;;
*Waybar*) show_waybar_position_menu ;;
*Screensaver*) show_screensaver_menu ;;
*About*) show_about_menu ;;
*) show_main_menu ;;
esac
}
show_style_corners_menu() {
case $(omarchy-menu-select "Corners" "󰝣 Sharp" "󰘇 Round") in
*Sharp*) omarchy-style-corners sharp ;;
*Round*) omarchy-style-corners round ;;
*) show_style_menu ;;
esac
}
show_waybar_position_menu() {
case $(menu "Waybar Position" "󰁝 Top\n󰁅 Bottom\n󰁍 Left\n󰁔 Right") in
*Top*) omarchy-style-waybar-position top ;;
*Bottom*) omarchy-style-waybar-position bottom ;;
*Left*) omarchy-style-waybar-position left ;;
*Right*) omarchy-style-waybar-position right ;;
*) show_style_menu ;;
esac
}
show_about_menu() {
case $(menu "About" " Edit Text\n Set From Image\n Restore Default") in
*Text*) omarchy-branding-about text ;;
@@ -578,8 +600,9 @@ show_install_ai_menu() {
}
show_install_gaming_menu() {
case $(menu "Install" " Steam\n RetroArch\n󰍳 Minecraft\n󰢹 NVIDIA GeForce NOW\n Xbox Cloud Gaming\n󰂯 Xbox Controller\n󰍹 Moonlight (GameStream)\n Lutris (Battle.net)\n󱓟 Heroic (Epic Games)") in
case $(menu "Install" " Steam\n󰯉 RetroArch\n󰍳 Minecraft\n󰢹 NVIDIA GeForce NOW\n Xbox Cloud Gaming\n󰂯 Xbox Controller\n󰍹 Moonlight (GameStream)\n Lutris (Battle.net)\n󱓟 Heroic (Epic Games)\n󰯉 RetroArch Game Launcher") in
*Steam*) present_terminal omarchy-install-gaming-steam ;;
*"RetroArch Game Launcher"*) omarchy-games-retro-install ;;
*RetroArch*) present_terminal omarchy-install-gaming-retroarch ;;
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
*GeForce*) present_terminal omarchy-install-gaming-geforce-now ;;
+29 -1
View File
@@ -3,6 +3,23 @@
# omarchy:summary=Display Hyprland keybindings defined in your configuration using walker for an interactive search menu.
declare -A KEYCODE_SYM_MAP
# Hyprland reports XKB keycodes for code: bindings. Keep a small fallback for
# common keys so the menu remains readable if xkbcli cannot resolve a symbol.
declare -A FALLBACK_KEYCODE_SYM_MAP=(
[10]="1"
[11]="2"
[12]="3"
[13]="4"
[14]="5"
[15]="6"
[16]="7"
[17]="8"
[18]="9"
[19]="0"
[20]="MINUS"
[21]="EQUAL"
[61]="SLASH"
)
build_keymap_cache() {
local keymap
@@ -37,7 +54,18 @@ build_keymap_cache() {
}
lookup_keycode_cached() {
printf '%s\n' "${KEYCODE_SYM_MAP[$1]}"
local symbol
symbol="${KEYCODE_SYM_MAP[$1]}"
if [[ -z $symbol ]]; then
symbol="${FALLBACK_KEYCODE_SYM_MAP[$1]}"
fi
if [[ -z $symbol ]]; then
symbol="code:$1"
fi
printf '%s\n' "${symbol^^}"
}
parse_keycodes() {
+57 -13
View File
@@ -1,32 +1,76 @@
#!/bin/bash
# omarchy:summary=Send a desktop notification with Omarchy glyph and body spacing
# omarchy:args=<glyph> <headline> [description] [notify-send options]
# omarchy:examples=omarchy notification send "󰔛" "Reminder" "5 minutes are up" -u critical
# omarchy:args=<headline> [description] [-g <glyph>] [-u <low|normal|critical>] [notify-send options]
# omarchy:examples=omarchy notification send "Reminder" "5 minutes are up" -g 󰔛 -u critical
set -euo pipefail
if (($# < 2)); then
echo "Usage: omarchy-notification-send <glyph> <headline> [description] [notify-send options]"
headline=""
description=""
glyph=""
urgency="low"
args=()
parse_omarchy_option() {
case $1 in
-g | --glyph)
if (($# < 2)); then
echo "Missing value for $1" >&2
exit 1
fi
glyph="$2"
return 0
;;
-u | --urgency)
if (($# < 2)); then
echo "Missing value for $1" >&2
exit 1
fi
urgency="$2"
return 0
;;
esac
return 1
}
while (($# > 0)); do
if parse_omarchy_option "$@"; then
shift 2
else
break
fi
done
if (($# < 1)); then
echo "Usage: omarchy-notification-send [-g <glyph>] [-u <low|normal|critical>] <headline> [description] [notify-send options]"
exit 1
fi
glyph=$1
headline=$2
description=${3:-}
shift 2
headline=$1
shift
if (($# > 0)) && [[ $1 != -* ]]; then
description=$1
shift
else
description=""
fi
while (($# > 0)); do
if parse_omarchy_option "$@"; then
shift 2
else
args+=("$1")
shift
fi
done
summary="$glyph $headline"
args+=("-u" "$urgency")
if [[ -n $description ]]; then
description=$(sed 's/^/ /' <<<"$description")
notify-send "$@" "$summary" "$description"
description=$(printf '%b' "$description" | sed 's/^/ /')
notify-send "${args[@]}" "$summary" "$description"
else
notify-send "$@" "$summary"
notify-send "${args[@]}" "$summary"
fi
+3
View File
@@ -19,5 +19,8 @@ echo
sudo cp -f "$OMARCHY_PATH/default/pacman/pacman-$channel.conf" /etc/pacman.conf
sudo cp -f "$OMARCHY_PATH/default/pacman/mirrorlist-$channel" /etc/pacman.d/mirrorlist
# Allow user customization of /etc/pacman.conf before the upgrade runs
omarchy-hook pre-refresh-pacman
# Reset all package DBs and then update
sudo pacman -Syyuu --noconfirm
+2 -2
View File
@@ -1,11 +1,11 @@
#!/bin/bash
# omarchy:summary=Reinstall the Omarchy source directory from git
# omarchy:summary=Reinstall the stable Omarchy source directory from git
set -e
# Reinstall the Omarchy configuration directory from the git source.
git clone --depth=1 --branch master "https://github.com/basecamp/omarchy.git" ~/.local/share/omarchy-new >/dev/null
git clone "https://github.com/basecamp/omarchy.git" ~/.local/share/omarchy-new >/dev/null
mv $OMARCHY_PATH ~/.local/share/omarchy-old
mv ~/.local/share/omarchy-new $OMARCHY_PATH
+15 -18
View File
@@ -41,21 +41,18 @@ parse_systemd_timespan() {
}
show_reminders() {
local timers timer next next_seconds uptime remaining body=""
local timer next remaining body=""
local reminder_dir="${XDG_RUNTIME_DIR:-/tmp}/omarchy-reminders"
local reminder_message=""
local now=$(date +%s)
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)}
while IFS=$'\t' read -r timer next; do
[[ -z $timer || -z $next ]] && continue
for timer in $timers; do
next=$(systemctl --user show -P NextElapseUSecMonotonic "$timer" 2>/dev/null || true)
[[ -z $next ]] && continue
next=$((next / 1000000))
((next <= now)) && continue
next_seconds=$(parse_systemd_timespan "$next")
((next_seconds <= uptime)) && continue
remaining=$((next_seconds - uptime))
remaining=$((next - now))
reminder=${timer%.timer}
reminder=${reminder#omarchy-reminder-}
set_at=${reminder##*-}
@@ -64,16 +61,16 @@ show_reminders() {
[[ -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'
body+="$reminder_message in $(format_remaining $remaining) ($(date -d "@$next" +%-H:%M))"$'\n'
else
body+="${reminder_minutes}-min reminder in $(format_remaining $remaining) ($(date -d "@$((set_at + reminder_minutes * 60))" +%-H:%M))"$'\n'
body+="${reminder_minutes}-min reminder in $(format_remaining $remaining) ($(date -d "@$next" +%-H:%M))"$'\n'
fi
done
done < <(systemctl --user list-timers --all --output=json "omarchy-reminder-*.timer" 2>/dev/null | jq -r '.[] | [.unit, .next] | @tsv')
if [[ -z $body ]]; then
omarchy-notification-send "󰔛" "Upcoming reminders" "No outstanding reminders" -u low
omarchy-notification-send -g 󰔛 "Upcoming reminders" "No outstanding reminders"
else
omarchy-notification-send "󰔛" "Upcoming reminders" "${body%$'\n'}" -u low
omarchy-notification-send -g 󰔛 "Upcoming reminders" "${body%$'\n'}"
fi
}
@@ -88,7 +85,7 @@ clear_reminders() {
fi
rm -f "$reminder_dir"/omarchy-reminder-*.message 2>/dev/null || true
omarchy-notification-send "󰔛" "All reminders have been cleared" -u low
omarchy-notification-send -g 󰔛 "All reminders have been cleared"
}
case ${1:-} in
@@ -134,6 +131,6 @@ if [[ -n $custom_message ]]; then
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"
bash -c 'omarchy-notification-send -g 󰔛 "Reminder" "$1" -u critical; rm -f "$2"' bash "$message" "$message_file"
omarchy-notification-send "󰔛" "$confirmation_title" "$confirmation" -u low
omarchy-notification-send -g 󰔛 "$confirmation_title" "$confirmation"
+20
View File
@@ -0,0 +1,20 @@
#!/bin/bash
# omarchy:summary=Set Hyprland, Hyprlock, Mako, and Walker corners to sharp or round
# omarchy:args=<sharp|round>
# omarchy:examples=omarchy style corners round | omarchy style corners sharp
if [[ $1 != "sharp" && $1 != "round" ]]; then
echo "Usage: omarchy-style-corners <sharp|round>"
exit 1
fi
omarchy-style-corners-hyprland "$1"
omarchy-style-corners-hyprlock "$1"
omarchy-style-corners-mako "$1"
omarchy-style-corners-walker "$1"
case $1 in
sharp) omarchy-notification-send "Sharp corners enabled" -g 󰝣 ;;
round) omarchy-notification-send "Round corners enabled" -g 󰘇 ;;
esac
+17
View File
@@ -0,0 +1,17 @@
#!/bin/bash
# omarchy:summary=Set or toggle shape of Hyprland window corners
# omarchy:args=[toggle|sharp|round]
# omarchy:examples=omarchy style corners hyprland toggle | omarchy style corners hyprland round | omarchy style corners hyprland sharp
case "${1:-toggle}" in
round) set -- on ;;
sharp) set -- off ;;
toggle) ;;
*)
echo "Usage: omarchy-style-corners-hyprland [toggle|sharp|round]"
exit 1
;;
esac
omarchy-hyprland-toggle rounded-corners "$1"
+35
View File
@@ -0,0 +1,35 @@
#!/bin/bash
# omarchy:summary=Set or toggle rounded Hyprlock input field corners
# omarchy:args=[toggle|sharp|round]
# omarchy:examples=omarchy style corners hyprlock toggle | omarchy style corners hyprlock round | omarchy style corners hyprlock sharp
TOGGLES_CONFIG="$HOME/.local/state/omarchy/toggles/hyprlock.conf"
set_rounding() {
local radius="$1"
mkdir -p "$(dirname "$TOGGLES_CONFIG")"
cat >"$TOGGLES_CONFIG" <<EOF
input-field {
rounding = $radius
}
EOF
}
case "${1:-toggle}" in
round) set_rounding 6 ;;
sharp) set_rounding 0 ;;
toggle)
if [[ -f $TOGGLES_CONFIG ]] && grep -q '^ rounding = 6$' "$TOGGLES_CONFIG"; then
set_rounding 0
else
set_rounding 6
fi
;;
*)
echo "Usage: omarchy-style-corners-hyprlock [toggle|sharp|round]"
exit 1
;;
esac
+38
View File
@@ -0,0 +1,38 @@
#!/bin/bash
# omarchy:summary=Set or toggle rounded Mako notification corners
# omarchy:args=[toggle|sharp|round]
# omarchy:examples=omarchy style corners mako toggle | omarchy style corners mako round | omarchy style corners mako sharp
TOGGLES_CONFIG="$HOME/.local/state/omarchy/toggles/mako.ini"
set_radius() {
local radius="$1"
mkdir -p "$(dirname "$TOGGLES_CONFIG")"
touch "$TOGGLES_CONFIG"
if grep -q '^border-radius=' "$TOGGLES_CONFIG"; then
sed -i "s/^border-radius=.*/border-radius=$radius/" "$TOGGLES_CONFIG"
else
echo "border-radius=$radius" >>"$TOGGLES_CONFIG"
fi
}
case "${1:-toggle}" in
round) set_radius 6 ;;
sharp) set_radius 0 ;;
toggle)
if [[ -f $TOGGLES_CONFIG ]] && grep -q '^border-radius=6$' "$TOGGLES_CONFIG"; then
set_radius 0
else
set_radius 6
fi
;;
*)
echo "Usage: omarchy-style-corners-mako [toggle|sharp|round]"
exit 1
;;
esac
makoctl reload
+40
View File
@@ -0,0 +1,40 @@
#!/bin/bash
# omarchy:summary=Set or toggle rounded Walker corners
# omarchy:args=[toggle|sharp|round]
# omarchy:examples=omarchy style corners walker toggle | omarchy style corners walker round | omarchy style corners walker sharp
TOGGLES_CSS="$HOME/.local/state/omarchy/toggles/walker.css"
set_radius() {
local radius="$1"
mkdir -p "$(dirname "$TOGGLES_CSS")"
touch "$TOGGLES_CSS"
if grep -q '^ border-radius:' "$TOGGLES_CSS"; then
sed -i "s/^ border-radius:.*/ border-radius: ${radius}px;/" "$TOGGLES_CSS"
elif grep -q '^border-radius:' "$TOGGLES_CSS"; then
sed -i "s/^border-radius:.*/border-radius: ${radius}px;/" "$TOGGLES_CSS"
else
echo ".box-wrapper { border-radius: ${radius}px; }" >>"$TOGGLES_CSS"
fi
}
case "${1:-toggle}" in
round) set_radius 6 ;;
sharp) set_radius 0 ;;
toggle)
if [[ -f $TOGGLES_CSS ]] && grep -q 'border-radius: 6px;' "$TOGGLES_CSS"; then
set_radius 0
else
set_radius 6
fi
;;
*)
echo "Usage: omarchy-style-corners-walker [toggle|sharp|round]"
exit 1
;;
esac
omarchy-restart-walker
+45
View File
@@ -0,0 +1,45 @@
#!/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
# Reset config and styles before making adjustments
omarchy-refresh-config waybar/config.jsonc
omarchy-refresh-config waybar/style.css
if [[ $position == "left" || $position == "right" ]]; then
height=0
width=28
horizontal=false
else
height=26
width=0
horizontal=true
fi
# Change position
sed -i -E "s/(\"position\"[[:space:]]*:[[:space:]]*\")[a-z]+(\")/\\1${position}\\2/" "$WAYBAR_CONFIG"
# Change height/width
sed -i -E "s/(\"height\"[[:space:]]*:[[:space:]]*)[0-9]+/\\1${height}/; s/(\"width\"[[:space:]]*:[[:space:]]*)[0-9]+/\\1${width}/" "$WAYBAR_CONFIG"
# Change the clock format
if [[ $horizontal == true ]]; then
sed -i -E '/"clock"[[:space:]]*:[[:space:]]*\{/,/\}/ s/"format"[[:space:]]*:[[:space:]]*"[^"]*"/"format": "{:L%A %H:%M}"/' "$WAYBAR_CONFIG"
else
sed -i -E '/"clock"[[:space:]]*:[[:space:]]*\{/,/\}/ s/"format"[[:space:]]*:[[:space:]]*"[^"]*"/"format": "{:%H\\n —\\n%M}"/' "$WAYBAR_CONFIG"
fi
omarchy-restart-waybar
+3 -3
View File
@@ -193,14 +193,14 @@ main() {
output=$(output_path "$input" "$format" "$resolution")
if [[ $type == "video" ]]; then
omarchy-notification-send "" "Transcoding video…" "$(basename -- "$input") to $format ($resolution)"
omarchy-notification-send -g  "Transcoding video…" "$(basename -- "$input") to $format ($resolution)"
transcode_video "$input" "$format" "$resolution" "$output"
copy_to_clipboard "$output"
omarchy-notification-send "" "Transcoded to $resolution $format" "Saved and copied to clipboard."
omarchy-notification-send -g  "Transcoded to $resolution $format" "Saved and copied to clipboard."
else
transcode_picture "$input" "$format" "$resolution" "$output"
copy_to_clipboard "$output"
omarchy-notification-send "" "Transcoded to $resolution $format" "Saved and copied to clipboard."
omarchy-notification-send -g  "Transcoded to $resolution $format" "Saved and copied to clipboard."
fi
}
+1 -1
View File
@@ -23,7 +23,7 @@
<test name="family" qual="any">
<string>monospace</string>
</test>
<edit name="family" mode="assign" binding="strong">
<edit name="family" mode="append" binding="same">
<string>JetBrainsMono Nerd Font</string>
</edit>
</match>
+2
View File
@@ -41,3 +41,5 @@ input-field {
auth {
fingerprint:enabled = false
}
source = ~/.local/state/omarchy/toggles/hyprlock.conf
+1 -14
View File
@@ -2,25 +2,12 @@
# List current monitors and resolutions possible: hyprctl monitors
# Format: monitor = [port], resolution, position, scale
# Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
# Default configuration
env = GDK_SCALE,2
monitor=,preferred,auto,auto
# Good compromise for 27" or 32" 4K monitors (but fractional!)
# env = GDK_SCALE,1.75
# monitor=,preferred,auto,1.6
# Straight 1x setup for low-resolution displays like 1080p or 1440p
# Or for ultrawide monitors like 34" 3440x1440 or 49" 5120x1440
# env = GDK_SCALE,1
# monitor=,preferred,auto,1
# Portrait/rotated secondary monitor (transform: 1 = 90°, 3 = 270°)
# monitor = DP-2, preferred, auto, 1, transform, 1
# Example for Framework 13 w/ 6K XDR Apple display
# monitor = DP-5, 6016x3384@60, auto, 2
# monitor = eDP-1, 2880x1920@120, auto, 2
# Disable the second ghost monitor on an Apple 6K XDR over Thunderbolt
# monitor=DP-2,disable
+7 -4
View File
@@ -3,11 +3,14 @@
# Print the current image file
<Ctrl+p> = exec lp "$imv_current_file"
# Delete the current image and quit the viewer
<Ctrl+x> = exec rm "$imv_current_file"; quit
# Trash the current image and quit the viewer (recoverable from Trash)
<Ctrl+x> = exec gio trash -- "$imv_current_file"; quit
# Delete the current image and move to the next one
<Ctrl+Shift+X> = exec rm "$imv_current_file"; close
# Trash the current image and move to the next one
<Ctrl+Shift+X> = exec gio trash -- "$imv_current_file"; close
# Rotate the currently open image by 90 degrees
<Ctrl+r> = exec mogrify -rotate 90 "$imv_current_file"
# Edit the current image in Satty and quit the viewer
<Ctrl+e> = exec satty --filename "$imv_current_file" & ; quit
@@ -0,0 +1,24 @@
#!/bin/bash
# This hook is called by `omarchy refresh pacman` AFTER the channel template
# is copied to /etc/pacman.conf and BEFORE `pacman -Syyuu` runs. Use it to
# layer customizations onto the freshly-written pacman.conf so they're
# respected by the upgrade — common cases are adding a custom repository
# (e.g. CachyOS, Chaotic-AUR, an internal company repo) or extra IgnorePkg
# lines.
#
# The hook runs as the invoking user with a warm sudo cache.
#
# To put it into use, remove .sample from this file name.
# Example: add an Include line above [core] for a custom repo.
# Maintain the repo entries in /etc/pacman.d/custom-repos.conf yourself.
CONF=/etc/pacman.conf
SNIPPET=/etc/pacman.d/custom-repos.conf
MARKER="Include = $SNIPPET"
[[ -r $SNIPPET ]] || exit 0
grep -qxF "$MARKER" "$CONF" && exit 0
sudo sed -i "0,/^\[core\]/s||$MARKER\n\n[core]|" "$CONF"
+1
View File
@@ -4,6 +4,7 @@
"position": "top",
"spacing": 0,
"height": 26,
"width": 0,
"modules-left": ["custom/omarchy", "hyprland/workspaces"],
"modules-center": ["clock", "custom/weather", "custom/update", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
"modules-right": [
+36
View File
@@ -70,6 +70,7 @@ tooltip {
#custom-weather {
margin-left: 7.5px;
margin-right: 7.5px;
min-width: 14px;
}
#custom-weather.unavailable {
@@ -109,3 +110,38 @@ tooltip {
#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; }
+10
View File
@@ -91,6 +91,16 @@ bindd = SUPER, code:21, Shrink window left, resizeactive, 100 0 # = key
bindd = SUPER SHIFT, code:20, Shrink window up, resizeactive, 0 -100
bindd = SUPER SHIFT, code:21, Expand window down, resizeactive, 0 100
bindd = SUPER ALT, code:20, Expand window left a little, resizeactive, -25 0
bindd = SUPER ALT, code:21, Shrink window left a little, resizeactive, 25 0
bindd = SUPER SHIFT ALT, code:20, Shrink window up a little, resizeactive, 0 -25
bindd = SUPER SHIFT ALT, code:21, Expand window down a little, resizeactive, 0 25
bindd = SUPER CTRL, code:20, Expand window left a lot, resizeactive, -300 0
bindd = SUPER CTRL, code:21, Shrink window left a lot, resizeactive, 300 0
bindd = SUPER CTRL SHIFT, code:20, Shrink window up a lot, resizeactive, 0 -300
bindd = SUPER CTRL SHIFT, code:21, Expand window down a lot, resizeactive, 0 300
# Scroll through existing workspaces with SUPER + scroll
bindd = SUPER, mouse_down, Scroll active workspace forward, workspace, e+1
bindd = SUPER, mouse_up, Scroll active workspace backward, workspace, e-1
+4
View File
@@ -13,6 +13,10 @@ bindd = , XF86Calculator, Calculator, exec, gnome-calculator
# Aesthetics
bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, omarchy-toggle-waybar
bindd = SUPER SHIFT CTRL, UP, Move Waybar to top, exec, omarchy-style-waybar-position top
bindd = SUPER SHIFT CTRL, DOWN, Move Waybar to bottom, exec, omarchy-style-waybar-position bottom
bindd = SUPER SHIFT CTRL, LEFT, Move Waybar to left, exec, omarchy-style-waybar-position left
bindd = SUPER SHIFT CTRL, RIGHT, Move Waybar to right, exec, omarchy-style-waybar-position right
bindd = SUPER CTRL, SPACE, Theme background menu, exec, omarchy-menu background
bindd = SUPER SHIFT CTRL, SPACE, Theme menu, exec, omarchy-menu theme
bindd = SUPER, BACKSPACE, Toggle window transparency, exec, omarchy-hyprland-window-transparency-toggle
@@ -0,0 +1,4 @@
decoration {
rounding = 6
rounding_power = 3
}
+1
View File
@@ -1,4 +1,5 @@
include=~/.local/share/omarchy/default/mako/core.ini
include=~/.local/state/omarchy/toggles/mako.ini
text-color={{ foreground }}
border-color={{ accent }}
@@ -1,4 +1,5 @@
@import "../../../../../../../.config/omarchy/current/theme/walker.css";
@import "../../../../../../../.local/state/omarchy/toggles/walker.css";
* {
all: unset;
+1
View File
@@ -16,6 +16,7 @@ run_logged $OMARCHY_INSTALL/config/fix-powerprofilesctl-shebang.sh
run_logged $OMARCHY_INSTALL/config/docker.sh
run_logged $OMARCHY_INSTALL/config/mimetypes.sh
run_logged $OMARCHY_INSTALL/config/user-dirs.sh
run_logged $OMARCHY_INSTALL/config/toggles.sh
run_logged $OMARCHY_INSTALL/config/nautilus-python.sh
run_logged $OMARCHY_INSTALL/config/localdb.sh
run_logged $OMARCHY_INSTALL/config/walker-elephant.sh
+3
View File
@@ -1,5 +1,8 @@
# Turn on bluetooth by default
chrootable_systemctl_enable bluetooth.service
# Persist last power state across reboots (default AutoEnable=true overrides it)
sudo sed -i 's/^#\?AutoEnable=.*/AutoEnable=false/' /etc/bluetooth/main.conf
mkdir -p ~/.config/wireplumber/wireplumber.conf.d/
cp "$OMARCHY_PATH/default/wireplumber/wireplumber.conf.d/bluetooth-a2dp-autoconnect.conf" ~/.config/wireplumber/wireplumber.conf.d/
+5
View File
@@ -0,0 +1,5 @@
# Make sure toggles are available
mkdir -p ~/.local/state/omarchy/toggles
touch ~/.local/state/omarchy/toggles/hyprlock.conf
touch ~/.local/state/omarchy/toggles/mako.ini
touch ~/.local/state/omarchy/toggles/walker.css
+3
View File
@@ -0,0 +1,3 @@
# Set the default GDK_SCALE from what the monitor is currently reporting
sed -i -E "s|^([[:space:]]*env[[:space:]]*=[[:space:]]*GDK_SCALE,).*|\\1$(omarchy-hyprland-monitor-scale)|" ~/.config/hypr/monitors.conf
+1
View File
@@ -5,3 +5,4 @@ omarchy-npx-install opencode-ai opencode
omarchy-npx-install playwright playwright-cli
omarchy-npx-install @earendil-works/pi-coding-agent pi
omarchy-npx-install @kitlangton/ghui ghui
omarchy-npx-install hunkdiff hunk
+3
View File
@@ -0,0 +1,3 @@
echo "Persist Bluetooth power state across reboots"
sudo sed -i 's/^#\?AutoEnable=.*/AutoEnable=false/' /etc/bluetooth/main.conf
+11
View File
@@ -0,0 +1,11 @@
echo "Fix fontconfig monospace binding so app-specific fonts are not overridden"
if [[ -f ~/.config/fontconfig/fonts.conf ]] && command -v xmlstarlet >/dev/null 2>&1; then
xmlstarlet ed -L \
-u '//match[@target="pattern"][test/string="monospace"]/edit[@name="family"]/@mode' \
-v "append" \
-u '//match[@target="pattern"][test/string="monospace"]/edit[@name="family"]/@binding' \
-v "same" \
~/.config/fontconfig/fonts.conf
fc-cache -f >/dev/null 2>&1
fi
+3
View File
@@ -0,0 +1,3 @@
echo "Viewing multiple files via imv should use trash for delete and ctrl+e for editing via satty"
omarchy-refresh-config imv/config
+5
View File
@@ -0,0 +1,5 @@
echo "Create Mako and Walker toggle configs"
mkdir -p ~/.local/state/omarchy/toggles
[[ -f ~/.local/state/omarchy/toggles/mako.ini ]] || touch ~/.local/state/omarchy/toggles/mako.ini
[[ -f ~/.local/state/omarchy/toggles/walker.css ]] || touch ~/.local/state/omarchy/toggles/walker.css
+3
View File
@@ -0,0 +1,3 @@
echo "Install hunkdiff npx wrapper as hunk"
omarchy-npx-install hunkdiff hunk
Binary file not shown.

After

Width:  |  Height:  |  Size: 475 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 688 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

+93
View File
@@ -0,0 +1,93 @@
# Main background
theme[main_bg]="#0c0b0c"
# Main text color
theme[main_fg]="#e2dddc"
# Title color for boxes
theme[title]="#b59790"
# Highlight color for keyboard shortcuts
theme[hi_fg]="#c4d8e2"
# Background color of selected item in processes box
theme[selected_bg]="#e2dddc"
# Foreground color of selected item in processes box
theme[selected_fg]="#0c0b0c"
# Color of inactive/disabled text
theme[inactive_fg]="#584e51"
# Color of text appearing on top of graphs
theme[graph_text]="#e2dddc"
# Background color of the percentage meters
theme[meter_bg]="#1e1d1e"
# Misc colors for processes box
theme[proc_misc]="#e2dddc"
# CPU, Memory, Network, Proc box outline colors
theme[cpu_box]="#584e51"
theme[mem_box]="#584e51"
theme[net_box]="#584e51"
theme[proc_box]="#584e51"
# Box divider line and small boxes line color
theme[div_line]="#6B5E73"
# Temperature graph color (Green -> Yellow -> Red)
theme[temp_start]="#87a9b0"
theme[temp_mid]="#6B5E73"
theme[temp_end]="#c38b7b"
# CPU graph colors (Blue -> Cyan -> Magenta)
theme[cpu_start]="#b59790"
theme[cpu_mid]="#a5a0b6"
theme[cpu_end]="#c4d8e2"
# Mem/Disk free meter (Reversed "Available" colors: Cyan -> Blue -> Purple)
theme[free_start]="#c4d8e2"
theme[free_mid]="#b59790"
theme[free_end]="#6B5E73"
# Mem/Disk cached meter
theme[cached_start]="#b59790"
theme[cached_mid]="#c4d8e2"
theme[cached_end]="#e2dddc"
# Mem/Disk available meter (Purple -> Blue -> Cyan)
theme[available_start]="#6B5E73"
theme[available_mid]="#b59790"
theme[available_end]="#a5a0b6"
# Mem/Disk used meter
theme[used_start]="#c38b7b"
theme[used_mid]="#6B5E73"
theme[used_end]="#584e51"
# Download graph colors
theme[download_start]="#87a9b0"
theme[download_mid]="#a5a0b6"
theme[download_end]="#cfd3cd"
# Upload graph colors
theme[upload_start]="#b59790"
theme[upload_mid]="#c4d8e2"
theme[upload_end]="#e2dddc"
# Process box color gradient
theme[process_start]="#c4d8e2"
theme[process_mid]="#a5a0b6"
theme[process_end]="#c38b7b"
# Graph gradient colors
theme[gradient_color_0]="#0c0b0c"
theme[gradient_color_1]="#584e51"
theme[gradient_color_2]="#6B5E73"
theme[gradient_color_3]="#c38b7b"
theme[gradient_color_4]="#87a9b0"
theme[gradient_color_5]="#b59790"
theme[gradient_color_6]="#a5a0b6"
theme[gradient_color_7]="#FAFCFB"
+1
View File
@@ -0,0 +1 @@
12,11,12
+35
View File
@@ -0,0 +1,35 @@
# Accent and UI colors
accent = "#b59790"
active_border_color = "#d6d3de"
active_tab_background = "#a5a0b6"
# Cursor colors
cursor = "#e2dddc"
# Primary colors
foreground = "#FAFCFB"
background = "#0c0b0c"
# Selection colors
selection_foreground = "#0c0b0c"
selection_background = "#FAFCFB"
# Normal colors (ANSI 0-7)
color0 = "#0c0b0c"
color1 = "#c38b7b"
color2 = "#87a9b0"
color3 = "#6B5E73"
color4 = "#b59790"
color5 = "#c4d8e2"
color6 = "#a5a0b6"
color7 = "#cfd3cd"
# Bright colors (ANSI 8-15)
color8 = "#584e51"
color9 = "#c38b7b"
color10 = "#87a9b0"
color11 = "#6B5E73"
color12 = "#b59790"
color13 = "#c4d8e2"
color14 = "#a5a0b6"
color15 = "#e2dddc"
+12
View File
@@ -0,0 +1,12 @@
$activeBorderColor = rgba(8a8588ee) rgba(e2dddcee)
$inactiveBorderColor = rgba(584e51aa)
general {
col.active_border = $activeBorderColor
col.inactive_border = $inactiveBorderColor
}
group {
col.border_active = $activeBorderColor
col.border_inactive = $inactiveBorderColor
}
+6
View File
@@ -0,0 +1,6 @@
$color = rgba(12, 11, 12, 1)
$inner_color = rgba(12, 11, 12, 0.66)
$outer_color = rgba(195, 139, 123, 1)
$font_color = rgba(226, 221, 220, 1)
$placeholder_color = rgba(255, 255, 255, 0.7)
$check_color = rgba(181, 151, 144, 1)
+1
View File
@@ -0,0 +1 @@
Yaru-purple
+41
View File
@@ -0,0 +1,41 @@
return {
{
"bjarneo/aether.nvim",
branch = "v2",
name = "aether",
priority = 1000,
opts = {
transparent = false,
colors = {
bg = "#0c0b0c",
bg_dark = "#0c0b0c",
bg_highlight = "#716661", -- still only change to bg_highlight
-- Foregrounds
fg = "#f1f1ef",
fg_dark = "#e0dbd9",
comment = "#94918c",
red = "#e36a58",
orange = "#c38d72",
yellow = "#c8a88a",
green = "#a4dded",
cyan = "#725379",
blue = "#4691a1",
purple = "#c9a3c9",
magenta = "#b9a0d1",
},
},
config = function(_, opts)
require("aether").setup(opts)
vim.cmd.colorscheme("aether")
require("aether.hotreload").setup()
end,
},
{
"LazyVim/LazyVim",
opts = {
colorscheme = "aether",
},
},
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 KiB

+30
View File
@@ -0,0 +1,30 @@
@define-color background-color #0c0b0c;
@define-color border-color #b59790;
@define-color label #e2dddc;
@define-color image #b59790;
@define-color progress #e2dddc;
/* Cancel out Omarchy settings */
window:not(:backdrop),
window:backdrop {
border: none;
border-width: 0;
border-radius: 4px;
background-color: transparent;
box-shadow: none;
padding: 12px;
}
/* Draw a new background */
window:not(:backdrop) #container,
window:backdrop #container {
border: 2px solid @border-color;
border-radius: 4px;
background-color: @background-color;
padding: 12px;
background-clip: padding-box;
box-shadow: 2px 2px 9px 0px rgba(22, 22, 22, 1);
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

+4
View File
@@ -0,0 +1,4 @@
{
"name": "Ship at Sea",
"extension": "rikkarth.ship-at-sea"
}
+2
View File
@@ -0,0 +1,2 @@
@define-color background #0c0b0c;
@define-color foreground #FAFCFB;
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 956 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

+70
View File
@@ -0,0 +1,70 @@
# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]="#101315"
# Main text color
theme[main_fg]="#cacccc"
# Title color for boxes
theme[title]="#9fa5a9"
# Highlight color for keyboard shortcuts
theme[hi_fg]="#b2b7ba"
# Background color of selected item in processes box
theme[selected_bg]="#a3a6a7"
# Foreground color of selected item in processes box
theme[selected_fg]="#cacccc"
# Color of inactive/disabled text
theme[inactive_fg]="#565d60"
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#9fa5a9"
# Box outline and divider line color
theme[cpu_box]="#9fa5a9"
theme[mem_box]="#9fa5a9"
theme[net_box]="#9fa5a9"
theme[proc_box]="#9fa5a9"
theme[div_line]="#62676a"
# Gradient for all meters and graphs
theme[temp_start]="#b2b7ba"
theme[temp_mid]="#798186"
theme[temp_end]="#9fa5a9"
theme[cpu_start]="#b2b7ba"
theme[cpu_mid]="#798186"
theme[cpu_end]="#9fa5a9"
theme[free_start]="#798186"
theme[free_mid]="#d9dbdc"
theme[free_end]="#d9dbdc"
theme[cached_start]="#d9dbdc"
theme[cached_mid]="#d9dbdc"
theme[cached_end]="#d9dbdc"
theme[available_start]="#b2b7ba"
theme[available_mid]="#b2b7ba"
theme[available_end]="#b2b7ba"
theme[used_start]="#9fa5a9"
theme[used_mid]="#9fa5a9"
theme[used_end]="#9fa5a9"
theme[download_start]="#d9dbdc"
theme[download_mid]="#b2b7ba"
theme[download_end]="#798186"
theme[upload_start]="#d9dbdc"
theme[upload_mid]="#b2b7ba"
theme[upload_end]="#798186"
+35
View File
@@ -0,0 +1,35 @@
# Accent and UI colors
accent = "#798186"
active_border_color = "#a8adb0"
active_tab_background = "#798186"
# Cursor colors
cursor = "#cacccc"
# Primary colors
foreground = "#cacccc"
background = "#101315"
# Selection colors
selection_foreground = "#101315"
selection_background = "#798186"
# Normal colors (ANSI 0-7)
color0 = "#101315"
color1 = "#565d60"
color2 = "#9fa5a9"
color3 = "#d9dbdc"
color4 = "#798186"
color5 = "#aeaeae"
color6 = "#707070"
color7 = "#cbc2be"
# Bright colors (ANSI 8-15)
color8 = "#4b4e55"
color9 = "#de6145"
color10 = "#343d41"
color11 = "#c9c2b4"
color12 = "#5d6367"
color13 = "#9a9a9a"
color14 = "#707070"
color15 = "#a5aeb4"
+12
View File
@@ -0,0 +1,12 @@
$activeBorderColor = rgba(798186ee) rgba(caccccee)
$inactiveBorderColor = rgb(1e1e1e)
general {
col.active_border = $activeBorderColor
col.inactive_border = $inactiveBorderColor
}
group {
col.border_active = $activeBorderColor
col.border_inactive = $inactiveBorderColor
}
+6
View File
@@ -0,0 +1,6 @@
$color = rgba(16, 19, 21, 1)
$inner_color = rgba(16, 19, 21, 1)
$outer_color = rgba(121, 129, 134, 1)
$font_color = rgba(202, 204, 204, 1)
$placeholder_color = rgba(202, 204, 204, 0.7)
$check_color = rgba(52, 61, 65, 1)
+1
View File
@@ -0,0 +1 @@
Yaru-sage-dark
+9
View File
@@ -0,0 +1,9 @@
return {
{ "ficcdaf/ashen.nvim" },
{
"LazyVim/LazyVim",
opts = {
colorscheme = "ashen",
},
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 849 KiB

+30
View File
@@ -0,0 +1,30 @@
@define-color background-color #101315;
@define-color border-color #2f353b;
@define-color label #cacccc;
@define-color image #cacccc;
@define-color progress #d9dbdc;
/* Cancel out Omarchy settings */
window:not(:backdrop),
window:backdrop {
border: none;
border-width: 0;
border-radius: 4px;
background-color: transparent;
box-shadow: none;
padding: 12px;
}
/* Draw a new background */
window:not(:backdrop) #container,
window:backdrop #container {
border: 2px solid @border-color;
border-radius: 6px;
background-color: @background-color;
padding: 12px;
background-clip: padding-box;
box-shadow: 2px 2px 9px 0px rgba(22, 22, 22, 1);
}
+4
View File
@@ -0,0 +1,4 @@
{
"name": "Noctokai",
"extension": "farigab.noctokai-theme"
}
+2
View File
@@ -0,0 +1,2 @@
@define-color background #101315;
@define-color foreground #cacccc;