My dev setup

I'm a software developer and I love Linux and the terminal. Here's how I set things up

Overview

Setup

To do this you need user access (not root) on any Linux system. It also works in containers. I recommend Debian Stable but this should work for any distro.

  • Install requirements curl and git
  • Install Homebrew
  • Create a file in your home folder called .Brewfile
  • Add the following to this .Brewfile:
brew "mise"
brew "just"
brew "nu"
brew "gum"
brew "nvim"
brew "helix"
brew "mc"
brew "lazygit"
brew "zellij"
brew "fd"
brew "ripgrep"
  • Run brew bundle --global
  • Update .bashrc to support brew and mise

Optionally, to use nushell:

  • Update config nu to support brew and mise
  • Remember to run nu when you want Nushell

How does this actually work?

Let's say I want to start a new Java project.

cd ~/Projects
mise exec maven -- mvn archetype:generate
# follow maven's instructions to make "my-java-project"
cd my-java-project
touch mise.toml
mise use java
mise use maven

Now I have the folder my-java-project, and when I enter it I automatically get Java and Maven added to my dev environment. Once I leave the folder, no more Java or Maven. This means I can work on different Java projects without juggling Java versions.

mise exec is like npx in that I can run tools without installing them. This lets me set up pretty much anything without adding it to my global dev environment. I can do the above with uv or poetry for a Python project.

What about IDE support?

If I'm using Neovim with LazyVim I just have to use it's built in tool Mason to install whatever LSP servers I want. For Java that would be jdtls. For Python that would be basedpython + ruff + ty

If I'm using Helix I can install these LSP servers through Homebrew and Helix just picks them up.

More info

Over time I will make posts going into detail on why I do things this way, and why I picked this solution over others. Until then, this is a nice start.