Compare commits

..

1 Commits

Author SHA1 Message Date
David Heinemeier Hansson
fd632f90e1 Add optional extra install for hyprscrolling 2025-10-20 16:34:13 -07:00
257 changed files with 728 additions and 2150 deletions

View File

@@ -1,5 +1,5 @@
name: Bug
description: Report a validated bug -- NOT FOR SUPPORT REQUESTS
description: Report a problem
labels: [bug]
body:
- type: markdown
@@ -19,6 +19,5 @@ body:
id: steps
attributes:
label: What's wrong?
description: Describe the issue, include steps to recreate it if possible, and attach the output of `omarchy-debug` if possible
validations:
required: true

View File

@@ -1,8 +1 @@
blank_issues_enabled: false
contact_links:
- name: Suggestion
url: https://github.com/basecamp/omarchy/discussions/categories/suggestions
about: Suggest a new feature, change to existing feature, or other ideas in Discussions.
- name: Support
url: https://omarchy.org/discord
about: Need help? Join our Discord community for support with any issues. GitHub issues should be used for verified bugs only.

View File

@@ -0,0 +1,15 @@
name: Documentation
description: New pages or changes to existing
labels: [documentation]
body:
- type: markdown
attributes:
value: |
Remember: Omarchy is an open source gift, not a product you bought from a vendor
- type: textarea
id: steps
attributes:
label: What correction or addition do we need?
validations:
required: true

15
.github/ISSUE_TEMPLATE/enhancement.yml vendored Normal file
View File

@@ -0,0 +1,15 @@
name: Enhancement
description: Feature or change
labels: [enhancement]
body:
- type: markdown
attributes:
value: |
Remember: Omarchy is an open source gift, not a product you bought from a vendor
- type: textarea
id: steps
attributes:
label: What do you need?
validations:
required: true

View File

@@ -1,9 +1,10 @@
# Omarchy
Omarchy is a beautiful, modern & opinionated Linux distribution by DHH.
Turn a fresh Arch installation into a fully-configured, beautiful, and modern web development system based on Hyprland by running a single command. That's the one-line pitch for Omarchy (like it was for Omakub). No need to write bespoke configs for every essential tool just to get started or to be up on all the latest command-line tools. Omarchy is an opinionated take on what Linux can be at its best.
Read more at [omarchy.org](https://omarchy.org).
## License
Omarchy is released under the [MIT License](https://opensource.org/licenses/MIT).

12
applications/nvim.desktop Normal file
View File

@@ -0,0 +1,12 @@
[Desktop Entry]
Name=Neovim
GenericName=Text Editor
Comment=Edit text files
Exec=omarchy-launch-editor %F
Terminal=false
Type=Application
Keywords=Text;editor;
Icon=nvim
Categories=Utility;TextEditor;
StartupNotify=false
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;

View File

@@ -1,7 +0,0 @@
[Desktop Entry]
Name=Walker
Comment=Walker Service
Exec=walker --gapplication-service
StartupNotify=false
Terminal=false
Type=Application

View File

@@ -4,20 +4,33 @@
BATTERY_THRESHOLD=10
NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified"
BATTERY_LEVEL=$(omarchy-battery-remaining)
BATTERY_STATE=$(upower -i $(upower -e | grep 'BAT') | grep -E "state" | awk '{print $2}')
get_battery_percentage() {
upower -i "$(upower -e | grep 'BAT')" \
| awk -F: '/percentage/ {
gsub(/[%[:space:]]/, "", $2);
val=$2;
printf("%d\n", (val+0.5))
exit
}'
}
get_battery_state() {
upower -i $(upower -e | grep 'BAT') | grep -E "state" | awk '{print $2}'
}
send_notification() {
notify-send -u critical "󱐋 Time to recharge!" "Battery is down to ${1}%" -i battery-caution -t 30000
}
if [[ -n "$BATTERY_LEVEL" && "$BATTERY_LEVEL" =~ ^[0-9]+$ ]]; then
if [[ $BATTERY_STATE == "discharging" && $BATTERY_LEVEL -le $BATTERY_THRESHOLD ]]; then
if [[ ! -f $NOTIFICATION_FLAG ]]; then
send_notification $BATTERY_LEVEL
touch $NOTIFICATION_FLAG
fi
else
rm -f $NOTIFICATION_FLAG
BATTERY_LEVEL=$(get_battery_percentage)
BATTERY_STATE=$(get_battery_state)
if [[ "$BATTERY_STATE" == "discharging" && "$BATTERY_LEVEL" -le "$BATTERY_THRESHOLD" ]]; then
if [[ ! -f "$NOTIFICATION_FLAG" ]]; then
send_notification "$BATTERY_LEVEL"
touch "$NOTIFICATION_FLAG"
fi
else
rm -f "$NOTIFICATION_FLAG"
fi

View File

@@ -1,11 +0,0 @@
#!/bin/bash
# Returns the battery percentage remaining as an integer.
upower -i $(upower -e | grep BAT) \
| awk -F: '/percentage/ {
gsub(/[%[:space:]]/, "", $2);
val=$2;
printf("%d\n", (val+0.5))
exit
}'

View File

@@ -1,14 +0,0 @@
#!/bin/bash
if (($# == 0)); then
echo "Usage: omarchy-branch-set [master|dev]"
exit 1
else
branch="$1"
fi
case "$branch" in
"master") git -C $OMARCHY_PATH switch master ;;
"dev") git -C $OMARCHY_PATH switch dev ;;
*) echo "Unknown branch: $branch"; exit 1; ;;
esac

View File

@@ -1,15 +0,0 @@
#!/bin/bash
if (($# == 0)); then
echo "Usage: omarchy-channel-set [stable|edge|dev]"
exit 1
else
channel="$1"
fi
case "$channel" in
"stable") omarchy-branch-set "master" && omarchy-refresh-pacman "stable" ;;
"edge") omarchy-branch-set "master" && omarchy-refresh-pacman "edge" ;;
"dev") omarchy-branch-set "dev" && omarchy-refresh-pacman "edge" ;;
*) echo "Unknown channel: $channel"; exit 1; ;;
esac

View File

@@ -12,9 +12,8 @@ if [[ -f "$FIRST_RUN_MODE" ]]; then
bash "$OMARCHY_PATH/install/first-run/firewall.sh"
bash "$OMARCHY_PATH/install/first-run/dns-resolver.sh"
bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh"
bash "$OMARCHY_PATH/install/first-run/elephant.sh"
sudo rm -f /etc/sudoers.d/first-run
bash "$OMARCHY_PATH/install/first-run/welcome.sh"
bash "$OMARCHY_PATH/install/first-run/wifi.sh"
bash "$OMARCHY_PATH/install/first-run/welcome.sh"
fi

View File

@@ -1,6 +0,0 @@
#!/bin/bash
omarchy-state clear re*-required
omarchy-hyprland-window-close-all
sleep 1 # Allow apps like Chrome to shutdown correctly
systemctl reboot --no-wall

View File

@@ -8,17 +8,15 @@ if [[ ! -d "$OUTPUT_DIR" ]]; then
exit 1
fi
DESKTOP_AUDIO="false"
MICROPHONE_AUDIO="false"
SCOPE=""
AUDIO="false"
WEBCAM="false"
STOP_RECORDING="false"
for arg in "$@"; do
case "$arg" in
--with-desktop-audio) DESKTOP_AUDIO="true" ;;
--with-microphone-audio) MICROPHONE_AUDIO="true" ;;
--with-audio) AUDIO="true" ;;
--with-webcam) WEBCAM="true" ;;
--stop-recording) STOP_RECORDING="true"
output|region) SCOPE="$arg" ;;
esac
done
@@ -59,35 +57,27 @@ start_webcam_overlay() {
start_screenrecording() {
local filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4"
local audio_devices=""
local audio_args=""
[[ "$DESKTOP_AUDIO" == "true" ]] && audio_devices+="default_output"
# Merge audio tracks into one - separate tracks only play one at a time in most players
[[ "$AUDIO" == "true" ]] && audio_args="-a default_output|default_input"
if [[ "$MICROPHONE_AUDIO" == "true" ]]; then
# Merge audio tracks into one - separate tracks only play one at a time in most players
[[ -n "$audio_devices" ]] && audio_devices+="|"
audio_devices+="default_input"
fi
[[ -n "$audio_devices" ]] && audio_args+="-a $audio_devices"
gpu-screen-recorder -w portal -f 60 -fallback-cpu-encoding yes -o "$filename" $audio_args -ac aac &
gpu-screen-recorder -w "$@" -f 60 -c mp4 -o "$filename" $audio_args &
toggle_screenrecording_indicator
}
stop_screenrecording() {
pkill -SIGINT -f "^gpu-screen-recorder" # SIGINT required to save video properly
pkill -SIGINT -f "gpu-screen-recorder" # SIGINT required to save video properly
# Wait a maximum of 5 seconds to finish before hard killing
local count=0
while pgrep -f "^gpu-screen-recorder" >/dev/null && [ $count -lt 50 ]; do
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
pkill -9 -f "^gpu-screen-recorder"
if pgrep -f "gpu-screen-recorder" >/dev/null; then
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
@@ -102,19 +92,51 @@ toggle_screenrecording_indicator() {
}
screenrecording_active() {
pgrep -f "^gpu-screen-recorder" >/dev/null || pgrep -f "WebcamOverlay" >/dev/null
pgrep -f "gpu-screen-recorder" >/dev/null || pgrep -x slurp >/dev/null || pgrep -f "WebcamOverlay" >/dev/null
}
if screenrecording_active; then
if pgrep -f "WebcamOverlay" >/dev/null && ! pgrep -f "^gpu-screen-recorder" >/dev/null; then
if pgrep -x slurp >/dev/null; then
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 [[ "$STOP_RECORDING" == "false" ]]; then
elif [[ "$SCOPE" == "output" ]]; then
[[ "$WEBCAM" == "true" ]] && start_webcam_overlay
start_screenrecording || cleanup_webcam
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
exit 1
[[ "$WEBCAM" == "true" ]] && start_webcam_overlay
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

View File

@@ -1,30 +1,28 @@
#!/bin/bash
screensaver_in_focus() {
hyprctl activewindow -j | jq -e '.class == "org.omarchy.screensaver"' >/dev/null 2>&1
hyprctl activewindow -j | jq -e '.class == "Screensaver"' >/dev/null 2>&1
}
exit_screensaver() {
hyprctl keyword cursor:invisible false
pkill -x tte 2>/dev/null
pkill -f org.omarchy.screensaver 2>/dev/null
pkill -f "alacritty --class Screensaver" 2>/dev/null
exit 0
}
trap exit_screensaver SIGINT SIGTERM SIGHUP SIGQUIT
printf '\033]11;rgb:00/00/00\007' # Set background color to black
hyprctl keyword cursor:invisible true &>/dev/null
while true; do
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 \
--frame-rate 120 --canvas-width 0 --canvas-height 0 --reuse-canvas --anchor-canvas c --anchor-text c\
--random-effect --exclude-effects dev_worm \
--no-eol --no-restore-cursor &
--frame-rate 240 --canvas-width 0 --canvas-height $(($(tput lines) - 2)) --anchor-canvas c --anchor-text c \
"$effect" &
while pgrep -x tte >/dev/null; do
if read -n 1 -t 1 || ! screensaver_in_focus; then
if read -n 1 -t 3 || ! screensaver_in_focus; then
exit_screensaver
fi
done

View File

@@ -1,6 +0,0 @@
#!/bin/bash
omarchy-state clear re*-required
omarchy-hyprland-window-close-all
sleep 1 # Allow apps like Chrome to shutdown correctly
systemctl poweroff --no-wall

View File

@@ -6,10 +6,8 @@ shell_pid=$(pgrep -P "$terminal_pid" | tail -n1)
if [[ -n $shell_pid ]]; then
cwd=$(readlink -f "/proc/$shell_pid/cwd" 2>/dev/null)
shell=$(readlink -f "/proc/$shell_pid/exe" 2>/dev/null)
# Check if $shell is a valid shell and $cwd is a directory.
if grep -qs "$shell" /etc/shells && [[ -d $cwd ]]; then
if [[ -d $cwd ]]; then
echo "$cwd"
else
echo "$HOME"

View File

@@ -1,61 +0,0 @@
#!/bin/bash
LOG_FILE="/tmp/omarchy-debug.log"
cat > "$LOG_FILE" <<EOF
Date: $(date)
Hostname: $(hostname)
Omarchy Branch: $(git -C "$OMARCHY_PATH" branch --show-current 2>/dev/null || echo "unknown")
=========================================
SYSTEM INFORMATION
=========================================
$(inxi -Farz)
=========================================
DMESG
=========================================
$(sudo dmesg)
=========================================
JOURNALCTL (CURRENT BOOT, ERRORS ONLY)
=========================================
$(journalctl -b -p 4..1)
=========================================
INSTALLED PACKAGES
=========================================
$({ expac -S '%n %v (%r)' $(pacman -Qqe) 2>/dev/null; comm -13 <(pacman -Sql | sort) <(pacman -Qqe | sort) | xargs -r expac -Q '%n %v (AUR)'; } | sort)
EOF
OPTIONS=("View log" "Save in current directory")
if ping -c 1 8.8.8.8 >/dev/null 2>&1; then
OPTIONS=("Upload log" "${OPTIONS[@]}")
fi
ACTION=$(gum choose "${OPTIONS[@]}")
case "$ACTION" in
"Upload log")
echo "Uploading debug log to 0x0.st..."
URL=$(curl -sF "file=@$LOG_FILE" -Fexpires=24 https://0x0.st)
if [ $? -eq 0 ] && [ -n "$URL" ]; then
echo "✓ Log uploaded successfully!"
echo "Share this URL:"
echo ""
echo " $URL"
echo ""
echo "This link will expire in 24 hours."
else
echo "Error: Failed to upload log file"
exit 1
fi
;;
"View log")
less "$LOG_FILE"
;;
"Save in current directory")
cp "$LOG_FILE" "./omarchy-debug.log"
echo "✓ Log saved to $(pwd)/omarchy-debug.log"
;;
esac

View File

@@ -18,7 +18,6 @@ if [[ -n "$font_name" && "$font_name" != "CNCLD" ]]; then
pkill -SIGUSR2 ghostty
fi
sed -i "s/font_family = .*/font_family = $font_name/g" ~/.config/hypr/hyprlock.conf
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/waybar/style.css
sed -i "s/font-family: .*/font-family: '$font_name';/g" ~/.config/swayosd/style.css
xmlstarlet ed -L \
@@ -28,10 +27,7 @@ if [[ -n "$font_name" && "$font_name" != "CNCLD" ]]; then
omarchy-restart-waybar
omarchy-restart-swayosd
if pgrep -x ghostty; then
notify-send " You must restart Ghostty to see font change"
fi
omarchy-restart-walker
omarchy-hook font-set "$font_name"
else

View File

@@ -1,7 +1,5 @@
#!/bin/bash
set -e
if [[ $# -lt 1 ]]; then
echo "Usage: omarchy-hook [name] [args...]"
exit 1

View File

@@ -1,46 +0,0 @@
#!/bin/bash
# Toggle to pop-out a tile to stay fixed on a display basis.
# Usage:
# omarchy-hyprland-window-pop [width height [x y]]
#
# Arguments:
# width Optional. Width of the floating window. Default: 1300
# height Optional. Height of the floating window. Default: 900
# x Optional. X position of the window. Must provide both X and Y to take effect.
# y Optional. Y position of the window. Must provide both X and Y to take effect.
#
# Behavior:
# - If the window is already pinned, it will be unpinned and removed from the pop layer.
# - If the window is not pinned, it will be floated, resized, moved/centered, pinned, brought to top, and popped.
width=${1:-1300}
height=${2:-900}
x=${3:-}
y=${4:-}
active=$(hyprctl activewindow -j)
pinned=$(echo "$active" | jq ".pinned")
addr=$(echo "$active" | jq -r ".address")
if [[ $pinned == "true" ]]; then
hyprctl -q --batch \
"dispatch pin address:$addr;" \
"dispatch togglefloating address:$addr;" \
"dispatch tagwindow -pop address:$addr;"
elif [[ -n $addr ]]; then
hyprctl dispatch togglefloating address:$addr
hyprctl dispatch resizeactive exact $width $height address:$addr
if [[ -n $x && -n $y ]]; then
hyprctl dispatch moveactive $x $y address:$addr
else
hyprctl dispatch centerwindow address:$addr
fi
hyprctl -q --batch \
"dispatch pin address:$addr;" \
"dispatch alterzorder top address:$addr;" \
"dispatch tagwindow +pop address:$addr;"
fi

View File

@@ -1,10 +0,0 @@
#!/bin/bash
workspace_id=$(hyprctl activeworkspace -j | jq -r .id)
gaps=$(hyprctl workspacerules -j | jq -r ".[] | select(.workspaceString==\"$workspace_id\") | .gapsOut[0] // 0")
if [[ $gaps == "0" ]]; then
hyprctl keyword "workspace $workspace_id, gapsout:10, gapsin:5, bordersize:2"
else \
hyprctl keyword "workspace $workspace_id, gapsout:0, gapsin:0, bordersize:0"
fi

View File

@@ -50,7 +50,6 @@ ruby)
omarchy-pkg-add libyaml
mise use --global ruby@latest
mise settings add idiomatic_version_file_enable_tools ruby
echo "gem: --no-document" > ~/.gemrc
mise x ruby -- gem install rails --no-document
echo -e "\nYou can now run: rails new myproject"
;;

View File

@@ -0,0 +1,12 @@
#!/bin/bash
echo "Installing hyprscrolling plugin"
omarchy-pkg-add meson cpio cmake
hyprpm update
hyprpm add https://github.com/hyprwm/hyprland-plugins
hyprpm enable hyprscrolling
if ! grep -q '/hypr/scrolling\.conf' ~/.config/hypr/hyprland.conf; then
sed -i '/source = ~\/\.local\/share\/omarchy\/default\/hypr\/windows\.conf/a source = ~/.local/share/omarchy/default/hypr/scrolling.conf' ~/.config/hypr/hyprland.conf
fi

View File

@@ -1,7 +1,5 @@
#!/bin/bash
set -e
echo "Now pick dependencies matching your graphics card"
sudo pacman -S steam
sudo pacman -Syu --noconfirm steam
setsid gtk-launch steam >/dev/null 2>&1 &

View File

@@ -7,53 +7,15 @@ fi
package="$1"
# Map package name to desktop entry ID
case "$package" in
alacritty) desktop_id="Alacritty.desktop" ;;
ghostty) desktop_id="com.mitchellh.ghostty.desktop" ;;
kitty) desktop_id="kitty.desktop" ;;
*)
echo "Unknown terminal: $package"
exit 1
;;
esac
# Install package
if omarchy-pkg-add $package; then
# Copy custom desktop entry for alacritty with X-TerminalArg* keys
if [[ $package == "alacritty" ]]; then
mkdir -p ~/.local/share/applications
cat > ~/.local/share/applications/Alacritty.desktop << EOF
[Desktop Entry]
Type=Application
TryExec=alacritty
Exec=alacritty
Icon=Alacritty
Terminal=false
Categories=System;TerminalEmulator;
Name=Alacritty
GenericName=Terminal
Comment=A fast, cross-platform, OpenGL terminal emulator
StartupNotify=true
StartupWMClass=Alacritty
Actions=New;
X-TerminalArgExec=-e
X-TerminalArgAppId=--class=
X-TerminalArgTitle=--title=
X-TerminalArgDir=--working-directory=
# Set as default terminal
echo "Setting $package as new default terminal..."
sed -i "/export TERMINAL=/ c\export TERMINAL=$package" ~/.config/uwsm/default
[Desktop Action New]
Name=New Terminal
Exec=alacritty
EOF
fi
# Update xdg-terminals.list to prioritize the proper terminal
cat > ~/.config/xdg-terminals.list << EOF
# Terminal emulator preference order for xdg-terminal-exec
# The first found and valid terminal will be used
$desktop_id
EOF
# Restart is needed for new default to take effect
echo
gum confirm "Restart to use new terminal?" && systemctl reboot --no-wall
else
echo "Failed to install $package"
fi

View File

@@ -21,7 +21,4 @@ EOF
# Ensure VSC's own auto-update feature is turned off
printf '{\n "update.mode": "none"\n}\n' > ~/.config/Code/User/settings.json
# Apply Omarchy theme to VSCode
omarchy-theme-set-vscode
setsid gtk-launch code

View File

@@ -1,17 +0,0 @@
#!/bin/bash
set -e
# Install xpadneo to ensure controllers work out of the box
sudo pacman -S --noconfirm --needed linux-headers
yay -S --noconfirm xpadneo-dkms
# Prevent xpad/xpadneo driver conflict
echo blacklist xpad | sudo tee /etc/modprobe.d/blacklist-xpad.conf >/dev/null
echo hid_xpadneo | sudo tee /etc/modules-load.d/xpadneo.conf >/dev/null
# Give user access to game controllers
sudo usermod -a -G input $USER
# Modules need to be loaded
gum confirm "Install requires reboot. Ready?" && sudo reboot now

View File

@@ -1,3 +1,3 @@
#!/bin/bash
exec omarchy-launch-or-focus-tui "bash -c 'fastfetch; read -n 1 -s'"
exec setsid uwsm-app -- alacritty --class=Omarchy -o font.size=9 -e bash -c 'fastfetch; read -n 1 -s'

View File

@@ -1,4 +0,0 @@
#!/bin/bash
rfkill unblock bluetooth
exec omarchy-launch-or-focus-tui bluetui

View File

@@ -1,10 +1,8 @@
#!/bin/bash
omarchy-cmd-present "$EDITOR" || EDITOR=nvim
case "$EDITOR" in
case "${EDITOR:-nvim}" in
nvim | vim | nano | micro | hx | helix)
exec omarchy-launch-tui "$EDITOR" "$@"
exec setsid uwsm-app -- "$TERMINAL" -e "$EDITOR" "$@"
;;
*)
exec setsid uwsm-app -- "$EDITOR" "$@"

View File

@@ -1,4 +1,4 @@
#!/bin/bash
cmd="$*"
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.terminal --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; omarchy-show-done"
exec setsid uwsm-app -- alacritty -o font.size=9 --class=Omarchy --title=Omarchy -e bash -c "omarchy-show-logo; $cmd; omarchy-show-done"

View File

@@ -12,5 +12,5 @@ WINDOW_ADDRESS=$(hyprctl clients -j | jq -r --arg p "$WINDOW_PATTERN" '.[]|selec
if [[ -n $WINDOW_ADDRESS ]]; then
hyprctl dispatch focuswindow "address:$WINDOW_ADDRESS"
else
eval exec setsid $LAUNCH_COMMAND
eval exec $LAUNCH_COMMAND
fi

View File

@@ -1,6 +0,0 @@
#!/bin/bash
APP_ID="org.omarchy.$(basename $1)"
LAUNCH_COMMAND="omarchy-launch-tui $@"
exec omarchy-launch-or-focus "$APP_ID" "$LAUNCH_COMMAND"

View File

@@ -6,7 +6,7 @@ if ! command -v tte &>/dev/null; then
fi
# Exit early if screensave is already running
pgrep -f org.omarchy.screensaver && exit 0
pgrep -f "alacritty --class Screensaver" && exit 0
# Allow screensaver to be turned off but also force started
if [[ -f ~/.local/state/omarchy/toggles/screensaver-off ]] && [[ $1 != "force" ]]; then
@@ -14,36 +14,15 @@ if [[ -f ~/.local/state/omarchy/toggles/screensaver-off ]] && [[ $1 != "force" ]
fi
focused=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')
terminal=$(xdg-terminal-exec --print-id)
for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
hyprctl dispatch focusmonitor $m
case $terminal in
*Alacritty*)
hyprctl dispatch exec -- \
alacritty --class=org.omarchy.screensaver \
--config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml \
-e omarchy-cmd-screensaver
;;
*ghostty*)
hyprctl dispatch exec -- \
ghostty --class=org.omarchy.screensaver \
--config-file=~/.local/share/omarchy/default/ghostty/screensaver \
--font-size=18 \
-e omarchy-cmd-screensaver
;;
*kitty*)
hyprctl dispatch exec -- \
kitty --class=org.omarchy.screensaver \
--override font_size=18 \
--override window_padding_width=0 \
-e omarchy-cmd-screensaver
;;
*)
notify-send "✋ Screensaver only runs in Alacritty, Ghostty, or Kitty"
;;
esac
# FIXME: Find a way to make this generic where we it can work for kitty + ghostty
hyprctl dispatch exec -- \
alacritty --class Screensaver \
--config-file ~/.local/share/omarchy/default/alacritty/screensaver.toml \
-e omarchy-cmd-screensaver
done
hyprctl dispatch focusmonitor $focused

View File

@@ -1,3 +0,0 @@
#!/bin/bash
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.omarchy.$(basename $1) -e "$1" "${@:2}"

View File

@@ -3,7 +3,7 @@
browser=$(xdg-settings get default-web-browser)
case $browser in
google-chrome* | brave-browser* | microsoft-edge* | opera* | vivaldi* | helium*) ;;
google-chrome* | brave-browser* | microsoft-edge* | opera* | vivaldi* | helium-browser*) ;;
*) browser="chromium.desktop" ;;
esac

View File

@@ -1,4 +1,3 @@
#!/bin/bash
rfkill unblock wifi
omarchy-launch-or-focus-tui impala
exec setsid uwsm-app -- "$TERMINAL" --class=Impala -e impala "$@"

View File

@@ -3,13 +3,10 @@
# Lock the screen
pidof hyprlock || hyprlock &
# Set keyboard layout to default (first layout)
hyprctl switchxkblayout all 0 > /dev/null 2>&1
# Ensure 1password is locked
if pgrep -x "1password" >/dev/null; then
1password --lock &
fi
# Avoid running screensaver when locked
pkill -f org.omarchy.screensaver
pkill -f "alacritty --class Screensaver"

View File

@@ -33,11 +33,11 @@ menu() {
fi
fi
echo -e "$options" | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 630 -p "$prompt…" "${args[@]}" 2>/dev/null
echo -e "$options" | omarchy-launch-walker --dmenu --width 295 --minheight 1 --maxheight 600 -p "$prompt…" "${args[@]}" 2>/dev/null
}
terminal() {
xdg-terminal-exec --app-id=org.omarchy.terminal "$@"
alacritty --class=Omarchy -e "$@"
}
present_terminal() {
@@ -112,19 +112,19 @@ show_screenshot_menu() {
}
show_screenrecord_menu() {
omarchy-cmd-screenrecord --stop-recording && exit 0
case $(menu "Screenrecord" " With desktop audio\n With desktop + microphone audio\n With desktop + microphone audio + webcam") in
*"With desktop audio") omarchy-cmd-screenrecord --with-desktop-audio ;;
*"With desktop + microphone audio") omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio ;;
*"With desktop + microphone audio + webcam") omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio --with-webcam ;;
case $(menu "Screenrecord" " Region\n Region + Audio\n Display\n Display + Audio\n Display + Webcam") in
*"Region + Audio"*) omarchy-cmd-screenrecord region --with-audio ;;
*Region*) omarchy-cmd-screenrecord ;;
*"Display + Audio"*) omarchy-cmd-screenrecord output --with-audio ;;
*"Display + Webcam"*) omarchy-cmd-screenrecord output --with-audio --with-webcam ;;
*Display*) omarchy-cmd-screenrecord output ;;
*) back_to show_capture_menu ;;
esac
}
show_share_menu() {
case $(menu "Share" " Clipboard\n File \n Folder") in
*Clipboard*) omarchy-cmd-share clipboard ;;
*Clipboard*) terminal bash -c "omarchy-cmd-share clipboard" ;;
*File*) terminal bash -c "omarchy-cmd-share file" ;;
*Folder*) terminal bash -c "omarchy-cmd-share folder" ;;
*) back_to show_trigger_menu ;;
@@ -154,7 +154,12 @@ show_style_menu() {
}
show_theme_menu() {
omarchy-launch-walker -m menus:omarchythemes --width 800 --minheight 400
theme=$(menu "Theme" "$(omarchy-theme-list)" "" "$(omarchy-theme-current)")
if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then
back_to show_style_menu
else
omarchy-theme-set "$theme"
fi
}
show_font_menu() {
@@ -173,9 +178,15 @@ show_setup_menu() {
options="$options\n Defaults\n󰱔 DNS\n Security\n Config"
case $(menu "Setup" "$options") in
*Audio*) omarchy-launch-or-focus-tui wiremix ;;
*Wifi*) omarchy-launch-wifi ;;
*Bluetooth*) omarchy-launch-bluetooth ;;
*Audio*) $TERMINAL --class=Wiremix -e wiremix ;;
*Wifi*)
rfkill unblock wifi
omarchy-launch-wifi
;;
*Bluetooth*)
rfkill unblock bluetooth
blueberry
;;
*Power*) show_setup_power_menu ;;
*Monitors*) open_in_editor ~/.config/hypr/monitors.conf ;;
*Keybindings*) open_in_editor ~/.config/hypr/bindings.conf ;;
@@ -221,7 +232,7 @@ show_setup_security_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󰍲 Windows\n Gaming\n Extra") in
*Package*) terminal omarchy-pkg-install ;;
*AUR*) terminal omarchy-pkg-aur-install ;;
*Web*) present_terminal omarchy-webapp-install ;;
@@ -234,6 +245,7 @@ show_install_menu() {
*AI*) show_install_ai_menu ;;
*Windows*) present_terminal "omarchy-windows-vm install" ;;
*Gaming*) show_install_gaming_menu ;;
*Extra*) show_install_extra_menu ;;
*) show_main_menu ;;
esac
}
@@ -252,8 +264,8 @@ show_install_editor_menu() {
case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Emacs") in
*VSCode*) present_terminal omarchy-install-vscode ;;
*Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;;
*Zed*) present_terminal "echo 'Installing Zed...'; sudo pacman -S zed && setsid gtk-launch dev.zed.Zed" ;;
*Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
*Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;;
*Sublime*) aur_install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;;
*Helix*) install "Helix" "helix" ;;
*Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;;
*) show_install_menu ;;
@@ -276,11 +288,11 @@ show_install_ai_menu() {
echo ollama
)
case $(menu "Install" "󱚤 Claude Code\n󱚤 Cursor CLI\n󱚤 Gemini\n󱚤 OpenAI Codex\n󱚤 LM Studio\n󱚤 Ollama\n󱚤 Crush\n󱚤 opencode") in
case $(menu "Install" "󱚤 Claude Code\n󱚤 Cursor CLI [AUR]\n󱚤 Gemini [AUR]\n󱚤 OpenAI Codex [AUR]\n󱚤 LM Studio\n󱚤 Ollama\n󱚤 Crush\n󱚤 opencode") in
*Claude*) install "Claude Code" "claude-code" ;;
*Cursor*) install "Cursor CLI" "cursor-cli" ;;
*OpenAI*) install "OpenAI Codex" "openai-codex-bin" ;;
*Gemini*) install "Gemini" "gemini-cli" ;;
*Cursor*) aur_install "Cursor CLI" "cursor-cli" ;;
*OpenAI*) aur_install "OpenAI Codex" "openai-codex-bin" ;;
*Gemini*) aur_install "Gemini" "gemini-cli" ;;
*Studio*) install "LM Studio" "lmstudio" ;;
*Ollama*) install "Ollama" $ollama_pkg ;;
*Crush*) install "Crush" "crush-bin" ;;
@@ -290,11 +302,17 @@ show_install_ai_menu() {
}
show_install_gaming_menu() {
case $(menu "Install" " Steam\n RetroArch [AUR]\n󰍳 Minecraft\n󰖺 Xbox Controller [AUR]") in
case $(menu "Install" " Steam\n RetroArch [AUR]\n󰍳 Minecraft") in
*Steam*) present_terminal omarchy-install-steam ;;
*RetroArch*) aur_install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;;
*Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;;
*Xbox*) present_terminal omarchy-install-xbox-controllers ;;
*Minecraft*) aur_install_and_launch "Minecraft [AUR]" "minecraft-launcher" "minecraft-launcher" ;;
*) show_install_menu ;;
esac
}
show_install_extra_menu() {
case $(menu "Install" " Hyprscrolling") in
*Hyprscrolling*) present_terminal omarchy-install-hyprscrolling ;;
*) show_install_menu ;;
esac
}
@@ -377,20 +395,27 @@ show_remove_menu() {
}
show_update_menu() {
case $(menu "Update" " Omarchy\n Config\n󰸌 Extra Themes\n Process\n󰇅 Hardware\n Firmware\n Password\n Timezone\n Time") in
case $(menu "Update" " Omarchy\n Branch\n Config\n󰸌 Extra Themes\n Process\n󰇅 Hardware\n Firmware\n Password\n Timezone") in
*Omarchy*) present_terminal omarchy-update ;;
*Branch*) show_update_branch_menu ;;
*Config*) show_update_config_menu ;;
*Themes*) present_terminal omarchy-theme-update ;;
*Process*) show_update_process_menu ;;
*Hardware*) show_update_hardware_menu ;;
*Firmware*) present_terminal omarchy-update-firmware ;;
*Timezone*) present_terminal omarchy-tz-select ;;
*Time*) present_terminal omarchy-update-time ;;
*Password*) show_update_password_menu ;;
*) show_main_menu ;;
esac
}
show_update_branch_menu() {
case $(menu "Branch" "master\ndev" "" "$(omarchy-version-branch)") in
*master*) present_terminal "omarchy-update-branch master" ;;
*dev*) present_terminal "omarchy-update-branch dev" ;;
*) show_update_menu ;;
esac
}
show_update_process_menu() {
case $(menu "Restart" " Hypridle\n Hyprsunset\n Swayosd\n󰌧 Walker\n󰍜 Waybar") in
*Hypridle*) omarchy-restart-hypridle ;;
@@ -438,8 +463,8 @@ show_system_menu() {
*Lock*) omarchy-lock-screen ;;
*Screensaver*) omarchy-launch-screensaver force ;;
*Suspend*) systemctl suspend ;;
*Restart*) omarchy-cmd-reboot ;;
*Shutdown*) omarchy-cmd-shutdown ;;
*Restart*) omarchy-state clear re*-required && systemctl reboot --no-wall ;;
*Shutdown*) omarchy-state clear re*-required && systemctl poweroff --no-wall ;;
*) back_to show_main_menu ;;
esac
}

View File

@@ -49,17 +49,6 @@ parse_keycodes() {
code="${BASH_REMATCH[1]}"
symbol=$(lookup_keycode_cached "$code" "$XKB_KEYMAP_CACHE")
echo "${line/code:${code}/$symbol}"
elif [[ "$line" =~ mouse:([0-9]+) ]]; then
code="${BASH_REMATCH[1]}"
case "$code" in
272) symbol="LEFT MOUSE BUTTON" ;;
273) symbol="RIGHT MOUSE BUTTON" ;;
274) symbol="MIDDLE MOUSE BUTTON" ;;
*) symbol="mouse:${code}" ;;
esac
echo "${line/mouse:${code}/$symbol}"
else
echo "$line"
fi
@@ -112,11 +101,6 @@ dynamic_bindings() {
-e 's/^77,/SUPER SHIFT CTRL ALT,/'
}
# Hardcoded bindings, like the copy-url extension and such
static_bindings() {
echo "SHIFT ALT,L,Copy URL from Web App,extension,copy-url"
}
# Parse and format keybindings
#
# `awk` does the heavy lifting:
@@ -163,67 +147,13 @@ parse_bindings() {
}'
}
prioritize_entries() {
awk '
{
line = $0
prio = 50
if (match(line, /Terminal/)) prio = 0
if (match(line, /Browser/) && !match(line, /Browser[[:space:]]*\(/)) prio = 1
if (match(line, /File manager/)) prio = 2
if (match(line, /Launch apps/)) prio = 3
if (match(line, /Omarchy menu/)) prio = 4
if (match(line, /System menu/)) prio = 5
if (match(line, /Theme menu/)) prio = 6
if (match(line, /Full screen/)) prio = 7
if (match(line, /Close window/)) prio = 8
if (match(line, /Toggle window floating/)) prio = 9
if (match(line, /Toggle window split/)) prio = 10
if (match(line, /Universal/)) prio = 11
if (match(line, /Clipboard/)) prio = 12
if (match(line, /Emoji picker/)) prio = 13
if (match(line, /Color picker/)) prio = 14
if (match(line, /Screenshot/)) prio = 15
if (match(line, /Screenrecording/)) prio = 16
if (match(line, /(Switch|Next|Former|Previous).*workspace/)) prio = 17
if (match(line, /Move window to workspace/)) prio = 18
if (match(line, /Swap window/)) prio = 19
if (match(line, /Move window focus/)) prio = 20
if (match(line, /Move window$/)) prio = 21
if (match(line, /Resize window/)) prio = 22
if (match(line, /Expand window/)) prio = 23
if (match(line, /Shrink window/)) prio = 24
if (match(line, /scratchpad/)) prio = 25
if (match(line, /notification/)) prio = 26
if (match(line, /Toggle window transparency/)) prio = 27
if (match(line, /Toggle workspace gaps/)) prio = 28
if (match(line, /Toggle nightlight/)) prio = 29
if (match(line, /group/)) prio = 94
if (match(line, /Scroll active workspace/)) prio = 95
if (match(line, /Cycle to/)) prio = 96
if (match(line, /Reveal active/)) prio = 97
if (match(line, /Apple Display/)) prio = 98
if (match(line, /XF86/)) prio = 99
# print "priority<TAB>line"
printf "%d\t%s\n", prio, line
}' |
sort -k1,1n -k2,2 |
cut -f2-
}
monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height')
menu_height=$((monitor_height * 40 / 100))
build_keymap_cache
{
dynamic_bindings
static_bindings
} |
dynamic_bindings |
sort -u |
parse_keycodes |
parse_bindings |
prioritize_entries |
walker --dmenu -p 'Keybindings' --width 800 --height "$menu_height"

7
bin/omarchy-pkg-ignored Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/bash
IGNORED_PACKAGES_FILE="$OMARCHY_PATH/install/packages.ignored"
if [[ -f $IGNORED_PACKAGES_FILE ]]; then
tr '\r\n' ',' <"$IGNORED_PACKAGES_FILE" | sed 's/,$//'
fi

View File

@@ -2,6 +2,6 @@
omarchy-refresh-config hypr/autostart.conf
omarchy-refresh-config hypr/bindings.conf
omarchy-refresh-config hypr/envs.conf
omarchy-refresh-config hypr/input.conf
omarchy-refresh-config hypr/looknfeel.conf
omarchy-refresh-config hypr/hyprland.conf

View File

@@ -1,34 +0,0 @@
#!/bin/bash
if [[ -f /boot/EFI/linux/omarchy_linux.efi ]] && [[ -f /boot/EFI/linux/$(cat /etc/machine-id)_linux.efi ]]; then
echo "Cleanup extra UKI"
sudo rm -f /boot/EFI/Linux/$(cat /etc/machine-id)_linux.efi
fi
echo "Resetting limine config"
sudo mv /boot/limine.conf /boot/limine.conf.bak
sudo tee /boot/limine.conf <<EOF >/dev/null
### Read more at config document: https://github.com/limine-bootloader/limine/blob/trunk/CONFIG.md
#timeout: 3
default_entry: 2
interface_branding: Omarchy Bootloader
interface_branding_color: 2
hash_mismatch_panic: no
term_background: 1a1b26
backdrop: 1a1b26
# Terminal colors (Tokyo Night palette)
term_palette: 15161e;f7768e;9ece6a;e0af68;7aa2f7;bb9af7;7dcfff;a9b1d6
term_palette_bright: 414868;f7768e;9ece6a;e0af68;7aa2f7;bb9af7;7dcfff;c0caf5
# Text colors
term_foreground: c0caf5
term_foreground_bright: c0caf5
term_background_bright: 24283b
EOF
sudo limine-update
sudo limine-snapper-sync

View File

@@ -1,22 +0,0 @@
#!/bin/bash
# Take backup of existing files
sudo cp -f /etc/pacman.conf /etc/pacman.conf.bak
sudo cp -f /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
sudo cp -f ~/.local/share/omarchy/default/pacman/pacman.conf /etc/pacman.conf
if [[ $1 == "edge" ]]; then
sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-edge /etc/pacman.d/mirrorlist
sudo sed -i 's|https://pkgs.omarchy.org/.*$arch|https://pkgs.omarchy.org/edge/$arch|' /etc/pacman.conf
echo "Setting channel to edge"
else
sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-stable /etc/pacman.d/mirrorlist
sudo sed -i 's|https://pkgs.omarchy.org/.*$arch|https://pkgs.omarchy.org/stable/$arch|' /etc/pacman.conf
echo "Setting channel to stable"
fi
echo
# Reset all package DBs and then update
sudo pacman -Syyu --noconfirm

View File

@@ -0,0 +1,3 @@
#!/bin/bash
sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist /etc/pacman.d/mirrorlist

View File

@@ -1,9 +1,5 @@
#!/bin/bash
# Ensure walker is set to autostart
mkdir -p ~/.config/autostart/
cp $OMARCHY_PATH/autostart/walker.desktop ~/.config/autostart/
omarchy-refresh-config walker/config.toml
omarchy-refresh-config elephant/calc.toml
omarchy-refresh-config elephant/desktopapplications.toml

View File

@@ -1,33 +0,0 @@
#!/bin/bash
set -e
if [ "$EUID" -eq 0 ]; then
echo "Error: This script should not be run as root"
exit 1
fi
echo -e "This will reinstall all the default Omarchy packages and reset all default configs.\nWarning: All changes to configs will be lost.\n"
if gum confirm "Are you sure you want to reinstall and lose all config changes?"; then
echo "Resetting Omarchy repository"
git clone "https://github.com/basecamp/omarchy.git" ~/.local/share/omarchy-new >/dev/null
rm -rf $OMARCHY_PATH
mv ~/.local/share/omarchy-new $OMARCHY_PATH
echo "Reinstalling missing Omarchy packages"
mapfile -t packages < <(grep -v '^#' "$OMARCHY_PATH/install/omarchy-base.packages" | grep -v '^$')
sudo pacman -Syu --noconfirm --needed "${packages[@]}"
echo "Resetting all Omarchy configs"
cp -R ~/.local/share/omarchy/config/* ~/.config/
cp ~/.local/share/omarchy/default/bashrc ~/.bashrc
echo '[[ -f ~/.bashrc ]] && . ~/.bashrc' | tee ~/.bash_profile >/dev/null
$(bash $OMARCHY_PATH/install/config/theme.sh)
$(bash $OMARCHY_PATH/install/config/git.sh)
omarchy-refresh-limine
omarchy-refresh-plymouth
omarchy-nvim-setup
fi

View File

@@ -12,11 +12,10 @@ if [[ $EUID -eq 0 ]]; then
# Restart services as the script owner
systemd-run --uid="$SCRIPT_OWNER" --setenv=XDG_RUNTIME_DIR="/run/user/$USER_UID" \
bash -c "
systemctl --user restart elephant.service
setsid walker --gapplication-service &
setsid uwsm-app -- elephant &
setsid uwsm-app -- walker --gapplication-service &
"
else
elephant service enable 2>/dev/null
systemctl --user restart elephant.service
setsid walker --gapplication-service &
setsid uwsm-app -- elephant &
setsid uwsm-app -- walker --gapplication-service &
fi

View File

@@ -51,16 +51,6 @@ EOF
fi
}
add_hyprlock_fingerprint_icon() {
print_info "Adding fingerprint icon to hyprlock placeholder text..."
sed -i 's/placeholder_text = .*/placeholder_text = <span> Enter Password 󰈷 <\/span>/' ~/.config/hypr/hyprlock.conf
}
remove_hyprlock_fingerprint_icon() {
print_info "Removing fingerprint icon from hyprlock placeholder text..."
sed -i 's/placeholder_text = .*/placeholder_text = Enter Password/' ~/.config/hypr/hyprlock.conf
}
remove_pam_config() {
# Remove from sudo
if grep -q pam_fprintd.so /etc/pam.d/sudo; then
@@ -81,9 +71,6 @@ if [[ "--remove" == "$1" ]]; then
# Remove PAM configuration
remove_pam_config
# Remove fingerprint icon from hyprlock placeholder text
remove_hyprlock_fingerprint_icon
# Uninstall packages
print_info "Removing fingerprint packages..."
sudo pacman -Rns --noconfirm fprintd
@@ -103,9 +90,6 @@ else
# Configure PAM
setup_pam_config
# Add fingerprint icon to hyprlock placeholder text
add_hyprlock_fingerprint_icon
# Enroll first fingerprint
print_success "\nLet's setup your right index finger as the first fingerprint."
print_info "Keep moving the finger around on sensor until the process completes.\n"

View File

@@ -1,7 +1,5 @@
#!/bin/bash
set -e
COMMAND="$1"
OMARCHY_PATH=${OMARCHY_PATH:-$HOME/.local/share/omarchy}
@@ -19,7 +17,7 @@ create)
DESC="$(omarchy-version)"
echo -e "\e[32mCreate system snapshot\e[0m"
# Get existing snapper config names from CSV output
mapfile -t CONFIGS < <(sudo snapper --csvout list-configs | awk -F, 'NR>1 {print $1}')

View File

@@ -7,7 +7,7 @@ if [ -z "$1" ]; then
mapfile -t extra_themes < <(find ~/.config/omarchy/themes -mindepth 1 -maxdepth 1 -type d ! -xtype l -printf '%f\n')
if [[ ${#extra_themes[@]} -gt 0 ]]; then
THEME_NAME=$(printf '%s\n' "${extra_themes[@]}" | sort | gum choose --header="Remove extra theme")
THEME_NAME=$(gum choose --header="Remove extra theme" "${extra_themes[@]}")
else
echo "No extra themes installed."
exit 1

View File

@@ -28,12 +28,12 @@ if pgrep -x waybar >/dev/null; then
omarchy-restart-waybar
fi
omarchy-restart-swayosd
omarchy-restart-terminal
hyprctl reload
pkill -SIGUSR2 btop
makoctl reload
# Change gnome, browser, vscode, cursor themes
omarchy-theme-set-terminal
omarchy-theme-set-gnome
omarchy-theme-set-browser
omarchy-theme-set-vscode

View File

@@ -23,6 +23,11 @@ if omarchy-cmd-present chromium || omarchy-cmd-present helium-browser || omarchy
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
if omarchy-cmd-present brave; then
echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\"}" | tee "/etc/brave/policies/managed/color.json" >/dev/null
brave --refresh-platform-policy --no-startup-window

View File

@@ -3,7 +3,7 @@
# omarchy-theme-set-obsidian: Bootstrap and update Omarchy theme for Obsidian
#
# - Ensures registry at ~/.local/state/omarchy/obsidian-vaults
# - Populates by extracting vault paths from ~/.config/obsidian/obsidian.json
# - 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)
@@ -26,18 +26,30 @@
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)"
# Extract the Obsidian vault location from config file <base>/<vault>/.obsidian
jq -r '.vaults | values[].path' ~/.config/obsidian/obsidian.json 2>/dev/null >>"$tmpfile"
if [ -s "$tmpfile" ]; then
sort -u "$tmpfile" >"$VAULTS_FILE"
else
: >"$VAULTS_FILE"
fi
rm "$tmpfile"
# 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
@@ -87,35 +99,6 @@ calculate_brightness() {
echo $(((r * 299 + g * 587 + b * 114) / 1000))
}
# Calculate approximate contrast ratio between two colors
# Returns ratio scaled by 100 (e.g., 450 = 4.5:1 ratio)
# (this is due to bash not supporting decimal math)
calculate_contrast_ratio() {
local hex1="$1" hex2="$2"
local br1=$(calculate_brightness "$hex1") # 0-255 range
local br2=$(calculate_brightness "$hex2") # 0-255 range
# Ensure br1 is the lighter color (higher brightness)
if [ $br1 -lt $br2 ]; then
local temp=$br1
br1=$br2
br2=$temp
fi
# Approximate contrast ratio scaled by 100
# Add offset to avoid division by zero and approximate WCAG +0.05 behavior
echo $(((br1 + 13) * 100 / (br2 + 13)))
}
# Check if two colors meet minimum contrast threshold
# Usage: meets_contrast_threshold <ratio> <threshold>
# Both ratio and threshold should be scaled by 100 (e.g., 300 = 3:1)
meets_contrast_threshold() {
local ratio="$1" # Ratio scaled by 100 (from calculate_contrast_ratio)
local threshold="$2" # Threshold scaled by 100 (300=3:1, 450=4.5:1, 700=7:1)
[ $ratio -ge $threshold ]
}
# Calculate color distance (euclidean in RGB space)
color_distance() {
local hex1="$1"
@@ -258,30 +241,38 @@ extract_theme_data() {
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"
# Generate code background color that will contrast with foreground text
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")
# 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=""
@@ -366,22 +357,6 @@ extract_theme_data() {
border_color=$(printf "#%02x%02x%02x" "$r" "$g" "$b")
fi
# Set text colors for muted/faint based on contrast
local text_muted_color="$border_color"
local text_faint_color="$border_color"
# Validate border color contrast against background
# Represents a 3:1 WCAG contrast ratio
local ideal_contrast_ratio=300
local border_contrast=$(calculate_contrast_ratio "$border_color" "$bg_color")
if ! meets_contrast_threshold "$border_contrast" "$ideal_contrast_ratio"; then
# Override text colors for readability, keep border color for visibility
text_muted_color="$fg_color"
text_faint_color="$fg_color"
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)
@@ -391,7 +366,7 @@ extract_theme_data() {
readarray -t color_slots < <(fill_color_slots "${unique_colors[@]}" | tr ' ' '\n')
# Extract fonts
local monospace_font="JetBrainsMono Nerd Font"
local monospace_font="CaskaydiaMono Nerd Font"
local ui_font="Liberation Sans"
if [ -f "$CURRENT_THEME_DIR/alacritty.toml" ]; then
@@ -446,8 +421,8 @@ extract_theme_data() {
--text-mark: ${color_slots[7]};
--interactive-accent: ${color_slots[8]};
--blockquote-border: ${color_slots[9]};
--text-muted: $text_muted_color; /* Use text-specific color for muted text */
--text-faint: $text_faint_color; /* Use text-specific color for faint text */
--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);

View File

@@ -4,10 +4,5 @@ if [[ -f ~/.config/alacritty/alacritty.toml ]]; then
touch ~/.config/alacritty/alacritty.toml
fi
if pgrep -x kitty; then
killall -SIGUSR1 kitty
fi
if pgrep -x ghostty; then
killall -SIGUSR2 ghostty
fi
killall -SIGUSR1 kitty
killall -SIGUSR2 ghostty

View File

@@ -1,8 +1,5 @@
#!/bin/bash
for dir in ~/.config/omarchy/themes/*/; do
if [[ -d $dir ]] && [[ ! -L "${dir%/}" ]] && [[ -d "$dir/.git" ]]; then
echo "Updating: $(basename "$dir")"
git -C "$dir" pull
fi
[ -d "$dir" ] && [ ! -L "${dir%/}" ] && echo "Updating: $(basename "$dir")" && git -C "$dir" pull
done

View File

@@ -5,7 +5,7 @@ if [ "$#" -ne 4 ]; then
APP_NAME=$(gum input --prompt "Name> " --placeholder "My TUI")
APP_EXEC=$(gum input --prompt "Launch Command> " --placeholder "lazydocker or bash -c 'dust; read -n 1 -s'")
WINDOW_STYLE=$(gum choose --header "Window style" float tile)
ICON_URL=$(gum input --prompt "Icon URL> " --placeholder "See https://dashboardicons.com (must use PNG or SVG!)")
ICON_URL=$(gum input --prompt "Icon URL> " --placeholder "See https://dashboardicons.com (must use PNG!)")
else
APP_NAME="$1"
APP_EXEC="$2"
@@ -43,7 +43,7 @@ cat >"$DESKTOP_FILE" <<EOF
Version=1.0
Name=$APP_NAME
Comment=$APP_NAME
Exec=xdg-terminal-exec --app-id=$APP_CLASS -e $APP_EXEC
Exec=\$TERMINAL --class=$APP_CLASS -e $APP_EXEC
Terminal=false
Type=Application
Icon=$ICON_PATH

View File

@@ -6,7 +6,7 @@ DESKTOP_DIR="$HOME/.local/share/applications/"
if [ "$#" -eq 0 ]; then
# Find all TUIs
while IFS= read -r -d '' file; do
if grep -qE '^Exec=.*(\$TERMINAL|xdg-terminal-exec).*-e' "$file"; then
if grep -q '^Exec=.*$TERMINAL.*-e' "$file"; then
TUIS+=("$(basename "${file%.desktop}")")
fi
done < <(find "$DESKTOP_DIR" -name '*.desktop' -print0)

View File

@@ -2,10 +2,6 @@
set -e
trap 'echo ""; echo -e "\033[0;31mSomething went wrong during the update!\n\nPlease review the output above carefully, correct the error, and retry the update.\n\nIf you need assistance, get help from the community at https://omarchy.org/discord\033[0m"' ERR
if omarchy-update-confirm; then
omarchy-snapshot create || [ $? -eq 127 ]
omarchy-update-git
omarchy-update-perform
fi
omarchy-snapshot create || [ $? -eq 127 ]
omarchy-update-git
omarchy-update-perform

View File

@@ -2,4 +2,3 @@
# Ensure Waybar icon offering the available update is removed
pkill -RTMIN+7 waybar
exit 0

View File

@@ -1,16 +0,0 @@
#!/bin/bash
gum style --border normal --border-foreground 6 --padding "1 2" \
"Ready to update?" \
"" \
"• You cannot stop the update once you start!" \
"• Make sure you're connected to power or have a full battery" \
"" \
"What's new: https://github.com/basecamp/omarchy/releases"
echo
if ! gum confirm "Continue with update?"; then
echo "Update cancelled"
exit 1
fi

View File

@@ -1,7 +1,5 @@
#!/bin/bash
set -e
echo -e "\e[32mUpdate Omarchy\e[0m"
git -C $OMARCHY_PATH pull --autostash

View File

@@ -1,14 +0,0 @@
#!/bin/bash
# Ensure we have the omarchy-keyring and it's populated
if omarchy-pkg-missing omarchy-keyring || ! sudo pacman-key --list-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 &>/dev/null; then
sudo pacman-key --recv-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 --keyserver keys.openpgp.org
sudo pacman-key --lsign-key 40DFB630FF42BCFFB047046CF0134EE680CAC571
# This is generally not a good idea, but this is a special case because we're going to be updating
# the full set of packages in omarchy-update-system-pkgs right after this (and it needs latest keyring)!
sudo pacman -Sy
omarchy-pkg-add omarchy-keyring
sudo pacman-key --list-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571
fi

View File

@@ -2,8 +2,6 @@
set -e
omarchy-update-time
omarchy-update-keyring
omarchy-update-available-reset
omarchy-update-system-pkgs
omarchy-migrate

View File

@@ -1,15 +1,19 @@
#!/bin/bash
set -e
# Used in package emergencies if a bad package has been pushed and we can't revoke.
# Requires manually installing the good package using sudo pacman -U <url>
ignored_packages=$(omarchy-pkg-ignored)
echo -e "\e[32m\nUpdate system packages\e[0m"
sudo pacman -Syu --noconfirm
[[ -n $ignored_packages ]] && echo "sudo pacman -Syu --noconfirm --ignore \"$ignored_packages\""
sudo pacman -Syu --noconfirm --ignore "$ignored_packages"
# Update AUR packages if any are installed
if pacman -Qem >/dev/null; then
if omarchy-pkg-aur-accessible; then
echo -e "\e[32m\nUpdate AUR packages\e[0m"
yay -Sua --noconfirm
[[ -n $ignored_packages ]] && echo "yay -Sua --noconfirm --ignore \"$ignored_packages\""
yay -Sua --noconfirm --ignore "$ignored_packages"
echo
else
echo -e "\e[31m\nAUR is unavailable (so skipping updates)\e[0m"
@@ -17,7 +21,7 @@ if pacman -Qem >/dev/null; then
fi
fi
orphans=$(pacman -Qtdq || true)
orphans=$(pacman -Qtdq)
if [[ -n $orphans ]]; then
echo -e "\e[32m\nRemove orphan system packages\e[0m"
for pkg in $orphans; do

View File

@@ -1,4 +0,0 @@
#!/bin/bash
echo "Updating time..."
sudo systemctl restart systemd-timesyncd

View File

@@ -1,23 +0,0 @@
#!/bin/bash
if grep -q "https://stable-mirror.omarchy.org/" /etc/pacman.d/mirrorlist; then
mirror="stable"
elif grep -q "https://mirror.omarchy.org/" /etc/pacman.d/mirrorlist; then
mirror="edge"
else
mirror="unknown"
fi
if grep -q "https://pkgs.omarchy.org/stable/" /etc/pacman.conf; then
pkgs="stable"
elif grep -q "https://pkgs.omarchy.org/edge/" /etc/pacman.conf; then
pkgs="edge"
else
pkgs="unknown"
fi
if [[ $mirror == $pkgs ]]; then
echo $mirror
else
echo "$mirror / $pkgs"
fi

View File

@@ -1,3 +0,0 @@
#!/bin/bash
date -d "$(grep upgraded /var/log/pacman.log | tail -1 | sed -E 's/\[([^]]+)\].*/\1/')" "+%A, %B %d %Y at %H:%M"

View File

@@ -30,7 +30,7 @@ else
fi
if [[ ${#APP_NAMES[@]} -eq 0 ]]; then
echo "You must select at least one web app to remove."
echo "You must provide web app names."
exit 1
fi

View File

@@ -273,7 +273,7 @@ launch_windows() {
echo "Starting Windows VM..."
# Send desktop notification
notify-send "Starting Windows VM" " This can take 15-30 seconds" -t 15000
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!"
@@ -298,7 +298,7 @@ launch_windows() {
done
# Give it a moment more to fully initialize
sleep 5
sleep 3
fi
# Extract credentials from compose file
@@ -327,7 +327,7 @@ To stop: omarchy-windows-vm stop"
"$LIFECYCLE"
# Detect display scale from Hyprland
HYPR_SCALE=$(hyprctl monitors -j | jq -r '.[] | select (.focused == true) | .scale')
HYPR_SCALE=$(hyprctl monitors -j | jq -r '.[0].scale')
SCALE_PERCENT=$(echo "$HYPR_SCALE" | awk '{print int($1 * 100)}')
RDP_SCALE=""
@@ -339,7 +339,7 @@ To stop: omarchy-windows-vm stop"
# 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 -grab-keyboard /sound /microphone /cert:ignore /title:"Windows VM - Omarchy" /dynamic-resolution /gfx:AVC444 /floatbar:sticky:off,default:visible,show:fullscreen $RDP_SCALE
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

View File

@@ -4,9 +4,9 @@ general.import = [ "~/.config/omarchy/current/theme/alacritty.toml" ]
TERM = "xterm-256color"
[font]
normal = { family = "JetBrainsMono Nerd Font", style = "Regular" }
bold = { family = "JetBrainsMono Nerd Font", style = "Bold" }
italic = { family = "JetBrainsMono Nerd Font", style = "Italic" }
normal = { family = "CaskaydiaMono Nerd Font", style = "Regular" }
bold = { family = "CaskaydiaMono Nerd Font", style = "Bold" }
italic = { family = "CaskaydiaMono Nerd Font", style = "Italic" }
size = 9
[window]

View File

@@ -1,6 +1,5 @@
--ozone-platform=wayland
--ozone-platform-hint=wayland
--enable-features=TouchpadOverscrollHistoryNavigation
--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

@@ -74,12 +74,6 @@
"keyColor": "blue",
"text": "branch=$(omarchy-version-branch); echo \"$branch\""
},
{
"type": "command",
"key": "│ ├󰔫",
"keyColor": "blue",
"text": "channel=$(omarchy-version-channel); echo \"$channel\""
},
{
"type": "kernel",
"key": "│ ├",
@@ -128,7 +122,7 @@
"break",
{
"type": "custom",
"format": "\u001b[90m┌────────────────Age / Uptime / Update───────────────┐"
"format": "\u001b[90m┌────────────────────Uptime / Age────────────────────┐"
},
{
"type": "command",
@@ -141,12 +135,6 @@
"key": "󱫐 Uptime",
"keyColor": "magenta"
},
{
"type": "command",
"key": " Update",
"keyColor": "magenta",
"text": "updated=$(omarchy-version-pkgs); echo \"$updated\""
},
{
"type": "custom",
"format": "\u001b[90m└────────────────────────────────────────────────────┘"

View File

@@ -1,2 +0,0 @@
TriggerKey=
PastePrimaryKey=

View File

@@ -24,7 +24,7 @@
<string>monospace</string>
</test>
<edit name="family" mode="assign" binding="strong">
<string>JetBrainsMono Nerd Font</string>
<string>CaskaydiaMono Nerd Font</string>
</edit>
</match>

View File

@@ -2,7 +2,7 @@
config-file = ?"~/.config/omarchy/current/theme/ghostty.conf"
# Font
font-family = "JetBrainsMono Nerd Font"
font-family = "CaskaydiaMono Nerd Font"
font-style = Regular
font-size = 9
@@ -17,18 +17,11 @@ gtk-toolbar-style = flat
# Cursor styling
cursor-style = "block"
cursor-style-blink = false
# Cursor styling + SSH session terminfo
# (all shell integration options must be passed together)
shell-integration-features = no-cursor,ssh-env
shell-integration-features = no-cursor
# Keyboard bindings
keybind = shift+insert=paste_from_clipboard
keybind = control+insert=copy_to_clipboard
keybind = super+control+shift+alt+arrow_down=resize_split:down,100
keybind = super+control+shift+alt+arrow_up=resize_split:up,100
keybind = super+control+shift+alt+arrow_left=resize_split:left,100
keybind = super+control+shift+alt+arrow_right=resize_split:right,100
# Slowdown mouse scrolling
mouse-scroll-multiplier = 0.95
# SSH session terminfo
shell-integration-features = ssh-env

View File

@@ -1,28 +0,0 @@
# See https://git-scm.com/docs/git-config
[alias]
co = checkout
br = branch
ci = commit
st = status
[init]
defaultBranch = master
[pull]
rebase = true # Rebase (instead of merge) on pull
[push]
autoSetupRemote = true # Automatically set upstream branch on push
[diff]
algorithm = histogram # Clearer diffs on moved/edited lines
colorMoved = plain # Highlight moved blocks in diffs
mnemonicPrefix = true # More intuitive refs in diff output
[commit]
verbose = true # Include diff comment in commit message template
[column]
ui = auto # Output in columns when possible
[branch]
sort = -committerdate # Sort branches by most recent commit first
[tag]
sort = -version:refname # Sort version numbers as you would expect
[rerere]
enabled = true # Record and reuse conflict resolutions
autoupdate = true # Apply stored conflict resolutions automatically

View File

@@ -1,18 +1,20 @@
# Application bindings
bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)"
$terminal = uwsm-app -- $TERMINAL
$browser = omarchy-launch-browser
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 SHIFT, B, Browser, exec, omarchy-launch-browser
bindd = SUPER SHIFT ALT, B, Browser (private), exec, omarchy-launch-browser --private
bindd = SUPER SHIFT, B, Browser, exec, $browser
bindd = SUPER SHIFT ALT, B, Browser (private), exec, $browser --private
bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify
bindd = SUPER SHIFT, N, Editor, exec, omarchy-launch-editor
bindd = SUPER SHIFT, T, Activity, exec, omarchy-launch-tui btop
bindd = SUPER SHIFT, D, Docker, exec, omarchy-launch-tui lazydocker
bindd = SUPER SHIFT, G, Signal, exec, omarchy-launch-or-focus ^signal$ "uwsm-app -- signal-desktop"
bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus ^obsidian$ "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime"
bindd = SUPER SHIFT, W, Typora, exec, uwsm-app -- typora --enable-wayland-ime
bindd = SUPER SHIFT, T, Activity, exec, $terminal -e btop
bindd = SUPER SHIFT, D, Docker, exec, $terminal -e lazydocker
bindd = SUPER SHIFT, G, Signal, exec, omarchy-launch-or-focus signal "uwsm-app -- signal-desktop"
bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus "^obsidian$" "uwsm-app -- obsidian -disable-gpu --enable-wayland-ime"
bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- 1password
# If your web app url contains #, type it as ## to prevent hyprland treating it as a comment
# If your web app url contains #, type it as ## to prevent hyperland treat it as comments
bindd = SUPER SHIFT, 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, C, Calendar, exec, omarchy-launch-webapp "https://app.hey.com/calendar/weeks/"
@@ -20,7 +22,6 @@ bindd = SUPER SHIFT, E, Email, exec, omarchy-launch-webapp "https://app.hey.com"
bindd = SUPER SHIFT, Y, YouTube, exec, omarchy-launch-webapp "https://youtube.com/"
bindd = SUPER SHIFT ALT, G, WhatsApp, exec, omarchy-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/"
bindd = SUPER SHIFT CTRL, G, Google Messages, exec, omarchy-launch-or-focus-webapp "Google Messages" "https://messages.google.com/web/conversations"
bindd = SUPER SHIFT, P, Google Photos, exec, omarchy-launch-or-focus-webapp "Google Photos" "https://photos.google.com/"
bindd = SUPER SHIFT, X, X, exec, omarchy-launch-webapp "https://x.com/"
bindd = SUPER SHIFT ALT, X, X Post, exec, omarchy-launch-webapp "https://x.com/compose/post"

2
config/hypr/envs.conf Normal file
View File

@@ -0,0 +1,2 @@
# Extra env variables
# env = MY_GLOBAL_ENV,setting

View File

@@ -16,6 +16,7 @@ source = ~/.config/omarchy/current/theme/hyprland.conf
source = ~/.config/hypr/monitors.conf
source = ~/.config/hypr/input.conf
source = ~/.config/hypr/bindings.conf
source = ~/.config/hypr/envs.conf
source = ~/.config/hypr/looknfeel.conf
source = ~/.config/hypr/autostart.conf

View File

@@ -22,10 +22,10 @@ input-field {
outer_color = $outer_color
outline_thickness = 4
font_family = JetBrainsMono Nerd Font
font_family = CaskaydiaMono Nerd Font Propo
font_color = $font_color
placeholder_text = Enter Password
placeholder_text = Enter Password 󰈷
check_color = $check_color
fail_text = <i>$FAIL ($ATTEMPTS)</i>

View File

@@ -5,9 +5,7 @@ profile {
identity = true
}
# To enable auto switch to nightlight, set in your .config/hypr/autostart:
# exec-once = uwsm app -- hyprsunset
# and use the following:
# Enable auto switch to nightlight:
# profile {
# time = 20:00
# temperature = 4000

View File

@@ -3,7 +3,7 @@
input {
# Use multiple keyboard layouts and switch between them with Left Alt + Right Alt
# kb_layout = us,dk,eu
kb_options = compose:caps # ,grp:alts_toggle
kb_options = compose:caps # ,grp:shifts_toggle
# Change speed of keyboard repeat
repeat_rate = 40

View File

@@ -2,10 +2,9 @@
# https://wiki.hyprland.org/Configuring/Variables/#general
general {
# No gaps between windows or borders
# No gaps between windows
# gaps_in = 0
# gaps_out = 0
# border_size = 0
# Use master layout instead of dwindle
# layout = master

View File

@@ -8,7 +8,7 @@ monitor=,preferred,auto,auto
# Good compromise for 27" or 32" 4K monitors (but fractional!)
# env = GDK_SCALE,1.75
# monitor=,preferred,auto,1.6
# monitor=,preferred,auto,1.666667
# Straight 1x setup for low-resolution displays like 1080p or 1440p
# env = GDK_SCALE,1

View File

@@ -1,3 +0,0 @@
screencopy {
allow_token_by_default = true
}

View File

@@ -1,13 +0,0 @@
[binds]
# Print the current image file
<Ctrl+p> = exec lp "$imv_current_file"
# Delete the current image and quit the viewer
<Ctrl+x> = exec rm "$imv_current_file"; quit
# Delete the current image and move to the next one
<Ctrl+Shift+X> = exec rm "$imv_current_file"; close
# Rotate the currently open image by 90 degrees
<Ctrl+r> = exec mogrify -rotate 90 "$imv_current_file"

View File

@@ -1,7 +1,7 @@
include ~/.config/omarchy/current/theme/kitty.conf
# Font
font_family JetBrainsMono Nerd Font
font_family CaskaydiaMono Nerd Font
bold_italic_font auto
font_size 9.0

View File

@@ -9,7 +9,7 @@ window {
}
label {
font-family: 'JetBrainsMono Nerd Font';
font-family: 'CaskaydiaMono Nerd Font';
font-size: 11pt;
color: @label;

View File

@@ -1,13 +1,4 @@
# Changes require a restart to take effect.
# Install other terminals via Install > Terminal
export TERMINAL=xdg-terminal-exec
# Use code for VSCode
export TERMINAL=alacritty
export EDITOR=nvim
# Use a custom directory for screenshots (remember to make the directory!)
# export OMARCHY_SCREENSHOT_DIR="$HOME/Pictures/Screenshots"
# Use a custom directory for screenrecordings (remember to make the directory!)
# export OMARCHY_SCREENRECORD_DIR="$HOME/Videos/Screencasts"

View File

@@ -2,7 +2,7 @@
# Ensure Omarchy bins are in the path
export OMARCHY_PATH=$HOME/.local/share/omarchy
export PATH=$OMARCHY_PATH/bin:$PATH
export PATH=$OMARCHY_PATH/bin/:$PATH
# Set default terminal and editor
source ~/.config/uwsm/default

View File

@@ -1,24 +1,41 @@
force_keyboard_focus = true # forces keyboard forcus to stay in Walker
close_when_open = true # close walker when invoking while already opened
selection_wrap = true # wrap list if at bottom or top
click_to_close = true # closes walker if clicking outside of the main content area
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
exact_search_prefix = "'" # disable fuzzy searching
theme = "omarchy-default" # theme to use
disable_mouse = false # disable mouse (on input and list only)
additional_theme_location = "~/.local/share/omarchy/default/walker/themes/"
hide_action_hints = true # globally hide the action hints
[shell]
anchor_top = true
anchor_bottom = true
anchor_left = true
anchor_right = true
[placeholders]
"default" = { input = " Search...", list = "No Results" } # placeholders for input and empty list, key is the providers name, so f.e. "desktopapplications" or "menus:other"
[keybinds]
close = ["Escape"]
next = ["Down"]
previous = ["Up"]
toggle_exact = ["ctrl e"]
resume_last_query = ["ctrl r"]
quick_activate = []
[columns]
symbols = 1 # providers to be queried by default
[providers]
max_results = 256 # 256 should be enough for everyone
default = [
"desktopapplications",
"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
[providers.max_results_provider] # define max results per provider in here
[[providers.prefixes]]
prefix = "/"
@@ -43,3 +60,86 @@ provider = "websearch"
[[providers.prefixes]]
prefix = "$"
provider = "clipboard"
[providers.actions] # This will be MERGED/OVEWRITTEN with what the user specifies
dmenu = [{ action = "select", default = true, bind = "Return" }]
providerlist = [
{ action = "activate", default = true, bind = "Return", after = "ClearReload" },
]
bluetooth = [
{ action = "find", global = true, bind = "ctrl f", after = "AsyncClearReload" },
{ action = "trust", bind = "ctrl t", after = "AsyncReload" },
{ action = "untrust", bind = "ctrl t", after = "AsyncReload" },
{ 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 = [
{ action = "install", bind = "Return", default = true },
{ action = "remove", bind = "Return" },
]
calc = [
{ action = "copy", default = true, bind = "Return" },
{ action = "delete", bind = "ctrl d", after = "AsyncReload" },
{ action = "save", bind = "ctrl s", after = "AsyncClearReload" },
]
websearch = [
{ action = "search", default = true, bind = "Return" },
{ action = "erase_history", label = "clear hist", bind = "ctrl h", after = "Reload" },
]
desktopapplications = [
{ action = "start", default = true, bind = "Return" },
{ 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 = [
{ action = "open", default = true, bind = "Return" },
{ action = "opendir", label = "open dir", bind = "ctrl Return" },
{ action = "copypath", label = "copy path", bind = "ctrl shift c" },
{ action = "copyfile", label = "copy file", bind = "ctrl c" },
]
todo = [
{ action = "save", default = true, bind = "Return", after = "ClearReload" },
{ 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

@@ -28,7 +28,6 @@
"7": "7",
"8": "8",
"9": "9",
"10": "0",
"active": "󱓻"
},
"persistent-workspaces": {
@@ -42,7 +41,6 @@
"custom/omarchy": {
"format": "<span font='omarchy'>\ue900</span>",
"on-click": "omarchy-menu",
"on-click-right": "xdg-terminal-exec",
"tooltip-format": "Omarchy Menu\n\nSuper + Alt + Space"
},
"custom/update": {
@@ -51,13 +49,13 @@
"on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update",
"tooltip-format": "Omarchy update available",
"signal": 7,
"interval": 21600
"interval": 3600
},
"cpu": {
"interval": 5,
"format": "󰍛",
"on-click": "omarchy-launch-or-focus-tui btop"
"on-click": "$TERMINAL -e btop"
},
"clock": {
"format": "{:L%A %H:%M}",
@@ -100,14 +98,13 @@
"bluetooth": {
"format": "",
"format-disabled": "󰂲",
"format-connected": "󰂱",
"format-no-controller": "",
"format-connected": "",
"tooltip-format": "Devices connected: {num_connections}",
"on-click": "omarchy-launch-bluetooth"
"on-click": "blueberry"
},
"pulseaudio": {
"format": "{icon}",
"on-click": "omarchy-launch-or-focus-tui wiremix",
"on-click": "$TERMINAL --class=Wiremix -e wiremix",
"on-click-right": "pamixer -t",
"tooltip-format": "Playing at {volume}%",
"scroll-step": 5,
@@ -125,7 +122,7 @@
"modules": ["custom/expand-icon", "tray"]
},
"custom/expand-icon": {
"format": "",
"format": "",
"tooltip": false
},
"custom/screenrecording-indicator": {

View File

@@ -7,7 +7,7 @@
border: none;
border-radius: 0;
min-height: 0;
font-family: 'JetBrainsMono Nerd Font';
font-family: 'CaskaydiaMono Nerd Font';
font-size: 12px;
}
@@ -53,7 +53,7 @@
}
#custom-expand-icon {
margin-right: 18px;
margin-right: 20px;
}
tooltip {

View File

@@ -1,3 +0,0 @@
# Terminal emulator preference order for xdg-terminal-exec
# The first found and valid terminal will be used
com.mitchellh.ghostty.desktop

View File

@@ -1,26 +1,19 @@
# File system
if command -v eza &> /dev/null; then
alias ls='eza -lh --group-directories-first --icons=auto'
alias lsa='ls -a'
alias lt='eza --tree --level=2 --long --icons --git'
alias lta='lt -a'
fi
alias ls='eza -lh --group-directories-first --icons=auto'
alias lsa='ls -a'
alias lt='eza --tree --level=2 --long --icons --git'
alias lta='lt -a'
alias ff="fzf --preview 'bat --style=numbers --color=always {}'"
if command -v zoxide &> /dev/null; then
alias cd="zd"
zd() {
if [ $# -eq 0 ]; then
builtin cd ~ && return
elif [ -d "$1" ]; then
builtin cd "$1"
else
z "$@" && printf "\U000F17A9 " && pwd || echo "Error: Directory not found"
fi
}
fi
alias cd="zd"
zd() {
if [ $# -eq 0 ]; then
builtin cd ~ && return
elif [ -d "$1" ]; then
builtin cd "$1"
else
z "$@" && printf "\U000F17A9 " && pwd || echo "Error: Directory not found"
fi
}
open() {
xdg-open "$@" >/dev/null 2>&1 &
}

View File

@@ -15,7 +15,7 @@ iso2sd() {
fi
}
# Format an entire drive for a single partition using exFAT
# Format an entire drive for a single partition using ext4
format-drive() {
if [ $# -ne 2 ]; then
echo "Usage: format-drive <device> <name>"
@@ -25,20 +25,14 @@ format-drive() {
else
echo "WARNING: This will completely erase all data on $1 and label it '$2'."
read -rp "Are you sure you want to continue? (y/N): " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
sudo wipefs -a "$1"
sudo dd if=/dev/zero of="$1" bs=1M count=100 status=progress
sudo parted -s "$1" mklabel gpt
sudo parted -s "$1" mkpart primary 1MiB 100%
partition="$([[ $1 == *"nvme"* ]] && echo "${1}p1" || echo "${1}1")"
sudo partprobe "$1" || true
sudo udevadm settle || true
sudo mkfs.exfat -n "$2" "$partition"
echo "Drive $1 formatted as exFAT and labeled '$2'."
sudo parted -s "$1" mkpart primary ext4 1MiB 100%
sudo mkfs.ext4 -L "$2" "$([[ $1 == *"nvme"* ]] && echo "${1}p1" || echo "${1}1")"
sudo chmod -R 777 "/run/media/$USER/$2"
echo "Drive $1 formatted and labeled '$2'."
fi
fi
}
@@ -55,28 +49,19 @@ transcode-video-4K() {
# Transcode any image to JPG image that's great for shrinking wallpapers
img2jpg() {
img="$1"
shift
magick "$img" $@ -quality 95 -strip ${img%.*}-optimized.jpg
magick $1 -quality 95 -strip ${1%.*}.jpg
}
# Transcode any image to JPG image that's great for sharing online without being too big
img2jpg-small() {
img="$1"
shift
magick "$img" $@ -resize 1080x\> -quality 95 -strip ${img%.*}-optimized.jpg
magick $1 -resize 1080x\> -quality 95 -strip ${1%.*}.jpg
}
# Transcode any image to compressed-but-lossless PNG
img2png() {
img="$1"
shift
magick "$img" $@ -strip -define png:compression-filter=5 \
magick "$1" -strip -define png:compression-filter=5 \
-define png:compression-level=9 \
-define png:compression-strategy=1 \
-define png:exclude-chunk=all \
"${img%.*}-optimized.png"
"${1%.*}.png"
}

View File

@@ -10,10 +10,6 @@ if command -v zoxide &> /dev/null; then
eval "$(zoxide init bash)"
fi
if command -v try &> /dev/null; then
eval "$(try init ~/Work/tries)"
fi
if command -v fzf &> /dev/null; then
if [[ -f /usr/share/fzf/completion.bash ]]; then
source /usr/share/fzf/completion.bash

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