Inspirado no rhino-pkg, eu criei o akp, basicamente por três motivos
1- O pacman, diferente do pamac, não sugere dependências opcionais para serem instaladas junto com os pacotes, com isso você tem que, depois de instalados, ir de pacote em pacote vendo qual dependências você vai querer, é uma coisa cansativa, o akp ja faz essa sugestão na hora da instalação.
2- Economia de comando. Quando eu vou atualizar o sistema tenho que digitar:
sudo pacman -Syu && yay -a -Syu && flatpak update
Com o front-end eu so do um comando
akp -Ud
3- Aqui ja é questão de gosto, mas eu troquei a sintaxe para algo parecido com pacman porem que faça mais sentido para mim, por exemplo:
akp -I
para instalar um pacote ao invés de sudo pacman -S
akp -U
para atualizar (update) o sistema ao invés de sudo pacman -Syu
akp -S
para pesquisar (search) um pacote ao invés de sudo pacman -Ss
São mudanças simples, mas que tornam o gerenciador mais intuitivo.
O akp é escrito em shellscript, basicamente o que ele faz é receber o comando e executar o equivalente em pacman, yay ou flatpak, ou seja, o akp em si não gerencia os pacotes, segue exemplo:
case "$1" in
-U)
# Atualiza sistema
pacmanCommand="sudo pacman -Syu"
;;
-Ud)
# Atualizar distro (Arch, aur and flatpak repo)
sudo pacman -Syu && echo "" && yay -a -Syu && echo "" && flatpak update
;;
-Ia)
# Instalar pacote do AUR
pacmanCommand="yay -S"
;;
-Sa)
# Pesquisar pacote no AUR
pacmanCommand="yay -a -Ss"
;;
-Uf)
# Atualizar Flatpak
pacmanCommand="flatpak update"
;;
-If)
# Instalar pacote Flatpak
pacmanCommand="flatpak install flathub"
;;
A maior parte do akp funciona assim, a escrita de um código mais complexo esta no comando de instalação de um pacote
-I)
# Instalar pacote
# Verificar se pelo menos um pacote foi fornecido
if [ -z "$2" ]; then
echo "Erro: Forneça pelo menos um pacote para instalar."
exit 1
fi
# Definindo comando pacman
pacmanCommand="sudo pacman -S"
# Função para obter dependências opcionais do Pacman
get_optional_deps() {
package="$1"
pactree -so "$package" | grep "(optional)" | rev | cut -d " " -f 2- | rev | cut -c 4- | tr '─' ' '
}
# Exibir dependências opcionais
for pkg in "$@"; do
if [ "$pkg" != "-I" ]; then
optionalDeps=$(get_optional_deps "$pkg")
if [ -n "$optionalDeps" ]; then
echo "O pacote '$pkg' possui as seguintes dependências opcionais:"
# Adiciona " :: " ao início de cada linha
echo "$optionalDeps" | sed 's/^/ ::/'
# Perguntar ao usuário quais dependências opcionais deseja instalar
echo "Deseja instalar alguma(s) das dependências opcionais para '$pkg'? (Digite os nomes separados por espaços): "
read -p "" selectedOptionalDeps
echo " "
# Adicionar os pacotes principais e as dependências opcionais selecionadas à lista de pacotes
packages="$packages $pkg $selectedOptionalDeps"
else
# Se não houver dependências opcionais, adicionar apenas o pacote principal à lista
packages="$packages $pkg"
fi
fi
done
;;
Com o pacman, uma instalação seria assim:
[arch@arch ~]$ sudo pacman -S thunar vivaldi
resolvendo dependências...
procurando pacotes conflitantes...
Pacotes (3) exo-4.18.0-1 thunar-4.18.10-1 vivaldi-6.6.3271.48-1
Tamanho total download: 112,80 MiB
Tamanho total instalado: 375,38 MiB
:: Continuar a instalação? [S/n]
com o akp:
[arch@arch ~]$ akp -I thunar vivaldi
O pacote 'thunar' possui as seguintes dependências opcionais:
:: catfish: file searching
:: gvfs: trash support, mounting with udisk and remote filesystems
:: tumbler: thumbnail previews
:: thunar-volman: removable device management
:: thunar-archive-plugin: archive creation and extraction
:: thunar-media-tags-plugin: view/edit ID3/OGG tags
Deseja instalar alguma(s) das dependências opcionais para 'thunar'? (Digite os nomes separados por espaços):
gvfs thunar-volman
O pacote 'vivaldi' possui as seguintes dependências opcionais:
:: vivaldi-ffmpeg-codecs: playback of proprietary video/audio
:: libnotify: native notifications
Deseja instalar alguma(s) das dependências opcionais para 'vivaldi'? (Digite os nomes separados por espaços):
vivaldi-ffmpeg-codecs libnotify
resolvendo dependências...
procurando pacotes conflitantes...
Pacotes (7) exo-4.18.0-1 gvfs-1.52.2-2 libnotify-0.8.3-1 thunar-4.18.10-1 thunar-volman-4.18.0-1 vivaldi-6.6.3271.48-1
vivaldi-ffmpeg-codecs-122.0.6261.84-1
Tamanho total download: 114,56 MiB
Tamanho total instalado: 387,00 MiB
Alteração no tamanho: 381,63 MiB
:: Continuar a instalação? [S/n]
Quem tiver afim de testar o front-end basta fazer o seginte:
1- copie o código abaixo em um documento sem extensão (nada de .sh ou coisa asim)
2- adicione essa linha no seu .bashrc
export PATH=$PATH:/caminho/para/a/pasta/do/documento/
3- para o documento ser executavel
chmod +x /caminho/para/a/pasta/do/documento/akp
4- Voce vai precisar ter instalado o pacman-contrib, yay e flatpak
segue o codigo:
#!/bin/bash
# Verificar se o comando não está vazio
if [ -z "$1" ]; then
echo "Erro: Nenhum alvo selecionado."
exit 1
fi
# Criando lista de pacotes
packages="${@:2}"
# Traduzir o comando akp para o comando equivalente do Pacman, Yay e Flatpak
case "$1" in
-U)
# Atualiza sistema
pacmanCommand="sudo pacman -Syu"
;;
-Ud)
# Atualizar distro (Arch, aur and flatpak repo)
sudo pacman -Syu && echo "" && yay -a -Syu && echo "" && flatpak update
;;
-I)
# Instalar pacote
# Verificar se pelo menos um pacote foi fornecido
if [ -z "$2" ]; then
echo "Erro: Forneça pelo menos um pacote para instalar."
exit 1
fi
# Definindo comando pacman
pacmanCommand="sudo pacman -S"
# Função para obter dependências opcionais do Pacman
get_optional_deps() {
package="$1"
pactree -so "$package" | grep "(optional)" | rev | cut -d " " -f 2- | rev | cut -c 4- | tr '─' ' '
# pactree -lso "$package" | grep ":"
}
# Exibir dependências opcionais
for pkg in "$@"; do
if [ "$pkg" != "-I" ]; then
optionalDeps=$(get_optional_deps "$pkg")
if [ -n "$optionalDeps" ]; then
echo "O pacote '$pkg' possui as seguintes dependências opcionais:"
# Adiciona " :: " ao início de cada linha
echo "$optionalDeps" | sed 's/^/ ::/'
# Perguntar ao usuário quais dependências opcionais deseja instalar
echo "Deseja instalar alguma(s) das dependências opcionais para '$pkg'? (Digite os nomes separados por espaços): "
read -p "" selectedOptionalDeps
echo " "
# Adicionar os pacotes principais e as dependências opcionais selecionadas à lista de pacotes
packages="$packages $pkg $selectedOptionalDeps"
else
# Se não houver dependências opcionais, adicionar apenas o pacote principal à lista
packages="$packages $pkg"
fi
fi
done
;;
-S)
# Pesquisar pacote
pacmanCommand="pacman -Ss"
;;
-R)
# Remover pacote
pacmanCommand="sudo pacman -R"
;;
-Rr)
# Remover pacote, dependencia e etc
pacmanCommand="sudo pacman -Rsn"
;;
-Qa)
# Consultar pacotes instalados do AUR
pacmanCommand="pacman -Qm"
;;
-Qi)
# Consultar informação sobre um pacote
pacmanCommand="pacman -Qi"
;;
-Qn)
# Consultar lista sobre pacotes desnecessarios e suas dependencias
pacmanCommand="pacman -Qdt"
;;
-Ua)
# Atualizar AUR
pacmanCommand="yay -a -Syu"
;;
-Ia)
# Instalar pacote do AUR
pacmanCommand="yay -S"
;;
-Sa)
# Pesquisar pacote no AUR
pacmanCommand="yay -a -Ss"
;;
-Uf)
# Atualizar Flatpak
pacmanCommand="flatpak update"
;;
-If)
# Instalar pacote Flatpak
pacmanCommand="flatpak install flathub"
;;
-Sf)
# Pesquisar por pacote Flatpak
pacmanCommand="flatpak search"
;;
-Rf)
# Remover pacote Flatpak
pacmanCommand="flatpak uninstall"
;;
-Qf)
# Consultar pacotes instalados do Flatpak
pacmanCommand="flatpak list"
;;
-Qif)
# Consultar informação sobre pacote Flatpak
pacmanCommand="flatpak info"
;;
--help)
# help
pacmanCommand="Lista de comandos"
echo -e "akp -U: Atualiza sistema (\033[1;35mU\033[0mpdate system)"
echo -e "akp -Ud: Atualizar distro (\033[1;35mU\033[0mpdate \033[1;35mD\033[0mistro (\033[1;35mArch\033[0m, \033[1;35maur\033[0m and \033[1;35mflatpak\033[0m repo))"
echo -e "akp -I: Instalar pacote (\033[1;35mI\033[0mnstall package)"
echo -e "akp -S: Pesquisar pacote (\033[1;35mS\033[0mearch packge)"
echo -e "akp -R: Remover pacote (\033[1;35mR\033[0memove package)"
echo -e "akp -Rr: Remover pacote, dependencia e etc (\033[1;35mR\033[0memove package, dependency, etc)"
echo -e "akp -Qa: Consultar pacotes instalados do AUR (\033[1;35mQ\033[0muery packages from the \033[1;35mA\033[0mUR repository)"
echo -e "akp -Qi: Consultar informação sobre um pacote (\033[1;35mQ\033[0muery package \033[1;35mI\033[0mnformation)"
echo -e "akp -Qn: Consultar lista sobre pacotes desnecessarios e suas dependencias (\033[1;35mQ\033[0muery list of \033[1;35mN\033[0meedless packages and dependencies)"
echo -e "akp -Ua: Atualizar AUR (\033[1;35mU\033[0mpdate \033[1;35mA\033[0mUR)"
echo -e "akp -Ia: Instalar pacote do AUR (\033[1;35mI\033[0mnstall \033[1;35mA\033[0mUR package)"
echo -e "akp -Sa: Pesquisar pacote do AUR (\033[1;35mS\033[0mearch package in \033[1;35mA\033[0mUR repo)"
echo -e "akp -Uf: Atualizar Flatpak (\033[1;35mF\033[0mlatpak \033[1;35mU\033[0mpdate)"
echo -e "akp -If: Instalar pacote Flatpak (\033[1;35mI\033[0mnstall \033[1;35mF\033[0mlatpak package)"
echo -e "akp -Sf: Pesquisar por pacote Flatpak (\033[1;35mS\033[0mearch \033[1;35mF\033[0mlatpak package)"
echo -e "akp -Rf: Remover pacote Flatpak (\033[1;35mR\033[0memove \033[1;35mF\033[0mlatpak package)"
echo -e "akp -Qf: Consultar pacotes instalados do Flatpak (\033[1;35mQ\033[0muery packages from the \033[1;35mF\033[0mlatpak repository)"
echo -e "akp -Qif: Consultar informação sobre pacote Flatpak (\033[1;35mQ\033[0muery \033[1;35mI\033[0mnformation \033[1;35mF\033[0mlatpak package)"
;;
*)
echo "Comando akp não reconhecido."
exit 1
;;
esac
# Executar o comando
if [ "$1" != "--help" ]; then
$pacmanCommand $packages
fi
# Necessary packages: pacman-contrib yay flatpak