borg.fish 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. # Completions for borg
  2. # https://www.borgbackup.org/
  3. # Note:
  4. # Listing archives works on password protected repositories only if $BORG_PASSPHRASE is set.
  5. # Install:
  6. # Copy this file to /usr/share/fish/vendor_completions.d/
  7. # Commands
  8. complete -c borg -f -n __fish_is_first_token -a 'init' -d 'Initialize an empty repository'
  9. complete -c borg -f -n __fish_is_first_token -a 'create' -d 'Create new archive'
  10. complete -c borg -f -n __fish_is_first_token -a 'extract' -d 'Extract archive contents'
  11. complete -c borg -f -n __fish_is_first_token -a 'check' -d 'Check repository consistency'
  12. complete -c borg -f -n __fish_is_first_token -a 'rename' -d 'Rename an existing archive'
  13. complete -c borg -f -n __fish_is_first_token -a 'list' -d 'List archive or repository contents'
  14. complete -c borg -f -n __fish_is_first_token -a 'diff' -d 'Find differences between archives'
  15. complete -c borg -f -n __fish_is_first_token -a 'delete' -d 'Delete a repository or archive'
  16. complete -c borg -f -n __fish_is_first_token -a 'prune' -d 'Prune repository archives'
  17. complete -c borg -f -n __fish_is_first_token -a 'info' -d 'Show archive details'
  18. complete -c borg -f -n __fish_is_first_token -a 'mount' -d 'Mount archive or a repository'
  19. complete -c borg -f -n __fish_is_first_token -a 'umount' -d 'Un-mount the mounted archive'
  20. function __fish_borg_seen_key
  21. if __fish_seen_subcommand_from key
  22. and not __fish_seen_subcommand_from import export change-passphrase
  23. return 0
  24. end
  25. return 1
  26. end
  27. complete -c borg -f -n __fish_is_first_token -a 'key' -d 'Manage a repository key'
  28. complete -c borg -f -n __fish_borg_seen_key -a 'import' -d 'Import a repository key'
  29. complete -c borg -f -n __fish_borg_seen_key -a 'export' -d 'Export a repository key'
  30. complete -c borg -f -n __fish_borg_seen_key -a 'change-passphrase' -d 'Change key file passphrase'
  31. complete -c borg -f -n __fish_is_first_token -a 'serve' -d 'Start in server mode'
  32. complete -c borg -f -n __fish_is_first_token -a 'upgrade' -d 'Upgrade a repository'
  33. complete -c borg -f -n __fish_is_first_token -a 'recreate' -d 'Recreate contents of existing archives'
  34. complete -c borg -f -n __fish_is_first_token -a 'export-tar' -d 'Create tarball from an archive'
  35. complete -c borg -f -n __fish_is_first_token -a 'with-lock' -d 'Run a command while repository lock held'
  36. complete -c borg -f -n __fish_is_first_token -a 'break-lock' -d 'Break the repository lock'
  37. complete -c borg -f -n __fish_is_first_token -a 'config' -d 'Get/set options in repo/cache config'
  38. function __fish_borg_seen_benchmark
  39. if __fish_seen_subcommand_from benchmark
  40. and not __fish_seen_subcommand_from crud
  41. return 0
  42. end
  43. return 1
  44. end
  45. complete -c borg -f -n __fish_is_first_token -a 'benchmark' -d 'Benchmark borg operations'
  46. complete -c borg -f -n __fish_borg_seen_benchmark -a 'crud' -d 'Benchmark borg CRUD operations'
  47. function __fish_borg_seen_help
  48. if __fish_seen_subcommand_from help
  49. and not __fish_seen_subcommand_from patterns placeholders compression
  50. return 0
  51. end
  52. return 1
  53. end
  54. complete -c borg -f -n __fish_is_first_token -a 'help' -d 'Miscellaneous Help'
  55. complete -c borg -f -n __fish_borg_seen_help -a 'patterns' -d 'Help for patterns'
  56. complete -c borg -f -n __fish_borg_seen_help -a 'placeholders' -d 'Help for placeholders'
  57. complete -c borg -f -n __fish_borg_seen_help -a 'compression' -d 'Help for compression'
  58. # Common options
  59. complete -c borg -f -s h -l 'help' -d 'Show help information'
  60. complete -c borg -f -l 'version' -d 'Show version information'
  61. complete -c borg -f -l 'critical' -d 'Log level CRITICAL'
  62. complete -c borg -f -l 'error' -d 'Log level ERROR'
  63. complete -c borg -f -l 'warning' -d 'Log level WARNING (default)'
  64. complete -c borg -f -l 'info' -d 'Log level INFO'
  65. complete -c borg -f -s v -l 'verbose' -d 'Log level INFO'
  66. complete -c borg -f -l 'debug' -d 'Log level DEBUG'
  67. complete -c borg -f -l 'debug-topic' -d 'Enable TOPIC debugging'
  68. complete -c borg -f -s p -l 'progress' -d 'Show progress information'
  69. complete -c borg -f -l 'log-json' -d 'Output one JSON object per log line'
  70. complete -c borg -f -l 'lock-wait' -d 'Wait for lock max N seconds [1]'
  71. complete -c borg -f -l 'show-version' -d 'Log version information'
  72. complete -c borg -f -l 'show-rc' -d 'Log the return code'
  73. complete -c borg -f -l 'umask' -d 'Set umask to M [0077]'
  74. complete -c borg -l 'remote-path' -d 'Use PATH as remote borg executable'
  75. complete -c borg -f -l 'remote-ratelimit' -d 'Set remote network upload RATE limit'
  76. complete -c borg -f -l 'consider-part-files' -d 'Treat part files like normal files'
  77. complete -c borg -l 'debug-profile' -d 'Write execution profile into FILE'
  78. complete -c borg -l 'rsh' -d 'Use COMMAND instead of ssh'
  79. # borg init options
  80. set -l encryption_modes "none keyfile keyfile-blake2 repokey repokey-blake2 authenticated authenticated-blake2"
  81. complete -c borg -f -s e -l 'encryption' -d 'Encryption key MODE' -a "$encryption_modes" -n "__fish_seen_subcommand_from init"
  82. complete -c borg -f -l 'append-only' -d 'Create an append-only mode repository' -n "__fish_seen_subcommand_from init"
  83. complete -c borg -f -l 'storage-quota' -d 'Set storage QUOTA of the repository' -n "__fish_seen_subcommand_from init"
  84. complete -c borg -f -l 'make-parent-dirs' -d 'Create parent directories' -n "__fish_seen_subcommand_from init"
  85. # borg create options
  86. complete -c borg -f -s n -l 'dry-run' -d 'Do not change the repository' -n "__fish_seen_subcommand_from create"
  87. complete -c borg -f -s s -l 'stats' -d 'Print verbose statistics' -n "__fish_seen_subcommand_from create"
  88. complete -c borg -f -l 'list' -d 'Print verbose list of items' -n "__fish_seen_subcommand_from create"
  89. complete -c borg -f -l 'filter' -d 'Only items with given STATUSCHARS' -n "__fish_seen_subcommand_from create"
  90. complete -c borg -f -l 'json' -d 'Print verbose stats as json' -n "__fish_seen_subcommand_from create"
  91. complete -c borg -f -l 'no-cache-sync' -d 'Do not synchronize the cache' -n "__fish_seen_subcommand_from create"
  92. complete -c borg -f -l 'stdin-name' -d 'Use NAME in archive for stdin data' -n "__fish_seen_subcommand_from create"
  93. complete -c borg -f -l 'stdin-user' -d 'Set user USER in archive for stdin data [root]' -n "__fish_seen_subcommand_from create"
  94. complete -c borg -f -l 'stdin-group' -d 'Set group GROUP in archive for stdin data [root]' -n "__fish_seen_subcommand_from create"
  95. complete -c borg -f -l 'stdin-mode' -d 'Set mode to M in archive for stdin data [0660]' -n "__fish_seen_subcommand_from create"
  96. # Exclusion options
  97. complete -c borg -s e -l 'exclude' -d 'Exclude paths matching PATTERN' -n "__fish_seen_subcommand_from create"
  98. complete -c borg -l 'exclude-from' -d 'Read exclude patterns from EXCLUDEFILE' -n "__fish_seen_subcommand_from create"
  99. complete -c borg -f -l 'pattern' -d 'Include/exclude paths matching PATTERN' -n "__fish_seen_subcommand_from create"
  100. complete -c borg -l 'patterns-from' -d 'Include/exclude paths from PATTERNFILE' -n "__fish_seen_subcommand_from create"
  101. complete -c borg -f -l 'exclude-caches' -d 'Exclude directories tagged as cache' -n "__fish_seen_subcommand_from create"
  102. complete -c borg -l 'exclude-if-present' -d 'Exclude directories that contain FILENAME' -n "__fish_seen_subcommand_from create"
  103. complete -c borg -f -l 'keep-exclude-tags' -d 'Keep tag files of excluded directories' -n "__fish_seen_subcommand_from create"
  104. complete -c borg -f -l 'keep-tag-files' -d 'Keep tag files of excluded directories' -n "__fish_seen_subcommand_from create"
  105. complete -c borg -f -l 'exclude-nodump' -d 'Exclude files flagged NODUMP' -n "__fish_seen_subcommand_from create"
  106. # Filesystem options
  107. complete -c borg -f -s x -l 'one-file-system' -d 'Stay in the same file system' -n "__fish_seen_subcommand_from create"
  108. complete -c borg -f -l 'numeric-owner' -d 'Only store numeric user:group identifiers' -n "__fish_seen_subcommand_from create"
  109. complete -c borg -f -l 'noatime' -d 'Do not store atime' -n "__fish_seen_subcommand_from create"
  110. complete -c borg -f -l 'noctime' -d 'Do not store ctime' -n "__fish_seen_subcommand_from create"
  111. complete -c borg -f -l 'nobirthtime' -d 'Do not store creation date' -n "__fish_seen_subcommand_from create"
  112. complete -c borg -f -l 'nobsdflags' -d 'Do not store bsdflags' -n "__fish_seen_subcommand_from create"
  113. complete -c borg -f -l 'noacls' -d 'Do not read and store ACLs into archive' -n "__fish_seen_subcommand_from create"
  114. complete -c borg -f -l 'noxattrs' -d 'Do not read and store xattrs into archive' -n "__fish_seen_subcommand_from create"
  115. complete -c borg -f -l 'ignore-inode' -d 'Ignore inode data in file metadata cache' -n "__fish_seen_subcommand_from create"
  116. set -l files_cache_mode "ctime,size,inode mtime,size,inode ctime,size mtime,size rechunk,ctime rechunk,mtime size disabled"
  117. complete -c borg -f -l 'files-cache' -d 'Operate files cache in MODE' -a "$files_cache_mode" -n "__fish_seen_subcommand_from create"
  118. complete -c borg -f -l 'read-special' -d 'Open device files like regular files' -n "__fish_seen_subcommand_from create"
  119. # Archive options
  120. complete -c borg -f -l 'comment' -d 'Add COMMENT to the archive' -n "__fish_seen_subcommand_from create"
  121. complete -c borg -f -l 'timestamp' -d 'Set creation TIME (yyyy-mm-ddThh:mm:ss)' -n "__fish_seen_subcommand_from create"
  122. complete -c borg -l 'timestamp' -d 'Set creation time by reference FILE' -n "__fish_seen_subcommand_from create"
  123. complete -c borg -f -s c -l 'checkpoint-interval' -d 'Write checkpoint every N seconds [1800]' -n "__fish_seen_subcommand_from create"
  124. complete -c borg -f -l 'chunker-params' -d 'Chunker PARAMETERS [19,23,21,4095]' -n "__fish_seen_subcommand_from create"
  125. set -l compression_methods "none auto lz4 zstd,1 zstd,2 zstd,3 zstd,4 zstd,5 zstd,6 zstd,7 zstd,8 zstd,9 zstd,10 zstd,11 zstd,12 zstd,13 zstd,14 zstd,15 zstd,16 zstd,17 zstd,18 zstd,19 zstd,20 zstd,21 zstd,22 zlib,1 zlib,2 zlib,3 zlib,4 zlib,5 zlib,6 zlib,7 zlib,8 zlib,9 lzma,0 lzma,1 lzma,2 lzma,3 lzma,4 lzma,5 lzma,6 lzma,7 lzma,8 lzma,9"
  126. complete -c borg -f -s C -l 'compression' -d 'Select compression ALGORITHM,LEVEL [lz4]' -a "$compression_methods" -n "__fish_seen_subcommand_from create"
  127. # borg extract options
  128. complete -c borg -f -l 'list' -d 'Print verbose list of items' -n "__fish_seen_subcommand_from extract"
  129. complete -c borg -f -s n -l 'dry-run' -d 'Do not actually extract any files' -n "__fish_seen_subcommand_from extract"
  130. complete -c borg -f -l 'numeric-owner' -d 'Only obey numeric user:group identifiers' -n "__fish_seen_subcommand_from extract"
  131. complete -c borg -f -l 'nobsdflags' -d 'Do not extract/set bsdflags' -n "__fish_seen_subcommand_from extract"
  132. complete -c borg -f -l 'noacls' -d 'Do not extract/set ACLs' -n "__fish_seen_subcommand_from extract"
  133. complete -c borg -f -l 'noxattrs' -d 'Do not extract/set xattrs' -n "__fish_seen_subcommand_from extract"
  134. complete -c borg -f -l 'stdout' -d 'Write all extracted data to stdout' -n "__fish_seen_subcommand_from extract"
  135. complete -c borg -f -l 'sparse' -d 'Create holes in output sparse file' -n "__fish_seen_subcommand_from extract"
  136. # Exclusion options
  137. complete -c borg -s e -l 'exclude' -d 'Exclude paths matching PATTERN' -n "__fish_seen_subcommand_from extract"
  138. complete -c borg -l 'exclude-from' -d 'Read exclude patterns from EXCLUDEFILE' -n "__fish_seen_subcommand_from extract"
  139. complete -c borg -l 'pattern' -d 'Include/exclude paths matching PATTERN' -n "__fish_seen_subcommand_from extract"
  140. complete -c borg -l 'patterns-from' -d 'Include/exclude paths from PATTERNFILE' -n "__fish_seen_subcommand_from extract"
  141. complete -c borg -f -l 'strip-components' -d 'Remove NUMBER of leading path elements' -n "__fish_seen_subcommand_from extract"
  142. # borg check options
  143. complete -c borg -f -l 'repository-only' -d 'Only perform repository checks' -n "__fish_seen_subcommand_from check"
  144. complete -c borg -f -l 'archives-only' -d 'Only perform archives checks' -n "__fish_seen_subcommand_from check"
  145. complete -c borg -f -l 'verify-data' -d 'Cryptographic integrity verification' -n "__fish_seen_subcommand_from check"
  146. complete -c borg -f -l 'repair' -d 'Attempt to repair found inconsistencies' -n "__fish_seen_subcommand_from check"
  147. complete -c borg -f -l 'save-space' -d 'Work slower but using less space' -n "__fish_seen_subcommand_from check"
  148. # Archive filters
  149. complete -c borg -f -s P -l 'prefix' -d 'Only archive names starting with PREFIX' -n "__fish_seen_subcommand_from check"
  150. complete -c borg -f -s a -l 'glob-archives' -d 'Only archive names matching GLOB' -n "__fish_seen_subcommand_from check"
  151. set -l sort_keys "timestamp name id"
  152. complete -c borg -f -l 'sort-by' -d 'Sorting KEYS [timestamp]' -a "$sort_keys" -n "__fish_seen_subcommand_from check"
  153. complete -c borg -f -l 'first' -d 'Only first N archives' -n "__fish_seen_subcommand_from check"
  154. complete -c borg -f -l 'last' -d 'Only last N archives' -n "__fish_seen_subcommand_from check"
  155. # borg rename
  156. # no specific options
  157. # borg list options
  158. complete -c borg -f -l 'short' -d 'Only print file/directory names' -n "__fish_seen_subcommand_from list"
  159. complete -c borg -f -l 'list-format' -d 'Specify FORMAT for file listing' -n "__fish_seen_subcommand_from list"
  160. complete -c borg -f -l 'format' -d 'Specify FORMAT for file listing' -n "__fish_seen_subcommand_from list"
  161. complete -c borg -f -l 'json' -d 'List contents in json format' -n "__fish_seen_subcommand_from list"
  162. complete -c borg -f -l 'json-lines' -d 'List contents in json lines format' -n "__fish_seen_subcommand_from list"
  163. # Archive filters
  164. complete -c borg -f -s P -l 'prefix' -d 'Only archive names starting with PREFIX' -n "__fish_seen_subcommand_from list"
  165. complete -c borg -f -s a -l 'glob-archives' -d 'Only archive names matching GLOB' -n "__fish_seen_subcommand_from list"
  166. complete -c borg -f -l 'sort-by' -d 'Sorting KEYS [timestamp]' -a "$sort_keys" -n "__fish_seen_subcommand_from list"
  167. complete -c borg -f -l 'first' -d 'Only first N archives' -n "__fish_seen_subcommand_from list"
  168. complete -c borg -f -l 'last' -d 'Only last N archives' -n "__fish_seen_subcommand_from list"
  169. # Exclusion options
  170. complete -c borg -s e -l 'exclude' -d 'Exclude paths matching PATTERN' -n "__fish_seen_subcommand_from list"
  171. complete -c borg -l 'exclude-from' -d 'Read exclude patterns from EXCLUDEFILE' -n "__fish_seen_subcommand_from list"
  172. complete -c borg -f -l 'pattern' -d 'Include/exclude paths matching PATTERN' -n "__fish_seen_subcommand_from list"
  173. complete -c borg -l 'patterns-from' -d 'Include/exclude paths from PATTERNFILE' -n "__fish_seen_subcommand_from list"
  174. # borg diff options
  175. complete -c borg -f -l 'numeric-owner' -d 'Only consider numeric user:group' -n "__fish_seen_subcommand_from diff"
  176. complete -c borg -f -l 'same-chunker-params' -d 'Override check of chunker parameters' -n "__fish_seen_subcommand_from diff"
  177. complete -c borg -f -l 'sort' -d 'Sort the output lines by file path' -n "__fish_seen_subcommand_from diff"
  178. complete -c borg -f -l 'json-lines' -d 'Format output as JSON Lines' -n "__fish_seen_subcommand_from diff"
  179. # Exclusion options
  180. complete -c borg -s e -l 'exclude' -d 'Exclude paths matching PATTERN' -n "__fish_seen_subcommand_from diff"
  181. complete -c borg -l 'exclude-from' -d 'Read exclude patterns from EXCLUDEFILE' -n "__fish_seen_subcommand_from diff"
  182. complete -c borg -f -l 'pattern' -d 'Include/exclude paths matching PATTERN' -n "__fish_seen_subcommand_from diff"
  183. complete -c borg -l 'patterns-from' -d 'Include/exclude paths from PATTERNFILE' -n "__fish_seen_subcommand_from diff"
  184. # borg delete options
  185. complete -c borg -f -s n -l 'dry-run' -d 'Do not change the repository' -n "__fish_seen_subcommand_from delete"
  186. complete -c borg -f -s s -l 'stats' -d 'Print verbose statistics' -n "__fish_seen_subcommand_from delete"
  187. complete -c borg -f -l 'cache-only' -d "Delete only the local cache" -n "__fish_seen_subcommand_from delete"
  188. complete -c borg -f -l 'force' -d 'Force deletion of corrupted archives' -n "__fish_seen_subcommand_from delete"
  189. complete -c borg -f -l 'save-space' -d 'Work slower but using less space' -n "__fish_seen_subcommand_from delete"
  190. # Archive filters
  191. complete -c borg -f -s P -l 'prefix' -d 'Only archive names starting with PREFIX' -n "__fish_seen_subcommand_from delete"
  192. complete -c borg -f -s a -l 'glob-archives' -d 'Only archive names matching GLOB' -n "__fish_seen_subcommand_from delete"
  193. complete -c borg -f -l 'sort-by' -d 'Sorting KEYS [timestamp]' -a "$sort_keys" -n "__fish_seen_subcommand_from delete"
  194. complete -c borg -f -l 'first' -d 'Only first N archives' -n "__fish_seen_subcommand_from delete"
  195. complete -c borg -f -l 'last' -d 'Only last N archives' -n "__fish_seen_subcommand_from delete"
  196. # borg prune options
  197. complete -c borg -f -s n -l 'dry-run' -d 'Do not change the repository' -n "__fish_seen_subcommand_from prune"
  198. complete -c borg -f -l 'force' -d 'Force pruning of corrupted archives' -n "__fish_seen_subcommand_from prune"
  199. complete -c borg -f -s s -l 'stats' -d 'Print verbose statistics' -n "__fish_seen_subcommand_from prune"
  200. complete -c borg -f -l 'list' -d 'Print verbose list of items' -n "__fish_seen_subcommand_from prune"
  201. complete -c borg -f -l 'keep-within' -d 'Keep archives within time INTERVAL' -n "__fish_seen_subcommand_from prune"
  202. complete -c borg -f -l 'keep-last' -d 'NUMBER of secondly archives to keep' -n "__fish_seen_subcommand_from prune"
  203. complete -c borg -f -l 'keep-secondly' -d 'NUMBER of secondly archives to keep' -n "__fish_seen_subcommand_from prune"
  204. complete -c borg -f -l 'keep-minutely' -d 'NUMBER of minutely archives to keep' -n "__fish_seen_subcommand_from prune"
  205. complete -c borg -f -s H -l 'keep-hourly' -d 'NUMBER of hourly archives to keep' -n "__fish_seen_subcommand_from prune"
  206. complete -c borg -f -s d -l 'keep-daily' -d 'NUMBER of daily archives to keep' -n "__fish_seen_subcommand_from prune"
  207. complete -c borg -f -s w -l 'keep-weekly' -d 'NUMBER of weekly archives to keep' -n "__fish_seen_subcommand_from prune"
  208. complete -c borg -f -s m -l 'keep-monthly' -d 'NUMBER of monthly archives to keep' -n "__fish_seen_subcommand_from prune"
  209. complete -c borg -f -s y -l 'keep-yearly' -d 'NUMBER of yearly archives to keep' -n "__fish_seen_subcommand_from prune"
  210. complete -c borg -f -l 'save-space' -d 'Work slower but using less space' -n "__fish_seen_subcommand_from prune"
  211. # Archive filters
  212. complete -c borg -f -s P -l 'prefix' -d 'Only archive names starting with PREFIX' -n "__fish_seen_subcommand_from prune"
  213. complete -c borg -f -s a -l 'glob-archives' -d 'Only archive names matching GLOB' -n "__fish_seen_subcommand_from prune"
  214. # borg info options
  215. complete -c borg -f -l 'json' -d 'Format output in json format' -n "__fish_seen_subcommand_from info"
  216. # Archive filters
  217. complete -c borg -f -s P -l 'prefix' -d 'Only archive names starting with PREFIX' -n "__fish_seen_subcommand_from info"
  218. complete -c borg -f -s a -l 'glob-archives' -d 'Only archive names matching GLOB' -n "__fish_seen_subcommand_from info"
  219. complete -c borg -f -l 'sort-by' -d 'Sorting KEYS [timestamp]' -a "$sort_keys" -n "__fish_seen_subcommand_from info"
  220. complete -c borg -f -l 'first' -d 'Only first N archives' -n "__fish_seen_subcommand_from info"
  221. complete -c borg -f -l 'last' -d 'Only last N archives' -n "__fish_seen_subcommand_from info"
  222. # borg mount options
  223. complete -c borg -f -s f -l 'foreground' -d 'Stay in foreground, do not daemonize' -n "__fish_seen_subcommand_from mount"
  224. # FIXME This list is probably not full, but I tried to pick only those that are relevant to borg mount -o:
  225. set -l fuse_options "ac_attr_timeout= allow_damaged_files allow_other allow_root attr_timeout= auto auto_cache auto_unmount default_permissions entry_timeout= gid= group_id= kernel_cache max_read= negative_timeout= noauto noforget remember= remount rootmode= uid= umask= user user_id= versions"
  226. complete -c borg -f -s o -d 'Fuse mount OPTION' -a "$fuse_options" -n "__fish_seen_subcommand_from mount"
  227. # Archive filters
  228. complete -c borg -f -s P -l 'prefix' -d 'Only archive names starting with PREFIX' -n "__fish_seen_subcommand_from mount"
  229. complete -c borg -f -s a -l 'glob-archives' -d 'Only archive names matching GLOB' -n "__fish_seen_subcommand_from mount"
  230. complete -c borg -f -l 'sort-by' -d 'Sorting KEYS [timestamp]' -a "$sort_keys" -n "__fish_seen_subcommand_from mount"
  231. complete -c borg -f -l 'first' -d 'Only first N archives' -n "__fish_seen_subcommand_from mount"
  232. complete -c borg -f -l 'last' -d 'Only last N archives' -n "__fish_seen_subcommand_from mount"
  233. # Exclusion options
  234. complete -c borg -s e -l 'exclude' -d 'Exclude paths matching PATTERN' -n "__fish_seen_subcommand_from mount"
  235. complete -c borg -l 'exclude-from' -d 'Read exclude patterns from EXCLUDEFILE' -n "__fish_seen_subcommand_from mount"
  236. complete -c borg -f -l 'pattern' -d 'Include/exclude paths matching PATTERN' -n "__fish_seen_subcommand_from mount"
  237. complete -c borg -l 'patterns-from' -d 'Include/exclude paths from PATTERNFILE' -n "__fish_seen_subcommand_from mount"
  238. complete -c borg -f -l 'strip-components' -d 'Remove NUMBER of leading path elements' -n "__fish_seen_subcommand_from mount"
  239. # borg umount
  240. # no specific options
  241. # borg key change-passphrase
  242. # no specific options
  243. # borg key export
  244. complete -c borg -f -l 'paper' -d 'Create an export for printing' -n "__fish_seen_subcommand_from export"
  245. complete -c borg -f -l 'qr-html' -d 'Create an html file for printing and qr' -n "__fish_seen_subcommand_from export"
  246. # borg key import
  247. complete -c borg -f -l 'paper' -d 'Import from a backup done with --paper' -n "__fish_seen_subcommand_from import"
  248. # borg upgrade
  249. complete -c borg -f -s n -l 'dry-run' -d 'Do not change the repository' -n "__fish_seen_subcommand_from upgrade"
  250. complete -c borg -f -l 'inplace' -d 'Rewrite repository in place' -n "__fish_seen_subcommand_from upgrade"
  251. complete -c borg -f -l 'force' -d 'Force upgrade' -n "__fish_seen_subcommand_from upgrade"
  252. complete -c borg -f -l 'tam' -d 'Enable manifest authentication' -n "__fish_seen_subcommand_from upgrade"
  253. complete -c borg -f -l 'disable-tam' -d 'Disable manifest authentication' -n "__fish_seen_subcommand_from upgrade"
  254. # borg recreate
  255. complete -c borg -f -l 'list' -d 'Print verbose list of items' -n "__fish_seen_subcommand_from recreate"
  256. complete -c borg -f -l 'filter' -d 'Only items with given STATUSCHARS' -n "__fish_seen_subcommand_from recreate"
  257. complete -c borg -f -s n -l 'dry-run' -d 'Do not change the repository' -n "__fish_seen_subcommand_from recreate"
  258. complete -c borg -f -s s -l 'stats' -d 'Print verbose statistics' -n "__fish_seen_subcommand_from recreate"
  259. # Exclusion options
  260. complete -c borg -s e -l 'exclude' -d 'Exclude paths matching PATTERN' -n "__fish_seen_subcommand_from recreate"
  261. complete -c borg -l 'exclude-from' -d 'Read exclude patterns from EXCLUDEFILE' -n "__fish_seen_subcommand_from recreate"
  262. complete -c borg -f -l 'pattern' -d 'Include/exclude paths matching PATTERN' -n "__fish_seen_subcommand_from recreate"
  263. complete -c borg -l 'patterns-from' -d 'Include/exclude paths from PATTERNFILE' -n "__fish_seen_subcommand_from recreate"
  264. complete -c borg -f -l 'exclude-caches' -d 'Exclude directories tagged as cache' -n "__fish_seen_subcommand_from recreate"
  265. complete -c borg -l 'exclude-if-present' -d 'Exclude directories that contain FILENAME' -n "__fish_seen_subcommand_from recreate"
  266. complete -c borg -f -l 'keep-exclude-tags' -d 'Keep tag files of excluded directories' -n "__fish_seen_subcommand_from recreate"
  267. complete -c borg -f -l 'keep-tag-files' -d 'Keep tag files of excluded directories' -n "__fish_seen_subcommand_from recreate"
  268. # Archive options
  269. complete -c borg -f -l 'target' -d "Create a new ARCHIVE" -n "__fish_seen_subcommand_from recreate"
  270. complete -c borg -f -s c -l 'checkpoint-interval' -d 'Write checkpoint every N seconds [1800]' -n "__fish_seen_subcommand_from recreate"
  271. complete -c borg -f -l 'comment' -d 'Add COMMENT to the archive' -n "__fish_seen_subcommand_from recreate"
  272. complete -c borg -f -l 'timestamp' -d 'Set creation TIME (yyyy-mm-ddThh:mm:ss)' -n "__fish_seen_subcommand_from recreate"
  273. complete -c borg -l 'timestamp' -d 'Set creation time using reference FILE' -n "__fish_seen_subcommand_from recreate"
  274. complete -c borg -f -s C -l 'compression' -d 'Select compression ALGORITHM,LEVEL [lz4]' -a "$compression_methods" -n "__fish_seen_subcommand_from recreate"
  275. set -l recompress_when "if-different always never"
  276. complete -c borg -f -l 'recompress' -d 'Recompress chunks CONDITION' -a "$recompress_when" -n "__fish_seen_subcommand_from recreate"
  277. complete -c borg -f -l 'chunker-params' -d 'Chunker PARAMETERS [19,23,21,4095]' -n "__fish_seen_subcommand_from recreate"
  278. # borg export-tar options
  279. complete -c borg -l 'tar-filter' -d 'Filter program to pipe data through' -n "__fish_seen_subcommand_from export-tar"
  280. complete -c borg -f -l 'list' -d 'Print verbose list of items' -n "__fish_seen_subcommand_from export-tar"
  281. # Exclusion options
  282. complete -c borg -s e -l 'exclude' -d 'Exclude paths matching PATTERN' -n "__fish_seen_subcommand_from recreate"
  283. complete -c borg -l 'exclude-from' -d 'Read exclude patterns from EXCLUDEFILE' -n "__fish_seen_subcommand_from recreate"
  284. complete -c borg -f -l 'pattern' -d 'Include/exclude paths matching PATTERN' -n "__fish_seen_subcommand_from recreate"
  285. complete -c borg -l 'patterns-from' -d 'Include/exclude paths from PATTERNFILE' -n "__fish_seen_subcommand_from recreate"
  286. complete -c borg -f -l 'strip-components' -d 'Remove NUMBER of leading path elements' -n "__fish_seen_subcommand_from recreate"
  287. # borg serve
  288. complete -c borg -l 'restrict-to-path' -d 'Restrict repository access to PATH' -n "__fish_seen_subcommand_from serve"
  289. complete -c borg -l 'restrict-to-repository' -d 'Restrict repository access at PATH' -n "__fish_seen_subcommand_from serve"
  290. complete -c borg -f -l 'append-only' -d 'Only allow appending to repository' -n "__fish_seen_subcommand_from serve"
  291. complete -c borg -f -l 'storage-quota' -d 'Override storage QUOTA of the repository' -n "__fish_seen_subcommand_from serve"
  292. # borg config
  293. complete -c borg -f -s c -l 'cache' -d 'Get/set/list values in the repo cache' -n "__fish_seen_subcommand_from config"
  294. complete -c borg -f -s d -l 'delete' -d 'Delete the KEY from the config' -n "__fish_seen_subcommand_from config"
  295. complete -c borg -f -l 'list' -d 'List the configuration of the repo' -n "__fish_seen_subcommand_from config"
  296. # borg with-lock
  297. # no specific options
  298. # borg break-lock
  299. # no specific options
  300. # borg benchmark
  301. # no specific options
  302. # borg help
  303. # no specific options
  304. # List repositories::archives
  305. function __fish_borg_is_argument_n --description 'Test if current argument is on Nth place' --argument n
  306. set tokens (commandline --current-process --tokenize --cut-at-cursor)
  307. set -l tokencount 0
  308. for token in $tokens
  309. switch $token
  310. case '-*'
  311. # ignore command line switches
  312. case '*'
  313. set tokencount (math $tokencount+1)
  314. end
  315. end
  316. return (test $tokencount -eq $n)
  317. end
  318. function __fish_borg_is_dir_a_repository
  319. set -l config_content
  320. if test -f $argv[1]/README
  321. and test -f $argv[1]/config
  322. read config_content < $argv[1]/config ^/dev/null
  323. end
  324. return (string match --quiet '[repository]' $config_content)
  325. end
  326. function __fish_borg_list_repos_or_archives
  327. if string match --quiet --regex '.*::' '"'(commandline --current-token)'"'
  328. # If the current token contains "::" then list the archives:
  329. set -l repository_name (string replace --regex '::.*' '' (commandline --current-token))
  330. borg list --format="$repository_name::{archive}{TAB}{comment}{NEWLINE}" "$repository_name" ^/dev/null
  331. else
  332. # Otherwise list the repositories, directories and user@host entries:
  333. set -l directories (commandline --cut-at-cursor --current-token)*/
  334. for directoryname in $directories
  335. if __fish_borg_is_dir_a_repository $directoryname
  336. printf '%s::\t%s\n' (string trim --right --chars='/' $directoryname) "Repository"
  337. else
  338. printf '%s\n' $directoryname
  339. end
  340. end
  341. __fish_complete_user_at_hosts | string replace --regex '$' ':'
  342. end
  343. end
  344. complete -c borg -f -n "__fish_borg_is_argument_n 2" -a '(__fish_borg_list_repos_or_archives)'
  345. # Additional archive listings
  346. function __fish_borg_is_diff_second_archive
  347. return (string match --quiet --regex ' diff .*::[^ ]+ '(commandline --current-token)'$' (commandline))
  348. end
  349. function __fish_borg_is_delete_additional_archive
  350. return (string match --quiet --regex ' delete .*::[^ ]+ ' (commandline))
  351. end
  352. function __fish_borg_list_only_archives
  353. set -l repo_matches (string match --regex '([^ ]*)::' (commandline))
  354. borg list --format="{archive}{TAB}{comment}{NEWLINE}" "$repo_matches[2]" ^/dev/null
  355. end
  356. complete -c borg -f -n __fish_borg_is_diff_second_archive -a '(__fish_borg_list_only_archives)'
  357. complete -c borg -f -n __fish_borg_is_delete_additional_archive -a '(__fish_borg_list_only_archives)'