Simon's Blog

Zero to Setup on Ubuntu

September 13, 2020

Due to a recent purchase of a new laptop (followed by not one but two guarantee covered repairs) as well as refreshing some old hardware, I have had to (re-)install Ubuntu (my OS of choice if the aim of the machine is anything but gaming) more times than I would care to enjoy.

Each (re-)install required the installation of numerous tools which I would need in the course of any software development I perform. In the first two iterations it was a case of downloading and installing the tool whenever I realised that I had not done so yet.

The third time round I realised I should make a list of the tools and install them all upfront.

git

With all of my code hosted on GitHub, I need the git CLI to retrieve and push code.

curl

Since most of my work is Web Development, https://curl.haxx.se/ is an essential CLI tool to quickly check the response of a webserver running on my machine or the response of a remote website/API that I am interacting with.

vim

Whilst not my main text editor, I occasionally want to edit a file quickly from the CLI. vim is my CLI editor of choice. Learning the basic of vim have also saved a good chunk of time when I needed to quickly edit a configuration file on a headless server.

ZSH

ZSH, which stands for Z Shell is an alternative shell to Bash. ZSH along with the plugin framework oh-my-zsh give my terminal superpowers. Completion for various tools, colours in normal tools such as ls, even showing the current branch of the current folder’s git repository.

Visual Studio Code

I used to be an Atom Editor fan which was the free (and slow) alternative to Sublime by GitHub. VS Code however has taken the web development world by storm. With great performance (even for an electron based application) and an ever growing plugin eco-system which can fit nearly anything you throw at it, it has been my daily driver for years.

Bitwarden

In an effort to be more sercure when it comes to passwords, I have moved to using Bitwarden. With a very generous free account option along with being open source, it is the password manager of my choosing.

Docker

I used to be a docker sceptic. Admittedly I started learning how to use docker around the time that it was just getting into vogue, before cloud vendors went all in on containers or when orchestration was still a mostly unsolved problem (not that it is completely solved now, but that is a different story).

But after one too many times of spending more time trying to get a Python script running on a VPS over writing the actual script, the ability to just upload a tarred image and then run a container from it with all dependencies it needed tagging along, it graduated to one of those tools that I wonder how I got any work done before I started using it.

Along with docker I also install Docker Compose

Programming Languages

My go-to stack reflects the fact that I am mainly focused on web development. At this point I am installing:

  1. Go
  2. NodeJS, along with npm and yarn
  3. Python3, although this is typically already installed in the distro that I use

After each one I also enable zsh support and VS Code extensions.

Ulauncher

Ulauncher gives a macOS spotlight like experience to Ubuntu. A great addition to enable the transfer of muscle memory from macOS to Ubuntu

Postman

Postman is a GUI for API development. It is a great tool to refer to when manually crafting a curl request is too daunting.

htop

htop is a terminal based process viewer. It comes with pretty colours and more features over the built-in top. This is useful if coming from a histoy of Windows machines, where Task Manager was always open.

sqlite3browser

Sqlite3Browser is a GUI for interacting with an SQLite Database. I love SQLite due to its simplicity in the way that it creates a flat file that includes all the data relevant to your task. When getting started with any development idea, I always start with SQLite then move to a bigger solution if the idea graduates to a project.

Conclusion

At some point I will probably have to repeat this process as I do experience a few issues with my current laptop that I am associating with LVM and full disk encryption. I forsee the next evolution of this process being the use a tool such as Ansible to automate the process, or possibly using docker for the more often used tools to avoid local installations completely.


Written by Simon who lives in Malta. You can find out more about me on the about page, or get in contact.