My beautiful Linux development environment
This is part of my "Linux environment for developers" series
There is a new version of this post where I wrote about my current setup. Check it out here.
One of the questions that I often get after a conference talk is weirdly not about what I presented but about my Linux desktop environment. People are more curious about that beautiful distro rather than the awesome presentation I just did 😂
Not that I’m complaining, I love my desktop setup. I love it so much that I was afraid of getting a new PC when I was due for one. I was afraid that I would mess things up(I have done that many times in the past, I think Linux users can relate to me)
So I decided to capture the most important aspects of my distro for anyone interested in using Linux as their primary OS for development.
This is not just my work laptop; it’s my primary machine which I use for all of the below.
- Java, JS, TS, Go, Python & web development
- JHipster development
- Running multiple web applications locally
- Running Docker containers
- VirtualBox for Windows testing & other VM stuff
- Kubernetes, Terraform, CloudFormation development and deployments
- Azure, AWS & GCP deployments using required CLI tools
- Heavy browser usage
- Email, chat & video conferencing
- Plex media server
- Youtube & Social media
The configuration of the machine is also quite important for any development setup. So my laptop is a Dell Precision 5530 Mobile Workstation. I had the exact same setup with my old Dell 5510 as well, which is quite a similar configuration to 5530. I still have it as a backup Laptop, its two years old now, but it can still give most of the top-end laptops today a run for its money.
I used the custom configuration option from Dell to get the best possible setup at that time. It’s not cheap but my company, XebiaLabs, provided a handsome budget and I think it is worth every penny. This, in my opinion, is one of the best Laptops for developers. So here is what I have.
Processor: Intel® Core™ i9-8950HK CPU @ 2.90GHz × 12
Memory: 32GB, DDR4-2666MHz SDRAM, 2 DIMMS, Non-ECC
HDD: M.2 1TB NVMe PCIe SED class 40 SSD
Graphics: NVIDIA Quadro P2000 with 4 GB GDDR5 memory & Intel® UHD Graphics 630 (Coffeelake 3x8 GT2)
Wireless: Intel Wifi Link 9260 2x2 802.11AC + BT 4.2 vPro wireless card
Keyboard: English QWERTY US, backlit
Display: 15.6” FHD 1920x1080 Anti-Glare LED-backlit Non-touch IPS UltraSharp™
Battery: 6-cell (97Wh) Lithium-Ion battery with ExpressCharge™
Operating system and desktop environment
The most important, of course, is the operating system. I’m running Fedora 30 at the moment with GNOME 3.32.2 as the Desktop, and I’m very happy with it. I find Fedora more suitable for development machines than other distros as it has a short release cycle and is fairly stable, so you get the latest & stable software all the time.
What good is a desktop without a nice theme, right? GNOME is great when it comes to themes, and I went with Arc-Flatabulous theme and never looked back. For icons, I use Paper as I like the material icon theme.
Of course, it won’t be complete without some nice GNOME plugins. Below are the plugins that I use.
- Dash to Dock
- Always Zoom Workspaces
- Auto Move Windows
- Native Window Placement
- Launch new instance
- Steal My Focus
- Window List
- Applications Menu
- Clipboard Indicator
- Places Status Indicator
- TopIcons Plus
- User Themes
Now, these are mostly objective choices and really don’t matter as long as you are comfortable with the tools you choose. Below are my choices for some of the important categories for development. I’m not including obvious things like Vim, Git, NodeJS, Docker, Kubernetes, etc.
Shell: This is one of the most important for a developer. I use ZSH along with the awesome Oh My ZSH as my shell. Now, this won’t be complete without some nice plugins and themes. I use powerlevel9k theme with some customizations. I also use zsh-autosuggestions, git, docker, docker-compose, autojump, zsh-syntax-highlighting, dnf, and npm plugins for Oh My ZSH. Here is my
.zshrc with all the customizations. Update: A comment on this post suggested powerlevel10k as an alternative theme, and I tried it, and it turns out it is really way faster than
powerlevel9k. So I think I’m gonna use
powerlevel10k as my shell theme.
Terminal: What good is a nice shell without a good terminal. Fortunately, we have Tilix, one of the best terminal applications out there. It has workspaces, tabs, split windows, Quake mode, and so on.
Integrated development environment(IDE): IntelliJ IDEA Ultimate - I use this for Java & other JVM language Development
Code Editors: Visual Studio Code - My go-to editor. I love it. I use VSCode for web development, Go, Python, JS development, DevOps, and everything other than JVM languages. A VSCode setup is never complete without some good plugins. Here are the plugins that I’m using. You can run the script to install those.
Productivity tools are also quite important, and below are my choices.
Browser: Google Chrome is my primary browser. I also use Firefox & Opera sometimes. I do love Opera in terms of its UX, I would love to use it as my primary browser, but I miss everything I have synchronized with my Google account in Chrome.
Email: I use Mailspring as my e-mail client. It’s a fairly decent mail client with nice themes and a simple UI.
Office suite: I mostly use Google Docs & Microsoft office online, but when I have to work on something on my Desktop I use LibreOffice which is a good office suite and even handles Microsoft Office & Keynote formats.
There are many other small and nifty utilities that I use; most are command-line utilities. There are some notable mentions like Timeshift, which is nice for backing up your machine.
Of course, not everything is perfect in the Linux world, but it is the same with every OS. I was a long-time Windows user before switching to Linux. So like every Linux user, I have from time to time messed things up(With great power comes great responsibility, Peter). There are many quirks in the Linux world, but there is nothing that bothers me much. Some of the most annoying issues I had in the past are below, and for now, I don’t have any noticeable issues.
- Scroll position jumping when switching apps - Fixed after upgrading to Fedora 30
- Hibernation was broken - Fixed after upgrading to Fedora 30
- Audio output selection was broken when plugging in headphones- Fixed after Fedora 28 for me
I hope you find this useful. If you have any questions or if you think I missed something, please add a comment.
If you like this article, please leave a like or a comment.
Post 1 of 6 in series "Linux environment for developers".