My beautiful Linux development environment

My beautiful Linux development environment
Deepu K Sasidharan Deepu K Sasidharan| | 4 mins read |

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 GNU/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
  • Blogging
  • Youtube & Social media

Machine configuration

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.

Development tools

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.

Other notable development tools I use are GitKraken for Git repo management, Beyond Compare for code comparisons, VirtualBox, NVM for NodeJS version management and SDKMan for JDK version management.

Productivity tools

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.

Communication: Of course I use Slack and for video conference I use BlueJeans.

Screen capture: I use this nifty tool called Peek for screen recording and Shutter for screenshots.

Conclusion

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.

You can follow me on Twitter and LinkedIn.


Post 1 of 5 in series "GNU/Linux Environment for Developers".