<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://www.ianoxley.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.ianoxley.com/" rel="alternate" type="text/html" /><updated>2026-07-13T13:42:02+00:00</updated><id>https://www.ianoxley.com/feed.xml</id><title type="html">Ian Oxley</title><subtitle>Notes on software development and other miscellany. 
</subtitle><author><name>Ian Oxley</name></author><entry><title type="html">Configure jk to exit insert mode in Doom Emacs</title><link href="https://www.ianoxley.com/blog/2026/07/13/doom-jk-exit-insert-mode" rel="alternate" type="text/html" title="Configure jk to exit insert mode in Doom Emacs" /><published>2026-07-13T00:00:00+00:00</published><updated>2026-07-13T00:00:00+00:00</updated><id>https://www.ianoxley.com/blog/2026/07/13/doom-jk-exit-insert-mode</id><content type="html" xml:base="https://www.ianoxley.com/blog/2026/07/13/doom-jk-exit-insert-mode"><![CDATA[<p>For years I configured Vim to exit insert mode via pressing <code class="language-plaintext highlighter-rouge">jk</code> in quick succession.</p>

<p>How do you do this in Doom Emacs? By adding the following snippet to your <code class="language-plaintext highlighter-rouge">config.el</code> file:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(after! evil
  (setopt evil-escape-key-sequence "jk"))
</code></pre></div></div>

<p>By using Doom’s <code class="language-plaintext highlighter-rouge">after!</code> macro you ensure your change to the escape key sequence doesn’t get overwritten by Doom’s default configuration.</p>]]></content><author><name>Ian Oxley</name></author><category term="-emacs" /><category term="-doom" /><summary type="html"><![CDATA[For years I configured Vim to exit insert mode via pressing jk in quick succession.]]></summary></entry><entry><title type="html">Setting up org-jira in Doom Emacs</title><link href="https://www.ianoxley.com/blog/2025/07/30/org-jira" rel="alternate" type="text/html" title="Setting up org-jira in Doom Emacs" /><published>2025-07-30T00:00:00+00:00</published><updated>2025-07-30T00:00:00+00:00</updated><id>https://www.ianoxley.com/blog/2025/07/30/org-jira</id><content type="html" xml:base="https://www.ianoxley.com/blog/2025/07/30/org-jira"><![CDATA[<p><a href="https://github.com/ahungry/org-jira">org-jira</a> is an Emacs package for using Jira in Org Mode. Here’s how I set it up in Doom Emacs:</p>

<ol>
  <li>Add <code class="language-plaintext highlighter-rouge">org-jira</code> to my <code class="language-plaintext highlighter-rouge">~/.config/doom/packages.el</code> file:
    <div class="language-elisp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">(</span><span class="nv">package!</span> <span class="nv">org-jira</span><span class="p">)</span>
</code></pre></div>    </div>
  </li>
  <li>Create a <abbr title="Personal Access Token">PAT</abbr> in Jira</li>
  <li>Store my Jira PAT in my <code class="language-plaintext highlighter-rouge">~/.authinfo</code> file</li>
  <li>Configure <code class="language-plaintext highlighter-rouge">org-jira</code> in my <code class="language-plaintext highlighter-rouge">~/.config/doom/config.el</code> file:
    <div class="language-elisp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">(</span><span class="nv">use-package!</span> <span class="nv">org-jira</span>
  <span class="ss">:config</span>
  <span class="p">(</span><span class="k">setq</span> <span class="nv">jiralib-url</span> <span class="s">"&lt;my-jira-url&gt;"</span><span class="p">)</span>
  <span class="p">(</span><span class="k">setq</span> <span class="nv">jiralib-token</span>
     <span class="p">(</span><span class="nb">cons</span> <span class="s">"Authorization"</span>
           <span class="p">(</span><span class="nv">concat</span> <span class="s">"Bearer "</span> <span class="p">(</span><span class="nv">auth-source-pick-first-password</span>
                              <span class="ss">:host</span> <span class="s">"&lt;my-jira-url&gt;"</span><span class="p">)))))</span>
</code></pre></div>    </div>
  </li>
</ol>]]></content><author><name>Ian Oxley</name></author><category term="-emacs" /><category term="-jira" /><summary type="html"><![CDATA[org-jira is an Emacs package for using Jira in Org Mode. Here’s how I set it up in Doom Emacs:]]></summary></entry><entry><title type="html">Doomed</title><link href="https://www.ianoxley.com/blog/2025/01/16/doomed" rel="alternate" type="text/html" title="Doomed" /><published>2025-01-16T00:00:00+00:00</published><updated>2025-01-16T00:00:00+00:00</updated><id>https://www.ianoxley.com/blog/2025/01/16/doomed</id><content type="html" xml:base="https://www.ianoxley.com/blog/2025/01/16/doomed"><![CDATA[<p>I’ve dabbled with Emacs off and on over the years, but it’s never really stuck and I’ve ended up going back to Vim. I had another go with <a href="https://github.com/doomemacs/doomemacs">Doom Emacs</a> towards the end of last year and…I’m still using it now months later!</p>

<p>I’m not entirely sure why, although I think these things helped:</p>

<ul>
  <li>LSP support</li>
  <li>Lots of Doom modules have flags to add additional functionality e.g. <code class="language-plaintext highlighter-rouge">(ruby +rails +rbenv +lsp)</code> to add Rails, rbenv support, and add LSP integration to the Ruby module</li>
  <li><a href="https://docs.projectile.mx/projectile/index.html">Projectile</a></li>
  <li>Setting up the built in terminal emulator to use vterm</li>
  <li>Org Mode</li>
</ul>]]></content><author><name>Ian Oxley</name></author><category term="-emacs" /><summary type="html"><![CDATA[I’ve dabbled with Emacs off and on over the years, but it’s never really stuck and I’ve ended up going back to Vim. I had another go with Doom Emacs towards the end of last year and…I’m still using it now months later!]]></summary></entry><entry><title type="html">Blocking FLoC</title><link href="https://www.ianoxley.com/blog/2021/04/28/blocking-floc" rel="alternate" type="text/html" title="Blocking FLoC" /><published>2021-04-28T00:00:00+00:00</published><updated>2021-04-28T00:00:00+00:00</updated><id>https://www.ianoxley.com/blog/2021/04/28/blocking-floc</id><content type="html" xml:base="https://www.ianoxley.com/blog/2021/04/28/blocking-floc"><![CDATA[<p>Google’s new Federated Learning of Cohorts (FLoC) venture <a href="https://www.eff.org/deeplinks/2021/03/googles-floc-terrible-idea">hasn’t exactly been warmly received</a>.</p>

<p>There are several ways to <a href="https://paramdeo.com/blog/opting-your-website-out-of-googles-floc-network">prevent your site from becoming part of the FLoC network</a>, you just need to pick the one most appropriate for your setup. As I host this site on GitHub Pages, all I needed to do was add a <code class="language-plaintext highlighter-rouge">&lt;meta&gt;</code> tag to the head of my page like so:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;meta</span> <span class="na">http-equiv=</span><span class="s">"Permissions-Policy"</span> <span class="na">content=</span><span class="s">"interest-cohort()"</span><span class="nt">&gt;</span>
</code></pre></div></div>

<p><span lang="fr">Et voilà!</span> FLoC off.</p>]]></content><author><name>Ian Oxley</name></author><category term="-html" /><category term="-google" /><category term="-floc" /><summary type="html"><![CDATA[Google’s new Federated Learning of Cohorts (FLoC) venture hasn’t exactly been warmly received.]]></summary></entry><entry><title type="html">Displaying the Numbers Only Keypad for HTML</title><link href="https://www.ianoxley.com/blog/2020/10/29/input-type-number-numeric-keypad" rel="alternate" type="text/html" title="Displaying the Numbers Only Keypad for HTML" /><published>2020-10-29T00:00:00+00:00</published><updated>2020-10-29T00:00:00+00:00</updated><id>https://www.ianoxley.com/blog/2020/10/29/input-type-number-numeric-keypad</id><content type="html" xml:base="https://www.ianoxley.com/blog/2020/10/29/input-type-number-numeric-keypad"><![CDATA[<p>It turns out that <code class="language-plaintext highlighter-rouge">&lt;input type="number"&gt;</code> isn’t enough on its own to get
a mobile / touchscreen device to display a numbers only keypad. By default
you’ll get the punctuation symbols too:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;label</span> <span class="na">for=</span><span class="s">"numbers-and-special-chars"</span><span class="nt">&gt;</span>Enter numeric code<span class="nt">&lt;/label&gt;</span>
<span class="nt">&lt;input</span> <span class="na">id=</span><span class="s">"numbers-and-special-chars"</span> <span class="na">type=</span><span class="s">"number"</span><span class="nt">&gt;</span>
</code></pre></div></div>

<p>To get the number only keypad you also need to add the <code class="language-plaintext highlighter-rouge">pattern</code> attribute, and
set its value to <code class="language-plaintext highlighter-rouge">[0-9]*</code> like this:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;label</span> <span class="na">for=</span><span class="s">"numbers-only"</span><span class="nt">&gt;</span>Enter numeric code<span class="nt">&lt;/label&gt;</span>
<span class="nt">&lt;input</span> <span class="na">id=</span><span class="s">"numbers-only"</span> <span class="na">type=</span><span class="s">"number"</span> <span class="na">pattern=</span><span class="s">"[0-9]*"</span><span class="nt">&gt;</span>
</code></pre></div></div>]]></content><author><name>Ian Oxley</name></author><category term="-html" /><category term="-til" /><summary type="html"><![CDATA[It turns out that &lt;input type="number"&gt; isn’t enough on its own to get a mobile / touchscreen device to display a numbers only keypad. By default you’ll get the punctuation symbols too:]]></summary></entry><entry><title type="html">Up and Running with LocalStack and Docker Compose</title><link href="https://www.ianoxley.com/blog/2019/09/10/up-and-running-with-localstack" rel="alternate" type="text/html" title="Up and Running with LocalStack and Docker Compose" /><published>2019-09-10T00:00:00+00:00</published><updated>2019-09-10T00:00:00+00:00</updated><id>https://www.ianoxley.com/blog/2019/09/10/up-and-running-with-localstack</id><content type="html" xml:base="https://www.ianoxley.com/blog/2019/09/10/up-and-running-with-localstack"><![CDATA[<p><a href="https://github.com/localstack/localstack">LocalStack</a> is a “fully functional local AWS cloud stack” which lets you write
and test AWS code locally.</p>

<p>It’s relatively easy to add it to an existing <code class="language-plaintext highlighter-rouge">docker-compose.yml</code> file. You
add <code class="language-plaintext highlighter-rouge">localstack</code> as a <code class="language-plaintext highlighter-rouge">service</code>, and tell it to use one of the localstack
images:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>services:
  localstack:
    container_name: localstack
    image: localstack/localstack 
</code></pre></div></div>

<p>You can specify which services you need using the <code class="language-plaintext highlighter-rouge">SERVICES</code> environment
variable e.g. if you’re only using SNS and SQS you might do something like
this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>services:
  localstack:
    container_name: localstack
    image: localstack/localstack 
    environment:
      - SERVICES=sns:4575,sqs:4576
</code></pre></div></div>

<p>This runs sns on port 4575, and sqs on port 4576. You can expose those ports in
the usual way, and set an <code class="language-plaintext highlighter-rouge">HOSTNAME_EXTERNAL</code> environment variable if you need
to:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>services:
  localstack:
    container_name: localstack
    image: localstack/localstack 
    environment:
      - HOSTNAME_EXTERNAL=localstack
      - SERVICES=sns:4575,sqs:4576
    ports:
      - "4575:4575"
      - "4576:4576"
</code></pre></div></div>

<p>The LocalStack container comes with <a href="https://github.com/localstack/awscli-local">awslocal</a> installed by default, which is
handy to use in a healthcheck to make sure your queues, etc. are available
before your application code tries to use them:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>services:
  localstack:
    container_name: localstack
    image: localstack/localstack 
    healthcheck:
      test: awslocal sns list-topics &amp;&amp; awslocal sqs list-queues
      interval: 3s
      timeout: 10s
    environment:
      - HOSTNAME_EXTERNAL=localstack
      - SERVICES=sns:4575,sqs:4576
    ports:
      - "4575:4575"
      - "4576:4576"
</code></pre></div></div>

<p>Note that when using <code class="language-plaintext highlighter-rouge">awslocal</code> it will default to the <code class="language-plaintext highlighter-rouge">us-east-1</code> region
unless you set the <code class="language-plaintext highlighter-rouge">AWS_DEFAULT_REGION</code> environment
variable to your region of choice:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>services:
  localstack:
    container_name: localstack
    image: localstack/localstack 
    healthcheck:
      test: awslocal sns list-topics &amp;&amp; awslocal sqs list-queues
      interval: 3s
      timeout: 10s
    environment:
      - AWS_DEFAULT_REGION=eu-west-1
      - HOSTNAME_EXTERNAL=localstack
      - SERVICES=sns:4575,sqs:4576
    ports:
      - "4575:4575"
      - "4576:4576"
</code></pre></div></div>

<p>Comprehensive details of what LocalStack provides, and on how you can configure it, are
available on the LocalStack GitHub repo: <a href="https://github.com/localstack/localstack">https://github.com/localstack/localstack</a></p>

<p>Hopefully the above is enough to get you up and running.</p>]]></content><author><name>Ian Oxley</name></author><category term="-docker" /><category term="-aws" /><category term="-localstack" /><summary type="html"><![CDATA[LocalStack is a “fully functional local AWS cloud stack” which lets you write and test AWS code locally.]]></summary></entry><entry><title type="html">Getting the solarized8 theme working in Vim in tmux</title><link href="https://www.ianoxley.com/blog/2019/09/10/solarized8-theme-in-vim-in-tmux" rel="alternate" type="text/html" title="Getting the solarized8 theme working in Vim in tmux" /><published>2019-09-10T00:00:00+00:00</published><updated>2019-09-10T00:00:00+00:00</updated><id>https://www.ianoxley.com/blog/2019/09/10/solarized8-theme-in-vim-in-tmux</id><content type="html" xml:base="https://www.ianoxley.com/blog/2019/09/10/solarized8-theme-in-vim-in-tmux"><![CDATA[<p>My current theme of choice in Vim is
<a href="https://github.com/lifepillar/vim-solarized8">solarized8</a>, which requires true
colors support in your terminal. It works perfectly when running Vim inside of
iTerm, but it wasn’t working quite as well in Vim <a href="https://camo.githubusercontent.com/09751398c97d1a3907c45d45072c9a40010d3a8c/68747470733a2f2f7261772e6769746875622e636f6d2f6c69666570696c6c61722f5265736f75726365732f6d61737465722f736f6c6172697a6564382f736f6c6172697a6564385f6461726b5f3235362e706e67">inside
tmux</a>.</p>

<p>Lots of advice online suggests either making sure you launch tmux using <code class="language-plaintext highlighter-rouge">tmux
-2</code>, or adding <code class="language-plaintext highlighter-rouge">set -g default-terminal "screen-256color"</code> to your
<code class="language-plaintext highlighter-rouge">~/.tmux.conf</code> file. Neither of these fixes worked for me, although YMMV.</p>

<p>What <em>did</em> fix things for me was adding terminal overrides to <code class="language-plaintext highlighter-rouge">~/.tmux.conf</code>
like so:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>set -ga terminal-overrides ",*256col*:Tc"
</code></pre></div></div>

<p>Huge thanks to <a href="https://github.com/rinetd">rineth</a> for their <a href="https://github.com/tmux/tmux/issues/1246">helpful
post</a>.</p>]]></content><author><name>Ian Oxley</name></author><category term="-vim" /><category term="-tmux" /><category term="-iterm" /><summary type="html"><![CDATA[My current theme of choice in Vim is solarized8, which requires true colors support in your terminal. It works perfectly when running Vim inside of iTerm, but it wasn’t working quite as well in Vim inside tmux.]]></summary></entry><entry><title type="html">More adventures in Spacemacs</title><link href="https://www.ianoxley.com/blog/2018/05/14/more-adventures-in-spacemacs" rel="alternate" type="text/html" title="More adventures in Spacemacs" /><published>2018-05-14T00:00:00+00:00</published><updated>2018-05-14T00:00:00+00:00</updated><id>https://www.ianoxley.com/blog/2018/05/14/more_adventures_in_spacemacs</id><content type="html" xml:base="https://www.ianoxley.com/blog/2018/05/14/more-adventures-in-spacemacs"><![CDATA[<p>Following on from <a href="http://www.ianoxley.com/blog/2018/05/10/adventures-in-spacemacs">last week’s post</a> here’s a couple of Spacemacs related things I’ve come across since then.</p>

<h2 id="jekyll-layer">Jekyll layer</h2>
<p>I write this blog using <a href="https://jekyllrb.com/">Jekyll</a>, so I’ve added a <a href="https://allysonjulian.com/posts/blogging_with_spacemacs_and_jekyll/">Jekyll layer</a> to make managing posts a bit easier. You need to add it as a private layer, and it acts as a wrapper around <a href="https://github.com/nibrahim/Hyde">Hyde</a> with some Spacemacs key bindings.</p>

<h2 id="dotspacemacs-major-mode-leader-key">dotspacemacs-major-mode-leader-key</h2>

<p>Spacemacs comes with a <code class="language-plaintext highlighter-rouge">dotspacemacs-major-mode-leader-key</code> variable, which defaults to <code class="language-plaintext highlighter-rouge">,</code>. This acts as a shortcut to access the major mode <code class="language-plaintext highlighter-rouge">SPC m</code> commands. However, I didn’t know about this when I setup Spacemacs and remapped my leader key to <code class="language-plaintext highlighter-rouge">,</code>. Consequently, when I tried to schedule an item in org mode I couldn’t work out why it didn’t schedule the item but opened a new email with my whole org file in it as HTML :thinking:</p>

<p>To get around this I’ve updated my <code class="language-plaintext highlighter-rouge">.spacemacs</code> file and set <code class="language-plaintext highlighter-rouge">dotspacemacs-major-mode-leader-key nil</code> in <code class="language-plaintext highlighter-rouge">dotspacemacs/init</code>.</p>]]></content><author><name>Ian Oxley</name></author><category term="-spacemacs" /><summary type="html"><![CDATA[Following on from last week’s post here’s a couple of Spacemacs related things I’ve come across since then.]]></summary></entry><entry><title type="html">Adventures in Spacemacs</title><link href="https://www.ianoxley.com/blog/2018/05/10/adventures-in-spacemacs" rel="alternate" type="text/html" title="Adventures in Spacemacs" /><published>2018-05-10T00:00:00+00:00</published><updated>2018-05-10T00:00:00+00:00</updated><id>https://www.ianoxley.com/blog/2018/05/10/adventures-in-spacemacs</id><content type="html" xml:base="https://www.ianoxley.com/blog/2018/05/10/adventures-in-spacemacs"><![CDATA[<p>Recently I decided to give <a href="http://spacemacs.org/">Spacemacs</a> a try. If you’ve not heard of Spacemacs, it’s a combination of Emacs and Vim with tons of ergonomical key bindings.</p>

<p>Things I really like about it so far include:</p>

<ol>
  <li>That any Git repo automatically becomes a project</li>
  <li>The recent projects list / project switcher</li>
  <li>Fuzzy finding logic when opening a file in a project (I’m used to using fzf with Vim, so this has so far been a seemless replacement)</li>
  <li>The ease with which it kind of sets itself up for you when you open a file of a particular type (I opened a HTML file for the first time it offered to install the HTML layer which comes with <a href="https://github.com/syl20bnr/spacemacs/tree/master/layers/%2Blang/html">emmet-mode and loads of useful key bindings</a>)</li>
  <li>Org mode</li>
  <li>Key binding discovery :heart:
<img src="/assets/img/spacemacs_key_binding_discovery.png" alt="Spacemacs key binding discovery" /></li>
</ol>

<p>I’ve come across a few snags though:</p>

<ol>
  <li>Org mode wouldn’t quite work out of the box. I had to exclude the <a href="https://github.com/syl20bnr/spacemacs/issues/9374#issuecomment-336688513">org-projectile</a> package, and ensure I was <a href="https://github.com/syl20bnr/spacemacs/issues/8074#issuecomment-280253777"><em>not</em> using the built-in org mode</a>.</li>
  <li>Keyboard shortcuts when using the shell layer are all kinds of messed up. I suspect it’s some sort of conflict between the Emacs shell commands and the Evil layer / commands and need to spend some time figuring out what’s what.</li>
</ol>

<p>Time will tell whether I stick with Spacemacs, or revert back to Vim. So far though, so good.</p>]]></content><author><name>Ian Oxley</name></author><category term="-vim" /><category term="-emacs" /><category term="-spacemacs" /><summary type="html"><![CDATA[Recently I decided to give Spacemacs a try. If you’ve not heard of Spacemacs, it’s a combination of Emacs and Vim with tons of ergonomical key bindings.]]></summary></entry><entry><title type="html">Managing Node.js Versions With Homebrew</title><link href="https://www.ianoxley.com/blog/2018/02/02/managing-node-versions-with-homebrew" rel="alternate" type="text/html" title="Managing Node.js Versions With Homebrew" /><published>2018-02-02T00:00:00+00:00</published><updated>2018-02-02T00:00:00+00:00</updated><id>https://www.ianoxley.com/blog/2018/02/02/managing-node-versions-with-homebrew</id><content type="html" xml:base="https://www.ianoxley.com/blog/2018/02/02/managing-node-versions-with-homebrew"><![CDATA[<p><strong>TL;DR</strong> Manage <a href="https://nodejs.org">Node.js</a> versions with <a href="https://brew.sh/">Homebrew</a> by using <code class="language-plaintext highlighter-rouge">brew link</code> and <code class="language-plaintext highlighter-rouge">brew unlink</code>:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$&gt;</span> node <span class="nt">-v</span>
v9.5.0
<span class="nv">$&gt;</span> brew <span class="nb">unlink </span>node
<span class="nv">$&gt;</span> brew <span class="nb">link</span> <span class="nt">--force</span> node@8
<span class="nv">$&gt;</span> node <span class="nt">-v</span>
v8.9.4
</code></pre></div></div>

<hr />

<p>Although you can use <a href="https://github.com/creationix/nvm">dedicated tools</a> to manage your Node.js versions, I’ve got
by just fine using Homebrew’s <code class="language-plaintext highlighter-rouge">link</code> and <code class="language-plaintext highlighter-rouge">unlink</code> commands:</p>

<ol>
  <li>
    <p>Homebrew’s <code class="language-plaintext highlighter-rouge">node</code> package points at the latest version of Node.js. You can find out exactly which version by running <code class="language-plaintext highlighter-rouge">brew info node</code>:</p>

    <div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$&gt;</span> brew info node
node: stable 9.5.0 <span class="o">(</span>bottled<span class="o">)</span>, HEAD
...
</code></pre></div>    </div>
  </li>
  <li>Install <code class="language-plaintext highlighter-rouge">node</code> using <code class="language-plaintext highlighter-rouge">brew install node</code></li>
  <li>
    <p>Homebrew formulae are available for prior versions of Node.js and follow the <code class="language-plaintext highlighter-rouge">node@&lt;version&gt;</code>
naming convention. You can see exactly which version of Node.js a formula points to by
using the <code class="language-plaintext highlighter-rouge">info</code> command:</p>

    <div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$&gt;</span> brew info node@8
node@8: stable 8.9.4 <span class="o">(</span>bottled<span class="o">)</span>, HEAD <span class="o">[</span>keg-only]
...
</code></pre></div>    </div>
  </li>
  <li>Install <code class="language-plaintext highlighter-rouge">node@8</code> using <code class="language-plaintext highlighter-rouge">brew install node@8</code></li>
  <li>
    <p>With <code class="language-plaintext highlighter-rouge">node</code> and <code class="language-plaintext highlighter-rouge">node@8</code> installed we can switch between them like so:</p>

    <div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$&gt;</span> node <span class="nt">-v</span>
v9.5.0 <span class="c"># &lt;- node is pointing at the node formula</span>
<span class="nv">$&gt;</span> brew <span class="nb">unlink </span>node
<span class="nv">$&gt;</span> brew <span class="nb">link</span> <span class="nt">--force</span> node@8 <span class="c"># --force required as node@8 is a keg-only formula</span>
<span class="nv">$&gt;</span> node <span class="nt">-v</span>
v8.9.4 <span class="c"># &lt;- node now points at the node@8 formula</span>
</code></pre></div>    </div>
  </li>
  <li>
    <p>To change back to the latest Node.js, just do the opposite to what we’ve
just done:</p>

    <div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$&gt;</span> brew <span class="nb">unlink </span>node@8
<span class="nv">$&gt;</span> brew <span class="nb">link </span>node
<span class="nv">$&gt;</span> node <span class="nt">-v</span>
v9.5.0
</code></pre></div>    </div>
  </li>
</ol>]]></content><author><name>Ian Oxley</name></author><category term="-nodejs" /><category term="-homebrew" /><summary type="html"><![CDATA[TL;DR Manage Node.js versions with Homebrew by using brew link and brew unlink:]]></summary></entry></feed>