DEV Community

Cover image for My beautiful Linux development environment
Deepu K Sasidharan
Deepu K Sasidharan

Posted on • Updated on • Originally published at deepu.tech

My beautiful Linux development environment

Originally published at deepu.tech.

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.

Top comments (136)

Collapse
 
ssimontis profile image
Scott Simontis

I'm currently interested in trying to automate my environments. In the past, especially on OS X, I have spent days getting my environment perfected. I probably couldn't do it again if I had to rebuild the precise environment, so I am working on scripting out my configuration, keeping configurations in source control, and fun stuff like that so that my environment is more disposable in the future and I can experiment freely knowing everything can easily be rebuilt.

Collapse
 
ballpointcarrot profile image
Christopher Kruse

A great first step, if you haven't done it yet, is to save your configuration files in your home directory in a dotfiles git repo (here's mine for example). While you may need to do a couple of steps to get ready to pull it down, it can shave a bunch of time getting things like common tool and editor configs set up quickly.

Collapse
 
ssimontis profile image
Scott Simontis

I did just start doing that, also handy for keeping my org mode files in sync. I am trying to learn Puppet as well, but that's going to take some time!

Collapse
 
kmbremner profile image
Keith Bremner

I do the same. Also, have a separate repo for my IDE (PHPStorm) settings.

Collapse
 
fazlearefin profile image
Fazle Arefin

For Linux, check out the ansible playbooks I wrote github.com/fazlearefin/ubuntu-dev-...

Collapse
 
deepu105 profile image
Deepu K Sasidharan

Yes that's something I'm trying to do as well. A fully automated setup for Fedora is the dream. This article is kind of a first step for me

Collapse
 
flrnd profile image
Florian Rand • Edited

Hey great article! this maybe can serve as inpiration. I have for both Fedora and Ubuntu (it is also possible that it doesn't work, I remember there were a few bugs :). Cheers!

GitHub logo flrnprz / ansible

Workstation auto-conf

Workstation ansible playbooks

Need ansible installed in your local machine.

Command line

$ ansible-pull -U https://github.com/flrnprz/ansible.git
Testing:
$ ansible-pull -U https://github.com/flrnprz/ansible.git --check



Thread Thread
 
deepu105 profile image
Deepu K Sasidharan

Thank you

Collapse
 
dbwest profile image
David West

Nixos

Collapse
 
kmbremner profile image
Keith Bremner

You should check this out: github.com/geerlingguy/mac-dev-pla...

It uses Ansible and home brew to help automate Mac setup.

Collapse
 
claudemuller profile image
LЦҜΞ FILΞЩДLҜΞЯ

I do the same as well as make use of a utility called GNU Stow to manage said configs

Collapse
 
daisp profile image
Danny Priymak

That's a great idea for a write-up I would totally read the shit out of. Would love to hear about your progress and conclusions.

Collapse
 
elabftw profile image
eLabFTW

I use Arch BTW.

Collapse
 
deepu105 profile image
Deepu K Sasidharan • Edited

Its a great choice

Collapse
 
elabftw profile image
eLabFTW

Yes it is, but my comment was not serious, just a reference to the meme: google.com/search?q=i+use+arch+btw ;)

Collapse
 
hymanzhan profile image
Xucong ZHAN

I am surprised to find such a similar Linux config to my own!
I also use Arc theme albeit a slightly different variant called X-Arc-Darker with the paper icon theme.
I also run Fedora 30 (the main laptop is running Pop_OS! though due to Nvidia driver stability issue).
Also using Tilix, Mailspring, ohmyzsh with powerlevel9k, VS Code, GitKraken, DashToDock, Topicon Plus, etc. Doing web dev with Django and Angular most of the time.

So at least on the superficial side, the setup is pretty similar :D. Thanks for the article~

Collapse
 
deepu105 profile image
Deepu K Sasidharan

Try powerlevel10k you won't regret

Collapse
 
hymanzhan profile image
Xucong ZHAN

yep, will try~
I also find the spaceship theme very attractive (just like those icons XD)

Thread Thread
 
romkatv profile image
Roman Perepelitsa

Powerlevel10k is 28 times faster than Spaceship in a representative benchmark: reddit.com/r/zsh/comments/c3osfa/p.... Spaceship is faster than Powerlevel9k.

Thread Thread
 
hymanzhan profile image
Xucong ZHAN

WOW, that's some number. Will definitely try it out!

Collapse
 
oshiole profile image
Mubarak Yaqoub-Okponobi

How is your experience with Pop_OS!. Is it as great and clean as advertised

Collapse
 
hymanzhan profile image
Xucong ZHAN

Sorry for getting back to you this late. I don't check the notification very frequently. -.-

Getting to your question, yes, at least I think so.
The nicest thing about PopOS is hardware compatibility. Most distros don't respect the fact that most laptops have hybrid graphics. For me, providing an NVidia option OOB is highly appreciated.

Regarding performance, I think some YT channels compared it to Ubuntu and came to the conclusion that it was actually a bit snappier and performs a bit better in games. I have not used Ubuntu since 16.04, which gave me horrible memories at the time btw, so I cannot attest that. But I can attest that it runs as snappy as a vanilla Fedora of the same age, and ran much faster compared to Zorin OS 15 when it came out.

I don't know your definition of "clean" but I don't think it is bloated. It contains many PopOS-specific plugins that fit in really well, so the experience is cohesive. I am not a fan of their design aesthetics, especially the choices of fonts, colors and icon styles, but it is well-thought-out and well-put-together.

So yeah, my experience with PopOS is largely positive. There are some issues which you would be able to find in their Github issues but generally, they are not deal breaker.

Collapse
 
prahladyeri profile image
Prahlad Yeri • Edited

Nice!

I personally prefer XFCE desktop environment (Xubuntu LTS to be specific) as performance is more important to me than theming and UI enhancements. And besides, I like its minimal RAM consumption (yeah, 32GB is lots of RAM but even that gets scarce when you get into web development!).

For emails, I like thunderbird which is a wonderful email client. I don't like Mailspring for two reasons:

  1. Electron is a hog on resources.
  2. Its proprietary and closed-source in nature.

LibreOffice is great for office work, yeah. And I also use GIMP for image editing and meld for file/folder comparison (which is similar to BeyondCompare).

Apart from that, I use a whole lot of other linux tools like geany, synaptic, tmux, dict, etc..

Collapse
 
deepu105 profile image
Deepu K Sasidharan

If you don't care about UI/UX then, of course, there are distros and DEs that are better. But I'm a sucker for nice UI/UX and Gnome has one of the best in Linux world. Also, I have not encountered any performance issue with this setup so far. I believe you would notice it only in a less powerful laptop.

I tried Thunderbird and Evolution, but they were too cluttered for my taste. I like the minimal UX of Mailspring. I don't notice resource hog. It's not closed source see this github.com/Foundry376/Mailspring

And of course, GIMP is a given, though I miss Photoshop. I'll try Meld.

Collapse
 
moopet profile image
Ben Sinclair

If you don't care about UI/UX then, of course, there are distros and DEs that are better

I think this is very misleading. UX is user experience and that experience depends on a lot of things. My experience on a slower laptop with a heavyweight DE is going to be worse than my experience with a lightweight DE on the same hardware. Simply correlating UX with things looking pretty is not helpful in the real world. My experience using a different desktop paradigm is also going to be very subjective.

Thread Thread
 
deepu105 profile image
Deepu K Sasidharan

Agree I should have been clearer. I was talking about a nice UI and yes UX is subjective

Collapse
 
moopet profile image
Ben Sinclair • Edited

It's not closed source see this github.com/Foundry376/Mailspring

From the link you gave:

Mailspring's sync engine is spawned by the Electron application and runs locally on your computer. It will be open-sourced in the future but is currently closed source. (emphasis mine)

Thread Thread
 
deepu105 profile image
Deepu K Sasidharan

Ya, the sync engine is not oss. I was referring to the client itself. Anyway I don't consider that as a negative. Being a OSS developer myself IMO, being closed source doesn't make something bad.

Collapse
 
Sloan, the sloth mascot
Comment deleted
Collapse
 
deepu105 profile image
Deepu K Sasidharan

May be you are not using it for the right purpose. Anyway everyone has the right to choose and use what they like. Also I don't understand the Windows relationship here

Collapse
 
edwrdtjustice profile image
Edwrd T

I was delighted to see another power user with VScode. I think OP is just speaking out of his something and assuming it's just for .net

Collapse
 
mak12776 profile image
Mohammad Amin Khakzadan

Windows doesn't have relationship with VSCode. maybe using VSCode on fedora or debian do not make any problem.

But, individually, I dislike text editors that you have to work with them by mouse.

Thread Thread
 
deepu105 profile image
Deepu K Sasidharan

That's personal preference, I would prefer these to VIM/Emacs for example.

Thread Thread
 
mak12776 profile image
Mohammad Amin Khakzadan

Each view has its own value and respect.

Thread Thread
 
whizkevina profile image
Aina Oluwatimilehin

Have you try Webstorm, so so nice...

Thread Thread
 
deepu105 profile image
Deepu K Sasidharan

I don't any difference between webstorm and IntelliJ with JS plugins. I still prefer VSCode for front end dev

Thread Thread
 
deepu105 profile image
Deepu K Sasidharan

I have tried it briefly once. I don't see any difference between webstorm and IntelliJ with JS plugins. I still prefer VSCode for front end dev

Collapse
 
jmplourde profile image
Jean-Michel Plourde

I switched from Unbuntu 18.04 to Fedora 30. Then I realised docker was still not supported so I reverted to Fedora 30. I couldn't live more happily without those PPAs.

How did you get around for fedora 30 and docker ?

Collapse
 
deepu105 profile image
Deepu K Sasidharan

I don't understand your question. Docker was always supported on Fedora. I use docker everyday. It works fine without any issues.
docs.docker.com/install/linux/dock...

Collapse
 
jmplourde profile image
Jean-Michel Plourde

The third paragraph only Fedora 28 and 29 are supported. I tried with 30 but you had to go through the unstable channel to get anything and I wasn't willing to do it to develop.

Thread Thread
 
deepu105 profile image
Deepu K Sasidharan

I already had docker installed and I upgraded to Fedora 30. So docker still works fine. I do need to check the PPA situation. I think maybe it's just that they haven't updated the PPA for docker yet. I see this issue github.com/docker/for-linux/issues...

Anyway, for me, it's not a big deal to use repo for 29 or test repo but if you find it a problem may be better to stay on Fedora 29 until 30 is stable and all repo is available

Thread Thread
 
jmplourde profile image
Jean-Michel Plourde

Yes, that's what I do. It's only docker not being supported on 30 that "holds me back". 29 being an LTS is good until then.

Thread Thread
 
deepu105 profile image
Deepu K Sasidharan

Btw did you try sudo dnf install --releasever=29 docker-ce docker-ce-cli containerd.io

Thread Thread
 
wei2much profile image
Wei Guo

try out podman! Fedora 31 changed to cgroup v2.0 so docker is no longer compatible at the moment. check out podman, a rootless alternative to docker. you can easily install and add alias docker='podman' to your .bashrc or .zshrc file.

Thread Thread
 
deepu105 profile image
Deepu K Sasidharan

For now, I have changed startup to use cgroup v1.0, but ya I need to try Podman

Collapse
 
anortef profile image
Adrián Norte

If you like Fedora (I do too) maybe you should give a try to Manjaro.

Collapse
 
jmplourde profile image
Jean-Michel Plourde

My coworker uses Manjaro. Looks like a compromise between Arch and Fedora. It is definitely the next distro I'll try.

Collapse
 
deepu105 profile image
Deepu K Sasidharan

I'll check it out

Collapse
 
jmrsuarez profile image
Julio Suarez (Juls Schwartz)

Help, i am trying to develop a web app on javascript full stack, i have installed on fedora core 36 node and npm, and vscode, but when i use node command on the internal terminal of vscode i receive the message "command not found" i have inserted the path but it does not work. do you know a guide or can please tell me what other component or configuration i am missing?

Collapse
 
deepu105 profile image
Deepu K Sasidharan

Are you able to run node/npm on other terminals, may be its not properly set on your PATH

Collapse
 
sebastiandg7 profile image
Sebastián Duque G

Thanks for sharing this setup! I'm currently using a very stable, ubuntu based distro built wih UI/UX in mind: Pop! OS. It's smooth, beautiful and works! You should take a look at it.

Off topic (If there is a space for this here): I'm a BIG fan of JHipster. Since the first try of this generator in 2017 I came across a very important doubt: How to handle generated code maintainability when upgrading the JDL model? I know you can create some /api/extended/... controllers, extend the service layer to create your own business logic, create your own repositories for custom querys.. and it's great, this way your custom code will not be overwritten. But, I don't want to have an /api/my-entity/delete endpoint published with no authorization restrictions over a business sensitive entity.

If been trying different options but I have found some points which I don´t feel "clean" with:

  • I don´t want to be deleting the JHipster generated controllers in each entity update.
  • Having your true business logic under the /api/ext(ended)/ base path is not "REST aesthetic".

Do you have any recommendation for this?

Collapse
 
deepu105 profile image
Deepu K Sasidharan

Unfortunately this something we are still trying to solve. I think a better place to discuss this would in the Jhipster gitter channel

Collapse
 
jurajmlich profile image
Juraj 🇪🇺

I also have the Dell Precision 5530 but seem to have problems with the fans. They seem to be spinning constantly when the laptop is charging (they stop if I unplug the charger). Do you have similar issues?

Otherwise, great article, thanks! :)

Collapse
 
deepu105 profile image
Deepu K Sasidharan

Also I hope you have latest bios firmware and stuff. Else probably you need to visit the Dell service. I have 2 precision machines and don't have this issue. Few of my colleagues also have this machine.

Collapse
 
jurajmlich profile image
Juraj 🇪🇺

Yep, latest bios / drivers. Seems like I will really need to pay them a visit :)

Thanks, have a nice day!

Some comments may only be visible to logged-in visitors. Sign in to view all comments.