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:
- Go
- NodeJS, along with
npm
andyarn
- 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.