Published: • Updated:
Ubuntu Unleashed - My minimalist Ubuntu software development machine set-up.
A detailed write up explaining the tools and software I use on my main Ubuntu development machine.
Table of Contents
- Minimalist Install
- Developer Tools
- Code Editor and Extensions
- Web Browser
- Remote Desktop
- Screen Capture
- Mounting iPhone storage
I switched to using Ubuntu Linux full-time as my main development machine in Feb 2020. Before that I had been using a mixture of Windows and OSX. Right before the switch I was using OSX on an ageing Mac Mini, and it was gradually getting slower and slower. Especially Docker, which would hang the computer for many minutes causing the fan to work overtime. The machine became useless.
I was going to switch to using a laptop that only had 4GB of ram, so I needed a operating system that would perform well with modest hardware. I choose Ubuntu 20.04, being an LTS (Long Term Support) release, as it would give me security updates till April 2030.
This article covers the minimalist set-up I use and the software tools I use within my daily job as a software developer.
For the base install I used the Ubuntu 20.04 Server edition with no additional software components installed. I then install the tools I need to do my job. After updating and upgrading the base install, then I install xserver and the i3 tiling window manager. i3 is a very minimalist desktop targeted at advanced users and developers. I like the virtual desktops that i3 supports; I always have my web browser on desktop 1 and my code editor on desktop 2, and it’s very easy to switch between the two.
Beside the windowing system, I also install Thunar as my file manager and Gnome Terminal as my window onto the terminal. I also install nano as a basic text editor for editing configuration files. I just fined nano much easier to use than vim form the command-line.
sudo apt update sudo apt upgrade sudo apt install gnome-terminal i3 lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings mesa-utils mesa-utils-extra nano thunar ubuntu-drivers-common wicd xorg xserver-xorg
I use makefiles all the time, so I install the build-essential meta package along with Git and my programming language of choice Go. I also install Evince an open source document viewer and xdg-open so that I can open files in their preferred application from the command-line.
As an AWS cloud architect I use the Amazon Web Services Command Line Interface daily and is one of my essential developer tools.
sudo apt install awscli build-essential evince git golang-go xdg-utils
I use the Inconsolata font as my primary font within my code editor. Before we can use it, we need to install it and refresh the fonts cache.
sudo apt install fonts-inconsolata -y fc -cache -fv
sudo apt install snapd sudo snap install docker
Beside using Docker to build my own projects; I also use several Docker images in my day to day work.
- LaTeX - I use LaTeX to write system documentation.
- PHP - for when I need to write PHP code.
- KindleGen - for when I want to compile HTML documents into a Kindle ebook.
- imagemagick - for when I need to convert images between formats.
↑Code Editor and Extensions
While I sometimes use nano to edit text files from the terminal, my main go to code editor is Visual Studio Code. I’ve listed the extensions I install which compliment and enhance an already excellent code editor.
To install Visual Studio Code I first add the dependencies needed to install the software. I then add Microsoft’s repository key to the apt key store before adding the repository URL. Finally, we can install the software using apt install.
sudo apt install software-properties-common apt-transport-https wget wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" sudo apt install code
On a clean install, I then use these commands to install the extensions I need.
code --install-extension alefragnani.Bookmarks code --install-extension asciidoctor.asciidoctor-vscode code --install-extension golang.go code --install-extension hashicorp.terraform code --install-extension humao.rest-client code --install-extension matthewpi.caddyfile-support code --install-extension smikitky.vscode-dicom code --install-extension streetsidesoftware.code-spell-checker code --install-extension torn4dom4n.latex-support code --install-extension Tyriar.sort-lines
- Bookmarks helps with navigating a large code base.
- golang.go provides rich language support for the Go programming language.
- hashicorp.terraform adds editing features for Terraform files such as syntax highlighting, IntelliSense, code navigation.
- humao.rest-client allows you to send HTTP request and view the response in Visual Studio Code directly. Great for API development.
- smikitky.vscode-dicom dumps DICOM tag contents. DICOM is a standard file format for medical images.
- Tyriar.sort-lines sorts lines of code.
For my main browser I use Firefox. It just performs much better than Chrome does on my modest laptop. I’ve also listed the extensions that I use.
sudo apt install firefox
- uBlock Origin - An efficient wide-spectrum content blocker. Easy on the CPU and memory.
- Bitwarden - I pay for a Bitwarden account to manage all my passwords.
- Grammarly - real-time suggestions to help with grammar, clarity, tone, and more. This is another service that I pay for, to help with my writing.
- AWS Extend Switch Roles - in my role as AWS architect, I need to switch quickly between many different AWS accounts. This extension lets me do that.
- Google Lighthouse - as a developer I’m keen on providing users of my software a great experience. Lighthouse is an open-source, automated tool for improving the performance, quality, and correctness of your web apps.
For sending and receiving email I use Claws Mail. It’s a minimalist email client which is fast to use. I also use the bogofilter plugin which provides anti-spam capabilities for Claws Mail.
sudo apt install claws-mail claws-mail-bogofilter
I mainly deal with Linux servers, accessing them via SSH in the terminal. However, we do have a couple of Windows servers and to access these I use remmina. Remmina is a remote desktop client for POSIX-based computer operating systems. It supports the Remote Desktop Protocol, VNC, NX, XDMCP, SPICE, X2Go.
sudo apt install remmina
As part of documenting the software I develop I need to include screen shots of the software. To do this I use flameshot a powerful, yet simple to use open-source screenshot app. Flameshot has commands you can use in the terminal without launching the GUI via a command line interface.
sudo apt install flameshot
- kazam used to record simple one off videos
- ffmpeg used to convert videos between file formats
- handbrake to make backups of DVD’s
- kdenlive to edit videos for production
I don’t use anything fancy for backups. I use tar to create full backups and incremental backups and then upload the tar file to AWS S3 for off-site storage. I use a text file called backup_excludes.txt which lists the files not to include in the backup.
A full monthly backup uses:
ff = documents-full-2022-05.tgz tar -cvz --file=$(ff) --exclude-from=backup_excludes.txt ./* aws s3 cp $(ff) s3://bucket --storage-class STANDARD_IA
And daily incremental backups use:
pf = documents-part-2022-05-01.tgz tar cvz --file=$(pf) --exclude-from=backup_excludes.txt --newer=2022-05-01 ./* aws s3 cp $(pf) s3://bucket --storage-class STANDARD_IA
The backup_excludes.txt file looks like:
*.exe *.gz *.mp4 *.olm *.tar *.tgz *.wav *.zip */.git/* */main/* .terraform/*
↑Mounting iPhone storage
My work phone is an iPhone. Occasionally, I need to mount to the phone as a media device so that I can transfer the images off the phone onto my development machine. Sometimes I also need to copy documents off my development machine onto the iPhone.
To do this, we need to install libimobiledevice which is a cross-platform library written in C to communicate with iOS devices natively. We also need to install ifuse which is a fuse filesystem implementation allowing access to the contents of iOS devices.
We also need to make a directory as the target mount point for the device. Once the directory is created we then need to set the permissions on the folder to allowing writing to the device.
# install prerequisite software sudo apt-get install libimobiledevice-dev sudo apt-get install ifuse # make target directory & set permissions sudo mkdir /media/iphone sudo chmod 777 /media/iphone
With prerequisite software installed and the directory created, you can plug in you iPhone and select trust computer when prompted on your iPhone. Then from the Ubuntu terminal window you can pair the device and mount it against the target directory like:
idevicepair pair ifuse /media/iphone
The device will then appear in your file manager of choice.
- 29.06.2022 Added notes about mounting iPhones.
- 14.05.2022 Added Visual Studio extensions used. Added remote desktop, screen capture, backups & video.