Last active 1 month ago

Revision d8a5435c05cbf381439732dda25d1df6d0bce3f1

aliasctl Raw
1#!/usr/bin/env bash
2
3ALIASES_FILE="$HOME/.fedya_aliases"
4EDITOR_CMD="${EDITOR:-nano}"
5
6# Модерна цветна палитра
7C_RESET=$'\033[0m'
8C_BOLD=$'\033[1m'
9C_DIM=$'\033[2m'
10
11# Основни цветове
12C_PRIMARY=$'\033[38;5;81m' # Светло синьо
13C_SUCCESS=$'\033[38;5;82m' # Зелено
14C_WARNING=$'\033[38;5;214m' # Оранжево
15C_ERROR=$'\033[38;5;196m' # Червено
16C_INFO=$'\033[38;5;147m' # Лавандула
17
18# Акцентни цветове
19C_TITLE=$'\033[38;5;213m' # Розово-лилаво
20C_KEY=$'\033[38;5;226m' # Жълто
21C_VAL=$'\033[38;5;153m' # Светло синьо
22C_BORDER=$'\033[38;5;240m' # Сиво
23
24# Box drawing символи
25BOX_TL="╭"
26BOX_TR="╮"
27BOX_BL="╰"
28BOX_BR="╯"
29BOX_H="─"
30BOX_V="│"
31BOX_VR="├"
32BOX_VL="┤"
33
34ensure_file() {
35 [ -f "$ALIASES_FILE" ] || touch "$ALIASES_FILE"
36}
37
38print_header() {
39 local width=70
40 clear
41 echo
42 printf "%b" "${C_PRIMARY}${C_BOLD}"
43 printf "%s%${width}s%s\n" "$BOX_TL" "" "$BOX_TR" | tr ' ' "$BOX_H"
44 printf "%s%-${width}s%s\n" "$BOX_V" " 🎨 ALIASCTL - Мениджърът на Федя за Bash Алиаси" "$BOX_V"
45 printf "%s%${width}s%s\n" "$BOX_BL" "" "$BOX_BR" | tr ' ' "$BOX_H"
46 printf "%b\n" "${C_RESET}"
47}
48
49print_box() {
50 local text="$1"
51 local color="$2"
52 local width=70
53 printf "%b%s%b\n" "${color}" "$text" "${C_RESET}"
54}
55
56list_aliases() {
57 ensure_file
58 print_header
59
60 local count=$(grep -c '^alias ' "$ALIASES_FILE" 2>/dev/null || echo 0)
61
62 printf "%b%s %s%b\n" "${C_INFO}${C_BOLD}" "📦 Общо алиаси:" "$count" "${C_RESET}"
63 printf "%b%s%b\n\n" "${C_DIM}" "Файл: $ALIASES_FILE" "${C_RESET}"
64
65 if [ "$count" -eq 0 ]; then
66 printf "%b%s%b\n\n" "${C_WARNING}" " ⚠️ Няма дефинирани алиаси" "${C_RESET}"
67 else
68 printf "%b%-20s %s%b\n" "${C_BORDER}${C_DIM}" "Име" "Команда" "${C_RESET}"
69 printf "%b%s%b\n" "${C_BORDER}" "$(printf '%.0s─' {1..70})" "${C_RESET}"
70
71 grep '^alias ' "$ALIASES_FILE" 2>/dev/null \
72 | sed 's/^alias //' \
73 | while IFS= read -r line; do
74 name="${line%%=*}"
75 cmd="${line#*=}"
76 cmd="${cmd#\'}"
77 cmd="${cmd%\'}"
78
79 # Ограничаване на дължината за по-добра визия
80 if [ ${#cmd} -gt 45 ]; then
81 cmd="${cmd:0:42}..."
82 fi
83
84 printf " %b%-18s%b → %b%s%b\n" \
85 "$C_KEY" "$name" "$C_RESET" "$C_VAL" "$cmd" "$C_RESET"
86 done
87 echo
88 fi
89}
90
91add_alias() {
92 ensure_file
93 print_header
94
95 printf "%b%s%b\n\n" "${C_SUCCESS}${C_BOLD}" "➕ Добавяне на нов алиас" "${C_RESET}"
96
97 printf "%b%s%b" "${C_INFO}" "Име на алиаса: " "${C_RESET}"
98 read -r name
99
100 # Проверка за празно име
101 if [ -z "$name" ]; then
102 printf "\n%b%s%b\n" "${C_ERROR}" "❌ Името не може да бъде празно!" "${C_RESET}"
103 sleep 2
104 return
105 fi
106
107 # Проверка дали съществува
108 if grep -q "^alias $name=" "$ALIASES_FILE" 2>/dev/null; then
109 printf "\n%b%s%b\n" "${C_ERROR}" "❌ Алиас '$name' вече съществува!" "${C_RESET}"
110 sleep 2
111 return
112 fi
113
114 printf "%b%s%b" "${C_INFO}" "Команда: " "${C_RESET}"
115 read -r cmd
116
117 if [ -z "$cmd" ]; then
118 printf "\n%b%s%b\n" "${C_ERROR}" "❌ Командата не може да бъде празна!" "${C_RESET}"
119 sleep 2
120 return
121 fi
122
123 printf "alias %s='%s'\n" "$name" "$cmd" >> "$ALIASES_FILE"
124 printf "\n%b%s%b %b%s%b\n" "${C_SUCCESS}${C_BOLD}" "✅ Успешно добавен:" "${C_RESET}" "${C_KEY}" "$name" "${C_RESET}"
125 sleep 2
126}
127
128remove_alias() {
129 ensure_file
130 print_header
131
132 printf "%b%s%b\n\n" "${C_WARNING}${C_BOLD}" "🗑️ Премахване на алиас" "${C_RESET}"
133
134 local count=$(grep -c '^alias ' "$ALIASES_FILE" 2>/dev/null || echo 0)
135 if [ "$count" -eq 0 ]; then
136 printf "%b%s%b\n" "${C_WARNING}" "⚠️ Няма алиаси за премахване" "${C_RESET}"
137 sleep 2
138 return
139 fi
140
141 printf "%b%s%b" "${C_INFO}" "Име на алиаса за премахване: " "${C_RESET}"
142 read -r name
143
144 if [ -z "$name" ]; then
145 printf "\n%b%s%b\n" "${C_ERROR}" "❌ Не е въведено име!" "${C_RESET}"
146 sleep 2
147 return
148 fi
149
150 if grep -q "^alias $name=" "$ALIASES_FILE" 2>/dev/null; then
151 sed -i "/^alias $name=/d" "$ALIASES_FILE"
152 printf "\n%b%s%b %b%s%b\n" "${C_SUCCESS}${C_BOLD}" "✅ Премахнат:" "${C_RESET}" "${C_KEY}" "$name" "${C_RESET}"
153 else
154 printf "\n%b%s%b\n" "${C_ERROR}" "❌ Алиас '$name' не съществува!" "${C_RESET}"
155 fi
156 sleep 2
157}
158
159edit_aliases() {
160 ensure_file
161 "$EDITOR_CMD" "$ALIASES_FILE"
162}
163
164fzf_menu() {
165 if ! command -v fzf >/dev/null; then
166 print_header
167 printf "%b%s%b\n" "${C_ERROR}" "❌ fzf не е инсталиран!" "${C_RESET}"
168 printf "%b%s%b\n" "${C_INFO}" "Инсталирай с: sudo dnf install fzf" "${C_RESET}"
169 sleep 3
170 return
171 fi
172
173 ensure_file
174 local selected=$(grep '^alias ' "$ALIASES_FILE" 2>/dev/null \
175 | sed 's/^alias //' \
176 | fzf --height=40% --border --prompt="🔍 Търсене: " \
177 --color="fg:#d0d0d0,bg:#1e1e1e,hl:#5fd7ff" \
178 --color="fg+:#ffffff,bg+:#2e2e2e,hl+:#ffaf00" \
179 --color="info:#af87ff,prompt:#5fd7ff,pointer:#ff87d7" \
180 --color="marker:#87ff00,spinner:#ff87d7,header:#87afaf")
181
182 if [ -n "$selected" ]; then
183 print_header
184 printf "%b%s%b\n\n" "${C_SUCCESS}" "Избран алиас:" "${C_RESET}"
185 printf "%b%s%b\n" "${C_VAL}" "$selected" "${C_RESET}"
186 echo
187 read -rp "Натисни Enter за продължаване..."
188 fi
189}
190
191show_help() {
192 print_header
193
194 printf "%b%s%b\n\n" "${C_INFO}${C_BOLD}" "📖 Помощна информация" "${C_RESET}"
195
196 printf "%b%s%b\n" "${C_PRIMARY}" "Файл с алиаси:" "${C_RESET}"
197 printf " %b%s%b\n\n" "${C_VAL}" "$ALIASES_FILE" "${C_RESET}"
198
199 printf "%b%s%b\n" "${C_PRIMARY}" "Редактор:" "${C_RESET}"
200 printf " %b%s%b\n\n" "${C_VAL}" "$EDITOR_CMD" "${C_RESET}"
201
202 printf "%b%s%b\n" "${C_PRIMARY}" "За да заредиш алиасите:" "${C_RESET}"
203 printf " %b%s%b\n" "${C_VAL}" "source $ALIASES_FILE" "${C_RESET}"
204 printf " или добави в %b~/.bashrc%b:\n" "${C_VAL}" "${C_RESET}"
205 printf " %b%s%b\n\n" "${C_VAL}" "[ -f $ALIASES_FILE ] && source $ALIASES_FILE" "${C_RESET}"
206
207
208 # Добавяне на линк към сайта
209 printf "%b%s%b\n" "${C_PRIMARY}" "Посети сайта ми за още полезни неща:" "${C_RESET}"
210 printf " %b%s%b\n\n" "${C_VAL}" "https://urocibg.eu/" "${C_RESET}"
211
212 read -rp "Натисни Enter за продължаване..."
213}
214
215main_menu() {
216 print_header
217
218 printf "%b%s%b\n" "${C_BORDER}${C_DIM}" "Избери опция:" "${C_RESET}"
219 echo
220
221 printf " %b[1]%b 📋 Преглед на всички алиаси\n" "${C_KEY}${C_BOLD}" "${C_RESET}"
222 printf " %b[2]%b ➕ Добавяне на нов алиас\n" "${C_KEY}${C_BOLD}" "${C_RESET}"
223 printf " %b[3]%b 🗑️ Премахване на алиас\n" "${C_KEY}${C_BOLD}" "${C_RESET}"
224 printf " %b[4]%b ✏️ Редактиране на файла\n" "${C_KEY}${C_BOLD}" "${C_RESET}"
225 printf " %b[5]%b 🔍 FZF интерактивен преглед\n" "${C_KEY}${C_BOLD}" "${C_RESET}"
226 printf " %b[6]%b 📖 Помощ\n" "${C_KEY}${C_BOLD}" "${C_RESET}"
227 echo
228 printf " %b[q]%b 🚪 Изход\n" "${C_ERROR}${C_BOLD}" "${C_RESET}"
229 echo
230
231 printf "%b%s%b " "${C_PRIMARY}" "➤" "${C_RESET}"
232 read -r choice
233
234 case "$choice" in
235 1) list_aliases; read -rp "Натисни Enter за продължаване...";;
236 2) add_alias;;
237 3) remove_alias;;
238 4) edit_aliases;;
239 5) fzf_menu;;
240 6) show_help;;
241 q|Q)
242 clear
243 printf "\n%b%s%b\n\n" "${C_SUCCESS}${C_BOLD}" "👋 Довиждане!" "${C_RESET}"
244 exit 0
245 ;;
246 *)
247 printf "\n%b%s%b\n" "${C_ERROR}" "❌ Невалидна опция!" "${C_RESET}"
248 sleep 1
249 ;;
250 esac
251}
252
253# Главен цикъл
254while true; do
255 main_menu
256done