initial commit

This commit is contained in:
raf 2024-07-03 17:33:07 +03:00
parent 8d4d32a526
commit 27abc8e721
Signed by: NotAShelf
GPG key ID: AF26552424E53993
3 changed files with 129 additions and 0 deletions

39
README.md Normal file
View file

@ -0,0 +1,39 @@
# direnv.nvim
Dead simple Neovim plugin to add automatic Direnv loading, inspired by
`direnv.vim` and written in Lua.
## 📦 Installation
Install `direnv.nvim` with your favorite plugin manager, or clone it manually.
You will need to call the setup function to load the plugin.
## 🚀 Usage
direnv.nvim will automatically call `direnv allow` in your current directory if
`direnv` is available in your PATH, and you have auto-loading enabled.
## 🔧 Configuration
You can pass your config table into the `setup()` function or `opts` if you use
`lazy.nvim`.
### Options
- `bin` (optional, type: string): the path to the Direnv binary. May be an
absolute path, or just `direnv` if it's available in your PATH. - Default:
`direnv`
- `autoload_direnv` (optional, type: boolean): whether to call `direnv allow`
when you enter a directory that contains an `.envrc`. - Default: `false`
- `keybindings` (optional, type: table of strings): the table of keybindings to
use.
- Default:
`{allow = "<Leader>da", deny = "<Leader>dd", reload = "<Leader>dr"}`
#### Example:
```lua
require("direnv").setup({
autoload_direnv = true,
})
```

87
lua/direnv.lua Normal file
View file

@ -0,0 +1,87 @@
local M = {}
local function check_executable(executable_name)
if vim.fn.executable(executable_name) ~= 1 then
vim.api.nvim_err_writeln(
string.format("Executable '%s' not found", executable_name)
)
return false
end
return true
end
local function setup_keymaps(keymaps, mode, opts)
for _, map in ipairs(keymaps) do
local options =
vim.tbl_extend("force", { noremap = true, silent = true }, opts or {})
vkms(mode, map[1], map[2], options)
end
end
M.setup = function(user_config)
local config = vim.tbl_deep_extend("force", {
bin = "direnv",
autoload_direnv = false,
keybindings = {
allow = "<Leader>da",
deny = "<Leader>dd",
reload = "<Leader>dr",
},
}, user_config or {})
if not check_executable(config.bin) then
return
end
setup_keymaps({
{
config.keybindings.allow,
function()
M.allow_direnv()
end,
desc = "Allow direnv",
},
{
config.keybindings.deny,
function()
M.deny_direnv()
end,
desc = "Deny direnv",
},
{
config.keybindings.reload,
function()
M.check_direnv()
end,
desc = "Reload direnv",
},
}, "n")
if config.autoload_direnv then
local group_id = vim.api.nvim_create_augroup("DirenvNvim", {})
vim.api.nvim_create_autocmd({ "BufEnter" }, {
pattern = "*",
group = group_id,
callback = function()
M.check_direnv()
end,
})
end
end
M.allow_direnv = function()
print("Allowing direnv...")
os.execute("direnv allow")
end
M.deny_direnv = function()
print("Denying direnv...")
os.execute("direnv deny")
end
M.check_direnv = function()
print("Checking direnv status...")
os.execute("direnv reload")
end
return M

3
stylua.toml Normal file
View file

@ -0,0 +1,3 @@
indent_type = "Spaces"
indent_width = 3
column_width = 80