My Ubuntu Development Desktop Setup

Ricardo Griffith
10 min readNov 1, 2020

Over the years, I developed on both Windows and Mac operating systems using a variety of development tools. During this pandemic, I lost my MacBook to a hardware issue and had to fallback to strictly using my Windows desktop. I decided to try using Ubuntu as a development environment and I am writing this article to document the installation and configuration of my Linux-based development environment.

I’m running a clean install of the Ubuntu 20.04 LTS on VMWare Workstation hosted on Windows 10. If you want to install similar tools and apps, you will need administrator privileges. Most of the software I use is open source with the exception of a few security products that I can install and are available on multiple operating systems.

NOTE BEFORE YOU CONTINUE READING The intent of writing this article is to document the setup of my development Ubuntu 20.04 LTS virtual desktop. If you follow any of the provided instructions or advice, you do so at your own risk. Any opinions expressed are my own and not the views of my employer.

Update the Operating System

I always run the Software Updater. If you are curious what’s going on, click the “Details of updates” button to view the details).

Let the software updater patch the system.

alternatively, you can run the following command from a Terminal window:

$ sudo apt-get update && sudo apt-get dist-upgrade

when the GUI updater has completed, restart your system:

Click the Restart button to complete the update process.

Perquisites

I try to build from source as much as possible because I prefer to use the latest version. Often I find that the packaged version lags behind the available version.

To build from source, I update Ubuntu then install various build tools. Most often I install Python first.

$ sudo apt-get update -y
$ sudo apt-get install -y build-essential checkinstall
$ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

Update to the Latest Kernel

Like I mention before, I like working with the latest and greatest —and Ubuntu makes it easy to install the latest kernel. At the time of writing this article, version 5.9 of the kernel is available— it’s easier than you think! This version has some nice features and I’m always looking for a performance boost!

$ cd /tmp$ wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-headers-5.9.0-050900_5.9.0-050900.202010112230_all.deb$ wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-headers-5.9.0-050900-generic_5.9.0-050900.202010112230_amd64.deb$ wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-image-unsigned-5.9.0-050900-generic_5.9.0-050900.202010112230_amd64.deb$ wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9/amd64/linux-modules-5.9.0-050900-generic_5.9.0-050900.202010112230_amd64.deb

Now, the following command will install the 5.9 kernel:

$ sudo dpkg -i *.deb

After the installation completes, I rebooted my machine from the command line using: sudo reboot

After my system was rebooted, I ran the following command to confirm the kernel had been updated:

$ uname -r

Python 3.9.0

I prefer to use the latest version of Python. The following will download the latest version:

$ cd /usr/src
$ sudo wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz

Next, I extracted the source files from the downloaded package:

$ sudo tar xzf Python-3.9.0.tgz

Now, cd to the extracted source code directory:

$ cd Python-3.9.0/

The new flag --enable-optimizations sets the default make targets up to enable Profile Guided Optimization (PGO) and may be used to auto-enable Link Time Optimization (LTO) on some platforms:

$ sudo ./configure --enable-optimizations

If I need to work with multiple versions of python, I would use the following command to compile:

$ sudo make altinstall

But that’s not what I do, I always use the latest version:

$ sudo make install

You can verify the installation by checking the version with the following command:

$ python3.9 --version

I‘m not lazy, I like shorter commands likepy39 instead of python3.9. Luckily, the alias command makes this a reality:

$ alias py39=python3.9

Source Control

I love Git, a free and open source distributed version control system. It is designed to handle all sizes of projects from the small to the very large with speed and efficiency. A really good article from a familiar author can be found here:

I installed in the latest version, which at the time of writing this article is 2.29.2.

ZSH

Zsh or Z shell, is an extended version of the Bourne Shell (sh), with a host of new features, also supporting many great plugins and themes.

$ sudo apt-get install zsh -y

Close the terminal window then open a new one. Next, find out the path of the ZSH shell with the following command:

$ whereis zsh

Using the information from the previous command, set the default login shell for the user you’re logged in as with the following:

$ chsh -s $(which zsh)
# Log out of your session and log back in

Select option #2

I like a little style on my command line, let’s download the powerline fonts and I’ll show you a really cool Terminal afterwards:

$ sudo apt-get install powerline fonts-powerline -y

Oh My Zsh

I always install Oh My Zsh with Zsh! Now for the bling: Oh My Zsh is an open source, community-driven framework for managing your zsh configuration.

$ sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"

I like adding syntax highlighting:

$ sudo apt-get install zsh-syntax-highlighting
$ echo "source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ~/.zshrc

Installing Powerlevel10k

Powerlevel10k is a awesome theme for Zsh. It emphasizes speed, flexibility and a really nice out-of-the-box experience:

$ wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf$ wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf$ wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf$ wget https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf

Download and install Powerlevel10k by running the following:

$ cd $HOME/Downloads$ git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

Set ZSH_THEME="powerlevel10k/powerlevel10k" in ~/.zshrc. Save and exit the zsh config file then reload the configs:

source ~/.zshrc

Install NodeJS 14+

Installing node from package is easiest:

$ curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
$ sudo apt-get install -y nodejs
$ node --version

Upgrade Nano to v5

Nano is the easiest to use Terminal-based editor and downloading the latest version provides the best options:

$ curl https://www.nano-editor.org/dist/v5/nano-5.3.tar.xz -o nano.tar.xz
$ tar -xvf nano.tar.xz
$ cd nano-5.3
$ ./configure
$ make
$ sudo make install

You will need to close the Terminal window then open a new one to use the new version.

Install .NET Code 3.1 LTS

I’m a .NET developer so installing .NET is a must! I run the following commands to add the Microsoft package signing key to your list of trusted keys and add the package repository.

$ wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb

Install the SDK

.NET Core SDK allows me to develop apps with .NET Core. If you install .NET Core SDK, you don’t need to install the corresponding runtime. To install .NET Core SDK, run the following commands:

$ sudo apt-get update -y
$ sudo apt-get install -y apt-transport-https
$ sudo apt-get update -y
$ sudo apt-get install -y dotnet-sdk-3.1

Install Rust

Rust has a bit of a learning curve, but solves pain points present in many other languages, with a limited number of downsides. By default Rust is included in the Ubuntu 20.04 repositories, so you can install Rust directly using the apt install command.

$ sudo apt install rustc -y

Now Rust and the required dependencies are installed.

Install TypeScript

Microsoft’s TypeScript is being popular, so I thought I would attempt to learn it a bit better. It can be installed using npm:

sudo npm install -g typescript

Learn more about how to add TypeScript to your apps from the installation page.

Install Media Codecs

Ubuntu maintainers want to include only free and open-source software, thus closed-source packages including media codecs for common audio and video files, for example: MP3, AVI, MPEG4, etc. are not provided by default in a standard installation.

The ubuntu-restricted-extras meta-package can be installed by running the following command:

$ sudo apt install ubuntu-restricted-extras

Install GNOME Tweaks

GNOME Tweaks is a simple GUI for advanced GNOME 3 settings. GNOME Tweaks enables users to easily customize your desktop.

$ sudo apt install gnome-tweaks -y

Installing Google Chrome

  1. Click on Download Chrome.
  2. Save the DEB file.
  3. Save the DEB file on your computer.
  4. Double-click on the downloaded DEB file.
  5. Click the Install button.
  6. Right-click on the deb file to select and open with Software Install.
  7. Google Chrome installation finished.

Install Visual Studio Code

Visual Studio Code is a lightweight but powerful source code editor which runs on your desktop and is available for Linux, MacOS and Windows.

You can perform a search in the Ubuntu Software app.

Click the Install button then enter in an administrator password to install.

Install PostgreSQL

This open source database can be installed without configuring the Ubuntu repository. Use the following command to install PostgreSQL on Ubuntu 20.04:

$ sudo apt install postgresql postgresql-client

After completing the installation of PostgreSQL, you will start, stop, and enable the PostgreSQL services using the following command:

$ sudo systemctl stop postgresql.service
$ sudo systemctl start postgresql.service
$ sudo systemctl enable postgresql.service

Verify the status of the PostgreSQL service. Use the following command to check the service status:

$ sudo systemctl status postgresql.service

You should install an awesome SQL Server and PostgreSQL desktop UI that works great with Git, give Azure Data Studio serious consideration to reliably get the job done for you!

Download the .deb file then double-click to install.

Click the install button to install and use ADS.

Install Wine for Running Windows Apps

If you want to run Windows apps in Ubuntu 20.04, you need to install Wine — is an open-source implementation of the Windows API on top of X and POSIX-compliant operating systems, such as Linux, BSD, and macOS. It allows users to integrate and run Windows application cleanly, on Linux desktops by translating Windows API calls into POSIX calls on-the-fly.

To install Wine, run this command:

$ sudo apt install wine winetricks

Install Postman

$ sudo apt update
$ sudo apt install snapd
$ sudo snap install postman

Visual Studio Code Extensions

The following plug-ins will make coding on this desktop more enjoyable and effective.

  • Python — Linting, Debugging (multi-threaded, remote), Intellisense, Jupyter Notebooks, code formatting, refactoring, unit tests, snippets, and more.
  • C/C++ — C/C++ IntelliSense, debugging, and code browsing.
  • C# — C# for Visual Studio Code (powered by OmniSharp).
  • ESLint — Integrates ESLint JavaScript into VS Code.
  • Prettier — Code formatter
  • Visual Studio IntelliCode — AI-assisted development
  • GitLens — Git supercharged
  • vscode-icons
  • Bracket Pair Colorizer — A customizable extension for colorizing matching brackets
  • Path Intellisense — Visual Studio Code plugin that autocompletes filenames
  • Rust — for Visual Studio Code (powered by Rust Language Server/Rust Analyzer). Provides lints, code completion and navigation, formatting and more.
  • Pylance — A performant, feature-rich language server for Python in VS Code
  • Git Graph — View a Git Graph of your repository, and perform Git actions from the graph.

SQL Server 2019

Import the public repository GPG keys:

wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

Register the Microsoft SQL Server Ubuntu repository for SQL Server 2019:

sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/18.04/mssql-server-2019.list)"

Run the following commands to install SQL Server:

sudo apt-get update
sudo apt-get install -y mssql-server

After the package installation finishes, run mssql-conf setup and follow the prompts to set the SA password and choose your edition.

sudo /opt/mssql/bin/mssql-conf setup

Once the configuration is done, verify that the service is running:

systemctl status mssql-server --no-pager

Azure Data Studio Extensions

  • PostgreSQL
  • Admin Pack for SQL Server
  • Central Management Servers
  • Data Virtualization
  • Managed Instance Dashboard

Security

One of the most important aspects of any desktop operating system is hardening (or securing it). In the past on Linux, I would install a anti-virus, but I will let you do your own research. You should do your own research based on your OS version, the combination of installed software, etc.

VPN

This software is excellent for securing your internet traffic and allowing you to connect from different locations (very helpful for working with cloud services and noting what your users in those location will experience.

I use NordVPN and it works really well across Windows, MacOS and Linux.

Password Manager

This is a really good idea, you want to have a different password for every site, database, etc. that you work with and keep them all safe and secure in a password manager.

I like 1Password, but NordPass works well too.

Installing AWS CLI version 2

Install Azure CLI

--

--

I am a passionate technology leader, entrepreneur, husband, and father who loves to help others through collaboration, writing, and mentoring.