From 7a00668997e0b97966d7df7d705af4dc330325f6 Mon Sep 17 00:00:00 2001 From: Yasser Boulayoune Date: Thu, 8 Oct 2026 10:12:00 +0200 Subject: [PATCH] =?UTF-8?q?Prompt=20maison=20et=20couleurs=20du=20th=C3=A8?= =?UTF-8?q?me?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .config/servyass/banner.zsh | 90 +++++++++++++++++++++++++++++++++++++ README.md | 14 ++++++ 2 files changed, 104 insertions(+) create mode 100644 .config/servyass/banner.zsh create mode 100644 README.md diff --git a/.config/servyass/banner.zsh b/.config/servyass/banner.zsh new file mode 100644 index 0000000..ac5f4dd --- /dev/null +++ b/.config/servyass/banner.zsh @@ -0,0 +1,90 @@ +# banner.zsh : écran d'accueil de servyass (style du portfolio : noir, accent lime, mono, labels espacés) +# Appelé depuis ~/.zshrc à l'ouverture d'une session ; relançable avec la commande `motd`. + +servyass_banner() { + emulate -L zsh + setopt extendedglob + local L=$'\e[38;2;211;253;80m' W=$'\e[38;2;245;245;240m' M=$'\e[38;2;138;138;133m' D=$'\e[38;2;70;70;66m' + local A=$'\e[38;2;255;207;74m' R=$'\e[38;2;255;95;95m' B=$'\e[1m' X=$'\e[0m' + + # Logo « ANSI Shadow » : blocs pleins + ombre portée. SERV en blanc, YASS en lime (dégradé du haut vers le bas), + # comme YASSER / BOULAYOUNE sur le portfolio. Les ombres (╗║╔═╝╚) sont en gris foncé. + local -a S=('███████╗' '██╔════╝' '███████╗' '╚════██║' '███████║' '╚══════╝') + local -a E=('███████╗' '██╔════╝' '█████╗ ' '██╔══╝ ' '███████╗' '╚══════╝') + local -a Rr=('██████╗ ' '██╔══██╗' '██████╔╝' '██╔══██╗' '██║ ██║' '╚═╝ ╚═╝') + local -a V=('██╗ ██╗' '██║ ██║' '██║ ██║' '╚██╗ ██╔╝' ' ╚████╔╝ ' ' ╚═══╝ ') + local -a Y=('██╗ ██╗' '╚██╗ ██╔╝' ' ╚████╔╝ ' ' ╚██╔╝ ' ' ██║ ' ' ╚═╝ ') + local -a Aa=(' █████╗ ' '██╔══██╗' '███████║' '██╔══██║' '██║ ██║' '╚═╝ ╚═╝') + local -a grad=('211;253;80' '196;242;70' '178;228;60' '158;212;52' '138;194;44' '118;176;38') + local -a ink=('245;245;240' '238;238;232' '228;228;222' '216;216;210' '204;204;198' '192;192;186') + local sh=$'\e[38;2;58;58;54m' i c ch out left right + print + for i in {1..6}; do + left="${S[i]}${E[i]}${Rr[i]}${V[i]}" right="${Y[i]}${Aa[i]}${S[i]}${S[i]}" + out=" " + for ch in ${(s::)left}; do [[ $ch == '█' ]] && out+=$'\e[38;2;'${ink[i]}'m█' || { [[ $ch == ' ' ]] && out+=' ' || out+="${sh}${ch}"; }; done + for ch in ${(s::)right}; do [[ $ch == '█' ]] && out+=$'\e[38;2;'${grad[i]}'m█' || { [[ $ch == ' ' ]] && out+=' ' || out+="${sh}${ch}"; }; done + (( i == 6 )) && out+=" ${M}©$(date +%Y)" + print -r -- "${out}${X}" + done + print -r -- " ${L}▌${X} ${M}SERVEUR PERSO · DEBIAN $(cut -d. -f1 /etc/debian_version) · RÉGION LYONNAISE${X}" + print + + # Jauge : 16 traits, lime sous 75 %, ambre jusqu'à 90 %, rouge au-delà + bar() { + local p=$1 n=$(( ($1 * 16 + 50) / 100 )) c=$L + (( p >= 75 )) && c=$A; (( p >= 90 )) && c=$R + print -rn -- "${c}${(l:n::━:)}${D}${(l:16-n::─:)}${X}" + } + row() { print -r -- " ${M}${(r:9:)1}${X}$2"; } + + # Uptime + local up=${$(= 86400 )); then upt="$(( up / 86400 )) j $(( up % 86400 / 3600 )) h" + elif (( up >= 3600 )); then upt="$(( up / 3600 )) h $(( up % 3600 / 60 )) min" + else upt="$(( up / 60 )) min"; fi + + # Charge + température CPU + local -a la=(${=$(= 70 )) && tc=$A; (( t >= 85 )) && tc=$R + + # Mémoire + local mt ma + mt=${${(M)${(f)"$(/dev/null)"}[2]}) + local dp=${df[5]%\%} + + row UPTIME "${W}${upt}${X}" + row CPU "${tc}${t}°C${X} ${M}charge${X} ${W}${la[1]} ${la[2]} ${la[3]}${X} ${D}($(nproc) cœurs)${X}" + row MÉMOIRE "$(bar $mp) ${W}$(printf '%.1f' $(( mu / 1048576.0 )))${M} / $(printf '%.1f' $(( mt / 1048576.0 ))) Go${X}" + row DISQUE "$(bar $dp) ${W}${dp} %${M} · $(( df[3] / 1048576 )) / $(( df[2] / 1048576 )) Go${X}" + + # Docker : actifs / arrêtés + if (( $+commands[docker] )); then + local -a st=(${(f)"$(docker ps -a --format '{{.State}}' 2>/dev/null)"}) + local on=${#${(M)st:#running}} off=$(( ${#st} - ${#${(M)st:#running}} )) + local -a unh=(${(f)"$(docker ps --filter health=unhealthy --format '{{.Names}}' 2>/dev/null)"}) + local line="${L}●${X} ${W}${on} actifs${X}" + (( off )) && line+=" ${D}○ ${off} arrêtés${X}" + (( ${#unh} )) && [[ -z $YB_BANNER_PUBLIC ]] && line+=" ${R}▲ ${(j:, :)unh}${X} ${M}en mauvaise santé${X}" + row DOCKER "$line" + fi + + # Réseau : LAN, Tailscale (100.*) + local -a ips=(${=$(hostname -I 2>/dev/null)}) + local lan=${${(M)ips:#192.168.1.*}[1]} ts=${${(M)ips:#100.*}[1]} + local net="${W}${lan:-?}${X}" + [[ -n $ts ]] && net+=" ${M}tailscale${X} ${W}${ts}${X}" + [[ -z $YB_BANNER_PUBLIC ]] && row RÉSEAU "$net" # YB_BANNER_PUBLIC=1 : captures publiques sans adresses internes + + print + print -r -- " ${D}──${X} ${M}$(LC_TIME=fr_FR.UTF-8 date '+%A %-d %B · %H:%M')${X}" + print + unfunction bar row +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..fbacb29 --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# servyass-dotfiles + +Configuration zsh de mon serveur : prompt maison, couleurs accordées au portfolio et bannière d'accueil. + +## Stack + +- zsh, vcs_info +- zsh-syntax-highlighting, zsh-autosuggestions, fzf + +## Installation + +``` +cp .zshrc ~/ && mkdir -p ~/.config/servyass && cp .config/servyass/banner.zsh ~/.config/servyass/ +```