These are your father's parentheses.
Elegant weapons for a more... civilized age.
— xkcd/297
This config was a response to new configs that pop up, with very abstracted and complex codebases, such as NvChad. They try to be a one-size-fits-all config. NvChad and LunarVim both try to fit as much overall functionality as possible and needlessly lazy load everything, when it really isn't needed. Complex codebases lead to less freedom for end-user extensibility. Try forking NvChad and making your own configuration out of it. Everything is tied to the userConfig, and you rely on the maintainer of said code to implement features.
Nyoom.nvim provides a solution to these problems by providing only the necessary code in order to make a functioning configuration. The end goal of nyoom.nvim is to be used as a base config for users to extend and add upon, leading to a more unique editing experience. Its relatively small and simple, offers the bare minimum needed plugins to have a powerful config, and is suited to my needs, but can just as easily be suited to yours!
I recommend not to clone and directly install this config, but to fork it, inspect the code, and adjust it to your liking. The best neovim configuration is what you make, and this config is only supposed to provide you the tools to do so.
The only dependencies are neovim-nightly
and git
.
Install the following dependencies:
git clone --depth 1 https://github.com/shaunsingh/nyoom.nvim.git ~/.config/nvim
nvim
If you're using hotpot (default), enter neovim, exit neovim, enter it again, then run :PackerSync
. (The restart is nessecary for neovim to load the newly compiled code).
If you're using tangerine, run :FnlCompile!
, then run :PackerSync
Requires nix version > 21.11, with experimental features flakes
and nix-commands
enabled
git clone --depth 1 https://github.com/shaunsingh/nyoom.nvim.git && cd nyoom.nvim
nix develop
Then run nvim
as usual, and :PackerSync
to update/install plugins
Nyoom.nvim is designed against the mantras of doom-emacs: (shamelessly copy pasted)
It also aligns with many of Doom's features:
use-package
, powered by Packer.nvim). Install packages from anywhere, and pin them to any commit.However, it also disagrees with some of those ideals
v0.3.4 - Released 5/22/2022
vim.opt.background
. Light palette addedv0.3.3 - Released 5/14/2022
v0.3.2 - Released 5/08/2022
v0.3.1 - Released 5/03/2022
filetype.lua
stopped working. I've sinced reverted back to init.lua
for now), and lua dependencies (md5 lib) were removed.nvim_set_hl
.Fast loading and package management using Nyoom! macros and Packer.nvim
Lispy editing using conjure parinfer-rust
Lightweight statusline written in fennel
Note-taking and Getting Things Done with neorg
Syntax highlighting and Error checking with Neovim's builtin LSP, lspconfig, trouble.nvim and nvim-treesitter.
Quick Completion and Wildmenu powered by nvim-cmp and copilot.lua
Pretty notifications and focused editing using TrueZen and nvim-notify
Informative Keybinds, Native Fuzzy Finding, and fast file history using nvim-telescope, telescope-fzf-native.nvim, telescope-frecency.nvim, sqlite.lua and which-key.nvim
Themeing with nvim-base16 and base16-carbon-dark
Magit-like commits with Neogit
Fennel is a programming language that brings together the speed, simplicity, and reach of Lua with the flexibility of a lisp syntax and macro system. Macros are how lisps accomplish metaprogramming. You’ll see a lot of people treat lisp macros with a kind of mystical reverence. While several other languages have macro systems, the power of macros in lisps stem from allowance of lisps to you to write programs using the same notation you use for data structures. Remember: code is data, and we just need to manipulate data.
While people largely over exaggerate the usefulness of macros, there are a few places where macros shine, and configurations are one of them. Utilizing macros, we can essentially create our own syntax. For example, lets take a look at the set!
macro I've used. set!
is used for vim.opt
options. For example, (set! mouse :a)
expands to vim.opt["mouse"]="a"
. If a string or number isn't passed to set!
, it will assume true. e.g. (set! list)
will expand to vim.opt["list"]=true
. Similarly if the option starts with no, it will assume false e.g. (set! noru)
will expand to vim.opt["ru"]=false
.
With the macros provided, you can configure neovim just as easily, or dare I say easier than you can with Lua or vimscript, while retaining the performance benefits of LuaJIT.
All the magic happens in the fnl/
folder. Some files to check out:
init.fnl
: Same as your init.lua would be, just in fennel! Disables some plugins and loads the core configpack/
: This is where all your plugins go. The pack.fnl
file is in charge of configuring packer, installing, as well as loading pluginscore/defs.fnl
: This is where neovim settings go. core/maps.fnl
: This is where mappings go. macros/
: In lisps, macros allow the user to define arbitrary functions that convert certain Lisp forms into different forms before evaluating or compiling them. This folder contains all the macros that I (and a few others, thanks David and Kat!) have written to help you out on your neovim journey. I don't recommend touching this file unless you know what you're doingFor most people, chances are you haven't even heard of fennel before. So where should you start?
If you have trouble configuring neovim to your needs, check out Antifennel to see how lua code compiles back to fennel! However, the generated code isn't always the cleanest, so its recommend you use it as a last resort. If you need any help, feel free to reach out to me via email or discord, and be sure to join the Conjure Discord too!
While fiddling with the config, you can check if the things are not broken yet:
<localleader>er
, by default <space>mer
)<localleader>eb
, by default <space>meb
):!neovim --headless +PlugSync
If you have an issue with a plugin in Nyoom.nvim, first you should report it to Nyoom.nvim to see if it's an issue with it. Please don't bother package maintainers with issues that are caused by my configs, and vice versa. I'm new to fennel, so don't hesitate to let me know my lisp-fu sucks!