summaryrefslogtreecommitdiffstats
path: root/roles/hyprtheme/files/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'roles/hyprtheme/files/scripts')
-rw-r--r--roles/hyprtheme/files/scripts/theme-bg-next49
-rw-r--r--roles/hyprtheme/files/scripts/theme-set47
-rwxr-xr-xroles/hyprtheme/files/scripts/theme.sh67
-rwxr-xr-xroles/hyprtheme/files/scripts/wallpaper.sh48
4 files changed, 115 insertions, 96 deletions
diff --git a/roles/hyprtheme/files/scripts/theme-bg-next b/roles/hyprtheme/files/scripts/theme-bg-next
deleted file mode 100644
index e0edb2a3..00000000
--- a/roles/hyprtheme/files/scripts/theme-bg-next
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/bash
-
-# Cycles through the background images available
-
-THEMES_PATH="$HOME/.config/hyprtheme/"
-THEME_BACKGROUNDS_PATH="$THEMES_PATH/current/backgrounds/"
-CURRENT_BACKGROUND_LINK="$THEMES_PATH/current/background"
-
-mapfile -d '' -t BACKGROUNDS < <(find -L "$THEME_BACKGROUNDS_PATH" -maxdepth 1 -type f -print0 2>/dev/null | sort -z)
-TOTAL=${#BACKGROUNDS[@]}
-
-if [[ $TOTAL -eq 0 ]]; then
- notify-send "No background was found for theme" -t 2000
- pkill -x swaybg
- setsid uwsm-app -- swaybg --color '#000000' >/dev/null 2>&1 &
-else
- # Get current background from symlink
- if [[ -L "$CURRENT_BACKGROUND_LINK" ]]; then
- CURRENT_BACKGROUND=$(readlink "$CURRENT_BACKGROUND_LINK")
- else
- # Default to first background if no symlink exists
- CURRENT_BACKGROUND=""
- fi
-
- # Find current background index
- INDEX=-1
- for i in "${!BACKGROUNDS[@]}"; do
- if [[ "${BACKGROUNDS[$i]}" == "$CURRENT_BACKGROUND" ]]; then
- INDEX=$i
- break
- fi
- done
-
- # Get next background (wrap around)
- if [[ $INDEX -eq -1 ]]; then
- # Use the first background when no match was found
- NEW_BACKGROUND="${BACKGROUNDS[0]}"
- else
- NEXT_INDEX=$(((INDEX + 1) % TOTAL))
- NEW_BACKGROUND="${BACKGROUNDS[$NEXT_INDEX]}"
- fi
-
- # Set new background symlink
- ln -nsf "$NEW_BACKGROUND" "$CURRENT_BACKGROUND_LINK"
-
- # Relaunch swaybg
- pkill -x swaybg
- setsid uwsm-app -- swaybg -i "$CURRENT_BACKGROUND_LINK" -m fill >/dev/null 2>&1 &
-fi
diff --git a/roles/hyprtheme/files/scripts/theme-set b/roles/hyprtheme/files/scripts/theme-set
deleted file mode 100644
index d33cd1f9..00000000
--- a/roles/hyprtheme/files/scripts/theme-set
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/bash
-
-# Extracted from omarchy with a little modifications
-if [[ -z $1 ]]; then
- echo "Usage: theme-set <theme-name>"
- exit 1
-fi
-
-THEMES_PATH="$HOME/.config/hyprtheme/themes"
-CURRENT_THEME_PATH="$HOME/.config/hyprtheme/current"
-THEME_NAME=$(echo "$1" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
-
-if [[ ! -d "$THEMES_PATH/$THEME_NAME" ]]; then
- echo "Theme '$THEME_NAME' does not exist"
- exit 1
-fi
-
-# Get close to as atomic as possible.
-ln -sfn "$THEMES_PATH/$THEME_NAME" "$CURRENT_THEME_PATH.new"
-rm -rf "$CURRENT_THEME_PATH"
-mv "$CURRENT_THEME_PATH.new" "$CURRENT_THEME_PATH"
-~/.config/hyprtheme/scripts/theme-bg-next
-
-pkill -x waybar || true
-setsid uwsm-app -- waybar >/dev/null 2>&1 &
-
-hyprctl reload >/dev/null 2>&1
-
-pkill -SIGUSR2 btop || true
-
-makoctl reload
-
-if [[ -f ~/.config/alacritty/alacritty.toml ]]; then
- touch ~/.config/alacritty/alacritty.toml
-fi
-killall -SIGUSR1 kitty >/dev/null 2>&1 || true
-killall -SIGUSR2 ghostty >/dev/null 2>&1 || true
-
-if [[ -f ~/.config/hyprtheme/current/light.mode ]]; then
- gsettings set org.gnome.desktop.interface color-scheme "prefer-light"
- gsettings set org.gnome.desktop.interface gtk-theme "Adwaita"
- gsettings set org.gnome.desktop.interface font-name "Noto Sans"
-else
- gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
- gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
- gsettings set org.gnome.desktop.interface font-name "Noto Sans"
-fi
diff --git a/roles/hyprtheme/files/scripts/theme.sh b/roles/hyprtheme/files/scripts/theme.sh
new file mode 100755
index 00000000..14be33c7
--- /dev/null
+++ b/roles/hyprtheme/files/scripts/theme.sh
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+show_themes() {
+ local available_themes=$(ls -1p $HOME/.config/hyprtheme/themes/ | grep "/" | cut -f1 -d'/')
+ local selected_theme=$(printf "$available_themes" | tofi \
+ --prompt-text "Select: " \
+ --placeholder-text "Theme"
+ )
+
+ if [[ -n "$selected_theme" ]]; then
+ select_theme "$selected_theme"
+ fi
+}
+
+select_theme() {
+ local theme_name="$1"
+ local themes_path="$HOME/.config/hyprtheme/themes"
+ local current_theme_path="$HOME/.config/hyprtheme/current"
+
+ if [[ ! -d "$themes_path/$theme_name" ]]; then
+ notify-send -e \
+ -h string:x-canonical-private-synchronous:themes \
+ -u critical \
+ "Theme" \
+ "Theme '$theme_name' doesn't exist"
+ exit 1
+ fi
+
+ # Get close to as atomic as possible.
+ ln -sfn "$themes_path/$theme_name" "$current_theme_path.new"
+ rm -rf "$current_theme_path"
+ mv "$current_theme_path.new" "$current_theme_path"
+
+ # Prompt wallpaper selection
+ "$HOME/.config/hyprtheme/scripts/wallpaper.sh" #$(find "$current_theme_path/wallpapers" -type f | head -1)
+
+ pkill -x waybar || true
+ setsid uwsm-app -- waybar >/dev/null 2>&1 &
+
+ hyprctl reload >/dev/null 2>&1
+
+ pkill -SIGUSR2 btop || true
+
+ makoctl reload
+
+ if [[ -f ~/.config/alacritty/alacritty.toml ]]; then
+ touch ~/.config/alacritty/alacritty.toml
+ fi
+ killall -SIGUSR1 kitty >/dev/null 2>&1 || true
+ killall -SIGUSR2 ghostty >/dev/null 2>&1 || true
+
+ if [[ -f ~/.config/hyprtheme/current/light.mode ]]; then
+ gsettings set org.gnome.desktop.interface color-scheme "prefer-light"
+ gsettings set org.gnome.desktop.interface gtk-theme "Adwaita"
+ gsettings set org.gnome.desktop.interface font-name "Noto Sans"
+ else
+ gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
+ gsettings set org.gnome.desktop.interface gtk-theme "Adwaita-dark"
+ gsettings set org.gnome.desktop.interface font-name "Noto Sans"
+ fi
+}
+
+if [[ -z "$1" ]]; then
+ show_themes
+else
+ select_theme "$1"
+fi
diff --git a/roles/hyprtheme/files/scripts/wallpaper.sh b/roles/hyprtheme/files/scripts/wallpaper.sh
new file mode 100755
index 00000000..35654b94
--- /dev/null
+++ b/roles/hyprtheme/files/scripts/wallpaper.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+show_wallpapers() {
+ local wallpapers_path="$HOME/.config/hyprtheme/current/wallpapers"
+ local wallpapers=$(ls -1p "$wallpapers_path" 2>/dev/null)
+
+ if [[ -z $wallpapers ]]; then
+ notify-send -e \
+ -h string:x-canonical-private-synchronous:wallpapers \
+ -u normal \
+ "Wallpapers" \
+ "No wallpapers found for current theme"
+ pkill -x swaybg
+ setsid uwsm-app -- swaybg --color '#000000' >/dev/null 2>&1 &
+ exit 0
+ fi
+
+ local selected_wallpaper=$(printf "$wallpapers" | tofi \
+ --prompt-text "Select: " \
+ --placeholder-text "Wallpaper"
+ )
+ if [[ -n $selected_wallpaper ]]; then
+ select_wallpaper "$wallpapers_path/$selected_wallpaper"
+ fi
+}
+
+select_wallpaper() {
+ local selected_wallpaper="$1"
+ if [[ ! -f "$selected_wallpaper" ]]; then
+ notify-send -e \
+ -h string:x-canonical-private-synchronous:wallpapers \
+ -u critical \
+ "Wallpapers" \
+ "Wallpaper '$selected_wallpaper' doesn't exist"
+ pkill -x swaybg
+ setsid uwsm-app -- swaybg --color '#000000' >/dev/null 2>&1 &
+ exit 0
+ fi
+
+ pkill -x swaybg
+ setsid uwsm-app -- swaybg -i "$selected_wallpaper" -m fill >/dev/null 2>&1 &
+}
+
+if [[ -z "$1" ]]; then
+ show_wallpapers
+else
+ select_wallpaper "$1"
+fi