feat(lua/config): add autocmd to mask .env values and toggle with <leader>ot
Adds autocmd to hide sensitive data in .env files on load and provides a toggle keymap (<leader>ot) to reveal original values. New Features - Mask .env file contents whenopened - Toggle visibility with <leader>ot
This commit is contained in:
1 file changed
+59
@@ -2,6 +2,65 @@ local function augroup(name)
|
||||
return vim.api.nvim_create_augroup('nvim' .. name, { clear = true })
|
||||
end
|
||||
|
||||
-- hide sensetive data in .env
|
||||
local group = vim.api.nvim_create_augroup('EnvMask', { clear = true })
|
||||
local hidden = {}
|
||||
|
||||
local function mask_line(line)
|
||||
if line:match('^%s*#') or line:match('^%s*$') then
|
||||
return line
|
||||
end
|
||||
|
||||
local key, value = line:match('^([%w_]+)%s*=%s*(.*)')
|
||||
if not key or not value then
|
||||
return line
|
||||
end
|
||||
|
||||
return key .. '=' .. string.rep('*', #value)
|
||||
end
|
||||
|
||||
local function hide(buf)
|
||||
if hidden[buf] then
|
||||
return
|
||||
end
|
||||
|
||||
local lines = vim.api.nvim_buf_get_lines(buf, 0, -1, false)
|
||||
hidden[buf] = lines
|
||||
|
||||
local masked = {}
|
||||
for i, line in ipairs(lines) do
|
||||
masked[i] = mask_line(line)
|
||||
end
|
||||
|
||||
vim.api.nvim_buf_set_lines(buf, 0, -1, false, masked)
|
||||
end
|
||||
|
||||
local function show(buf)
|
||||
if not hidden[buf] then
|
||||
return
|
||||
end
|
||||
vim.api.nvim_buf_set_lines(buf, 0, -1, false, hidden[buf])
|
||||
hidden[buf] = nil
|
||||
end
|
||||
|
||||
vim.api.nvim_create_autocmd('BufReadPost', {
|
||||
group = group,
|
||||
pattern = { '.env', '.env.*', '*.env' },
|
||||
callback = function(args)
|
||||
vim.cmd('silent! noautocmd redraw')
|
||||
hide(args.buf)
|
||||
end,
|
||||
})
|
||||
|
||||
vim.keymap.set('n', '<leader>ot', function()
|
||||
local buf = vim.api.nvim_get_current_buf()
|
||||
if hidden[buf] then
|
||||
show(buf)
|
||||
else
|
||||
hide(buf)
|
||||
end
|
||||
end, { desc = 'Toggle env masking' })
|
||||
|
||||
-- Strip trailing spaces before write
|
||||
vim.api.nvim_create_autocmd({ 'BufWritePre' }, {
|
||||
group = augroup('strip_space'),
|
||||
|
||||
Reference in new issue
Block a user