.bash_completion.d/scoop
author Oleksandr Gavenko <gavenkoa@gmail.com>
Mon, 01 Jan 2024 20:53:49 +0200
changeset 1039 78cdb4a057e3
parent 1019 ee5840caf22c
permissions -rw-r--r--
Create symlink from ~/.bash_profile for login shell to activate my ~/.bashrc.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1000
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     1
# -*- mode: sh; sh-shell-file: bash -*-
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     2
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     3
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     4
_scoop() {
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     5
  local tasks='alias      (Manage scoop aliases)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     6
bucket     (Manage Scoop buckets)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     7
cache      (Show or clear the download cache)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     8
cat        (Show content of specified manifest)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     9
checkup    (Check for potential problems)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    10
cleanup    (Cleanup apps by removing old versions)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    11
config     (Get or set configuration values)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    12
create     (Create a custom app manifest)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    13
depends    (List dependencies for an app)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    14
download   (Download apps in the cache folder and verify hashes)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    15
export     (Exports (an importable) list of installed apps)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    16
help       (Show help for a command)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    17
hold       (Hold an app to disable updates)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    18
home       (Opens the app homepage)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    19
info       (Display information about an app)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    20
install    (Install apps)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    21
list       (List installed apps)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    22
prefix     (Returns the path to the specified app)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    23
reset      (Reset an app to resolve conflicts)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    24
search     (Search available apps)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    25
shim       (Manipulate Scoop shims)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    26
status     (Show status and check for new app versions)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    27
unhold     (Unhold an app to enable updates)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    28
uninstall  (Uninstall an app)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    29
update     (Update apps, or Scoop itself)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    30
virustotal (Look for apps hash on virustotal.com)
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    31
which      (Locate a shim/executable)'
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    32
  local cur prev
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    33
  cur=${COMP_WORDS[COMP_CWORD]}
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    34
  [[ $COMP_CWORD -gt 1 ]] && prev=${COMP_WORDS[COMP_CWORD-1]}
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    35
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    36
  if [[ $COMP_CWORD = 1 ]]; then
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    37
    local OIFS="$IFS"
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    38
    local IFS=$'\n'
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    39
    COMPREPLY=( $(compgen -W '$tasks' -- "$cur") )
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    40
    if [[ ${#COMPREPLY[@]} -le 1 ]]; then
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    41
      COMPREPLY=( ${COMPREPLY[0]%% *} )
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    42
    fi
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    43
    IFS=$OIFS
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    44
    return
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    45
  fi
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    46
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    47
  local cmd="${COMP_WORDS[1]}"
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    48
  case "$cmd" in
1008
86630b8cd151 Added which to scoop completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1000
diff changeset
    49
    cat|depends|download|export|hold|home|info|install|prefix|reset|status|unhold|uninstall|update|virustotal|which)
1000
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    50
      local dir=`command -v scoop`
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    51
      dir=${dir%/shims/*}/buckets
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    52
      [[ -d "$dir" ]] || return
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    53
      local olddir="$PWD"
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    54
      cd $dir
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    55
      local -a jsons=( */bucket/"$cur"*.json )
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    56
      local -a pkgs=( "${jsons[@]##*/}" )
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    57
      COMPREPLY=( "${pkgs[@]%.json}" )
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    58
      cd "$olddir"
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    59
      return
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    60
    ;;
1019
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    61
    bucket)
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    62
      if [[ $COMP_CWORD = 2 ]]; then
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    63
        COMPREPLY=( $(compgen -W 'add list known rm' -- "$cur") )
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    64
        return
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    65
      fi
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    66
      local subcmd="${COMP_WORDS[2]}"
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    67
      case "$subcmd" in
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    68
        list|known)
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    69
          COMPREPLY=( )
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    70
          return
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    71
          ;;
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    72
        add|rm)
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    73
          local -a buckets=( `scoop bucket known` )
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    74
          local cr=$'\r'
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    75
          buckets=( "${buckets[@]/$cr/}" )
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    76
          COMPREPLY=( $(compgen -W '${buckets[@]}' -- "$cur") )
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    77
          return
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    78
          ;;
ee5840caf22c Added "scoop bucket" Bash completion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1008
diff changeset
    79
      esac
1000
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    80
  esac
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    81
}
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    82
e3e1539cafa9 Added bash autocompletion for Scoop.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    83
complete -F _scoop scoop