mirror of
https://github.com/NotAShelf/direnv.nvim.git
synced 2025-10-02 15:03:45 +00:00
docs: update API reference, features and TODO
This commit is contained in:
parent
4183b8e162
commit
1215bc8871
1 changed files with 169 additions and 17 deletions
186
README.md
186
README.md
|
@ -1,39 +1,191 @@
|
||||||
# direnv.nvim
|
# direnv.nvim
|
||||||
|
|
||||||
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.
|
`direnv.vim` and written in Lua for better performance and maintainability.
|
||||||
|
|
||||||
|
## ✨ Features
|
||||||
|
|
||||||
|
- Seamless integration with direnv for managing project environment variables
|
||||||
|
- Automatic detection of `.envrc` files in your workspace
|
||||||
|
- Proper handling of allowed, pending, and denied states
|
||||||
|
- Built-in `.envrc` editor with file creation wizard
|
||||||
|
- Statusline component showing real-time direnv status
|
||||||
|
- Event hooks for integration with other plugins
|
||||||
|
- Comprehensive API for extending functionality
|
||||||
|
|
||||||
|
### 📓 TODO
|
||||||
|
|
||||||
|
There are things direnv.nvim can _not_ yet do. Mainly, we would like to
|
||||||
|
integrate Treesitter for **syntax highlighting** similar to direnv.vim.
|
||||||
|
Unfortunately there isn't a TS grammar for Direnv, but we can port syntax.vim
|
||||||
|
from direnv.vim.
|
||||||
|
|
||||||
|
Additionally, it might be worth adding an option to allow direnv on, e.g.,
|
||||||
|
VimEnter if the user has configured to do so.
|
||||||
|
|
||||||
## 📦 Installation
|
## 📦 Installation
|
||||||
|
|
||||||
Install `direnv.nvim` with your favorite plugin manager, or clone it manually.
|
Install `direnv.nvim` with your favorite plugin manager, or clone it manually.
|
||||||
You will need to call the setup function to load the plugin.
|
You will need to call the setup function to load the plugin.
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
- Neovim 0.8.0 or higher
|
||||||
|
- [direnv](https://direnv.net/) installed and available in your PATH
|
||||||
|
|
||||||
|
### Using lazy.nvim
|
||||||
|
|
||||||
|
```lua
|
||||||
|
{
|
||||||
|
"NotAShelf/direnv.nvim",
|
||||||
|
config = function()
|
||||||
|
require("direnv").setup({})
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## 🚀 Usage
|
## 🚀 Usage
|
||||||
|
|
||||||
direnv.nvim will automatically call `direnv allow` in your current directory if
|
direnv.nvim will manage your .envrc files in Neovim by providing commands to
|
||||||
`direnv` is available in your PATH, and you have auto-loading enabled.
|
allow, deny, reload and edit them. When auto-loading is enabled, the plugin will
|
||||||
|
automatically detect and prompt for allowing `.envrc` files in your current
|
||||||
|
directory.
|
||||||
|
|
||||||
## 🔧 Configuration
|
### Commands
|
||||||
|
|
||||||
|
- `:Direnv allow` - Allow the current directory's .envrc file
|
||||||
|
- `:Direnv deny` - Deny the current directory's .envrc file
|
||||||
|
- `:Direnv reload` - Reload direnv for the current directory
|
||||||
|
- `:Direnv edit` - Edit the `.envrc` file (creates one if it doesn't exist)
|
||||||
|
- `:Direnv status` - Show the current direnv status
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
You can pass your config table into the `setup()` function or `opts` if you use
|
You can pass your config table into the `setup()` function or `opts` if you use
|
||||||
`lazy.nvim`.
|
`lazy.nvim`.
|
||||||
|
|
||||||
### Options
|
### 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
|
```lua
|
||||||
require("direnv").setup({
|
require("direnv").setup({
|
||||||
autoload_direnv = true,
|
-- Path to the direnv executable
|
||||||
|
bin = "direnv",
|
||||||
|
|
||||||
|
-- Whether to automatically load direnv when entering a directory with .envrc
|
||||||
|
autoload_direnv = false,
|
||||||
|
|
||||||
|
-- Statusline integration
|
||||||
|
statusline = {
|
||||||
|
-- Enable statusline component
|
||||||
|
enabled = false,
|
||||||
|
-- Icon to display in statusline
|
||||||
|
icon = "",
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Keyboard mappings
|
||||||
|
keybindings = {
|
||||||
|
allow = "<Leader>da",
|
||||||
|
deny = "<Leader>dd",
|
||||||
|
reload = "<Leader>dr",
|
||||||
|
edit = "<Leader>de",
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Notification settings
|
||||||
|
notifications = {
|
||||||
|
-- Log level (vim.log.levels.INFO, ERROR, etc.)
|
||||||
|
level = vim.log.levels.INFO,
|
||||||
|
-- Don't show notifications during autoload
|
||||||
|
silent_autoload = true,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Statusline Integration
|
||||||
|
|
||||||
|
You can add direnv status to your statusline by using the provided function:
|
||||||
|
|
||||||
|
```lua
|
||||||
|
-- For lualine
|
||||||
|
require('lualine').setup({
|
||||||
|
sections = {
|
||||||
|
lualine_x = {
|
||||||
|
function()
|
||||||
|
return require('direnv').statusline()
|
||||||
|
end,
|
||||||
|
'encoding',
|
||||||
|
'fileformat',
|
||||||
|
'filetype',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
-- For a Neovim-native statusline without plugins
|
||||||
|
vim.o.statusline = '%{%v:lua.require("direnv").statusline()%} ...'
|
||||||
|
```
|
||||||
|
|
||||||
|
The statusline function will show:
|
||||||
|
|
||||||
|
- Nothing when disabled or no .envrc is found
|
||||||
|
- "active" when the .envrc is allowed
|
||||||
|
- "pending" when the .envrc needs approval
|
||||||
|
- "blocked" when the .envrc is explicitly denied
|
||||||
|
|
||||||
|
## 🔍 API Reference
|
||||||
|
|
||||||
|
**Public Functions**
|
||||||
|
|
||||||
|
- `direnv.setup(config)` - Initialize the plugin with optional configuration
|
||||||
|
- `direnv.allow_direnv()` - Allow the current directory's `.envrc` file
|
||||||
|
- `direnv.deny_direnv()` - Deny the current directory's `.envrc` file
|
||||||
|
- `direnv.check_direnv()` - Check and reload direnv for the current directory
|
||||||
|
- `direnv.edit_envrc()` - Edit the `.envrc` file
|
||||||
|
- `direnv.statusline()` - Get a string for statusline integration
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
```lua
|
||||||
|
local direnv = require("direnv")
|
||||||
|
|
||||||
|
direnv.setup({
|
||||||
|
autoload_direnv = true,
|
||||||
|
statusline = {
|
||||||
|
enabled = true,
|
||||||
|
},
|
||||||
|
keybindings = {
|
||||||
|
allow = "<Leader>ea", -- Custom keybinding example
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- You can also call functions directly
|
||||||
|
vim.keymap.set('n', '<Leader>er', function()
|
||||||
|
direnv.check_direnv()
|
||||||
|
end, { desc = "Reload direnv" })
|
||||||
|
```
|
||||||
|
|
||||||
|
### Events
|
||||||
|
|
||||||
|
The plugin triggers a User autocmd event that you can hook into:
|
||||||
|
|
||||||
|
```lua
|
||||||
|
vim.api.nvim_create_autocmd("User", {
|
||||||
|
pattern = "DirenvLoaded",
|
||||||
|
callback = function()
|
||||||
|
-- Code to run after direnv environment is loaded
|
||||||
|
print("Direnv environment loaded!")
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🫂 Special Thanks
|
||||||
|
|
||||||
|
I extend my thanks to the awesome [Lychee](https://github.com/itslychee),
|
||||||
|
[mrshmllow](https://github.com/mrshmllow) and
|
||||||
|
[diniamo](https://github.com/diniamo) for their invaluable assistance in the
|
||||||
|
creation of this plugin. I would also like to thank
|
||||||
|
[direnv.vim](https://github.com/direnv/direnv.vim) maintainers for their initial
|
||||||
|
work.
|
||||||
|
|
||||||
|
## 📜 License
|
||||||
|
|
||||||
|
direnv.nvim is licensed under the [MPL v2.0](./LICENSE). Please see the license
|
||||||
|
file for more details.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue