I got a new computer (2020-09-04)! I took this as an opportunity to document/organize all the steps required to configure it. This is probably not a post you want to read if you’re not me (but hey, who knows).

Also, about 3/4 of the way through, I found this, which seems like a more polished version of what I’m doing here (although not exactly what I installed, so worse for me, but probably better for you).

Download iTerm2

  • I noticed that option-f and option-b don’t go back/forward by 1 word:
    • preferences -> profiles -> keys -> left option key -> select Esc+

Problem: default terminal on Mac is zsh (I want bash)

$ chsh -s /bin/bash

Install xcode

  • Download from app-store (this takes a while!)

Copy .files from old computer

They’re actually in a git repo, so I used that:

git clone https://github.com/russelldmatt/.files.git .files
ln -s .files/.bash_profile  .bash_profile
ln -s .files/.bashrc  .bashrc

Still had issues - when I open a new command prompt I get errors such as:

$ bash

bash: dircolors: command not found
bash: opam: command not found

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit [https://support.apple.com/kb/HT208050](https://support.apple.com/kb/HT208050).

To fix The default interactive shell is now zsh. warning, add this to your .bash_profile:

export BASH_SILENCE_DEPRECATION_WARNING=1

To fix the missing discolors, I needed to install GNU core utilities, and to do that…

Homebrew!

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
Password:
==> This script will install:
/usr/local/bin/brew
/usr/local/share/doc/homebrew
/usr/local/share/man/man1/brew.1
/usr/local/share/zsh/site-functions/_brew
/usr/local/etc/bash_completion.d/brew
/usr/local/Homebrew
==> The following new directories will be created:
/usr/local/bin
/usr/local/etc
/usr/local/include
/usr/local/lib
/usr/local/sbin
/usr/local/share
/usr/local/var
/usr/local/opt
/usr/local/share/zsh
/usr/local/share/zsh/site-functions
/usr/local/var/homebrew
/usr/local/var/homebrew/linked
/usr/local/Cellar
/usr/local/Caskroom
/usr/local/Homebrew
/usr/local/Frameworks

Press RETURN to continue or any other key to abort

Install stuff with homebrew

# coreutils gives me dircolors
brew install coreutils findutils gnu-tar gnu-sed gawk gnutls gnu-indent gnu-getopt grep
brew install tree watch

This installs a bunch of binaries and prefixes some with g so as to not conflict with the default one installed on the Mac (e.g. ggrep). In order to default to the GNU binaries with normal names, modify your path in .bash_profile:

# This is to default to gnu utils installed via homebrew instead of standard mac tools
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
MANPATH="/usr/local/opt/coreutils/libexec/gnubin:$MANPATH"
PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
MANPATH="/usr/local/opt/gnu-sed/libexec/gnuman:$MANPATH"
PATH="/usr/local/opt/gnu-indent/libexec/gnubin:$PATH"
MANPATH="/usr/local/opt/gnu-indent/libexec/gnubin:$MANPATH"
PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"
MANPATH="/usr/local/opt/grep/libexec/gnubin:$MANPATH"
PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"
MANPATH="/usr/local/opt/gnu-tar/libexec/gnubin:$MANPATH"

Install emacs (with homebrew)

brew cask install emacs

I try to open emacs… and it fails! “Emacs” can’t be opened because Apple cannot check it for malicious software.. This reddit thread said to right click on the emacs icon (in apps) and click open. That worked… weird!

When I run emacs from terminal, it opens GUI emacs… add this to .bashrc

alias e="emacs -nw"

Configure .emacs file:

ln -s .files/.emacs.d/init.el .emacs
ln -s .files/.emacs.d .emacs.d

Now when I open, I get a few warnings:

Warning (package): Unnecessary call to ‘package-initialize’ in init file
Warning (initialization): An error occurred while loading ‘/Users/mrussell/.emacs’:

File is missing: Cannot open load file, No such file or directory, ob-sh

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the ‘--debug-init’ option to view a complete error backtrace.

To fix Warning (package): Unnecessary call to ‘package-initialize’ in init file I simply commented the first call to package-initialize as I had another one right afterwards…

To fix File is missing: Cannot open load file, No such file or directory, ob-sh I’m following the instructions here. Fixing was really easy, I just needed to find the line in my emacs init file (myinit.org for me) and change (sh . t) to (shell . t).

org-bullets not working. It seems I have a git repo (~/.emacs.d/git/org-bullets) within my git repo (~/.files) which, by default, will not be included when I clone. So just get that locally:

$ git clone https://github.com/Kaligule/org-bullets.git ~/.files/.emacs.d/git/org-bullets
Cloning into '/Users/mrussell/.files/.emacs.d/git/org-bullets'...
remote: Enumerating objects: 186, done.
remote: Total 186 (delta 0), reused 0 (delta 0), pack-reused 186
Receiving objects: 100% (186/186), 63.83 KiB | 435.00 KiB/s, done.
Resolving deltas: 100% (55/55), done.

Copy code directory from old computer

rsync -a russell@10.0.0.31:~/code .

Code directory (w/out chess games) is 50G so this took a while. Not actually sure how long; I ran it overnight. Seems to have failed about 98% of the way, through. Luckily, rsync is good for this since it can pick up where it left off, so I re-ran in the morning and it quickly finished.

Keyboard is painfully slow!

  • System Preferences -> Keyboard -> max key repeat and delay until repeat

Much better!

iMessages has no names (only #s)

System Preferences -> Apple ID -> iCloud -> enable Contacts

I can’t inspect element in safari

fix is here. Safari Preferences -> Advanced -> check “Show developer menu in menu bar”

Install python

$ which python
/usr/bin/python
$ python --version
Python 2.7.16
$ brew install python
... I think I'm missing some output here ...
==> Downloading https://homebrew.bintray.com/bottles/gdbm-1.18.1_1.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/f7b5ab7363961fa6defcb66b4ffdf5365264fcb97d35bc413e754f173a3b1912?response-content-disposition=attachment%3Bfilename%3D%22gdbm-1.18.1_1.catalina.bot
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/sqlite-3.33.0.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/78566572373e0010a52729c1b41f7503f4e86acc67e7a37bafe091a6ddc36147?response-content-disposition=attachment%3Bfilename%3D%22sqlite-3.33.0.catalina.bot
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/xz-5.2.5.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/2dcc8e0121c934d1e34ffdb37fcd70f0f7b5c2f4755f2f7cbcf360e9e54cb43b?response-content-disposition=attachment%3Bfilename%3D%22xz-5.2.5.catalina.bottle.t
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/python%403.8-3.8.5.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/3f0592dfdf6bf38c25870b57ba3e71b5b47e6c5a5ddb76aaafcbffe67eff8354?response-content-disposition=attachment%3Bfilename%3D%22python%403.8-3.8.5.catalin
######################################################################## 100.0%
==> Installing dependencies for python@3.8: gdbm, sqlite and xz
==> Installing python@3.8 dependency: gdbm
==> Pouring gdbm-1.18.1_1.catalina.bottle.tar.gz
🍺  /usr/local/Cellar/gdbm/1.18.1_1: 25 files, 641KB
==> Installing python@3.8 dependency: sqlite
==> Pouring sqlite-3.33.0.catalina.bottle.tar.gz
==> Caveats
sqlite is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have sqlite first in your PATH run:
  echo 'export PATH="/usr/local/opt/sqlite/bin:$PATH"' >> /Users/mrussell/.bash_profile

For compilers to find sqlite you may need to set:
  export LDFLAGS="-L/usr/local/opt/sqlite/lib"
  export CPPFLAGS="-I/usr/local/opt/sqlite/include"

For pkg-config to find sqlite you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/sqlite/lib/pkgconfig"

==> Summary
🍺  /usr/local/Cellar/sqlite/3.33.0: 11 files, 4MB
==> Installing python@3.8 dependency: xz
==> Pouring xz-5.2.5.catalina.bottle.tar.gz
🍺  /usr/local/Cellar/xz/5.2.5: 92 files, 1.1MB
==> Installing python@3.8
==> Pouring python@3.8-3.8.5.catalina.bottle.tar.gz
==> /usr/local/Cellar/python@3.8/3.8.5/bin/python3 -s setup.py --no-user-cfg install --force --verbose --install-scripts=/usr/local/Cellar/python@3.8/3.8.5/bin --install-lib=/usr/local/lib/python3.8/site-pa
==> /usr/local/Cellar/python@3.8/3.8.5/bin/python3 -s setup.py --no-user-cfg install --force --verbose --install-scripts=/usr/local/Cellar/python@3.8/3.8.5/bin --install-lib=/usr/local/lib/python3.8/site-pa
==> /usr/local/Cellar/python@3.8/3.8.5/bin/python3 -s setup.py --no-user-cfg install --force --verbose --install-scripts=/usr/local/Cellar/python@3.8/3.8.5/bin --install-lib=/usr/local/lib/python3.8/site-pa
==> Caveats
Python has been installed as
  /usr/local/bin/python3

Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to
`python3`, `python3-config`, `pip3` etc., respectively, have been installed into
  /usr/local/opt/python@3.8/libexec/bin

You can install Python packages with
  pip3 install <package>
They will install into the site-package directory
  /usr/local/lib/python3.8/site-packages

See: https://docs.brew.sh/Homebrew-and-Python
==> Summary
🍺  /usr/local/Cellar/python@3.8/3.8.5: 4,331 files, 67MB
==> Caveats
==> sqlite
sqlite is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have sqlite first in your PATH run:
  echo 'export PATH="/usr/local/opt/sqlite/bin:$PATH"' >> /Users/mrussell/.bash_profile

For compilers to find sqlite you may need to set:
  export LDFLAGS="-L/usr/local/opt/sqlite/lib"
  export CPPFLAGS="-I/usr/local/opt/sqlite/include"

For pkg-config to find sqlite you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/sqlite/lib/pkgconfig"

==> python@3.8
Python has been installed as
  /usr/local/bin/python3

Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to
`python3`, `python3-config`, `pip3` etc., respectively, have been installed into
  /usr/local/opt/python@3.8/libexec/bin

You can install Python packages with
  pip3 install <package>
They will install into the site-package directory
  /usr/local/lib/python3.8/site-packages

See: https://docs.brew.sh/Homebrew-and-Python

Notice the caveat above, I’d like unversioned names such as python and pip to point to the homebrew-installed python3 and not the (old) Mac python. In order to do that, add the following to my .bashrc:

# adding this to the front of my path allows unversioned names
# (`python`, `pip`, etc.) to point to the 3.8 homebrew-installed
# version instead of the (old) one that comes with the mac
export PATH=/usr/local/opt/python@3.8/libexec/bin:$PATH

Check that it worked:

$ which python
/usr/local/opt/python@3.8/libexec/bin/python
$ python --version
Python 3.8.5
$ which pip
/usr/local/opt/python@3.8/libexec/bin/pip

Install stuff that I know I’ll want:

$ pip install numpy scipy matplotlib pandas seaborn sympy
$ pip install ipython
$ ll $(which ipython)
-rwxr-xr-x 1 mrussell admin 247 Sep  6 07:28 /usr/local/bin/ipython

Huh… kind of confused that it’s in /usr/local/bin (vs. a symlink in /usr/local/opt/python@3.8/libexec/bin/python), but oh well.

Install jupyter:

$ pip install jupyter
$ pip install black

More stuff (later):

$ pip install yattag # for make-cal

Install node & npm

Download 12.18.3 LTS here: https://nodejs.org/en/

This package will install: • Node.js v12.18.3 to /usr/local/bin/node • npm v6.14.6 to /usr/local/bin/npm

Wow, that was shockingly easy. After doing that, the anniversary website just works.

Install Jekyll

Following instructions here.

$ brew install ruby
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/cask).
No changes to formulae.

==> Downloading https://homebrew.bintray.com/bottles/libyaml-0.2.5.catalina.bottle.tar.gz
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/ruby-2.7.1_2.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/c9ee36823a8dfe2686c6d7a3faf5061a032ed0b8e08d484f3ff2cda72d210a08?response-content-dispositio
######################################################################## 100.0%
==> Installing dependencies for ruby: libyaml
==> Installing ruby dependency: libyaml
==> Pouring libyaml-0.2.5.catalina.bottle.tar.gz
🍺  /usr/local/Cellar/libyaml/0.2.5: 10 files, 323.5KB
==> Installing ruby
==> Pouring ruby-2.7.1_2.catalina.bottle.tar.gz
==> Caveats
By default, binaries installed by gem will be placed into:
  /usr/local/lib/ruby/gems/2.7.0/bin

You may want to add this to your PATH.

ruby is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have ruby first in your PATH run:
  echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> /Users/mrussell/.bash_profile

For compilers to find ruby you may need to set:
  export LDFLAGS="-L/usr/local/opt/ruby/lib"
  export CPPFLAGS="-I/usr/local/opt/ruby/include"

For pkg-config to find ruby you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/ruby/lib/pkgconfig"

==> Summary
🍺  /usr/local/Cellar/ruby/2.7.1_2: 20,142 files, 32.2MB
==> Caveats
==> ruby
By default, binaries installed by gem will be placed into:
  /usr/local/lib/ruby/gems/2.7.0/bin

You may want to add this to your PATH.

ruby is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have ruby first in your PATH run:
  echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> /Users/mrussell/.bash_profile

For compilers to find ruby you may need to set:
  export LDFLAGS="-L/usr/local/opt/ruby/lib"
  export CPPFLAGS="-I/usr/local/opt/ruby/include"

For pkg-config to find ruby you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/ruby/lib/pkgconfig"

Add the following to my .bashrc:

# ruby (for jekyll)
export PATH="/usr/local/opt/ruby/bin:$PATH"
export PATH="/usr/local/lib/ruby/gems/2.7.0/bin:$PATH"

Verify:

$ which ruby
/usr/local/opt/ruby/bin/ruby
$ ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin19]

Install the bundler and Jekyll gems:

$ gem install --user-install bundler jekyll

Add one more line to my .bashrc:

export PATH="$HOME/.gem/ruby/2.7.0/bin:$PATH"

Warning from the Jekyll install website:

Every time you update Ruby to a version in which the first two digits change, update your path to match.

Check that it worked:

  • jekyll serve within my brainteasers repo worked!
  • jekyll serve within blog failed:
$ jekyll serve
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Traceback (most recent call last):
	12: from /Users/mrussell/.gem/ruby/2.7.0/bin/jekyll:23:in `<main>'
	11: from /Users/mrussell/.gem/ruby/2.7.0/bin/jekyll:23:in `load'
	10: from /Users/mrussell/.gem/ruby/2.7.0/gems/jekyll-4.1.1/exe/jekyll:11:in `<top (required)>'
	 9: from /Users/mrussell/.gem/ruby/2.7.0/gems/jekyll-4.1.1/lib/jekyll/plugin_manager.rb:52:in `require_from_bundler'
	 8: from /Users/mrussell/.gem/ruby/2.7.0/gems/bundler-2.1.4/lib/bundler.rb:149:in `setup'
	 7: from /Users/mrussell/.gem/ruby/2.7.0/gems/bundler-2.1.4/lib/bundler/runtime.rb:20:in `setup'
	 6: from /Users/mrussell/.gem/ruby/2.7.0/gems/bundler-2.1.4/lib/bundler/runtime.rb:101:in `block in definition_method'
	 5: from /Users/mrussell/.gem/ruby/2.7.0/gems/bundler-2.1.4/lib/bundler/definition.rb:226:in `requested_specs'
	 4: from /Users/mrussell/.gem/ruby/2.7.0/gems/bundler-2.1.4/lib/bundler/definition.rb:237:in `specs_for'
	 3: from /Users/mrussell/.gem/ruby/2.7.0/gems/bundler-2.1.4/lib/bundler/definition.rb:170:in `specs'
	 2: from /Users/mrussell/.gem/ruby/2.7.0/gems/bundler-2.1.4/lib/bundler/spec_set.rb:80:in `materialize'
	 1: from /Users/mrussell/.gem/ruby/2.7.0/gems/bundler-2.1.4/lib/bundler/spec_set.rb:80:in `map!'
/Users/mrussell/.gem/ruby/2.7.0/gems/bundler-2.1.4/lib/bundler/spec_set.rb:86:in `block in materialize': Could not find concurrent-ruby-1.1.5 in any of the sources (Bundler::GemNotFound)
EXIT STATUS: 1

I have some vague memory that I need to run bundle exec jekyll serve for my blog, as opposed to just jekyll serve. What’s the difference?

$ bundle exec jekyll serve
Could not find concurrent-ruby-1.1.5 in any of the sources
Run `bundle install` to install missing gems.
EXIT STATUS: 7
$ bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/.........
Fetching concurrent-ruby 1.1.5
Installing concurrent-ruby 1.1.5
Fetching i18n 0.9.5
Installing i18n 0.9.5
Fetching minitest 5.11.3
Installing minitest 5.11.3
Fetching thread_safe 0.3.6
Installing thread_safe 0.3.6
Fetching tzinfo 1.2.5
Installing tzinfo 1.2.5
Fetching activesupport 4.2.11.1
Installing activesupport 4.2.11.1
Fetching public_suffix 3.1.1
Installing public_suffix 3.1.1
Using addressable 2.7.0
Using bundler 2.1.4
Fetching coffee-script-source 1.11.1
Installing coffee-script-source 1.11.1
Fetching execjs 2.7.0
Installing execjs 2.7.0
Fetching coffee-script 2.4.1
Installing coffee-script 2.4.1
Using colorator 1.1.0
Fetching ruby-enum 0.7.2
Installing ruby-enum 0.7.2
Fetching commonmarker 0.17.13
Installing commonmarker 0.17.13 with native extensions
Fetching dnsruby 1.61.3
Installing dnsruby 1.61.3
Using eventmachine 1.2.7
Using http_parser.rb 0.6.0
Using em-websocket 0.5.1
Fetching ffi 1.11.1
Installing ffi 1.11.1 with native extensions
Fetching ethon 0.12.0
Installing ethon 0.12.0
Fetching multipart-post 2.1.1
Installing multipart-post 2.1.1
Fetching faraday 0.15.4
Installing faraday 0.15.4
Using forwardable-extended 2.6.0
Fetching gemoji 3.0.1
Installing gemoji 3.0.1
Fetching sawyer 0.8.2
Installing sawyer 0.8.2
Fetching octokit 4.14.0
Installing octokit 4.14.0
Fetching typhoeus 1.3.1
Installing typhoeus 1.3.1
Fetching github-pages-health-check 1.16.1
Installing github-pages-health-check 1.16.1
Fetching rb-fsevent 0.10.3
Installing rb-fsevent 0.10.3
Fetching rb-inotify 0.10.0
Installing rb-inotify 0.10.0
Fetching sass-listen 4.0.0
Installing sass-listen 4.0.0
Fetching sass 3.7.4
Installing sass 3.7.4
Fetching jekyll-sass-converter 1.5.2
Installing jekyll-sass-converter 1.5.2
Fetching ruby_dep 1.5.0
Installing ruby_dep 1.5.0
Fetching listen 3.1.5
Installing listen 3.1.5
Using jekyll-watch 2.2.1
Fetching kramdown 1.17.0
Installing kramdown 1.17.0
Fetching liquid 4.0.0
Installing liquid 4.0.0
Fetching mercenary 0.3.6
Installing mercenary 0.3.6
Using pathutil 0.16.2
Fetching rouge 2.2.1
Installing rouge 2.2.1
Using safe_yaml 1.0.5
Fetching jekyll 3.8.5
Installing jekyll 3.8.5
Fetching jekyll-avatar 0.6.0
Installing jekyll-avatar 0.6.0
Fetching jekyll-coffeescript 1.1.1
Installing jekyll-coffeescript 1.1.1
Fetching jekyll-commonmark 1.3.1
Installing jekyll-commonmark 1.3.1
Fetching jekyll-commonmark-ghpages 0.1.5
Installing jekyll-commonmark-ghpages 0.1.5
Fetching jekyll-default-layout 0.1.4
Installing jekyll-default-layout 0.1.4
Fetching jekyll-feed 0.11.0
Installing jekyll-feed 0.11.0
Fetching jekyll-gist 1.5.0
Installing jekyll-gist 1.5.0
Fetching jekyll-github-metadata 2.12.1
Installing jekyll-github-metadata 2.12.1
Fetching mini_portile2 2.4.0
Installing mini_portile2 2.4.0
Fetching nokogiri 1.10.4
Installing nokogiri 1.10.4 with native extensions
Fetching html-pipeline 2.12.0
Installing html-pipeline 2.12.0
Fetching jekyll-mentions 1.4.1
Installing jekyll-mentions 1.4.1
Fetching jekyll-optional-front-matter 0.3.0
Installing jekyll-optional-front-matter 0.3.0
Fetching jekyll-paginate 1.1.0
Installing jekyll-paginate 1.1.0
Fetching jekyll-readme-index 0.2.0
Installing jekyll-readme-index 0.2.0
Fetching jekyll-redirect-from 0.14.0
Installing jekyll-redirect-from 0.14.0
Fetching jekyll-relative-links 0.6.0
Installing jekyll-relative-links 0.6.0
Fetching rubyzip 1.2.4
Installing rubyzip 1.2.4
Fetching jekyll-remote-theme 0.4.0
Installing jekyll-remote-theme 0.4.0
Fetching jekyll-seo-tag 2.5.0
Installing jekyll-seo-tag 2.5.0
Fetching jekyll-sitemap 1.2.0
Installing jekyll-sitemap 1.2.0
Fetching jekyll-swiss 0.4.0
Installing jekyll-swiss 0.4.0
Fetching jekyll-theme-architect 0.1.1
Installing jekyll-theme-architect 0.1.1
Fetching jekyll-theme-cayman 0.1.1
Installing jekyll-theme-cayman 0.1.1
Fetching jekyll-theme-dinky 0.1.1
Installing jekyll-theme-dinky 0.1.1
Fetching jekyll-theme-hacker 0.1.1
Installing jekyll-theme-hacker 0.1.1
Fetching jekyll-theme-leap-day 0.1.1
Installing jekyll-theme-leap-day 0.1.1
Fetching jekyll-theme-merlot 0.1.1
Installing jekyll-theme-merlot 0.1.1
Fetching jekyll-theme-midnight 0.1.1
Installing jekyll-theme-midnight 0.1.1
Fetching jekyll-theme-minimal 0.1.1
Installing jekyll-theme-minimal 0.1.1
Fetching jekyll-theme-modernist 0.1.1
Installing jekyll-theme-modernist 0.1.1
Fetching jekyll-theme-primer 0.5.3
Installing jekyll-theme-primer 0.5.3
Fetching jekyll-theme-slate 0.1.1
Installing jekyll-theme-slate 0.1.1
Fetching jekyll-theme-tactile 0.1.1
Installing jekyll-theme-tactile 0.1.1
Fetching jekyll-theme-time-machine 0.1.1
Installing jekyll-theme-time-machine 0.1.1
Fetching jekyll-titles-from-headings 0.5.1
Installing jekyll-titles-from-headings 0.5.1
Fetching jemoji 0.10.2
Installing jemoji 0.10.2
Fetching minima 2.5.0
Installing minima 2.5.0
Fetching unicode-display_width 1.6.0
Installing unicode-display_width 1.6.0
Using terminal-table 1.8.0
Fetching github-pages 200
Installing github-pages 200
Fetching octicons 9.1.1
Installing octicons 9.1.1
Fetching jekyll-octicons 9.1.1
Installing jekyll-octicons 9.1.1
Bundle complete! 5 Gemfile dependencies, 87 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
Post-install message from dnsruby:
Installing dnsruby...
  For issues and source code: https://github.com/alexdalitz/dnsruby
  For general discussion (please tell us how you use dnsruby): https://groups.google.com/forum/#!forum/dnsruby
Post-install message from sass:

Ruby Sass has reached end-of-life and should no longer be used.

* If you use Sass as a command-line tool, we recommend using Dart Sass, the new
  primary implementation: https://sass-lang.com/install

* If you use Sass as a plug-in for a Ruby web framework, we recommend using the
  sassc gem: https://github.com/sass/sassc-ruby#readme

* For more details, please refer to the Sass blog:
  https://sass-lang.com/blog/posts/7828841

Post-install message from html-pipeline:
-------------------------------------------------
Thank you for installing html-pipeline!
You must bundle Filter gem dependencies.
See html-pipeline README.md for more details.
https://github.com/jch/html-pipeline#dependencies
-------------------------------------------------
$ bundle exec jekyll serve
... lots of warnings...
 Auto-regeneration: enabled for '/Users/mrussell/code/blog'
     Server address: http://127.0.0.1:4000/
  Server running... press ctrl-c to stop.

I get a ton of “deprecated” warnings when I run bundle exec jekyll serve. I think it’s because my ruby version is 2.7? I tried following instructions here, although it’s not very clear what to do. People post conflicting statements about “what worked for them”. Here’s what I tried:

$ bundle update github-pages
... lots of messages

That seemed to upgrade my GitHub-pages gem from 200 -> 207:

$ rg -m1 github Gemfile.lock # before
33:    github-pages (200)
$ rg -m1 github Gemfile.lock # after
34:    github-pages (207)

And it worked! No warnings:

$ bundle exec jekyll serve
Configuration file: /Users/mrussell/code/blog/_config.yml
            Source: /Users/mrussell/code/blog
       Destination: /Users/mrussell/code/blog/_site
 Incremental build: disabled. Enable with --incremental
      Generating...
       Jekyll Feed: Generating feed for posts
                    done in 1.088 seconds.
 Auto-regeneration: enabled for '/Users/mrussell/code/blog'
    Server address: http://127.0.0.1:4000/
  Server running... press ctrl-c to stop.

Copy chess games (150G) from old computer

$ rsync --progress -a russell@10.0.0.31:~/chess-games .

Install rust

Instructions.

$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
info: downloading installer

Welcome to Rust!

This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.

Rustup metadata and toolchains will be installed into the Rustup
home directory, located at:

  /Users/mrussell/.rustup

This can be modified with the RUSTUP_HOME environment variable.

The Cargo home directory located at:

  /Users/mrussell/.cargo

This can be modified with the CARGO_HOME environment variable.

The cargo, rustc, rustup and other commands will be added to
Cargo's bin directory, located at:

  /Users/mrussell/.cargo/bin

This path will then be added to your PATH environment variable by
modifying the profile files located at:

  /Users/mrussell/.profile
  /Users/mrussell/.bash_profile

You can uninstall at any time with rustup self uninstall and
these changes will be reverted.

Current installation options:


   default host triple: x86_64-apple-darwin
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1

info: profile set to 'default'
info: default host triple is x86_64-apple-darwin
info: syncing channel updates for 'stable-x86_64-apple-darwin'
info: latest update on 2020-08-27, rust version 1.46.0 (04488afe3 2020-08-24)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
 12.6 MiB /  12.6 MiB (100 %)  11.9 MiB/s in  1s ETA:  0s
info: downloading component 'rust-std'
 14.7 MiB /  14.7 MiB (100 %)  12.0 MiB/s in  1s ETA:  0s
info: downloading component 'rustc'
 47.0 MiB /  47.0 MiB (100 %)  11.1 MiB/s in  4s ETA:  0s
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: Defaulting to 500.0 MiB unpack ram
info: installing component 'clippy'
info: installing component 'rust-docs'
 12.6 MiB /  12.6 MiB (100 %)  11.1 MiB/s in  1s ETA:  0s
info: installing component 'rust-std'
info: installing component 'rustc'
 47.0 MiB /  47.0 MiB (100 %)  15.2 MiB/s in  3s ETA:  0s
info: installing component 'rustfmt'
info: default toolchain set to 'stable'

  stable installed - rustc 1.46.0 (04488afe3 2020-08-24)


Rust is installed now. Great!

To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH
environment variable. Next time you log in this will be done
automatically.

To configure your current shell run source $HOME/.cargo/env

And then I moved this from .bash_profile to .bashrc:

# rust
export PATH="$HOME/.cargo/bin:$PATH"

Install rg

$ cargo install ripgrep
    Updating crates.io index
  Downloaded ripgrep v12.1.1
  Downloaded 1 crate (256.5 KB) in 0.71s
  Installing ripgrep v12.1.1
  Downloaded bytecount v0.6.0
  Downloaded bstr v0.2.13
  Downloaded grep-searcher v0.1.7
  Downloaded ignore v0.4.16
  Downloaded globset v0.4.5
  Downloaded grep-regex v0.1.8
  Downloaded grep-cli v0.1.5
  Downloaded bitflags v1.2.1
  Downloaded base64 v0.12.3
  Downloaded atty v0.2.14
  Downloaded aho-corasick v0.7.13
  Downloaded encoding_rs_io v0.1.7
  Downloaded grep-matcher v0.1.4
  Downloaded grep-printer v0.1.5
  Downloaded memchr v2.3.3
  Downloaded log v0.4.11
  Downloaded grep v0.2.7
  Downloaded encoding_rs v0.8.24
  Downloaded serde_derive v1.0.115
  Downloaded lazy_static v1.4.0
  Downloaded proc-macro2 v1.0.20
  Downloaded num_cpus v1.13.0
  Downloaded serde v1.0.115
  Downloaded walkdir v2.3.1
  Downloaded regex v1.3.9
  Downloaded strsim v0.8.0
  Downloaded ryu v1.0.5
  Downloaded regex-syntax v0.6.18
  Downloaded textwrap v0.11.0
  Downloaded unicode-width v0.1.8
  Downloaded libc v0.2.76
  Downloaded termcolor v1.1.0
  Downloaded fnv v1.0.7
  Downloaded cfg-if v0.1.10
  Downloaded regex-automata v0.1.9
  Downloaded quote v1.0.7
  Downloaded itoa v0.4.6
  Downloaded byteorder v1.3.4
  Downloaded unicode-xid v0.2.1
  Downloaded thread_local v1.0.1
  Downloaded syn v1.0.40
  Downloaded memmap v0.7.0
  Downloaded serde_json v1.0.57
  Downloaded same-file v1.0.6
  Downloaded crossbeam-utils v0.7.2
  Downloaded clap v2.33.3
  Downloaded autocfg v1.0.1
  Downloaded 47 crates (4.4 MB) in 0.81s (largest was `encoding_rs` at 1.4 MB)
   Compiling lazy_static v1.4.0
   Compiling memchr v2.3.3
   Compiling byteorder v1.3.4
   Compiling cfg-if v0.1.10
   Compiling libc v0.2.76
   Compiling log v0.4.11
   Compiling proc-macro2 v1.0.20
   Compiling encoding_rs v0.8.24
   Compiling unicode-xid v0.2.1
   Compiling regex-syntax v0.6.18
   Compiling syn v1.0.40
   Compiling bitflags v1.2.1
   Compiling serde v1.0.115
   Compiling ryu v1.0.5
   Compiling serde_json v1.0.57
   Compiling same-file v1.0.6
   Compiling autocfg v1.0.1
   Compiling fnv v1.0.7
   Compiling serde_derive v1.0.115
   Compiling unicode-width v0.1.8
   Compiling itoa v0.4.6
   Compiling termcolor v1.1.0
   Compiling bytecount v0.6.0
   Compiling strsim v0.8.0
   Compiling base64 v0.12.3
   Compiling thread_local v1.0.1
   Compiling walkdir v2.3.1
   Compiling textwrap v0.11.0
   Compiling aho-corasick v0.7.13
   Compiling grep-matcher v0.1.4
   Compiling clap v2.33.3
   Compiling quote v1.0.7
   Compiling crossbeam-utils v0.7.2
   Compiling regex-automata v0.1.9
   Compiling bstr v0.2.13
   Compiling memmap v0.7.0
   Compiling atty v0.2.14
   Compiling num_cpus v1.13.0
   Compiling regex v1.3.9
   Compiling encoding_rs_io v0.1.7
   Compiling grep-searcher v0.1.7
   Compiling globset v0.4.5
   Compiling grep-regex v0.1.8
   Compiling grep-cli v0.1.5
   Compiling ignore v0.4.16
   Compiling ripgrep v12.1.1
   Compiling grep-printer v0.1.5
   Compiling grep v0.2.7
    Finished release [optimized + debuginfo] target(s) in 1m 02s
  Installing /Users/mrussell/.cargo/bin/rg
   Installed package `ripgrep v12.1.1` (executable `rg`)
$ which rg
/Users/mrussell/.cargo/bin/rg

Git stuff

$ scp russell@10.0.0.31:~/.gitconfig .gitconfig

Made a global .gitignore file, following instructions here:

$ cat .gitignore
# Folder view configuration files
.DS_Store
Desktop.ini

# Thumbnail cache files
._*
Thumbs.db

# Files that might appear on external disks
.Spotlight-V100
.Trashes

# Compiled Python files
*.pyc

# Compiled C++ files
*.out

# Application specific files
venv
node_modules
.sass-cache~:
$ git config --global core.excludesfile ~/.gitignore

Bash completion

I noticed when using git that it didn’t autocomplete, e.g. if I type git com<TAB> it doesn’t become git commit.

$ brew install bash-completion
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> Updated Formulae
Updated 13 formulae.
==> New Casks
cisco-jabber                                                                                             klogg
==> Updated Casks
busycontacts              clashx                    fork                      keepingyouawake           mkvtoolnix                vorta                     webcatalog                yacreader

==> Downloading https://homebrew.bintray.com/bottles/bash-completion-1.3_3.catalina.bottle.tar.gz
######################################################################## 100.0%
==> Pouring bash-completion-1.3_3.catalina.bottle.tar.gz
==> Caveats
Add the following line to your ~/.bash_profile:
  [[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Summary
🍺  /usr/local/Cellar/bash-completion/1.3_3: 189 files, 607.9KB

Then I added the suggested line to my .bash_profile:

[[ -r /usr/local/etc/profile.d/bash_completion.sh ]] && . /usr/local/etc/profile.d/bash_completion.sh

NOT WORKING!!

$ brew uninstall bash-completion
Uninstalling /usr/local/Cellar/bash-completion/1.3_3... (189 files, 607.9KB)
$ brew install bash-completion@2
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> Updated Formulae
Updated 5 formulae.
==> Updated Casks
feishu                                    middle                                    qownnotes                                 rubitrack-pro                             stats

==> Downloading https://homebrew.bintray.com/bottles/bash-5.0.18.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/c6e7b7a521a1cfb21f2872bde253bfd40150bd4ba36ada62c05fcdb73ae094c6?response-content-disposition=attachment%3Bfilename%3D%22bash-5.0.18.catalina.bottle.tar.
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/bash-completion%402-2.11.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/3fe7e4021769be9a92eac055496e6189996c3527270db1dfdd4b0eb8cd7b4192?response-content-disposition=attachment%3Bfilename%3D%22bash-completion%402-2.11.catalin
######################################################################## 100.0%
==> Installing dependencies for bash-completion@2: bash
==> Installing bash-completion@2 dependency: bash
==> Pouring bash-5.0.18.catalina.bottle.tar.gz
🍺  /usr/local/Cellar/bash/5.0.18: 150 files, 9.5MB
==> Installing bash-completion@2
==> Pouring bash-completion@2-2.11.catalina.bottle.tar.gz
==> Caveats
Add the following line to your ~/.bash_profile:
  [[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"
==> Summary
🍺  /usr/local/Cellar/bash-completion@2/2.11: 753 files, 1MB
==> Caveats
==> bash-completion@2
Add the following line to your ~/.bash_profile:
  [[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

STILL NOT WORKING!!

$ brew uninstall bash-completion@2

Start over… this time install git with homebrew

$ brew install git bash-completion
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> New Formulae
croc
==> Updated Formulae
Updated 18 formulae.
==> New Casks
naver-whale                                                            silnite                                                                twilioquest
==> Updated Casks
aerial                                    cool-retro-term                           icollections                              navicat-for-mariadb                       ultimaker-cura
alt-tab                                   couchbase-server-community                lark                                      navicat-for-oracle                        vellum
anzeigenchef                              datovka                                   lingon-x                                  navicat-for-sql-server                    yandex-disk
browserosaurus                            fanny                                     maciasl                                   openmsx
c0re100-qbittorrent                       freesmug-chromium                         marshallofsound-google-play-music-player  prudent
cmake                                     github                                    multibit-hd                               telegram

==> Downloading https://homebrew.bintray.com/bottles/pcre2-10.35.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/6a1e59a5db23d684f92d2bf695601d1b466f3e9d5407f704ba4679d885d13cef?response-content-disposition=attachment%3Bfilename%3D%22pcre2-10.35.catalina.bottle.tar.
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/git-2.28.0.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/6c4d10f29f78dcbefa12fab3e47e7755d5d2ca2e9bbc5aeee4838ad223296d0a?response-content-disposition=attachment%3Bfilename%3D%22git-2.28.0.catalina.bottle.tar.g
######################################################################## 100.0%
==> Installing dependencies for git: pcre2
==> Installing git dependency: pcre2
==> Pouring pcre2-10.35.catalina.bottle.tar.gz
🍺  /usr/local/Cellar/pcre2/10.35: 230 files, 6.0MB
==> Installing git
==> Pouring git-2.28.0.catalina.bottle.tar.gz
==> Caveats
The Tcl/Tk GUIs (e.g. gitk, git-gui) are now in the `git-gui` formula.

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions and functions have been installed to:
  /usr/local/share/zsh/site-functions

Emacs Lisp files have been installed to:
  /usr/local/share/emacs/site-lisp/git
==> Summary
🍺  /usr/local/Cellar/git/2.28.0: 1,482 files, 48.9MB
==> Downloading https://homebrew.bintray.com/bottles/bash-completion-1.3_3.catalina.bottle.tar.gz
Already downloaded: /Users/mrussell/Library/Caches/Homebrew/downloads/21be184d6ca40d06076f8150eb737bf9e3213ffaeecce6c91c096f06014e7218--bash-completion-1.3_3.catalina.bottle.tar.gz
==> Pouring bash-completion-1.3_3.catalina.bottle.tar.gz
==> Caveats
Add the following line to your ~/.bash_profile:
  [[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Summary
🍺  /usr/local/Cellar/bash-completion/1.3_3: 189 files, 607.9KB
==> Caveats
==> git
The Tcl/Tk GUIs (e.g. gitk, git-gui) are now in the `git-gui` formula.

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions and functions have been installed to:
  /usr/local/share/zsh/site-functions

Emacs Lisp files have been installed to:
  /usr/local/share/emacs/site-lisp/git
==> bash-completion
Add the following line to your ~/.bash_profile:
  [[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

Ok… it works. I think I might be super dumb. It looks like git bash completion only works when you’re in a git repo (pretty reasonable…) and I kept testing from my home directory.

Install Chrome

Normal - just download and open the installed.

LaTeX

$ brew cask install basictex
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> Updated Formulae
Updated 10 formulae.
==> Updated Casks
115browser                dbeaver-enterprise        get-iplayer-automator     nosqlbooster-for-mongodb  tempo
balenaetcher              dbschema                  hbuilderx                 obsidian                  thedesk
biscuit                   file-juicer               josm                      openrefine                vivaldi
c0re100-qbittorrent       fontgoggles               keysmith                  pomotroid                 wavebox
chalk                     geogebra                  liclipse                  private-internet-access   wordpresscom
data-science-studio       get-backup-pro            memory                    refined-github-safari

==> Caveats
You must restart your terminal window for the installation of MacTex CLI tools to take effect.
Alternatively, Bash and Zsh users can run the command:

  eval "$(/usr/libexec/path_helper)"

==> Downloading http://mirror.ctan.org/systems/mac/mactex/mactex-basictex-20200407.pkg
==> Downloading from http://mirrors.ibiblio.org/CTAN/systems/mac/mactex/mactex-basictex-20200407.pkg
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'basictex'.
==> Installing Cask basictex
==> Running installer for basictex; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
installer: Package name is
installer: Installing at base path /
installer: The install was successful.
🍺  basictex was successfully installed!

And then (in a new terminal):

$ which pdflatex
/Library/TeX/texbin/pdflatex

Success!

Oh never mind, I tried to export an org-file to pdf and I got the following error:

! LaTeX Error: File `wrapfig.sty' not found.

So, let’s try the (much heavier):

$ brew cask install mactex
Error: Cask 'mactex' conflicts with 'basictex'.
EXIT STATUS: 1
$ brew uninstall basictex
==> Uninstalling Cask basictex
==> Uninstalling packages:
org.tug.mactex.basictex2020
Password:
==> Removing files:
/usr/local/texlive/2020basic
/etc/paths.d/TeX
/etc/manpaths.d/TeX
/Library/TeX
==> Purging files for version 2020.0407 of Cask basictex
$ brew cask install mactex
==> Caveats
You must restart your terminal window for the installation of MacTex CLI tools to take effect.
Alternatively, Bash and Zsh users can run the command:

  eval "$(/usr/libexec/path_helper)"

==> Downloading http://mirror.ctan.org/systems/mac/mactex/mactex-20200407.pkg
==> Downloading from http://ctan.mirrors.hoobly.com/systems/mac/mactex/mactex-20200407.pk
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'mactex'.
==> Installing dependencies: jpeg, libtiff, ghostscript
==> Downloading https://homebrew.bintray.com/bottles/jpeg-9d.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/8f7b82a952fb3937889c7f22da1403
######################################################################## 100.0%
==> Installing jpeg
==> Pouring jpeg-9d.catalina.bottle.tar.gz
🍺  /usr/local/Cellar/jpeg/9d: 21 files, 775.2KB
==> Downloading https://homebrew.bintray.com/bottles/libtiff-4.1.0.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/449bd9123e73e4c4eab85b77322d76
######################################################################## 100.0%
==> Installing libtiff
==> Pouring libtiff-4.1.0.catalina.bottle.tar.gz
🍺  /usr/local/Cellar/libtiff/4.1.0: 247 files, 3.7MB
==> Downloading https://homebrew.bintray.com/bottles/ghostscript-9.52.catalina.bottle.tar
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/8cd0efa1e5525f849be3ee1e50e163
######################################################################## 100.0%
==> Installing ghostscript
==> Pouring ghostscript-9.52.catalina.bottle.tar.gz
🍺  /usr/local/Cellar/ghostscript/9.52: 671 files, 87.4MB
==> Installing Cask mactex
==> Running installer for mactex; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
installer: Package name is MacTeX
installer: choices changes file '/var/folders/73/tmnfq8yx79vgc6hjjbvdryyc0000gn/T/choices20200907-81715-pfghpn.xml' applied
installer: Installing at base path /
installer: The install was successful.
🍺  mactex was successfully installed!

Producing a pdf file from my org-file worked!

Postgres

$ brew install postgres
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> New Formulae
dbdeployer                                                         terrascan
==> Updated Formulae
Updated 82 formulae.
==> New Casks
fastclicker                                                        toggl-track
==> Updated Casks
alt-tab                          flash-player-debugger            mkvtoolnix                       taskade
ariang                           flash-player-debugger-npapi      multitouch                       tiger-trade
atom                             flash-player-debugger-ppapi      netron                           torguard
bankid                           flash-ppapi                      parallels                        trinity
bootstrap-studio                 flipper                          pock                             tunnelblick
cctalk                           fork                             postman                          use-engine
chromium                         frhelper                         prowritingaid                    usenapp
cocoapods                        garagebuy                        psychopy                         vassal
couchbase-server-enterprise      gemini                           pynsource                        vienna
deepl                            google-chrome                    qcad                             visual-studio
dotnet                           gramps                           qlcolorcode                      vivaldi
dotnet-sdk                       hand-mirror                      qq                               webcatalog
eudic                            insync                           rescuetime                       wiznote
expressvpn                       joplin                           ringcentral                      zoom-for-it-admins
fing                             keysmith                         securityspy                      zoomus
finicky                          koodo-reader                     softorino-youtube-converter
flash-npapi                      media-center                     superproductivity
flash-player                     meshlab                          svgcleaner
==> Deleted Casks
mongodb-compass-community                                          toggl

==> Downloading https://homebrew.bintray.com/bottles/icu4c-67.1.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/2d1e91b5127f66e7941790c004817c94c892725c88f84f1e4c37297fcbc0c72f?response-
==> Downloading https://homebrew.bintray.com/bottles/krb5-1.18.2.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/db39e4570abab6459fb857cb41fdd0a375810d25a4c712f4504585255397d150?response-
==> Downloading https://homebrew.bintray.com/bottles/postgresql-12.4.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/cf7e64a4a702db6667582d6a8d83107b67d1457a623fbe04426d9702023612fa?response-
==> Installing dependencies for postgresql: icu4c and krb5
==> Installing postgresql dependency: icu4c
==> Pouring icu4c-67.1.catalina.bottle.tar.gz
==> Caveats
icu4c is keg-only, which means it was not symlinked into /usr/local,
because macOS provides libicucore.dylib (but nothing else).

If you need to have icu4c first in your PATH run:
  echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> /Users/mrussell/.bash_profile
  echo 'export PATH="/usr/local/opt/icu4c/sbin:$PATH"' >> /Users/mrussell/.bash_profile

For compilers to find icu4c you may need to set:
  export LDFLAGS="-L/usr/local/opt/icu4c/lib"
  export CPPFLAGS="-I/usr/local/opt/icu4c/include"

For pkg-config to find icu4c you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"

==> Summary
🍺  /usr/local/Cellar/icu4c/67.1: 258 files, 71.2MB
==> Installing postgresql dependency: krb5
==> Pouring krb5-1.18.2.catalina.bottle.tar.gz
==> Caveats
krb5 is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have krb5 first in your PATH run:
  echo 'export PATH="/usr/local/opt/krb5/bin:$PATH"' >> /Users/mrussell/.bash_profile
  echo 'export PATH="/usr/local/opt/krb5/sbin:$PATH"' >> /Users/mrussell/.bash_profile

For compilers to find krb5 you may need to set:
  export LDFLAGS="-L/usr/local/opt/krb5/lib"
  export CPPFLAGS="-I/usr/local/opt/krb5/include"

For pkg-config to find krb5 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/krb5/lib/pkgconfig"

==> Summary
🍺  /usr/local/Cellar/krb5/1.18.2: 162 files, 4.0MB
==> Installing postgresql
==> Pouring postgresql-12.4.catalina.bottle.tar.gz
==> /usr/local/Cellar/postgresql/12.4/bin/initdb --locale=C -E UTF-8 /usr/local/var/postgres
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
  brew postgresql-upgrade-database

This formula has created a default database cluster with:
  initdb --locale=C -E UTF-8 /usr/local/var/postgres
For more details, read:
  https://www.postgresql.org/docs/12/app-initdb.html

To have launchd start postgresql now and restart at login:
  brew services start postgresql
Or, if you don't want/need a background service you can just run:
  pg_ctl -D /usr/local/var/postgres start
==> Summary
🍺  /usr/local/Cellar/postgresql/12.4: 3,223 files, 37.8MB
==> Caveats
==> icu4c
icu4c is keg-only, which means it was not symlinked into /usr/local,
because macOS provides libicucore.dylib (but nothing else).

If you need to have icu4c first in your PATH run:
  echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> /Users/mrussell/.bash_profile
  echo 'export PATH="/usr/local/opt/icu4c/sbin:$PATH"' >> /Users/mrussell/.bash_profile

For compilers to find icu4c you may need to set:
  export LDFLAGS="-L/usr/local/opt/icu4c/lib"
  export CPPFLAGS="-I/usr/local/opt/icu4c/include"

For pkg-config to find icu4c you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"

==> krb5
krb5 is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have krb5 first in your PATH run:
  echo 'export PATH="/usr/local/opt/krb5/bin:$PATH"' >> /Users/mrussell/.bash_profile
  echo 'export PATH="/usr/local/opt/krb5/sbin:$PATH"' >> /Users/mrussell/.bash_profile

For compilers to find krb5 you may need to set:
  export LDFLAGS="-L/usr/local/opt/krb5/lib"
  export CPPFLAGS="-I/usr/local/opt/krb5/include"

For pkg-config to find krb5 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/krb5/lib/pkgconfig"

==> postgresql
To migrate existing data from a previous major version of PostgreSQL run:
  brew postgresql-upgrade-database

This formula has created a default database cluster with:
  initdb --locale=C -E UTF-8 /usr/local/var/postgres
For more details, read:
  https://www.postgresql.org/docs/12/app-initdb.html

To have launchd start postgresql now and restart at login:
  brew services start postgresql
Or, if you don't want/need a background service you can just run:
  pg_ctl -D /usr/local/var/postgres start

Check:

$ postgres -V
postgres (PostgreSQL) 12.4

Instructions here on how to start a Postgres server automatically on login.

Visual Studio Code

$ brew cask install visual-studio-code
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/cask).
==> Updated Casks
lrtimelapse

==> Downloading https://update.code.visualstudio.com/1.48.2/darwin/stable
==> Downloading from https://az764295.vo.msecnd.net/stable/a0479759d6e9ea56afa657e454193f72aef85bd0/VSCode-darwin-stable.zip
==> Verifying SHA-256 checksum for Cask 'visual-studio-code'.
==> Installing Cask visual-studio-code
==> Moving App 'Visual Studio Code.app' to '/Applications/Visual Studio Code.app'.
==> Linking Binary 'code' to '/usr/local/bin/code'.
🍺  visual-studio-code was successfully installed!

OCaml

Instructions here and here.

$ brew install opam
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> Updated Formulae
Updated 5 formulae.
==> Updated Casks
activedock                 mactracker                 meetingbar

==> Downloading https://homebrew.bintray.com/bottles/opam-2.0.7.catalina.bottle.
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/f159a779ee6521c95c06b
==> Pouring opam-2.0.7.catalina.bottle.tar.gz
==> Caveats
OPAM uses ~/.opam by default for its package database, so you need to
initialize it first by running:

$ opam init

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions have been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
🍺  /usr/local/Cellar/opam/2.0.7: 48 files, 11.4MB
$ opam init
[NOTE] Will configure from built-in defaults.
Checking for available remotes: rsync and local, git.
  - you won't be able to use mercurial repositories unless you install the hg
    command on your system.
  - you won't be able to use darcs repositories unless you install the darcs
    command on your system.


<><> Fetching repository information ><><><><><><><><><><><><><><><><><><><>  🐫
[default] Initialised

<><> Required setup - please read <><><><><><><><><><><><><><><><><><><><><>  🐫

  In normal operation, opam only alters files within ~/.opam.

  However, to best integrate with your system, some environment variables
  should be set. If you allow it to, this initialisation step will update
  your bash configuration by adding the following line to ~/.bash_profile:

    test -r /Users/mrussell/.opam/opam-init/init.sh && . /Users/mrussell/.opam/opam-init/init.sh > /dev/null 2> /dev/null || true

  Otherwise, every time you want to access your opam installation, you will
  need to run:

    eval $(opam env)

  You can always re-run this setup with 'opam init' later.

Do you want opam to modify ~/.bash_profile? [N/y/f]
(default is 'no', use 'f' to choose a different file) y
A hook can be added to opam's init scripts to ensure that the shell remains in sync with the opam environment when they are
loaded. Set that up? [y/N] y

User configuration:
  ~/.bash_profile is already configured for another opam root.

<><> Creating initial switch (ocaml-base-compiler) ><><><><><><><><><><><><>  🐫

<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫
[ocaml-base-compiler.4.11.1] downloaded from cache at https://opam.ocaml.org/cache

<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫
∗ installed base-bigarray.base
∗ installed base-threads.base
∗ installed base-unix.base
∗ installed ocaml-base-compiler.4.11.1
∗ installed ocaml-config.1
∗ installed ocaml.4.11.1
Done.
# Run eval $(opam env) to update the current shell environment
$ eval $(opam env)

Install utop:

$ opam install utop
The following actions will be performed:
  ∗ install dune              2.7.1  [required by utop]
  ∗ install seq               base   [required by lwt]
  ∗ install conf-m4           1      [required by ocamlfind]
  ∗ install ocamlbuild        0.14.0 [required by react]
  ∗ install trie              1.0.0  [required by mew]
  ∗ install result            1.5    [required by lwt]
  ∗ install mmap              1.1.0  [required by lwt]
  ∗ install cppo              1.6.6  [required by utop]
  ∗ install camomile          1.0.2  [required by utop]
  ∗ install ocamlfind         1.8.1  [required by utop]
  ∗ install mew               0.1.0  [required by mew_vi]
  ∗ install csexp             1.3.1  [required by dune-configurator]
  ∗ install charInfo_width    1.1.0  [required by zed]
  ∗ install topkg             1.0.2  [required by react]
  ∗ install base-bytes        base   [required by zed]
  ∗ install dune-configurator 2.7.1  [required by lwt]
  ∗ install react             1.2.1  [required by utop]
  ∗ install ocplib-endian     1.1    [required by lwt]
  ∗ install zed               3.1.0  [required by lambda-term]
  ∗ install mew_vi            0.5.0  [required by lambda-term]
  ∗ install lwt               5.3.0  [required by utop]
  ∗ install lwt_react         1.1.3  [required by utop]
  ∗ install lwt_log           1.1.1  [required by lambda-term]
  ∗ install lambda-term       3.1.0  [required by utop]
  ∗ install utop              2.6.0
===== ∗ 25 =====
Do you want to continue? [Y/n] y

<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫
[charInfo_width.1.1.0] downloaded from cache at https://opam.ocaml.org/cache
[cppo.1.6.6] downloaded from cache at https://opam.ocaml.org/cache
[csexp.1.3.1] downloaded from cache at https://opam.ocaml.org/cache
[dune.2.7.1] downloaded from cache at https://opam.ocaml.org/cache
[camomile.1.0.2] downloaded from cache at https://opam.ocaml.org/cache
[lambda-term.3.1.0] downloaded from cache at https://opam.ocaml.org/cache
[lwt_log.1.1.1] downloaded from cache at https://opam.ocaml.org/cache
[dune-configurator.2.7.1] downloaded from cache at https://opam.ocaml.org/cache
[lwt.5.3.0] downloaded from cache at https://opam.ocaml.org/cache
[lwt_react.1.1.3] downloaded from cache at https://opam.ocaml.org/cache
[mew.0.1.0] downloaded from cache at https://opam.ocaml.org/cache
[mew_vi.0.5.0] downloaded from cache at https://opam.ocaml.org/cache
[mmap.1.1.0] downloaded from cache at https://opam.ocaml.org/cache
[ocplib-endian.1.1] downloaded from cache at https://opam.ocaml.org/cache
[ocamlbuild.0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ocamlfind.1.8.1] downloaded from cache at https://opam.ocaml.org/cache
[react.1.2.1] downloaded from cache at https://opam.ocaml.org/cache
[result.1.5] downloaded from cache at https://opam.ocaml.org/cache
[trie.1.0.0] downloaded from cache at https://opam.ocaml.org/cache
[topkg.1.0.2] downloaded from cache at https://opam.ocaml.org/cache
[zed.3.1.0] downloaded from cache at https://opam.ocaml.org/cache
[utop.2.6.0] downloaded from cache at https://opam.ocaml.org/cache

<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫
∗ installed seq.base
∗ installed conf-m4.1
∗ installed ocamlfind.1.8.1
∗ installed base-bytes.base
∗ installed ocamlbuild.0.14.0
∗ installed dune.2.7.1
∗ installed topkg.1.0.2
∗ installed trie.1.0.0
∗ installed result.1.5
∗ installed mmap.1.1.0
∗ installed cppo.1.6.6
∗ installed csexp.1.3.1
∗ installed ocplib-endian.1.1
∗ installed mew.0.1.0
∗ installed react.1.2.1
∗ installed dune-configurator.2.7.1
∗ installed mew_vi.0.5.0
∗ installed camomile.1.0.2
∗ installed lwt.5.3.0
∗ installed charInfo_width.1.1.0
∗ installed lwt_react.1.1.3
∗ installed lwt_log.1.1.1
∗ installed zed.3.1.0
∗ installed lambda-term.3.1.0
∗ installed utop.2.6.0
Done.

Install Jane Street’s core libraries:

$ opam install base core async
The following actions will be performed:
  ∗ install ppx_derivers            1.2.1   [required by ppxlib]
  ∗ install stdlib-shims            0.1.0   [required by ppxlib]
  ∗ install sexplib0                v0.14.0 [required by base]
  ∗ install jane-street-headers     v0.14.0 [required by core_kernel]
  ∗ install spawn                   v0.13.0 [required by core]
  ∗ install re                      1.9.0   [required by ppx_expect]
  ∗ install num                     1.3     [required by sexplib]
  ∗ install octavius                1.2.2   [required by ppx_js_style]
  ∗ install ocaml-compiler-libs     v0.12.1 [required by ppxlib]
  ∗ install ocaml-migrate-parsetree 2.0.0   [required by ppxlib]
  ∗ install base                    v0.14.0
  ∗ install ppxlib                  0.16.0  [required by ppx_jane]
  ∗ install variantslib             v0.14.0 [required by core_kernel]
  ∗ install typerep                 v0.14.0 [required by core_kernel]
  ∗ install stdio                   v0.14.0 [required by core_kernel]
  ∗ install parsexp                 v0.14.0 [required by sexplib]
  ∗ install fieldslib               v0.14.0 [required by core_kernel]
  ∗ install ppx_stable              v0.14.1 [required by ppx_jane]
  ∗ install ppx_sexp_conv           v0.14.1 [required by core_kernel]
  ∗ install ppx_pipebang            v0.14.0 [required by ppx_jane]
  ∗ install ppx_optional            v0.14.0 [required by ppx_jane]
  ∗ install ppx_let                 v0.14.0 [required by ppx_jane]
  ∗ install ppx_js_style            v0.14.0 [required by ppx_base]
  ∗ install ppx_here                v0.14.0 [required by ppx_jane]
  ∗ install ppx_fixed_literal       v0.14.0 [required by ppx_jane]
  ∗ install ppx_enumerate           v0.14.0 [required by ppx_base]
  ∗ install ppx_compare             v0.14.0 [required by ppx_base, bin_prot]
  ∗ install ppx_cold                v0.14.0 [required by ppx_base]
  ∗ install ppx_variants_conv       v0.14.1 [required by ppx_jane]
  ∗ install ppx_typerep_conv        v0.14.1 [required by ppx_jane]
  ∗ install ppx_optcomp             v0.14.0 [required by ppx_jane]
  ∗ install sexplib                 v0.14.0 [required by core]
  ∗ install ppx_fields_conv         v0.14.1 [required by ppx_jane]
  ∗ install ppx_custom_printf       v0.14.0 [required by ppx_jane]
  ∗ install ppx_sexp_value          v0.14.0 [required by ppx_jane]
  ∗ install ppx_sexp_message        v0.14.0 [required by core_kernel]
  ∗ install ppx_hash                v0.14.0 [required by core_kernel]
  ∗ install ppx_assert              v0.14.0 [required by core_kernel]
  ∗ install bin_prot                v0.14.0 [required by core_kernel]
  ∗ install ppx_base                v0.14.0 [required by core_kernel]
  ∗ install jst-config              v0.14.0 [required by core]
  ∗ install ppx_bin_prot            v0.14.0 [required by ppx_jane]
  ∗ install ppx_string              v0.14.1 [required by ppx_jane]
  ∗ install time_now                v0.14.0 [required by core_kernel]
  ∗ install ppx_module_timer        v0.14.0 [required by ppx_jane]
  ∗ install ppx_inline_test         v0.14.1 [required by core_kernel]
  ∗ install ppx_expect              v0.14.0 [required by ppx_jane]
  ∗ install ppx_bench               v0.14.1 [required by ppx_jane]
  ∗ install splittable_random       v0.14.0 [required by core_kernel]
  ∗ install base_quickcheck         v0.14.0 [required by core_kernel]
  ∗ install ppx_jane                v0.14.0 [required by async, core]
  ∗ install base_bigstring          v0.14.0 [required by core_kernel]
  ∗ install core_kernel             v0.14.0 [required by async, core]
  ∗ install timezone                v0.14.0 [required by core]
  ∗ install protocol_version_header v0.14.0 [required by async_rpc_kernel]
  ∗ install async_kernel            v0.14.0 [required by async]
  ∗ install core                    v0.14.0
  ∗ install async_rpc_kernel        v0.14.0 [required by async]
  ∗ install textutils               v0.14.0 [required by async]
  ∗ install async_unix              v0.14.0 [required by async]
  ∗ install async                   v0.14.0
===== ∗ 61 =====
Do you want to continue? [Y/n] y

<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫
[async_rpc_kernel.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[async.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[async_kernel.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[base_bigstring.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[async_unix.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[base.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[base_quickcheck.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[bin_prot.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[fieldslib.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[core.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[jane-street-headers.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[core_kernel.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[jst-config.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[num.1.3] downloaded from cache at https://opam.ocaml.org/cache
[ocaml-compiler-libs.v0.12.1] downloaded from cache at https://opam.ocaml.org/cache
[ocaml-migrate-parsetree.2.0.0] downloaded from cache at https://opam.ocaml.org/cache
[octavius.1.2.2] downloaded from cache at https://opam.ocaml.org/cache
[parsexp.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_assert.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_base.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_bench.v0.14.1] downloaded from cache at https://opam.ocaml.org/cache
[ppx_cold.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_bin_prot.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_compare.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_custom_printf.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_derivers.1.2.1] downloaded from cache at https://opam.ocaml.org/cache
[ppx_enumerate.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_fields_conv.v0.14.1] downloaded from cache at https://opam.ocaml.org/cache
[ppx_fixed_literal.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_expect.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_hash.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_here.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_inline_test.v0.14.1] downloaded from cache at https://opam.ocaml.org/cache
[ppx_jane.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_js_style.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_let.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_module_timer.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_optcomp.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_optional.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_pipebang.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_sexp_message.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_sexp_conv.v0.14.1] downloaded from cache at https://opam.ocaml.org/cache
[ppx_sexp_value.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_stable.v0.14.1] downloaded from cache at https://opam.ocaml.org/cache
[ppx_string.v0.14.1] downloaded from cache at https://opam.ocaml.org/cache
[ppx_typerep_conv.v0.14.1] downloaded from cache at https://opam.ocaml.org/cache
[ppx_variants_conv.v0.14.1] downloaded from cache at https://opam.ocaml.org/cache
[protocol_version_header.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[ppxlib.0.16.0] downloaded from cache at https://opam.ocaml.org/cache
[re.1.9.0] downloaded from cache at https://opam.ocaml.org/cache
[sexplib.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[sexplib0.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[spawn.v0.13.0] downloaded from cache at https://opam.ocaml.org/cache
[splittable_random.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[stdio.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[stdlib-shims.0.1.0] downloaded from cache at https://opam.ocaml.org/cache
[textutils.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[time_now.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[timezone.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[typerep.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache
[variantslib.v0.14.0] downloaded from cache at https://opam.ocaml.org/cache

<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫
∗ installed jane-street-headers.v0.14.0
∗ installed stdlib-shims.0.1.0
∗ installed spawn.v0.13.0
∗ installed sexplib0.v0.14.0
∗ installed num.1.3
∗ installed ocaml-compiler-libs.v0.12.1
∗ installed octavius.1.2.2
∗ installed ppx_derivers.1.2.1
∗ installed re.1.9.0
∗ installed ocaml-migrate-parsetree.2.0.0
∗ installed base.v0.14.0
∗ installed fieldslib.v0.14.0
∗ installed variantslib.v0.14.0
∗ installed stdio.v0.14.0
∗ installed typerep.v0.14.0
∗ installed parsexp.v0.14.0
∗ installed ppxlib.0.16.0
∗ installed ppx_cold.v0.14.0
∗ installed sexplib.v0.14.0
∗ installed ppx_variants_conv.v0.14.1
∗ installed ppx_typerep_conv.v0.14.1
∗ installed ppx_stable.v0.14.1
∗ installed ppx_sexp_conv.v0.14.1
∗ installed ppx_pipebang.v0.14.0
∗ installed ppx_optional.v0.14.0
∗ installed ppx_optcomp.v0.14.0
∗ installed ppx_let.v0.14.0
∗ installed ppx_js_style.v0.14.0
∗ installed ppx_here.v0.14.0
∗ installed ppx_fixed_literal.v0.14.0
∗ installed ppx_custom_printf.v0.14.0
∗ installed ppx_fields_conv.v0.14.1
∗ installed ppx_enumerate.v0.14.0
∗ installed ppx_compare.v0.14.0
∗ installed ppx_sexp_message.v0.14.0
∗ installed ppx_sexp_value.v0.14.0
∗ installed ppx_hash.v0.14.0
∗ installed ppx_assert.v0.14.0
∗ installed bin_prot.v0.14.0
∗ installed ppx_base.v0.14.0
∗ installed jst-config.v0.14.0
∗ installed ppx_bin_prot.v0.14.0
∗ installed ppx_string.v0.14.1
∗ installed time_now.v0.14.0
∗ installed ppx_module_timer.v0.14.0
∗ installed ppx_inline_test.v0.14.1
∗ installed ppx_bench.v0.14.1
∗ installed ppx_expect.v0.14.0
∗ installed splittable_random.v0.14.0
∗ installed base_quickcheck.v0.14.0
∗ installed ppx_jane.v0.14.0
∗ installed base_bigstring.v0.14.0
∗ installed core_kernel.v0.14.0
∗ installed protocol_version_header.v0.14.0
∗ installed timezone.v0.14.0
∗ installed async_kernel.v0.14.0
∗ installed async_rpc_kernel.v0.14.0
∗ installed core.v0.14.0
∗ installed textutils.v0.14.0
∗ installed async_unix.v0.14.0
∗ installed async.v0.14.0
Done.

I cannot open Core in utop, so now following (Ron’s) instructions here:

$ cat > ~/.ocamlinit
#use "topfind";;
#thread;;
#require "core.top";;
^C
EXIT STATUS: 130
$ cat ~/.ocamlinit
#use "topfind";;
#thread;;
#require "core.top";;
$ utop
─────────────────────────────────────────┬─────────────────────────────────────────────────────────────┬──────────────────────────────────────────
                                         │ Welcome to utop version 2.6.0 (using OCaml version 4.11.1)! │
                                         └─────────────────────────────────────────────────────────────┘
Findlib has been successfully loaded. Additional directives:
  #require "package";;      to load a package
  #list;;                   to list the available packages
  #camlp4o;;                to load camlp4 (standard syntax)
  #camlp4r;;                to load camlp4 (revised syntax)
  #predicates "p,q,...";;   to set these predicates
  Topfind.reset();;         to force that packages will be reloaded
  #thread;;                 to enable threads


Type #utop_help for help about using utop.( 12:47:14 )─< command 0 >────────────────────────────────────────────────────────────────────────────────────────────────────────{ counter: 0 }─
utop # open Core;;( 12:47:16 )─< command 1 >────────────────────────────────────────────────────────────────────────────────────────────────────────{ counter: 0 }─
utop # Core.List.fold;;
- : 'a list -> init:'accum -> f:('accum -> 'a -> 'accum) -> 'accum = <fun>

Success!

Editor setup (still following instructions here):

$ opam install tuareg merlin
The following actions will be performed:
  ∗ install easy-format 1.3.2 [required by yojson]
  ∗ install conf-emacs  1     [required by tuareg]
  ∗ install biniou      1.2.1 [required by yojson]
  ∗ install yojson      1.7.0 [required by merlin]
  ∗ install merlin      3.3.9
  ∗ install tuareg      2.2.0
===== ∗ 6 =====
Do you want to continue? [Y/n] y

<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫
[easy-format.1.3.2] downloaded from cache at https://opam.ocaml.org/cache
[biniou.1.2.1] downloaded from cache at https://opam.ocaml.org/cache
[yojson.1.7.0] downloaded from cache at https://opam.ocaml.org/cache
[tuareg.2.2.0] downloaded from cache at https://opam.ocaml.org/cache
[merlin.3.3.9] downloaded from cache at https://opam.ocaml.org/cache

<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫
∗ installed conf-emacs.1
∗ installed easy-format.1.3.2
∗ installed biniou.1.2.1
∗ installed yojson.1.7.0
∗ installed merlin.3.3.9
∗ installed tuareg.2.2.0
Done.

<><> merlin.3.3.9 installed successfully ><><><><><><><><><><><><><><><><><>  🐫
=> merlin installed.

   Quick setup for VIM
   -------------------
   Append this to your .vimrc to add merlin to vim's runtime-path:
     let g:opamshare = substitute(system('opam config var share'),'\n$','','''')
     execute "set rtp+=" . g:opamshare . "/merlin/vim"

   Also run the following line in vim to index the documentation:
     :execute "helptags " . g:opamshare . "/merlin/vim/doc"

   Quick setup for EMACS
   -------------------
   Add opam emacs directory to your load-path by appending this to your .emacs:
     (let ((opam-share (ignore-errors (car (process-lines "opam" "config" "var" "share")))))
      (when (and opam-share (file-directory-p opam-share))
       ;; Register Merlin
       (add-to-list 'load-path (expand-file-name "emacs/site-lisp" opam-share))
       (autoload 'merlin-mode "merlin" nil t nil)
       ;; Automatically start it in OCaml buffers
       (add-hook 'tuareg-mode-hook 'merlin-mode t)
       (add-hook 'caml-mode-hook 'merlin-mode t)
       ;; Use opam switch to lookup ocamlmerlin binary
       (setq merlin-command 'opam)))

   Take a look at https://github.com/ocaml/merlin for more information

   Quick setup with opam-user-setup
   --------------------------------

   Opam-user-setup support Merlin.

     $ opam user-setup install

   should take care of basic setup.
   See https://github.com/OCamlPro/opam-user-setup

<><> tuareg.2.2.0 installed successfully ><><><><><><><><><><><><><><><><><>  🐫
=> If you have not yet done so, please add the following line to ~/.emacs.d/init.el or ~/.emacs:
       (load "/Users/mrussell/.opam/default/share/emacs/site-lisp/tuareg-site-file")
=> You should consider installing "merlin" (completion, displaying types,...)
   or "caml-mode" (displaying types).  See https://github.com/ocaml/tuareg
   for customization tips.
$ opam install user-setup
The following actions will be performed:
  ∗ install cmdliner   1.0.4 [required by user-setup]
  ∗ install user-setup 0.7
===== ∗ 2 =====
Do you want to continue? [Y/n] y

<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫
[user-setup.0.7] downloaded from cache at https://opam.ocaml.org/cache
[cmdliner.1.0.4] downloaded from cache at https://opam.ocaml.org/cache

<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫
∗ installed cmdliner.1.0.4
∗ installed user-setup.0.7
Done.

<><> user-setup.0.7 installed successfully ><><><><><><><><><><><><><><><><>  🐫
=> To setup or update your editors, run 'opam user-setup install'.
$ opam user-setup install
ocamltop > base > .ocamlinit: adding configuration
emacs > .emacs: already exists, not installing base template
emacs > base > .emacs: adding configuration
emacs > base > .emacs.d/opam-user-setup.el: adding configuration
emacs > tuareg > .emacs.d/opam-user-setup.el: adding configuration
vim > /Users/mrussell/.vimrc: installing new config file template
vim > base > .vimrc: adding configuration

OCamlformat: following instructions here:

$ opam install ocamlformat
The following actions will be performed:
  ∗ install   fix                     20200131         [required by ocamlformat]
  ∗ install   menhirLib               20200624         [required by menhir]
  ↘ downgrade ocaml-migrate-parsetree 2.0.0 to 1.7.3   [required by ocamlformat]
  ∗ install   uchar                   0.0.2            [required by uutf]
  ∗ install   menhirSdk               20200624         [required by menhir]
  ∗ install   astring                 0.8.5            [required by fpath, odoc]
  ↘ downgrade ppxlib                  0.16.0 to 0.15.0 [uses ocaml-migrate-parsetree]
  ∗ install   uutf                    1.0.2            [required by ocamlformat]
  ∗ install   menhir                  20200624         [required by ocamlformat]
  ∗ install   fpath                   0.7.3            [required by ocamlformat]
  ↻ recompile ppx_variants_conv       v0.14.1          [uses ppxlib]
  ↻ recompile ppx_typerep_conv        v0.14.1          [uses ppxlib]
  ↻ recompile ppx_stable              v0.14.1          [uses ppxlib]
  ↻ recompile ppx_sexp_conv           v0.14.1          [uses ppxlib]
  ↻ recompile ppx_pipebang            v0.14.0          [uses ppxlib]
  ↻ recompile ppx_optional            v0.14.0          [uses ppxlib]
  ↻ recompile ppx_optcomp             v0.14.0          [uses ppxlib]
  ↻ recompile ppx_let                 v0.14.0          [uses ppxlib]
  ↻ recompile ppx_js_style            v0.14.0          [uses ppxlib]
  ↻ recompile ppx_here                v0.14.0          [uses ppxlib]
  ↻ recompile ppx_fixed_literal       v0.14.0          [uses ppxlib]
  ↻ recompile ppx_fields_conv         v0.14.1          [uses ppxlib]
  ↻ recompile ppx_enumerate           v0.14.0          [uses ppxlib]
  ↻ recompile ppx_compare             v0.14.0          [uses ppxlib]
  ↻ recompile ppx_cold                v0.14.0          [uses ppxlib]
  ∗ install   uucp                    13.0.0           [required by uuseg]
  ∗ install   tyxml                   4.4.0            [required by odoc]
  ↻ recompile ppx_custom_printf       v0.14.0          [uses ppxlib]
  ↻ recompile ppx_sexp_value          v0.14.0          [uses ppxlib]
  ↻ recompile ppx_sexp_message        v0.14.0          [uses ppxlib]
  ↻ recompile ppx_hash                v0.14.0          [uses ppxlib]
  ↻ recompile ppx_assert              v0.14.0          [uses ppxlib]
  ∗ install   uuseg                   13.0.0           [required by ocamlformat]
  ∗ install   odoc                    1.5.1            [required by ocamlformat]
  ↻ recompile bin_prot                v0.14.0          [uses ppx_sexp_conv, ppx_fields_conv, ppx_compare, etc.]
  ↻ recompile ppx_base                v0.14.0          [uses ppxlib]
  ↻ recompile jst-config              v0.14.0          [uses ppx_assert]
  ∗ install   ocamlformat             0.15.0
  ↻ recompile ppx_bin_prot            v0.14.0          [uses ppxlib]
  ↻ recompile ppx_string              v0.14.1          [uses ppxlib]
  ↻ recompile time_now                v0.14.0          [uses ppx_base, ppx_optcomp]
  ↻ recompile ppx_module_timer        v0.14.0          [uses ppxlib]
  ↻ recompile ppx_inline_test         v0.14.1          [uses ppxlib]
  ↻ recompile ppx_expect              v0.14.0          [uses ppxlib]
  ↻ recompile ppx_bench               v0.14.1          [uses ppxlib]
  ↻ recompile splittable_random       v0.14.0          [uses ppx_assert]
  ↻ recompile base_quickcheck         v0.14.0          [uses ppxlib]
  ↻ recompile ppx_jane                v0.14.0          [uses ppxlib]
  ↻ recompile base_bigstring          v0.14.0          [uses ppx_jane]
  ↻ recompile core_kernel             v0.14.0          [uses ppx_base, base_quickcheck, ppx_assert, ppx_sexp_conv]
  ↻ recompile timezone                v0.14.0          [uses core_kernel, ppx_jane]
  ↻ recompile protocol_version_header v0.14.0          [uses core_kernel, ppx_jane]
  ↻ recompile async_kernel            v0.14.0          [uses core_kernel, ppx_jane]
  ↻ recompile core                    v0.14.0          [uses ppx_jane, core_kernel, jst-config]
  ↻ recompile async_rpc_kernel        v0.14.0          [uses core_kernel, ppx_jane]
  ↻ recompile textutils               v0.14.0          [uses core_kernel, ppx_jane]
  ↻ recompile async_unix              v0.14.0          [uses core_kernel, ppx_jane]
  ↻ recompile async                   v0.14.0          [uses core_kernel, ppx_jane]
===== ∗ 13   ↻ 43   ↘ 2 =====
Do you want to continue? [Y/n] y

<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫
[async.v0.14.0] found in cache
[async_kernel.v0.14.0] found in cache
[async_rpc_kernel.v0.14.0] found in cache
[async_unix.v0.14.0] found in cache
[base_bigstring.v0.14.0] found in cache
[base_quickcheck.v0.14.0] found in cache
[bin_prot.v0.14.0] found in cache
[core.v0.14.0] found in cache
[core_kernel.v0.14.0] found in cache
[astring.0.8.5] downloaded from cache at https://opam.ocaml.org/cache
[jst-config.v0.14.0] found in cache
[fpath.0.7.3] downloaded from cache at https://opam.ocaml.org/cache
[fix.20200131] downloaded from cache at https://opam.ocaml.org/cache
[menhir.20200624] downloaded from cache at https://opam.ocaml.org/cache
[ocaml-migrate-parsetree.1.7.3] downloaded from cache at https://opam.ocaml.org/cache
[menhirLib.20200624] downloaded from cache at https://opam.ocaml.org/cache
[ocamlformat.0.15.0] downloaded from cache at https://opam.ocaml.org/cache
[ppx_assert.v0.14.0] found in cache
[ppx_base.v0.14.0] found in cache
[ppx_bench.v0.14.1] found in cache
[ppx_bin_prot.v0.14.0] found in cache
[ppx_cold.v0.14.0] found in cache
[ppx_compare.v0.14.0] found in cache
[ppx_custom_printf.v0.14.0] found in cache
[ppx_enumerate.v0.14.0] found in cache
[ppx_expect.v0.14.0] found in cache
[ppx_fields_conv.v0.14.1] found in cache
[odoc.1.5.1] downloaded from cache at https://opam.ocaml.org/cache
[ppx_fixed_literal.v0.14.0] found in cache
[ppx_hash.v0.14.0] found in cache
[ppx_here.v0.14.0] found in cache
[ppx_inline_test.v0.14.1] found in cache
[ppx_jane.v0.14.0] found in cache
[ppx_js_style.v0.14.0] found in cache
[ppx_let.v0.14.0] found in cache
[ppx_module_timer.v0.14.0] found in cache
[ppx_optcomp.v0.14.0] found in cache
[ppx_optional.v0.14.0] found in cache
[ppx_pipebang.v0.14.0] found in cache
[ppx_sexp_conv.v0.14.1] found in cache
[ppx_sexp_message.v0.14.0] found in cache
[ppx_sexp_value.v0.14.0] found in cache
[ppx_stable.v0.14.1] found in cache
[ppx_string.v0.14.1] found in cache
[ppx_typerep_conv.v0.14.1] found in cache
[ppx_variants_conv.v0.14.1] found in cache
[protocol_version_header.v0.14.0] found in cache
[splittable_random.v0.14.0] found in cache
[textutils.v0.14.0] found in cache
[menhirSdk.20200624] downloaded from cache at https://opam.ocaml.org/cache
[time_now.v0.14.0] found in cache
[timezone.v0.14.0] found in cache
[ppxlib.0.15.0] downloaded from cache at https://opam.ocaml.org/cache
[uchar.0.0.2] downloaded from cache at https://opam.ocaml.org/cache
[tyxml.4.4.0] downloaded from cache at https://opam.ocaml.org/cache
[uuseg.13.0.0] downloaded from cache at https://opam.ocaml.org/cache
[uutf.1.0.2] downloaded from cache at https://opam.ocaml.org/cache
[uucp.13.0.0] downloaded from cache at https://opam.ocaml.org/cache

<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫
∗ installed uchar.0.0.2
∗ installed menhirSdk.20200624
∗ installed menhirLib.20200624
∗ installed fix.20200131
∗ installed uutf.1.0.2
∗ installed astring.0.8.5
∗ installed fpath.0.7.3
⊘ removed   async.v0.14.0
⊘ removed   async_rpc_kernel.v0.14.0
⊘ removed   async_unix.v0.14.0
⊘ removed   async_kernel.v0.14.0
⊘ removed   protocol_version_header.v0.14.0
⊘ removed   textutils.v0.14.0
⊘ removed   core.v0.14.0
⊘ removed   timezone.v0.14.0
⊘ removed   core_kernel.v0.14.0
⊘ removed   base_bigstring.v0.14.0
⊘ removed   ppx_jane.v0.14.0
⊘ removed   base_quickcheck.v0.14.0
⊘ removed   ppx_bin_prot.v0.14.0
⊘ removed   bin_prot.v0.14.0
⊘ removed   ppx_custom_printf.v0.14.0
⊘ removed   ppx_expect.v0.14.0
⊘ removed   ppx_fields_conv.v0.14.1
⊘ removed   ppx_fixed_literal.v0.14.0
⊘ removed   ppx_let.v0.14.0
⊘ removed   ppx_module_timer.v0.14.0
⊘ removed   ppx_optional.v0.14.0
⊘ removed   ppx_pipebang.v0.14.0
⊘ removed   ppx_sexp_value.v0.14.0
⊘ removed   ppx_stable.v0.14.1
⊘ removed   ppx_string.v0.14.1
⊘ removed   ppx_typerep_conv.v0.14.1
⊘ removed   ppx_variants_conv.v0.14.1
⊘ removed   splittable_random.v0.14.0
⊘ removed   ppx_bench.v0.14.1
⊘ removed   ppx_inline_test.v0.14.1
⊘ removed   ppx_sexp_message.v0.14.0
⊘ removed   time_now.v0.14.0
⊘ removed   jst-config.v0.14.0
⊘ removed   ppx_assert.v0.14.0
⊘ removed   ppx_base.v0.14.0
⊘ removed   ppx_cold.v0.14.0
⊘ removed   ppx_enumerate.v0.14.0
⊘ removed   ppx_hash.v0.14.0
⊘ removed   ppx_compare.v0.14.0
⊘ removed   ppx_here.v0.14.0
⊘ removed   ppx_js_style.v0.14.0
⊘ removed   ppx_optcomp.v0.14.0
⊘ removed   ppx_sexp_conv.v0.14.1
⊘ removed   ppxlib.0.16.0
⊘ removed   ocaml-migrate-parsetree.2.0.0
∗ installed ocaml-migrate-parsetree.1.7.3
∗ installed tyxml.4.4.0
∗ installed menhir.20200624
∗ installed odoc.1.5.1
∗ installed uucp.13.0.0
∗ installed ppxlib.0.15.0
∗ installed ppx_cold.v0.14.0
∗ installed uuseg.13.0.0
∗ installed ppx_optcomp.v0.14.0
∗ installed ppx_variants_conv.v0.14.1
∗ installed ppx_typerep_conv.v0.14.1
∗ installed ppx_stable.v0.14.1
∗ installed ppx_sexp_conv.v0.14.1
∗ installed ppx_pipebang.v0.14.0
∗ installed ppx_optional.v0.14.0
∗ installed ppx_let.v0.14.0
∗ installed ppx_js_style.v0.14.0
∗ installed ppx_here.v0.14.0
∗ installed ppx_fixed_literal.v0.14.0
∗ installed ppx_fields_conv.v0.14.1
∗ installed ppx_enumerate.v0.14.0
∗ installed ppx_custom_printf.v0.14.0
∗ installed ppx_compare.v0.14.0
∗ installed ppx_sexp_value.v0.14.0
∗ installed ppx_sexp_message.v0.14.0
∗ installed ppx_hash.v0.14.0
∗ installed ppx_assert.v0.14.0
∗ installed bin_prot.v0.14.0
∗ installed ppx_base.v0.14.0
∗ installed ocamlformat.0.15.0
∗ installed jst-config.v0.14.0
∗ installed ppx_bin_prot.v0.14.0
∗ installed ppx_string.v0.14.1
∗ installed time_now.v0.14.0
∗ installed ppx_module_timer.v0.14.0
∗ installed ppx_inline_test.v0.14.1
∗ installed ppx_bench.v0.14.1
∗ installed ppx_expect.v0.14.0
∗ installed splittable_random.v0.14.0
∗ installed base_quickcheck.v0.14.0
∗ installed ppx_jane.v0.14.0
∗ installed base_bigstring.v0.14.0
∗ installed core_kernel.v0.14.0
∗ installed protocol_version_header.v0.14.0
∗ installed timezone.v0.14.0
∗ installed async_kernel.v0.14.0
∗ installed async_rpc_kernel.v0.14.0
∗ installed core.v0.14.0
∗ installed textutils.v0.14.0
∗ installed async_unix.v0.14.0
∗ installed async.v0.14.0
Done.

Emacs setup:

  • add $(opam config var share)/emacs/site-lisp to load-path (as done by opam user-setup install)

  • add (require 'ocamlformat) to .emacs

  • optionally add the following to .emacs to bind C-M-<tab> to the ocamlformat command and install a hook to run ocamlformat when saving:

(add-hook 'tuareg-mode-hook (lambda ()
  (define-key tuareg-mode-map (kbd "C-M-<tab>") #'ocamlformat)
  (add-hook 'before-save-hook #'ocamlformat-before-save)))

Didn’t work, I had to enable ocamlformat outside of project:

The project root of an input file is taken to be the nearest ancestor directory that contains a .git or .hg or dune-project file. If no config file is found, then the formatting is disabled.

(I often code in random little ocaml files that are not inside a “project” by the above definition).

Within emacs:

  • M-x customize-group ocamlformat
  • Ocamlformat Enable -> Enable outside detected project -> 1 = Save for Future Sessions

Worked!