Wednesday, 2020 May 20
My old workstation, which I had built about four years ago, was starting to show signs of instability. Specifically, it would lock up when ripping DVDs (which probably exercises the system more than anything else that I commonly do). After looking around a bit, I decided to buy a new Intel NUC. I only needed a moderate processor (an i5, specifically), but I added 32 GB of RAM and a large NVMe drive since that matches my normal use cases. I also moved the 2 TB spinning rust drive from my old workstation into the new one, the only part that I reused.
As I went through the setup process, I took some notes. This post is mostly intended as a reminder to myself, as I'm going to be doing this again a few times in the near future as I have other computer projects lined up that will get dedicated machines.
The first step, of course, was to install Linux. I've used Xubuntu for years (and XFCE on other distros for years before that), so that's my normal default. However, I had recently discovered Regolith, another Ubuntu-based distro but using the i3 window manager. I've tried i3 in the past as I like the idea of tiling window managers, but it never took. Regolith promised to streamline things by providing a) consistent, logical keyboard shortcuts and b) pre-installed utilities (like a notification center) to provide a more modern desktop environment.
The second step is to configure focus-follows-mouse behavior. The details here various drastically depending on the desktop environment; one of the things I appreciate about Regolith is that I have checked the necessary config file into git, so it "just works" for me. I refuse to use a desktop that doesn't support this fundamental behavior; this is a (small) part of my general hatred of OS X.
The third step is always to fix my keyboard. I have zero use for a caps lock key, and years ago discovered that I could make it another control key. The details of this have changed over the years, but recently it's become quite easy to do globally. Edit the /etc/default/keyboard file and set XKBOPTIONSto "ctrl:nocaps". Note that this will not take effect until the next reboot.
After that, I installed many of my commonly-used programs and utilities. This list changes a little with time and mood, but this is a solid start. All of these are available via apt-get install.
Next is installing various SSH certs. I tend to do this by USB stick rather than over the network because I'm paranoid, but there's probably no real need for that.
Now it's time to retrieve my home directory.
$ ssh-add ~/.ssh/gitlab_rsa $ mkdir tmp_home $ git clone firstname.lastname@example.org:jshamacher/home-directory.git tmp_home
I then move the contents of tmp_home to ~. On a fresh install I generally don't worry about overwriting anything, although I do occasionally check to see if there are new defaults I should incorporate.
I adopted zsh quite a few years ago. After playing around with Oh My Zsh I reverted back to a relatively vanilla installation, with a few carefully curated customizations. This was installed earlier, now I update the system so that I actually use it.
$ chsh -s /bin/zsh
Another indispensable utility is tmuxinator . This is an easy install as long as you have a system ruby.
$ sudo gem install tmuxinator
Now it's time to clone my documents directory and whatever projects I'm planning on working on on the new machine. In general my projects are private repos on Gitlab. Documents, which includes a lot of financial stuff, never leave my home network and is served from my NAS.
After this I begin configuring things to my liking. Again, this will vary somewhat based on my mood and the purpose of the system, but the following tend to be needed more often than not.
- ./bin/install_vim.sh is a script I wrote years ago that installs all of the plugins, themes, etc that I regularly use.
- mkdir ~/tmp as I make heavy use of a local tmp directory.
- Log into Firefox Sync. At this point my password manager should be installed and the database should be up to date.
- Set up auto-mount for various drives on my NAS.
Next I reboot to make sure that everything has taken. My shell should be changed, the caps lock key should now be control, directories should be mounted (if appropriate), etc.
This gives me a functional system. There are other things that I may do, depending on the machine's role. Below is a summary of some of those.
- Install Moneydance. I've been using it as my personal financial manager for well over a decade. While I don't particularly love it, it gets the job done and is available cross-platform.
- If I'm going to be doing any development work (including this blog), I'll install Docker. In general I find the official Ubuntu installation page and followup pages to be an adequate resource.
- Also for development work, I'll configure access to my remote development host and my Kubernetes cluster.
- I have a Brother multi-function device. Printing just works, but if I anticipate needing to scan to the new machine then I'll need to install special drivers.
- If I'm planning on gaming on the machine, I'll install Steam and Good Old Games.
- I'll probably configure a dark theme, and spend way too much time tweaking minor details. That configurability is part of why I use linux.