_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 "$@"