Compare commits

..
6 Commits
143 changed files with 770 additions and 3489 deletions
-4
View File
@@ -92,10 +92,6 @@ Exceptions are allowed for bootstrap, preflight, migration, and package-helper s
- `default/themed/*.tpl` - templates with `{{ variable }}` placeholders for theme colors
- `themes/*/colors.toml` - theme color definitions (accent, background, foreground, color0-15)
# 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.
# Refresh Pattern
To copy a default config to user config with automatic backup:
Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

-2
View File
@@ -29,7 +29,6 @@ declare -A GROUP_DESCRIPTIONS
GROUP_DESCRIPTIONS[ac]="AC power detection"
GROUP_DESCRIPTIONS[battery]="Battery status helpers"
GROUP_DESCRIPTIONS[branch]="Omarchy git branch management"
GROUP_DESCRIPTIONS[branding]="About and screensaver branding"
GROUP_DESCRIPTIONS[brightness]="Display and keyboard brightness"
GROUP_DESCRIPTIONS[capture]="Screenshots and screen recording"
GROUP_DESCRIPTIONS[channel]="Omarchy release channel management"
@@ -55,7 +54,6 @@ 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"
-28
View File
@@ -1,28 +0,0 @@
#!/bin/bash
# omarchy:summary=Edit, set, or reset About branding
# omarchy:group=branding
# omarchy:name=about
# omarchy:args=<image|text|reset>
# omarchy:examples=omarchy branding about image | omarchy branding about text | omarchy branding about reset
set -euo pipefail
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
omarchy-launch-about >/dev/null 2>&1
fi
;;
text)
omarchy-launch-editor ~/.config/omarchy/branding/about.txt >/dev/null 2>&1 && omarchy-launch-about >/dev/null 2>&1
;;
reset)
cp "$OMARCHY_PATH/icon.txt" ~/.config/omarchy/branding/about.txt && omarchy-launch-about >/dev/null 2>&1
;;
*)
echo "Usage: omarchy-branding-about <image|text|reset>" >&2
exit 1
;;
esac
-28
View File
@@ -1,28 +0,0 @@
#!/bin/bash
# omarchy:summary=Edit, set, or reset screensaver branding
# omarchy:group=branding
# omarchy:name=screensaver
# omarchy:args=<image|text|reset>
# omarchy:examples=omarchy branding screensaver image | omarchy branding screensaver text | omarchy branding screensaver reset
set -euo pipefail
case "${1:-}" in
image)
image=$(omarchy-menu-file "Logo image" "$HOME" "svg png")
if [[ -n $image ]] && omarchy-transcode-ascii "$image" ~/.config/omarchy/branding/screensaver.txt; then
omarchy-launch-screensaver force >/dev/null 2>&1
fi
;;
text)
omarchy-launch-editor ~/.config/omarchy/branding/screensaver.txt >/dev/null 2>&1 && omarchy-launch-screensaver force >/dev/null 2>&1
;;
reset)
cp "$OMARCHY_PATH/logo.txt" ~/.config/omarchy/branding/screensaver.txt && omarchy-launch-screensaver force >/dev/null 2>&1
;;
*)
echo "Usage: omarchy-branding-screensaver <image|text|reset>" >&2
exit 1
;;
esac
-1
View File
@@ -233,7 +233,6 @@ stop_screenrecording() {
else
finalize_recording
local filename=$(cat "$RECORDING_FILE" 2>/dev/null)
echo "$filename"
local preview="${filename%.mp4}-preview.png"
# Generate a preview thumbnail from the first frame
+11 -19
View File
@@ -2,7 +2,7 @@
# omarchy:summary=Take a screenshot
# omarchy:group=capture
# omarchy:args=[smart|region|windows|fullscreen] [slurp|copy|save] [--editor=<name>]
# omarchy:args=[smart|region|windows|fullscreen] [slurp|copy] [--editor=<name>]
# omarchy:examples=omarchy screenshot | omarchy capture screenshot region
# omarchy:aliases=omarchy screenshot
@@ -126,22 +126,14 @@ esac
FILENAME="screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png"
FILEPATH="$OUTPUT_DIR/$FILENAME"
case "$PROCESSING" in
slurp)
grim -g "$SELECTION" "$FILEPATH" || exit 1
echo "$FILEPATH"
wl-copy <"$FILEPATH"
if [[ $PROCESSING == "slurp" ]]; then
grim -g "$SELECTION" "$FILEPATH" || exit 1
wl-copy <"$FILEPATH"
(
ACTION=$(notify-send "Screenshot saved to clipboard and file" "Edit with Super + Alt + , (or click this)" -t 10000 -i "$FILEPATH" -A "default=edit")
[[ $ACTION == "default" ]] && open_editor "$FILEPATH"
) >/dev/null 2>&1 &
;;
copy)
grim -g "$SELECTION" - | wl-copy
;;
save)
grim -g "$SELECTION" "$FILEPATH" || exit 1
echo "$FILEPATH"
;;
esac
(
ACTION=$(notify-send "Screenshot saved to clipboard and file" "Edit with Super + Alt + , (or click this)" -t 10000 -i "$FILEPATH" -A "default=edit")
[[ $ACTION == "default" ]] && open_editor "$FILEPATH"
) &
else
grim -g "$SELECTION" - | wl-copy
fi
+4 -2
View File
@@ -74,13 +74,15 @@ ACTION=$(gum choose "${OPTIONS[@]}")
case "$ACTION" in
"Upload log")
echo "Uploading debug log to logs.omarchy.org..."
URL=$(curl -sf -F "file=@$LOG_FILE" https://logs.omarchy.org/)
echo "Uploading debug log to 0x0.st..."
URL=$(curl -sF "file=@$LOG_FILE" -Fexpires=24 https://0x0.st)
if (( $? == 0 )) && [[ -n $URL ]]; then
echo "✓ Log uploaded successfully!"
echo "Share this URL:"
echo ""
echo " $URL"
echo ""
echo "This link will expire in 24 hours."
else
echo "Error: Failed to upload log file"
exit 1
+1 -1
View File
@@ -12,7 +12,7 @@ fi
case "$1" in
code) editor="code"; name="VSCode"; glyph="" ;;
cursor) editor="cursor"; name="Cursor"; glyph="" ;;
zed | zeditor) editor="zeditor"; name="Zed"; glyph="" ;;
zed) editor="zed"; name="Zed"; glyph="" ;;
sublime_text) editor="sublime_text"; name="Sublime Text"; glyph="" ;;
helix) editor="helix"; name="Helix"; glyph="" ;;
vim) editor="vim"; name="Vim"; glyph="" ;;
-1
View File
@@ -16,7 +16,6 @@ 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"
+96
View File
@@ -0,0 +1,96 @@
#!/usr/bin/env python3
# omarchy:summary=Run the Synaptics touchpad haptic feedback daemon
"""Haptic feedback daemon for Synaptics touchpads with Manual Trigger.
Monitors touchpad button press events and sends haptic pulses via HID
feature reports. Required because the kernel's HID haptic subsystem only
supports Auto Trigger with waveform enumeration, not the simpler Manual
Trigger protocol used by these Synaptics touchpads.
"""
import fcntl, glob, os, struct, sys
VENDOR = "06CB"
REPORT_ID = 0x37
INTENSITY = 40 # 0-100
# input_event: struct timeval (16 bytes on 64-bit) + type(H) + code(H) + value(i)
EVENT_FORMAT = "llHHi"
EVENT_SIZE = struct.calcsize(EVENT_FORMAT)
EV_KEY = 0x01
BTN_LEFT = 272
BTN_RIGHT = 273
BTN_MIDDLE = 274
# ioctl: HIDIOCSFEATURE(len) = _IOC(_IOC_WRITE|_IOC_READ, 'H', 0x06, len)
def HIDIOCSFEATURE(length):
return 0xC0000000 | (length << 16) | (ord("H") << 8) | 0x06
def find_hidraw():
for path in sorted(glob.glob("/sys/class/hidraw/hidraw*")):
uevent = os.path.join(path, "device", "uevent")
try:
with open(uevent) as f:
content = f.read().upper()
if f"0000{VENDOR}" in content:
return os.path.join("/dev", os.path.basename(path))
except OSError:
continue
return None
def find_touchpad_event():
for path in sorted(glob.glob("/sys/class/input/event*/device/name")):
try:
with open(path) as f:
name = f.read().strip().upper()
if VENDOR in name and "TOUCHPAD" in name:
event = path.split("/")[-3]
return os.path.join("/dev/input", event)
except OSError:
continue
return None
def main():
hidraw = find_hidraw()
if not hidraw:
print("No Synaptics haptic touchpad hidraw device found", file=sys.stderr)
sys.exit(1)
event = find_touchpad_event()
if not event:
print("No Synaptics haptic touchpad input device found", file=sys.stderr)
sys.exit(1)
print(f"Haptic touchpad: hidraw={hidraw} input={event} intensity={INTENSITY}", flush=True)
haptic_report = struct.pack("BB", REPORT_ID, INTENSITY)
ioctl_req = HIDIOCSFEATURE(len(haptic_report))
hidraw_fd = os.open(hidraw, os.O_RDWR)
event_fd = os.open(event, os.O_RDONLY)
try:
while True:
data = os.read(event_fd, EVENT_SIZE)
if len(data) < EVENT_SIZE:
continue
_, _, ev_type, code, value = struct.unpack(EVENT_FORMAT, data)
if ev_type == EV_KEY and code in (BTN_LEFT, BTN_RIGHT, BTN_MIDDLE) and value == 1:
try:
fcntl.ioctl(hidraw_fd, ioctl_req, haptic_report)
except OSError:
pass
except KeyboardInterrupt:
pass
finally:
os.close(event_fd)
os.close(hidraw_fd)
if __name__ == "__main__":
main()
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash
# omarchy:summary=Match Dell XPS systems with the Synaptics haptic touchpad.
omarchy-hw-match "XPS" && [[ -e /sys/bus/i2c/devices/i2c-VEN_06CB:00 ]]
+3 -3
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# omarchy:summary=Cycle focused Hyprland monitor scaling through 1x, 1.25x, 1.6x, 2x, 3x, and 4x
# omarchy:summary=Cycle focused Hyprland monitor scaling through 1x, 1.25x, 1.6x, 2x, and 3x
MONITOR_INFO=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true)')
ACTIVE_MONITOR=$(echo "$MONITOR_INFO" | jq -r '.name')
@@ -9,8 +9,8 @@ WIDTH=$(echo "$MONITOR_INFO" | jq -r '.width')
HEIGHT=$(echo "$MONITOR_INFO" | jq -r '.height')
REFRESH_RATE=$(echo "$MONITOR_INFO" | jq -r '.refreshRate')
# Cycle through scales: 1 → 1.25 → 1.6 → 2 → 3 → 4 → 1 (or reverse with --reverse)
SCALES=(1 1.25 1.6 2 3 4)
# Cycle through scales: 1 → 1.25 → 1.6 → 2 → 3 → 1 (or reverse with --reverse)
SCALES=(1 1.25 1.6 2 3)
# Find the index of the scale closest to the current one (Hyprland may
# snap fractional scales to nearby values, so we can't match exactly)
+1 -4
View File
@@ -21,10 +21,7 @@ omarchy-pkg-add \
libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \
libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \
libretro-yabause \
libretro-cap32-git libretro-fbneo-git libretro-uae-git \
libretro-vice-x128-git libretro-vice-x64-git libretro-vice-x64dtv-git libretro-vice-x64sc-git \
libretro-vice-xcbm2-git libretro-vice-xcbm5x0-git libretro-vice-xpet-git \
libretro-vice-xplus4-git libretro-vice-xscpu64-git libretro-vice-xvic-git \
libretro-cap32-git libretro-fbneo-git libretro-uae-git libretro-vice-git \
libretro-database-git \
retroarch-joypad-autoconfig-git
+43 -89
View File
@@ -93,10 +93,9 @@ show_learn_menu() {
}
show_trigger_menu() {
case $(menu "Trigger" "󰔛 Reminder\n Capture\n󰧸 Transcode\n Share\n󰔎 Toggle\n Hardware") in
*Reminder*) show_reminder_menu ;;
case $(menu "Trigger" " Capture\n󰧸 Transcode\n Share\n󰔎 Toggle\n Hardware") in
*Capture*) show_capture_menu ;;
*Transcode*) omarchy-transcode || back_to show_trigger_menu ;;
*Transcode*) show_transcode_menu ;;
*Share*) show_share_menu ;;
*Toggle*) show_toggle_menu ;;
*Hardware*) show_hardware_menu ;;
@@ -104,41 +103,6 @@ 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=$(omarchy-menu-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=$(omarchy-menu-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 ;;
@@ -203,6 +167,14 @@ show_share_menu() {
esac
}
show_transcode_menu() {
case $(menu "Transcode" " Picture\n Video") in
*Picture*) present_terminal "omarchy-transcode --path '$HOME/Pictures'" ;;
*Video*) present_terminal "omarchy-transcode --path '$HOME/Videos'" ;;
*) back_to show_trigger_menu ;;
esac
}
show_toggle_menu() {
local options="󱄄 Screensaver\n󰔎 Nightlight\n󱫖 Idle Lock\n󰂛 Notifications\n󰍜 Top Bar\n󱂬 Workspace Layout\n Window Gaps\n 1-Window Ratio\n󰍹 Monitor Scaling\n Direct Boot\n󰟵 Passwordless Sudo"
@@ -233,18 +205,13 @@ show_hardware_menu() {
options="$options\n󰟸 Touchpad"
fi
if omarchy-hw-dell-xps-haptic-touchpad && omarchy-cmd-present dell-xps-touchpad-haptics; then
options="$options\n󰌌 Touchpad Haptics"
fi
if omarchy-hw-touchscreen; then
options="$options\n󰆽 Touchscreen"
fi
case $(menu "Toggle" "$options") in
*Laptop*) omarchy-hyprland-monitor-internal toggle ;;
*Mirror*) omarchy-hyprland-monitor-internal-mirror toggle ;;
*Haptics*) show_hardware_touchpad_haptics_menu ;;
*Mirror*) omarchy-hyprland-monitor-internal-mirror toggle;;
*Touchpad*) omarchy-toggle-touchpad ;;
*Touchscreen*) omarchy-toggle-touchscreen ;;
*"Hybrid GPU"*) present_terminal omarchy-toggle-hybrid-gpu ;;
@@ -252,17 +219,6 @@ show_hardware_menu() {
esac
}
show_hardware_touchpad_haptics_menu() {
local current=$(dell-xps-touchpad-haptics get)
local selected=$(menu "Touchpad Haptics" "low\nmid\nhigh" "" "$current")
if [[ -n $selected ]]; then
dell-xps-touchpad-haptics set "$selected"
else
back_to show_hardware_menu
fi
}
show_style_menu() {
case $(menu "Style" "󰸌 Theme\n󰟵 Unlock\n Font\n Background\n Hyprland\n󱄄 Screensaver\n About") in
*Theme*) show_theme_menu ;;
@@ -271,27 +227,33 @@ show_style_menu() {
*Background*) show_background_menu ;;
*Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;;
*Screensaver*) show_screensaver_menu ;;
*About*) show_about_menu ;;
*About*) open_in_editor ~/.config/omarchy/branding/about.txt ;;
*) show_main_menu ;;
esac
}
show_about_menu() {
case $(menu "About" " Edit Text\n Set From Image\n Restore Default") in
*Text*) omarchy-branding-about text ;;
*Image*) omarchy-branding-about image ;;
*Default*) omarchy-branding-about reset ;;
show_screensaver_menu() {
case $(menu "Screensaver" " Edit Text\n Set From Image\n󱄄 Preview\n Restore Default") in
*Text*) open_in_editor ~/.config/omarchy/branding/screensaver.txt ;;
*Image*) set_screensaver_from_image ;;
*Preview*) omarchy-launch-screensaver force ;;
*Default*) terminal bash -lc 'omarchy-screensaver-logo default; echo; read -n 1 -s -r -p "Press any key to close..."' ;;
*) show_style_menu ;;
esac
}
show_screensaver_menu() {
case $(menu "Screensaver" " Edit Text\n Set From Image\n Restore Default") in
*Text*) omarchy-branding-screensaver text ;;
*Image*) omarchy-branding-screensaver image ;;
*Default*) omarchy-branding-screensaver reset ;;
*) show_style_menu ;;
esac
set_screensaver_from_image() {
terminal bash -lc '
image=$(fd --type file --ignore-case --extension svg --extension png . "$HOME" 2>/dev/null | fzf --prompt "Logo image> ")
if [[ -n $image ]]; then
if omarchy-screensaver-logo "$image"; then
echo
echo "Preview with: omarchy-launch-screensaver force"
fi
echo
read -n 1 -s -r -p "Press any key to close..."
fi
'
}
show_theme_menu() {
@@ -346,8 +308,8 @@ show_setup_power_menu() {
show_setup_security_menu() {
case $(menu "Setup" "󰈷 Fingerprint\n Fido2") in
*Fingerprint*) present_terminal omarchy-setup-security-fingerprint ;;
*Fido2*) present_terminal omarchy-setup-security-fido2 ;;
*Fingerprint*) present_terminal omarchy-setup-fingerprint ;;
*Fido2*) present_terminal omarchy-setup-fido2 ;;
*) show_setup_menu ;;
esac
}
@@ -427,7 +389,7 @@ show_setup_default_editor_menu() {
omarchy-cmd-present nvim && options="$options Neovim"
omarchy-cmd-present code && options="${options:+$options\n} VSCode"
omarchy-cmd-present cursor && options="${options:+$options\n} Cursor"
omarchy-cmd-present zeditor && options="${options:+$options\n} Zed"
omarchy-cmd-present zed && options="${options:+$options\n} Zed"
omarchy-cmd-present sublime_text && options="${options:+$options\n} Sublime Text"
omarchy-cmd-present helix && options="${options:+$options\n} Helix"
omarchy-cmd-present vim && options="${options:+$options\n} Vim"
@@ -438,7 +400,7 @@ show_setup_default_editor_menu() {
nvim) current=" Neovim" ;;
code) current=" VSCode" ;;
cursor) current=" Cursor" ;;
zed | zeditor) current=" Zed" ;;
zed) current=" Zed" ;;
sublime_text) current=" Sublime Text" ;;
helix) current=" Helix" ;;
vim) current=" Vim" ;;
@@ -578,7 +540,7 @@ 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)") in
*Steam*) present_terminal omarchy-install-gaming-steam ;;
*RetroArch*) present_terminal omarchy-install-gaming-retroarch ;;
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
@@ -660,30 +622,23 @@ show_install_elixir_menu() {
}
show_remove_menu() {
case $(menu "Remove" "󰣇 Package\n Web App\n TUI\n󰵮 Development\n󰸌 Theme\n Browser\n Dictation\n Gaming\n󰍲 Windows\n󰏓 Preinstalls\n Security") in
case $(menu "Remove" "󰣇 Package\n Browser\n Web App\n TUI\n󰵮 Development\n Gaming\n󰏓 Preinstalls\n Dictation\n󰸌 Theme\n󰍲 Windows\n󰈷 Fingerprint\n Fido2") in
*Package*) terminal omarchy-pkg-remove ;;
*Browser*) show_remove_browser_menu ;;
*Web*) present_terminal omarchy-webapp-remove ;;
*TUI*) present_terminal omarchy-tui-remove ;;
*Development*) show_remove_development_menu ;;
*Theme*) present_terminal omarchy-theme-remove ;;
*Browser*) show_remove_browser_menu ;;
*Dictation*) present_terminal omarchy-voxtype-remove ;;
*Gaming*) show_remove_gaming_menu ;;
*Windows*) present_terminal "omarchy-windows-vm remove" ;;
*Preinstalls*) present_terminal omarchy-remove-preinstalls ;;
*Security*) show_remove_security_menu ;;
*Dictation*) present_terminal omarchy-voxtype-remove ;;
*Theme*) present_terminal omarchy-theme-remove ;;
*Windows*) present_terminal "omarchy-windows-vm remove" ;;
*Fingerprint*) present_terminal "omarchy-setup-fingerprint --remove" ;;
*Fido2*) present_terminal "omarchy-setup-fido2 --remove" ;;
*) show_main_menu ;;
esac
}
show_remove_security_menu() {
case $(menu "Remove" "󰈷 Fingerprint\n Fido2") in
*Fingerprint*) present_terminal omarchy-remove-security-fingerprint ;;
*Fido2*) present_terminal omarchy-remove-security-fido2 ;;
*) show_remove_menu ;;
esac
}
show_remove_browser_menu() {
case $(menu "Remove" " Chrome\n Edge\n Brave\n Brave Origin\n Firefox\n Zen") in
*Chrome*) present_terminal "omarchy-remove-browser chrome" ;;
@@ -860,8 +815,7 @@ go_to_menu() {
*toggle*) show_toggle_menu ;;
*hardware*) show_hardware_menu ;;
*share*) show_share_menu ;;
*reminder-set*) show_custom_reminder_input ;;
*reminder*) show_reminder_menu ;;
*transcode*) show_transcode_menu ;;
*background*) show_background_menu ;;
*capture*) show_capture_menu ;;
*style*) show_style_menu ;;
-48
View File
@@ -1,48 +0,0 @@
#!/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 <label> <paths> <formats> [walker args...]" >&2
exit 1
fi
label="$1"
paths_arg="$2"
formats_arg="$3"
shift 3
IFS=: read -r -a paths <<<"$paths_arg"
read -r -a formats <<<"$formats_arg"
if (( ${#paths[@]} == 0 || ${#formats[@]} == 0 )); then
echo "Usage: omarchy-menu-file <label> <paths> <formats> [walker args...]" >&2
exit 1
fi
for path in "${paths[@]}"; do
[[ -e $path ]] || { echo "Path not found: $path" >&2; exit 1; }
done
find_args=("${paths[@]}" "(" -type d -name ".*" ! -name "." -prune ")" -o -type f ! -name ".*" "(")
first_format=true
for format in "${formats[@]}"; do
if [[ $first_format == "true" ]]; then
first_format=false
else
find_args+=(-o)
fi
format="${format#.}"
find_args+=(-iname "*.$format")
done
find_args+=(")" -printf '%T@\t%p\n')
find "${find_args[@]}" 2>/dev/null | sort -rn | cut -f2- |
omarchy-launch-walker --dmenu --width 800 --minheight 1 --maxheight 500 -p "$label…" "$@" 2>/dev/null
-16
View File
@@ -1,16 +0,0 @@
#!/bin/bash
# omarchy:summary=Prompt for text input with Walker
# omarchy:group=menu
# omarchy:name=input
# omarchy:args=prompt [walker args...]
# omarchy:examples=omarchy menu input Reminder|omarchy-menu-input "Reminder in minutes" --width 400
set -euo pipefail
prompt="${1:-Input}"
if (( $# > 0 )); then
shift
fi
omarchy-launch-walker --dmenu --inputonly --width 295 --minheight 1 --maxheight 1 -p "$prompt…" "$@" 2>/dev/null
-38
View File
@@ -1,38 +0,0 @@
#!/bin/bash
# omarchy:summary=Pick one option with Walker
# omarchy:group=menu
# omarchy:name=select
# omarchy:args=prompt option... [-- walker args...]
# omarchy:examples=omarchy menu select Format jpg png|omarchy-menu-select Resolution 4k 1080p 720p -- --width 400
set -euo pipefail
if (( $# < 2 )); then
echo "Usage: omarchy-menu-select <prompt> <option>... [-- walker args...]" >&2
exit 1
fi
prompt="$1"
shift
options=()
walker_args=()
while (( $# > 0 )); do
if [[ $1 == "--" ]]; then
shift
walker_args=("$@")
break
fi
options+=("$1")
shift
done
if (( ${#options[@]} == 0 )); then
echo "Usage: omarchy-menu-select <prompt> <option>... [-- walker args...]" >&2
exit 1
fi
printf '%s\n' "${options[@]}" | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 300 -p "$prompt…" "${walker_args[@]}" 2>/dev/null
-32
View File
@@ -1,32 +0,0 @@
#!/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
set -euo pipefail
if (($# < 2)); then
echo "Usage: omarchy-notification-send <glyph> <headline> [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
+1 -1
View File
@@ -6,6 +6,6 @@ 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 --depth=1 "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
-139
View File
@@ -1,139 +0,0 @@
#!/bin/bash
# omarchy:summary=Set and show lightweight desktop notification reminders
# omarchy:args=<minutes> [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 <minutes> [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
+1 -4
View File
@@ -21,10 +21,7 @@ omarchy-pkg-drop \
libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \
libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \
libretro-yabause \
libretro-cap32-git libretro-fbneo-git libretro-uae-git \
libretro-vice-x128-git libretro-vice-x64-git libretro-vice-x64dtv-git libretro-vice-x64sc-git \
libretro-vice-xcbm2-git libretro-vice-xcbm5x0-git libretro-vice-xpet-git \
libretro-vice-xplus4-git libretro-vice-xscpu64-git libretro-vice-xvic-git \
libretro-cap32-git libretro-fbneo-git libretro-uae-git libretro-vice-git \
retroarch-joypad-autoconfig-git
rm -rf \
-35
View File
@@ -1,35 +0,0 @@
#!/bin/bash
# omarchy:summary=Remove FIDO2 authentication from sudo and polkit
# omarchy:requires-sudo=true
set -e
remove_pam_config() {
# Remove from sudo
if grep -q pam_u2f.so /etc/pam.d/sudo; then
echo "Removing FIDO2 authentication from sudo..."
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/sudo
fi
# Remove from polkit
if [[ -f /etc/pam.d/polkit-1 ]] && grep -Fq 'pam_u2f.so' /etc/pam.d/polkit-1; then
echo "Removing FIDO2 authentication from polkit..."
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/polkit-1
fi
}
echo -e "\e[32mRemoving FIDO2 device from authentication.\n\e[0m"
remove_pam_config
if [[ -d /etc/fido2 ]]; then
echo "Removing FIDO2 configuration..."
sudo rm -rf /etc/fido2
fi
echo "Removing FIDO2 packages..."
omarchy-pkg-drop libfido2 pam-u2f
echo -e "\e[32mFIDO2 authentication has been completely removed.\e[0m"
-37
View File
@@ -1,37 +0,0 @@
#!/bin/bash
# omarchy:summary=Remove fingerprint authentication from sudo, polkit, and lock screen
# omarchy:requires-sudo=true
set -e
remove_pam_config() {
# Remove from sudo
if grep -q pam_fprintd.so /etc/pam.d/sudo; then
echo "Removing fingerprint authentication from sudo..."
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/sudo
fi
# Remove from polkit
if [[ -f /etc/pam.d/polkit-1 ]] && grep -Fq 'pam_fprintd.so' /etc/pam.d/polkit-1; then
echo "Removing fingerprint authentication from polkit..."
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/polkit-1
fi
}
remove_hyprlock_fingerprint_icon() {
echo "Removing fingerprint icon from hyprlock placeholder text..."
sed -i 's/placeholder_text = .*/placeholder_text = Enter Password/' ~/.config/hypr/hyprlock.conf
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = false/' ~/.config/hypr/hyprlock.conf
}
echo -e "\e[32mRemoving fingerprint scanner from authentication.\n\e[0m"
remove_pam_config
remove_hyprlock_fingerprint_icon
echo "Removing fingerprint packages..."
omarchy-pkg-drop fprintd libfprint-git
echo -e "\e[32mFingerprint authentication has been completely removed.\e[0m"
+2 -6
View File
@@ -2,9 +2,5 @@
# omarchy:summary=Restart the PipeWire audio service to fix audio issues or apply new configuration.
echo -e "Restarting PipeWire audio services...\n"
systemctl --user restart wireplumber.service pipewire.service
if systemctl --user --quiet is-active pipewire-pulse.service; then
systemctl --user restart pipewire-pulse.service
fi
echo -e "Restarting pipewire audio service...\n"
systemctl --user restart pipewire.service
+1 -5
View File
@@ -2,8 +2,4 @@
# omarchy:summary=Restart the SwayOSD server
systemctl --user daemon-reload
systemctl --user stop swayosd-server.service || true
pkill -x swayosd-server || true
systemctl --user reset-failed swayosd-server.service || true
systemctl --user enable --now swayosd-server.service
omarchy-restart-app swayosd-server
+1 -2
View File
@@ -3,5 +3,4 @@
# omarchy:summary=Restart Waybar
# omarchy:examples=omarchy restart waybar
pkill -9 -x waybar
setsid uwsm-app -- waybar >/dev/null 2>&1 &
omarchy-restart-app waybar
@@ -1,18 +1,18 @@
#!/bin/bash
# omarchy:summary=Transcode an image into ASCII/Unicode art text
# omarchy:group=transcode
# omarchy:name=ascii
# omarchy:args=<input-image.svg|png> <output-path> [--width <columns>] [--height <rows>] [--mode <braille|block>] [--threshold <percent>] [--invert]
# omarchy:examples=omarchy transcode ascii ~/logo.svg /tmp/logo.txt | omarchy transcode ascii ~/logo.png ~/.config/omarchy/branding/screensaver.txt --width 80
# omarchy:summary=Set the screensaver logo text from an SVG/PNG or the default
# omarchy:args=<default|path-to-logo.svg|png> [--width <columns>] [--height <rows>] [--mode <braille|block>] [--threshold <percent>] [--invert] [--stdout]
# omarchy:examples=omarchy screensaver logo ~/logo.svg | omarchy screensaver logo default | omarchy screensaver logo ~/logo.png --width 80 --mode block --stdout
set -o pipefail
usage() {
cat <<'EOF'
Usage: omarchy-transcode-ascii <input-image.svg|png> <output-path> [options]
Usage: omarchy-screensaver-logo <default|path-to-logo.svg|png> [options]
Transcodes an image into ASCII/Unicode art text.
Sets the screensaver logo text from an image.
Pass "default" instead of an image path to restore the Omarchy default.
By default, writes to ~/.config/omarchy/branding/screensaver.txt.
Options:
-w, --width <columns> Maximum output width in terminal columns (default: 80)
@@ -21,6 +21,7 @@ Options:
-t, --threshold <percent> Pixel threshold from 0-100 (default: 50)
--invert Treat light pixels as the logo instead of dark pixels
--no-trim Preserve surrounding whitespace/background
--stdout Print converted text instead of writing the screensaver file
--help Show this help
EOF
}
@@ -31,8 +32,9 @@ mode=braille
threshold=50
invert=false
trim=true
output_path="$HOME/.config/omarchy/branding/screensaver.txt"
image_path=""
output_path=""
reset_default=false
while (($# > 0)); do
case "$1" in
@@ -96,6 +98,9 @@ while (($# > 0)); do
--no-trim)
trim=false
;;
--stdout)
output_path="-"
;;
--)
shift
break
@@ -106,10 +111,10 @@ while (($# > 0)); do
exit 1
;;
*)
if [[ -z $image_path ]]; then
if [[ $1 == "default" && -z $image_path ]]; then
reset_default=true
elif [[ -z $image_path ]]; then
image_path="$1"
elif [[ -z $output_path ]]; then
output_path="$1"
else
echo "Unexpected argument: $1" >&2
usage >&2
@@ -122,10 +127,10 @@ done
if (($# > 0)); then
while (($# > 0)); do
if [[ -z $image_path ]]; then
if [[ $1 == "default" && -z $image_path ]]; then
reset_default=true
elif [[ -z $image_path ]]; then
image_path="$1"
elif [[ -z $output_path ]]; then
output_path="$1"
else
echo "Unexpected argument: $1" >&2
usage >&2
@@ -135,7 +140,29 @@ if (($# > 0)); then
done
fi
if [[ -z $image_path || -z $output_path ]]; then
if [[ $reset_default == "true" ]]; then
if [[ -n $image_path ]]; then
echo "default does not accept an image path" >&2
exit 1
fi
default_path="${OMARCHY_PATH:-$HOME/.local/share/omarchy}/logo.txt"
if [[ ! -f $default_path ]]; then
echo "Default screensaver logo text not found: $default_path" >&2
exit 1
fi
if [[ $output_path == "-" ]]; then
cat "$default_path"
else
mkdir -p "$(dirname "$output_path")"
cp "$default_path" "$output_path"
echo "Restored default screensaver logo text to $output_path"
fi
exit 0
fi
if [[ -z $image_path ]]; then
usage >&2
exit 1
fi
@@ -348,6 +375,10 @@ if [[ ! -s $tmp_output ]]; then
exit 1
fi
mkdir -p "$(dirname "$output_path")"
cp "$tmp_output" "$output_path"
echo "Wrote ASCII art to $output_path"
if [[ $output_path == "-" ]]; then
cat "$tmp_output"
else
mkdir -p "$(dirname "$output_path")"
cp "$tmp_output" "$output_path"
echo "Wrote screensaver logo text to $output_path"
fi
+131
View File
@@ -0,0 +1,131 @@
#!/bin/bash
# omarchy:summary=Set up or remove FIDO2 authentication for sudo and polkit
# omarchy:args=[--remove]
# omarchy:requires-sudo=true
set -e
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_error() {
echo -e "${RED}$1${NC}"
}
print_info() {
echo -e "${YELLOW}$1${NC}"
}
check_fido2_hardware() {
tokens=$(fido2-token -L 2>/dev/null)
if [[ -z $tokens ]]; then
print_error "\nNo FIDO2 device detected. Please plug it in (you may need to unlock it as well)."
return 1
fi
return 0
}
setup_pam_config() {
# Configure sudo
if ! grep -q pam_u2f.so /etc/pam.d/sudo; then
print_info "Configuring sudo for FIDO2 authentication..."
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/sudo
fi
# Configure polkit
if [[ -f /etc/pam.d/polkit-1 ]] && ! grep -q 'pam_u2f.so' /etc/pam.d/polkit-1; then
print_info "Configuring polkit for FIDO2 authentication..."
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/polkit-1
elif [[ ! -f /etc/pam.d/polkit-1 ]]; then
print_info "Creating polkit configuration with FIDO2 authentication..."
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2
auth required pam_unix.so
account required pam_unix.so
password required pam_unix.so
session required pam_unix.so
EOF
fi
}
remove_pam_config() {
# Remove from sudo
if grep -q pam_u2f.so /etc/pam.d/sudo; then
print_info "Removing FIDO2 authentication from sudo..."
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/sudo
fi
# Remove from polkit
if [[ -f /etc/pam.d/polkit-1 ]] && grep -Fq 'pam_u2f.so' /etc/pam.d/polkit-1; then
print_info "Removing FIDO2 authentication from polkit..."
sudo sed -i '/pam_u2f\.so/d' /etc/pam.d/polkit-1
fi
}
if [[ "--remove" == $1 ]]; then
print_success "Removing FIDO2 device from authentication.\n"
# Remove PAM configuration
remove_pam_config
# Remove FIDO2 configuration
if [[ -d /etc/fido2 ]]; then
print_info "Removing FIDO2 configuration..."
sudo rm -rf /etc/fido2
fi
# Uninstall packages
print_info "Removing FIDO2 packages..."
sudo pacman -Rns --noconfirm libfido2 pam-u2f
print_success "FIDO2 authentication has been completely removed."
else
print_success "Setting up FIDO2 device for authentication.\n"
# Install required packages
print_info "Installing required packages..."
omarchy-pkg-add libfido2 pam-u2f
if ! check_fido2_hardware; then
exit 1
fi
# Create the pamu2fcfg file
if [[ ! -f /etc/fido2/fido2 ]]; then
sudo mkdir -p /etc/fido2
print_success "\nLet's setup your device by confirming on the device now."
print_info "Touch your FIDO2 key when it lights up...\n"
if pamu2fcfg >/tmp/fido2; then
sudo mv /tmp/fido2 /etc/fido2/fido2
print_success "FIDO2 device registered successfully!"
else
print_error "\nFIDO2 registration failed. Please try again."
exit 1
fi
else
print_info "FIDO2 device already registered."
fi
# Configure PAM
setup_pam_config
# Test with sudo
print_info "\nTesting FIDO2 authentication with sudo..."
print_info "Touch your FIDO2 key when prompted.\n"
if sudo echo "FIDO2 authentication test successful"; then
print_success "\nPerfect! FIDO2 authentication is now configured."
print_info "You can use your FIDO2 key for sudo and polkit authentication."
else
print_error "\nVerification failed. You may want to check your configuration."
fi
fi
+161
View File
@@ -0,0 +1,161 @@
#!/bin/bash
# omarchy:summary=Set up or remove fingerprint authentication for sudo, polkit, and lock screen
# omarchy:args=[--remove]
# omarchy:requires-sudo=true
set -e
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_error() {
echo -e "${RED}$1${NC}"
}
print_info() {
echo -e "${YELLOW}$1${NC}"
}
check_fingerprint_hardware() {
# Get fingerprint devices for the user
devices=$(fprintd-list "$USER" 2>/dev/null)
# Exit if no devices found
if [[ -z $devices ]]; then
print_error "\nNo fingerprint sensor detected."
return 1
fi
return 0
}
setup_pam_config() {
# Configure sudo
if ! grep -q pam_fprintd.so /etc/pam.d/sudo; then
print_info "Configuring sudo for fingerprint authentication..."
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/sudo
fi
# Configure polkit
if [[ -f /etc/pam.d/polkit-1 ]] && ! grep -q 'pam_fprintd.so' /etc/pam.d/polkit-1; then
print_info "Configuring polkit for fingerprint authentication..."
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/polkit-1
elif [[ ! -f /etc/pam.d/polkit-1 ]]; then
print_info "Creating polkit configuration with fingerprint authentication..."
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
auth sufficient pam_fprintd.so
auth required pam_unix.so
account required pam_unix.so
password required pam_unix.so
session required pam_unix.so
EOF
fi
}
add_hyprlock_fingerprint_icon() {
print_info "Adding fingerprint icon to hyprlock placeholder text..."
sed -i 's/placeholder_text = .*/placeholder_text = <span> Enter Password 󰈷 <\/span>/' ~/.config/hypr/hyprlock.conf
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = true/' ~/.config/hypr/hyprlock.conf
}
remove_hyprlock_fingerprint_icon() {
print_info "Removing fingerprint icon from hyprlock placeholder text..."
sed -i 's/placeholder_text = .*/placeholder_text = Enter Password/' ~/.config/hypr/hyprlock.conf
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = false/' ~/.config/hypr/hyprlock.conf
}
remove_pam_config() {
# Remove from sudo
if grep -q pam_fprintd.so /etc/pam.d/sudo; then
print_info "Removing fingerprint authentication from sudo..."
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/sudo
fi
# Remove from polkit
if [[ -f /etc/pam.d/polkit-1 ]] && grep -Fq 'pam_fprintd.so' /etc/pam.d/polkit-1; then
print_info "Removing fingerprint authentication from polkit..."
sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/polkit-1
fi
}
if [[ "--remove" == $1 ]]; then
print_success "Removing fingerprint scanner from authentication.\n"
# Remove PAM configuration
remove_pam_config
# Remove fingerprint icon from hyprlock placeholder text
remove_hyprlock_fingerprint_icon
# Uninstall packages
print_info "Removing fingerprint packages..."
sudo pacman -Rns --noconfirm fprintd
print_success "Fingerprint authentication has been completely removed."
else
print_success "Setting up fingerprint scanner for authentication.\n"
# Install required packages
print_info "Installing required packages..."
# ASUS ExpertBook B9406CAA ships a FocalTech FT9349 ESS reader (USB
# 2808:a97a). Mainline libfprint at 1.94.x lacks the focaltech_moc
# driver (and its 0xa97a id_table entry); OPR ships libfprint-git
# which carries both. Once upstream catches up, this branch is a
# no-op and `libfprint-git` provides=libfprint anyway. Detect via
# /sys to avoid depending on usbutils being installed first.
for v in /sys/bus/usb/devices/*/idVendor; do
[[ "$(cat "$v" 2>/dev/null)" == "2808" ]] || continue
[[ "$(cat "${v%idVendor}idProduct" 2>/dev/null)" == "a97a" ]] || continue
print_info "FocalTech FT9349 detected (B9406CAA) — using libfprint-git from OPR..."
# libfprint-git provides+conflicts libfprint; pacman -S --noconfirm
# defaults the conflict prompt to N and aborts. Pre-remove libfprint
# with -Rdd so the install goes silent. -Rdd (not omarchy-pkg-drop's
# -Rns) is required because fprintd requires libfprint; the dep is
# re-satisfied immediately by libfprint-git's provides=libfprint.
if omarchy-pkg-present libfprint; then
sudo pacman -Rdd --noconfirm libfprint
fi
omarchy-pkg-add libfprint-git
break
done
omarchy-pkg-add fprintd usbutils
if ! check_fingerprint_hardware; then
exit 1
fi
# Configure PAM
setup_pam_config
# Add fingerprint icon to hyprlock placeholder text
add_hyprlock_fingerprint_icon
# Enroll first fingerprint
print_success "\nLet's setup your right index finger as the first fingerprint."
print_info "Keep moving the finger around on sensor until the process completes.\n"
if sudo fprintd-enroll "$USER"; then
print_success "\nFingerprint enrolled successfully!"
# Verify
print_info "\nNow let's verify that it's working correctly.\n"
if fprintd-verify; then
print_success "\nPerfect! Fingerprint authentication is now configured."
print_info "You can use your fingerprint for sudo, polkit, and lock screen (Super + Escape)."
else
print_error "\nVerification failed. You may want to try enrolling again."
fi
else
print_error "\nEnrollment failed. Please try again."
exit 1
fi
fi
-81
View File
@@ -1,81 +0,0 @@
#!/bin/bash
# omarchy:summary=Set up FIDO2 authentication for sudo and polkit
# omarchy:requires-sudo=true
set -e
check_fido2_hardware() {
tokens=$(fido2-token -L 2>/dev/null)
if [[ -z $tokens ]]; then
echo -e "\e[31m\nNo FIDO2 device detected. Please plug it in (you may need to unlock it as well).\e[0m"
return 1
fi
return 0
}
setup_pam_config() {
# Configure sudo
if ! grep -q pam_u2f.so /etc/pam.d/sudo; then
echo "Configuring sudo for FIDO2 authentication..."
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/sudo
fi
# Configure polkit
if [[ -f /etc/pam.d/polkit-1 ]] && ! grep -q 'pam_u2f.so' /etc/pam.d/polkit-1; then
echo "Configuring polkit for FIDO2 authentication..."
sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/polkit-1
elif [[ ! -f /etc/pam.d/polkit-1 ]]; then
echo "Creating polkit configuration with FIDO2 authentication..."
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2
auth required pam_unix.so
account required pam_unix.so
password required pam_unix.so
session required pam_unix.so
EOF
fi
}
echo -e "\e[32mSetting up FIDO2 device for authentication.\n\e[0m"
# Install required packages
echo "Installing required packages..."
omarchy-pkg-add libfido2 pam-u2f
if ! check_fido2_hardware; then
exit 1
fi
# Create the pamu2fcfg file
if [[ ! -f /etc/fido2/fido2 ]]; then
sudo mkdir -p /etc/fido2
echo -e "\e[32m\nLet's setup your device by confirming on the device now.\e[0m"
echo -e "Touch your FIDO2 key when it lights up...\n"
if pamu2fcfg >/tmp/fido2; then
sudo mv /tmp/fido2 /etc/fido2/fido2
echo -e "\e[32mFIDO2 device registered successfully!\e[0m"
else
echo -e "\e[31m\nFIDO2 registration failed. Please try again.\e[0m"
exit 1
fi
else
echo "FIDO2 device already registered."
fi
# Configure PAM
setup_pam_config
# Test with sudo
echo -e "\nTesting FIDO2 authentication with sudo..."
echo -e "Touch your FIDO2 key when prompted.\n"
if sudo echo "FIDO2 authentication test successful"; then
echo -e "\e[32m\nPerfect! FIDO2 authentication is now configured.\e[0m"
echo "You can use your FIDO2 key for sudo and polkit authentication."
else
echo -e "\e[31m\nVerification failed. You may want to check your configuration.\e[0m"
fi
-95
View File
@@ -1,95 +0,0 @@
#!/bin/bash
# omarchy:summary=Set up fingerprint authentication for sudo, polkit, and lock screen
# omarchy:requires-sudo=true
set -e
check_fingerprint_hardware() {
# Get fingerprint devices for the user
devices=$(fprintd-list "$USER" 2>/dev/null)
# Exit if no devices found
if [[ -z $devices ]]; then
echo -e "\e[31m\nNo fingerprint sensor detected.\e[0m"
return 1
fi
return 0
}
setup_pam_config() {
# Configure sudo
if ! grep -q pam_fprintd.so /etc/pam.d/sudo; then
echo "Configuring sudo for fingerprint authentication..."
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/sudo
fi
# Configure polkit
if [[ -f /etc/pam.d/polkit-1 ]] && ! grep -q 'pam_fprintd.so' /etc/pam.d/polkit-1; then
echo "Configuring polkit for fingerprint authentication..."
sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/polkit-1
elif [[ ! -f /etc/pam.d/polkit-1 ]]; then
echo "Creating polkit configuration with fingerprint authentication..."
sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
auth sufficient pam_fprintd.so
auth required pam_unix.so
account required pam_unix.so
password required pam_unix.so
session required pam_unix.so
EOF
fi
}
add_hyprlock_fingerprint_icon() {
echo "Adding fingerprint icon to hyprlock placeholder text..."
sed -i 's/placeholder_text = .*/placeholder_text = <span> Enter Password 󰈷 <\/span>/' ~/.config/hypr/hyprlock.conf
sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = true/' ~/.config/hypr/hyprlock.conf
}
echo -e "\e[32mSetting up fingerprint scanner for authentication.\n\e[0m"
# Install required packages
echo "Installing required packages..."
# libfprint-git provides+conflicts libfprint; pacman -S --noconfirm
# defaults the conflict prompt to N and aborts. Pre-remove libfprint
# with -Rdd so the install goes silent. -Rdd (not omarchy-pkg-drop's
# -Rns) is required because fprintd requires libfprint; the dep is
# re-satisfied immediately by libfprint-git's provides=libfprint.
if omarchy-pkg-present libfprint; then
sudo pacman -Rdd --noconfirm libfprint
fi
omarchy-pkg-add libfprint-git fprintd usbutils
if ! check_fingerprint_hardware; then
exit 1
fi
# Configure PAM
setup_pam_config
# Add fingerprint icon to hyprlock placeholder text
add_hyprlock_fingerprint_icon
# Enroll first fingerprint
echo -e "\e[32m\nLet's setup your right index finger as the first fingerprint.\e[0m"
echo -e "Keep moving the finger around on sensor until the process completes.\n"
if sudo fprintd-enroll "$USER"; then
echo -e "\e[32m\nFingerprint enrolled successfully!\e[0m"
# Verify
echo -e "\nNow let's verify that it's working correctly.\n"
if fprintd-verify; then
echo -e "\e[32m\nPerfect! Fingerprint authentication is now configured.\e[0m"
echo "You can use your fingerprint for sudo, polkit, and lock screen (Super + Escape)."
else
echo -e "\e[31m\nVerification failed. You may want to try enrolling again.\e[0m"
fi
else
echo -e "\e[31m\nEnrollment failed. Please try again.\e[0m"
exit 1
fi
+39 -15
View File
@@ -13,7 +13,7 @@ usage() {
Usage:
omarchy transcode [--path path] [input] [format] [resolution]
With no input, pick a picture or video with Walker from ~/Pictures and ~/Videos,
With no input, fuzzy-pick a picture or video from ~/Pictures and ~/Videos,
or only from --path when provided. Then pick the output format and resolution.
Options:
@@ -29,6 +29,30 @@ Resolutions:
EOF
}
pick_file() {
local search_path="$1"
local paths=()
if [[ -n $search_path ]]; then
[[ -e $search_path ]] || { echo "Path not found: $search_path" >&2; return 1; }
paths=("$search_path")
else
paths=("$HOME/Pictures" "$HOME/Videos")
fi
find "${paths[@]}" -type f \
\( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.webp' -o -iname '*.gif' -o -iname '*.heic' -o -iname '*.avif' \
-o -iname '*.mp4' -o -iname '*.mov' -o -iname '*.m4v' -o -iname '*.mkv' -o -iname '*.webm' -o -iname '*.avi' \) \
-printf '%T@\t%p\n' 2>/dev/null | sort -rn | cut -f2- | fzf --layout=reverse-list --prompt="Transcode file> "
}
pick_option() {
local prompt="$1"
shift
gum choose --header "$prompt" "$@"
}
media_type() {
local mime
mime=$(file -b --mime-type "$1")
@@ -163,10 +187,9 @@ main() {
input="${positional[0]:-}"
format="${positional[1]:-}"
resolution="${positional[2]:-}"
search_path="${search_path:-$HOME/Pictures:$HOME/Videos}"
if [[ -z $input ]]; then
input=$(omarchy-menu-file "Transcode picture or video" "$search_path" "jpg jpeg png webp gif heic avif mp4 mov m4v mkv webm avi")
input=$(pick_file "$search_path")
fi
[[ -n $input ]] || return 1
@@ -176,32 +199,33 @@ main() {
if [[ -z $format ]]; then
if [[ $type == "picture" ]]; then
format=$(omarchy-menu-select "Select format" jpg png)
format=$(pick_option "Select format..." jpg png)
else
format=$(omarchy-menu-select "Select format" mp4 gif)
format=$(pick_option "Select format..." mp4 gif)
fi
fi
if [[ -z $resolution ]]; then
if [[ $type == "picture" ]]; then
resolution=$(omarchy-menu-select "Select resolution" high medium low)
resolution=$(pick_option "Select resolution..." high medium low)
else
resolution=$(omarchy-menu-select "Select resolution" 4k 1080p 720p)
resolution=$(pick_option "Select resolution..." 4k 1080p 720p)
fi
fi
output=$(output_path "$input" "$format" "$resolution")
if [[ $type == "video" ]]; then
omarchy-notification-send "" "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."
else
if [[ $type == "picture" ]]; then
transcode_picture "$input" "$format" "$resolution" "$output"
copy_to_clipboard "$output"
omarchy-notification-send "" "Transcoded to $resolution $format" "Saved and copied to clipboard."
else
transcode_video "$input" "$format" "$resolution" "$output"
echo ""
fi
copy_to_clipboard "$output"
echo "Your $type has been transcoded into $format as $resolution. It's on your clipboard."
echo ""
echo "It's also in $output"
}
main "$@"
+2 -4
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# omarchy:summary=Ensure the Omarchy and Arch keyring packages are installed and populated
# omarchy:summary=Ensure the Omarchy keyring package is installed and populated
# omarchy:requires-sudo=true
if omarchy-pkg-missing omarchy-keyring || ! sudo pacman-key --list-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 &>/dev/null; then
@@ -16,7 +16,5 @@ if omarchy-pkg-missing omarchy-keyring || ! sudo pacman-key --list-keys 40DFB630
fi
# Ensure we have the latest archlinux-keyring, maintainer keys might have changed
# Always reinstall, as the keyring can be updated without a package version bump.
echo -e "\e[32m\nUpdate Arch signing keys\e[0m"
sudo pacman -Sy --noconfirm archlinux-keyring >/dev/null 2> >(grep -vE '^warning: archlinux-keyring-[^ ]+ is up to date -- reinstalling$' >&2)
echo "Keys are correct"
sudo pacman -Sy --noconfirm archlinux-keyring >/dev/null
+12 -24
View File
@@ -1,6 +1,6 @@
#!/bin/bash
# omarchy:summary=Upload logs to logs.omarchy.org
# omarchy:summary=Upload logs to 0x0.st
# omarchy:args=<log-file>
# omarchy:hidden=true
@@ -28,7 +28,7 @@ else
echo "========================================="
echo "SYSTEM INFORMATION"
echo "========================================="
echo "Hostname: $(uname -n)"
echo "Hostname: $(hostname)"
echo "Kernel: $(uname -r)"
echo "Date: $(date)"
echo ""
@@ -41,33 +41,19 @@ fi
case "$LOG_TYPE" in
install)
# In the live ISO before reboot, the target system is mounted at /mnt so the
# omarchy install log lives at /mnt/var/log/omarchy-install.log. On the
# installed system it's at /var/log/omarchy-install.log. Prefer whichever
# exists, with /mnt taking precedence (only present in the ISO context, and
# there it's the right one).
ARCHINSTALL_LOG="/var/log/archinstall/install.log"
if [[ -s /mnt/var/log/omarchy-install.log ]]; then
OMARCHY_LOG="/mnt/var/log/omarchy-install.log"
else
OMARCHY_LOG="/var/log/omarchy-install.log"
fi
OMARCHY_LOG="/var/log/omarchy-install.log"
# Combine system info with logs
cat "$SYSTEM_INFO" >"$TEMP_LOG"
[[ -s $ARCHINSTALL_LOG ]] && cat "$ARCHINSTALL_LOG" >>"$TEMP_LOG"
if [[ -s $OMARCHY_LOG ]]; then
printf '\n========================================\nOMARCHY INSTALL LOG (%s)\n========================================\n\n' "$OMARCHY_LOG" >>"$TEMP_LOG"
cat "$OMARCHY_LOG" >>"$TEMP_LOG"
else
echo "Warning: omarchy install log not found (looked at /mnt/var/log/ and /var/log/)" >&2
fi
cat $ARCHINSTALL_LOG $OMARCHY_LOG >>"$TEMP_LOG" 2>/dev/null
if [[ ! -s $TEMP_LOG ]]; then
echo "Error: No install logs found"
exit 1
fi
echo "Uploading installation log to logs.omarchy.org..."
echo "Uploading installation log to 0x0.st..."
;;
this-boot)
@@ -80,7 +66,7 @@ this-boot)
exit 1
fi
echo "Uploading current boot logs to logs.omarchy.org..."
echo "Uploading current boot logs to 0x0.st..."
;;
last-boot)
@@ -93,7 +79,7 @@ last-boot)
exit 1
fi
echo "Uploading previous boot logs to logs.omarchy.org..."
echo "Uploading previous boot logs to 0x0.st..."
;;
installed|system-info)
@@ -112,7 +98,7 @@ installed|system-info)
exit 1
fi
echo "Uploading system information to logs.omarchy.org..."
echo "Uploading system information to 0x0.st..."
;;
*)
@@ -127,13 +113,15 @@ esac
echo ""
URL=$(curl -sf -F "file=@$TEMP_LOG" https://logs.omarchy.org/)
URL=$(curl -sF "file=@$TEMP_LOG" -Fexpires=24 https://0x0.st)
if (( $? == 0 )) && [[ -n $URL ]]; then
echo "✓ Log uploaded successfully!"
echo "Share this URL:"
echo ""
echo " $URL"
echo ""
echo "This link will expire in 24 hours."
else
echo "Error: Failed to upload log file"
exit 1
+11 -2
View File
@@ -12,6 +12,15 @@ fi
IFS='|' read -r place temperature wind <<< "$weather"
place=${place%%,*}
place=${place^}
temperature=${temperature#+}
format_temperature() {
local celsius=${1#+}
celsius=${celsius//°/}
celsius=${celsius%C}
echo "$(omarchy-weather-icon) $place · Temp $temperature · Wind $wind"
echo "${celsius}°c / $((celsius * 9 / 5 + 32))°f"
}
temperature=$(format_temperature "$temperature")
wind=${wind//km\// km/}
echo "$(omarchy-weather-icon) $place · Temperature $temperature · Wind $wind"
+16 -14
View File
@@ -1,20 +1,18 @@
#!/bin/bash
set -e
# Set install mode to online since boot.sh is used for curl installations
export OMARCHY_ONLINE_INSTALL=true
ansi_art=' ▄ ▄
▄███████ ▄███████ ▄████████▀ ▄█ █▄ ▄█ █▄ ▄███████
███ ███ ███ ███ ▀▀▀▀███▀▀ ███ ███ ███ ███ ███ ███
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
███▄▄▄███ ▄███▄▄▄██▀ ███ ▄███▄▄▄███▄ ███ ███ ███▄▄▄██
███▀▀▀███ ███▀▀▀▀ ███ ███▀▀▀███ ███ ███ ███▀▀▀▀
███ ███ ██████████ ███ ███ ███ ███ ███ █████████
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
███ █▀ ███ █▀ ██▀ ███ █▀ ▀█████▀ ███ ██▀
▀▀▀ ▀▀▀ '
ansi_art=' ▄▄▄
▄█████ ▄███████████▄ ▄███████ ▄███████ ▄███████ ▄█ █▄ ▄█ █▄
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ █▀ ███ ███ ███ ███
███ ███ ███ ███ ███ ▄███▄▄▄███ ▄███▄▄▄██▀ ███ ▄███▄▄▄███▄ ███▄▄▄██
███ ███ ███ ███ ███ ▀███▀▀▀███ ███▀▀▀▀ ███ ▀▀███▀▀▀███ ▀▀▀▀▀▀███
███ ███ ███ ███ ███ ███ ███ ██████████ ███ █ ███ ███ ▄██ ███
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
█████▀ ▀█ ███ █▀ ███ █▀ ███ ███ ███████▀ ███ █▀ ▀█████▀
███ '
clear
echo -e "\n$ansi_art\n"
@@ -40,9 +38,13 @@ sudo pacman -Syu --noconfirm --needed git
OMARCHY_REPO="${OMARCHY_REPO:-basecamp/omarchy}"
echo -e "\nCloning Omarchy from: https://github.com/${OMARCHY_REPO}.git"
echo -e "\e[32mUsing branch: $OMARCHY_REF\e[0m"
rm -rf ~/.local/share/omarchy/
git clone --branch "$OMARCHY_REF" "https://github.com/${OMARCHY_REPO}.git" ~/.local/share/omarchy >/dev/null
git clone "https://github.com/${OMARCHY_REPO}.git" ~/.local/share/omarchy >/dev/null
echo -e "\e[32mUsing branch: $OMARCHY_REF\e[0m"
cd ~/.local/share/omarchy
git fetch origin "${OMARCHY_REF}" && git checkout "${OMARCHY_REF}"
cd -
echo -e "\nInstallation starting..."
source ~/.local/share/omarchy/install.sh
+1 -1
View File
@@ -1,4 +1,4 @@
--ozone-platform=wayland
--ozone-platform-hint=wayland
--enable-features=TouchpadOverscrollHistoryNavigation
--enable-features=TouchpadOverscrollHistoryNavigation,VaapiVideoDecodeLinuxGL,VaapiVideoEncoder
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
+1 -1
View File
@@ -1 +1 @@
command = 'wl-copy && hyprctl dispatch sendshortcut "SHIFT,Insert,activewindow"'
command = 'wl-copy && hyprctl dispatch sendshortcut "SHIFT, Insert,"'
+1 -1
View File
@@ -66,7 +66,7 @@
"type": "command",
"key": "\ue900 OS",
"keyColor": "blue",
"text": "source /etc/os-release; omarchy=$(omarchy-version); echo \"$PRETTY_NAME → Omarchy $omarchy\""
"text": "version=$(omarchy-version); echo \"Omarchy $version\""
},
{
"type": "command",
+10 -5
View File
@@ -6,21 +6,26 @@ bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window
bindd = SUPER ALT SHIFT, F, File manager (cwd), exec, uwsm-app -- nautilus --new-window "$(omarchy-cmd-terminal-cwd)"
bindd = SUPER SHIFT, B, Browser, exec, omarchy-launch-browser
bindd = SUPER SHIFT ALT, B, Browser (private), exec, omarchy-launch-browser --private
bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus subtui
bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify
bindd = SUPER SHIFT ALT, M, Music TUI, exec, omarchy-launch-or-focus-tui cliamp
bindd = SUPER SHIFT, N, Editor, exec, omarchy-launch-editor
bindd = SUPER SHIFT, D, Docker, exec, omarchy-launch-tui lazydocker
bindd = SUPER SHIFT, G, Signal, exec, omarchy-launch-or-focus ^signal$ "uwsm-app -- signal-desktop"
bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus ^obsidian$ "uwsm-app -- obsidian"
bindd = SUPER SHIFT, W, Typora, exec, uwsm-app -- typora --enable-wayland-ime
bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- 1password
# If your web app url contains #, type it as ## to prevent hyprland treating it as a comment
bindd = SUPER SHIFT, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com"
bindd = SUPER SHIFT ALT, A, Claude, exec, omarchy-launch-webapp "https://claude.ai"
bindd = SUPER SHIFT, E, Email, exec, omarchy-launch-webapp "https://outlook.com"
bindd = SUPER SHIFT ALT, A, Grok, exec, omarchy-launch-webapp "https://grok.com"
bindd = SUPER SHIFT, C, Calendar, exec, omarchy-launch-webapp "https://app.hey.com/calendar/weeks/"
bindd = SUPER SHIFT, E, Email, exec, omarchy-launch-webapp "https://app.hey.com"
bindd = SUPER SHIFT, Y, YouTube, exec, omarchy-launch-webapp "https://youtube.com/"
bindd = SUPER SHIFT ALT, G, WhatsApp, exec, omarchy-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/"
bindd = SUPER SHIFT ALT, J, Jellyfin, exec, omarchy-launch-or-focus-webapp Jellyfin "https://jellyfin.arthurp.fr/"
bindd = SUPER SHIFT ALT, I, Immich, exec, omarchy-launch-or-focus-webapp Immich "https://immich.arthurp.fr/"
bindd = SUPER SHIFT CTRL, G, Google Messages, exec, omarchy-launch-or-focus-webapp "Google Messages" "https://messages.google.com/web/conversations"
bindd = SUPER SHIFT, P, Google Photos, exec, omarchy-launch-or-focus-webapp "Google Photos" "https://photos.google.com/"
bindd = SUPER SHIFT, X, X, exec, omarchy-launch-webapp "https://x.com/"
bindd = SUPER SHIFT ALT, X, X Post, exec, omarchy-launch-webapp "https://x.com/compose/post"
# Add extra bindings
# bind = SUPER SHIFT, R, exec, alacritty -e ssh your-server
+1 -1
View File
@@ -11,7 +11,7 @@ listener {
on-timeout = pidof hyprlock || omarchy-launch-screensaver
}
# Lock system after 5 minutes (screensaver resets idle timer, so have to just do half + 2s margin)
# Lock system after 5 minutes
listener {
timeout = 152
on-timeout = omarchy-system-lock
-6
View File
@@ -24,9 +24,3 @@ source = ~/.local/state/omarchy/toggles/hypr/*.conf
# Add any other personal Hyprland configuration below
# windowrule = workspace 5, match:class qemu
input {
kb_layout = fr,us
kb_variant = ,colemak_dh_iso
kb_options = grp:caps_toggle
}
@@ -1,10 +0,0 @@
#!/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
@@ -1,13 +0,0 @@
[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
+31 -37
View File
@@ -1,12 +1,19 @@
{
"reload_style_on_change": true,
"layer": "top",
"position": "left",
"position": "top",
"spacing": 0,
"width": 35,
"modules-left": ["custom/clock", "custom/weather", "cpu", "memory", "custom/media"],
"modules-center": ["custom/update", "hyprland/workspaces", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"],
"modules-right": ["group/tray-expander", "pulseaudio", "bluetooth", "network", "battery"],
"height": 26,
"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": [
"group/tray-expander",
"bluetooth",
"network",
"pulseaudio",
"cpu",
"battery"
],
"hyprland/workspaces": {
"on-click": "activate",
"format": "{icon}",
@@ -29,14 +36,15 @@
"2": [],
"3": [],
"4": [],
"5": [],
"6": [],
"7": [],
"8": [],
"9": [],
"10": []
"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",
@@ -45,40 +53,26 @@
"signal": 7,
"interval": 21600
},
"cpu": {
"interval": 2,
"format": "{icon} ",
"format-icons": ["󰪞", "󰪟", "󰪠", "󰪡", "󰪢", "󰪣", "󰪤", "󰪥"],
"on-click": "omarchy-launch-or-focus-tui btop"
"interval": 5,
"format": "󰍛",
"on-click": "omarchy-launch-or-focus-tui btop",
"on-click-right": "alacritty"
},
"memory": {
"interval": 2,
"format": "{icon} ",
"format-icons": ["󰪞", "󰪟", "󰪠", "󰪡", "󰪢", "󰪣", "󰪤", "󰪥"],
"on-click": "omarchy-launch-or-focus-tui btop"
},
"custom/clock": {
"exec": "$OMARCHY_PATH/default/waybar/clock.sh",
"return-type": "json",
"on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select",
"tooltip": true
"clock": {
"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"
},
"custom/weather": {
"exec": "$OMARCHY_PATH/default/waybar/weather.sh",
"return-type": "json",
"interval": 60,
"interval": 600,
"tooltip": false,
"on-click": "notify-send -u low \"$(omarchy-weather-status)\""
},
"custom/media": {
"exec": "$OMARCHY_PATH/default/waybar/media.sh",
"return-type": "json",
"interval": 1,
"on-click": "$OMARCHY_PATH/default/waybar/media_click.sh",
"on-click-right": "playerctl -p subtui next",
"on-click-middle": "playerctl -p subtui previous",
"tooltip": true
},
"network": {
"format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"],
"format": "{icon}",
@@ -143,7 +137,7 @@
"modules": ["custom/expand-icon", "tray"]
},
"custom/expand-icon": {
"format": "",
"format": "",
"tooltip": false,
"on-scroll-up": "",
"on-scroll-down": "",
+24 -24
View File
@@ -3,6 +3,7 @@
* {
background-color: @background;
color: @foreground;
border: none;
border-radius: 0;
min-height: 0;
@@ -11,18 +12,18 @@
}
.modules-left {
margin-bottom: 8px;
margin-left: 8px;
}
.modules-right {
margin-top: 8px;
margin-right: 8px;
}
#workspaces button {
all: initial;
padding: 6px 0;
margin: 1.5px 0;
min-height: 9px;
padding: 0 6px;
margin: 0 1.5px;
min-width: 9px;
}
#workspaces button.empty {
@@ -30,29 +31,28 @@
}
#cpu,
#memory,
#custom-media,
#battery,
#pulseaudio,
#custom-omarchy,
#custom-update {
min-height: 12px;
margin: 7.5px 0;
min-width: 12px;
margin: 0 7.5px;
}
#tray {
margin-top: 16px;
margin-right: 16px;
}
#bluetooth {
margin-top: 17px;
margin-right: 17px;
}
#network {
margin-top: 13px;
margin-right: 13px;
}
#custom-expand-icon {
margin-top: 18px;
margin-right: 18px;
}
tooltip {
@@ -63,17 +63,17 @@ tooltip {
font-size: 10px;
}
#custom-clock {
margin-bottom: 8.75px;
#clock {
margin-left: 8.75px;
}
#custom-weather {
margin-bottom: 7.5px;
margin-top: 7.5px;
margin-left: 7.5px;
margin-right: 7.5px;
}
#custom-weather.unavailable {
min-height: 0;
min-width: 0;
margin: 0;
padding: 0;
}
@@ -85,11 +85,11 @@ tooltip {
#custom-screenrecording-indicator,
#custom-idle-indicator,
#custom-notification-silencing-indicator {
min-height: 12px;
margin-bottom: 5px;
margin-top: 0;
min-width: 12px;
margin-left: 5px;
margin-right: 0;
font-size: 10px;
padding-right: 1px;
padding-bottom: 1px;
}
#custom-screenrecording-indicator.active {
@@ -102,8 +102,8 @@ tooltip {
}
#custom-voxtype {
min-height: 12px;
margin: 0 0 7.5px 0;
min-width: 12px;
margin: 0 0 0 7.5px;
}
#custom-voxtype.recording {
-11
View File
@@ -40,17 +40,6 @@ _omarchy_complete() {
candidates+=("--all" "--json" "--markdown" "--check")
fi
if (( ${#candidates[@]} == 0 )) && [[ -x $bin_dir/$prefix ]]; then
local args enum
args=$(grep -m 1 '^# omarchy:args=<' "$bin_dir/$prefix" 2>/dev/null)
enum="${args#*<}"
enum="${enum%%>*}"
if [[ $enum == *"|"* && $enum != *" "* ]]; then
read -r -a candidates <<<"${enum//|/ }"
fi
fi
if (( ${#candidates[@]} > 0 )); then
local IFS=$'\n'
COMPREPLY=($(compgen -W "${candidates[*]}" -- "$cur"))
+1 -3
View File
@@ -3,6 +3,7 @@ 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
@@ -11,6 +12,3 @@ 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
+3 -3
View File
@@ -1,5 +1,5 @@
# Copy / Paste
bindd = SUPER, C, Universal copy, sendshortcut, CTRL, Insert, activewindow
bindd = SUPER, V, Universal paste, sendshortcut, SHIFT, Insert, activewindow
bindd = SUPER, X, Universal cut, sendshortcut, CTRL, X, activewindow
bindd = SUPER, C, Universal copy, sendshortcut, CTRL, Insert,
bindd = SUPER, V, Universal paste, sendshortcut, SHIFT, Insert,
bindd = SUPER, X, Universal cut, sendshortcut, CTRL, X,
bindd = SUPER CTRL, V, Clipboard manager, exec, omarchy-launch-walker -m clipboard
+1 -1
View File
@@ -6,7 +6,7 @@ bindd = SUPER, W, Close window, killactive,
bindd = CTRL ALT, DELETE, Close all windows, exec, omarchy-hyprland-window-close-all
# Control tiling
bindd = SUPER, J, Toggle window split, layoutmsg, togglesplit
bindd = SUPER, J, Toggle window split, togglesplit, # dwindle
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
bindd = SUPER SHIFT, V, Toggle window floating/tiling, togglefloating,
bindd = SHIFT, F11, Force full screen, fullscreen, 0
+1 -6
View File
@@ -44,12 +44,7 @@ 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, PERIOD, Transcode, exec, omarchy-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
bindd = SUPER CTRL, R, Transcode, exec, omarchy-menu transcode
# Waybar-less information
bindd = SUPER CTRL ALT, T, Show time, exec, notify-send -u low " $(date +"%A %H:%M · %d %B %Y · Week %V")"
+5 -4
View File
@@ -50,8 +50,8 @@ decoration {
group {
col.border_active = $activeBorderColor
col.border_inactive = $inactiveBorderColor
col.border_locked_active = $activeBorderColor
col.border_locked_inactive = $inactiveBorderColor
col.border_locked_active = -1
col.border_locked_inactive = -1
groupbar {
font_size = 12
@@ -108,8 +108,9 @@ animations {
# See https://wiki.hypr.land/Configuring/Layouts/Dwindle-Layout/ for more
dwindle {
preserve_split = true
force_split = 2
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true # You probably want this
force_split = 2 # Always split on the right
}
scrolling {
-1
View File
@@ -1,5 +1,4 @@
anchor=top-right
group-by=app-name,summary,body
default-timeout=5000
width=420
outer-margin=20
+4 -19
View File
@@ -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, reminders, layer rules,
workspace settings, display config, and user-facing omarchy commands. Excludes Omarchy
wallpaper, night light, idle, lock screen, screenshots, 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, reminders, night light, idle behavior, lock screen
- Screenshots, screen recording, 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,7 +118,6 @@ 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 <pkg>` |
| `omarchy setup` | Initial setup tasks | `omarchy setup fingerprint` |
| `omarchy update` | System updates | `omarchy update` |
@@ -356,20 +355,9 @@ When user requests system changes:
2. **Is it a config edit?** Edit in `~/.config/`, never `~/.local/share/omarchy/`
3. **Is it a theme customization?** Create a NEW custom theme directory
4. **Is it automation?** Use hooks in `~/.config/omarchy/hooks/`
5. **Is it a package install?** Use `omarchy pkg add <pkgs...>` (or `omarchy pkg aur add <pkgs...>` for AUR-only packages)
5. **Is it a package install?** Use `omarchy install package <pkgs...>` (or `omarchy pkg aur add <pkgs...>` for AUR-only packages)
6. **Unsure if command exists?** Run `omarchy commands` (or `omarchy <group> --help` for one group)
### Reminder Requests
When the user asks to set a reminder, use `omarchy reminder <minutes> [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:
@@ -384,9 +372,6 @@ 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`
@@ -7,7 +7,7 @@
import { existsSync } from "node:fs";
import { join } from "node:path";
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
const home = process.env.HOME ?? "";
const lightModePath = join(home, ".config/omarchy/current/theme/light.mode");
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

-1
View File
@@ -96,7 +96,6 @@ Rectangle {
color: "transparent"
selectionColor: "transparent"
selectedTextColor: "transparent"
cursorDelegate: Item {}
focus: true
onTextChanged: root.loginFailed = false
+5 -5
View File
@@ -44,12 +44,12 @@ pause_media = true
# .en models are English-only but faster and more accurate for English
# large-v3-turbo is faster than large-v3 with minimal accuracy loss (recommended for GPU)
# Or provide absolute path to a custom .bin model file
model = "base"
model = "base.en"
# Language for transcription
# Use "en" for English, "auto" for auto-detection
# See: https://github.com/openai/whisper#available-models-and-languages
language = "fr"
language = "en"
# Translate non-English speech to English
translate = false
@@ -82,13 +82,13 @@ type_delay_ms = 1
[output.notification]
# Show notification when recording starts (hotkey pressed)
on_recording_start = true
on_recording_start = false
# Show notification when recording stops (transcription beginning)
on_recording_stop = true
on_recording_stop = false
# Show notification with transcribed text after transcription completes
on_transcription = true
on_transcription = false
# [text]
# Text processing options (word replacements, spoken punctuation)
-38
View File
@@ -1,38 +0,0 @@
#!/usr/bin/env bash
print_status() {
time=$(date +"%H:%M")
date=$(date +"%d/%m")
# tooltip complet
full_date=$(date +"%A %d %B %Y %H:%M:%S")
calendar=$(cal -m)
esc_calendar=$(sed 's/&/&amp;/g; s/</&lt;/g; s/>/&gt;/g' <<< "$calendar")
text="$time
$date"
tooltip="$full_date
$esc_calendar"
jq -nc \
--arg text "$text" \
--arg tooltip "$tooltip" \
'{ text: $text, tooltip: $tooltip }'
}
print_status
last=""
while true; do
current=$(date +"%H%M%S%Y%m%d")
if [[ "$current" != "$last" ]]; then
print_status
last="$current"
fi
sleep 1
done
-71
View File
@@ -1,71 +0,0 @@
#!/bin/bash
PLAYER="subtui"
# Vérifie si Subtui est lancé
if ! playerctl -l 2>/dev/null | grep -q "^${PLAYER}$"; then
echo '{"text":"󰝚","tooltip":"Subtui non lancé"}'
exit 0
fi
# Métadonnées
title=$(playerctl -p "$PLAYER" metadata title 2>/dev/null)
artist=$(playerctl -p "$PLAYER" metadata artist 2>/dev/null)
album=$(playerctl -p "$PLAYER" metadata album 2>/dev/null)
status=$(playerctl -p "$PLAYER" status 2>/dev/null)
# Valeurs par défaut
[ -z "$title" ] && title="Titre inconnu"
[ -z "$artist" ] && artist="Artiste inconnu"
[ -z "$album" ] && album="Album inconnu"
# Position actuelle (secondes)
position=$(playerctl -p "$PLAYER" position 2>/dev/null)
[ -z "$position" ] && position=0
# Durée totale (microsecondes)
length=$(playerctl -p "$PLAYER" metadata mpris:length 2>/dev/null)
[ -z "$length" ] && length=0
# Conversion sûre
position_sec=$(awk -v p="$position" 'BEGIN { printf("%d", p+0.5) }')
length_sec=$((length / 1000000))
# Format temps
elapsed=$(printf "%02d:%02d" $((position_sec/60)) $((position_sec%60)))
if [ "$length_sec" -gt 0 ]; then
duration=$(printf "%02d:%02d" $((length_sec/60)) $((length_sec%60)))
else
duration="--:--"
fi
# Icône
if [ "$status" = "Playing" ]; then
icon="󰏤"
else
icon="󰐊"
fi
# Échapper les guillemets pour JSON
title=${title//\"/\\\"}
artist=${artist//\"/\\\"}
album=${album//\"/\\\"}
# Tooltip
tooltip="$artist
$title
Album : $album
$elapsed / $duration
Clic gauche : Lecture/Pause
Clic droit : Suivant
Clic milieu : Précédent"
# Convertir les retours à la ligne pour JSON
tooltip=$(echo "$tooltip" | sed ':a;N;$!ba;s/\n/\\n/g')
# JSON final
printf '{"text":"%s","tooltip":"%s"}\n' "$icon" "$tooltip"
-9
View File
@@ -1,9 +0,0 @@
#!/bin/bash
PLAYER="subtui"
if playerctl -l 2>/dev/null | grep -q "^${PLAYER}$"; then
playerctl -p "$PLAYER" play-pause
else
ghostty -e subtui &
fi
@@ -1,18 +0,0 @@
## Auto-connect A2DP playback/capture profiles on Bluetooth devices.
## This helps speakers and receivers expose their audio profiles without
## requiring manual PipeWire/WirePlumber recovery.
monitor.bluez.rules = [
{
matches = [
{
device.name = "~bluez_card.*"
}
]
actions = {
update-props = {
bluez5.auto-connect = [ a2dp_sink a2dp_source ]
}
}
}
]
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

+10 -10
View File
@@ -10,17 +10,17 @@
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████████████ █████████████████████████ ████
████████████ █████████████████████████ ████
████████████ ████ ████
████████████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ██████████████████████████████████████ ████
████ ██████████████████████████████████████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████ ████
████ ████ ████
████ ████ ████
████████████ ████████████
████████████ ████████████
████ ████ ████
████ ████ ████
█████████████████████████████ ████████████████████
█████████████████████████████ ████████████████████
+2
View File
@@ -50,6 +50,8 @@ run_logged $OMARCHY_INSTALL/config/hardware/intel/fred.sh
run_logged $OMARCHY_INSTALL/config/hardware/intel/fix-wifi7-eht.sh
run_logged $OMARCHY_INSTALL/config/hardware/intel/sof-firmware.sh
run_logged $OMARCHY_INSTALL/config/hardware/dell/fix-xps-haptic-touchpad.sh
run_logged $OMARCHY_INSTALL/config/hardware/asus/fix-asus-ptl-display-backlight.sh
run_logged $OMARCHY_INSTALL/config/hardware/asus/fix-asus-ptl-b9406-display.sh
run_logged $OMARCHY_INSTALL/config/hardware/asus/fix-asus-ptl-b9406-touchpad.sh
-3
View File
@@ -1,5 +1,2 @@
# Turn on bluetooth by default
chrootable_systemctl_enable bluetooth.service
mkdir -p ~/.config/wireplumber/wireplumber.conf.d/
cp "$OMARCHY_PATH/default/wireplumber/wireplumber.conf.d/bluetooth-a2dp-autoconnect.conf" ~/.config/wireplumber/wireplumber.conf.d/
@@ -0,0 +1,36 @@
# Fix Dell XPS haptic touchpad.
# The Synaptics haptic touchpad (vendor 06CB) uses the HID Manual Trigger
# protocol, but the kernel's HID haptic subsystem only supports Auto Trigger.
# This sets up a lightweight daemon that monitors touchpad button events and
# sends haptic pulses via HID feature reports on the hidraw device.
# Also disables I2C runtime PM to prevent the haptic engine losing state
# across suspend/resume.
if omarchy-hw-match "XPS" \
&& ls /sys/bus/i2c/devices/i2c-VEN_06CB:00 2>/dev/null; then
# Keep I2C controller power on to prevent haptic engine losing state
sudo tee /etc/udev/rules.d/99-dell-xps-haptic-touchpad.rules << 'EOF'
ACTION=="add", SUBSYSTEM=="pci", KERNEL=="0000:00:19.0", ATTR{power/control}="on"
ACTION=="add", SUBSYSTEM=="platform", KERNEL=="i2c_designware.0", ATTR{power/control}="on"
EOF
sudo udevadm control --reload-rules
# Haptic feedback daemon as a systemd service
sudo tee /etc/systemd/system/dell-xps-haptic-touchpad.service << SVC
[Unit]
Description=Dell XPS haptic touchpad feedback
After=systemd-udev-settle.service
[Service]
Type=simple
ExecStart=$OMARCHY_PATH/bin/omarchy-haptic-touchpad
Restart=on-failure
RestartSec=2
[Install]
WantedBy=multi-user.target
SVC
sudo systemctl daemon-reload
sudo systemctl enable dell-xps-haptic-touchpad.service
fi
@@ -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 / Non-Arc Panther Lake use intel-media-driver + VPL
if [[ ${INTEL_GPU,,} =~ (hd\ graphics|uhd\ graphics|xe|iris|arc|panther\ lake) ]]; then
# HD Graphics / Iris / Xe / Arc use intel-media-driver + VPL
if [[ ${INTEL_GPU,,} =~ (hd\ graphics|uhd\ graphics|xe|iris|arc) ]]; 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
+1 -1
View File
@@ -4,7 +4,7 @@ sudo mkdir -p /etc/systemd/system.conf.d /etc/systemd/user.conf.d
sudo tee /etc/systemd/system.conf.d/99-omarchy-nofile.conf >/dev/null <<'EOF'
[Manager]
DefaultLimitNOFILE=65536:524288
DefaultLimitNOFILESoft=65536
EOF
sudo cp /etc/systemd/system.conf.d/99-omarchy-nofile.conf \
+3 -6
View File
@@ -1,6 +1,3 @@
# 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
# 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
+1 -1
View File
@@ -10,7 +10,7 @@ sudo mkdir -p /etc/chromium/policies/managed
sudo chmod a+rw /etc/chromium/policies/managed
# Set initial theme
omarchy-theme-set "Rainynight"
omarchy-theme-set "Tokyo Night"
rm -rf ~/.config/chromium/SingletonLock # otherwise archiso will own the chromium singleton
# Set specific app links for current theme
View File
-2
View File
@@ -1,2 +0,0 @@
systemctl --user daemon-reload
systemctl --user enable --now swayosd-server.service
+3 -4
View File
@@ -1,6 +1,8 @@
# Omarchy core package list installed via install/packaging/base.sh
# This file is also used by the ISO builder when determining needs
1password-beta
1password-cli
aether
alacritty
alsa-utils
@@ -111,6 +113,7 @@ satty
sddm
signal-desktop
slurp
spotify
socat
starship
sushi
@@ -147,7 +150,3 @@ xournalpp
yaru-icon-theme
yay
zoxide
prismlauncher
cava
dua-cli
yazi
-3
View File
@@ -61,9 +61,6 @@ vulkan-asahi
# Surface laptop support packages
linux-firmware-marvell
# Dell laptop support packages
dell-xps-touchpad-haptics
# T2 MacBook support packages
apple-bcm-firmware
apple-t2-audio-config
-1
View File
@@ -7,5 +7,4 @@ run_logged $OMARCHY_INSTALL/packaging/tuis.sh
run_logged $OMARCHY_INSTALL/packaging/npx.sh
run_logged $OMARCHY_INSTALL/packaging/asus-rog.sh
run_logged $OMARCHY_INSTALL/packaging/framework16.sh
run_logged $OMARCHY_INSTALL/packaging/dell-xps-touchpad-haptics.sh
run_logged $OMARCHY_INSTALL/packaging/surface.sh
@@ -1,3 +0,0 @@
if omarchy-hw-dell-xps-haptic-touchpad; then
omarchy-pkg-add dell-xps-touchpad-haptics
fi
+1 -1
View File
@@ -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 @earendil-works/pi-coding-agent pi
omarchy-npx-install @mariozechner/pi-coding-agent pi
omarchy-npx-install @kitlangton/ghui ghui
+1
View File
@@ -2,3 +2,4 @@ ICON_DIR="$HOME/.local/share/applications/icons"
omarchy-tui-install "Disk Usage" "bash -c 'dust -r; read -n 1 -s'" float "$ICON_DIR/Disk Usage.png"
omarchy-tui-install "Docker" "lazydocker" tile "$ICON_DIR/Docker.png"
omarchy-tui-install "Cliamp" "cliamp" tile "$ICON_DIR/Cliamp.png"
+10 -2
View File
@@ -1,7 +1,15 @@
omarchy-webapp-install "HEY" https://app.hey.com HEY.png "omarchy-webapp-handler-hey %u" "x-scheme-handler/mailto"
omarchy-webapp-install "Basecamp" https://launchpad.37signals.com Basecamp.png
omarchy-webapp-install "WhatsApp" https://web.whatsapp.com/ WhatsApp.png
omarchy-webapp-install "Google Photos" https://photos.google.com/ "Google Photos.png"
omarchy-webapp-install "Google Contacts" https://contacts.google.com/ "Google Contacts.png"
omarchy-webapp-install "Google Messages" https://messages.google.com/web/conversations "Google Messages.png"
omarchy-webapp-install "Google Maps" https://maps.google.com "Google Maps.png"
omarchy-webapp-install "ChatGPT" https://chatgpt.com/ ChatGPT.png
omarchy-webapp-install "YouTube" https://youtube.com/ YouTube.png
omarchy-webapp-install "GitHub" https://github.com/ GitHub.png
omarchy-webapp-install "Jellyfin" https://jellyfin.arthurp.fr/ Jellyfin.png
omarchy-webapp-install "Immich" https://immich.arthurp.fr/ Immich.png
omarchy-webapp-install "X" https://x.com/ X.png
omarchy-webapp-install "Figma" https://figma.com/ Figma.png
omarchy-webapp-install "Discord" https://discord.com/channels/@me Discord.png
omarchy-webapp-install "Zoom" https://app.zoom.us/wc/home Zoom.png "omarchy-webapp-handler-zoom %u" "x-scheme-handler/zoommtg;x-scheme-handler/zoomus"
omarchy-webapp-install "Fizzy" https://app.fizzy.do/ Fizzy.png
+1 -64
View File
@@ -1,64 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="121.92007mm"
height="35.805248mm"
viewBox="0 0 121.92009 35.805248"
version="1.1"
id="svg1"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<g
id="layer1"
transform="translate(-52.873167,-118.10323)">
<g
id="text1"
style="font-size:3.175px;fill:none;stroke-width:0.264999"
aria-label=" ▄ ▄ &#10; ▄███████ ▄███████ ▄████████▀ ▄█ █▄ ▄██ ██▄ ▄███████&#10;███ ███ ███ ███ ▀▀▀▀███▀▀ ███ ███ ███ ███ ███ ███&#10;███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███&#10;███▄▄▄███ ▄███▄▄▄██▀ ███ ▄███▄▄▄███▄ ███ ███ ███▄▄▄██▀&#10;███▀▀▀███ ▀███▀▀▀▀ ███ ▀▀███▀▀▀███ ███ ███ ███▀▀▀▀ &#10;███ ███ ██████████ ███ ███ ███ ███ ███ █████████&#10;███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███&#10;███ █▀ ███ ██▀ ██▀ ███ █▀ ▀█████▀ ███ ██▀&#10; ▀▀▀ ▀ ▀ ▀▀▀ ▀"
transform="translate(-19.299906,-5.3691469)">
<path
style="font-family:'JetBrainsMono Nerd Font';-inkscape-font-specification:'JetBrainsMono Nerd Font';fill:#000000;stroke-width:0.265"
d="m 159.80312,125.56788 v -2.0955 h 1.905 v 2.0955 z m 7.62001,0 v -2.0955 h 1.905 v 2.0955 z"
id="path29" />
<path
style="font-family:'JetBrainsMono Nerd Font';-inkscape-font-specification:'JetBrainsMono Nerd Font';fill:#000000;stroke-width:0.265"
d="m 74.078074,129.54624 v -2.0955 h 1.905 v 2.0955 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905002,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 7.620005,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905003,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z m 5.715,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,-2.0955 v -2.0955 h 1.905 v 2.0955 z m 5.71501,2.0955 v -2.0955 h 1.905 v 2.0955 z m 1.90499,0 v -4.191 h 1.905 v 4.191 z m 7.62001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 7.62001,0 v -2.0955 h 1.905 v 2.0955 z m 1.90499,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.62001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 7.62001,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z"
id="path30" />
<path
style="font-family:'JetBrainsMono Nerd Font';-inkscape-font-specification:'JetBrainsMono Nerd Font';fill:#000000;stroke-width:0.265"
d="m 72.173073,133.5246 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 7.620005,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 5.715004,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.620003,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z m 3.81,-2.0955 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,2.0955 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,-2.0955 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 7.62,2.0955 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z m 1.90499,0 v -4.191 h 1.905 v 4.191 z m 7.62001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 5.71501,0 v -4.191 h 1.905 v 4.191 z m 1.90499,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.62001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 5.71501,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.62,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z"
id="path31" />
<path
style="font-family:'JetBrainsMono Nerd Font';-inkscape-font-specification:'JetBrainsMono Nerd Font';fill:#000000;stroke-width:0.265"
d="m 72.173073,137.50296 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 7.620005,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 5.715004,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.620003,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z m 11.43,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 11.43001,0 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z m 1.90499,0 v -4.191 h 1.905 v 4.191 z m 7.62001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 5.71501,0 v -4.191 h 1.905 v 4.191 z m 1.90499,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.62001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 5.71501,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.62,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z"
id="path32" />
<path
style="font-family:'JetBrainsMono Nerd Font';-inkscape-font-specification:'JetBrainsMono Nerd Font';fill:#000000;stroke-width:0.265"
d="m 72.173073,141.48132 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -2.0955 h 1.905 v 2.0955 z m 1.905001,0 v -2.0955 h 1.905 v 2.0955 z m 1.905001,0 v -2.0955 h 1.905 v 2.0955 z m 1.905002,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 3.810001,0 v -2.0955 h 1.905 v 2.0955 z m 1.905003,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905003,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,-2.0955 v -2.0955 h 1.905 v 2.0955 z m 11.43,2.0955 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 9.52501,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z m 1.90499,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.90501,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 3.81001,0 v -4.191 h 1.905 v 4.191 z m 1.90499,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.62001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 5.71501,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,-2.0955 v -2.0955 h 1.905 v 2.0955 z"
id="path33" />
<path
style="font-family:'JetBrainsMono Nerd Font';-inkscape-font-specification:'JetBrainsMono Nerd Font';fill:#000000;stroke-width:0.265"
d="m 72.173073,145.45969 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,-2.0955 v -2.0955 h 1.905 v 2.0955 z m 1.905001,0 v -2.0955 h 1.905 v 2.0955 z m 1.905001,0 v -2.0955 h 1.905 v 2.0955 z m 1.905002,2.0955 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 3.810001,-2.0955 v -2.0955 h 1.905 v 2.0955 z m 1.905003,2.0955 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905003,-2.0955 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 15.24001,2.0955 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.62001,-2.0955 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,2.0955 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z m 1.90499,0 v -4.191 h 1.905 v 4.191 z m 1.905,-2.0955 v -2.0955 h 1.905 v 2.0955 z m 1.90501,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,2.0955 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 5.71501,0 v -4.191 h 1.905 v 4.191 z m 1.90499,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.62001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 5.71501,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,-2.0955 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z"
id="path34" />
<path
style="font-family:'JetBrainsMono Nerd Font';-inkscape-font-specification:'JetBrainsMono Nerd Font';fill:#000000;stroke-width:0.265"
d="m 72.173073,149.43805 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 7.620005,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 3.810001,0 v -4.191 h 1.905 v 4.191 z m 1.905003,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905003,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z m 11.43,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 11.43001,0 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z m 1.90499,0 v -4.191 h 1.905 v 4.191 z m 7.62001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 5.71501,0 v -4.191 h 1.905 v 4.191 z m 1.90499,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.62001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 5.71501,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z"
id="path35" />
<path
style="font-family:'JetBrainsMono Nerd Font';-inkscape-font-specification:'JetBrainsMono Nerd Font';fill:#000000;stroke-width:0.265"
d="m 72.173073,153.41641 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 7.620005,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 5.715004,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.620003,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z m 11.43,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 11.43001,0 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z m 1.90499,0 v -4.191 h 1.905 v 4.191 z m 7.62001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 5.71501,0 v -4.191 h 1.905 v 4.191 z m 1.90499,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.62001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 5.71501,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.62,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z"
id="path36" />
<path
style="font-family:'JetBrainsMono Nerd Font';-inkscape-font-specification:'JetBrainsMono Nerd Font';fill:#000000;stroke-width:0.265"
d="m 72.173073,157.39477 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 7.620005,0 v -4.191 h 1.905 v 4.191 z m 1.905001,-2.0955 v -2.0955 h 1.905 v 2.0955 z m 7.620005,2.0955 v -4.191 h 1.905 v 4.191 z m 1.905001,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.620003,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,-2.0955 v -2.0955 h 1.905 v 2.0955 z m 11.43,2.0955 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,-2.0955 v -2.0955 h 1.905 v 2.0955 z m 11.43001,2.0955 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z m 1.90499,0 v -4.191 h 1.905 v 4.191 z m 7.62001,0 v -4.191 h 1.905 v 4.191 z m 1.905,-2.0955 v -2.0955 h 1.905 v 2.0955 z m 9.525,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,2.0955 v -4.191 h 1.905 v 4.191 z m 1.90501,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,-2.0955 v -2.0955 h 1.905 v 2.0955 z m 7.62001,2.0955 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 7.62,0 v -4.191 h 1.905 v 4.191 z m 1.905,0 v -4.191 h 1.905 v 4.191 z m 1.90501,-2.0955 v -2.0955 h 1.905 v 2.0955 z"
id="path37" />
<path
style="font-family:'JetBrainsMono Nerd Font';-inkscape-font-specification:'JetBrainsMono Nerd Font';fill:#000000;stroke-width:0.265"
d="m 93.128086,159.27763 v -2.0955 h 1.905 v 2.0955 z m 1.905001,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 7.620003,0 v -2.0955 h 1.905 v 2.0955 z m 15.24001,0 v -2.0955 h 1.905 v 2.0955 z m 57.15004,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 1.905,0 v -2.0955 h 1.905 v 2.0955 z m 7.62,0 v -2.0955 h 1.905 v 2.0955 z"
id="path38" />
</g>
</g>
</svg>
<svg fill="none" height="285" viewBox="0 0 1215 285" width="1215" xmlns="http://www.w3.org/2000/svg"><g fill="#000"><path clip-rule="evenodd" d="m720 120h-15v15h-14.998v14.999l-60.002.001v15.002l90-.002v.002h.002l-.002 89.998h-15v15h-13v15h-17v-89.998h-45v90l-45-.002v-89.998h-14.998v-30h14.998v-15.002h-14.998v-30.001h14.998v-75h15v-14.997h15v-15.002h105.002zm-90-.001h45v-74.997h-45z" fill-rule="evenodd"/><path clip-rule="evenodd" d="m105 30.002h15v14.997h15v180.001h-15v15h-15v15.002h-75v-15.002h-15v-15h-15v-180.001h15v-14.997h15v-15.002h75zm-60 194.998h45v-179.998h-45z" fill-rule="evenodd"/><path d="m300 15h60v15h15v14.999h15v180.001h-15v15h-15v15h-15l-.004-209.998h-44.994v-.002h-.002v210.002h-45v-210h-44.998v179.997h-.002v30.003h-15v-15.002h-15v-15h-14.998v-180.001h14.998v-14.999h15v-15h60v-15h45z"/><path clip-rule="evenodd" d="m555 225h-15v15h-15v15h-15v-105.001l-44.998.001v105.002h-45.002v-105.002h-15v-30.001h15v-75h15.002v-14.997h15v-15.002h105zm-89.998-105.001h44.998v-74.997h-44.998z" fill-rule="evenodd"/><path d="m885 75h-15v15h-15v15h-15v-59.998h-45v179.998h45v-59.998h15v14.997h15v15.001h15v30h-15v15h-15v15.002l-105-.002v-210.001h14.998v-14.997h15.002v-15.002h105z"/><path d="m960 119.999h45v-104.999h15v15h15v14.999h15v75.001h15v15h-15v90h-15v15h-15v15h-15v-105h-45v105.002l-45-.002v-105h-30v-15h15v-15.001h15v-75h15v-14.997h15v-15.002h15z"/><path d="m1125 119.999h45v-104.999h15v15h15v15h15v180h-15v15h-15v15.002l-75-.002v-15h-15v-15h-15v-45.001h15v-14.997-.002h30v60h45v-75h-90v-105.001h15v-14.997h15v-15.002h15z"/></g></svg>

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

+10 -10
View File
@@ -1,10 +1,10 @@
▄███████ ▄███████ ▄████████▀ ▄█ █▄ ▄█ █▄ ▄███████
███ ███ ███ ███ ▀▀▀▀███▀▀ ███ ███ ███ ███ ███ ███
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
███▄▄▄███ ▄███▄▄▄██▀ ███ ▄███▄▄▄███▄ ███ ███ ███▄▄▄██
███▀▀▀███ ███▀▀▀▀ ███ ███▀▀▀███ ███ ███ ███▀▀▀▀
███ ███ ██████████ ███ ███ ███ ███ ███ █████████
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
███ █▀ ███ █▀ ██▀ ███ █▀ ▀█████▀ ███ ██▀
▀▀▀ ▀ ▀ ▀▀▀
▄▄
▄█████ ▄███████████▄ ▄███████ ▄███████ ▄███████ ▄█ █▄ ▄█ █▄
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ █▀ ███ ███ ███ ███
███ ███ ███ ███ ███ ▄███▄▄▄███ ▄███▄▄▄██▀ ███ ▄███▄▄▄███▄ ███▄▄▄██
███ ███ ███ ███ ███ ▀███▀▀▀███ ███▀▀▀▀ ███ ▀▀███▀▀▀███ ▀▀▀▀▀▀███
███ ███ ███ ███ ███ ███ ███ ██████████ ███ █ ███ ███ ▄██ ███
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
█████▀ ▀█ ███ █▀ ███ █▀ ███ ███ ███████▀ ███ █▀ ▀█████▀
███
-12
View File
@@ -1,12 +0,0 @@
echo "Enable Bluetooth A2DP auto-connect in WirePlumber"
destination=~/.config/wireplumber/wireplumber.conf.d/bluetooth-a2dp-autoconnect.conf
mkdir -p ~/.config/wireplumber/wireplumber.conf.d/
if [[ ! -f "$destination" ]]; then
cp "$OMARCHY_PATH/default/wireplumber/wireplumber.conf.d/bluetooth-a2dp-autoconnect.conf" \
"$destination"
fi
omarchy-state set reboot-required
+4
View File
@@ -3,6 +3,10 @@ echo "Add cliamp music TUI player (Super+Shift+Alt+M)"
if omarchy-pkg-missing cliamp; then
omarchy-pkg-add cliamp
cp ~/.local/share/omarchy/applications/icons/Cliamp.png ~/.local/share/applications/icons/Cliamp.png
gtk-update-icon-cache ~/.local/share/icons/hicolor &>/dev/null
omarchy-tui-install "Cliamp" "cliamp" tile "$HOME/.local/share/applications/icons/Cliamp.png"
if [[ -f ~/.config/hypr/bindings.conf ]] && ! grep -q "cliamp" ~/.config/hypr/bindings.conf; then
sed -i '/^bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify/a bindd = SUPER SHIFT ALT, M, Music TUI, exec, omarchy-launch-or-focus-tui cliamp' ~/.config/hypr/bindings.conf
fi
-14
View File
@@ -1,14 +0,0 @@
echo "Move Dell XPS touchpad haptics into the packaged service"
if omarchy-hw-dell-xps-haptic-touchpad; then
sudo systemctl disable --now dell-xps-haptic-touchpad.service 2>/dev/null || true
sudo rm -f /etc/systemd/system/dell-xps-haptic-touchpad.service
sudo rm -f /etc/systemd/system/multi-user.target.wants/dell-xps-haptic-touchpad.service
sudo rm -rf /etc/systemd/system/dell-xps-haptic-touchpad.service.d
sudo rm -f /etc/udev/rules.d/99-dell-xps-haptic-touchpad.rules
sudo rm -f /etc/omarchy-dell-haptic-touchpad.env
sudo systemctl daemon-reload
sudo udevadm control --reload-rules
source "$OMARCHY_PATH/install/packaging/dell-xps-touchpad-haptics.sh"
fi
Regular → Executable
View File
Regular → Executable
View File

Some files were not shown because too many files have changed in this diff Show More