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 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.28"
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
- case "${manager}" in
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
- cache_fingerprint_value="$(cache_fingerprint "${manager}" "" "installed")"
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
- cp "${cache_file}" "${output_file}"
2260
- return
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
- preview_cmd="FPF_SESSION_TMP_ROOT=$(printf '%q' "${SESSION_TMP_ROOT}") ${script_path} --preview-item --manager {1} -- {2}"
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:"cat ${KBINDS_FILE}" \
2965
- --bind=ctrl-h:preview:"cat ${HELP_FILE}" \
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:change-prompt(Loading> )+reload:${reload_cmd}+change-prompt(Search> )")
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:change-prompt(Loading> )+reload:${reload_cmd}+change-prompt(Search> )")
2988
- fzf_args+=(--bind="ctrl-r:change-prompt(Loading> )+reload:${reload_cmd}+change-prompt(Search> )")
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
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "fpf-cli",
3
- "version": "1.6.28",
3
+ "version": "1.6.30",
4
4
  "description": "Cross-platform fuzzy package finder powered by fzf",
5
5
  "bin": {
6
6
  "fpf": "fpf"
7
7
  },
8
8
  "files": [
9
9
  "fpf",
10
+ "lib/fpf/*.sh",
10
11
  "README.md",
11
12
  "LICENSE"
12
13
  ],