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.
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
💤 Nota sobre o Dash: O shell
dashpermanece em estado dormente (delegando para osh). Como o parser estrito dodashrejeita a declaração de funções emkebab-case(path-front(),mount-device()), optamos por não comprometer a arquitetura Clean Code do projeto por causa dele. Caso odashimplemente 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.
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.
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💡 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 desktopReinicie 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 🐧
Linuxe qual 🐚Shellestá rodando, e injeta as linhas desourceno arquivo RC correto de forma inteligente — tanto para o seu usuário atual como para oroot.
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.
| 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 |
| 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 |
| 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>"]
| 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 |
| 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) |
| Comando / Alias | Descrição | Tecnologias Suportadas |
|---|---|---|
mount-devicemntdev / 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-deviceumntdev / umdev / udev |
Desmonta ~/Device, fecha túneis e remove o diretório com segurança. |
fusermount3, fusermount, umount, KDE Connect CLI |
| 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 - |
| 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}). |
| 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 |
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-keysdetecta o seussh-agentrodando 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 pullem~/.vault) e recarrega o terminal com as novas variáveis e chaves atualizadas.
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, 🍎MacOSou 🪟Windows(via MSYS2), e identifica o 🐚Shellrodando (📜bash, ⚡zsh, ⚙️sh). - Distribuição Linux e Família: Ao rodar no 🐧
Linuxou 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 queupdate-systemeupdate-allchamem os comandos corretos (update-apt,update-pacman,update-dnf,update-pkg, etc.) automaticamente sob os panos, sem conflitos. Gerenciadores isolados comoflatpak,snapeparu/yay(AUR) ganham comandos modulares dedicados (update-flatpak,update-snap,update-aur) que são orquestrados dinamicamente peloupdate-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_scheme—darkoulightvia XDG Portal / D-Bus / GSettings / KDE Globals) e mapeia as variáveis de integração para todos os principais ecossistemas:- GTK: Mapeia
GTK_THEMEinteligentemente via_detect_gtk_theme(Breeze-Darkno KDE para alinhar ferramentas GTK à paleta do Plasma, integração nativa via GSettings no GNOME sem forçar overrides que degradem o Libadwaita GTK4, eadw-gtk3-dark/Adwaita:darkem WMs). - Qt: Mapeia
QT_QPA_PLATFORMTHEMEdinamicamente (xdgdesktopportalno GNOME/KDE/Sway/Hyprland,gtk3em XFCE/MATE/Cinnamon ouqt6ct/qt5ctvia_detect_qt_platform_theme) e gerenciaQT_STYLE_OVERRIDE(Breeze-Dark/Breezeno KDE via_detect_qt_theme). Em desktops baseados em GTK, a presença do motor de estilo Plasma Breeze (Qt6) e do gerenciadorqt6ct(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=1para garantir renderização perfeita de IDEs JetBrains, DBeaver e Ghidra sem telas cinzas.
- GTK: Mapeia
- Terminal TrueColor (24-bit RGB): Exporta globalmente
COLORTERM="truecolor"eMICRO_TRUECOLOR=1, garantindo renderização de 16 milhões de cores em utilitários CLI (micro,bat,eza,fzf,neovim).
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
- 🎨
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 (comoincusno Linux eclearno FreeBSD). - 📚
library/: A biblioteca padrão do projeto. Fornece utilitários de sistema e módulos de inteligência (detect.shefunctions.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 comGTK_THEME. - 🌐
server/: Perfil extremamente enxuto, ágil e focado em estabilidade para servidores remotos e produção. - 📦
container/: Perfil rigorosamente otimizado para microambientes (LXC/Incusno Linux ouJails/Bastilleno 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 dosh).
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):
- Shebang Padrão Absoluto (
#!/usr/bin/env sh): Todo script de shell DEVE usar#!/usr/bin/env sh. Não use#!/bin/shou#!/bin/bashrígidos. - Permissões em 4 Dígitos Octais: Utilize SEMPRE notação de 4 dígitos em comandos
chmod:chmod 0755para diretórios e scripts executáveis;chmod 0644para arquivos de configuração e scripts sourced (.sh). - 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.
- Portabilidade POSIX: Scripts compartilhados em
library/ecore/devem rodar no/bin/shdo FreeBSD sem depender de bashisms (sem[[, sem arrays bash, com aspas em todas as variáveis). - Zero Segredos: Nenhuma credencial ou token pode residir neste repositório; toda integração confidencial é delegada ao
Vault.