Uma ferramenta de terminal rápida e minimalista para exibir informações do sistema, escrita em Go — inspirada no neofetch e no fastfetch.
Ela desenha a logo ASCII do seu sistema operacional à esquerda e as specs da máquina à direita, com cores.
Status: o v1 contempla apenas Windows. Linux e macOS estão no roadmap.
- Nome e build do SO, hostname, usuário e uptime
- Modelo da CPU, número de núcleos, clock e uso % ao vivo
- Uso de memória e disco (usado / total / %)
- Fabricante e modelo da placa-mãe
- Logo ASCII ao lado de uma coluna de informações colorida
- Degradação graciosa: uma coleta que falha exibe
N/Aem vez de derrubar o programa - Binário único e estático, sem dependências de runtime (sem CGO)
go install github.com/JoaoVictorVM/gofetch/cmd/gofetch@latestO binário vai para $(go env GOPATH)/bin — garanta que esse diretório está no seu PATH.
Baixe o binário mais recente para Windows na página de Releases.
git clone https://github.com/JoaoVictorVM/gofetch.git
cd gofetch
go build -o bin/gofetch.exe ./cmd/gofetchRequer Go 1.26+.
gofetch| Flag | Efeito |
|---|---|
| (nenhuma) | Imprime as specs estilizadas |
--no-color |
Desabilita todas as cores e estilos |
--version |
Imprime a versão e sai |
--help |
Imprime a ajuda de uso e sai |
As cores degradam graciosamente de truecolor para terminais de 256/16 cores, e são removidas automaticamente quando a saída é redirecionada para um arquivo ou outro programa.
O programa é um pequeno pipeline: coletar → agregar (concorrentemente) → renderizar →
imprimir. Os componentes são desacoplados por interfaces, e o código específico de SO fica
isolado por build tags em vez de verificações runtime.GOOS espalhadas pelo código.
- Collectors — cada subsistema (
host,cpu,memory,disk,board,gpu) implementa uma pequena interfaceCollector. As diferenças entre SOs ficam dentro de cada coletor, em arquivos com build tag (ex.:cpu_windows.go); então adicionar Linux no futuro é só criarcpu_linux.go— sem reescrever a arquitetura. - Aggregator — roda todos os coletores concorrentemente com
errgroupsob umcontext.WithTimeout. O tempo total é aproximadamente o do coletor mais lento (a amostragem de uso da CPU, ~500 ms), não a soma. Um coletor que falha deixa seu campo comoN/Ae nunca derruba o resto da saída. - Renderer — recebe os dados coletados mais a logo e produz a saída final. É uma
interface, então um futuro renderer
--jsonpode ser adicionado sem tocar na coleta. O renderer de texto do v1 usa lipgloss para dispor a logo e a coluna de informações lado a lado.
cmd/gofetch/main.go composition root (fino: flags → coleta → render)
internal/system/ modelo de domínio, interface Collector, aggregator
internal/system/<probe>/ um pacote por subsistema, com arquivos _windows.go
internal/render/ interface Renderer + renderer de texto com lipgloss
internal/art/ logos ASCII (go:embed) + registry SO→logo
| Responsabilidade | Escolha |
|---|---|
| Coleta de specs | gopsutil/v4 (Go puro, sem CGO) |
| Placa-mãe (WMI) | yusufpapurcu/wmi |
| Estilização | lipgloss |
| Concorrência | x/sync/errgroup |
| CLI / flags | flag (biblioteca padrão) |
make fmt # gofmt -s
make vet # go vet
make lint # golangci-lint
make test # go test ./...
make build # compila o binário em bin/
make run # go run ./cmd/gofetch- v1.1 — dados reais da GPU (modelo + uso)
- v1.2 — saída
--json - v1.3 — arquivo de configuração (módulos, tema, arte customizada)
- v1.4 — modo
--watchao vivo - v2.0 / v2.1 — suporte a Linux e macOS
MIT © João Victor Martins
