summaryrefslogtreecommitdiff
path: root/.local/bin/fpm
diff options
context:
space:
mode:
Diffstat (limited to '.local/bin/fpm')
-rwxr-xr-x.local/bin/fpm148
1 files changed, 148 insertions, 0 deletions
diff --git a/.local/bin/fpm b/.local/bin/fpm
new file mode 100755
index 0000000..8da3d35
--- /dev/null
+++ b/.local/bin/fpm
@@ -0,0 +1,148 @@
+#!/bin/sh
+
+help() { echo "fzf-pm - fzf package manager
+
+USAGE:
+ fzf-pkgs [OPTION]... [QUERY]
+
+OPTIONS:
+ -g list global [all] packages
+ -l list local [instllaed] packages (default)
+ -i select and install packages (implies -g)
+ -u select and uninstall packages (implies -l)
+ -v show verbose output
+ -h show this help message
+
+ (for Arch linux only)
+ -a AUR_HELPER specify command for AUR helper
+
+ (special options)
+ -s PACKAGE print package info
+ -p print package manager
+
+ Note: passing global (-g) or local (-l) pkg list will cancel
+ any install (-i) or uninstall (-u) operations started previously.
+
+ENVIRONMENT VARIABLES:
+ AUR_HELPER set an AUR helper command for Arch linux
+
+Following package managers are supported:
+ apt, pkg, pacman and any pacman compatible AUR helper
+
+QUERY is mandatory when using an AUR Helper" ;}
+
+while getopts 's:gliuha:p' o; do case "$o" in
+ s) sflag=0; pkg="$OPTARG" ;;
+ g) operation=""; opmsg=""; list_all=0 ;;
+ l) operation=""; opmsg=""; list_all=1 ;;
+ i) operation="install_pkgs"; opmsg="to Install"; list_all=0 ;;
+ u) operation="uninstall_pkgs"; opmsg="to Uninstall"; list_all=1 ;;
+ h) help; exit ;;
+ a) export AUR_HELPER="$OPTARG" ;;
+ p) pflag=0 ;;
+ *) printf "fzf-pkgs: invalid option -- '%s'" "$OPTARG"; exit 1 ;;
+esac done
+shift $((OPTIND - 1))
+
+if command -v apt-get >> /dev/null; then
+ alias pkg_sort='sed -e "s/ - / => /"'
+
+ if [ "$list_all" = 0 ]; then
+ export pkg_info='apt-cache show'
+ alias list_pkgs='apt-cache search .'
+ alias search_pkg='apt-cache search'
+ else
+ export DPKG_COLOR='always'
+ export pkg_info='dpkg-query --status'
+ format='${Package} - ${Description}\n'
+ alias list_pkgs='dpkg-query --show --showformat "$format"'
+ alias search_pkg='dpkg-query --show --showformat "$format" | grep'
+ fi
+
+ if command -v pkg >> /dev/null; then
+ export PKGMAN="pkg"
+ alias install_pkgs='pkg install'
+ alias uninstall_pkgs='pkg uninstall'
+ else
+ export PKGMAN="apt"
+ alias install_pkgs='sudo apt-get install'
+ alias uninstall_pkgs='sudo apt-get remove'
+ fi
+
+elif command -v pacman >> /dev/null; then
+ alias pkg_sort='sed -e "N;s/\n\s*/ => /"'
+
+ if [ -n "$AUR_HELPER" ]; then
+ export PKGMAN="$AUR_HELPER"
+ if command -v "$PKGMAN" >/dev/null; then
+ alias install_pkgs='$PKGMAN -S'
+ alias uninstall_pkgs='$PKGMAN -Rns'
+ else
+ echo "fzf-pkgs: AUR Helper '$PKGMAN' command not found" >&2 &&
+ exit 1
+ fi
+ else
+ export PKGMAN='pacman'
+ alias install_pkgs='sudo $PKGMAN -S'
+ alias uninstall_pkgs='sudo $PKGMAN -Rns'
+ fi
+
+ if [ "$list_all" = 0 ]; then
+ export pkg_info="$PKGMAN --color=always -Si"
+ alias list_pkgs='$PKGMAN --color=always -Ss'
+ alias search_pkg='$PKGMAN --color=always -Ss'
+ else
+ export pkg_info="$PKGMAN --color=always -Qi"
+ alias list_pkgs='$PKGMAN --color=always -Qs'
+ alias search_pkg='$PKGMAN --color=always -Qs'
+ fi
+
+else
+ echo "fzf-pkgs: package manager not found" >&2
+ exit 1
+fi
+
+if [ "$pflag" = 0 ]; then
+ printf "%s\n" "$PKGMAN"
+ exit
+elif [ "$sflag" = 0 ]; then
+ printf "$ %s '%s'\n" "$pkg_info" "$pkg"
+ $pkg_info $pkg
+ exit
+fi
+
+query="$1"
+if [ -n "$AUR_HELPER" ] && [ -z "$query" ] && [ "$list_all" = 0 ]; then
+ echo "fzf-pkgs: providing QUERY is mandatory when using an AUR Helper"
+ exit 1
+ # printf "query: "; read -r query
+ # [ -z "$query" ] && exit 1
+fi
+
+if [ -n "$query" ]; then
+ prompt="searching '$query' "
+ get_pkgs() { search_pkg "$query"; }
+else
+ get_pkgs() { list_pkgs; }
+fi
+
+[ -z "$FZF_HIST_DIR" ] && export FZF_HIST_DIR="$HOME/.local/share/fzf"
+fzff() {
+ preview='
+ echo "selected packages:";
+ printf "\t%s\n" {+1} | tr " " "\n"
+ echo
+ eval "$pkg_info 2>/dev/null" {1}
+ '
+ fzf --ansi --multi \
+ --history="${FZF_HIST_DIR:-$HOME/.local/share}/package_history" \
+ --header="Select packages $opmsg" --header-first --prompt="$prompt> " \
+ --preview="$preview" --preview-window="hidden" --tiebreak='begin' \
+ --bind 'ctrl-v:toggle-preview,ctrl-space:toggle-preview'
+}
+
+pkgs="$(get_pkgs | pkg_sort | fzff | cut -d' ' -f1 | tr '\n' ' ')"
+[ -n "$pkgs" ] || exit 2
+echo "$pkgs"
+[ -n "$operation" ] && eval $operation $pkgs
+