···11-# Extra autostart processes
22-# exec-once = uwsm app -- my-service
33-#Additional Autostart sspaeti:
44-#temporarly until https://github.com/basecamp/omarchy/issues/126 is fixed
55-exec-once = clipse -listen
66-#daylight: since v.11 there is daylight included
77-# exec-once = wlsunset -l 47.4095 -L 8.5514 -t 3500 -T 6500
88-exec-once = hyprsunset
99-#start terminal, obsidian, browser
1010-exec-once = ~/.config/hypr/sspaeti/autostart-apps.sh
-101
_arch-linux/hypr/bindings.conf
···11-# CUSTOM Application bindings
22-$terminal = uwsm app -- alacritty
33-# $browser = uwsm app -- chromium --new-window --ozone-platform=wayland
44-$browser = uwsm app -- brave --new-window --ozone-platform=wayland --force-device-scale-factor=1.0
55-66-$webapp = $browser --app
77-#custom sspaeti:
88-$toggle = ~/.config/hypr/sspaeti/app-toggle.sh
99-$webapptoggle = ~/.config/hypr/sspaeti/webapp-toggle.sh
1010-1111-bind = SUPER, return, exec, $terminal
1212-bind = SUPER SHIFT, return, exec, $terminal -e nvim
1313-1414-bind = SUPER, O, exec, uwsm app -- nautilus --new-window
1515-bind = SUPER, B, exec, $toggle brave-browser "$browser"
1616-bind = SUPER, Z, exec, $toggle zen "zen-browser"
1717-bind = SUPER, slash, exec, uwsm app -- 1password
1818-1919-bind = SUPER, M, exec, uwsm app -- spotify
2020-bind = SUPER SHIFT, M, exec, $webapp="https://www.focusatwill.com/app/music"
2121-2222-bind = SUPER, A, exec, $terminal -e btop
2323-bind = SUPER, D, exec, $terminal -e lazydocker
2424-2525-#keyboard switch
2626-bindd = SUPER ALT SHIFT, SPACE, Toggle Keyboard, exec, ~/.local/bin/switch-keyboard ; notify-send "Keyboard Setup" "Toggle keyboard"
2727-2828-# fix for using SUPER ESC on KBDFans Keyboard
2929-bind = SUPER, grave, exec, ~/.local/share/omarchy/bin/omarchy-menu-power
3030-3131-bind = SUPER, N, exec, $toggle obsidian "obsidian --disable-gpu"
3232-# bind = SUPER, N, exec, uwsm app -- obsidian -disable-gpu
3333-3434-bind = SUPER, S, exec, uwsm app -- signal-desktop
3535-bind = SUPER SHIFT, W, exec, $webapp="https://web.whatsapp.com/"
3636-bind = SUPER CTRL, S, exec, $webapp="https://messages.google.com/web/conversations"
3737-bind = SUPER ALT, S, exec, $toggle Slack "slack"
3838-3939-bind = SUPER, C, exec, $toggle Morgen "morgen"
4040-4141-bind = SUPER, N, exec, $toggle obsidian "obsidian --disable-gpu"
4242-bind = SUPER CTRL, SPACE, exec, ~/.config/hypr/sspaeti/emoji-fuzzy.sh
4343-bind = SUPER SHIFT ALT, F, exec, ~/.config/hypr/sspaeti/fuzzy-file-content.sh
4444-bind = SUPER SHIFT, F, exec, ~/.config/hypr/sspaeti/fuzzy-file-names.sh
4545-4646-bind = SUPER SHIFT, K, exec, ~/.local/share/omarchy/bin/omarchy-menu-keybindings
4747-4848-#notifications restore
4949-bind = SUPER, comma, exec, makoctl restore
5050-bind = SUPER, period, exec, makoctl dismiss
5151-5252-# Printscreens / Screenshots
5353-bind = SUPER ALT, P, exec, ~/.local/share/omarchy/bin/omarchy-cmd-screenshot
5454-bind = SUPER ALT CTRL, P, exec, ~/.local/share/omarchy/bin/omarchy-cmd-screenshot window
5555-# bind = , PRINT, exec, ~/.local/share/omarchy/bin/omarchy-cmd-screenrecord output
5656-unbind = , PRINT
5757-bind = , PRINT, exec, grim ~/Pictures/screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png && notify-send "Screenshot saved"
5858-5959-# omarchy menu
6060-bindd = SUPER ALT, SPACE, Run commands, exec, ~/.local/share/omarchy/bin/omarchy-menu
6161-6262-bind = SUPER, G, exec, pkill -SIGUSR1 waybar
6363-bind = SUPER SHIFT, G, exec, ~/.local/share/omarchy/bin/swaybg-next
6464-bind = SUPER SHIFT ALT CTRL, G, exec, ~/.local/share/omarchy/bin/omarchy-theme-next
6565-#toggle to my personal background images
6666-bind = SUPER CTRL, G, exec, ~/.config/hypr/sspaeti/bg-mode-toggle.sh switch
6767-bind = SUPER SHIFT CTRL, G, exec, ~/.config/hypr/sspaeti/bg-mode-toggle.sh next
6868-6969-# Extra bindings
7070-unbind = SUPER, W
7171-bind = SUPER, W, exec, $webapp="https://claude.ai"
7272-bind = SUPER ALT, A, exec, $webapp="https://chatgpt.com"
7373-# bind = SUPER SHIFT, A, exec, $webapp="https://grok.com"
7474-# bind = SUPER, C, exec, $webapp="https://app.hey.com/calendar/weeks/"
7575-# bind = SUPER, E, exec, $webapp="https://app.hey.com"
7676-bind = SUPER, Y, exec, $webapp="https://youtube.com/"
7777-bind = SUPER, X, exec, $webapp="https://blue.ssp.sh"
7878-bind = SUPER SHIFT, X, exec, $webapp="https://bsky.app/intent/compose,"
7979-8080-8181-# Monitor and Screen resolution shorcuts
8282-# -> in ~/.config/hypr/monitors.conf
8383-8484-#Clipboard
8585-#-floating
8686-windowrulev2 = float,class:(clipse) # ensure you have a floating window class set if you want this behavior
8787-windowrulev2 = size 622 652,class:(clipse) # set the size of the window as necessary
8888-#-keybind
8989-bind = SHIFT SUPER, C, exec, $terminal --class clipse -e clipse
9090-# bind = SUPER, V, exec, $terminal --class clipse -e 'clipse'
9191-9292-# Example: bind = SUPER, V, exec, alacritty --class clipse -e 'clipse'
9393-9494-# Extra autostart processes
9595-# exec-once = uwsm app -- my-service
9696-9797-# Extra env variables
9898-# Note: You must relaunch Hyprland after changing envs (use Super+Esc, then Relaunch)
9999-# env = MY_GLOBAL_ENV,setting
100100-101101-
-6
_arch-linux/hypr/envs.conf
···11-# Extra env variables
22-# Note: You must relaunch Hyprland after changing envs (use Super+Esc, then Relaunch)
33-# env = MY_GLOBAL_ENV,setting
44-55-# Make Brave use XCompose and all Wayland
66-env = BRAVE_FLAGS,"--enable-features=UseOzonePlatform --ozone-platform=wayland --gtk-version=4"
-22
_arch-linux/hypr/hypridle.conf
···11-general {
22- lock_cmd = omarchy-lock-screen # lock screen and 1password
33- before_sleep_cmd = loginctl lock-session # lock before suspend.
44- after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
55- on_unlock_cmd = omarchy-restart-waybar # prevent stacking of waybar when waking
66-}
77-88-listener {
99- timeout = 150 # 2.5min
1010- on-timeout = pidof hyprlock || omarchy-launch-screensaver # start screensaver (if we haven't locked already)
1111-}
1212-1313-listener {
1414- timeout = 300 # 5min
1515- on-timeout = loginctl lock-session # lock screen when timeout has passed
1616-}
1717-1818-listener {
1919- timeout = 330 # 5.5min
2020- on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
2121- on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected
2222-}
-20
_arch-linux/hypr/hyprland.conf
···11-# Learn how to configure Hyprland: https://wiki.hyprland.org/Configuring/
22-33-# Use defaults Omarchy defaults (but don't edit these directly!)
44-source = ~/.local/share/omarchy/default/hypr/autostart.conf
55-source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
66-source = ~/.local/share/omarchy/default/hypr/bindings/tiling.conf
77-source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf
88-source = ~/.local/share/omarchy/default/hypr/envs.conf
99-source = ~/.local/share/omarchy/default/hypr/looknfeel.conf
1010-source = ~/.local/share/omarchy/default/hypr/input.conf
1111-source = ~/.local/share/omarchy/default/hypr/windows.conf
1212-source = ~/.config/omarchy/current/theme/hyprland.conf
1313-1414-# Change your own setup in these files (and overwrite any settings from defaults!)
1515-source = ~/.config/hypr/monitors.conf
1616-source = ~/.config/hypr/input.conf
1717-source = ~/.config/hypr/bindings.conf
1818-source = ~/.config/hypr/tiling.conf
1919-source = ~/.config/hypr/envs.conf
2020-source = ~/.config/hypr/autostart.conf
···11-# Makes hyprsunset do nothing to the screen by default
22-# Without this, the default applies some tint to the monitor
33-profile {
44- time = 7:30
55- identity = true
66-}
77-88-profile {
99- time = 20:30
1010- temperature = 2500
1111- gamma = 0.8
1212-}
-63
_arch-linux/hypr/input.conf
···11-# CUSTOM input
22-33-# Control your input devices
44-# See https://wiki.hypr.land/Configuring/Variables/#input
55-input {
66- # Use multiple keyboard layouts and switch between them with Alt + Space
77- kb_layout = us
88- kb_options = compose:caps,grp:alt_space_toggle
99-1010- # Change speed of keyboard repeat
1111- repeat_rate = 40
1212- repeat_delay = 200
1313-1414- # Increase sensitity for mouse/trackpack (default: 0)
1515- # sensitivity = 0.35
1616-1717- touchpad {
1818- # Use natural (inverse) scrolling
1919- natural_scroll = true
2020-2121- # Use two-finger clicks for right-click instead of lower-right corner
2222- # clickfinger_behavior = true
2323-2424- # Control the speed of your scrolling
2525- scroll_factor = 0.4
2626- }
2727-}
2828-2929-# additional overwrites to omarchy
3030-3131-# check with hyprctl `devices` which devices are plugged in
3232-device {
3333- name = deft-pro-trackball
3434- natural_scroll = true
3535-}
3636-device {
3737- name = logitech-mx-master-3s
3838- natural_scroll = true
3939-}
4040-4141-4242-# Scroll faster in the terminal
4343-windowrule = scrolltouchpad 1.5, class:Alacritty
4444-4545-4646-# --------LOOK'N'FEEL-------------------
4747-#
4848-4949-# additional overwrites to omarchy
5050-5151-general:gaps_in = 1.2
5252-general:gaps_out = 0
5353-5454-general:border_size = 1
5555-animations:enabled = no, please :)
5656-5757-5858-# --------WINDOWS-------------------
5959-#
6060-# Just dash of opacity
6161-windowrule = opacity 0.99 0.97, class:.*
6262-windowrule = opacity 1 0.99, class:^(Chromium|chromium|google-chrome|google-chrome-unstable)$
6363-
-84
_arch-linux/hypr/monitors.conf
···11-# See https://wiki.hyprland.org/Configuring/Monitors/
22-33-# List current monitors and resolutions possible: hyprctl monitors
44-# Format: monitor = [port], resolution, position, scale
55-# You must relaunch Hyprland after changing any envs (use Super+Esc, then Relaunch)
66-77-# Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
88-# env = GDK_SCALE,2
99-# monitor=,preferred,auto,auto
1010-1111-# Good compromise for 27" or 32" 4K monitors (but fractional!)
1212-# env = GDK_SCALE,1.75
1313-# monitor=,preferred,auto,1.666667
1414-1515-# Straight 1x setup for low-resolution displays like 1080p or 1440p
1616-# env = GDK_SCALE,1
1717-# monitor=,preferred,auto,1
1818-1919-# Example for Framework 13 w/ 6K XDR Apple display
2020-# monitor = DP-5, 6016x3384@60, auto, 2
2121-# monitor = eDP-1, 2880x1920@120, auto, 2
2222-2323-2424-# ---------------------------------------------------------------------------------------
2525-2626-2727-# Monitor and Screen resolution
2828-2929-# Fallback: Use single default monitor (see all monitors with: hyprctl monitors)
3030-monitor=,preferred,auto,auto
3131-3232-3333-# HOME SETUP: External monitor (top) - Dell S2722QC at native 4K resolution and Laptop screen on the bottom
3434-# Toggle to HOME setup
3535-bindd = SUPER ALT, 8, Home Setup, exec, hyprctl keyword monitor "DP-1,3840x2160@60,0x0,1.5" ; hyprctl keyword monitor "eDP-1,1920x1200@60,0x1440,1.5" ; notify-send "Monitor Setup" "HOME setup"
3636-3737-# OFFICE SETUP: Dell display to the left of laptop
3838-# Toggle to OFFICE setup
3939-bindd = SUPER ALT, 9, Office Setup, exec, hyprctl keyword monitor "DP-1,3840x2160@60,0x0,1.5" ; hyprctl keyword monitor "eDP-1,1920x1200@60,2560x0,1.25" ; notify-send "Monitor Setup" "OFFICE setup"
4040-4141-#- Optional: Single key to disable external monitor (useful for laptop-only mode)
4242-bindd = SUPER ALT, 0, Disable External, exec, hyprctl keyword monitor "DP-1,disable" && hyprctl keyword monitor "eDP-1,1920x1200@60,0x0,1.25" && notify-send "Monitor Setup" "Laptop only mode"
4343-4444-# HOME SETUP: External monitor (top) - Dell S2722QC at native 4K resolution
4545-# Laptop screen on the bottom
4646-# monitor=DP-1,3840x2160@60,0x0,1.5
4747-# monitor=eDP-1,1920x1200@60,0x1440,1.5
4848-4949-# OFFICE SETUP: Dell display to the left of laptop
5050-# Uncomment these lines for office setup:
5151-monitor=DP-1,3840x2160@60,0x0,1.5
5252-monitor=eDP-1,1920x1200@60,2560x0,1.25
5353-5454-5555-# Scaling on dell home setup - Scaling comparison:
5656-# - **1.0 (Native)**: 3840×2160 - Too small, text would be unreadable
5757-# - **1.5 (seem best)**: 2560×1440 effective - Perfect balance ✅
5858-# - **2.0**: 1920×1080 effective - Too large, wastes the 4K resolution
5959-6060-# Workspace assignment
6161-# When external monitor is connected:
6262-# Workspaces 1-5 on external monitor (DP-1)
6363-workspace=1,monitor:DP-1
6464-workspace=2,monitor:DP-1
6565-workspace=3,monitor:DP-1
6666-workspace=4,monitor:DP-1
6767-workspace=5,monitor:DP-1
6868-6969-# Workspaces 6-10 on laptop screen (eDP-1)
7070-workspace=6,monitor:eDP-1
7171-workspace=7,monitor:eDP-1
7272-workspace=8,monitor:eDP-1
7373-workspace=9,monitor:eDP-1
7474-workspace=10,monitor:eDP-1
7575-7676-# Fallback: when no external monitor, all workspaces on laptop screen
7777-workspace=1,monitor:eDP-1,default:true
7878-workspace=2,monitor:eDP-1,default:true
7979-workspace=3,monitor:eDP-1,default:true
8080-workspace=4,monitor:eDP-1,default:true
8181-workspace=5,monitor:eDP-1,default:true
8282-8383-#Lenovo bigger resolution optimal scale
8484-#monitor=,2880x1800,auto,1.75
···11-#!/bin/bash
22-33-yay -S --noconfirm --needed fprint
44-55-echo -e "\e[32m\nLet's setup your right index finger as the first fingerprint.\nKeep moving the finger around on sensor until the process completes.\n\e[0m"
66-sudo fprintd-enroll `whoami`
77-88-echo -e "\e[32m\nNow let's verify that it's working correctly.\e[0m\n"
99-1010-if fprintd-verify; then
1111- echo -e "\e[32m\nPerfect! Now you can use your fingerprint on the lock screen (Super + Escape).\e[0m"
1212-else
1313- echo -e "\e[31m\nSomething went wrong. Maybe try again?\e[0m"
1414-fi
-3
_arch-linux/hypr/omarchy/bin/omarchy-font-current
···11-#!/bin/bash
22-33-grep -oP 'family\s*=\s*"\K[^"]+' ~/.config/alacritty/alacritty.toml | head -n1
···11-#!/bin/bash
22-33-# A script to display Hyprland keybindings defined in your configuration
44-# using walker for an interactive search menu.
55-66-# Fetch dynamic keybindings from Hyprland
77-#
88-# Also do some pre-processing:
99-# - Remove standard Omarchy bin path prefix
1010-# - Remove uwsm prefix
1111-# - Map numeric modifier key mask to a textual rendition
1212-# - Output comma-separated values that the parser can understand
1313-dynamic_bindings() {
1414- hyprctl -j binds | \
1515- jq -r '.[] | {modmask, key, keycode, description, dispatcher, arg} | "\(.modmask),\(.key)@\(.keycode),\(.description),\(.dispatcher),\(.arg)"' | \
1616- sed -r \
1717- -e 's/null//' \
1818- -e 's,~/.local/share/omarchy/bin/,,' \
1919- -e 's,uwsm app -- ,,' \
2020- -e 's/@0//' \
2121- -e 's/,@/,code:/' \
2222- -e 's/^0,/,/' \
2323- -e 's/^1,/SHIFT,/' \
2424- -e 's/^4,/CTRL,/' \
2525- -e 's/^5,/SHIFT CTRL,/' \
2626- -e 's/^8,/ALT,/' \
2727- -e 's/^9,/SHIFT ALT,/' \
2828- -e 's/^12,/CTRL ALT,/' \
2929- -e 's/^13,/SHIFT CTRL ALT,/' \
3030- -e 's/^64,/SUPER,/' \
3131- -e 's/^65,/SUPER SHIFT,/' \
3232- -e 's/^68,/SUPER CTRL,/' \
3333- -e 's/^69,/SUPER SHIFT CTRL,/' \
3434- -e 's/^72,/SUPER ALT,/'
3535-}
3636-3737-# Parse and format keybindings
3838-#
3939-# `awk` does the heavy lifting:
4040-# - Set the field separator to a comma ','.
4141-# - Joins the key combination (e.g., "SUPER + Q").
4242-# - Joins the command that the key executes.
4343-# - Prints everything in a nicely aligned format.
4444-parse_bindings() {
4545- awk -F, '
4646-{
4747- # Combine the modifier and key (first two fields)
4848- key_combo = $1 " + " $2;
4949-5050- # Clean up: strip leading "+" if present, trim spaces
5151- gsub(/^[ \t]*\+?[ \t]*/, "", key_combo);
5252- gsub(/[ \t]+$/, "", key_combo);
5353-5454- # Use description, if set
5555- action = $3;
5656-5757- if (action == "") {
5858- # Reconstruct the command from the remaining fields
5959- for (i = 4; i <= NF; i++) {
6060- action = action $i (i < NF ? "," : "");
6161- }
6262-6363- # Clean up trailing commas, remove leading "exec, ", and trim
6464- sub(/,$/, "", action);
6565- gsub(/(^|,)[[:space:]]*exec[[:space:]]*,?/, "", action);
6666- gsub(/^[ \t]+|[ \t]+$/, "", action);
6767- gsub(/[ \t]+/, " ", key_combo); # Collapse multiple spaces to one
6868-6969- # Escape XML entities
7070- gsub(/&/, "\\&", action);
7171- gsub(/</, "\\<", action);
7272- gsub(/>/, "\\>", action);
7373- gsub(/"/, "\\"", action);
7474- gsub(/'"'"'/, "\\'", action);
7575- }
7676-7777- if (action != "") {
7878- printf "%-35s → %s\n", key_combo, action;
7979- }
8080-}'
8181-}
8282-8383-dynamic_bindings | \
8484- sort -u | \
8585- parse_bindings | \
8686- walker --dmenu --theme keybindings -p 'Keybindings'
-23
_arch-linux/hypr/omarchy/bin/omarchy-menu-power
···11-#!/bin/bash
22-33-show_power_menu() {
44- # The first characters are invisible sort keys.
55- local menu_options=" Lock
66- Save
77- Suspend
88- Relaunch
99- Restart
1010- Shutdown"
1111- local selection=$(echo -e "$menu_options" | walker --dmenu --theme dmenu_150)
1212-1313- case "$selection" in
1414- *Lock*) hyprlock ;;
1515- *Save*) ~/.local/share/omarchy/bin/omarchy-launch-screensaver ;;
1616- *Suspend*) systemctl suspend ;;
1717- *Relaunch*) uwsm stop ;;
1818- *Restart*) systemctl reboot ;;
1919- *Shutdown*) systemctl poweroff ;;
2020- esac
2121-}
2222-2323-show_power_menu
-18
_arch-linux/hypr/omarchy/bin/omarchy-migrate
···11-#!/bin/bash
22-33-set -e
44-55-# Where we store an empty file for each migration that has already been performed.
66-STATE_DIR="$HOME/.local/state/omarchy/migrations"
77-mkdir -p "$STATE_DIR"
88-99-# Run any pending migrations
1010-for file in ~/.local/share/omarchy/migrations/*.sh; do
1111- filename=$(basename "$file")
1212-1313- if [[ ! -f "$STATE_DIR/$filename" ]]; then
1414- echo -e "\e[32m\nRunning migration (${filename%.sh})\e[0m"
1515- source $file
1616- touch "$STATE_DIR/$filename"
1717- fi
1818-done
···11-#!/bin/bash
22-33-~/.local/share/omarchy/bin/omarchy-show-logo
44-55-echo "Installing all dependencies..."
66-yay -S --noconfirm --needed \
77- dropbox dropbox-cli libappindicator-gtk3 python-gpgme nautilus-dropbox
88-99-echo "Starting Dropbox..."
1010-uwsm app -- dropbox-cli start &>/dev/null &
1111-echo "See Dropbox icon behind hover tray in top right and right-click for setup."
1212-1313-~/.local/share/omarchy/bin/omarchy-show-done
-39
_arch-linux/hypr/omarchy/bin/omarchy-setup-fido2
···11-#!/bin/bash
22-33-if [[ "--remove" == "$1" ]]; then
44- echo -e "\e[32mLet's remove your Fido2 device from sudo authentication.\n\e[0m"
55- yay -Rns --noconfirm libfido2 pam-u2f
66- sudo rm -rf /etc/fido2
77- sudo sed -i '\|^auth[[:space:]]\+sufficient[[:space:]]\+pam_u2f\.so[[:space:]]\+cue[[:space:]]\+authfile=/etc/fido2/fido2$|d' /etc/pam.d/sudo
88- echo -e "\e[32m\nYou've successfully removed the fido2 device setup.\e[0m"
99-else
1010- echo -e "\e[32mLet's setup your Fido2 device for sudo authentication.\n\e[0m"
1111- yay -S --noconfirm --needed libfido2 pam-u2f
1212-1313- tokens=$(fido2-token -L)
1414-1515- if [ -z "$tokens" ]; then
1616- echo -e "\e[31m\nNo fido2 device detected. Plug it in, you may have to unlock it as well\e[0m"
1717- else
1818- # Create the pamu2fcfg file
1919- if [ ! -f /etc/fido2/fido2 ]; then
2020- sudo mkdir -p /etc/fido2
2121- echo -e "\e[32m\nLet's setup your device by confirming on the device now.\e[0m"
2222- pamu2fcfg >/tmp/fido2 # This needs to run as the user
2323- if [ $? -ne 0 ]; then
2424- echo -e "\e[31m\nSomething went wrong. Maybe try again?\e[0m"
2525- exit 1
2626- fi
2727- sudo mv /tmp/fido2 /etc/fido2/fido2
2828- fi
2929-3030- # Add fido2 auth as an option for sudo
3131- if ! grep -q pam_u2f.so /etc/pam.d/sudo; then
3232- sudo sed -i '1i auth sufficient pam_u2f.so cue authfile=/etc/fido2/fido2' /etc/pam.d/sudo
3333- fi
3434-3535- if ! sudo echo -e "\e[32m\nPerfect! Now you can use your fido2 device for sudo.\e[0m"; then
3636- echo -e "\e[31m\nSomething went wrong. Maybe try again?\e[0m"
3737- fi
3838- fi
3939-fi
···11-#!/bin/bash
22-33-if [[ "--remove" == "$1" ]]; then
44- echo -e "\e[32mLet's remove your fingerprint scanner from authentication.\n\e[0m"
55- yay -Rns --noconfirm fprintd
66- sudo rm -rf /etc/pam.d/polkit-1
77- sudo sed -i '/pam_fprintd\.so/d' /etc/pam.d/sudo
88- echo -e "\e[32mYou've successfully removed the fingerprint setup.\e[0m"
99-else
1010- echo -e "\e[32mLet's setup your fingerprint scanner for authentication.\n\e[0m"
1111- yay -S --noconfirm --needed fprintd usbutils
1212-1313- if ! lsusb | grep -Eiq 'fingerprint|synaptics|goodix'; then
1414- echo -e "\e[31m\nNo fingerprint sensor detected.\e[0m"
1515- else
1616- # Add fingerprint authentication as an option for sudo
1717- if ! grep -q pam_fprintd.so /etc/pam.d/sudo; then
1818- sudo sed -i '1i auth sufficient pam_fprintd.so' /etc/pam.d/sudo
1919- fi
2020-2121- # Add fingerprint authentication as an option for hyprpolkitagent
2222- if [ ! -f /etc/pam.d/polkit-1 ] || ! grep -q pam_fprintd.so /etc/pam.d/polkit-1; then
2323- sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF'
2424-auth required pam_unix.so
2525-auth optional pam_fprintd.so
2626-2727-account required pam_unix.so
2828-password required pam_unix.so
2929-session required pam_unix.so
3030-EOF
3131- fi
3232-3333- # Enroll the first finger
3434- echo -e "\e[32m\nLet's setup your right index finger as the first fingerprint.\nKeep moving the finger around on sensor until the process completes.\n\e[0m"
3535- sudo fprintd-enroll $USER
3636-3737- echo -e "\e[32m\nNow let's verify that it's working correctly.\e[0m\n"
3838-3939- if fprintd-verify; then
4040- echo -e "\e[32m\nPerfect! Now you can use your fingerprint on the lock screen (Super + Escape).\e[0m"
4141- else
4242- echo -e "\e[31m\nSomething went wrong. Maybe try again?\e[0m"
4343- fi
4444- fi
4545-fi
···11-#!/bin/bash
22-33-# Cycles through the background images available
44-55-BACKGROUNDS_DIR="$HOME/.config/omarchy/current/theme/backgrounds/"
66-CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background"
77-88-mapfile -d '' -t BACKGROUNDS < <(find "$BACKGROUNDS_DIR" -type f -print0 | sort -z)
99-TOTAL=${#BACKGROUNDS[@]}
1010-1111-if [[ $TOTAL -eq 0 ]]; then
1212- notify-send "No background was found for theme" -t 2000
1313- pkill -x swaybg
1414- setsid uwsm app -- swaybg --color '#000000' >/dev/null 2>&1 &
1515-else
1616- # Get current background from symlink
1717- if [[ -L "$CURRENT_BACKGROUND_LINK" ]]; then
1818- CURRENT_BACKGROUND=$(readlink "$CURRENT_BACKGROUND_LINK")
1919- else
2020- # Default to first background if no symlink exists
2121- CURRENT_BACKGROUND=""
2222- fi
2323-2424- # Find current background index
2525- INDEX=-1
2626- for i in "${!BACKGROUNDS[@]}"; do
2727- if [[ "${BACKGROUNDS[$i]}" == "$CURRENT_BACKGROUND" ]]; then
2828- INDEX=$i
2929- break
3030- fi
3131- done
3232-3333- # Get next background (wrap around)
3434- if [[ $INDEX -eq -1 ]]; then
3535- # Use the first background when no match was found
3636- NEW_BACKGROUND="${BACKGROUNDS[0]}"
3737- else
3838- NEXT_INDEX=$(((INDEX + 1) % TOTAL))
3939- NEW_BACKGROUND="${BACKGROUNDS[$NEXT_INDEX]}"
4040- fi
4141-4242- # Set new background symlink
4343- ln -nsf "$NEW_BACKGROUND" "$CURRENT_BACKGROUND_LINK"
4444-4545- # Relaunch swaybg
4646- pkill -x swaybg
4747- setsid uwsm app -- swaybg -i "$CURRENT_BACKGROUND_LINK" -m fill >/dev/null 2>&1 &
4848-fi
···11-#!/bin/bash
22-33-# omarchy-theme-install: Install a new theme from a git repo for Omarchy
44-# Usage: omarchy-theme-install <git-repo-url>
55-66-if [ -z "$1" ]; then
77- echo -e "\e[32mSee https://manuals.omamix.org/2/the-omarchy-manual/90/extra-themes\n\e[0m"
88- REPO_URL=$(gum input --placeholder="Git repo URL for theme" --header="")
99-else
1010- REPO_URL="$1"
1111-fi
1212-1313-if [ -z "$REPO_URL" ]; then
1414- exit 1
1515-fi
1616-1717-THEMES_DIR="$HOME/.config/omarchy/themes"
1818-THEME_NAME=$(basename "$REPO_URL" .git | sed -E 's/^omarchy-//; s/-theme$//')
1919-THEME_PATH="$THEMES_DIR/$THEME_NAME"
2020-2121-# Remove existing theme if present
2222-if [ -d "$THEME_PATH" ]; then
2323- rm -rf "$THEME_PATH"
2424-fi
2525-2626-# Clone the repo directly to ~/.config/omarchy/themes
2727-if ! git clone "$REPO_URL" "$THEME_PATH"; then
2828- echo "Error: Failed to clone theme repo."
2929- exit 1
3030-fi
3131-3232-# Apply the new theme with omarchy-theme-set
3333-omarchy-theme-set $THEME_NAME
-5
_arch-linux/hypr/omarchy/bin/omarchy-theme-list
···11-#!/bin/bash
22-33-find ~/.config/omarchy/themes/ -mindepth 1 -maxdepth 1 \( -type d -o -type l \) | sort | while read -r path; do
44- echo "$(basename "$path" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g')"
55-done
-31
_arch-linux/hypr/omarchy/bin/omarchy-theme-menu
···11-#!/bin/bash
22-33-THEMES_DIR="$HOME/.config/omarchy/themes/"
44-CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
55-CURRENT_THEME_NAME=$(basename "$(realpath "$CURRENT_THEME_DIR")")
66-77-# Build themes list with pretty display names
88-mapfile -t themes < <(
99- find "$THEMES_DIR" -mindepth 1 -maxdepth 1 \( -type d -o -type l \) | sort | while read -r path; do
1010- filename=$(basename "$path")
1111- display_name=$(echo "$filename" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g')
1212-1313- if [[ "$filename" == "$CURRENT_THEME_NAME" ]]; then
1414- echo "<i>$display_name</i>"
1515- else
1616- echo "$display_name"
1717- fi
1818- done
1919-)
2020-2121-# Show Walker menu
2222-selection=$(printf '%s\n' "${themes[@]}" | walker --dmenu --theme dmenu_250 2>/dev/null)
2323-2424-# Remove any Pango markup before converting back to filename
2525-clean_selection=$(echo "$selection" | sed -E 's/<[^>]+>//g')
2626-2727-# Convert to lowercase and dash-separated: "Tokyo Night" -> "tokyo-night"
2828-selected_theme=$(echo "$clean_selection" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
2929-3030-# Apply the selected theme
3131-"$HOME/.local/share/omarchy/bin/omarchy-theme-set" "$selected_theme"
-34
_arch-linux/hypr/omarchy/bin/omarchy-theme-next
···11-#!/bin/bash
22-33-THEMES_DIR="$HOME/.config/omarchy/themes/"
44-CURRENT_THEME_LINK="$HOME/.config/omarchy/current/theme"
55-66-THEMES=($(find "$THEMES_DIR" -mindepth 1 -maxdepth 1 | sort))
77-TOTAL=${#THEMES[@]}
88-99-# Get current theme from symlink
1010-if [[ -L "$CURRENT_THEME_LINK" ]]; then
1111- CURRENT_THEME=$(realpath "$CURRENT_THEME_LINK")
1212-else
1313- # Default to first theme if no symlink exists
1414- CURRENT_THEME=$(realpath "${THEMES[0]}")
1515-fi
1616-1717-# Find current theme index
1818-INDEX=0
1919-for i in "${!THEMES[@]}"; do
2020- THEMES[$i]=$(realpath "${THEMES[$i]}")
2121-2222- if [[ "${THEMES[$i]}" == "$CURRENT_THEME" ]]; then
2323- INDEX=$i
2424- break
2525- fi
2626-done
2727-2828-# Get next theme (wrap around)
2929-NEXT_INDEX=$(((INDEX + 1) % TOTAL))
3030-NEW_THEME=${THEMES[$NEXT_INDEX]}
3131-NEW_THEME_NAME=$(basename "$NEW_THEME")
3232-3333-omarchy-theme-set $NEW_THEME_NAME
3434-notify-send "Theme changed to $NEW_THEME_NAME" -t 2000
-40
_arch-linux/hypr/omarchy/bin/omarchy-theme-remove
···11-#!/bin/bash
22-33-# omarchy-theme-remove: Remove a theme from Omarchy by name
44-# Usage: omarchy-theme-remove <theme-name>
55-66-if [ -z "$1" ]; then
77- mapfile -t extra_themes < <(find ~/.config/omarchy/themes -mindepth 1 -maxdepth 1 -type d ! -xtype l -printf '%f\n')
88-99- if [[ ${#extra_themes[@]} -gt 0 ]]; then
1010- THEME_NAME=$(gum choose --header="Remove extra theme" "${extra_themes[@]}")
1111- else
1212- echo "No extra themes installed."
1313- exit 1
1414- fi
1515-else
1616- THEME_NAME="$1"
1717-fi
1818-1919-THEMES_DIR="$HOME/.config/omarchy/themes"
2020-CURRENT_DIR="$HOME/.config/omarchy/current"
2121-THEME_PATH="$THEMES_DIR/$THEME_NAME"
2222-2323-# Ensure a theme was set
2424-if [ -z "$THEME_NAME" ]; then
2525- exit 1
2626-fi
2727-2828-# Check if theme exists before attempting removal
2929-if [ ! -d "$THEME_PATH" ]; then
3030- echo "Error: Theme '$THEME_NAME' not found."
3131- exit 1
3232-fi
3333-3434-# Move to the next theme if the current theme is the one being removed
3535-if [ "$(readlink -f "$CURRENT_DIR/theme")" = "$(readlink -f "$THEME_PATH")" ]; then
3636- omarchy-theme-next
3737-fi
3838-3939-# Now remove the theme directory for THEME_NAME
4040-rm -rf "$THEME_PATH"
-53
_arch-linux/hypr/omarchy/bin/omarchy-theme-set
···11-#!/bin/bash
22-33-# omarchy-theme-set: Set a theme, specified by its name.
44-# Usage: omarchy-theme-set <theme-name>
55-66-if [[ -z "$1" && "$1" != "CNCLD" ]]; then
77- echo "Usage: omarchy-theme-set <theme-name>" >&2
88- exit 1
99-fi
1010-1111-THEMES_DIR="$HOME/.config/omarchy/themes/"
1212-CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
1313-1414-THEME_NAME=$(echo "$1" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
1515-THEME_PATH="$THEMES_DIR/$THEME_NAME"
1616-1717-# Check if the theme entered exists
1818-if [[ ! -d "$THEME_PATH" ]]; then
1919- echo "Theme '$THEME_NAME' does not exist in $THEMES_DIR" >&2
2020- exit 2
2121-fi
2222-2323-# Update theme symlinks
2424-ln -nsf "$THEME_PATH" "$CURRENT_THEME_DIR"
2525-2626-# Change gnome modes
2727-if [[ -f ~/.config/omarchy/current/theme/light.mode ]]; then
2828- gsettings set org.gnome.desktop.interface color-scheme "prefer-light"
2929- gsettings set org.gnome.desktop.interface gtk-theme "Adwaita"
3030-else
3131- gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
3232- gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
3333-fi
3434-3535-# Change gnome icon theme color
3636-if [[ -f ~/.config/omarchy/current/theme/icons.theme ]]; then
3737- gsettings set org.gnome.desktop.interface icon-theme "$(<~/.config/omarchy/current/theme/icons.theme)"
3838-else
3939- gsettings set org.gnome.desktop.interface icon-theme "Yaru-blue"
4040-fi
4141-4242-# Trigger alacritty config reload
4343-touch "$HOME/.config/alacritty/alacritty.toml"
4444-4545-# Restart components to apply new theme
4646-pkill -SIGUSR2 btop
4747-omarchy-restart-waybar
4848-omarchy-restart-swayosd
4949-makoctl reload
5050-hyprctl reload
5151-5252-# Set new background
5353-omarchy-theme-bg-next
-5
_arch-linux/hypr/omarchy/bin/omarchy-theme-update
···11-#!/bin/bash
22-33-for dir in ~/.config/omarchy/themes/*/; do
44- [ -d "$dir" ] && [ ! -L "${dir%/}" ] && echo "Updating: $(basename "$dir")" && git -C "$dir" pull
55-done
···11-#!/bin/bash
22-33-# Default temperature values
44-ON_TEMP=4000
55-OFF_TEMP=6500
66-77-# Ensure hyprsunset is running
88-if ! pgrep -x hyprsunset; then
99- setsid uwsm app -- hyprsunset &
1010- sleep 1 # Give it time to register
1111-fi
1212-1313-# Query the current temperature
1414-CURRENT_TEMP=$(hyprctl hyprsunset temperature 2>/dev/null | grep -oE '[0-9]+')
1515-1616-restart_nightlighted_waybar() {
1717- if grep -q "custom/nightlight" ~/.config/waybar/config.jsonc; then
1818- omarchy-restart-waybar # restart waybar in case user has waybar module for hyprsunset
1919- fi
2020-}
2121-2222-if [[ "$CURRENT_TEMP" == "$OFF_TEMP" ]]; then
2323- hyprctl hyprsunset temperature $ON_TEMP
2424- notify-send " Nightlight screen temperature"
2525- restart_nightlighted_waybar
2626-else
2727- hyprctl hyprsunset temperature $OFF_TEMP
2828- notify-send " Daylight screen temperature"
2929- restart_nightlighted_waybar
3030-fi
···11-#!/bin/bash
22-33-ICON_DIR="$HOME/.local/share/applications/icons"
44-DESKTOP_DIR="$HOME/.local/share/applications/"
55-66-if [ "$#" -ne 1 ]; then
77- # Find all web apps
88- while IFS= read -r -d '' file; do
99- if grep -q '^Exec=.*chromium.*--app' "$file"; then
1010- WEB_APPS+=("$(basename "${file%.desktop}")")
1111- fi
1212- done < <(find "$DESKTOP_DIR" -name '*.desktop' -print0)
1313-1414- if ((${#WEB_APPS[@]})); then
1515- IFS=$'\n' SORTED_WEB_APPS=($(sort <<<"${WEB_APPS[*]}"))
1616- unset IFS
1717- APP_NAME=$(gum choose --header "Select web app to remove..." "${SORTED_WEB_APPS[@]}")
1818- else
1919- echo "No web apps to remove."
2020- exit 1
2121- fi
2222-else
2323- APP_NAME="$1"
2424-fi
2525-2626-if [[ -z "$APP_NAME" ]]; then
2727- echo "You must provide web app name."
2828- exit 1
2929-fi
3030-3131-rm "$DESKTOP_DIR/$APP_NAME.desktop"
3232-rm "$ICON_DIR/$APP_NAME.png"
3333-3434-if [ "$#" -ne 1 ]; then
3535- echo -e "Removed $APP_NAME\n"
3636-fi
-37
_arch-linux/hypr/omarchy/bin/swaybg-next
···11-#!/bin/bash
22-33-# Cycles through the background images available
44-55-BACKGROUNDS_DIR="$HOME/.config/omarchy/current/backgrounds/"
66-CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background"
77-88-BACKGROUNDS=($(find "$BACKGROUNDS_DIR" -type f | sort))
99-TOTAL=${#BACKGROUNDS[@]}
1010-1111-# Get current background from symlink
1212-if [[ -L "$CURRENT_BACKGROUND_LINK" ]]; then
1313- CURRENT_BACKGROUND=$(readlink "$CURRENT_BACKGROUND_LINK")
1414-else
1515- # Default to first background if no symlink exists
1616- CURRENT_BACKGROUND=${BACKGROUNDS[0]}
1717-fi
1818-1919-# Find current background index
2020-INDEX=0
2121-for i in "${!BACKGROUNDS[@]}"; do
2222- if [[ "${BACKGROUNDS[$i]}" == "$CURRENT_BACKGROUND" ]]; then
2323- INDEX=$i
2424- break
2525- fi
2626-done
2727-2828-# Get next background (wrap around)
2929-NEXT_INDEX=$(((INDEX + 1) % TOTAL))
3030-NEW_BACKGROUND=${BACKGROUNDS[$NEXT_INDEX]}
3131-3232-# Set new background symlink
3333-ln -nsf "$NEW_BACKGROUND" "$CURRENT_BACKGROUND_LINK"
3434-3535-# Relaunch swaybg
3636-pkill -x swaybg
3737-setsid swaybg -i "$NEW_BACKGROUND" -m fill >/dev/null 2>&2 &
···11-# Force chromium into a tile to deal with --app bug
22-windowrule = tile, class:^(Chromium)$
33-44-# Only slight opacity when unfocused
55-windowrule = opacity 1 0.97, class:^(Chromium|chromium|google-chrome|google-chrome-unstable)$
66-windowrule = opacity 1 1, initialTitle:^(youtube.com_/)$ # Youtube
···11-# Refer to https://wiki.hyprland.org/Configuring/Variables/
22-33-# https://wiki.hyprland.org/Configuring/Variables/#general
44-general {
55- gaps_in = 5
66- gaps_out = 10
77-88- border_size = 2
99-1010- # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
1111- col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
1212- col.inactive_border = rgba(595959aa)
1313-1414- # Set to true enable resizing windows by clicking and dragging on borders and gaps
1515- resize_on_border = false
1616-1717- # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
1818- allow_tearing = false
1919-2020- layout = dwindle
2121-}
2222-2323-# https://wiki.hyprland.org/Configuring/Variables/#decoration
2424-decoration {
2525- rounding = 0
2626-2727- shadow {
2828- enabled = true
2929- range = 2
3030- render_power = 3
3131- color = rgba(1a1a1aee)
3232- }
3333-3434- # https://wiki.hyprland.org/Configuring/Variables/#blur
3535- blur {
3636- enabled = true
3737- size = 3
3838- passes = 1
3939-4040- vibrancy = 0.1696
4141- }
4242-}
4343-4444-# https://wiki.hyprland.org/Configuring/Variables/#animations
4545-animations {
4646- enabled = yes, please :)
4747-4848- # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
4949-5050- bezier = easeOutQuint,0.23,1,0.32,1
5151- bezier = easeInOutCubic,0.65,0.05,0.36,1
5252- bezier = linear,0,0,1,1
5353- bezier = almostLinear,0.5,0.5,0.75,1.0
5454- bezier = quick,0.15,0,0.1,1
5555-5656- animation = global, 1, 10, default
5757- animation = border, 1, 5.39, easeOutQuint
5858- animation = windows, 1, 4.79, easeOutQuint
5959- animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
6060- animation = windowsOut, 1, 1.49, linear, popin 87%
6161- animation = fadeIn, 1, 1.73, almostLinear
6262- animation = fadeOut, 1, 1.46, almostLinear
6363- animation = fade, 1, 3.03, quick
6464- animation = layers, 1, 3.81, easeOutQuint
6565- animation = layersIn, 1, 4, easeOutQuint, fade
6666- animation = layersOut, 1, 1.5, linear, fade
6767- animation = fadeLayersIn, 1, 1.79, almostLinear
6868- animation = fadeLayersOut, 1, 1.39, almostLinear
6969- animation = workspaces, 0, 0, ease
7070-}
7171-7272-# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
7373-dwindle {
7474- pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
7575- preserve_split = true # You probably want this
7676- force_split = 2 # Always split on the right
7777-}
7878-7979-# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
8080-master {
8181- new_status = master
8282-}
8383-8484-# https://wiki.hyprland.org/Configuring/Variables/#misc
8585-misc {
8686- disable_hyprland_logo = true
8787- disable_splash_rendering = true
8888- focus_on_activate = true
8989-}
-11
_arch-linux/hypr/omarchy/default/windows.conf
···11-# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
22-windowrule = suppressevent maximize, class:.*
33-44-# Just dash of opacity by default
55-windowrule = opacity 0.97 0.9, class:.*
66-77-# Fix some dragging issues with XWayland
88-windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
99-1010-# App-specific tweaks
1111-source = ~/.local/share/omarchy/default/hypr/apps.conf
-28
_arch-linux/hypr/sspaeti/app-toggle.sh
···11-#!/bin/bash
22-# Generic app toggle script
33-# Usage: sspaeti-app-toggle.sh <app_class> <launch_command>
44-# Example: sspaeti-app-toggle.sh obsidian "obsidian --disable-gpu"
55-66-if [ $# -lt 2 ]; then
77- echo "Usage: $0 <app_class> <launch_command>"
88- echo "Example: $0 obsidian \"obsidian --disable-gpu\""
99- exit 1
1010-fi
1111-1212-APP_CLASS="$1"
1313-LAUNCH_COMMAND="$2"
1414-1515-# Check if app is running
1616-APP_INFO=$(hyprctl clients | grep -A 10 "class: $APP_CLASS")
1717-1818-if [ -n "$APP_INFO" ]; then
1919- # Get workspace of app window
2020- WORKSPACE=$(echo "$APP_INFO" | grep "workspace:" | head -1 | awk '{print $2}')
2121-2222- # Switch to workspace and focus window
2323- hyprctl dispatch workspace "$WORKSPACE"
2424- hyprctl dispatch focuswindow "class:$APP_CLASS"
2525-else
2626- # App is not running, start it
2727- eval "$LAUNCH_COMMAND"
2828-fi
···11-#!/bin/bash
22-33-# Background management script
44-# Usage: bg-mode-toggle.sh [switch|next]
55-# switch: Toggle between Omarchy and personal images (default)
66-# next: Cycle to next personal image (only works in personal mode)
77-88-STATE_FILE="$HOME/.config/hypr/sspaeti/.bg_mode_state"
99-CURRENT_IMAGE_FILE="$HOME/.config/hypr/sspaeti/.current_personal_image"
1010-ASIA_PICS_DIR="/home/sspaeti/Simon/Sync/Pics/Desktop/Asia 2017"
1111-1212-# Initialize state file if it doesn't exist
1313-if [ ! -f "$STATE_FILE" ]; then
1414- echo "omarchy" > "$STATE_FILE"
1515-fi
1616-1717-# Function to set a personal background image
1818-set_personal_image() {
1919- local image_path="$1"
2020- local message="$2"
2121-2222- swaybg -i "$image_path" &
2323- sleep 0.5
2424- pkill -o swaybg
2525- echo "$image_path" > "$CURRENT_IMAGE_FILE"
2626- notify-send "Background" "Next personal image"
2727-}
2828-2929-# Function to get next personal image in sequence
3030-get_next_personal_image() {
3131- if [ ! -d "$ASIA_PICS_DIR" ]; then
3232- notify-send "Background Error" "Asia 2017 folder not found"
3333- return 1
3434- fi
3535-3636- # Get all images in sorted order
3737- mapfile -t images < <(find "$ASIA_PICS_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.webp" \) | sort)
3838-3939- if [ ${#images[@]} -eq 0 ]; then
4040- notify-send "Background Error" "No images found in Asia 2017 folder"
4141- return 1
4242- fi
4343-4444- # Get current image index
4545- local current_index=0
4646- if [ -f "$CURRENT_IMAGE_FILE" ]; then
4747- local current_image=$(cat "$CURRENT_IMAGE_FILE")
4848- for i in "${!images[@]}"; do
4949- if [ "${images[$i]}" = "$current_image" ]; then
5050- current_index=$i
5151- break
5252- fi
5353- done
5454- fi
5555-5656- # Get next image (cycle back to 0 if at end)
5757- local next_index=$(( (current_index + 1) % ${#images[@]} ))
5858- local next_image="${images[$next_index]}"
5959- local image_name=$(basename "$next_image")
6060-6161- set_personal_image "$next_image" "$image_name ($(($next_index + 1))/${#images[@]})"
6262-}
6363-6464-# Function to get random personal image
6565-get_random_personal_image() {
6666- if [ ! -d "$ASIA_PICS_DIR" ]; then
6767- notify-send "Background Error" "Asia 2017 folder not found"
6868- return 1
6969- fi
7070-7171- local random_image=$(find "$ASIA_PICS_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.webp" \) | shuf -n 1)
7272- if [ -n "$random_image" ]; then
7373- set_personal_image "$random_image" "Switched to Asia 2017 images"
7474- else
7575- notify-send "Background Error" "No images found in Asia 2017 folder"
7676- return 1
7777- fi
7878-}
7979-8080-# Read current state
8181-current_mode=$(cat "$STATE_FILE")
8282-8383-# Handle command line argument
8484-action="${1:-switch}"
8585-8686-case "$action" in
8787- "next")
8888- if [ "$current_mode" = "personal" ]; then
8989- get_next_personal_image
9090- else
9191- notify-send "Background Mode" "Switch to personal mode first (use 'switch')"
9292- fi
9393- ;;
9494- "switch"|*)
9595- if [ "$current_mode" = "omarchy" ]; then
9696- # Switch to personal Asia images
9797- echo "personal" > "$STATE_FILE"
9898- get_random_personal_image
9999- else
100100- # Switch to Omarchy backgrounds
101101- echo "omarchy" > "$STATE_FILE"
102102- ~/.local/share/omarchy/bin/omarchy-theme-bg-next
103103- notify-send "Background Mode" "Switched to Omarchy backgrounds"
104104- fi
105105- ;;
106106-esac
···11-#!/bin/bash
22-set -euo pipefail
33-44-# Define available search directories
55-AVAILABLE_DIRS=(
66- "$HOME/Documents"
77-)
88-99-# Add all subdirectories in Simon/Sync to the list
1010-if [ -d "$HOME/Simon/Sync" ]; then
1111- while IFS= read -r -d '' dir; do
1212- AVAILABLE_DIRS+=("$dir")
1313- done < <(find "$HOME/Simon/Sync" -mindepth 1 -maxdepth 1 -type d -print0)
1414-fi
1515-1616-# Let user select which directories to search
1717-DIR_MENU=""
1818-for dir in "${AVAILABLE_DIRS[@]}"; do
1919- DIR_MENU="$DIR_MENU$(basename "$dir") ($dir)\n"
2020-done
2121-2222-SELECTED_DIR=$(echo -e "$DIR_MENU" | walker --dmenu --placeholder "Select search directory: " --forceprint)
2323-2424-# Exit if no directory selected
2525-if [ -z "$SELECTED_DIR" ]; then
2626- exit 0
2727-fi
2828-2929-# Extract the actual path from the selection
3030-SEARCH_DIR=$(echo "$SELECTED_DIR" | sed 's/.*(\(.*\))/\1/')
3131-SEARCH_DIRS=("$SEARCH_DIR")
3232-3333-# Get search term from user
3434-SEARCH_TERM=$(walker --dmenu --placeholder "Search for: " --forceprint)
3535-3636-# Exit if no search term
3737-if [ -z "$SEARCH_TERM" ]; then
3838- exit 0
3939-fi
4040-4141-# Convert search term to a fuzzy regex: 'test' -> 't.*e.*s.*t.*'
4242-FUZZY_REGEX=$(echo "$SEARCH_TERM" | sed 's/./&.*/g')
4343-4444-# Notify the user that the search is starting
4545-notify-send "Omarchy Fuzzy Search" "Searching for '$SEARCH_TERM'..."
4646-4747-# Search with ripgrep, limit results, and display with wofi
4848-# The output from rg is in the format: /path/to/file:line_number:content
4949-SELECTED=$(rg --line-number \
5050- --no-heading \
5151- --color=never \
5252- --max-columns=300 \
5353- --ignore-case \
5454- --hidden \
5555- --glob '!.zip/**' \
5656- --glob '!.git/**' \
5757- --glob '!node_modules/**' \
5858- --glob '!.cache/**' \
5959- "$FUZZY_REGEX" "${SEARCH_DIRS[@]}" 2>/dev/null | \
6060- awk -F: '{print $1}' | sort -u | \
6161- head -n 200 | \
6262- walker --dmenu --placeholder "Results: " --forceprint)
6363-6464-# Exit if nothing selected
6565-if [ -z "$SELECTED" ]; then
6666- exit 0
6767-fi
6868-6969-# The selected line is now just the file path
7070-FILE_PATH="$SELECTED"
7171-7272-# Show options for what to do with the file
7373-ACTION=$(echo -e "Open file\nCopy path to clipboard\nOpen folder in Nautilus\nOpen folder in terminal" | walker --dmenu --placeholder "Action: " --forceprint)
7474-7575-if [ "$ACTION" = "Copy path to clipboard" ]; then
7676- echo "$FILE_PATH" | wl-copy
7777- notify-send "Path Copied" "File path copied to clipboard: $FILE_PATH"
7878-elif [ "$ACTION" = "Open file" ]; then
7979- # Open the file in the preferred editor
8080- if [ -n "$FILE_PATH" ] && [ -f "$FILE_PATH" ]; then
8181- if command -v code >/dev/null; then
8282- code "$FILE_PATH"
8383- elif command -v nvim >/dev/null; then
8484- nvim "$FILE_PATH"
8585- else
8686- xdg-open "$FILE_PATH"
8787- fi
8888- else
8989- notify-send "File Not Found" "Could not open the selected file: $FILE_PATH"
9090- fi
9191-elif [ "$ACTION" = "Open folder in Nautilus" ]; then
9292- # Get the directory containing the file
9393- DIR_PATH=$(dirname "$FILE_PATH")
9494- if [ -d "$DIR_PATH" ]; then
9595- nautilus "$DIR_PATH"
9696- else
9797- notify-send "Directory Not Found" "Could not open directory: $DIR_PATH"
9898- fi
9999-elif [ "$ACTION" = "Open folder in terminal" ]; then
100100- # Get the directory containing the file
101101- DIR_PATH=$(dirname "$FILE_PATH")
102102- if [ -d "$DIR_PATH" ]; then
103103- # Use the same terminal variable as in your hypr config
104104- if command -v ghostty >/dev/null; then
105105- ghostty --working-directory="$DIR_PATH"
106106- elif command -v alacritty >/dev/null; then
107107- alacritty --working-directory "$DIR_PATH"
108108- else
109109- xdg-open "$DIR_PATH"
110110- fi
111111- else
112112- notify-send "Directory Not Found" "Could not open directory: $DIR_PATH"
113113- fi
114114-fi
115115-
-121
_arch-linux/hypr/sspaeti/fuzzy-file-names.sh
···11-#!/bin/bash
22-set -euo pipefail
33-44-# Define available search directories
55-AVAILABLE_DIRS=(
66- "$HOME/Pictures/"
77-)
88-99-# Add all subdirectories in Simon/Sync to the list
1010-if [ -d "$HOME/Simon/Sync" ]; then
1111- while IFS= read -r -d '' dir; do
1212- AVAILABLE_DIRS+=("$dir")
1313- done < <(find "$HOME/Simon/Sync" -mindepth 1 -maxdepth 1 -type d -print0)
1414-fi
1515-1616-if [ -d "$HOME/git" ]; then
1717- while IFS= read -r -d '' dir; do
1818- AVAILABLE_DIRS+=("$dir")
1919- done < <(find "$HOME/git" -mindepth 1 -maxdepth 1 -type d -print0)
2020-fi
2121-2222-# Let user select which directories to search
2323-DIR_MENU=""
2424-for dir in "${AVAILABLE_DIRS[@]}"; do
2525- DIR_MENU="$DIR_MENU$(basename "$dir") ($dir)\n"
2626-done
2727-2828-SELECTED_DIR=$(echo -e "$DIR_MENU" | walker --dmenu --placeholder "Select search directory: " --forceprint)
2929-3030-# Exit if no directory selected
3131-if [ -z "$SELECTED_DIR" ]; then
3232- exit 0
3333-fi
3434-3535-# Extract the actual path from the selection
3636-SEARCH_DIR=$(echo "$SELECTED_DIR" | sed 's/.*(\(.*\))/\1/')
3737-3838-# Get search term from user
3939-SEARCH_TERM=$(walker --dmenu --placeholder "Search file names for: " --forceprint)
4040-4141-# Exit if no search term
4242-if [ -z "$SEARCH_TERM" ]; then
4343- exit 0
4444-fi
4545-4646-# Notify the user that the search is starting
4747-notify-send "Omarchy File Name Search" "Searching for '$SEARCH_TERM'..."
4848-4949-# Search file names with fd and grep, prioritizing filename matches over path matches
5050-SELECTED=$(fd -t f --hidden --exclude .git --exclude node_modules --exclude .cache --exclude .zip . "$SEARCH_DIR" 2>/dev/null | \
5151- {
5252- # First priority: filename contains the search term (case insensitive)
5353- grep -i "$SEARCH_TERM" | {
5454- # Show files with search term in basename first
5555- while IFS= read -r file; do
5656- if basename "$file" | grep -qi "$SEARCH_TERM"; then
5757- echo "$file"
5858- fi
5959- done
6060- # Then show files with search term in path
6161- while IFS= read -r file; do
6262- if ! basename "$file" | grep -qi "$SEARCH_TERM" && echo "$file" | grep -qi "$SEARCH_TERM"; then
6363- echo "$file"
6464- fi
6565- done
6666- } <<< "$(cat)"
6767- } | \
6868- head -n 200 | \
6969- walker --dmenu --placeholder "Results: " --forceprint)
7070-7171-# Exit if nothing selected
7272-if [ -z "$SELECTED" ]; then
7373- exit 0
7474-fi
7575-7676-# The selected line is the file path
7777-FILE_PATH="$SELECTED"
7878-7979-# Show options for what to do with the file
8080-ACTION=$(echo -e "Open file\nCopy path to clipboard\nOpen folder in Nautilus\nOpen folder in terminal" | walker --dmenu --placeholder "Action: " --forceprint)
8181-8282-if [ "$ACTION" = "Copy path to clipboard" ]; then
8383- echo "$FILE_PATH" | wl-copy
8484- notify-send "Path Copied" "File path copied to clipboard: $FILE_PATH"
8585-elif [ "$ACTION" = "Open file" ]; then
8686- # Open the file in the preferred editor
8787- if [ -n "$FILE_PATH" ] && [ -f "$FILE_PATH" ]; then
8888- if command -v code >/dev/null; then
8989- code "$FILE_PATH"
9090- elif command -v nvim >/dev/null; then
9191- nvim "$FILE_PATH"
9292- else
9393- xdg-open "$FILE_PATH"
9494- fi
9595- else
9696- notify-send "File Not Found" "Could not open the selected file: $FILE_PATH"
9797- fi
9898-elif [ "$ACTION" = "Open folder in Nautilus" ]; then
9999- # Get the directory containing the file
100100- DIR_PATH=$(dirname "$FILE_PATH")
101101- if [ -d "$DIR_PATH" ]; then
102102- nautilus "$DIR_PATH"
103103- else
104104- notify-send "Directory Not Found" "Could not open directory: $DIR_PATH"
105105- fi
106106-elif [ "$ACTION" = "Open folder in terminal" ]; then
107107- # Get the directory containing the file
108108- DIR_PATH=$(dirname "$FILE_PATH")
109109- if [ -d "$DIR_PATH" ]; then
110110- # Use the same terminal variable as in your hypr config
111111- if command -v ghostty >/dev/null; then
112112- ghostty --working-directory="$DIR_PATH"
113113- elif command -v alacritty >/dev/null; then
114114- alacritty --working-directory "$DIR_PATH"
115115- else
116116- xdg-open "$DIR_PATH"
117117- fi
118118- else
119119- notify-send "Directory Not Found" "Could not open directory: $DIR_PATH"
120120- fi
121121-fi
-16
_arch-linux/hypr/sspaeti/obsidian-toggle.sh
···11-#!/bin/bash
22-# Save as ~/.config/hypr/scripts/obsidian-smart-focus.sh
33-44-OBSIDIAN_INFO=$(hyprctl clients | grep -A 10 "class: obsidian")
55-66-if [ -n "$OBSIDIAN_INFO" ]; then
77- # Get workspace of obsidian window
88- WORKSPACE=$(echo "$OBSIDIAN_INFO" | grep "workspace:" | head -1 | awk '{print $2}')
99-1010- # Switch to workspace and focus window
1111- hyprctl dispatch workspace "$WORKSPACE"
1212- hyprctl dispatch focuswindow "class:obsidian"
1313-else
1414- # Obsidian is not running, start it
1515- obsidian --disable-gpu
1616-fi
-34
_arch-linux/hypr/sspaeti/webapp-toggle.sh
···11-#!/bin/bash
22-# Web app toggle script for browser-based applications
33-# Usage: sspaeti-webapp-toggle.sh <url> <browser_command>
44-# Example: sspaeti-webapp-toggle.sh "https://web.whatsapp.com/" "brave --new-window"
55-66-if [ $# -lt 2 ]; then
77- echo "Usage: $0 <url> <browser_command>"
88- echo "Example: $0 \"https://web.whatsapp.com/\" \"brave --new-window\""
99- exit 1
1010-fi
1111-1212-URL="$1"
1313-BROWSER="$2"
1414-1515-# Extract domain from URL for pattern matching
1616-DOMAIN=$(echo "$URL" | sed 's|https\?://||' | sed 's|/.*||')
1717-1818-# Check if webapp is running by looking for browser windows with matching domain
1919-WEBAPP_INFO=$(hyprctl clients | grep -A 15 -B 5 -i "$DOMAIN")
2020-2121-if [ -n "$WEBAPP_INFO" ]; then
2222- # Get workspace of webapp window
2323- WORKSPACE=$(echo "$WEBAPP_INFO" | grep "workspace:" | head -1 | awk '{print $2}')
2424-2525- # Get the window address to focus on the specific window
2626- ADDRESS=$(echo "$WEBAPP_INFO" | grep "Window" | head -1 | awk '{print $2}' | sed 's/://')
2727-2828- # Switch to workspace and focus window
2929- hyprctl dispatch workspace "$WORKSPACE"
3030- hyprctl dispatch focuswindow "address:0x$ADDRESS"
3131-else
3232- # Webapp is not running, start it using passed browser command
3333- eval "$BROWSER --app=\"$URL\""
3434-fi
-70
_arch-linux/hypr/tiling.conf
···11-# CUSTOM TILING SHORTCUTS
22-33-# Close window
44-bindd = SUPER, Q, Close active window, killactive,
55-66-# Control tiling
77-bind = SUPER, I, togglesplit, # dwindle
88-bind = SUPER, P, pseudo, # dwindle
99-bind = SUPER CTRL, T, pseudo, # dwindle
1010-unbind = SUPER, V
1111-bind = SUPER SHIFT, T, togglefloating,
1212-bind = SUPER, F, fullscreen, 0
1313-1414-# Move focus with mainMod + arrow keys
1515-bind = SUPER, H, movefocus, l
1616-bind = SUPER, L, movefocus, r
1717-bind = SUPER, J, movefocus, d
1818-unbind = SUPER, K
1919-bind = SUPER, K, movefocus, u
2020-2121-# Switch workspaces with mainMod + [0-9]
2222-bind = SUPER, 1, workspace, 1
2323-bind = SUPER, 2, workspace, 2
2424-bind = SUPER, 3, workspace, 3
2525-bind = SUPER, 4, workspace, 4
2626-bind = SUPER, 5, workspace, 5
2727-bind = SUPER, 6, workspace, 6
2828-bind = SUPER, 7, workspace, 7
2929-bind = SUPER, 8, workspace, 8
3030-bind = SUPER, 9, workspace, 9
3131-bind = SUPER, 0, workspace, 10
3232-3333-# Move active window to a workspace with mainMod + SHIFT + [0-9]
3434-bind = SUPER SHIFT, 1, movetoworkspace, 1
3535-bind = SUPER SHIFT, 2, movetoworkspace, 2
3636-bind = SUPER SHIFT, 3, movetoworkspace, 3
3737-bind = SUPER SHIFT, 4, movetoworkspace, 4
3838-bind = SUPER SHIFT, 5, movetoworkspace, 5
3939-bind = SUPER SHIFT, 6, movetoworkspace, 6
4040-bind = SUPER SHIFT, 7, movetoworkspace, 7
4141-bind = SUPER SHIFT, 8, movetoworkspace, 8
4242-bind = SUPER SHIFT, 9, movetoworkspace, 9
4343-bind = SUPER SHIFT, 0, movetoworkspace, 10
4444-4545-# Swap active window with the one next to it with mainMod + SHIFT + arrow keys
4646-bind = SUPER SHIFT, left, swapwindow, l
4747-bind = SUPER SHIFT, right, swapwindow, r
4848-bind = SUPER SHIFT, up, swapwindow, u
4949-bind = SUPER SHIFT, down, swapwindow, d
5050-5151-# Cycle through applications on active workspace
5252-bind = ALT, Tab, cyclenext
5353-bind = ALT, Tab, bringactivetotop
5454-5555-# Resize active window
5656-bind = SUPER SHIFT, H, resizeactive, -100 0
5757-bind = SUPER SHIFT, L, resizeactive, 100 0
5858-bind = SUPER SHIFT, K, resizeactive, 0 -100
5959-bind = SUPER SHIFT, J, resizeactive, 0 100
6060-6161-# Scroll through existing workspaces with mainMod + scroll
6262-bind = SUPER, mouse_down, workspace, e+1
6363-bind = SUPER, mouse_up, workspace, e-1
6464-6565-# Move/resize windows with mainMod + LMB/RMB and dragging
6666-bindm = SUPER, mouse:272, movewindow
6767-bindm = SUPER, mouse:273, resizewindow
6868-6969-7070-