-
-
Notifications
You must be signed in to change notification settings - Fork 48
Expand file tree
/
Copy pathquickshell.sh
More file actions
executable file
·238 lines (202 loc) · 9.97 KB
/
quickshell.sh
File metadata and controls
executable file
·238 lines (202 loc) · 9.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
#!/usr/bin/env bash
# This script installs Quickshell Lockscreen support for SDDM themes.
set -e
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TARGET_DIR="$HOME/.local/share/quickshell-lockscreen"
# Reset terminal colors on exit or crash
trap 'echo -ne "\033[0m"' EXIT
# ─────────────────────────────────────────────────────────────────────────────
# Theme Palette & UI Functions
# ─────────────────────────────────────────────────────────────────────────────
C_MAIN='\033[38;2;202;169;224m'
C_ACCENT='\033[38;2;145;177;240m'
C_DIM='\033[38;2;129;122;150m'
C_GREEN='\033[38;2;166;209;137m'
C_YELLOW='\033[38;2;229;200;144m'
C_RED='\033[38;2;231;130;132m'
C_BOLD='\033[1m'
C_RESET='\033[0m'
header() {
clear
echo -e "${C_MAIN}${C_BOLD}"
echo " ╭──────────────────────────────────────────╮"
echo " │ 🔒 QUICKSHELL LOCKSCREEN SETUP 🔒 │"
echo " ╰──────────────────────────────────────────╯"
echo -e "${C_RESET}"
}
info() {
echo -e "${C_MAIN}${C_BOLD} ╭─ $1${C_RESET}"
}
substep() {
echo -e "${C_MAIN}${C_BOLD} │ ${C_DIM}❯ ${C_RESET}$1"
}
success() {
echo -e "${C_MAIN}${C_BOLD} ╰─ ${C_GREEN}✔ ${C_RESET}$1\n"
}
error() {
echo -e "${C_MAIN}${C_BOLD} ╰─ ${C_RED}✘ ${C_RESET}$1\n"
}
# ─────────────────────────────────────────────────────────────────────────────
# Core Logic
# ─────────────────────────────────────────────────────────────────────────────
header
# Dependency check
info "Checking dependencies..."
if ! command -v quickshell &> /dev/null; then
error "Quickshell is not installed. Install it with: pacman -S quickshell or yay -S quickshell"
exit 1
fi
substep "Quickshell found"
success "Dependencies verified"
info "Initializing Installation..."
substep "Target directory: $TARGET_DIR"
echo -ne "${C_MAIN}${C_BOLD} │ ${C_YELLOW}Do you want to proceed? (y/n): ${C_RESET}"
read -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
error "Installation aborted."
exit 1
fi
info "Deploying Base Files..."
rm -rf "$TARGET_DIR"
cp -r "$DIR/quickshell-lockscreen" "$TARGET_DIR"
substep "Copied wrapper successfully"
ln -sfn "$DIR/themes" "$TARGET_DIR/themes_link"
substep "Created symbolic link to local themes"
chmod +x "$TARGET_DIR/lock.sh"
success "Permissions applied"
info "Selecting Default Lockscreen Theme..."
THEMES_DIR="$DIR/themes"
if ! command -v fzf &> /dev/null; then
substep "fzf not found. Using basic list..."
THEMES=($(ls -1 "$THEMES_DIR"))
for i in "${!THEMES[@]}"; do
echo -e "${C_MAIN}${C_BOLD} │ ${C_ACCENT}$((i+1)) ${C_DIM}❯ ${C_RESET}${THEMES[$i]}"
done
echo -ne "${C_MAIN}${C_BOLD} ╰─ ${C_YELLOW}Choice: ${C_RESET}"
read -rp "" SELECTION
if [[ "$SELECTION" =~ ^[0-9]+$ ]] && [ "$SELECTION" -ge 1 ] && [ "$SELECTION" -le "${#THEMES[@]}" ]; then
THEME_NAME="${THEMES[$((SELECTION-1))]}"
else
error "Invalid selection. Defaulting to 'nier-automata'."
THEME_NAME="nier-automata"
fi
else
THEME_NAME=$(ls -1 "$THEMES_DIR" | fzf --prompt="Select theme: " --height=15 --reverse --border --header="Use arrow keys/Enter to select lockscreen theme")
if [ -z "$THEME_NAME" ]; then
error "No theme selected. Defaulting to 'nier-automata'."
THEME_NAME="nier-automata"
fi
fi
# Sub-selection logic for variants (Ported from sddm.sh)
if [ "$THEME_NAME" == "cozytile" ]; then
info "Selecting variant for Cozytile theme..."
COZYTILE_DIR="$THEMES_DIR/cozytile"
if ! command -v fzf &> /dev/null; then
VARIANTS=($(ls -1 "$COZYTILE_DIR"))
for i in "${!VARIANTS[@]}"; do
echo -e "${C_MAIN}${C_BOLD} │ ${C_ACCENT}$((i+1)) ${C_DIM}❯ ${C_RESET}${VARIANTS[$i]}"
done
echo -ne "${C_MAIN}${C_BOLD} ╰─ ${C_YELLOW}Choice: ${C_RESET}"
read -rp "" V_SELECTION
if [[ "$V_SELECTION" =~ ^[0-9]+$ ]] && [ "$V_SELECTION" -ge 1 ] && [ "$V_SELECTION" -le "${#VARIANTS[@]}" ]; then
THEME_NAME="cozytile/${VARIANTS[$((V_SELECTION-1))]}"
fi
else
SELECTED_VARIANT=$(ls -1 "$COZYTILE_DIR" | fzf --prompt="Select variant: " --height=10 --reverse --border --header="Choose a Cozytile variant")
[ -n "$SELECTED_VARIANT" ] && THEME_NAME="cozytile/$SELECTED_VARIANT"
fi
fi
if [ "$THEME_NAME" == "tui" ]; then
info "Selecting variant for TUI theme..."
TUI_VARIANTS_DIR="$THEMES_DIR/tui"
if ! command -v fzf &> /dev/null; then
VARIANTS=($(ls -1 "$TUI_VARIANTS_DIR"))
for i in "${!VARIANTS[@]}"; do
echo -e "${C_MAIN}${C_BOLD} │ ${C_ACCENT}$((i+1)) ${C_DIM}❯ ${C_RESET}${VARIANTS[$i]}"
done
echo -ne "${C_MAIN}${C_BOLD} ╰─ ${C_YELLOW}Choice: ${C_RESET}"
read -rp "" V_SELECTION
if [[ "$V_SELECTION" =~ ^[0-9]+$ ]] && [ "$V_SELECTION" -ge 1 ] && [ "$V_SELECTION" -le "${#VARIANTS[@]}" ]; then
THEME_NAME="tui/${VARIANTS[$((V_SELECTION-1))]}"
fi
else
SELECTED_VARIANT=$(ls -1 "$TUI_VARIANTS_DIR" | fzf --prompt="Select TUI variant: " --height=10 --reverse --border --header="Choose a TUI color variant")
[ -n "$SELECTED_VARIANT" ] && THEME_NAME="tui/$SELECTED_VARIANT"
fi
fi
if [ "$THEME_NAME" == "terraria" ]; then
info "Customizing Terraria sub-theme..."
echo -e "${C_MAIN}${C_BOLD} │ ${C_ACCENT}1 ${C_DIM}❯ ${C_RESET}Time-based (Transitions with day/night)"
echo -e "${C_MAIN}${C_BOLD} │ ${C_ACCENT}2 ${C_DIM}❯ ${C_RESET}Random (New background per lock)"
echo -ne "${C_MAIN}${C_BOLD} ╰─ ${C_YELLOW}Choice [1/2]: ${C_RESET}"
read -rp "" SUB_OPT
case $SUB_OPT in
1) sed -i "s/^background_mode=.*/background_mode=time/" "$THEMES_DIR/terraria/theme.conf" ;;
2) sed -i "s/^background_mode=.*/background_mode=random/" "$THEMES_DIR/terraria/theme.conf" ;;
esac
fi
if [ "$THEME_NAME" == "Genshin" ]; then
info "Customizing Genshin Impact sub-theme..."
echo -e "${C_MAIN}${C_BOLD} │ ${C_ACCENT}1 ${C_DIM}❯ ${C_RESET}Time-based (Dawn / Day / Dusk / Night)"
echo -e "${C_MAIN}${C_BOLD} │ ${C_ACCENT}2 ${C_DIM}❯ ${C_RESET}Random (New background per lock)"
echo -ne "${C_MAIN}${C_BOLD} ╰─ ${C_YELLOW}Choice [1/2]: ${C_RESET}"
read -rp "" SUB_OPT
case $SUB_OPT in
1) sed -i "s/^background_mode=.*/background_mode=time/" "$THEMES_DIR/Genshin/theme.conf" ;;
2) sed -i "s/^background_mode=.*/background_mode=random/" "$THEMES_DIR/Genshin/theme.conf" ;;
esac
fi
if [ "$THEME_NAME" == "clockwork" ]; then
info "Customizing Clockwork Theme"
# Theme Mode
echo -e "${C_MAIN}${C_BOLD} │ ${C_ACCENT}1 ${C_DIM}❯ ${C_RESET}Dark Mode (Default)"
echo -e "${C_MAIN}${C_BOLD} │ ${C_ACCENT}2 ${C_DIM}❯ ${C_RESET}Light Mode"
echo -ne "${C_MAIN}${C_BOLD} ╰─ ${C_YELLOW}Choice [1/2]: ${C_RESET}"
read -rp "" MODE_S
if [ "$MODE_S" == "2" ]; then
sed -i "s/^themeMode=.*/themeMode=light/" "$THEMES_DIR/$THEME_NAME/theme.conf"
else
sed -i "s/^themeMode=.*/themeMode=dark/" "$THEMES_DIR/$THEME_NAME/theme.conf"
fi
# Windup Animation
echo -ne "${C_MAIN}${C_BOLD} │ ${C_YELLOW}Enable windup animation? (y/n): ${C_RESET}"
read -rp "" WIND_S
if [[ "$WIND_S" =~ ^[Nn]$ ]]; then
sed -i "s/^enableWindup=.*/enableWindup=false/" "$THEMES_DIR/$THEME_NAME/theme.conf"
else
sed -i "s/^enableWindup=.*/enableWindup=true/" "$THEMES_DIR/$THEME_NAME/theme.conf"
fi
fi
if [ "$THEME_NAME" == "osu" ]; then
info "Customizing Osu! theme..."
echo -e "${C_MAIN}${C_BOLD} │ ${C_ACCENT}1 ${C_DIM}❯ ${C_RESET}Main menu only (direct password login)"
echo -e "${C_MAIN}${C_BOLD} │ ${C_ACCENT}2 ${C_DIM}❯ ${C_RESET}Main menu + rhythm game gate (default)"
echo -ne "${C_MAIN}${C_BOLD} ╰─ ${C_YELLOW}Choice [1/2]: ${C_RESET}"
read -rp "" OSU_OPT
if [ "$OSU_OPT" == "1" ]; then
sed -i "s/^gameMode=.*/gameMode=menu/" "$THEMES_DIR/$THEME_NAME/theme.conf"
else
sed -i "s/^gameMode=.*/gameMode=game/" "$THEMES_DIR/$THEME_NAME/theme.conf"
fi
fi
# Check for fonts in the selected theme
FONT_COUNT=$(ls -1 "$THEMES_DIR/$THEME_NAME/font" 2>/dev/null | grep -E "\.(ttf|otf)$" | wc -l)
if [ "$FONT_COUNT" -eq 0 ]; then
echo -e "${C_YELLOW}${C_BOLD} ╭─ MISSING FONT DETECTED${C_RESET}"
echo -e "${C_YELLOW}${C_BOLD} │${C_RESET} ${C_DIM}This theme looks better with its specific font!${C_RESET}"
echo -e "${C_YELLOW}${C_BOLD} │${C_RESET} ${C_DIM}Please put the .ttf/.otf file in:${C_RESET}"
echo -e "${C_YELLOW}${C_BOLD} │${C_RESET} ${C_ACCENT}$THEMES_DIR/$THEME_NAME/font/${C_RESET}"
echo -e "${C_YELLOW}${C_BOLD} ╰─ ${C_DIM}Refer to README.md for font suggestions.${C_RESET}\n"
fi
# Save theme choice
mkdir -p "$HOME/.config/qylock"
echo "$THEME_NAME" > "$HOME/.config/qylock/theme"
substep "Configuration saved to ~/.config/qylock/theme"
sed -i "s|export QS_THEME=.*$|export QS_THEME=\"\${1:-$THEME_NAME}\"|" "$TARGET_DIR/lock.sh"
success "Theme '$THEME_NAME' set as lockscreen default!"
info "Keyboard Shortcut Instructions"
substep "To use this lockscreen natively, bind a shortcut (e.g., Mod + L) in your Window Manager's configuration."
substep "Set the shortcut to execute: ${C_YELLOW}$TARGET_DIR/lock.sh${C_RESET}"
echo ""
success "Setup completely successfully. Stay secure!"