diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 00000000..ae5d17d4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,23 @@ +name: Bug +description: Report a problem +labels: [bug] +body: + - type: markdown + attributes: + value: | + Remember: Omarchy is an open source gift, not a product you bought from a vendor + + - type: input + id: system-details + attributes: + label: System details + placeholder: e.g. AMD 9950X, NVIDIA 5090, Omarchy 2.1.0 + validations: + required: true + + - type: textarea + id: steps + attributes: + label: What's wrong? + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..3ba13e0c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/documentation.yml b/.github/ISSUE_TEMPLATE/documentation.yml new file mode 100644 index 00000000..33edaeab --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.yml @@ -0,0 +1,15 @@ +name: Documentation +description: New pages or changes to existing +labels: [documentation] +body: + - type: markdown + attributes: + value: | + Remember: Omarchy is an open source gift, not a product you bought from a vendor + + - type: textarea + id: steps + attributes: + label: What correction or addition do we need? + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/enhancement.yml b/.github/ISSUE_TEMPLATE/enhancement.yml new file mode 100644 index 00000000..b640c39f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/enhancement.yml @@ -0,0 +1,15 @@ +name: Enhancement +description: Feature or change +labels: [enhancement] +body: + - type: markdown + attributes: + value: | + Remember: Omarchy is an open source gift, not a product you bought from a vendor + + - type: textarea + id: steps + attributes: + label: What do you need? + validations: + required: true diff --git a/applications/icons/Basecamp.png b/applications/icons/Basecamp.png new file mode 100644 index 00000000..3edec48c Binary files /dev/null and b/applications/icons/Basecamp.png differ diff --git a/applications/icons/ChatGPT.png b/applications/icons/ChatGPT.png new file mode 100644 index 00000000..cc68d786 Binary files /dev/null and b/applications/icons/ChatGPT.png differ diff --git a/applications/icons/Discord.png b/applications/icons/Discord.png new file mode 100644 index 00000000..a82dbc64 Binary files /dev/null and b/applications/icons/Discord.png differ diff --git a/applications/icons/Disk Usage.png b/applications/icons/Disk Usage.png new file mode 100644 index 00000000..6cc55ba4 Binary files /dev/null and b/applications/icons/Disk Usage.png differ diff --git a/applications/icons/Docker.png b/applications/icons/Docker.png new file mode 100644 index 00000000..aeadd229 Binary files /dev/null and b/applications/icons/Docker.png differ diff --git a/applications/icons/Figma.png b/applications/icons/Figma.png new file mode 100644 index 00000000..62ffa903 Binary files /dev/null and b/applications/icons/Figma.png differ diff --git a/applications/icons/GitHub.png b/applications/icons/GitHub.png new file mode 100644 index 00000000..f3248e4f Binary files /dev/null and b/applications/icons/GitHub.png differ diff --git a/applications/icons/Google Contacts.png b/applications/icons/Google Contacts.png new file mode 100644 index 00000000..6d99dc8e Binary files /dev/null and b/applications/icons/Google Contacts.png differ diff --git a/applications/icons/Google Messages.png b/applications/icons/Google Messages.png new file mode 100644 index 00000000..bc911a5f Binary files /dev/null and b/applications/icons/Google Messages.png differ diff --git a/applications/icons/Google Photos.png b/applications/icons/Google Photos.png new file mode 100644 index 00000000..8b8c642a Binary files /dev/null and b/applications/icons/Google Photos.png differ diff --git a/applications/icons/HEY.png b/applications/icons/HEY.png new file mode 100644 index 00000000..3ac92d93 Binary files /dev/null and b/applications/icons/HEY.png differ diff --git a/applications/icons/WhatsApp.png b/applications/icons/WhatsApp.png new file mode 100644 index 00000000..10ecdfb5 Binary files /dev/null and b/applications/icons/WhatsApp.png differ diff --git a/applications/icons/X.png b/applications/icons/X.png new file mode 100644 index 00000000..99131def Binary files /dev/null and b/applications/icons/X.png differ diff --git a/applications/icons/YouTube.png b/applications/icons/YouTube.png new file mode 100644 index 00000000..46ed4ca7 Binary files /dev/null and b/applications/icons/YouTube.png differ diff --git a/applications/icons/Zoom.png b/applications/icons/Zoom.png new file mode 100644 index 00000000..622db52e Binary files /dev/null and b/applications/icons/Zoom.png differ diff --git a/applications/imv.desktop b/applications/imv.desktop index 293afc8f..d6c2dcd8 100644 --- a/applications/imv.desktop +++ b/applications/imv.desktop @@ -1,6 +1,6 @@ [Desktop Entry] Name=Image Viewer -Exec=imv %F +Exec=sh -c 'imv -n "$1" "$(dirname "$1")"' sh %f Icon=imv Type=Application MimeType=image/png;image/jpeg;image/jpg;image/gif;image/bmp;image/webp;image/tiff;image/x-xcf;image/x-portable-pixmap;image/x-xbitmap; diff --git a/bin/omarchy-battery-monitor b/bin/omarchy-battery-monitor index 05f4a440..fd16afb1 100755 --- a/bin/omarchy-battery-monitor +++ b/bin/omarchy-battery-monitor @@ -6,7 +6,13 @@ BATTERY_THRESHOLD=10 NOTIFICATION_FLAG="/run/user/$UID/omarchy_battery_notified" get_battery_percentage() { - upower -i $(upower -e | grep 'BAT') | grep -E "percentage" | grep -o '[0-9]\+%' | sed 's/%//' + upower -i "$(upower -e | grep 'BAT')" \ + | awk -F: '/percentage/ { + gsub(/[%[:space:]]/, "", $2); + val=$2; + printf("%d\n", (val+0.5)) + exit + }' } get_battery_state() { diff --git a/bin/omarchy-cmd-audio-switch b/bin/omarchy-cmd-audio-switch index 2377a123..b49a83a5 100755 --- a/bin/omarchy-cmd-audio-switch +++ b/bin/omarchy-cmd-audio-switch @@ -1,19 +1,50 @@ #!/bin/bash -# Find all the audio sinks but exit if there are none -sinks=($(wpctl status | sed -n '/Sinks:/,/Sources:/p' | grep -E '^\s*│\s+\*?\s*[0-9]+\.' | sed -E 's/^[^0-9]*([0-9]+)\..*/\1/')) -[ ${#sinks[@]} -eq 0 ] && exit 1 +focused_monitor="$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')" -# Find current audio sink -current=$(wpctl status | sed -n '/Sinks:/,/Sources:/p' | grep '^\s*│\s*\*' | sed -E 's/^[^0-9]*([0-9]+)\..*/\1/') +sinks=$(pactl -f json list sinks | jq '[.[] | select([.ports[]? | .availability == "available"] | any)]') +sinks_count=$(echo "$sinks" | jq '. | length') -# Find the next sink (looping around in the list) -for i in "${!sinks[@]}"; do - [ "${sinks[$i]}" = "$current" ] && next=${sinks[$(((i + 1) % ${#sinks[@]}))]} -done -next=${next:-${sinks[0]}} +if [ "$sinks_count" -eq 0 ]; then + swayosd-client \ + --monitor "$focused_monitor" \ + --custom-message "No audio devices found" + exit 1 +fi -# Set the next sink and ensure it's not muted -wpctl set-default "$next" -wpctl set-mute "$next" 0 +current_sink_name=$(pactl get-default-sink) +current_sink_index=$(echo "$sinks" | jq -r --arg name "$current_sink_name" 'map(.name) | index($name)') +if [ "$current_sink_index" != "null" ]; then + next_sink_index=$(((current_sink_index + 1) % sinks_count)) +else + next_sink_index=0 +fi + +next_sink=$(echo "$sinks" | jq -r ".[$next_sink_index]") +next_sink_name=$(echo "$next_sink" | jq -r '.name') +next_sink_description=$(echo "$next_sink" | jq -r '.description') +next_sink_volume=$(echo "$next_sink" | jq -r \ + '.volume | to_entries[0].value.value_percent | sub("%"; "")') +next_sink_is_muted=$(echo "$next_sink" | jq -r '.mute') + +if [ "$next_sink_is_muted" = "true" ] || [ "$next_sink_volume" -eq 0 ]; then + icon_state="muted" +elif [ "$next_sink_volume" -le 33 ]; then + icon_state="low" +elif [ "$next_sink_volume" -le 66 ]; then + icon_state="medium" +else + icon_state="high" +fi + +next_sink_volume_icon="sink-volume-${icon_state}-symbolic" + +if [ "$next_sink_name" != "$current_sink_name" ]; then + pactl set-default-sink "$next_sink_name" +fi + +swayosd-client \ + --monitor "$focused_monitor" \ + --custom-message "$next_sink_description" \ + --custom-icon "$next_sink_volume_icon" diff --git a/bin/omarchy-cmd-first-run b/bin/omarchy-cmd-first-run index 9334d1d3..f9b9d578 100755 --- a/bin/omarchy-cmd-first-run +++ b/bin/omarchy-cmd-first-run @@ -6,7 +6,12 @@ FIRST_RUN_MODE=~/.local/state/omarchy/first-run.mode if [[ -f "$FIRST_RUN_MODE" ]]; then rm -f "$FIRST_RUN_MODE" - $OMARCHY_PATH/install/first-run/battery-monitor.sh - $OMARCHY_PATH/install/first-run/firewall.sh + + bash "$OMARCHY_PATH/install/first-run/battery-monitor.sh" + bash "$OMARCHY_PATH/install/first-run/firewall.sh" + bash "$OMARCHY_PATH/install/first-run/gnome-theme.sh" sudo rm -f /etc/sudoers.d/first-run + + bash "$OMARCHY_PATH/install/first-run/wifi.sh" + bash "$OMARCHY_PATH/install/first-run/welcome.sh" fi diff --git a/bin/omarchy-cmd-missing b/bin/omarchy-cmd-missing new file mode 100755 index 00000000..4658d37b --- /dev/null +++ b/bin/omarchy-cmd-missing @@ -0,0 +1,9 @@ +#!/bin/bash + +for cmd in "$@"; do + if ! command -v "$cmd" &>/dev/null; then + exit 0 + fi +done + +exit 1 diff --git a/bin/omarchy-cmd-present b/bin/omarchy-cmd-present new file mode 100755 index 00000000..fecdc943 --- /dev/null +++ b/bin/omarchy-cmd-present @@ -0,0 +1,7 @@ +#!/bin/bash + +for cmd in "$@"; do + command -v "$cmd" &>/dev/null || exit 1 +done + +exit 0 diff --git a/bin/omarchy-cmd-screenrecord b/bin/omarchy-cmd-screenrecord index 4abffc6c..570fb582 100755 --- a/bin/omarchy-cmd-screenrecord +++ b/bin/omarchy-cmd-screenrecord @@ -8,25 +8,47 @@ if [[ ! -d "$OUTPUT_DIR" ]]; then exit 1 fi -screenrecording() { +# Selects region or output +SCOPE="$1" + +# Selects audio inclusion or not +AUDIO=$([[ $2 == "audio" ]] && echo "--audio") + +start_screenrecording() { filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4" - notify-send "Screen recording starting..." -t 1000 - sleep 1 if lspci | grep -Eqi 'nvidia|intel.*graphics'; then - wf-recorder -f "$filename" -c libx264 -p crf=23 -p preset=medium -p movflags=+faststart "$@" + wf-recorder $AUDIO -f "$filename" -c libx264 -p crf=23 -p preset=medium -p movflags=+faststart "$@" & else - wl-screenrec -f "$filename" --ffmpeg-encoder-options="-c:v libx264 -crf 23 -preset medium -movflags +faststart" "$@" + wl-screenrec $AUDIO -f "$filename" --ffmpeg-encoder-options="-c:v libx264 -crf 23 -preset medium -movflags +faststart" "$@" & fi + + toggle_screenrecording_indicator } -if pgrep -x wl-screenrec >/dev/null || pgrep -x wf-recorder >/dev/null; then +stop_screenrecording() { pkill -x wl-screenrec pkill -x wf-recorder + notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000 -elif [[ "$1" == "output" ]]; then - screenrecording + + sleep 0.2 # ensures the process is actually dead before we check + toggle_screenrecording_indicator +} + +toggle_screenrecording_indicator() { + pkill -RTMIN+8 waybar +} + +screenrecording_active() { + pgrep -x wl-screenrec >/dev/null || pgrep -x wf-recorder >/dev/null +} + +if screenrecording_active; then + stop_screenrecording +elif [[ "$SCOPE" == "output" ]]; then + start_screenrecording else region=$(slurp) || exit 1 - screenrecording -g "$region" + start_screenrecording -g "$region" fi diff --git a/bin/omarchy-cmd-screenrecord-stop b/bin/omarchy-cmd-screenrecord-stop deleted file mode 100755 index 5631920c..00000000 --- a/bin/omarchy-cmd-screenrecord-stop +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -if pgrep -x wl-screenrec >/dev/null || pgrep -x wf-recorder >/dev/null; then - pkill -x wl-screenrec - pkill -x wf-recorder - notify-send "Screen recording stopped" -t 2000 -fi diff --git a/bin/omarchy-cmd-screensaver b/bin/omarchy-cmd-screensaver index eb320600..a6124621 100755 --- a/bin/omarchy-cmd-screensaver +++ b/bin/omarchy-cmd-screensaver @@ -1,5 +1,16 @@ #!/bin/bash +function exit_screensaver { + hyprctl keyword cursor:invisible false + pkill -x tte 2>/dev/null + pkill -f "alacritty --class Screensaver" 2>/dev/null + exit 0 +} + +trap exit_screensaver SIGINT SIGTERM SIGHUP SIGQUIT + +hyprctl keyword cursor:invisible true + while true; do effect=$(tte 2>&1 | grep -oP '{\K[^}]+' | tr ',' ' ' | tr ' ' '\n' | sed -n '/^beams$/,$p' | sort -u | shuf -n1) tte -i ~/.config/omarchy/branding/screensaver.txt \ @@ -7,10 +18,8 @@ while true; do "$effect" & while pgrep -x tte >/dev/null; do - if read -n 1 -t 0.01; then - pkill -x tte 2>/dev/null - pkill -f "alacritty --class Screensaver" 2>/dev/null - exit 0 + if read -n 1 -t 3; then + exit_screensaver fi done done diff --git a/bin/omarchy-cmd-terminal-cwd b/bin/omarchy-cmd-terminal-cwd index 6062b68f..2d3cd0ce 100755 --- a/bin/omarchy-cmd-terminal-cwd +++ b/bin/omarchy-cmd-terminal-cwd @@ -5,7 +5,7 @@ terminal_pid=$(hyprctl activewindow | awk '/pid:/ {print $2}') shell_pid=$(pgrep -P "$terminal_pid" | head -n1) if [[ -n $shell_pid ]]; then - readlink -f "/proc/$shell_pid/cwd" 2>/dev/null + readlink -f "/proc/$shell_pid/cwd" 2>/dev/null || echo "$HOME" else echo "$HOME" fi diff --git a/bin/omarchy-cmd-tzupdate b/bin/omarchy-cmd-tzupdate index da135e9e..eb39bf0a 100755 --- a/bin/omarchy-cmd-tzupdate +++ b/bin/omarchy-cmd-tzupdate @@ -1,7 +1,8 @@ #!/bin/bash +notify-send " Updating time and timezone..." sudo systemctl restart systemd-timesyncd sudo tzupdate new_timezone=$(timedatectl show -p Timezone --value) omarchy-restart-waybar -notify-send "Time synced and timezone set to $new_timezone" +notify-send " Time updated and timezone set to $new_timezone" diff --git a/bin/omarchy-drive-info b/bin/omarchy-drive-info new file mode 100755 index 00000000..10fb223e --- /dev/null +++ b/bin/omarchy-drive-info @@ -0,0 +1,28 @@ +#!/bin/bash + +# Drive, like /dev/nvme0, to display information about +if (($# == 0)); then + echo "Usage: omarchy-drive-info [/dev/drive]" + exit 1 +else + drive="$1" +fi + +# Find the root drive in case we are looking at partitions +root_drive=$(lsblk -no PKNAME "$drive" 2>/dev/null | tail -n1) +if [[ -n "$root_drive" ]]; then + root_drive="/dev/$root_drive" +else + root_drive="$drive" +fi + +# Get basic disk information +size=$(lsblk -dno SIZE "$drive" 2>/dev/null) +model=$(lsblk -dno MODEL "$root_drive" 2>/dev/null) + +# Format display string +display="$drive" +[[ -n "$size" ]] && display="$display ($size)" +[[ -n "$model" ]] && display="$display - $model" + +echo "$display" diff --git a/bin/omarchy-drive-select b/bin/omarchy-drive-select new file mode 100755 index 00000000..9168eb7d --- /dev/null +++ b/bin/omarchy-drive-select @@ -0,0 +1,18 @@ +#!/bin/bash + +# Select a drive from a list with info that includes space and brand + +if (($# == 0)); then + drives=$(lsblk -dpno NAME | grep -E '/dev/(sd|hd|vd|nvme|mmcblk|xv)') +else + drives="$@" +fi + +drives_with_info="" +while IFS= read -r drive; do + [[ -n "$drive" ]] || continue + drives_with_info+="$(omarchy-drive-info "$drive")"$'\n' +done <<<"$drives" + +selected_drive="$(printf "%s" "$drives_with_info" | gum choose --header "Select drive")" || exit 1 +printf "%s\n" "$selected_drive" | awk '{print $1}' diff --git a/bin/omarchy-drive-set-password b/bin/omarchy-drive-set-password new file mode 100755 index 00000000..88a9c58f --- /dev/null +++ b/bin/omarchy-drive-set-password @@ -0,0 +1,21 @@ +#!/bin/bash + +encrypted_drives=$(blkid -t TYPE=crypto_LUKS -o device) + +if [[ -n $encrypted_drives ]]; then + if [[ $(wc -l <<<"$encrypted_drives") -eq 1 ]]; then + drive_to_change="$encrypted_drives" + else + drive_to_change="$(omarchy-drive-select "$encrypted_drives")" + fi + + if [[ -n $drive_to_change ]]; then + echo "Changing full-disk encryption password for $drive_to_change" + sudo cryptsetup luksChangeKey --pbkdf argon2id --iter-time 2000 "$drive_to_change" + else + echo "No drive selected." + fi +else + echo "No encrypted drives available." + exit 1 +fi diff --git a/bin/omarchy-install-dev-env b/bin/omarchy-install-dev-env index 1865992a..e538cbae 100755 --- a/bin/omarchy-install-dev-env +++ b/bin/omarchy-install-dev-env @@ -1,12 +1,12 @@ #!/bin/bash if [[ -z "$1" ]]; then - echo "Usage: omarchy-install-dev-env " >&2 + echo "Usage: omarchy-install-dev-env " >&2 exit 1 fi install_php() { - sudo pacman -S php composer php-sqlite --noconfirm + sudo pacman -S php composer php-sqlite xdebug --noconfirm # Install Path for Composer if [[ ":$PATH:" != *":$HOME/.config/composer/vendor/bin:"* ]]; then @@ -28,6 +28,12 @@ install_php() { "pdo_mysql" ) + # Enable Xdebug + sudo sed -i \ + -e 's/^;zend_extension=xdebug.so/zend_extension=xdebug.so/' \ + -e 's/^;xdebug.mode=debug/xdebug.mode=debug/' \ + /etc/php/conf.d/xdebug.ini + for ext in "${extensions_to_enable[@]}"; do sudo sed -i "s/^;extension=${ext}/extension=${ext}/" "$php_ini_path" done @@ -75,7 +81,7 @@ laravel) symfony) echo -e "Installing PHP and Symfony...\n" install_php - yay -S symfony-cli --noconfirm + omarchy-pkg-add symfony-cli echo -e "\nYou can now run: symfony new --webapp myproject" ;; python) @@ -125,4 +131,9 @@ dotnet) echo -e "Installing .NET...\n" mise use --global dotnet@latest ;; +clojure) + echo -e "Installing Clojure...\n" + omarchy-pkg-add rlwrap + mise use --global clojure@latest + ;; esac diff --git a/bin/omarchy-install-docker-dbs b/bin/omarchy-install-docker-dbs index da9090fa..f7b624ad 100755 --- a/bin/omarchy-install-docker-dbs +++ b/bin/omarchy-install-docker-dbs @@ -1,16 +1,23 @@ #!/bin/bash options=("MySQL" "PostgreSQL" "Redis" "MongoDB" "MariaDB") -choices=$(printf "%s\n" "${options[@]}" | gum choose --no-limit --header "Select databases (space to select, return to install, esc to cancel)") || main_menu + +if [[ "$#" -eq 0 ]]; then + choices=$(printf "%s\n" "${options[@]}" | gum choose --header "Select databases (space to select, return to install, esc to cancel)") || main_menu +else + choices="$@" +fi if [[ -n "$choices" ]]; then for db in $choices; do case $db in MySQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mysql8 -e MYSQL_ROOT_PASSWORD= -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:8.4 ;; - PostgreSQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:5432:5432" --name=postgres16 -e POSTGRES_HOST_AUTH_METHOD=trust postgres:16 ;; + PostgreSQL) sudo docker run -d --restart unless-stopped -p "127.0.0.1:5432:5432" --name=postgres17 -e POSTGRES_HOST_AUTH_METHOD=trust postgres:17 ;; MariaDB) sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mariadb11 -e MARIADB_ROOT_PASSWORD= -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true mariadb:11.8 ;; Redis) sudo docker run -d --restart unless-stopped -p "127.0.0.1:6379:6379" --name=redis redis:7 ;; MongoDB) sudo docker run -d --restart unless-stopped -p "127.0.0.1:27017:27017" --name mongodb -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=admin123 mongo:noble ;; esac done +else + echo "No databases selected for installation." fi diff --git a/bin/omarchy-install-dropbox b/bin/omarchy-install-dropbox index e80982d4..ac5710c8 100755 --- a/bin/omarchy-install-dropbox +++ b/bin/omarchy-install-dropbox @@ -1,9 +1,7 @@ #!/bin/bash -# FIXME: Should not use AUR dependencies when we can avoid it -echo "Installing all dependencies [from AUR]..." -yay -S --noconfirm --needed \ - dropbox dropbox-cli libappindicator-gtk3 python-gpgme nautilus-dropbox +echo "Installing all dependencies..." +omarchy-pkg-add dropbox dropbox-cli libappindicator-gtk3 python-gpgme nautilus-dropbox echo "Starting Dropbox..." uwsm app -- dropbox-cli start &>/dev/null & diff --git a/bin/omarchy-install-steam b/bin/omarchy-install-steam index 1d58845c..75333700 100755 --- a/bin/omarchy-install-steam +++ b/bin/omarchy-install-steam @@ -1,8 +1,5 @@ #!/bin/bash -echo "Adding multilib repository for 32-bit compatibility" -sudo sed -i '/^\s*#\[multilib\]/,/^$/{s/^\s*#//}' /etc/pacman.conf - echo "Now pick dependencies matching your graphics card" sudo pacman -Syu --noconfirm steam setsid gtk-launch steam >/dev/null 2>&1 & diff --git a/bin/omarchy-menu b/bin/omarchy-menu index 1b2bbfa4..7245e1d4 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -2,6 +2,21 @@ export PATH="$HOME/.local/share/omarchy/bin:$PATH" +# Set to true when going directly to a submenu, so we can exit directly +BACK_TO_EXIT=false + +back_to() { + local parent_menu="$1" + + if [[ "$BACK_TO_EXIT" == "true" ]]; then + exit 0 + elif [[ -n "$parent_menu" ]]; then + "$parent_menu" + else + show_main_menu + fi +} + menu() { local prompt="$1" local options="$2" @@ -80,7 +95,7 @@ show_style_menu() { show_theme_menu() { theme=$(menu "Theme" "$(omarchy-theme-list)" "" "$(omarchy-theme-current)") if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then - show_main_menu + back_to show_style_menu else omarchy-theme-set "$theme" fi @@ -89,7 +104,7 @@ show_theme_menu() { show_font_menu() { theme=$(menu "Font" "$(omarchy-font-list)" "-w 350" "$(omarchy-font-current)") if [[ "$theme" == "CNCLD" || -z "$theme" ]]; then - show_main_menu + back_to show_style_menu else omarchy-font-set "$theme" fi @@ -114,8 +129,10 @@ show_screenshot_menu() { } show_screenrecord_menu() { - case $(menu "Screenrecord" " Region\n Display") in + case $(menu "Screenrecord" " Region\n Region + Audio\n Display\n Display + Audio") in + *"Region + Audio"*) omarchy-cmd-screenrecord region audio ;; *Region*) omarchy-cmd-screenrecord ;; + *"Display + Audio"*) omarchy-cmd-screenrecord output audio ;; *Display*) omarchy-cmd-screenrecord output ;; *) show_capture_menu ;; esac @@ -163,7 +180,7 @@ show_setup_power_menu() { profile=$(menu "Power Profile" "$(omarchy-powerprofiles-list)" "" "$(powerprofilesctl get)") if [[ "$profile" == "CNCLD" || -z "$profile" ]]; then - show_main_menu + back_to show_setup_menu else powerprofilesctl set "$profile" fi @@ -200,32 +217,41 @@ show_install_menu() { } show_install_service_menu() { - case $(menu "Install" " Dropbox\n Tailscale") in + case $(menu "Install" " Dropbox\n Tailscale\n󰟵 Bitwarden") in *Dropbox*) present_terminal omarchy-install-dropbox ;; *Tailscale*) present_terminal omarchy-install-tailscale ;; + *Bitwarden*) install_and_launch "Bitwarden" "bitwarden bitwarden-cli" "bitwarden" ;; *) show_install_menu ;; esac } show_install_editor_menu() { - case $(menu "Install" " VSCode\n Cursor [AUR]\n Zed\n Sublime Text\n Helix") in + case $(menu "Install" " VSCode\n Cursor\n Zed\n Sublime Text\n Helix\n Emacs") in *VSCode*) install_and_launch "VSCode" "visual-studio-code-bin" "code" ;; - *Cursor*) aur_install_and_launch "Cursor" "cursor-bin" "cursor" ;; + *Cursor*) install_and_launch "Cursor" "cursor-bin" "cursor" ;; *Zed*) install_and_launch "Zed" "zed" "dev.zed.Zed" ;; - *Sublime*) install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;; + *Sublime*) aur_install_and_launch "Sublime Text" "sublime-text-4" "sublime_text" ;; *Helix*) install "Helix" "helix" ;; + *Emacs*) install "Emacs" "emacs-wayland" && systemctl --user enable --now emacs.service ;; *) show_install_menu ;; esac } show_install_ai_menu() { - case $(menu "Install" "󱚤 Claude Code [AUR]\n󱚤 Gemini\n󱚤 LM Studio [AUR]\n󱚤 Ollama\n󱚤 Crush [AUR]\n󱚤 opencode [AUR]") in - *Claude*) aur_install "Claude Code" "claude-code" ;; - *Gemini*) install "Gemini" "gemini-cli" ;; - *Studio*) aur_install "LM Studio" "lmstudio" ;; - *Ollama*) install "Ollama" "ollama" ;; - *Crush*) aur_install "Crush" "crush-bin" ;; - *opencode*) aur_install "opencode" "opencode-bin" ;; + ollama_pkg=$( + (command -v nvidia-smi &>/dev/null && echo ollama-cuda) || + (command -v rocminfo &>/dev/null && echo ollama-rocm) || + echo ollama + ) + + case $(menu "Install" "󱚤 Claude Code\n󱚤 Gemini [AUR]\n󱚤 OpenAI Codex [AUR]\n󱚤 LM Studio\n󱚤 Ollama\n󱚤 Crush\n󱚤 opencode") in + *Claude*) install "Claude Code" "claude-code" ;; + *OpenAI*) aur_install "OpenAI Codex" "openai-codex-bin" ;; + *Gemini*) aur_install "Gemini" "gemini-cli" ;; + *Studio*) install "LM Studio" "lmstudio" ;; + *Ollama*) install "Ollama" $ollama_pkg ;; + *Crush*) install "Crush" "crush-bin" ;; + *opencode*) install "opencode" "opencode" ;; *) show_install_menu ;; esac } @@ -234,7 +260,7 @@ show_install_gaming_menu() { case $(menu "Install" " Steam\n RetroArch [AUR]\n󰍳 Minecraft") in *Steam*) present_terminal omarchy-install-steam ;; *RetroArch*) aur_install_and_launch "RetroArch" "retroarch retroarch-assets libretro libretro-fbneo" "com.libretro.RetroArch.desktop" ;; - *Minecraft*) install_and_launch "Minecraft" "minecraft-launcher" "minecraft-launcher" ;; + *Minecraft*) aur_install_and_launch "Minecraft [AUR]" "minecraft-launcher" "minecraft-launcher" ;; *) show_install_menu ;; esac } @@ -259,7 +285,7 @@ show_install_font_menu() { } show_install_development_menu() { - case $(menu "Install" "󰫏 Ruby on Rails\n Docker DB\n JavaScript\n Go\n PHP\n Python\n Elixir\n Zig\n Rust\n Java\n .NET\n OCaml") in + case $(menu "Install" "󰫏 Ruby on Rails\n Docker DB\n JavaScript\n Go\n PHP\n Python\n Elixir\n Zig\n Rust\n Java\n .NET\n OCaml\n Clojure") in *Rails*) present_terminal "omarchy-install-dev-env ruby" ;; *Docker*) present_terminal omarchy-install-docker-dbs ;; *JavaScript*) show_install_javascript_menu ;; @@ -272,6 +298,7 @@ show_install_development_menu() { *Java*) present_terminal "omarchy-install-dev-env java" ;; *NET*) present_terminal "omarchy-install-dev-env dotnet" ;; *OCaml*) present_terminal "omarchy-install-dev-env ocaml" ;; + *Clojure*) present_terminal "omarchy-install-dev-env clojure" ;; *) show_install_menu ;; esac } @@ -315,12 +342,14 @@ show_remove_menu() { } show_update_menu() { - case $(menu "Update" " Omarchy\n Config\n󰸌 Themes\n Process\n Timezone") in + case $(menu "Update" " Omarchy\n Config\n󰸌 Themes\n Process\n󰇅 Hardware\n Password\n Timezone") in *Omarchy*) present_terminal omarchy-update ;; *Config*) show_update_config_menu ;; *Themes*) present_terminal omarchy-theme-update ;; *Process*) show_update_process_menu ;; + *Hardware*) show_update_hardware_menu ;; *Timezone*) omarchy-cmd-tzupdate ;; + *Password*) show_update_password_menu ;; *) show_main_menu ;; esac } @@ -332,7 +361,7 @@ show_update_process_menu() { *Swayosd*) omarchy-restart-swayosd ;; *Walker*) omarchy-restart-walker ;; *Waybar*) omarchy-restart-waybar ;; - *) show_main_menu ;; + *) show_update_menu ;; esac } @@ -346,7 +375,23 @@ show_update_config_menu() { *Swayosd*) present_terminal omarchy-refresh-swayosd ;; *Walker*) present_terminal omarchy-refresh-walker ;; *Waybar*) present_terminal omarchy-refresh-waybar ;; - *) show_main_menu ;; + *) show_update_menu ;; + esac +} + +show_update_hardware_menu() { + case $(menu "Restart" "󱚾 Wi-Fi\n󰂯 Bluetooth") in + *Wi-Fi*) present_terminal omarchy-restart-wifi ;; + *Bluetooth*) present_terminal omarchy-restart-bluetooth ;; + *) show_update_menu ;; + esac +} + +show_update_password_menu() { + case $(menu "Update Password" " Drive Encryption\n User") in + *Drive*) present_terminal omarchy-drive-set-password ;; + *User*) present_terminal passwd ;; + *) show_update_menu ;; esac } @@ -358,7 +403,7 @@ show_system_menu() { *Relaunch*) uwsm stop ;; *Restart*) systemctl reboot ;; *Shutdown*) systemctl poweroff ;; - *) show_main_menu ;; + *) back_to show_main_menu ;; esac } @@ -387,6 +432,7 @@ go_to_menu() { } if [[ -n "$1" ]]; then + BACK_TO_EXIT=true go_to_menu "$1" else show_main_menu diff --git a/bin/omarchy-menu-keybindings b/bin/omarchy-menu-keybindings index 99a49c15..1d1b40ac 100755 --- a/bin/omarchy-menu-keybindings +++ b/bin/omarchy-menu-keybindings @@ -83,7 +83,11 @@ parse_bindings() { }' } +monitor_height=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .height') +menu_height=$((monitor_height * 40 / 100)) + dynamic_bindings | \ sort -u | \ parse_bindings | \ - walker --dmenu --theme keybindings -p 'Keybindings' + walker --dmenu --theme keybindings -p 'Keybindings' -w 800 -h "$menu_height" + diff --git a/bin/omarchy-migrate b/bin/omarchy-migrate index 00e65569..45cf1ede 100755 --- a/bin/omarchy-migrate +++ b/bin/omarchy-migrate @@ -1,18 +1,27 @@ #!/bin/bash -set -e - # Where we store an empty file for each migration that has already been performed. STATE_DIR="$HOME/.local/state/omarchy/migrations" mkdir -p "$STATE_DIR" +# Skipped migrations are tracked separately +mkdir -p "$STATE_DIR/skipped" + # Run any pending migrations for file in ~/.local/share/omarchy/migrations/*.sh; do filename=$(basename "$file") - if [[ ! -f "$STATE_DIR/$filename" ]]; then + if [[ ! -f "$STATE_DIR/$filename" && ! -f "$STATE_DIR/skipped/$filename" ]]; then echo -e "\e[32m\nRunning migration (${filename%.sh})\e[0m" - source $file - touch "$STATE_DIR/$filename" + + if bash $file; then + touch "$STATE_DIR/$filename" + else + if gum confirm "Migration ${filename%.sh} failed. Skip and continue?"; then + touch "$STATE_DIR/skipped/$filename" + else + exit 1 + fi + fi fi done diff --git a/bin/omarchy-pkg-add b/bin/omarchy-pkg-add new file mode 100755 index 00000000..116435be --- /dev/null +++ b/bin/omarchy-pkg-add @@ -0,0 +1,9 @@ +#!/bin/bash + +for pkg in "$@"; do + if ! pacman -Q "$pkg" &>/dev/null; then + sudo pacman -S --noconfirm "$pkg" || exit 1 + fi +done + +exit 0 diff --git a/bin/omarchy-pkg-aur-install b/bin/omarchy-pkg-aur-install index c99ee714..97be84b9 100755 --- a/bin/omarchy-pkg-aur-install +++ b/bin/omarchy-pkg-aur-install @@ -1,7 +1,5 @@ #!/bin/bash -set -e - fzf_args=( --multi --preview 'yay -Sii {1}' diff --git a/bin/omarchy-pkg-drop b/bin/omarchy-pkg-drop new file mode 100755 index 00000000..fc9da0d6 --- /dev/null +++ b/bin/omarchy-pkg-drop @@ -0,0 +1,7 @@ +#!/bin/bash + +for pkg in "$@"; do + if pacman -Q "$pkg" &>/dev/null; then + sudo pacman -Rns --noconfirm "$pkg" + fi +done diff --git a/bin/omarchy-pkg-install b/bin/omarchy-pkg-install index 8a6c1ce6..c654e17e 100755 --- a/bin/omarchy-pkg-install +++ b/bin/omarchy-pkg-install @@ -1,7 +1,5 @@ #!/bin/bash -set -e - fzf_args=( --multi --preview 'pacman -Sii {1}' @@ -19,6 +17,5 @@ pkg_names=$(pacman -Slq | fzf "${fzf_args[@]}") if [[ -n "$pkg_names" ]]; then # Convert newline-separated selections to space-separated for yay echo "$pkg_names" | tr '\n' ' ' | xargs sudo pacman -S --noconfirm - sudo updatedb omarchy-show-done fi diff --git a/bin/omarchy-pkg-missing b/bin/omarchy-pkg-missing new file mode 100755 index 00000000..2556afe3 --- /dev/null +++ b/bin/omarchy-pkg-missing @@ -0,0 +1,9 @@ +#!/bin/bash + +for pkg in "$@"; do + if ! pacman -Q "$pkg" &>/dev/null; then + exit 0 + fi +done + +exit 1 diff --git a/bin/omarchy-pkg-present b/bin/omarchy-pkg-present new file mode 100755 index 00000000..6afb1f5c --- /dev/null +++ b/bin/omarchy-pkg-present @@ -0,0 +1,7 @@ +#!/bin/bash + +for pkg in "$@"; do + pacman -Q "$pkg" &>/dev/null || exit 1 +done + +exit 0 diff --git a/bin/omarchy-pkg-remove b/bin/omarchy-pkg-remove index 5408aa9b..63c6147e 100755 --- a/bin/omarchy-pkg-remove +++ b/bin/omarchy-pkg-remove @@ -17,6 +17,5 @@ pkg_names=$(yay -Qqe | fzf "${fzf_args[@]}") if [[ -n "$pkg_names" ]]; then # Convert newline-separated selections to space-separated for yay echo "$pkg_names" | tr '\n' ' ' | xargs sudo pacman -Rns --noconfirm - sudo updatedb omarchy-show-done fi diff --git a/bin/omarchy-refresh-pacman-mirrorlist b/bin/omarchy-refresh-pacman-mirrorlist new file mode 100755 index 00000000..d0294909 --- /dev/null +++ b/bin/omarchy-refresh-pacman-mirrorlist @@ -0,0 +1,3 @@ +#!/bin/bash + +sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist /etc/pacman.d/mirrorlist diff --git a/bin/omarchy-refresh-plymouth b/bin/omarchy-refresh-plymouth index 81166037..fce86bf3 100755 --- a/bin/omarchy-refresh-plymouth +++ b/bin/omarchy-refresh-plymouth @@ -1,6 +1,10 @@ #!/bin/bash -if [[ "$1" == "-y" ]]; then - sudo cp ~/.local/share/omarchy/default/plymouth/* /usr/share/plymouth/themes/omarchy/ - sudo plymouth-set-default-theme -R omarchy +sudo cp ~/.local/share/omarchy/default/plymouth/* /usr/share/plymouth/themes/omarchy/ +sudo plymouth-set-default-theme omarchy + +if command -v limine-mkinitcpio &>/dev/null; then + sudo limine-mkinitcpio +else + sudo mkinitcpio -P fi diff --git a/bin/omarchy-restart-bluetooth b/bin/omarchy-restart-bluetooth new file mode 100755 index 00000000..432e0022 --- /dev/null +++ b/bin/omarchy-restart-bluetooth @@ -0,0 +1,4 @@ +#!/bin/bash + +rfkill unblock bluetooth +rfkill list bluetooth diff --git a/bin/omarchy-restart-wifi b/bin/omarchy-restart-wifi new file mode 100755 index 00000000..b8496d96 --- /dev/null +++ b/bin/omarchy-restart-wifi @@ -0,0 +1,4 @@ +#!/bin/bash + +rfkill unblock wifi +rfkill list wifi diff --git a/bin/omarchy-setup-dns b/bin/omarchy-setup-dns index 119ab40b..472b5550 100755 --- a/bin/omarchy-setup-dns +++ b/bin/omarchy-setup-dns @@ -37,8 +37,6 @@ EOF DHCP) sudo tee /etc/systemd/resolved.conf >/dev/null <<'EOF' [Resolve] -DNS= -FallbackDNS= DNSOverTLS=no EOF diff --git a/bin/omarchy-tui-install b/bin/omarchy-tui-install index a15d364c..bf08d3a1 100755 --- a/bin/omarchy-tui-install +++ b/bin/omarchy-tui-install @@ -20,13 +20,16 @@ fi ICON_DIR="$HOME/.local/share/applications/icons" DESKTOP_FILE="$HOME/.local/share/applications/$APP_NAME.desktop" -ICON_PATH="$ICON_DIR/$APP_NAME.png" -mkdir -p "$ICON_DIR" - -if ! curl -sL -o "$ICON_PATH" "$ICON_URL"; then - echo "Error: Failed to download icon." - return 1 +if [[ ! "$ICON_URL" =~ ^https?:// ]] && [ -f "$ICON_URL" ]; then + ICON_PATH="$ICON_URL" +else + ICON_PATH="$ICON_DIR/$APP_NAME.png" + mkdir -p "$ICON_DIR" + if ! curl -sL -o "$ICON_PATH" "$ICON_URL"; then + echo "Error: Failed to download icon." + exit 1 + fi fi if [[ $WINDOW_STYLE == "float" ]]; then diff --git a/bin/omarchy-update b/bin/omarchy-update index 9cf8d514..79260132 100755 --- a/bin/omarchy-update +++ b/bin/omarchy-update @@ -7,4 +7,4 @@ omarchy-update-git omarchy-migrate omarchy-update-system-pkgs omarchy-update-restart -omarchy-restart-waybar # removes update-available icon +omarchy-update-available-reset diff --git a/bin/omarchy-update-available-reset b/bin/omarchy-update-available-reset new file mode 100755 index 00000000..09396f9e --- /dev/null +++ b/bin/omarchy-update-available-reset @@ -0,0 +1,4 @@ +#!/bin/bash + +# Ensure Waybar icon offering the available update is removed +pkill -RTMIN+7 waybar diff --git a/bin/omarchy-update-git b/bin/omarchy-update-git index ae1d9d49..5743e4d1 100755 --- a/bin/omarchy-update-git +++ b/bin/omarchy-update-git @@ -1,5 +1,6 @@ #!/bin/bash echo -e "\e[32mUpdate Omarchy\e[0m" + git -C $OMARCHY_PATH pull --autostash git -C $OMARCHY_PATH diff --check || git -C $OMARCHY_PATH reset --merge diff --git a/bin/omarchy-update-system-pkgs b/bin/omarchy-update-system-pkgs index 2c41d733..28baffda 100755 --- a/bin/omarchy-update-system-pkgs +++ b/bin/omarchy-update-system-pkgs @@ -1,17 +1,24 @@ #!/bin/bash -echo -e "\e[32m\nUpdate system packages\e[0m" -echo "sudo pacman -Syu --noconfirm --ignore \"$(omarchy-pkg-ignored)\"" -sudo pacman -Syu --noconfirm --ignore "$(omarchy-pkg-ignored)" +# Used in package emergencies if a bad package has been pushed and we can't revoke. +# Requires manually installing the good package using sudo pacman -U +ignored_packages=$(omarchy-pkg-ignored) -if omarchy-pkg-aur-accessible; then - echo -e "\e[32m\nUpdate AUR packages\e[0m" - echo "yay -Syu --noconfirm --ignore \"$(omarchy-pkg-ignored)\"" - yay -Syu --noconfirm --ignore "$(omarchy-pkg-ignored)" - echo -else - echo -e "\e[31m\nAUR is unavailable (so skipping updates)\e[0m" - echo +echo -e "\e[32m\nUpdate system packages\e[0m" +[[ -n $ignored_packages ]] && echo "sudo pacman -Syu --noconfirm --ignore \"$ignored_packages\"" +sudo pacman -Syu --noconfirm --ignore "$ignored_packages" + +# Update AUR packages if any are installed +if pacman -Qem >/dev/null; then + if omarchy-pkg-aur-accessible; then + echo -e "\e[32m\nUpdate AUR packages\e[0m" + [[ -n $ignored_packages ]] && echo "yay -Sua --noconfirm --ignore \"$ignored_packages\"" + yay -Sua --noconfirm --ignore "$ignored_packages" + echo + else + echo -e "\e[31m\nAUR is unavailable (so skipping updates)\e[0m" + echo + fi fi orphans=$(pacman -Qtdq) diff --git a/bin/omarchy-upload-log b/bin/omarchy-upload-log new file mode 100755 index 00000000..bd98da86 --- /dev/null +++ b/bin/omarchy-upload-log @@ -0,0 +1,126 @@ +#!/bin/bash + +# Upload logs to 0x0.st + +LOG_TYPE="${1:-install}" +TEMP_LOG="/tmp/upload-log.txt" +SYSTEM_INFO="/tmp/system-info.txt" + +# Get system information if fastfetch is available +if command -v fastfetch >/dev/null 2>&1; then + { + echo "=========================================" + echo "SYSTEM INFORMATION" + echo "=========================================" + # Use fastfetch with no logo to get clean output + fastfetch --logo none --pipe 2>/dev/null || echo "Failed to get system info" + echo "" + echo "=========================================" + echo "LOG CONTENT" + echo "=========================================" + echo "" + } >"$SYSTEM_INFO" +else + # Fallback to basic info if fastfetch isn't available + { + echo "=========================================" + echo "SYSTEM INFORMATION" + echo "=========================================" + echo "Hostname: $(hostname)" + echo "Kernel: $(uname -r)" + echo "Date: $(date)" + echo "" + echo "=========================================" + echo "LOG CONTENT" + echo "=========================================" + echo "" + } >"$SYSTEM_INFO" +fi + +case "$LOG_TYPE" in +install) + ARCHINSTALL_LOG="/var/log/archinstall/install.log" + OMARCHY_LOG="/var/log/omarchy-install.log" + + # Combine system info with logs + cat "$SYSTEM_INFO" >"$TEMP_LOG" + cat $ARCHINSTALL_LOG $OMARCHY_LOG >>"$TEMP_LOG" 2>/dev/null + + if [ ! -s "$TEMP_LOG" ]; then + echo "Error: No install logs found" + exit 1 + fi + + echo "Uploading installation log to 0x0.st..." + ;; + +this-boot) + # Combine system info with boot logs + cat "$SYSTEM_INFO" >"$TEMP_LOG" + journalctl -b 0 >>"$TEMP_LOG" 2>/dev/null + + if [ ! -s "$TEMP_LOG" ]; then + echo "Error: No logs found for current boot" + exit 1 + fi + + echo "Uploading current boot logs to 0x0.st..." + ;; + +last-boot) + # Combine system info with previous boot logs + cat "$SYSTEM_INFO" >"$TEMP_LOG" + journalctl -b -1 >>"$TEMP_LOG" 2>/dev/null + + if [ ! -s "$TEMP_LOG" ]; then + echo "Error: No logs found for previous boot" + exit 1 + fi + + echo "Uploading previous boot logs to 0x0.st..." + ;; + +installed) + # System info plus all installed packages + cat "$SYSTEM_INFO" >"$TEMP_LOG" + { + echo "" + echo "=========================================" + echo "INSTALLED PACKAGES (pacman -Q)" + echo "=========================================" + pacman -Q 2>/dev/null || echo "Failed to get package list" + } >>"$TEMP_LOG" + + if [ ! -s "$TEMP_LOG" ]; then + echo "Error: Failed to gather system information" + exit 1 + fi + + echo "Uploading system information to 0x0.st..." + ;; + +*) + echo "Usage: $0 [install|this-boot|last-boot|system-info]" + echo " install - Upload installation logs (default)" + echo " this-boot - Upload logs from current boot" + echo " last-boot - Upload logs from previous boot" + echo " installed - Upload system info and installed packages" + exit 1 + ;; +esac + +echo "" + +URL=$(curl -sF "file=@$TEMP_LOG" -Fexpires=24 https://0x0.st) + +if [ $? -eq 0 ] && [ -n "$URL" ]; then + echo "✓ Log uploaded successfully!" + echo "Share this URL:" + echo "" + echo " $URL" + echo "" + echo "This link will expire in 24 hours." +else + echo "Error: Failed to upload log file" + exit 1 +fi diff --git a/bin/omarchy-webapp-handler-zoom b/bin/omarchy-webapp-handler-zoom new file mode 100755 index 00000000..a27411ed --- /dev/null +++ b/bin/omarchy-webapp-handler-zoom @@ -0,0 +1,20 @@ +#!/bin/bash + +url="$1" +web_url="https://app.zoom.us/wc/home" + +if [[ $url =~ ^zoom(mtg|us):// ]]; then + confno=$(echo "$url" | sed -n 's/.*[?&]confno=\([^&]*\).*/\1/p') + + if [[ -n $confno ]]; then + pwd=$(echo "$url" | sed -n 's/.*[?&]pwd=\([^&]*\).*/\1/p') + + if [[ -n $pwd ]]; then + web_url="https://app.zoom.us/wc/join/$confno?pwd=$pwd" + else + web_url="https://app.zoom.us/wc/join/$confno" + fi + fi +fi + +exec omarchy-launch-webapp "$web_url" diff --git a/bin/omarchy-webapp-install b/bin/omarchy-webapp-install index a75a3288..83d08c46 100755 --- a/bin/omarchy-webapp-install +++ b/bin/omarchy-webapp-install @@ -1,46 +1,69 @@ #!/bin/bash -if [ "$#" -ne 3 ]; then +if [ "$#" -lt 3 ]; then echo -e "\e[32mLet's create a new web app you can start with the app launcher.\n\e[0m" APP_NAME=$(gum input --prompt "Name> " --placeholder "My favorite web app") APP_URL=$(gum input --prompt "URL> " --placeholder "https://example.com") - ICON_URL=$(gum input --prompt "Icon URL> " --placeholder "See https://dashboardicons.com (must use PNG!)") + ICON_REF=$(gum input --prompt "Icon URL> " --placeholder "See https://dashboardicons.com (must use PNG!)") + CUSTOM_EXEC="" + MIME_TYPES="" + INTERACTIVE_MODE=true else APP_NAME="$1" APP_URL="$2" - ICON_URL="$3" + ICON_REF="$3" + CUSTOM_EXEC="$4" # Optional custom exec command + MIME_TYPES="$5" # Optional mime types + INTERACTIVE_MODE=false fi -if [[ -z "$APP_NAME" || -z "$APP_URL" || -z "$ICON_URL" ]]; then +# Ensure valid execution +if [[ -z "$APP_NAME" || -z "$APP_URL" || -z "$ICON_REF" ]]; then echo "You must set app name, app URL, and icon URL!" exit 1 fi -ICON_DIR="$HOME/.local/share/applications/icons" -DESKTOP_FILE="$HOME/.local/share/applications/$APP_NAME.desktop" -ICON_PATH="$ICON_DIR/$APP_NAME.png" - -mkdir -p "$ICON_DIR" - -if ! curl -sL -o "$ICON_PATH" "$ICON_URL"; then - echo "Error: Failed to download icon." - return 1 +# Refer to local icon or fetch remotely from URL +if [[ $ICON_REF =~ ^https?:// ]]; then + if curl -sL -o "$ICON_PATH" "$ICON_REF"; then + ICON_PATH="$ICON_DIR/$APP_NAME.png" + else + echo "Error: Failed to download icon." + exit 1 + fi +else + ICON_PATH="$HOME/.local/share/applications/icons/$ICON_REF" fi +# Use custom exec if provided, otherwise default behavior +if [[ -n $CUSTOM_EXEC ]]; then + EXEC_COMMAND="$CUSTOM_EXEC" +else + EXEC_COMMAND="omarchy-launch-webapp $APP_URL" +fi + +# Create application .desktop file +DESKTOP_FILE="$HOME/.local/share/applications/$APP_NAME.desktop" + cat >"$DESKTOP_FILE" <>"$DESKTOP_FILE" +fi + chmod +x "$DESKTOP_FILE" -if [ "$#" -ne 3 ]; then +if [[ $INTERACTIVE_MODE == true ]]; then echo -e "You can now find $APP_NAME using the app launcher (SUPER + SPACE)\n" fi diff --git a/boot.sh b/boot.sh index 98df4e43..9b6242e7 100755 --- a/boot.sh +++ b/boot.sh @@ -1,5 +1,8 @@ #!/bin/bash +# Set install mode to online since boot.sh is used for curl installations +export OMARCHY_ONLINE_INSTALL=true + ansi_art=' ▄▄▄ ▄█████▄ ▄███████████▄ ▄███████ ▄███████ ▄███████ ▄█ █▄ ▄█ █▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ diff --git a/config/alacritty/alacritty.toml b/config/alacritty/alacritty.toml index 05ec9940..63fb85b7 100644 --- a/config/alacritty/alacritty.toml +++ b/config/alacritty/alacritty.toml @@ -13,7 +13,6 @@ size = 9 padding.x = 14 padding.y = 14 decorations = "None" -opacity = 0.98 [keyboard] bindings = [ diff --git a/config/fastfetch/config.jsonc b/config/fastfetch/config.jsonc index b2cad35f..31542724 100644 --- a/config/fastfetch/config.jsonc +++ b/config/fastfetch/config.jsonc @@ -126,13 +126,13 @@ }, { "type": "command", - "key": " OS Age ", + "key": "󱦟 OS Age", "keyColor": "magenta", "text": "birth_install=$(stat -c %W /); current=$(date +%s); time_progression=$((current - birth_install)); days_difference=$((time_progression / 86400)); echo $days_difference days" }, { "type": "uptime", - "key": " Uptime ", + "key": "󱫐 Uptime", "keyColor": "magenta" }, { diff --git a/config/hypr/bindings.conf b/config/hypr/bindings.conf index fc6d9cec..6990753d 100644 --- a/config/hypr/bindings.conf +++ b/config/hypr/bindings.conf @@ -2,7 +2,7 @@ $terminal = uwsm app -- alacritty $browser = omarchy-launch-browser -bindd = SUPER, return, Terminal, exec, $terminal --working-directory=$(omarchy-cmd-terminal-cwd) +bindd = SUPER, return, Terminal, exec, $terminal --working-directory="$(omarchy-cmd-terminal-cwd)" bindd = SUPER, F, File manager, exec, uwsm app -- nautilus --new-window bindd = SUPER, B, Browser, exec, $browser bindd = SUPER, M, Music, exec, uwsm app -- spotify @@ -25,5 +25,5 @@ bindd = SUPER, X, X, exec, omarchy-launch-webapp "https://x.com/" bindd = SUPER SHIFT, X, X Post, exec, omarchy-launch-webapp "https://x.com/compose/post" # Overwrite existing bindings, like putting Omarchy Menu on Super + Space -# unbind = SUPER, Space +# unbind = SUPER, SPACE # bindd = SUPER, SPACE, Omarchy menu, exec, omarchy-menu diff --git a/config/hypr/hyprland.conf b/config/hypr/hyprland.conf index e03c3005..3a91c979 100644 --- a/config/hypr/hyprland.conf +++ b/config/hypr/hyprland.conf @@ -16,4 +16,5 @@ source = ~/.config/hypr/monitors.conf source = ~/.config/hypr/input.conf source = ~/.config/hypr/bindings.conf source = ~/.config/hypr/envs.conf +source = ~/.config/hypr/looknfeel.conf source = ~/.config/hypr/autostart.conf diff --git a/config/hypr/hyprlock.conf b/config/hypr/hyprlock.conf index f3e81598..d2df6965 100644 --- a/config/hypr/hyprlock.conf +++ b/config/hypr/hyprlock.conf @@ -3,6 +3,8 @@ source = ~/.config/omarchy/current/theme/hyprlock.conf background { monitor = color = $color + path = ~/.config/omarchy/current/background + blur_passes = 3 } animations { diff --git a/config/hypr/hyprsunset.conf b/config/hypr/hyprsunset.conf index 1827445d..78bba7d0 100644 --- a/config/hypr/hyprsunset.conf +++ b/config/hypr/hyprsunset.conf @@ -1,6 +1,6 @@ # Makes hyprsunset do nothing to the screen by default # Without this, the default applies some tint to the monitor profile { - time = 00:00 + time = 07:00 identity = true } \ No newline at end of file diff --git a/config/hypr/input.conf b/config/hypr/input.conf index 397ddcf6..f75a97ab 100644 --- a/config/hypr/input.conf +++ b/config/hypr/input.conf @@ -9,6 +9,9 @@ input { repeat_rate = 40 repeat_delay = 600 + # Start with numlock on by default + numlock_by_default = true + # Increase sensitity for mouse/trackpack (default: 0) # sensitivity = 0.35 @@ -26,3 +29,7 @@ input { # Scroll faster in the terminal windowrule = scrolltouchpad 1.5, class:Alacritty + +# Enable touchpad gestures for changing workspaces +# See https://wiki.hyprland.org/Configuring/Gestures/ +# gesture = 3, horizontal, workspace diff --git a/config/hypr/looknfeel.conf b/config/hypr/looknfeel.conf new file mode 100644 index 00000000..1816d776 --- /dev/null +++ b/config/hypr/looknfeel.conf @@ -0,0 +1,17 @@ +# Change the default Omarchy look'n'feel + +# https://wiki.hyprland.org/Configuring/Variables/#general +general { + # No gaps between windows + # gaps_in = 0 + # gaps_out = 0 + + # Use master layout instead of dwindle + # layout = master +} + +# https://wiki.hyprland.org/Configuring/Variables/#decoration +decoration { + # Use round window corners + # rounding = 8 +} diff --git a/config/waybar/config.jsonc b/config/waybar/config.jsonc index 93873b7c..21439ad7 100644 --- a/config/waybar/config.jsonc +++ b/config/waybar/config.jsonc @@ -5,7 +5,7 @@ "spacing": 0, "height": 26, "modules-left": ["custom/omarchy", "hyprland/workspaces"], - "modules-center": ["clock", "custom/update"], + "modules-center": ["clock", "custom/update", "custom/screenrecording-indicator"], "modules-right": [ "group/tray-expander", "bluetooth", @@ -48,6 +48,7 @@ "exec": "omarchy-update-available", "on-click": "omarchy-launch-floating-terminal-with-presentation omarchy-update", "tooltip-format": "Omarchy update available", + "signal": 7, "interval": 3600 }, @@ -57,8 +58,8 @@ "on-click": "alacritty -e btop" }, "clock": { - "format": "{:%A %H:%M}", - "format-alt": "{:%d %B W%V %Y}", + "format": "{:L%A %H:%M}", + "format-alt": "{:L%d %B W%V %Y}", "tooltip": false, "on-click-right": "omarchy-cmd-tzupdate" }, @@ -67,7 +68,7 @@ "format": "{icon}", "format-wifi": "{icon}", "format-ethernet": "󰀂", - "format-disconnected": "󰖪", + "format-disconnected": "󰤮", "tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}", "tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}", "tooltip-format-disconnected": "Disconnected", @@ -107,7 +108,7 @@ "on-click-right": "pamixer -t", "tooltip-format": "Playing at {volume}%", "scroll-step": 5, - "format-muted": "󰝟", + "format-muted": "", "format-icons": { "default": ["", "", ""] } @@ -124,6 +125,12 @@ "format": " ", "tooltip": false }, + "custom/screenrecording-indicator": { + "on-click": "omarchy-cmd-screenrecord", + "exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh", + "signal": 8, + "return-type": "json" + }, "tray": { "icon-size": 12, "spacing": 12 diff --git a/config/waybar/style.css b/config/waybar/style.css index 924e1851..2cf371b3 100644 --- a/config/waybar/style.css +++ b/config/waybar/style.css @@ -37,6 +37,7 @@ #bluetooth, #pulseaudio, #custom-omarchy, +#custom-screenrecording-indicator, #custom-update { min-width: 12px; margin: 0 7.5px; @@ -61,3 +62,13 @@ tooltip { .hidden { opacity: 0; } + +#custom-screenrecording-indicator { + min-width: 12px; + margin-left: 8.75px; + font-size: 10px; +} + +#custom-screenrecording-indicator.active { + color: #a55555; +} diff --git a/default/bash/aliases b/default/bash/aliases index d92e2ca8..53254cbb 100644 --- a/default/bash/aliases +++ b/default/bash/aliases @@ -24,12 +24,12 @@ alias ...='cd ../..' alias ....='cd ../../..' # Tools -alias g='git' alias d='docker' alias r='rails' n() { if [ "$#" -eq 0 ]; then nvim .; else nvim "$@"; fi; } # Git +alias g='git' alias gcm='git commit -m' alias gcam='git commit -a -m' alias gcad='git commit -a --amend' diff --git a/default/bash/functions b/default/bash/functions index 84ebf169..152deebb 100644 --- a/default/bash/functions +++ b/default/bash/functions @@ -65,4 +65,3 @@ img2png() { -define png:exclude-chunk=all \ "${1%.*}.png" } - diff --git a/default/bash/shell b/default/bash/shell index 672aeb1e..7b39de7b 100644 --- a/default/bash/shell +++ b/default/bash/shell @@ -10,5 +10,5 @@ if [[ ! -v BASH_COMPLETION_VERSINFO && -f /usr/share/bash-completion/bash_comple fi # Set complete path -export PATH="./bin:$HOME/.local/bin:$PATH" +export PATH="$HOME/.local/bin:$PATH" set +h diff --git a/default/hypr/apps.conf b/default/hypr/apps.conf index 07c7ec5d..b8360edb 100644 --- a/default/hypr/apps.conf +++ b/default/hypr/apps.conf @@ -1,10 +1,12 @@ # App-specific tweaks -source = ~/.local/share/omarchy/default/hypr/apps/pip.conf +source = ~/.local/share/omarchy/default/hypr/apps/1password.conf +source = ~/.local/share/omarchy/default/hypr/apps/bitwarden.conf source = ~/.local/share/omarchy/default/hypr/apps/browser.conf source = ~/.local/share/omarchy/default/hypr/apps/hyprshot.conf +source = ~/.local/share/omarchy/default/hypr/apps/jetbrains.conf +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/system.conf source = ~/.local/share/omarchy/default/hypr/apps/walker.conf -source = ~/.local/share/omarchy/default/hypr/apps/1password.conf -source = ~/.local/share/omarchy/default/hypr/apps/jetbrains.conf diff --git a/default/hypr/apps/bitwarden.conf b/default/hypr/apps/bitwarden.conf new file mode 100644 index 00000000..339ddb6b --- /dev/null +++ b/default/hypr/apps/bitwarden.conf @@ -0,0 +1 @@ +windowrule = noscreenshare, class:^(Bitwarden)$ diff --git a/default/hypr/apps/browser.conf b/default/hypr/apps/browser.conf index c24f284e..1ff18150 100644 --- a/default/hypr/apps/browser.conf +++ b/default/hypr/apps/browser.conf @@ -1,6 +1,6 @@ # Browser types windowrule = tag +chromium-based-browser, class:([cC]hrom(e|ium)|[bB]rave-browser|Microsoft-edge|Vivaldi-stable) -windowrule = tag +firefox-based-browser, class:(Firefox|zen|librewolf) +windowrule = tag +firefox-based-browser, class:([fF]irefox|zen|librewolf) # Force chromium-based browsers into a tile to deal with --app bug windowrule = tile, tag:chromium-based-browser @@ -10,4 +10,4 @@ windowrule = opacity 1 0.97, tag:chromium-based-browser windowrule = opacity 1 0.97, tag:firefox-based-browser # Some video sites should never have opacity applied to them -windowrule = opacity 1.0 1.0, initialTitle:(youtube\.com_/|app\.zoom\.us_/wc/home) +windowrule = opacity 1.0 1.0, initialTitle:((?i)(?:[a-z0-9-]+\.)*youtube\.com_/|app\.zoom\.us_/wc/home) diff --git a/default/hypr/apps/jetbrains.conf b/default/hypr/apps/jetbrains.conf index d13bb16c..661b0a4c 100644 --- a/default/hypr/apps/jetbrains.conf +++ b/default/hypr/apps/jetbrains.conf @@ -1,10 +1,6 @@ # Fixing popup size issue windowrule = size 50% 50%, class:(.*jetbrains.*)$, title:^$,floating:1 -# Fix tooltips (always have a title of `win.`) -windowrule = noinitialfocus, class:^(.*jetbrains.*)$, title:^(win.*)$ -windowrule = nofocus, class:^(.*jetbrains.*)$, title:^(win.*)$ - # Fix tab dragging (always have a single space character as their title) windowrule = noinitialfocus, class:^(.*jetbrains.*)$, title:^\\s$ windowrule = nofocus, class:^(.*jetbrains.*)$, title:^\\s$ diff --git a/default/hypr/apps/qemu.conf b/default/hypr/apps/qemu.conf new file mode 100644 index 00000000..104442ca --- /dev/null +++ b/default/hypr/apps/qemu.conf @@ -0,0 +1 @@ +windowrule = opacity 1 1, class:qemu diff --git a/default/hypr/apps/retroarch.conf b/default/hypr/apps/retroarch.conf index 2c019de5..94be39f3 100644 --- a/default/hypr/apps/retroarch.conf +++ b/default/hypr/apps/retroarch.conf @@ -1,3 +1,4 @@ windowrule = fullscreen, class:com.libretro.RetroArch windowrule = opacity 1 1, class:com.libretro.RetroArch +windowrule = idleinhibit fullscreen, class:com.libretro.RetroArch diff --git a/default/hypr/apps/steam.conf b/default/hypr/apps/steam.conf index de91aaa0..bd6386cc 100644 --- a/default/hypr/apps/steam.conf +++ b/default/hypr/apps/steam.conf @@ -4,3 +4,4 @@ windowrule = center, class:steam, title:Steam windowrule = opacity 1 1, class:steam windowrule = size 1100 700, class:steam, title:Steam windowrule = size 460 800, class:steam, title:Friends List +windowrule = idleinhibit fullscreen, class:steam diff --git a/default/hypr/apps/system.conf b/default/hypr/apps/system.conf index e5fb33c9..a718c951 100644 --- a/default/hypr/apps/system.conf +++ b/default/hypr/apps/system.conf @@ -4,7 +4,7 @@ windowrule = center, tag:floating-window windowrule = size 800 600, tag:floating-window windowrule = tag +floating-window, class:(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|com.gabm.satty|Omarchy|About|TUI.float) -windowrule = tag +floating-window, class:(xdg-desktop-portal-gtk|sublime_text|DesktopEditors), title:^(Open.*Files?|Save.*Files?|Save.*As|All Files|Save) +windowrule = tag +floating-window, class:(xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus), title:^(Open.*Files?|Open Folder|Save.*Files?|Save.*As|Save|All Files) # Fullscreen screensaver windowrule = fullscreen, class:Screensaver diff --git a/default/hypr/bindings/utilities.conf b/default/hypr/bindings/utilities.conf index 1dee6fe5..da8f61de 100644 --- a/default/hypr/bindings/utilities.conf +++ b/default/hypr/bindings/utilities.conf @@ -5,11 +5,13 @@ bindd = SUPER ALT, SPACE, Omarchy menu, exec, omarchy-menu bindd = SUPER, ESCAPE, Power menu, exec, omarchy-menu system bindld = , XF86PowerOff, Power menu, exec, omarchy-menu system bindd = SUPER, K, Show key bindings, exec, omarchy-menu-keybindings +bindd = , XF86Calculator, Calculator, exec, gnome-calculator # Aesthetics -bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, pkill -SIGUSR1 waybar +bindd = SUPER SHIFT, SPACE, Toggle top bar, exec, omarchy-toggle-waybar bindd = SUPER CTRL, SPACE, Next background in theme, exec, omarchy-theme-bg-next bindd = SUPER SHIFT CTRL, SPACE, Pick new theme, exec, omarchy-menu theme +bindd = SUPER, BACKSPACE, Toggle window transparency, exec, hyprctl dispatch setprop "address:$(hyprctl activewindow -j | jq -r '.address')" opaque toggle # Notifications bindd = SUPER, COMMA, Dismiss last notification, exec, makoctl dismiss @@ -33,8 +35,10 @@ bindd = SHIFT, PRINT, Screenshot of window, exec, omarchy-cmd-screenshot window bindd = CTRL, PRINT, Screenshot of display, exec, omarchy-cmd-screenshot output # Screen recordings -bindd = ALT, PRINT, Screen record a region, exec, omarchy-cmd-screenrecord +bindd = ALT, PRINT, Screen record a region, exec, omarchy-cmd-screenrecord region +bindd = ALT SHIFT, PRINT, Screen record a region with audio, exec, omarchy-cmd-screenrecord region audio bindd = CTRL ALT, PRINT, Screen record display, exec, omarchy-cmd-screenrecord output +bindd = CTRL ALT SHIFT, PRINT, Screen record display with audio, exec, omarchy-cmd-screenrecord output audio # Color picker bindd = SUPER, PRINT, Color picker, exec, pkill hyprpicker || hyprpicker -a diff --git a/default/hypr/envs.conf b/default/hypr/envs.conf index 83f11ede..92d15446 100644 --- a/default/hypr/envs.conf +++ b/default/hypr/envs.conf @@ -10,6 +10,11 @@ env = SDL_VIDEODRIVER,wayland env = MOZ_ENABLE_WAYLAND,1 env = ELECTRON_OZONE_PLATFORM_HINT,wayland env = OZONE_PLATFORM,wayland +env = XDG_SESSION_TYPE,wayland + +# Allow better support for screen sharing (Google Meet, Discord, etc) +env = XDG_CURRENT_DESKTOP,Hyprland +env = XDG_SESSION_DESKTOP,Hyprland xwayland { force_zero_scaling = true diff --git a/default/hypr/input.conf b/default/hypr/input.conf index 0f9a5d60..bb4d610b 100644 --- a/default/hypr/input.conf +++ b/default/hypr/input.conf @@ -14,8 +14,3 @@ input { natural_scroll = false } } - -# https://wiki.hyprland.org/Configuring/Variables/#gestures -gestures { - workspace_swipe = false -} diff --git a/default/mako/core.ini b/default/mako/core.ini new file mode 100644 index 00000000..135cb299 --- /dev/null +++ b/default/mako/core.ini @@ -0,0 +1,19 @@ +anchor=top-right +default-timeout=5000 +width=420 +height=110 + +[app-name=Spotify] +invisible=1 + +[mode=do-not-disturb] +invisible=true + +[mode=do-not-disturb app-name=notify-send] +invisible=false + +[urgency=critical] +default-timeout=0 + +[summary~="Setup Wi-Fi"] +on-button-left=exec sh -c 'alacritty --class=Impala -e impala & makoctl dismiss -n "$id"' diff --git a/default/pacman/mirrorlist b/default/pacman/mirrorlist new file mode 100644 index 00000000..2d92d05a --- /dev/null +++ b/default/pacman/mirrorlist @@ -0,0 +1,3 @@ +Server = https://mirror.omarchy.org/$repo/os/$arch +Server = https://mirror.rackspace.com/archlinux/$repo/os/$arch +Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch diff --git a/default/pacman/pacman.conf b/default/pacman/pacman.conf new file mode 100644 index 00000000..f5760877 --- /dev/null +++ b/default/pacman/pacman.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/$arch diff --git a/default/plymouth/omarchy.plymouth b/default/plymouth/omarchy.plymouth index 9b45fc39..99356303 100644 --- a/default/plymouth/omarchy.plymouth +++ b/default/plymouth/omarchy.plymouth @@ -7,3 +7,5 @@ ModuleName=script ImageDir=/usr/share/plymouth/themes/omarchy ScriptFile=/usr/share/plymouth/themes/omarchy/omarchy.script ConsoleLogBackgroundColor=0x1a1b26 +MonospaceFont=Cantarell 11 +Font=Cantarell 11 diff --git a/default/waybar/indicators/screen-recording.sh b/default/waybar/indicators/screen-recording.sh new file mode 100755 index 00000000..d0d00822 --- /dev/null +++ b/default/waybar/indicators/screen-recording.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +if pgrep -x wl-screenrec >/dev/null || pgrep -x wf-recorder >/dev/null; then + echo '{"text": "󰻂", "tooltip": "Stop recording", "class": "active"}' +else + echo '{"text": ""}' +fi diff --git a/install.sh b/install.sh old mode 100755 new mode 100644 index 794aad43..5b1b6bdd --- a/install.sh +++ b/install.sh @@ -1,67 +1,18 @@ #!/bin/bash # Exit immediately if a command exits with a non-zero status -set -eE +set -eEo pipefail -export PATH="$HOME/.local/share/omarchy/bin:$PATH" -OMARCHY_INSTALL=~/.local/share/omarchy/install +# Define Omarchy locations +export OMARCHY_PATH="$HOME/.local/share/omarchy" +export OMARCHY_INSTALL="$OMARCHY_PATH/install" +export OMARCHY_INSTALL_LOG_FILE="/var/log/omarchy-install.log" +export PATH="$OMARCHY_PATH/bin:$PATH" -# Preparation -source $OMARCHY_INSTALL/preflight/show-env.sh -source $OMARCHY_INSTALL/preflight/trap-errors.sh -source $OMARCHY_INSTALL/preflight/guard.sh -source $OMARCHY_INSTALL/preflight/chroot.sh -source $OMARCHY_INSTALL/preflight/repositories.sh -source $OMARCHY_INSTALL/preflight/migrations.sh -source $OMARCHY_INSTALL/preflight/first-run-mode.sh - -# Packaging -source $OMARCHY_INSTALL/packages.sh -source $OMARCHY_INSTALL/packaging/asdcontrol.sh -source $OMARCHY_INSTALL/packaging/fonts.sh -source $OMARCHY_INSTALL/packaging/lazyvim.sh -source $OMARCHY_INSTALL/packaging/webapps.sh -source $OMARCHY_INSTALL/packaging/tuis.sh - -# Configuration -source $OMARCHY_INSTALL/config/config.sh -source $OMARCHY_INSTALL/config/theme.sh -source $OMARCHY_INSTALL/config/branding.sh -source $OMARCHY_INSTALL/config/git.sh -source $OMARCHY_INSTALL/config/gpg.sh -source $OMARCHY_INSTALL/config/timezones.sh -source $OMARCHY_INSTALL/config/increase-sudo-tries.sh -source $OMARCHY_INSTALL/config/increase-lockout-limit.sh -source $OMARCHY_INSTALL/config/ssh-flakiness.sh -source $OMARCHY_INSTALL/config/detect-keyboard-layout.sh -source $OMARCHY_INSTALL/config/xcompose.sh -source $OMARCHY_INSTALL/config/mise-ruby.sh -source $OMARCHY_INSTALL/config/docker.sh -source $OMARCHY_INSTALL/config/mimetypes.sh -source $OMARCHY_INSTALL/config/localdb.sh -source $OMARCHY_INSTALL/config/hardware/network.sh -source $OMARCHY_INSTALL/config/hardware/fix-fkeys.sh -source $OMARCHY_INSTALL/config/hardware/bluetooth.sh -source $OMARCHY_INSTALL/config/hardware/printer.sh -source $OMARCHY_INSTALL/config/hardware/usb-autosuspend.sh -source $OMARCHY_INSTALL/config/hardware/ignore-power-button.sh -source $OMARCHY_INSTALL/config/hardware/nvidia.sh - -# Login -source $OMARCHY_INSTALL/login/plymouth.sh -source $OMARCHY_INSTALL/login/limine-snapper.sh -source $OMARCHY_INSTALL/login/alt-bootloaders.sh - -# Reboot -clear -tte -i ~/.local/share/omarchy/logo.txt --frame-rate 920 laseretch -echo -echo "You're done! So we're ready to reboot now..." | tte --frame-rate 640 wipe - -if sudo test -f /etc/sudoers.d/99-omarchy-installer; then - sudo rm -f /etc/sudoers.d/99-omarchy-installer &>/dev/null - echo -e "\nRemember to remove USB installer!\n\n" -fi - -sleep 5 -reboot +# Install +source "$OMARCHY_INSTALL/helpers/all.sh" +source "$OMARCHY_INSTALL/preflight/all.sh" +source "$OMARCHY_INSTALL/packaging/all.sh" +source "$OMARCHY_INSTALL/config/all.sh" +source "$OMARCHY_INSTALL/login/all.sh" +source "$OMARCHY_INSTALL/post-install/all.sh" diff --git a/install/config/all.sh b/install/config/all.sh new file mode 100644 index 00000000..fc84fb46 --- /dev/null +++ b/install/config/all.sh @@ -0,0 +1,28 @@ +run_logged $OMARCHY_INSTALL/config/config.sh +run_logged $OMARCHY_INSTALL/config/theme.sh +run_logged $OMARCHY_INSTALL/config/branding.sh +run_logged $OMARCHY_INSTALL/config/git.sh +run_logged $OMARCHY_INSTALL/config/gpg.sh +run_logged $OMARCHY_INSTALL/config/timezones.sh +run_logged $OMARCHY_INSTALL/config/increase-sudo-tries.sh +run_logged $OMARCHY_INSTALL/config/increase-lockout-limit.sh +run_logged $OMARCHY_INSTALL/config/ssh-flakiness.sh +run_logged $OMARCHY_INSTALL/config/detect-keyboard-layout.sh +run_logged $OMARCHY_INSTALL/config/xcompose.sh +run_logged $OMARCHY_INSTALL/config/mise-ruby.sh +run_logged $OMARCHY_INSTALL/config/mise-work.sh +run_logged $OMARCHY_INSTALL/config/docker.sh +run_logged $OMARCHY_INSTALL/config/mimetypes.sh +run_logged $OMARCHY_INSTALL/config/localdb.sh +run_logged $OMARCHY_INSTALL/config/sudoless-asdcontrol.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 +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/nvidia.sh +run_logged $OMARCHY_INSTALL/config/hardware/fix-f13-amd-audio-input.sh +run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-bcm4360.sh +run_logged $OMARCHY_INSTALL/config/hardware/fix-apple-spi-keyboard.sh diff --git a/install/config/branding.sh b/install/config/branding.sh old mode 100755 new mode 100644 index 6e14fc2d..bad55f09 --- a/install/config/branding.sh +++ b/install/config/branding.sh @@ -1,5 +1,3 @@ -#!/bin/bash - # Allow the user to change the branding for fastfetch and screensaver mkdir -p ~/.config/omarchy/branding cp ~/.local/share/omarchy/icon.txt ~/.config/omarchy/branding/about.txt diff --git a/install/config/config.sh b/install/config/config.sh old mode 100755 new mode 100644 index 75e694b9..62f1417b --- a/install/config/config.sh +++ b/install/config/config.sh @@ -1,5 +1,3 @@ -#!/bin/bash - # Copy over Omarchy configs mkdir -p ~/.config cp -R ~/.local/share/omarchy/config/* ~/.config/ diff --git a/install/config/detect-keyboard-layout.sh b/install/config/detect-keyboard-layout.sh old mode 100755 new mode 100644 index a6cbf821..aaaee4f8 --- a/install/config/detect-keyboard-layout.sh +++ b/install/config/detect-keyboard-layout.sh @@ -1,16 +1,13 @@ -#!/bin/bash - # Copy over the keyboard layout that's been set in Arch during install to Hyprland conf="/etc/vconsole.conf" hyprconf="$HOME/.config/hypr/input.conf" -layout=$(grep '^XKBLAYOUT=' "$conf" | cut -d= -f2 | tr -d '"') -variant=$(grep '^XKBVARIANT=' "$conf" | cut -d= -f2 | tr -d '"') - -if [[ -n "$layout" ]]; then +if grep -q '^XKBLAYOUT=' "$conf"; then + layout=$(grep '^XKBLAYOUT=' "$conf" | cut -d= -f2 | tr -d '"') sed -i "/^[[:space:]]*kb_options *=/i\ kb_layout = $layout" "$hyprconf" fi -if [[ -n "$variant" ]]; then +if grep -q '^XKBVARIANT=' "$conf"; then + variant=$(grep '^XKBVARIANT=' "$conf" | cut -d= -f2 | tr -d '"') sed -i "/^[[:space:]]*kb_options *=/i\ kb_variant = $variant" "$hyprconf" fi diff --git a/install/config/docker.sh b/install/config/docker.sh old mode 100755 new mode 100644 index 6a715a73..99096245 --- a/install/config/docker.sh +++ b/install/config/docker.sh @@ -1,5 +1,3 @@ -#!/bin/bash - # Configure Docker daemon: # - limit log size to avoid running out of disk # - use host's DNS resolver diff --git a/install/config/git.sh b/install/config/git.sh old mode 100755 new mode 100644 index 54bb4bdc..39f77ed8 --- a/install/config/git.sh +++ b/install/config/git.sh @@ -1,4 +1,6 @@ -#!/bin/bash +# Ensure git settings live under ~/.config +mkdir -p ~/.config/git +touch ~/.config/git/config # Set common git aliases git config --global alias.co checkout diff --git a/install/config/gpg.sh b/install/config/gpg.sh old mode 100755 new mode 100644 index 174c5641..7e209f65 --- a/install/config/gpg.sh +++ b/install/config/gpg.sh @@ -1,5 +1,3 @@ -#!/bin/bash - # Setup GPG configuration with multiple keyservers for better reliability sudo mkdir -p /etc/gnupg sudo cp ~/.local/share/omarchy/default/gpg/dirmngr.conf /etc/gnupg/ diff --git a/install/config/hardware/bluetooth.sh b/install/config/hardware/bluetooth.sh old mode 100755 new mode 100644 index e2c7cd78..65fc90d1 --- a/install/config/hardware/bluetooth.sh +++ b/install/config/hardware/bluetooth.sh @@ -1,4 +1,2 @@ -#!/bin/bash - # Turn on bluetooth by default chrootable_systemctl_enable bluetooth.service diff --git a/install/config/hardware/fix-apple-bcm4360.sh b/install/config/hardware/fix-apple-bcm4360.sh new file mode 100644 index 00000000..f7d6d324 --- /dev/null +++ b/install/config/hardware/fix-apple-bcm4360.sh @@ -0,0 +1,5 @@ +# Install wifi drivers for 2013-2015 MacBooks using the BCM4360 chip +if lspci -nnv | grep -A2 "14e4:43a0" | grep -q "106b:"; then + echo "Apple BCM4360 detected" + sudo pacman -S --noconfirm --needed broadcom-wl dkms linux-headers +fi diff --git a/install/config/hardware/fix-apple-spi-keyboard.sh b/install/config/hardware/fix-apple-spi-keyboard.sh new file mode 100644 index 00000000..f549669f --- /dev/null +++ b/install/config/hardware/fix-apple-spi-keyboard.sh @@ -0,0 +1,7 @@ +# Detect MacBook models that need SPI keyboard modules +if [[ "$(cat /sys/class/dmi/id/product_name 2>/dev/null)" =~ MacBook12,1|MacBookPro13,[123]|MacBookPro14,[123] ]]; then + echo "Detected MacBook with SPI keyboard" + + sudo pacman -S --noconfirm --needed macbook12-spi-driver-dkms + echo "MODULES=(applespi intel_lpss_pci spi_pxa2xx_platform)" | sudo tee /etc/mkinitcpio.conf.d/macbook_spi_modules.conf >/dev/null +fi diff --git a/install/config/hardware/fix-f13-amd-audio-input.sh b/install/config/hardware/fix-f13-amd-audio-input.sh new file mode 100644 index 00000000..f443659f --- /dev/null +++ b/install/config/hardware/fix-f13-amd-audio-input.sh @@ -0,0 +1,5 @@ +AMD_AUDIO_CARD=$(pactl list cards 2>/dev/null | grep -B20 "Family 17h/19h" | grep "Name: " | awk '{print $2}' || true) + +if [[ -n $AMD_AUDIO_CARD ]]; then + pactl set-card-profile "$AMD_AUDIO_CARD" "HiFi (Mic1, Mic2, Speaker)" 2>/dev/null || true +fi diff --git a/install/config/hardware/fix-fkeys.sh b/install/config/hardware/fix-fkeys.sh old mode 100755 new mode 100644 index b652cbf3..d0b43154 --- a/install/config/hardware/fix-fkeys.sh +++ b/install/config/hardware/fix-fkeys.sh @@ -1,5 +1,3 @@ -#!/bin/bash - # Ensure that F-keys on Apple-like keyboards (such as Lofree Flow84) are always F-keys if [[ ! -f /etc/modprobe.d/hid_apple.conf ]]; then echo "options hid_apple fnmode=2" | sudo tee /etc/modprobe.d/hid_apple.conf diff --git a/install/config/hardware/ignore-power-button.sh b/install/config/hardware/ignore-power-button.sh old mode 100755 new mode 100644 index 4166b9b3..8e514f69 --- a/install/config/hardware/ignore-power-button.sh +++ b/install/config/hardware/ignore-power-button.sh @@ -1,5 +1,2 @@ -#!/bin/bash - # Disable shutting system down on power button to bind it to power menu afterwards sudo sed -i 's/.*HandlePowerKey=.*/HandlePowerKey=ignore/' /etc/systemd/logind.conf - diff --git a/install/config/hardware/intel.sh b/install/config/hardware/intel.sh new file mode 100644 index 00000000..546fe477 --- /dev/null +++ b/install/config/hardware/intel.sh @@ -0,0 +1,11 @@ +# This installs hardware video acceleration for Intel GPUs +# Check if we have an Intel GPU at all +if INTEL_GPU=$(lspci | grep -iE 'vga|3d|display' | grep -i 'intel'); then + # HD Graphics and newer uses intel-media-driver + if [[ "${INTEL_GPU,,}" =~ "hd graphics"|"xe"|"iris" ]]; then + sudo pacman -S --needed --noconfirm intel-media-driver + elif [[ "${INTEL_GPU,,}" =~ "gma" ]]; then + # Older generations from 2008 to ~2014-2017 use libva-intel-driver + sudo pacman -S --needed --noconfirm libva-intel-driver + fi +fi diff --git a/install/config/hardware/network.sh b/install/config/hardware/network.sh old mode 100755 new mode 100644 index ff2e03e2..65f9fdbb --- a/install/config/hardware/network.sh +++ b/install/config/hardware/network.sh @@ -1,11 +1,5 @@ -#!/bin/bash - -# Install iwd explicitly if it wasn't included in archinstall -# This can happen if archinstall used ethernet -if ! command -v iwctl &>/dev/null; then - sudo pacman -S --noconfirm --needed iwd - sudo systemctl enable iwd.service -fi +# Ensure iwd service will be started +sudo systemctl enable iwd.service # Prevent systemd-networkd-wait-online timeout on boot sudo systemctl disable systemd-networkd-wait-online.service diff --git a/install/config/hardware/nvidia.sh b/install/config/hardware/nvidia.sh old mode 100755 new mode 100644 index c2b54e54..494390b7 --- a/install/config/hardware/nvidia.sh +++ b/install/config/hardware/nvidia.sh @@ -1,5 +1,3 @@ -#!/bin/bash - # ============================================================================== # Hyprland NVIDIA Setup Script for Arch Linux # ============================================================================== @@ -30,11 +28,6 @@ if [ -n "$(lspci | grep -i 'nvidia')" ]; then KERNEL_HEADERS="linux-hardened-headers" fi - # Enable multilib repository for 32-bit libraries - if ! grep -q "^\[multilib\]" /etc/pacman.conf; then - sudo sed -i '/^#\[multilib\]/,/^#Include/ s/^#//' /etc/pacman.conf - fi - # force package database refresh sudo pacman -Syu --noconfirm diff --git a/install/config/hardware/printer.sh b/install/config/hardware/printer.sh old mode 100755 new mode 100644 index 5a752b2d..781a9871 --- a/install/config/hardware/printer.sh +++ b/install/config/hardware/printer.sh @@ -1,5 +1,3 @@ -#!/bin/bash - chrootable_systemctl_enable cups.service # Disable multicast dns in resolved. Avahi will provide this for better network printer discovery @@ -7,6 +5,9 @@ sudo mkdir -p /etc/systemd/resolved.conf.d echo -e "[Resolve]\nMulticastDNS=no" | sudo tee /etc/systemd/resolved.conf.d/10-disable-multicast.conf chrootable_systemctl_enable avahi-daemon.service +# Enable mDNS resolution for .local domains +sudo sed -i 's/^hosts:.*/hosts: mymachines mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns/' /etc/nsswitch.conf + # Enable automatically adding remote printers if ! grep -q '^CreateRemotePrinters Yes' /etc/cups/cups-browsed.conf; then echo 'CreateRemotePrinters Yes' | sudo tee -a /etc/cups/cups-browsed.conf diff --git a/install/config/hardware/set-wireless-regdom.sh b/install/config/hardware/set-wireless-regdom.sh new file mode 100644 index 00000000..8f28407f --- /dev/null +++ b/install/config/hardware/set-wireless-regdom.sh @@ -0,0 +1,33 @@ +# First check that wireless-regdb is there +if [ -f "/etc/conf.d/wireless-regdom" ]; then + unset WIRELESS_REGDOM + . /etc/conf.d/wireless-regdom +fi + +# If the region is already set, we're done +if [ ! -n "${WIRELESS_REGDOM}" ]; then + # Get the current timezone + if [ -e "/etc/localtime" ]; then + TIMEZONE=$(readlink -f /etc/localtime) + TIMEZONE=${TIMEZONE#/usr/share/zoneinfo/} + + # Some timezones are formatted with the two letter country code at the start + COUNTRY="${TIMEZONE%%/*}" + + # If we don't have a two letter country, get it from the timezone table + if [[ ! "$COUNTRY" =~ ^[A-Z]{2}$ ]] && [ -f "/usr/share/zoneinfo/zone.tab" ]; then + COUNTRY=$(awk -v tz="$TIMEZONE" '$3 == tz {print $1; exit}' /usr/share/zoneinfo/zone.tab) + fi + + # Check if we have a two letter country code + if [[ "$COUNTRY" =~ ^[A-Z]{2}$ ]]; then + # Append it to the wireless-regdom conf file that is used at boot + echo "WIRELESS_REGDOM=\"$COUNTRY\"" | sudo tee -a /etc/conf.d/wireless-regdom >/dev/null + + # Also set it one off now + if command -v iw &>/dev/null; then + sudo iw reg set ${COUNTRY} + fi + fi + fi +fi diff --git a/install/config/hardware/usb-autosuspend.sh b/install/config/hardware/usb-autosuspend.sh old mode 100755 new mode 100644 index a7d820ec..91323846 --- a/install/config/hardware/usb-autosuspend.sh +++ b/install/config/hardware/usb-autosuspend.sh @@ -1,6 +1,5 @@ -#!/bin/bash - # Disable USB autosuspend to prevent peripheral disconnection issues if [[ ! -f /etc/modprobe.d/disable-usb-autosuspend.conf ]]; then echo "options usbcore autosuspend=-1" | sudo tee /etc/modprobe.d/disable-usb-autosuspend.conf -fi \ No newline at end of file +fi + diff --git a/install/config/increase-lockout-limit.sh b/install/config/increase-lockout-limit.sh old mode 100755 new mode 100644 index 1fdbf7dd..522deb72 --- a/install/config/increase-lockout-limit.sh +++ b/install/config/increase-lockout-limit.sh @@ -1,5 +1,3 @@ -#!/bin/bash - # Increase lockout limit to 10 and decrease timeout to 2 minutes sudo sed -i 's|^\(auth\s\+required\s\+pam_faillock.so\)\s\+preauth.*$|\1 preauth silent deny=10 unlock_time=120|' "/etc/pam.d/system-auth" sudo sed -i 's|^\(auth\s\+\[default=die\]\s\+pam_faillock.so\)\s\+authfail.*$|\1 authfail deny=10 unlock_time=120|' "/etc/pam.d/system-auth" diff --git a/install/config/increase-sudo-tries.sh b/install/config/increase-sudo-tries.sh old mode 100755 new mode 100644 index cf3d5ca8..5b64b869 --- a/install/config/increase-sudo-tries.sh +++ b/install/config/increase-sudo-tries.sh @@ -1,5 +1,3 @@ -#!/bin/bash - # Give the user 10 instead of 3 tries to fat finger their password before lockout echo "Defaults passwd_tries=10" | sudo tee /etc/sudoers.d/passwd-tries sudo chmod 440 /etc/sudoers.d/passwd-tries diff --git a/install/config/lazyvim.sh b/install/config/lazyvim.sh new file mode 100644 index 00000000..325f6310 --- /dev/null +++ b/install/config/lazyvim.sh @@ -0,0 +1 @@ +omarchy-lazyvim-setup diff --git a/install/config/localdb.sh b/install/config/localdb.sh old mode 100755 new mode 100644 diff --git a/install/config/mimetypes.sh b/install/config/mimetypes.sh old mode 100755 new mode 100644 index 4c0b2411..48bb8cfa --- a/install/config/mimetypes.sh +++ b/install/config/mimetypes.sh @@ -1,5 +1,3 @@ -#!/bin/bash - omarchy-refresh-applications update-desktop-database ~/.local/share/applications diff --git a/install/config/mise-ruby.sh b/install/config/mise-ruby.sh old mode 100755 new mode 100644 index 304a10dc..af14ef83 --- a/install/config/mise-ruby.sh +++ b/install/config/mise-ruby.sh @@ -1,7 +1,26 @@ -#!/bin/bash - # Install Ruby using gcc-14 for compatibility mise settings set ruby.ruby_build_opts "CC=gcc-14 CXX=g++-14" # Trust .ruby-version mise settings add idiomatic_version_file_enable_tools ruby + +# Install pre-built Ruby + Rails for x86_64 +if [[ $(uname -m) == "x86_64" ]]; then + RUBY_VERSION="3.4.5" + RUBY_TARBALL="ruby-$RUBY_VERSION-rails-8.0.2.1-x86_64.tar.gz" + RUBY_URL="https://pkgs.omarchy.org/ruby/$RUBY_TARBALL" + MISE_RUBY_DIR="$HOME/.local/share/mise/installs/ruby" + OFFLINE_CACHE="/var/cache/omarchy/ruby" + + mkdir -p "$MISE_RUBY_DIR" + + if [[ -n ${OMARCHY_ONLINE_INSTALL:-} ]]; then + echo "Downloading pre-built Ruby $RUBY_VERSION..." + curl -fsSL "$RUBY_URL" | tar -xz -C "$MISE_RUBY_DIR" + else + echo "Installing Ruby from offline cache..." + tar -xzf "$OFFLINE_CACHE/$RUBY_TARBALL" -C "$MISE_RUBY_DIR" + fi + + mise use --global "ruby@${RUBY_VERSION}" +fi diff --git a/install/config/mise-work.sh b/install/config/mise-work.sh new file mode 100644 index 00000000..15d71923 --- /dev/null +++ b/install/config/mise-work.sh @@ -0,0 +1,9 @@ +# Add ./bin to path for all items in ~/Work +mkdir -p "$HOME/Work" + +cat >"$HOME/Work/.mise.toml" <<'EOF' +[env] +_.path = "{{ cwd }}/bin" +EOF + +mise trust ~/Work/.mise.toml diff --git a/install/config/ssh-flakiness.sh b/install/config/ssh-flakiness.sh old mode 100755 new mode 100644 index 1746f59b..906e68aa --- a/install/config/ssh-flakiness.sh +++ b/install/config/ssh-flakiness.sh @@ -1,4 +1,2 @@ -#!/bin/bash - # Solve common flakiness with SSH echo "net.ipv4.tcp_mtu_probing=1" | sudo tee -a /etc/sysctl.d/99-sysctl.conf diff --git a/install/config/sudoless-asdcontrol.sh b/install/config/sudoless-asdcontrol.sh new file mode 100644 index 00000000..120c6fc2 --- /dev/null +++ b/install/config/sudoless-asdcontrol.sh @@ -0,0 +1,3 @@ +# Setup sudo-less controls for controlling brightness on Apple Displays +echo "$USER ALL=(ALL) NOPASSWD: /usr/local/bin/asdcontrol" | sudo tee /etc/sudoers.d/asdcontrol +sudo chmod 440 /etc/sudoers.d/asdcontrol diff --git a/install/config/theme.sh b/install/config/theme.sh old mode 100755 new mode 100644 index da3f1308..13ea9a50 --- a/install/config/theme.sh +++ b/install/config/theme.sh @@ -1,8 +1,6 @@ -#!/bin/bash - -gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark" -gsettings set org.gnome.desktop.interface color-scheme "prefer-dark" -gsettings set org.gnome.desktop.interface icon-theme "Yaru-blue" +# Set links for Nautilius action icons +sudo ln -snf /usr/share/icons/Adwaita/symbolic/actions/go-previous-symbolic.svg /usr/share/icons/Yaru/scalable/actions/go-previous-symbolic.svg +sudo ln -snf /usr/share/icons/Adwaita/symbolic/actions/go-next-symbolic.svg /usr/share/icons/Yaru/scalable/actions/go-next-symbolic.svg # Setup theme links mkdir -p ~/.config/omarchy/themes diff --git a/install/config/timezones.sh b/install/config/timezones.sh old mode 100755 new mode 100644 index 7aa17fb1..24e96a0f --- a/install/config/timezones.sh +++ b/install/config/timezones.sh @@ -1,5 +1,3 @@ -#!/bin/bash - # Ensure timezone can be updated without needing to sudo sudo tee /etc/sudoers.d/omarchy-tzupdate >/dev/null </dev/null </dev/null; then # This computer runs on a battery powerprofilesctl set balanced || true diff --git a/install/first-run/firewall.sh b/install/first-run/firewall.sh old mode 100755 new mode 100644 index efd1159f..a38f5a56 --- a/install/first-run/firewall.sh +++ b/install/first-run/firewall.sh @@ -1,5 +1,3 @@ -#!/bin/bash - # Allow nothing in, everything out sudo ufw default deny incoming sudo ufw default allow outgoing @@ -17,6 +15,9 @@ sudo ufw allow in proto udp from 172.16.0.0/12 to 172.17.0.1 port 53 comment 'al # Turn on the firewall sudo ufw --force enable +# Enable UFW systemd service to start on boot +sudo systemctl enable ufw + # Turn on Docker protections sudo ufw-docker install sudo ufw reload diff --git a/install/first-run/gnome-theme.sh b/install/first-run/gnome-theme.sh new file mode 100644 index 00000000..29363126 --- /dev/null +++ b/install/first-run/gnome-theme.sh @@ -0,0 +1,5 @@ +gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark" +gsettings set org.gnome.desktop.interface color-scheme "prefer-dark" +gsettings set org.gnome.desktop.interface icon-theme "Yaru-blue" + +sudo gtk-update-icon-cache /usr/share/icons/Yaru diff --git a/install/first-run/welcome.sh b/install/first-run/welcome.sh new file mode 100644 index 00000000..2c2ed429 --- /dev/null +++ b/install/first-run/welcome.sh @@ -0,0 +1 @@ +notify-send "👋 Welcome to Omarchy" "You're in for a great computing adventure. Have fun!" -t 30000 diff --git a/install/first-run/wifi.sh b/install/first-run/wifi.sh new file mode 100644 index 00000000..02989004 --- /dev/null +++ b/install/first-run/wifi.sh @@ -0,0 +1,3 @@ +if ! ping -c3 -W1 1.1.1.1 >/dev/null 2>&1; then + notify-send "󰖩 Click to Setup Wi-Fi" "Tab between sections, space selects, ? for help." -u critical -t 30000 +fi diff --git a/install/helpers/all.sh b/install/helpers/all.sh new file mode 100644 index 00000000..0fc48100 --- /dev/null +++ b/install/helpers/all.sh @@ -0,0 +1,4 @@ +source $OMARCHY_INSTALL/helpers/chroot.sh +source $OMARCHY_INSTALL/helpers/presentation.sh +source $OMARCHY_INSTALL/helpers/errors.sh +source $OMARCHY_INSTALL/helpers/logging.sh diff --git a/install/preflight/chroot.sh b/install/helpers/chroot.sh old mode 100755 new mode 100644 similarity index 72% rename from install/preflight/chroot.sh rename to install/helpers/chroot.sh index 4a6d5b82..ab61972e --- a/install/preflight/chroot.sh +++ b/install/helpers/chroot.sh @@ -6,3 +6,6 @@ chrootable_systemctl_enable() { sudo systemctl enable --now $1 fi } + +# Export the function so it's available in subshells +export -f chrootable_systemctl_enable diff --git a/install/helpers/errors.sh b/install/helpers/errors.sh new file mode 100644 index 00000000..6e18bbbb --- /dev/null +++ b/install/helpers/errors.sh @@ -0,0 +1,159 @@ +# Directs user to Omarchy Discord +QR_CODE=' +█▀▀▀▀▀█ ▄ ▄ ▀▄▄▄█ █▀▀▀▀▀█ +█ ███ █ ▄▄▄▄▀▄▀▄▀ █ ███ █ +█ ▀▀▀ █ ▄█ ▄█▄▄▀ █ ▀▀▀ █ +▀▀▀▀▀▀▀ ▀▄█ █ █ █ ▀▀▀▀▀▀▀ +▀▀█▀▀▄▀▀▀▀▄█▀▀█ ▀ █ ▀ █ +█▄█ ▄▄▀▄▄ ▀ ▄ ▀█▄▄▄▄ ▀ ▀█ +▄ ▄▀█ ▀▄▀▀▀▄ ▄█▀▄█▀▄▀▄▀█▀ +█ ▄▄█▄▀▄█ ▄▄▄ ▀ ▄▀██▀ ▀█ +▀ ▀ ▀ █ ▀▄ ▀▀█▀▀▀█▄▀ +█▀▀▀▀▀█ ▀█ ▄▀▀ █ ▀ █▄▀██ +█ ███ █ █▀▄▄▀ █▀███▀█▄██▄ +█ ▀▀▀ █ ██ ▀ █▄█ ▄▄▄█▀ █ +▀▀▀▀▀▀▀ ▀ ▀ ▀▀▀ ▀ ▀▀▀▀▀▀' + +# Track if we're already handling an error to prevent double-trapping +ERROR_HANDLING=false + +# Cursor is usually hidden while we install +show_cursor() { + printf "\033[?25h" +} + +# Display truncated log lines from the install log +show_log_tail() { + if [[ -f $OMARCHY_INSTALL_LOG_FILE ]]; then + local log_lines=$(($TERM_HEIGHT - $LOGO_HEIGHT - 35)) + local max_line_width=$((LOGO_WIDTH - 4)) + + tail -n $log_lines "$OMARCHY_INSTALL_LOG_FILE" | while IFS= read -r line; do + if ((${#line} > max_line_width)); then + local truncated_line="${line:0:$max_line_width}..." + else + local truncated_line="$line" + fi + + gum style "$truncated_line" + done + + echo + fi +} + +# Display the failed command or script name +show_failed_script_or_command() { + if [[ -n ${CURRENT_SCRIPT:-} ]]; then + gum style "Failed script: $CURRENT_SCRIPT" + else + # Truncate long command lines to fit the display + local cmd="$BASH_COMMAND" + local max_cmd_width=$((LOGO_WIDTH - 4)) + + if ((${#cmd} > max_cmd_width)); then + cmd="${cmd:0:$max_cmd_width}..." + fi + + gum style "$cmd" + fi +} + +# Save original stdout and stderr for trap to use +save_original_outputs() { + exec 3>&1 4>&2 +} + +# Restore stdout and stderr to original (saved in FD 3 and 4) +# This ensures output goes to screen, not log file +restore_outputs() { + if [ -e /proc/self/fd/3 ] && [ -e /proc/self/fd/4 ]; then + exec 1>&3 2>&4 + fi +} + +# Error handler +catch_errors() { + # Prevent recursive error handling + if [[ $ERROR_HANDLING == true ]]; then + return + else + ERROR_HANDLING=true + fi + + # Store exit code immediately before it gets overwritten + local exit_code=$? + + stop_log_output + restore_outputs + + clear_logo + show_cursor + + gum style --foreground 1 --padding "1 0 1 $PADDING_LEFT" "Omarchy installation stopped!" + show_log_tail + + gum style "This command halted with exit code $exit_code:" + show_failed_script_or_command + + gum style "$QR_CODE" + echo + gum style "Get help from the community via QR code or at https://discord.gg/tXFUdasqhY" + + # Offer options menu + while true; do + options=() + + # If online install, show retry first + if [[ -n ${OMARCHY_ONLINE_INSTALL:-} ]]; then + options+=("Retry installation") + fi + + # Add upload option if internet is available + if ping -c 1 -W 1 1.1.1.1 >/dev/null 2>&1; then + options+=("Upload log for support") + fi + + # Add remaining options + options+=("View full log") + options+=("Exit") + + choice=$(gum choose "${options[@]}" --header "What would you like to do?" --height 6 --padding "1 $PADDING_LEFT") + + case "$choice" in + "Retry installation") + bash ~/.local/share/omarchy/install.sh + break + ;; + "View full log") + less "$OMARCHY_INSTALL_LOG_FILE" + ;; + "Upload log for support") + omarchy-upload-install-log + ;; + "Exit" | "") + exit 1 + ;; + esac + done +} + +# Exit handler - ensures cleanup happens on any exit +exit_handler() { + local exit_code=$? + + # Only run if we're exiting with an error and haven't already handled it + if [[ $exit_code -ne 0 && $ERROR_HANDLING != true ]]; then + catch_errors + else + stop_log_output + show_cursor + fi +} + +# Set up traps +trap catch_errors ERR INT TERM +trap exit_handler EXIT + +# Save original outputs in case we trap +save_original_outputs diff --git a/install/helpers/logging.sh b/install/helpers/logging.sh new file mode 100644 index 00000000..4ebe2a9e --- /dev/null +++ b/install/helpers/logging.sh @@ -0,0 +1,134 @@ +start_log_output() { + local ANSI_SAVE_CURSOR="\033[s" + local ANSI_RESTORE_CURSOR="\033[u" + local ANSI_CLEAR_LINE="\033[2K" + local ANSI_HIDE_CURSOR="\033[?25l" + local ANSI_RESET="\033[0m" + local ANSI_GRAY="\033[90m" + + # Save cursor position and hide cursor + printf $ANSI_SAVE_CURSOR + printf $ANSI_HIDE_CURSOR + + ( + local log_lines=20 + local max_line_width=$((LOGO_WIDTH - 4)) + + while true; do + # Read the last N lines into an array + mapfile -t current_lines < <(tail -n $log_lines "$OMARCHY_INSTALL_LOG_FILE" 2>/dev/null) + + # Build complete output buffer with escape sequences + output="" + for ((i = 0; i < log_lines; i++)); do + line="${current_lines[i]:-}" + + # Truncate if needed + if [ ${#line} -gt $max_line_width ]; then + line="${line:0:$max_line_width}..." + fi + + # Add clear line escape and formatted output for each line + if [ -n "$line" ]; then + output+="${ANSI_CLEAR_LINE}${ANSI_GRAY}${PADDING_LEFT_SPACES} → ${line}${ANSI_RESET}\n" + else + output+="${ANSI_CLEAR_LINE}${PADDING_LEFT_SPACES}\n" + fi + done + + printf "${ANSI_RESTORE_CURSOR}%b" "$output" + + sleep 0.1 + done + ) & + monitor_pid=$! +} + +stop_log_output() { + if [ -n "${monitor_pid:-}" ]; then + kill $monitor_pid 2>/dev/null || true + wait $monitor_pid 2>/dev/null || true + unset monitor_pid + fi +} + +start_install_log() { + sudo touch "$OMARCHY_INSTALL_LOG_FILE" + sudo chmod 666 "$OMARCHY_INSTALL_LOG_FILE" + + export OMARCHY_START_TIME=$(date '+%Y-%m-%d %H:%M:%S') + + echo "=== Omarchy Installation Started: $OMARCHY_START_TIME ===" >>"$OMARCHY_INSTALL_LOG_FILE" + start_log_output +} + +stop_install_log() { + stop_log_output + show_cursor + + if [[ -n ${OMARCHY_INSTALL_LOG_FILE:-} ]]; then + OMARCHY_END_TIME=$(date '+%Y-%m-%d %H:%M:%S') + echo "=== Omarchy Installation Completed: $OMARCHY_END_TIME ===" >>"$OMARCHY_INSTALL_LOG_FILE" + echo "" >>"$OMARCHY_INSTALL_LOG_FILE" + echo "=== Installation Time Summary ===" >>"$OMARCHY_INSTALL_LOG_FILE" + + if [ -f "/var/log/archinstall/install.log" ]; then + ARCHINSTALL_START=$(grep -m1 '^\[' /var/log/archinstall/install.log 2>/dev/null | sed 's/^\[\([^]]*\)\].*/\1/' || true) + ARCHINSTALL_END=$(grep 'Installation completed without any errors' /var/log/archinstall/install.log 2>/dev/null | sed 's/^\[\([^]]*\)\].*/\1/' || true) + + if [ -n "$ARCHINSTALL_START" ] && [ -n "$ARCHINSTALL_END" ]; then + ARCH_START_EPOCH=$(date -d "$ARCHINSTALL_START" +%s) + ARCH_END_EPOCH=$(date -d "$ARCHINSTALL_END" +%s) + ARCH_DURATION=$((ARCH_END_EPOCH - ARCH_START_EPOCH)) + + ARCH_MINS=$((ARCH_DURATION / 60)) + ARCH_SECS=$((ARCH_DURATION % 60)) + + echo "Archinstall: ${ARCH_MINS}m ${ARCH_SECS}s" >>"$OMARCHY_INSTALL_LOG_FILE" + fi + fi + + if [ -n "$OMARCHY_START_TIME" ]; then + OMARCHY_START_EPOCH=$(date -d "$OMARCHY_START_TIME" +%s) + OMARCHY_END_EPOCH=$(date -d "$OMARCHY_END_TIME" +%s) + OMARCHY_DURATION=$((OMARCHY_END_EPOCH - OMARCHY_START_EPOCH)) + + OMARCHY_MINS=$((OMARCHY_DURATION / 60)) + OMARCHY_SECS=$((OMARCHY_DURATION % 60)) + + echo "Omarchy: ${OMARCHY_MINS}m ${OMARCHY_SECS}s" >>"$OMARCHY_INSTALL_LOG_FILE" + + if [ -n "$ARCH_DURATION" ]; then + TOTAL_DURATION=$((ARCH_DURATION + OMARCHY_DURATION)) + TOTAL_MINS=$((TOTAL_DURATION / 60)) + TOTAL_SECS=$((TOTAL_DURATION % 60)) + echo "Total: ${TOTAL_MINS}m ${TOTAL_SECS}s" >>"$OMARCHY_INSTALL_LOG_FILE" + fi + fi + echo "=================================" >>"$OMARCHY_INSTALL_LOG_FILE" + + echo "Rebooting system..." >>"$OMARCHY_INSTALL_LOG_FILE" + fi +} + +run_logged() { + local script="$1" + + export CURRENT_SCRIPT="$script" + + echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting: $script" >>"$OMARCHY_INSTALL_LOG_FILE" + + # Use bash -c to create a clean subshell + bash -c "source '$script'" >"$OMARCHY_INSTALL_LOG_FILE" 2>&1 + + local exit_code=$? + + if [ $exit_code -eq 0 ]; then + echo "[$(date '+%Y-%m-%d %H:%M:%S')] Completed: $script" >>"$OMARCHY_INSTALL_LOG_FILE" + unset CURRENT_SCRIPT + else + echo "[$(date '+%Y-%m-%d %H:%M:%S')] Failed: $script (exit code: $exit_code)" >>"$OMARCHY_INSTALL_LOG_FILE" + fi + + return $exit_code +} diff --git a/install/helpers/presentation.sh b/install/helpers/presentation.sh new file mode 100644 index 00000000..70cab2e9 --- /dev/null +++ b/install/helpers/presentation.sh @@ -0,0 +1,48 @@ +# Ensure we have gum available +if ! command -v gum &>/dev/null; then + sudo pacman -S --needed --noconfirm gum +fi + +# Get terminal size from /dev/tty (works in all scenarios: direct, sourced, or piped) +if [ -e /dev/tty ]; then + TERM_SIZE=$(stty size 2>/dev/null max) max = length } END { print max+0 }' "$LOGO_PATH" 2>/dev/null || echo 0) +export LOGO_HEIGHT=$(wc -l <"$LOGO_PATH" 2>/dev/null || echo 0) + +export PADDING_LEFT=$((($TERM_WIDTH - $LOGO_WIDTH) / 2)) +export PADDING_LEFT_SPACES=$(printf "%*s" $PADDING_LEFT "") + +# Tokyo Night theme for gum confirm +export GUM_CONFIRM_PROMPT_FOREGROUND="6" # Cyan for prompt +export GUM_CONFIRM_SELECTED_FOREGROUND="0" # Black text on selected +export GUM_CONFIRM_SELECTED_BACKGROUND="2" # Green background for selected +export GUM_CONFIRM_UNSELECTED_FOREGROUND="7" # White for unselected +export GUM_CONFIRM_UNSELECTED_BACKGROUND="0" # Black background for unselected +export PADDING="0 0 0 $PADDING_LEFT" # Gum Style +export GUM_CHOOSE_PADDING="$PADDING" +export GUM_FILTER_PADDING="$PADDING" +export GUM_INPUT_PADDING="$PADDING" +export GUM_SPIN_PADDING="$PADDING" +export GUM_TABLE_PADDING="$PADDING" +export GUM_CONFIRM_PADDING="$PADDING" + +clear_logo() { + printf "\033[H\033[2J" # Clear screen and move cursor to top-left + gum style --foreground 2 --padding "1 0 0 $PADDING_LEFT" "$(<"$LOGO_PATH")" +} diff --git a/install/iso.sh b/install/iso.sh new file mode 100644 index 00000000..7676ccc0 --- /dev/null +++ b/install/iso.sh @@ -0,0 +1,14 @@ +# Called by Omarchy ISO setup before starting configurator and archinstall + +source "$OMARCHY_INSTALL/preflight/set-size-vars.sh" +source "$OMARCHY_INSTALL/helpers/logo.sh" +source "$OMARCHY_INSTALL/preflight/gum.sh" +source "$OMARCHY_INSTALL/helpers/tail-log-output.sh" +source "$OMARCHY_INSTALL/helpers/trap-errors.sh" + +source $OMARCHY_INSTALL/helpers/chroot.sh +source $OMARCHY_INSTALL/helpers/logo.sh +source $OMARCHY_INSTALL/helpers/gum.sh +source $OMARCHY_INSTALL/helpers/errors.sh +source $OMARCHY_INSTALL/helpers/logging.sh +source $OMARCHY_INSTALL/helpers/layout.sh diff --git a/install/login/all.sh b/install/login/all.sh new file mode 100644 index 00000000..e4be282f --- /dev/null +++ b/install/login/all.sh @@ -0,0 +1,4 @@ +run_logged $OMARCHY_INSTALL/login/plymouth.sh +run_logged $OMARCHY_INSTALL/login/limine-snapper.sh +run_logged $OMARCHY_INSTALL/login/enable-mkinitcpio.sh +run_logged $OMARCHY_INSTALL/login/alt-bootloaders.sh diff --git a/install/login/alt-bootloaders.sh b/install/login/alt-bootloaders.sh old mode 100755 new mode 100644 index 7476ec7d..bb35d9b0 --- a/install/login/alt-bootloaders.sh +++ b/install/login/alt-bootloaders.sh @@ -1,5 +1,3 @@ -#!/bin/bash - if ! command -v limine &>/dev/null; then # Add kernel hooks if ! grep -Eq '^HOOKS=.*plymouth' /etc/mkinitcpio.conf; then diff --git a/install/login/enable-mkinitcpio.sh b/install/login/enable-mkinitcpio.sh new file mode 100644 index 00000000..7422d8db --- /dev/null +++ b/install/login/enable-mkinitcpio.sh @@ -0,0 +1,18 @@ +echo "Re-enabling mkinitcpio hooks..." + +# Restore the specific mkinitcpio pacman hooks +if [ -f /usr/share/libalpm/hooks/90-mkinitcpio-install.hook.disabled ]; then + sudo mv /usr/share/libalpm/hooks/90-mkinitcpio-install.hook.disabled /usr/share/libalpm/hooks/90-mkinitcpio-install.hook +fi + +if [ -f /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook.disabled ]; then + sudo mv /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook.disabled /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook +fi + +echo "mkinitcpio hooks re-enabled" + +if command -v limine &>/dev/null; then + sudo limine-update +else + sudo mkinitcpio -P +fi diff --git a/install/login/limine-snapper.sh b/install/login/limine-snapper.sh old mode 100755 new mode 100644 index e679851a..a579acb0 --- a/install/login/limine-snapper.sh +++ b/install/login/limine-snapper.sh @@ -1,14 +1,27 @@ -#!/bin/bash - if command -v limine &>/dev/null; then sudo tee /etc/mkinitcpio.conf.d/omarchy_hooks.conf </dev/null HOOKS=(base udev plymouth keyboard autodetect microcode modconf kms keymap consolefont block encrypt filesystems fsck btrfs-overlayfs) EOF - [[ -f /boot/EFI/limine/limine.conf ]] && EFI=true + [[ -f /boot/EFI/limine/limine.conf ]] || [[ -f /boot/EFI/BOOT/limine.conf ]] && EFI=true # Conf location is different between EFI and BIOS - [[ -n "$EFI" ]] && limine_config="/boot/EFI/limine/limine.conf" || limine_config="/boot/limine/limine.conf" + if [[ -n "$EFI" ]]; then + # Check USB location first, then regular EFI location + if [[ -f /boot/EFI/BOOT/limine.conf ]]; then + limine_config="/boot/EFI/BOOT/limine.conf" + else + limine_config="/boot/EFI/limine/limine.conf" + fi + else + limine_config="/boot/limine/limine.conf" + fi + + # Double-check and exit if we don't have a config file for some reason + if [[ ! -f $limine_config ]]; then + echo "Error: Limine config not found at $limine_config" >&2 + exit 1 + fi CMDLINE=$(grep "^[[:space:]]*cmdline:" "$limine_config" | head -1 | sed 's/^[[:space:]]*cmdline:[[:space:]]*//') @@ -63,10 +76,9 @@ term_background_bright: 24283b EOF sudo pacman -S --noconfirm --needed limine-snapper-sync limine-mkinitcpio-hook - sudo limine-update # Match Snapper configs if not installing from the ISO - if [ -z "${OMARCHY_CHROOT_INSTALL:-}" ]; then + if [[ -z ${OMARCHY_CHROOT_INSTALL:-} ]]; then if ! sudo snapper list-configs 2>/dev/null | grep -q "root"; then sudo snapper -c root create-config / fi @@ -85,7 +97,7 @@ EOF fi # Add UKI entry to UEFI machines to skip bootloader showing on normal boot -if [ -n "$EFI" ] && efibootmgr &>/dev/null && ! efibootmgr | grep -q Omarchy && +if [[ -n $EFI ]] && efibootmgr &>/dev/null && ! efibootmgr | grep -q Omarchy && ! cat /sys/class/dmi/id/bios_vendor 2>/dev/null | grep -qi "American Megatrends"; then sudo efibootmgr --create \ --disk "$(findmnt -n -o SOURCE /boot | sed 's/p\?[0-9]*$//')" \ diff --git a/install/login/plymouth.sh b/install/login/plymouth.sh old mode 100755 new mode 100644 index 37c0eaf7..72102f27 --- a/install/login/plymouth.sh +++ b/install/login/plymouth.sh @@ -1,5 +1,3 @@ -#!/bin/bash - # Hyprland launched via UWSM and login directly as user, rely on disk encryption + hyprlock for security # ============================================================================== @@ -8,7 +6,7 @@ if [ "$(plymouth-set-default-theme)" != "omarchy" ]; then sudo cp -r "$HOME/.local/share/omarchy/default/plymouth" /usr/share/plymouth/themes/omarchy/ - sudo plymouth-set-default-theme -R omarchy + sudo plymouth-set-default-theme omarchy fi # ============================================================================== diff --git a/install/omarchy-base.packages b/install/omarchy-base.packages new file mode 100644 index 00000000..f1a3daa9 --- /dev/null +++ b/install/omarchy-base.packages @@ -0,0 +1,131 @@ +# Omarchy core package list installed via install/packages.sh +# This file is also used by the ISO builder when determining needs + +1password-beta +1password-cli +alacritty +asdcontrol-git +avahi +bash-completion +bat +blueberry +brightnessctl +btop +cargo +clang +cups +cups-browsed +cups-filters +cups-pdf +docker +docker-buildx +docker-compose +dust +evince +eza +fastfetch +fcitx5 +fcitx5-gtk +fcitx5-qt +fd +ffmpegthumbnailer +fontconfig +fzf +gcc14 +github-cli +gnome-calculator +gnome-keyring +gnome-themes-extra +gum +gvfs-mtp +gvfs-smb +hypridle +hyprland +hyprland-qtutils +hyprlock +hyprpicker +hyprshot +hyprsunset +imagemagick +impala +imv +inetutils +iwd +jq +kdenlive +kvantum-qt5 +lazydocker +lazygit +less +libqalculate +libreoffice +llvm +localsend +luarocks +mako +man +mariadb-libs +mise +mpv +nautilus +noto-fonts +noto-fonts-cjk +noto-fonts-emoji +noto-fonts-extra +nss-mdns +nvim +obs-studio +obsidian +omarchy-chromium +omarchy-lazyvim +pamixer +pinta +playerctl +plocate +plymouth +polkit-gnome +postgresql-libs +power-profiles-daemon +python-gobject +python-poetry-core +python-terminaltexteffects +qt5-wayland +ripgrep +satty +signal-desktop +slurp +spotify +starship +sushi +swaybg +swayosd +system-config-printer +tldr +tree-sitter-cli +ttf-cascadia-mono-nerd +ttf-ia-writer +ttf-jetbrains-mono-nerd +typora +tzupdate +ufw +ufw-docker +unzip +uwsm +walker-bin +waybar +wf-recorder +whois +wireless-regdb +wiremix +wireplumber +wl-clip-persist +wl-clipboard +wl-screenrec +woff2-font-awesome +xdg-desktop-portal-gtk +xdg-desktop-portal-hyprland +xmlstarlet +xournalpp +yaru-icon-theme +yay +zoxide diff --git a/install/omarchy-other.packages b/install/omarchy-other.packages new file mode 100644 index 00000000..d858a966 --- /dev/null +++ b/install/omarchy-other.packages @@ -0,0 +1,45 @@ +# Packages installed outside of install/packages.sh or optional packages +# Utilized by ISO builder to ensure package availability in the ISO + +autoconf-archive +base +base-devel +broadcom-wl +btrfs-progs +dart +dkms +egl-wayland +git +gst-plugin-pipewire +gtk4-layer-shell +htop +intltool +iwd +jdk-openjdk +libpulse +libsass +libva-intel-driver +libva-nvidia-driver +limine +limine-mkinitcpio-hook +limine-snapper-sync +linux +linux-firmware +linux-headers +macbook12-spi-driver-dkms +nvidia-dkms +nvidia-open-dkms +nvidia-utils +lib32-nvidia-utils +pipewire +pipewire-alsa +pipewire-jack +pipewire-pulse +qt5-remoteobjects +qt6-wayland +sassc +snapper +webp-pixbuf-loader +wget +yay-debug +zram-generator diff --git a/install/packages.sh b/install/packages.sh deleted file mode 100644 index 8fcbf3af..00000000 --- a/install/packages.sh +++ /dev/null @@ -1,121 +0,0 @@ -sudo pacman -S --noconfirm --needed \ - 1password-beta \ - 1password-cli \ - alacritty \ - avahi \ - bash-completion \ - bat \ - blueberry \ - brightnessctl \ - btop \ - cargo \ - clang \ - cups \ - cups-browsed \ - cups-filters \ - cups-pdf \ - docker \ - docker-buildx \ - docker-compose \ - dust \ - evince \ - eza \ - fastfetch \ - fcitx5 \ - fcitx5-gtk \ - fcitx5-qt \ - fd \ - ffmpegthumbnailer \ - fzf \ - gcc14 \ - github-cli \ - gnome-calculator \ - gnome-keyring \ - gnome-themes-extra \ - gum \ - gvfs-mtp \ - hypridle \ - hyprland \ - hyprland-qtutils \ - hyprlock \ - hyprpicker \ - hyprshot \ - hyprsunset \ - imagemagick \ - impala \ - imv \ - inetutils \ - jq \ - kdenlive \ - kvantum-qt5 \ - lazydocker \ - lazygit \ - less \ - libqalculate \ - libreoffice \ - llvm \ - localsend \ - luarocks \ - mako \ - man \ - mariadb-libs \ - mise \ - mpv \ - nautilus \ - noto-fonts \ - noto-fonts-cjk \ - noto-fonts-emoji \ - noto-fonts-extra \ - nss-mdns \ - nvim \ - obs-studio \ - obsidian \ - omarchy-chromium \ - pamixer \ - pinta \ - playerctl \ - plocate \ - plymouth \ - polkit-gnome \ - postgresql-libs \ - power-profiles-daemon \ - python-gobject \ - python-poetry-core \ - python-terminaltexteffects \ - ripgrep \ - satty \ - signal-desktop \ - slurp \ - spotify \ - starship \ - sushi \ - swaybg \ - swayosd \ - system-config-printer \ - tldr \ - tree-sitter-cli \ - ttf-cascadia-mono-nerd \ - ttf-jetbrains-mono \ - typora \ - tzupdate \ - ufw \ - ufw-docker \ - unzip \ - uwsm \ - walker-bin \ - waybar \ - wf-recorder \ - whois \ - wiremix \ - wireplumber \ - wl-clip-persist \ - wl-clipboard \ - wl-screenrec \ - woff2-font-awesome \ - xdg-desktop-portal-gtk \ - xdg-desktop-portal-hyprland \ - xmlstarlet \ - xournalpp \ - yaru-icon-theme \ - yay \ - zoxide diff --git a/install/packaging/all.sh b/install/packaging/all.sh new file mode 100644 index 00000000..52788734 --- /dev/null +++ b/install/packaging/all.sh @@ -0,0 +1,6 @@ +run_logged $OMARCHY_INSTALL/packaging/base.sh +run_logged $OMARCHY_INSTALL/packaging/fonts.sh +run_logged $OMARCHY_INSTALL/packaging/lazyvim.sh +run_logged $OMARCHY_INSTALL/packaging/icons.sh +run_logged $OMARCHY_INSTALL/packaging/webapps.sh +run_logged $OMARCHY_INSTALL/packaging/tuis.sh diff --git a/install/packaging/asdcontrol.sh b/install/packaging/asdcontrol.sh deleted file mode 100755 index ff950c64..00000000 --- a/install/packaging/asdcontrol.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -# Install asdcontrol for controlling brightness on Apple Displays -if ! command -v asdcontrol &>/dev/null; then - git clone https://github.com/nikosdion/asdcontrol.git /tmp/asdcontrol - cd /tmp/asdcontrol - make - sudo make install - cd - - rm -rf /tmp/asdcontrol - - # Setup sudo-less controls - echo "$USER ALL=(ALL) NOPASSWD: /usr/local/bin/asdcontrol" | sudo tee /etc/sudoers.d/asdcontrol - sudo chmod 440 /etc/sudoers.d/asdcontrol -fi diff --git a/install/packaging/base.sh b/install/packaging/base.sh new file mode 100644 index 00000000..668e4a9b --- /dev/null +++ b/install/packaging/base.sh @@ -0,0 +1,3 @@ +# Install all base packages +mapfile -t packages < <(grep -v '^#' "$OMARCHY_INSTALL/omarchy-base.packages" | grep -v '^$') +sudo pacman -S --noconfirm --needed "${packages[@]}" diff --git a/install/packaging/fonts.sh b/install/packaging/fonts.sh old mode 100755 new mode 100644 index 01f31edb..8d5a35ec --- a/install/packaging/fonts.sh +++ b/install/packaging/fonts.sh @@ -1,5 +1,3 @@ -#!/bin/bash - # Omarchy logo in a font for Waybar use mkdir -p ~/.local/share/fonts cp ~/.local/share/omarchy/config/omarchy.ttf ~/.local/share/fonts/ diff --git a/install/packaging/icons.sh b/install/packaging/icons.sh new file mode 100644 index 00000000..3110afc9 --- /dev/null +++ b/install/packaging/icons.sh @@ -0,0 +1,4 @@ +# Copy all bundled icons to the applications/icons directory +ICON_DIR="$HOME/.local/share/applications/icons" +mkdir -p "$ICON_DIR" +cp ~/.local/share/omarchy/applications/icons/*.png "$ICON_DIR/" diff --git a/install/packaging/lazyvim.sh b/install/packaging/lazyvim.sh old mode 100755 new mode 100644 index 7fad269d..f8b8e37b --- a/install/packaging/lazyvim.sh +++ b/install/packaging/lazyvim.sh @@ -1,8 +1,3 @@ -#!/bin/bash - if [[ ! -d "$HOME/.config/nvim" ]]; then - git clone https://github.com/LazyVim/starter ~/.config/nvim - cp -R ~/.local/share/omarchy/config/nvim/* ~/.config/nvim/ - rm -rf ~/.config/nvim/.git - echo "vim.opt.relativenumber = false" >>~/.config/nvim/lua/config/options.lua + omarchy-lazyvim-setup fi diff --git a/install/packaging/pins.sh b/install/packaging/pins.sh deleted file mode 100755 index bacb6165..00000000 --- a/install/packaging/pins.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -# We pin explicit packages that are bad upstream here -pinned_packages=$(omarchy-pkg-pinned) - -if [[ -n $pinned_packages ]]; then - echo -e "\e[32m\nInstall pinned system packages\e[0m" - - for pinned in $pinned_packages; do - echo "sudo pacman -U --noconfirm $pinned" - sudo pacman -U --noconfirm $pinned - done -fi diff --git a/install/packaging/tuis.sh b/install/packaging/tuis.sh old mode 100755 new mode 100644 index 0aea639a..273a5d70 --- a/install/packaging/tuis.sh +++ b/install/packaging/tuis.sh @@ -1,4 +1,4 @@ -#!/bin/bash +ICON_DIR="$HOME/.local/share/applications/icons" -omarchy-tui-install "Disk Usage" "bash -c 'dust -r; read -n 1 -s'" float https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/qdirstat.png -omarchy-tui-install "Docker" "lazydocker" tile https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/docker.png +omarchy-tui-install "Disk Usage" "bash -c 'dust -r; read -n 1 -s'" float "$ICON_DIR/Disk Usage.png" +omarchy-tui-install "Docker" "lazydocker" tile "$ICON_DIR/Docker.png" diff --git a/install/packaging/webapps.sh b/install/packaging/webapps.sh old mode 100755 new mode 100644 index ac6b3baf..df20bd3e --- a/install/packaging/webapps.sh +++ b/install/packaging/webapps.sh @@ -1,15 +1,13 @@ -#!/bin/bash - -omarchy-webapp-install "HEY" https://app.hey.com https://www.hey.com/assets/images/general/hey.png -omarchy-webapp-install "Basecamp" https://launchpad.37signals.com https://basecamp.com/assets/images/general/basecamp.png -omarchy-webapp-install "WhatsApp" https://web.whatsapp.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/whatsapp.png -omarchy-webapp-install "Google Photos" https://photos.google.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/google-photos.png -omarchy-webapp-install "Google Contacts" https://contacts.google.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/google-contacts.png -omarchy-webapp-install "Google Messages" https://messages.google.com/web/conversations https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/google-messages.png -omarchy-webapp-install "ChatGPT" https://chatgpt.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/chatgpt.png -omarchy-webapp-install "YouTube" https://youtube.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/youtube.png -omarchy-webapp-install "GitHub" https://github.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/github-light.png -omarchy-webapp-install "X" https://x.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/x-light.png -omarchy-webapp-install "Figma" https://figma.com/ https://www.veryicon.com/download/png/application/app-icon-7/figma-1?s=256 -omarchy-webapp-install "Discord" https://discord.com/channels/@me https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/discord.png -omarchy-webapp-install "Zoom" https://app.zoom.us/wc/home https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/zoom.png +omarchy-webapp-install "HEY" https://app.hey.com HEY.png +omarchy-webapp-install "Basecamp" https://launchpad.37signals.com Basecamp.png +omarchy-webapp-install "WhatsApp" https://web.whatsapp.com/ WhatsApp.png +omarchy-webapp-install "Google Photos" https://photos.google.com/ "Google Photos.png" +omarchy-webapp-install "Google Contacts" https://contacts.google.com/ "Google Contacts.png" +omarchy-webapp-install "Google Messages" https://messages.google.com/web/conversations "Google Messages.png" +omarchy-webapp-install "ChatGPT" https://chatgpt.com/ ChatGPT.png +omarchy-webapp-install "YouTube" https://youtube.com/ YouTube.png +omarchy-webapp-install "GitHub" https://github.com/ GitHub.png +omarchy-webapp-install "X" https://x.com/ X.png +omarchy-webapp-install "Figma" https://figma.com/ Figma.png +omarchy-webapp-install "Discord" https://discord.com/channels/@me Discord.png +omarchy-webapp-install "Zoom" https://app.zoom.us/wc/home Zoom.png "omarchy-webapp-handler-zoom %u" "x-scheme-handler/zoommtg;x-scheme-handler/zoomus" diff --git a/install/post-install/all.sh b/install/post-install/all.sh new file mode 100644 index 00000000..4242b627 --- /dev/null +++ b/install/post-install/all.sh @@ -0,0 +1,2 @@ +run_logged $OMARCHY_INSTALL/post-install/pacman.sh +source $OMARCHY_INSTALL/post-install/finished.sh diff --git a/install/post-install/finished.sh b/install/post-install/finished.sh new file mode 100644 index 00000000..55433e6f --- /dev/null +++ b/install/post-install/finished.sh @@ -0,0 +1,38 @@ +stop_install_log + +echo_in_style() { + echo "$1" | tte --canvas-width 0 --anchor-text c --frame-rate 640 print +} + +clear +echo +tte -i ~/.local/share/omarchy/logo.txt --canvas-width 0 --anchor-text c --frame-rate 920 laseretch +echo + +# Display installation time if available +if [[ -f $OMARCHY_INSTALL_LOG_FILE ]] && grep -q "Total:" "$OMARCHY_INSTALL_LOG_FILE" 2>/dev/null; then + echo + TOTAL_TIME=$(tail -n 20 "$OMARCHY_INSTALL_LOG_FILE" | grep "^Total:" | sed 's/^Total:[[:space:]]*//') + if [ -n "$TOTAL_TIME" ]; then + echo_in_style "Installed in $TOTAL_TIME" + fi +fi + +if sudo test -f /etc/sudoers.d/99-omarchy-installer; then + sudo rm -f /etc/sudoers.d/99-omarchy-installer &>/dev/null + echo + echo_in_style "Remember to remove USB installer!" +fi + +# Exit gracefully if user chooses not to reboot +if gum confirm --padding "0 0 0 $((PADDING_LEFT + 32))" --show-help=false --default --affirmative "Reboot Now" --negative "" ""; then + # Clear screen to hide any shutdown messages + clear + + # Use systemctl if available, otherwise fallback to reboot command + if command -v systemctl &>/dev/null; then + systemctl reboot --no-wall 2>/dev/null + else + reboot 2>/dev/null + fi +fi diff --git a/install/post-install/pacman.sh b/install/post-install/pacman.sh new file mode 100644 index 00000000..574c4205 --- /dev/null +++ b/install/post-install/pacman.sh @@ -0,0 +1,3 @@ +# Configure pacman +sudo cp -f ~/.local/share/omarchy/default/pacman/pacman.conf /etc/pacman.conf +sudo cp -f ~/.local/share/omarchy/default/pacman/mirrorlist /etc/pacman.d/mirrorlist diff --git a/install/preflight/all.sh b/install/preflight/all.sh new file mode 100644 index 00000000..88354659 --- /dev/null +++ b/install/preflight/all.sh @@ -0,0 +1,7 @@ +source $OMARCHY_INSTALL/preflight/guard.sh +source $OMARCHY_INSTALL/preflight/begin.sh +run_logged $OMARCHY_INSTALL/preflight/show-env.sh +run_logged $OMARCHY_INSTALL/preflight/pacman.sh +run_logged $OMARCHY_INSTALL/preflight/migrations.sh +run_logged $OMARCHY_INSTALL/preflight/first-run-mode.sh +run_logged $OMARCHY_INSTALL/preflight/disable-mkinitcpio.sh diff --git a/install/preflight/begin.sh b/install/preflight/begin.sh new file mode 100644 index 00000000..f83a7c38 --- /dev/null +++ b/install/preflight/begin.sh @@ -0,0 +1,4 @@ +clear_logo +gum style --foreground 3 --padding "1 0 0 $PADDING_LEFT" "Installing..." +echo +start_install_log diff --git a/install/preflight/disable-mkinitcpio.sh b/install/preflight/disable-mkinitcpio.sh new file mode 100644 index 00000000..a1979c86 --- /dev/null +++ b/install/preflight/disable-mkinitcpio.sh @@ -0,0 +1,16 @@ +# Temporarily disable mkinitcpio hooks to prevent multiple regenerations during package installation +# This speeds up installation significantly + +echo "Temporarily disabling mkinitcpio hooks during installation..." + +# Move the specific mkinitcpio pacman hooks out of the way if they exist +if [ -f /usr/share/libalpm/hooks/90-mkinitcpio-install.hook ]; then + sudo mv /usr/share/libalpm/hooks/90-mkinitcpio-install.hook /usr/share/libalpm/hooks/90-mkinitcpio-install.hook.disabled +fi + +if [ -f /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook ]; then + sudo mv /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook /usr/share/libalpm/hooks/60-mkinitcpio-remove.hook.disabled +fi + +echo "mkinitcpio hooks disabled" + diff --git a/install/preflight/first-run-mode.sh b/install/preflight/first-run-mode.sh old mode 100755 new mode 100644 index 49eee6f4..44649496 --- a/install/preflight/first-run-mode.sh +++ b/install/preflight/first-run-mode.sh @@ -1,5 +1,3 @@ -#!/bin/bash - # Set first-run mode marker so we can install stuff post-installation mkdir -p ~/.local/state/omarchy touch ~/.local/state/omarchy/first-run.mode @@ -9,6 +7,7 @@ sudo tee /etc/sudoers.d/first-run >/dev/null </dev/null -fi - -# Set mirrors to global ones only -echo -e "Server = https://geo.mirror.pkgbuild.com/\$repo/os/\$arch\nServer = https://mirror.rackspace.com/archlinux/\$repo/os/\$arch" | - sudo tee /etc/pacman.d/mirrorlist >/dev/null - -# Only add Chaotic-AUR if the architecture is x86_64 so ARM users can build the packages -if [[ "$(uname -m)" == "x86_64" ]] && [ -z "$DISABLE_CHAOTIC" ]; then - # Try installing Chaotic-AUR keyring and mirrorlist - if ! pacman-key --list-keys 3056513887B78AEB >/dev/null 2>&1 && - sudo pacman-key --recv-key 3056513887B78AEB && - sudo pacman-key --lsign-key 3056513887B78AEB && - sudo pacman -U --noconfirm 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst' && - sudo pacman -U --noconfirm 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-mirrorlist.pkg.tar.zst'; then - - # Add Chaotic-AUR repo to pacman config - if ! grep -q "chaotic-aur" /etc/pacman.conf; then - echo -e '\n[chaotic-aur]\nInclude = /etc/pacman.d/chaotic-mirrorlist' | sudo tee -a /etc/pacman.conf >/dev/null - fi - else - echo -e "Failed to install Chaotic-AUR, so won't include it in pacman config!" - fi -fi - -# Refresh all repos -sudo pacman -Syu --noconfirm diff --git a/install/preflight/show-env.sh b/install/preflight/show-env.sh old mode 100755 new mode 100644 index 8753df12..1a9319d6 --- a/install/preflight/show-env.sh +++ b/install/preflight/show-env.sh @@ -1,4 +1,6 @@ -#!/bin/bash +# Show installation environment variables +gum log --level info "Installation Environment:" -echo "Installation ENV:" -env | grep -E "^(OMARCHY_CHROOT_INSTALL|OMARCHY_USER_NAME|OMARCHY_USER_EMAIL|USER|HOME|OMARCHY_REPO|OMARCHY_REF)=" +env | grep -E "^(OMARCHY_CHROOT_INSTALL|OMARCHY_ONLINE_INSTALL|OMARCHY_USER_NAME|OMARCHY_USER_EMAIL|USER|HOME|OMARCHY_REPO|OMARCHY_REF|OMARCHY_PATH)=" | sort | while IFS= read -r var; do + gum log --level info " $var" +done diff --git a/install/preflight/trap-errors.sh b/install/preflight/trap-errors.sh deleted file mode 100755 index de662198..00000000 --- a/install/preflight/trap-errors.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -# Give people a chance to retry running the installation -catch_errors() { - echo -e "\n\e[31mOmarchy installation failed!\e[0m" - echo - echo "This command halted with exit code $?:" - echo "$BASH_COMMAND" - echo - echo "Get help from the community via QR code or at https://discord.gg/tXFUdasqhY" - echo " " - echo " █▀▀▀▀▀█ ▄ ▄ ▀▄▄▄█ █▀▀▀▀▀█ " - echo " █ ███ █ ▄▄▄▄▀▄▀▄▀ █ ███ █ " - echo " █ ▀▀▀ █ ▄█ ▄█▄▄▀ █ ▀▀▀ █ " - echo " ▀▀▀▀▀▀▀ ▀▄█ █ █ █ ▀▀▀▀▀▀▀ " - echo " ▀▀█▀▀▄▀▀▀▀▄█▀▀█ ▀ █ ▀ █ " - echo " █▄█ ▄▄▀▄▄ ▀ ▄ ▀█▄▄▄▄ ▀ ▀█ " - echo " ▄ ▄▀█ ▀▄▀▀▀▄ ▄█▀▄█▀▄▀▄▀█▀ " - echo " █ ▄▄█▄▀▄█ ▄▄▄ ▀ ▄▀██▀ ▀█ " - echo " ▀ ▀ ▀ █ ▀▄ ▀▀█▀▀▀█▄▀ " - echo " █▀▀▀▀▀█ ▀█ ▄▀▀ █ ▀ █▄▀██ " - echo " █ ███ █ █▀▄▄▀ █▀███▀█▄██▄ " - echo " █ ▀▀▀ █ ██ ▀ █▄█ ▄▄▄█▀ █ " - echo " ▀▀▀▀▀▀▀ ▀ ▀ ▀▀▀ ▀ ▀▀▀▀▀▀ " - echo " " - - echo "You can retry by running: bash ~/.local/share/omarchy/install.sh" -} - -trap catch_errors ERR diff --git a/migrations/1751134560.sh b/migrations/1751134560.sh index a8932f45..d34a2b60 100644 --- a/migrations/1751134560.sh +++ b/migrations/1751134560.sh @@ -9,6 +9,7 @@ omarchy-refresh-config uwsm/env echo -e "\n\e[31mOmarchy bins have been added to PATH (and OMARCHY_PATH is now system-wide).\nYou must immediately relaunch Hyprland or most Omarchy cmds won't work.\nPlease run Omarchy > Update again after the quick relaunch is complete.\e[0m" echo +mkdir -p ~/.local/state/omarchy/migrations gum confirm "Ready to relaunch Hyprland? (All applications will be closed)" && touch ~/.local/state/omarchy/migrations/1751134560.sh && uwsm stop diff --git a/migrations/1751134561.sh b/migrations/1751134561.sh index 367fac3c..46a7ebf2 100644 --- a/migrations/1751134561.sh +++ b/migrations/1751134561.sh @@ -1,7 +1,9 @@ echo "Add Omarchy Package Repository" +omarchy-refresh-pacman-mirrorlist + if ! grep -q "omarchy" /etc/pacman.conf; then - sudo sed -i '/^\[core\]/i [omarchy]\nSigLevel = Optional TrustAll\nServer = https:\/\/pkgs.omarchy.org\/$arch\/\n' /etc/pacman.conf + sudo sed -i '/^\[core\]/i [omarchy]\nSigLevel = Optional TrustAll\nServer = https:\/\/pkgs.omarchy.org\/$arch\n' /etc/pacman.conf sudo systemctl restart systemd-timesyncd sudo pacman -Syu --noconfirm fi diff --git a/migrations/1751135253.sh b/migrations/1751135253.sh index 92e91445..c0766574 100644 --- a/migrations/1751135253.sh +++ b/migrations/1751135253.sh @@ -1,5 +1,3 @@ echo "Add missing installation of bat (used by the ff alias)" -if ! command -v bat &>/dev/null; then - # Add missing installation of bat - sudo pacman -S --noconfirm --needed bat -fi + +omarchy-pkg-add bat diff --git a/migrations/1751510848.sh b/migrations/1751510848.sh index 8bdc855c..6b289d41 100644 --- a/migrations/1751510848.sh +++ b/migrations/1751510848.sh @@ -1,5 +1,3 @@ echo "Installing missing fd terminal tool for finding files" -if ! command -v fd &>/dev/null; then - sudo pacman -S --noconfirm --needed fd -fi +omarchy-pkg-add fd diff --git a/migrations/1751667620.sh b/migrations/1751667620.sh index a45252e7..d93c6008 100644 --- a/migrations/1751667620.sh +++ b/migrations/1751667620.sh @@ -1,8 +1,9 @@ echo "Switching from vlc to mpv for the default video player" -if ! command -v mpv &>/dev/null; then - sudo pacman -Rns --noconfirm vlc +if omarchy-cmd-missing mpv; then + omarchy-pkg-drop vlc rm ~/.local/share/applications/vlc.desktop - sudo pacman -S --noconfirm mpv + + omarchy-pkg-add mpv xdg-mime default mpv.desktop video/mp4 xdg-mime default mpv.desktop video/x-msvideo xdg-mime default mpv.desktop video/x-matroska diff --git a/migrations/1751672984.sh b/migrations/1751672984.sh index 9b0308a6..b2d9ecb0 100644 --- a/migrations/1751672984.sh +++ b/migrations/1751672984.sh @@ -1,5 +1,3 @@ echo "Add LocalSend as new default application" -if ! command -v localsend &>/dev/null; then - sudo pacman -S --noconfirm --needed localsend -fi +omarchy-pkg-add localsend diff --git a/migrations/1751679069.sh b/migrations/1751679069.sh index a2f437f3..abe68a4a 100644 --- a/migrations/1751679069.sh +++ b/migrations/1751679069.sh @@ -1,5 +1,3 @@ echo "Install ffmpegthumbnailer for video thumbnails in the file manager" -if ! command -v ffmpegthumbnailer &>/dev/null; then - sudo pacman -S --noconfirm --needed ffmpegthumbnailer -fi +omarchy-pkg-add ffmpegthumbnailer diff --git a/migrations/1751821819.sh b/migrations/1751821819.sh index f8d616f9..dc282c2e 100644 --- a/migrations/1751821819.sh +++ b/migrations/1751821819.sh @@ -1,5 +1,3 @@ echo "Install bash-completion" -if ! pacman -Q bash-completion &>/dev/null; then - sudo pacman -S --noconfirm --needed bash-completion -fi +omarchy-pkg-add bash-completion diff --git a/migrations/1751887718.sh b/migrations/1751887718.sh index ac1894f5..3d3f401b 100644 --- a/migrations/1751887718.sh +++ b/migrations/1751887718.sh @@ -1,6 +1,6 @@ echo "Install Impala as new wifi selection TUI" -if ! command -v impala &>/dev/null; then - sudo pacman -S --noconfirm --needed impala - echo "You need to update the Waybar config to use Impala Wi-Fi selector in top bar." + +if omarchy-cmd-missing impala; then + omarchy-pkg-add impala omarchy-refresh-waybar fi diff --git a/migrations/1752081088.sh b/migrations/1752081088.sh index 6eb49a27..727988fe 100644 --- a/migrations/1752081088.sh +++ b/migrations/1752081088.sh @@ -1,2 +1,3 @@ echo "Permanently fix F-keys on Apple-mode keyboards (like Lofree Flow84)" -source ~/.local/share/omarchy/install/config/hardware/fix-fkeys.sh + +source $OMARCHY_PATH/install/config/hardware/fix-fkeys.sh diff --git a/migrations/1752082381.sh b/migrations/1752082381.sh index 561fa7e7..e351fd9c 100644 --- a/migrations/1752082381.sh +++ b/migrations/1752082381.sh @@ -1,5 +1,3 @@ echo "Adding gnome-keyring to make 1password work with 2FA codes" -if ! command -v gnome-keyring &>/dev/null; then - sudo pacman -S --noconfirm --needed gnome-keyring -fi +omarchy-pkg-add gnome-keyring diff --git a/migrations/1752091783.sh b/migrations/1752091783.sh index 6d7160b8..b8b53061 100644 --- a/migrations/1752091783.sh +++ b/migrations/1752091783.sh @@ -1,4 +1,4 @@ echo "Install Plymouth splash screen" -sudo pacman -S --needed --noconfirm uwsm plymouth -source "$HOME/.local/share/omarchy/install/login/plymouth.sh" +omarchy-pkg-add uwsm plymouth +source "$OMARCHY_PATH/install/login/plymouth.sh" diff --git a/migrations/1752104271.sh b/migrations/1752104271.sh index a602fe38..dcbda813 100644 --- a/migrations/1752104271.sh +++ b/migrations/1752104271.sh @@ -1,4 +1,5 @@ echo "Switching to polkit-gnome for better fingerprint authentication compatibility" + if ! command -v /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 &>/dev/null; then sudo pacman -S --noconfirm --needed polkit-gnome systemctl --user stop hyprpolkitagent diff --git a/migrations/1752153188.sh b/migrations/1752153188.sh index fca5ebf0..ec4beea5 100644 --- a/migrations/1752153188.sh +++ b/migrations/1752153188.sh @@ -1,4 +1,5 @@ echo "Migrate to the modular implementation of hyprlock" + if [ -L ~/.config/hypr/hyprlock.conf ]; then rm ~/.config/hypr/hyprlock.conf cp ~/.local/share/omarchy/config/hypr/hyprlock.conf ~/.config/hypr/hyprlock.conf diff --git a/migrations/1752168292.sh b/migrations/1752168292.sh old mode 100755 new mode 100644 diff --git a/migrations/1752188554.sh b/migrations/1752188554.sh index ffec2a27..13c5d54c 100644 --- a/migrations/1752188554.sh +++ b/migrations/1752188554.sh @@ -1,7 +1,5 @@ echo "Update chromium.desktop to ensure we are always using wayland" -if [[ ! -f ~/.local/share/applications/chromium.desktop ]]; then - cp ~/.local/share/omarchy/applications/chromium.desktop ~/.local/share/applications/ - xdg-settings set default-web-browser chromium.desktop - xdg-mime default chromium.desktop x-scheme-handler/http - xdg-mime default chromium.desktop x-scheme-handler/https -fi + +xdg-settings set default-web-browser chromium.desktop +xdg-mime default chromium.desktop x-scheme-handler/http +xdg-mime default chromium.desktop x-scheme-handler/https diff --git a/migrations/1752251002.sh b/migrations/1752251002.sh index 39cb487a..cea7a613 100644 --- a/migrations/1752251002.sh +++ b/migrations/1752251002.sh @@ -1,4 +1,5 @@ echo "Migrate to the modular, variable-based implementation of waybar style.css" + if [ -L ~/.config/waybar/style.css ]; then rm ~/.config/waybar/style.css cp ~/.local/share/omarchy/config/waybar/style.css ~/.config/waybar/style.css diff --git a/migrations/1752292967.sh b/migrations/1752292967.sh index ad649ced..d587fc4c 100644 --- a/migrations/1752292967.sh +++ b/migrations/1752292967.sh @@ -1,5 +1,6 @@ echo "Update to use UWSM and seamless login" -if ! command -v uwsm &>/dev/null; then + +if omarchy-cmd-missing uwsm; then sudo rm -f /etc/systemd/system/getty@tty1.service.d/override.conf sudo rmdir /etc/systemd/system/getty@tty1.service.d/ 2>/dev/null || true @@ -14,5 +15,5 @@ if ! command -v uwsm &>/dev/null; then sed -i 's/^GTK_IM_MODULE=fcitx$//' "$HOME/.config/environment.d/fcitx.conf" fi - source ~/.local/share/omarchy/install/login/plymouth.sh + source $OMARCHY_PATH/install/login/plymouth.sh fi diff --git a/migrations/1752543801.sh b/migrations/1752543801.sh index d1e5bfd3..7c068add 100644 --- a/migrations/1752543801.sh +++ b/migrations/1752543801.sh @@ -1,3 +1,4 @@ echo "Add color and animation to pacman installs" + grep -q '^Color' /etc/pacman.conf || sudo sed -i '/^\[options\]/a Color' /etc/pacman.conf grep -q '^ILoveCandy' /etc/pacman.conf || sudo sed -i '/^\[options\]/a ILoveCandy' /etc/pacman.conf diff --git a/migrations/1752678932.sh b/migrations/1752678932.sh index 1aa8c858..915a74d5 100644 --- a/migrations/1752678932.sh +++ b/migrations/1752678932.sh @@ -1,5 +1,3 @@ echo "Install missing docker-buildx package for out-of-the-box Kamal compatibility" -if ! docker buildx version &>/dev/null; then - sudo pacman -S --noconfirm --needed docker-buildx -fi +omarchy-pkg-add docker-buildx diff --git a/migrations/1752725616.sh b/migrations/1752725616.sh index 5dddefe9..5f94c05e 100644 --- a/migrations/1752725616.sh +++ b/migrations/1752725616.sh @@ -1,4 +1,5 @@ echo "Make light themes possible" + if [[ -f ~/.local/share/applications/blueberry.desktop ]]; then rm -f ~/.local/share/applications/blueberry.desktop rm -f ~/.local/share/applications/org.pulseaudio.pavucontrol.desktop diff --git a/migrations/1752793122.sh b/migrations/1752793122.sh index fad0646b..9429d92b 100644 --- a/migrations/1752793122.sh +++ b/migrations/1752793122.sh @@ -1,4 +1,5 @@ echo "Rename waybar config file for syntax highlighting" + if [[ -f ~/.config/waybar/config ]]; then mv ~/.config/waybar/config ~/.config/waybar/config.jsonc fi diff --git a/migrations/1752797704.sh b/migrations/1752797704.sh index f51aa700..b59111fa 100644 --- a/migrations/1752797704.sh +++ b/migrations/1752797704.sh @@ -1,4 +1,5 @@ echo "Prevent docker from requiring network readiness on boot" + if [[ ! -f /etc/systemd/system/docker.service.d/no-block-boot.conf ]]; then sudo mkdir -p /etc/systemd/system/docker.service.d/ sudo tee /etc/systemd/system/docker.service.d/no-block-boot.conf <<'EOF' diff --git a/migrations/1752874371.sh b/migrations/1752874371.sh index 649adc77..669c3b7d 100644 --- a/migrations/1752874371.sh +++ b/migrations/1752874371.sh @@ -1,4 +1,5 @@ echo "Add Catppuccin Latte light theme" + if [[ ! -L "~/.config/omarchy/themes/catppuccin-latte" ]]; then ln -snf ~/.local/share/omarchy/themes/catppuccin-latte ~/.config/omarchy/themes/ fi diff --git a/migrations/1752885858.sh b/migrations/1752885858.sh index 87208786..2d2b25ac 100644 --- a/migrations/1752885858.sh +++ b/migrations/1752885858.sh @@ -1,5 +1,3 @@ echo "Install slurp + wl-screenrec for new ALT+PrintScreen screen recorder" -if ! command -v wl-screenrec &>/dev/null || ! command -v slurp &>/dev/null; then - sudo pacman -S --noconfirm --needed slurp wl-screenrec -fi +omarchy-pkg-add slurp wl-screenrec diff --git a/migrations/1752896442.sh b/migrations/1752896442.sh index 1b154e3c..f8fa9a8c 100644 --- a/migrations/1752896442.sh +++ b/migrations/1752896442.sh @@ -1,9 +1,8 @@ echo "Replace volume control GUI with a TUI" -if ! command -v wiremix &>/dev/null; then - sudo pacman -S --noconfirm --needed wiremix - sudo pacman -Rns --noconfirm pavucontrol - +if omarchy-cmd-missing wiremix; then + omarchy-pkg-add wiremix + omarchy-pkg-drop pavucontrol omarchy-refresh-applications omarchy-refresh-waybar fi diff --git a/migrations/1752897642.sh b/migrations/1752897642.sh index e1f844dd..1b4b1f81 100644 --- a/migrations/1752897642.sh +++ b/migrations/1752897642.sh @@ -1,4 +1,3 @@ echo "Remove needless fcitx5-configtool package" -if pacman -Qe fcitx5-configtool &>/dev/null; then - sudo pacman -Rns --noconfirm fcitx5-configtool -fi + +omarchy-pkg-drop fcitx5-configtool diff --git a/migrations/1752899588.sh b/migrations/1752899588.sh index ba778cd8..562c6bd2 100644 --- a/migrations/1752899588.sh +++ b/migrations/1752899588.sh @@ -1,2 +1,3 @@ echo "Update .config/hypr/hyprlock.conf to include failed attempt counter" + omarchy-refresh-hyprlock diff --git a/migrations/1752955912.sh b/migrations/1752955912.sh index 0933cb10..fa55477c 100644 --- a/migrations/1752955912.sh +++ b/migrations/1752955912.sh @@ -1,5 +1,3 @@ echo "Install satty for the new screenshot flow" -if ! command -v satty &>/dev/null; then - sudo pacman -S --noconfirm --needed satty -fi +omarchy-pkg-add satty diff --git a/migrations/1752981883.sh b/migrations/1752981883.sh index bac71ab0..34a53950 100644 --- a/migrations/1752981883.sh +++ b/migrations/1752981883.sh @@ -1,9 +1,9 @@ echo "Replace wofi with walker as the default launcher" -if ! command -v walker &>/dev/null; then - sudo pacman -S --noconfirm --needed walker-bin libqalculate +if omarchy-cmd-missing walker; then + omarchy-pkg-add walker-bin libqalculate - sudo pacman -Rns --noconfirm wofi + omarchy-pkg-drop wofi rm -rf ~/.config/wofi mkdir -p ~/.config/walker diff --git a/migrations/1753138691.sh b/migrations/1753138691.sh index 53f54719..d9197ba5 100644 --- a/migrations/1753138691.sh +++ b/migrations/1753138691.sh @@ -1,6 +1,6 @@ echo "Install swayOSD to show volume status" -if ! command -v swayosd-server &>/dev/null; then - sudo pacman -S --noconfirm --needed swayosd +if omarchy-cmd-missing swayosd-server; then + omarchy-pkg-add swayosd setsid uwsm app -- swayosd-server &>/dev/null & fi diff --git a/migrations/1753176520.sh b/migrations/1753176520.sh index e26abf2f..186b8a76 100644 --- a/migrations/1753176520.sh +++ b/migrations/1753176520.sh @@ -1,7 +1,3 @@ echo "Install wf-recorder for screen recording for nvidia" -if lspci | grep -qi 'nvidia'; then - if ! command -v wf-recorder &>/dev/null; then - sudo pacman -S --noconfirm --needed wf-recorder - fi -fi +omarchy-pkg-add wf-recorder diff --git a/migrations/1753224615.sh b/migrations/1753224615.sh old mode 100755 new mode 100644 diff --git a/migrations/1753352057.sh b/migrations/1753352057.sh deleted file mode 100755 index 3265f6a1..00000000 --- a/migrations/1753352057.sh +++ /dev/null @@ -1,18 +0,0 @@ -echo "Add Chaotic-AUR to get compiled binaries" - -if [[ "$(uname -m)" == "x86_64" ]] && ! grep -q '^\[chaotic-aur\]' /etc/pacman.conf; then - # Try installing Chaotic-AUR keyring and mirrorlist - if sudo pacman-key --recv-key 3056513887B78AEB && - sudo pacman-key --lsign-key 3056513887B78AEB && - sudo pacman -U --noconfirm 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst' && - sudo pacman -U --noconfirm 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-mirrorlist.pkg.tar.zst'; then - - # Add Chaotic-AUR repo to pacman config - echo -e '\n[chaotic-aur]\nInclude = /etc/pacman.d/chaotic-mirrorlist' | sudo tee -a /etc/pacman.conf >/dev/null - - # Refresh pacman package databases - sudo pacman -Syu --noconfirm - else - echo "Failed to install Chaotic-AUR, so won't include it in pacman config!" - fi -fi diff --git a/migrations/1753468218.sh b/migrations/1753468218.sh deleted file mode 100644 index 8fa3ba58..00000000 --- a/migrations/1753468218.sh +++ /dev/null @@ -1,5 +0,0 @@ -echo "Add Terminal Text Effects for rizzing Omarchy" - -if ! pacman -Q python-terminaltexteffects &>/dev/null; then - sudo pacman -S --noconfirm python-terminaltexteffects -fi diff --git a/migrations/1753495989.sh b/migrations/1753495989.sh index 5c0efcda..119b4324 100644 --- a/migrations/1753495989.sh +++ b/migrations/1753495989.sh @@ -1,5 +1,6 @@ echo "Allow updating of timezone by right-clicking on the clock (or running omarchy-cmd-tzupdate)" -if ! command -v tzupdate &>/dev/null; then - bash ~/.local/share/omarchy/install/config/timezones.sh + +if omarchy-cmd-missing tzupdate; then + bash "$OMARCHY_PATH/install/config/timezones.sh" omarchy-refresh-waybar fi diff --git a/migrations/1753558374.sh b/migrations/1753558374.sh deleted file mode 100644 index b961d3ed..00000000 --- a/migrations/1753558374.sh +++ /dev/null @@ -1,4 +0,0 @@ -echo "Update Walker config to include = as the leader key for the calculator" -if ! grep -q 'prefix = "="' ~/.config/walker/config.toml; then - omarchy-refresh-walker -fi diff --git a/migrations/1753998861.sh b/migrations/1753998861.sh deleted file mode 100644 index 4751dee5..00000000 --- a/migrations/1753998861.sh +++ /dev/null @@ -1,4 +0,0 @@ -echo "Update Walker config to include . as the leader key for the finder" -if ! grep -q 'prefix = "\."' ~/.config/walker/config.toml; then - omarchy-refresh-walker -fi diff --git a/migrations/1754208139.sh b/migrations/1754208139.sh deleted file mode 100644 index b95c7443..00000000 --- a/migrations/1754208139.sh +++ /dev/null @@ -1,5 +0,0 @@ -echo "Ensure screensaver doesn't start while the computer is locked" - -if ! grep -q "pidof hyprlock || omarchy-launch-screensaver" ~/.config/hypr/hypridle.conf; then - omarchy-refresh-hypridle -fi diff --git a/migrations/1754215439.sh b/migrations/1754215439.sh deleted file mode 100644 index 90651bb0..00000000 --- a/migrations/1754215439.sh +++ /dev/null @@ -1,5 +0,0 @@ -echo "Update app launcher config to allow enough entries to show all keybindings on SUPER+K" - -if ! grep "max_entries = 200" ~/.config/walker/config.toml; then - omarchy-refresh-walker -fi diff --git a/migrations/1754215533.sh b/migrations/1754215533.sh index 05a07743..2657b623 100644 --- a/migrations/1754215533.sh +++ b/migrations/1754215533.sh @@ -1,7 +1,7 @@ echo "Enable auto-discovery of network printers" if [[ ! -f /etc/systemd/resolved.conf.d/10-disable-multicast.conf ]]; then - sudo pacman -S --noconfirm avahi nss-mdns + omarchy-pkg-add avahi nss-mdns # Disable multicast dns in resolved. Avahi will provide this for better network printer discovery sudo mkdir -p /etc/systemd/resolved.conf.d @@ -10,7 +10,7 @@ if [[ ! -f /etc/systemd/resolved.conf.d/10-disable-multicast.conf ]]; then fi if ! grep -q '^CreateRemotePrinters Yes' /etc/cups/cups-browsed.conf; then - sudo pacman -S --noconfirm cups-browsed + omarchy-pkg-add cups-browsed # Enable automatically adding remote printers echo 'CreateRemotePrinters Yes' | sudo tee -a /etc/cups/cups-browsed.conf sudo systemctl enable --now cups-browsed.service diff --git a/migrations/1754221967.sh b/migrations/1754221967.sh index 7a135079..b1e42b7a 100644 --- a/migrations/1754221967.sh +++ b/migrations/1754221967.sh @@ -1,2 +1,3 @@ echo "Add support for accessing Android phone data via file manager" -sudo pacman -S --noconfirm --needed gvfs-mtp + +omarchy-pkg-add gvfs-mtp diff --git a/migrations/1754228679.sh b/migrations/1754228679.sh deleted file mode 100644 index 2a80234d..00000000 --- a/migrations/1754228679.sh +++ /dev/null @@ -1,2 +0,0 @@ -echo "Increase time before screensaver starts to 2.5 minutes (from 1 minute)" -omarchy-refresh-hypridle diff --git a/migrations/1754265453.sh b/migrations/1754265453.sh index 412d75e0..ab2d092d 100644 --- a/migrations/1754265453.sh +++ b/migrations/1754265453.sh @@ -1,2 +1,3 @@ echo "Add chromium-flags.conf" + omarchy-refresh-config chromium-flags.conf diff --git a/migrations/1754302123.sh b/migrations/1754302123.sh index 5e7ff598..b9b72ee7 100644 --- a/migrations/1754302123.sh +++ b/migrations/1754302123.sh @@ -1,4 +1,5 @@ echo "Change update-available icon in top bar from  to " + if grep -q '"format": "",' ~/.config/waybar/config.jsonc; then sed -i 's/"format": ""/"format": ""/' ~/.config/waybar/config.jsonc fi diff --git a/migrations/1754305112.sh b/migrations/1754305112.sh deleted file mode 100644 index e23ea5d9..00000000 --- a/migrations/1754305112.sh +++ /dev/null @@ -1,2 +0,0 @@ -echo "Restart Walker to pick up menu selections" -omarchy-restart-walker diff --git a/migrations/1754332200.sh b/migrations/1754332200.sh index fc9c3503..4e92daa4 100644 --- a/migrations/1754332200.sh +++ b/migrations/1754332200.sh @@ -1,2 +1,3 @@ echo "Remove old Omarchy TUI app now that we have the Omarchy Menu" -rm -rf ~/.local/share/applications/omarchy.desktop + +rm -f ~/.local/share/applications/omarchy.desktop diff --git a/migrations/1754509222.sh b/migrations/1754509222.sh index ced63c6d..48f3c850 100644 --- a/migrations/1754509222.sh +++ b/migrations/1754509222.sh @@ -1,3 +1,3 @@ echo "Add xmlstarlet needed for updating fonts via Omarchy menu" -sudo pacman -S --noconfirm --needed xmlstarlet +omarchy-pkg-add xmlstarlet diff --git a/migrations/1754666868.sh b/migrations/1754666868.sh deleted file mode 100644 index db311aed..00000000 --- a/migrations/1754666868.sh +++ /dev/null @@ -1,3 +0,0 @@ -echo "Update OS icon in About from Windows to Arch" - -omarchy-refresh-config fastfetch/config.jsonc diff --git a/migrations/1754668999.sh b/migrations/1754668999.sh index b7966ed9..7361dcd6 100644 --- a/migrations/1754668999.sh +++ b/migrations/1754668999.sh @@ -1,4 +1,3 @@ echo "Tune MTU probing for more reliable SSH" -# Solve common flakiness with SSH echo "net.ipv4.tcp_mtu_probing=1" | sudo tee -a /etc/sysctl.d/99-sysctl.conf diff --git a/migrations/1754679822.sh b/migrations/1754679822.sh deleted file mode 100644 index 3787c647..00000000 --- a/migrations/1754679822.sh +++ /dev/null @@ -1,5 +0,0 @@ -echo "Lock 1password on screen lock" - -if ! grep -q "omarchy-lock-screen" ~/.config/hypr/hypridle.conf; then - omarchy-refresh-hypridle -fi diff --git a/migrations/1754828680.sh b/migrations/1754828680.sh deleted file mode 100644 index 6deb7c44..00000000 --- a/migrations/1754828680.sh +++ /dev/null @@ -1,2 +0,0 @@ -echo "Update Walker config" -omarchy-refresh-walker diff --git a/migrations/1754860578.sh b/migrations/1754860578.sh index afd4beb8..c384c7af 100644 --- a/migrations/1754860578.sh +++ b/migrations/1754860578.sh @@ -1,4 +1,5 @@ echo "Update polkit policy to yield to fingerprint and fido2" + # If fprint exists in polkit, it was wrong and needs reset if [ -f /etc/pam.d/polkit-1 ] && grep -Fq 'pam_fprintd.so' /etc/pam.d/polkit-1; then sudo tee /etc/pam.d/polkit-1 >/dev/null <<'EOF' diff --git a/migrations/1754929475.sh b/migrations/1754929475.sh index f6089a89..ac4f650b 100644 --- a/migrations/1754929475.sh +++ b/migrations/1754929475.sh @@ -1,4 +1,5 @@ echo "Add start burst limit to login" + if [ -f /etc/systemd/system/omarchy-seamless-login.service ]; then cat </dev/null; then - echo "$NEW_CONFIG" | sudo tee /etc/docker/daemon.json >/dev/null + if grep -Fq "$ORIGINAL_CONFIG" /etc/docker/daemon.json 2>/dev/null; then + echo "$NEW_CONFIG" | sudo tee /etc/docker/daemon.json >/dev/null + fi + + # Expose systemd-resolved to our Docker network + echo -e '[Resolve]\nDNSStubListenerExtra=172.17.0.1' | sudo tee /etc/systemd/resolved.conf.d/20-docker-dns.conf >/dev/null + + sudo systemctl restart systemd-resolved + sudo systemctl restart docker fi - -# Expose systemd-resolved to our Docker network -echo -e '[Resolve]\nDNSStubListenerExtra=172.17.0.1' | sudo tee /etc/systemd/resolved.conf.d/20-docker-dns.conf >/dev/null - -sudo systemctl restart systemd-resolved -sudo systemctl restart docker diff --git a/migrations/1755109182.sh b/migrations/1755109182.sh old mode 100755 new mode 100644 index 352e342a..1908b94a --- a/migrations/1755109182.sh +++ b/migrations/1755109182.sh @@ -28,5 +28,4 @@ if [ -f /etc/systemd/resolved.conf ]; then echo "DNS configuration reset to use DHCP (router DNS)" echo "To use Cloudflare DNS, run: omarchy-setup-dns Cloudflare" -fi - +fi \ No newline at end of file diff --git a/migrations/1755164105.sh b/migrations/1755164105.sh index a17ac587..e4a3f384 100644 --- a/migrations/1755164105.sh +++ b/migrations/1755164105.sh @@ -1,17 +1,17 @@ echo "Switch to Omarchy Chromium for synchronized theme switching" -set_theme_colors() { - if [[ -f ~/.config/omarchy/current/theme/chromium.theme ]] && command -v chromium &>/dev/null; then - chromium --no-startup-window --set-theme-color="$(<~/.config/omarchy/current/theme/chromium.theme)" - else - # Use a default, neutral grey if theme doesn't have a color - chromium --no-startup-window --set-theme-color="28,32,39" - fi -} +if omarchy-cmd-present chromium; then + set_theme_colors() { + if [[ -f ~/.config/omarchy/current/theme/chromium.theme ]]; then + chromium --no-startup-window --set-theme-color="$(<~/.config/omarchy/current/theme/chromium.theme)" + else + # Use a default, neutral grey if theme doesn't have a color + chromium --no-startup-window --set-theme-color="28,32,39" + fi + } -if command -v chromium &>/dev/null; then - sudo pacman -Rns --noconfirm chromium || true - sudo pacman -S --noconfirm omarchy-chromium + omarchy-pkg-drop chromium + omarchy-pkg-add omarchy-chromium if pgrep -x chromium; then if gum confirm "Chromium must be restarted. Ready?"; then diff --git a/migrations/1755436367.sh b/migrations/1755436367.sh index b3de9b4b..e7c89706 100644 --- a/migrations/1755436367.sh +++ b/migrations/1755436367.sh @@ -1,6 +1,6 @@ echo "Add minimal starship prompt to terminal" -if ! command -v starship &>/dev/null; then - sudo pacman -S --noconfirm starship +if omarchy-cmd-missing starship; then + omarchy-pkg-add starship cp $OMARCHY_PATH/config/starship.toml ~/.config/starship.toml fi diff --git a/migrations/1755455095.sh b/migrations/1755455095.sh index 4aed9d56..2a929fe0 100644 --- a/migrations/1755455095.sh +++ b/migrations/1755455095.sh @@ -1,9 +1,3 @@ echo "Ensure TTE and dependencies are installed" -if ! pacman -Q python-poetry-core &>/dev/null; then - sudo pacman -S --noconfirm python-poetry-core -fi - -if ! pacman -Q python-terminaltexteffects &>/dev/null; then - sudo pacman -S --noconfirm python-terminaltexteffects -fi +omarchy-pkg-add python-poetry-core python-terminaltexteffects diff --git a/migrations/1755459930.sh b/migrations/1755459930.sh index 2b9c2f31..73af324c 100644 --- a/migrations/1755459930.sh +++ b/migrations/1755459930.sh @@ -1,5 +1,3 @@ echo "Add potentially missing dependency for power profile controls" -if ! pacman -Q python-gobject &>/dev/null; then - sudo pacman -S --noconfirm python-gobject -fi +omarchy-pkg-add python-gobject diff --git a/migrations/1755494432.sh b/migrations/1755494432.sh index 04bbe297..ae6cbc4d 100644 --- a/migrations/1755494432.sh +++ b/migrations/1755494432.sh @@ -1,3 +1,3 @@ echo "Disable USB autosuspend" -$OMARCHY_PATH/install/config/hardware/usb-autosuspend.sh +bash "$OMARCHY_PATH/install/config/hardware/usb-autosuspend.sh" diff --git a/migrations/1755507891.sh b/migrations/1755507891.sh old mode 100755 new mode 100644 diff --git a/migrations/1755512354.sh b/migrations/1755512354.sh deleted file mode 100644 index ffbee83f..00000000 --- a/migrations/1755512354.sh +++ /dev/null @@ -1,3 +0,0 @@ -echo "Update fastfetch config to include current theme name and colors" - -omarchy-refresh-config fastfetch/config.jsonc diff --git a/migrations/1755527220.sh b/migrations/1755527220.sh deleted file mode 100644 index 845c3fe8..00000000 --- a/migrations/1755527220.sh +++ /dev/null @@ -1,3 +0,0 @@ -echo "Turn on the screensaver by default again now that TTE has been fixed" - -omarchy-refresh-hypridle diff --git a/migrations/1755548643.sh b/migrations/1755548643.sh index 3f5367b9..f98b730b 100644 --- a/migrations/1755548643.sh +++ b/migrations/1755548643.sh @@ -1,5 +1,3 @@ echo "Install wf-recorder for intel based device" -if lspci | grep -Eqi 'nvidia|intel.*graphics'; then - sudo pacman -S --noconfirm --needed wf-recorder -fi +omarchy-pkg-add wf-recorder diff --git a/migrations/1755865046.sh b/migrations/1755865046.sh index b07766a5..c48962e5 100644 --- a/migrations/1755865046.sh +++ b/migrations/1755865046.sh @@ -1,6 +1,4 @@ echo "Switch from lazydocker-bin to lazydocker official" -if pacman -Q lazydocker-bin >/dev/null; then - sudo pacman -Rns --noconfirm lazydocker-bin - sudo pacman -S --noconfirm lazydocker -fi +omarchy-pkg-drop lazydocker-bin +omarchy-pkg-add lazydocker diff --git a/migrations/1755878717.sh b/migrations/1755878717.sh deleted file mode 100644 index 164fe6a6..00000000 --- a/migrations/1755878717.sh +++ /dev/null @@ -1,5 +0,0 @@ -echo "Ensure Docker DNS requests are not blocked by ufw firewall" - -sudo ufw disable -sudo ufw allow in proto udp from 172.16.0.0/12 to 172.17.0.1 port 53 comment 'allow-docker-dns' -sudo ufw enable diff --git a/migrations/1755930114.sh b/migrations/1755930114.sh index 90d44e5e..fd491d69 100644 --- a/migrations/1755930114.sh +++ b/migrations/1755930114.sh @@ -3,6 +3,3 @@ echo "Add new Omarchy Menu icon to Waybar" mkdir -p ~/.local/share/fonts cp ~/.local/share/omarchy/config/omarchy.ttf ~/.local/share/fonts/ fc-cache - -echo -gum confirm "Replace current Waybar config (backup will be made)?" && omarchy-refresh-waybar diff --git a/migrations/1756060611.sh b/migrations/1756060611.sh index fd226207..b1bc95da 100644 --- a/migrations/1756060611.sh +++ b/migrations/1756060611.sh @@ -1,15 +1,13 @@ echo "Migrate AUR packages to official repos where possible" reinstall_package_opr() { - if pacman -Q $1 >/dev/null; then + if omarchy-pkg-present $1; then sudo pacman -Rns --noconfirm $1 sudo pacman -S --noconfirm ${2:-$1} fi } -if pacman -Q yay-bin-debug >/dev/null; then - sudo pacman -Rns --noconfirm yay-bin-debug -fi +omarchy-pkg-drop yay-bin-debug reinstall_package_opr yay-bin yay reinstall_package_opr obsidian-bin obsidian diff --git a/migrations/1756062808.sh b/migrations/1756062808.sh deleted file mode 100644 index 36183207..00000000 --- a/migrations/1756062808.sh +++ /dev/null @@ -1,2 +0,0 @@ -echo "Update Hypridle to prevent flash of unlocked screen after sleep" -omarchy-refresh-hypridle diff --git a/migrations/1756115364.sh b/migrations/1756115364.sh index cdd8113a..a7c3925e 100644 --- a/migrations/1756115364.sh +++ b/migrations/1756115364.sh @@ -1,6 +1,6 @@ echo "Replace buggy native Zoom client with webapp" -if pacman -Q zoom >/dev/null; then - sudo pacman -Rns --noconfirm zoom +if omarchy-pkg-present zoom; then + omarchy-pkg-drop zoom omarchy-webapp-install "Zoom" https://app.zoom.us/wc/home https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/zoom.png fi diff --git a/migrations/1756205202.sh b/migrations/1756205202.sh new file mode 100644 index 00000000..8d8cc73a --- /dev/null +++ b/migrations/1756205202.sh @@ -0,0 +1,7 @@ +echo "Symlink files needed for Nautilus navigation icons" + +sudo ln -snf /usr/share/icons/Adwaita/symbolic/actions/go-previous-symbolic.svg /usr/share/icons/Yaru/scalable/actions/go-previous-symbolic.svg +sudo ln -snf /usr/share/icons/Adwaita/symbolic/actions/go-next-symbolic.svg /usr/share/icons/Yaru/scalable/actions/go-next-symbolic.svg +sudo gtk-update-icon-cache /usr/share/icons/Yaru +pkill -x nautilus || true + diff --git a/migrations/1756360551.sh b/migrations/1756360551.sh deleted file mode 100644 index ac9911a6..00000000 --- a/migrations/1756360551.sh +++ /dev/null @@ -1,6 +0,0 @@ -echo "Move Omarchy Package Repository after Arch core/extra/multilib for extra security on resolution" - -sudo cp /etc/pacman.conf /etc/pacman.conf.bak -sudo sed -i '/\[omarchy\]/,+2 d' /etc/pacman.conf -sudo sed -i '/\[chaotic-aur\]/i\[omarchy]\nSigLevel = Optional TrustAll\nServer = https://pkgs.omarchy.org/$arch/\n' /etc/pacman.conf || - sudo bash -c 'echo -e "\n[omarchy]\nSigLevel = Optional TrustAll\nServer = https://pkgs.omarchy.org/\$arch/" >> /etc/pacman.conf' diff --git a/migrations/1756360552.sh b/migrations/1756360552.sh new file mode 100644 index 00000000..056853d4 --- /dev/null +++ b/migrations/1756360552.sh @@ -0,0 +1,7 @@ +echo "Move Omarchy Package Repository after Arch core/extra/multilib and remove AUR" + +sudo cp /etc/pacman.conf /etc/pacman.conf.bak +sudo sed -i '/\[omarchy\]/,+2 d' /etc/pacman.conf +sudo sed -i '/\[chaotic-aur\]/,+2 d' /etc/pacman.conf +sudo bash -c 'echo -e "\n[omarchy]\nSigLevel = Optional TrustAll\nServer = https://pkgs.omarchy.org/\$arch" >> /etc/pacman.conf' +sudo pacman -Syu --noconfirm diff --git a/migrations/1756363651.sh b/migrations/1756363651.sh deleted file mode 100644 index 3df0985c..00000000 --- a/migrations/1756363651.sh +++ /dev/null @@ -1,3 +0,0 @@ -echo "Update About config to include the Omarchy branch name" - -omarchy-refresh-fastfetch diff --git a/migrations/1756410649.sh b/migrations/1756410649.sh new file mode 100644 index 00000000..7347f9b2 --- /dev/null +++ b/migrations/1756410649.sh @@ -0,0 +1,7 @@ +echo "Remove any Chaotic-AUR infrastructure packages" + +omarchy-pkg-drop chaotic-keyring chaotic-mirrorlist + +if sudo pacman-key --list-keys 3056513887B78AEB >/dev/null 2>&1; then + sudo pacman-key --delete 3056513887B78AEB +fi diff --git a/migrations/1756411333.sh b/migrations/1756411333.sh new file mode 100644 index 00000000..c44e9ce1 --- /dev/null +++ b/migrations/1756411333.sh @@ -0,0 +1,3 @@ +echo "Use new Omarchy mirror as default" + +omarchy-refresh-pacman-mirrorlist diff --git a/migrations/1756411865.sh b/migrations/1756411865.sh new file mode 100644 index 00000000..8dcf8ef2 --- /dev/null +++ b/migrations/1756411865.sh @@ -0,0 +1,3 @@ +echo "Add back ttf-ia-writer if it was missing" + +omarchy-pkg-add ttf-ia-writer diff --git a/migrations/1756491748.sh b/migrations/1756491748.sh new file mode 100644 index 00000000..801f82a9 --- /dev/null +++ b/migrations/1756491748.sh @@ -0,0 +1,6 @@ +echo "Removing UseDNS=no from network files to fix DNS issue" + +for file in /etc/systemd/network/*.network; do + [[ -f "$file" ]] || continue + sudo sed -i '/^UseDNS=no/d' "$file" +done \ No newline at end of file diff --git a/migrations/1756494998.sh b/migrations/1756494998.sh new file mode 100644 index 00000000..e25f38db --- /dev/null +++ b/migrations/1756494998.sh @@ -0,0 +1,3 @@ +echo "Remove opacity from alacritty.toml so Hyprland can control fully" + +sed -i '/opacity = 0.98/d' ~/.config/alacritty/alacritty.toml diff --git a/migrations/1756507384.sh b/migrations/1756507384.sh new file mode 100644 index 00000000..77c640e8 --- /dev/null +++ b/migrations/1756507384.sh @@ -0,0 +1,4 @@ +echo "Replace JetBrains Mono font with the Nerd Font edition" + +omarchy-pkg-add ttf-jetbrains-mono-nerd +omarchy-pkg-drop ttf-jetbrains-mono diff --git a/migrations/1756556731.sh b/migrations/1756556731.sh new file mode 100644 index 00000000..477b754c --- /dev/null +++ b/migrations/1756556731.sh @@ -0,0 +1,3 @@ +echo "Add Samba network drive support to the file manager" + +omarchy-pkg-add gvfs-smb diff --git a/migrations/1756627168.sh b/migrations/1756627168.sh new file mode 100644 index 00000000..751cd194 --- /dev/null +++ b/migrations/1756627168.sh @@ -0,0 +1,3 @@ +echo "Include OS Age and Uptime icons in About" + +omarchy-refresh-fastfetch diff --git a/migrations/1756629295.sh b/migrations/1756629295.sh new file mode 100644 index 00000000..8f0bea6d --- /dev/null +++ b/migrations/1756629295.sh @@ -0,0 +1,3 @@ +echo "Ensure qt5-wayland is installed so KeepassXC, Nextcloud, Sqlite Browser, and other apps display correctly" + +omarchy-pkg-add qt5-wayland diff --git a/migrations/1756642681.sh b/migrations/1756642681.sh new file mode 100644 index 00000000..d0117d2d --- /dev/null +++ b/migrations/1756642681.sh @@ -0,0 +1,3 @@ +echo "Fix audio input on AMD Framework laptops" + +source $OMARCHY_PATH/install/config/hardware/fix-f13-amd-audio-input.sh || true diff --git a/migrations/1756650507.sh b/migrations/1756650507.sh new file mode 100644 index 00000000..7ed6cec7 --- /dev/null +++ b/migrations/1756650507.sh @@ -0,0 +1,5 @@ +echo "Fix JetBrains font setting" + +if [[ $(omarchy-font-current) == JetBrains* ]]; then + omarchy-font-set "JetBrainsMono Nerd Font" +fi diff --git a/migrations/1756911131.sh b/migrations/1756911131.sh new file mode 100644 index 00000000..6747ab06 --- /dev/null +++ b/migrations/1756911131.sh @@ -0,0 +1,11 @@ +echo "Enable UFW systemd service for existing installations" + +if omarchy-cmd-present ufw; then + if sudo ufw status | grep -q "Status: active\|22/tcp\|53317"; then + if ! systemctl is-enabled ufw >/dev/null 2>&1; then + sudo systemctl enable ufw --now + echo "UFW systemd service enabled" + fi + fi +fi + diff --git a/migrations/1757273064.sh b/migrations/1757273064.sh new file mode 100644 index 00000000..d9664d99 --- /dev/null +++ b/migrations/1757273064.sh @@ -0,0 +1,4 @@ +echo "Allow Image Viewer to see all images in directory and use arrow keys to navigate" + +cp -f "$HOME/.local/share/omarchy/applications/imv.desktop" "$HOME/.local/share/applications/imv.desktop" + diff --git a/migrations/1757279511.sh b/migrations/1757279511.sh new file mode 100644 index 00000000..dc4588c1 --- /dev/null +++ b/migrations/1757279511.sh @@ -0,0 +1,6 @@ +echo "Add locale to the waybar clock format" + +sed -i \ + -e 's/{:%A %H:%M}/{:L%A %H:%M}/' \ + -e 's/{:%d %B W%V %Y}/{:L%d %B W%V %Y}/' \ + "$HOME/.config/waybar/config.jsonc" \ No newline at end of file diff --git a/migrations/1757361127.sh b/migrations/1757361127.sh new file mode 100644 index 00000000..5c23e005 --- /dev/null +++ b/migrations/1757361127.sh @@ -0,0 +1,8 @@ +echo "Fix DHCP DNS to allow VPN DNS override" + +if [ -f /etc/systemd/resolved.conf ]; then + if grep -q "^DNS=$" /etc/systemd/resolved.conf && grep -q "^FallbackDNS=$" /etc/systemd/resolved.conf; then + sudo sed -i '/^DNS=$/d; /^FallbackDNS=$/d' /etc/systemd/resolved.conf + sudo systemctl restart systemd-resolved + fi +fi \ No newline at end of file diff --git a/migrations/1757361128.sh b/migrations/1757361128.sh new file mode 100644 index 00000000..b6c8413e --- /dev/null +++ b/migrations/1757361128.sh @@ -0,0 +1,7 @@ +echo "Enable mDNS resolution for existing Avahi installations" + +if systemctl is-enabled avahi-daemon.service >/dev/null 2>&1; then + if ! grep -q "mdns_minimal" /etc/nsswitch.conf; then + sudo sed -i 's/^hosts:.*/hosts: mymachines mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns/' /etc/nsswitch.conf + fi +fi \ No newline at end of file diff --git a/migrations/1757435811.sh b/migrations/1757435811.sh new file mode 100644 index 00000000..8961559d --- /dev/null +++ b/migrations/1757435811.sh @@ -0,0 +1,3 @@ +echo "Copy Omarchy default app icons to .local/share/icons" + +source $OMARCHY_PATH/install/packaging/icons.sh diff --git a/migrations/1757435812.sh b/migrations/1757435812.sh new file mode 100644 index 00000000..14b308aa --- /dev/null +++ b/migrations/1757435812.sh @@ -0,0 +1,6 @@ +echo "Update Zoom webapp to handle zoommtg:// and zoomus:// protocol links" + +if [[ -f ~/.local/share/applications/Zoom.desktop ]]; then + omarchy-webapp-remove Zoom + omarchy-webapp-install Zoom https://app.zoom.us/wc/home Zoom.png "omarchy-webapp-handler-zoom %u" "x-scheme-handler/zoommtg;x-scheme-handler/zoomus" +fi diff --git a/migrations/1757483378.sh b/migrations/1757483378.sh new file mode 100644 index 00000000..999e4f06 --- /dev/null +++ b/migrations/1757483378.sh @@ -0,0 +1,4 @@ +echo "6Ghz Wi-Fi + Intel graphics acceleration for existing installations" + +bash "$OMARCHY_PATH/install/config/hardware/set-wireless-regdom.sh" +bash "$OMARCHY_PATH/install/config/hardware/intel.sh" diff --git a/migrations/1757511571.sh b/migrations/1757511571.sh new file mode 100644 index 00000000..7753a28e --- /dev/null +++ b/migrations/1757511571.sh @@ -0,0 +1,3 @@ +echo "Add screen recording indicator to Waybar" + +gum confirm "Replace current Waybar config (backup will be made)?" && omarchy-refresh-waybar diff --git a/migrations/1757512135.sh b/migrations/1757512135.sh new file mode 100644 index 00000000..a7314f66 --- /dev/null +++ b/migrations/1757512135.sh @@ -0,0 +1,5 @@ +echo "Make it possible to remove update-available icon with signal in Waybar" + +if ! grep -q '"signal": 7' ~/.config/waybar/config.jsonc; then + sed -i '/"tooltip-format": "Omarchy update available",/a\ "signal": 7,' ~/.config/waybar/config.jsonc +fi diff --git a/migrations/1757515650.sh b/migrations/1757515650.sh new file mode 100644 index 00000000..0087257a --- /dev/null +++ b/migrations/1757515650.sh @@ -0,0 +1,2 @@ +echo "Update plymouth theme to avoid freetype2 issue that broke the styled login screen" +omarchy-refresh-plymouth diff --git a/migrations/1757783204.sh b/migrations/1757783204.sh new file mode 100644 index 00000000..e5cc9b90 --- /dev/null +++ b/migrations/1757783204.sh @@ -0,0 +1,9 @@ +echo "Create ~/Work with ./bin in the path for contained projects" + +mise_config="$HOME/Work/.mise.toml" + +if [[ -f $mise_config ]]; then + cp $mise_config "$mise_config.bak.$(date +%s)" +fi + +source "$OMARCHY_PATH/install/config/mise-work.sh" diff --git a/migrations/1757861484.sh b/migrations/1757861484.sh new file mode 100644 index 00000000..fa4cec99 --- /dev/null +++ b/migrations/1757861484.sh @@ -0,0 +1,3 @@ +echo "Add a blurred background to the lock screen" + +omarchy-refresh-hyprlock diff --git a/themes/catppuccin-latte/mako.ini b/themes/catppuccin-latte/mako.ini index ce8b8f35..6461da0e 100644 --- a/themes/catppuccin-latte/mako.ini +++ b/themes/catppuccin-latte/mako.ini @@ -1,25 +1,10 @@ +include=~/.local/share/omarchy/default/mako/core.ini + text-color=#4c4f69 border-color=#1e66f5 background-color=#eff1f5 -width=420 -height=110 padding=10 border-size=2 font=Liberation Sans 11 -anchor=top-right -outer-margin=20 -default-timeout=5000 max-icon-size=32 - -[app-name=Spotify] -invisible=1 - -[mode=do-not-disturb] -invisible=true - -[mode=do-not-disturb app-name=notify-send] -invisible=false - - -[urgency=critical] -default-timeout=0 +outer-margin=20 \ No newline at end of file diff --git a/themes/catppuccin-latte/preview.png b/themes/catppuccin-latte/preview.png new file mode 100644 index 00000000..4c594da8 Binary files /dev/null and b/themes/catppuccin-latte/preview.png differ diff --git a/themes/catppuccin/mako.ini b/themes/catppuccin/mako.ini index e1caf538..dc5f9c64 100644 --- a/themes/catppuccin/mako.ini +++ b/themes/catppuccin/mako.ini @@ -1,24 +1,10 @@ +include=~/.local/share/omarchy/default/mako/core.ini + text-color=#cad3f5 border-color=#c6d0f5 background-color=#24273a -width=420 -height=110 padding=10 border-size=2 font=Liberation Sans 11 -anchor=top-right -outer-margin=20 -default-timeout=5000 max-icon-size=32 - -[app-name=Spotify] -invisible=1 - -[mode=do-not-disturb] -invisible=true - -[mode=do-not-disturb app-name=notify-send] -invisible=false - -[urgency=critical] -default-timeout=0 +outer-margin=20 \ No newline at end of file diff --git a/themes/catppuccin/preview.png b/themes/catppuccin/preview.png new file mode 100644 index 00000000..019de1d8 Binary files /dev/null and b/themes/catppuccin/preview.png differ diff --git a/themes/everforest/mako.ini b/themes/everforest/mako.ini index a0836101..05b50e86 100644 --- a/themes/everforest/mako.ini +++ b/themes/everforest/mako.ini @@ -1,24 +1,10 @@ +include=~/.local/share/omarchy/default/mako/core.ini + text-color=#d3c6aa border-color=#d3c6aa background-color=#2d353b -width=420 -height=110 padding=10 border-size=2 font=Liberation Sans 11 -anchor=top-right -outer-margin=20 -default-timeout=5000 max-icon-size=32 - -[app-name=Spotify] -invisible=1 - -[mode=do-not-disturb] -invisible=true - -[mode=do-not-disturb app-name=notify-send] -invisible=false - -[urgency=critical] -default-timeout=0 +outer-margin=20 \ No newline at end of file diff --git a/themes/everforest/preview.png b/themes/everforest/preview.png new file mode 100644 index 00000000..113396cc Binary files /dev/null and b/themes/everforest/preview.png differ diff --git a/themes/gruvbox/mako.ini b/themes/gruvbox/mako.ini index 2d70b15b..669c6f5a 100644 --- a/themes/gruvbox/mako.ini +++ b/themes/gruvbox/mako.ini @@ -1,24 +1,10 @@ +include=~/.local/share/omarchy/default/mako/core.ini + text-color=#d4be98 border-color=#a89984 background-color=#282828 -width=420 -height=110 padding=10 border-size=2 font=Liberation Sans 11 -anchor=top-right -outer-margin=20 -default-timeout=5000 max-icon-size=32 - -[app-name=Spotify] -invisible=1 - -[mode=do-not-disturb] -invisible=true - -[mode=do-not-disturb app-name=notify-send] -invisible=false - -[urgency=critical] -default-timeout=0 +outer-margin=20 \ No newline at end of file diff --git a/themes/gruvbox/preview.png b/themes/gruvbox/preview.png new file mode 100644 index 00000000..61d13c3f Binary files /dev/null and b/themes/gruvbox/preview.png differ diff --git a/themes/kanagawa/hyprland.conf b/themes/kanagawa/hyprland.conf index 4972f149..a3dc2063 100644 --- a/themes/kanagawa/hyprland.conf +++ b/themes/kanagawa/hyprland.conf @@ -1,3 +1,6 @@ general { col.active_border = rgb(dcd7ba) } + +# Kanagawa backdrop is too strong for detault opacity +windowrule = opacity 0.98 0.95, class:Alacritty diff --git a/themes/kanagawa/mako.ini b/themes/kanagawa/mako.ini index d3ad11c3..fe944d8a 100644 --- a/themes/kanagawa/mako.ini +++ b/themes/kanagawa/mako.ini @@ -1,24 +1,10 @@ +include=~/.local/share/omarchy/default/mako/core.ini + text-color=#dcd7ba border-color=#dcd7ba background-color=#1f1f28 -width=420 -height=110 padding=10 border-size=2 font=Liberation Sans 11 -anchor=top-right -outer-margin=20 -default-timeout=5000 max-icon-size=32 - -[app-name=Spotify] -invisible=1 - -[mode=do-not-disturb] -invisible=true - -[mode=do-not-disturb app-name=notify-send] -invisible=false - -[urgency=critical] -default-timeout=0 +outer-margin=20 \ No newline at end of file diff --git a/themes/kanagawa/preview.png b/themes/kanagawa/preview.png new file mode 100644 index 00000000..e75e1189 Binary files /dev/null and b/themes/kanagawa/preview.png differ diff --git a/themes/matte-black/backgrounds/0-ship-at-sea.jpg b/themes/matte-black/backgrounds/0-ship-at-sea.jpg new file mode 100644 index 00000000..4375ee2b Binary files /dev/null and b/themes/matte-black/backgrounds/0-ship-at-sea.jpg differ diff --git a/themes/matte-black/mako.ini b/themes/matte-black/mako.ini index 1af552ef..a0e6653b 100644 --- a/themes/matte-black/mako.ini +++ b/themes/matte-black/mako.ini @@ -1,24 +1,10 @@ +include=~/.local/share/omarchy/default/mako/core.ini + text-color=#8a8a8d border-color=#8A8A8D background-color=#1e1e1e -width=420 -height=110 padding=10 border-size=2 font=Liberation Sans 11 -anchor=top-right -outer-margin=20 -default-timeout=5000 max-icon-size=32 - -[app-name=Spotify] -invisible=1 - -[mode=do-not-disturb] -invisible=true - -[mode=do-not-disturb app-name=notify-send] -invisible=false - -[urgency=critical] -default-timeout=0 +outer-margin=20 diff --git a/themes/matte-black/preview.png b/themes/matte-black/preview.png new file mode 100644 index 00000000..63a7ceaf Binary files /dev/null and b/themes/matte-black/preview.png differ diff --git a/themes/nord/mako.ini b/themes/nord/mako.ini index 8c3c3193..2976506d 100644 --- a/themes/nord/mako.ini +++ b/themes/nord/mako.ini @@ -1,24 +1,10 @@ +include=~/.local/share/omarchy/default/mako/core.ini + text-color=#d8dee9 border-color=#D8DEE9 background-color=#2e3440 -width=420 -height=110 padding=10 border-size=2 font=Liberation Sans 11 -anchor=top-right -outer-margin=20 -default-timeout=5000 max-icon-size=32 - -[app-name=Spotify] -invisible=1 - -[mode=do-not-disturb] -invisible=true - -[mode=do-not-disturb app-name=notify-send] -invisible=false - -[urgency=critical] -default-timeout=0 +outer-margin=20 \ No newline at end of file diff --git a/themes/nord/preview.png b/themes/nord/preview.png new file mode 100644 index 00000000..4e36427f Binary files /dev/null and b/themes/nord/preview.png differ diff --git a/themes/osaka-jade/mako.ini b/themes/osaka-jade/mako.ini index c45635de..44897998 100644 --- a/themes/osaka-jade/mako.ini +++ b/themes/osaka-jade/mako.ini @@ -1,24 +1,10 @@ +include=~/.local/share/omarchy/default/mako/core.ini + text-color=#C1C497 border-color=#214237 background-color=#11221C -width=420 -height=110 padding=10 border-size=2 font=Liberation Sans 12 -anchor=top-right -outer-margin=5 -default-timeout=5000 max-icon-size=32 - -[app-name=Spotify] -invisible=1 - -[mode=do-not-disturb] -invisible=true - -[mode=do-not-disturb app-name=notify-send] -invisible=false - -[urgency=critical] -default-timeout=0 +outer-margin=5 \ No newline at end of file diff --git a/themes/osaka-jade/preview.png b/themes/osaka-jade/preview.png new file mode 100644 index 00000000..bd99eed0 Binary files /dev/null and b/themes/osaka-jade/preview.png differ diff --git a/themes/ristretto/alacritty.toml b/themes/ristretto/alacritty.toml index c716798a..45236efd 100644 --- a/themes/ristretto/alacritty.toml +++ b/themes/ristretto/alacritty.toml @@ -22,7 +22,7 @@ white = "#f1e5e7" [colors.cursor] cursor = '#c3b7b8' -text = '#c3b7b8' +text = '#2c2525' [colors.primary] background = '#2c2525' diff --git a/themes/ristretto/mako.ini b/themes/ristretto/mako.ini index 7af1812b..a88e281b 100644 --- a/themes/ristretto/mako.ini +++ b/themes/ristretto/mako.ini @@ -1,24 +1,10 @@ +include=~/.local/share/omarchy/default/mako/core.ini + text-color=#e6d9db border-color=#e6d9db background-color=#2c2525 -width=420 -height=110 padding=10 border-size=2 font=Liberation Sans 11 -anchor=top-right -outer-margin=20 -default-timeout=5000 max-icon-size=32 - -[app-name=Spotify] -invisible=1 - -[mode=do-not-disturb] -invisible=true - -[mode=do-not-disturb app-name=notify-send] -invisible=false - -[urgency=critical] -default-timeout=0 +outer-margin=20 \ No newline at end of file diff --git a/themes/ristretto/preview.png b/themes/ristretto/preview.png new file mode 100644 index 00000000..d4ab5ca8 Binary files /dev/null and b/themes/ristretto/preview.png differ diff --git a/themes/rose-pine/mako.ini b/themes/rose-pine/mako.ini index 65aef345..10f76e58 100644 --- a/themes/rose-pine/mako.ini +++ b/themes/rose-pine/mako.ini @@ -1,24 +1,10 @@ +include=~/.local/share/omarchy/default/mako/core.ini + text-color=#575279 border-color=#575279 background-color=#faf4ed -width=420 -height=110 padding=10 border-size=2 font=Liberation Sans 11 -anchor=top-right -outer-margin=20 -default-timeout=5000 max-icon-size=32 - -[app-name=Spotify] -invisible=1 - -[mode=do-not-disturb] -invisible=true - -[mode=do-not-disturb app-name=notify-send] -invisible=false - -[urgency=critical] -default-timeout=0 +outer-margin=20 \ No newline at end of file diff --git a/themes/rose-pine/preview.png b/themes/rose-pine/preview.png new file mode 100644 index 00000000..02d85d08 Binary files /dev/null and b/themes/rose-pine/preview.png differ diff --git a/themes/tokyo-night/mako.ini b/themes/tokyo-night/mako.ini index bf76a33b..c0fae2eb 100644 --- a/themes/tokyo-night/mako.ini +++ b/themes/tokyo-night/mako.ini @@ -1,24 +1,10 @@ +include=~/.local/share/omarchy/default/mako/core.ini + text-color=#a9b1d6 border-color=#33ccff background-color=#1a1b26 -width=420 -height=110 padding=10 border-size=2 font=Liberation Sans 11 -anchor=top-right -outer-margin=20 -default-timeout=5000 max-icon-size=32 - -[app-name=Spotify] -invisible=1 - -[mode=do-not-disturb] -invisible=true - -[mode=do-not-disturb app-name=notify-send] -invisible=false - -[urgency=critical] -default-timeout=0 +outer-margin=20 \ No newline at end of file diff --git a/themes/tokyo-night/preview.png b/themes/tokyo-night/preview.png new file mode 100644 index 00000000..2c0eb4fa Binary files /dev/null and b/themes/tokyo-night/preview.png differ