Rebuilding it from scratch
A few notes on the setup and configuration of a laptop.
Consistent with my plan to develop new, productive habits this year, I took notes while I was in the process of rebuilding my laptop configuration from scratch (three times) this week. I decided to reformat them slightly and plonk them down here for all to see. If this is the sort of thing that interests you, here it is. If it’s not, now would be a good time to wander off and find something else to do.
It’s worth noting from the outset that my laptop configuration is a bit weird. There are a few reasons for that:
- I don’t trust system restores. I have backups of various sorts, including Time Machine and so forth, but if I get a new laptop, I always start with a clean OS install and rebuild from scratch. I had to use a Windows laptop in the late nineties. It taught me a couple of lessons: restore doesn’t work and doing a clean install annually will keep Windows working smoothly.
- I’m slightly irked by the preferential treatment of folders named “Documents”, “Downloads”, “Movies”, and the like. I know what I’m doing, leave me alone.
- I switch platforms occasionally; exactly which folders are special and in exactly what ways isn’t obvious to me. And since I don’t appreciate the effort, I’ve no interest in figuring it out.
Basically, the less my stuff overlaps with the stuff that the OS believes it wants to manage, the better.
Beyond the OS directories (/Users
or /home
, depending, and
/Applications
, /usr/local
, etc.), there
are three big buckets: /space
, which was, in a previous
laptop, actually a separate physical disk, /projects
, under which
most of my personal projects live, and /MarkLogic
, a separate
APFS volume with a case sensitive filesystem.
My pictures, documents, shell scripts, libraries, etc., live under
/space/ndw
. Moving to a new laptop is 90% copying those three
buckets to the new machine.
Here’s a rundown of the other 90%, per recent experience, as it’s recorded now.
I’m sure my notes will get a few updates as I settle into this new laptop.
Every build that uses node
or gradle
or sbt
is going to be trying to download
half the internet for a while.
Basic setup
- Make a second Administrator account. This is the one I can login to if I totally break something in my normal login, or if I suspect that some extension or application might be causing problems. I never install things here or run things here, this is just an escape hatch. I call mine “John Bigboote”.
- Make “caps lock” a “control” key.
- Remove the keyboard shortcuts for spotlight search.
- Move the dock to the right, make it auto hide, remove everything I can from it.
- Remove siri from the touchbar.
- Change the wallpaper to plain gray.
- Enable remote login.
- Enable firewall.
- Enable locate:
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
- Configure VPN.
Install applications
- Alfred. Do this one first. Make
⌘+Space
the shortcut key. Thank $DEITY now you can start applications without fumbling about with icons or the annoying “Finder” interface. - Emacs. Do this one second. Because otherwise you have to edit files with something else.
- iterm2. Do this one third. It’s a better terminal. Preferences are
stored in
~/Library/Preferences/com.googlecode.iterm2.plist
. Copy that file from the previous laptop and restart to activate them.
The rest of these you can do in any order that pleases you.
- Moom. Sensible choices for controlling windows. I haven’t taken the time to really configure it yet, but I use “maximize to half the window” all the time.
- IntelliJ IDEA. My editor of choice for Java and Scala, the only two things I don’t edit in Emacs.
- Keybase. For private communications. I’m ‘ndw’ if you want to connect.
- Docker. Containerize all the things. In particular, it’s how I build and run MarkLogic server.
- ExpanDrive. I got a license for this years ago when I had to deal with WebDAV. It does lots of kinds of drive connections, but I haven’t used it much recently.
- Dropbox. I use it to capture photos from my phone and to share Org files across devices.
- Little Snitch. Keeps track of network connections. You’d be amazed. It can also block and filter them.
- Micro Snitch. Reports when the camera or microphone are hot.
- iStatMenus. Keeps track of memory usage, CPU speed, and the like.
- VueScan. For scanning.
- Kaleidoscope. A versatile diff tool for text, images. etc. I use it’s command line app as my git ‘difftool’.
- Adobe Creative Suite. Lightroom and Photoshop.
- Microsoft Office 365. Because a few times a year I actually have to.
- VirtualBox. For when you absolutely have to run Windows. And sometimes a Linux flavor.
- Homebrew. For most things Linux on the Mac.
- Malwarebytes Antivirus. I haven’t typically run one on my Mac, but things are getting worse out there. This one came highly recommended.
- Mullvad VPN. This one also came highly recommended. For when you need one.
- Oracle Java 8. A bit behind the times, but I haven’t made the cognative leap of working out where to go next.
Install packages
Here I’m relying on Homebrew. Next time I’m doing this dance with the luxury of a little more time, I want to try using Nix instead. I really like the Nix philosophy. I did use a mixture of Nix and Homebrew for a time, but some of the Nix utilities didn’t seem to work quite right and I had qualms about having two package managers mixed together, so I abanoned Nix on this iteration.
brew install ack asciidoctor aspell bat boost cmake coreutils \
curl davmail exa findutils fzf getmail gmime gradle htop \
icu4c igraph jq ledger libtool maven mercurial nave notmuch \
pandoc perl pinentry-mac procmail pyenv pyenv-virtualenv \
python3 sbt shared-mime-info the_silver_searcher tmux travis \
zlib
I don’t use Maven directly, but I have a Perl library that will use it to download dependencies so I can run things like Calabash from the command line and get the right dependencies.
brew tap homebrew/cask-fonts
brew cask install font-hack-nerd-font font-iosevka font-cardo
Setup Python
- Use
pyenv
to install 3.7.1 - Set 3.7.1 as the global python
pip install powerline-status
(not powerline!)pip install powerline-shell requests requests_toolbelt tzlocal icalendar
- Install icalevents from
/projects/python/
Setup Perl
Use CPAN to install File::MimeInfo
, Image::Size
, LWP
, LWP::Protocol::https
,
Mozilla:CA
, YAML::XS
, and XML::XPath
. I’m sure I’ll discover more things that I need to install
as the days and weeks go by.
Fix my login
Now that all the prerequisites are in place, it’s time to fix my login shell.
- Install Oh My ZSH!
- Copy
~/dotfiles
from my old config and make symlinks for everything in there (.zshrc
,.zshenv
,.zsh_functions
,.procmailrc
,.netrc
,.aspell.conf
, etc., etc., etc.)
Setup exim
Setup getmail
- Create
/usr/local/var/spool/mail/ndw
- Make sure
procmail
is correct in~/dotfiles/getmail/*.rc
Setup Apache
Copy over the http.conf
file
Install crontab
My procmail
recipes create backup copies of messages and filter certain messages into
a spam bucket. My crontab
makes sure nothing sits around for more than a week. I also
constuct an Emacs diary file from my Apple calendars.
Install sudoers files
I make it possible to run apachectl
, htop
, and a shell script that does ifconfig lo0 alias
commands
for Docker containers using sudo
without a password.
Install /etc/hosts
I have an /etc/hosts
file that points to a bunch of local hosts (raspberry pi’s and the like) plus
a bunch of docker containers.
Setup firefox extensions
This is still T.B.D. today. I failed to note what I had installed and I haven’t gone spelunking through my saved home directory to work it out.