fpf-cli 1.6.28 → 1.6.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/fpf +145 -289
- package/lib/fpf/manager-actions.sh +330 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -99,3 +99,4 @@ Installed packages are marked with `*` in the result list.
|
|
|
99
99
|
- `FPF_RELOAD_MIN_CHARS`: minimum query length before live reload (default `2`)
|
|
100
100
|
- `FPF_RELOAD_DEBOUNCE`: reload debounce seconds (default `0.12`)
|
|
101
101
|
- `FPF_DISABLE_INSTALLED_CACHE=1` disables installed-package marker cache
|
|
102
|
+
- `FPF_INSTALLED_CACHE_TTL`: installed-package marker cache freshness window in seconds (default `300`, set `0` to always refresh)
|
package/fpf
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
set -euo pipefail
|
|
4
4
|
|
|
5
5
|
SCRIPT_NAME="fpf"
|
|
6
|
-
SCRIPT_VERSION="1.6.
|
|
6
|
+
SCRIPT_VERSION="1.6.30"
|
|
7
7
|
TMP_ROOT="${TMPDIR:-/tmp}/fpf"
|
|
8
8
|
SESSION_TMP_ROOT=""
|
|
9
9
|
HELP_FILE=""
|
|
@@ -16,6 +16,7 @@ MANAGER_OVERRIDE=""
|
|
|
16
16
|
IPC_MANAGER_OVERRIDE=""
|
|
17
17
|
IPC_FALLBACK_FILE=""
|
|
18
18
|
declare -a QUERY_PARTS=()
|
|
19
|
+
FPF_LIBRARIES_LOADED="0"
|
|
19
20
|
|
|
20
21
|
query_cache_flags() {
|
|
21
22
|
printf "%s" "query_limit=${FPF_QUERY_RESULT_LIMIT:-0};per_manager_limit=${FPF_QUERY_PER_MANAGER_LIMIT:-40};no_query_limit=${FPF_NO_QUERY_RESULT_LIMIT:-120};no_query_npm_limit=${FPF_NO_QUERY_NPM_LIMIT:-120}"
|
|
@@ -34,6 +35,48 @@ command_exists() {
|
|
|
34
35
|
command -v "$1" >/dev/null 2>&1
|
|
35
36
|
}
|
|
36
37
|
|
|
38
|
+
resolve_script_dir() {
|
|
39
|
+
local script_path="${BASH_SOURCE[0]}"
|
|
40
|
+
local script_dir=""
|
|
41
|
+
|
|
42
|
+
if command_exists readlink; then
|
|
43
|
+
while [[ -L "${script_path}" ]]; do
|
|
44
|
+
script_dir="$(cd -P "$(dirname "${script_path}")" && pwd)"
|
|
45
|
+
script_path="$(readlink "${script_path}")"
|
|
46
|
+
if [[ "${script_path}" != /* ]]; then
|
|
47
|
+
script_path="${script_dir}/${script_path}"
|
|
48
|
+
fi
|
|
49
|
+
done
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
if [[ "${script_path}" != /* ]]; then
|
|
53
|
+
script_path="$(pwd)/${script_path}"
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
script_dir="$(cd -P "$(dirname "${script_path}")" && pwd)"
|
|
57
|
+
printf "%s" "${script_dir}"
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
load_fpf_libraries() {
|
|
61
|
+
local script_dir=""
|
|
62
|
+
local manager_actions_lib=""
|
|
63
|
+
|
|
64
|
+
if [[ "${FPF_LIBRARIES_LOADED}" == "1" ]]; then
|
|
65
|
+
return
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
script_dir="$(resolve_script_dir)"
|
|
69
|
+
manager_actions_lib="${script_dir}/lib/fpf/manager-actions.sh"
|
|
70
|
+
|
|
71
|
+
if [[ ! -r "${manager_actions_lib}" ]]; then
|
|
72
|
+
die "Required library file not found: ${manager_actions_lib}"
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# shellcheck disable=SC1090
|
|
76
|
+
source "${manager_actions_lib}"
|
|
77
|
+
FPF_LIBRARIES_LOADED="1"
|
|
78
|
+
}
|
|
79
|
+
|
|
37
80
|
ensure_tmp_root() {
|
|
38
81
|
mkdir -p "${TMP_ROOT}"
|
|
39
82
|
}
|
|
@@ -660,53 +703,7 @@ run_preview_manager_output() {
|
|
|
660
703
|
local manager="$1"
|
|
661
704
|
local package="$2"
|
|
662
705
|
|
|
663
|
-
|
|
664
|
-
apt)
|
|
665
|
-
apt-cache show "${package}" 2>/dev/null || true
|
|
666
|
-
printf "\n"
|
|
667
|
-
dpkg -L "${package}" 2>/dev/null || true
|
|
668
|
-
;;
|
|
669
|
-
dnf)
|
|
670
|
-
dnf info "${package}" 2>/dev/null || true
|
|
671
|
-
printf "\n"
|
|
672
|
-
rpm -ql "${package}" 2>/dev/null || true
|
|
673
|
-
;;
|
|
674
|
-
pacman)
|
|
675
|
-
pacman -Si "${package}" 2>/dev/null || true
|
|
676
|
-
printf "\n"
|
|
677
|
-
pacman -Fl "${package}" 2>/dev/null | awk '{print $2}' || true
|
|
678
|
-
;;
|
|
679
|
-
zypper)
|
|
680
|
-
zypper --non-interactive info "${package}" 2>/dev/null || true
|
|
681
|
-
;;
|
|
682
|
-
emerge)
|
|
683
|
-
emerge --search --color=n "${package}" 2>/dev/null || true
|
|
684
|
-
;;
|
|
685
|
-
brew)
|
|
686
|
-
brew info "${package}" 2>/dev/null || true
|
|
687
|
-
;;
|
|
688
|
-
winget)
|
|
689
|
-
winget show --id "${package}" --exact --source winget --accept-source-agreements --disable-interactivity 2>/dev/null || true
|
|
690
|
-
;;
|
|
691
|
-
choco)
|
|
692
|
-
choco info "${package}" 2>/dev/null || true
|
|
693
|
-
;;
|
|
694
|
-
scoop)
|
|
695
|
-
scoop info "${package}" 2>/dev/null || true
|
|
696
|
-
;;
|
|
697
|
-
snap)
|
|
698
|
-
snap info "${package}" 2>/dev/null || true
|
|
699
|
-
;;
|
|
700
|
-
flatpak)
|
|
701
|
-
flatpak info "${package}" 2>/dev/null || flatpak remote-info flathub "${package}" 2>/dev/null || true
|
|
702
|
-
;;
|
|
703
|
-
npm)
|
|
704
|
-
npm view "${package}" 2>/dev/null || true
|
|
705
|
-
;;
|
|
706
|
-
bun)
|
|
707
|
-
bun info "${package}" 2>/dev/null || npm view "${package}" 2>/dev/null || true
|
|
708
|
-
;;
|
|
709
|
-
esac
|
|
706
|
+
manager_show_info "${manager}" "${package}" || true
|
|
710
707
|
}
|
|
711
708
|
|
|
712
709
|
run_preview_item_action() {
|
|
@@ -2241,23 +2238,101 @@ manager_installed_names() {
|
|
|
2241
2238
|
manager_installed_entries "${manager}" | awk -F'\t' 'NF > 0 { print $1 }'
|
|
2242
2239
|
}
|
|
2243
2240
|
|
|
2241
|
+
installed_cache_ttl_seconds() {
|
|
2242
|
+
local ttl_seconds="${FPF_INSTALLED_CACHE_TTL:-300}"
|
|
2243
|
+
|
|
2244
|
+
if ! [[ "${ttl_seconds}" =~ ^[0-9]+$ ]]; then
|
|
2245
|
+
ttl_seconds="300"
|
|
2246
|
+
fi
|
|
2247
|
+
|
|
2248
|
+
printf "%s" "${ttl_seconds}"
|
|
2249
|
+
}
|
|
2250
|
+
|
|
2251
|
+
installed_cache_fingerprint() {
|
|
2252
|
+
local manager="$1"
|
|
2253
|
+
local command_path=""
|
|
2254
|
+
local extra_token=""
|
|
2255
|
+
|
|
2256
|
+
case "${manager}" in
|
|
2257
|
+
apt)
|
|
2258
|
+
command_path="$(command -v dpkg-query 2>/dev/null || printf "missing")"
|
|
2259
|
+
;;
|
|
2260
|
+
dnf)
|
|
2261
|
+
command_path="$(command -v dnf 2>/dev/null || printf "missing")"
|
|
2262
|
+
;;
|
|
2263
|
+
pacman)
|
|
2264
|
+
command_path="$(command -v pacman 2>/dev/null || printf "missing")"
|
|
2265
|
+
;;
|
|
2266
|
+
zypper)
|
|
2267
|
+
command_path="$(command -v zypper 2>/dev/null || printf "missing")"
|
|
2268
|
+
;;
|
|
2269
|
+
emerge)
|
|
2270
|
+
if command_exists qlist; then
|
|
2271
|
+
command_path="$(command -v qlist 2>/dev/null || printf "missing")"
|
|
2272
|
+
extra_token="|mode=qlist"
|
|
2273
|
+
else
|
|
2274
|
+
command_path="/var/db/pkg"
|
|
2275
|
+
extra_token="|mode=vardb"
|
|
2276
|
+
fi
|
|
2277
|
+
;;
|
|
2278
|
+
brew)
|
|
2279
|
+
command_path="$(command -v brew 2>/dev/null || printf "missing")"
|
|
2280
|
+
;;
|
|
2281
|
+
winget)
|
|
2282
|
+
command_path="$(command -v winget 2>/dev/null || printf "missing")"
|
|
2283
|
+
;;
|
|
2284
|
+
choco)
|
|
2285
|
+
command_path="$(command -v choco 2>/dev/null || printf "missing")"
|
|
2286
|
+
;;
|
|
2287
|
+
scoop)
|
|
2288
|
+
command_path="$(command -v scoop 2>/dev/null || printf "missing")"
|
|
2289
|
+
;;
|
|
2290
|
+
snap)
|
|
2291
|
+
command_path="$(command -v snap 2>/dev/null || printf "missing")"
|
|
2292
|
+
;;
|
|
2293
|
+
flatpak)
|
|
2294
|
+
command_path="$(command -v flatpak 2>/dev/null || printf "missing")"
|
|
2295
|
+
;;
|
|
2296
|
+
npm)
|
|
2297
|
+
command_path="$(command -v npm 2>/dev/null || printf "missing")"
|
|
2298
|
+
;;
|
|
2299
|
+
bun)
|
|
2300
|
+
command_path="$(command -v bun 2>/dev/null || printf "missing")"
|
|
2301
|
+
if command_exists npm; then
|
|
2302
|
+
extra_token="|npm=$(command -v npm 2>/dev/null || printf "missing")"
|
|
2303
|
+
fi
|
|
2304
|
+
;;
|
|
2305
|
+
*)
|
|
2306
|
+
command_path="unknown"
|
|
2307
|
+
;;
|
|
2308
|
+
esac
|
|
2309
|
+
|
|
2310
|
+
printf "%s|cmd=%s%s" "$(cache_fingerprint "${manager}" "" "installed")" "${command_path}" "${extra_token}"
|
|
2311
|
+
}
|
|
2312
|
+
|
|
2244
2313
|
manager_installed_names_cached() {
|
|
2245
2314
|
local manager="$1"
|
|
2246
2315
|
local output_file="$2"
|
|
2247
2316
|
local cache_enabled="${FPF_DISABLE_INSTALLED_CACHE:-0}"
|
|
2317
|
+
local cache_ttl_seconds
|
|
2248
2318
|
local cache_key
|
|
2249
2319
|
local cache_file
|
|
2250
2320
|
local cache_fingerprint_value
|
|
2321
|
+
local cached_fingerprint=""
|
|
2251
2322
|
|
|
2252
2323
|
initialize_cache_root
|
|
2253
2324
|
|
|
2254
2325
|
cache_key="$(cache_catalog_key "${manager}")"
|
|
2255
2326
|
cache_file="$(cache_path_for_key "${cache_key}")"
|
|
2256
|
-
|
|
2327
|
+
cache_ttl_seconds="$(installed_cache_ttl_seconds)"
|
|
2328
|
+
cache_fingerprint_value="$(installed_cache_fingerprint "${manager}")"
|
|
2257
2329
|
|
|
2258
2330
|
if [[ "${cache_enabled}" != "1" && -s "${cache_file}" ]]; then
|
|
2259
|
-
|
|
2260
|
-
|
|
2331
|
+
cached_fingerprint="$(cache_meta_value_for_key "${cache_key}" "fingerprint" 2>/dev/null || true)"
|
|
2332
|
+
if [[ "${cached_fingerprint}" == "${cache_fingerprint_value}" ]] && cache_is_fresh_with_ttl "${cache_key}" "${cache_ttl_seconds}"; then
|
|
2333
|
+
cp "${cache_file}" "${output_file}"
|
|
2334
|
+
return
|
|
2335
|
+
fi
|
|
2261
2336
|
fi
|
|
2262
2337
|
|
|
2263
2338
|
manager_installed_names "${manager}" >"${output_file}" 2>/dev/null || true
|
|
@@ -2656,256 +2731,29 @@ run_ipc_query_notify_action() {
|
|
|
2656
2731
|
manager_install() {
|
|
2657
2732
|
local manager="$1"
|
|
2658
2733
|
shift
|
|
2659
|
-
|
|
2660
|
-
case "${manager}" in
|
|
2661
|
-
apt)
|
|
2662
|
-
run_as_root apt-get install -y "$@"
|
|
2663
|
-
;;
|
|
2664
|
-
dnf)
|
|
2665
|
-
run_as_root dnf install -y "$@"
|
|
2666
|
-
;;
|
|
2667
|
-
pacman)
|
|
2668
|
-
run_as_root pacman -S --needed "$@"
|
|
2669
|
-
;;
|
|
2670
|
-
zypper)
|
|
2671
|
-
run_as_root zypper --non-interactive install --auto-agree-with-licenses "$@"
|
|
2672
|
-
;;
|
|
2673
|
-
emerge)
|
|
2674
|
-
run_as_root emerge --ask=n --verbose "$@"
|
|
2675
|
-
;;
|
|
2676
|
-
brew)
|
|
2677
|
-
brew install "$@"
|
|
2678
|
-
;;
|
|
2679
|
-
winget)
|
|
2680
|
-
local pkg
|
|
2681
|
-
for pkg in "$@"; do
|
|
2682
|
-
winget install --id "${pkg}" --exact --source winget --accept-package-agreements --accept-source-agreements --disable-interactivity
|
|
2683
|
-
done
|
|
2684
|
-
;;
|
|
2685
|
-
choco)
|
|
2686
|
-
choco install "$@" -y
|
|
2687
|
-
;;
|
|
2688
|
-
scoop)
|
|
2689
|
-
scoop install "$@"
|
|
2690
|
-
;;
|
|
2691
|
-
snap)
|
|
2692
|
-
local pkg
|
|
2693
|
-
for pkg in "$@"; do
|
|
2694
|
-
run_as_root snap install "${pkg}" 2>/dev/null || run_as_root snap install --classic "${pkg}"
|
|
2695
|
-
done
|
|
2696
|
-
;;
|
|
2697
|
-
flatpak)
|
|
2698
|
-
local pkg
|
|
2699
|
-
for pkg in "$@"; do
|
|
2700
|
-
flatpak install -y --user flathub "${pkg}" 2>/dev/null ||
|
|
2701
|
-
flatpak install -y --user "${pkg}" 2>/dev/null ||
|
|
2702
|
-
run_as_root flatpak install -y flathub "${pkg}" 2>/dev/null ||
|
|
2703
|
-
run_as_root flatpak install -y "${pkg}"
|
|
2704
|
-
done
|
|
2705
|
-
;;
|
|
2706
|
-
npm)
|
|
2707
|
-
npm install -g "$@"
|
|
2708
|
-
;;
|
|
2709
|
-
bun)
|
|
2710
|
-
bun add -g "$@"
|
|
2711
|
-
;;
|
|
2712
|
-
esac
|
|
2734
|
+
manager_execute_action "${manager}" "install" "$@"
|
|
2713
2735
|
}
|
|
2714
2736
|
|
|
2715
2737
|
manager_remove() {
|
|
2716
2738
|
local manager="$1"
|
|
2717
2739
|
shift
|
|
2718
|
-
|
|
2719
|
-
case "${manager}" in
|
|
2720
|
-
apt)
|
|
2721
|
-
run_as_root apt-get remove -y "$@"
|
|
2722
|
-
;;
|
|
2723
|
-
dnf)
|
|
2724
|
-
run_as_root dnf remove -y "$@"
|
|
2725
|
-
;;
|
|
2726
|
-
pacman)
|
|
2727
|
-
run_as_root pacman -Rsn "$@"
|
|
2728
|
-
;;
|
|
2729
|
-
zypper)
|
|
2730
|
-
run_as_root zypper --non-interactive remove "$@"
|
|
2731
|
-
;;
|
|
2732
|
-
emerge)
|
|
2733
|
-
run_as_root emerge --ask=n --deselect "$@"
|
|
2734
|
-
run_as_root emerge --ask=n --depclean "$@"
|
|
2735
|
-
;;
|
|
2736
|
-
brew)
|
|
2737
|
-
brew uninstall "$@"
|
|
2738
|
-
;;
|
|
2739
|
-
winget)
|
|
2740
|
-
local pkg
|
|
2741
|
-
for pkg in "$@"; do
|
|
2742
|
-
winget uninstall --id "${pkg}" --exact --source winget --disable-interactivity
|
|
2743
|
-
done
|
|
2744
|
-
;;
|
|
2745
|
-
choco)
|
|
2746
|
-
choco uninstall "$@" -y
|
|
2747
|
-
;;
|
|
2748
|
-
scoop)
|
|
2749
|
-
scoop uninstall "$@"
|
|
2750
|
-
;;
|
|
2751
|
-
snap)
|
|
2752
|
-
run_as_root snap remove "$@"
|
|
2753
|
-
;;
|
|
2754
|
-
flatpak)
|
|
2755
|
-
flatpak uninstall -y --user "$@" 2>/dev/null || run_as_root flatpak uninstall -y "$@"
|
|
2756
|
-
;;
|
|
2757
|
-
npm)
|
|
2758
|
-
npm uninstall -g "$@"
|
|
2759
|
-
;;
|
|
2760
|
-
bun)
|
|
2761
|
-
bun remove --global "$@"
|
|
2762
|
-
;;
|
|
2763
|
-
esac
|
|
2740
|
+
manager_execute_action "${manager}" "remove" "$@"
|
|
2764
2741
|
}
|
|
2765
2742
|
|
|
2766
2743
|
manager_show_info() {
|
|
2767
2744
|
local manager="$1"
|
|
2768
2745
|
local package="$2"
|
|
2769
|
-
|
|
2770
|
-
case "${manager}" in
|
|
2771
|
-
apt)
|
|
2772
|
-
cat <(apt-cache show "${package}" 2>/dev/null) <(printf "\n") <(dpkg -L "${package}" 2>/dev/null)
|
|
2773
|
-
;;
|
|
2774
|
-
dnf)
|
|
2775
|
-
cat <(dnf info "${package}" 2>/dev/null) <(printf "\n") <(rpm -ql "${package}" 2>/dev/null)
|
|
2776
|
-
;;
|
|
2777
|
-
pacman)
|
|
2778
|
-
cat <(pacman -Qi "${package}" 2>/dev/null || pacman -Si "${package}" 2>/dev/null) <(printf "\n") <(pacman -Ql "${package}" 2>/dev/null)
|
|
2779
|
-
;;
|
|
2780
|
-
zypper)
|
|
2781
|
-
zypper --non-interactive info "${package}" 2>/dev/null
|
|
2782
|
-
;;
|
|
2783
|
-
emerge)
|
|
2784
|
-
emerge --search --color=n "${package}" 2>/dev/null
|
|
2785
|
-
;;
|
|
2786
|
-
brew)
|
|
2787
|
-
brew info "${package}" 2>/dev/null
|
|
2788
|
-
;;
|
|
2789
|
-
winget)
|
|
2790
|
-
winget show --id "${package}" --exact --source winget --accept-source-agreements --disable-interactivity 2>/dev/null
|
|
2791
|
-
;;
|
|
2792
|
-
choco)
|
|
2793
|
-
choco info "${package}" 2>/dev/null
|
|
2794
|
-
;;
|
|
2795
|
-
scoop)
|
|
2796
|
-
scoop info "${package}" 2>/dev/null
|
|
2797
|
-
;;
|
|
2798
|
-
snap)
|
|
2799
|
-
snap info "${package}" 2>/dev/null
|
|
2800
|
-
;;
|
|
2801
|
-
flatpak)
|
|
2802
|
-
flatpak info "${package}" 2>/dev/null || flatpak remote-info flathub "${package}" 2>/dev/null
|
|
2803
|
-
;;
|
|
2804
|
-
npm)
|
|
2805
|
-
npm view "${package}" 2>/dev/null
|
|
2806
|
-
;;
|
|
2807
|
-
bun)
|
|
2808
|
-
bun info "${package}" 2>/dev/null || npm view "${package}" 2>/dev/null
|
|
2809
|
-
;;
|
|
2810
|
-
esac
|
|
2746
|
+
manager_execute_action "${manager}" "show_info" "${package}"
|
|
2811
2747
|
}
|
|
2812
2748
|
|
|
2813
2749
|
manager_update() {
|
|
2814
2750
|
local manager="$1"
|
|
2815
|
-
|
|
2816
|
-
case "${manager}" in
|
|
2817
|
-
apt)
|
|
2818
|
-
run_as_root apt-get update
|
|
2819
|
-
run_as_root apt-get upgrade -y
|
|
2820
|
-
;;
|
|
2821
|
-
dnf)
|
|
2822
|
-
run_as_root dnf upgrade -y
|
|
2823
|
-
;;
|
|
2824
|
-
pacman)
|
|
2825
|
-
run_as_root pacman -Syu
|
|
2826
|
-
;;
|
|
2827
|
-
zypper)
|
|
2828
|
-
run_as_root zypper --non-interactive refresh
|
|
2829
|
-
run_as_root zypper --non-interactive update
|
|
2830
|
-
;;
|
|
2831
|
-
emerge)
|
|
2832
|
-
run_as_root emerge --sync
|
|
2833
|
-
run_as_root emerge --ask=n --update --deep --newuse @world
|
|
2834
|
-
;;
|
|
2835
|
-
brew)
|
|
2836
|
-
brew update
|
|
2837
|
-
brew upgrade
|
|
2838
|
-
;;
|
|
2839
|
-
winget)
|
|
2840
|
-
winget upgrade --all --source winget --accept-package-agreements --accept-source-agreements --disable-interactivity
|
|
2841
|
-
;;
|
|
2842
|
-
choco)
|
|
2843
|
-
choco upgrade all -y
|
|
2844
|
-
;;
|
|
2845
|
-
scoop)
|
|
2846
|
-
scoop update
|
|
2847
|
-
scoop update "*"
|
|
2848
|
-
;;
|
|
2849
|
-
snap)
|
|
2850
|
-
run_as_root snap refresh
|
|
2851
|
-
;;
|
|
2852
|
-
flatpak)
|
|
2853
|
-
flatpak update -y --user 2>/dev/null || run_as_root flatpak update -y
|
|
2854
|
-
;;
|
|
2855
|
-
npm)
|
|
2856
|
-
npm update -g
|
|
2857
|
-
;;
|
|
2858
|
-
bun)
|
|
2859
|
-
bun update --global
|
|
2860
|
-
;;
|
|
2861
|
-
esac
|
|
2751
|
+
manager_execute_action "${manager}" "update"
|
|
2862
2752
|
}
|
|
2863
2753
|
|
|
2864
2754
|
manager_refresh() {
|
|
2865
2755
|
local manager="$1"
|
|
2866
|
-
|
|
2867
|
-
case "${manager}" in
|
|
2868
|
-
apt)
|
|
2869
|
-
run_as_root apt-get update
|
|
2870
|
-
;;
|
|
2871
|
-
dnf)
|
|
2872
|
-
run_as_root dnf makecache
|
|
2873
|
-
;;
|
|
2874
|
-
pacman)
|
|
2875
|
-
run_as_root pacman -Sy
|
|
2876
|
-
;;
|
|
2877
|
-
zypper)
|
|
2878
|
-
run_as_root zypper --non-interactive refresh
|
|
2879
|
-
;;
|
|
2880
|
-
emerge)
|
|
2881
|
-
run_as_root emerge --sync
|
|
2882
|
-
;;
|
|
2883
|
-
brew)
|
|
2884
|
-
brew update
|
|
2885
|
-
;;
|
|
2886
|
-
winget)
|
|
2887
|
-
winget source update --name winget --accept-source-agreements --disable-interactivity
|
|
2888
|
-
;;
|
|
2889
|
-
choco)
|
|
2890
|
-
choco source list --limit-output >/dev/null
|
|
2891
|
-
;;
|
|
2892
|
-
scoop)
|
|
2893
|
-
scoop update
|
|
2894
|
-
;;
|
|
2895
|
-
snap)
|
|
2896
|
-
run_as_root snap refresh --list
|
|
2897
|
-
;;
|
|
2898
|
-
flatpak)
|
|
2899
|
-
ensure_flatpak_flathub_remote >/dev/null 2>&1 || true
|
|
2900
|
-
flatpak update -y --appstream --user 2>/dev/null || run_as_root flatpak update -y --appstream
|
|
2901
|
-
;;
|
|
2902
|
-
npm)
|
|
2903
|
-
npm cache verify
|
|
2904
|
-
;;
|
|
2905
|
-
bun)
|
|
2906
|
-
bun pm cache >/dev/null
|
|
2907
|
-
;;
|
|
2908
|
-
esac
|
|
2756
|
+
manager_execute_action "${manager}" "refresh"
|
|
2909
2757
|
}
|
|
2910
2758
|
|
|
2911
2759
|
confirm_action() {
|
|
@@ -2932,6 +2780,9 @@ run_fuzzy_selector() {
|
|
|
2932
2780
|
local reload_cmd="${4:-}"
|
|
2933
2781
|
local reload_ipc_cmd="${5:-}"
|
|
2934
2782
|
local script_path="${BASH_SOURCE[0]}"
|
|
2783
|
+
local quoted_script_path=""
|
|
2784
|
+
local quoted_help_file=""
|
|
2785
|
+
local quoted_kbinds_file=""
|
|
2935
2786
|
local preview_cmd
|
|
2936
2787
|
local fzf_shell
|
|
2937
2788
|
|
|
@@ -2939,7 +2790,11 @@ run_fuzzy_selector() {
|
|
|
2939
2790
|
script_path="$(pwd)/${script_path}"
|
|
2940
2791
|
fi
|
|
2941
2792
|
|
|
2942
|
-
|
|
2793
|
+
printf -v quoted_script_path "%q" "${script_path}"
|
|
2794
|
+
printf -v quoted_help_file "%q" "${HELP_FILE}"
|
|
2795
|
+
printf -v quoted_kbinds_file "%q" "${KBINDS_FILE}"
|
|
2796
|
+
|
|
2797
|
+
preview_cmd="FPF_SESSION_TMP_ROOT=$(printf '%q' "${SESSION_TMP_ROOT}") ${quoted_script_path} --preview-item --manager {1} -- {2}"
|
|
2943
2798
|
if command_exists bash; then
|
|
2944
2799
|
fzf_shell="bash"
|
|
2945
2800
|
else
|
|
@@ -2961,8 +2816,8 @@ run_fuzzy_selector() {
|
|
|
2961
2816
|
--margin="2%,1%,2%,1%" \
|
|
2962
2817
|
--cycle \
|
|
2963
2818
|
--tiebreak=begin,chunk,length \
|
|
2964
|
-
--bind=ctrl-k:preview:
|
|
2965
|
-
--bind=ctrl-h:preview:
|
|
2819
|
+
--bind="ctrl-k:preview:cat ${quoted_kbinds_file}" \
|
|
2820
|
+
--bind="ctrl-h:preview:cat ${quoted_help_file}" \
|
|
2966
2821
|
--bind='ctrl-/:change-preview-window(hidden|)' \
|
|
2967
2822
|
--bind=ctrl-n:next-selected,ctrl-b:prev-selected \
|
|
2968
2823
|
--bind='focus:transform-preview-label:echo [{1}] {2}')
|
|
@@ -2975,7 +2830,7 @@ run_fuzzy_selector() {
|
|
|
2975
2830
|
fzf_args+=(--bind="ctrl-r:change-prompt(Loading> )+reload:${reload_cmd}")
|
|
2976
2831
|
fzf_args+=(--bind="result:change-prompt(Search> )")
|
|
2977
2832
|
else
|
|
2978
|
-
fzf_args+=(--bind="ctrl-r:
|
|
2833
|
+
fzf_args+=(--bind="ctrl-r:reload:${reload_cmd}")
|
|
2979
2834
|
fi
|
|
2980
2835
|
fi
|
|
2981
2836
|
elif [[ -n "${reload_cmd}" ]]; then
|
|
@@ -2984,8 +2839,8 @@ run_fuzzy_selector() {
|
|
|
2984
2839
|
fzf_args+=(--bind="ctrl-r:change-prompt(Loading> )+reload:${reload_cmd}")
|
|
2985
2840
|
fzf_args+=(--bind="result:change-prompt(Search> )")
|
|
2986
2841
|
else
|
|
2987
|
-
fzf_args+=(--bind="change:
|
|
2988
|
-
fzf_args+=(--bind="ctrl-r:
|
|
2842
|
+
fzf_args+=(--bind="change:reload:${reload_cmd}")
|
|
2843
|
+
fzf_args+=(--bind="ctrl-r:reload:${reload_cmd}")
|
|
2989
2844
|
fi
|
|
2990
2845
|
fi
|
|
2991
2846
|
|
|
@@ -2999,6 +2854,7 @@ run_fuzzy_selector() {
|
|
|
2999
2854
|
main() {
|
|
3000
2855
|
ensure_tmp_root
|
|
3001
2856
|
initialize_session_tmp_root
|
|
2857
|
+
load_fpf_libraries
|
|
3002
2858
|
if [[ -z "${FPF_SESSION_TMP_ROOT:-}" ]]; then
|
|
3003
2859
|
trap cleanup_session_tmp_root EXIT
|
|
3004
2860
|
fi
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
manager_execute_action() {
|
|
2
|
+
local manager="$1"
|
|
3
|
+
local action="$2"
|
|
4
|
+
shift 2
|
|
5
|
+
local package=""
|
|
6
|
+
local pkg=""
|
|
7
|
+
|
|
8
|
+
case "${manager}" in
|
|
9
|
+
apt)
|
|
10
|
+
case "${action}" in
|
|
11
|
+
install)
|
|
12
|
+
run_as_root apt-get install -y "$@"
|
|
13
|
+
;;
|
|
14
|
+
remove)
|
|
15
|
+
run_as_root apt-get remove -y "$@"
|
|
16
|
+
;;
|
|
17
|
+
show_info)
|
|
18
|
+
package="${1:-}"
|
|
19
|
+
cat <(apt-cache show "${package}" 2>/dev/null) <(printf "\n") <(dpkg -L "${package}" 2>/dev/null)
|
|
20
|
+
;;
|
|
21
|
+
update)
|
|
22
|
+
run_as_root apt-get update
|
|
23
|
+
run_as_root apt-get upgrade -y
|
|
24
|
+
;;
|
|
25
|
+
refresh)
|
|
26
|
+
run_as_root apt-get update
|
|
27
|
+
;;
|
|
28
|
+
*)
|
|
29
|
+
return 1
|
|
30
|
+
;;
|
|
31
|
+
esac
|
|
32
|
+
;;
|
|
33
|
+
dnf)
|
|
34
|
+
case "${action}" in
|
|
35
|
+
install)
|
|
36
|
+
run_as_root dnf install -y "$@"
|
|
37
|
+
;;
|
|
38
|
+
remove)
|
|
39
|
+
run_as_root dnf remove -y "$@"
|
|
40
|
+
;;
|
|
41
|
+
show_info)
|
|
42
|
+
package="${1:-}"
|
|
43
|
+
cat <(dnf info "${package}" 2>/dev/null) <(printf "\n") <(rpm -ql "${package}" 2>/dev/null)
|
|
44
|
+
;;
|
|
45
|
+
update)
|
|
46
|
+
run_as_root dnf upgrade -y
|
|
47
|
+
;;
|
|
48
|
+
refresh)
|
|
49
|
+
run_as_root dnf makecache
|
|
50
|
+
;;
|
|
51
|
+
*)
|
|
52
|
+
return 1
|
|
53
|
+
;;
|
|
54
|
+
esac
|
|
55
|
+
;;
|
|
56
|
+
pacman)
|
|
57
|
+
case "${action}" in
|
|
58
|
+
install)
|
|
59
|
+
run_as_root pacman -S --needed "$@"
|
|
60
|
+
;;
|
|
61
|
+
remove)
|
|
62
|
+
run_as_root pacman -Rsn "$@"
|
|
63
|
+
;;
|
|
64
|
+
show_info)
|
|
65
|
+
package="${1:-}"
|
|
66
|
+
cat <(pacman -Qi "${package}" 2>/dev/null || pacman -Si "${package}" 2>/dev/null) <(printf "\n") <(pacman -Ql "${package}" 2>/dev/null)
|
|
67
|
+
;;
|
|
68
|
+
update)
|
|
69
|
+
run_as_root pacman -Syu
|
|
70
|
+
;;
|
|
71
|
+
refresh)
|
|
72
|
+
run_as_root pacman -Sy
|
|
73
|
+
;;
|
|
74
|
+
*)
|
|
75
|
+
return 1
|
|
76
|
+
;;
|
|
77
|
+
esac
|
|
78
|
+
;;
|
|
79
|
+
zypper)
|
|
80
|
+
case "${action}" in
|
|
81
|
+
install)
|
|
82
|
+
run_as_root zypper --non-interactive install --auto-agree-with-licenses "$@"
|
|
83
|
+
;;
|
|
84
|
+
remove)
|
|
85
|
+
run_as_root zypper --non-interactive remove "$@"
|
|
86
|
+
;;
|
|
87
|
+
show_info)
|
|
88
|
+
package="${1:-}"
|
|
89
|
+
zypper --non-interactive info "${package}" 2>/dev/null
|
|
90
|
+
;;
|
|
91
|
+
update)
|
|
92
|
+
run_as_root zypper --non-interactive refresh
|
|
93
|
+
run_as_root zypper --non-interactive update
|
|
94
|
+
;;
|
|
95
|
+
refresh)
|
|
96
|
+
run_as_root zypper --non-interactive refresh
|
|
97
|
+
;;
|
|
98
|
+
*)
|
|
99
|
+
return 1
|
|
100
|
+
;;
|
|
101
|
+
esac
|
|
102
|
+
;;
|
|
103
|
+
emerge)
|
|
104
|
+
case "${action}" in
|
|
105
|
+
install)
|
|
106
|
+
run_as_root emerge --ask=n --verbose "$@"
|
|
107
|
+
;;
|
|
108
|
+
remove)
|
|
109
|
+
run_as_root emerge --ask=n --deselect "$@"
|
|
110
|
+
run_as_root emerge --ask=n --depclean "$@"
|
|
111
|
+
;;
|
|
112
|
+
show_info)
|
|
113
|
+
package="${1:-}"
|
|
114
|
+
emerge --search --color=n "${package}" 2>/dev/null
|
|
115
|
+
;;
|
|
116
|
+
update)
|
|
117
|
+
run_as_root emerge --sync
|
|
118
|
+
run_as_root emerge --ask=n --update --deep --newuse @world
|
|
119
|
+
;;
|
|
120
|
+
refresh)
|
|
121
|
+
run_as_root emerge --sync
|
|
122
|
+
;;
|
|
123
|
+
*)
|
|
124
|
+
return 1
|
|
125
|
+
;;
|
|
126
|
+
esac
|
|
127
|
+
;;
|
|
128
|
+
brew)
|
|
129
|
+
case "${action}" in
|
|
130
|
+
install)
|
|
131
|
+
brew install "$@"
|
|
132
|
+
;;
|
|
133
|
+
remove)
|
|
134
|
+
brew uninstall "$@"
|
|
135
|
+
;;
|
|
136
|
+
show_info)
|
|
137
|
+
package="${1:-}"
|
|
138
|
+
brew info "${package}" 2>/dev/null
|
|
139
|
+
;;
|
|
140
|
+
update)
|
|
141
|
+
brew update
|
|
142
|
+
brew upgrade
|
|
143
|
+
;;
|
|
144
|
+
refresh)
|
|
145
|
+
brew update
|
|
146
|
+
;;
|
|
147
|
+
*)
|
|
148
|
+
return 1
|
|
149
|
+
;;
|
|
150
|
+
esac
|
|
151
|
+
;;
|
|
152
|
+
winget)
|
|
153
|
+
case "${action}" in
|
|
154
|
+
install)
|
|
155
|
+
for pkg in "$@"; do
|
|
156
|
+
winget install --id "${pkg}" --exact --source winget --accept-package-agreements --accept-source-agreements --disable-interactivity
|
|
157
|
+
done
|
|
158
|
+
;;
|
|
159
|
+
remove)
|
|
160
|
+
for pkg in "$@"; do
|
|
161
|
+
winget uninstall --id "${pkg}" --exact --source winget --disable-interactivity
|
|
162
|
+
done
|
|
163
|
+
;;
|
|
164
|
+
show_info)
|
|
165
|
+
package="${1:-}"
|
|
166
|
+
winget show --id "${package}" --exact --source winget --accept-source-agreements --disable-interactivity 2>/dev/null
|
|
167
|
+
;;
|
|
168
|
+
update)
|
|
169
|
+
winget upgrade --all --source winget --accept-package-agreements --accept-source-agreements --disable-interactivity
|
|
170
|
+
;;
|
|
171
|
+
refresh)
|
|
172
|
+
winget source update --name winget --accept-source-agreements --disable-interactivity
|
|
173
|
+
;;
|
|
174
|
+
*)
|
|
175
|
+
return 1
|
|
176
|
+
;;
|
|
177
|
+
esac
|
|
178
|
+
;;
|
|
179
|
+
choco)
|
|
180
|
+
case "${action}" in
|
|
181
|
+
install)
|
|
182
|
+
choco install "$@" -y
|
|
183
|
+
;;
|
|
184
|
+
remove)
|
|
185
|
+
choco uninstall "$@" -y
|
|
186
|
+
;;
|
|
187
|
+
show_info)
|
|
188
|
+
package="${1:-}"
|
|
189
|
+
choco info "${package}" 2>/dev/null
|
|
190
|
+
;;
|
|
191
|
+
update)
|
|
192
|
+
choco upgrade all -y
|
|
193
|
+
;;
|
|
194
|
+
refresh)
|
|
195
|
+
choco source list --limit-output >/dev/null
|
|
196
|
+
;;
|
|
197
|
+
*)
|
|
198
|
+
return 1
|
|
199
|
+
;;
|
|
200
|
+
esac
|
|
201
|
+
;;
|
|
202
|
+
scoop)
|
|
203
|
+
case "${action}" in
|
|
204
|
+
install)
|
|
205
|
+
scoop install "$@"
|
|
206
|
+
;;
|
|
207
|
+
remove)
|
|
208
|
+
scoop uninstall "$@"
|
|
209
|
+
;;
|
|
210
|
+
show_info)
|
|
211
|
+
package="${1:-}"
|
|
212
|
+
scoop info "${package}" 2>/dev/null
|
|
213
|
+
;;
|
|
214
|
+
update)
|
|
215
|
+
scoop update
|
|
216
|
+
scoop update "*"
|
|
217
|
+
;;
|
|
218
|
+
refresh)
|
|
219
|
+
scoop update
|
|
220
|
+
;;
|
|
221
|
+
*)
|
|
222
|
+
return 1
|
|
223
|
+
;;
|
|
224
|
+
esac
|
|
225
|
+
;;
|
|
226
|
+
snap)
|
|
227
|
+
case "${action}" in
|
|
228
|
+
install)
|
|
229
|
+
for pkg in "$@"; do
|
|
230
|
+
run_as_root snap install "${pkg}" 2>/dev/null || run_as_root snap install --classic "${pkg}"
|
|
231
|
+
done
|
|
232
|
+
;;
|
|
233
|
+
remove)
|
|
234
|
+
run_as_root snap remove "$@"
|
|
235
|
+
;;
|
|
236
|
+
show_info)
|
|
237
|
+
package="${1:-}"
|
|
238
|
+
snap info "${package}" 2>/dev/null
|
|
239
|
+
;;
|
|
240
|
+
update)
|
|
241
|
+
run_as_root snap refresh
|
|
242
|
+
;;
|
|
243
|
+
refresh)
|
|
244
|
+
run_as_root snap refresh --list
|
|
245
|
+
;;
|
|
246
|
+
*)
|
|
247
|
+
return 1
|
|
248
|
+
;;
|
|
249
|
+
esac
|
|
250
|
+
;;
|
|
251
|
+
flatpak)
|
|
252
|
+
case "${action}" in
|
|
253
|
+
install)
|
|
254
|
+
for pkg in "$@"; do
|
|
255
|
+
flatpak install -y --user flathub "${pkg}" 2>/dev/null ||
|
|
256
|
+
flatpak install -y --user "${pkg}" 2>/dev/null ||
|
|
257
|
+
run_as_root flatpak install -y flathub "${pkg}" 2>/dev/null ||
|
|
258
|
+
run_as_root flatpak install -y "${pkg}"
|
|
259
|
+
done
|
|
260
|
+
;;
|
|
261
|
+
remove)
|
|
262
|
+
flatpak uninstall -y --user "$@" 2>/dev/null || run_as_root flatpak uninstall -y "$@"
|
|
263
|
+
;;
|
|
264
|
+
show_info)
|
|
265
|
+
package="${1:-}"
|
|
266
|
+
flatpak info "${package}" 2>/dev/null || flatpak remote-info flathub "${package}" 2>/dev/null
|
|
267
|
+
;;
|
|
268
|
+
update)
|
|
269
|
+
flatpak update -y --user 2>/dev/null || run_as_root flatpak update -y
|
|
270
|
+
;;
|
|
271
|
+
refresh)
|
|
272
|
+
ensure_flatpak_flathub_remote >/dev/null 2>&1 || true
|
|
273
|
+
flatpak update -y --appstream --user 2>/dev/null || run_as_root flatpak update -y --appstream
|
|
274
|
+
;;
|
|
275
|
+
*)
|
|
276
|
+
return 1
|
|
277
|
+
;;
|
|
278
|
+
esac
|
|
279
|
+
;;
|
|
280
|
+
npm)
|
|
281
|
+
case "${action}" in
|
|
282
|
+
install)
|
|
283
|
+
npm install -g "$@"
|
|
284
|
+
;;
|
|
285
|
+
remove)
|
|
286
|
+
npm uninstall -g "$@"
|
|
287
|
+
;;
|
|
288
|
+
show_info)
|
|
289
|
+
package="${1:-}"
|
|
290
|
+
npm view "${package}" 2>/dev/null
|
|
291
|
+
;;
|
|
292
|
+
update)
|
|
293
|
+
npm update -g
|
|
294
|
+
;;
|
|
295
|
+
refresh)
|
|
296
|
+
npm cache verify
|
|
297
|
+
;;
|
|
298
|
+
*)
|
|
299
|
+
return 1
|
|
300
|
+
;;
|
|
301
|
+
esac
|
|
302
|
+
;;
|
|
303
|
+
bun)
|
|
304
|
+
case "${action}" in
|
|
305
|
+
install)
|
|
306
|
+
bun add -g "$@"
|
|
307
|
+
;;
|
|
308
|
+
remove)
|
|
309
|
+
bun remove --global "$@"
|
|
310
|
+
;;
|
|
311
|
+
show_info)
|
|
312
|
+
package="${1:-}"
|
|
313
|
+
bun info "${package}" 2>/dev/null || npm view "${package}" 2>/dev/null
|
|
314
|
+
;;
|
|
315
|
+
update)
|
|
316
|
+
bun update --global
|
|
317
|
+
;;
|
|
318
|
+
refresh)
|
|
319
|
+
bun pm cache >/dev/null
|
|
320
|
+
;;
|
|
321
|
+
*)
|
|
322
|
+
return 1
|
|
323
|
+
;;
|
|
324
|
+
esac
|
|
325
|
+
;;
|
|
326
|
+
*)
|
|
327
|
+
return 1
|
|
328
|
+
;;
|
|
329
|
+
esac
|
|
330
|
+
}
|
package/package.json
CHANGED