Skip to content

Repository files navigation

gofetch

CI Go Report Card Go Plataforma Licença: MIT

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.

Saída do gofetch no Windows

Status: o v1 contempla apenas Windows. Linux e macOS estão no roadmap.

Funcionalidades

  • 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/A em vez de derrubar o programa
  • Binário único e estático, sem dependências de runtime (sem CGO)

Instalação

Com go install

go install github.com/JoaoVictorVM/gofetch/cmd/gofetch@latest

O binário vai para $(go env GOPATH)/bin — garanta que esse diretório está no seu PATH.

Binário pré-compilado

Baixe o binário mais recente para Windows na página de Releases.

A partir do código-fonte

git clone https://github.com/JoaoVictorVM/gofetch.git
cd gofetch
go build -o bin/gofetch.exe ./cmd/gofetch

Requer Go 1.26+.

Uso

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.

Arquitetura

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 interface Collector. 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ó criar cpu_linux.go — sem reescrever a arquitetura.
  • Aggregator — roda todos os coletores concorrentemente com errgroup sob um context.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 como N/A e 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 --json pode 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

Stack

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)

Desenvolvimento

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

Roadmap

  • 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 --watch ao vivo
  • v2.0 / v2.1 — suporte a Linux e macOS

Licença

MIT © João Victor Martins

About

Ferramenta de terminal estilo neofetch para exibir as specs da máquina, escrita em Go. Windows-first.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages