From: martin f. krafft Date: Sun, 24 Feb 2019 21:32:48 +0000 (+0100) Subject: Add '.vim/bundle/password-store/' from commit 'dc759ab32b05afeba5c103e2756ec4a2509fdaf6' X-Git-Url: https://git.madduck.net/etc/vim.git/commitdiff_plain/8a97a4231254ab25e017fecd10ba2068bd588e52?ds=sidebyside;hp=-c Add '.vim/bundle/password-store/' from commit 'dc759ab32b05afeba5c103e2756ec4a2509fdaf6' git-subtree-dir: .vim/bundle/password-store git-subtree-mainline: 16f202c3b8ea1bb2625d3319bf42d8fc57f33814 git-subtree-split: dc759ab32b05afeba5c103e2756ec4a2509fdaf6 --- 8a97a4231254ab25e017fecd10ba2068bd588e52 diff --combined .vim/bundle/password-store/LICENSE index 0000000,b6e9c7f..b6e9c7f mode 000000,100644..100644 --- a/.vim/bundle/password-store/LICENSE +++ b/.vim/bundle/password-store/LICENSE @@@ -1,0 -1,1 +1,1 @@@ + Same as vim's license diff --combined .vim/bundle/password-store/README.md index 0000000,28bf33b..28bf33b mode 000000,100644..100644 --- a/.vim/bundle/password-store/README.md +++ b/.vim/bundle/password-store/README.md @@@ -1,0 -1,31 +1,31 @@@ + # vim-password-store + Vim niceties for password store ("pass" the standard Unix Password Manager) + + This is a fairly straight-forward fork of Tom Ryder's password-store plugin, + included in the contrib folder for pass and at Tom's cgit store: + https://git.zx2c4.com/password-store/ + + I've added some niceties based around a fuller filetype implementation, + in particular + + * unset spell + * add simple syntax highlighting + + I've added some simple shoulder surfing protection via syntax highlighting. + When loading a pass file for editing, the first line will be obscured. It is + editable when the cursor is in place, but will be obscured while editing other + fields. + + There are two commands to facilitate hiding and concealing + + *:Reveal* + + *:Conceal* + + These do what you might expect, reset the syntax highlighting of the password + from obscured to cleared. + + There is also integration with ``pwgen`` the same utility called by + password-store to generate passwords. By default this is mapped to vim's + increment and decrement operators ```` and ```` but the mapping is + available by a plug mapping ``password_rotate`` diff --combined .vim/bundle/password-store/autoload/password_store.vim index 0000000,fac5202..fac5202 mode 000000,100644..100644 --- a/.vim/bundle/password-store/autoload/password_store.vim +++ b/.vim/bundle/password-store/autoload/password_store.vim @@@ -1,0 -1,36 +1,36 @@@ + " setup known state + if exists('did_password_store') + " || &compatible + " || version < 700} + finish + endif + let g:did_password_store = '1' + let s:save_cpo = &cpoptions + set compatible&vim + "echo 'main code'}} + " Return vim to users choice + function! password_store#generate() abort + if executable('pwgen') + let l:result = systemlist('pwgen -N1 ' . password_store#setting('pw_length') ) + return l:result[0] + endif + endfunction + + function! password_store#replace() abort + execute 's/\<.*\>/' . password_store#generate() . '/' + endfunction + + let s:default_settings = { + \ 'pw_length' : '12', + \ 'enable_syntax' : 'true', + \ } + + function! password_store#setting(key) + if exists('g:password_store_settings') && has_key(g:password_store_settings, a:key) + return g:password_store_settings[a:key] + else + return s:default_settings[a:key] + endif + endfunction + + let &cpoptions = s:save_cpo diff --combined .vim/bundle/password-store/doc/vim-password-store.txt index 0000000,1ffcf36..1ffcf36 mode 000000,100644..100644 --- a/.vim/bundle/password-store/doc/vim-password-store.txt +++ b/.vim/bundle/password-store/doc/vim-password-store.txt @@@ -1,0 -1,86 +1,86 @@@ + *vim-password-store* Niceties for editing password-store files + + =============================================================================== + CONTENTS *password-store-contents* + + 1. Intro ........................................... |password-store-intro| + 2. Requirements ............................. |password-store-requirements| + 3. Usage ........................................... |password-store-usage| + 4. Configuration .................................. |password-store-config| + 5. Licence ....................................... |password-store-licence| + 6. Credits ....................................... |password-store-credits| + =============================================================================== + 1. Intro *password-store-intro* + + Password store is a nice command line password manager, well suited to + vim's style. Tom Ryder has written a plugin to unset the standard + password security leakages, backup files, info files etc. This works + well, but doesn't provide hooks for extending. I wanted to add a few + simple enhancements, including unsetting spelling (no password should be + spell checked :-) and some simple syntax highlighting. + + 2. Requirements *password-store-requirements* + + A plugin manager (not required but the plugin is written to expect + this) and password-store https://www.passwordstore.org/ . + + 3. Usage *password-store-usage* + + The plugin automatically loads when it sees the appropriate file paths + for password-store. This is Tom Ryders + + There are two functions: + > + :Conceal + :Reveal + < + That apply syntax highlighting to obscure and un-obscure the password. + By default the pass file loads in obscured mode, however when the cursor is on + the word it should readable and editable. This offers minor "shoulder surfing" + protection, facilitating editing of metadata, such as adding URLs etc. + + There's minor feedback for short passwords, with Error highlighting for + passwords 6 or less characters long. + + Password store also adds password generation support via pwgen. Since + password-store already leverages pwgen, this is a fairly safe assumption. + There is a Plug mapping *rotate_password* + by default this is mapped to and but can be overridden via setting + an alternate plug mapping + > + nnoremap >M-a> rotate_password + < + The mapped sequence will generate a random password. As neither decrement nor + increment mean anything in this context, buth are mapped to the same plug. + The default length of the password is 10 character, but + modifiable by configuration This is also available via the function call(s) + > + password_store#replace() + < + 4. Configuration *password-store-config* + + Configuration is done through a global dictionary *g:password_store_settings* + Initialize the dictionary and add settings as needed + > + let g:password_store_settings = {} + + Syntax obfustaction is enabled by default. To disable it: + > + let g:password_store_settings.enable_syntax = 'false" + + + Auto "increment" password length is 12 characters. To change it + > + let g:password_store_settings.pw_length = 20 + < + 4. Licence *password-store-licence* + + This plugin is licensed under the same terms as vim itself (see + |license| ) + + 5. Credits *password-store-credits* + + Tom Ryder + https://git.zx2c4.com/password-store/ + + vim:ft=help diff --combined .vim/bundle/password-store/ftdetect/pass.vim index 0000000,0ce0f48..0ce0f48 mode 000000,100644..100644 --- a/.vim/bundle/password-store/ftdetect/pass.vim +++ b/.vim/bundle/password-store/ftdetect/pass.vim @@@ -1,0 -1,20 +1,20 @@@ + " detect password-store files + if exists('did_pass') || &compatible || version < 700 + finish + endif + let g:did_pass = 'did_pass' + let s:save_cpo = &cpoptions + set compatible&vim + + " this is straight from Tom Ryders plugin + + autocmd VimEnter + \ /dev/shm/pass.?*/?*.txt + \,/dev/shm/gopass-edit*/secret + \,$TMPDIR/pass.?*/?*.txt + \,/tmp/pass.?*/?*.txt + \ setlocal filetype=pass | + \ if password_store#setting('enable_syntax') ==# 'true' | setlocal syntax=pass.obfuscated | endif + + " Cleanup at end + let &cpoptions = s:save_cpo diff --combined .vim/bundle/password-store/ftplugin/pass.vim index 0000000,c6a2680..c6a2680 mode 000000,100644..100644 --- a/.vim/bundle/password-store/ftplugin/pass.vim +++ b/.vim/bundle/password-store/ftplugin/pass.vim @@@ -1,0 -1,58 +1,58 @@@ + if exists('did_pass_ftplugin') || &compatible || v:version < 700 + finish + endif + let g:did_pass = 'did_pass_ftplugin' + let s:save_cpo = &cpoptions + set compatible&vim + + nmap rotate_password :call password_store#replace() + if ! hasmapto( '\rotate_password', 'n') + nmap rotate_password + endif + + setlocal nospell + + + " Check whether we should set redacting options or not + function! s:CheckArgsRedact() + + " Ensure there's one argument and it's the matched file + if argc() != 1 || fnamemodify(argv(0), ':p') !=# expand(':p') + return + endif + + " Disable all the leaky options globally + set nobackup + set nowritebackup + set noswapfile + set viminfo= + if has('persistent_undo') + set noundofile + endif + + " Tell the user what we're doing so they know this worked, via a message and + " a global variable they can check + echomsg 'Editing password file--disabled leaky options!' + let g:redact_pass_redacted = 1 + + endfunction + + call s:CheckArgsRedact() + + function! s:reveal_pass() abort + highlight! link password_store_password Comment + endfunction + command! Reveal call reveal_pass() + + function! s:conceal_pass() abort + highlight! password_store_password guifg=DarkGray guibg=DarkGray ctermfg=8 ctermbg=8 + endfunction + command! Conceal call conceal_pass() + normal! GG + + augroup password_settings_late_load + autocmd! + autocmd FileReadPost if &filetype == 'pass' | echom 'autocmd triggered' | let b:load_pass_syntax = 1 | source 'syntax/pass.vim' | endif + augroup end + " Cleanup at end + let &cpoptions = s:save_cpo diff --combined .vim/bundle/password-store/syntax/obfuscated.vim index 0000000,0a53ea8..0a53ea8 mode 000000,100644..100644 --- a/.vim/bundle/password-store/syntax/obfuscated.vim +++ b/.vim/bundle/password-store/syntax/obfuscated.vim @@@ -1,0 -1,21 +1,21 @@@ + if exists('b:current_syntax') | finish| endif + + setlocal cursorline + + " set redacted colors from colorscheme + let s:error_highlight_str = execute( 'highlight Error' ) + let s:error_fg = matchstr(s:error_highlight_str, 'guifg=\zs\S*') + + let s:comment_highlight_str = execute( 'highlight Comment' ) + let s:comment_fg = matchstr(s:comment_highlight_str, 'guifg=\zs\S*') + + execute 'highlight password_store_password ' . + \ ' guibg=' . s:comment_fg . + \ ' guifg=' . s:comment_fg . + \ ' ctermfg=1 ctermbg=1' + + execute 'highlight password_store_password_short ' . + \ ' guibg=' . s:error_fg . + \ ' guifg=' . s:error_fg . + \ ' ctermfg=1 ctermbg=1' + diff --combined .vim/bundle/password-store/syntax/pass.vim index 0000000,1645720..1645720 mode 000000,100644..100644 --- a/.vim/bundle/password-store/syntax/pass.vim +++ b/.vim/bundle/password-store/syntax/pass.vim @@@ -1,0 -1,15 +1,15 @@@ + if exists('b:current_syntax') | finish| endif + + " first line (by convention always a single pasword) + syntax match password_store_password /\%1l.*/ + highlight link password_store_password Comment + + " highlight short passwords + syntax match password_store_password_short /\%1l.\{,6\}$/ + highlight link password_store_password_short Error + + " colon field value is the suggested path for additional information + syntax match password_store_header '\v^[^:]+:' + highlight link password_store_header PreProc + + diff --combined .vim/bundle/password-store/t/settings.vader index 0000000,aab7688..aab7688 mode 000000,100644..100644 --- a/.vim/bundle/password-store/t/settings.vader +++ b/.vim/bundle/password-store/t/settings.vader @@@ -1,0 -1,42 +1,42 @@@ + Given pass (short password): + pass + + Execute (test short password syntax): + AssertEqual SyntaxAt(2), 'password_store_password_short' + + Given pass (longer password): + passwordlonger + + Execute (test longer password syntax): + AssertEqual SyntaxAt(2), 'password_store_password' + + Given pass (another password): + passwordlonger + + Before (disable syntax): + let g:password_store_settings = {} + let g:password_store_settings.enable_syntax = 'false' + + Execute (test disable syntax ): + AssertEqual &filetype, 'pass' + + Execute (test increment password length): + AssertEqual len( password_store#generate()), 12 + + Execute (test new generates do not match): + AssertNotEqual password_store#generate(), password_store#generate() + + Given text (test ftdetect): + passwordtesting + + Before (mimic settings): + let g:password_store_settings = {} + let g:password_store_settings.enable_syntax = 'false' + let g:password_store_settings.pw_length = '16' + + Execute (test ftdetect trigger): + set filetype=pass + AssertEqual password_store#setting('enable_syntax'), 'false' + AssertEqual len( password_store#generate() ), 16 + +