Skip to content

Repository files navigation

🐚 Universal Shell Environment

Configurações, aliases e prompts centralizados para todos os seus ambientes de sistema, mantendo a experiência consistente seja no Desktop, Servidor, Contêiner ou WSL.

Sistemas Suportados

Linux FreeBSD MacOS Windows

Contextos de Ambiente

Desktop Server Container WSL

flowchart LR
    subgraph OS ["🖥️ Plataformas"]
        LNX["🐧 Linux"]
        BSD["😈 FreeBSD"]
        WIN["🪟 Windows"]
        MAC["🍎 MacOS"]
    end

    subgraph CTX ["🎯 Contextos"]
        DSK["💻 Desktop"]
        SRV["🌐 Server"]
        CNT["📦 Container"]
        WSL["🧩 WSL"]
    end

    LNX --> DSK
    LNX --> SRV
    LNX --> CNT
    LNX --> WSL

    BSD --> DSK
    BSD --> SRV
    BSD --> CNT

    WIN --> DSK

    MAC --> DSK
Loading

Shells Compatíveis

Bash Zsh Sh Dash

💤 Nota sobre o Dash: O shell dash permanece em estado dormente (delegando para o sh). Como o parser estrito do dash rejeita a declaração de funções em kebab-case (path-front(), mount-device()), optamos por não comprometer a arquitetura Clean Code do projeto por causa dele. Caso o dash implemente essa compatibilidade no futuro, o suporte florescerá!

📖 Princípios de Engenharia: Conheça os 18 princípios UNIX e boas práticas Clean Code aplicadas a este shell em PRINCIPLES.md.

🚀 Instalação

Você pode escolher o contexto do ambiente passando o parâmetro --context (opções: desktop, server, container, wsl). Por padrão, se não for informado, o script assumirá o contexto desktop.

🐧 Linux / 😈 FreeBSD / 🍎 MacOS

1. Clone o repositório:

doas git clone "https://github.com/GabrielFrigo4/Shell" "/usr/local/share/shell"
# ou
sudo git clone "https://github.com/GabrielFrigo4/Shell" "/usr/local/share/shell"

2. Execute a instalação: Escolha o contexto desejado abaixo e copie o comando do seu shell de preferência:

💻 Desktop (Padrão)

bash "/usr/local/share/shell/install.sh" --context desktop
# ou
zsh "/usr/local/share/shell/install.sh" --context desktop
# ou
sh "/usr/local/share/shell/install.sh" --context desktop

🌐 Server

bash "/usr/local/share/shell/install.sh" --context server
# ou
zsh "/usr/local/share/shell/install.sh" --context server
# ou
sh "/usr/local/share/shell/install.sh" --context server

📦 Container

bash "/usr/local/share/shell/install.sh" --context container
# ou
zsh "/usr/local/share/shell/install.sh" --context container
# ou
sh "/usr/local/share/shell/install.sh" --context container

🧩 WSL

bash "/usr/local/share/shell/install.sh" --context wsl
# ou
zsh "/usr/local/share/shell/install.sh" --context wsl
# ou
sh "/usr/local/share/shell/install.sh" --context wsl

🪟 Windows

💡 Ambiente: No Windows, o projeto funciona utilizando o terminal do MSYS2.

1. Clone o repositório:

git clone "https://github.com/GabrielFrigo4/Shell" "${HOME}/.shell"

2. Execute a instalação:

bash "${HOME}/.shell/install.sh" --context desktop
# ou
zsh "${HOME}/.shell/install.sh" --context desktop

🔄 Pós-Instalação

Reinicie o shell ou recarregue o arquivo RC manualmente:

. ~/.bashrc
# ou
. ~/.zshrc
# ou
. ~/.shrc
# ou
. ~/.dashrc

💡 Nota Importante: O script detecta automaticamente o seu OS, distribuição 🐧 Linux e qual 🐚 Shell está rodando, e injeta as linhas de source no arquivo RC correto de forma inteligente — tanto para o seu usuário atual como para o root.

🗺️ Mapa de Comandos Públicos & Atalhos

O projeto adota uma convenção estrita de nomenclatura para garantir máxima clareza e manter o seu autocompletion limpo:

  • 🌐 kebab-case (ou termo único) = Comandos Públicos: Utilitários e atalhos desenhados para você usar interativamente no terminal.
  • 🔒 _snake_case (prefixo _) = Helpers Privados: Funções internas de bootstrapping e infraestrutura que não poluem o autocompletion.

1. ⚙️ Shell, Ambiente & Vault (Universais)

Comando / Alias Descrição Compatibilidade
update-shell / upsh Sincroniza o repositório local do shell (git pull) e recarrega a sessão. Universal
reinstall-shell / resh Reexecuta o instalador install.sh preservando o contexto ativo (desktop, server, etc.). Universal
update-vault / upvt Sincroniza o repositório do cofre (~/.vault) e recarrega chaves e variáveis. Linux, FreeBSD, macOS
path-front <dir> Insere um diretório no início do $PATH (prioridade máxima). Universal
path-back <dir> Insere um diretório no fim do $PATH (prioridade mínima). Universal
path-dedup Remove diretórios duplicados do $PATH preservando a ordem. Universal

2. 📝 Editores de Texto & Terminal

Comando Canônico / Alias Descrição Editor Alvo
editor [alvo] / e [alvo] Abre o editor padrão configurado. Se chamado sem argumentos, abre .. $VISUAL / $EDITOR (com cascata Neovim > Helix > Micro > Kakoune > Nano > EE > MG > Vim > MC > VI)
open-neovim / open-nvim / on [alvo] Abre o Neovim no diretório ou arquivo especificado (padrão: .). nvim
open-vim / ov [alvo] Abre o Vim no diretório ou arquivo especificado (padrão: .). vim
open-helix / open-hx / oh / h [alvo] Abre o Helix no diretório ou arquivo especificado (padrão: .), restaurando o cursor. hx (com wrapper defensivo de cursor)
open-micro / om [alvo] Abre o Micro no diretório ou arquivo especificado (padrão: .). micro
open-code / oc [alvo] Abre o VS Code no diretório ou arquivo especificado (padrão: .). code / vscode
open-codium / ocm [alvo] Abre o VSCodium no diretório ou arquivo especificado (padrão: .). codium
open-antigravity / open-ant / oa [alvo] Abre o Antigravity IDE (padrão: .) ou ant para executar. antigravity-ide
open-zed / oz [alvo] Abre o Zed no diretório ou arquivo especificado (padrão: .). zed
open-kate / ok [alvo] Abre o Kate em segundo plano (padrão: .). kate
open-geany / og [alvo] Abre o Geany em segundo plano (padrão: .). geany
emacs-start / es Inicia o daemon do Emacs em segundo plano. emacs --daemon / runemacs
emacs-kill / ek Encerra processos do Emacs em execução. pkill emacs
emacs-restart / er Reinicia o daemon do Emacs (emacs-kill && emacs-start). Emacs Daemon
emacs-client / ec [args] Abre o cliente Emacs em uma nova janela (emacsclient). emacsclient / emacsclientw
emacs-open / oe [alvo] Abre o Emacs GUI no diretório/arquivo atual em segundo plano. emacsclient / emacsclientw

3. 📦 Atualização de Pacotes & Sistema Operacional

Comando Canônico / Alias Descrição Escopo / Gerenciador
update-all / upall / u Orquestrador Global: Atualiza o sistema base + AUR + Flatpak + Snap. Universal
update-system / upsys Atualiza os pacotes do sistema base detectando a distribuição nativa. Universal
update-aur / upaur / upyay / upparu Atualiza pacotes do Arch User Repository (prioriza paru > yay). Arch Linux
update-pacman / upman Atualiza pacotes via Pacman. Arch Linux / Windows (MSYS2)
update-apt / upapt Atualiza repositórios e pacotes via APT. Debian, Ubuntu, Mint, Pop!_OS
update-dnf / updnf Atualiza pacotes via DNF. Fedora, RHEL, Rocky, Alma
update-zypper / upzyp Atualiza pacotes via Zypper. openSUSE, SLES
update-xbps / upxbps Atualiza pacotes via XBPS. Void Linux
update-apk / upapk Atualiza pacotes via APK. Alpine Linux
update-pkg / uppkg Atualiza pacotes via PKG. FreeBSD
update-flatpak / upflat Atualiza todos os Flatpaks instalados. Linux
update-snap / upsnap Atualiza todos os Snaps instalados. Linux
flowchart TD
    UPALL["🚀 update-all<br/><i>(Orquestrador Global / upall / u)</i>"]
    UPSYS["📦 update-system<br/><i>(Sistema Base / upsys)</i>"]

    UPALL --> UPSYS
    UPALL -.->|se instalado| AUR["📦 update-aur<br/><i>(paru / yay)</i>"]
    UPALL -.->|se instalado| FLAT["📦 update-flatpak<br/><i>(Flatpak)</i>"]
    UPALL -.->|se instalado| SNAP["📦 update-snap<br/><i>(Snap)</i>"]

    UPSYS --> DNF["update-dnf<br/><i>(Fedora / RHEL)</i>"]
    UPSYS --> APT["update-apt<br/><i>(Debian / Ubuntu)</i>"]
    UPSYS --> MAN["update-pacman<br/><i>(Arch / MSYS2)</i>"]
    UPSYS --> PKG["update-pkg<br/><i>(FreeBSD)</i>"]
    UPSYS --> ZYP["update-zypper<br/><i>(OpenSUSE)</i>"]
    UPSYS --> XBPS["update-xbps<br/><i>(Void)</i>"]
    UPSYS --> APK["update-apk<br/><i>(Alpine)</i>"]
Loading

4. 🌐 Rede & Wi-Fi

Comando Canônico / Alias Descrição Backend Nativo
update-wifi / upwf Sincroniza credenciais de Wi-Fi (WIFI_SSID_* / WIFI_PASS_*) com o SO. Linux (nmcli), FreeBSD (wpa_supplicant/wifibox), Windows (netsh)
update-network / upnet Orquestrador de rede (executa update-wifi e valida conectividade). Universal

5. ⚡ Controle de Energia

Comando Descrição Ação Nativa
poweroff Desliga o computador com segurança via _as_root. Linux (shutdown -h now), FreeBSD (shutdown -p now), Windows (shutdown.exe /s /t 0)
reboot Reinicia o computador com segurança via _as_root. Linux/FreeBSD (shutdown -r now), Windows (shutdown.exe /r /t 0)

6. 📱 Gestão de Dispositivos Móveis (Contexto Desktop)

Comando / Alias Descrição Tecnologias Suportadas
mount-device
mntdev / mdev
Mapeia celular em ~/Device em 4 estágios inteligentes. GNOME/XFCE MTP (GVfs), GSConnect, KDE Dolphin (KIO-MTP), KDE Connect (KIO-FUSE), ADB (adbfs)
umount-device
umntdev / umdev / udev
Desmonta ~/Device, fecha túneis e remove o diretório com segurança. fusermount3, fusermount, umount, KDE Connect CLI

7. ⚡ Utilitários Modernos, Atalhos & Navegação

Comando / Alias Descrição Ferramenta Alvo & Fallback
l Listagem enxuta com ícones e agrupamento de diretórios. eza > exa > ls (usa ls nativo em TTY bruto)
ll Listagem detalhada com metadados, permissões e status Git. eza -la --git > exa -la --git > ls -laF
la Listagem incluindo arquivos ocultos. eza -a > exa -a > ls -a
lt Exibição da árvore de diretórios (tree view). eza --tree > exa --tree > tree
g <termo> Busca rápida em arquivos. rg --smart-case > grep -Ei
c <arquivo> / b Visualização formatada com destaque de sintaxe. bat --paging=never > cat (usa cat em TTY bruto)
f <nome> / ff Busca rápida de arquivos e diretórios. fd / fd --hidden --no-ignore > find
~, /, .., ..., ...., -- - Atalhos rápidos de navegação no sistema de arquivos. cd ~, cd /, cd .., cd ../.., cd ../../.., cd -

8. 🖥️ Contextos Especiais & Integrações

Contexto / Target Comando / Alias Descrição
Desktop (Linux/BSD) start-session [way|xorg] [de] Inicia sessão gráfica universal (prioriza Wayland e faz fallback para Xorg).
Desktop (Linux/BSD) start-way / way / wayland [de] Inicia sessão Wayland (auto-detecta ou aceita plasma, gnome, hyprland, sway, cosmic, etc.).
Desktop (Linux/BSD) start-xorg / xorg / x11 [de] Inicia sessão X11 (auto-detecta ou aceita plasma, gnome, xfce, i3, bspwm, etc.).
Servidores frigo-server / orbs-server Conexão SSH autenticada via chaves privadas do Vault.
WSL (Linux no Windows) explorer, powershell, pwsh, cmd, clip Atalhos diretos para utilitários do Windows nativo a partir do WSL.
POSIX Shell (sh / dash) h / history, j, m Atalhos rápidos de histórico (fc -l), jobs e paginação (${PAGER}).

9. 🌐 Variáveis de Ambiente & Configurações Públicas

Variável Descrição / Propósito Origem / Padrão
SHELL_REPO_DIR Caminho raiz do repositório clonado do Universal Shell. /usr/local/share/shell (Linux/BSD) ou ~/.shell (Windows)
SHELL_CONTEXT Contexto ativo carregado na sessão interativa. desktop (padrão), server, container, wsl
SHELL Caminho do executável do shell ativo. Auto-detectado dinamicamente (bash, zsh, sh)
EDITOR / VISUAL Editor de texto padrão do sistema. Preserva o do usuário ou define via cascata (nvim > hx > micro > ...)
FILEMANAGER Gerenciador de arquivos preferido para abrir pastas no desktop. Lido pelo mount-device (fallback para dolphin, nautilus, thunar, etc.)
COLORTERM Sinaliza suporte universal a 24-bit TrueColor RGB no terminal. Exportado globalmente como truecolor
MICRO_TRUECOLOR Ativa suporte a TrueColor no editor Micro. Exportado globalmente como 1
GTK_THEME Tema visual aplicado a ferramentas GTK3/GTK4. Auto-detectado (Breeze-Dark, Adwaita:dark, etc.) via XDG Portal / D-Bus
QT_QPA_PLATFORMTHEME Módulo de plataforma e diálogo de arquivos para aplicativos Qt. Auto-detectado (xdgdesktopportal, gtk3, qt6ct, qt5ct)
QT_STYLE_OVERRIDE Motor de renderização de estilo para Qt. Auto-detectado (Breeze-Dark, Breeze)
ELECTRON_OZONE_PLATFORM_HINT Ativa renderização nativa em Wayland para apps Electron. Exportado globalmente como auto
_JAVA_AWT_WM_NONREPARENTING Corrige janelas cinzas em apps Java/Swing em WMs tiling e Wayland. Exportado globalmente como 1
EMACS_SOCKET_NAME Caminho do socket de autenticação do daemon Emacs. ${HOME}/.emacs.d/var/server/auth/server
HISTSIZE / HISTFILE Limite e arquivo de histórico persistente no POSIX sh. 10000 comandos em ${HOME}/.sh_history
WIFI_SSID_* / WIFI_PASS_* Credenciais de redes Wi-Fi lidas e sincronizadas pelo update-wifi/update-network (upwf/upnet). Injetadas pelo Vault ou variáveis de ambiente
FRIGO_SERVER_* / ORBS_SERVER_* Chaves SSH e endereços IP de servidores remotos. Injetados pelo Vault

🔐 Integração com Vault (Segredos Seguros)

Para manter este repositório 100% público e seguro, o sistema possui uma integração nativa com um repositório de cofre privado (Vault).

Se o diretório ~/.vault for detectado, o shell carregará automaticamente:

  • 🔑 Variáveis e Configurações: Credenciais, tokens, chaves de API, endereços de servidores e atalhos de conexão privados (vault.sh).
  • 🛡️ Chaves SSH: O alias vault-keys detecta o seu ssh-agent rodando e adiciona automaticamente todas as suas chaves privadas contidas na pasta do cofre de forma segura e silenciosa.
  • 🔄 update-vault / upvt: Sincroniza o repositório do seu cofre (git pull em ~/.vault) e recarrega o terminal com as novas variáveis e chaves atualizadas.

🧠 Detecção Inteligente

O projeto conta com módulos avançados de reconhecimento em library/detect.sh que mapeiam perfeitamente o seu ecossistema:

  • OS e Shell: Reconhece se você está no 🐧 Linux, 😈 FreeBSD, 🍎 MacOS ou 🪟 Windows (via MSYS2), e identifica o 🐚 Shell rodando (📜 bash, ⚡ zsh, ⚙️ sh).
  • Distribuição Linux e Família: Ao rodar no 🐧 Linux ou no 🧩 WSL2, o módulo descobre a distribuição exata (_detect_distro) e a agrupa pela família do gerenciador de pacotes base (_detect_distro_family — ex: debian, arch, fedora, suse, void, alpine). Isso permite que update-system e update-all chamem os comandos corretos (update-apt, update-pacman, update-dnf, update-pkg, etc.) automaticamente sob os panos, sem conflitos. Gerenciadores isolados como flatpak, snap e paru/yay (AUR) ganham comandos modulares dedicados (update-flatpak, update-snap, update-aur) que são orquestrados dinamicamente pelo update-all.
  • Desktop Environment & Dark Mode (GTK, Qt, Electron, Java): Identifica o ambiente gráfico (_detect_desktop_environment — ex: kde, gnome, xfce, sway, hyprland), a preferência de esquema de cores do sistema (_detect_color_schemedark ou light via XDG Portal / D-Bus / GSettings / KDE Globals) e mapeia as variáveis de integração para todos os principais ecossistemas:
    • GTK: Mapeia GTK_THEME inteligentemente via _detect_gtk_theme (Breeze-Dark no KDE para alinhar ferramentas GTK à paleta do Plasma, integração nativa via GSettings no GNOME sem forçar overrides que degradem o Libadwaita GTK4, e adw-gtk3-dark/Adwaita:dark em WMs).
    • Qt: Mapeia QT_QPA_PLATFORMTHEME dinamicamente (xdgdesktopportal no GNOME/KDE/Sway/Hyprland, gtk3 em XFCE/MATE/Cinnamon ou qt6ct/qt5ct via _detect_qt_platform_theme) e gerencia QT_STYLE_OVERRIDE (Breeze-Dark/Breeze no KDE via _detect_qt_theme). Em desktops baseados em GTK, a presença do motor de estilo Plasma Breeze (Qt6) e do gerenciador qt6ct (Qt6 Configuration Tool) garante paletas escuras perfeitas, fontes e ícones coerentes para ferramentas Qt puras (Wireshark, VLC, OBS) e do KDE (Kate, Krita).
    • Electron (Wayland): Define ELECTRON_OZONE_PLATFORM_HINT="auto" para que apps como VSCode, Discord, Obsidian e Spotify rodem com renderização nítida nativa no Wayland.
    • Java / Swing: Exporta _JAVA_AWT_WM_NONREPARENTING=1 para garantir renderização perfeita de IDEs JetBrains, DBeaver e Ghidra sem telas cinzas.
  • Terminal TrueColor (24-bit RGB): Exporta globalmente COLORTERM="truecolor" e MICRO_TRUECOLOR=1, garantindo renderização de 16 milhões de cores em utilitários CLI (micro, bat, eza, fzf, neovim).

📁 Estrutura do Repositório

flowchart TD
    RC["🐚 Arquivo RC (~/.bashrc / ~/.zshrc / ~/.shrc)"] --> LIB["📚 1. library/*.sh"]
    LIB --> CORE["⚙️ 2. core/*.sh"]
    CORE --> TGT["🎨 3. target/{OS}/{SHELL}/prompt.sh"]

    subgraph PROMPT_FLOW ["⚡ Orquestração por Sessão"]
        TGT --> THM["🖌️ theme/{SHELL}.sh"]
        TGT --> ENV["⚙️ target/{OS}/environment.sh"]
        TGT --> CTX_COM["🧩 context/{CONTEXT}/common.sh"]
        TGT --> CTX_OS["🎯 context/{CONTEXT}/{OS}.sh"]
    end
Loading
  • 🎨 target/: Configurações divididas por Sistema Operacional (🐧 Linux, 😈 FreeBSD, 🍎 MacOS, 🪟 Windows). Mantém a experiência visual e comportamental exata 1:1, gerenciando caminhos, variáveis e comandos do SO (como incus no Linux e clear no FreeBSD).
  • 📚 library/: A biblioteca padrão do projeto. Fornece utilitários de sistema e módulos de inteligência (detect.sh e functions.sh), garantindo detecção precisa de SO, shell, distribuição, ambiente gráfico e esquemas de cores.
  • ⚙️ core/: O núcleo do projeto. Responsável por inicializar as fundações do ambiente, variáveis essenciais e a integração automática com o Universal Vault Environment (vault.sh).
  • 🎯 context/: O orquestrador de ambientes. Adapta dinamicamente as ferramentas com base no seu escopo atual através de uma camada comum (common.sh) e uma camada de SO ({OS}.sh):
    • 💻 desktop/: Ambiente de produtividade gráfica com editores de código (nvim, vim, kate, vscode), atalhos de janelas/sessões, gerenciamento inteligente de dispositivos móveis (mount-device/umount-device) e integração com GTK_THEME.
    • 🌐 server/: Perfil extremamente enxuto, ágil e focado em estabilidade para servidores remotos e produção.
    • 📦 container/: Perfil rigorosamente otimizado para microambientes (LXC/Incus no Linux ou Jails/Bastille no FreeBSD).
    • 🧩 wsl/: Ambiente híbrido que integra o Linux do WSL2 diretamente com as ferramentas nativas do Windows (explorer.exe, powershell.exe, cmd.exe, win32yank.exe).
  • 🖌️ theme/: A camada de identidade visual. Unifica o prompt, paleta de cores ANSI/Zstyle, ícones Nerd Fonts e branch Git/Got em todos os terminais, com adaptação dinâmica para modo TTY bruto (compatível 1:1 com o tema clássico do sh).

📜 Princípios e Padrões Obrigatórios deste Repositório

Para preservar a performance interativa e estabilidade em todos os sistemas operacionais, qualquer contribuição neste repositório DEVE seguir estes padrões (veja detalhes em PRINCIPLES.md):

  1. Shebang Padrão Absoluto (#!/usr/bin/env sh): Todo script de shell DEVE usar #!/usr/bin/env sh. Não use #!/bin/sh ou #!/bin/bash rígidos.
  2. Permissões em 4 Dígitos Octais: Utilize SEMPRE notação de 4 dígitos em comandos chmod: chmod 0755 para diretórios e scripts executáveis; chmod 0644 para arquivos de configuração e scripts sourced (.sh).
  3. Regra do Silêncio (Rule of Silence): Ao iniciar uma nova sessão ou conexão SSH, o terminal NÃO deve imprimir saídas de texto ou banners. O prompt deve aparecer em menos de 50 milissegundos.
  4. Portabilidade POSIX: Scripts compartilhados em library/ e core/ devem rodar no /bin/sh do FreeBSD sem depender de bashisms (sem [[, sem arrays bash, com aspas em todas as variáveis).
  5. Zero Segredos: Nenhuma credencial ou token pode residir neste repositório; toda integração confidencial é delegada ao Vault.

About

Configurações, aliases e prompts para todos os ambientes do sistema.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages