commit bb2734d8b2e952d6a4b42d919d7cc5de06dc8b8b
parent bebfa833a9272e9d9575b355d56235996e73a32e
Author: Pablo Murad <pablo@pablomurad.com>
Date: Fri, 27 Mar 2026 14:14:34 -0300
feat: expand admin controls and invitation-driven community platform
Diffstat:
4 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/tools/bin/runv-help b/tools/bin/runv-help
@@ -20,6 +20,7 @@ printf '%bpágina pessoal em %b~/public_html/%b e comunidade em torno de Linux e
printf '%b%bComandos runv.club%b\n' "${Y}" "${B}" "${R}"
printf ' %brunv-help%b Esta mensagem (ajuda e boas práticas).\n' "${G}" "${R}"
printf ' %brunv-links%b Links do projeto, site e parceiros.\n' "${G}" "${R}"
+printf ' %brunvers%b Espaços e serviços da comunidade (square, plantit).\n' "${G}" "${R}"
printf '\n'
printf '%b%bFerramentas instaladas no servidor%b (exemplos)\n' "${Y}" "${B}" "${R}"
@@ -30,6 +31,7 @@ printf ' %bless%b Paginar ficheiros longos (ex.: less README.md).\n'
printf ' %btmux%b / %bbyobu%b Multiplexadores de terminal (várias sessões).\n' "${G}" "${R}" "${G}" "${R}"
printf ' %bmutt%b E-mail no terminal.\n' "${G}" "${R}"
printf ' %bchat%b IRC da rede da casa.\n' "${G}" "${R}"
+printf ' %brunvers%b Espaços e serviços da comunidade.\n' "${G}" "${R}"
printf ' %btree%b Árvore de diretórios.\n' "${G}" "${R}"
printf ' %brunv-games%b Jogos do servidor (inclui adventure e gotchi).\n' "${G}" "${R}"
printf '\n'
diff --git a/tools/bin/runvers b/tools/bin/runvers
@@ -0,0 +1,43 @@
+#!/bin/sh
+# runv.club — catálogo de espaços e serviços da comunidade
+
+R='\033[0m'
+G='\033[0;32m'
+C='\033[0;36m'
+Y='\033[0;33m'
+B='\033[1m'
+D='\033[2m'
+
+print_runv_art() {
+ while IFS= read -r line || [ -n "$line" ]; do
+ printf '%b%s%b\n' '\033[1;32m' "$line" '\033[0m'
+ done <<'RUNV_ART'
+██████╗ ██╗ ██╗███╗ ██╗██╗ ██╗
+██╔══██╗██║ ██║████╗ ██║██║ ██║
+██████╔╝██║ ██║██╔██╗ ██║██║ ██║
+██╔══██╗╚██╗ ██╔╝██║╚██╗██║╚██╗ ██╔╝
+██║ ██║ ╚████╔╝ ██║ ╚████║ ╚████╔╝
+╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═══╝ ╚═══╝
+RUNV_ART
+}
+
+if command -v clear >/dev/null 2>&1; then
+ clear
+fi
+
+print_runv_art
+printf '\n%s\n' '.club — espaços, experiências e serviços da casa'
+printf '\n'
+
+printf '%b%bDisponíveis agora%b\n' "${Y}" "${B}" "${R}"
+printf ' %b%-12s%b %b—%b espaço digital de encontro, conversa e comunidade.\n' "${G}" "square" "${R}" "${D}" "${R}"
+printf ' %b%-12s%b %b—%b jardim compartilhado para acompanhar e cuidar de plantas.\n' "${G}" "plantit" "${R}" "${D}" "${R}"
+printf '\n'
+
+printf '%b%bVoltar%b\n' "${Y}" "${B}" "${R}"
+printf ' Pressione %bEnter%b para voltar ao terminal.\n' "${C}" "${R}"
+printf '\n%s\n' '→ Explore quando quiser e volte com calma.'
+
+if [ -t 0 ]; then
+ IFS= read -r _
+fi
diff --git a/tools/motd/60-runv b/tools/motd/60-runv
@@ -90,7 +90,7 @@ printf ' %b%-12s%b %b—%b multiplexador de terminal (várias sessões).\n' "${
printf ' %b%-12s%b %b—%b barra de estado e atalhos sobre tmux/screen.\n' "${G}" "byobu" "${R}" "${D}" "${R}"
printf ' %b%-12s%b %b—%b cliente de e-mail no terminal.\n' "${G}" "mutt" "${R}" "${D}" "${R}"
printf ' %b%-12s%b %b—%b IRC da rede da casa.\n' "${G}" "chat" "${R}" "${D}" "${R}"
-printf ' %b%-12s%b %b—%b um espaço digital de encontro, troca e comunidade.\n' "${G}" "square" "${R}" "${D}" "${R}"
+printf ' %b%-12s%b %b—%b catálogo dos espaços e serviços da casa.\n' "${G}" "runvers" "${R}" "${D}" "${R}"
printf ' %b%-12s%b %b—%b catálogo de jogos do servidor.\n' "${G}" "runv-games" "${R}" "${D}" "${R}"
print_last_sessions_3x3
diff --git a/tools/tools.py b/tools/tools.py
@@ -218,7 +218,7 @@ def install_bin_scripts(
) -> None:
if not dry_run:
DEST_BIN_DIR.mkdir(parents=True, exist_ok=True)
- for name in ("runv-help", "runv-links", "runv-status", "runv-games", "chat"):
+ for name in ("runv-help", "runv-links", "runv-status", "runv-games", "runvers", "chat"):
copy_one(
BIN_DIR / name,
DEST_BIN_DIR / name,