<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>hi, it&#39;s mike</title>
    <link>https://mike.puddingtime.org/tags/pkm/</link>
    <description>Recent content on hi, it&#39;s mike</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <managingEditor>mike@puddingtime.org (mike)</managingEditor>
    <webMaster>mike@puddingtime.org (mike)</webMaster>
    <copyright>© 2026, mike</copyright>
    <lastBuildDate>Mon, 22 May 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://mike.puddingtime.org/tags/pkm/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>More plaintext primitivism with Denote</title>
      <link>https://mike.puddingtime.org/posts/2023-05-22-more-plaintext-primitivism-with-denote/</link>
      <pubDate>Mon, 22 May 2023 00:00:00 +0000</pubDate><author>mike@puddingtime.org (mike)</author>
      <guid>https://mike.puddingtime.org/posts/2023-05-22-more-plaintext-primitivism-with-denote/</guid>
      <description>Denote wants you to stick with the native tools you already have for a stripped-down PKM system.</description>
      <content:encoded><![CDATA[<p><a href="https://github.com/protesilaos/denote">Denote</a> is a note-taking package for Emacs I find sort of interesting because its creator is trying very hard to make something that is structured and can provide some of the affordances we&rsquo;re all coming to expect from <a href="https://www.reddit.com/r/PKMS/comments/nfef59/list_of_personal_knowledge_management_systems/">PKMs</a> without requiring a bunch of extra overhead: At the content level he wants you to use existing file types and markup languages (org, Markdown), and at the management/search level he wants you to use existing Emacs tools, like <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired.html">dired</a> in combination with a file naming scheme that incorporates title, date, and tags into the filename.</p>
<p>It doesn&rsquo;t toss you into the plaintext-n-filesystem primitivist deep end on your own. It comes with a dired mode that fontifies based on its own filenaming convention, so what seems like it could be super ungainly is actually pretty easy to scan in practice:</p>
<figure><img src="/img/denote_dired.jpg"
    alt="Screenshot of files colorized by their datestamp, title, and tags in Emacs dired"><figcaption>
      <h4>dired in denote-dired-mode</h4>
    </figcaption>
</figure>

<p>&hellip; and it has a collection of functions that let you add/remove keywords, rename files using its naming convention, etc.  There are even a few next-level sorts of things, such as the ability to create content &ldquo;silos,&rdquo; so you can set up a note directory for personal stuff, work stuff, etc. without clashing label namespaces and other things that come up when you have to manage a few discrete areas with the same tool.</p>
<p>As &ldquo;what would my exit plan be&rdquo; tools go, this one is pretty good, given It&rsquo;s All Just Text with no particularly difficult conventions.</p>
<p>It was trivial to move a bunch of notes into a directory, use Denote&rsquo;s built-in tools to convert them to the proper naming convention, and start using it. It took under a minute to convert a function I cribbed from org-roam&rsquo;s forums to use ripgrep to provide fulltext search:</p>






<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span class="line"><span class="cl"><span class="p">(</span><span class="nb">defun</span> <span class="nv">mph/denote-rg-search</span> <span class="p">()</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;Search denote directory using consult-ripgrep. With live-preview.&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">interactive</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">let</span> <span class="p">((</span><span class="nv">consult-ripgrep-command</span> <span class="s">&#34;rg --null --smart-case --type org --line-buffered --color=always --max-columns=500 --no-heading --line-number . -e ARG OPTS&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nv">consult-ripgrep</span> <span class="nv">denote-directory</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="nv">map!</span> <span class="nb">:leader</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">:prefix-map</span> <span class="p">(</span><span class="s">&#34;n&#34;</span> <span class="o">.</span> <span class="s">&#34;notes&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nb">:prefix</span> <span class="p">(</span><span class="s">&#34;D&#34;</span> <span class="o">.</span> <span class="s">&#34;Denote&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">       <span class="nb">:desc</span> <span class="s">&#34;ripgrep&#34;</span> <span class="s">&#34;/&#34;</span> <span class="nf">#&#39;</span><span class="nv">mph/denote-rg-search</span><span class="p">)))</span></span></span></code></pre></div>
<p>The obvious comparisons in the Emacs ecosystem are <a href="https://github.com/jrblevin/deft">Deft</a> and <a href="https://www.orgroam.com">org-roam</a>. I haven&rsquo;t given Deft much time. I&rsquo;ve used org-roam more. I like Denote&rsquo;s lack of a dependency on a database. I don&rsquo;t know how Denote will compare in terms of scale if it&rsquo;s all filesystem-and-native-tools.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
