Why Every Developer Should Consider the Linux & Neovim Leap
Tags: tutorial, beginners, opensource, productivity
Published: 2023-09-17 04:42:04

# Table of Contents:

- <a href="#introdcution">Introduction</a>
- <a href="#change">Needing Change</a>
- <a href="#turning">Turning Point</a>
- <a href="#into">Into the Terminal</a>
    - <a href="#linux">Linux</a>
    - <a href="#neovim">Neovim</a>
- <a href="#looking">Looking Back, Looking Forward</a>
    - <a href="#benefits">List of Benefits</a>
- <a href="#guide">A Guide to Getting Started</a>


<a id="introduction"></a>
## Introduction

When I first began coding, few things were as intimidating as confronting a barrage of error messages in the terminal. Attempting to decipher these messages and pinpoint my missteps felt overwhelming. This initial experience instilled in me a genuine apprehension towards the terminal. It appeared far more intricate compared to my then-favored IDE, VSCode. Within VSCode, running code was as simple as a click of a button. For Git operations, a user-friendly GUI on the side shielded me from the underlying complexities. Moving, creating, copying, renaming files done with the click of my mouse. While these abstractions seemed helpful on the surface, they inadvertently fostered a superficial understanding. I felt confident, believing I had grasped the nuances of what I was doing. In reality, my comprehension of the terminal and its intricacies remained elementary.  

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kebxrpmdd62u4dh1dbsx.png)

---
<a id="change"></a>
## Needing Change

VSCode's comforts, once my sanctuary, started feeling more like a limitation. Whenever I faced challenges needing deeper system interactions or more nuanced controls, I'd dodge or find workarounds. Habitually, I'd resort to Stack Overflow, blindly copying solutions. This makeshift approach held until a project showcased my shortcomings. Up against a merge conflict, while my IDE hesitated, my colleague tackled it effortlessly using the terminal. This vivid contrast was a wake-up call that to grow, I needed to learn the terminal.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tebmqc3j89ucovkez6d7.png)

---
<a id="turning"></a>
## Turning Point

With this realization, I embarked on a quest to understand the terminal. My research led me to two pivotal decisions: transitioning to Linux and adopting Neovim. The appeal of Linux lay in its terminal-centric design; it compelled daily terminal interactions, something I've come to appreciate deeply. Neovim's allure came from an eye-opening video by ThePrimeagen titled "[My Developer Workflow - How I use i3, tmux, and vim.](https://www.youtube.com/watch?v=bdumjiHabhQ)" His seamless window navigation with i3 and rapid file transitions were nothing short of mesmerizing.  

If he so happens to read this, thanks for your constant content, vim btw.

---
<a id="into"></a>
## Into the Terminal

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sxb7zfdcghy4trvui2mk.png)

<a id="linux"></a>
- **Linux**: Transitioning from Windows to Ubuntu felt like navigating a maze. The initial days were filled with challenges: from decoding unfamiliar directories to wrestling with package installations. But, configuring i3 opened up a new realm of efficient window management, while tmux elevated my terminal game. By embracing these tools, what began as a daunting journey transformed into a masterclass in seamless navigation and multitasking. Ubuntu became less of an OS to adapt to and more of a playground.
<a id="neovim"></a>
- **Neovim:** Starting with Neovim was an adventure on its own. I chose the path less taken by avoiding pre-built configurations. Sure, it made my journey steeper than most, but the satisfaction? Unparalleled. I remember the euphoria of setting up my first plugin manager, tweaking the theme, and personalizing options. Every step felt like a revelation. While VSCode offered convenience, Neovim gave me control. But beyond its capabilities, what bolstered my Neovim experience was its incredible community. The /r/neovim subreddit became an invaluable resource for me, teeming with enthusiasts who were ever-ready to help, share, and guide. Each plugin I added, each configuration I tweaked, required research and decision-making. And clicking 'install' on VSCode just couldn't replicate that deep sense of engagement. After about a week of immersing myself, not only did I craft a working config I was proud of, but I also picked up a bit of Vimscript and Lua, thanks in part to the collective knowledge of the Neovim community.  

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ufn1bbcx9nywvuvqpu96.png)


---
<a id="looking"></a>
## Looking Back, Looking Forward

In another [blog post](https://dev.to/stungnet/the-silent-power-of-data-structures-and-algorithms-a-developers-guide-3g83) last week, I talked about how diving deep into Data Structures and Algorithms profoundly enhanced my coding skills. Similarly, my expedition within the terminal has reshaped my perspective. The more time I invested in this environment, the more intuitive it became. I've grown adept with key bindings and configuring to my liking. Currently, my arsenal comprises i3, Neovim, and Ubuntu. Coding on any other OS now feels like a step back; I miss that seamless dance between windows and tasks. 
<a id="benefits"></a>
**A list of benefits I've seen:**
- Mouse-Free Productivity: I find myself rarely using the mouse now. Engaging deeply with my code without switching between keyboard and mouse feels more fluid and immersive.
- Decoding Errors with Ease: Lengthy error messages that once overwhelmed me now seem more navigable. My relationship with them has evolved into one of understanding.
- Unveiling System Depths: Venturing into the terminal, I've gained a deeper grasp of the foundational technologies that govern our digital realms.
- Tailored Workspace: The power to mold and customize my environment to my exact liking is liberating. Every detail is a reflection of my preferences.
- Rapid File and Window Transitions: My productivity has soared due to the swift navigation between files and windows. Every second saved compounds over the course of a project.

**Some potential pitfalls:**
- Over-customization: The ability to tailor every detail can lead you down the rabbit hole of relentless tweaking. There's the temptation to perfect your config continuously. My advice? Once you have it in a functional, productive state, let it be for a month or so before revisiting. Nowadays, I rarely make changes to mine.  
- Steep Learning Curve: Diving into Linux or Neovim can be daunting for those accustomed to more user-friendly interfaces. The initial investment in learning can be high.

I wanted to share this journey with you because diving into Linux and Neovim opened new doors for me in coding. I genuinely believe they can offer you some fresh perspectives and tools, making coding even more enjoyable and efficient. Give it a whirl; it might just be the game-changer you didn't know you needed.

---
<a id="guide"></a>
## A Guide to Getting Started:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n1q8ecfvjtiywopiduvo.png)

If this post has peaked your interest in wanting to take that step into the terminal this list should do you well:

**Ubuntu Installation** : I use Learn Linux TV for all my Linux needs, he does great content - [Ubuntu 22.04 LTS - Full Installation Walkthrough](https://youtu.be/f_8cD4HFvhc?si=NKer5Qnx9-E7nE8r)

- **Neovim**:
    - **Prebuilt Configs** ‒ If you want to just test out Neovim without going through the configuration yourself you can start with a prebuilt config:
        - **LazyVim**: Where I would start with prebuilt: [LazyVim](https://www.lazyvim.org/)
            - A guide looking at the LazyVim setup: [Zero to IDE with LazyVim](https://www.youtube.com/watch?v=N93cTbtLCIM)
        - **LunarVim**: [LunarVim](https://www.lunarvim.org/)
        - **NvChad**: [NvChad](https://nvchad.com/) 
        - **AstroVim**: [Getting Started | AstroNvim](https://astronvim.com/) 

    - **Setting up your own config guides**:
        - **TJ DeVries**: [Effective Neovim: Instant IDE - YouTube](https://www.youtube.com/watch?v=stqUbv-5u2s) ‒ One of the Neovim contributor greats, taking you to an instant IDE.
        - **ThePrimeagen** : [0 to LSP : Neovim RC From Scratch - YouTube](https://www.youtube.com/watch?v=w7i4amO_zaE&t=1299s) ‒ Honestly just watch all his videos regarding vim/neovim, this is his most recent on setting up a config. 
        - **Chris@machine** : [Neovim IDE from Scratch - Introduction (100% lua config)](https://youtu.be/ctH-a-1eUME?si=anmImD7Nyl7fNpl8) ‒ Chris is the creator of LunarVim, this is where I started content wise I'm not sure how up to date it would be now, but still worth the mention.
        - **Josean Martinez**: [Josean Martinez - YouTube](https://www.youtube.com/@joseanmartinez/videos) ‒ Recently dropping some new content, his tutorials are worth the watch if you want to set your own up.
        - **Deams of Code**: [Dreams of Code - YouTube](https://www.youtube.com/@dreamsofcode/videos) ‒ Has a couple of specific Neovim configuration setups, including (Python, NodeJS, Golang, Rust) 
        - **Devaslife**: [How to set up Neovim for coding React, TypeScript, Tailwind CSS, etc on a new M2 MacBook Air] (https://www.youtube.com/watch?v=ajmK0ZNcM4Q&t=2524s) ‒ Might be a bit dated but I love his video styles.
    - **Learning to navigate in Vim**:
        - [Vim As Your Editor: Vim As Your Editor - Introduction](https://www.youtube.com/watch?v=X6AR2RMB5tE&list=PLm323Lc7iSW_wuxqmKx_xxNtJC_hJbQ7R) ‒ Series by ThePrimeagen 
 
    - **Helpful links**
        - [rockerBOO/awesome-neovim](https://github.com/rockerBOO/awesome-neovim): Collections of awesome neovim plugins. ‒ RockerBOO has a repo that has almost every plugin for Neovim by category, this is a gold mine.
        - [/r/neovim](https://www.reddit.com/r/neovim/) any questions go here the community is very welcoming and helpful.
        - [Home - Neovim](https://neovim.io/) ‒ Neovim site
        - [neovimcraft](https://neovimcraft.com/) ‒  Site related to configs and plugins available
        - [This Week in Neovim](https://dotfyle.com/this-week-in-neovim) - Neovim news

   - **Some Config Examples**
       - **Mine** : [link](https://github.com/0xlvl3/.dotfiles/tree/main/nvim/.config/nvim)
       - **ThePrimeagan**: [link](https://github.com/ThePrimeagen/init.lua/tree/249f3b14cc517202c80c6babd0f9ec548351ec71)
       - **folke**: [link](https://github.com/folke/dot/tree/master/nvim)
       - **josean-dev**: [link](https://github.com/josean-dev/dev-environment-files/tree/main/.config/nvim)

If you found value in this post, please give it a like or drop a comment. Your feedback helps and is much appreciated. Happy coding!