Pitch: Gerenciador de pacotes em bash

Olá pessoal! Hoje eu gostaria de compartilhar com vocês um projeto no qual andei trabalhando nos últimos dias. Basicamente se trata de um gerenciador de pacotes para a linguagem Bash.

O objetivo, além de puro aprendizado, era ter uma forma "modular" de se utilizar scripts bash, q são bastante comuns para pequenas automações no mundo Linux.

O projeto se chama BPM, Bash Package Manager (super criativo kk). A estrutura de um projeto bpm é uma mistura do java com node, vc tem um arquivo package.sh que define os metadados do pacote e suas dependencias, e uma pasta src onde os scripts são criados. Assim como no java, a estrutura de arquivos dentro do src se torna o namespace de cada script, portando, o script com/pkg/Main.sh seria chamado de com.pkg.Main, e assim como no java, o bpm possui um comando "import" para importar (fazer source de) um arquivo.

Atualmente o projeto já possui uma implementacao rudimentar de repositórios, que basicamente consistem em um arquivo (.sh) que lista cada pacote e seu respectivo url em algum servidor git, geralmente o github. Esses repositorios podem ser baixados e atualizados pela cli, porém (ainda) não tem nenhum repo oficial.

O bpm é capaz de instalar e gerenciar os pacotes em escopo global, então desde um pacote possua um main script, é possivel executalos usando bpm run, semelhante ao npx do node. O bpm possui um modulo interno chamado locator, cujo objetivo é indexar pacotes. Toda vez q o cli é usado, o locator é chamado, e caso você esteja dentro de uma pasta q faça parte de um pacote bpm, esse pacote será imediatamente adicionado ao index, caso ele ja não esteja la. Não é a melhor abordagem possiveis mais é uma delas. Foi uma forma que encontrei de poder executar scripts locais em contexto global sem ter que escanear os diretorios dos usuario, ou seguir por abordagems como as do node, onde as dependencias são adicinadas dentro de cada projeto, o que causa duplicação dessas dependencias.

Enfim, se quiserem dar uma olhada no projeto, ele ainda tem alguns bugs, e no momento ainda esta sem um readme decente, mas já esta em grande parte funcionando.

Link do repo