I'm James

Contributing to LunarVim

  • github
  • neovim

I decided to take the plunge to switch to Neovim late last year. I'd wanted to try out Vim or Neovim for quite sometime and the opportunity had finally arisen.

Initially I tried to roll my own config using a variety of resources from Github to Reddit and including those from CraftzDog (the creator of Inkdrop). There is a substantial amount of overhead required when starting to learn Neovim, on top of all the configuration, learning about ecosystem of plugins and Lua adds even more layers. While I was able to get a basic configuration setup, I wasn't particularly happy with it, partly having the frustation of being a beginner and not yet knowing what I wanted or what I could do. I decided I wanted to focus my inital time & effort using the editor, I'd then know if it's something I was going to continue with and also start to learn what I'd want from my own configuration.

During this time, I begun exploring different Neovim "starters" & distributions such as LunarVim and AstroNvim. I took the plunge with LunarVim as it's feature set and aesthetic met my needs plus I could easy tweak the configuration as required thanks to the way it's setup.

A couple of weeks into using LunarVim, I was browsing their Github issues and came across an issue. The issue contained some information from the projects core contributors and hadn't seen any attention for over a week; so I thought why not give it a shot. It felt the ideal way to start learning more about Neovim, LunarVim & Lua all while contributing back to the community.

I immediately got stuck into LunarVim's developer documentation and contribution guidelines to prepare myself.

A new and unfamiliar codebase is a somewhat daunting task. After some searching around online to find out more about Neovim and running commands, I begun by grepping over the codebase for keywords to start finding the files the change required. I did this using Telescope's live grep feature, opened everything I thought was related and started to build up a mental model of the project structure.

Upon submitting my PR I was anxious, eagerly checking my phone for updates. Within 24 hours, a core contributor had been in touch on my PR and discussions began. Over the course of a couple days, we had some back and forth discussion along with suggestions to improve my initial changes. For example, I'd initially not considered operating systems other than macOS (in hindsight a silly mistake), so we work together to support Linux and Windows as well. The core contributors were really helpful it terms of guiding me with changes and suggestions.

When it came to testing, as I only had access to macOS; I attempted to emulate Linux (Ubuntu) and Windows 11. Emulation is still in a maturing phase on Apple Silicon & I had issues getting Ubuntu running; fortunately a core contributor was happy to help. This in itself was a good experience as I had to refamiliarise myself with Windows and learnt a thing or two in the process although I won't be a Windows user any time soon!

After a couple of days, my PR was approved and merged. It was a rewarding achievement updating my LunarVim instance and seeing my change available after the merge! Despite it being a small and uncomplicated change, I felt a great sense of achievement and accomplishment.

Screenshot of Lunarvim with the changelog showing

Although the changes themselves weren't too tricky, a lot of headspace was taken up by a new project, processes and a new language. I without a doubt felt out of my comfort zone but with persistence and some patience, the experience and end result paid off. Between switching to Neovim and participating with this PR, I have certainly found and grown interest in the tooling I use and how learning more about it can make me a better engineer.

I'm James © 2023