import os import shutil import subprocess import sys from pathlib import Path class Application(object): def __init__(self, *args, **kwargs): for key in kwargs: setattr(self, key, kwargs[key]) self._hello() def _hello(self): print(f"NFDOS {getattr(self, 'version', '')} — inicializador de ambiente") def run(self): self._ensure_venv() self._install_mkdocs() self._build_site() self.launch_welcome() def _ensure_venv(self): """Cria e ativa o ambiente virtual, caso ainda não exista.""" python_working_directory = ("src") os.chdir(python_working_directory) venv_path = Path("venv") if not venv_path.exists(): print("[+] A criar ambiente virtual...") subprocess.run([sys.executable, "-m", "venv", "venv"], check=True) else: print("[=] Ambiente virtual já existente.") def _install_mkdocs(self): """Instala o MkDocs dentro do ambiente virtual.""" print("[+] A instalar o MkDocs e o tema Material...") subprocess.run(["venv/bin/pip", "install", "-U", "mkdocs", "mkdocs-material"], check=True) subprocess.run(["venv/bin/pip", "install", "-U", "colorama", "rich"], check=True) def _build_site(self): """Gera o site estático a partir da pasta docs/.""" print("[+] A compilar o site com o MkDocs...") subprocess.run(["venv/bin/mkdocs", "build", "--clean"], check=True) print("[✓] Site compilado com sucesso na diretoria 'site/'.") def detect_environment(self): """Deteta se o ambiente possui interface gráfica GNOME disponível.""" if os.environ.get("DISPLAY") and shutil.which("gnome-shell"): return "tui" return "tui" def launch_welcome(self): """Lança o modo de boas-vindas (texto ou gráfico) consoante o ambiente detetado.""" mode = self.detect_environment() print(f"[✓] Ambiente detetado: {mode}") if mode == "gui": subprocess.run(["python3", "gui/terminal.py"]) else: subprocess.run(["python3", "tui/main.py"])