···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
hypr/.config/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, BACKSPACE, 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
hypr/.config/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
hypr/.config/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
hypr/.config/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
hypr/.config/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
hypr/.config/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
+28
hypr/.config/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
hypr/.config/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
hypr/.config/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
hypr/.config/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
hypr/.config/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+