mirror of
https://github.com/NotAShelf/direnv.nvim.git
synced 2026-03-07 17:36:00 +00:00
Compare commits
No commits in common. "96d0f73eedc8dfd302dfb75220ac02a3dc29d007" and "ecd3bd4898f79689a3f5bf956877ea42c7b3072e" have entirely different histories.
96d0f73eed
...
ecd3bd4898
2 changed files with 27 additions and 49 deletions
17
README.md
17
README.md
|
|
@ -1,7 +1,5 @@
|
||||||
# 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.
|
||||||
|
|
||||||
|
|
@ -17,14 +15,13 @@ Dead simple Neovim plugin to add automatic Direnv loading, inspired by
|
||||||
|
|
||||||
### 📓 TODO
|
### 📓 TODO
|
||||||
|
|
||||||
`direnv.nvim` is generally feature complete. There are no major planned
|
There are things direnv.nvim can _not_ yet do. Mainly, we would like to
|
||||||
features, and it should be considered stable for the most part. What
|
integrate Treesitter for **syntax highlighting** similar to direnv.vim.
|
||||||
`direnv.nvim` _cannot_ do yet is **syntax highlighting** similar to `direnv.vim`
|
Unfortunately there isn't a TS grammar for Direnv, but we can port syntax.vim
|
||||||
but this is planned to be remedied through either using Treesitter, or by
|
from direnv.vim.
|
||||||
porting `direnv.vim`'s syntax.vim.'
|
|
||||||
|
|
||||||
Feature requests are welcome. Please create an issue to describe the feature
|
Additionally, it might be worth adding an option to allow direnv on, e.g.,
|
||||||
that you would like to see.
|
VimEnter if the user has configured to do so.
|
||||||
|
|
||||||
## 📦 Installation
|
## 📦 Installation
|
||||||
|
|
||||||
|
|
@ -34,7 +31,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] v2.33.0 or later installed and available in your PATH
|
- [direnv](https://direnv.net/) installed and available in your PATH
|
||||||
|
|
||||||
### Using lazy.nvim
|
### Using lazy.nvim
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -164,14 +164,6 @@ 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
|
||||||
|
|
@ -207,11 +199,6 @@ 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)
|
||||||
|
|
@ -237,21 +224,13 @@ M._init = function(path)
|
||||||
end
|
end
|
||||||
|
|
||||||
vim.schedule(function()
|
vim.schedule(function()
|
||||||
local ok, env = pcall(vim.json.decode, obj.stdout)
|
local env_commands = vim.split(obj.stdout, "\n")
|
||||||
|
if #env_commands > 0 then
|
||||||
if not ok or type(env) ~= "table" then
|
for _, cmd in ipairs(env_commands) do
|
||||||
notify("Failed to parse direnv JSON output", vim.log.levels.ERROR)
|
if cmd ~= "" then
|
||||||
return
|
pcall(function()
|
||||||
end
|
vim.cmd(cmd)
|
||||||
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -265,11 +244,12 @@ M._init = function(path)
|
||||||
"User",
|
"User",
|
||||||
{ pattern = "DirenvLoaded", modeline = false }
|
{ pattern = "DirenvLoaded", modeline = false }
|
||||||
)
|
)
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
vim.system(
|
vim.system(
|
||||||
{ M.config.bin, "export", "json" },
|
{ M.config.bin, "export", "vim" },
|
||||||
{ text = true, cwd = cwd },
|
{ text = true, cwd = cwd },
|
||||||
on_exit
|
on_exit
|
||||||
)
|
)
|
||||||
|
|
@ -629,7 +609,7 @@ M.setup = function(user_config)
|
||||||
pattern = ".envrc",
|
pattern = ".envrc",
|
||||||
group = group_id,
|
group = group_id,
|
||||||
callback = function()
|
callback = function()
|
||||||
M.refresh_status()
|
cache.status = nil
|
||||||
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
|
||||||
|
|
@ -639,7 +619,8 @@ 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()
|
||||||
M.refresh_status()
|
cache.last_check = 0
|
||||||
|
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