Compare commits

..

2 Commits

Author SHA1 Message Date
Ryan Hughes
267a9e1765 Fix 2025-10-08 20:16:55 -04:00
Ryan Hughes
0e1f585166 Add sudoers to fix polkit error 2025-10-08 20:02:21 -04:00
181 changed files with 1287 additions and 2760 deletions

View File

@@ -1,2 +0,0 @@
[Desktop Entry]
Hidden=true

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

View File

@@ -3,12 +3,5 @@
if [[ $# -eq 0 ]]; then if [[ $# -eq 0 ]]; then
echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)" echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)"
else else
DEVICE="$(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1)" sudo asdcontrol $(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1) -- "$1"
sudo asdcontrol "$DEVICE" -- "$1" >/dev/null
VALUE="$(sudo asdcontrol "$DEVICE" | awk -F= '/BRIGHTNESS=/{print $2+0}')"
swayosd-client \
--monitor "$(hyprctl monitors -j | jq -r '.[]|select(.focused==true).name')" \
--custom-icon display-brightness \
--custom-progress "$(awk -v v="$VALUE" 'BEGIN{printf "%.2f", v/60000}')" \
--custom-progress-text "$(( VALUE * 100 / 60000 ))%"
fi fi

View File

@@ -23,13 +23,7 @@ fi
next_sink=$(echo "$sinks" | jq -r ".[$next_sink_index]") next_sink=$(echo "$sinks" | jq -r ".[$next_sink_index]")
next_sink_name=$(echo "$next_sink" | jq -r '.name') next_sink_name=$(echo "$next_sink" | jq -r '.name')
next_sink_description=$(echo "$next_sink" | jq -r '.description') next_sink_description=$(echo "$next_sink" | jq -r '.description')
if [ "$next_sink_description" = "(null)" ] || [ "$next_sink_description" = "null" ] || [ -z "$next_sink_description" ]; then
sink_id=$(echo "$next_sink" | jq -r '.properties."object.id"')
next_sink_description=$(wpctl status | grep -E "\s+\*?\s+${sink_id}\." | sed -E 's/^.*[0-9]+\.\s+//' | sed -E 's/\s+\[.*$//')
fi
next_sink_volume=$(echo "$next_sink" | jq -r \ next_sink_volume=$(echo "$next_sink" | jq -r \
'.volume | to_entries[0].value.value_percent | sub("%"; "")') '.volume | to_entries[0].value.value_percent | sub("%"; "")')
next_sink_is_muted=$(echo "$next_sink" | jq -r '.mute') next_sink_is_muted=$(echo "$next_sink" | jq -r '.mute')

View File

@@ -8,82 +8,31 @@ if [[ ! -d "$OUTPUT_DIR" ]]; then
exit 1 exit 1
fi fi
SCOPE="" # Selects region or output
AUDIO="false" SCOPE="$1"
WEBCAM="false"
for arg in "$@"; do # Selects audio inclusion or not
case "$arg" in AUDIO=$([[ $2 == "audio" ]] && echo "--audio")
--with-audio) AUDIO="true" ;;
--with-webcam) WEBCAM="true" ;;
output|region) SCOPE="$arg" ;;
esac
done
cleanup_webcam() {
pkill -f "WebcamOverlay" 2>/dev/null
}
start_webcam_overlay() {
cleanup_webcam
# Get monitor scale
local scale=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .scale')
# Target width (base 360px, scaled to monitor)
local target_width=$(awk "BEGIN {printf \"%.0f\", 360 * $scale}")
# Try preferred 16:9 resolutions in order, use first available
local preferred_resolutions=("640x360" "1280x720" "1920x1080")
local video_size_arg=""
local available_formats=$(v4l2-ctl --list-formats-ext -d /dev/video0 2>/dev/null)
for resolution in "${preferred_resolutions[@]}"; do
if echo "$available_formats" | grep -q "$resolution"; then
video_size_arg="-video_size $resolution"
break
fi
done
ffplay -f v4l2 $video_size_arg -framerate 30 /dev/video0 \
-vf "scale=${target_width}:-1" \
-window_title "WebcamOverlay" \
-noborder \
-fflags nobuffer -flags low_delay \
-probesize 32 -analyzeduration 0 \
-loglevel quiet &
sleep 1
}
start_screenrecording() { start_screenrecording() {
local filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4" local filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4"
local audio_args=""
# Merge audio tracks into one - separate tracks only play one at a time in most players if lspci | grep -qi 'nvidia'; then
[[ "$AUDIO" == "true" ]] && audio_args="-a default_output|default_input" wf-recorder $AUDIO -f "$filename" -c libx264 -p crf=23 -p preset=medium -p movflags=+faststart "$@" &
else
wl-screenrec $AUDIO -f "$filename" --ffmpeg-encoder-options="-c:v libx264 -crf 23 -preset medium -movflags +faststart" "$@" &
fi
gpu-screen-recorder -w "$@" -f 60 -c mp4 -o "$filename" $audio_args &
toggle_screenrecording_indicator toggle_screenrecording_indicator
} }
stop_screenrecording() { stop_screenrecording() {
pkill -SIGINT -f "gpu-screen-recorder" # SIGINT required to save video properly pkill -x wl-screenrec
pkill -x wf-recorder
# Wait a maximum of 5 seconds to finish before hard killing notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000
local count=0
while pgrep -f "gpu-screen-recorder" >/dev/null && [ $count -lt 50 ]; do
sleep 0.1
count=$((count + 1))
done
if pgrep -f "gpu-screen-recorder" >/dev/null; then sleep 0.2 # ensures the process is actually dead before we check
pkill -9 -f "gpu-screen-recorder"
cleanup_webcam
notify-send "Screen recording error" "Recording process had to be force-killed. Video may be corrupted." -u critical -t 5000
else
cleanup_webcam
notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000
fi
toggle_screenrecording_indicator toggle_screenrecording_indicator
} }
@@ -92,51 +41,15 @@ toggle_screenrecording_indicator() {
} }
screenrecording_active() { screenrecording_active() {
pgrep -f "gpu-screen-recorder" >/dev/null || pgrep -x slurp >/dev/null || pgrep -f "WebcamOverlay" >/dev/null pgrep -x wl-screenrec >/dev/null || pgrep -x wf-recorder >/dev/null
} }
if screenrecording_active; then if screenrecording_active; then
if pgrep -x slurp >/dev/null; then stop_screenrecording
pkill -x slurp 2>/dev/null
elif pgrep -f "WebcamOverlay" >/dev/null && ! pgrep -f "gpu-screen-recorder" >/dev/null; then
cleanup_webcam
else
stop_screenrecording
fi
elif [[ "$SCOPE" == "output" ]]; then elif [[ "$SCOPE" == "output" ]]; then
[[ "$WEBCAM" == "true" ]] && start_webcam_overlay output=$(slurp -o) || exit 1
start_screenrecording -g "$output"
if ! output=$(slurp -o -f "%o"); then
[[ "$WEBCAM" == "true" ]] && cleanup_webcam
exit 1
fi
if [[ -z "$output" ]]; then
notify-send "Error" "Could not detect monitor" -u critical
[[ "$WEBCAM" == "true" ]] && cleanup_webcam
exit 1
fi
start_screenrecording "$output"
else else
[[ "$WEBCAM" == "true" ]] && start_webcam_overlay region=$(slurp) || exit 1
start_screenrecording -g "$region"
scale=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .scale')
if ! region=$(slurp -f "%wx%h+%x+%y"); then
[[ "$WEBCAM" == "true" ]] && cleanup_webcam
exit 1
fi
if [[ "$region" =~ ^([0-9]+)x([0-9]+)\+([0-9]+)\+([0-9]+)$ ]]; then
w=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[1]} * $scale}")
h=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[2]} * $scale}")
x=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[3]} * $scale}")
y=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[4]} * $scale}")
scaled_region="${w}x${h}+${x}+${y}"
else
scaled_region="$region"
fi
start_screenrecording region -region "$scaled_region"
fi fi

View File

@@ -13,12 +13,12 @@ exit_screensaver() {
trap exit_screensaver SIGINT SIGTERM SIGHUP SIGQUIT trap exit_screensaver SIGINT SIGTERM SIGHUP SIGQUIT
hyprctl keyword cursor:invisible true &>/dev/null hyprctl keyword cursor:invisible true
while true; do while true; do
effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1) effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1)
tte -i ~/.config/omarchy/branding/screensaver.txt \ tte -i ~/.config/omarchy/branding/screensaver.txt \
--frame-rate 240 --canvas-width 0 --canvas-height $(($(tput lines) - 2)) --anchor-canvas c --anchor-text c \ --frame-rate 240 --canvas-width 0 --canvas-height $(($(tput lines) - 1)) --anchor-canvas c --anchor-text c \
"$effect" & "$effect" &
while pgrep -x tte >/dev/null; do while pgrep -x tte >/dev/null; do

View File

@@ -8,76 +8,10 @@ if [[ ! -d "$OUTPUT_DIR" ]]; then
exit 1 exit 1
fi fi
pkill slurp && exit 0 pkill slurp || hyprshot -m ${1:-region} --raw |
MODE="${1:-smart}"
PROCESSING="${2:-slurp}"
get_rectangles() {
local active_workspace=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .activeWorkspace.id')
hyprctl monitors -j | jq -r --arg ws "$active_workspace" '.[] | select(.activeWorkspace.id == ($ws | tonumber)) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"'
hyprctl clients -j | jq -r --arg ws "$active_workspace" '.[] | select(.workspace.id == ($ws | tonumber)) | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"'
}
# Select based on mode
case "$MODE" in
region)
wayfreeze & PID=$!
sleep .1
SELECTION=$(slurp 2>/dev/null)
kill $PID 2>/dev/null
;;
windows)
wayfreeze & PID=$!
sleep .1
SELECTION=$(get_rectangles | slurp -r 2>/dev/null)
kill $PID 2>/dev/null
;;
fullscreen)
SELECTION=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | "\(.x),\(.y) \((.width / .scale) | floor)x\((.height / .scale) | floor)"')
;;
smart|*)
RECTS=$(get_rectangles)
wayfreeze & PID=$!
sleep .1
SELECTION=$(echo "$RECTS" | slurp 2>/dev/null)
kill $PID 2>/dev/null
# If the selction area is L * W < 20, we'll assume you were trying to select whichever
# window or output it was inside of to prevent accidental 2px snapshots
if [[ "$SELECTION" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+)$ ]]; then
if (( ${BASH_REMATCH[3]} * ${BASH_REMATCH[4]} < 20 )); then
click_x="${BASH_REMATCH[1]}"
click_y="${BASH_REMATCH[2]}"
while IFS= read -r rect; do
if [[ "$rect" =~ ^([0-9]+),([0-9]+)[[:space:]]([0-9]+)x([0-9]+) ]]; then
rect_x="${BASH_REMATCH[1]}"
rect_y="${BASH_REMATCH[2]}"
rect_width="${BASH_REMATCH[3]}"
rect_height="${BASH_REMATCH[4]}"
if (( click_x >= rect_x && click_x < rect_x+rect_width && click_y >= rect_y && click_y < rect_y+rect_height )); then
SELECTION="${rect_x},${rect_y} ${rect_width}x${rect_height}"
break
fi
fi
done <<< "$RECTS"
fi
fi
;;
esac
[ -z "$SELECTION" ] && exit 0
if [[ $PROCESSING == "slurp" ]]; then
grim -g "$SELECTION" - |
satty --filename - \ satty --filename - \
--output-filename "$OUTPUT_DIR/screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png" \ --output-filename "$OUTPUT_DIR/screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png" \
--early-exit \ --early-exit \
--actions-on-enter save-to-clipboard \ --actions-on-enter save-to-clipboard \
--save-after-copy \ --save-after-copy \
--copy-command 'wl-copy' --copy-command 'wl-copy'
else
grim -g "$SELECTION" - | wl-copy
fi

View File

@@ -2,7 +2,7 @@
# Go from current active terminal to its child shell process and run cwd there # Go from current active terminal to its child shell process and run cwd there
terminal_pid=$(hyprctl activewindow | awk '/pid:/ {print $2}') terminal_pid=$(hyprctl activewindow | awk '/pid:/ {print $2}')
shell_pid=$(pgrep -P "$terminal_pid" | tail -n1) shell_pid=$(pgrep -P "$terminal_pid" | head -n1)
if [[ -n $shell_pid ]]; then if [[ -n $shell_pid ]]; then
cwd=$(readlink -f "/proc/$shell_pid/cwd" 2>/dev/null) cwd=$(readlink -f "/proc/$shell_pid/cwd" 2>/dev/null)

8
bin/omarchy-cmd-tzupdate Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
notify-send " Updating time and timezone..."
sudo systemctl restart systemd-timesyncd
sudo tzupdate
new_timezone=$(timedatectl show -p Timezone --value)
omarchy-restart-waybar
notify-send " Time updated and timezone set to $new_timezone"

View File

@@ -28,8 +28,6 @@ if [[ -n "$font_name" && "$font_name" != "CNCLD" ]]; then
omarchy-restart-waybar omarchy-restart-waybar
omarchy-restart-swayosd omarchy-restart-swayosd
omarchy-restart-walker omarchy-restart-walker
omarchy-hook font-set "$font_name"
else else
echo "Font '$font_name' not found." echo "Font '$font_name' not found."
exit 1 exit 1

View File

@@ -1,14 +0,0 @@
#!/bin/bash
if [[ $# -lt 1 ]]; then
echo "Usage: omarchy-hook [name] [args...]"
exit 1
fi
HOOK=$1
HOOK_PATH="$HOME/.config/omarchy/hooks/$1"
shift
if [[ -f $HOOK_PATH ]]; then
bash "$HOOK_PATH" "$@"
fi

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB" "MSSQL") options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB")
if [[ "$#" -eq 0 ]]; then if [[ "$#" -eq 0 ]]; then
choices=$(printf "%s\n" "${options[@]}" | gum choose --header "Select database (return to install, esc to cancel)") || main_menu choices=$(printf "%s\n" "${options[@]}" | gum choose --header "Select database (return to install, esc to cancel)") || main_menu
@@ -16,7 +16,6 @@ if [[ -n "$choices" ]]; then
MariaDB) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mariadb11 -e MARIADB_ROOT_PASSWORD= -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true mariadb:11.8 ;; MariaDB) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mariadb11 -e MARIADB_ROOT_PASSWORD= -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true mariadb:11.8 ;;
Redis) sudo docker run -d --restart unless-stopped -p "127.0.0.1:6379:6379" --name=redis redis:7 ;; Redis) sudo docker run -d --restart unless-stopped -p "127.0.0.1:6379:6379" --name=redis redis:7 ;;
MongoDB) sudo docker run -d --restart unless-stopped -p "127.0.0.1:27017:27017" --name mongodb -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin123 mongo:noble ;; MongoDB) sudo docker run -d --restart unless-stopped -p "127.0.0.1:27017:27017" --name mongodb -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin123 mongo:noble ;;
MSSQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:1433:1433" --name mssql -e MSSQL_PID=Developer -e ACCEPT_EULA=Y -e "MSSQL_SA_PASSWORD=@dmin123" mcr.microsoft.com/mssql/server:2022-CU12-ubuntu-22.04 ;;
esac esac
done done
else else

View File

@@ -14,6 +14,6 @@ omarchy-pkg-add $package
echo "Setting $package as new default terminal..." echo "Setting $package as new default terminal..."
sed -i "/export TERMINAL=/ c\export TERMINAL=$package" ~/.config/uwsm/default sed -i "/export TERMINAL=/ c\export TERMINAL=$package" ~/.config/uwsm/default
# Restart is needed for new default to take effect # Relaunch is needed for new default to take effect
echo echo
gum confirm "Restart to use new terminal?" && systemctl reboot --no-wall gum confirm "Relaunch Hyprland to use new terminal?" && uwsm stop

View File

@@ -18,7 +18,4 @@ cat > ~/.vscode/argv.json << 'EOF'
} }
EOF EOF
# Ensure VSC's own auto-update feature is turned off
printf '{\n "update.mode": "none"\n}\n' > ~/.config/Code/User/settings.json
setsid gtk-launch code setsid gtk-launch code

View File

@@ -1,13 +0,0 @@
#!/bin/bash
# Ensure elephant is running before launching walker
if ! pgrep -x elephant > /dev/null; then
setsid uwsm-app -- elephant &
fi
# Ensure walker service is running
if ! pgrep -f "walker --gapplication-service" > /dev/null; then
setsid uwsm-app -- walker --gapplication-service &
fi
exec walker --width 644 --maxheight 300 --minheight 300 "$@"

View File

@@ -29,11 +29,11 @@ menu() {
local index local index
index=$(echo -e "$options" | grep -nxF "$preselect" | cut -d: -f1) index=$(echo -e "$options" | grep -nxF "$preselect" | cut -d: -f1)
if [[ -n "$index" ]]; then if [[ -n "$index" ]]; then
args+=("-c" "$index") args+=("-a" "$index")
fi fi
fi fi
echo -e "$options" | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 600 -p "$prompt…" "${args[@]}" 2>/dev/null echo -e "$options" | walker --dmenu --theme dmenu_250 -p "$prompt…" "${args[@]}"
} }
terminal() { terminal() {
@@ -104,21 +104,21 @@ show_capture_menu() {
} }
show_screenshot_menu() { show_screenshot_menu() {
case $(menu "Screenshot" " Snap with Editing\n Straight to Clipboard") in case $(menu "Screenshot" " Region\n Window\n Display") in
*Editing*) omarchy-cmd-screenshot smart ;; *Region*) omarchy-cmd-screenshot ;;
*Clipboard*) omarchy-cmd-screenshot smart clipboard ;; *Window*) omarchy-cmd-screenshot window ;;
*Display*) omarchy-cmd-screenshot output ;;
*) show_capture_menu ;; *) show_capture_menu ;;
esac esac
} }
show_screenrecord_menu() { show_screenrecord_menu() {
case $(menu "Screenrecord" " Region\n Region + Audio\n Display\n Display + Audio\n Display + Webcam") in case $(menu "Screenrecord" " Region\n Region + Audio\n Display\n Display + Audio") in
*"Region + Audio"*) omarchy-cmd-screenrecord region --with-audio ;; *"Region + Audio"*) omarchy-cmd-screenrecord region audio ;;
*Region*) omarchy-cmd-screenrecord ;; *Region*) omarchy-cmd-screenrecord ;;
*"Display + Audio"*) omarchy-cmd-screenrecord output --with-audio ;; *"Display + Audio"*) omarchy-cmd-screenrecord output audio ;;
*"Display + Webcam"*) omarchy-cmd-screenrecord output --with-audio --with-webcam ;;
*Display*) omarchy-cmd-screenrecord output ;; *Display*) omarchy-cmd-screenrecord output ;;
*) back_to show_capture_menu ;; *) show_capture_menu ;;
esac esac
} }
@@ -163,7 +163,7 @@ show_theme_menu() {
} }
show_font_menu() { show_font_menu() {
theme=$(menu "Font" "$(omarchy-font-list)" "--width 350" "$(omarchy-font-current)") theme=$(menu "Font" "$(omarchy-font-list)" "-w 350" "$(omarchy-font-current)")
if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then
back_to show_style_menu back_to show_style_menu
else else
@@ -232,7 +232,7 @@ show_setup_security_menu() {
} }
show_install_menu() { show_install_menu() {
case $(menu "Install" "󰣇 Package\n󰣇 AUR\n Web App\n TUI\n Service\n Style\n󰵮 Development\n Editor\n Terminal\n󱚤 AI\n󰍲 Windows\n Gaming") in case $(menu "Install" "󰣇 Package\n󰣇 AUR\n Web App\n TUI\n Service\n Style\n󰵮 Development\n Editor\n Terminal\n󱚤 AI\n Gaming") in
*Package*) terminal omarchy-pkg-install ;; *Package*) terminal omarchy-pkg-install ;;
*AUR*) terminal omarchy-pkg-aur-install ;; *AUR*) terminal omarchy-pkg-aur-install ;;
*Web*) present_terminal omarchy-webapp-install ;; *Web*) present_terminal omarchy-webapp-install ;;
@@ -243,7 +243,6 @@ show_install_menu() {
*Editor*) show_install_editor_menu ;; *Editor*) show_install_editor_menu ;;
*Terminal*) show_install_terminal_menu ;; *Terminal*) show_install_terminal_menu ;;
*AI*) show_install_ai_menu ;; *AI*) show_install_ai_menu ;;
*Windows*) present_terminal "omarchy-windows-vm install" ;;
*Gaming*) show_install_gaming_menu ;; *Gaming*) show_install_gaming_menu ;;
*) show_main_menu ;; *) show_main_menu ;;
esac esac
@@ -319,7 +318,7 @@ show_install_style_menu() {
} }
show_install_font_menu() { show_install_font_menu() {
case $(menu "Install" " Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono" "--width 350") in case $(menu "Install" " Meslo LG Mono\n Fira Code\n Victor Code\n Bistream Vera Mono" "-w 350") in
*Meslo*) install_font "Meslo LG Mono" "ttf-meslo-nerd" "MesloLGL Nerd Font" ;; *Meslo*) install_font "Meslo LG Mono" "ttf-meslo-nerd" "MesloLGL Nerd Font" ;;
*Fira*) install_font "Fira Code" "ttf-firacode-nerd" "FiraCode Nerd Font" ;; *Fira*) install_font "Fira Code" "ttf-firacode-nerd" "FiraCode Nerd Font" ;;
*Victor*) install_font "Victor Code" "ttf-victor-mono-nerd" "VictorMono Nerd Font" ;; *Victor*) install_font "Victor Code" "ttf-victor-mono-nerd" "VictorMono Nerd Font" ;;
@@ -374,12 +373,11 @@ show_install_elixir_menu() {
} }
show_remove_menu() { show_remove_menu() {
case $(menu "Remove" "󰣇 Package\n Web App\n TUI\n󰸌 Theme\n󰍲 Windows\n󰈷 Fingerprint\n Fido2") in case $(menu "Remove" "󰣇 Package\n Web App\n TUI\n󰸌 Theme\n󰈷 Fingerprint\n Fido2") in
*Package*) terminal omarchy-pkg-remove ;; *Package*) terminal omarchy-pkg-remove ;;
*Web*) present_terminal omarchy-webapp-remove ;; *Web*) present_terminal omarchy-webapp-remove ;;
*TUI*) present_terminal omarchy-tui-remove ;; *TUI*) present_terminal omarchy-tui-remove ;;
*Theme*) present_terminal omarchy-theme-remove ;; *Theme*) present_terminal omarchy-theme-remove ;;
*Windows*) present_terminal "omarchy-windows-vm remove" ;;
*Fingerprint*) present_terminal "omarchy-setup-fingerprint --remove" ;; *Fingerprint*) present_terminal "omarchy-setup-fingerprint --remove" ;;
*Fido2*) present_terminal "omarchy-setup-fido2 --remove" ;; *Fido2*) present_terminal "omarchy-setup-fido2 --remove" ;;
*) show_main_menu ;; *) show_main_menu ;;
@@ -387,15 +385,14 @@ show_remove_menu() {
} }
show_update_menu() { show_update_menu() {
case $(menu "Update" " Omarchy\n Branch\n Config\n󰸌 Extra Themes\n Process\n󰇅 Hardware\n Firmware\n Password\n Timezone") in case $(menu "Update" " Omarchy\n Branch\n Config\n󰸌 Extra Themes\n Process\n󰇅 Hardware\n Password\n Timezone") in
*Omarchy*) present_terminal omarchy-update ;; *Omarchy*) present_terminal omarchy-update ;;
*Branch*) show_update_branch_menu ;; *Branch*) show_update_branch_menu ;;
*Config*) show_update_config_menu ;; *Config*) show_update_config_menu ;;
*Themes*) present_terminal omarchy-theme-update ;; *Themes*) present_terminal omarchy-theme-update ;;
*Process*) show_update_process_menu ;; *Process*) show_update_process_menu ;;
*Hardware*) show_update_hardware_menu ;; *Hardware*) show_update_hardware_menu ;;
*Firmware*) present_terminal omarchy-update-firmware ;; *Timezone*) omarchy-cmd-tzupdate ;;
*Timezone*) present_terminal omarchy-tz-select ;;
*Password*) show_update_password_menu ;; *Password*) show_update_password_menu ;;
*) show_main_menu ;; *) show_main_menu ;;
esac esac
@@ -451,12 +448,13 @@ show_update_password_menu() {
} }
show_system_menu() { show_system_menu() {
case $(menu "System" " Lock\n󱄄 Screensaver\n󰤄 Suspend\n󰜉 Restart\n󰐥 Shutdown") in case $(menu "System" " Lock\n󱄄 Screensaver\n󰤄 Suspend\n Relaunch\n󰜉 Restart\n󰐥 Shutdown") in
*Lock*) omarchy-lock-screen ;; *Lock*) omarchy-lock-screen ;;
*Screensaver*) omarchy-launch-screensaver force ;; *Screensaver*) omarchy-launch-screensaver force ;;
*Suspend*) systemctl suspend ;; *Suspend*) systemctl suspend ;;
*Restart*) omarchy-state clear re*-required && systemctl reboot --no-wall ;; *Relaunch*) omarchy-state clear relaunch-required && sudo systemctl restart sddm ;;
*Shutdown*) omarchy-state clear re*-required && systemctl poweroff --no-wall ;; *Restart*) omarchy-state clear re*-required && systemctl reboot ;;
*Shutdown*) omarchy-state clear re*-required && systemctl poweroff ;;
*) back_to show_main_menu ;; *) back_to show_main_menu ;;
esac esac
} }

View File

@@ -156,4 +156,4 @@ dynamic_bindings |
sort -u | sort -u |
parse_keycodes | parse_keycodes |
parse_bindings | parse_bindings |
walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height" walker --dmenu --theme keybindings -p 'Keybindings' -w 800 -h "$menu_height"

View File

@@ -1,8 +1,6 @@
#!/bin/bash #!/bin/bash
if omarchy-pkg-missing "$@"; then sudo pacman -S --noconfirm --needed "$@" || exit 1
sudo pacman -S --noconfirm --needed "$@" || exit 1
fi
for pkg in "$@"; do for pkg in "$@"; do
# Secondary check to handle states where pacman doesn't actually register an error # Secondary check to handle states where pacman doesn't actually register an error

View File

@@ -3,7 +3,7 @@
fzf_args=( fzf_args=(
--multi --multi
--preview 'yay -Siia {1}' --preview 'yay -Siia {1}'
--preview-label='alt-p: toggle description, alt-b/B: toggle PKGBUILD, alt-j/k: scroll, tab: multi-select' --preview-label='alt-p: toggle description, alt-b/B: toggle PKGBUILD, alt-j/k: scroll, tab: multi-select, F11: maximize'
--preview-label-pos='bottom' --preview-label-pos='bottom'
--preview-window 'down:65%:wrap' --preview-window 'down:65%:wrap'
--bind 'alt-p:toggle-preview' --bind 'alt-p:toggle-preview'

View File

@@ -3,7 +3,7 @@
fzf_args=( fzf_args=(
--multi --multi
--preview 'pacman -Sii {1}' --preview 'pacman -Sii {1}'
--preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select' --preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select, F11: maximize'
--preview-label-pos='bottom' --preview-label-pos='bottom'
--preview-window 'down:65%:wrap' --preview-window 'down:65%:wrap'
--bind 'alt-p:toggle-preview' --bind 'alt-p:toggle-preview'

View File

@@ -3,7 +3,7 @@
fzf_args=( fzf_args=(
--multi --multi
--preview 'yay -Qi {1}' --preview 'yay -Qi {1}'
--preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select' --preview-label='alt-p: toggle description, alt-j/k: scroll, tab: multi-select, F11: maximize'
--preview-label-pos='bottom' --preview-label-pos='bottom'
--preview-window 'down:65%:wrap' --preview-window 'down:65%:wrap'
--bind 'alt-p:toggle-preview' --bind 'alt-p:toggle-preview'

View File

@@ -1,6 +1,4 @@
#!/bin/bash #!/bin/bash
omarchy-refresh-config walker/config.toml omarchy-refresh-config walker/config.toml
omarchy-refresh-config elephant/calc.toml
omarchy-refresh-config elephant/desktopapplications.toml
omarchy-restart-walker omarchy-restart-walker

View File

@@ -1,21 +1,7 @@
#!/bin/bash #!/bin/bash
pkill elephant
pkill walker pkill walker
# FIXME: Just deal with the memory leak for now.
# Detect if we're running as root (from pacman hook) # See https://github.com/basecamp/omarchy/issues/698
if [[ $EUID -eq 0 ]]; then setsid uwsm-app -- walker --gapplication-service &
# Get the owner of this script to determine which user to run as echo # Always end in success so we don't terminate further running
SCRIPT_OWNER=$(stat -c '%U' "$0")
USER_UID=$(id -u "$SCRIPT_OWNER")
# Restart services as the script owner
systemd-run --uid="$SCRIPT_OWNER" --setenv=XDG_RUNTIME_DIR="/run/user/$USER_UID" \
bash -c "
setsid uwsm-app -- elephant &
setsid uwsm-app -- walker --gapplication-service &
"
else
setsid uwsm-app -- elephant &
setsid uwsm-app -- walker --gapplication-service &
fi

View File

@@ -5,7 +5,7 @@
BACKGROUNDS_DIR="$HOME/.config/omarchy/current/theme/backgrounds/" BACKGROUNDS_DIR="$HOME/.config/omarchy/current/theme/backgrounds/"
CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background" CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background"
mapfile -d '' -t BACKGROUNDS < <(find -L "$BACKGROUNDS_DIR" -type f -print0 | sort -z) mapfile -d '' -t BACKGROUNDS < <(find "$BACKGROUNDS_DIR" -type f -print0 | sort -z)
TOTAL=${#BACKGROUNDS[@]} TOTAL=${#BACKGROUNDS[@]}
if [[ $TOTAL -eq 0 ]]; then if [[ $TOTAL -eq 0 ]]; then

View File

@@ -24,9 +24,7 @@ ln -nsf "$THEME_PATH" "$CURRENT_THEME_DIR"
omarchy-theme-bg-next omarchy-theme-bg-next
# Restart components to apply new theme # Restart components to apply new theme
if pgrep -x waybar >/dev/null; then omarchy-restart-waybar
omarchy-restart-waybar
fi
omarchy-restart-swayosd omarchy-restart-swayosd
hyprctl reload hyprctl reload
pkill -SIGUSR2 btop pkill -SIGUSR2 btop
@@ -35,10 +33,7 @@ makoctl reload
# Change gnome, browser, vscode, cursor themes # Change gnome, browser, vscode, cursor themes
omarchy-theme-set-terminal omarchy-theme-set-terminal
omarchy-theme-set-gnome omarchy-theme-set-gnome
omarchy-theme-set-eza
omarchy-theme-set-browser omarchy-theme-set-browser
omarchy-theme-set-vscode omarchy-theme-set-vscode
omarchy-theme-set-cursor omarchy-theme-set-cursor
omarchy-theme-set-obsidian
# Call hook on theme set
omarchy-hook theme-set "$THEME_NAME"

View File

@@ -2,10 +2,10 @@
CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme CHROMIUM_THEME=~/.config/omarchy/current/theme/chromium.theme
if omarchy-cmd-present chromium || omarchy-cmd-present helium-browser || omarchy-cmd-present brave; then if omarchy-cmd-present chromium || omarchy-cmd-present brave; then
if [[ -f $CHROMIUM_THEME ]]; then if [[ -f $CHROMIUM_THEME ]]; then
THEME_RGB_COLOR=$(<$CHROMIUM_THEME) THEME_RGB_COLOR=$(<$CHROMIUM_THEME)
THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ }) THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${rgb//,/ })
else else
# Use a default, neutral grey if theme doesn't have a color # Use a default, neutral grey if theme doesn't have a color
THEME_RGB_COLOR="28,32,39" THEME_RGB_COLOR="28,32,39"
@@ -15,17 +15,6 @@ if omarchy-cmd-present chromium || omarchy-cmd-present helium-browser || omarchy
if omarchy-cmd-present chromium; then if omarchy-cmd-present chromium; then
rm -f /etc/chromium/policies/managed/color.json rm -f /etc/chromium/policies/managed/color.json
chromium --no-startup-window --set-theme-color="$THEME_RGB_COLOR" chromium --no-startup-window --set-theme-color="$THEME_RGB_COLOR"
if [[ -f ~/.config/omarchy/current/theme/light.mode ]]; then
chromium --no-startup-window --set-color-scheme="light"
else
chromium --no-startup-window --set-color-scheme="dark"
fi
fi
if omarchy-cmd-present helium-browser; then
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\"}" | tee "/etc/chromium/policies/managed/color.json" >/dev/null
helium-browser --no-startup-window --refresh-platform-policy
fi fi
if omarchy-cmd-present brave; then if omarchy-cmd-present brave; then

7
bin/omarchy-theme-set-eza Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/bash
if [ -f ~/.config/omarchy/current/theme/eza.yml ]; then
ln -snf ~/.config/omarchy/current/theme/eza.yml ~/.config/eza/theme.yml
else
rm -f ~/.config/eza/theme.yml
fi

View File

@@ -1,659 +0,0 @@
#!/bin/bash
# omarchy-theme-set-obsidian: Bootstrap and update Omarchy theme for Obsidian
#
# - Ensures registry at ~/.local/state/omarchy/obsidian-vaults
# - If missing/empty, bootstraps by scanning ~/Documents/*/.obsidian and ~/Dropbox/*/.obsidian
# - For each valid vault:
# - Ensures .obsidian/themes/Omarchy/{manifest.json, theme.css}
# - Updates theme.css (uses current themes obsidian.css if present; otherwise generates -- see below)
# Theme automagic generation logic:
#
# - Background/foreground: read from ~/.config/omarchy/current/theme/alacritty.toml [colors.primary]
# (background/foreground). Fallbacks: bg=#1a1b26, fg=#a9b1d6. Compute bg brightness for light/dark handling.
# - Palette extraction: collect colors from Alacritty (primary/normal/bright/dim/selection), Waybar (@define-color),
# and Hyprland (col.*_border; rgba->hex). Normalize, dedupe, and count frequencies.
# - Slot ordering: remove bg/fg, sort remaining colors by frequency, then fill 13 slots by cycling. Map slots to:
# h1h6, links, inline code, marks, interactive accent, blockquote border; muted/faint use border color.
# - Code colors: code background = closest color to bg (Euclidean RGB); if none, make a subtle bg variant (+/ RGB).
# code foreground = closest color to fg; fallback #e0e0e0.
# - Border color: from btop.theme theme[div_line]; else blended mix biased toward bg (≈ (bg+fg)/3).
# - Selection: from Alacritty [colors.selection] (background/text), honoring CellForeground/Background.
# If missing, background = 75% bg + 25% fg; text chosen for contrast vs selection background.
# - Fonts: monospace from Alacritty [font] or fontconfig monospace; UI font from fontconfig sans-serif.
VAULTS_FILE="$HOME/.local/state/omarchy/obsidian-vaults"
CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme"
# Ensure the vaults registry exists, or bootstrap from known locations
ensure_vaults_file() {
mkdir -p "$(dirname "$VAULTS_FILE")"
# If file exists (even empty), do not scan; treat as authoritative
if [ -f "$VAULTS_FILE" ]; then
return
fi
local tmpfile
tmpfile="$(mktemp)"
# Scan a couple of common locations for <base>/<vault>/.obsidian
for base in "$HOME/Documents" "$HOME/Dropbox"; do
[ -d "$base" ] || continue
for d in "$base"/*/.obsidian; do
[ -d "$d" ] || continue
vault_dir="${d%/.obsidian}"
printf "%s\n" "$vault_dir" >>"$tmpfile"
done
done
if [ -s "$tmpfile" ]; then
sort -u "$tmpfile" >"$VAULTS_FILE"
else
: >"$VAULTS_FILE"
fi
rm -f "$tmpfile"
}
# Ensure theme directory and minimal manifest exist in a vault
ensure_theme_scaffold() {
local vault_path="$1"
local theme_dir="$vault_path/.obsidian/themes/Omarchy"
mkdir -p "$theme_dir"
if [ ! -f "$theme_dir/manifest.json" ]; then
cat >"$theme_dir/manifest.json" <<'EOF'
{
"name": "Omarchy",
"version": "1.0.0",
"minAppVersion": "0.16.0",
"description": "Automatically syncs with your current Omarchy system theme colors and fonts",
"author": "Omarchy",
"authorUrl": "https://omarchy.org"
}
EOF
fi
[ -f "$theme_dir/theme.css" ] || : >"$theme_dir/theme.css"
}
# Function to extract hex color from string
extract_hex_color() {
echo "$1" | grep -oE '#[0-9a-fA-F]{6}' | head -1
}
# Function to convert RGB/RGBA to hex
rgb_to_hex() {
local rgb_string="$1"
if [[ $rgb_string =~ rgba?\(([0-9]+),\s*([0-9]+),\s*([0-9]+) ]]; then
printf "#%02x%02x%02x\n" "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "${BASH_REMATCH[3]}"
fi
}
# Convert hex to RGB components
hex_to_rgb() {
local hex="${1#\#}"
printf "%d %d %d\n" "0x${hex:0:2}" "0x${hex:2:2}" "0x${hex:4:2}"
}
# Calculate perceived brightness (0-255)
calculate_brightness() {
local hex="$1"
read -r r g b <<<"$(hex_to_rgb "$hex")"
# Use perceived brightness formula
echo $(((r * 299 + g * 587 + b * 114) / 1000))
}
# Calculate color distance (euclidean in RGB space)
color_distance() {
local hex1="$1"
local hex2="$2"
read -r r1 g1 b1 <<<"$(hex_to_rgb "$hex1")"
read -r r2 g2 b2 <<<"$(hex_to_rgb "$hex2")"
echo $(((r1 - r2) * (r1 - r2) + (g1 - g2) * (g1 - g2) + (b1 - b2) * (b1 - b2)))
}
# Extract all colors with frequency count
extract_all_colors_with_count() {
local -A color_counts
local color
# Extract from Alacritty config
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
# Primary colors
while IFS= read -r color; do
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
[ -n "$color" ] && ((color_counts["$color"]++))
done < <(grep -E "(background|foreground|cursor|text)" "$CURRENT_THEME_DIR/alacritty.toml" | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | grep "^#")
# Normal colors
while IFS= read -r color; do
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
[ -n "$color" ] && ((color_counts["$color"]++))
done < <(grep -A 20 "\[colors.normal\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep -E "(black|red|green|yellow|blue|magenta|cyan|white)" | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | grep "^#")
# Bright colors
while IFS= read -r color; do
# Add # if missing
[[ "$color" =~ ^[0-9a-fA-F]{6}$ ]] && color="#$color"
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
[[ "$color" =~ ^#[0-9a-f]{6}$ ]] && ((color_counts["$color"]++))
done < <(grep -A 20 "\[colors.bright\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep -E "(black|red|green|yellow|blue|magenta|cyan|white)" | sed "s/.*[\"']//;s/[\"'].*//")
# Dim colors if present
while IFS= read -r color; do
# Add # if missing
[[ "$color" =~ ^[0-9a-fA-F]{6}$ ]] && color="#$color"
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
[[ "$color" =~ ^#[0-9a-f]{6}$ ]] && ((color_counts["$color"]++))
done < <(grep -A 20 "\[colors.dim\]" "$CURRENT_THEME_DIR/alacritty.toml" 2>/dev/null | grep -E "(black|red|green|yellow|blue|magenta|cyan|white)" | sed "s/.*[\"']//;s/[\"'].*//")
# Selection colors
while IFS= read -r color; do
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
[ -n "$color" ] && ((color_counts["$color"]++))
done < <(grep -A 5 "\[colors.selection\]" "$CURRENT_THEME_DIR/alacritty.toml" 2>/dev/null | grep -E "(background|text)" | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | grep "^#")
fi
# Extract from Waybar CSS
if [ -f "$CURRENT_THEME_DIR/waybar.css" ]; then
while IFS= read -r color; do
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
[ -n "$color" ] && ((color_counts["$color"]++))
done < <(grep -oE '@define-color [a-z_-]+ #[0-9a-fA-F]{6}' "$CURRENT_THEME_DIR/waybar.css" | grep -oE '#[0-9a-fA-F]{6}')
fi
# Extract from Hyprland config
if [ -f "$CURRENT_THEME_DIR/hyprland.conf" ]; then
while IFS= read -r color; do
if [[ $color == rgba* ]] || [[ $color == rgb* ]]; then
color=$(rgb_to_hex "$color")
fi
color=$(echo "$color" | tr '[:upper:]' '[:lower:]') # Lowercase for consistency
[ -n "$color" ] && ((color_counts["$color"]++))
done < <(grep -E "col\.(active|inactive)_border" "$CURRENT_THEME_DIR/hyprland.conf" | grep -oE 'rgba?\([^)]+\)|#[0-9a-fA-F]{6,8}' | sed 's/ff$//')
fi
# Output colors with their counts
for color in "${!color_counts[@]}"; do
echo "${color_counts[$color]} $color"
done
}
# Sort colors by frequency
sort_colors_by_frequency() {
# Input is already "count color" format
sort -rn | cut -d' ' -f2
}
# Fill color slots with cycling if needed
fill_color_slots() {
local -a colors=("$@")
local -a slots
local num_colors=${#colors[@]}
# Need 13 slots total (code colors are handled separately)
local slots_needed=13
if [ $num_colors -eq 0 ]; then
# No colors available, use defaults
colors=("#3d3d3d" "#5d5d5d" "#7d7d7d" "#9d9d9d" "#bd93f9" "#50fa7b")
num_colors=6
fi
# Fill slots, cycling if necessary
for ((i = 0; i < slots_needed; i++)); do
slots[$i]="${colors[$((i % num_colors))]}"
done
echo "${slots[@]}"
}
# Main color extraction and theme generation
extract_theme_data() {
# Get primary colors from Alacritty
local bg_color="#1a1b26"
local fg_color="#a9b1d6"
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
local extracted_bg=$(grep -A 5 "\[colors.primary\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^background = " | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | head -1 | tr '[:upper:]' '[:lower:]')
local extracted_fg=$(grep -A 5 "\[colors.primary\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^foreground = " | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | head -1 | tr '[:upper:]' '[:lower:]')
[ -n "$extracted_bg" ] && bg_color="$extracted_bg"
[ -n "$extracted_fg" ] && fg_color="$extracted_fg"
fi
# Determine if light or dark theme
local bg_brightness=$(calculate_brightness "$bg_color")
local is_light_theme=false
[ $bg_brightness -gt 127 ] && is_light_theme=true
# Extract all colors with counts
local color_data=$(extract_all_colors_with_count)
# Filter out background and foreground colors for the main array
local filtered_data=$(echo "$color_data" | grep -v "$bg_color" | grep -v "$fg_color")
# Get all unique colors (including bg/fg) for distance calculations
local -a all_unique_colors
readarray -t all_unique_colors < <(echo "$color_data" | cut -d' ' -f2 | sort -u)
# Find the 3 closest colors to background for background variations
local -a bg_distances
for color in "${all_unique_colors[@]}"; do
if [ "$color" != "$bg_color" ]; then
distance=$(color_distance "$color" "$bg_color")
bg_distances+=("$distance:$color")
fi
done
# Sort by distance and get the closest color for code background
local -a closest_to_bg
readarray -t closest_to_bg < <(printf '%s\n' "${bg_distances[@]}" | sort -n | head -1 | cut -d: -f2)
# All background variations use the same as primary background
local bg_primary_alt="$bg_color"
local bg_secondary="$bg_color"
local bg_secondary_alt="$bg_color"
# Code block background uses the closest different color
local code_bg="${closest_to_bg[0]}"
# If no different color available, create a subtle variant for code blocks
if [ -z "$code_bg" ]; then
read -r r g b <<<"$(hex_to_rgb "$bg_color")"
if [ $bg_brightness -gt 127 ]; then
r=$((r - 10))
g=$((g - 10))
b=$((b - 10))
else
r=$((r + 15))
g=$((g + 15))
b=$((b + 15))
fi
[ $r -lt 0 ] && r=0
[ $r -gt 255 ] && r=255
[ $g -lt 0 ] && g=0
[ $g -gt 255 ] && g=255
[ $b -lt 0 ] && b=0
[ $b -gt 255 ] && b=255
code_bg=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
fi
# Find closest color to foreground for code block text
local code_fg=""
min_distance=999999999
for color in "${all_unique_colors[@]}"; do
if [ "$color" != "$fg_color" ]; then
distance=$(color_distance "$color" "$fg_color")
if [ $distance -lt $min_distance ]; then
min_distance=$distance
code_fg="$color"
fi
fi
done
[ -z "$code_fg" ] && code_fg="#e0e0e0" # Fallback
# Extract text selection colors from Alacritty
local selection_bg=""
local selection_fg=""
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
selection_bg=$(grep -A 5 "\[colors.selection\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^background = " | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | head -1 | tr '[:upper:]' '[:lower:]')
local selection_text=$(grep -A 5 "\[colors.selection\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^text = " | sed "s/.*[\"']0x/#/;s/.*[\"']#/#/;s/[\"'].*//;s/.*#\([0-9a-fA-F]\{6\}\).*/\#\1/" | head -1 | tr '[:upper:]' '[:lower:]')
# If text is set to CellForeground/CellBackground, use the appropriate color
if [ -z "$selection_text" ] || [[ "$(grep -A 5 "\[colors.selection\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^text = ")" == *"CellForeground"* ]]; then
selection_fg="$fg_color"
elif [[ "$(grep -A 5 "\[colors.selection\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep "^text = ")" == *"CellBackground"* ]]; then
selection_fg="$bg_color"
else
selection_fg="$selection_text"
fi
fi
# Fallback if no selection colors found
if [ -z "$selection_bg" ]; then
read -r r1 g1 b1 <<<"$(hex_to_rgb "$bg_color")"
read -r r2 g2 b2 <<<"$(hex_to_rgb "$fg_color")"
local r=$(((r1 * 3 + r2) / 4)) # 75% background, 25% foreground
local g=$(((g1 * 3 + g2) / 4))
local b=$(((b1 * 3 + b2) / 4))
selection_bg=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
fi
# Use contrasting color for selection text if not defined
if [ -z "$selection_fg" ]; then
# Calculate brightness of selection background
local sel_brightness=$(calculate_brightness "$selection_bg")
if [ $sel_brightness -gt 127 ]; then
selection_fg="$bg_color" # Dark text on light selection
else
selection_fg="$fg_color" # Light text on dark selection
fi
fi
# Extract border color from btop theme
local border_color=""
if [ -f "$CURRENT_THEME_DIR/btop.theme" ]; then
# Look for theme[div_line] in btop theme
local btop_divline=$(grep 'theme\[div_line\]' "$CURRENT_THEME_DIR/btop.theme" | head -1)
if [ -n "$btop_divline" ]; then
# Extract the color value after the = sign
local extracted=$(echo "$btop_divline" | sed 's/.*=//' | xargs)
# Check if it's a hex color and lowercase it
if [[ $extracted =~ ^#[0-9a-fA-F]{6}$ ]]; then
border_color=$(echo "$extracted" | tr '[:upper:]' '[:lower:]')
elif [[ $extracted =~ ^[0-9a-fA-F]{6}$ ]]; then
# Add # if missing and lowercase
border_color=$(echo "#$extracted" | tr '[:upper:]' '[:lower:]')
fi
fi
fi
# Fallback if no border color found
if [ -z "$border_color" ]; then
# Use a color between bg and fg
read -r r1 g1 b1 <<<"$(hex_to_rgb "$bg_color")"
read -r r2 g2 b2 <<<"$(hex_to_rgb "$fg_color")"
local r=$(((r1 + r2) / 3)) # Closer to background
local g=$(((g1 + g2) / 3))
local b=$(((b1 + b2) / 3))
border_color=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
fi
# Get unique colors array (without bg/fg) sorted by frequency
local -a unique_colors
readarray -t unique_colors < <(echo "$filtered_data" | sort_colors_by_frequency)
# Fill the 13 color slots (code colors handled separately)
local -a color_slots
readarray -t color_slots < <(fill_color_slots "${unique_colors[@]}" | tr ' ' '\n')
# Extract fonts
local monospace_font="CaskaydiaMono Nerd Font"
local ui_font="Liberation Sans"
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
local alacritty_font=$(grep -A 5 "\[font\]" "$CURRENT_THEME_DIR/alacritty.toml" | grep 'family = ' | head -1 | cut -d'"' -f2)
[ -n "$alacritty_font" ] && monospace_font="$alacritty_font"
fi
if [ -f "$HOME/.config/fontconfig/fonts.conf" ]; then
local fontconfig_mono=$(xmlstarlet sel -t -v '//match[@target="pattern"][test/string="monospace"]/edit[@name="family"]/string' "$HOME/.config/fontconfig/fonts.conf" 2>/dev/null || true)
[ -n "$fontconfig_mono" ] && monospace_font="$fontconfig_mono"
local fontconfig_sans=$(xmlstarlet sel -t -v '//match[@target="pattern"][test/string="sans-serif"]/edit[@name="family"]/string' "$HOME/.config/fontconfig/fonts.conf" 2>/dev/null || true)
[ -n "$fontconfig_sans" ] && ui_font="$fontconfig_sans"
fi
# Generate CSS with 14-slot system
cat <<EOF
/* Omarchy Theme for Obsidian */
/* Generated on $(date) from theme: $(basename "$(readlink "$CURRENT_THEME_DIR" 2>/dev/null || echo "unknown")") */
/* Colors sorted by frequency, backgrounds by distance */
.theme-dark, .theme-light {
/* Core colors */
--background-primary: $bg_color;
--text-normal: $fg_color;
/* Background variations (always distance-based) */
--background-primary-alt: $bg_primary_alt;
--background-secondary: $bg_secondary;
--background-secondary-alt: $bg_secondary_alt;
/* Code block colors (always distance-based) */
--code-background: $code_bg;
--code-foreground: $code_fg;
/* Border color from btop theme */
--border-color: $border_color;
/* Selection colors from Alacritty */
--text-selection: $selection_bg;
--text-selection-fg: $selection_fg;
/* 13-slot color system for remaining elements */
--text-title-h1: ${color_slots[0]};
--text-title-h2: ${color_slots[1]};
--text-title-h3: ${color_slots[2]};
--text-title-h4: ${color_slots[3]};
--text-title-h5: ${color_slots[4]};
--text-title-h6: ${color_slots[4]}; /* Same as h5 */
--text-link: ${color_slots[5]};
--markup-code: ${color_slots[6]};
--text-mark: ${color_slots[7]};
--interactive-accent: ${color_slots[8]};
--blockquote-border: ${color_slots[9]};
--text-muted: $border_color; /* Use border color for muted text */
--text-faint: $border_color; /* Use border color for faint text */
/* Additional mappings */
--text-accent: var(--interactive-accent);
--text-accent-hover: var(--interactive-accent);
--text-error: var(--text-title-h1);
--text-error-hover: var(--text-title-h1);
--text-highlight-bg: $fg_color; /* Use text color as highlight background */
--text-on-accent: $bg_color;
--interactive-normal: var(--code-background);
--interactive-hover: var(--interactive-accent);
--interactive-accent-hover: var(--interactive-accent);
--interactive-success: var(--text-title-h2);
--scrollbar-bg: var(--background-primary);
--scrollbar-thumb-bg: var(--code-background);
--scrollbar-active-thumb-bg: var(--interactive-accent);
--background-modifier-border: var(--border-color);
--background-modifier-form-field: var(--code-background);
--background-modifier-form-field-highlighted: var(--code-background);
--background-modifier-box-shadow: rgba(0, 0, 0, 0.3);
--background-modifier-success: var(--interactive-success);
--background-modifier-error: var(--text-error);
--background-modifier-error-hover: var(--text-error);
--background-modifier-cover: rgba(0, 0, 0, 0.8);
--link-color: var(--text-link);
--link-color-hover: var(--text-link);
--link-unresolved-color: var(--text-muted);
--link-unresolved-opacity: 0.7;
--tag-color: var(--text-title-h3);
--tag-background: var(--code-background);
--graph-line: var(--text-muted);
--graph-node: var(--interactive-accent);
--graph-node-unresolved: var(--text-muted);
--graph-node-focused: var(--text-link);
--graph-node-tag: var(--text-title-h3);
--graph-node-attachment: var(--text-title-h2);
/* Fonts */
--font-interface-theme: "$ui_font";
--font-text-theme: "$ui_font";
--font-monospace-theme: "$monospace_font";
}
/* Headers */
.cm-header-1, .markdown-rendered h1 { color: var(--text-title-h1); }
.cm-header-2, .markdown-rendered h2 { color: var(--text-title-h2); }
.cm-header-3, .markdown-rendered h3 { color: var(--text-title-h3); }
.cm-header-4, .markdown-rendered h4 { color: var(--text-title-h4); }
.cm-header-5, .markdown-rendered h5 { color: var(--text-title-h5); }
.cm-header-6, .markdown-rendered h6 { color: var(--text-title-h6); }
/* Code blocks */
.markdown-rendered code {
font-family: var(--font-monospace-theme);
background-color: var(--code-background);
color: var(--markup-code);
padding: 2px 4px;
border-radius: 3px;
}
.markdown-rendered pre {
background-color: var(--code-background);
border: 1px solid var(--background-modifier-border);
border-radius: 5px;
}
.markdown-rendered pre code {
background-color: transparent;
color: var(--code-foreground);
}
/* Syntax highlighting */
.cm-s-obsidian span.cm-keyword { color: var(--text-title-h1); }
.cm-s-obsidian span.cm-string { color: var(--text-title-h2); }
.cm-s-obsidian span.cm-number { color: var(--text-title-h3); }
.cm-s-obsidian span.cm-comment { color: var(--text-muted); }
.cm-s-obsidian span.cm-operator { color: var(--text-link); }
.cm-s-obsidian span.cm-variable { color: var(--text-normal); }
.cm-s-obsidian span.cm-def { color: var(--text-link); }
/* Highlighted text */
.markdown-rendered mark,
.cm-s-obsidian span.cm-highlight,
mark {
background-color: var(--text-highlight-bg) !important;
color: var(--code-background) !important;
}
/* Links */
.markdown-rendered a {
color: var(--text-link);
}
/* Blockquotes */
.markdown-rendered blockquote {
border-left: 4px solid var(--blockquote-border);
padding-left: 1em;
}
/* Status bar */
.status-bar {
background-color: var(--code-background);
border-top: 1px solid var(--background-modifier-border);
}
/* Active file */
.workspace-leaf.mod-active .workspace-leaf-header-title {
color: var(--interactive-accent);
}
.nav-file-title.is-active {
background-color: var(--code-background);
color: var(--interactive-accent);
}
/* Text selection */
::selection {
background-color: var(--text-selection);
color: var(--text-selection-fg);
}
/* Search results */
.search-result-file-title {
color: var(--interactive-accent);
}
.search-result-file-match {
background-color: var(--code-background);
color: var(--text-normal);
border-left: 3px solid var(--interactive-accent);
}
.search-result-file-matched-text {
color: var(--code-background);
}
/* Tables */
.markdown-rendered table {
border: 1px solid var(--background-modifier-border);
}
.markdown-rendered th {
background-color: var(--code-background);
color: var(--text-accent);
}
.markdown-rendered td {
border: 1px solid var(--background-modifier-border);
}
/* Callouts */
.callout {
border-left: 4px solid var(--interactive-accent);
background-color: var(--code-background);
}
.callout * {
color: var(--text-normal);
}
/* Modal dialogs */
.modal {
background-color: var(--background-primary);
border: 2px solid var(--background-modifier-border);
}
/* Settings */
.vertical-tab-header-group-title {
color: var(--interactive-accent);
}
.vertical-tab-nav-item.is-active {
background-color: var(--code-background);
color: var(--interactive-accent);
}
EOF
}
# Option handling
if [ "${1:-}" = "--reset" ]; then
echo "♻️ Resetting Omarchy themes and registry..."
if [ -f "$VAULTS_FILE" ] && [ -s "$VAULTS_FILE" ]; then
while IFS= read -r vault_path || [ -n "$vault_path" ]; do
case "$vault_path" in ""|\#*) continue ;; esac
vault_path="${vault_path%/}"
vault_name=$(basename "$vault_path")
theme_dir="$vault_path/.obsidian/themes/Omarchy"
if [ -d "$theme_dir" ]; then
rm -rf "$theme_dir"
echo " ✅ $vault_name (theme removed)"
else
echo " $vault_name (no theme present)"
fi
done <"$VAULTS_FILE"
fi
rm -f "$VAULTS_FILE"
echo "✅ Registry removed"
exit 0
fi
# Main update logic
echo "🔄 Updating Obsidian vaults..."
# Step 1: ensure registry exists (bootstrap if needed)
ensure_vaults_file
while IFS= read -r vault_path || [ -n "$vault_path" ]; do
case "$vault_path" in "" | \#*) continue ;; esac
vault_path="${vault_path%/}"
vault_name=$(basename "$vault_path")
# Step 2: verify path exists; log/skip gracefully if invalid
if [ ! -d "$vault_path" ] || [ ! -d "$vault_path/.obsidian" ]; then
echo " ❌ $vault_name (invalid entry: missing directory or .obsidian)"
continue
fi
# Ensure theme files exist for this vault
ensure_theme_scaffold "$vault_path"
THEME_DIR="$vault_path/.obsidian/themes/Omarchy"
# Step 3: update theme.css
if [ -f "$CURRENT_THEME_DIR/obsidian.css" ]; then
cp "$CURRENT_THEME_DIR/obsidian.css" "$THEME_DIR/theme.css"
echo " ✅ $vault_name (custom theme)"
else
extract_theme_data >"$THEME_DIR/theme.css"
echo " ✅ $vault_name (generated theme)"
fi
done <"$VAULTS_FILE"

View File

@@ -1,8 +1,7 @@
#!/bin/bash #!/bin/bash
if [[ -f ~/.config/alacritty/alacritty.toml ]]; then case "$TERMINAL" in
touch ~/.config/alacritty/alacritty.toml "alacritty") touch ~/.config/alacritty/alacritty.toml ;;
fi "kitty") killall -SIGUSR1 kitty ;;
"ghostty") killall -SIGUSR2 ghostty ;;
killall -SIGUSR1 kitty esac
killall -SIGUSR2 ghostty

View File

@@ -18,20 +18,22 @@ if omarchy-cmd-present "$EDITOR_CMD" && [[ ! -f "$SKIP_FLAG" ]]; then
# Install $EDITOR_NAME theme extension # Install $EDITOR_NAME theme extension
if [[ -n "$extension" ]] && ! "$EDITOR_CMD" --list-extensions | grep -Fxq "$extension"; then if [[ -n "$extension" ]] && ! "$EDITOR_CMD" --list-extensions | grep -Fxq "$extension"; then
notify-send " Installing $EDITOR_NAME theme for $theme_name"
"$EDITOR_CMD" --install-extension "$extension" >/dev/null "$EDITOR_CMD" --install-extension "$extension" >/dev/null
fi fi
# Create config file if there isn't already one # Create config file if there isn't already one
mkdir -p "$(dirname "$SETTINGS_PATH")" mkdir -p "$(dirname "$SETTINGS_PATH")"
if [[ ! -f "$SETTINGS_PATH" ]]; then if [[ ! -f "$SETTINGS_PATH" ]]; then
printf '{\n}\n' >"$SETTINGS_PATH" printf '{\n}\n' > "$SETTINGS_PATH"
fi fi
# Create a `workbench.colorTheme` entry in settings. # Create a `workbench.colorTheme` entry in settings.
if ! grep -q '"workbench.colorTheme"' "$SETTINGS_PATH"; then if ! grep -q '"workbench.colorTheme"' "$SETTINGS_PATH"; then
# Insert `"workbench.colorTheme": "",` immediately after the first `{` # Insert `"workbench.colorTheme": "",` immediately after the first `{`
# Use sed's first-match range (0,/{/) to only replace the first `{` # Use sed's first-match range (0,/{/) to only replace the first `{`
sed -i --follow-symlinks -E '0,/\{/{s/\{/{\ "workbench.colorTheme": "",/}' "$SETTINGS_PATH" sed -i --follow-symlinks -E '0,/\{/{s/\{/{\
"workbench.colorTheme": "",/}' "$SETTINGS_PATH"
fi fi
# Update theme # Update theme
@@ -41,7 +43,8 @@ if omarchy-cmd-present "$EDITOR_CMD" && [[ ! -f "$SKIP_FLAG" ]]; then
else else
# Remove theme from settings.json when the theme doesn't have $EDITOR_NAME support # Remove theme from settings.json when the theme doesn't have $EDITOR_NAME support
if [[ -f "$SETTINGS_PATH" ]]; then if [[ -f "$SETTINGS_PATH" ]]; then
sed -i --follow-symlinks -E 's/\"workbench\.colorTheme\"[[:space:]]*:[^,}]*,?//' "$SETTINGS_PATH" sed -i --follow-symlinks -E '/"workbench\.colorTheme"[[:space:]]*:[^,}]*,?/d' "$SETTINGS_PATH"
fi fi
fi fi
fi fi

View File

@@ -1,6 +0,0 @@
#!/bin/bash
timezone=$(timedatectl list-timezones | gum filter --height 20 --header "Set timezone") || exit 1
sudo timedatectl set-timezone "$timezone"
echo "Timezone is now set to $timezone"
omarchy-restart-waybar

View File

@@ -3,7 +3,7 @@
set -e set -e
if (($# == 0)); then if (($# == 0)); then
echo "Usage: omarchy-update-branch [master|dev]" echo "Usage: omarchy-verion-branch-set [master|dev]"
exit 1 exit 1
fi fi

View File

@@ -1,11 +0,0 @@
#!/bin/bash
set -e
echo -e "\e[32mUpdate Firmware\e[0m"
if omarchy-cmd-missing fwupdmgr; then
omarchy-pkg-add fwupd
fi
fwupdmgr refresh
sudo fwupdmgr update

View File

@@ -5,5 +5,4 @@ set -e
omarchy-update-available-reset omarchy-update-available-reset
omarchy-update-system-pkgs omarchy-update-system-pkgs
omarchy-migrate omarchy-migrate
omarchy-hook post-update
omarchy-update-restart omarchy-update-restart

View File

@@ -5,6 +5,9 @@ if [ "$(uname -r | sed 's/-arch/\.arch/')" != "$(pacman -Q linux | awk '{print $
elif [ -f "$HOME/.local/state/omarchy/reboot-required" ]; then elif [ -f "$HOME/.local/state/omarchy/reboot-required" ]; then
gum confirm "Updates require reboot. Ready?" && omarchy-state clear re*-required && sudo reboot now gum confirm "Updates require reboot. Ready?" && omarchy-state clear re*-required && sudo reboot now
elif [ -f "$HOME/.local/state/omarchy/relaunch-required" ]; then
gum confirm "Updates require Hyprland relaunch. Ready?" && omarchy-state clear re*-required && uwsm stop
fi fi
for file in "$HOME"/.local/state/omarchy/restart-*-required; do for file in "$HOME"/.local/state/omarchy/restart-*-required; do

View File

@@ -1,445 +0,0 @@
#!/bin/bash
COMPOSE_FILE="$HOME/.config/windows/docker-compose.yml"
check_prerequisites() {
local DISK_SIZE_GB=${1:-64}
local REQUIRED_SPACE=$((DISK_SIZE_GB + 10)) # Add 10GB for Windows ISO and overhead
# Check for KVM support
if [ ! -e /dev/kvm ]; then
gum style \
--border normal \
--padding "1 2" \
--margin "1" \
"❌ KVM virtualization not available!" \
"" \
"Please enable virtualization in BIOS or run:" \
" sudo modprobe kvm-intel # for Intel CPUs" \
" sudo modprobe kvm-amd # for AMD CPUs"
exit 1
fi
# Check disk space
AVAILABLE_SPACE=$(df "$HOME" | awk 'NR==2 {print int($4/1024/1024)}')
if [ "$AVAILABLE_SPACE" -lt "$REQUIRED_SPACE" ]; then
echo "❌ Insufficient disk space!"
echo " Available: ${AVAILABLE_SPACE}GB"
echo " Required: ${REQUIRED_SPACE}GB (${DISK_SIZE_GB}GB disk + 10GB for Windows image)"
exit 1
fi
}
install_windows() {
# Set up trap to handle Ctrl+C
trap "echo ''; echo 'Installation cancelled by user'; exit 1" INT
check_prerequisites
omarchy-pkg-add freerdp openbsd-netcat gum
mkdir -p "$HOME/.windows"
mkdir -p "$HOME/.config/windows"
mkdir -p "$HOME/.local/share/applications/icons"
# Install Windows VM icon and desktop file
if [ -f "$OMARCHY_PATH/applications/icons/windows.png" ]; then
cp "$OMARCHY_PATH/applications/icons/windows.png" "$HOME/.local/share/applications/icons/windows.png"
fi
cat << EOF | tee "$HOME/.local/share/applications/windows-vm.desktop" > /dev/null
[Desktop Entry]
Name=Windows
Comment=Start Windows VM via Docker and connect with RDP
Exec=uwsm app -- omarchy-windows-vm launch
Icon=$HOME/.local/share/applications/icons/windows.png
Terminal=false
Type=Application
Categories=System;Virtualization;
EOF
# Get system resources
TOTAL_RAM=$(free -h | grep "^Mem:" | awk '{print $2}')
TOTAL_RAM_GB=$(free -g | grep "^Mem:" | awk '{print $2}')
TOTAL_CORES=$(nproc)
echo ""
echo "System Resources Detected:"
echo " Total RAM: $TOTAL_RAM"
echo " Total CPU Cores: $TOTAL_CORES"
echo ""
RAM_OPTIONS=""
for size in 2 4 8 16 32 64; do
if [ $size -le $TOTAL_RAM_GB ]; then
RAM_OPTIONS="$RAM_OPTIONS ${size}G"
fi
done
SELECTED_RAM=$(echo $RAM_OPTIONS | tr ' ' '\n' | gum choose --selected="4G" --header="How much RAM would you like to allocate to Windows VM?")
# Check if user cancelled
if [ -z "$SELECTED_RAM" ]; then
echo "Installation cancelled by user"
exit 1
fi
SELECTED_CORES=$(gum input --placeholder="Number of CPU cores (1-$TOTAL_CORES)" --value="2" --header="How many CPU cores would you like to allocate to Windows VM?" --char-limit=2)
# Check if user cancelled (Ctrl+C in gum input returns empty string)
if [ -z "$SELECTED_CORES" ]; then
echo "Installation cancelled by user"
exit 1
fi
if ! [[ "$SELECTED_CORES" =~ ^[0-9]+$ ]] || [ "$SELECTED_CORES" -lt 1 ] || [ "$SELECTED_CORES" -gt "$TOTAL_CORES" ]; then
echo "Invalid input. Using default: 2 cores"
SELECTED_CORES=2
fi
AVAILABLE_SPACE=$(df "$HOME" | awk 'NR==2 {print int($4/1024/1024)}')
MAX_DISK_GB=$((AVAILABLE_SPACE - 10)) # Leave 10GB for Windows image
# Check if we have enough space for minimum
if [ $MAX_DISK_GB -lt 32 ]; then
echo "❌ Insufficient disk space for Windows VM!"
echo " Available: ${AVAILABLE_SPACE}GB"
echo " Minimum required: 42GB (32GB disk + 10GB for Windows image)"
exit 1
fi
DISK_OPTIONS=""
for size in 32 64 128 256 512; do
if [ $size -le $MAX_DISK_GB ]; then
DISK_OPTIONS="$DISK_OPTIONS ${size}G"
fi
done
# Default to 64G if available, otherwise 32G
DEFAULT_DISK="64G"
if ! echo "$DISK_OPTIONS" | grep -q "64G"; then
DEFAULT_DISK="32G"
fi
SELECTED_DISK=$(echo $DISK_OPTIONS | tr ' ' '\n' | gum choose --selected="$DEFAULT_DISK" --header="How much disk space would you like to give Windows VM? (64GB+ recommended)")
# Check if user cancelled
if [ -z "$SELECTED_DISK" ]; then
echo "Installation cancelled by user"
exit 1
fi
# Extract just the number for prerequisite check
DISK_SIZE_NUM=$(echo "$SELECTED_DISK" | sed 's/G//')
# Re-check prerequisites with selected disk size
check_prerequisites "$DISK_SIZE_NUM"
# Prompt for username and password
USERNAME=$(gum input --placeholder="Username (Press enter to use default: docker)" --header="Enter Windows username:")
if [ -z "$USERNAME" ]; then
USERNAME="docker"
fi
PASSWORD=$(gum input --placeholder="Password (Press enter to use default: admin)" --password --header="Enter Windows password:")
if [ -z "$PASSWORD" ]; then
PASSWORD="admin"
PASSWORD_DISPLAY="(default)"
else
PASSWORD_DISPLAY="(user-defined)"
fi
# Display configuration summary
gum style \
--border normal \
--padding "1 2" \
--margin "1" \
--align left \
--bold \
"Windows VM Configuration" \
"" \
"RAM: $SELECTED_RAM" \
"CPU: $SELECTED_CORES cores" \
"Disk: $SELECTED_DISK" \
"Username: $USERNAME" \
"Password: $PASSWORD_DISPLAY"
# Ask for confirmation
echo ""
if ! gum confirm "Proceed with this configuration?"; then
echo "Installation cancelled by user"
exit 1
fi
mkdir -p $HOME/Windows
# Create docker-compose.yml in user config directory
cat << EOF | tee "$COMPOSE_FILE" > /dev/null
services:
windows:
image: dockurr/windows
container_name: omarchy-windows
environment:
VERSION: "11"
RAM_SIZE: "$SELECTED_RAM"
CPU_CORES: "$SELECTED_CORES"
DISK_SIZE: "$SELECTED_DISK"
USERNAME: "$USERNAME"
PASSWORD: "$PASSWORD"
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 3389:3389/tcp
- 3389:3389/udp
volumes:
- $HOME/.windows:/storage
- $HOME/Windows:/shared
restart: always
stop_grace_period: 2m
EOF
echo ""
echo "Starting Windows VM installation..."
echo "This will download a Windows 11 image (may take 10-15 minutes)."
echo ""
echo "Monitor installation progress at: http://127.0.0.1:8006"
echo ""
# Start docker-compose with user's config
echo "Starting Windows VM with docker-compose..."
if ! docker-compose -f "$COMPOSE_FILE" up -d 2>&1; then
echo "❌ Failed to start Windows VM!"
echo " Common issues:"
echo " - Docker daemon not running: sudo systemctl start docker"
echo " - Port already in use: check if another VM is running"
echo " - Permission issues: make sure you're in the docker group"
exit 1
fi
echo ""
echo "Windows VM is starting up!"
echo ""
echo "Opening browser to monitor installation..."
# Open browser to monitor installation
sleep 3
xdg-open "http://127.0.0.1:8006"
echo ""
echo "Installation is running in the background."
echo "You can monitor progress at: http://127.0.0.1:8006"
echo ""
echo "Once finished, launch 'Windows' via Super + Space"
echo ""
echo "To stop the VM: omarchy-windows-vm stop"
echo "To change resources: ~/.config/windows/docker-compose.yml"
echo ""
}
remove_windows() {
echo "Removing Windows VM..."
docker-compose -f "$COMPOSE_FILE" down 2>/dev/null || true
docker rmi dockurr/windows 2>/dev/null || echo "Image already removed or not found"
rm "$HOME/.local/share/applications/windows-vm.desktop"
rm -rf "$HOME/.config/windows"
rm -rf "$HOME/.windows"
echo ""
echo "Windows VM removal completed!"
}
launch_windows() {
KEEP_ALIVE=false
if [ "$1" = "--keep-alive" ] || [ "$1" = "-k" ]; then
KEEP_ALIVE=true
fi
# Check if config exists
if [ ! -f "$COMPOSE_FILE" ]; then
echo "Windows VM not configured. Please run: omarchy-windows-vm install"
exit 1
fi
# Check if container is already running
CONTAINER_STATUS=$(docker inspect --format='{{.State.Status}}' omarchy-windows 2>/dev/null)
if [ "$CONTAINER_STATUS" != "running" ]; then
echo "Starting Windows VM..."
# Send desktop notification
notify-send "Windows VM" "Starting Windows VM, this may take a moment..."
if ! docker-compose -f "$COMPOSE_FILE" up -d 2>&1; then
echo "❌ Failed to start Windows VM!"
echo " Try checking: omarchy-windows-vm status"
echo " View logs: docker logs omarchy-windows"
notify-send -u critical "Windows VM" "Failed to start Windows VM"
exit 1
fi
# Wait for RDP to be ready
echo "Waiting for Windows VM to be ready..."
WAIT_COUNT=0
while ! nc -z 127.0.0.1 3389 2>/dev/null; do
sleep 2
WAIT_COUNT=$((WAIT_COUNT + 1))
if [ $WAIT_COUNT -gt 60 ]; then # 2 minutes timeout
echo "❌ Timeout waiting for RDP!"
echo " The VM might still be installing Windows."
echo " Check progress at: http://127.0.0.1:8006"
exit 1
fi
done
# Give it a moment more to fully initialize
sleep 3
fi
# Extract credentials from compose file
WIN_USER=$(grep "USERNAME:" "$COMPOSE_FILE" | sed 's/.*USERNAME: "\(.*\)"/\1/')
WIN_PASS=$(grep "PASSWORD:" "$COMPOSE_FILE" | sed 's/.*PASSWORD: "\(.*\)"/\1/')
# Use defaults if not found
[ -z "$WIN_USER" ] && WIN_USER="docker"
[ -z "$WIN_PASS" ] && WIN_PASS="admin"
# Build the connection info
if [ "$KEEP_ALIVE" = true ]; then
LIFECYCLE="VM will keep running after RDP closes
To stop: omarchy-windows-vm stop"
else
LIFECYCLE="VM will auto-stop when RDP closes"
fi
gum style \
--border normal \
--padding "1 2" \
--margin "1" \
--align center \
"Connecting to Windows VM" \
"" \
"$LIFECYCLE"
# Detect display scale from Hyprland
HYPR_SCALE=$(hyprctl monitors -j | jq -r '.[0].scale')
SCALE_PERCENT=$(echo "$HYPR_SCALE" | awk '{print int($1 * 100)}')
RDP_SCALE=""
if [ "$SCALE_PERCENT" -ge 170 ]; then
RDP_SCALE="/scale:180"
elif [ "$SCALE_PERCENT" -ge 130 ]; then
RDP_SCALE="/scale:140"
fi
# If scale is less than 130%, don't set any scale (use default 100)
# Connect with RDP in fullscreen (auto-detects resolution)
xfreerdp3 /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 +f -grab-keyboard /cert:ignore /title:"Windows VM - Omarchy" /floatbar:sticky:off,default:visible,show:fullscreen $RDP_SCALE
# After RDP closes, stop the container unless --keep-alive was specified
if [ "$KEEP_ALIVE" = false ]; then
echo ""
echo "RDP session closed. Stopping Windows VM..."
docker-compose -f "$COMPOSE_FILE" down
echo "Windows VM stopped."
else
echo ""
echo "RDP session closed. Windows VM is still running."
echo "To stop it: omarchy-windows-vm stop"
fi
}
stop_windows() {
if [ ! -f "$COMPOSE_FILE" ]; then
echo "Windows VM not configured."
exit 1
fi
echo "Stopping Windows VM..."
docker-compose -f "$COMPOSE_FILE" down
echo "Windows VM stopped."
}
status_windows() {
if [ ! -f "$COMPOSE_FILE" ]; then
echo "Windows VM not configured."
echo "To set up: omarchy-windows-vm install"
exit 1
fi
CONTAINER_STATUS=$(docker inspect --format='{{.State.Status}}' omarchy-windows 2>/dev/null)
if [ -z "$CONTAINER_STATUS" ]; then
echo "Windows VM container not found."
echo "To start: omarchy-windows-vm launch"
elif [ "$CONTAINER_STATUS" = "running" ]; then
gum style \
--border normal \
--padding "1 2" \
--margin "1" \
--align left \
"Windows VM Status: RUNNING" \
"" \
"Web interface: http://127.0.0.1:8006" \
"RDP available: port 3389" \
"" \
"To connect: omarchy-windows-vm launch" \
"To stop: omarchy-windows-vm stop"
else
echo "Windows VM is stopped (status: $CONTAINER_STATUS)"
echo "To start: omarchy-windows-vm launch"
fi
}
show_usage() {
echo "Usage: omarchy-windows-vm [command] [options]"
echo ""
echo "Commands:"
echo " install Install and configure Windows VM"
echo " remove Remove Windows VM and optionally its data"
echo " launch [options] Start Windows VM (if needed) and connect via RDP"
echo " Options:"
echo " --keep-alive, -k Keep VM running after RDP closes"
echo " stop Stop the running Windows VM"
echo " status Show current VM status"
echo " help Show this help message"
echo ""
echo "Examples:"
echo " omarchy-windows-vm install # Set up Windows VM for first time"
echo " omarchy-windows-vm launch # Connect to VM (auto-stop on exit)"
echo " omarchy-windows-vm launch -k # Connect to VM (keep running)"
echo " omarchy-windows-vm stop # Shut down the VM"
}
# Main command dispatcher
case "$1" in
install)
install_windows
;;
remove)
remove_windows
;;
launch|start)
launch_windows "$2"
;;
stop|down)
stop_windows
;;
status)
status_windows
;;
help|--help|-h|"")
show_usage
;;
*)
echo "Unknown command: $1" >&2
echo "" >&2
show_usage >&2
exit 1
;;
esac

View File

@@ -16,6 +16,6 @@ decorations = "None"
[keyboard] [keyboard]
bindings = [ bindings = [
{ key = "Insert", mods = "Shift", action = "Paste" }, { key = "F11", action = "ToggleFullscreen" },
{ key = "Insert", mods = "Control", action = "Copy" } { key = "Insert", mods = "Shift", action = "Paste" }
] ]

View File

@@ -1,5 +1,3 @@
--ozone-platform=wayland --ozone-platform=wayland
--ozone-platform-hint=wayland --ozone-platform-hint=wayland
--enable-features=TouchpadOverscrollHistoryNavigation --enable-features=TouchpadOverscrollHistoryNavigation
# Chromium crash workaround for Wayland color management on Hyprland - see https://github.com/hyprwm/Hyprland/issues/11957
--disable-features=WaylandWpColorManagerV1

View File

@@ -22,7 +22,7 @@ presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:defaul
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists. #* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift. #* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = True vim_keys = False
#* Rounded corners on boxes, is ignored if TTY mode is ON. #* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = True rounded_corners = True

View File

@@ -2,5 +2,3 @@
--ozone-platform-hint=wayland --ozone-platform-hint=wayland
--enable-features=TouchpadOverscrollHistoryNavigation --enable-features=TouchpadOverscrollHistoryNavigation
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url --load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
# Chromium crash workaround for Wayland color management on Hyprland - see https://github.com/hyprwm/Hyprland/issues/11957
--disable-features=WaylandWpColorManagerV1

View File

@@ -1 +0,0 @@
async = false

View File

@@ -1,3 +0,0 @@
show_actions = false
only_search_title = true
history = false

View File

@@ -20,8 +20,8 @@ cursor-style-blink = false
shell-integration-features = no-cursor shell-integration-features = no-cursor
# Keyboard bindings # Keyboard bindings
keybind = f11=toggle_fullscreen
keybind = shift+insert=paste_from_clipboard keybind = shift+insert=paste_from_clipboard
keybind = control+insert=copy_to_clipboard
# SSH session terminfo # SSH session terminfo
shell-integration-features = ssh-env shell-integration-features = ssh-env

View File

@@ -3,27 +3,27 @@ $terminal = uwsm-app -- $TERMINAL
$browser = omarchy-launch-browser $browser = omarchy-launch-browser
bindd = SUPER, RETURN, Terminal, exec, $terminal --working-directory="$(omarchy-cmd-terminal-cwd)" bindd = SUPER, RETURN, Terminal, exec, $terminal --working-directory="$(omarchy-cmd-terminal-cwd)"
bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window bindd = SUPER, F, File manager, exec, uwsm-app -- nautilus --new-window
bindd = SUPER SHIFT, B, Browser, exec, $browser bindd = SUPER, B, Browser, exec, $browser
bindd = SUPER SHIFT ALT, B, Browser (private), exec, $browser --private bindd = SUPER SHIFT, B, Browser (private), exec, $browser --private
bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify bindd = SUPER, M, Music, exec, omarchy-launch-or-focus spotify
bindd = SUPER SHIFT, N, Editor, exec, omarchy-launch-editor bindd = SUPER, N, Editor, exec, omarchy-launch-editor
bindd = SUPER SHIFT, T, Activity, exec, $terminal -e btop bindd = SUPER, T, Activity, exec, $terminal -e btop
bindd = SUPER SHIFT, D, Docker, exec, $terminal -e lazydocker bindd = SUPER, D, Docker, exec, $terminal -e lazydocker
bindd = SUPER SHIFT, G, Signal, exec, omarchy-launch-or-focus signal "uwsm-app -- signal-desktop" bindd = SUPER, 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 -disable-gpu --enable-wayland-ime" bindd = SUPER, O, Obsidian, exec, omarchy-launch-or-focus "^obsidian$" "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime"
bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- 1password bindd = SUPER, SLASH, Passwords, exec, uwsm-app -- 1password
# If your web app url contains #, type it as ## to prevent hyperland treat it as comments # If your web app url contains #, type it as ## to prevent hyprland from treating it as a comment
bindd = SUPER SHIFT, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com" bindd = SUPER, A, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com"
bindd = SUPER SHIFT ALT, A, Grok, exec, omarchy-launch-webapp "https://grok.com" bindd = SUPER SHIFT, 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, 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, E, Email, exec, omarchy-launch-webapp "https://app.hey.com"
bindd = SUPER SHIFT, Y, YouTube, exec, omarchy-launch-webapp "https://youtube.com/" bindd = SUPER, Y, YouTube, exec, omarchy-launch-or-focus-webapp YouTube "https://youtube.com/"
bindd = SUPER SHIFT ALT, G, WhatsApp, exec, omarchy-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/" bindd = SUPER SHIFT, G, WhatsApp, exec, omarchy-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/"
bindd = SUPER SHIFT CTRL, G, Google Messages, exec, omarchy-launch-or-focus-webapp "Google Messages" "https://messages.google.com/web/conversations" bindd = SUPER ALT, G, Google Messages, exec, omarchy-launch-or-focus-webapp "Google Messages" "https://messages.google.com/web/conversations"
bindd = SUPER SHIFT, X, X, exec, omarchy-launch-webapp "https://x.com/" bindd = SUPER, 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" bindd = SUPER SHIFT, X, X Post, exec, omarchy-launch-webapp "https://x.com/compose/post"
# Overwrite existing bindings, like putting Omarchy Menu on Super + Space # Overwrite existing bindings, like putting Omarchy Menu on Super + Space
# unbind = SUPER, SPACE # unbind = SUPER, SPACE

View File

@@ -3,8 +3,7 @@
# Use defaults Omarchy defaults (but don't edit these directly!) # Use defaults Omarchy defaults (but don't edit these directly!)
source = ~/.local/share/omarchy/default/hypr/autostart.conf source = ~/.local/share/omarchy/default/hypr/autostart.conf
source = ~/.local/share/omarchy/default/hypr/bindings/media.conf source = ~/.local/share/omarchy/default/hypr/bindings/media.conf
source = ~/.local/share/omarchy/default/hypr/bindings/clipboard.conf source = ~/.local/share/omarchy/default/hypr/bindings/tiling.conf
source = ~/.local/share/omarchy/default/hypr/bindings/tiling-v2.conf
source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf
source = ~/.local/share/omarchy/default/hypr/envs.conf source = ~/.local/share/omarchy/default/hypr/envs.conf
source = ~/.local/share/omarchy/default/hypr/looknfeel.conf source = ~/.local/share/omarchy/default/hypr/looknfeel.conf
@@ -19,6 +18,3 @@ source = ~/.config/hypr/bindings.conf
source = ~/.config/hypr/envs.conf source = ~/.config/hypr/envs.conf
source = ~/.config/hypr/looknfeel.conf source = ~/.config/hypr/looknfeel.conf
source = ~/.config/hypr/autostart.conf source = ~/.config/hypr/autostart.conf
# Add any other personal Hyprland configuration below
# windowrule = workspace 5, class:qemu

View File

@@ -13,7 +13,7 @@ animations {
input-field { input-field {
monitor = monitor =
size = 650, 100 size = 600, 100
position = 0, 0 position = 0, 0
halign = center halign = center
valign = center valign = center
@@ -22,12 +22,12 @@ input-field {
outer_color = $outer_color outer_color = $outer_color
outline_thickness = 4 outline_thickness = 4
font_family = CaskaydiaMono Nerd Font Propo font_family = CaskaydiaMono Nerd Font
font_color = $font_color font_color = $font_color
placeholder_text = Enter Password 󰈷 placeholder_text = Enter Password 󰈷
check_color = $check_color check_color = $check_color
fail_text = <i>$FAIL ($ATTEMPTS)</i> fail_text = <i>$PAMFAIL ($ATTEMPTS)</i>
rounding = 0 rounding = 0
shadow_passes = 0 shadow_passes = 0

View File

@@ -3,10 +3,4 @@
profile { profile {
time = 07:00 time = 07:00
identity = true identity = true
} }
# Enable auto switch to nightlight:
# profile {
# time = 20:00
# temperature = 4000
# }

View File

@@ -1,6 +1,7 @@
# See https://wiki.hyprland.org/Configuring/Monitors/ # See https://wiki.hyprland.org/Configuring/Monitors/
# List current monitors and resolutions possible: hyprctl monitors # List current monitors and resolutions possible: hyprctl monitors
# Format: monitor = [port], resolution, position, scale # Format: monitor = [port], resolution, position, scale
# You must relaunch Hyprland after changing any envs (use Super+Esc, then Relaunch)
# Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K. # Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
env = GDK_SCALE,2 env = GDK_SCALE,2

View File

@@ -13,8 +13,7 @@ show_window_resize_notification no
confirm_os_window_close 0 confirm_os_window_close 0
# Keybindings # Keybindings
map ctrl+insert copy_to_clipboard map F11 toggle_fullscreen
map shift+insert paste_from_clipboard
# Allow remote access # Allow remote access
single_instance yes single_instance yes
@@ -24,7 +23,7 @@ allow_remote_control yes
cursor_shape block cursor_shape block
enable_audio_bell no enable_audio_bell no
# Minimal Tab bar styling # Minimal Tab bar styling
tab_bar_edge bottom tab_bar_edge bottom
tab_bar_style powerline tab_bar_style powerline
tab_powerline_style slanted tab_powerline_style slanted

10
config/nvim/lazyvim.json Normal file
View File

@@ -0,0 +1,10 @@
{
"extras": [
"lazyvim.plugins.extras.editor.neo-tree"
],
"install_version": 8,
"news": {
"NEWS.md": "10960"
},
"version": 8
}

View File

@@ -0,0 +1,56 @@
return {
-- Load all theme plugins but don't apply them
-- This ensures all colorschemes are available for hot-reloading
{
"ribru17/bamboo.nvim",
lazy = true,
priority = 1000,
},
{
"catppuccin/nvim",
name = "catppuccin",
lazy = true,
priority = 1000,
},
{
"sainnhe/everforest",
lazy = true,
priority = 1000,
},
{
"ellisonleao/gruvbox.nvim",
lazy = true,
priority = 1000,
},
{
"rebelot/kanagawa.nvim",
lazy = true,
priority = 1000,
},
{
"tahayvr/matteblack.nvim",
lazy = true,
priority = 1000,
},
{
"loctvl842/monokai-pro.nvim",
lazy = true,
priority = 1000,
},
{
"shaunsingh/nord.nvim",
lazy = true,
priority = 1000,
},
{
"rose-pine/neovim",
name = "rose-pine",
lazy = true,
priority = 1000,
},
{
"folke/tokyonight.nvim",
lazy = true,
priority = 1000,
},
}

View File

@@ -0,0 +1,45 @@
return {
{
name = "theme-hotreload",
dir = vim.fn.stdpath("config"),
lazy = false,
priority = 1000,
config = function()
local transparency_file = vim.fn.stdpath("config") .. "/plugin/after/transparency.lua"
vim.api.nvim_create_autocmd("User", {
pattern = "LazyReload",
callback = function()
package.loaded["plugins.theme"] = nil
vim.schedule(function()
local ok, theme_spec = pcall(require, "plugins.theme")
if not ok then
return
end
for _, spec in ipairs(theme_spec) do
if spec[1] == "LazyVim/LazyVim" and spec.opts and spec.opts.colorscheme then
local colorscheme = spec.opts.colorscheme
require("lazy.core.loader").colorscheme(colorscheme)
vim.defer_fn(function()
pcall(vim.cmd.colorscheme, colorscheme)
if vim.fn.filereadable(transparency_file) == 1 then
vim.defer_fn(function()
vim.cmd.source(transparency_file)
end, 5)
end
end, 5)
break
end
end
end)
end,
})
end,
},
}

View File

@@ -0,0 +1,8 @@
return {
"folke/snacks.nvim",
opts = {
scroll = {
enabled = false, -- Disable scrolling animations
},
},
}

View File

@@ -0,0 +1,45 @@
-- transparent background
vim.api.nvim_set_hl(0, "Normal", { bg = "none" })
vim.api.nvim_set_hl(0, "NormalFloat", { bg = "none" })
vim.api.nvim_set_hl(0, "FloatBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "Pmenu", { bg = "none" })
vim.api.nvim_set_hl(0, "Terminal", { bg = "none" })
vim.api.nvim_set_hl(0, "EndOfBuffer", { bg = "none" })
vim.api.nvim_set_hl(0, "FoldColumn", { bg = "none" })
vim.api.nvim_set_hl(0, "Folded", { bg = "none" })
vim.api.nvim_set_hl(0, "SignColumn", { bg = "none" })
vim.api.nvim_set_hl(0, "NormalNC", { bg = "none" })
vim.api.nvim_set_hl(0, "WhichKeyFloat", { bg = "none" })
vim.api.nvim_set_hl(0, "TelescopeBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "TelescopeNormal", { bg = "none" })
vim.api.nvim_set_hl(0, "TelescopePromptBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "TelescopePromptTitle", { bg = "none" })
-- transparent background for neotree
vim.api.nvim_set_hl(0, "NeoTreeNormal", { bg = "none" })
vim.api.nvim_set_hl(0, "NeoTreeNormalNC", { bg = "none" })
vim.api.nvim_set_hl(0, "NeoTreeVertSplit", { bg = "none" })
vim.api.nvim_set_hl(0, "NeoTreeWinSeparator", { bg = "none" })
vim.api.nvim_set_hl(0, "NeoTreeEndOfBuffer", { bg = "none" })
-- transparent background for nvim-tree
vim.api.nvim_set_hl(0, "NvimTreeNormal", { bg = "none" })
vim.api.nvim_set_hl(0, "NvimTreeVertSplit", { bg = "none" })
vim.api.nvim_set_hl(0, "NvimTreeEndOfBuffer", { bg = "none" })
-- transparent notify background
vim.api.nvim_set_hl(0, "NotifyINFOBody", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyERRORBody", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyWARNBody", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyTRACEBody", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyDEBUGBody", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyINFOTitle", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyERRORTitle", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyWARNTitle", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyTRACETitle", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyDEBUGTitle", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyINFOBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyERRORBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyWARNBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyTRACEBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyDEBUGBorder", { bg = "none" })

View File

@@ -1,7 +0,0 @@
#!/bin/bash
# This hook is called with the snake-cased name of the font that has just been set.
# To put it into use, remove .sample from the name.
# Example: Show the name of the theme that was just set.
# notify-send "New font" "Your new font is $1"

View File

@@ -1,7 +0,0 @@
#!/bin/bash
# This hook is called after an Omarchy system update has been performed.
# To put it into use, remove .sample from the name.
# Example: Show notification after the system has been updated.
# notify-send "Update Performed" "Your system is now up to date"

View File

@@ -1,7 +0,0 @@
#!/bin/bash
# This hook is called with the snake-cased name of the theme that has just been set.
# To put it into use, remove .sample from the name.
# Example: Show the name of the theme that was just set.
# notify-send "New theme" "Your new theme is $1"

View File

@@ -5,5 +5,4 @@ After=graphical-session.target
[Service] [Service]
Type=oneshot Type=oneshot
ExecStart=%h/.local/share/omarchy/bin/omarchy-battery-monitor ExecStart=%h/.local/share/omarchy/bin/omarchy-battery-monitor
Environment=DISPLAY=:0 Environment=DISPLAY=:0
LogLevelMax=warning

View File

@@ -1,4 +1,4 @@
# Changes require a restart to take effect. # Changes require a relaunch of Hyprland to take effect.
export TERMINAL=alacritty export TERMINAL=alacritty
export EDITOR=nvim export EDITOR=nvim

View File

@@ -1,4 +1,4 @@
# Changes require a restart to take effect. # Changes require a relaunch of Hyprland to take effect.
# Ensure Omarchy bins are in the path # Ensure Omarchy bins are in the path
export OMARCHY_PATH=$HOME/.local/share/omarchy export OMARCHY_PATH=$HOME/.local/share/omarchy

View File

@@ -1,145 +1,100 @@
force_keyboard_focus = true # forces keyboard forcus to stay in Walker close_when_open = true
close_when_open = true # close walker when invoking while already opened theme = "omarchy-default"
selection_wrap = true # wrap list if at bottom or top theme_base = []
click_to_close = true # closes walker if clicking outside of the main content area theme_location = ["~/.local/share/omarchy/default/walker/themes/"]
global_argument_delimiter = "#" # query: firefox#https://benz.dev => part after delimiter will be ignored when querying. this should be the same as in the elephant config hotreload_theme = true
exact_search_prefix = "'" # disable fuzzy searching force_keyboard_focus = true
theme = "omarchy-default" # theme to use timeout = 60
disable_mouse = false # disable mouse (on input and list only)
additional_theme_location = "~/.local/share/omarchy/default/walker/themes/"
[shell] [keys.ai]
anchor_top = true run_last_response = ["ctrl e"]
anchor_bottom = true
anchor_left = true
anchor_right = true
[placeholders] [list]
"default" = { input = " Search...", list = "No Results" } # placeholders for input and empty list, key is the providers name, so f.e. "desktopapplications" or "menus:other" max_entries = 200
cycle = true
[keybinds] [search]
close = ["Escape"] placeholder = " Search..."
next = ["Down"]
previous = ["Up"]
toggle_exact = ["ctrl e"]
resume_last_query = ["ctrl r"]
quick_activate = []
[providers] [builtins.hyprland_keybinds]
default = [ path = "~/.config/hypr/hyprland.conf"
"desktopapplications", hidden = true
"menus",
"websearch",
] # providers to be queried by default
empty = ["desktopapplications"] # providers to be queried when query is empty
max_results = 50 # global max results
[providers.sets] # define your own defaults/empty sets of providers [builtins.applications]
[providers.max_results_provider] # define max results per provider in here launch_prefix = "uwsm-app -- "
placeholder = " Search..."
prioritize_new = false
context_aware = false
show_sub_when_single = false
history = false
icon = ""
hidden = true
[[providers.prefixes]] [builtins.applications.actions]
prefix = "/" enabled = false
provider = "providerlist" hide_category = true
[[providers.prefixes]] [builtins.bookmarks]
prefix = "." hidden = true
provider = "files"
[[providers.prefixes]] [[builtins.bookmarks.entries]]
prefix = ":" label = "Omarchy - Github"
provider = "symbols" url = "https://github.com/basecamp/omarchy"
keywords = ["omarchy", "github"]
[[providers.prefixes]] [[builtins.bookmarks.entries]]
label = "Omarchy Manual"
url = "https://manuals.omamix.org/2/the-omarchy-manual"
keywords = ["omarchy"]
[builtins.calc]
name = "Calculator"
icon = ""
min_chars = 3
prefix = "=" prefix = "="
provider = "calc"
[[providers.prefixes]] [builtins.windows]
prefix = "@" switcher_only = true
provider = "websearch" hidden = true
[[providers.prefixes]] [builtins.clipboard]
prefix = "$" hidden = true
provider = "clipboard"
[providers.actions] # This will be MERGED/OVEWRITTEN with what the user specifies [builtins.commands]
dmenu = [{ action = "select", default = true, bind = "Return" }] hidden = true
providerlist = [ [builtins.custom_commands]
{ action = "activate", default = true, bind = "Return", after = "ClearReload" }, hidden = true
]
bluetooth = [ [builtins.emojis]
{ action = "find", global = true, bind = "ctrl f", after = "AsyncClearReload" }, name = "Emojis"
{ action = "trust", bind = "ctrl t", after = "AsyncReload" }, icon = ""
{ action = "untrust", bind = "ctrl t", after = "AsyncReload" }, prefix = ":"
{ action = "pair", bind = "Return", after = "AsyncReload" },
{ action = "remove", bind = "ctrl d", after = "AsyncReload" },
{ action = "connect", bind = "Return", after = "AsyncReload" },
{ action = "disconnect", bind = "Return", after = "AsyncReload" },
]
archlinuxpkgs = [ [builtins.symbols]
{ action = "install", bind = "Return", default = true }, after_copy = ""
{ action = "remove", bind = "Return" }, hidden = true
]
calc = [ [builtins.finder]
{ action = "copy", default = true, bind = "Return" }, use_fd = true
{ action = "delete", bind = "ctrl d", after = "AsyncReload" }, cmd_alt = "xdg-open $(dirname ~/%RESULT%)"
{ action = "save", bind = "ctrl s", after = "AsyncClearReload" }, icon = "file"
] name = "Finder"
preview_images = true
hidden = false
prefix = "."
websearch = [ [builtins.runner]
{ action = "search", default = true, bind = "Return" }, shell_config = ""
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" }, switcher_only = true
] hidden = true
desktopapplications = [ [builtins.ssh]
{ action = "start", default = true, bind = "Return" }, hidden = true
{ action = "start:keep", label = "open+next", bind = "shift Return", after = "KeepOpen" },
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "AsyncReload" },
{ action = "pin", bind = "ctrl p", after = "AsyncReload" },
{ action = "unpin", bind = "ctrl p", after = "AsyncReload" },
{ action = "pinup", bind = "ctrl n", after = "AsyncReload" },
{ action = "pindown", bind = "ctrl m", after = "AsyncReload" },
]
files = [ [builtins.websearch]
{ action = "open", default = true, bind = "Return" }, switcher_only = true
{ action = "opendir", label = "open dir", bind = "ctrl Return" }, hidden = true
{ action = "copypath", label = "copy path", bind = "ctrl shift c" },
{ action = "copyfile", label = "copy file", bind = "ctrl c" },
]
todo = [ [builtins.translation]
{ action = "save", default = true, bind = "Return", after = "ClearReload" }, hidden = true
{ action = "delete", bind = "ctrl d", after = "ClearReload" },
{ action = "active", bind = "Return", after = "ClearReload" },
{ action = "inactive", bind = "Return", after = "ClearReload" },
{ action = "done", bind = "ctrl f", after = "ClearReload" },
{ action = "clear", bind = "ctrl x", after = "ClearReload", global = true },
]
runner = [
{ action = "run", default = true, bind = "Return" },
{ action = "runterminal", label = "run in terminal", bind = "shift Return" },
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
]
symbols = [
{ action = "run_cmd", label = "select", default = true, bind = "Return" },
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
]
unicode = [
{ action = "run_cmd", label = "select", default = true, bind = "Return" },
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
]
clipboard = [
{ action = "copy", default = true, bind = "Return" },
{ action = "remove", bind = "ctrl d", after = "ClearReload" },
{ action = "remove_all", global = true, label = "clear", bind = "ctrl shift d", after = "ClearReload" },
{ action = "toggle_images", global = true, label = "toggle images", bind = "ctrl i", after = "ClearReload" },
{ action = "edit", bind = "ctrl o" },
]

View File

@@ -61,7 +61,7 @@
"format": "{:L%A %H:%M}", "format": "{:L%A %H:%M}",
"format-alt": "{:L%d %B W%V %Y}", "format-alt": "{:L%d %B W%V %Y}",
"tooltip": false, "tooltip": false,
"on-click-right": "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select" "on-click-right": "omarchy-cmd-tzupdate"
}, },
"network": { "network": {
"format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"], "format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"],
@@ -122,7 +122,7 @@
"modules": ["custom/expand-icon", "tray"] "modules": ["custom/expand-icon", "tray"]
}, },
"custom/expand-icon": { "custom/expand-icon": {
"format": "", "format": " ",
"tooltip": false "tooltip": false
}, },
"custom/screenrecording-indicator": { "custom/screenrecording-indicator": {
@@ -133,6 +133,6 @@
}, },
"tray": { "tray": {
"icon-size": 12, "icon-size": 12,
"spacing": 17 "spacing": 12
} }
} }

View File

@@ -7,7 +7,7 @@
border: none; border: none;
border-radius: 0; border-radius: 0;
min-height: 0; min-height: 0;
font-family: 'CaskaydiaMono Nerd Font'; font-family: CaskaydiaMono Nerd Font;
font-size: 12px; font-size: 12px;
} }
@@ -30,8 +30,11 @@
opacity: 0.5; opacity: 0.5;
} }
#tray,
#cpu, #cpu,
#battery, #battery,
#network,
#bluetooth,
#pulseaudio, #pulseaudio,
#custom-omarchy, #custom-omarchy,
#custom-screenrecording-indicator, #custom-screenrecording-indicator,
@@ -40,20 +43,8 @@
margin: 0 7.5px; margin: 0 7.5px;
} }
#tray {
margin-right: 16px;
}
#bluetooth {
margin-right: 17px;
}
#network {
margin-right: 13px;
}
#custom-expand-icon { #custom-expand-icon {
margin-right: 20px; margin-right: 7px;
} }
tooltip { tooltip {

View File

@@ -12,4 +12,3 @@ source = ~/.local/share/omarchy/default/hypr/apps/steam.conf
source = ~/.local/share/omarchy/default/hypr/apps/system.conf source = ~/.local/share/omarchy/default/hypr/apps/system.conf
source = ~/.local/share/omarchy/default/hypr/apps/terminals.conf source = ~/.local/share/omarchy/default/hypr/apps/terminals.conf
source = ~/.local/share/omarchy/default/hypr/apps/walker.conf source = ~/.local/share/omarchy/default/hypr/apps/walker.conf
source = ~/.local/share/omarchy/default/hypr/apps/webcam-overlay.conf

View File

@@ -1,5 +1,5 @@
# Browser types # Browser types
windowrule = tag +chromium-based-browser, class:((google-)?[cC]hrom(e|ium)|[bB]rave-browser|Microsoft-edge|Vivaldi-stable|helium) windowrule = tag +chromium-based-browser, class:([cC]hrom(e|ium)|[bB]rave-browser|Microsoft-edge|Vivaldi-stable|helium)
windowrule = tag +firefox-based-browser, class:([fF]irefox|zen|librewolf) windowrule = tag +firefox-based-browser, class:([fF]irefox|zen|librewolf)
# Force chromium-based browsers into a tile to deal with --app bug # Force chromium-based browsers into a tile to deal with --app bug

View File

@@ -1,6 +0,0 @@
# Webcam overlay for screen recording
windowrule = float, title:WebcamOverlay
windowrule = pin, title:WebcamOverlay
windowrule = noinitialfocus, title:WebcamOverlay
windowrule = nodim, title:WebcamOverlay
windowrule = move 100%-w-40 100%-w-40, title:WebcamOverlay # There's a typo in the hyprland rule so 100%-w on the height param is actually correct here

View File

@@ -1,10 +1,10 @@
exec-once = uwsm-app -- hypridle exec-once = uwsm app -- hypridle
exec-once = uwsm-app -- mako exec-once = uwsm app -- mako
exec-once = uwsm-app -- waybar exec-once = uwsm app -- waybar
exec-once = uwsm-app -- fcitx5 exec-once = uwsm app -- fcitx5
exec-once = uwsm-app -- swaybg -i ~/.config/omarchy/current/background -m fill exec-once = uwsm app -- swaybg -i ~/.config/omarchy/current/background -m fill
exec-once = uwsm-app -- swayosd-server exec-once = uwsm app -- swayosd-server
exec-once = uwsm app -- walker --gapplication-service
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec-once = wl-clip-persist --clipboard regular --all-mime-type-regex '^(?!x-kde-passwordManagerHint).+'
exec-once = omarchy-cmd-first-run exec-once = omarchy-cmd-first-run
exec-once = uwsm-app -- elephant
exec-once = uwsm-app -- walker --gapplication-service

View File

@@ -1,5 +0,0 @@
# Copy / Paste
bind = SUPER, C, sendshortcut, CTRL, Insert,
bind = SUPER, V, sendshortcut, SHIFT, Insert,
bind = SUPER, X, sendshortcut, CTRL, X,
bindd = SUPER CTRL, V, Clipboard, exec, omarchy-launch-walker -m clipboard

View File

@@ -1,92 +0,0 @@
# Close windows
bindd = SUPER, W, Close active window, killactive,
bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-cmd-close-all-windows
# Control tiling
bindd = SUPER, J, Toggle split, togglesplit, # dwindle
bindd = SUPER, P, Pseudo window, pseudo, # dwindle
bindd = SUPER, T, Toggle floating, togglefloating,
bindd = SUPER, F, Force full screen, fullscreen, 0
bindd = SUPER ALT, F, Full width, fullscreen, 1
# Move focus with SUPER + arrow keys
bindd = SUPER, LEFT, Move focus left, movefocus, l
bindd = SUPER, RIGHT, Move focus right, movefocus, r
bindd = SUPER, UP, Move focus up, movefocus, u
bindd = SUPER, DOWN, Move focus down, movefocus, d
# Switch workspaces with SUPER + [0-9]
bindd = SUPER, code:10, Switch to workspace 1, workspace, 1
bindd = SUPER, code:11, Switch to workspace 2, workspace, 2
bindd = SUPER, code:12, Switch to workspace 3, workspace, 3
bindd = SUPER, code:13, Switch to workspace 4, workspace, 4
bindd = SUPER, code:14, Switch to workspace 5, workspace, 5
bindd = SUPER, code:15, Switch to workspace 6, workspace, 6
bindd = SUPER, code:16, Switch to workspace 7, workspace, 7
bindd = SUPER, code:17, Switch to workspace 8, workspace, 8
bindd = SUPER, code:18, Switch to workspace 9, workspace, 9
bindd = SUPER, code:19, Switch to workspace 10, workspace, 10
# Move active window to a workspace with SUPER + SHIFT + [0-9]
bindd = SUPER SHIFT, code:10, Move window to workspace 1, movetoworkspace, 1
bindd = SUPER SHIFT, code:11, Move window to workspace 2, movetoworkspace, 2
bindd = SUPER SHIFT, code:12, Move window to workspace 3, movetoworkspace, 3
bindd = SUPER SHIFT, code:13, Move window to workspace 4, movetoworkspace, 4
bindd = SUPER SHIFT, code:14, Move window to workspace 5, movetoworkspace, 5
bindd = SUPER SHIFT, code:15, Move window to workspace 6, movetoworkspace, 6
bindd = SUPER SHIFT, code:16, Move window to workspace 7, movetoworkspace, 7
bindd = SUPER SHIFT, code:17, Move window to workspace 8, movetoworkspace, 8
bindd = SUPER SHIFT, code:18, Move window to workspace 9, movetoworkspace, 9
bindd = SUPER SHIFT, code:19, Move window to workspace 10, movetoworkspace, 10
# TAB between workspaces
bindd = SUPER, TAB, Next workspace, workspace, e+1
bindd = SUPER SHIFT, TAB, Previous workspace, workspace, e-1
bindd = SUPER CTRL, TAB, Former workspace, workspace, previous
# Swap active window with the one next to it with SUPER + SHIFT + arrow keys
bindd = SUPER SHIFT, LEFT, Swap window to the left, swapwindow, l
bindd = SUPER SHIFT, RIGHT, Swap window to the right, swapwindow, r
bindd = SUPER SHIFT, UP, Swap window up, swapwindow, u
bindd = SUPER SHIFT, DOWN, Swap window down, swapwindow, d
# Cycle through applications on active workspace
bindd = ALT, TAB, Cycle to next window, cyclenext
bindd = ALT SHIFT, TAB, Cycle to prev window, cyclenext, prev
bindd = ALT, TAB, Reveal active window on top, bringactivetotop
bindd = ALT SHIFT, TAB, Reveal active window on top, bringactivetotop
# Resize active window
bindd = SUPER, code:20, Expand window left, resizeactive, -100 0 # - key
bindd = SUPER, code:21, Shrink window left, resizeactive, 100 0 # = key
bindd = SUPER SHIFT, code:20, Shrink window up, resizeactive, 0 -100
bindd = SUPER SHIFT, code:21, Expand window down, resizeactive, 0 100
# Scroll through existing workspaces with SUPER + scroll
bindd = SUPER, MOUSE_DOWN, Scroll active workspace forward, workspace, e+1
bindd = SUPER, MOUSE_UP, Scroll active workspace backward, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindmd = SUPER, mouse:272, Move window, movewindow
bindmd = SUPER, mouse:273, Resize window, resizewindow
# Toggle groups
bindd = SUPER, G, Toggle window grouping, togglegroup
bindd = SUPER ALT, G, Move active window out of group, moveoutofgroup
# Join groups
bindd = SUPER ALT, LEFT, Move window to group on left, moveintogroup, l
bindd = SUPER ALT, RIGHT, Move window to group on right, moveintogroup, r
bindd = SUPER ALT, UP, Move window to group on top, moveintogroup, u
bindd = SUPER ALT, DOWN, Move window to group on bottom, moveintogroup, d
# Navigate a single set of grouped windows
bindd = SUPER ALT, TAB, Next window in group, changegroupactive, f
bindd = SUPER ALT SHIFT, TAB, Previous window in group, changegroupactive, b
# Activate window in a group by number
bindd = SUPER ALT, 1, Switch to group window 1, changegroupactive, 1
bindd = SUPER ALT, 2, Switch to group window 2, changegroupactive, 2
bindd = SUPER ALT, 3, Switch to group window 3, changegroupactive, 3
bindd = SUPER ALT, 4, Switch to group window 4, changegroupactive, 4
bindd = SUPER ALT, 5, Switch to group window 5, changegroupactive, 5

View File

@@ -1,6 +1,3 @@
# This is now a deprecated file meant for those who did not wish to learn the latest Omarchy hotkeys.
# Do not make changes here, but bring them to tiling-v2.conf instead.
# Close windows # Close windows
bindd = SUPER, W, Close active window, killactive, bindd = SUPER, W, Close active window, killactive,
bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-cmd-close-all-windows bindd = CTRL ALT, DELETE, Close all Windows, exec, omarchy-cmd-close-all-windows
@@ -72,3 +69,24 @@ bindd = SUPER, MOUSE_UP, Scroll active workspace backward, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging # Move/resize windows with mainMod + LMB/RMB and dragging
bindmd = SUPER, mouse:272, Move window, movewindow bindmd = SUPER, mouse:272, Move window, movewindow
bindmd = SUPER, mouse:273, Resize window, resizewindow bindmd = SUPER, mouse:273, Resize window, resizewindow
# Toggle groups
bindd = SUPER ALT, RETURN, Toggle window grouping, togglegroup
bindd = SUPER ALT, BACKSPACE, Move active window out of group, moveoutofgroup
# Join groups
bindd = SUPER ALT, LEFT, Move window to group on left, moveintogroup, l
bindd = SUPER ALT, RIGHT, Move window to group on right, moveintogroup, r
bindd = SUPER ALT, UP, Move window to group on top, moveintogroup, u
bindd = SUPER ALT, DOWN, Move window to group on bottom, moveintogroup, d
# Navigate a single set of grouped windows
bindd = SUPER ALT, TAB, Next window in group, changegroupactive, f
bindd = SUPER ALT SHIFT, TAB, Previous window in group, changegroupactive, b
# Activate window in a group by number
bindd = SUPER ALT, 1, Switch to group window 1, changegroupactive, 1
bindd = SUPER ALT, 2, Switch to group window 2, changegroupactive, 2
bindd = SUPER ALT, 3, Switch to group window 3, changegroupactive, 3
bindd = SUPER ALT, 4, Switch to group window 4, changegroupactive, 4
bindd = SUPER ALT, 5, Switch to group window 5, changegroupactive, 5

View File

@@ -1,6 +1,6 @@
# Menus # Menus
bindd = SUPER, SPACE, Launch apps, exec, omarchy-launch-walker bindd = SUPER, SPACE, Launch apps, exec, walker -p "Start…"
bindd = SUPER CTRL, E, Emoji picker, exec, omarchy-launch-walker -m symbols bindd = SUPER CTRL, E, Emoji picker, exec, walker -m Emojis
bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu
bindd = SUPER, ESCAPE, Power menu, exec, omarchy-menu system bindd = SUPER, ESCAPE, Power menu, exec, omarchy-menu system
bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system
@@ -29,11 +29,23 @@ bindd = CTRL, F1, Apple Display brightness down, exec, omarchy-cmd-apple-display
bindd = CTRL, F2, Apple Display brightness up, exec, omarchy-cmd-apple-display-brightness +5000 bindd = CTRL, F2, Apple Display brightness up, exec, omarchy-cmd-apple-display-brightness +5000
bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, omarchy-cmd-apple-display-brightness +60000 bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, omarchy-cmd-apple-display-brightness +60000
# Captures # Screenshots
bindd = , PRINT, Screenshot, exec, omarchy-cmd-screenshot bindd = , PRINT, Screenshot of region, exec, omarchy-cmd-screenshot
bindd = SHIFT, PRINT, Screenshot, exec, omarchy-cmd-screenshot smart clipboard bindd = SHIFT, PRINT, Screenshot of window, exec, omarchy-cmd-screenshot window
bindd = ALT, PRINT, Screenrecording, exec, omarchy-menu screenrecord bindd = CTRL, PRINT, Screenshot of display, exec, omarchy-cmd-screenshot output
bindd = SUPER, PRINT, Color picking, exec, pkill hyprpicker || hyprpicker -a
# Screen recordings
bindd = ALT, PRINT, Screen record a region, exec, omarchy-cmd-screenrecord region
bindd = ALT SHIFT, PRINT, Screen record a region with audio, exec, omarchy-cmd-screenrecord region audio
bindd = CTRL ALT, PRINT, Screen record display, exec, omarchy-cmd-screenrecord output
bindd = CTRL ALT SHIFT, PRINT, Screen record display with audio, exec, omarchy-cmd-screenrecord output audio
# Color picker
bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a
# File sharing # File sharing
bindd = CTRL SUPER, S, Share, exec, omarchy-menu share bindd = CTRL SUPER, S, Share, exec, omarchy-menu share
# Copy / Paste
bind = SUPER, C, sendshortcut, CTRL, Insert,
bind = SUPER, V, sendshortcut, SHIFT, Insert,

View File

@@ -39,7 +39,9 @@ decoration {
blur { blur {
enabled = true enabled = true
size = 3 size = 3
passes = 3 passes = 1
vibrancy = 0.1696
} }
} }
@@ -59,17 +61,18 @@ group {
indicator_height = 0 indicator_height = 0
indicator_gap = 5 indicator_gap = 5
height = 22 height = 22
gaps_in = 5 gaps_in = 5
gaps_out = 0 gaps_out = 0
text_color = rgb(ffffff) text_color = rgb(ffffff)
text_color_inactive = rgba(ffffff90) text_color_inactive = rgba(ffffff90)
col.active = rgba(00000040) col.active = rgba(00000040)
col.inactive = rgba(00000020) col.inactive = rgba(00000020)
gradients = true gradients = true
gradient_rounding = 0 gradient_rounding = 0
gradient_round_only_edges = false gradient_round_only_edges = false
} }
} }

View File

@@ -1,11 +1,13 @@
anchor=top-right anchor=top-right
default-timeout=5000 default-timeout=5000
width=420 width=420
height=110
outer-margin=20 outer-margin=20
padding=10,15 padding=10,15
border-size=2 border-size=2
max-icon-size=32 max-icon-size=32
font=sans-serif 14px font=sans-serif 14px
format=<span line_height="1.2"><b>%s</b>\n%b</span>
[app-name=Spotify] [app-name=Spotify]
invisible=1 invisible=1
@@ -24,6 +26,3 @@ on-button-left=exec sh -c 'omarchy-notification-dismiss "Setup Wi-Fi"; omarchy-l
[summary~="Update System"] [summary~="Update System"]
on-button-left=exec sh -c 'omarchy-notification-dismiss "Update System"; omarchy-launch-floating-terminal-with-presentation omarchy-update' on-button-left=exec sh -c 'omarchy-notification-dismiss "Update System"; omarchy-launch-floating-terminal-with-presentation omarchy-update'
[summary~="Learn Keybindings"]
on-button-left=exec sh -c 'omarchy-notification-dismiss "Learn Keybindings"; omarchy-menu-keybindings'

View File

@@ -0,0 +1,2 @@
@import url("file://~/.local/share/omarchy/default/walker/themes/omarchy-default.css");
@import url("file://~/.config/omarchy/current/theme/walker.css");

View File

@@ -0,0 +1,10 @@
[ui.window.box]
width = 150
[ui.window.box.scroll.list]
max_width = 150
min_width = 150
width = 150
[ui.window.box.search]
hide = false

View File

@@ -0,0 +1,2 @@
@import url("file://~/.local/share/omarchy/default/walker/themes/omarchy-default.css");
@import url("file://~/.config/omarchy/current/theme/walker.css");

View File

@@ -0,0 +1,11 @@
[ui.window.box]
width = 250
[ui.window.box.scroll.list]
max_width = 250
min_width = 250
width = 250
max_height = 600
[ui.window.box.search]
hide = false

View File

@@ -0,0 +1,2 @@
@import url("file://~/.local/share/omarchy/default/walker/themes/omarchy-default.css");
@import url("file://~/.config/omarchy/current/theme/walker.css");

View File

@@ -0,0 +1,48 @@
[ui.window.box]
width = 964
min_width = 964
max_width = 964
height = 664
min_height = 664
max_height = 664
[ui.window.box.search]
hide = false
[ui.window.box.scroll]
v_align = "fill"
h_align = "fill"
min_width = 964
width = 964
max_width = 964
min_height = 664
height = 664
max_height = 664
[ui.window.box.scroll.list]
v_align = "fill"
h_align = "fill"
min_width = 900
width = 900
max_width = 900
min_height = 600
height = 600
max_height = 600
[ui.window.box.scroll.list.item]
h_align = "fill"
min_width = 900
width = 900
max_width = 900
[ui.window.box.scroll.list.item.activation_label]
hide = true
[ui.window.box.scroll.list.placeholder]
v_align = "start"
h_align = "fill"
hide = false
min_width = 900
width = 900
max_width = 900

View File

@@ -0,0 +1,169 @@
/* Reset all elements */
#window,
#box,
#search,
#password,
#input,
#prompt,
#clear,
#typeahead,
#list,
child,
scrollbar,
slider,
#item,
#text,
#label,
#sub,
#activationlabel {
all: unset;
}
* {
font-family: monospace;
font-size: 18px;
}
/* Window */
#window {
background: transparent;
color: @text;
}
/* Main box container */
#box {
background: alpha(@base, 0.95);
padding: 20px;
border: 2px solid @border;
border-radius: 0px;
}
/* Search container */
#search {
background: @base;
padding: 10px;
margin-bottom: 0;
}
/* Hide prompt icon */
#prompt {
opacity: 0;
min-width: 0;
margin: 0;
}
/* Hide clear button */
#clear {
opacity: 0;
min-width: 0;
}
/* Input field */
#input {
background: none;
color: @text;
padding: 0;
}
#input placeholder {
opacity: 0.5;
color: @text;
}
/* Hide typeahead */
#typeahead {
opacity: 0;
}
/* List */
#list {
background: transparent;
}
/* List items */
child {
padding: 0px 12px;
background: transparent;
border-radius: 0;
}
child:selected,
child:hover {
background: transparent;
}
/* Item layout */
#item {
padding: 0;
}
#item.active {
font-style: italic;
}
/* Icon */
#icon {
margin-right: 10px;
-gtk-icon-transform: scale(0.7);
}
/* Text */
#text {
color: @text;
padding: 14px 0;
}
#label {
font-weight: normal;
}
/* Selected state */
child:selected #text,
child:selected #label,
child:hover #text,
child:hover #label {
color: @selected-text;
}
/* Hide sub text */
#sub {
opacity: 0;
font-size: 0;
min-height: 0;
}
/* Hide activation label */
#activationlabel {
opacity: 0;
min-width: 0;
}
/* Scrollbar styling */
scrollbar {
opacity: 0;
}
/* Hide spinner */
#spinner {
opacity: 0;
}
/* Hide AI elements */
#aiScroll,
#aiList,
.aiItem {
opacity: 0;
min-height: 0;
}
/* Bar entry (switcher) */
#bar {
opacity: 0;
min-height: 0;
}
.barentry {
opacity: 0;
}
@import url("file://~/.config/omarchy/current/theme/walker.css");

View File

@@ -0,0 +1,16 @@
[ui.window.box]
width = 664
min_width = 664
max_width = 664
height = 396
min_height = 396
max_height = 396
# List constraints are critical - without these, the window shrinks when empty
[ui.window.box.scroll.list]
height = 300
min_height = 300
max_height = 300
[ui.window.box.scroll.list.item.icon]
pixel_size = 40

View File

@@ -1,129 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"></requires>
<object class="GtkWindow" id="Window">
<style>
<class name="window"></class>
</style>
<property name="resizable">true</property>
<property name="title">Walker</property>
<child>
<object class="GtkBox" id="BoxWrapper">
<style>
<class name="box-wrapper"></class>
</style>
<property name="width-request">644</property>
<property name="overflow">hidden</property>
<property name="orientation">horizontal</property>
<property name="valign">center</property>
<property name="halign">center</property>
<child>
<object class="GtkBox" id="Box">
<style>
<class name="box"></class>
</style>
<property name="orientation">vertical</property>
<property name="hexpand-set">true</property>
<property name="hexpand">true</property>
<property name="spacing">10</property>
<child>
<object class="GtkBox" id="SearchContainer">
<style>
<class name="search-container"></class>
</style>
<property name="overflow">hidden</property>
<property name="orientation">horizontal</property>
<property name="halign">fill</property>
<property name="hexpand-set">true</property>
<property name="hexpand">true</property>
<child>
<object class="GtkEntry" id="Input">
<style>
<class name="input"></class>
</style>
<property name="halign">fill</property>
<property name="hexpand-set">true</property>
<property name="hexpand">true</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="ContentContainer">
<style>
<class name="content-container"></class>
</style>
<property name="orientation">horizontal</property>
<property name="spacing">10</property>
<property name="vexpand">true</property>
<property name="vexpand-set">true</property>
<child>
<object class="GtkLabel" id="ElephantHint">
<style>
<class name="elephant-hint"></class>
</style>
<property name="hexpand">true</property>
<property name="height-request">100</property>
<property name="label">Waiting for elephant...</property>
</object>
</child>
<child>
<object class="GtkLabel" id="Placeholder">
<style>
<class name="placeholder"></class>
</style>
<property name="label">No Results</property>
<property name="yalign">0.0</property>
<property name="hexpand">true</property>
</object>
</child>
<child>
<object class="GtkScrolledWindow" id="Scroll">
<style>
<class name="scroll"></class>
</style>
<property name="hexpand">true</property>
<property name="can_focus">false</property>
<property name="overlay-scrolling">true</property>
<property name="max-content-width">600</property>
<property name="max-content-height">300</property>
<property name="min-content-height">0</property>
<property name="propagate-natural-height">true</property>
<property name="propagate-natural-width">true</property>
<property name="hscrollbar-policy">automatic</property>
<property name="vscrollbar-policy">automatic</property>
<child>
<object class="GtkGridView" id="List">
<style>
<class name="list"></class>
</style>
<property name="max_columns">1</property>
<property name="can_focus">false</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox" id="Preview">
<style>
<class name="preview"></class>
</style>
</object>
</child>
</object>
</child>
<child>
<object class="GtkLabel" id="Error">
<style>
<class name="error"></class>
</style>
<property name="xalign">0</property>
<property name="visible">false</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>

View File

@@ -1,117 +0,0 @@
@import "../../../../../../../.config/omarchy/current/theme/walker.css";
* {
all: unset;
}
* {
font-family: monospace;
font-size: 18px;
color: @text;
}
scrollbar {
opacity: 0;
}
.normal-icons {
-gtk-icon-size: 16px;
}
.large-icons {
-gtk-icon-size: 32px;
}
.box-wrapper {
background: alpha(@base, 0.95);
padding: 20px;
border: 2px solid @border;
}
.preview-box {
}
.box {
}
.search-container {
background: @base;
padding: 10px;
}
.input placeholder {
opacity: 0.5;
}
.input {
}
.input:focus,
.input:active {
box-shadow: none;
outline: none;
}
.content-container {
}
.placeholder {
}
.scroll {
}
.list {
}
child,
child > * {
}
child:hover .item-box {
}
child:selected .item-box {
}
child:selected .item-box * {
color: @selected-text;
}
.item-box {
padding-left: 14px;
}
.item-text-box {
all: unset;
padding: 14px 0;
}
.item-text {
}
.item-subtext {
font-size: 0px;
min-height: 0px;
margin: 0px;
padding: 0px;
}
.item-image {
margin-right: 14px;
-gtk-icon-transform: scale(0.9);
}
.current {
font-style: italic;
}
.keybind-hints {
background: @background;
padding: 10px;
margin-top: 10px;
}
.preview {
background: @background;
}

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
if pgrep -f "gpu-screen-recorder" >/dev/null; then if pgrep -x wl-screenrec >/dev/null || pgrep -x wf-recorder >/dev/null; then
echo '{"text": "󰻂", "tooltip": "Stop recording", "class": "active"}' echo '{"text": "󰻂", "tooltip": "Stop recording", "class": "active"}'
else else
echo '{"text": ""}' echo '{"text": ""}'

View File

@@ -14,7 +14,6 @@ run_logged $OMARCHY_INSTALL/config/fix-powerprofilesctl-shebang.sh
run_logged $OMARCHY_INSTALL/config/docker.sh run_logged $OMARCHY_INSTALL/config/docker.sh
run_logged $OMARCHY_INSTALL/config/mimetypes.sh run_logged $OMARCHY_INSTALL/config/mimetypes.sh
run_logged $OMARCHY_INSTALL/config/localdb.sh run_logged $OMARCHY_INSTALL/config/localdb.sh
run_logged $OMARCHY_INSTALL/config/walker-elephant.sh
run_logged $OMARCHY_INSTALL/config/fast-shutdown.sh run_logged $OMARCHY_INSTALL/config/fast-shutdown.sh
run_logged $OMARCHY_INSTALL/config/sudoless-asdcontrol.sh run_logged $OMARCHY_INSTALL/config/sudoless-asdcontrol.sh
run_logged $OMARCHY_INSTALL/config/hardware/network.sh run_logged $OMARCHY_INSTALL/config/hardware/network.sh
@@ -26,7 +25,6 @@ run_logged $OMARCHY_INSTALL/config/hardware/usb-autosuspend.sh
run_logged $OMARCHY_INSTALL/config/hardware/ignore-power-button.sh run_logged $OMARCHY_INSTALL/config/hardware/ignore-power-button.sh
run_logged $OMARCHY_INSTALL/config/hardware/nvidia.sh run_logged $OMARCHY_INSTALL/config/hardware/nvidia.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-f13-amd-audio-input.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-f13-amd-audio-input.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-bcm43xx.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-bcm43xx.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-spi-keyboard.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-spi-keyboard.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-suspend-nvme.sh
run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-t2.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-t2.sh

0
install/config/fast-shutdown.sh Normal file → Executable file
View File

View File

@@ -0,0 +1,11 @@
# Install Wi-Fi drivers for Broadcom chips on MacBooks:
# - BCM4360 (20132015)
# - BCM4331 (2012, early 2013)
pci_info=$(lspci -nnv)
if echo "$pci_info" | grep -q "106b:" &&
(echo "$pci_info" | grep -q "14e4:43a0" || echo "$pci_info" | grep -q "14e4:4331"); then
echo "Apple BCM4360 / BCM4331 detected"
sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers
fi

View File

@@ -1,30 +0,0 @@
# Fix NVMe suspend issues on MacBook models
# This prevents NVMe drives from failing to wake from sleep properly
MACBOOK_MODEL=$(cat /sys/class/dmi/id/product_name 2>/dev/null || true)
if [[ "$MACBOOK_MODEL" =~ MacBook(8,1|9,1|10,1)|MacBookPro13,[123]|MacBookPro14,[123] ]]; then
echo "Detected MacBook model: $MACBOOK_MODEL"
NVME_DEVICE="/sys/bus/pci/devices/0000:01:00.0/d3cold_allowed"
if [[ -f "$NVME_DEVICE" ]]; then
echo "Applying NVMe suspend fix..."
cat <<EOF | sudo tee /etc/systemd/system/omarchy-nvme-suspend-fix.service >/dev/null
[Unit]
Description=Omarchy NVMe Suspend Fix for MacBook
[Service]
ExecStart=/bin/bash -c 'echo 0 > /sys/bus/pci/devices/0000\:01\:00.0/d3cold_allowed'
[Install]
WantedBy=multi-user.target
EOF
chrootable_systemctl_enable omarchy-nvme-suspend-fix.service
sudo systemctl daemon-reload
else
echo "Warning: NVMe device not found at expected PCI address (0000:01:00.0)"
echo "This fix may not be needed for this MacBook model"
fi
fi

View File

@@ -1,10 +0,0 @@
# Install Wi-Fi drivers for Broadcom chips found in some MacBooks, as well as other systems:
# - BCM4360 (20132015 MacBooks)
# - BCM4331 (2012, early 2013 MacBooks)
pci_info=$(lspci -nnv)
if (echo "$pci_info" | grep -q "14e4:43a0" || echo "$pci_info" | grep -q "14e4:4331"); then
echo "BCM4360 / BCM4331 detected"
sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers
fi

View File

@@ -6,7 +6,7 @@ echo -e "[Resolve]\nMulticastDNS=no" | sudo tee /etc/systemd/resolved.conf.d/10-
chrootable_systemctl_enable avahi-daemon.service chrootable_systemctl_enable avahi-daemon.service
# Enable mDNS resolution for .local domains # Enable mDNS resolution for .local domains
sudo sed -i 's/^hosts:.*/hosts: mymachines mdns_minimal [NOTFOUND=return] resolve files myhostname dns/' /etc/nsswitch.conf sudo sed -i 's/^hosts:.*/hosts: mymachines mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns/' /etc/nsswitch.conf
# Enable automatically adding remote printers # Enable automatically adding remote printers
if ! grep -q '^CreateRemotePrinters Yes' /etc/cups/cups-browsed.conf; then if ! grep -q '^CreateRemotePrinters Yes' /etc/cups/cups-browsed.conf; then

View File

@@ -0,0 +1 @@
omarchy-lazyvim-setup

View File

@@ -7,19 +7,3 @@ _.path = "{{ cwd }}/bin"
EOF EOF
mise trust ~/Work/.mise.toml mise trust ~/Work/.mise.toml
if [[ -n "${OMARCHY_CHROOT_INSTALL:-}" ]]; then
NODE_TARBALL=$(find /opt/packages -name "node-v*-linux-x64.tar.gz" -type f 2>/dev/null | head -n1)
NODE_VERSION=$(basename "$NODE_TARBALL" | sed 's/node-v\(.*\)-linux-x64.tar.gz/\1/')
NODE_INSTALL_DIR="$HOME/.local/share/mise/installs/node/$NODE_VERSION"
mkdir -p "$NODE_INSTALL_DIR"
tar -xzf "$NODE_TARBALL" \
--strip-components=1 \
-C "$NODE_INSTALL_DIR"
mise use -g node@"$NODE_VERSION"
else
mise use -g node@latest
fi

View File

@@ -12,7 +12,7 @@ ln -snf ~/.config/omarchy/themes/tokyo-night ~/.config/omarchy/current/theme
ln -snf ~/.config/omarchy/current/theme/backgrounds/1-scenery-pink-lakeside-sunset-lake-landscape-scenic-panorama-7680x3215-144.png ~/.config/omarchy/current/background ln -snf ~/.config/omarchy/current/theme/backgrounds/1-scenery-pink-lakeside-sunset-lake-landscape-scenic-panorama-7680x3215-144.png ~/.config/omarchy/current/background
# Set specific app links for current theme # Set specific app links for current theme
# ~/.config/omarchy/current/theme/neovim.lua -> ~/.config/nvim/lua/plugins/theme.lua is handled via omarchy-setup-nvim ln -snf ~/.config/omarchy/current/theme/neovim.lua ~/.config/nvim/lua/plugins/theme.lua
mkdir -p ~/.config/btop/themes mkdir -p ~/.config/btop/themes
ln -snf ~/.config/omarchy/current/theme/btop.theme ~/.config/btop/themes/current.theme ln -snf ~/.config/omarchy/current/theme/btop.theme ~/.config/btop/themes/current.theme

View File

@@ -1,17 +0,0 @@
#!/bin/bash
# Create pacman hook to restart walker after updates
sudo mkdir -p /etc/pacman.d/hooks
sudo tee /etc/pacman.d/hooks/walker-restart.hook > /dev/null << EOF
[Trigger]
Type = Package
Operation = Upgrade
Target = walker
Target = walker-debug
Target = elephant*
[Action]
Description = Restarting Walker services after system update
When = PostTransaction
Exec = $OMARCHY_PATH/bin/omarchy-restart-walker
EOF

View File

@@ -1,2 +1,2 @@
notify-send " Update System" "When you have internet, click to update the system." -u critical notify-send " Update System" "When you have internet, click to update the system." -u critical
notify-send " Learn Keybindings" "Super + K for cheatsheet.\nSuper + Space for application launcher.\nSuper + Alt + Space for Omarchy Menu." -u critical notify-send "👋 Welcome to Omarchy" "You're in for a great computing adventure. Have fun!" -t 30000

View File

@@ -11,5 +11,6 @@ Current=breeze
EOF EOF
fi fi
# Don't use chrootable here as --now will cause issues for manual installs echo "$USER ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart sddm" | sudo tee /etc/sudoers.d/allow-passwordless-restart-sddm
sudo systemctl enable sddm.service
chrootable_systemctl_enable sddm.service

View File

@@ -1,9 +1,8 @@
# Omarchy core package list installed via install/packaging/base.sh # Omarchy core package list installed via install/packages.sh
# This file is also used by the ISO builder when determining needs # This file is also used by the ISO builder when determining needs
1password-beta 1password-beta
1password-cli 1password-cli
aether
alacritty alacritty
asdcontrol asdcontrol
avahi avahi
@@ -22,19 +21,6 @@ docker
docker-buildx docker-buildx
docker-compose docker-compose
dust dust
elephant
elephant-bluetooth
elephant-calc
elephant-clipboard
elephant-desktopapplications
elephant-files
elephant-menus
elephant-providerlist
elephant-runner
elephant-symbols
elephant-todo
elephant-unicode
elephant-websearch
evince evince
eza eza
fastfetch fastfetch
@@ -49,17 +35,15 @@ github-cli
gnome-calculator gnome-calculator
gnome-keyring gnome-keyring
gnome-themes-extra gnome-themes-extra
grim
gpu-screen-recorder
gum gum
gvfs-mtp gvfs-mtp
gvfs-nfs
gvfs-smb gvfs-smb
hypridle hypridle
hyprland hyprland
hyprland-qtutils hyprland-qtutils
hyprlock hyprlock
hyprpicker hyprpicker
hyprshot
hyprsunset hyprsunset
imagemagick imagemagick
impala impala
@@ -95,7 +79,7 @@ nvim
obs-studio obs-studio
obsidian obsidian
omarchy-chromium omarchy-chromium
omarchy-nvim omarchy-lazyvim
pamixer pamixer
pinta pinta
playerctl playerctl
@@ -130,14 +114,16 @@ ufw
ufw-docker ufw-docker
unzip unzip
uwsm uwsm
walker walker-bin
waybar waybar
wayfreeze-git wf-recorder
whois whois
wireless-regdb wireless-regdb
wiremix wiremix
wireplumber wireplumber
wl-clip-persist
wl-clipboard wl-clipboard
wl-screenrec
woff2-font-awesome woff2-font-awesome
xdg-desktop-portal-gtk xdg-desktop-portal-gtk
xdg-desktop-portal-hyprland xdg-desktop-portal-hyprland

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