dotfiles

personal dotfiles
git clone anongit@rnpnr.xyz:dotfiles.git
Log | Files | Refs | Feed | Submodules

Commit: 9c423d75c6d43f2324e8a190348b089c7a959ba7
Parent: 20a3f6cd831aff55ec1ef1a27333912d618d531e
Author: Randy Palamar
Date:   Wed,  4 Jan 2023 20:54:30 -0700

vis: seamlessly edit gpg encrypted files

Diffstat:
A.config/vis/gpg.lua | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
M.config/vis/visrc.lua | 1+
2 files changed, 56 insertions(+), 0 deletions(-)

diff --git a/.config/vis/gpg.lua b/.config/vis/gpg.lua @@ -0,0 +1,55 @@ +require('util') + +gpg = { key = 0 } + +local function decrypt(file) + local f, e = util:splitext(file.name) + if e ~= '.gpg' then return end + + local err, ostr, estr = vis:pipe(file, {start = 0, finish = file.size}, "gpg -d") + if err ~= 0 then return false end + + local i = string.find(estr, "ID") + local j = string.find(estr, ",", i) + local keyid = string.sub(estr, i+3, j-1) + if keyid ~= gpg.key then + vis:info(estr) + gpg.key = keyid + end + + file:delete(0, file.size) + file:insert(0, ostr) + file.modified = false + return true +end +vis.events.subscribe(vis.events.FILE_OPEN, decrypt) +vis.events.subscribe(vis.events.FILE_SAVE_POST, decrypt) + +local function encrypt(file, path) + local f, e = util:splitext(file.name) + if e ~= '.gpg' then return end + + if gpg.key == 0 then + vis:info('encrypt: keyid not found. file not saved.') + return false + end + + local tfn = os.tmpname() + local cmd = "gpg --yes -o " .. tfn .. " -e -r " .. gpg.key + local err, ostr, estr = vis:pipe(file, {start = 0, finish = file.size}, cmd) + if err ~= 0 then + if estr then + vis:message(estr) + end + return false + end + + local tf = io.open(tfn, 'rb') + file:delete(0, file.size) + file:insert(0, tf:read("a")) + tf:close() + os.remove(tfn) + + return true +end +vis.events.subscribe(vis.events.FILE_SAVE_PRE, encrypt) diff --git a/.config/vis/visrc.lua b/.config/vis/visrc.lua @@ -2,6 +2,7 @@ require('vis') require('util') require('build') require('macros') +require('gpg') spell = require('plugins/vis-spellcheck') spell.lang = "en_US"