Frosty is a modern and fully configured development environment for Neovim, with a focus on functionality and looks. Its designed to be best used as a Nix package, whilst still being compatible on systems without it.
Make sure that the flake
and nix-command
experimental features have been enabled.
To try frosty without installing:
nix run github:SystematicError/frosty-vim
git clone https://github.com/SystematicError/frosty-vim ~/.config/nvim --depth 1
These are the defaults, the config can be tweaked to add further support as needed.
Syntax highlighting and Treesitter based functionality for 300+ languages are provided via parsers from nixpkgs. Additionally, further support is provided for the following languages:
Language | Language Server | Formatter |
---|---|---|
Lua | luals | stylua |
Nix | nil | alejandra |
Python | basedpyright | ruff |
Rust | rust-analyzer | rustfmt |
Shell | bashls | shfmt |
+ Languages supported by the Biome toolchain
The flake.nix
file defines how the Frosty package gets built. Stuff like runtime dependencies and Treesitter parsers are defined there.
Frosty can also load a custom userconfig file through the FROSTY_USERCONFIG
environment variable, without needing to modify the flake itself! Here's an example:
-- File path: `~/frosty.lua`
-- Send a notification after starting up
vim.schedule(function()
vim.notify "Hello from the userconfig!"
end)
-- The userconfig file should return a `LazySpec` (https://lazy.folke.io/spec)
return {
"alec-gibson/nvim-tetris",
lazy = false,
config = false,
}
-- The :Tetris command should now be available if the userconfig loads correctly
Now, running the command given below will load the userconfig:
FROSTY_USERCONFIG="$HOME/frosty.lua" nvim
Note
Fetching extra plugins via the userconfig file will require you to have git
installed. After fetching a new plugin, Lazy might throw an error, but you can safely ignore this and restart Neovim.