<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us"><generator uri="https://gohugo.io/" version="0.101.0">Hugo</generator><title type="html">installation on A Scripter's Notes</title><subtitle type="html">Emacs, scripting and anything text oriented.</subtitle><link href="https://scripter.co/tags/installation/" rel="alternate" type="text/html" title="HTML"/><link href="https://scripter.co/tags/installation/index.xml" rel="alternate" type="application/rss+xml" title="RSS"/><link href="https://scripter.co/tags/installation/atom.xml" rel="self" type="application/atom+xml" title="Atom"/><link href="https://scripter.co/tags/installation/jf2feed.json" rel="alternate" type="application/jf2feed+json" title="jf2feed"/><updated>2026-04-22T08:24:58-04:00</updated><author><name>Kaushal Modi</name><email>kaushal.modi@gmail.com</email></author><id>https://scripter.co/tags/installation/</id><entry><title type="html">Installing bleeding edge Hugo + Goorgeous</title><link href="https://scripter.co/installing-bleeding-edge-hugo-goorgeous/?utm_source=atom_feed" rel="alternate" type="text/html"/><link href="https://scripter.co/count-down-timer-in-shell/?utm_source=atom_feed" rel="related" type="text/html" title="Count Down Timer in Shell"/><link href="https://scripter.co/check-if-a-command-exists-from-shell-script/?utm_source=atom_feed" rel="related" type="text/html" title="Check If a Command/Executable Exists from Shell Script"/><id>https://scripter.co/installing-bleeding-edge-hugo-goorgeous/</id><published>2017-03-07T21:36:13-05:00</published><updated>2017-03-07T21:36:13-05:00</updated><content type="html"><![CDATA[<p><strong>Outdated</strong> post on how to build <code>hugo</code> from source with the latest
commit from the <em>goorgeous</em> package.</p>
<p><strong>Update (2017/06/16)</strong></p>
<p>Updated the github source references as per
the changes in <code>hugo</code> v0.23<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. Also made the shell
script <a href="https://github.com/koalaman/shellcheck">ShellCheck</a>-passing! 🙌 §</p>
<hr>
<p>You already got <code>go</code> installed, and that&rsquo;s why are you reading it.</p>
<p>         If not &ndash; Go! <a href="/installing-go-toolchain/">Install it!</a></p>
<p>So.. now that you have <code>go</code> installed, why settle for the
release version of <a href="https://gohugo.io/"><code>hugo</code></a>! You are reading this blog post
generated using the bleeding edge of <code>hugo</code><sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>.</p>
<p>In addition, Hugo v0.19 onwards supports the <a href="https://orgmode.org/"><em>org-mode</em></a>
syntax<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, which is so much more awesome than <em>markdown</em>,
especially if you are using emacs.</p>
<p>This post is about how you can install the latest versions of <code>hugo</code> and the go
package that adds the <em>org-mode</em> support &ndash; <a href="https://github.com/chaseadamsio/goorgeous"><code>goorgeous</code></a>.</p>

<h2 id="first-time-install-of-hugo">First time install of hugo&nbsp;<a class="headline-hash no-text-decoration" href="#first-time-install-of-hugo">#</a></h2>


<p>When any package gets installed using <code>go get</code>, it gets installed
inside the <code>$GOPATH/src/</code> directory. We install <code>hugo</code> using <code>go get</code>
for this <em>one-and-only</em> time to get that correct directory structure
in there:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">go get -u -v github.com/gohugoio/hugo
</span></span></code></pre></div>
<h2 id="installing-hugo-from-master">Installing hugo from master&nbsp;<a class="headline-hash no-text-decoration" href="#installing-hugo-from-master">#</a></h2>


<p>Now you should find the <code>hugo</code> source code in
<code>$GOPATH/src/github.com/gohugoio/hugo/</code>.</p>
<p><strong>From here on, run all commands in that directory! </strong><sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup></p>
<p>To get the latest files from the <em>master</em> branch do:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git fetch --all <span class="c1"># fetch new branch names if any</span>
</span></span><span class="line"><span class="cl">git checkout master
</span></span><span class="line"><span class="cl"><span class="c1"># I also do hard reset as I don&#39;t develop any code in go</span>
</span></span><span class="line"><span class="cl">git reset --hard origin/master
</span></span></code></pre></div>
<h3 id="govendor">Govendor&nbsp;<a class="headline-hash no-text-decoration" href="#govendor">#</a></h3>


<p>Hugo does its package dependency management using <a href="https://github.com/kardianos/govendor"><code>govendor</code></a>,
which, not surprisingly, is also a <code>go</code> package. (<code>goorgeous</code> is one
of these dependent packages.)</p>
<p>So you would install <code>govendor</code> like any other <code>go</code> package:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">go get -u -v github.com/kardianos/govendor
</span></span></code></pre></div><p>The package dependency database is stored in
<code>$GOPATH/src/github.com/gohugoio/hugo/vendor/vendor.json</code>. This JSON
file specifies what other <code>go</code> packages need to be installed from
which git repo, using which commit.</p>
<p>Govendor makes installing the right versions of the dependent packages
easy &ndash; Just run the below.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">govendor sync
</span></span></code></pre></div>
<h3 id="latest-goorgeous">Latest <code>goorgeous</code>&nbsp;<a class="headline-hash no-text-decoration" href="#latest-goorgeous">#</a></h3>


<p><strong>Note:</strong> If you do not wish to update to the latest version of
<code>goorgeous</code>, you can skip this step.</p>
<p>The commit hash for <code>goorgeous</code> in that JSON file might not
point to its latest version. But we are interested in getting the
latest-and-greatest <em>org-mode</em> support for <code>hugo</code> ..</p>
<p>The good news is that <code>govendor</code> allows that:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Fetch the goorgeous package from its master branch</span>
</span></span><span class="line"><span class="cl">govendor fetch github.com/chaseadamsio/goorgeous
</span></span></code></pre></div><p><em>See the Govendor <a href="https://github.com/kardianos/govendor#quick-start-also-see-the-faq">Quick Start Guide</a> for frequently used
commands.</em></p>

<h3 id="static-executable">Static Executable&nbsp;<a class="headline-hash no-text-decoration" href="#static-executable">#</a></h3>


<p>We want to make the <code>hugo</code> executable a <strong>static</strong> executable.</p>
<p>That way it is <em>100% portable</em> &mdash; independent of dynamically linked
libraries. This is also how the <em>Continuous Integration</em> engines (like
the Gitlab CI Runner that generates this blog) can use this custom
built <code>hugo</code> binary without any dynamic library dependency issue.</p>
<p>To enable static building of <code>go</code> binaries, these env variables need
to be set:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">CGO_ENABLED</span><span class="o">=</span><span class="m">0</span>
</span></span><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">GO_EXTLINK_ENABLED</span><span class="o">=</span><span class="m">0</span>
</span></span></code></pre></div><p><em>Note that above (and the snippet that follows) work in a <code>bash</code>
shell. Even if your default shell is not <code>bash</code>, you can run the <a href="#full-build-script">full
<code>bash</code> script</a> at the end of this post.</em></p>

<h3 id="building-hugo">Building Hugo&nbsp;<a class="headline-hash no-text-decoration" href="#building-hugo">#</a></h3>


<p>We now finally build <code>hugo</code>, with some customization so that
running <code>hugo version</code> prints the <em>Build Date</em> and <em>Commit Hash</em>
too.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">package</span><span class="o">=</span><span class="s2">&#34;github.com/gohugoio/hugo&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">commithash</span><span class="o">=</span><span class="k">$(</span>git rev-parse --short HEAD 2&gt;/dev/null<span class="k">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">builddate</span><span class="o">=</span><span class="k">$(</span>date +%FT%T%z<span class="k">)</span>
</span></span><span class="line"><span class="cl">go install -v <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>   -ldflags <span class="s2">&#34;-X </span><span class="si">${</span><span class="nv">package</span><span class="si">}</span><span class="s2">/hugolib.CommitHash=</span><span class="si">${</span><span class="nv">commithash</span><span class="si">}</span><span class="s2"> \
</span></span></span><span class="line"><span class="cl"><span class="s2">             -X </span><span class="si">${</span><span class="nv">package</span><span class="si">}</span><span class="s2">/hugolib.BuildDate=</span><span class="si">${</span><span class="nv">builddate</span><span class="si">}</span><span class="s2">&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>   <span class="si">${</span><span class="nv">package</span><span class="si">}</span>
</span></span></code></pre></div><p>This will install the binary as <code>$GOPATH/bin/hugo</code>.</p>
<p><em>Now don&rsquo;t forget to add <code>$GOPATH/bin</code> to your <code>$PATH</code>!</em></p>
<p>Verify that the binary got built as expected by running <code>hugo version</code>.</p>
<blockquote>
<p>Hugo Static Site Generator v0.24-DEV-411AC930 linux/amd64 BuildDate: 2017-06-16T11:16:50-04:00</p>
</blockquote>

<h2 id="full-build-script">Full Build Script&nbsp;<a class="headline-hash no-text-decoration" href="#full-build-script">#</a></h2>


<p>Here is the full <code>bash</code> script. You can save it as <code>hugo-build.sh</code> and
it will run just fine on any shell (as long as you haven&rsquo;t removed
<code>bash</code> from your system 😄).</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/usr/bin/env bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="nv">here</span><span class="o">=</span><span class="k">$(</span><span class="nb">pwd</span><span class="k">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">package</span><span class="o">=</span><span class="s2">&#34;github.com/gohugoio/hugo&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">CGO_ENABLED</span><span class="o">=</span><span class="m">0</span>
</span></span><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">GO_EXTLINK_ENABLED</span><span class="o">=</span><span class="m">0</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> ! <span class="nb">hash</span> govendor 2&gt;/dev/null
</span></span><span class="line"><span class="cl"><span class="k">then</span>
</span></span><span class="line"><span class="cl">    go get -u -v github.com/kardianos/govendor
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Install hugo for the first time so that the ${GOPATH}/src/${package}</span>
</span></span><span class="line"><span class="cl"><span class="c1"># directory gets populated.</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[[</span> ! -d <span class="s2">&#34;</span><span class="si">${</span><span class="nv">GOPATH</span><span class="si">}</span><span class="s2">/src/</span><span class="si">${</span><span class="nv">package</span><span class="si">}</span><span class="s2">&#34;</span> <span class="o">]]</span> <span class="o">||</span> <span class="o">(</span> ! <span class="nb">hash</span> hugo 2&gt;/dev/null <span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="k">then</span>
</span></span><span class="line"><span class="cl">    go get -u -v <span class="si">${</span><span class="nv">package</span><span class="si">}</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Update to hugo master branch</span>
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">GOPATH</span><span class="si">}</span><span class="s2">/src/</span><span class="si">${</span><span class="nv">package</span><span class="si">}</span><span class="s2">&#34;</span> <span class="o">||</span> <span class="nb">exit</span>
</span></span><span class="line"><span class="cl">git fetch --all <span class="c1"># fetch new branch names if any</span>
</span></span><span class="line"><span class="cl">git checkout master
</span></span><span class="line"><span class="cl"><span class="c1"># git fetch --all</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Force update the vendor file in case it got changed</span>
</span></span><span class="line"><span class="cl">git reset --hard origin/master
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Synchronize all the dependent packages as per the just updated vendor file</span>
</span></span><span class="line"><span class="cl">govendor sync
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Update the goorgeous package to its master branch</span>
</span></span><span class="line"><span class="cl"><span class="c1"># You can comment out the below line if you do not need to fetch the</span>
</span></span><span class="line"><span class="cl"><span class="c1"># latest version of goorgeous.</span>
</span></span><span class="line"><span class="cl">govendor fetch github.com/chaseadamsio/goorgeous
</span></span><span class="line"><span class="cl"><span class="c1"># govendor fetch github.com/chaseadamsio/goorgeous@=fixNewlineParagraphs</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">commithash</span><span class="o">=</span><span class="k">$(</span>git rev-parse --short HEAD 2&gt;/dev/null<span class="k">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">builddate</span><span class="o">=</span><span class="k">$(</span>date +%FT%T%z<span class="k">)</span>
</span></span><span class="line"><span class="cl">go install -v <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>   -ldflags <span class="s2">&#34;-X </span><span class="si">${</span><span class="nv">package</span><span class="si">}</span><span class="s2">/hugolib.CommitHash=</span><span class="si">${</span><span class="nv">commithash</span><span class="si">}</span><span class="s2"> \
</span></span></span><span class="line"><span class="cl"><span class="s2">             -X </span><span class="si">${</span><span class="nv">package</span><span class="si">}</span><span class="s2">/hugolib.BuildDate=</span><span class="si">${</span><span class="nv">builddate</span><span class="si">}</span><span class="s2">&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>   <span class="si">${</span><span class="nv">package</span><span class="si">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;Hugo Version Check:&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> <span class="s2">&#34;</span><span class="si">${</span><span class="nv">here</span><span class="si">}</span><span class="s2">&#34;</span> <span class="o">||</span> <span class="nb">exit</span>
</span></span></code></pre></div><div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Hugo v0.23 <a href="https://github.com/gohugoio/hugo/releases/tag/v0.23">Release Notes</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>To see the master branch commit of <code>hugo</code> used to build this site, do <kbd>Ctrl</kbd> + <kbd>U</kbd> in your browser and search for <em>Hugo Commit Hash</em>.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Hugo v0.19 <a href="https://github.com/gohugoio/hugo/releases/tag/v0.19">Release Notes</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>You need to be in the <code>${GOPATH}/src/${package}</code> directory in order to build any <code>go</code> <code>${package}</code> (unless you are doing a plain <code>go get</code>).&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content><category scheme="https://scripter.co/categories/hugo" term="hugo" label="hugo"/><category scheme="https://scripter.co/categories/org" term="org" label="org"/><category scheme="https://scripter.co/tags/bash" term="bash" label="bash"/><category scheme="https://scripter.co/tags/installation" term="installation" label="installation"/><category scheme="https://scripter.co/tags/go" term="go" label="go"/></entry></feed>