Graças ao Distrobox de 89luca89, se tornou fácil rodar programas de uma distribuição em outra. Via distrobox-export, e dos hooks do pacman, Archpath se propoẽ a, caso um comando não seja encontrado no seu path, guiar o usuário a instalá-lo num container do Archlinux, e ao fim, exportá-lo para o path do host, tornando-o instantaneamente acessível. Programas gráficos e serviços não estão no escopo desse projeto, mas deve ser facilmente estendível também para esse propósito, como pode ser visto na documentação do distrobox-export.
Do host, é exigido:
- A possibilidade de rodar containers rootless, via podman (docker é suportado pelo distrobox, mas neste projeto o podman será configurado por padrão). Para execução do Podman Rootless, setup.sh tentará executar o comando "sudo touch /etc/subuid /etc/subgid && sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER && podman system migrate". Caso isso não funcione, procure a documentação da sua distribuição para o podman, e edite setup.sh, alterando o comando
- Curl
Setup.sh irá criar as pastas $HOME/.local/bin, $HOME/.local/bin/archpath, $HOME/.cache/pacmancache, e $HOME/.config/distrobox. Dentro dessa última, distrobox.conf, configurando a imagem padrão para o Archlinux, e o gerenciador de container como podman. Após, via curl, o distrobox será instalado em $HOME/.local/bin.
curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sh -s -- --prefix ~/.local
Já via distrobox, um container será gerado, montando $HOME/.cache/pacmancache em /var/cache/pacman/pkg do container. O processo pode demorar dependendo da sua conexão, e da performance da sua máquina, especialmente na primeira vez, onde ainda não há cache do pacman. Distrobox-enter será executado imediatamente, o que implica em mais instalação de pacotes, para integração do container com o host, como pode ser visto aqui. Uma vez isso terminado, serão executados, já dentro do container, os comandos de setup-in-container.sh
Se valendo do distrobox-export, um hook pós-transacional do pacman será habilitado. Esse hook ira gerar uma lista de todos os caminhos modificados pela instalação dos pacotes. Essa lista será tratada para conter somente /usr/bin/$FILE. O usuário será instruído a rodar distrobox-import, que executará o neovim sobre a lista restante. Deve então deletar as exportações não desejas (dependências do pacote alvo por exemplo, estarão ainda todas listadas aí). Ao fim da edição, feche salvando, e será executado diretamente no container ArchPath o comando distrobox-export, passando como parâmetro todas as linhas da lista já tratada, tendo como destino $HOME/.local/bin/archpath, para que os comandos instalados fiquem visíveis no host. O yay será exportado pelo setup-in-container.sh, portanto será acessível diretamente pelo host, assim que o usuário acionar o conteúdo de setup.shell no seu .SHELLrc (bash,zsh...), e executar:
exec $SHELL
O conteúdo de setup.shell será responsável por usar $HOME/.local/bin e $HOME/.local/bin/archpath no seu $PATH, e também por rodar yay -F no comando que não for encontrado no $PATH. Tenha em mente que -F só procura por comandos nos repositórios do Archlinux, e não no AUR, por isso yay -Ss é oferecido. Além disso, por ser um container rootless, não espere poder instalar por exemplo módulos de kernel, cli de sistema de arquivos (compsize, btrfs-progs), enfim, programas que exijam acesso profundo ao sistema. Outro detalhe é editores de texto não irão conseguir editar arquivos de configuração do root do host, e sim de dentro do container. Programas tais como gerenciadores de download cli (aria2c), navegadores cli (lynx, w3m), ou mesmo players de vídeo (mvp, cvlc) deverão funcionar normalmente.
A ideia é que o seguinte ocorra: ao tentar executar um comando que não exista no host, e nem em $HOME/.local/bin/archpath, a função de shell irá executar automaticamente yay -F "comando" e (opcionalmente) yay -Ss "comando". Em qualquer caso, o usuário deve instalar manualmente um pacote que oferte o comando desejado. O hook do pacman irá gerar e tratar a lista, e o usuário deve executar distrobox-import. O neovim será aberto, e o usuário deve remover as linhas não desejadas para exportação, e sair salvando o arquivo. Distrobox-export será executado sobre todas as linhas restantes do arquivo, e ao fim desse processo o(s) programa(s) em questão estará(ão) disponível(is) na linha de comando. Manter o container atualizado, resolver conflito de dependências, remover os arquivos obsoletos de $HOME/.local/bin/archpath e demais problemas e manutenções é responsabilidade do usuário.
Conhecer a cli do pacman é fortemente encorajado. Por exemplo, yay -Qqem listará somente os pacotes instalados via AUR; -Qqen, somente os NÃO instalados via AUR, mas que foram instalados explicitamente (e não como dependência). A saída pode ser redirecionada para arquivos, e esses arquivos usados para reprovisionar um novo container. A Archwiki é sua melhor amiga,e para funções específicas do yay para uso do AUR, consulte esta documentação.
Confira Stateless Arch