Skip to content

Instantly share code, notes, and snippets.

@traut
Last active April 14, 2024 16:04
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save traut/cd19ae2817ab13e0bade1f8a9995029f to your computer and use it in GitHub Desktop.
Save traut/cd19ae2817ab13e0bade1f8a9995029f to your computer and use it in GitHub Desktop.
local gpgGroup = vim.api.nvim_create_augroup('customGpg', { clear = true })
-- autocmds execute in the order in which they were defined.
-- https://neovim.io/doc/user/autocmd.html#autocmd-define
vim.api.nvim_create_autocmd({ 'BufReadPre', 'FileReadPre' }, {
pattern = '*.gpg',
group = gpgGroup,
callback = function ()
-- Make sure nothing is written to shada file while editing an encrypted file.
vim.opt_local.shada = nil
-- We don't want a swap file, as it writes unencrypted data to disk
vim.opt_local.swapfile = false
-- Switch to binary mode to read the encrypted file
vim.opt_local.bin = true
vim.cmd("let ch_save = &ch|set ch=2")
end
})
vim.api.nvim_create_autocmd({ 'BufReadPost', 'FileReadPost' }, {
pattern = '*.gpg',
group = gpgGroup,
callback = function ()
vim.cmd("'[,']!gpg --decrypt 2> /dev/null")
-- Switch to normal mode for editing
vim.opt_local.bin = false
vim.cmd('let &ch = ch_save|unlet ch_save')
vim.cmd(":doautocmd BufReadPost " .. vim.fn.expand("%:r"))
end
})
-- Convert all text to encrypted text before writing
vim.api.nvim_create_autocmd({ 'BufWritePre', 'FileWritePre' }, {
pattern = '*.gpg',
group = gpgGroup,
command = "'[,']!gpg --default-recipient-self -ae 2>/dev/null",
})
-- Undo the encryption so we are back in the normal text, directly
-- after the file has been written.
vim.api.nvim_create_autocmd({ 'BufWritePost', 'FileWritePost' }, {
pattern = '*.gpg',
group = gpgGroup,
command = 'u'
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment