diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000000..be738a7663 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,62 @@ +# Style + +- Two spaces for indentation, no tabs +- Use Bash syntax for conditionals: `[[ -f $file ]]`, not `[ -f "$file" ]` + +# 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 + +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 0000000000..bcdab1eb5e --- /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-branch-set b/bin/omarchy-branch-set index f67d9174d0..bfe67c99ab 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 0000000000..d85795d239 --- /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 0000000000..00fde072ef --- /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 0000000000..ea3a67b22f --- /dev/null +++ b/bin/omarchy-brightness-keyboard @@ -0,0 +1,40 @@ +#!/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" == "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-brightness "$percent" diff --git a/bin/omarchy-channel-set b/bin/omarchy-channel-set index 342ee2e261..116539b265 100755 --- a/bin/omarchy-channel-set +++ b/bin/omarchy-channel-set @@ -14,7 +14,7 @@ # 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" @@ -22,6 +22,7 @@ fi case "$channel" in "stable") omarchy-branch-set "master" && omarchy-refresh-pacman "stable" && sudo pacman -Suu --noconfirm ;; +"rc") omarchy-branch-set "rc" && omarchy-refresh-pacman "rc" && sudo pacman -Suu --noconfirm ;; "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 d4d7968e66..0000000000 --- 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-screenshot b/bin/omarchy-cmd-screenshot index b988a3b771..d07d4a155a 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,33 @@ 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" \ + --early-exit \ + --actions-on-enter save-to-clipboard \ + --save-after-copy \ + --copy-command 'wl-copy' + else + $SCREENSHOT_EDITOR "$filepath" + fi +} + MODE="${1:-smart}" PROCESSING="${2:-slurp}" @@ -46,7 +74,7 @@ case "$MODE" in 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 + # 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 @@ -71,16 +99,19 @@ case "$MODE" in ;; 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 copied & saved" "Click to edit" -t 10000 -i "$FILEPATH" -A "default=edit") + [[ "$ACTION" == "default" ]] && open_editor "$FILEPATH" + ) & else grim -g "$SELECTION" - | wl-copy fi diff --git a/bin/omarchy-hibernation-setup b/bin/omarchy-hibernation-setup index 8a423cbd7f..108e8ffa76 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/ + +# 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 +# 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 0000000000..3a0e27af9b --- /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-install-geforce-now b/bin/omarchy-install-geforce-now new file mode 100755 index 0000000000..4c941a9bf7 --- /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 b439744c2f..a4e9ed5be0 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-walker b/bin/omarchy-launch-walker index 3d92b6b006..8b239f106c 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 96e62b0121..cb4c5a4b14 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -88,10 +88,11 @@ 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 } @@ -173,6 +174,13 @@ 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 ;; @@ -347,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 ;; @@ -422,11 +431,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" ;; @@ -437,7 +447,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" ;; @@ -455,7 +465,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" ;; @@ -464,7 +474,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" ;; @@ -473,7 +483,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 ;; @@ -497,8 +507,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 ;; @@ -546,6 +557,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" @@ -573,6 +588,7 @@ go_to_menu() { *learn*) show_learn_menu ;; *trigger*) show_trigger_menu ;; *share*) show_share_menu ;; + *capture*) show_capture_menu ;; *style*) show_style_menu ;; *theme*) show_theme_menu ;; *screenshot*) show_screenshot_menu ;; @@ -582,7 +598,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-refresh-pacman b/bin/omarchy-refresh-pacman index 3cffd2261d..49983ccd5a 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 diff --git a/bin/omarchy-refresh-tmux b/bin/omarchy-refresh-tmux new file mode 100755 index 0000000000..cda3e64d7e --- /dev/null +++ b/bin/omarchy-refresh-tmux @@ -0,0 +1,5 @@ +#!/bin/bash + +# Overwrite the user tmux config with the Omarchy default and reload tmux. + +omarchy-refresh-config tmux/tmux.conf diff --git a/bin/omarchy-refresh-walker b/bin/omarchy-refresh-walker index a08a29cc25..dd6900e1d8 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 0000000000..cd143231da --- /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 d2320149a4..2431a09abb 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 94822623bd..2c5684699d 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 4cc474fa69..6e0a46ad67 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 1d3c6c11c0..57530d1075 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 261f0aa3c3..0218626718 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 0e681bfddf..c705ab53f6 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 2ff22d3e6c..086eba9f4f 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 f26ee09e73..a222ad1e70 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 b4d66a5ac5..5cf35dd356 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 45f7d9a8ce..dcbd237fb2 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 105234ffab..22a164efc4 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 de5fe2ab50..36f5aec2ad 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 fbaf38dfcf..a6137c589f 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 ee79512a7c..d9f4c2d3e3 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 d55943b6a3..884b6d94a2 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 0000000000..697be16213 --- /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-theme-refresh b/bin/omarchy-theme-refresh new file mode 100755 index 0000000000..e967f289d4 --- /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 ba34a50144..b58c77731b 100755 --- a/bin/omarchy-theme-set +++ b/bin/omarchy-theme-set @@ -57,6 +57,7 @@ omarchy-theme-set-gnome omarchy-theme-set-browser omarchy-theme-set-vscode omarchy-theme-set-obsidian +omarchy-theme-set-asusctl # Call hook on theme set omarchy-hook theme-set "$THEME_NAME" diff --git a/bin/omarchy-theme-set-asusctl b/bin/omarchy-theme-set-asusctl new file mode 100755 index 0000000000..d202e03d58 --- /dev/null +++ b/bin/omarchy-theme-set-asusctl @@ -0,0 +1,7 @@ +#!/bin/bash + +ASUSCTL_THEME=~/.config/omarchy/current/theme/asusctl.rgb + +if omarchy-cmd-present asusctl; then + asusctl aura effect static -c $(sed 's/^#//' $ASUSCTL_THEME) +fi diff --git a/bin/omarchy-theme-set-browser b/bin/omarchy-theme-set-browser index 0b4eff6af4..0ff8709103 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-toggle-hybrid-gpu b/bin/omarchy-toggle-hybrid-gpu new file mode 100755 index 0000000000..2667933ab6 --- /dev/null +++ b/bin/omarchy-toggle-hybrid-gpu @@ -0,0 +1,53 @@ +#!/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 + sudo systemctl enable supergfxd + + # Needed to deal with restoring to sleep where going through VFIO first means we don't need to reboot. + sudo sed -i "s/\"vfio_enable\": \".*\"/\"vfio_enable\": true/" /etc/supergfxd.conf +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 + sudo sed -i "s/\"mode\": \".*\"/\"mode\": \"Integrated\"/" /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-tui-remove-all b/bin/omarchy-tui-remove-all new file mode 100755 index 0000000000..8a696d844f --- /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 7b800005d3..a250166c7d 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-aur-pkgs b/bin/omarchy-update-aur-pkgs new file mode 100755 index 0000000000..0dee5edf33 --- /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 10e490f4b6..6eb1a08845 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-orphan-pkgs b/bin/omarchy-update-orphan-pkgs new file mode 100755 index 0000000000..3d7a3511d6 --- /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 c4fcc2cb79..c2101c15b4 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-system-pkgs b/bin/omarchy-update-system-pkgs index 814fb49106..36a78418bb 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 8affb87ed4..7623351311 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-remove-all b/bin/omarchy-webapp-remove-all new file mode 100755 index 0000000000..9cb8f4e324 --- /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 0000000000..9e1c5bbeb6 --- /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 f9034d4812..4fe877f348 100755 --- a/bin/omarchy-windows-vm +++ b/bin/omarchy-windows-vm @@ -185,6 +185,8 @@ 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 @@ -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 @@ -254,25 +261,6 @@ remove_windows() { echo "Windows VM removal completed!" } -wait_for_rdp_ready() { - local WIN_USER="$1" - local WIN_PASS="$2" - local TIMEOUT=240 - local SECONDS=0 - - echo "Waiting for Windows VM to be ready..." - - while ! timeout 5s xfreerdp3 /auth-only /cert:ignore /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 &>/dev/null; do - sleep 2 - if [ $SECONDS -gt $TIMEOUT ]; then - echo "❌ Timeout waiting for RDP!" - echo " The VM might still be installing Windows." - echo " Check progress at: http://127.0.0.1:8006" - return 1 - fi - done -} - launch_windows() { KEEP_ALIVE=false if [ "$1" = "--keep-alive" ] || [ "$1" = "-k" ]; then @@ -309,11 +297,19 @@ launch_windows() { notify-send -u critical "Windows VM" "Failed to start Windows VM" exit 1 fi - fi - if ! wait_for_rdp_ready "$WIN_USER" "$WIN_PASS"; then - notify-send -u critical "Windows VM" "Did not come alive in time." - exit 1 + echo "Waiting for Windows VM to start..." + WAIT_COUNT=0 + until docker logs omarchy-windows 2>&1 | grep -qi "windows started successfully"; do + sleep 2 + WAIT_COUNT=$((WAIT_COUNT + 1)) + if [ $WAIT_COUNT -gt 60 ]; then # 2 minutes timeout + echo "" + echo "❌ Timeout: Windows VM failed to start within 2 minutes" + echo " Check logs: docker logs omarchy-windows" + exit 1 + fi + done fi # Build the connection info @@ -346,7 +342,7 @@ To stop: omarchy-windows-vm stop" # If scale is less than 130%, don't set any scale (use default 100) # Connect with RDP in fullscreen (auto-detects resolution) - xfreerdp3 /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 -grab-keyboard /sound /microphone /cert:ignore /title:"Windows VM - Omarchy" /dynamic-resolution /gfx:AVC444 /floatbar:sticky:off,default:visible,show:fullscreen $RDP_SCALE + xfreerdp3 /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 -grab-keyboard /sound /microphone /clipboard /cert:ignore /title:"Windows VM - Omarchy" /dynamic-resolution /gfx:AVC444 /floatbar:sticky:off,default:visible,show:fullscreen $RDP_SCALE # After RDP closes, stop the container unless --keep-alive was specified if [ "$KEEP_ALIVE" = false ]; then diff --git a/config/elephant/symbols.toml b/config/elephant/symbols.toml new file mode 100644 index 0000000000..3144c1529d --- /dev/null +++ b/config/elephant/symbols.toml @@ -0,0 +1 @@ +command = 'wl-copy && hyprctl dispatch sendshortcut "SHIFT, Insert,"' diff --git a/config/ghostty/config b/config/ghostty/config index 4360f279f2..d53f5c3276 100644 --- a/config/ghostty/config +++ b/config/ghostty/config @@ -32,3 +32,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 f7770dd87b..9af5a3b24f 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/hyprlock.conf b/config/hypr/hyprlock.conf index f7a939c0dc..9550b6563f 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 c536e618e6..951dc1deff 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 743002ba9f..76857c15b8 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/swayosd/config.toml b/config/swayosd/config.toml index 598c1f222e..759cbe1fad 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 0000000000..1dd3df30b4 --- /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 -h -c "#{pane_current_path}" +bind v split-window -v -c "#{pane_current_path}" +bind -n C-M-PageUp split-window -h -c "#{pane_current_path}" +bind -n C-M-PageDown split-window -v -c "#{pane_current_path}" +bind -n C-M-Home split-window -h -c "#{pane_current_path}" +bind -n C-M-End 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 x kill-window +bind -n C-S-Home new-window -c "#{pane_current_path}" +bind -n C-S-End kill-window + +bind -n C-S-PageUp next-window +bind -n C-S-PageDown previous-window + +# Session controls +bind R command-prompt -I "#S" "rename-session -- '%%'" +bind C new-session +bind X kill-session +bind -n C-M-S-Home new-session -c "#{pane_current_path}" +bind -n C-M-S-End kill-session + +bind -n C-M-S-PageUp switch-client -p +bind -n C-M-S-PageDown 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 +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 9100b4cace..5c28742c60 100644 --- a/config/waybar/config.jsonc +++ b/config/waybar/config.jsonc @@ -116,6 +116,7 @@ "format-muted": "", "format-icons": { "headphone": "", + "headset": "", "default": ["", "", ""] } }, diff --git a/config/wiremix/wiremix.toml b/config/wiremix/wiremix.toml new file mode 100644 index 0000000000..07f9747ced --- /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 8e485a355b..9571c67869 100644 --- a/default/bash/aliases +++ b/default/bash/aliases @@ -21,9 +21,9 @@ if command -v zoxide &> /dev/null; then } fi -open() { +open() ( xdg-open "$@" >/dev/null 2>&1 & -} +) # Directories alias ..='cd ..' @@ -34,6 +34,7 @@ alias ....='cd ../../..' alias c='opencode' alias d='docker' alias r='rails' +alias t='tmux attach || tmux new -s Work' n() { if [ "$#" -eq 0 ]; then nvim .; else nvim "$@"; fi; } # Git diff --git a/default/bash/functions b/default/bash/functions index 1839e24253..14c17aa692 100644 --- a/default/bash/functions +++ b/default/bash/functions @@ -58,7 +58,7 @@ img2jpg() { img="$1" shift - magick "$img" $@ -quality 95 -strip ${img%.*}-optimized.jpg + magick "$img" $@ -quality 95 -strip ${img%.*}-converted.jpg } # Transcode any image to JPG image that's great for sharing online without being too big @@ -66,7 +66,14 @@ img2jpg-small() { img="$1" shift - magick "$img" $@ -resize 1080x\> -quality 95 -strip ${img%.*}-optimized.jpg + magick "$img" $@ -resize 1080x\> -quality 95 -strip ${img%.*}-small.jpg +} +# Transcode any image to JPG image that's great for sharing online without being too big +img2jpg-medium() { + img="$1" + shift + + magick "$img" $@ -resize 1800x\> -quality 95 -strip ${img%.*}-medium.jpg } # Transcode any image to compressed-but-lossless PNG @@ -80,3 +87,24 @@ 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" +} diff --git a/default/bash/init b/default/bash/init index e9228edb1f..dba369e0e6 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 diff --git a/default/bashrc b/default/bashrc index eaf13c66ec..77e8d27b20 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/hypr/apps.conf b/default/hypr/apps.conf index 354339def7..f6946ad15d 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 974aa28c9f..4cf5e7d7d1 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 \ No newline at end of file diff --git a/default/hypr/apps/browser.conf b/default/hypr/apps/browser.conf index 2b44576b81..7f30ba3807 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 0000000000..fb2e5a3008 --- /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 d045f823cd..5b73bce43e 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 e5b45d56f3..417edc91b2 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 acc32a4a50..6dcce0e01f 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 f3b046f9a5..556f0fd8d5 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 ec4f754db9..a42a6e68d4 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 ee6c6b8640..702388f2c1 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 0000000000..5a621fdbe4 --- /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 2bcf0eb60f..ead08dde03 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 efedbb72c5..38334119d0 100644 --- a/default/hypr/bindings/media.conf +++ b/default/hypr/bindings/media.conf @@ -6,14 +6,16 @@ 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 # 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 e4364ec8d8..3c3629fedf 100644 --- a/default/hypr/bindings/utilities.conf +++ b/default/hypr/bindings/utilities.conf @@ -1,6 +1,7 @@ # Menus bindd = SUPER, SPACE, Launch apps, exec, omarchy-launch-walker bindd = SUPER CTRL, E, Emoji picker, exec, omarchy-launch-walker -m symbols +bindd = SUPER CTRL, C, Capture menu, exec, omarchy-menu capture bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu bindd = SUPER, ESCAPE, System menu, exec, omarchy-menu system bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system @@ -28,13 +29,12 @@ bindd = SUPER CTRL, I, Toggle locking on idle, exec, omarchy-toggle-idle bindd = SUPER CTRL, N, Toggle nightlight, exec, omarchy-toggle-nightlight # 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 diff --git a/default/hypr/envs.conf b/default/hypr/envs.conf index 92d154465f..85afc775df 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 0279074ee0..c4df1d510d 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 5d1afb761a..67a9a6a91b 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/limine/default.conf b/default/limine/default.conf index eb34057a24..072b8bf39f 100644 --- a/default/limine/default.conf +++ b/default/limine/default.conf @@ -3,7 +3,7 @@ TARGET_OS_NAME="Omarchy" ESP_PATH="/boot" KERNEL_CMDLINE[default]="@@CMDLINE@@" -KERNEL_CMDLINE[default]+="quiet splash" +KERNEL_CMDLINE[default]+=" quiet splash" ENABLE_UKI=yes CUSTOM_UKI_NAME="omarchy" diff --git a/default/mako/core.ini b/default/mako/core.ini index 0c9a46e86e..203d4e8c5a 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/omarchy-skill/SKILL.md b/default/omarchy-skill/SKILL.md index d8d85607bd..cf3a0569b9 100644 --- a/default/omarchy-skill/SKILL.md +++ b/default/omarchy-skill/SKILL.md @@ -1,5 +1,5 @@ --- -name: Omarchy +name: omarchy description: > REQUIRED for ANY changes to Linux desktop, window manager, or system config. Use when editing ~/.config/hypr/, ~/.config/waybar/, ~/.config/walker/, diff --git a/default/pacman/mirrorlist-rc b/default/pacman/mirrorlist-rc new file mode 100644 index 0000000000..0692a0a169 --- /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 0000000000..50d2e498a6 --- /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 0000000000..90dce4f660 --- /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 b146ae9b68..0000000000 --- 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 c6ecbcb7c5..0000000000 --- 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 100644 index 0000000000..ab0d6d6cd7 --- /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 0000000000..c6fbea1c4a --- /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 0000000000..19fc298645 --- /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/asusctl.rgb.tpl b/default/themed/asusctl.rgb.tpl new file mode 100644 index 0000000000..bc9f35a249 --- /dev/null +++ b/default/themed/asusctl.rgb.tpl @@ -0,0 +1 @@ +{{ accent }} diff --git a/default/walker/restart.conf b/default/walker/restart.conf new file mode 100644 index 0000000000..5794031171 --- /dev/null +++ b/default/walker/restart.conf @@ -0,0 +1,3 @@ +[Service] +Restart=always +RestartSec=2 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 0000000000..6fc1dbd9f9 --- /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 e40558b508..f62a4e6119 100644 --- a/install/config/all.sh +++ b/install/config/all.sh @@ -19,6 +19,9 @@ run_logged $OMARCHY_INSTALL/config/fast-shutdown.sh 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/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 @@ -26,6 +29,7 @@ run_logged $OMARCHY_INSTALL/config/hardware/bluetooth.sh run_logged $OMARCHY_INSTALL/config/hardware/printer.sh 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/fix-f13-amd-audio-input.sh run_logged $OMARCHY_INSTALL/config/hardware/fix-bcm43xx.sh @@ -33,3 +37,7 @@ 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 diff --git a/install/config/fast-shutdown.sh b/install/config/fast-shutdown.sh index bbbfafdc0c..627e02a538 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 0000000000..c50a63f17b --- /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 100755 index 0000000000..cc7265209d --- /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 0000000000..34331a0fa8 --- /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/legacy-gpu-terminal.sh b/install/config/hardware/legacy-gpu-terminal.sh new file mode 100644 index 0000000000..d1cd9113c7 --- /dev/null +++ b/install/config/hardware/legacy-gpu-terminal.sh @@ -0,0 +1,17 @@ +# Ghostty requires modern GPU acceleration (OpenGL/Vulkan) which is often unstable +# or missing on legacy hardware. Detect legacy GPU drivers and fall back to Alacritty. + +legacy_drivers=("radeon") + +for card in /sys/class/drm/card*; do + if [[ -e "$card/device/driver" ]]; then + driver=$(basename "$(readlink -f "$card/device/driver")") + + for legacy in "${legacy_drivers[@]}"; do + if [[ "$driver" == "$legacy" ]]; then + omarchy-install-terminal alacritty + exit 0 + fi + done + fi +done diff --git a/install/config/hardware/nvidia.sh b/install/config/hardware/nvidia.sh index d159dd6c74..da2ba18018 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|MX1|MX2|MX3"; then - # Pascal (10xx, Quadro Pxxx, MX150, MX2xx, and MX3xx) and Maxwell (9xx, MX110, and MX130) 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/hibernation.sh b/install/config/hibernation.sh new file mode 100644 index 0000000000..17628ead90 --- /dev/null +++ b/install/config/hibernation.sh @@ -0,0 +1,2 @@ +# Enable hibernation +omarchy-hibernation-setup --force diff --git a/install/config/mimetypes.sh b/install/config/mimetypes.sh index ea8e1aff47..4d7a32bfb0 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 0000000000..da18f24d72 --- /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 diff --git a/install/config/wifi-powersave-rules.sh b/install/config/wifi-powersave-rules.sh new file mode 100644 index 0000000000..08b8d49b4b --- /dev/null +++ b/install/config/wifi-powersave-rules.sh @@ -0,0 +1,9 @@ +if omarchy-battery-present; then + cat </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 d91ed9adb1..5c5adda9ad 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 @@ -78,6 +80,7 @@ mariadb-libs mise mpv nautilus +nautilus-python gnome-disk-utility noto-fonts noto-fonts-cjk @@ -87,7 +90,6 @@ nss-mdns nvim obs-studio obsidian -omarchy-chromium omarchy-nvim omarchy-walker opencode @@ -118,6 +120,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 e531d56ee5..f4590f5f04 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,6 +45,7 @@ snapper webp-pixbuf-loader wget yay-debug +yt6801-dkms zram-generator # T2 MacBook support packages diff --git a/install/packaging/all.sh b/install/packaging/all.sh index a28c3963af..1bdc912f13 100644 --- a/install/packaging/all.sh +++ b/install/packaging/all.sh @@ -4,3 +4,4 @@ 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 diff --git a/install/packaging/asus-rog.sh b/install/packaging/asus-rog.sh new file mode 100644 index 0000000000..6eab585353 --- /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/migrations/1768270644.sh b/migrations/1768270644.sh new file mode 100644 index 0000000000..59083d1990 --- /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/1768916735.sh b/migrations/1768916735.sh new file mode 100644 index 0000000000..0c5c640893 --- /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 0000000000..ae4825de32 --- /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 0000000000..dbdbedf2cf --- /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 0000000000..579a69dffc --- /dev/null +++ b/migrations/1769510847.sh @@ -0,0 +1,5 @@ +echo "Switch back to mainline chromium now that it supports full live themeing" + +omarchy-pkg-drop omarchy-chromium +omarchy-pkg-add chromium +omarchy-theme-set-browser diff --git a/migrations/1769543550.sh b/migrations/1769543550.sh new file mode 100644 index 0000000000..44c657c713 --- /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 0000000000..f2df93c0b3 --- /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/1769619823.sh b/migrations/1769619823.sh new file mode 100644 index 0000000000..47f1f4825a --- /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 0000000000..487f4d3251 --- /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 0000000000..5709cdb79d --- /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 0000000000..8ce213b68f --- /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 0000000000..8c2f37279d --- /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 0000000000..28e03f8a56 --- /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/1770393078.sh b/migrations/1770393078.sh new file mode 100644 index 0000000000..79238051f9 --- /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/1770638893.sh b/migrations/1770638893.sh new file mode 100644 index 0000000000..0e5f2e548d --- /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/1770811646.sh b/migrations/1770811646.sh new file mode 100644 index 0000000000..efb5093147 --- /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/themes/catppuccin/waybar.css b/themes/catppuccin/waybar.css new file mode 100644 index 0000000000..bf35a4048e --- /dev/null +++ b/themes/catppuccin/waybar.css @@ -0,0 +1,2 @@ +@define-color foreground #cdd6f4; +@define-color background #181824; diff --git a/themes/miasma/backgrounds/01-miasma.jpg b/themes/miasma/backgrounds/01-miasma.jpg new file mode 100644 index 0000000000..16cf45b719 Binary files /dev/null and b/themes/miasma/backgrounds/01-miasma.jpg differ diff --git a/themes/miasma/backgrounds/02-miasma.jpg b/themes/miasma/backgrounds/02-miasma.jpg new file mode 100644 index 0000000000..3a83fb3ac4 Binary files /dev/null and b/themes/miasma/backgrounds/02-miasma.jpg differ diff --git a/themes/miasma/btop.theme b/themes/miasma/btop.theme new file mode 100644 index 0000000000..4db76eb7fa --- /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 0000000000..705ce2e469 --- /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 0000000000..37b2350b15 --- /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 0000000000..f6a31035da --- /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 0000000000..690c4364ad 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 0000000000..9d28bdb151 --- /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/tokyo-night/asusctl.rgb b/themes/tokyo-night/asusctl.rgb new file mode 100644 index 0000000000..c9f4a7ccb7 --- /dev/null +++ b/themes/tokyo-night/asusctl.rgb @@ -0,0 +1 @@ +ff00ff diff --git a/themes/tokyo-night/backgrounds/0-swirl-buck.jpg b/themes/tokyo-night/backgrounds/0-swirl-buck.jpg new file mode 100644 index 0000000000..504f3db2d0 Binary files /dev/null and b/themes/tokyo-night/backgrounds/0-swirl-buck.jpg differ diff --git a/themes/vantablack/backgrounds/1-vantablack.jpg b/themes/vantablack/backgrounds/1-vantablack.jpg new file mode 100644 index 0000000000..ad81cf17e2 Binary files /dev/null and b/themes/vantablack/backgrounds/1-vantablack.jpg differ diff --git a/themes/vantablack/backgrounds/2-vantablack.jpg b/themes/vantablack/backgrounds/2-vantablack.jpg new file mode 100644 index 0000000000..e0f04b62fa Binary files /dev/null and b/themes/vantablack/backgrounds/2-vantablack.jpg differ diff --git a/themes/vantablack/backgrounds/3-vantablack.jpg b/themes/vantablack/backgrounds/3-vantablack.jpg new file mode 100644 index 0000000000..4a81b94597 Binary files /dev/null and b/themes/vantablack/backgrounds/3-vantablack.jpg differ diff --git a/themes/vantablack/btop.theme b/themes/vantablack/btop.theme new file mode 100644 index 0000000000..cf3d98ca1e --- /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 0000000000..96e095fcb6 --- /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 0000000000..0bc3e2d55a --- /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 0000000000..f9d96169bb --- /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 0000000000..e25805d0e3 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 0000000000..4221b9ea40 --- /dev/null +++ b/themes/vantablack/vscode.json @@ -0,0 +1,4 @@ +{ + "name": "Vantablack", + "extension": "Bjarne.vantablack-omarchy" +} diff --git a/version b/version index 619b537668..a0891f563f 100644 --- a/version +++ b/version @@ -1 +1 @@ -3.3.3 +3.3.4