/ misc / _be-btrfs
_be-btrfs
  1  #compdef be-btrfs
  2  # be-btrfs — zsh tab-completion
  3  # Completes commands, flags, BE names, snapshot names, and directories.
  4  #
  5  # Install:
  6  #   cp _be-btrfs /usr/local/share/zsh/site-functions/_be-btrfs
  7  
  8  _be_btrfs_bes() {
  9      local -a bes
 10      bes=( ${(f)"$(be-btrfs list -H 2>/dev/null | cut -d';' -f1)"} )
 11      _describe 'boot environment' bes
 12  }
 13  
 14  _be_btrfs_snaps() {
 15      local -a snaps
 16      snaps=( ${(f)"$(be-btrfs list -sH 2>/dev/null | awk -F';' '/^@/{print $1}')"} )
 17      _describe 'snapshot' snaps
 18  }
 19  
 20  _be_btrfs_sources() {
 21      local -a srcs
 22      srcs=( ${(f)"$(be-btrfs list -sH 2>/dev/null | cut -d';' -f1)"} )
 23      srcs+=( ${(f)"$(be-btrfs list -H 2>/dev/null | cut -d';' -f1)"} )
 24      _describe 'source' srcs
 25  }
 26  
 27  _be_btrfs() {
 28      local -a commands=(
 29          'create:Create BE (clone of current or specified source)'
 30          'destroy:Delete BE or snapshot'
 31          'list:List BEs'
 32          'mount:Mount a BE'
 33          'unmount:Unmount a BE'
 34          'rename:Rename a BE'
 35          'activate:Activate BE for next boot'
 36          'snapshot:Snapshot current system (read-only)'
 37          'clone:Clone from external snapshot (writable BE)'
 38          'shell:Chroot into BE'
 39          'upgrade:Clone + apt dist-upgrade + activate'
 40          'prune:Cleanup by rules from config'
 41          'rescue:Activate BE from rescue media'
 42          'check:Check system compatibility'
 43          'status:Current state'
 44          'apt-hook-install:Install APT hook'
 45      )
 46  
 47      if (( CURRENT == 2 )); then
 48          _describe 'command' commands
 49          return
 50      fi
 51  
 52      case "${words[2]}" in
 53          create)
 54              _arguments \
 55                  '-a[activate immediately]' \
 56                  '-d[description]:description:' \
 57                  '-e[source]:source:_be_btrfs_sources' \
 58                  '*:name:'
 59              ;;
 60          destroy|rm)
 61              _arguments \
 62                  '-f[force unmount]' \
 63                  '-F[no confirmation]' \
 64                  '*:BE:_be_btrfs_bes'
 65              ;;
 66          list|ls)
 67              _arguments \
 68                  '-a[show all]' \
 69                  '-d[show nested subvolumes]' \
 70                  '-s[show snapshots]' \
 71                  '-H[machine-parseable]' \
 72                  '*:filter:'
 73              ;;
 74          activate|shell|sh)
 75              _arguments '*:BE:_be_btrfs_bes'
 76              ;;
 77          mount)
 78              _arguments \
 79                  '1:BE:_be_btrfs_bes' \
 80                  '2:mountpoint:_directories'
 81              ;;
 82          unmount|umount)
 83              _arguments \
 84                  '-f[force unmount]' \
 85                  '*:BE:_be_btrfs_bes'
 86              ;;
 87          rename)
 88              _arguments \
 89                  '1:old name:_be_btrfs_bes' \
 90                  '2:new name:'
 91              ;;
 92          clone)
 93              _arguments \
 94                  '1:source:_be_btrfs_sources' \
 95                  '2:name:'
 96              ;;
 97          upgrade)
 98              _arguments \
 99                  '-d[description]:description:' \
100                  '*:name:'
101              ;;
102          rescue)
103              _arguments '1:mountpoint:_directories'
104              ;;
105          snapshot)
106              _arguments \
107                  '1:name:' \
108                  '2:description:'
109              ;;
110          prune)
111              _arguments '1:count:'
112              ;;
113          check|status|apt-hook-install|help|version)
114              ;;
115      esac
116  }
117  
118  _be_btrfs "$@"