Compare commits

...

11 Commits
v1.2 ... master

Author SHA1 Message Date
Eric Lay 6612619a46 aur updater updated 2023-11-21 18:15:30 -06:00
Eric Lay 7a54204516 updating updater 2023-11-21 06:45:36 -06:00
Eric Lay 1012970b6b updated updater 2023-11-20 21:50:24 -06:00
Eric Lay 24b86bb679 added Updater feature/refactor 2023-11-20 21:06:47 -06:00
Eric Lay f2cd1219e8 update README 2023-11-20 18:19:27 -06:00
Eric Lay f0e110187f update screenshot 2023-11-20 18:15:59 -06:00
Eric Lay 2363392cb4 update README 2023-11-19 15:12:31 -06:00
Eric Lay 42f1fc9a96 update README 2023-11-19 15:11:37 -06:00
Eric Lay b6af4c3c68 update README 2023-11-19 15:06:15 -06:00
Eric Lay 4bbe05cff7 update README 2023-11-19 15:05:19 -06:00
Eric Lay e1a301eaeb update README 2023-11-19 15:03:22 -06:00
3 changed files with 115 additions and 37 deletions

View File

@ -6,14 +6,14 @@
**Simple cli utility using fzf to search and install/list/remove packages.**\ **Simple cli utility using fzf to search and install/list/remove packages.**\
\ \
![Screenshot](https://gitlab.com/airclay/fuzzy-pkg-finder/-/raw/master/fpf.png) \ ![Screenshot](https://raw.githubusercontent.com/ericlay/fuzzy-pkg-finder/master/fpf.png) \
\ \
Leverages the power of fzf to search package names and descriptions then presents complete package information in preview pane. \ Leverages the power of fzf to search package names and descriptions then presents complete package information in preview pane. \
On selection will hand off to Pacman or Paru/Yay to complete transaction. \ On selection will hand off to Pacman or Paru/Yay to complete transaction. \
\ \
*For use with Pacman/Yay/Paru package managers only.*\ *For use with Pacman/Yay/Paru package managers only.*\
\ \
There are countless fzf package manager wrappers out there, some much more built out that this. There are countless fzf package manager wrappers out there, some much more built out that this. \
What separates Fuzzy-pkg-finder? What separates Fuzzy-pkg-finder?
- It's mine and it works the way I like it to - It's mine and it works the way I like it to
- It works as a simple script to wrap pacman/yay/paru, no need to rebuild the wheel - It works as a simple script to wrap pacman/yay/paru, no need to rebuild the wheel
@ -21,6 +21,8 @@ On selection will hand off to Pacman or Paru/Yay to complete transaction. \
- Hide preview window to see only packages and descriptions - Hide preview window to see only packages and descriptions
- Shows files list and/or missing files for official repo or installed AUR packages - Shows files list and/or missing files for official repo or installed AUR packages
- Toggle between package info view and PKGBUILD view on AUR package preview - Toggle between package info view and PKGBUILD view on AUR package preview
- Update feature shows package information and link to recent commits \
\
\ \
Installation: \ Installation: \
For Arch and arch-based distros, it is available in the AUR. \ For Arch and arch-based distros, it is available in the AUR. \
@ -36,7 +38,7 @@ makepkg -sric
Usage: Usage:
``` ```
Syntax: fpf [-a| --aur] [-l| --list-installed] [-la| --list-aur-installed] Syntax: fpf [-a| --aur] [-l| --list-installed] [-la| --list-aur-installed]
[R| --remove] [-o| --orphans] [-h | --help] [R| --remove] [-o| --orphans] [-U | --update] [-h | --help]
Defaults to Pacman if no options passed Defaults to Pacman if no options passed
Searching for a package: Searching for a package:
@ -59,6 +61,9 @@ Options:
-o, --orphans -o, --orphans
Search/List orphaned packages for removal Search/List orphaned packages for removal
-U, --update
Shows packages with updates available
-h, --help -h, --help
Print this help screen Print this help screen
``` ```
@ -67,7 +72,7 @@ Keybinds:
``` ```
'ctrl + /' Toggle the preview window 'ctrl + /' Toggle the preview window
'ctrl + h' Show help in the preview window 'ctrl + h' Show help in the preview window
'ctrl + k' Show the keybinds in teh preview window 'ctrl + k' Show the keybinds in the preview window
'ctrl + n' Move to the next selected item 'ctrl + n' Move to the next selected item
'ctrl + b' Back to previoius selected item 'ctrl + b' Back to previoius selected item

137
fpf
View File

@ -14,6 +14,7 @@ Help() {
printf "\t%s\n\\t\t%s\n\n" "-a, --aur" "Search/List and install from AUR with Yay" printf "\t%s\n\\t\t%s\n\n" "-a, --aur" "Search/List and install from AUR with Yay"
printf "\t%s\n\\t\t%s\n\n" "-R, -remove" "Search/List installed packages for removal" printf "\t%s\n\\t\t%s\n\n" "-R, -remove" "Search/List installed packages for removal"
printf "\t%s\n\\t\t%s\n\n" "-o, --orphans" "Search/List orphaned packages for removal" printf "\t%s\n\\t\t%s\n\n" "-o, --orphans" "Search/List orphaned packages for removal"
printf "\t%s\n\\t\t%s\n\n" "-U, --update" "Show packages with updates available"
printf "\t%s\n\\t\t%s\n\n" "-h, --help" "Print this help screen"; } > "$helpF" printf "\t%s\n\\t\t%s\n\n" "-h, --help" "Print this help screen"; } > "$helpF"
} }
@ -41,7 +42,6 @@ UpdateInfos() {
} }
UpdateAurInfos() { UpdateAurInfos() {
printf "Syncing AUR package information..."
[[ ! -d /tmp/aur ]] && mkdir -p /tmp/aur [[ ! -d /tmp/aur ]] && mkdir -p /tmp/aur
zcat <(curl https://aur.archlinux.org/packages-meta-ext-v1.json.gz) | zcat <(curl https://aur.archlinux.org/packages-meta-ext-v1.json.gz) |
jq --compact-output '.[] | jq --compact-output '.[] |
@ -55,30 +55,45 @@ UpdateAurInfos() {
awk -F"\t" '{print $1" \033[32m*\033[0m ", $2}') -o /tmp/aur/fpf-packages-meta awk -F"\t" '{print $1" \033[32m*\033[0m ", $2}') -o /tmp/aur/fpf-packages-meta
} }
AurFD() {
[ -f /tmp/aur/packages-meta ] ||
printf "Syncing AUR package information..." && UpdateAurInfos
d1=$(stat -c %y /tmp/aur/fpf-packages-meta)
d1="${d1:0:10}"
d2=$(date -I'date')
[[ "${d2///-/}" > "${d1//-/}" ]] && {
printf "Syncing AUR package information..."; UpdateAurInfos; }
}
# Check AUR helper # Check AUR helper
AHELPR="" AHELPR=""
AHELPRUPDATE=""
if [[ -z "$AHELPR" ]] if [[ -z "$AHELPR" ]]
then then
if [[ -f /usr/bin/paru ]] if [[ -f /usr/bin/paru ]]
then then
AHELPR="paru" AHELPR="paru"
AHELPRUPDATE="paru -Sua"
elif [[ -f /usr/bin/yay ]] elif [[ -f /usr/bin/yay ]]
then then
AHELPR="yay" AHELPR="yay"
AHELPRUPDATE="yay -a"
else else
printf "Suitable AUR Helper not found.\nPlease install \"paru\" or \"yay\" to continue." printf "Suitable AUR Helper not found.\nPlease install \"paru\" or \"yay\" to continue."
exit 1 exit 1
fi fi
fi fi
# Create the helper files
Help
KBINDS
### Official Repo ### Official Repo
# Get Official package list, sort, mark installed, preview infos and finally hand off to pacman for install # Get Official package list, sort, mark installed, preview infos and finally hand off to pacman for install
Official() { Official() {
printf "Setting things up..." printf "Setting things up..."
KBINDS
sort <(comm -23 <(expac -S '%-20n\t%d' | sort) <(expac '%-20n\t%d' | sort)) <(comm -12 <(expac -S '%-20n\t%d' | sort) \ sort <(comm -23 <(expac -S '%-20n\t%d' | sort) <(expac '%-20n\t%d' | sort)) <(comm -12 <(expac -S '%-20n\t%d' | sort) \
<(expac '%-20n\t%d' | sort) | awk -F"\t" '{print $1"\033[32m*\033[0m ", $2}') &>/dev/null > /tmp/fpf-packages <(expac '%-20n\t%d' | sort) | awk -F"\t" '{print $1"\033[32m*\033[0m ", $2}') &>/dev/null > /tmp/fpf-packages
cat /tmp/fpf-packages |
fzf -q "$1" -e -m \ fzf -q "$1" -e -m \
--preview='cat <(pacman -Si {1}) <(pacman -Fl {1} | awk "{print \$2}")' \ --preview='cat <(pacman -Si {1}) <(pacman -Fl {1} | awk "{print \$2}")' \
--preview-window=55%:wrap:border-sharp \ --preview-window=55%:wrap:border-sharp \
@ -94,7 +109,7 @@ Official() {
--bind=ctrl-k:preview:"cat /tmp/fpf-kbinds" \ --bind=ctrl-k:preview:"cat /tmp/fpf-kbinds" \
--bind=ctrl-h:preview:"cat /tmp/fpf-help" \ --bind=ctrl-h:preview:"cat /tmp/fpf-help" \
--bind 'ctrl-/:change-preview-window(hidden|)' \ --bind 'ctrl-/:change-preview-window(hidden|)' \
--bind ctrl-n:next-selected,ctrl-b:prev-selected | --bind ctrl-n:next-selected,ctrl-b:prev-selected < /tmp/fpf-packages |
awk '{print $1}' | awk '{print $1}' |
sed -e 's/\*$//' | sed -e 's/\*$//' |
xargs -ro sudo pacman -S xargs -ro sudo pacman -S
@ -102,16 +117,13 @@ Official() {
# List installed pkgs # List installed pkgs
Installed() { Installed() {
sort <(pacman -Qqn) > /tmp/fpf-installed_packages expac '%-20n\t%d' |
echo "$(echo -e ' Select packages to print info\n (use TAB to toggle selection)';
cat /tmp/fpf-installed_packages)" > /tmp/fpf-installed_packages
cat /tmp/fpf-installed_packages |
fzf -q "$1" -e -m \ fzf -q "$1" -e -m \
--preview='cat <(pacman -Qik {1}) <(echo "") <(pacman -Fl {1} | awk "{print \$2}")' \ --preview='cat <(pacman -Qik {1}) <(echo "") <(pacman -Fl {1} | awk "{print \$2}")' \
--preview-window=65%:wrap \ --preview-window=65%:wrap \
--layout=reverse \ --layout=reverse \
--marker='>>' \ --marker='>>' \
--header-lines=2 \ --header="$(echo -e '\n Select packages to print info\n (use TAB to toggle selection)\n\n')" \
--info=hidden \ --info=hidden \
--ansi \ --ansi \
--margin="2%,1%,2%,1%" \ --margin="2%,1%,2%,1%" \
@ -121,21 +133,19 @@ Installed() {
--bind=ctrl-h:preview:"cat /tmp/fpf-help" \ --bind=ctrl-h:preview:"cat /tmp/fpf-help" \
--bind 'ctrl-/:change-preview-window(hidden|)' \ --bind 'ctrl-/:change-preview-window(hidden|)' \
--bind ctrl-n:next-selected,ctrl-b:prev-selected | --bind ctrl-n:next-selected,ctrl-b:prev-selected |
awk '{print $1}' |
xargs -ro pacman -Qik xargs -ro pacman -Qik
} }
# Remove installed pkgs # Remove installed pkgs
Remove() { Remove() {
sort <(pacman -Qqs) > /tmp/fpf-installed_packages expac '%-20n\t%d' |
echo "$(echo -e ' Select packages to remove\n (use TAB to toggle selection)';
cat /tmp/fpf-installed_packages)" > /tmp/fpf-installed_packages
cat /tmp/fpf-installed_packages |
fzf -q "$1" -e -m \ fzf -q "$1" -e -m \
--preview='cat <(pacman -Si {1} 2>/dev/null || yay -Qi {1} 2>/dev/null || paru -Qi {1}) <(pacman -Ql {1} | awk "{print \$2}")' \ --preview='cat <(pacman -Si {1} 2>/dev/null || yay -Qi {1} 2>/dev/null || paru -Qi {1}) <(pacman -Ql {1} | awk "{print \$2}")' \
--preview-window=65%:wrap \ --preview-window=65%:wrap \
--layout=reverse \ --layout=reverse \
--marker='>>' \ --marker='>>' \
--header-lines=2 \ --header="$(echo -e '\n Select packages to remove\n (use TAB to toggle selection)\n\n')" \
--info=hidden \ --info=hidden \
--ansi \ --ansi \
--margin="2%,1%,2%,1%" \ --margin="2%,1%,2%,1%" \
@ -145,18 +155,40 @@ Remove() {
--bind=ctrl-h:preview:"cat /tmp/fpf-help" \ --bind=ctrl-h:preview:"cat /tmp/fpf-help" \
--bind 'ctrl-/:change-preview-window(hidden|)' \ --bind 'ctrl-/:change-preview-window(hidden|)' \
--bind ctrl-n:next-selected,ctrl-b:prev-selected | --bind ctrl-n:next-selected,ctrl-b:prev-selected |
awk '{print $1}' |
xargs -ro sudo pacman -Rsn xargs -ro sudo pacman -Rsn
} }
# Update installed pkgs
Update() (
viewUpdates() {
fzf --preview='cat <(pacman -Si {1}) <(pacman -Fl {1} | awk "{print \$2}")' \
--preview-window=65%:wrap \
--layout=reverse \
--marker='>>' \
--header="$(echo -e '\nPackages with updates available:\n\n')" \
--info=hidden \
--ansi \
--margin="2%,1%,2%,1%" \
--cycle \
--bind 'focus:transform-preview-label:echo \
⌇ Commit History: https://gitlab.archlinux.org/archlinux/packaging/packages/{1}/-/commits/main ⌇' \
--bind=ctrl-k:preview:"cat /tmp/fpf-kbinds" \
--bind=ctrl-h:preview:"cat /tmp/fpf-help" \
--bind 'ctrl-/:change-preview-window(hidden|)' \
--bind ctrl-n:next-selected,ctrl-b:prev-selected < /tmp/fpf-updates > /dev/null
[[ "$(printf '\nWould you like to update? [y/N]> ' >&2; read; echo $REPLY)" == [Nn]* ]] \
&& printf "\nPlease update soon :(\n" || sudo pacman -Syu
}
checkupdates > "/tmp/fpf-updates"
[ -s "/tmp/fpf-updates" ] && viewUpdates ||
printf "\nThere are no available updates :)\n"
)
### AUR ### AUR
# Get AUR package database, remove unwanted lines, sort, mark installed, preview infos and finally hand off to yay for install # Get AUR package database, remove unwanted lines, sort, mark installed, preview infos and finally hand off to yay for install
Aur() { Aur() {
[ -f /tmp/aur/packages-meta ] || UpdateAurInfos AurFD
d1=$(stat -c %y /tmp/aur/fpf-packages-meta)
d1="${d1:0:10}"
d2=$(date -I'date')
[[ "${d2///-/}" > "${d1//-/}" ]] && UpdateAurInfos
cat /tmp/aur/fpf-packages-meta |
fzf -q "$1" -e -m \ fzf -q "$1" -e -m \
--preview='cat <(yay -Si {1} 2>/dev/null || paru -Si {1}) <(pacman -Ql {1} 2>/dev/null | awk "{print \$2}")' \ --preview='cat <(yay -Si {1} 2>/dev/null || paru -Si {1}) <(pacman -Ql {1} 2>/dev/null | awk "{print \$2}")' \
--preview-window=55%:wrap:border-sharp \ --preview-window=55%:wrap:border-sharp \
@ -174,7 +206,8 @@ Aur() {
--bind ctrl-n:next-selected,ctrl-b:prev-selected \ --bind ctrl-n:next-selected,ctrl-b:prev-selected \
--bind 'ctrl-/:change-preview-window(hidden|)' \ --bind 'ctrl-/:change-preview-window(hidden|)' \
--bind=ctrl-p:preview:'curl --silent https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD\?h={1}' \ --bind=ctrl-p:preview:'curl --silent https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD\?h={1}' \
--bind=ctrl-x:preview:'cat <(yay -Si {1} 2>/dev/null || paru -Si {1}) <(pacman -Ql {1} 2>/dev/null | awk "{print \$2}")' | --bind=ctrl-x:preview:'cat <(yay -Si {1} 2>/dev/null || paru -Si {1}) <(pacman -Ql {1} 2>/dev/null | awk "{print \$2}")' \
< /tmp/aur/fpf-packages-meta |
awk '{print $1}' | awk '{print $1}' |
sed -e 's/\*$//' | sed -e 's/\*$//' |
xargs -ro $AHELPR -S xargs -ro $AHELPR -S
@ -182,16 +215,16 @@ Aur() {
# List installed pkgs only from AUR # List installed pkgs only from AUR
AurInstalled() { AurInstalled() {
sort <(pacman -Qqm) > /tmp/fpf-aur_installed_packages AurFD
echo "$(echo -e ' Select packages to print info\n (use TAB to toggle selection)'; while IFS= read -r pkgName; do
cat /tmp/fpf-aur_installed_packages)" > /tmp/fpf-aur_installed_packages grep -w "^$pkgName " /tmp/aur/fpf-packages-meta >> /tmp/aur/fpf-installed
cat /tmp/fpf-aur_installed_packages | done < <(pacman -Qqm)
fzf -q "$1" -e -m \ fzf -q "$1" -e -m \
--preview 'cat <(pacman -Qik {1}) <(echo "") <(pacman -Ql {1} | awk "{print \$2}")' \ --preview 'cat <(pacman -Qik {1}) <(echo "") <(pacman -Ql {1} | awk "{print \$2}")' \
--preview-window=65%:wrap \ --preview-window=65%:wrap \
--layout=reverse \ --layout=reverse \
--marker='>>' \ --marker='>>' \
--header-lines=2 \ --header="$(echo -e ' Select packages to print info\n (use TAB to toggle selection)\n')" \
--info=hidden \ --info=hidden \
--ansi \ --ansi \
--margin="2%,1%,2%,1%" \ --margin="2%,1%,2%,1%" \
@ -203,23 +236,55 @@ AurInstalled() {
--bind ctrl-n:next-selected,ctrl-b:prev-selected \ --bind ctrl-n:next-selected,ctrl-b:prev-selected \
--bind=ctrl-p:preview:'curl --silent https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD\?h={1}' \ --bind=ctrl-p:preview:'curl --silent https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD\?h={1}' \
--bind=ctrl-x:preview:'cat <(pacman -Si {1} 2>/dev/null || yay -Qi {1} 2>/dev/null || --bind=ctrl-x:preview:'cat <(pacman -Si {1} 2>/dev/null || yay -Qi {1} 2>/dev/null ||
paru -Qi {1}) <(pacman -Ql {1} | awk "{print \$2}")' | paru -Qi {1}) <(pacman -Ql {1} | awk "{print \$2}")' \
< /tmp/aur/fpf-installed |
awk '{print $1}' |
xargs -ro pacman -Qik xargs -ro pacman -Qik
} }
# Update AUR installed pkgs
UpdateAURpkgs() (
viewAURUpdates() {
fzf --preview='cat <(yay -Si {1} 2>/dev/null || paru -Si {1}) <(pacman -Ql {1} 2>/dev/null | awk "{print \$2}")' \
--preview-window=65%:wrap \
--layout=reverse \
--marker='>>' \
--header="$(echo -e '\nPackages with updates available:\n\n')" \
--info=hidden \
--ansi \
--margin="2%,1%,2%,1%" \
--cycle \
--bind 'focus:transform-preview-label:echo ⌇ {1} ⌇' \
--bind=ctrl-k:preview:"cat /tmp/fpf-kbinds" \
--bind=ctrl-h:preview:"cat /tmp/fpf-help" \
--bind 'ctrl-/:change-preview-window(hidden|)' \
--bind=ctrl-p:preview:'curl --silent https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD\?h={1}' \
--bind=ctrl-x:preview:'cat <(pacman -Si {1} 2>/dev/null || yay -Qi {1} 2>/dev/null ||
paru -Qi {1}) <(pacman -Ql {1} | awk "{print \$2}")' < "/tmp/aur/fpf-updates" > /dev/null
[[ "$(printf '\nWould you like to update? [y/N]> ' >&2; read; echo $REPLY)" == [Nn]* ]] \
&& printf "\nPlease update soon :(\n" || $AHELPRUPDATE
rm /tmp/aur/fpf-updates
}
while true; do printf "Reading updates" & eval "$(yay -a > /tmp/aur/fpf-yay & sleep ${1:-3})"; break; done
touch "/tmp/aur/fpf-updates"; grep '^[0-9]' "/tmp/aur/fpf-yay" | cut -c 8- > "/tmp/aur/fpf-updates"
[ -s "/tmp/aur/fpf-updates" ] && viewAURUpdates ||
printf "\nThere are no available updates :)\n"
)
### ORPHANS ### ORPHANS
# List orphaned packages and remove selected # List orphaned packages and remove selected
Orphans() { Orphans() {
sort <(pacman -Qtdq) > /tmp/fpf-orphaned [ -f /tmp/fpf-orphans ] ||
echo "$(echo -e ' Select packages to remove\n (use TAB to toggle selection)'; cat /tmp/fpf-orphaned)" > /tmp/fpf-orphaned while IFS= read -r pkgName; do
cat /tmp/fpf-orphaned | expac '%-20n\t%d' "$pkgName" >> /tmp/fpf-orphans
done < <(pacman -Qtdq)
fzf -q "$1" -e -m \ fzf -q "$1" -e -m \
--preview='cat <(pacman -Qik {1} 2>/dev/null || yay -Qi {1} 2>/dev/null || --preview='cat <(pacman -Qik {1} 2>/dev/null || yay -Qi {1} 2>/dev/null ||
paru -Qi {1}) <(pacman -Ql {1} | awk "{print \$2}")' \ paru -Qi {1}) <(pacman -Ql {1} | awk "{print \$2}")' \
--preview-window=65%:wrap \ --preview-window=65%:wrap \
--layout=reverse \ --layout=reverse \
--marker='>>' \ --marker='>>' \
--header-lines=2 \ --header="$(echo -e ' Select packages to remove\n (use TAB to toggle selection)\n')" \
--info=hidden \ --info=hidden \
--ansi \ --ansi \
--margin="2%,1%,2%,1%" \ --margin="2%,1%,2%,1%" \
@ -228,7 +293,9 @@ Orphans() {
--bind=ctrl-k:preview:"cat /tmp/fpf-kbinds" \ --bind=ctrl-k:preview:"cat /tmp/fpf-kbinds" \
--bind=ctrl-h:preview:"cat /tmp/fpf-help" \ --bind=ctrl-h:preview:"cat /tmp/fpf-help" \
--bind ctrl-n:next-selected,ctrl-b:prev-selected \ --bind ctrl-n:next-selected,ctrl-b:prev-selected \
--bind 'ctrl-/:change-preview-window(hidden|)' | --bind 'ctrl-/:change-preview-window(hidden|)' \
< /tmp/fpf-orphans |
awk '{print $1}' |
xargs -ro sudo pacman -Rsn xargs -ro sudo pacman -Rsn
} }
@ -257,6 +324,12 @@ else
-R|--remove) -R|--remove)
Remove "$2" Remove "$2"
;; ;;
-U|--update)
Update
;;
-Ua|--update-aur)
UpdateAURpkgs "$2"
;;
-h|--help) -h|--help)
Help Help
cat "/tmp/fpf-help" cat "/tmp/fpf-help"

BIN
fpf.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 1.9 MiB