My VS Code setup - Making the most out of VS Code

Originally published at deepu.tech.

Please follow me on Twitter for updates.

One of the questions that I get quite often 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

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 2 years old now but 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 doesn'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 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 only 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. Its 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.