TinyToolSH: Ferramentas minúsculas para melhorar sua produtividade
Eu e o Gabo compartilhamos de uma filosofia bem parecida quando se trata de software: coisas pequenas que fazem uma coisa bem feita. Não é à toa que somos fãs da filosofia suckless.
Em algum momento de 2020 nós começamos a escrever pequenos scripts em shell para automatizar tarefas chatas do dia a dia. Coisas simples: um wrapper do dmenu para criar notas em Markdown, um cronômetro pomodoro no terminal, um script que baixa imagens de satélite do GOES e coloca como wallpaper.
Com o tempo esses scripts foram ficando sérios, ganharam Makefile, manpage, serviço do systemd e até changelog. E aí nasceu o problema: como organizar tudo isso?
O primeiro repositório
Tudo começou no calebe94/tinytools. Um repositório único com todos os scripts dentro de subdiretórios, como se fossem módulos de um projeto só.
Na época o repositório tinha 295 commits, 8 branches e 20 issues abertas. Não é que estivesse caótico, mas já dava para sentir que algumas ferramentas tinham vida própria. O tgoeswall, por exemplo, era bem mais complexo que os outros — tinha arquivo de configuração, serviço do systemd, controle via tgoeswallctrl start|stop e log no journalctl. Mantê-lo no mesmo repositório que um script de 10 linhas começava a não fazer muito sentido.
O nome
Aqui vem a parte interessante. Nós queríamos chamar o projeto de TinyTools, óbvio. O nome era perfeito: ferramentas minúsculas, direto ao ponto.
Porém, quando fomos criar a organização no GitHub, o usuário tinytools já estava ocupado. E não era um projeto ativo, era um daqueles usuários que registram e somem.
Então resolvemos adaptar. TinyToolSH — Tiny Tools written in SHell script. O acrônimo fez sentido porque, bem, todas as ferramentas são escritas em shell. Algumas em Python (como o ttodo), mas a maioria em bash ou sh puro.
A migração para organização
Ao invés de manter tudo em um repositório monolítico, migramos cada ferramenta para o seu próprio repositório dentro da organização TinyToolSH.
Cada ferramenta ficou com a sua própria estrutura:
tgoeswall/
├── tgoeswall # o script principal
├── tgoeswall.conf # arquivo de configuração
├── tgoeswall.service # unit do systemd
├── tgoeswall.1 # manpage
├── Makefile # instalação e desinstalação
├── CHANGELOG.md
├── LICENSE
└── README.md
Isso resolveu vários problemas de uma vez:
- Cada ferramenta tem o seu próprio ciclo de lançamento;
- As
issuesficam separadas por ferramenta, não uma bagunça só; - O
Makefilede cada uma é independente; - Quem quiser usar só o
tpomodoronão precisa clonar 10 scripts que não vai usar.
As ferramentas
Hoje a organização tem 16 repositórios, sendo que os principais são:
| Ferramenta | Descrição |
|---|---|
| tgoeswall | Baixa imagens do satélite GOES e define como wallpaper dinâmico |
| tlaunch | Wrapper do dmenu para criar menus personalizados |
| tnotes | Criar e acessar notas em Markdown via dmenu |
| tpomodoro | Cronômetro pomodoro no terminal |
| tprogbar | Gerador de barra de progresso em ASCII |
| tsearch | Buscar na web do jeito que você quiser |
| ttodo | Lista de tarefas via dmenu |
| tyaml | Parser de arquivos YAML em shell puro |
| tmdpres | Gerador de apresentações em Markdown |
| tbm | Bookmarks de URL em texto puro |
| tmenu | Wrapper do dmenu para criar menus |
| tgit | Listar repositórios git importantes no seu sistema |
Se você reparou que várias ferramentas usam o dmenu, não é coincidência. O dmenu é do projeto suckless — leve, rápido, sem dependências absurdas. É a interface gráfica mais suckless que existe para menus no X11.
Instalação
Todas as ferramentas seguem o mesmo padrão de instalação. Cada uma tem um Makefile que você pode editar para mudar o prefixo de instalação (o padrão é /usr/local/bin).
git clone https://github.com/tinytoolsh/tgoeswall.git
cd tgoeswall
sudo make installPara desinstalar:
sudo make uninstallSimples assim. Sem gerenciador de pacotes, sem dependência de runtime, sem node_modules com 500MB.
O tgoeswall
A ferramenta que mais orgulho tenho é o tgoeswall. A ideia surgiu quando vi o dynamic wallpaper do macOS Mojave e pensei: “eu consigo fazer isso no Linux, de um jeito mais legal”.
O script baixa uma imagem do GOES-16, o satélite geoestacionário da NOAA, a cada 10 minutos, e aplica como wallpaper usando o feh. O resultado é o seu wallpaper mudando ao longo do dia conforme a Terra gira.
A imagem abaixo é servida diretamente do CDN da NOAA e é atualizada a cada 10 minutos — sim, ela é ao vivo:

Para controlar o tgoeswall como um serviço do systemd:
tgoeswallctrl start # inicia o serviço
systemctl --user start tgoeswall
systemctl --user stop tgoeswall
journalctl --user -fu tgoeswall # ver o logTambém é possível baixar uma imagem única com uma resolução específica:
tgoeswall -r 5424As resoluções disponíveis são 678, 1808, 5424 e 10848. Cuidado com a 10848 — a imagem pode passar de 72MB.
Considerações finais
O TinyToolSH é um projeto que começou como um punhado de scripts e virou uma organização com 16 repositórios. Não é um projeto que vai dominar o mundo, e é exatamente esse o ponto. Cada ferramenta faz uma coisa, faz bem, e não tenta fazer mais do que isso.
Se você curte a filosofia Unix de ferramentas pequenas que trabalham bem juntas, dá uma olhada no site do projeto e no GitHub.
E se você quiser contribuir, todas as ferramentas estão sob a GPL v3.0. Tem issue aberta em vários repositórios.
Até logo!!!
