Prepara Linux e macOS para o terminal: um comando, todas as suas ferramentas CLI.
Instala e gerencia um ambiente de desenvolvimento focado em terminal: shell,
ferramentas CLI modernas, git, o editor Helix configurado como IDE (com os
servidores de linguagem de cada perfil), Neovim (LazyVim e outras
distribuições, opcionais), linguagens, ambiente PHP local (lerd ou Flock), Python/dados, containers e o
terminal kitty + herdr. Tudo vem de um catálogo declarativo (catalog/) e de
perfis embutidos, com uma TUI para escolher o que instalar e uma CLI completa
para scripts.
Funciona no macOS e no Linux (Debian/Ubuntu, Fedora, Arch e openSUSE; x86_64 e arm64). É um binário único em Go, sem dependências em tempo de execução.
macOS e Linux: o script baixa a release mais recente, confere o SHA-256 e
instala em ~/.local/bin, sem sudo:
curl -fsSL https://raw.githubusercontent.com/eusener/kanivet-cli/master/install.sh | shPara fixar uma versão ou trocar o destino:
curl -fsSL https://raw.githubusercontent.com/eusener/kanivet-cli/master/install.sh | KANIVET_VERSION=0.1.0 KANIVET_INSTALL_DIR=/opt/bin shUbuntu/Debian, com o pacote .deb da página de releases
(troque amd64 por arm64 se for o caso):
curl -fsSLO https://github.com/eusener/kanivet-cli/releases/download/v0.1.0/kanivet-cli_0.1.0_amd64.deb
sudo apt install ./kanivet-cli_0.1.0_amd64.debFedora, com o pacote .rpm (troque x86_64 por aarch64 se for o caso):
sudo dnf install https://github.com/eusener/kanivet-cli/releases/download/v0.1.0/kanivet-cli-0.1.0-1.x86_64.rpmOs pacotes não são assinados. Se o dnf recusar por falta de assinatura, use
--nogpgcheck. Os pacotes instalam em /usr/bin e, quando removidos, não apagam
o estado em ~/.local/state/kanivet-cli. Cada release traz um checksums.txt
para conferir com sha256sum -c --ignore-missing checksums.txt.
macOS pelo navegador: o binário não é assinado pela Apple, então um
.tar.gz baixado pelo navegador é bloqueado pelo Gatekeeper. Libere com
xattr -d com.apple.quarantine ./kanivet-cli. O script acima não passa por esse
bloqueio.
kanivet-cli --version mostra a versão instalada.
go build -o kanivet-cli ./cmd/kanivet-cli # precisa do Go 1.24+kanivet-cli # abre a TUINa primeira vez abre o wizard: boas-vindas, perfil, categorias, revisão, execução e resumo. Nada é instalado antes da tela de revisão.
![]() |
![]() |
| Perfil: cada perfil mostra quantos itens traz | Itens: marque item a item, com método de instalação e configs |

Revisão: o plano lista cada comando e cada arquivo antes de qualquer mudança
| Perfil | O que traz |
|---|---|
blank |
Só a base: shell, ferramentas CLI modernas, git, Helix e o terminal |
web |
Node, pnpm e Bun, ferramentas de HTTP e tarefas, Helix para TypeScript |
laravel |
PHP via lerd (Linux) ou Flock (macOS), Composer, Node e Helix para PHP |
ml |
Python, uv, Ruff, JupyterLab e CUDA quando há GPU NVIDIA |
backend |
Rust, Go, .NET, Java, Podman e ferramentas de Kubernetes |
Todos incluem a base do blank. Depois de escolher o perfil, cada categoria
pode ser ajustada item a item. Em categorias exclusivas (distribuição do
Neovim, lerd ou Flock, Docker ou Podman) só um item fica marcado. Nenhuma
distribuição do Neovim vem marcada: o editor padrão é o Helix, e o LazyVim (com
os extras de linguagem do perfil) continua disponível na categoria
"Distribuição Neovim".
kanivet-cli profiles # perfis embutidos
kanivet-cli list # itens do catálogo
kanivet-cli status # estado de cada item nesta máquina
kanivet-cli plan --profile laravel # o que seria feito, sem alterar nada
kanivet-cli install --profile laravel # mostra o plano, pede confirmação e instala
kanivet-cli install lazygit --yes # itens avulsos, sem perguntar
kanivet-cli install --profile web --add rust --remove bun --version node=24
kanivet-cli install --resume # retoma uma execução interrompida
kanivet-cli update # atualiza o que o kanivet-cli instalou
kanivet-cli uninstall bat # desinstala e desfaz as configs do item
kanivet-cli restore # lista execuções com backup
kanivet-cli doctor # diagnóstico
kanivet-cli catalog lint # valida o catálogo- Nada muda sem revisão. O plano mostra cada comando e cada arquivo. Um
arquivo que já existe aparece marcado com
(backup)e é copiado para~/.local/state/kanivet-cli/backups/<execução>/antes de ser alterado;kanivet-cli restore <execução>desfaz. - Configs opinativas são opcionais. Cada config (kitty, herdr, Helix...) pode ser desmarcada na revisão ou no dashboard.
- Sem sudo à toa. No macOS as ferramentas vêm do Homebrew; no Linux, do mise
(binários no
~). Só os itens da seção "Precisa de sudo" pedem a senha, uma vez. - Linguagens pelo mise, com as exceções oficiais: Rust pelo rustup e PHP pelo lerd/Flock (ou Homebrew no macOS e static-php-cli no Linux, se nenhum dos dois for escolhido).
- Seleção aditiva.
installnunca remove nada;--removesó tira o item da seleção. Remover é sempreuninstall. - herdr primeiro. Se o herdr já está na máquina, toda execução começa com
herdr update; os outros passos esperam por ele. Se o update falhar (sem rede, por exemplo), a execução segue com o herdr atual. - Retomável. Uma falha não derruba os outros itens. Se a execução for
interrompida, rodar
kanivet-cliouinstallde novo oferece retomar de onde parou. - Shell. zsh e bash. Aliases e hooks vão para
~/.config/kanivet-cli/shell/init.{zsh,bash}, carregados por um único bloco# >>> kanivet-cli >>>no fim do rc.install --zshtambém troca o shell padrão para o zsh. - Idioma. Inglês por padrão; pt-BR quando
LANG/LC_ALLcomeça compt.
kanivet-cli sem subcomando, num terminal (stdin e stdout TTY), abre a TUI: o
wizard na primeira vez e o dashboard depois que já há itens ou perfil no estado.
Se houver uma execução inacabada, a TUI abre direto na revisão dos passos
pendentes: enter retoma e esc descarta. Sem TTY, imprime a ajuda.

Dashboard: status de cada item, versões, atualizações disponíveis e o que veio de fora do kanivet-cli
| Tecla | Ação |
|---|---|
setas ou hjkl |
mover |
space |
marcar/desmarcar |
enter |
confirmar ou avançar |
esc |
voltar |
/ |
buscar |
? |
ajuda |
q |
sair (confirma se houver mudanças pendentes) |
ctrl+c |
sair ou, durante a execução, interromper |
d (revisão) |
diff do arquivo |
a, u/U, p (dashboard) |
aplicar, atualizar, trocar de perfil |
f (execução) |
voltar a seguir o log |
l, r (resumo) |
l abre o log do passo sob o cursor; r tenta de novo só os itens que falharam |
tab/shift+tab (dashboard) |
trocar de aba de categoria (←/→ trocam a versão do item) |
c (itens) |
painel de configs |
O rodapé sempre mostra os atalhos da tela. Mínimo de 80×24. Em terminal com
cor, a TUI pinta um fundo creme sobre a tela inteira; com NO_COLOR ou em
terminais de 16 cores ela não pinta fundo e usa o do terminal. Os ícones usam
Nerd Font (instalada pelo item nerd-font-jetbrains), com fallback ASCII.
Com os itens instalados, o init do shell ativa:
| Comando / atalho | O que faz |
|---|---|
ls, ll, lt |
eza com ícones; ll com status do git, lt em árvore |
cat |
bat sem paginação |
z <pasta> / zi |
pula para pastas frequentes (zoxide) |
ctrl+r |
histórico com o atuin (a seta para cima continua normal) |
ctrl+t / alt+c |
fzf: arquivos (preview com bat) / entrar numa pasta |
y |
abre o yazi e, ao sair, fica na pasta onde você parou |
lg / lzd |
lazygit / lazydocker |
grep, find, sed, du, df e ps não ganham alias, porque as
ferramentas novas usam flags diferentes e quebrariam scripts. Use rg, fd,
sd, dust, duf e procs direto.
O Helix é o editor padrão de todos os perfis e define EDITOR e VISUAL como
hx. As configs (opcionais e com backup) deixam ele com cara de IDE: abas no
topo, statusline completa, diagnósticos e dicas de tipo inline, guias de
indentação, auto-save e formatação ao salvar. O tema é o monokai_soda_ide
(monokai_soda com a aba ativa e a linha do cursor destacadas).
Atalhos incluídos na config (os nativos do Helix continuam valendo):
| Atalho | Ação |
|---|---|
ctrl+s |
salvar (também no modo insert) |
ctrl+p / ctrl+shift+p |
abrir arquivo / paleta de comandos |
ctrl+shift+f |
buscar no projeto |
ctrl+e / ctrl+y |
explorador de arquivos nativo / yazi |
ctrl+b |
lista de buffers |
ctrl+g |
lazygit em tela cheia (recarrega os buffers ao sair) |
ctrl+t |
terminal (o seu shell) em tela cheia; exit ou ctrl+d volta ao Helix e recarrega os buffers |
H / L |
aba anterior / próxima |
ctrl+q ou space x |
fechar a aba (space X fecha as outras) |
F12 / shift+F12 |
ir para a definição / referências |
F2 |
renomear símbolo |
ctrl+. |
code actions |
ctrl+space |
hover (no modo insert, autocomplete) |
F8 / shift+F8 |
próximo / anterior diagnóstico |
alt+↑ / alt+↓ |
mover a linha |
space t / space W |
liga/desliga dicas de tipo / quebra de linha |
space p |
roda o Laravel Pint (vendor/bin/pint) no arquivo atual |
Os servidores de linguagem ficam na categoria "Servidores de linguagem" e são
instalados pelo mise (pacotes npm:, go:, pipx:, dotnet: e github:),
exceto o rust-analyzer, que é um componente do rustup:
| Perfil | Servidores e formatadores |
|---|---|
web |
typescript-language-server, ESLint/HTML/CSS/JSON (vscode-langservers), Tailwind, prettier |
laravel |
intelephense, laravel-ls, blade-formatter e os mesmos do web |
ml |
basedpyright (o Ruff já vem no perfil) |
backend |
rust-analyzer, gopls, goimports, delve, csharp-ls |
O csharp-ls fica fixo na 0.20.0, a última versão que instala com o SDK do .NET 9.
O laravel-ls não tem release para Linux arm64 e é pulado nessa plataforma.
hx --health <linguagem> mostra o que o Helix encontrou.
As configs opinativas do terminal (todas opcionais e com backup):
- kitty: JetBrainsMono Nerd Font 13, abas compactas no topo (estilo
fade, com botão+estreito para abrir abas), fundo translúcido (80% de opacidade) com desfoque, tema Afterglow fixo (claro e escuro), e abas/janelas novas no diretório atual (cmd+t,cmd+enter,cmd+n; no Linuxctrl+shift+t,ctrl+shift+enter,ctrl+shift+n). - herdr: tema gruvbox, notificações no próprio herdr, atalhos dos plugins e
lazygit em popup. Plugins herdr-bar, herdr-auto-title, herdr-radar,
herdr-reviewr e herdr-sidebar, cada um num commit fixo, mais as integrações dos agentes de IA
encontrados no
PATH.
O prefix do herdr é ctrl+b. Atalhos incluídos na config:
| Ação | Atalho |
|---|---|
| Workspace anterior / próximo | prefix+shift+h / prefix+shift+l |
| Ir para o workspace N | prefix+shift+1 … prefix+shift+9 |
| Agente anterior / próximo | prefix+shift+k / prefix+shift+j |
| Focar o agente N | prefix+alt+1 … prefix+alt+9 |
| Voltar ao último painel | prefix+; |
| Mover a aba para trás / para frente | prefix+shift+← / prefix+shift+→ |
| Limpar o painel e o histórico | prefix+ctrl+k |
| Redimensionar o painel | prefix+setas ou ctrl+alt+h/j/k/l |
| Lazygit em popup | prefix+alt+g |
| Busca rápida (herdr-bar) | prefix+space |
| Painel de review do diff (reviewr) | prefix+d |
| Sidebar estilo VS Code: arquivos, busca e git (herdr-sidebar) | prefix+f |
| Radar: alternar ativos / recentes | prefix+a |
| Radar: configurações | prefix+, |
cmd/kanivet-cli/ # main
catalog/ # catálogo embutido no binário
├── catalog.yaml
├── categories/ # uma categoria por arquivo (exclusive: true/false)
├── items/ # um item por arquivo: métodos de instalação, detecção, configs, shell
├── profiles/ # perfis embutidos
└── configs/ # templates das configs opinativas
internal/
├── platform/ # detecção de SO, distro, gerenciador de pacotes, shell
├── catalog/ # tipos, carga e lint do catálogo
├── backend/ # brew, mise, rustup, system, script, git, font, herdr-plugin
├── detect/ # estado de cada item e atualizações disponíveis
├── plan/ # seleção → passos ordenados (dependências, conflitos, sudo)
├── executor/ # execução paralela, journal, retomada
├── configs/ # aplicação das configs com backup e restauração
├── shellinit/ # geração do init do zsh/bash
├── state/ # estado, journal e backups em ~/.local/state/kanivet-cli
├── app/ # sessão compartilhada pela CLI e pela TUI
├── cli/ # comandos (cobra)
└── tui/ # interface (Bubble Tea)
test/integration/ # instalação real em containers
test/release/ # teste do install.sh contra um dist/ do GoReleaser
docs/superpowers/ # design e planos
docs/assets/ # logo, ícone e prints da TUI
Para adicionar uma ferramenta, crie catalog/items/<id>.yaml (use um item
parecido como modelo) e rode kanivet-cli catalog lint.
go test -race ./...
test/integration/run.sh <ubuntu|debian|fedora|arch|opensuse> [perfil] # precisa de DockerTeste manual num terminal real (antes de um release):
- wizard completo no perfil blank;
- senha do sudo pedida e aceita no meio da execução;
ctrl+cdurante umbrew installe depoiskanivet-clioferecendo a retomada;- resize abaixo de 80×24;
NO_COLOR=1 kanivet-cli.
Para validar a release sem publicar (o CI roda o mesmo no job release-check):
goreleaser check
goreleaser release --snapshot --clean # gera dist/ sem publicar
test/release/install-test.sh dist # testa o install.sh contra o dist/- Com tudo em
mastere o CI verde, rode o teste manual acima. - Crie e envie uma tag anotada:
git tag -a v0.1.0 -m "v0.1.0" && git push origin v0.1.0. - O workflow
Release(.github/workflows/release.yml) roda os testes, cria a release como rascunho, instala o.debno Ubuntu, o.rpmno Fedora e oinstall.shno macOS e, se tudo passar, publica. Tags com sufixo (v0.2.0-rc.1) saem como pré-release. - Se algo falhar, a release continua como rascunho. Corrija, apague a tag
(
git push --delete origin v0.1.0 && git tag -d v0.1.0) e o rascunho (gh release delete v0.1.0), e crie a tag de novo.
Rollback de uma release já publicada: gh release edit v0.1.0 --draft=true tira
a release do ar. A correção sai numa versão nova (v0.1.1), nunca na mesma tag.
- Ícones aparecem como quadrados: feche e abra o kitty. Se continuar, rode
herdr plugin action invoke hhdebb.herdr-radar.install-font. - A barra de título do kitty não mudou de cor: o kitty precisa ser reiniciado; só recarregar a config não basta para essa opção.
- Um item falhou: os outros continuam. O resumo mostra o log de cada passo;
os logs ficam em
~/.local/state/kanivet-cli/runs/<execução>/. Corrija a causa e rodekanivet-cli install --resume. - Uma integração do herdr foi pulada: o agente não foi encontrado no
PATH. Instale o agente e rodekanivet-cli install herdr-pluginsde novo. - Algo estranho no ambiente:
kanivet-cli doctor.
Os arquivos ficam em docs/assets/, em SVG e PNG:
| Arquivo | Uso |
|---|---|
kanivet-logo-light.svg / .png |
logo para fundos claros (tema claro do GitHub) |
kanivet-logo-dark.svg / .png |
logo para fundos escuros (tema escuro do GitHub) |
kanivet-icon.svg / .png |
ícone: avatar, favicon, ícone do repositório |
kanivet-icon-dark.svg / .png |
ícone para fundos escuros |
O topo deste README usa <picture> e troca o logo sozinho conforme o tema de
quem lê (o trecho pronto está em docs/assets/README-header.md).
MIT.


