Dotfiles
I’ve spent way too much time tweaking my Linux setup. Most of my work is on Debian. I appreciate its stability, but I dislike how “stale” the default settings feel. Over the past year, I’ve changed it into a lean coding machine. It’s not just about looks; it’s about reducing the friction between my brain and the code.
Here’s a breakdown of the main parts of my setup and why I chose them.
1. Neovim: Beyond the IDE
I finally switched to Neovim, and I’m never going back. You can find my full config in the nvim/ directory of my dotfiles repo.
I started with kickstart.nvim. If you’re worried about configuring a text editor from scratch, start there. It gives you a solid foundation with LSP, Telescope, and Treesitter without the extra baggage of “distributions” like AstroVim or LunarVim.
The biggest game-changer for me was Telescope. Being able to fuzzy-find through files, search for strings, and jump to definitions without leaving the home row is addictive. Using it makes VS Code feel slow.
2. The Terminal: Custom Zsh
I’m a Zsh user. I know Fish is easier and Nushell is more modern, but Zsh strikes the right balance because it’s POSIX-compatible and has an amazing range of plugins.
For a long time, I used Oh My Zsh. It’s good for beginners, but I eventually noticed it was slowing down my shell startup time and i wanted to understand the way my shell configuration works. One day, I deleted the folder and started a .zshrc from scratch.
I manually added what I actually needed: zsh-autosuggestions and zsh-syntax-highlighting. For the prompt, I’m using Starship. It’s fast and looks great out of the box, but I’m starting to want to write my own shell prompt just for fun.
3. Tiling Window Managers: BSPWM
I’ve tried a lot of tiling window managers. I started with i3, tried Sway and Awesome, and even explored Hyprland (which is beautiful but felt too heavy for my Debian workflow).
Right now, I’m settled on BSPWM (Binary Space Partitioning Window Manager).
Why BSPWM? It perfectly follows the Unix philosophy; it doesn’t even handle keybindings. You use a separate daemon called sxhkd for that. This separation makes the whole system feel modular and very stable. For the status line, I use Polybar. It’s highly configurable and doesn’t get in the way.
4. How I Manage the Chaos
If you’re not using version control for your configs, you’re taking a risk. I manage everything with a simple Git repo. Whenever I make a change that doesn’t break anything, I push it. This makes setting up a new machine a 5-minute task instead of a 5-hour headache.
Finding the balance between “ricing” for the sake of it and actual productivity is a constant struggle. But every time I Super+enter into a new terminal window that opens instantly, I know it was worth it.