diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..bac09b5a --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,63 @@ +# Style + +- Two spaces for indentation, no tabs +- Use bash 5 syntax: `[[ ]]` for conditionals, not `[ ]`. Don't quote variables inside `[[ ]]` (e.g., `[[ -n $var ]]` not `[[ -n "$var" ]]`) + +# Command Naming + +All commands start with `omarchy-`. Prefixes indicate purpose: + +- `cmd-` - check if commands exist, misc utility commands +- `pkg-` - package management helpers +- `hw-` - hardware detection (return exit codes for use in conditionals) +- `refresh-` - copy default config to user's `~/.config/` +- `restart-` - restart a component +- `launch-` - open applications +- `install-` - install optional software +- `setup-` - interactive setup wizards +- `toggle-` - toggle features on/off +- `theme-` - theme management +- `update-` - update components + +# Helper Commands + +Use these instead of raw shell commands: + +- `omarchy-cmd-missing` / `omarchy-cmd-present` - check for commands +- `omarchy-pkg-missing` / `omarchy-pkg-present` - check for packages +- `omarchy-pkg-add` - install packages (handles both pacman and AUR) +- `omarchy-hw-asus-rog` - detect ASUS ROG hardware (and similar `hw-*` commands) + +# Config Structure + +- `config/` - default configs copied to `~/.config/` +- `default/themed/*.tpl` - templates with `{{ variable }}` placeholders for theme colors +- `themes/*/colors.toml` - theme color definitions (accent, background, foreground, color0-15) + +# Refresh Pattern + +To copy a default config to user config with automatic backup: + +```bash +omarchy-refresh-config hypr/hyprlock.conf +``` + +This copies `~/.local/share/omarchy/config/hypr/hyprlock.conf` to `~/.config/hypr/hyprlock.conf`. + +# Migrations + +To create a new migration, run `omarchy-dev-add-migration --no-edit`. This creates a migration file named after the unix timestamp of the last commit. + +Migration format: +- No shebang line +- Start with an `echo` describing what the migration does +- Use `$OMARCHY_PATH` to reference the omarchy directory + +Example: +```bash +echo "Disable fingerprint in hyprlock if fingerprint auth is not configured" + +if omarchy-cmd-missing fprintd-list || ! fprintd-list "$USER" 2>/dev/null | grep -q "finger"; then + sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = false/' ~/.config/hypr/hyprlock.conf +fi +``` diff --git a/bin/omarchy-battery-present b/bin/omarchy-battery-present new file mode 100755 index 00000000..bcdab1eb --- /dev/null +++ b/bin/omarchy-battery-present @@ -0,0 +1,13 @@ +#!/bin/bash + +# Returns true if a battery is present on the system. +# Used by the battery monitor and other battery-related checks. + +for bat in /sys/class/power_supply/BAT*; do + [[ -r "$bat/present" ]] && + [[ "$(cat "$bat/present")" == "1" ]] && + [[ "$(cat "$bat/type")" == "Battery" ]] && + exit 0 +done + +exit 1 diff --git a/bin/omarchy-battery-remaining b/bin/omarchy-battery-remaining index a6083352..26ea718f 100755 --- a/bin/omarchy-battery-remaining +++ b/bin/omarchy-battery-remaining @@ -3,10 +3,7 @@ # Returns the battery percentage remaining as an integer. # Used by the battery monitor and the Ctrl + Shift + Super + B hotkey. -upower -i $(upower -e | grep BAT) \ -| awk -F: '/percentage/ { - gsub(/[%[:space:]]/, "", $2); - val=$2; - printf("%d\n", (val+0.5)) +upower -i $(upower -e | grep BAT) | awk '/percentage/ { + print int($2) exit - }' +}' diff --git a/bin/omarchy-branch-set b/bin/omarchy-branch-set index f67d9174..bfe67c99 100755 --- a/bin/omarchy-branch-set +++ b/bin/omarchy-branch-set @@ -3,14 +3,15 @@ # Set the branch for Omarchy's git repository. if (($# == 0)); then - echo "Usage: omarchy-branch-set [master|dev]" + echo "Usage: omarchy-branch-set [master|rc|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 +if [[ "$branch" != "master" && "$branch" != "rc" && "$branch" != "dev" ]]; then + echo "Error: Invalid branch '$branch'. Must be one of: master, rc, dev" + exit 1 +fi + +git -C $OMARCHY_PATH switch $branch diff --git a/bin/omarchy-brightness-display b/bin/omarchy-brightness-display new file mode 100755 index 00000000..d85795d2 --- /dev/null +++ b/bin/omarchy-brightness-display @@ -0,0 +1,21 @@ +#!/bin/bash + +# Adjust brightness on the most likely display device. +# Usage: omarchy-brightness-display + +step="${1:-+5%}" + +# Start with the first possible output, then refine to the most likely given an order heuristic. +device="$(ls -1 /sys/class/backlight 2>/dev/null | head -n1)" +for candidate in amdgpu_bl* intel_backlight acpi_video*; do + if [[ -e "/sys/class/backlight/$candidate" ]]; then + device="$candidate" + break + fi +done + +# Set the actual brightness of the display device. +brightnessctl -d "$device" set "$step" >/dev/null + +# Use SwayOSD to display the new brightness setting. +omarchy-swayosd-brightness "$(brightnessctl -d "$device" -m | cut -d',' -f4 | tr -d '%')" diff --git a/bin/omarchy-brightness-display-apple b/bin/omarchy-brightness-display-apple new file mode 100755 index 00000000..00fde072 --- /dev/null +++ b/bin/omarchy-brightness-display-apple @@ -0,0 +1,12 @@ +#!/bin/bash + +# Adjust the brightness on Apple Studio Displays and Apple XDR Displays using asdcontrol. + +if [[ $# -eq 0 ]]; then + echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)" +else + device="$(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1)" + sudo asdcontrol "$device" -- "$1" >/dev/null + value="$(sudo asdcontrol "$device" | awk -F= '/BRIGHTNESS=/{print $2+0}')" + omarchy-swayosd-brightness "$(( value * 100 / 60000 ))" +fi diff --git a/bin/omarchy-brightness-keyboard b/bin/omarchy-brightness-keyboard new file mode 100755 index 00000000..a05922d2 --- /dev/null +++ b/bin/omarchy-brightness-keyboard @@ -0,0 +1,42 @@ +#!/bin/bash + +# Adjust keyboard backlight brightness using available steps. +# Usage: omarchy-brightness-keyboard + +direction="${1:-up}" + +# Find keyboard backlight device (look for *kbd_backlight* pattern in leds class). +device="" +for candidate in /sys/class/leds/*kbd_backlight*; do + if [[ -e "$candidate" ]]; then + device="$(basename "$candidate")" + break + fi +done + +if [[ -z "$device" ]]; then + echo "No keyboard backlight device found" >&2 + exit 1 +fi + +# Get current and max brightness to determine step size. +max_brightness="$(brightnessctl -d "$device" max)" +current_brightness="$(brightnessctl -d "$device" get)" + +# Calculate step as one unit (keyboards typically have discrete levels like 0-3). +if [[ "$direction" == "cycle" ]]; then + new_brightness=$(( (current_brightness + 1) % (max_brightness + 1) )) +elif [[ "$direction" == "up" ]]; then + new_brightness=$((current_brightness + 1)) + [[ $new_brightness -gt $max_brightness ]] && new_brightness=$max_brightness +else + new_brightness=$((current_brightness - 1)) + [[ $new_brightness -lt 0 ]] && new_brightness=0 +fi + +# Set the new brightness. +brightnessctl -d "$device" set "$new_brightness" >/dev/null + +# Use SwayOSD to display the new brightness setting. +percent=$((new_brightness * 100 / max_brightness)) +omarchy-swayosd-kbd-brightness "$percent" diff --git a/bin/omarchy-channel-set b/bin/omarchy-channel-set index 342ee2e2..8494f973 100755 --- a/bin/omarchy-channel-set +++ b/bin/omarchy-channel-set @@ -14,14 +14,15 @@ # and people with a lot of experience managing Linux systems. if (($# == 0)); then - echo "Usage: omarchy-channel-set [stable|edge|dev]" + echo "Usage: omarchy-channel-set [stable|rc|edge|dev]" exit 1 else channel="$1" fi case "$channel" in -"stable") omarchy-branch-set "master" && omarchy-refresh-pacman "stable" && sudo pacman -Suu --noconfirm ;; +"stable") omarchy-branch-set "master" && omarchy-refresh-pacman "stable" ;; +"rc") omarchy-branch-set "rc" && omarchy-refresh-pacman "rc" ;; "edge") omarchy-branch-set "master" && omarchy-refresh-pacman "edge" ;; "dev") omarchy-branch-set "dev" && omarchy-refresh-pacman "edge" ;; *) echo "Unknown channel: $channel"; exit 1; ;; diff --git a/bin/omarchy-cmd-apple-display-brightness b/bin/omarchy-cmd-apple-display-brightness deleted file mode 100755 index d4d7968e..00000000 --- a/bin/omarchy-cmd-apple-display-brightness +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -# Adjust the brightness on Apple Studio Displays and Apple XDR Displays using asdcontrol. - -if [[ $# -eq 0 ]]; then - echo "Adjust Apple Display Brightness by passing +5000 or -5000 (or any range from 0-60000)" -else - DEVICE="$(sudo asdcontrol --detect /dev/usb/hiddev* | grep ^/dev/usb/hiddev | cut -d: -f1)" - 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 diff --git a/bin/omarchy-cmd-screenrecord b/bin/omarchy-cmd-screenrecord index b115f358..05c9d51f 100755 --- a/bin/omarchy-cmd-screenrecord +++ b/bin/omarchy-cmd-screenrecord @@ -14,6 +14,7 @@ fi DESKTOP_AUDIO="false" MICROPHONE_AUDIO="false" WEBCAM="false" +WEBCAM_DEVICE="" STOP_RECORDING="false" for arg in "$@"; do @@ -21,6 +22,7 @@ for arg in "$@"; do --with-desktop-audio) DESKTOP_AUDIO="true" ;; --with-microphone-audio) MICROPHONE_AUDIO="true" ;; --with-webcam) WEBCAM="true" ;; + --webcam-device=*) WEBCAM_DEVICE="${arg#*=}" ;; --stop-recording) STOP_RECORDING="true" esac done @@ -32,6 +34,15 @@ cleanup_webcam() { start_webcam_overlay() { cleanup_webcam + # Auto-detect first available webcam if none specified + if [[ -z "$WEBCAM_DEVICE" ]]; then + WEBCAM_DEVICE=$(v4l2-ctl --list-devices 2>/dev/null | grep -m1 "^\s*/dev/video" | tr -d '\t') + if [[ -z "$WEBCAM_DEVICE" ]]; then + notify-send "No webcam devices found" -u critical -t 3000 + return 1 + fi + fi + # Get monitor scale local scale=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .scale') @@ -41,7 +52,7 @@ start_webcam_overlay() { # 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) + local available_formats=$(v4l2-ctl --list-formats-ext -d "$WEBCAM_DEVICE" 2>/dev/null) for resolution in "${preferred_resolutions[@]}"; do if echo "$available_formats" | grep -q "$resolution"; then @@ -50,7 +61,7 @@ start_webcam_overlay() { fi done - ffplay -f v4l2 $video_size_arg -framerate 30 /dev/video0 \ + ffplay -f v4l2 $video_size_arg -framerate 30 "$WEBCAM_DEVICE" \ -vf "scale=${target_width}:-1" \ -window_title "WebcamOverlay" \ -noborder \ diff --git a/bin/omarchy-cmd-screenshot b/bin/omarchy-cmd-screenshot index b988a3b7..0a7b94ad 100755 --- a/bin/omarchy-cmd-screenshot +++ b/bin/omarchy-cmd-screenshot @@ -2,6 +2,7 @@ # Take a screenshot of the whole screen, a specific window, or a user-drawn region. # Saves to ~/Pictures by default, but that can be changed via OMARCHY_SCREENSHOT_DIR or XDG_PICTURES_DIR ENVs. +# Editor defaults to Satty but can be changed via --editor= or OMARCHY_SCREENSHOT_EDITOR env [[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs OUTPUT_DIR="${OMARCHY_SCREENSHOT_DIR:-${XDG_PICTURES_DIR:-$HOME/Pictures}}" @@ -13,6 +14,32 @@ fi pkill slurp && exit 0 +SCREENSHOT_EDITOR="${OMARCHY_SCREENSHOT_EDITOR:-satty}" + +# Parse --editor flag from any position +ARGS=() +for arg in "$@"; do + if [[ "$arg" == --editor=* ]]; then + SCREENSHOT_EDITOR="${arg#--editor=}" + else + ARGS+=("$arg") + fi +done +set -- "${ARGS[@]}" + +open_editor() { + local filepath="$1" + if [[ "$SCREENSHOT_EDITOR" == "satty" ]]; then + satty --filename "$filepath" \ + --output-filename "$filepath" \ + --actions-on-enter save-to-clipboard \ + --save-after-copy \ + --copy-command 'wl-copy' + else + $SCREENSHOT_EDITOR "$filepath" + fi +} + MODE="${1:-smart}" PROCESSING="${2:-slurp}" @@ -24,63 +51,69 @@ get_rectangles() { # 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 +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]}" + # If the selection 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]}" + 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 + 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 - done <<< "$RECTS" - fi + fi + done <<<"$RECTS" fi - ;; + fi + ;; esac -[ -z "$SELECTION" ] && exit 0 +[[ -z $SELECTION ]] && exit 0 + +FILENAME="screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png" +FILEPATH="$OUTPUT_DIR/$FILENAME" if [[ $PROCESSING == "slurp" ]]; then -grim -g "$SELECTION" - | - satty --filename - \ - --output-filename "$OUTPUT_DIR/screenshot-$(date +'%Y-%m-%d_%H-%M-%S').png" \ - --early-exit \ - --actions-on-enter save-to-clipboard \ - --save-after-copy \ - --copy-command 'wl-copy' + grim -g "$SELECTION" "$FILEPATH" || exit 1 + wl-copy <"$FILEPATH" + + ( + ACTION=$(notify-send "Screenshot saved to clipboard and file" "Edit with Super + Alt + , (or click this)" -t 10000 -i "$FILEPATH" -A "default=edit") + [[ "$ACTION" == "default" ]] && open_editor "$FILEPATH" + ) & else grim -g "$SELECTION" - | wl-copy fi diff --git a/bin/omarchy-drive-info b/bin/omarchy-drive-info index 51a57692..4943975d 100755 --- a/bin/omarchy-drive-info +++ b/bin/omarchy-drive-info @@ -11,7 +11,7 @@ fi # Find the root drive in case we are looking at partitions root_drive=$(lsblk -no PKNAME "$drive" 2>/dev/null | tail -n1) -if [[ -n "$root_drive" ]]; then +if [[ -n $root_drive ]]; then root_drive="/dev/$root_drive" else root_drive="$drive" @@ -19,11 +19,31 @@ fi # Get basic disk information size=$(lsblk -dno SIZE "$drive" 2>/dev/null) -model=$(lsblk -dno MODEL "$root_drive" 2>/dev/null) +vendor=$(lsblk -dno VENDOR "$root_drive" 2>/dev/null | sed 's/ *$//') +model=$(lsblk -dno MODEL "$root_drive" 2>/dev/null | sed 's/ *$//') + +# Combine vendor and model, avoiding duplication +label="" +if [[ -n $vendor && -n $model ]]; then + if [[ $model == *$vendor* ]]; then + label="$model" + else + label="$vendor $model" + fi +elif [[ -n $model ]]; then + label="$model" +elif [[ -n $vendor ]]; then + label="$vendor" +fi # Format display string display="$drive" -[[ -n "$size" ]] && display="$display ($size)" -[[ -n "$model" ]] && display="$display - $model" +[[ -n $size ]] && display="$display ($size)" +[[ -n $label ]] && display="$display - $label" + +# Append compact partition summary +part_summary=$(lsblk -nro TYPE,NAME,FSTYPE,MOUNTPOINT "$root_drive" 2>/dev/null | \ + awk '$1=="part" { printf "%s%s%s", s, ($3==""?"unknown":$3), ($4==""?"":"("$4")"); s=", " }') +[[ -n $part_summary ]] && display+=" [$part_summary]" echo "$display" diff --git a/bin/omarchy-hibernation-setup b/bin/omarchy-hibernation-setup index 8a423cbd..108e8ffa 100755 --- a/bin/omarchy-hibernation-setup +++ b/bin/omarchy-hibernation-setup @@ -17,9 +17,11 @@ if [ -f "$MKINITCPIO_CONF" ] && grep -q "^HOOKS+=(resume)$" "$MKINITCPIO_CONF"; exit 0 fi -MEM_TOTAL_HUMAN=$(free --human | awk '/Mem/ {print $2}') -if ! gum confirm "Use $MEM_TOTAL_HUMAN on boot drive to make hibernation available?"; then - exit 0 +if [[ $1 != "--force" ]]; then + MEM_TOTAL_HUMAN=$(free --human | awk '/Mem/ {print $2}') + if ! gum confirm "Use $MEM_TOTAL_HUMAN on boot drive to make hibernation available?"; then + exit 0 + fi fi SWAP_SUBVOLUME="/swap" @@ -57,14 +59,26 @@ sudo mkdir -p /etc/mkinitcpio.conf.d echo "Adding resume hook to $MKINITCPIO_CONF" echo "HOOKS+=(resume)" | sudo tee "$MKINITCPIO_CONF" >/dev/null -# Configure suspend-then-hibernate -echo "Configuring suspend-then-hibernate" -sudo mkdir -p /etc/systemd/logind.conf.d /etc/systemd/sleep.conf.d -sudo cp "$OMARCHY_PATH/default/systemd/lid.conf" /etc/systemd/logind.conf.d/ -sudo cp "$OMARCHY_PATH/default/systemd/hibernate.conf" /etc/systemd/sleep.conf.d/ +# Ensure keyboard backlight doesn't prevent sleep +sudo cp -p "$OMARCHY_PATH/default/systemd/system-sleep/keyboard-backlight" /usr/lib/systemd/system-sleep/ -# Regenerate initramfs +# Use ACPI alarm for RTC wakeup on s2idle systems (needed for suspend-then-hibernate) +if grep -q "\[s2idle\]" /sys/power/mem_sleep 2>/dev/null; then + LIMINE_DROP_IN="/etc/limine-entry-tool.d/rtc-alarm.conf" + if [[ ! -f "$LIMINE_DROP_IN" ]]; then + echo "Enabling ACPI RTC alarm for s2idle suspend" + sudo mkdir -p /etc/limine-entry-tool.d + echo 'KERNEL_CMDLINE[default]+="rtc_cmos.use_acpi_alarm=1"' | sudo tee "$LIMINE_DROP_IN" >/dev/null + fi +fi + +# Regenerate initramfs and boot entry echo "Regenerating initramfs..." sudo limine-mkinitcpio +sudo limine-update -echo "Hibernation enabled" +echo + +if [[ $1 != "--force" ]] && gum confirm "Reboot to enable hibernation?"; then + omarchy-cmd-reboot +fi diff --git a/bin/omarchy-hw-asus-rog b/bin/omarchy-hw-asus-rog new file mode 100755 index 00000000..3a0e27af --- /dev/null +++ b/bin/omarchy-hw-asus-rog @@ -0,0 +1,6 @@ +#!/bin/bash + +# Detect whether the computer is an Asus ROG machine. + +[[ "$(cat /sys/class/dmi/id/sys_vendor 2>/dev/null)" == "ASUSTeK COMPUTER INC." ]] && + grep -q "ROG" /sys/class/dmi/id/product_family 2>/dev/null diff --git a/bin/omarchy-hw-framework16 b/bin/omarchy-hw-framework16 new file mode 100755 index 00000000..dffceb04 --- /dev/null +++ b/bin/omarchy-hw-framework16 @@ -0,0 +1,6 @@ +#!/bin/bash + +# Detect whether the computer is a Framework Laptop 16. + +[[ "$(cat /sys/class/dmi/id/sys_vendor 2>/dev/null)" == "Framework" ]] && + grep -q "Laptop 16" /sys/class/dmi/id/product_name 2>/dev/null diff --git a/bin/omarchy-install-dev-env b/bin/omarchy-install-dev-env index 07d6f968..00d40130 100755 --- a/bin/omarchy-install-dev-env +++ b/bin/omarchy-install-dev-env @@ -3,7 +3,7 @@ # Install one of the supported development environments. Usually called via Install > Development > * in the Omarchy Menu. if [[ -z "$1" ]]; then - echo "Usage: omarchy-install-dev-env " >&2 + echo "Usage: omarchy-install-dev-env " >&2 exit 1 fi @@ -141,4 +141,9 @@ clojure) omarchy-pkg-add rlwrap mise use --global clojure@latest ;; +scala) + echo -e "Installing Scala...\n" + mise use --global scala@latest + mise use --global scala-cli@latest + ;; esac diff --git a/bin/omarchy-install-geforce-now b/bin/omarchy-install-geforce-now new file mode 100755 index 00000000..4c941a9b --- /dev/null +++ b/bin/omarchy-install-geforce-now @@ -0,0 +1,17 @@ +#!/bin/bash + +# Install and launch Geforce Now. + +set -e + +omarchy-pkg-add flatpak +cd /tmp + +# Download and run GeForce NOW +curl -LO https://international.download.nvidia.com/GFNLinux/GeForceNOWSetup.bin +chmod +x GeForceNOWSetup.bin +./GeForceNOWSetup.bin + +# Ensure a separate browser process not started by GFN is available. +# If not, it seems like GFN has a tendency to hang on login. +setsid omarchy-launch-browser diff --git a/bin/omarchy-install-tailscale b/bin/omarchy-install-tailscale index b439744c..a4e9ed5b 100755 --- a/bin/omarchy-install-tailscale +++ b/bin/omarchy-install-tailscale @@ -1,15 +1,10 @@ #!/bin/bash -# Install the Tailscale mesh VPN service, the tsui TUI management app, and a web app for the Tailscale Admin Console. +# Install the Tailscale mesh VPN service and a web app for the Tailscale Admin Console. curl -fsSL https://tailscale.com/install.sh | sh -curl -fsSL https://neuralink.com/tsui/install.sh | bash echo -e "\nStarting Tailscale..." sudo tailscale up --accept-routes -echo -e "\nAdd tsui to sudoers..." -echo "$USER ALL=(ALL) NOPASSWD: $(which tsui)" | sudo tee /etc/sudoers.d/tsui - -omarchy-tui-install "Tailscale" "sudo tsui" float https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tailscale-light.png -omarchy-webapp-install "Tailscale Admin Console" "https://login.tailscale.com/admin/machines" https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tailscale-light.png +omarchy-webapp-install "Tailscale" "https://login.tailscale.com/admin/machines" https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tailscale-light.png diff --git a/bin/omarchy-launch-browser b/bin/omarchy-launch-browser index 0d168978..b4b3e289 100755 --- a/bin/omarchy-launch-browser +++ b/bin/omarchy-launch-browser @@ -6,7 +6,7 @@ default_browser=$(xdg-settings get default-web-browser) browser_exec=$(sed -n 's/^Exec=\([^ ]*\).*/\1/p' {~/.local,~/.nix-profile,/usr}/share/applications/$default_browser 2>/dev/null | head -1) -if [[ $browser_exec =~ (firefox|zen|librewolf|mullvad) ]]; then +if $browser_exec --help | grep -q MOZ_LOG; then private_flag="--private-window" elif [[ $browser_exec =~ edge ]]; then private_flag="--inprivate" diff --git a/bin/omarchy-launch-walker b/bin/omarchy-launch-walker index 3d92b6b0..8b239f10 100755 --- a/bin/omarchy-launch-walker +++ b/bin/omarchy-launch-walker @@ -1,6 +1,6 @@ #!/bin/bash -# Launch the Walker application launcher while ensuring that it's data provider (called elephant) is runnig first. +# Launch the Walker application launcher while ensuring that it's data provider (called elephant) is running first. # Ensure elephant is running before launching walker if ! pgrep -x elephant > /dev/null; then diff --git a/bin/omarchy-menu b/bin/omarchy-menu index a52ef40c..f783caa5 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -88,38 +88,65 @@ show_learn_menu() { } show_trigger_menu() { - case $(menu "Trigger" " Capture\n Share\n󰔎 Toggle") in + case $(menu "Trigger" " Capture\n Share\n󰔎 Toggle\n Hardware") in *Capture*) show_capture_menu ;; *Share*) show_share_menu ;; *Toggle*) show_toggle_menu ;; + *Hardware*) show_hardware_menu ;; *) show_main_menu ;; esac } show_capture_menu() { case $(menu "Capture" " Screenshot\n Screenrecord\n󰃉 Color") in - *Screenshot*) show_screenshot_menu ;; + *Screenshot*) omarchy-cmd-screenshot ;; *Screenrecord*) show_screenrecord_menu ;; *Color*) pkill hyprpicker || hyprpicker -a ;; *) show_trigger_menu ;; esac } -show_screenshot_menu() { - case $(menu "Screenshot" " Snap with Editing\n Straight to Clipboard") in - *Editing*) omarchy-cmd-screenshot smart ;; - *Clipboard*) omarchy-cmd-screenshot smart clipboard ;; - *) show_capture_menu ;; - esac +get_webcam_list() { + v4l2-ctl --list-devices 2>/dev/null | while IFS= read -r line; do + if [[ "$line" != $'\t'* && -n "$line" ]]; then + local name="$line" + IFS= read -r device || break + device=$(echo "$device" | tr -d '\t' | head -1) + [[ -n "$device" ]] && echo "$device $name" + fi + done +} + +show_webcam_select_menu() { + local devices=$(get_webcam_list) + local count=$(echo "$devices" | grep -c . 2>/dev/null || echo 0) + + if [[ -z "$devices" || "$count" -eq 0 ]]; then + notify-send "No webcam devices found" -u critical -t 3000 + return 1 + fi + + if [[ "$count" -eq 1 ]]; then + echo "$devices" | awk '{print $1}' + else + menu "Select Webcam" "$devices" | awk '{print $1}' + fi } 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 + case $(menu "Screenrecord" " With no audio\n With desktop audio\n With desktop + microphone audio\n With desktop + microphone audio + webcam") in + *"With no audio") omarchy-cmd-screenrecord ;; *"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 ;; + *"With desktop + microphone audio + webcam") + local device=$(show_webcam_select_menu) || { + back_to show_capture_menu + return + } + omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio --with-webcam --webcam-device="$device" + ;; *) back_to show_capture_menu ;; esac } @@ -143,11 +170,18 @@ show_toggle_menu() { esac } +show_hardware_menu() { + case $(menu "Toggle" " Hybrid GPU") in + *"Hybrid GPU"*) present_terminal omarchy-toggle-hybrid-gpu ;; + *) show_trigger_menu ;; + esac +} + show_style_menu() { case $(menu "Style" "󰸌 Theme\n Font\n Background\n Hyprland\n󱄄 Screensaver\n About") in *Theme*) show_theme_menu ;; *Font*) show_font_menu ;; - *Background*) omarchy-theme-bg-next ;; + *Background*) show_background_menu ;; *Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;; *Screensaver*) open_in_editor ~/.config/omarchy/branding/screensaver.txt ;; *About*) open_in_editor ~/.config/omarchy/branding/about.txt ;; @@ -159,6 +193,10 @@ show_theme_menu() { omarchy-launch-walker -m menus:omarchythemes --width 800 --minheight 400 } +show_background_menu() { + omarchy-launch-walker -m menus:omarchyBackgroundSelector --width 800 --minheight 400 +} + show_font_menu() { theme=$(menu "Font" "$(omarchy-font-list)" "--width 350" "$(omarchy-font-current)") if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then @@ -317,8 +355,9 @@ 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󰢹 NVIDIA GeForce NOW\n RetroArch [AUR]\n󰍳 Minecraft\n󰖺 Xbox Controller [AUR]") in *Steam*) present_terminal omarchy-install-steam ;; + *GeForce*) present_terminal omarchy-install-geforce-now ;; *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 ;; @@ -347,7 +386,7 @@ show_install_font_menu() { } show_install_development_menu() { - case $(menu "Install" "󰫏 Ruby on Rails\n Docker DB\n JavaScript\n Go\n PHP\n Python\n Elixir\n Zig\n Rust\n Java\n .NET\n OCaml\n Clojure") in + case $(menu "Install" "󰫏 Ruby on Rails\n Docker DB\n JavaScript\n Go\n PHP\n Python\n Elixir\n Zig\n Rust\n Java\n .NET\n OCaml\n Clojure\n Scala") in *Rails*) present_terminal "omarchy-install-dev-env ruby" ;; *Docker*) present_terminal omarchy-install-docker-dbs ;; *JavaScript*) show_install_javascript_menu ;; @@ -361,6 +400,7 @@ show_install_development_menu() { *NET*) present_terminal "omarchy-install-dev-env dotnet" ;; *OCaml*) present_terminal "omarchy-install-dev-env ocaml" ;; *Clojure*) present_terminal "omarchy-install-dev-env clojure" ;; + *Scala*) present_terminal "omarchy-install-dev-env scala" ;; *) show_install_menu ;; esac } @@ -392,11 +432,12 @@ show_install_elixir_menu() { } show_remove_menu() { - case $(menu "Remove" "󰣇 Package\n Web App\n TUI\n󰵮 Development\n Dictation\n󰸌 Theme\n󰍲 Windows\n󰈷 Fingerprint\n Fido2") in + case $(menu "Remove" "󰣇 Package\n Web App\n TUI\n󰵮 Development\n󰏓 Preinstalls\n Dictation\n󰸌 Theme\n󰍲 Windows\n󰈷 Fingerprint\n Fido2") in *Package*) terminal omarchy-pkg-remove ;; *Web*) present_terminal omarchy-webapp-remove ;; *TUI*) present_terminal omarchy-tui-remove ;; *Development*) show_remove_development_menu ;; + *Preinstalls*) present_terminal omarchy-remove-all ;; *Dictation*) present_terminal omarchy-voxtype-remove ;; *Theme*) present_terminal omarchy-theme-remove ;; *Windows*) present_terminal "omarchy-windows-vm remove" ;; @@ -407,7 +448,7 @@ show_remove_menu() { } show_remove_development_menu() { - case $(menu "Remove" "󰫏 Ruby on Rails\n JavaScript\n Go\n PHP\n Python\n Elixir\n Zig\n Rust\n Java\n .NET\n OCaml\n Clojure") in + case $(menu "Remove" "󰫏 Ruby on Rails\n JavaScript\n Go\n PHP\n Python\n Elixir\n Zig\n Rust\n Java\n .NET\n OCaml\n Clojure") in *Rails*) present_terminal "omarchy-remove-dev-env ruby" ;; *JavaScript*) show_remove_javascript_menu ;; *Go*) present_terminal "omarchy-remove-dev-env go" ;; @@ -425,7 +466,7 @@ show_remove_development_menu() { } show_remove_javascript_menu() { - case $(menu "Remove" " Node.js\n Bun\n Deno") in + case $(menu "Remove" " Node.js\n Bun\n Deno") in *Node*) present_terminal "omarchy-remove-dev-env node" ;; *Bun*) present_terminal "omarchy-remove-dev-env bun" ;; *Deno*) present_terminal "omarchy-remove-dev-env deno" ;; @@ -434,7 +475,7 @@ show_remove_javascript_menu() { } show_remove_php_menu() { - case $(menu "Remove" " PHP\n Laravel\n Symfony") in + case $(menu "Remove" " PHP\n Laravel\n Symfony") in *PHP*) present_terminal "omarchy-remove-dev-env php" ;; *Laravel*) present_terminal "omarchy-remove-dev-env laravel" ;; *Symfony*) present_terminal "omarchy-remove-dev-env symfony" ;; @@ -443,7 +484,7 @@ show_remove_php_menu() { } show_remove_elixir_menu() { - case $(menu "Remove" " Elixir\n Phoenix") in + case $(menu "Remove" " Elixir\n Phoenix") in *Elixir*) present_terminal "omarchy-remove-dev-env elixir" ;; *Phoenix*) present_terminal "omarchy-remove-dev-env phoenix" ;; *) show_remove_development_menu ;; @@ -451,7 +492,7 @@ show_remove_elixir_menu() { } show_update_menu() { - case $(menu "Update" " Omarchy\n󰔫 Channel\n Config\n󰸌 Extra Themes\n Process\n󰇅 Hardware\n Firmware\n Password\n Timezone\n Time") in + case $(menu "Update" "  Omarchy\n󰔫 Channel\n Config\n󰸌 Extra Themes\n Process\n󰇅 Hardware\n Firmware\n Password\n Timezone\n Time") in *Omarchy*) present_terminal omarchy-update ;; *Channel*) show_update_channel_menu ;; *Config*) show_update_config_menu ;; @@ -467,8 +508,9 @@ show_update_menu() { } show_update_channel_menu() { - case $(menu "Update channel" "🟢 Stable\n🟡 Edge\n🔴 Dev") in + case $(menu "Update channel" "🟢 Stable\n🟡 RC\n🟠 Edge\n🔴 Dev") in *Stable*) present_terminal "omarchy-channel-set stable" ;; + *RC*) present_terminal "omarchy-channel-set rc" ;; *Edge*) present_terminal "omarchy-channel-set edge" ;; *Dev*) present_terminal "omarchy-channel-set dev" ;; *) show_update_menu ;; @@ -486,13 +528,14 @@ show_update_process_menu() { } show_update_config_menu() { - case $(menu "Use default config" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n󱣴 Plymouth\n Swayosd\n󰌧 Walker\n󰍜 Waybar") in + case $(menu "Use default config" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n󱣴 Plymouth\n Swayosd\n Tmux\n󰌧 Walker\n󰍜 Waybar") in *Hyprland*) present_terminal omarchy-refresh-hyprland ;; *Hypridle*) present_terminal omarchy-refresh-hypridle ;; *Hyprlock*) present_terminal omarchy-refresh-hyprlock ;; *Hyprsunset*) present_terminal omarchy-refresh-hyprsunset ;; *Plymouth*) present_terminal omarchy-refresh-plymouth ;; *Swayosd*) present_terminal omarchy-refresh-swayosd ;; + *Tmux*) present_terminal omarchy-refresh-tmux ;; *Walker*) present_terminal omarchy-refresh-walker ;; *Waybar*) present_terminal omarchy-refresh-waybar ;; *) show_update_menu ;; @@ -516,6 +559,10 @@ show_update_password_menu() { esac } +show_about() { + omarchy-launch-about +} + show_system_menu() { local options=" Lock\n󱄄 Screensaver" [ -f ~/.local/state/omarchy/toggles/suspend-on ] && options="$options\n󰒲 Suspend" @@ -543,6 +590,7 @@ go_to_menu() { *learn*) show_learn_menu ;; *trigger*) show_trigger_menu ;; *share*) show_share_menu ;; + *background*) show_background_menu ;; *capture*) show_capture_menu ;; *style*) show_style_menu ;; *theme*) show_theme_menu ;; @@ -553,7 +601,7 @@ go_to_menu() { *install*) show_install_menu ;; *remove*) show_remove_menu ;; *update*) show_update_menu ;; - *about*) omarchy-launch-about ;; + *about*) show_about ;; *system*) show_system_menu ;; esac } diff --git a/bin/omarchy-pkg-aur-install b/bin/omarchy-pkg-aur-install index 8fb849c0..d1efccf7 100755 --- a/bin/omarchy-pkg-aur-install +++ b/bin/omarchy-pkg-aur-install @@ -19,8 +19,9 @@ fzf_args=( pkg_names=$(yay -Slqa | fzf "${fzf_args[@]}") if [[ -n "$pkg_names" ]]; then - # Convert newline-separated selections to space-separated for yay - echo "$pkg_names" | tr '\n' ' ' | xargs yay -S --noconfirm + # Add aur/ prefix to each package name and convert to space-separated for yay + sudo -v + echo "$pkg_names" | sed 's/^/aur\//' | tr '\n' ' ' | xargs yay -S --noconfirm sudo updatedb omarchy-show-done fi diff --git a/bin/omarchy-refresh-pacman b/bin/omarchy-refresh-pacman index 3cffd226..cef14215 100755 --- a/bin/omarchy-refresh-pacman +++ b/bin/omarchy-refresh-pacman @@ -7,17 +7,18 @@ sudo cp -f /etc/pacman.conf /etc/pacman.conf.bak sudo cp -f /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak -if [[ $1 == "edge" ]]; then - sudo cp -f ~/.local/share/omarchy/default/pacman/pacman-edge.conf /etc/pacman.conf - sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-edge /etc/pacman.d/mirrorlist - echo "Setting channel to edge" -else - sudo cp -f ~/.local/share/omarchy/default/pacman/pacman-stable.conf /etc/pacman.conf - sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-stable /etc/pacman.d/mirrorlist - echo "Setting channel to stable" +channel="${1:-stable}" + +if [[ "$channel" != "stable" && "$channel" != "rc" && "$channel" != "edge" ]]; then + echo "Error: Invalid channel '$channel'. Must be one of: stable, rc, edge" + exit 1 fi +echo "Setting channel to $channel" echo +sudo cp -f "$OMARCHY_PATH/default/pacman/pacman-$channel.conf" /etc/pacman.conf +sudo cp -f "$OMARCHY_PATH/default/pacman/mirrorlist-$channel" /etc/pacman.d/mirrorlist + # Reset all package DBs and then update -sudo pacman -Syyu --noconfirm +sudo pacman -Syyuu --noconfirm diff --git a/bin/omarchy-refresh-tmux b/bin/omarchy-refresh-tmux new file mode 100755 index 00000000..c0f675fb --- /dev/null +++ b/bin/omarchy-refresh-tmux @@ -0,0 +1,6 @@ +#!/bin/bash + +# Overwrite the user tmux config with the Omarchy default and reload tmux. + +omarchy-refresh-config tmux/tmux.conf +tmux source-file ~/.config/tmux/tmux.conf diff --git a/bin/omarchy-refresh-walker b/bin/omarchy-refresh-walker index a08a29cc..dd6900e1 100755 --- a/bin/omarchy-refresh-walker +++ b/bin/omarchy-refresh-walker @@ -5,9 +5,17 @@ # Ensure walker is set to autostart mkdir -p ~/.config/autostart/ cp $OMARCHY_PATH/default/walker/walker.desktop ~/.config/autostart/ + +# And restarts if it crashes or is killed +mkdir -p ~/.config/systemd/user/app-walker@autostart.service.d/ +cp $OMARCHY_PATH/default/walker/restart.conf ~/.config/systemd/user/app-walker@autostart.service.d/restart.conf + systemctl --user daemon-reload +# Refresh configs omarchy-refresh-config walker/config.toml omarchy-refresh-config elephant/calc.toml omarchy-refresh-config elephant/desktopapplications.toml + +# Restart service omarchy-restart-walker diff --git a/bin/omarchy-remove-all b/bin/omarchy-remove-all new file mode 100755 index 00000000..cd143231 --- /dev/null +++ b/bin/omarchy-remove-all @@ -0,0 +1,25 @@ +#!/bin/bash + +# Remove preinstalled Omarchy applications (web apps, TUIs, and selected packages). +# This removes all web apps, TUIs, plus specific desktop applications. + +if gum confirm "Are you sure you want to remove all preinstalled web apps, TUI wrappers, and desktop applications?"; then + echo -e "Removing preinstalled Omarchy applications...\n" + + omarchy-webapp-remove-all + omarchy-tui-remove-all + + omarchy-pkg-drop \ + aether \ + typora \ + spotify \ + libreoffice-fresh \ + 1password-beta \ + 1password-cli \ + xournalpp \ + signal-desktop \ + pinta \ + obsidian \ + obs-studio \ + kdenlive +fi diff --git a/bin/omarchy-remove-dev-env b/bin/omarchy-remove-dev-env index d2320149..2431a09a 100755 --- a/bin/omarchy-remove-dev-env +++ b/bin/omarchy-remove-dev-env @@ -1,5 +1,8 @@ #!/bin/bash +# Remove a development environment that was previously installed via omarchy-install-dev-env. +# Usage: omarchy-remove-dev-env + if [[ -z "$1" ]]; then echo "Usage: omarchy-remove-dev-env " >&2 exit 1 diff --git a/bin/omarchy-reset-sudo b/bin/omarchy-reset-sudo index 94822623..2c568469 100755 --- a/bin/omarchy-reset-sudo +++ b/bin/omarchy-reset-sudo @@ -1,4 +1,7 @@ #!/bin/bash +# Reset the sudo lockout/faillock for the current user. +# This clears any failed authentication attempts that may have locked the user out. + # Resetting sudo lockout for user su -c "faillock --reset --user $USER" diff --git a/bin/omarchy-restart-app b/bin/omarchy-restart-app index 4cc474fa..6e0a46ad 100755 --- a/bin/omarchy-restart-app +++ b/bin/omarchy-restart-app @@ -1,4 +1,7 @@ #!/bin/bash +# Restart an application by killing it and relaunching via uwsm. +# Usage: omarchy-restart-app + pkill -x $1 setsid uwsm-app -- $1 >/dev/null 2>&1 & diff --git a/bin/omarchy-restart-bluetooth b/bin/omarchy-restart-bluetooth index 1d3c6c11..57530d10 100755 --- a/bin/omarchy-restart-bluetooth +++ b/bin/omarchy-restart-bluetooth @@ -1,5 +1,7 @@ #!/bin/bash +# Unblock and restart the bluetooth service. + echo -e "Unblocking bluetooth...\n" rfkill unblock bluetooth rfkill list bluetooth diff --git a/bin/omarchy-restart-hypridle b/bin/omarchy-restart-hypridle index 261f0aa3..02186267 100755 --- a/bin/omarchy-restart-hypridle +++ b/bin/omarchy-restart-hypridle @@ -1,3 +1,5 @@ #!/bin/bash +# Restart the hypridle service (used for idle detection and auto-lock). + omarchy-restart-app hypridle diff --git a/bin/omarchy-restart-hyprsunset b/bin/omarchy-restart-hyprsunset index 0e681bfd..c705ab53 100755 --- a/bin/omarchy-restart-hyprsunset +++ b/bin/omarchy-restart-hyprsunset @@ -1,3 +1,5 @@ #!/bin/bash +# Restart the hyprsunset service (used for blue light filtering/night light). + omarchy-restart-app hyprsunset diff --git a/bin/omarchy-restart-opencode b/bin/omarchy-restart-opencode index 2ff22d3e..086eba9f 100755 --- a/bin/omarchy-restart-opencode +++ b/bin/omarchy-restart-opencode @@ -2,4 +2,6 @@ # Reload opencode configuration (used by the Omarchy theme switching). -killall -SIGUSR2 opencode +if pgrep -x opencode >/dev/null; then + killall -SIGUSR2 opencode +fi diff --git a/bin/omarchy-restart-pipewire b/bin/omarchy-restart-pipewire index f26ee09e..a222ad1e 100755 --- a/bin/omarchy-restart-pipewire +++ b/bin/omarchy-restart-pipewire @@ -1,4 +1,6 @@ #!/bin/bash +# Restart the PipeWire audio service to fix audio issues or apply new configuration. + echo -e "Restarting pipewire audio service...\n" systemctl --user restart pipewire.service diff --git a/bin/omarchy-restart-wifi b/bin/omarchy-restart-wifi index b4d66a5a..5cf35dd3 100755 --- a/bin/omarchy-restart-wifi +++ b/bin/omarchy-restart-wifi @@ -1,5 +1,7 @@ #!/bin/bash +# Unblock and restart the Wi-Fi service. + echo -e "Unblocking wifi...\n" rfkill unblock wifi rfkill list wifi diff --git a/bin/omarchy-restart-xcompose b/bin/omarchy-restart-xcompose index 45f7d9a8..dcbd237f 100755 --- a/bin/omarchy-restart-xcompose +++ b/bin/omarchy-restart-xcompose @@ -1,3 +1,5 @@ #!/bin/bash +# Restart the XCompose input method service (fcitx5) to apply new compose key settings. + omarchy-restart-app fcitx5 diff --git a/bin/omarchy-setup-fingerprint b/bin/omarchy-setup-fingerprint index 105234ff..22a164ef 100755 --- a/bin/omarchy-setup-fingerprint +++ b/bin/omarchy-setup-fingerprint @@ -58,11 +58,13 @@ EOF add_hyprlock_fingerprint_icon() { print_info "Adding fingerprint icon to hyprlock placeholder text..." sed -i 's/placeholder_text = .*/placeholder_text = Enter Password 󰈷 <\/span>/' ~/.config/hypr/hyprlock.conf + sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = true/' ~/.config/hypr/hyprlock.conf } remove_hyprlock_fingerprint_icon() { print_info "Removing fingerprint icon from hyprlock placeholder text..." sed -i 's/placeholder_text = .*/placeholder_text = Enter Password/' ~/.config/hypr/hyprlock.conf + sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = false/' ~/.config/hypr/hyprlock.conf } remove_pam_config() { diff --git a/bin/omarchy-show-done b/bin/omarchy-show-done index de5fe2ab..36f5aec2 100755 --- a/bin/omarchy-show-done +++ b/bin/omarchy-show-done @@ -1,4 +1,7 @@ #!/bin/bash +# Display a "Done!" message with a spinner and wait for user to press any key. +# Used by various install scripts to indicate completion. + echo gum spin --spinner "globe" --title "Done! Press any key to close..." -- bash -c 'read -n 1 -s' diff --git a/bin/omarchy-show-logo b/bin/omarchy-show-logo index fbaf38df..a6137c58 100755 --- a/bin/omarchy-show-logo +++ b/bin/omarchy-show-logo @@ -1,5 +1,8 @@ #!/bin/bash +# Display the Omarchy logo in the terminal using green color. +# Used by various presentation scripts to show branding. + clear echo -e "\033[32m" cat <~/.local/share/omarchy/logo.txt diff --git a/bin/omarchy-snapshot b/bin/omarchy-snapshot index ee79512a..d9f4c2d3 100755 --- a/bin/omarchy-snapshot +++ b/bin/omarchy-snapshot @@ -31,4 +31,6 @@ create) restore) sudo limine-snapper-restore ;; +delete) + sudo snapper -c "$config" delete 0 esac diff --git a/bin/omarchy-state b/bin/omarchy-state index d55943b6..884b6d94 100755 --- a/bin/omarchy-state +++ b/bin/omarchy-state @@ -1,5 +1,9 @@ #!/bin/bash +# Manage persistent state files for Omarchy toggles and settings. +# Usage: omarchy-state +# Used to track whether features like suspend, idle lock, etc are enabled or disabled. + STATE_DIR="$HOME/.local/state/omarchy" mkdir -p "$STATE_DIR" diff --git a/bin/omarchy-swayosd-brightness b/bin/omarchy-swayosd-brightness new file mode 100755 index 00000000..697be162 --- /dev/null +++ b/bin/omarchy-swayosd-brightness @@ -0,0 +1,15 @@ +#!/bin/bash + +# Display brightness level using SwayOSD on the current monitor. +# Usage: omarchy-swayosd-brightness + +percent="$1" + +progress="$(awk -v p="$percent" 'BEGIN{printf "%.2f", p/100}')" +[[ "$progress" == "0.00" ]] && progress="0.01" + +swayosd-client \ + --monitor "$(hyprctl monitors -j | jq -r '.[]|select(.focused==true).name')" \ + --custom-icon display-brightness \ + --custom-progress "$progress" \ + --custom-progress-text "${percent}%" diff --git a/bin/omarchy-swayosd-kbd-brightness b/bin/omarchy-swayosd-kbd-brightness new file mode 100755 index 00000000..7102b561 --- /dev/null +++ b/bin/omarchy-swayosd-kbd-brightness @@ -0,0 +1,15 @@ +#!/bin/bash + +# Display keyboard brightness level using SwayOSD on the current monitor. +# Usage: omarchy-swayosd-kbd-brightness + +percent="$1" + +progress="$(awk -v p="$percent" 'BEGIN{printf "%.2f", p/100}')" +[[ "$progress" == "0.00" ]] && progress="0.01" + +swayosd-client \ + --monitor "$(hyprctl monitors -j | jq -r '.[]|select(.focused==true).name')" \ + --custom-icon keyboard-brightness \ + --custom-progress "$progress" \ + --custom-progress-text "${percent}%" diff --git a/bin/omarchy-theme-bg-set b/bin/omarchy-theme-bg-set new file mode 100755 index 00000000..0b13ef0b --- /dev/null +++ b/bin/omarchy-theme-bg-set @@ -0,0 +1,18 @@ +#!/bin/bash + +# Sets the specified image as the current background + +if [[ -z "$1" ]]; then + echo "Usage: omarchy-theme-bg-set " >&2 + exit 1 +fi + +BACKGROUND="$1" +CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background" + +# Create symlink to the new background +ln -nsf "$BACKGROUND" "$CURRENT_BACKGROUND_LINK" + +# Kill existing swaybg and start new one +pkill -x swaybg +setsid uwsm-app -- swaybg -i "$CURRENT_BACKGROUND_LINK" -m fill >/dev/null 2>&1 & diff --git a/bin/omarchy-theme-refresh b/bin/omarchy-theme-refresh new file mode 100755 index 00000000..e967f289 --- /dev/null +++ b/bin/omarchy-theme-refresh @@ -0,0 +1,9 @@ +#!/bin/bash + +# Refresh the current theme from its templates. + +THEME_NAME_PATH="$HOME/.config/omarchy/current/theme.name" + +if [[ -f $THEME_NAME_PATH ]]; then + omarchy-theme-set "$(cat $THEME_NAME_PATH)" +fi diff --git a/bin/omarchy-theme-set b/bin/omarchy-theme-set index ba34a501..6fb2dddd 100755 --- a/bin/omarchy-theme-set +++ b/bin/omarchy-theme-set @@ -12,11 +12,7 @@ OMARCHY_THEMES_PATH="$OMARCHY_PATH/themes" THEME_NAME=$(echo "$1" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-') -if [[ -d "$USER_THEMES_PATH/$THEME_NAME" ]]; then - THEME_PATH="$USER_THEMES_PATH/$THEME_NAME" -elif [[ -d "$OMARCHY_THEMES_PATH/$THEME_NAME" ]]; then - THEME_PATH="$OMARCHY_THEMES_PATH/$THEME_NAME" -else +if [[ ! -d "$OMARCHY_THEMES_PATH/$THEME_NAME" ]] && [[ ! -d "$USER_THEMES_PATH/$THEME_NAME" ]]; then echo "Theme '$THEME_NAME' does not exist" exit 1 fi @@ -25,8 +21,9 @@ fi rm -rf "$NEXT_THEME_PATH" mkdir -p "$NEXT_THEME_PATH" -# Copy static configs -cp -r "$THEME_PATH/"* "$NEXT_THEME_PATH/" 2>/dev/null +# Copy official theme first, then overlay user customizations on top +cp -r "$OMARCHY_THEMES_PATH/$THEME_NAME/"* "$NEXT_THEME_PATH/" 2>/dev/null +cp -r "$USER_THEMES_PATH/$THEME_NAME/"* "$NEXT_THEME_PATH/" 2>/dev/null # Generate dynamic configs omarchy-theme-set-templates @@ -36,7 +33,7 @@ rm -rf "$CURRENT_THEME_PATH" mv "$NEXT_THEME_PATH" "$CURRENT_THEME_PATH" # Store theme name for reference -echo "$THEME_NAME" > "$HOME/.config/omarchy/current/theme.name" +echo "$THEME_NAME" >"$HOME/.config/omarchy/current/theme.name" # Change background with theme omarchy-theme-bg-next @@ -57,6 +54,7 @@ omarchy-theme-set-gnome omarchy-theme-set-browser omarchy-theme-set-vscode omarchy-theme-set-obsidian +omarchy-theme-set-keyboard # Call hook on theme set omarchy-hook theme-set "$THEME_NAME" diff --git a/bin/omarchy-theme-set-browser b/bin/omarchy-theme-set-browser index 0b4eff6a..0ff87091 100755 --- a/bin/omarchy-theme-set-browser +++ b/bin/omarchy-theme-set-browser @@ -2,7 +2,7 @@ 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 THEME_RGB_COLOR=$(<$CHROMIUM_THEME) THEME_HEX_COLOR=$(printf '#%02x%02x%02x' ${THEME_RGB_COLOR//,/ }) @@ -13,14 +13,8 @@ if omarchy-cmd-present chromium || omarchy-cmd-present helium-browser || omarchy fi if omarchy-cmd-present chromium; then - rm -f /etc/chromium/policies/managed/color.json - chromium --no-startup-window --set-theme-color="$THEME_RGB_COLOR" >/dev/null - - if [[ -f ~/.config/omarchy/current/theme/light.mode ]]; then - chromium --no-startup-window --set-color-scheme="light" >/dev/null - else - chromium --no-startup-window --set-color-scheme="dark" >/dev/null - fi + echo "{\"BrowserThemeColor\": \"$THEME_HEX_COLOR\"}" | tee "/etc/chromium/policies/managed/color.json" >/dev/null + chromium --refresh-platform-policy --no-startup-window >/dev/null fi if omarchy-cmd-present brave; then diff --git a/bin/omarchy-theme-set-keyboard b/bin/omarchy-theme-set-keyboard new file mode 100755 index 00000000..6c237a8e --- /dev/null +++ b/bin/omarchy-theme-set-keyboard @@ -0,0 +1,4 @@ +#!/bin/bash + +omarchy-theme-set-keyboard-asus-rog +omarchy-theme-set-keyboard-f16 diff --git a/bin/omarchy-theme-set-keyboard-asus-rog b/bin/omarchy-theme-set-keyboard-asus-rog new file mode 100755 index 00000000..e0078ee4 --- /dev/null +++ b/bin/omarchy-theme-set-keyboard-asus-rog @@ -0,0 +1,7 @@ +#!/bin/bash + +ASUSCTL_THEME=~/.config/omarchy/current/theme/keyboard.rgb + +if omarchy-cmd-present asusctl; then + asusctl aura effect static -c $(sed 's/^#//' $ASUSCTL_THEME) +fi diff --git a/bin/omarchy-theme-set-keyboard-f16 b/bin/omarchy-theme-set-keyboard-f16 new file mode 100755 index 00000000..c7a352da --- /dev/null +++ b/bin/omarchy-theme-set-keyboard-f16 @@ -0,0 +1,22 @@ +#!/bin/bash + +FRAMEWORK16_THEME=~/.config/omarchy/current/theme/keyboard.rgb + +if omarchy-cmd-present qmk_hid && [[ -f "$FRAMEWORK16_THEME" ]]; then + hex=$(cat "$FRAMEWORK16_THEME") + hex="${hex#\#}" + + # Convert hex to QMK HSV (0-255 scale) using Python's colorsys + read -r h s <<< $(python3 -c " +import colorsys +r, g, b = int('$hex'[:2],16)/255, int('$hex'[2:4],16)/255, int('$hex'[4:6],16)/255 +h, s, v = colorsys.rgb_to_hsv(r, g, b) +print(int(h * 255), int(s * 255)) +") + + qmk_hid via --rgb-effect 1 2>/dev/null + qmk_hid via --rgb-hue "$h" 2>/dev/null + qmk_hid via --rgb-saturation "$s" 2>/dev/null + qmk_hid via --rgb-brightness 100 2>/dev/null + qmk_hid via --save 2>/dev/null +fi diff --git a/bin/omarchy-toggle-hybrid-gpu b/bin/omarchy-toggle-hybrid-gpu new file mode 100755 index 00000000..c2395ba8 --- /dev/null +++ b/bin/omarchy-toggle-hybrid-gpu @@ -0,0 +1,65 @@ +#!/bin/bash + +# Toggle dedicated vs integrated GPU mode via supergfxd (for hybrid gpu laptops, like Asus G14). +# Requires reboot to take effect. + +# Ensure supergfxctl has been installed +if omarchy-cmd-missing supergfxctl; then + omarchy-pkg-add supergfxctl + + # Create config before starting service to prevent hang on first boot + sudo tee /etc/supergfxd.conf >/dev/null <<'CONF' +{ + "mode": "Hybrid", + "vfio_enable": true, + "vfio_save": false, + "always_reboot": false, + "no_logind": false, + "logout_timeout_s": 180, + "hotplug_type": "None" +} +CONF + + sudo systemctl enable --now supergfxd +fi + +gpu_mode=$(supergfxctl -g) + +case "$gpu_mode" in +"Integrated") + if gum confirm "Enable dedicated GPU and reboot?"; then + # Switch to hybrid mode + sudo sed -i "s/\"mode\": \".*\"/\"mode\": \"Hybrid\"/" /etc/supergfxd.conf + + # Let hybrid mode be the default after system sleep + sudo rm -rf /usr/lib/systemd/system-sleep/force-igpu + + # Remove the startup delay override (not needed for Hybrid mode) + sudo rm -rf /etc/systemd/system/supergfxd.service.d/delay-start.conf + + omarchy-cmd-reboot + fi + ;; +"Hybrid") + if gum confirm "Use only integrated GPU and reboot?"; then + # Switch to integrated mode and ensure vfio is enabled (needed for sleep/wake trick) + sudo sed -i "s/\"mode\": \".*\"/\"mode\": \"Integrated\"/" /etc/supergfxd.conf + sudo sed -i 's/"vfio_enable": false/"vfio_enable": true/' /etc/supergfxd.conf + + # Force igpu mode after system sleep (or dgpu could get activated) + sudo mkdir -p /usr/lib/systemd/system-sleep + sudo cp -p $OMARCHY_PATH/default/systemd/system-sleep/force-igpu /usr/lib/systemd/system-sleep/ + + # Delay supergfxd startup to avoid race condition with display manager + # that can cause system freeze when booting in Integrated mode + sudo mkdir -p /etc/systemd/system/supergfxd.service.d + sudo cp -p $OMARCHY_PATH/default/systemd/system/supergfxd.service.d/delay-start.conf /etc/systemd/system/supergfxd.service.d/ + + omarchy-cmd-reboot + fi + ;; +*) + echo "Hybrid GPU not found or in unknown mode." + exit 1 + ;; +esac diff --git a/bin/omarchy-toggle-idle b/bin/omarchy-toggle-idle index aa69cf50..58f0a85d 100755 --- a/bin/omarchy-toggle-idle +++ b/bin/omarchy-toggle-idle @@ -2,8 +2,10 @@ if pgrep -x hypridle >/dev/null; then pkill -x hypridle - notify-send "Stop locking computer when idle" + notify-send "󱫖 Stop locking computer when idle" else uwsm-app -- hypridle >/dev/null 2>&1 & - notify-send "Now locking computer when idle" + notify-send "󱫖 Now locking computer when idle" fi + +pkill -RTMIN+9 waybar diff --git a/bin/omarchy-toggle-monitor-scaling b/bin/omarchy-toggle-monitor-scaling new file mode 100755 index 00000000..00509752 --- /dev/null +++ b/bin/omarchy-toggle-monitor-scaling @@ -0,0 +1,21 @@ +#!/bin/bash + +# Get the active monitor (the one with the cursor) +MONITOR_INFO=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true)') +ACTIVE_MONITOR=$(echo "$MONITOR_INFO" | jq -r '.name') +CURRENT_SCALE=$(echo "$MONITOR_INFO" | jq -r '.scale') + +# Cycle through scales: 1 → 1.6 → 2 → 3 → 1 +CURRENT_INT=$(awk -v s="$CURRENT_SCALE" 'BEGIN { printf "%.0f", s * 10 }') + +case "$CURRENT_INT" in +10) NEW_SCALE=1.6 ;; +16) NEW_SCALE=2 ;; +20) NEW_SCALE=3 ;; +*) NEW_SCALE=1 ;; +esac + +hyprctl keyword misc:disable_scale_notification true +hyprctl keyword monitor "$ACTIVE_MONITOR,preferred,auto,$NEW_SCALE" +hyprctl keyword misc:disable_scale_notification false +notify-send "󰍹 Display scaling set to ${NEW_SCALE}x" diff --git a/bin/omarchy-toggle-notification-silencing b/bin/omarchy-toggle-notification-silencing new file mode 100755 index 00000000..c8117059 --- /dev/null +++ b/bin/omarchy-toggle-notification-silencing @@ -0,0 +1,11 @@ +#!/bin/bash + +makoctl mode -t do-not-disturb + +if makoctl mode | grep -q 'do-not-disturb'; then + notify-send "󰂛 Silenced notifications" +else + notify-send "󰂚 Enabled notifications" +fi + +pkill -RTMIN+10 waybar diff --git a/bin/omarchy-toggle-single-window-square-aspect b/bin/omarchy-toggle-single-window-square-aspect new file mode 100755 index 00000000..e19b1aba --- /dev/null +++ b/bin/omarchy-toggle-single-window-square-aspect @@ -0,0 +1,13 @@ +#!/bin/bash + +# Check current single_window_aspect_ratio setting +CURRENT_VALUE=$(hyprctl getoption "dwindle:single_window_aspect_ratio" 2>/dev/null | head -1) + +# Parse vec2 output: "vec2: [1, 1]" or "vec2: [0, 0]" +if [[ "$CURRENT_VALUE" == *"[1, 1]"* ]]; then + hyprctl keyword dwindle:single_window_aspect_ratio "0 0" + notify-send " Disable single-window square aspect ratio" +else + hyprctl keyword dwindle:single_window_aspect_ratio "1 1" + notify-send " Enable single-window square aspect" +fi diff --git a/bin/omarchy-tui-remove-all b/bin/omarchy-tui-remove-all new file mode 100755 index 00000000..8a696d84 --- /dev/null +++ b/bin/omarchy-tui-remove-all @@ -0,0 +1,36 @@ +#!/bin/bash + +# Remove all TUIs installed via omarchy-tui-install. +# Identifies TUIs by their Exec pattern (xdg-terminal-exec --app-id=TUI.). + +set -e + +APP_DIR="${1:-$HOME/.local/share/applications}" +ICON_DIR="$HOME/.local/share/applications/icons" + +echo "Scanning for TUIs in $APP_DIR..." + +tui_desktop_files=() +while IFS= read -r -d '' file; do + if grep -q "Exec=xdg-terminal-exec --app-id=TUI\." "$file" 2>/dev/null; then + tui_desktop_files+=("$file") + fi +done < <(find "$APP_DIR" -maxdepth 1 -name "*.desktop" -print0 2>/dev/null) + +if [[ ${#tui_desktop_files[@]} -eq 0 ]]; then + echo "No TUIs found." + exit 0 +fi + +for file in "${tui_desktop_files[@]}"; do + app_name=$(basename "$file" .desktop) + echo "Removing TUI: $app_name" + rm -f "$file" + rm -f "$ICON_DIR/$app_name.png" +done + +if command -v update-desktop-database &>/dev/null; then + update-desktop-database "$APP_DIR" &>/dev/null || true +fi + +echo "TUIs removed successfully." diff --git a/bin/omarchy-update b/bin/omarchy-update index 7b800005..a250166c 100755 --- a/bin/omarchy-update +++ b/bin/omarchy-update @@ -2,7 +2,7 @@ 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 +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";omarchy-snapshot delete' ERR if [[ $1 == "-y" ]] || omarchy-update-confirm; then omarchy-snapshot create || [ $? -eq 127 ] diff --git a/bin/omarchy-update-analyze-logs b/bin/omarchy-update-analyze-logs index 349506c5..fb42e82e 100755 --- a/bin/omarchy-update-analyze-logs +++ b/bin/omarchy-update-analyze-logs @@ -2,13 +2,6 @@ update_log="/tmp/omarchy-update.log" -# Check for errors -if grep -qi "error" "$update_log"; then - echo -e "\e[31mNon-stopping errors detected during update:\e[0m" - grep -i "error" "$update_log" - echo -fi - # Check for initramfs generation failure if grep -q "Updating linux initcpios" "$update_log"; then if ! grep -q "Initcpio image generation successful" "$update_log"; then diff --git a/bin/omarchy-update-aur-pkgs b/bin/omarchy-update-aur-pkgs new file mode 100755 index 00000000..0dee5edf --- /dev/null +++ b/bin/omarchy-update-aur-pkgs @@ -0,0 +1,13 @@ +#!/bin/bash + +# 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 --cleanafter --ignore gcc14,gcc14-libs + echo + else + echo -e "\e[31m\nAUR is unavailable (so skipping updates)\e[0m" + echo + fi +fi diff --git a/bin/omarchy-update-firmware b/bin/omarchy-update-firmware index 10e490f4..6eb1a088 100755 --- a/bin/omarchy-update-firmware +++ b/bin/omarchy-update-firmware @@ -7,5 +7,5 @@ if omarchy-cmd-missing fwupdmgr; then omarchy-pkg-add fwupd fi -fwupdmgr refresh +fwupdmgr refresh --force sudo fwupdmgr update diff --git a/bin/omarchy-update-keyring b/bin/omarchy-update-keyring index f54cfb82..32bd3f22 100755 --- a/bin/omarchy-update-keyring +++ b/bin/omarchy-update-keyring @@ -12,3 +12,7 @@ if omarchy-pkg-missing omarchy-keyring || ! sudo pacman-key --list-keys 40DFB630 sudo pacman-key --list-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 fi + +# Ensure we have the latest archlinux-keyring, maintainer keys might have changed +echo -e "\e[32m\nUpdate Arch signing keys\e[0m" +sudo pacman -Sy --noconfirm archlinux-keyring >/dev/null diff --git a/bin/omarchy-update-orphan-pkgs b/bin/omarchy-update-orphan-pkgs new file mode 100755 index 00000000..3d7a3511 --- /dev/null +++ b/bin/omarchy-update-orphan-pkgs @@ -0,0 +1,10 @@ +#!/bin/bash + +orphans=$(pacman -Qtdq || true) +if [[ -n $orphans ]]; then + echo -e "\e[32m\nRemove orphan system packages\e[0m" + for pkg in $orphans; do + sudo pacman -Rs --noconfirm "$pkg" || true + done + echo +fi diff --git a/bin/omarchy-update-perform b/bin/omarchy-update-perform index c4fcc2cb..c2101c15 100755 --- a/bin/omarchy-update-perform +++ b/bin/omarchy-update-perform @@ -14,6 +14,8 @@ omarchy-update-keyring omarchy-update-available-reset omarchy-update-system-pkgs omarchy-migrate +omarchy-update-aur-pkgs +omarchy-update-orphan-pkgs omarchy-hook post-update omarchy-update-analyze-logs diff --git a/bin/omarchy-update-restart b/bin/omarchy-update-restart index b6b73afe..2121d279 100755 --- a/bin/omarchy-update-restart +++ b/bin/omarchy-update-restart @@ -1,8 +1,7 @@ #!/bin/bash -if [ "$(uname -r | sed 's/-arch/\.arch/')" != "$(pacman -Q linux | awk '{print $2}')" ]; then +if [ ! -d "/usr/lib/modules/$(uname -r)" ]; then gum confirm "Linux kernel has been updated. Reboot?" && omarchy-cmd-reboot - elif [ -f "$HOME/.local/state/omarchy/reboot-required" ]; then gum confirm "Updates require reboot. Ready?" && omarchy-cmd-reboot fi diff --git a/bin/omarchy-update-system-pkgs b/bin/omarchy-update-system-pkgs index 814fb491..36a78418 100755 --- a/bin/omarchy-update-system-pkgs +++ b/bin/omarchy-update-system-pkgs @@ -4,24 +4,3 @@ set -e echo -e "\e[32m\nUpdate system packages\e[0m" sudo pacman -Syyu --noconfirm - -# 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 --ignore gcc14,gcc14-libs - echo - else - echo -e "\e[31m\nAUR is unavailable (so skipping updates)\e[0m" - echo - fi -fi - -orphans=$(pacman -Qtdq || true) -if [[ -n $orphans ]]; then - echo -e "\e[32m\nRemove orphan system packages\e[0m" - for pkg in $orphans; do - sudo pacman -Rs --noconfirm "$pkg" || true - done - echo -fi diff --git a/bin/omarchy-version-channel b/bin/omarchy-version-channel index 8affb87e..76233513 100755 --- a/bin/omarchy-version-channel +++ b/bin/omarchy-version-channel @@ -2,6 +2,8 @@ if grep -q "https://stable-mirror.omarchy.org/" /etc/pacman.d/mirrorlist; then mirror="stable" +elif grep -q "https://rc-mirror.omarchy.org/" /etc/pacman.d/mirrorlist; then + mirror="rc" elif grep -q "https://mirror.omarchy.org/" /etc/pacman.d/mirrorlist; then mirror="edge" else @@ -12,6 +14,8 @@ 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" +elif grep -q "https://pkgs.omarchy.org/rc/" /etc/pacman.conf; then + pkgs="rc" else pkgs="unknown" fi diff --git a/bin/omarchy-webapp-install b/bin/omarchy-webapp-install index a66dcabd..85c8bc81 100755 --- a/bin/omarchy-webapp-install +++ b/bin/omarchy-webapp-install @@ -6,7 +6,7 @@ if [ "$#" -lt 3 ]; then echo -e "\e[32mLet's create a new web app you can start with the app launcher.\n\e[0m" APP_NAME=$(gum input --prompt "Name> " --placeholder "My favorite web app") APP_URL=$(gum input --prompt "URL> " --placeholder "https://example.com") - ICON_REF=$(gum input --prompt "Icon URL> " --placeholder "See https://dashboardicons.com (must use PNG!)") + ICON_REF=$(gum input --prompt "Icon URL> " --placeholder "Leave blank to use favicon or see https://dashboardicons.com (must be PNG!)") CUSTOM_EXEC="" MIME_TYPES="" INTERACTIVE_MODE=true @@ -19,6 +19,10 @@ else INTERACTIVE_MODE=false fi +if [[ -z "$ICON_REF" ]]; then + ICON_REF="https://www.google.com/s2/favicons?domain=${APP_URL}&sz=128" +fi + # Ensure valid execution if [[ -z "$APP_NAME" || -z "$APP_URL" || -z "$ICON_REF" ]]; then echo "You must set app name, app URL, and icon URL!" diff --git a/bin/omarchy-webapp-remove-all b/bin/omarchy-webapp-remove-all new file mode 100755 index 00000000..9cb8f4e3 --- /dev/null +++ b/bin/omarchy-webapp-remove-all @@ -0,0 +1,36 @@ +#!/bin/bash + +# Remove all web apps installed via omarchy-webapp-install. +# Identifies web apps by their Exec pattern (omarchy-launch-webapp or omarchy-webapp-handler). + +set -e + +APP_DIR="${1:-$HOME/.local/share/applications}" +ICON_DIR="$HOME/.local/share/applications/icons" + +echo "Scanning for web apps in $APP_DIR..." + +webapp_desktop_files=() +while IFS= read -r -d '' file; do + if grep -q "Exec=omarchy-launch-webapp\|Exec=omarchy-webapp-handler" "$file" 2>/dev/null; then + webapp_desktop_files+=("$file") + fi +done < <(find "$APP_DIR" -maxdepth 1 -name "*.desktop" -print0 2>/dev/null) + +if [[ ${#webapp_desktop_files[@]} -eq 0 ]]; then + echo "No web apps found." + exit 0 +fi + +for file in "${webapp_desktop_files[@]}"; do + app_name=$(basename "$file" .desktop) + echo "Removing web app: $app_name" + rm -f "$file" + rm -f "$ICON_DIR/$app_name.png" +done + +if command -v update-desktop-database &>/dev/null; then + update-desktop-database "$APP_DIR" &>/dev/null || true +fi + +echo "Web apps removed successfully." diff --git a/bin/omarchy-wifi-powersave b/bin/omarchy-wifi-powersave new file mode 100755 index 00000000..9e1c5bbe --- /dev/null +++ b/bin/omarchy-wifi-powersave @@ -0,0 +1,5 @@ +#!/bin/bash +for iface in /sys/class/net/*/wireless; do + iface="$(basename "$(dirname "$iface")")" + iw dev "$iface" set power_save "$1" 2>/dev/null +done diff --git a/bin/omarchy-windows-vm b/bin/omarchy-windows-vm index 66cc296c..e257ebe0 100755 --- a/bin/omarchy-windows-vm +++ b/bin/omarchy-windows-vm @@ -185,19 +185,21 @@ services: DISK_SIZE: "$SELECTED_DISK" USERNAME: "$USERNAME" PASSWORD: "$PASSWORD" + TZ: "$(timedatectl show -p Timezone --value 2>/dev/null || echo UTC)" + ARGUMENTS: "-rtc base=localtime,clock=host,driftfix=slew" devices: - /dev/kvm - /dev/net/tun cap_add: - NET_ADMIN ports: - - 8006:8006 - - 3389:3389/tcp - - 3389:3389/udp + - 127.0.0.1:8006:8006 + - 127.0.0.1:3389:3389/tcp + - 127.0.0.1:3389:3389/udp volumes: - $HOME/.windows:/storage - $HOME/Windows:/shared - restart: always + restart: unless-stopped stop_grace_period: 2m EOF @@ -240,6 +242,11 @@ EOF } remove_windows() { + if ! gum confirm --default=false "Remove Windows VM and delete all associated data?"; then + echo "Removal cancelled by user" + exit 1 + fi + echo "Removing Windows VM..." docker-compose -f "$COMPOSE_FILE" down 2>/dev/null || true diff --git a/boot.sh b/boot.sh index c36b0893..0ab69d5b 100755 --- a/boot.sh +++ b/boot.sh @@ -28,12 +28,10 @@ git clone "https://github.com/${OMARCHY_REPO}.git" ~/.local/share/omarchy >/dev/ # Use custom branch if instructed, otherwise default to master OMARCHY_REF="${OMARCHY_REF:-master}" -if [[ $OMARCHY_REF != "master" ]]; then - echo -e "\e[32mUsing branch: $OMARCHY_REF\e[0m" - cd ~/.local/share/omarchy - git fetch origin "${OMARCHY_REF}" && git checkout "${OMARCHY_REF}" - cd - -fi +echo -e "\e[32mUsing branch: $OMARCHY_REF\e[0m" +cd ~/.local/share/omarchy +git fetch origin "${OMARCHY_REF}" && git checkout "${OMARCHY_REF}" +cd - # Set edge mirror for dev installs if [[ $OMARCHY_REF == "dev" ]]; then diff --git a/changes/v3-4-0.md b/changes/v3-4-0.md new file mode 100644 index 00000000..36031a03 --- /dev/null +++ b/changes/v3-4-0.md @@ -0,0 +1,74 @@ +# What changed? + +## Additions + +- Add single screenshot flow on PrintScr with editing option pushed to notification by @ryanrhughes +- Add Tmux with tailored config for improved aesthetics and ergonomics accessible via `t` alias in any terminal by @dhh +- Add hibernation by default on new installs by @dhh +- Add hybrid GPU mode toggle via supergfxctl for compatible laptops through _Trigger > Hardware_ by @dhh +- Add full compatibility (volume/brightness/hybrid GPU switching) with Asus Zephyrus G14/16 laptops by @dhh +- Add Motorcomm YT6801 ethernet driver for Slimbook + Tuxedo laptops by @dhh +- Add automatic power profile switching when plugged/unplugged by @pomartel +- Add SSH port forwarding functions fip/dip/lip for web development by @dhh +- Add `eff` command to open fuzzy find results directly in your editor by @dhh +- Add NVIDIA GeForce Now installer and window rules via *Install > Gaming* by @dhh +- Add option to remove all preinstalls via *Remove > Preinstalls* by @dhh +- Add audio soft mixer as opt-in toggle via *Setup > Audio* by @dhh +- Add `~/.config/omarchy/extensions/menu.sh` for overloading any menu action by @bhaveshsooka +- Add nautilus-python for "Open in Ghostty" context menu by @pomartel +- Add automatic fallback to Alacritty for legacy GPUs on install by @yaroslavrick +- Add window rules for Bitwarden Chrome Extension by @sgruendel +- Add emoji picker auto-pasting by @pomartel +- Add back mainline Chromium now that upstream has live theming fixed by @dhh + +### Aesthetics + +- Add theme synced keyboard backlighting on Asus ROG laptops by @dhh +- Add new default wallpaper for Tokyo Night theme by @Maxteabag +- Add Miasma theme by @OldJobobo +- Add Vantablack theme by @bjarneo +- Add headset icon for audio in Waybar by @pomartel + +## Keybindings + +- Add `Super + Shift + Return` as alternative keybind for launching browser by @dhh +- Add `Super + Ctrl + C` as alternative capture keybind for machines without PrintScr button by @dhh +- Add `Super + Alt + Shift + F` to open nautilus in current directory of terminal by X +- Add `Super + Ctrl + Alt + Backspace` to toggle single-window square aspect ratio by @dhh +- Add `Super + Ctrl + Backspace` to toggle resolution between 1-1.6-2-3x by @dhh +- Add opening Nautilus in terminal's current working directory by @schwepmo +- Add scratchpad auto-toggle on workspace switch by @mitanjan + +## Fixes + +- Fix AUR package installation to prefer AUR over repos when available by @dhh +- Fix Ghostty high IO pressure on some machines by @NicolasDorier +- Fix NVIDIA environment variables for Maxwell/Pascal/Volta GPUs by @johnzfitch +- Fix JetBrains window rules not working properly by @NicolasDorier +- Fix Telegram stealing focus on every message by @ryanrhughes +- Fix Steam window opacity rules by @nptr +- Fix video PWA window rules by @dhh +- Fix Walker crashing and not restarting by @dhh +- Fix hibernation to work reliably across different laptops by @dhh +- Fix hyprlock fingerprint auth check by @dhh +- Fix update snapshots not being cleaned on failed updates by @Mridul-Agarwal +- Fix Windows VM clipboard sharing in RDP by @arcangelo7 +- Fix Windows VM dynamic boot detection by @felixzsh +- Fix Windows VM timezone and add confirmation before VM removal by @pomartel +- Fix gum confirm color for "no" option by @dhh +- Fix omarchy-update-firmware premature exit by @nnutter +- Fix swayosd style path by @gilescope +- Fix yq dependency by replacing with pure bash TOML parsing by @dhh +- Fix AUR updates broken by interrupted git sessions by @dhh +- Fix Synaptics InterTouch touchpad detection by @Sameer292 +- Fix Starship prompt sanitization by @jamesrobey +- Fix Chromium Wayland color manager flag removal by @shreyansh-malviya +- Fix Development remove menu icons by @annoyedmilk +- Fix kb_variant support in input.conf by @manuel-rams +- Fix wiremix default device character display by @l1ghty +- Fix opencode auto-update disabled for pacman management by @sgruendel +- Fix Waybar Omarchy glyph spacing with thin space by @horaceko +- Fix suspend-to-hibernate failing on several laptops by removing it as a default by @dhh +- Fix missing Wayland color manager disabling flag in Chromium by @shreyansh-malviya +- Fix x11 fallback in SDL_VIDEODRIVER for compatibility by @ryanrhughes +- Fix AUR packages shouldn't update until after system packages and migrations by @dhh diff --git a/config/alacritty/alacritty.toml b/config/alacritty/alacritty.toml index be44031c..f016c07a 100644 --- a/config/alacritty/alacritty.toml +++ b/config/alacritty/alacritty.toml @@ -3,6 +3,9 @@ general.import = [ "~/.config/omarchy/current/theme/alacritty.toml" ] [env] TERM = "xterm-256color" +[terminal] +osc52 = "CopyPaste" + [font] normal = { family = "JetBrainsMono Nerd Font", style = "Regular" } bold = { family = "JetBrainsMono Nerd Font", style = "Bold" } diff --git a/config/brave-flags.conf b/config/brave-flags.conf index bce00d52..88c8082b 100644 --- a/config/brave-flags.conf +++ b/config/brave-flags.conf @@ -2,5 +2,3 @@ --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 diff --git a/config/chromium-flags.conf b/config/chromium-flags.conf index bce00d52..88c8082b 100644 --- a/config/chromium-flags.conf +++ b/config/chromium-flags.conf @@ -2,5 +2,3 @@ --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 diff --git a/config/elephant/symbols.toml b/config/elephant/symbols.toml new file mode 100644 index 00000000..3144c152 --- /dev/null +++ b/config/elephant/symbols.toml @@ -0,0 +1 @@ +command = 'wl-copy && hyprctl dispatch sendshortcut "SHIFT, Insert,"' diff --git a/config/fontconfig/fonts.conf b/config/fontconfig/fonts.conf index 5463ba30..2d873761 100644 --- a/config/fontconfig/fonts.conf +++ b/config/fontconfig/fonts.conf @@ -55,4 +55,25 @@ Liberation Sans + + + sans-serif + + Noto Color Emoji + + + + + serif + + Noto Color Emoji + + + + + monospace + + Noto Color Emoji + + diff --git a/config/ghostty/config b/config/ghostty/config index 4360f279..af2c995c 100644 --- a/config/ghostty/config +++ b/config/ghostty/config @@ -23,6 +23,8 @@ cursor-style-blink = false shell-integration-features = no-cursor,ssh-env # Keyboard bindings +keybind = ctrl+shift+page_up=unbind +keybind = ctrl+shift+page_down=unbind keybind = shift+insert=paste_from_clipboard keybind = control+insert=copy_to_clipboard keybind = super+control+shift+alt+arrow_down=resize_split:down,100 @@ -32,3 +34,6 @@ keybind = super+control+shift+alt+arrow_right=resize_split:right,100 # Slowdown mouse scrolling mouse-scroll-multiplier = 0.95 + +# Fix general slowness on hyprland (https://github.com/ghostty-org/ghostty/discussions/3224) +async-backend = epoll diff --git a/config/hypr/bindings.conf b/config/hypr/bindings.conf index f7770dd8..9af5a3b2 100644 --- a/config/hypr/bindings.conf +++ b/config/hypr/bindings.conf @@ -1,6 +1,8 @@ # Application bindings bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)" +bindd = SUPER SHIFT, RETURN, Browser, exec, omarchy-launch-browser bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window +bindd = SUPER ALT SHIFT, F, File manager (cwd), exec, uwsm-app -- nautilus --new-window "$(omarchy-cmd-terminal-cwd)" bindd = SUPER SHIFT, B, Browser, exec, omarchy-launch-browser bindd = SUPER SHIFT ALT, B, Browser (private), exec, omarchy-launch-browser --private bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify @@ -23,6 +25,9 @@ bindd = SUPER SHIFT, P, Google Photos, exec, omarchy-launch-or-focus-webapp "Goo bindd = SUPER SHIFT, X, X, exec, omarchy-launch-webapp "https://x.com/" bindd = SUPER SHIFT ALT, X, X Post, exec, omarchy-launch-webapp "https://x.com/compose/post" +# Add extra bindings +# bind = SUPER SHIFT, R, exec, alacritty -e ssh your-server + # Overwrite existing bindings, like putting Omarchy Menu on Super + Space # unbind = SUPER, SPACE # bindd = SUPER, SPACE, Omarchy menu, exec, omarchy-menu diff --git a/config/hypr/hypridle.conf b/config/hypr/hypridle.conf index d39c97fd..b7d17690 100644 --- a/config/hypr/hypridle.conf +++ b/config/hypr/hypridle.conf @@ -1,7 +1,7 @@ general { lock_cmd = omarchy-lock-screen # lock screen and 1password before_sleep_cmd = loginctl lock-session # lock before suspend. - after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display. + after_sleep_cmd = sleep 1 && hyprctl dispatch dpms on # delay for PAM readiness, then turn on display. inhibit_sleep = 3 # wait until screen is locked } @@ -15,6 +15,12 @@ listener { on-timeout = loginctl lock-session # lock screen when timeout has passed } +listener { + timeout = 330 # 5.5min + on-timeout = brightnessctl -sd '*::kbd_backlight' set 0 # save state and turn off keyboard backlight + on-resume = brightnessctl -rd '*::kbd_backlight' # restore keyboard backlight +} + listener { timeout = 330 # 5.5min on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed diff --git a/config/hypr/hyprlock.conf b/config/hypr/hyprlock.conf index f7a939c0..9550b656 100644 --- a/config/hypr/hyprlock.conf +++ b/config/hypr/hyprlock.conf @@ -39,5 +39,5 @@ input-field { } auth { - fingerprint:enabled = true + fingerprint:enabled = false } diff --git a/config/hypr/input.conf b/config/hypr/input.conf index c536e618..951dc1de 100644 --- a/config/hypr/input.conf +++ b/config/hypr/input.conf @@ -3,6 +3,10 @@ input { # Use multiple keyboard layouts and switch between them with Left Alt + Right Alt # kb_layout = us,dk,eu + + # Use a specific keyboard variant if needed (e.g. intl for international keyboards) + # kb_variant = intl + kb_options = compose:caps # ,grp:alts_toggle # Change speed of keyboard repeat diff --git a/config/omarchy/extensions/menu.sh b/config/omarchy/extensions/menu.sh index 743002ba..76857c15 100644 --- a/config/omarchy/extensions/menu.sh +++ b/config/omarchy/extensions/menu.sh @@ -12,3 +12,9 @@ # *) back_to show_main_menu ;; # esac # } +# +# Example of overriding just the about menu action: (Using zsh instead of bash (default)) +# +# show_about() { +# exec omarchy-launch-or-focus-tui "zsh -c 'fastfetch; read -k 1'" +# } diff --git a/config/opencode/opencode.json b/config/opencode/opencode.json index a03a5cb0..4fbe31f9 100644 --- a/config/opencode/opencode.json +++ b/config/opencode/opencode.json @@ -1,4 +1,5 @@ { "$schema": "https://opencode.ai/config.json", - "theme": "system" + "theme": "system", + "autoupdate": false } diff --git a/config/swayosd/config.toml b/config/swayosd/config.toml index 598c1f22..759cbe1f 100644 --- a/config/swayosd/config.toml +++ b/config/swayosd/config.toml @@ -1,4 +1,4 @@ [server] show_percentage = true max_volume = 100 -style = "./style.css" +style = "~/.config/swayosd/style.css" diff --git a/config/tmux/tmux.conf b/config/tmux/tmux.conf new file mode 100644 index 00000000..5aa42094 --- /dev/null +++ b/config/tmux/tmux.conf @@ -0,0 +1,84 @@ +# Prefix +set -g prefix C-Space +set -g prefix2 C-b +bind C-Space send-prefix + +# Reload config +bind q source-file ~/.config/tmux/tmux.conf + +# Vi mode for copy +setw -g mode-keys vi +bind -T copy-mode-vi v send -X begin-selection +bind -T copy-mode-vi y send -X copy-selection-and-cancel + +# Pane Controls +bind h split-window -v -c "#{pane_current_path}" +bind v split-window -h -c "#{pane_current_path}" +bind x kill-pane + +bind -n C-M-Left select-pane -L +bind -n C-M-Right select-pane -R +bind -n C-M-Up select-pane -U +bind -n C-M-Down select-pane -D + +bind -n C-M-S-Left resize-pane -L 5 +bind -n C-M-S-Down resize-pane -D 5 +bind -n C-M-S-Up resize-pane -U 5 +bind -n C-M-S-Right resize-pane -R 5 + +# Window navigation +bind r command-prompt -I "#W" "rename-window -- '%%'" +bind c new-window -c "#{pane_current_path}" +bind k kill-window + +bind -n M-1 select-window -t 1 +bind -n M-2 select-window -t 2 +bind -n M-3 select-window -t 3 +bind -n M-4 select-window -t 4 +bind -n M-5 select-window -t 5 +bind -n M-6 select-window -t 6 +bind -n M-7 select-window -t 7 +bind -n M-8 select-window -t 8 +bind -n M-9 select-window -t 9 + +# Session controls +bind R command-prompt -I "#S" "rename-session -- '%%'" +bind C new-session -c "#{pane_current_path}" +bind K kill-session +bind P switch-client -p +bind N switch-client -n + +# General +set -g default-terminal "tmux-256color" +set -ag terminal-overrides ",*:RGB" +set -g mouse on +set -g base-index 1 +setw -g pane-base-index 1 +set -g renumber-windows on +set -g history-limit 50000 +set -g escape-time 0 +set -g focus-events on +set -g set-clipboard on +set -g allow-passthrough on +setw -g aggressive-resize on +set -g detach-on-destroy off + +# Status bar +set -g status-position top +set -g status-interval 5 +set -g status-left-length 30 +set -g status-right-length 50 +set -g window-status-separator "" + +# Theme +set -g status-style "bg=default,fg=default" +set -g status-left "#[fg=black,bg=blue,bold] #S #[bg=default] " +set -g status-right "#[fg=blue]#{?client_prefix,PREFIX ,}#[fg=brightblack]#h " +set -g window-status-format "#[fg=brightblack] #I:#W " +set -g window-status-current-format "#[fg=blue,bold] #I:#W " +set -g pane-border-style "fg=brightblack" +set -g pane-active-border-style "fg=blue" +set -g message-style "bg=default,fg=blue" +set -g message-command-style "bg=default,fg=blue" +set -g mode-style "bg=blue,fg=black" +setw -g clock-mode-colour blue diff --git a/config/waybar/config.jsonc b/config/waybar/config.jsonc index 9100b4ca..9049f00e 100644 --- a/config/waybar/config.jsonc +++ b/config/waybar/config.jsonc @@ -5,7 +5,7 @@ "spacing": 0, "height": 26, "modules-left": ["custom/omarchy", "hyprland/workspaces"], - "modules-center": ["clock", "custom/update", "custom/voxtype", "custom/screenrecording-indicator"], + "modules-center": ["clock", "custom/update", "custom/voxtype", "custom/screenrecording-indicator", "custom/idle-indicator", "custom/notification-silencing-indicator"], "modules-right": [ "group/tray-expander", "bluetooth", @@ -116,6 +116,7 @@ "format-muted": "", "format-icons": { "headphone": "", + "headset": "", "default": ["", "", ""] } }, @@ -141,6 +142,18 @@ "signal": 8, "return-type": "json" }, + "custom/idle-indicator": { + "on-click": "omarchy-toggle-idle", + "exec": "$OMARCHY_PATH/default/waybar/indicators/idle.sh", + "signal": 9, + "return-type": "json" + }, + "custom/notification-silencing-indicator": { + "on-click": "omarchy-toggle-notification-silencing", + "exec": "$OMARCHY_PATH/default/waybar/indicators/notification-silencing.sh", + "signal": 10, + "return-type": "json" + }, "custom/voxtype": { "exec": "omarchy-voxtype-status", "return-type": "json", diff --git a/config/waybar/style.css b/config/waybar/style.css index 19e934c2..4bbf0ddb 100644 --- a/config/waybar/style.css +++ b/config/waybar/style.css @@ -34,7 +34,6 @@ #battery, #pulseaudio, #custom-omarchy, -#custom-screenrecording-indicator, #custom-update { min-width: 12px; margin: 0 7.5px; @@ -72,9 +71,12 @@ tooltip { opacity: 0; } -#custom-screenrecording-indicator { +#custom-screenrecording-indicator, +#custom-idle-indicator, +#custom-notification-silencing-indicator { min-width: 12px; margin-left: 5px; + margin-right: 0; font-size: 10px; padding-bottom: 1px; } @@ -83,6 +85,11 @@ tooltip { color: #a55555; } +#custom-idle-indicator.active, +#custom-notification-silencing-indicator.active { + color: #a55555; +} + #custom-voxtype { min-width: 12px; margin: 0 0 0 7.5px; diff --git a/config/wiremix/wiremix.toml b/config/wiremix/wiremix.toml new file mode 100644 index 00000000..07f9747c --- /dev/null +++ b/config/wiremix/wiremix.toml @@ -0,0 +1,5 @@ +# overwrites default wiremix configuration +# defaults: https://github.com/tsowell/wiremix/blob/main/wiremix.toml + +[char_sets.default] +default_device = "⮞" diff --git a/default/bash/aliases b/default/bash/aliases index 8e485a35..18bda585 100644 --- a/default/bash/aliases +++ b/default/bash/aliases @@ -7,6 +7,7 @@ if command -v eza &> /dev/null; then fi alias ff="fzf --preview 'bat --style=numbers --color=always {}'" +alias eff='$EDITOR $(ff)' if command -v zoxide &> /dev/null; then alias cd="zd" @@ -21,9 +22,9 @@ if command -v zoxide &> /dev/null; then } fi -open() { +open() ( xdg-open "$@" >/dev/null 2>&1 & -} +) # Directories alias ..='cd ..' @@ -32,9 +33,11 @@ alias ....='cd ../../..' # Tools alias c='opencode' +alias cx='printf "\033[2J\033[3J\033[H" && claude --permission-mode=plan --allow-dangerously-skip-permissions' alias d='docker' alias r='rails' -n() { if [ "$#" -eq 0 ]; then nvim .; else nvim "$@"; fi; } +alias t='tmux attach || tmux new -s Work' +n() { if [ "$#" -eq 0 ]; then command nvim . ; else command nvim "$@"; fi; } # Git alias g='git' diff --git a/default/bash/functions b/default/bash/functions index ee6b7a54..ec144b8e 100644 --- a/default/bash/functions +++ b/default/bash/functions @@ -4,15 +4,33 @@ alias decompress="tar -xzf" # Write iso file to sd card iso2sd() { - if [ $# -ne 2 ]; then - echo "Usage: iso2sd " + if [[ $# -lt 1 ]]; then + echo "Usage: iso2sd [output_device]" echo "Example: iso2sd ~/Downloads/ubuntu-25.04-desktop-amd64.iso /dev/sda" - echo -e "\nAvailable SD cards:" - lsblk -d -o NAME | grep -E '^sd[a-z]' | awk '{print "/dev/"$1}' - else - sudo dd bs=4M status=progress oflag=sync if="$1" of="$2" - sudo eject $2 + return 1 fi + + local iso="$1" + local drive="$2" + + if [[ -z $drive ]]; then + local available_sds=$(lsblk -dpno NAME | grep -E '/dev/sd') + + if [[ -z $available_sds ]]; then + echo "No SD drives found and no drive specified" + return 1 + fi + + drive=$(omarchy-drive-select "$available_sds") + + if [[ -z $drive ]]; then + echo "No drive selected" + return 1 + fi + fi + + sudo dd bs=4M status=progress oflag=sync if="$iso" of="$drive" + sudo eject "$drive" } # Format an entire drive for a single partition using exFAT @@ -87,3 +105,62 @@ img2png() { -define png:exclude-chunk=all \ "${img%.*}-optimized.png" } + +# SSH Port Forwarding Functions +fip() { + [[ $# -lt 2 ]] && echo "Usage: fip [port2] ..." && return 1 + local host="$1" + shift + for port in "$@"; do + ssh -f -N -L "$port:localhost:$port" "$host" && echo "Forwarding localhost:$port -> $host:$port" + done +} + +dip() { + [[ $# -eq 0 ]] && echo "Usage: dip [port2] ..." && return 1 + for port in "$@"; do + pkill -f "ssh.*-L $port:localhost:$port" && echo "Stopped forwarding port $port" || echo "No forwarding on port $port" + done +} + +lip() { + pgrep -af "ssh.*-L [0-9]+:localhost:[0-9]+" || echo "No active forwards" +} + +# Create a tmux layout for dev with editor, ai, and terminal +tml() { + local current_dir="${PWD}" + local editor_pane ai_pane + local ai="$1" + + # Get current pane ID (will become editor pane after splits) + editor_pane=$(tmux display-message -p '#{pane_id}') + + # Split window vertically - top 85%, bottom 15% + tmux split-window -v -p 15 -c "$current_dir" + + # Go back to top pane (editor_pane) and split it horizontally + tmux select-pane -t "$editor_pane" + tmux split-window -h -p 30 -c "$current_dir" + + # After horizontal split, cursor is in the right pane (new pane) + # Get its ID and run ai there + ai_pane=$(tmux display-message -p '#{pane_id}') + tmux send-keys -t "$ai_pane" "$ai" C-m + + # Run nvim in the left pane + tmux send-keys -t "$editor_pane" "$EDITOR ." C-m + + # Select the nvim pane for focus + tmux select-pane -t "$editor_pane" +} + +# Create a dev layout using tmux with editor, opencode, and terminal +nic() { + tml c +} + +# Create a dev layout using tmux with editor, claude, and terminal +nicx() { + tml cx +} diff --git a/default/bash/init b/default/bash/init index e9228edb..6ae94284 100644 --- a/default/bash/init +++ b/default/bash/init @@ -3,6 +3,9 @@ if command -v mise &> /dev/null; then fi if command -v starship &> /dev/null; then + # clear stale readline state before rendering prompt (prevents artifacts in prompt after abnormal exits like SIGQUIT) + __sanitize_prompt() { printf '\r\033[K'; } + PROMPT_COMMAND="__sanitize_prompt${PROMPT_COMMAND:+;$PROMPT_COMMAND}" eval "$(starship init bash)" fi @@ -11,7 +14,7 @@ if command -v zoxide &> /dev/null; then fi if command -v try &> /dev/null; then - eval "$(try init ~/Work/tries)" + eval "$(SHELL=/bin/bash try init ~/Work/tries)" fi if command -v fzf &> /dev/null; then diff --git a/default/bash/inputrc b/default/bash/inputrc index 11146d64..3b48e554 100644 --- a/default/bash/inputrc +++ b/default/bash/inputrc @@ -37,3 +37,11 @@ set skip-completed-text on # Coloring for Bash 4 tab completions. set colored-stats on + +# Cycle forward and backward through completion candidates (tab/shift+tab) +# (completion listing and display behavior configured above) +TAB: menu-complete +"\e[Z": menu-complete-backward + +# On first Tab, complete the common prefix before cycling candidates +set menu-complete-display-prefix on diff --git a/default/bashrc b/default/bashrc index eaf13c66..77e8d27b 100644 --- a/default/bashrc +++ b/default/bashrc @@ -9,3 +9,4 @@ source ~/.local/share/omarchy/default/bash/rc # # Make an alias for invoking commands you use constantly # alias p='python' +# alias cx="claude --permission-mode=plan --allow-dangerously-skip-permissions" diff --git a/default/elephant/omarchy_background_selector.lua b/default/elephant/omarchy_background_selector.lua new file mode 100644 index 00000000..61543c49 --- /dev/null +++ b/default/elephant/omarchy_background_selector.lua @@ -0,0 +1,70 @@ +Name = "omarchyBackgroundSelector" +NamePretty = "Omarchy Background Selector" +Cache = false +HideFromProviderlist = true +SearchName = true + +function FormatName(filename) + -- Remove leading number and dash + local name = filename:gsub("^%d+", ""):gsub("^%-", "") + -- Remove extension + name = name:gsub("%.[^%.]+$", "") + -- Replace dashes with spaces + name = name:gsub("-", " ") + -- Capitalize each word + name = name:gsub("%S+", function(word) + return word:sub(1, 1):upper() .. word:sub(2):lower() + end) + return name +end + +function GetEntries() + local entries = {} + local home = os.getenv("HOME") + + -- Read current theme name + local theme_name_file = io.open(home .. "/.config/omarchy/current/theme.name", "r") + local theme_name = theme_name_file and theme_name_file:read("*l") or nil + if theme_name_file then + theme_name_file:close() + end + + -- Directories to search + local dirs = { + home .. "/.config/omarchy/current/theme/backgrounds", + } + if theme_name then + table.insert(dirs, home .. "/.config/omarchy/backgrounds/" .. theme_name) + end + + -- Track added files to avoid duplicates + local seen = {} + + for _, wallpaper_dir in ipairs(dirs) do + local handle = io.popen( + "find '" + .. wallpaper_dir + .. "' -maxdepth 1 -type f \\( -name '*.jpg' -o -name '*.jpeg' -o -name '*.png' -o -name '*.gif' -o -name '*.bmp' -o -name '*.webp' \\) 2>/dev/null" + ) + if handle then + for background in handle:lines() do + local filename = background:match("([^/]+)$") + if filename and not seen[filename] then + seen[filename] = true + table.insert(entries, { + Text = FormatName(filename), + Value = background, + Actions = { + activate = "omarchy-theme-bg-set '" .. background .. "'", + }, + Preview = background, + PreviewType = "file", + }) + end + end + handle:close() + end + end + + return entries +end diff --git a/default/hypr/apps.conf b/default/hypr/apps.conf index 354339de..f6946ad1 100644 --- a/default/hypr/apps.conf +++ b/default/hypr/apps.conf @@ -9,7 +9,9 @@ source = ~/.local/share/omarchy/default/hypr/apps/pip.conf source = ~/.local/share/omarchy/default/hypr/apps/qemu.conf source = ~/.local/share/omarchy/default/hypr/apps/retroarch.conf source = ~/.local/share/omarchy/default/hypr/apps/steam.conf +source = ~/.local/share/omarchy/default/hypr/apps/geforce.conf source = ~/.local/share/omarchy/default/hypr/apps/system.conf +source = ~/.local/share/omarchy/default/hypr/apps/telegram.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/webcam-overlay.conf diff --git a/default/hypr/apps/bitwarden.conf b/default/hypr/apps/bitwarden.conf index 974aa28c..8ffb5688 100644 --- a/default/hypr/apps/bitwarden.conf +++ b/default/hypr/apps/bitwarden.conf @@ -1,2 +1,6 @@ windowrule = no_screen_share on, match:class ^(Bitwarden)$ windowrule = tag +floating-window, match:class ^(Bitwarden)$ + +# Bitwarden Chrome Extension +windowrule = no_screen_share on, match:class chrome-nngceckbapebfimnlniiiahkandclblb-Default +windowrule = tag +floating-window, match:class chrome-nngceckbapebfimnlniiiahkandclblb-Default diff --git a/default/hypr/apps/browser.conf b/default/hypr/apps/browser.conf index 2b44576b..7f30ba38 100644 --- a/default/hypr/apps/browser.conf +++ b/default/hypr/apps/browser.conf @@ -1,13 +1,16 @@ # Browser types windowrule = tag +chromium-based-browser, match:class ((google-)?[cC]hrom(e|ium)|[bB]rave-browser|[mM]icrosoft-edge|Vivaldi-stable|helium) windowrule = tag +firefox-based-browser, match:class ([fF]irefox|zen|librewolf) +windowrule = tag -default-opacity, match:tag chromium-based-browser +windowrule = tag -default-opacity, match:tag firefox-based-browser + +# Video apps: remove chromium browser tag so they don't get opacity applied +windowrule = tag -chromium-based-browser, match:class (chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default) +windowrule = tag -default-opacity, match:class (chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default) # Force chromium-based browsers into a tile to deal with --app bug windowrule = tile on, match:tag chromium-based-browser # Only a subtle opacity change, but not for video sites -windowrule = opacity 1 0.97, match:tag chromium-based-browser -windowrule = opacity 1 0.97, match:tag firefox-based-browser - -# Some video sites should never have opacity applied to them -windowrule = opacity 1.0 1.0, match:initial_title ((?i)(?:[a-z0-9-]+\.)*youtube\.com_/|app\.zoom\.us_/wc/home) +windowrule = opacity 1.0 0.97, match:tag chromium-based-browser +windowrule = opacity 1.0 0.97, match:tag firefox-based-browser diff --git a/default/hypr/apps/geforce.conf b/default/hypr/apps/geforce.conf new file mode 100644 index 00000000..fb2e5a30 --- /dev/null +++ b/default/hypr/apps/geforce.conf @@ -0,0 +1,5 @@ +windowrule { + name = geforce + match:class = GeForceNOW + idle_inhibit = fullscreen +} diff --git a/default/hypr/apps/jetbrains.conf b/default/hypr/apps/jetbrains.conf index d045f823..5b73bce4 100644 --- a/default/hypr/apps/jetbrains.conf +++ b/default/hypr/apps/jetbrains.conf @@ -1,22 +1,41 @@ # Fix splash screen showing in weird places and prevent annoying focus takeovers -windowrule = tag +jetbrains-splash, match:class ^(jetbrains-.*)$, match:title ^(splash)$, match:float 1 -windowrule = center on, match:tag jetbrains-splash -windowrule = no_focus on, match:tag jetbrains-splash -windowrule = border_size 0, match:tag jetbrains-splash +windowrule { + name = jetbrains-splash + match:class = ^(jetbrains-.*)$ + match:title = ^(splash)$ + match:float = 1 + tag = +jetbrains-splash + center = on + no_focus = on + border_size = 0 +} # Center popups/find windows -windowrule = tag +jetbrains, match:class ^(jetbrains-.*), match:title ^()$, match:float 1 -windowrule = center on, match:tag jetbrains - -# Enabling this makes it possible to provide input in popup dialogs (search window, new file, etc.) -windowrule = stay_focused on, match:tag jetbrains -windowrule = border_size 0, match:tag jetbrains - -# For some reason tag:jetbrains does not work for size rule -windowrule = min_size (monitor_w*0.5) (monitor_h*0.5), match:class ^(jetbrains-.*), match:title ^()$, match:float 1 +windowrule { + name = jetbrains-popup + match:class = ^(jetbrains-.*) + match:title = ^()$ + match:float = 1 + tag = +jetbrains + center = on + # Enabling this makes it possible to provide input in popup dialogs (search window, new file, etc.) + stay_focused = on + border_size = 0 + min_size = (monitor_w*0.5) (monitor_h*0.5) + } # Disable window flicker when autocomplete or tooltips appear -windowrule = no_initial_focus on, match:class ^(jetbrains-.*)$, match:title ^(win.*)$, match:float 1 +windowrule { + name = jetbrains-tooltip + match:class = ^(jetbrains-.*)$ + match:title = ^(win.*)$ + match:float = 1 + no_initial_focus = on +} # Disable mouse focus -windowrule = no_follow_mouse on, match:class ^(jetbrains-.*)$ +windowrule { + name = jetbrains-focus + no_follow_mouse = on + match:class = ^(jetbrains-.*)$ +} diff --git a/default/hypr/apps/pip.conf b/default/hypr/apps/pip.conf index e5b45d56..417edc91 100644 --- a/default/hypr/apps/pip.conf +++ b/default/hypr/apps/pip.conf @@ -1,5 +1,6 @@ # Picture-in-picture overlays windowrule = tag +pip, match:title (Picture.?in.?[Pp]icture) +windowrule = tag -default-opacity, match:tag pip windowrule = float on, match:tag pip windowrule = pin on, match:tag pip windowrule = size 600 338, match:tag pip diff --git a/default/hypr/apps/qemu.conf b/default/hypr/apps/qemu.conf index acc32a4a..6dcce0e0 100644 --- a/default/hypr/apps/qemu.conf +++ b/default/hypr/apps/qemu.conf @@ -1 +1,2 @@ +windowrule = tag -default-opacity, match:class qemu windowrule = opacity 1 1, match:class qemu diff --git a/default/hypr/apps/retroarch.conf b/default/hypr/apps/retroarch.conf index f3b046f9..556f0fd8 100644 --- a/default/hypr/apps/retroarch.conf +++ b/default/hypr/apps/retroarch.conf @@ -1,3 +1,4 @@ windowrule = fullscreen on, match:class com.libretro.RetroArch +windowrule = tag -default-opacity, match:class com.libretro.RetroArch windowrule = opacity 1 1, match:class com.libretro.RetroArch windowrule = idle_inhibit fullscreen, match:class com.libretro.RetroArch diff --git a/default/hypr/apps/steam.conf b/default/hypr/apps/steam.conf index ec4f754d..a42a6e68 100644 --- a/default/hypr/apps/steam.conf +++ b/default/hypr/apps/steam.conf @@ -1,7 +1,8 @@ # Float Steam windowrule = float on, match:class steam windowrule = center on, match:class steam, match:title Steam -windowrule = opacity 1 1, match:class steam +windowrule = tag -default-opacity, match:class steam.* +windowrule = opacity 1 1, match:class steam.* windowrule = size 1100 700, match:class steam, match:title Steam windowrule = size 460 800, match:class steam, match:title Friends List windowrule = idle_inhibit fullscreen, match:class steam diff --git a/default/hypr/apps/system.conf b/default/hypr/apps/system.conf index ee6c6b86..702388f2 100644 --- a/default/hypr/apps/system.conf +++ b/default/hypr/apps/system.conf @@ -12,6 +12,7 @@ windowrule = fullscreen on, match:class org.omarchy.screensaver windowrule = float on, match:class org.omarchy.screensaver # No transparency on media windows +windowrule = tag -default-opacity, match:class ^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$ windowrule = opacity 1 1, match:class ^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$ # Popped window rounding diff --git a/default/hypr/apps/telegram.conf b/default/hypr/apps/telegram.conf new file mode 100644 index 00000000..5a621fdb --- /dev/null +++ b/default/hypr/apps/telegram.conf @@ -0,0 +1,2 @@ +# Prevent Telegram from stealing focus on new messages +windowrule = focus_on_activate off, match:class org.telegram.desktop diff --git a/default/hypr/apps/terminals.conf b/default/hypr/apps/terminals.conf index 2bcf0eb6..ead08dde 100644 --- a/default/hypr/apps/terminals.conf +++ b/default/hypr/apps/terminals.conf @@ -1,2 +1,4 @@ # Define terminal tag to style them uniformly windowrule = tag +terminal, match:class (Alacritty|kitty|com.mitchellh.ghostty) +windowrule = tag -default-opacity, match:tag terminal +windowrule = opacity 0.97 0.9, match:tag terminal diff --git a/default/hypr/bindings/media.conf b/default/hypr/bindings/media.conf index efedbb72..9506ff41 100644 --- a/default/hypr/bindings/media.conf +++ b/default/hypr/bindings/media.conf @@ -6,14 +6,17 @@ bindeld = ,XF86AudioRaiseVolume, Volume up, exec, $osdclient --output-volume rai bindeld = ,XF86AudioLowerVolume, Volume down, exec, $osdclient --output-volume lower bindeld = ,XF86AudioMute, Mute, exec, $osdclient --output-volume mute-toggle bindeld = ,XF86AudioMicMute, Mute microphone, exec, $osdclient --input-volume mute-toggle -bindeld = ,XF86MonBrightnessUp, Brightness up, exec, $osdclient --brightness raise -bindeld = ,XF86MonBrightnessDown, Brightness down, exec, $osdclient --brightness lower +bindeld = ,XF86MonBrightnessUp, Brightness up, exec, omarchy-brightness-display +5% +bindeld = ,XF86MonBrightnessDown, Brightness down, exec, omarchy-brightness-display 5%- +bindeld = ,XF86KbdBrightnessUp, Keyboard brightness up, exec, omarchy-brightness-keyboard up +bindeld = ,XF86KbdBrightnessDown, Keyboard brightness down, exec, omarchy-brightness-keyboard down +bindld = ,XF86KbdLightOnOff, Keyboard backlight cycle, exec, omarchy-brightness-keyboard cycle # Precise 1% multimedia adjustments with Alt modifier bindeld = ALT, XF86AudioRaiseVolume, Volume up precise, exec, $osdclient --output-volume +1 bindeld = ALT, XF86AudioLowerVolume, Volume down precise, exec, $osdclient --output-volume -1 -bindeld = ALT, XF86MonBrightnessUp, Brightness up precise, exec, $osdclient --brightness +1 -bindeld = ALT, XF86MonBrightnessDown, Brightness down precise, exec, $osdclient --brightness -1 +bindeld = ALT, XF86MonBrightnessUp, Brightness up precise, exec, omarchy-brightness-display +1% +bindeld = ALT, XF86MonBrightnessDown, Brightness down precise, exec, omarchy-brightness-display 1%- # Requires playerctl bindld = , XF86AudioNext, Next track, exec, $osdclient --playerctl next diff --git a/default/hypr/bindings/utilities.conf b/default/hypr/bindings/utilities.conf index e3f9bfd2..f9128e08 100644 --- a/default/hypr/bindings/utilities.conf +++ b/default/hypr/bindings/utilities.conf @@ -10,7 +10,7 @@ bindd = , XF86Calculator, Calculator, exec, gnome-calculator # Aesthetics bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, omarchy-toggle-waybar -bindd = SUPER CTRL, SPACE, Next background in theme, exec, omarchy-theme-bg-next +bindd = SUPER CTRL, SPACE, Next background in theme, exec, omarchy-menu background bindd = SUPER SHIFT CTRL, SPACE, Theme menu, exec, omarchy-menu theme bindd = SUPER, BACKSPACE, Toggle window transparency, exec, hyprctl dispatch setprop "address:$(hyprctl activewindow -j | jq -r '.address')" opaque toggle bindd = SUPER SHIFT, BACKSPACE, Toggle workspace gaps, exec, omarchy-hyprland-workspace-toggle-gaps @@ -18,7 +18,7 @@ bindd = SUPER SHIFT, BACKSPACE, Toggle workspace gaps, exec, omarchy-hyprland-wo # Notifications bindd = SUPER, COMMA, Dismiss last notification, exec, makoctl dismiss bindd = SUPER SHIFT, COMMA, Dismiss all notifications, exec, makoctl dismiss --all -bindd = SUPER CTRL, COMMA, Toggle silencing notifications, exec, makoctl mode -t do-not-disturb && makoctl mode | grep -q 'do-not-disturb' && notify-send "Silenced notifications" || notify-send "Enabled notifications" +bindd = SUPER CTRL, COMMA, Toggle silencing notifications, exec, omarchy-toggle-notification-silencing bindd = SUPER ALT, COMMA, Invoke last notification, exec, makoctl invoke bindd = SUPER SHIFT ALT, COMMA, Restore last notification, exec, makoctl restore @@ -28,14 +28,19 @@ bindd = SUPER CTRL, I, Toggle locking on idle, exec, omarchy-toggle-idle # Toggle nightlight bindd = SUPER CTRL, N, Toggle nightlight, exec, omarchy-toggle-nightlight +# Toggle monitor scaling +bindd = SUPER CTRL, Backspace, Toggle monitor scaling, exec, omarchy-toggle-monitor-scaling + +# Toggle single-window square +bindd = SUPER CTRL ALT, Backspace, Toggle single-window square aspect, exec, omarchy-toggle-single-window-square-aspect + # Control Apple Display brightness -bindd = CTRL, F1, Apple Display brightness down, 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 = CTRL, F1, Apple Display brightness down, exec, omarchy-brightness-display-apple -5000 +bindd = CTRL, F2, Apple Display brightness up, exec, omarchy-brightness-display-apple +5000 +bindd = SHIFT CTRL, F2, Apple Display full brightness, exec, omarchy-brightness-display-apple +60000 # Captures -bindd = , PRINT, Screenshot with editing, exec, omarchy-cmd-screenshot -bindd = SHIFT, PRINT, Screenshot to clipboard, exec, omarchy-cmd-screenshot smart clipboard +bindd = , PRINT, Screenshot, exec, omarchy-cmd-screenshot bindd = ALT, PRINT, Screenrecording, exec, omarchy-menu screenrecord bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a @@ -56,5 +61,9 @@ bindd = SUPER CTRL, T, Activity, exec, omarchy-launch-tui btop bindd = SUPER CTRL, X, Start dictation, exec, voxtype record start binddr = SUPER CTRL, X, Stop dictation, exec, voxtype record stop +# Zoom +bindd = SUPER CTRL, Z, Zoom in, exec, hyprctl keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float + 1') +bindd = SUPER CTRL ALT, Z, Reset zoom, exec, hyprctl keyword cursor:zoom_factor 1 + # Lock system bindd = SUPER CTRL, L, Lock system, exec, omarchy-lock-screen diff --git a/default/hypr/envs.conf b/default/hypr/envs.conf index 92d15446..85afc775 100644 --- a/default/hypr/envs.conf +++ b/default/hypr/envs.conf @@ -6,7 +6,7 @@ env = HYPRCURSOR_SIZE,24 env = GDK_BACKEND,wayland,x11,* env = QT_QPA_PLATFORM,wayland;xcb env = QT_STYLE_OVERRIDE,kvantum -env = SDL_VIDEODRIVER,wayland +env = SDL_VIDEODRIVER,wayland,x11 env = MOZ_ENABLE_WAYLAND,1 env = ELECTRON_OZONE_PLATFORM_HINT,wayland env = OZONE_PLATFORM,wayland diff --git a/default/hypr/looknfeel.conf b/default/hypr/looknfeel.conf index 0279074e..c4df1d51 100644 --- a/default/hypr/looknfeel.conf +++ b/default/hypr/looknfeel.conf @@ -131,9 +131,14 @@ cursor { hide_on_key_press = true } +# Auto toggle scratchpad on switching workspace from scratchpad +binds { + hide_special_on_workspace_change = true +} + # Style Gum confirm to match terminal theme env = GUM_CONFIRM_PROMPT_FOREGROUND,6 # Cyan env = GUM_CONFIRM_SELECTED_FOREGROUND,0 # Black env = GUM_CONFIRM_SELECTED_BACKGROUND,2 # Green -env = GUM_CONFIRM_UNSELECTED_FOREGROUND,0 # Black +env = GUM_CONFIRM_UNSELECTED_FOREGROUND,7 # White env = GUM_CONFIRM_UNSELECTED_BACKGROUND,8 # Dark grey diff --git a/default/hypr/windows.conf b/default/hypr/windows.conf index 5d1afb76..67a9a6a9 100644 --- a/default/hypr/windows.conf +++ b/default/hypr/windows.conf @@ -2,11 +2,14 @@ # Hyprland 0.53+ syntax windowrule = suppress_event maximize, match:class .* -# Just dash of opacity by default -windowrule = opacity 0.97 0.9, match:class .* +# Tag all windows for default opacity (apps can override with -default-opacity tag) +windowrule = tag +default-opacity, match:class .* # Fix some dragging issues with XWayland windowrule = no_focus on, match:class ^$, match:title ^$, match:xwayland 1, match:float 1, match:fullscreen 0, match:pin 0 -# App-specific tweaks +# App-specific tweaks (may remove default-opacity tag) source = ~/.local/share/omarchy/default/hypr/apps.conf + +# Apply default opacity after apps have had a chance to opt out +windowrule = opacity 0.97 0.9, match:tag default-opacity diff --git a/default/mako/core.ini b/default/mako/core.ini index 0c9a46e8..203d4e8c 100644 --- a/default/mako/core.ini +++ b/default/mako/core.ini @@ -28,3 +28,7 @@ on-button-left=exec sh -c 'omarchy-notification-dismiss "Update System"; omarchy [summary~="Learn Keybindings"] on-button-left=exec sh -c 'omarchy-notification-dismiss "Learn Keybindings"; omarchy-menu-keybindings' + +[summary~="Screenshot copied & saved"] +max-icon-size=80 +format=%s\n%b diff --git a/default/pacman/mirrorlist-rc b/default/pacman/mirrorlist-rc new file mode 100644 index 00000000..0692a0a1 --- /dev/null +++ b/default/pacman/mirrorlist-rc @@ -0,0 +1 @@ +Server = https://rc-mirror.omarchy.org/$repo/os/$arch diff --git a/default/pacman/pacman-rc.conf b/default/pacman/pacman-rc.conf new file mode 100644 index 00000000..50d2e498 --- /dev/null +++ b/default/pacman/pacman-rc.conf @@ -0,0 +1,30 @@ +# See the pacman.conf(5) manpage for option and repository directives + +[options] +Color +ILoveCandy +VerbosePkgLists +HoldPkg = pacman glibc +Architecture = auto +CheckSpace +ParallelDownloads = 5 +DownloadUser = alpm + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional + +# pacman searches repositories in the order defined here +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +[multilib] +Include = /etc/pacman.d/mirrorlist + +[omarchy] +SigLevel = Optional TrustAll +Server = https://pkgs.omarchy.org/edge/$arch diff --git a/default/systemd/faster-shutdown.conf b/default/systemd/faster-shutdown.conf new file mode 100644 index 00000000..90dce4f6 --- /dev/null +++ b/default/systemd/faster-shutdown.conf @@ -0,0 +1,2 @@ +[Manager] +DefaultTimeoutStopSec=5s diff --git a/default/systemd/hibernate.conf b/default/systemd/hibernate.conf deleted file mode 100644 index b146ae9b..00000000 --- a/default/systemd/hibernate.conf +++ /dev/null @@ -1,3 +0,0 @@ -[Sleep] -HibernateDelaySec=30min -HibernateOnACPower=no diff --git a/default/systemd/lid.conf b/default/systemd/lid.conf deleted file mode 100644 index c6ecbcb7..00000000 --- a/default/systemd/lid.conf +++ /dev/null @@ -1,2 +0,0 @@ -[Login] -HandleLidSwitch=suspend-then-hibernate diff --git a/default/systemd/system-sleep/force-igpu b/default/systemd/system-sleep/force-igpu new file mode 100755 index 00000000..ab0d6d6c --- /dev/null +++ b/default/systemd/system-sleep/force-igpu @@ -0,0 +1,18 @@ +#!/bin/bash + +# Use the Vfio to Integrated trick to turn off NVIDIA dgpu when in integrated mode +# without needing to restart the computer. This is needed because computers like the Asus G14 +# will wake after suspend in Hybrid mode, even if the system was in Integrated mode before +# suspending. + +if [[ $1 == "post" ]]; then + # small delay so the device is fully re-enumerated + sleep 4 + + # force-bind dGPU to vfio (fully detached from nvidia) + /usr/bin/supergfxctl -m Vfio + sleep 1 + + # then go back to Integrated, which powers it off again + /usr/bin/supergfxctl -m Integrated +fi diff --git a/default/systemd/system-sleep/keyboard-backlight b/default/systemd/system-sleep/keyboard-backlight new file mode 100644 index 00000000..c6fbea1c --- /dev/null +++ b/default/systemd/system-sleep/keyboard-backlight @@ -0,0 +1,18 @@ +#!/bin/bash + +# Turn off keyboard backlight before hibernate to prevent hang on power-off. +# The ASUS keyboard controller can block S4 shutdown if LEDs are active. + +if [[ $1 == "pre" && $2 == "hibernate" ]]; then + device="" + for candidate in /sys/class/leds/*kbd_backlight*; do + if [[ -e "$candidate" ]]; then + device="$(basename "$candidate")" + break + fi + done + + if [[ -n "$device" ]]; then + brightnessctl -d "$device" set 0 >/dev/null 2>&1 + fi +fi diff --git a/default/systemd/system/supergfxd.service.d/delay-start.conf b/default/systemd/system/supergfxd.service.d/delay-start.conf new file mode 100644 index 00000000..19fc2986 --- /dev/null +++ b/default/systemd/system/supergfxd.service.d/delay-start.conf @@ -0,0 +1,6 @@ +[Service] +# Delay startup to avoid race condition with display manager initialization +# when booting in Integrated mode. Without this delay, the system can freeze +# on boot because supergfxd tries to disable the dGPU while the display +# subsystem is still initializing. +ExecStartPre=/bin/sleep 5 diff --git a/default/themed/keyboard.rgb.tpl b/default/themed/keyboard.rgb.tpl new file mode 100644 index 00000000..bc9f35a2 --- /dev/null +++ b/default/themed/keyboard.rgb.tpl @@ -0,0 +1 @@ +{{ accent }} diff --git a/default/themed/obsidian.css.tpl b/default/themed/obsidian.css.tpl index 90b86244..e255b0e5 100644 --- a/default/themed/obsidian.css.tpl +++ b/default/themed/obsidian.css.tpl @@ -30,8 +30,8 @@ --interactive-accent-hover: {{ accent }}; /* Muted text */ - --text-muted: {{ color8 }}; - --text-faint: {{ color8 }}; + --text-muted: color-mix(in srgb, {{ foreground }} 70%, transparent); + --text-faint: color-mix(in srgb, {{ foreground }} 55%, transparent); /* Code */ --code-normal: {{ color6 }}; diff --git a/default/udev/framework16-qmk-hid.rules b/default/udev/framework16-qmk-hid.rules new file mode 100644 index 00000000..0100d7af --- /dev/null +++ b/default/udev/framework16-qmk-hid.rules @@ -0,0 +1 @@ +SUBSYSTEM=="hidraw", ATTRS{idVendor}=="32ac", ATTRS{idProduct}=="0012", MODE="0660", TAG+="uaccess" diff --git a/default/walker/restart.conf b/default/walker/restart.conf new file mode 100644 index 00000000..57940311 --- /dev/null +++ b/default/walker/restart.conf @@ -0,0 +1,3 @@ +[Service] +Restart=always +RestartSec=2 diff --git a/default/waybar/indicators/idle.sh b/default/waybar/indicators/idle.sh new file mode 100755 index 00000000..ebb5f4f5 --- /dev/null +++ b/default/waybar/indicators/idle.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +if pgrep -x hypridle >/dev/null; then + echo '{"text": ""}' +else + echo '{"text": "󱫖", "tooltip": "Idle lock disabled", "class": "active"}' +fi diff --git a/default/waybar/indicators/notification-silencing.sh b/default/waybar/indicators/notification-silencing.sh new file mode 100755 index 00000000..d5a68276 --- /dev/null +++ b/default/waybar/indicators/notification-silencing.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +if makoctl mode | grep -q 'do-not-disturb'; then + echo '{"text": "󰂛", "tooltip": "Notifications silenced", "class": "active"}' +else + echo '{"text": ""}' +fi diff --git a/default/wireplumber/wireplumber.conf.d/alsa-soft-mixer.conf b/default/wireplumber/wireplumber.conf.d/alsa-soft-mixer.conf new file mode 100644 index 00000000..6fc1dbd9 --- /dev/null +++ b/default/wireplumber/wireplumber.conf.d/alsa-soft-mixer.conf @@ -0,0 +1,18 @@ +## Use software volume control for all ALSA devices. +## This prevents hardware mixer quirks (like muffled audio on Realtek codecs) +## and provides consistent volume behavior across all hardware. + +monitor.alsa.rules = [ + { + matches = [ + { + device.name = "~alsa_card.*" + } + ] + actions = { + update-props = { + api.alsa.soft-mixer = true + } + } + } +] diff --git a/install/config/all.sh b/install/config/all.sh index b08f57e1..875ba45d 100644 --- a/install/config/all.sh +++ b/install/config/all.sh @@ -7,6 +7,7 @@ run_logged $OMARCHY_INSTALL/config/timezones.sh run_logged $OMARCHY_INSTALL/config/increase-sudo-tries.sh run_logged $OMARCHY_INSTALL/config/increase-lockout-limit.sh run_logged $OMARCHY_INSTALL/config/ssh-flakiness.sh +run_logged $OMARCHY_INSTALL/config/increase-file-watchers.sh run_logged $OMARCHY_INSTALL/config/detect-keyboard-layout.sh run_logged $OMARCHY_INSTALL/config/xcompose.sh run_logged $OMARCHY_INSTALL/config/mise-work.sh @@ -20,6 +21,9 @@ run_logged $OMARCHY_INSTALL/config/sudoless-asdcontrol.sh run_logged $OMARCHY_INSTALL/config/input-group.sh run_logged $OMARCHY_INSTALL/config/omarchy-ai-skill.sh run_logged $OMARCHY_INSTALL/config/kernel-modules-hook.sh +run_logged $OMARCHY_INSTALL/config/powerprofilesctl-rules.sh +run_logged $OMARCHY_INSTALL/config/wifi-powersave-rules.sh +run_logged $OMARCHY_INSTALL/config/hibernation.sh run_logged $OMARCHY_INSTALL/config/hardware/network.sh run_logged $OMARCHY_INSTALL/config/hardware/set-wireless-regdom.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-fkeys.sh @@ -29,9 +33,15 @@ 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/legacy-gpu-terminal.sh run_logged $OMARCHY_INSTALL/config/hardware/nvidia.sh +run_logged $OMARCHY_INSTALL/config/hardware/vulkan.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-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-surface-keyboard.sh +run_logged $OMARCHY_INSTALL/config/hardware/fix-asus-rog-audio-mixer.sh +run_logged $OMARCHY_INSTALL/config/hardware/fix-asus-rog-mic.sh +run_logged $OMARCHY_INSTALL/config/hardware/fix-yt6801-ethernet-adapter.sh +run_logged $OMARCHY_INSTALL/config/hardware/fix-synaptic-touchpad.sh +run_logged $OMARCHY_INSTALL/config/hardware/framework16-qmk-hid.sh diff --git a/install/config/docker.sh b/install/config/docker.sh index 99096245..1499f9c8 100644 --- a/install/config/docker.sh +++ b/install/config/docker.sh @@ -16,8 +16,8 @@ sudo mkdir -p /etc/systemd/resolved.conf.d echo -e '[Resolve]\nDNSStubListenerExtra=172.17.0.1' | sudo tee /etc/systemd/resolved.conf.d/20-docker-dns.conf >/dev/null sudo systemctl restart systemd-resolved -# Start Docker automatically -sudo systemctl enable docker +# Start Docker on-demand +sudo systemctl enable docker.socket # Give this user privileged Docker access sudo usermod -aG docker ${USER} diff --git a/install/config/fast-shutdown.sh b/install/config/fast-shutdown.sh index bbbfafdc..627e02a5 100644 --- a/install/config/fast-shutdown.sh +++ b/install/config/fast-shutdown.sh @@ -1,7 +1,3 @@ sudo mkdir -p /etc/systemd/system.conf.d - -cat </dev/null | grep -i "ALC285" | head -1 | sed 's/card \([0-9]*\).*/\1/') + if [[ -n "$card" ]]; then + amixer -c "$card" set Master 80% unmute 2>/dev/null + fi +fi diff --git a/install/config/hardware/fix-asus-rog-mic.sh b/install/config/hardware/fix-asus-rog-mic.sh new file mode 100644 index 00000000..c50a63f1 --- /dev/null +++ b/install/config/hardware/fix-asus-rog-mic.sh @@ -0,0 +1,15 @@ +# Fix internal mic gain on ASUS ROG laptops with Realtek ALC285. +# The mic boost is way too high by default, causing clipping. +# Sets levels and stores ALSA state so it persists across reboots. + +if omarchy-hw-asus-rog; then + for card in /proc/asound/card*/codec*; do + if grep -q "ALC285" "$card" 2>/dev/null; then + cardnum=$(echo "$card" | grep -oP 'card\K\d+') + amixer -c "$cardnum" set 'Internal Mic Boost' 0 >/dev/null 2>&1 || true + amixer -c "$cardnum" set 'Capture' 70% >/dev/null 2>&1 || true + sudo alsactl store "$cardnum" 2>/dev/null || true + break + fi + done +fi diff --git a/install/config/hardware/fix-synaptic-touchpad.sh b/install/config/hardware/fix-synaptic-touchpad.sh new file mode 100644 index 00000000..cc726520 --- /dev/null +++ b/install/config/hardware/fix-synaptic-touchpad.sh @@ -0,0 +1,6 @@ +# Enable Synaptics InterTouch for confirmed touchpads if not already loaded + +if grep -qi synaptics /proc/bus/input/devices \ + && ! lsmod | grep -q '^psmouse'; then + modprobe psmouse synaptics_intertouch=1 +fi \ No newline at end of file diff --git a/install/config/hardware/fix-yt6801-ethernet-adapter.sh b/install/config/hardware/fix-yt6801-ethernet-adapter.sh new file mode 100644 index 00000000..34331a0f --- /dev/null +++ b/install/config/hardware/fix-yt6801-ethernet-adapter.sh @@ -0,0 +1,4 @@ +# Install drivers for Motorcomm YT6801 ethernet adapter used by the Slimbook Executive +if lspci | grep -i "YT6801\|Motorcomm.*Ethernet"; then + omarchy-pkg-add linux-headers yt6801-dkms +fi diff --git a/install/config/hardware/framework16-qmk-hid.sh b/install/config/hardware/framework16-qmk-hid.sh new file mode 100644 index 00000000..5fb46847 --- /dev/null +++ b/install/config/hardware/framework16-qmk-hid.sh @@ -0,0 +1,9 @@ +# Allow unprivileged access to the Framework 16 keyboard for RGB control via qmk_hid. + +if omarchy-hw-framework16; then + if [[ ! -f /etc/udev/rules.d/50-framework16-qmk-hid.rules ]]; then + sudo cp "$OMARCHY_PATH/default/udev/framework16-qmk-hid.rules" /etc/udev/rules.d/50-framework16-qmk-hid.rules + sudo udevadm control --reload-rules + sudo udevadm trigger + fi +fi diff --git a/install/config/hardware/nvidia.sh b/install/config/hardware/nvidia.sh index 125addf6..da2ba180 100644 --- a/install/config/hardware/nvidia.sh +++ b/install/config/hardware/nvidia.sh @@ -4,12 +4,14 @@ if [ -n "$NVIDIA" ]; then # Check which kernel is installed and set appropriate headers package KERNEL_HEADERS="$(pacman -Qqs '^linux(-zen|-lts|-hardened)?$' | head -1)-headers" - if echo "$NVIDIA" | grep -qE "RTX [2-9][0-9]|GTX 16"; then - # Turing (16xx, 20xx), Ampere (30xx), Ada (40xx), and newer recommend the open-source kernel modules + # Turing+ (GTX 16xx, RTX 20xx-50xx, Quadro RTX, datacenter A/H/T/L series) have GSP firmware + if echo "$NVIDIA" | grep -qE "GTX 16[0-9]{2}|RTX [2-5][0-9]{3}|Quadro RTX|RTX A[0-9]{4}|A[1-9][0-9]{2}|H[1-9][0-9]{2}|T4|L[0-9]+"; then PACKAGES=(nvidia-open-dkms nvidia-utils lib32-nvidia-utils libva-nvidia-driver) - elif echo "$NVIDIA" | grep -qE "GTX 9|GTX 10|Quadro P"; then - # Pascal (10xx or Quadro Pxxx) and Maxwell (9xx) use legacy branch that can only be installed from AUR + GPU_ARCH="turing_plus" + # Maxwell (GTX 9xx), Pascal (GT/GTX 10xx, Quadro P, MX series), Volta (Titan V, Tesla V100, Quadro GV100) lack GSP + elif echo "$NVIDIA" | grep -qE "GTX (9[0-9]{2}|10[0-9]{2})|GT 10[0-9]{2}|Quadro [PM][0-9]{3,4}|Quadro GV100|MX *[0-9]+|Titan (X|Xp|V)|Tesla V100"; then PACKAGES=(nvidia-580xx-dkms nvidia-580xx-utils lib32-nvidia-580xx-utils) + GPU_ARCH="maxwell_pascal_volta" fi # Bail if no supported GPU if [ -z "${PACKAGES+x}" ]; then @@ -29,12 +31,23 @@ EOF MODULES+=(nvidia nvidia_modeset nvidia_uvm nvidia_drm) EOF - # Add NVIDIA environment variables - cat >>$HOME/.config/hypr/envs.conf <<'EOF' + # Add NVIDIA environment variables based on GPU architecture + if [ "$GPU_ARCH" = "turing_plus" ]; then + # Turing+ (RTX 20xx, GTX 16xx, and newer) with GSP firmware support + cat >>"$HOME/.config/hypr/envs.conf" <<'EOF' -# NVIDIA +# NVIDIA (Turing+ with GSP firmware) env = NVD_BACKEND,direct env = LIBVA_DRIVER_NAME,nvidia env = __GLX_VENDOR_LIBRARY_NAME,nvidia EOF + elif [ "$GPU_ARCH" = "maxwell_pascal_volta" ]; then + # Maxwell/Pascal/Volta (GTX 9xx/10xx, GT 10xx, Quadro P/M/GV, MX series, Titan X/Xp/V) lack GSP firmware + cat >>"$HOME/.config/hypr/envs.conf" <<'EOF' + +# NVIDIA (Maxwell/Pascal/Volta without GSP firmware) +env = NVD_BACKEND,egl +env = __GLX_VENDOR_LIBRARY_NAME,nvidia +EOF + fi fi diff --git a/install/config/hardware/vulkan.sh b/install/config/hardware/vulkan.sh new file mode 100644 index 00000000..40d0e2fb --- /dev/null +++ b/install/config/hardware/vulkan.sh @@ -0,0 +1,20 @@ +# Install Vulkan drivers matching detected GPU hardware +# (NVIDIA Vulkan is handled by nvidia.sh via nvidia-utils) + +declare -A VULKAN_DRIVERS=( + [Intel]=vulkan-intel + [AMD]=vulkan-radeon + [Apple]=vulkan-asahi +) + +PACKAGES=() + +for vendor in "${!VULKAN_DRIVERS[@]}"; do + if lspci | grep -iE "(VGA|Display).*$vendor" > /dev/null; then + PACKAGES+=("${VULKAN_DRIVERS[$vendor]}") + fi +done + +if [ ${#PACKAGES[@]} -gt 0 ]; then + omarchy-pkg-add "${PACKAGES[@]}" +fi diff --git a/install/config/hibernation.sh b/install/config/hibernation.sh new file mode 100644 index 00000000..17628ead --- /dev/null +++ b/install/config/hibernation.sh @@ -0,0 +1,2 @@ +# Enable hibernation +omarchy-hibernation-setup --force diff --git a/install/config/increase-file-watchers.sh b/install/config/increase-file-watchers.sh new file mode 100755 index 00000000..a6be761a --- /dev/null +++ b/install/config/increase-file-watchers.sh @@ -0,0 +1,3 @@ +# Increase inotify file watchers for VS Code, webpack, and other dev tools (default 8192 is too low) +echo "fs.inotify.max_user_watches=524288" | sudo tee /etc/sysctl.d/90-omarchy-file-watchers.conf >/dev/null +sudo sysctl --system >/dev/null 2>&1 diff --git a/install/config/mimetypes.sh b/install/config/mimetypes.sh index ea8e1aff..4d7a32bf 100644 --- a/install/config/mimetypes.sh +++ b/install/config/mimetypes.sh @@ -1,6 +1,9 @@ omarchy-refresh-applications update-desktop-database ~/.local/share/applications +# Open directories in file manager +xdg-mime default org.gnome.Nautilus.desktop inode/directory + # Open all images with imv xdg-mime default imv.desktop image/png xdg-mime default imv.desktop image/jpeg diff --git a/install/config/powerprofilesctl-rules.sh b/install/config/powerprofilesctl-rules.sh new file mode 100644 index 00000000..da18f24d --- /dev/null +++ b/install/config/powerprofilesctl-rules.sh @@ -0,0 +1,22 @@ +if omarchy-battery-present; then + mapfile -t profiles < <(omarchy-powerprofiles-list) + + if [[ ${#profiles[@]} -gt 1 ]]; then + + # Default AC profile: + # 3 profiles → performance + # 2 profiles → balanced + ac_profile="${profiles[2]:-${profiles[1]}}" + + # Default Battery profile (balanced) + battery_profile="${profiles[1]}" + + cat < /dev/null << EOF @@ -23,3 +27,4 @@ EOF # Link the visual theme menu config mkdir -p ~/.config/elephant/menus ln -snf $OMARCHY_PATH/default/elephant/omarchy_themes.lua ~/.config/elephant/menus/omarchy_themes.lua +ln -snf $OMARCHY_PATH/default/elephant/omarchy_background_selector.lua ~/.config/elephant/menus/omarchy_background_selector.lua diff --git a/install/config/wifi-powersave-rules.sh b/install/config/wifi-powersave-rules.sh new file mode 100644 index 00000000..08b8d49b --- /dev/null +++ b/install/config/wifi-powersave-rules.sh @@ -0,0 +1,9 @@ +if omarchy-battery-present; then + cat </dev/null </dev/null; then - # This computer runs on a battery +if omarchy-battery-present; then powerprofilesctl set balanced || true # Enable battery monitoring timer for low battery notifications systemctl --user enable --now omarchy-battery-monitor.timer else - # This computer runs on power outlet powerprofilesctl set performance || true fi diff --git a/install/omarchy-base.packages b/install/omarchy-base.packages index e76d0185..2b7954ca 100644 --- a/install/omarchy-base.packages +++ b/install/omarchy-base.packages @@ -5,6 +5,7 @@ 1password-cli aether alacritty +alsa-utils asdcontrol avahi bash-completion @@ -13,6 +14,7 @@ bluetui bolt brightnessctl btop +chromium clang cups cups-browsed @@ -79,6 +81,7 @@ mariadb-libs mise mpv nautilus +nautilus-python gnome-disk-utility noto-fonts noto-fonts-cjk @@ -88,7 +91,6 @@ nss-mdns nvim obs-studio obsidian -omarchy-chromium omarchy-nvim omarchy-walker opencode @@ -119,6 +121,7 @@ swayosd system-config-printer tldr tree-sitter-cli +tmux tobi-try ttf-cascadia-mono-nerd ttf-ia-writer diff --git a/install/omarchy-other.packages b/install/omarchy-other.packages index e531d56e..bec02782 100644 --- a/install/omarchy-other.packages +++ b/install/omarchy-other.packages @@ -2,6 +2,7 @@ # Utilized by ISO builder to ensure package availability in the ISO autoconf-archive +asusctl base base-devel broadcom-wl @@ -44,8 +45,14 @@ snapper webp-pixbuf-loader wget yay-debug +yt6801-dkms zram-generator +# Vulkan drivers (auto-detected by hardware) +vulkan-intel +vulkan-radeon +vulkan-asahi + # T2 MacBook support packages apple-bcm-firmware apple-t2-audio-config diff --git a/install/packaging/all.sh b/install/packaging/all.sh index a28c3963..9d86078b 100644 --- a/install/packaging/all.sh +++ b/install/packaging/all.sh @@ -4,3 +4,5 @@ run_logged $OMARCHY_INSTALL/packaging/nvim.sh run_logged $OMARCHY_INSTALL/packaging/icons.sh run_logged $OMARCHY_INSTALL/packaging/webapps.sh run_logged $OMARCHY_INSTALL/packaging/tuis.sh +run_logged $OMARCHY_INSTALL/packaging/asus-rog.sh +run_logged $OMARCHY_INSTALL/packaging/framework16.sh diff --git a/install/packaging/asus-rog.sh b/install/packaging/asus-rog.sh new file mode 100644 index 00000000..6eab5853 --- /dev/null +++ b/install/packaging/asus-rog.sh @@ -0,0 +1,3 @@ +if omarchy-hw-asus-rog; then + omarchy-pkg-add asusctl +fi diff --git a/install/packaging/framework16.sh b/install/packaging/framework16.sh new file mode 100644 index 00000000..0c091f97 --- /dev/null +++ b/install/packaging/framework16.sh @@ -0,0 +1,3 @@ +if omarchy-hw-framework16; then + omarchy-pkg-add qmk-hid +fi diff --git a/install/post-install/pacman.sh b/install/post-install/pacman.sh index 05ed163c..9d5747bc 100644 --- a/install/post-install/pacman.sh +++ b/install/post-install/pacman.sh @@ -1,12 +1,6 @@ # Configure pacman - -if [[ ${OMARCHY_MIRROR:-} == "edge" ]] ; then - sudo cp -f ~/.local/share/omarchy/default/pacman/pacman-edge.conf /etc/pacman.conf - sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-edge /etc/pacman.d/mirrorlist -else - sudo cp -f ~/.local/share/omarchy/default/pacman/pacman-stable.conf /etc/pacman.conf - sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-stable /etc/pacman.d/mirrorlist -fi +sudo cp -f ~/.local/share/omarchy/default/pacman/pacman-${OMARCHY_MIRROR:-stable}.conf /etc/pacman.conf +sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-${OMARCHY_MIRROR:-stable} /etc/pacman.d/mirrorlist if lspci -nn | grep -q "106b:180[12]"; then cat </dev/null diff --git a/install/preflight/pacman.sh b/install/preflight/pacman.sh index adf6d4e5..c996bfef 100644 --- a/install/preflight/pacman.sh +++ b/install/preflight/pacman.sh @@ -3,13 +3,8 @@ if [[ -n ${OMARCHY_ONLINE_INSTALL:-} ]]; then sudo pacman -S --needed --noconfirm base-devel # Configure pacman - if [[ ${OMARCHY_MIRROR:-} == "edge" ]] ; then - sudo cp -f ~/.local/share/omarchy/default/pacman/pacman-edge.conf /etc/pacman.conf - sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-edge /etc/pacman.d/mirrorlist - else - sudo cp -f ~/.local/share/omarchy/default/pacman/pacman-stable.conf /etc/pacman.conf - sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-stable /etc/pacman.d/mirrorlist - fi + sudo cp -f ~/.local/share/omarchy/default/pacman/pacman-${OMARCHY_MIRROR:-stable}.conf /etc/pacman.conf + sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist-${OMARCHY_MIRROR:-stable} /etc/pacman.d/mirrorlist sudo pacman-key --recv-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 --keyserver keys.openpgp.org sudo pacman-key --lsign-key 40DFB630FF42BCFFB047046CF0134EE680CAC571 @@ -17,7 +12,6 @@ if [[ -n ${OMARCHY_ONLINE_INSTALL:-} ]]; then sudo pacman -Sy sudo pacman -S --noconfirm --needed omarchy-keyring - # Refresh all repos sudo pacman -Syyu --noconfirm fi diff --git a/migrations/1767138576.sh b/migrations/1767138576.sh index 5df9ce2b..9771e316 100644 --- a/migrations/1767138576.sh +++ b/migrations/1767138576.sh @@ -1,9 +1,9 @@ echo "Update terminal scrolltouchpad setting to Hyprland 0.53 style" if grep -q "scrolltouchpad" ~/.config/hypr/input.conf; then - sed -Ei 's/^windowrule = scrolltouchpad ([^,]+), class:\(([^)]+)\)$/windowrule = match:class (\2), scroll_touchpad \1/' ~/.config/hypr/input.conf - sed -Ei 's/^windowrule = scrolltouchpad ([^,]+), class:([^ ]+)$/windowrule = match:class \2, scroll_touchpad \1/' ~/.config/hypr/input.conf - sed -Ei 's/^windowrule = scrolltouchpad ([^,]+), tag:terminal$/windowrule = match:class (Alacritty|kitty), scroll_touchpad 1.5\nwindowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2/' ~/.config/hypr/input.conf + sed -Ei 's/^windowrule = scrolltouchpad ([^,]+), class:\(([^)]+)\)\s*$/windowrule = match:class (\2), scroll_touchpad \1/' ~/.config/hypr/input.conf + sed -Ei 's/^windowrule = scrolltouchpad ([^,]+), class:([^ ]+)\s*$/windowrule = match:class \2, scroll_touchpad \1/' ~/.config/hypr/input.conf + sed -Ei 's/^windowrule = scrolltouchpad ([^,]+), tag:terminal\s*$/windowrule = match:class (Alacritty|kitty), scroll_touchpad 1.5\nwindowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2/' ~/.config/hypr/input.conf fi # Ensure we restart to pair new Hyprland settings with new version diff --git a/migrations/1768270644.sh b/migrations/1768270644.sh new file mode 100644 index 00000000..59083d19 --- /dev/null +++ b/migrations/1768270644.sh @@ -0,0 +1,14 @@ +echo "Add icon for headset audio profile in Waybar" + +if ! grep -q '"headset": ""' "$HOME/.config/waybar/config.jsonc"; then + sed -i ' + /"pulseaudio": {/,/^[ ]*}/{ + /"format-icons": {/,/^[ ]*}/{ + /"default":/i\ +\ "headset": "", + } + } + ' "$HOME/.config/waybar/config.jsonc" + + omarchy-restart-waybar +fi diff --git a/migrations/1768906440.sh b/migrations/1768906440.sh new file mode 100644 index 00000000..19c676cd --- /dev/null +++ b/migrations/1768906440.sh @@ -0,0 +1,19 @@ +echo "Migrate legacy mobile NVIDIA GPUs to nvidia-580xx driver (if needed)" + +# Only migrate MX1xx, 2xx or 3xx (Pascal/Maxwell) +NVIDIA="$(lspci | grep -i 'nvidia')" +if echo "$NVIDIA" | grep -qE "MX1|MX2|MX3"; then + if ! pacman -Qq | grep -qE '^linux(-[a-z0-9]+)?-headers$'; then + echo "Error: no linux headers package installed (required for DKMS drivers). Please install the appropriate headers and re-run this migration." + exit 1 + fi + + # Piping yes to override existing packages + yes | sudo pacman -S nvidia-580xx-dkms nvidia-580xx-utils lib32-nvidia-580xx-utils + + # Verify packages were installed + if ! pacman -Qq nvidia-580xx-dkms nvidia-580xx-utils lib32-nvidia-580xx-utils &>/dev/null; then + echo "Error: NVIDIA 580xx driver packages failed to install" + exit 1 + fi +fi diff --git a/migrations/1768916735.sh b/migrations/1768916735.sh new file mode 100644 index 00000000..0c5c6408 --- /dev/null +++ b/migrations/1768916735.sh @@ -0,0 +1,8 @@ +echo "Fix microphone gain and audio mixing on Asus ROG laptops" + +source "$OMARCHY_PATH/install/config/hardware/fix-asus-rog-mic.sh" +source "$OMARCHY_PATH/install/config/hardware/fix-asus-rog-audio-mixer.sh" + +if omarchy-hw-asus-rog; then + omarchy-restart-pipewire +fi diff --git a/migrations/1769182209.sh b/migrations/1769182209.sh new file mode 100644 index 00000000..ae4825de --- /dev/null +++ b/migrations/1769182209.sh @@ -0,0 +1,4 @@ +echo "Enable auto-pasting for the emoji picker" + +omarchy-refresh-config elephant/symbols.toml +omarchy-restart-walker diff --git a/migrations/1769183359.sh b/migrations/1769183359.sh new file mode 100644 index 00000000..dbdbedf2 --- /dev/null +++ b/migrations/1769183359.sh @@ -0,0 +1,3 @@ +echo "Add nautilus-python package for 'Open in Ghostty' shortcut in Nautilus" + +omarchy-pkg-add nautilus-python diff --git a/migrations/1769510847.sh b/migrations/1769510847.sh new file mode 100644 index 00000000..d9c5b260 --- /dev/null +++ b/migrations/1769510847.sh @@ -0,0 +1,10 @@ +echo "Switch back to mainline chromium now that it supports full live themeing" + +if omarchy-pkg-present omarchy-chromium; then + if gum confirm "Ready to switch to mainstream chromium? (Will close Chromium + reset settings)"; then + pkill -x chromium + omarchy-pkg-drop omarchy-chromium + omarchy-pkg-add chromium + omarchy-theme-set-browser + fi +fi diff --git a/migrations/1769543550.sh b/migrations/1769543550.sh new file mode 100644 index 00000000..44c657c7 --- /dev/null +++ b/migrations/1769543550.sh @@ -0,0 +1,6 @@ +echo "Add SUPER+ALT+SHIFT+F shortcut to open nautilus in cwd" + +# Add the new CWD binding if it doesn't exist +if ! grep -q "SUPER ALT SHIFT, F" ~/.config/hypr/bindings.conf; then + sed -i '/bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window/a bindd = SUPER ALT SHIFT, F, File manager (cwd), exec, uwsm-app -- nautilus --new-window "$(omarchy-cmd-terminal-cwd)"' ~/.config/hypr/bindings.conf +fi diff --git a/migrations/1769566732.sh b/migrations/1769566732.sh new file mode 100644 index 00000000..f2df93c0 --- /dev/null +++ b/migrations/1769566732.sh @@ -0,0 +1,3 @@ +echo "Set power profile based on source switching (AC or Battery)" + +source $OMARCHY_PATH/install/config/powerprofilesctl-rules.sh diff --git a/migrations/1769616857.sh b/migrations/1769616857.sh new file mode 100644 index 00000000..34e57bdf --- /dev/null +++ b/migrations/1769616857.sh @@ -0,0 +1,3 @@ +echo "Turn off opencode's own auto-update feature (we rely on pacman)" + +omarchy-refresh-config opencode/opencode.json diff --git a/migrations/1769619823.sh b/migrations/1769619823.sh new file mode 100644 index 00000000..47f1f482 --- /dev/null +++ b/migrations/1769619823.sh @@ -0,0 +1,3 @@ +echo "Open directories in file manager using the shell open command" + +xdg-mime default org.gnome.Nautilus.desktop inode/directory diff --git a/migrations/1769964367.sh b/migrations/1769964367.sh new file mode 100644 index 00000000..487f4d32 --- /dev/null +++ b/migrations/1769964367.sh @@ -0,0 +1,6 @@ +echo "Improve audio controls icon for default selection" + +if [[ ! -f ~/.config/wiremix/wiremix.toml ]]; then + mkdir -p ~/.config/wiremix + cp -f $OMARCHY_PATH/config/wiremix/wiremix.toml ~/.config/wiremix/ +fi diff --git a/migrations/1770159912.sh b/migrations/1770159912.sh new file mode 100644 index 00000000..5709cdb7 --- /dev/null +++ b/migrations/1770159912.sh @@ -0,0 +1,32 @@ +echo "Fix NVIDIA environment variables for Maxwell/Pascal/Volta GPUs" + +# Detect if user has Maxwell/Pascal/Volta GPU (pre-Turing cards without GSP firmware) +# Maxwell (GTX 9xx), Pascal (GT/GTX 10xx, Quadro P, MX series), Volta (Titan V, Tesla V100, Quadro GV100) +NVIDIA="$(lspci | grep -i 'nvidia')" +if echo "$NVIDIA" | grep -qE "GTX (9[0-9]{2}|10[0-9]{2})|GT 10[0-9]{2}|Quadro [PM][0-9]{3,4}|Quadro GV100|MX *[0-9]+|Titan (X|Xp|V)|Tesla V100"; then + ENVS_CONF="$HOME/.config/hypr/envs.conf" + + if [ -f "$ENVS_CONF" ]; then + # Check if file contains problematic variables + if grep -qE "env = (NVD_BACKEND,direct|LIBVA_DRIVER_NAME,nvidia)" "$ENVS_CONF"; then + echo "Removing incompatible NVIDIA environment variables for legacy GPU..." + + # Create backup + cp "$ENVS_CONF" "$ENVS_CONF.bak.$(date +%s)" + + # Remove all NVIDIA env lines and section headers (we re-add the correct ones below) + sed -i '/^env = \(NVD_BACKEND\|LIBVA_DRIVER_NAME\|__GLX_VENDOR_LIBRARY_NAME\),/d; /^# NVIDIA/d' "$ENVS_CONF" + + # Add correct environment variables for legacy GPUs + cat >>"$ENVS_CONF" <<'EOF' + +# NVIDIA (Maxwell/Pascal/Volta without GSP firmware) +env = NVD_BACKEND,egl +env = __GLX_VENDOR_LIBRARY_NAME,nvidia +EOF + + echo "NVIDIA environment variables updated. A backup was saved to $ENVS_CONF.bak.*" + echo "Please restart Hyprland for changes to take effect." + fi + fi +fi diff --git a/migrations/1770372978.sh b/migrations/1770372978.sh new file mode 100644 index 00000000..8ce213b6 --- /dev/null +++ b/migrations/1770372978.sh @@ -0,0 +1,5 @@ +echo "Disable fingerprint in hyprlock if fingerprint auth is not configured" + +if omarchy-cmd-missing fprintd-list || ! fprintd-list "$USER" 2>/dev/null | grep -q "finger"; then + sed -i 's/fingerprint:enabled = .*/fingerprint:enabled = false/' ~/.config/hypr/hyprlock.conf +fi diff --git a/migrations/1770375655.sh b/migrations/1770375655.sh new file mode 100644 index 00000000..8c2f3727 --- /dev/null +++ b/migrations/1770375655.sh @@ -0,0 +1,5 @@ +echo "Add Super+Shift+Return binding for browser" + +if [[ -f ~/.config/hypr/bindings.conf ]] && ! grep -q "SUPER SHIFT, RETURN.*Browser" ~/.config/hypr/bindings.conf; then + sed -i '/^bindd = SUPER, RETURN, Terminal/a bindd = SUPER SHIFT, RETURN, Browser, exec, omarchy-launch-browser' ~/.config/hypr/bindings.conf +fi diff --git a/migrations/1770375817.sh b/migrations/1770375817.sh new file mode 100644 index 00000000..28e03f8a --- /dev/null +++ b/migrations/1770375817.sh @@ -0,0 +1,6 @@ +echo "Ensure walker service is restarted if it's killed or crashes" + +mkdir -p ~/.config/systemd/user/app-walker@autostart.service.d/ +cp $OMARCHY_PATH/default/walker/restart.conf ~/.config/systemd/user/app-walker@autostart.service.d/restart.conf +systemctl --user daemon-reload + diff --git a/migrations/1770380577.sh b/migrations/1770380577.sh new file mode 100644 index 00000000..a9b0ca8b --- /dev/null +++ b/migrations/1770380577.sh @@ -0,0 +1,5 @@ +echo "Use interactive background selector menu" + +mkdir -p ~/.config/elephant/menus +ln -snf $OMARCHY_PATH/default/elephant/omarchy_background_selector.lua ~/.config/elephant/menus/omarchy_background_selector.lua +omarchy-restart-walker diff --git a/migrations/1770393078.sh b/migrations/1770393078.sh new file mode 100644 index 00000000..79238051 --- /dev/null +++ b/migrations/1770393078.sh @@ -0,0 +1,7 @@ +echo "Add async-backend = epoll to ghostty config to fix high IO pressure" + +if [[ -f ~/.config/ghostty/config ]] && ! grep -q "^async-backend" ~/.config/ghostty/config; then + echo "" >> ~/.config/ghostty/config + echo "# Fix general slowness on hyprland (https://github.com/ghostty-org/ghostty/discussions/3224)" >> ~/.config/ghostty/config + echo "async-backend = epoll" >> ~/.config/ghostty/config +fi diff --git a/migrations/1770483021.sh b/migrations/1770483021.sh new file mode 100644 index 00000000..fb8c7f9e --- /dev/null +++ b/migrations/1770483021.sh @@ -0,0 +1,4 @@ +echo "Install Framework 16 keyboard RGB support" + +source $OMARCHY_PATH/install/packaging/framework16.sh +source $OMARCHY_PATH/install/config/hardware/framework16-qmk-hid.sh diff --git a/migrations/1770638893.sh b/migrations/1770638893.sh new file mode 100644 index 00000000..0e5f2e54 --- /dev/null +++ b/migrations/1770638893.sh @@ -0,0 +1,9 @@ +echo "Add Tmux as an option with themed styling" + +omarchy-pkg-add tmux + +if [[ ! -f ~/.config/tmux/tmux.conf ]]; then + mkdir -p ~/.config/tmux + cp $OMARCHY_PATH/config/tmux/tmux.conf ~/.config/tmux/tmux.conf + omarchy-theme-refresh +fi diff --git a/migrations/1770728860.sh b/migrations/1770728860.sh new file mode 100644 index 00000000..85f19f46 --- /dev/null +++ b/migrations/1770728860.sh @@ -0,0 +1,5 @@ +echo "Unbind ctrl+shift+page_up/page_down in Ghostty so it doesn't interfere with tmux keybindings" + +if [[ -f ~/.config/ghostty/config ]] && ! grep -q "keybind = ctrl+shift+page_up=" ~/.config/ghostty/config; then + sed -i '/# Keyboard bindings/a\keybind = ctrl+shift+page_up=unbind\nkeybind = ctrl+shift+page_down=unbind' ~/.config/ghostty/config +fi diff --git a/migrations/1770811646.sh b/migrations/1770811646.sh new file mode 100644 index 00000000..efb50931 --- /dev/null +++ b/migrations/1770811646.sh @@ -0,0 +1,3 @@ +echo "Disable WiFi power save on AC power" + +source $OMARCHY_PATH/install/config/wifi-powersave-rules.sh diff --git a/migrations/1771002522.sh b/migrations/1771002522.sh new file mode 100644 index 00000000..a4550bc5 --- /dev/null +++ b/migrations/1771002522.sh @@ -0,0 +1,11 @@ +echo "Add full OSC 52 support to Alacritty" + +ALACRITTY_CONFIG=~/.config/alacritty/alacritty.toml + +if [[ -f $ALACRITTY_CONFIG ]] && ! grep -q 'osc52' "$ALACRITTY_CONFIG"; then + cat >> "$ALACRITTY_CONFIG" << 'EOF' + +[terminal] +osc52 = "CopyPaste" +EOF +fi diff --git a/migrations/1771188969.sh b/migrations/1771188969.sh new file mode 100644 index 00000000..e89716e1 --- /dev/null +++ b/migrations/1771188969.sh @@ -0,0 +1,14 @@ +echo "Remove temporary Wayland color manager disabling flag from existing Chromium configs" + +# This reverts the workaround originally added by migration 1760401344.sh +# Remove flag and comment from chromium-flags.conf only if found +if [[ -f ~/.config/chromium-flags.conf ]]; then + sed -i '/--disable-features=WaylandWpColorManagerV1/d' ~/.config/chromium-flags.conf + sed -i '/# Chromium crash workaround for Wayland color management on Hyprland/d' ~/.config/chromium-flags.conf +fi + +# Remove flag and comment from brave-flags.conf only if found +if [[ -f ~/.config/brave-flags.conf ]]; then + sed -i '/--disable-features=WaylandWpColorManagerV1/d' ~/.config/brave-flags.conf + sed -i '/# Chromium crash workaround for Wayland color management on Hyprland/d' ~/.config/brave-flags.conf +fi diff --git a/migrations/1771345870.sh b/migrations/1771345870.sh new file mode 100644 index 00000000..3af93cd5 --- /dev/null +++ b/migrations/1771345870.sh @@ -0,0 +1,6 @@ +echo "Switch lmstudio -> lmstudio-bin" + +if pacman -Q lmstudio &>/dev/null; then + omarchy-pkg-drop lmstudio + omarchy-pkg-add lmstudio-bin +fi diff --git a/migrations/1771403119.sh b/migrations/1771403119.sh new file mode 100644 index 00000000..fb27c296 --- /dev/null +++ b/migrations/1771403119.sh @@ -0,0 +1,3 @@ +echo "Cure Chromium crash bug caused by mixing 145 and 144 sync logs" + +rm -rf ~/.config/chromium/Default/Sync\ Data/LevelDB/*.log diff --git a/migrations/1771599447.sh b/migrations/1771599447.sh new file mode 100644 index 00000000..dd183cf9 --- /dev/null +++ b/migrations/1771599447.sh @@ -0,0 +1,3 @@ +echo "Delay after sleep for PAM readiness before turning on display" + +sed -i 's/after_sleep_cmd = hyprctl dispatch dpms on/after_sleep_cmd = sleep 1 \&\& hyprctl dispatch dpms on/' ~/.config/hypr/hypridle.conf diff --git a/migrations/1771602477.sh b/migrations/1771602477.sh new file mode 100755 index 00000000..f7bb4a61 --- /dev/null +++ b/migrations/1771602477.sh @@ -0,0 +1,37 @@ +echo "Add idle lock indicator to Waybar" + +STYLE_FILE=~/.config/waybar/style.css +CONFIG_FILE=~/.config/waybar/config.jsonc + +# Add idle-indicator to modules-center if not present +if ! grep -q "custom/idle-indicator" "$CONFIG_FILE"; then + sed -i 's/"custom\/screenrecording-indicator"]/"custom\/screenrecording-indicator", "custom\/idle-indicator"]/' "$CONFIG_FILE" + + sed -i '/"tray": {/i\ "custom/idle-indicator": {\n "on-click": "omarchy-toggle-idle",\n "exec": "$OMARCHY_PATH/default/waybar/indicators/idle.sh",\n "signal": 9,\n "return-type": "json"\n },' "$CONFIG_FILE" +fi + +# Add idle-indicator CSS if not present +if ! grep -q "#custom-idle-indicator" "$STYLE_FILE"; then + # Remove screenrecording-indicator from shared margin block and pair it with idle-indicator instead + sed -i 's/^#custom-screenrecording-indicator,$//' "$STYLE_FILE" + + # Add shared rule for both indicators and idle-indicator active state + sed -i '/#custom-screenrecording-indicator.active {/i\#custom-screenrecording-indicator,\n#custom-idle-indicator {\n min-width: 12px;\n margin-left: 5px;\n margin-right: 0;\n font-size: 10px;\n padding-bottom: 1px;\n}\n' "$STYLE_FILE" + + # Remove the now-duplicated properties from the standalone screenrecording block + sed -i '/#custom-screenrecording-indicator {/,/^}/ { + /min-width:/d + /margin-left:/d + /font-size:/d + /padding-bottom:/d + /^#custom-screenrecording-indicator {/d + /^}$/d + }' "$STYLE_FILE" + + cat >> "$STYLE_FILE" << 'EOF' + +#custom-idle-indicator.active { + color: #a55555; +} +EOF +fi diff --git a/migrations/1771602647.sh b/migrations/1771602647.sh new file mode 100755 index 00000000..fa880780 --- /dev/null +++ b/migrations/1771602647.sh @@ -0,0 +1,22 @@ +echo "Add notification silencing indicator to Waybar" + +STYLE_FILE=~/.config/waybar/style.css +CONFIG_FILE=~/.config/waybar/config.jsonc + +# Add notification-silencing-indicator to modules-center if not present +if ! grep -q "custom/notification-silencing-indicator" "$CONFIG_FILE"; then + sed -i 's/"custom\/idle-indicator"]/"custom\/idle-indicator", "custom\/notification-silencing-indicator"]/' "$CONFIG_FILE" + + sed -i '/"tray": {/i\ "custom/notification-silencing-indicator": {\n "on-click": "omarchy-toggle-notification-silencing",\n "exec": "$OMARCHY_PATH/default/waybar/indicators/notification-silencing.sh",\n "signal": 10,\n "return-type": "json"\n },' "$CONFIG_FILE" +fi + +# Add notification-silencing-indicator CSS if not present +if ! grep -q "#custom-notification-silencing-indicator" "$STYLE_FILE"; then + # Add to the shared indicator rule + sed -i 's/#custom-idle-indicator {/#custom-idle-indicator,\n#custom-notification-silencing-indicator {/' "$STYLE_FILE" + + # Add to the shared active color rule + sed -i 's/#custom-idle-indicator.active {/#custom-idle-indicator.active,\n#custom-notification-silencing-indicator.active {/' "$STYLE_FILE" +fi + +omarchy-restart-waybar diff --git a/migrations/1771606080.sh b/migrations/1771606080.sh new file mode 100755 index 00000000..da064f38 --- /dev/null +++ b/migrations/1771606080.sh @@ -0,0 +1,3 @@ +echo "Increase inotify file watchers for dev tools" + +bash $OMARCHY_PATH/install/config/increase-file-watchers.sh diff --git a/migrations/1771606249.sh b/migrations/1771606249.sh new file mode 100644 index 00000000..af341555 --- /dev/null +++ b/migrations/1771606249.sh @@ -0,0 +1,9 @@ +echo "Re-run scrolltouchpad migration for configs with trailing whitespace" + +if grep -q "scrolltouchpad" ~/.config/hypr/input.conf; then + sed -Ei 's/^windowrule = scrolltouchpad ([^,]+), class:\(([^)]+)\)\s*$/windowrule = match:class (\2), scroll_touchpad \1/' ~/.config/hypr/input.conf + sed -Ei 's/^windowrule = scrolltouchpad ([^,]+), class:([^ ]+)\s*$/windowrule = match:class \2, scroll_touchpad \1/' ~/.config/hypr/input.conf + sed -Ei 's/^windowrule = scrolltouchpad ([^,]+), tag:terminal\s*$/windowrule = match:class (Alacritty|kitty), scroll_touchpad 1.5\nwindowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2/' ~/.config/hypr/input.conf + + omarchy-state set reboot-required +fi diff --git a/migrations/1771615907.sh b/migrations/1771615907.sh new file mode 100755 index 00000000..dc21029b --- /dev/null +++ b/migrations/1771615907.sh @@ -0,0 +1,3 @@ +echo "Add emoji font fallback to fontconfig" +cp $OMARCHY_PATH/config/fontconfig/fonts.conf ~/.config/fontconfig/fonts.conf +fc-cache -f diff --git a/migrations/1771618300.sh b/migrations/1771618300.sh new file mode 100644 index 00000000..28794966 --- /dev/null +++ b/migrations/1771618300.sh @@ -0,0 +1,2 @@ +echo "Turn off keyboard backlight when idle" +cp $OMARCHY_PATH/config/hypr/hypridle.conf ~/.config/hypr/hypridle.conf diff --git a/themes/catppuccin-latte/backgrounds/1-catppuccin-latte.png b/themes/catppuccin-latte/backgrounds/1-color-fade.png similarity index 100% rename from themes/catppuccin-latte/backgrounds/1-catppuccin-latte.png rename to themes/catppuccin-latte/backgrounds/1-color-fade.png diff --git a/themes/catppuccin/backgrounds/1-catppuccin.png b/themes/catppuccin/backgrounds/1-totoro.png similarity index 100% rename from themes/catppuccin/backgrounds/1-catppuccin.png rename to themes/catppuccin/backgrounds/1-totoro.png diff --git a/themes/catppuccin/backgrounds/2-cat-waves-mocha.png b/themes/catppuccin/backgrounds/2-waves.png similarity index 100% rename from themes/catppuccin/backgrounds/2-cat-waves-mocha.png rename to themes/catppuccin/backgrounds/2-waves.png diff --git a/themes/catppuccin/backgrounds/3-cat-blue-eye-mocha.png b/themes/catppuccin/backgrounds/3-blue-eye.png similarity index 100% rename from themes/catppuccin/backgrounds/3-cat-blue-eye-mocha.png rename to themes/catppuccin/backgrounds/3-blue-eye.png diff --git a/themes/ethereal/backgrounds/1.jpg b/themes/ethereal/backgrounds/1-cosmic.jpg similarity index 100% rename from themes/ethereal/backgrounds/1.jpg rename to themes/ethereal/backgrounds/1-cosmic.jpg diff --git a/themes/ethereal/backgrounds/2.jpg b/themes/ethereal/backgrounds/2-meadow.jpg similarity index 100% rename from themes/ethereal/backgrounds/2.jpg rename to themes/ethereal/backgrounds/2-meadow.jpg diff --git a/themes/everforest/backgrounds/1-everforest.jpg b/themes/everforest/backgrounds/1-tree-tops.jpg similarity index 100% rename from themes/everforest/backgrounds/1-everforest.jpg rename to themes/everforest/backgrounds/1-tree-tops.jpg diff --git a/themes/flexoki-light/backgrounds/1-flexoki-light-orb.png b/themes/flexoki-light/backgrounds/1-orb.png similarity index 100% rename from themes/flexoki-light/backgrounds/1-flexoki-light-orb.png rename to themes/flexoki-light/backgrounds/1-orb.png diff --git a/themes/flexoki-light/backgrounds/2-flexoki-light-omarchy.png b/themes/flexoki-light/backgrounds/2-omarchy.png similarity index 100% rename from themes/flexoki-light/backgrounds/2-flexoki-light-omarchy.png rename to themes/flexoki-light/backgrounds/2-omarchy.png diff --git a/themes/gruvbox/backgrounds/1-grubox.jpg b/themes/gruvbox/backgrounds/1-the-backwater.jpg similarity index 100% rename from themes/gruvbox/backgrounds/1-grubox.jpg rename to themes/gruvbox/backgrounds/1-the-backwater.jpg diff --git a/themes/gruvbox/backgrounds/2-gruvbox.jpg b/themes/gruvbox/backgrounds/2-leaves.jpg similarity index 100% rename from themes/gruvbox/backgrounds/2-gruvbox.jpg rename to themes/gruvbox/backgrounds/2-leaves.jpg diff --git a/themes/hackerman/backgrounds/1.jpg b/themes/hackerman/backgrounds/1-synth-scape.jpg similarity index 100% rename from themes/hackerman/backgrounds/1.jpg rename to themes/hackerman/backgrounds/1-synth-scape.jpg diff --git a/themes/hackerman/backgrounds/2.jpg b/themes/hackerman/backgrounds/2-geometric.jpg similarity index 100% rename from themes/hackerman/backgrounds/2.jpg rename to themes/hackerman/backgrounds/2-geometric.jpg diff --git a/themes/matte-black/backgrounds/1-matte-black.jpg b/themes/matte-black/backgrounds/1-dark-waters.jpg similarity index 100% rename from themes/matte-black/backgrounds/1-matte-black.jpg rename to themes/matte-black/backgrounds/1-dark-waters.jpg diff --git a/themes/matte-black/backgrounds/2-matte-black-hands.jpg b/themes/matte-black/backgrounds/2-dot-hands.jpg similarity index 100% rename from themes/matte-black/backgrounds/2-matte-black-hands.jpg rename to themes/matte-black/backgrounds/2-dot-hands.jpg diff --git a/themes/miasma/backgrounds/01-nature-of-fear.jpg b/themes/miasma/backgrounds/01-nature-of-fear.jpg new file mode 100644 index 00000000..16cf45b7 Binary files /dev/null and b/themes/miasma/backgrounds/01-nature-of-fear.jpg differ diff --git a/themes/miasma/backgrounds/02-crowned.jpg b/themes/miasma/backgrounds/02-crowned.jpg new file mode 100644 index 00000000..3a83fb3a Binary files /dev/null and b/themes/miasma/backgrounds/02-crowned.jpg differ diff --git a/themes/miasma/btop.theme b/themes/miasma/btop.theme new file mode 100644 index 00000000..4db76eb7 --- /dev/null +++ b/themes/miasma/btop.theme @@ -0,0 +1,70 @@ +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="#222222" + +# Main text color +theme[main_fg]="#c2c2b0" + +# Title color for boxes +theme[title]="#bb7744" + +# Highlight color for keyboard shortcuts +theme[hi_fg]="#c9a554" + +# Background color of selected item in processes box +theme[selected_bg]="#e4c47a" + +# Foreground color of selected item in processes box +theme[selected_fg]="#000000" + +# Color of inactive/disabled text +theme[inactive_fg]="#666666" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#bb7744" + +# Box outline and divider line color +theme[cpu_box]="#5f875f" +theme[mem_box]="#5f875f" +theme[net_box]="#5f875f" +theme[proc_box]="#5f875f" +theme[div_line]="#666666" + +# Gradient for all meters and graphs +theme[temp_start]="#c9a554" +theme[temp_mid]="#78824b" +theme[temp_end]="#5f875f" + + +theme[cpu_start]="#c9a554" +theme[cpu_mid]="#78824b" +theme[cpu_end]="#5f875f" + + +theme[free_start]="#78824b" +theme[free_mid]="#b36d43" +theme[free_end]="#b36d43" + + +theme[cached_start]="#b36d43" +theme[cached_mid]="#b36d43" +theme[cached_end]="#b36d43" + + +theme[available_start]="#c9a554" +theme[available_mid]="#c9a554" +theme[available_end]="#c9a554" + + +theme[used_start]="#5f875f" +theme[used_mid]="#5f875f" +theme[used_end]="#5f875f" + + +theme[download_start]="#b36d43" +theme[download_mid]="#c9a554" +theme[download_end]="#78824b" + + +theme[upload_start]="#b36d43" +theme[upload_mid]="#c9a554" +theme[upload_end]="#78824b" diff --git a/themes/miasma/colors.toml b/themes/miasma/colors.toml new file mode 100644 index 00000000..705ce2e4 --- /dev/null +++ b/themes/miasma/colors.toml @@ -0,0 +1,23 @@ +accent = "#78824b" +cursor = "#c7c7c7" +foreground = "#c2c2b0" +background = "#222222" +selection_foreground = "#c2c2b0" +selection_background = "#78824b" + +color0 = "#000000" +color1 = "#685742" +color2 = "#5f875f" +color3 = "#b36d43" +color4 = "#78824b" +color5 = "#bb7744" +color6 = "#c9a554" +color7 = "#d7c483" +color8 = "#666666" +color9 = "#685742" +color10 = "#5f875f" +color11 = "#b36d43" +color12 = "#78824b" +color13 = "#bb7744" +color14 = "#c9a554" +color15 = "#d7c483" diff --git a/themes/miasma/icons.theme b/themes/miasma/icons.theme new file mode 100644 index 00000000..37b2350b --- /dev/null +++ b/themes/miasma/icons.theme @@ -0,0 +1 @@ +Yaru-wartybrown \ No newline at end of file diff --git a/themes/miasma/neovim.lua b/themes/miasma/neovim.lua new file mode 100644 index 00000000..f6a31035 --- /dev/null +++ b/themes/miasma/neovim.lua @@ -0,0 +1,12 @@ +return { + { + "xero/miasma.nvim", + priority = 1000, + }, + { + "LazyVim/LazyVim", + opts = { + colorscheme = "miasma", + }, + }, +} diff --git a/themes/miasma/preview.png b/themes/miasma/preview.png new file mode 100644 index 00000000..690c4364 Binary files /dev/null and b/themes/miasma/preview.png differ diff --git a/themes/miasma/vscode.json b/themes/miasma/vscode.json new file mode 100644 index 00000000..9d28bdb1 --- /dev/null +++ b/themes/miasma/vscode.json @@ -0,0 +1,4 @@ +{ + "name": "In The Fog Dark", + "extension": "ganevru.in-the-fog-theme" +} diff --git a/themes/nord/backgrounds/0-black-moon.jpg b/themes/nord/backgrounds/0-black-moon.jpg new file mode 100644 index 00000000..55df3774 Binary files /dev/null and b/themes/nord/backgrounds/0-black-moon.jpg differ diff --git a/themes/nord/backgrounds/1-nord.png b/themes/nord/backgrounds/1-city-view.png similarity index 100% rename from themes/nord/backgrounds/1-nord.png rename to themes/nord/backgrounds/1-city-view.png diff --git a/themes/nord/backgrounds/2-nord.png b/themes/nord/backgrounds/2-night-hawks.png similarity index 100% rename from themes/nord/backgrounds/2-nord.png rename to themes/nord/backgrounds/2-night-hawks.png diff --git a/themes/osaka-jade/backgrounds/1-osaka-jade-bg.jpg b/themes/osaka-jade/backgrounds/1-glowing-city.jpg similarity index 100% rename from themes/osaka-jade/backgrounds/1-osaka-jade-bg.jpg rename to themes/osaka-jade/backgrounds/1-glowing-city.jpg diff --git a/themes/osaka-jade/backgrounds/2-osaka-jade-bg.jpg b/themes/osaka-jade/backgrounds/2-shaded-entrance.jpg similarity index 100% rename from themes/osaka-jade/backgrounds/2-osaka-jade-bg.jpg rename to themes/osaka-jade/backgrounds/2-shaded-entrance.jpg diff --git a/themes/osaka-jade/backgrounds/3-osaka-jade-bg.jpg b/themes/osaka-jade/backgrounds/3-mountain-moon.jpg similarity index 100% rename from themes/osaka-jade/backgrounds/3-osaka-jade-bg.jpg rename to themes/osaka-jade/backgrounds/3-mountain-moon.jpg diff --git a/themes/ristretto/backgrounds/1-ristretto.jpg b/themes/ristretto/backgrounds/1-color-curves.jpg similarity index 100% rename from themes/ristretto/backgrounds/1-ristretto.jpg rename to themes/ristretto/backgrounds/1-color-curves.jpg diff --git a/themes/ristretto/backgrounds/2-ristretto.jpg b/themes/ristretto/backgrounds/2-coffee-beans.jpg similarity index 100% rename from themes/ristretto/backgrounds/2-ristretto.jpg rename to themes/ristretto/backgrounds/2-coffee-beans.jpg diff --git a/themes/ristretto/backgrounds/3-ristretto.jpg b/themes/ristretto/backgrounds/3-industrial-moon.jpg similarity index 100% rename from themes/ristretto/backgrounds/3-ristretto.jpg rename to themes/ristretto/backgrounds/3-industrial-moon.jpg diff --git a/themes/rose-pine/backgrounds/1-rose-pine.jpg b/themes/rose-pine/backgrounds/1-funky-shapes.jpg similarity index 100% rename from themes/rose-pine/backgrounds/1-rose-pine.jpg rename to themes/rose-pine/backgrounds/1-funky-shapes.jpg diff --git a/themes/rose-pine/backgrounds/2-wave-light.png b/themes/rose-pine/backgrounds/2-dot-map.png similarity index 100% rename from themes/rose-pine/backgrounds/2-wave-light.png rename to themes/rose-pine/backgrounds/2-dot-map.png diff --git a/themes/rose-pine/backgrounds/3-leafy-dawn-omarchy.png b/themes/rose-pine/backgrounds/3-omarchy-plants.png similarity index 100% rename from themes/rose-pine/backgrounds/3-leafy-dawn-omarchy.png rename to themes/rose-pine/backgrounds/3-omarchy-plants.png diff --git a/themes/tokyo-night/backgrounds/1-scenery-pink-lakeside-sunset-lake-landscape-scenic-panorama-7680x3215-144.png b/themes/tokyo-night/backgrounds/1-sunset-lake.png similarity index 100% rename from themes/tokyo-night/backgrounds/1-scenery-pink-lakeside-sunset-lake-landscape-scenic-panorama-7680x3215-144.png rename to themes/tokyo-night/backgrounds/1-sunset-lake.png diff --git a/themes/tokyo-night/backgrounds/2-Pawel-Czerwinski-Abstract-Purple-Blue.jpg b/themes/tokyo-night/backgrounds/2-pawel-czerwinski.jpg similarity index 100% rename from themes/tokyo-night/backgrounds/2-Pawel-Czerwinski-Abstract-Purple-Blue.jpg rename to themes/tokyo-night/backgrounds/2-pawel-czerwinski.jpg diff --git a/themes/tokyo-night/backgrounds/3-Milad-Fakurian-Abstract-Purple-Blue.jpg b/themes/tokyo-night/backgrounds/3-milad-fakurian.jpg similarity index 100% rename from themes/tokyo-night/backgrounds/3-Milad-Fakurian-Abstract-Purple-Blue.jpg rename to themes/tokyo-night/backgrounds/3-milad-fakurian.jpg diff --git a/themes/tokyo-night/keyboard.rgb b/themes/tokyo-night/keyboard.rgb new file mode 100644 index 00000000..c9f4a7cc --- /dev/null +++ b/themes/tokyo-night/keyboard.rgb @@ -0,0 +1 @@ +ff00ff diff --git a/themes/vantablack/backgrounds/1-twisted-stairs.jpg b/themes/vantablack/backgrounds/1-twisted-stairs.jpg new file mode 100644 index 00000000..ad81cf17 Binary files /dev/null and b/themes/vantablack/backgrounds/1-twisted-stairs.jpg differ diff --git a/themes/vantablack/backgrounds/2-layers-deep.jpg b/themes/vantablack/backgrounds/2-layers-deep.jpg new file mode 100644 index 00000000..e0f04b62 Binary files /dev/null and b/themes/vantablack/backgrounds/2-layers-deep.jpg differ diff --git a/themes/vantablack/backgrounds/3-layers-stacked.jpg b/themes/vantablack/backgrounds/3-layers-stacked.jpg new file mode 100644 index 00000000..4a81b945 Binary files /dev/null and b/themes/vantablack/backgrounds/3-layers-stacked.jpg differ diff --git a/themes/vantablack/btop.theme b/themes/vantablack/btop.theme new file mode 100644 index 00000000..cf3d98ca --- /dev/null +++ b/themes/vantablack/btop.theme @@ -0,0 +1,70 @@ +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="#0d0d0d" + +# Main text color +theme[main_fg]="#ffffff" + +# Title color for boxes +theme[title]="#9b9b9b" + +# Highlight color for keyboard shortcuts +theme[hi_fg]="#b0b0b0" + +# Background color of selected item in processes box +theme[selected_bg]="#fdfdfd" + +# Foreground color of selected item in processes box +theme[selected_fg]="#ffffff" + +# Color of inactive/disabled text +theme[inactive_fg]="#fdfdfd" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#9b9b9b" + +# Box outline and divider line color +theme[cpu_box]="#b6b6b6" +theme[mem_box]="#b6b6b6" +theme[net_box]="#b6b6b6" +theme[proc_box]="#b6b6b6" +theme[div_line]="#fdfdfd" + +# Gradient for all meters and graphs +theme[temp_start]="#b0b0b0" +theme[temp_mid]="#8d8d8d" +theme[temp_end]="#b6b6b6" + + +theme[cpu_start]="#b0b0b0" +theme[cpu_mid]="#8d8d8d" +theme[cpu_end]="#b6b6b6" + + +theme[free_start]="#8d8d8d" +theme[free_mid]="#cecece" +theme[free_end]="#cecece" + + +theme[cached_start]="#cecece" +theme[cached_mid]="#cecece" +theme[cached_end]="#cecece" + + +theme[available_start]="#b0b0b0" +theme[available_mid]="#b0b0b0" +theme[available_end]="#b0b0b0" + + +theme[used_start]="#b6b6b6" +theme[used_mid]="#b6b6b6" +theme[used_end]="#b6b6b6" + + +theme[download_start]="#cecece" +theme[download_mid]="#b0b0b0" +theme[download_end]="#8d8d8d" + + +theme[upload_start]="#cecece" +theme[upload_mid]="#b0b0b0" +theme[upload_end]="#8d8d8d" \ No newline at end of file diff --git a/themes/vantablack/colors.toml b/themes/vantablack/colors.toml new file mode 100644 index 00000000..96e095fc --- /dev/null +++ b/themes/vantablack/colors.toml @@ -0,0 +1,31 @@ +# UI Colors (extended) +accent = "#8d8d8d" +cursor = "#ffffff" + +# Primary colors +foreground = "#ffffff" +background = "#0d0d0d" + +# Selection colors +selection_foreground = "#0d0d0d" +selection_background = "#ffffff" + +# Normal colors (ANSI 0-7) +color0 = "#0d0d0d" +color1 = "#a4a4a4" +color2 = "#b6b6b6" +color3 = "#cecece" +color4 = "#8d8d8d" +color5 = "#9b9b9b" +color6 = "#b0b0b0" +color7 = "#ececec" + +# Bright colors (ANSI 8-15) +color8 = "#fdfdfd" +color9 = "#a4a4a4" +color10 = "#b6b6b6" +color11 = "#cecece" +color12 = "#8d8d8d" +color13 = "#9b9b9b" +color14 = "#b0b0b0" +color15 = "#ffffff" diff --git a/themes/vantablack/icons.theme b/themes/vantablack/icons.theme new file mode 100644 index 00000000..0bc3e2d5 --- /dev/null +++ b/themes/vantablack/icons.theme @@ -0,0 +1 @@ +Yaru-gray diff --git a/themes/vantablack/neovim.lua b/themes/vantablack/neovim.lua new file mode 100644 index 00000000..f9d96169 --- /dev/null +++ b/themes/vantablack/neovim.lua @@ -0,0 +1,12 @@ +return { + { + "bjarneo/vantablack.nvim", + priority = 1000, + }, + { + "LazyVim/LazyVim", + opts = { + colorscheme = "vantablack", + }, + }, +} diff --git a/themes/vantablack/preview.png b/themes/vantablack/preview.png new file mode 100644 index 00000000..e25805d0 Binary files /dev/null and b/themes/vantablack/preview.png differ diff --git a/themes/vantablack/vscode.json b/themes/vantablack/vscode.json new file mode 100644 index 00000000..4221b9ea --- /dev/null +++ b/themes/vantablack/vscode.json @@ -0,0 +1,4 @@ +{ + "name": "Vantablack", + "extension": "Bjarne.vantablack-omarchy" +} diff --git a/version b/version index a0891f56..18091983 100644 --- a/version +++ b/version @@ -1 +1 @@ -3.3.4 +3.4.0