My journey to Linux
I love playing video games, and I have a bulging collection of Steam games. I play at night when I’m not coding. But I also love programming, and this is where the dichotomy lies. I’m a web developer, so I also do design work. I use Affinity Suite (because Adobe is expensive and sometimes very inefficient), and in Linux, there are no tools that can replace my designs. I know that Krita, Inkscape, and GIMP exist, but let’s be honest; they are still far away. Nowadays, I do very little design and much more code, and I want to learn Rust and Docker. So, installing these things in Windows is a little hard. I must install all sorts of graphical programs and run VM-like environments. Therefore, I made the transition three times. Yep, three times, I installed Linux. First, there was Ubuntu.
Ubuntu and Vscode, the first step.
The journey through Ubuntu was a little rough. It installed very well. I installed it alongside Windows. It was not hard, but every time I turned on my computer, I had to select the operating system. I was designing in Windows and coding in Linux. I tried VS Code in Ubuntu, and it ran smoothly like butter, but then I had my first problem. My Nvidia hybrid graphics card. I needed to run something related to Optimus, and it worked very poorly. It was not recognizing my external monitor, etc. So, I decided to abandon Linux for Windows.
Fedora and NeoVim
When I removed Linux and started to use it again, everything was right, but I was missing the performance gain from Linux. I was designing less and less and playing less and less and doing more code, so I took the next step. I watched YouTube videos about Linux distros. I wanted something focused but not so difficult to learn, and I stumbled upon Fedora. I installed it, configured it, and tried a new code editor: Neovim. Neovim was hard to learn, hard to configure, hard to code in, hard to make completions work. I was asking myself, what the heck is an LSP? I learned all those concepts and failed very badly. I tried for days to become a better Vimer, but my experience was that I was slow. This time, I completely uninstalled Windows from my machine and took the step towards Linux. The ride was harder than before. My Nvidia hybrid graphics card was still a problem. I installed Windows again, and this time, I tried Neovim in Windows with an auto-configuration framework called LunarVim. It was great. So great that I decided this time to take a step even further.
Manjaro, my current setup
I installed Manjaro Linux, and it was beautiful. Now I know my way around the Linux land. I was configuring my Neovim experience from scratch. I was installing the packages required for my Nvidia graphics card to work properly, and now I understand how all the tools integrate with each other. And I have some tips to have a better experience as a web developer using Neovim with Linux.
My setup and Workflow
Here’s the edited version of the text with corrected grammar:
My Setup and Workflow
I configured NeoVim from scratch with the help of Primagean’s awesome video: 0 to LSP. I set up my own hotkeys, themes, and plugins. The plugins that I use are:
- LuaSnip: For useful snippets like extracting a React component to another file.
- cmp-nvim-lsp: A link for the completion plugin.
- gruvbox.nvim: My theme of choice!
- harpoon: A StarCraft-like file navigation.
- lsp-zero.nvim: Auto setup of most LSP configs.
- mason-lspconfig.nvim: A link for Mason with LSP config.
- mason.nvim: A tool for quick installing LSP, DAP, Linters, Formatters, etc.
- nvim-cmp: Completions for Neovim.
- nvim-comment: Set up quick comments.
- nvim-lspconfig: The LSP configuration of Nvim.
- nvim-treesitter: For syntax highlighting.
- packer.nvim: For installing plugins.
- plenary.nvim: I don’t know what this is, but it’s required, so it must be valuable.
- telescope.nvim: For finding files (the best plugin ever).
- zen-mode.nvim: A Zen mode for coding without distractions.
Those are my plugins of choice, and I don’t think I need anything more.
For my Linux system, I have installed something that improves my workflow:
- FNM: Faster node manager. I use this instead of NVM because NVM takes so much time to load. Your terminal runs slow after installing and activating NVM, but FNM is faster and written in Rust, by the way.
- Tmux-sessionizer: Made by Primagean, this simple script opens a Tmux instance of your project files. You can jump from project to project without worrying too much about it.
- Tmux: Required for having multiple terminal sessions and splits. Very useful for testing. My NeoVim runs slow after I
press the
key inside Tmux. So I needed to configure this set -sg escape-time 0
in your .tmux-config file.
With all of this, I have a workflow experience that I enjoy so much while working.
console.log("See ya another time!");