Skip to content

Commit f514f7d

Browse files
committed
feat: add better progression view
1 parent b4bc5de commit f514f7d

File tree

1 file changed

+53
-25
lines changed

1 file changed

+53
-25
lines changed

arch-shell

Lines changed: 53 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,27 @@ ARCHSHELL_DIR="${HOME}/.arch-shell"
1313
ARCHSHELL_STORE="${ARCHSHELL_DIR}/store"
1414
BASE_TEMPLATE="${ARCHSHELL_STORE}/base-template"
1515

16+
RED='\033[0;31m'
17+
GREEN='\033[0;32m'
18+
YELLOW='\033[1;33m'
19+
BLUE='\033[0;34m'
20+
NC='\033[0m'
21+
22+
spinner() {
23+
local pid=$1
24+
local msg="$2"
25+
local spinstr='|/-\\'
26+
local i=0
27+
tput civis
28+
while kill -0 $pid 2>/dev/null; do
29+
i=$(( (i+1) %4 ))
30+
printf "\r${YELLOW}[*] %s %s${NC}" "${spinstr:$i:1}" "$msg"
31+
sleep 0.1
32+
done
33+
printf "\r${GREEN}[*] %s terminé !${NC}\n" "$msg"
34+
tput cnorm
35+
}
36+
1637
usage() {
1738
echo "Usage: $0 init | regen-base | create <env> | -S <env> <pkg...> | enter <env> | delete <env> | list | info <env>"
1839
exit 1
@@ -70,25 +91,25 @@ case "$1" in
7091
if [ -d "$BASE_TEMPLATE" ]; then
7192
echo "Template de base existe déjà. Utilisez 'regen-base' pour le régénérer."
7293
else
73-
echo "Initialisation du template de base..."
74-
if sudo mkarchroot "$BASE_TEMPLATE" base > /dev/null 2>&1; then
75-
echo "Template de base créé."
76-
else
77-
echo "Erreur lors de la création du template de base."; exit 2;
78-
fi
94+
echo -e "${BLUE}[*] Création du template de base...${NC}"
95+
(
96+
sudo mkarchroot "$BASE_TEMPLATE" base > /dev/null 2>&1
97+
) &
98+
spinner $! "Création du template de base"
99+
echo -e "${GREEN}[*] Template de base créé.${NC}"
79100
fi
80101
;;
81102
regen-base)
82103
mkdir -p "$ARCHSHELL_STORE"
83-
echo "Régénération du template de base..."
104+
echo -e "${BLUE}[*] Régénération du template de base...${NC}"
84105
if [ -d "$BASE_TEMPLATE" ]; then
85106
sudo rm -rf "$BASE_TEMPLATE"
86107
fi
87-
if sudo mkarchroot "$BASE_TEMPLATE" base > /dev/null 2>&1; then
88-
echo "Template de base régénéré."
89-
else
90-
echo "Erreur lors de la régénération du template de base."; exit 6;
91-
fi
108+
(
109+
sudo mkarchroot "$BASE_TEMPLATE" base > /dev/null 2>&1
110+
) &
111+
spinner $! "Régénération du template de base"
112+
echo -e "${GREEN}[*] Template de base régénéré.${NC}"
92113
;;
93114
create)
94115
if [ $# -lt 2 ]; then
@@ -103,11 +124,18 @@ case "$1" in
103124
if [ -d "${ARCHSHELL_DIR}/${ENVNAME}" ]; then
104125
echo "L'environnement ${ENVNAME} existe déjà."; exit 5;
105126
fi
106-
echo "Création de l'environnement $ENVNAME à partir du template..."
107-
sudo cp -a "$BASE_TEMPLATE" "${ARCHSHELL_DIR}/${ENVNAME}"
127+
echo -e "${BLUE}[*] Création de l'environnement $ENVNAME à partir du template...${NC}"
128+
mkdir -p "${ARCHSHELL_DIR}/${ENVNAME}"
129+
total=$(sudo du -sb "$BASE_TEMPLATE" | awk '{print $1}')
130+
(
131+
n=0
132+
sudo tar cf - -C "$BASE_TEMPLATE" . | \
133+
sudo tar xf - -C "${ARCHSHELL_DIR}/${ENVNAME}"
134+
) 2> >(grep -v 'socket ignorée' >&2) &
135+
spinner $! "Copie du template"
108136
sudo chown -R $USER: "${ARCHSHELL_DIR}/${ENVNAME}"
109137
update_env_info "$ENVNAME"
110-
echo "Environnement $ENVNAME créé."
138+
echo -e "${GREEN}[*] Environnement $ENVNAME créé.${NC}"
111139
;;
112140
-S)
113141
if [ $# -lt 3 ]; then
@@ -119,16 +147,16 @@ case "$1" in
119147
if [ ! -d "${ARCHSHELL_DIR}/${ENVNAME}" ]; then
120148
echo "Environnement inexistant : ${ENVNAME}"; exit 3;
121149
fi
122-
echo "Installation de(s) paquet(s) $* dans $ENVNAME..."
123-
if sudo arch-nspawn -c /var/cache/pacman/pkg "${ARCHSHELL_DIR}/${ENVNAME}" pacman -S --noconfirm "$@" > /dev/null 2>&1; then
124-
echo "Installation terminée."
125-
update_last_used "$ENVNAME"
126-
for pkg in "$@"; do
127-
add_package "$ENVNAME" "$pkg"
128-
done
129-
else
130-
echo "Erreur lors de l'installation des paquets."; exit 4;
131-
fi
150+
echo -e "${BLUE}[*] Installation de(s) paquet(s) $* dans $ENVNAME...${NC}"
151+
(
152+
sudo arch-nspawn -c /var/cache/pacman/pkg "${ARCHSHELL_DIR}/${ENVNAME}" pacman -S --noconfirm "$@" > /dev/null 2>&1
153+
) &
154+
spinner $! "Installation des paquets"
155+
echo -e "${GREEN}[*] Installation terminée.${NC}"
156+
update_last_used "$ENVNAME"
157+
for pkg in "$@"; do
158+
add_package "$ENVNAME" "$pkg"
159+
done
132160
;;
133161
enter)
134162
if [ $# -lt 2 ]; then

0 commit comments

Comments
 (0)