mirror of
https://github.com/NotAShelf/direnv.nvim.git
synced 2026-03-07 01:16:02 +00:00
Compare commits
6 commits
ecd3bd4898
...
96d0f73eed
| Author | SHA1 | Date | |
|---|---|---|---|
|
96d0f73eed |
|||
|
|
111bbd921f | ||
|
ac9a7d501f |
|||
|
b9c1cac9a5 |
|||
|
2238a611b9 |
|||
|
|
f2533e2d55 |
2 changed files with 49 additions and 27 deletions
17
README.md
17
README.md
|
|
@ -1,5 +1,7 @@
|
||||||
# direnv.nvim
|
# direnv.nvim
|
||||||
|
|
||||||
|
[direnv]: https://direnv.net/
|
||||||
|
|
||||||
Dead simple Neovim plugin to add automatic Direnv loading, inspired by
|
Dead simple Neovim plugin to add automatic Direnv loading, inspired by
|
||||||
`direnv.vim` and written in Lua for better performance and maintainability.
|
`direnv.vim` and written in Lua for better performance and maintainability.
|
||||||
|
|
||||||
|
|
@ -15,13 +17,14 @@ Dead simple Neovim plugin to add automatic Direnv loading, inspired by
|
||||||
|
|
||||||
### 📓 TODO
|
### 📓 TODO
|
||||||
|
|
||||||
There are things direnv.nvim can _not_ yet do. Mainly, we would like to
|
`direnv.nvim` is generally feature complete. There are no major planned
|
||||||
integrate Treesitter for **syntax highlighting** similar to direnv.vim.
|
features, and it should be considered stable for the most part. What
|
||||||
Unfortunately there isn't a TS grammar for Direnv, but we can port syntax.vim
|
`direnv.nvim` _cannot_ do yet is **syntax highlighting** similar to `direnv.vim`
|
||||||
from direnv.vim.
|
but this is planned to be remedied through either using Treesitter, or by
|
||||||
|
porting `direnv.vim`'s syntax.vim.'
|
||||||
|
|
||||||
Additionally, it might be worth adding an option to allow direnv on, e.g.,
|
Feature requests are welcome. Please create an issue to describe the feature
|
||||||
VimEnter if the user has configured to do so.
|
that you would like to see.
|
||||||
|
|
||||||
## 📦 Installation
|
## 📦 Installation
|
||||||
|
|
||||||
|
|
@ -31,7 +34,7 @@ You will need to call the setup function to load the plugin.
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
- Neovim 0.8.0 or higher
|
- Neovim 0.8.0 or higher
|
||||||
- [direnv](https://direnv.net/) installed and available in your PATH
|
- [direnv] v2.33.0 or later installed and available in your PATH
|
||||||
|
|
||||||
### Using lazy.nvim
|
### Using lazy.nvim
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -164,6 +164,14 @@ M._get_rc_status = function(callback)
|
||||||
|
|
||||||
local ok, status = pcall(vim.json.decode, obj.stdout)
|
local ok, status = pcall(vim.json.decode, obj.stdout)
|
||||||
if not ok or not status or not status.state then
|
if not ok or not status or not status.state then
|
||||||
|
vim.schedule(function()
|
||||||
|
notify(
|
||||||
|
"Failed to parse direnv status. Your version of direnv may not support JSON output. "
|
||||||
|
.. "Please ensure you have direnv v2.33.0 or later installed. "
|
||||||
|
.. "You can verify by running: direnv status --json",
|
||||||
|
vim.log.levels.ERROR
|
||||||
|
)
|
||||||
|
end)
|
||||||
for _, cb in ipairs(pending_callbacks) do
|
for _, cb in ipairs(pending_callbacks) do
|
||||||
cb(nil, nil)
|
cb(nil, nil)
|
||||||
end
|
end
|
||||||
|
|
@ -199,6 +207,11 @@ M._get_rc_status = function(callback)
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
M.refresh_status = function()
|
||||||
|
cache.status = nil
|
||||||
|
M._get_rc_status(function() end)
|
||||||
|
end
|
||||||
|
|
||||||
--- Initialize direnv for current directory
|
--- Initialize direnv for current directory
|
||||||
--- @param path string Path to .envrc file
|
--- @param path string Path to .envrc file
|
||||||
M._init = function(path)
|
M._init = function(path)
|
||||||
|
|
@ -224,32 +237,39 @@ M._init = function(path)
|
||||||
end
|
end
|
||||||
|
|
||||||
vim.schedule(function()
|
vim.schedule(function()
|
||||||
local env_commands = vim.split(obj.stdout, "\n")
|
local ok, env = pcall(vim.json.decode, obj.stdout)
|
||||||
if #env_commands > 0 then
|
|
||||||
for _, cmd in ipairs(env_commands) do
|
|
||||||
if cmd ~= "" then
|
|
||||||
pcall(function()
|
|
||||||
vim.cmd(cmd)
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if not silent then
|
if not ok or type(env) ~= "table" then
|
||||||
notify(
|
notify("Failed to parse direnv JSON output", vim.log.levels.ERROR)
|
||||||
"direnv environment loaded successfully",
|
return
|
||||||
vim.log.levels.INFO
|
end
|
||||||
)
|
|
||||||
|
for key, value in pairs(env) do
|
||||||
|
if value == vim.NIL or value == nil then
|
||||||
|
vim.env[key] = nil
|
||||||
|
else
|
||||||
|
if type(value) ~= "string" then
|
||||||
|
value = tostring(value)
|
||||||
|
end
|
||||||
|
vim.env[key] = value
|
||||||
end
|
end
|
||||||
vim.api.nvim_exec_autocmds(
|
end
|
||||||
"User",
|
|
||||||
{ pattern = "DirenvLoaded", modeline = false }
|
if not silent then
|
||||||
|
notify(
|
||||||
|
"direnv environment loaded successfully",
|
||||||
|
vim.log.levels.INFO
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
vim.api.nvim_exec_autocmds(
|
||||||
|
"User",
|
||||||
|
{ pattern = "DirenvLoaded", modeline = false }
|
||||||
|
)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
vim.system(
|
vim.system(
|
||||||
{ M.config.bin, "export", "vim" },
|
{ M.config.bin, "export", "json" },
|
||||||
{ text = true, cwd = cwd },
|
{ text = true, cwd = cwd },
|
||||||
on_exit
|
on_exit
|
||||||
)
|
)
|
||||||
|
|
@ -609,7 +629,7 @@ M.setup = function(user_config)
|
||||||
pattern = ".envrc",
|
pattern = ".envrc",
|
||||||
group = group_id,
|
group = group_id,
|
||||||
callback = function()
|
callback = function()
|
||||||
cache.status = nil
|
M.refresh_status()
|
||||||
notify(
|
notify(
|
||||||
".envrc file changed. Run :Direnv allow to activate changes.",
|
".envrc file changed. Run :Direnv allow to activate changes.",
|
||||||
vim.log.levels.INFO
|
vim.log.levels.INFO
|
||||||
|
|
@ -619,8 +639,7 @@ M.setup = function(user_config)
|
||||||
|
|
||||||
-- Expose a command to refresh the statusline value without triggering reload
|
-- Expose a command to refresh the statusline value without triggering reload
|
||||||
vim.api.nvim_create_user_command("DirenvStatuslineRefresh", function()
|
vim.api.nvim_create_user_command("DirenvStatuslineRefresh", function()
|
||||||
cache.last_check = 0
|
M.refresh_status()
|
||||||
M._get_rc_status(function() end)
|
|
||||||
end, {})
|
end, {})
|
||||||
|
|
||||||
M._get_rc_status(function() end)
|
M._get_rc_status(function() end)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue