Based on https://gist.github.com/mrash/0f12560983a8c2888c5f

March 31, 2024 ยท View on GitHub

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' })