<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>notroot (Posts about tutorial)</title><link>https://blog.notroot.online/</link><description></description><atom:link href="https://blog.notroot.online/categories/tutorial.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2024 &lt;a href="mailto:notroot@notroot.online"&gt;Notroot&lt;/a&gt; </copyright><lastBuildDate>Sat, 18 May 2024 00:50:47 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>How I Made This Site (This Time)</title><link>https://blog.notroot.online/posts/how-i-made-this-site-%28this-time%29/</link><dc:creator>Notroot</dc:creator><description>&lt;p&gt;
Someone on the Fediverse was curious how I made this site, since I mentioned using Emacs org-mode, and their own site is built using org-roam and Hugo.
&lt;/p&gt;

&lt;iframe src="https://floss.social/@jgoerzen/112231865910334670/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;script src="https://floss.social/embed.js" async="async"&gt;&lt;/script&gt;

&lt;p&gt;
It's not that much different from the more complicated process I was using before, on GitHub Pages. This one is simpler in one respect: I'm deploying directly to my own host, so I don't have to use the more complicated &lt;code&gt;nikola deploy_github&lt;/code&gt; configuration, which requires separate source and deployment Git branches.
&lt;/p&gt;

&lt;p&gt;
For reference, here's my original post on how to get Nikola and &lt;code&gt;nikola.el&lt;/code&gt; working with GitHub Pages:
&lt;/p&gt;

&lt;a href="https://blog.notroot.online/posts/publishing-with-nikola-in-emacs/"&gt;Publishing with Nikola in Emacs&lt;/a&gt;

&lt;p&gt;
This time, I'm going to take the reader through the setup, step-by-step.
&lt;/p&gt;

&lt;div id="outline-container-org3890537" class="outline-2"&gt;
&lt;h2 id="org3890537"&gt;Requirements&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org3890537"&gt;
&lt;p&gt;
Here are the things you'll need for this tutorial. I'll show you some steps.
&lt;/p&gt;

&lt;ul class="org-ul"&gt;
&lt;li&gt;&lt;b&gt;Emacs&lt;/b&gt;: Obviously. With Org Mode.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Git&lt;/b&gt;: Git and a private Git repository.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Nikola&lt;/b&gt;: &lt;a href="https://getnikola.com/"&gt;Nikola&lt;/a&gt; is a static site generator, with an &lt;code&gt;orgmode&lt;/code&gt; plugin.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;nikola.el&lt;/b&gt;: &lt;a href="https://gitlab.com/drymerisnothere/nikola-el"&gt;nikola.el&lt;/a&gt; is an Emacs package that wraps Nikola functions.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Webserver&lt;/b&gt;: This setup assumes you have your own private webserver for deployment, but Nikola has a test server.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id="outline-container-org5771357" class="outline-2"&gt;
&lt;h2 id="org5771357"&gt;Install and Configure Nikola&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org5771357"&gt;
&lt;p&gt;
From Nikola's &lt;a href="https://getnikola.com/getting-started.html"&gt;installation instructions&lt;/a&gt;, slightly tweaked to use v8.2.4:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;python3 -m venv nikola-env
cd nikola-env
bin/python -m pip install -U pip setuptools wheel
bin/python -m pip install 'Nikola[extras]==8.2.4'
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
You can now use Nikola by launching the script directly:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;bin/nikola
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Or you can activate the environment before working with Nikola and use the nikola command:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;source bin/activate
nikola
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;div id="outline-container-org3744ea6" class="outline-3"&gt;
&lt;h3 id="org3744ea6"&gt;Install Nikola add-ons&lt;/h3&gt;
&lt;div class="outline-text-3" id="text-org3744ea6"&gt;
&lt;p&gt;
Now you need the Nikola &lt;code&gt;orgmode&lt;/code&gt; plugin.
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;nikola plugin -i orgmode
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
And you need to install a Nikola theme. I chose the &lt;a href="https://themes.getnikola.com/v8/hack/"&gt;hack&lt;/a&gt; theme, but you can pick another.
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;nikola theme -i hack
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id="outline-container-org3d48511" class="outline-3"&gt;
&lt;h3 id="org3d48511"&gt;Init Local Blog&lt;/h3&gt;
&lt;div class="outline-text-3" id="text-org3d48511"&gt;
&lt;p&gt;
Nikola sites require a particular directory and file structure, and it has a command to create that for us. Let's use that method, rather than more complicated options.
&lt;/p&gt;

&lt;p&gt;
See &lt;a href="https://getnikola.com/getting-started.html#init"&gt;Nikola's instructions, here&lt;/a&gt;. Here's what I recommend:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;nikola init --demo &amp;lt;directory_name&amp;gt;
cd &amp;lt;directory_name&amp;gt;
git init
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
This creates the Blog structure, and also initializes the directory as a Git repository. You should continue and connect it to your Git repository, and push an initial commit.
&lt;/p&gt;

&lt;p&gt;
The &lt;code&gt;--demo&lt;/code&gt; option will fill in some blanks in your configuration file, and is recommended the first time.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id="outline-container-org1c5a269" class="outline-3"&gt;
&lt;h3 id="org1c5a269"&gt;Configure Nikola&lt;/h3&gt;
&lt;div class="outline-text-3" id="text-org1c5a269"&gt;
&lt;p&gt;
Nikola settings live in the &lt;code&gt;conf.py&lt;/code&gt; file that was created when you initialized your blog.
&lt;/p&gt;

&lt;p&gt;
&lt;a href="https://getnikola.com/conf.html"&gt;You can view the demo conf.py online, here.&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Most of the settings are self-explanatory, and many of them have defaults. However, we do need to change a few things for our theme and the &lt;code&gt;orgmode&lt;/code&gt; plugin.
&lt;/p&gt;
&lt;/div&gt;

&lt;div id="outline-container-orgc88becf" class="outline-4"&gt;
&lt;h4 id="orgc88becf"&gt;Configure orgmode&lt;/h4&gt;
&lt;div class="outline-text-4" id="text-orgc88becf"&gt;
&lt;p&gt;
At the bottom of &lt;code&gt;conf.py&lt;/code&gt;, add the following:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Add orgmode to compilers dict&lt;/span&gt;
&lt;span class="n"&gt;COMPILERS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"orgmode"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;".org"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# Add org files to posts and pages&lt;/span&gt;
&lt;span class="n"&gt;POSTS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;POSTS&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="s2"&gt;"posts/*.org"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"posts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"post.tmpl"&lt;/span&gt;&lt;span class="p"&gt;),)&lt;/span&gt;
&lt;span class="n"&gt;PAGES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PAGES&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="s2"&gt;"stories/*.org"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"stories"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"story.tmpl"&lt;/span&gt;&lt;span class="p"&gt;),)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
This will allow you to write posts and pages for your blog in org-mode, with everything that comes with that.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id="outline-container-org87227bf" class="outline-4"&gt;
&lt;h4 id="org87227bf"&gt;Configure theme&lt;/h4&gt;
&lt;div class="outline-text-4" id="text-org87227bf"&gt;
&lt;p&gt;
Each theme may have particular settings to configure, but here are the ones for the "hack" theme.
&lt;/p&gt;

&lt;p&gt;
Uncomment &lt;code&gt;GLOBAL_CONTEXT&lt;/code&gt;, and set:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;THEME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"hack"&lt;/span&gt;
&lt;span class="c1"&gt;# ...snip...&lt;/span&gt;
&lt;span class="n"&gt;GLOBAL_CONTEXT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="n"&gt;GLOBAL_CONTEXT&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'HACK_VARIANT'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'dark'&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
I also have these additional settings:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;DATE_FANCINESS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;

&lt;span class="c1"&gt;# For Hack theme&lt;/span&gt;
&lt;span class="n"&gt;NAVIGATION_LINKS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;DEFAULT_LANG&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
	&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/index.html'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Home'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
	&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/archive.html'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Archives'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
	&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/categories/index.html'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Tags'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
	&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/stories/about-me'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'About Me'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
	&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/rss.xml'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'RSS'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id="outline-container-orgbbe9b59" class="outline-4"&gt;
&lt;h4 id="orgbbe9b59"&gt;Configure deployment&lt;/h4&gt;
&lt;div class="outline-text-4" id="text-orgbbe9b59"&gt;
&lt;p&gt;
You will probably want to configure this &lt;b&gt;after&lt;/b&gt; you've successfully built and deployed manually by your usual methods, so that you get the command right, but here's what mine looks like:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;DEPLOY_COMMANDS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s1"&gt;'default'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
	&lt;span class="s2"&gt;"rsync -rav --delete output/ root@notroot:/var/www/blog.notroot.online"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
I have my host &lt;code&gt;notroot&lt;/code&gt; configured in my &lt;code&gt;.ssh/config&lt;/code&gt;.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id="outline-container-org67bffa5" class="outline-3"&gt;
&lt;h3 id="org67bffa5"&gt;Install and Configure &lt;code&gt;nikola.el&lt;/code&gt;&lt;/h3&gt;
&lt;div class="outline-text-3" id="text-org67bffa5"&gt;
&lt;p&gt;
It's a bit outdated, and I can't get &lt;code&gt;M-x nikola-deploy&lt;/code&gt; to work, but otherwise we want this.
&lt;/p&gt;

&lt;p&gt;
Simplest thing is to use &lt;code&gt;use-package&lt;/code&gt;. Here's my config:
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;;; Nikola.el config&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;use-package&lt;/span&gt; &lt;span class="nv"&gt;nikola&lt;/span&gt;
  &lt;span class="nv"&gt;:config&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;setq&lt;/span&gt; &lt;span class="nv"&gt;nikola-output-root-directory&lt;/span&gt; &lt;span class="s"&gt;"~/Dev/mine/notroot-blog/"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;setq&lt;/span&gt; &lt;span class="nv"&gt;nikola-verbose&lt;/span&gt; &lt;span class="nv"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;setq&lt;/span&gt; &lt;span class="nv"&gt;nikola-webserver-auto&lt;/span&gt; &lt;span class="nv"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;setq&lt;/span&gt; &lt;span class="nv"&gt;nikola-new-post-extension&lt;/span&gt; &lt;span class="s"&gt;"org"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;setq&lt;/span&gt; &lt;span class="nv"&gt;nikola-new-page-extension&lt;/span&gt; &lt;span class="s"&gt;"org"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;
Then from inside your &lt;code&gt;init.el&lt;/code&gt; buffer, do &lt;code&gt;M-x load-file RET RET&lt;/code&gt; to install and configure &lt;code&gt;nikola.el&lt;/code&gt;.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id="outline-container-org9a3ab03" class="outline-2"&gt;
&lt;h2 id="org9a3ab03"&gt;Write a Blog Post in Emacs&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org9a3ab03"&gt;
&lt;p&gt;
Now we can write a blog post, like this one, in Emacs org-mode. Super easy!
&lt;/p&gt;

&lt;p&gt;
Just do &lt;code&gt;M-x nikola-new-post&lt;/code&gt; to create a new posts, or &lt;code&gt;M-x nikola-new-page&lt;/code&gt; to create a new page, like my "About Us" page.
&lt;/p&gt;

&lt;p&gt;
Emacs will give you an &lt;code&gt;*.org&lt;/code&gt; file, but will &lt;b&gt;also&lt;/b&gt; create a &lt;code&gt;*.meta&lt;/code&gt; file. Most things will be preset, but you will probably want to add tags. Here's the meta file for this blog post:
&lt;/p&gt;

&lt;pre class="example" id="orgd385add"&gt;
.. title: How I Made This Site (This Time)
.. slug: how-i-made-this-site-(this-time)
.. date: 2024-04-07 18:29:06
.. tags: nikola,emacs,org-mode,blogging,tutorial
&lt;/pre&gt;

&lt;p&gt;
And here's a screenshot of me writing this post! Talk about "meta" heheh:
&lt;/p&gt;


&lt;div id="org30f9a84" class="figure"&gt;
&lt;p&gt;&lt;img src="https://blog.notroot.online/images/how-i-made-this-1.png" alt="nil"&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id="outline-container-orga518d03" class="outline-3"&gt;
&lt;h3 id="orga518d03"&gt;Preview and Build&lt;/h3&gt;
&lt;div class="outline-text-3" id="text-orga518d03"&gt;
&lt;p&gt;
You can also preview your work.
&lt;/p&gt;

&lt;p&gt;
Do &lt;code&gt;M-x nikola-webserver-start&lt;/code&gt; and navigate to the URL shown in the mini-buffer.
&lt;/p&gt;

&lt;p&gt;
To see changes in the blog post, you will need to stop it with &lt;code&gt;M-x nikola-webserver-stop&lt;/code&gt;, and restart it. Nikola does not rebuild on save.
&lt;/p&gt;

&lt;p&gt;
Run &lt;code&gt;M-x nikola-build&lt;/code&gt;. You can watch the progress in the &lt;code&gt;*Nikola*&lt;/code&gt; buffer.
&lt;/p&gt;
&lt;/div&gt;

&lt;div id="outline-container-orge1fb165" class="outline-4"&gt;
&lt;h4 id="orge1fb165"&gt;How Nikola Builds&lt;/h4&gt;
&lt;div class="outline-text-4" id="text-orge1fb165"&gt;
&lt;p&gt;
One of the nice things about Nikola is that it builds using Emacs org-mode export to HTML directly, rather than translating to another markdown format, first. No &lt;code&gt;pandoc&lt;/code&gt; is involved. No intermediary &lt;code&gt;*.md&lt;/code&gt; files.
&lt;/p&gt;

&lt;p&gt;
The benefit is obvious: the HTML will exported from your org files pretty much how you expect.
&lt;/p&gt;

&lt;p&gt;
The one exception I've found is that inter-org file links like &lt;code&gt;[[file:another-blog-post.org]]&lt;/code&gt; will be turned into &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tags, not &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; tags, which is too bad. That's because the slugs Nikola uses don't match org-mode's own. I'm sure there's an elisp workaround, but I haven't played with it, yet.
&lt;/p&gt;

&lt;p&gt;
Fortunately, this is org-mode! If you need to link from one blog post to another, just do something like:
&lt;/p&gt;

&lt;pre class="example" id="org0aa61ff"&gt;
#+begin_export html
&amp;lt;a href="/posts/publishing-with-nikola-in-emacs/"&amp;gt;Publishing with Nikola in Emacs&amp;lt;/a&amp;gt;
#+end_export
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id="outline-container-orgf886bf5" class="outline-2"&gt;
&lt;h2 id="orgf886bf5"&gt;Deploy Your Blog&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-orgf886bf5"&gt;
&lt;p&gt;
The &lt;code&gt;nikola-deploy&lt;/code&gt; command is, unfortunately, not working for me. I have forked this old project, and at some point I'll try to fix it, but for now, I just use the shell command in Emacs.
&lt;/p&gt;

&lt;p&gt;
Do &lt;code&gt;M-! nikola deploy&lt;/code&gt; to upload your site to your webserver.
&lt;/p&gt;

&lt;p&gt;
Then browse to your new blog. If everything is working, you should be live!
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id="outline-container-org0b6b9a1" class="outline-2"&gt;
&lt;h2 id="org0b6b9a1"&gt;Conclusion&lt;/h2&gt;
&lt;div class="outline-text-2" id="text-org0b6b9a1"&gt;
&lt;p&gt;
Once you get Nikola and &lt;code&gt;nikola.el&lt;/code&gt; working, this is a very easy way to blog, if you're an Emacs person. It's intuitive and highly configurable.
&lt;/p&gt;

&lt;p&gt;
For example, Nikola does it's own syntax highlighting, but I'll be adding something like &lt;code&gt;highlight.js&lt;/code&gt; down the road. I can add comments sections, and I've barely touched the possible Nikola add-ons.
&lt;/p&gt;

&lt;p&gt;
If you're an Emacs person, I think this is one of the more flexible, but robust, SSG integrations out there. I, too, love the idea of publishing natively using only Emacs, but one of the great features of Emacs is also its ability to compose cleanly with other commandline tools.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><category>blogging</category><category>emacs</category><category>nikola</category><category>org-mode</category><category>tutorial</category><guid>https://blog.notroot.online/posts/how-i-made-this-site-%28this-time%29/</guid><pubDate>Sun, 07 Apr 2024 22:29:06 GMT</pubDate></item></channel></rss>