Compare commits

...

7 commits

Author SHA1 Message Date
a322799f39
nvim: Add which-key.nvim key chord visualization
Finally added a which-key like extension.
This one is a lua implementation of the old Emacs idea, but comes with
pretty sane defaults and seems less difficult to set up.

So much so that, even out of the box, it seems somewhat useful by
containing explanations of default vim bindings and showing the target
for all mark jumps. (e.g. `g`` or `g'`).
2022-01-04 22:09:22 +01:00
8e6bd03576
nvim: Replace surround plugin for vim-sandwich
Finally made the switch from the lua surround plugin of my choice to
sandwich -- it provides sane defaults, needs little to no setup, and
comes with a pretty alright default mapping method:

`sa<object><something>` to add surroundings to object
`sr<oldsurround><newsurround>` to replace surroundings (including
`srb<new>` for automatically figuring out what to replace)
`sd<surround>` to delete existing.

Simple and efficient, should make the cut in my estimation.
2022-01-04 22:04:27 +01:00
788775bbee
nvim: Add oscyank to yank from anywhere
Added oscyank plugin which allows, through the `:OSCYank` command, to
put stuff into your local clipboard from *anywhere*, even through remote
ssh sessions and so on.
Requires a supported terminal emulator but honestly, most semi
well-known ones are on the list already.
2022-01-04 22:02:55 +01:00
d5cd91d107
nvim: Add experimental navigator lsp configurator 2022-01-03 18:11:23 +01:00
ff0ddb2b2d
nvim: Switch galaxyline for lualine
Recently, galaxyline created some troubles in the setup. Lualine is much
much easier to configure and, since I don't need some of the more
advanced features of galaxyline anyway, I can just use the simple setup
it offers.
If ever those features become necessary again I can presumably just
reintroduce them based on the old galaxyline setup that got removed in
this commit.
2022-01-03 17:45:04 +01:00
8b3b49275c
Add coffin automation to pass-pick 2021-12-18 10:34:07 +01:00
bd37843102
Enable extensions for pass 2021-12-18 10:33:52 +01:00
8 changed files with 162 additions and 432 deletions

View file

@ -127,6 +127,8 @@ pandoc-bin
parallel
paru-bin
pass
pass-ssh
pass-coffin
patch
pavolume
pdfjs

View file

@ -1,244 +0,0 @@
-- set up statusline
local gl = require 'galaxyline'
local gls = gl.section
local fileinfo = require 'galaxyline.provider_fileinfo'
local devicons = require 'nvim-web-devicons'
local mode_colors = {
normal = '#' .. '98c379',
insert = '#' .. '61afef',
replace = '#' .. 'e06c75',
visual = '#' .. 'e5c07b',
command = '#' .. 'd19a66',
terminal = '#' .. '56b6c2'
}
-- create icons from unicode
local function u(code)
if type(code) == 'string' then code = tonumber('0x' .. code) end
local c = string.char
if code <= 0x7f then return c(code) end
local t = {}
if code <= 0x07ff then
t[1] = c(bit.bor(0xc0, bit.rshift(code, 6)))
t[2] = c(bit.bor(0x80, bit.band(code, 0x3f)))
elseif code <= 0xffff then
t[1] = c(bit.bor(0xe0, bit.rshift(code, 12)))
t[2] = c(bit.bor(0x80, bit.band(bit.rshift(code, 6), 0x3f)))
t[3] = c(bit.bor(0x80, bit.band(code, 0x3f)))
else
t[1] = c(bit.bor(0xf0, bit.rshift(code, 18)))
t[2] = c(bit.bor(0x80, bit.band(bit.rshift(code, 12), 0x3f)))
t[3] = c(bit.bor(0x80, bit.band(bit.rshift(code, 6), 0x3f)))
t[4] = c(bit.bor(0x80, bit.band(code, 0x3f)))
end
return table.concat(t)
end
local mode_map = {
['n'] = {'NORMAL', mode_colors.normal},
['i'] = {'INSERT', mode_colors.insert},
['R'] = {'REPLACE', mode_colors.replace},
['v'] = {'VISUAL', mode_colors.visual},
['V'] = {'V-LINE', mode_colors.visual},
['c'] = {'COMMAND', mode_colors.command},
['s'] = {'SELECT', mode_colors.visual},
['S'] = {'S-LINE', mode_colors.visual},
['t'] = {'TERMINAL', mode_colors.terminal},
[''] = {'V-BLOCK', mode_colors.visual},
[''] = {'S-BLOCK', mode_colors.visual},
['Rv'] = {'VIRTUAL'},
['rm'] = {'--MORE'}
}
local sep = {
right_filled = u 'e0b2',
left_filled = u 'e0b0',
right = u 'e0b3',
left = u 'e0b1'
}
local icons = {
locker = u 'f023',
unsaved = u 'f693',
lsp_warn = u 'f071',
lsp_error = u 'f46e'
}
local function mode_label() return mode_map[vim.fn.mode()][1] or 'N/A' end
local function mode_hl() return mode_map[vim.fn.mode()][2] or '#ff0000' end
local function highlight(group, fg, bg, gui)
local cmd = string.format('highlight %s guifg=%s guibg=%s', group, fg, bg)
if gui ~= nil then cmd = cmd .. ' gui=' .. gui end
vim.cmd(cmd)
end
local function buffer_not_empty()
if vim.fn.empty(vim.fn.expand '%:t') ~= 1 then return true end
return false
end
local function wide_enough()
local squeeze_width = vim.fn.winwidth(0)
if squeeze_width > 80 then return true end
return false
end
gl.short_line_list = {'NvimTree', 'vista', 'dbui'}
gls.left = {
{
ViMode = {
provider = function()
local modehl = mode_hl()
highlight('GalaxyViMode', '000000', modehl, 'bold')
highlight('GalaxyViModeInv', modehl, '000000', 'bold')
return string.format(' %s ', mode_label())
end,
separator = sep.left_filled,
separator_highlight = 'GalaxyViModeInv'
}
}, {
FileName = {
provider = function()
if not buffer_not_empty() then return '' end
local fname
if wide_enough() then
fname = vim.fn.fnamemodify(vim.fn.expand '%', ':~:.')
else
fname = vim.fn.expand '%:t'
end
if #fname == 0 then return '' end
if vim.bo.readonly then
fname = fname .. ' ' .. icons.locker
end
if vim.bo.modified then
fname = fname .. ' ' .. icons.unsaved
end
return ' ' .. fname .. ' '
end,
highlight = 'Normal',
separator = sep.left,
separator_highlight = 'GalaxyViModeInv'
}
}, {
-- I am unsure how lua specifies order in these, or are tables unordered?
-- anyway, without the weird section in between add ALWAYS appears to the left
-- of the Branch display
DiffAdd = {
provider = 'DiffAdd',
condition = wide_enough,
icon = '+',
highlight = 'DiffAdded'
},
WithoutThisAddedComesBeforeBranch = {
provider = function() return '' end
},
DiffModified = {
provider = 'DiffModified',
condition = wide_enough,
icon = '~',
highlight = 'DiffLine'
},
DiffRemove = {
provider = 'DiffRemove',
condition = wide_enough,
icon = '-',
highlight = 'DiffRemoved',
separator = sep.left,
separator_highlight = 'GalaxyViModeInv'
},
GitBranch = {
provider = {
function() return '' end, 'GitBranch',
function() return ' ' end
},
condition = require('galaxyline.condition').check_git_workspace and
wide_enough,
highlight = 'NonText'
}
}
}
gls.right = {
{
LspStatus = {
provider = function()
local connected =
not vim.tbl_isempty(vim.lsp.buf_get_clients(0))
if connected then
return ' ' .. u 'f817' .. ' '
else
return ''
end
end,
highlight = 'DiffAdded',
separator = sep.right,
separator_highlight = 'GalaxyViModeInv'
}
}, {
DiagnosticWarn = {
provider = function()
local n = vim.lsp.diagnostic.get_count(0, 'Warning')
if n == 0 then return '' end
return string.format(' %s %d ', icons.lsp_warn, n)
end,
highlight = 'LspDiagnosticsDefaultWarning'
},
DiagnosticError = {
provider = function()
local n = vim.lsp.diagnostic.get_count(0, 'Error')
if n == 0 then return '' end
return string.format(' %s %d ', icons.lsp_error, n)
end,
highlight = 'LspDiagnosticsDefaultError'
}
}, {
FileIcon = {
provider = function()
local fname, ext = vim.fn.expand '%:t', vim.fn.expand '%:e'
local icon, _ = devicons.get_icon(fname, ext)
if icon == nil then return '' end
return ' ' .. icon .. ' '
end,
separator = sep.right,
highlight = 'Normal',
separator_highlight = 'GalaxyViModeInv'
},
FileType = {
provider = function()
-- if not buffer_not_empty() then
-- return ''
-- end
return string.format(' %s ', vim.bo.filetype)
end,
-- condition = buffer_not_empty,
highlight = 'Normal'
}
}, {
PositionInfo = {
provider = {
function()
return string.format('%s:%s', vim.fn.line('.'),
vim.fn.col('.'))
end
},
highlight = 'GalaxyViMode',
separator = sep.right_filled,
separator_highlight = 'GalaxyViModeInv'
},
PercentInfo = {
provider = fileinfo.current_line_percent,
highlight = 'GalaxyViMode',
separator = sep.right,
separator_highlight = 'GalaxyViMode'
}
}
}
for k, v in pairs(gls.left) do gls.short_line_left[k] = v end
table.remove(gls.short_line_left, 1)
for k, v in pairs(gls.right) do gls.short_line_right[k] = v end
table.remove(gls.short_line_right)
table.remove(gls.short_line_right)

View file

@ -1,12 +1,6 @@
local api = vim.api
local saga = require 'lspsaga'
local lspcfg = require 'lspconfig'
local cmp = require 'cmp'
local lspkind = require 'lspkind'
require"lsp_signature".setup()
local has_words_before = function()
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and
@ -20,12 +14,6 @@ local feedkey = function(key, mode)
mode, true)
end
-- Enable the following language servers
local servers = {
'bashls', 'gopls', 'texlab', 'pyright', 'rust_analyzer', 'tsserver', 'vimls'
-- sumneko_lua further down, needs more setup
}
vim.o.completeopt = "menu,menuone,noselect"
-- completion items
@ -93,141 +81,71 @@ cmp.setup.cmdline(':', {
sources = cmp.config.sources({{name = 'path'}}, {{name = 'cmdline'}})
})
-- Setup lspconfig.
local capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp
.protocol
.make_client_capabilities())
local on_attach = function(_, _)
-- Keybindings for LSPs
-- Note these are in on_attach so that they don't override bindings in a non-LSP setting
api.nvim_set_keymap("n", "gh",
"<cmd>lua require 'lspsaga.provider'.lsp_finder()<CR>",
{noremap = true, silent = true})
api.nvim_set_keymap("n", "gd",
"<cmd>lua require'lspsaga.provider'.preview_definition()<CR>",
{noremap = true, silent = true})
api.nvim_set_keymap("n", "gE",
"<cmd>lua require 'lspsaga.codeaction'.code_action()<CR>",
{noremap = true, silent = true})
api.nvim_set_keymap("v", "gE",
"<cmd>'<,'>lua require 'lspsaga.codeaction'.range_code_action()<CR>",
{noremap = true, silent = true})
api.nvim_set_keymap("n", "K",
"<cmd>lua require('lspsaga.hover').render_hover_doc()<CR>",
{noremap = true, silent = true})
api.nvim_set_keymap("n", "gK",
"<cmd>lua require('lspsaga.signaturehelp').signature_help()<CR>",
{noremap = true, silent = true})
api.nvim_set_keymap("n", "gr",
"<cmd>lua require('lspsaga.rename').rename()<CR>",
{noremap = true, silent = true})
api.nvim_set_keymap("n", "ge",
"<cmd>lua require('lspsaga.diagnostic').show_line_diagnostics()<CR>",
{noremap = true, silent = true})
api.nvim_set_keymap("n", "]e",
"<cmd>lua require('lspsaga.diagnostic').lsp_jump_diagnostic_next()<CR>",
{noremap = true, silent = true})
api.nvim_set_keymap("n", "[e",
"<cmd>lua require('lspsaga.diagnostic').lsp_jump_diagnostic_prev()<CR>",
{noremap = true, silent = true})
api.nvim_set_keymap("n", "C-f",
"<cmd>lua require('lspsaga.action').smart_scroll_with_saga(1)<CR>",
{noremap = true, silent = true})
api.nvim_set_keymap("n", "C-b",
"<cmd>lua require('lspsaga.action').smart_scroll_with_saga(-1)<CR>",
{noremap = true, silent = true})
require("lspsaga").init_lsp_saga {
error_sign = 'X',
warn_sign = '⚠️',
hint_sign = '',
infor_sign = '',
-- code_action_icon = '●',
finder_definition_icon = '📖 ',
finder_reference_icon = '🔖 ',
definition_preview_icon = '📖 ',
finder_action_keys = {
open = '<cr>',
split = 's',
vsplit = 'v',
quit = '<esc>',
scroll_down = '<c-f>',
scroll_up = '<c-b>'
},
code_action_keys = {quit = '<esc>', exec = '<cr>'},
rename_action_keys = {quit = '<esc>', exec = '<cr>'}
}
vim.cmd("command! LspHover lua vim.lsp.buf.hover()<CR>")
vim.cmd(
"command! LspDisable lua vim.lsp.stop_client(vim.lsp.get_active_clients())<CR>")
print('LSP ready')
end
-- set up simple servers
for _, lsp in ipairs(servers) do
lspcfg[lsp].setup {on_attach = on_attach, capabilities = capabilities}
end
lspcfg.efm.setup {
on_attach = on_attach,
init_options = {
documentFormatting = true,
codeAction = true,
completion = true,
documentSymbol = true,
hover = true
},
filetypes = {"sh"},
settings = {
rootMarkers = {".git/"},
languages = {
sh = {
{
lintCommand = 'shellcheck -f gcc -x',
lintFormats = {
'%f:%l:%c: %trror: %m', '%f:%l:%c: %tarning: %m',
'%f:%l:%c: %tote: %m'
}
}, {formatCommand = 'shfmt -ci -s -bn', formatStdin = true}
}
}
}
}
require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol
.make_client_capabilities())
-- requires the lua-language-server package to be installed
-- The arch package defaults to the following directory
local sumneko_root_path = "/usr/share/lua-language-server"
lspcfg.sumneko_lua.setup {
cmd = {"lua-language-server", "-E", sumneko_root_path .. "/main.lua"},
settings = {
Lua = {
runtime = {
-- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
version = 'LuaJIT',
-- Setup your lua path
path = vim.split(package.path, ';')
require'navigator'.setup({
lsp = {
servers = {'efm'},
sumneko_lua = {
cmd = {
"lua-language-server", "-E", sumneko_root_path .. "/main.lua"
},
diagnostics = {
-- Get the language server to recognize additional globals
globals = {
'vim', 'before_each', 'after_each', 'describe', 'it',
'mock', 'stub'
settings = {
Lua = {
runtime = {
-- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
version = 'LuaJIT',
-- Setup your lua path
path = vim.split(package.path, ';')
},
diagnostics = {
-- Get the language server to recognize additional globals
globals = {
'vim', 'before_each', 'after_each', 'describe',
'it', 'mock', 'stub'
}
},
workspace = {
-- Make the server aware of additional runtime files
library = {
[vim.fn.expand('$VIMRUNTIME/lua')] = true,
[vim.fn.expand('$VIMRUNTIME/lua/vim/lsp')] = true,
["/usr/share/lua/5.1/busted/"] = true
}
}
}
}
},
efm = {
init_options = {
documentFormatting = true,
codeAction = true,
completion = true,
documentSymbol = true,
hover = true
},
workspace = {
-- Make the server aware of additional runtime files
library = {
[vim.fn.expand('$VIMRUNTIME/lua')] = true,
[vim.fn.expand('$VIMRUNTIME/lua/vim/lsp')] = true,
["/usr/share/lua/5.1/busted/"] = true
filetypes = {"sh"},
settings = {
rootMarkers = {".git/"},
languages = {
sh = {
{
lintCommand = 'shellcheck -f gcc -x',
lintFormats = {
'%f:%l:%c: %trror: %m',
'%f:%l:%c: %tarning: %m', '%f:%l:%c: %tote: %m'
}
},
{formatCommand = 'shfmt -ci -s -bn', formatStdin = true}
}
}
}
}
},
on_attach = on_attach
}
saga.init_lsp_saga()
}
})
require"lsp_signature".setup()

View file

@ -0,0 +1,28 @@
require('lualine').setup {
options = {
icons_enabled = true,
theme = 'auto',
component_separators = {left = '', right = ''},
section_separators = {left = '', right = ''},
disabled_filetypes = {},
always_divide_middle = true
},
sections = {
lualine_a = {'mode'},
lualine_b = {'branch', 'diff', 'diagnostics'},
lualine_c = {'filename'},
lualine_x = {'encoding', 'fileformat', 'filetype'},
lualine_y = {'progress', 'location'},
lualine_z = {'hostname'}
},
inactive_sections = {
lualine_a = {},
lualine_b = {'branch', 'diff'},
lualine_c = {'filename'},
lualine_x = {},
lualine_y = {'location'},
lualine_z = {}
},
tabline = {},
extensions = {'quickfix', 'toggleterm'}
}

View file

@ -25,6 +25,7 @@ require("packer").startup(function()
} -- allow seamless navigation between vim buffers and tmux splits
use 'jeffkreeftmeijer/vim-numbertoggle' -- toggles numbers to absolute for all buffers but the current which is relative
use 'RRethy/vim-illuminate' -- highlight other occurences of the word under cursor
use 'ojroques/vim-oscyank' -- yank from *anywhere* (even ssh session) to clipboard, using :OSCYank
use 'ggandor/lightspeed.nvim' -- jump between letters with improved fFtT quicksearch, mimics sneak
-- use { -- weird errors currently
-- 'lukas-reineke/indent-blankline.nvim', -- show a vertical line for each indentation
@ -36,12 +37,11 @@ require("packer").startup(function()
'lewis6991/gitsigns.nvim', -- show vcs changes on left-hand gutter
requires = {'nvim-lua/plenary.nvim'},
tag = 'release',
config = function() require('gitsigns').setup{
keymaps = {
['n ]c'] = nil,
['n [c'] = nil,
config = function()
require('gitsigns').setup {
keymaps = {['n ]c'] = nil, ['n [c'] = nil}
}
} end,
end,
event = "BufRead"
}
use {
@ -57,18 +57,7 @@ require("packer").startup(function()
-- editing
use {'tpope/vim-commentary', event = "BufRead"} -- easily toggle comments for lines, paragraphs etc with gc
use {
'blackCauldron7/surround.nvim', -- lets you change surrounding things with cs (or ds to del, ys to add)
config = function()
vim.g.surround_mappings_style = "surround"
vim.g.surround_pairs = {
nestable = {{'(', ')'}, {'[', ']'}, {'{', '}'}},
linear = {{"'", "'"}, {'"', '"'}, {'*', '*'}, {'`', '`'}}
}
require('surround').setup {}
end,
event = "BufRead"
}
use {'machakann/vim-sandwich', event = "BufRead"} -- surround things with other things using sa/sd/sr
use {
'monaqa/dial.nvim', -- extend the ^a / ^x possibilities to dates, hex, alphabets, markdown headers
event = "BufRead"
@ -101,9 +90,9 @@ require("packer").startup(function()
-- statusline
use {
'glepnir/galaxyline.nvim',
'nvim-lualine/lualine.nvim',
requires = {'kyazdani42/nvim-web-devicons', opt = true},
config = function() require('plug._galaxyline') end
config = function() require('plug._lualine') end
}
-- writing
@ -116,7 +105,7 @@ require("packer").startup(function()
require("true-zen").setup({
integrations = {
gitsigns = true,
galaxyline = true,
lualine = true,
tmux = {global = false},
limelight = true
}
@ -135,17 +124,21 @@ require("packer").startup(function()
ft = "python",
config = function()
vim.g.slime_target = 'tmux'
vim.g.slime_default_config = {socket_name = "default", target_pane = "{last}"}
vim.g.slime_default_config = {
socket_name = "default",
target_pane = "{last}"
}
vim.g.slime_python_ipython = 1
vim.g.slime_no_mappings = 1
end,
end
}
use { 'hanschen/vim-ipython-cell', -- send code 'cells' to REPL
use {
'hanschen/vim-ipython-cell', -- send code 'cells' to REPL
ft = "python",
config = function()
vim.g.ipython_cell_highlight_cells_ft = {'python'}
vim.g.ipython_cell_insert_tag = "## Cell"
end,
end
}
--
@ -157,6 +150,10 @@ require("packer").startup(function()
event = "BufWinEnter",
config = function() require('plug._toggleterm') end
}
use {
"folke/which-key.nvim",
config = function() require("which-key").setup {} end
}
-- fuzzy matching
use {
@ -167,29 +164,10 @@ require("packer").startup(function()
use "nvim-telescope/telescope-fzy-native.nvim"
use "nvim-telescope/telescope-fzf-writer.nvim"
-- lsp
use 'neovim/nvim-lspconfig' -- some commong language server configurations
use 'tami5/lspsaga.nvim' -- nice and fast ui for lsp actions WILL HAVE TO BE REPLACED SOON
use 'simrat39/symbols-outline.nvim' -- vista-like outline view for code
use 'ray-x/lsp_signature.nvim'
-- and completion
use {
'hrsh7th/nvim-cmp', -- simple completion engine built specifically for nvim and lsp
requires = {
'onsails/lspkind-nvim', 'andersevenrud/cmp-tmux', -- completion source from adjacent tmux panes
'hrsh7th/cmp-nvim-lsp', 'hrsh7th/cmp-buffer', 'hrsh7th/cmp-path',
'hrsh7th/cmp-cmdline', 'hrsh7th/cmp-vsnip',
'kdheepak/cmp-latex-symbols', 'ray-x/cmp-treesitter',
'f3fora/cmp-spell', 'jc-doyle/cmp-pandoc-references',
'cbarrete/completion-vcard'
}
}
-- snippeting
use {"hrsh7th/vim-vsnip", event = "InsertEnter"} -- snippet engine
use {"rafamadriz/friendly-snippets", event = "InsertEnter"} -- many snippets
require('plug._lsp')
-- treesitter
use {
'nvim-treesitter/nvim-treesitter',
@ -219,4 +197,26 @@ require("packer").startup(function()
config = function() require('spellsitter').setup() end
}
-- lsp
use 'neovim/nvim-lspconfig' -- some commong language server configurations
use 'simrat39/symbols-outline.nvim' -- vista-like outline view for code
use 'ray-x/lsp_signature.nvim'
use {
'ray-x/navigator.lua',
requires = {'ray-x/guihua.lua', run = 'cd lua/fzy && make'}
}
-- and completion
use {
'hrsh7th/nvim-cmp', -- simple completion engine built specifically for nvim and lsp
requires = {
'onsails/lspkind-nvim', 'andersevenrud/cmp-tmux', -- completion source from adjacent tmux panes
'hrsh7th/cmp-nvim-lsp', 'hrsh7th/cmp-buffer', 'hrsh7th/cmp-path',
'hrsh7th/cmp-cmdline', 'hrsh7th/cmp-vsnip',
'kdheepak/cmp-latex-symbols', 'ray-x/cmp-treesitter',
'f3fora/cmp-spell', 'jc-doyle/cmp-pandoc-references',
'cbarrete/completion-vcard'
}
}
require('plug._lsp')
end)

View file

@ -0,0 +1,4 @@
#!/usr/bin/env sh
# Settings for pass-ssh extension
alias pass-ssh='pass ssh --fzf -d ~/.ssh/keys --ssh-t ed25519'

View file

@ -3,3 +3,4 @@
# usually password store will be found in ~/.local/share/pass
export PASSWORD_STORE_DIR="$XDG_DATA_HOME/pass"
export PASSWORD_STORE_ENABLE_EXTENSIONS=true

View file

@ -109,6 +109,9 @@ set_defaults() {
AUTOFILL_CHAIN="${PP_AUTOENTRY_CHAIN:-$(get_config AUTOFILL_CHAIN 'username :tab password')}"
AUTOFILL_DELAY="${PP_AUTOENTRY_DELAY:-$(get_config AUTOFILL_DELAY 30)}"
PASS_USERNAME_FIELD="${PP_PASS_USERNAME_FIELD:-$(get_config PASS_USERNAME_FIELD 'username user login')}"
PASS_COFFIN_OPEN_TIME="${PP_PASS_COFFIN_OPEN_TIME:-$(get_config PASS_COFFIN_OPEN_TIME 0)}"
PASS_COFFIN_LOCATION="${PP_PASS_COFFIN_LOCATION:-$(get_config PASS_COFFIN_LOCATION)}"
}
# exit on escape pressed
@ -311,6 +314,26 @@ entrymenu() {
esac
}
open_coffin() {
## there's a closed coffin in our directory
if [ -f "${PASS_COFFIN_LOCATION:-${PASSWORD_STORE_DIR:-~/.password-store}/.coffin/coffin.tar.gpg}" ]; then
if [ "$PASS_COFFIN_OPEN_TIME" -eq 0 ]; then
coffin_should_close_instantly=true
pass open -t 1h # we still set a maximum time limit just to hedge against failures
else
pass open -t "${PASS_COFFIN_OPEN_TIME:-3h}"
fi
fi
}
# make sure we remember to close the coffin if the program terminates
close_coffin() {
if [ "$coffin_should_close_instantly" = true ]; then
pass close
fi
}
trap close_coffin SIGINT SIGTERM ERR EXIT
main() {
local autoentry_chain="${AUTOFILL_CHAIN}"
local k_autofill="${KEY_AUTOFILL}"
@ -320,6 +343,8 @@ main() {
local k_clip_pass="${KEY_CLIP_PASS}"
local k_submenu="${KEY_ENTRY_OPEN}"
open_coffin
entry="$(
list_passwords |
_picker -kb-accept-entry "" \
@ -338,29 +363,25 @@ main() {
case "$exit_value" in
"0" | "10")
autofill "$entry" "$autoentry_chain"
exit 0
;;
"11")
clip_username "$entry"
exit 0
;;
"12")
clip_password "$entry"
exit
;;
"13")
autofill "$entry" "username"
exit
;;
"14")
autofill "$entry" "password"
exit
;;
"15")
entrymenu "$entry"
exit
;;
esac
exit 0
}
set_defaults