diff --git a/bin/omarchy b/bin/omarchy index 7e7931d..a013a0c 100755 --- a/bin/omarchy +++ b/bin/omarchy @@ -12,10 +12,15 @@ show_ascii_art() { main_menu() { show_ascii_art - local options=("Theme" "Setup" "Update" "Manual" "Exit") + local options=("Theme" "Font" "Setup" "Update" "Manual" "Exit") choice=$(printf "%s\n" "${options[@]}" | gum choose --header "") || exit 0 case "$choice" in Theme) theme_menu ;; + Font) + omarchy-font-menu + ack_command + main_menu + ;; Update) update_menu ;; Setup) setup_menu ;; Manual) open_manual ;; @@ -53,10 +58,11 @@ update_menu() { theme_menu() { show_ascii_art - local menu=("Pick" "Install" "Remove" "Back") + local menu=("Pick" "Install" "Update" "Remove" "Back") local commands=( "omarchy-theme-menu" "install_theme_prompt" + "omarchy-theme-update" "remove_theme_prompt" "main_menu" ) diff --git a/bin/omarchy-font-menu b/bin/omarchy-font-menu new file mode 100755 index 0000000..1c74e8e --- /dev/null +++ b/bin/omarchy-font-menu @@ -0,0 +1,12 @@ +#!/bin/bash + +font=$( + fc-list :spacing=100 -f "%{family[0]}\n" | + grep -v -i -E 'emoji|signwriting' | + sort -u | + gum choose --header "Choose terminal font" +) + +if [[ -n "$font" ]]; then + sed -i "s/family = \".*\"/family = \"$font\"/g" ~/.config/alacritty/alacritty.toml +fi diff --git a/bin/omarchy-refresh-config b/bin/omarchy-refresh-config new file mode 100755 index 0000000..82641d5 --- /dev/null +++ b/bin/omarchy-refresh-config @@ -0,0 +1,30 @@ +#!/bin/bash + +# This script deploys ~/.local/share/omarchy/config/X/Y/Z -> ~/.config/X/Y/Z +config_file=$1 + +if [[ -z "$config_file" ]]; then + cat << USAGE + Usage: $0 [config_file] + + Must provide a file path from the .config directory to be refreshed. + To copy ~/.local/share/omarchy/config/hypr/hyprlock.conf to ~/.config/hypr/hyprlock.conf + + $0 hypr/hyprlock.conf +USAGE + exit 1 +fi + +# Backup the destination file (with timestamp) to avoid clobbering (Ex: hyprlock.conf.bak.1753817951) +backup_file="${HOME}/.config/${config_file}.bak.$(date +%s)" +cp -f "${HOME}/.config/${config_file}" "$backup_file" 2>/dev/null + +# Deploy the source file +cp -f "${HOME}/.local/share/omarchy/config/${config_file}" "${HOME}/.config/${config_file}" 2>/dev/null + +# Compare and delete/inform accordingly +if cmp -s "${HOME}/.config/${config_file}" "$backup_file"; then + rm $backup_file +else + echo -e "\e[31mExisting "${HOME}/.config/${config_file}" replaced with new Omarchy default, but ${backup_file} file was made.\e[0m" +fi diff --git a/bin/omarchy-refresh-hyprlock b/bin/omarchy-refresh-hyprlock index d4a3101..26c1314 100755 --- a/bin/omarchy-refresh-hyprlock +++ b/bin/omarchy-refresh-hyprlock @@ -1,11 +1,4 @@ #!/bin/bash -# Overwrite local Hyprlock settings with the latest in Omarchy, but create a backup if it differs -cp -f ~/.config/hypr/hyprlock.conf ~/.config/hypr/hyprlock.conf.bak 2>/dev/null -cp -f ~/.local/share/omarchy/config/hypr/hyprlock.conf ~/.config/hypr/ 2>/dev/null - -if cmp -s ~/.config/hypr/hyprlock.conf.bak ~/.config/hypr/hyprlock.conf; then - rm ~/.config/hypr/hyprlock.conf.bak -else - echo -e "\e[31mExisting .config/hypr/hyprlock.conf replaced with new Omarchy default, but a .bak file was made.\e[0m" -fi +# Overwrite local Hyprlock settings with the latest in Omarchy +omarchy-refresh-config hypr/hyprlock.conf \ No newline at end of file diff --git a/bin/omarchy-refresh-swayosd b/bin/omarchy-refresh-swayosd index aa63918..c2c4999 100755 --- a/bin/omarchy-refresh-swayosd +++ b/bin/omarchy-refresh-swayosd @@ -1,13 +1,7 @@ #!/bin/bash -cp -f ~/.config/swayosd/config.toml ~/.config/swayosd/config.toml.bak 2>/dev/null -cp -f ~/.local/share/omarchy/config/swayosd/config.toml ~/.config/swayosd/ 3>/dev/null - -if cmp -s ~/.config/swayosd/config.toml.bak ~/.config/swayosd/config.toml; then - rm ~/.config/swayosd//config.toml.bak -else - echo -e "\e[31mExisting .config/swayosd/config.toml replaced with new Omarchy default, but a .bak file was made.\e[0m" -fi +omarchy-refresh-config swayosd/config.toml +omarchy-refresh-config swayosd/style.css pkill swayosd-server setsid uwsm app -- swayosd-server &>/dev/null & diff --git a/bin/omarchy-refresh-walker b/bin/omarchy-refresh-walker index cd52a83..e4e3853 100755 --- a/bin/omarchy-refresh-walker +++ b/bin/omarchy-refresh-walker @@ -1,13 +1,6 @@ #!/bin/bash -cp -f ~/.config/walker/config.toml ~/.config/walker/config.toml.bak 2>/dev/null -cp -f ~/.local/share/omarchy/config/walker/config.toml ~/.config/walker/ 2>/dev/null - -if cmp -s ~/.config/walker/config.toml.bak ~/.config/walker/config.toml; then - rm ~/.config/walker/config.toml.bak -else - echo -e "\e[31mExisting .config/walker/config.toml replaced with new Omarchy default, but a .bak file was made.\e[0m" -fi +omarchy-refresh-config walker/config.toml pkill walker setsid uwsm app -- walker --gapplication-service & diff --git a/bin/omarchy-refresh-waybar b/bin/omarchy-refresh-waybar index e1289b4..43eec3d 100755 --- a/bin/omarchy-refresh-waybar +++ b/bin/omarchy-refresh-waybar @@ -1,25 +1,7 @@ #!/bin/bash -# Backup existing settings -cp -f ~/.config/waybar/config.jsonc ~/.config/waybar/config.jsonc.bak 2>/dev/null -cp -f ~/.config/waybar/style.css ~/.config/waybar/style.css.bak 2>/dev/null - -# Overwrite local waybar settings with the latest in Omarchy -cp -f ~/.local/share/omarchy/config/waybar/config.jsonc ~/.config/waybar/ 2>/dev/null -cp -f ~/.local/share/omarchy/config/waybar/style.css ~/.config/waybar/ 2>/dev/null - -# Remove identical backup files -if cmp -s ~/.config/waybar/config.jsonc.bak ~/.config/waybar/config.jsonc; then - rm ~/.config/waybar/config.jsonc.bak -else - echo -e "\e[31mExisting .config/waybar/config.jsonc replaced with new Omarchy default, but a .bak file was made.\e[0m" -fi - -if cmp -s ~/.config/waybar/style.css.bak ~/.config/waybar/style.css; then - rm ~/.config/waybar/style.css.bak -else - echo -e "\e[31mExisting .config/waybar/style.css replaced with new Omarchy default, but a .bak file was made.\e[0m" -fi +omarchy-refresh-config waybar/config.jsonc +omarchy-refresh-config waybar/style.css # Restart waybar pkill -SIGUSR2 waybar diff --git a/bin/omarchy-theme-update b/bin/omarchy-theme-update new file mode 100755 index 0000000..c5e08c1 --- /dev/null +++ b/bin/omarchy-theme-update @@ -0,0 +1,4 @@ +#!/bin/bash +for dir in ~/.config/omarchy/themes/*/; do + [ -d "$dir" ] && [ ! -L "${dir%/}" ] && echo "Updating: $(basename "$dir")" && git -C "$dir" pull +done \ No newline at end of file diff --git a/bin/omarchy-update b/bin/omarchy-update index 53576ec..19b44b2 100755 --- a/bin/omarchy-update +++ b/bin/omarchy-update @@ -1,26 +1,30 @@ #!/bin/bash +# Exit immediately if a command exits with a non-zero status +set -e + +STATE_DIR="$HOME/.local/state/omarchy/migrations" + cd ~/.local/share/omarchy -if [[ $1 == "all" ]]; then - # Run all migrations since the root commit - migration_starting_point=$(git log --max-parents=0 --first-parent --format="%H") -else - # Remember the commit we're at before upgrading in order to only run new migrations - migration_starting_point=$(git log -1 --format=%H) -fi +# Create the migrations state directory, we will store an empty file for each migration that has already been performed. +mkdir -p "$STATE_DIR" # Get the latest while trying to preserve any modifications git pull --autostash git diff --check || git reset --merge # Run any pending migrations -for file in $(git diff --name-only --diff-filter=A $migration_starting_point.. migrations/*.sh); do +for file in migrations/*.sh; do filename=$(basename "$file") migrate_at="${filename%.sh}" - echo -e "\e[32m\nRunning migration ($migrate_at)\e[0m" + # Migration already applied, to re-run it simply delete the state file and try again + [ -e "${STATE_DIR}/$filename" ] && continue + + echo -e "\e[32m\nRunning migration (${filename%.sh})\e[0m" source $file + touch "${STATE_DIR}/$filename" done # Update system packages @@ -29,3 +33,4 @@ yay -Syu --noconfirm # Back to where we came from cd - >/dev/null + diff --git a/config/walker/config.toml b/config/walker/config.toml index 05a823e..4cf6d06 100644 --- a/config/walker/config.toml +++ b/config/walker/config.toml @@ -6,7 +6,7 @@ theme = "omarchy-default" theme_base = [] theme_location = ["~/.local/share/omarchy/default/walker/themes/"] monitor = "" -hotreload_theme = false +hotreload_theme = true as_window = false timeout = 0 disable_click_to_close = false @@ -199,20 +199,21 @@ typeahead = true hidden = true [builtins.finder] -use_fd = false +use_fd = true fd_flags = "--ignore-vcs --type file --type directory" cmd_alt = "xdg-open $(dirname ~/%RESULT%)" weight = 5 icon = "file" -name = "finder" +name = "Finder" placeholder = "Finder" switcher_only = true ignore_gitignore = true refresh = true concurrency = 8 show_icon_when_single = true -preview_images = false -hidden = true +preview_images = true +hidden = false +prefix = '.' [builtins.runner] eager_loading = true diff --git a/default/bash/shell b/default/bash/shell index 424ead2..8b39d84 100644 --- a/default/bash/shell +++ b/default/bash/shell @@ -12,3 +12,6 @@ fi # Set complete path export PATH="./bin:$HOME/.local/bin:$HOME/.local/share/omarchy/bin:$PATH" set +h + +# Omarchy path +export OMARCHY_PATH="/home/$USER/.local/share/omarchy" diff --git a/default/hypr/looknfeel.conf b/default/hypr/looknfeel.conf index 6577f47..124acc5 100644 --- a/default/hypr/looknfeel.conf +++ b/default/hypr/looknfeel.conf @@ -70,7 +70,7 @@ animations { } # Application-sepcific animation -layerrule=noanim,walker +layerrule = noanim,walker # Remove 1px border around hyprshot screenshots layerrule = noanim, selection diff --git a/default/hypr/windows.conf b/default/hypr/windows.conf index a6a8be8..9ead813 100644 --- a/default/hypr/windows.conf +++ b/default/hypr/windows.conf @@ -8,7 +8,7 @@ windowrule = tile, class:^(Chromium)$ windowrule = float, class:^(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|Omarchy|About)$ windowrule = center, class:^(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|Omarchy|About)$ windowrule = size 800 600, class:^(blueberry.py|Impala|Wiremix|org.gnome.NautilusPreviewer|com.gabm.satty)$ -windowrule = size 590 400, class:Omarchy +windowrule = size 590 450, class:Omarchy windowrule = size 700 470 class:About # Float and center file pickers diff --git a/default/plymouth/logo.png b/default/plymouth/logo.png index e4b2526..f185b26 100644 Binary files a/default/plymouth/logo.png and b/default/plymouth/logo.png differ diff --git a/install/desktop/fonts.sh b/install/desktop/fonts.sh index b1a7ea0..0076417 100644 --- a/install/desktop/fonts.sh +++ b/install/desktop/fonts.sh @@ -1,36 +1,7 @@ #!/bin/bash +yay -S --noconfirm --needed ttf-font-awesome ttf-cascadia-mono-nerd ttf-ia-writer noto-fonts noto-fonts-emoji + if [ -z "$OMARCHY_BARE" ]; then - yay -S --noconfirm --needed ttf-font-awesome noto-fonts noto-fonts-emoji noto-fonts-cjk noto-fonts-extra -else - yay -S --noconfirm --needed ttf-font-awesome noto-fonts noto-fonts-emoji -fi - -mkdir -p ~/.local/share/fonts - -if ! fc-list | grep -qi "CaskaydiaMono Nerd Font"; then - cd /tmp - wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/CascadiaMono.zip - unzip CascadiaMono.zip -d CascadiaFont - cp CascadiaFont/CaskaydiaMonoNerdFont-Regular.ttf ~/.local/share/fonts - cp CascadiaFont/CaskaydiaMonoNerdFont-Bold.ttf ~/.local/share/fonts - cp CascadiaFont/CaskaydiaMonoNerdFont-Italic.ttf ~/.local/share/fonts - cp CascadiaFont/CaskaydiaMonoNerdFont-BoldItalic.ttf ~/.local/share/fonts - cp CascadiaFont/CaskaydiaMonoNerdFontPropo-Regular.ttf ~/.local/share/fonts - cp CascadiaFont/CaskaydiaMonoNerdFontPropo-Bold.ttf ~/.local/share/fonts - cp CascadiaFont/CaskaydiaMonoNerdFontPropo-Italic.ttf ~/.local/share/fonts - cp CascadiaFont/CaskaydiaMonoNerdFontPropo-BoldItalic.ttf ~/.local/share/fonts - rm -rf CascadiaMono.zip CascadiaFont - fc-cache - cd - -fi - -if ! fc-list | grep -qi "iA Writer Mono S"; then - cd /tmp - wget -O iafonts.zip https://github.com/iaolo/iA-Fonts/archive/refs/heads/master.zip - unzip iafonts.zip -d iaFonts - cp iaFonts/iA-Fonts-master/iA\ Writer\ Mono/Static/iAWriterMonoS-*.ttf ~/.local/share/fonts - rm -rf iafonts.zip iaFonts - fc-cache - cd - + yay -S --noconfirm --needed ttf-jetbrains-mono noto-fonts-cjk noto-fonts-extra fi diff --git a/migrations/1752091783.sh b/migrations/1752091783.sh index b66fd72..22625fd 100644 --- a/migrations/1752091783.sh +++ b/migrations/1752091783.sh @@ -1,2 +1,2 @@ echo "Install Plymouth splash screen" -source "$HOME/.local/share/omarchy/install/login.sh" +source "$HOME/.local/share/omarchy/install/config/login.sh" diff --git a/migrations/1752187060.sh b/migrations/1752187060.sh deleted file mode 100644 index 3839167..0000000 --- a/migrations/1752187060.sh +++ /dev/null @@ -1,14 +0,0 @@ -echo "Add missing Propo version of Caskaydia Mono Nerd Font for Waybar use" - -if ! fc-list | grep -qi "CaskaydiaMono Nerd Font Propo"; then - cd /tmp - wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/CascadiaMono.zip - unzip CascadiaMono.zip -d CascadiaFont - cp CascadiaFont/CaskaydiaMonoNerdFontPropo-Regular.ttf ~/.local/share/fonts - cp CascadiaFont/CaskaydiaMonoNerdFontPropo-Bold.ttf ~/.local/share/fonts - cp CascadiaFont/CaskaydiaMonoNerdFontPropo-Italic.ttf ~/.local/share/fonts - cp CascadiaFont/CaskaydiaMonoNerdFontPropo-BoldItalic.ttf ~/.local/share/fonts - rm -rf CascadiaMono.zip CascadiaFont - fc-cache - cd - -fi diff --git a/migrations/1752981882.sh b/migrations/1752981882.sh deleted file mode 100644 index 9a37ae1..0000000 --- a/migrations/1752981882.sh +++ /dev/null @@ -1,5 +0,0 @@ -echo "Add missing libappindicator-gtk3 for Dropbox icon tray to work right" - -if ! pacman -Q libappindicator-gtk3 &>/dev/null; then - yay -S --noconfirm --needed libappindicator-gtk3 -fi diff --git a/migrations/1753064164.sh b/migrations/1753064164.sh deleted file mode 100644 index 8ac2757..0000000 --- a/migrations/1753064164.sh +++ /dev/null @@ -1,6 +0,0 @@ -echo "Add missing Dropbox dependencies" - -# Dropbox is still there, but the dependencies aren't yet -if command -v dropbox-cli &>/dev/null && ! pacman -Q libappindicator-gtk3 &>/dev/null; then - yay -S --noconfirm --needed dropbox libappindicator-gtk3 python-gpgme nautilus-dropbox -fi diff --git a/migrations/1753352057.sh b/migrations/1753352057.sh index 653938f..3c3b915 100755 --- a/migrations/1753352057.sh +++ b/migrations/1753352057.sh @@ -12,8 +12,6 @@ if [[ "$(uname -m)" == "x86_64" ]] && ! grep -q '^\[chaotic-aur\]' /etc/pacman.c # Refresh pacman package databases sudo pacman -Sy - - chaotic_ok=1 else echo "Failed to install Chaotic-AUR, so won't include it in pacman config!" fi diff --git a/migrations/1753908454.sh b/migrations/1753908454.sh new file mode 100644 index 0000000..fdbde67 --- /dev/null +++ b/migrations/1753908454.sh @@ -0,0 +1,12 @@ +echo "Migrate from manually downloaded fonts to font packages" +if ! yay -Q ttf-cascadia-mono-nerd &>/dev/null; then + yay -S --noconfirm ttf-cascadia-mono-nerd + rm -rf ~/.local/share/fonts/Caskaydia* + fc-cache +fi + +if ! yay -Q ttf-ia-writer &>/dev/null; then + yay -S --noconfirm ttf-ia-writer + rm -rf ~/.local/share/fonts/iAWriterMonoS* + fc-cache +fi diff --git a/migrations/1753910761.sh b/migrations/1753910761.sh new file mode 100644 index 0000000..213b216 --- /dev/null +++ b/migrations/1753910761.sh @@ -0,0 +1,4 @@ +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