<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title type="text">millie.moe</title><id>https://millicent.nekoweb.org/</id><updated>2026-05-07T05:00:00Z</updated><link href="https://millicent.nekoweb.org/" rel="alternate" type="text/html"/><link href="https://millicent.nekoweb.org/feed.xml" rel="self" type="application/atom+xml"/><author><name>millie</name></author><entry><title type="text">cinny / butch</title><id>https://millicent.nekoweb.org/posts/cinnybutch.html</id><updated>2026-05-07T05:00:00Z</updated><link href="https://millicent.nekoweb.org/posts/cinnybutch.html"/><author><name>millie</name></author><content type="html">&lt;header&gt;
&lt;h1 class=&quot;title&quot;&gt;cinny / butch&lt;/h1&gt;
&lt;/header&gt;&lt;div id=&quot;outline-container-org30c5c16&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org30c5c16&quot;&gt;&lt;a href=&quot;#org30c5c16&quot;&gt;Sable features&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org30c5c16&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgb76a0a7&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgb76a0a7&quot;&gt;&lt;a href=&quot;#orgb76a0a7&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; Per-Message Profiles&lt;/a&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgddad25f&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgddad25f&quot;&gt;&lt;a href=&quot;#orgddad25f&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; Biographies&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgddad25f&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orge5f6819&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orge5f6819&quot;&gt;&lt;a href=&quot;#orge5f6819&quot;&gt;MSC4440&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-orge5f6819&quot;&gt;
&lt;p&gt;
&lt;a href=&quot;https://github.com/matrix-org/matrix-spec-proposals/pull/4440&quot;&gt;https://github.com/matrix-org/matrix-spec-proposals/pull/4440&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org2726f1e&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org2726f1e&quot;&gt;&lt;a href=&quot;#org2726f1e&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; Profile Banners&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org2726f1e&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgce07f97&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgce07f97&quot;&gt;&lt;a href=&quot;#orgce07f97&quot;&gt;MSC4427&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-orgce07f97&quot;&gt;
&lt;p&gt;
&lt;a href=&quot;https://github.com/matrix-org/matrix-spec-proposals/pull/4427&quot;&gt;https://github.com/matrix-org/matrix-spec-proposals/pull/4427&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgdd51cc5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgdd51cc5&quot;&gt;&lt;a href=&quot;#orgdd51cc5&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; Pronouns&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgdd51cc5&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgf6e08ba&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgf6e08ba&quot;&gt;&lt;a href=&quot;#orgf6e08ba&quot;&gt;MSC4247&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-orgf6e08ba&quot;&gt;
&lt;p&gt;
&lt;a href=&quot;https://github.com/matrix-org/matrix-spec-proposals/pull/4247&quot;&gt;https://github.com/matrix-org/matrix-spec-proposals/pull/4247&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgc00b78d&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgc00b78d&quot;&gt;&lt;a href=&quot;#orgc00b78d&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; Name color&lt;/a&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org3809f7b&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org3809f7b&quot;&gt;&lt;a href=&quot;#org3809f7b&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; Custom Status&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org3809f7b&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org230bc92&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org230bc92&quot;&gt;&lt;a href=&quot;#org230bc92&quot;&gt;MSC4426&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-org230bc92&quot;&gt;
&lt;p&gt;
&lt;a href=&quot;https://github.com/matrix-org/matrix-spec-proposals/pull/4426&quot;&gt;https://github.com/matrix-org/matrix-spec-proposals/pull/4426&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org5f927f3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org5f927f3&quot;&gt;&lt;a href=&quot;#org5f927f3&quot;&gt;UX tweaks&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org5f927f3&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org6c13a0c&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org6c13a0c&quot;&gt;&lt;a href=&quot;#org6c13a0c&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; Fix input box position on mobile&lt;/a&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org5e62c22&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org5e62c22&quot;&gt;&lt;a href=&quot;#org5e62c22&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; m.status&lt;/a&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgb6d52f9&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgb6d52f9&quot;&gt;&lt;a href=&quot;#orgb6d52f9&quot;&gt;Commands&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgb6d52f9&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgcfdedbc&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgcfdedbc&quot;&gt;&lt;a href=&quot;#orgcfdedbc&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; /me&lt;/a&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org26b9d70&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org26b9d70&quot;&gt;&lt;a href=&quot;#org26b9d70&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; /html&lt;/a&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgda4eea9&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgda4eea9&quot;&gt;&lt;a href=&quot;#orgda4eea9&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; /rainbow&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgda4eea9&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgb9af8d6&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgb9af8d6&quot;&gt;&lt;a href=&quot;#orgb9af8d6&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; /trans&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org51a2eb6&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org51a2eb6&quot;&gt;&lt;a href=&quot;#org51a2eb6&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; /lesbian&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgd18fab6&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgd18fab6&quot;&gt;&lt;a href=&quot;#orgd18fab6&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; /nb&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org706c7c8&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org706c7c8&quot;&gt;&lt;a href=&quot;#org706c7c8&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; /mlm&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org1620fd6&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org1620fd6&quot;&gt;&lt;a href=&quot;#org1620fd6&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; /ace&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org922134e&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org922134e&quot;&gt;&lt;a href=&quot;#org922134e&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; /aro&lt;/a&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orga4328c8&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orga4328c8&quot;&gt;&lt;a href=&quot;#orga4328c8&quot;&gt;MSC implementations&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orga4328c8&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org434951c&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org434951c&quot;&gt;&lt;a href=&quot;#org434951c&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; MSC4454 - Depreciating Spoiler Fallback&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org434951c&quot;&gt;
&lt;p&gt;
&lt;a href=&quot;https://github.com/matrix-org/matrix-spec-proposals/pull/4454&quot;&gt;https://github.com/matrix-org/matrix-spec-proposals/pull/4454&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Instead of uploading spoiled text to the media repository, which could cause security concerns, just replace the text with &lt;code&gt;[Spoiler]&lt;/code&gt; in the &lt;code&gt;body&lt;/code&gt; field.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org5025fe5&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org5025fe5&quot;&gt;&lt;a href=&quot;#org5025fe5&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; MSC4441 - Encrypted User Profile Annotations&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org5025fe5&quot;&gt;
&lt;p&gt;
&lt;a href=&quot;https://github.com/matrix-org/matrix-spec-proposals/pull/4441&quot;&gt;https://github.com/matrix-org/matrix-spec-proposals/pull/4441&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org931a59b&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org931a59b&quot;&gt;&lt;a href=&quot;#org931a59b&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; m.tz&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-org931a59b&quot;&gt;
&lt;p&gt;
Might be here already, idk lol
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org50c5756&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org50c5756&quot;&gt;&lt;a href=&quot;#org50c5756&quot;&gt;Brand New Features&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org50c5756&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org9934c4f&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org9934c4f&quot;&gt;&lt;a href=&quot;#org9934c4f&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; moe.millie.automated&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org9934c4f&quot;&gt;
&lt;p&gt;
Is this account attached to an automated service? i.e., is it a bot?
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgc62cfbb&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgc62cfbb&quot;&gt;&lt;a href=&quot;#orgc62cfbb&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; moe.millie.species&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgc62cfbb&quot;&gt;
&lt;p&gt;
string field for defining your species; would allow supporting clients to add special pfp borders and profile lines to members with a certain species in the field.
&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org9c24ccc&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org9c24ccc&quot;&gt;&lt;a href=&quot;#org9c24ccc&quot;&gt;format&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-org9c24ccc&quot;&gt;
&lt;p&gt;
different species can be separated by a comma; species in front have precedence for special formatting. can be used to set your profile look and then go into more detail like &lt;code&gt;cat, blue chakat&lt;/code&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgb786785&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgb786785&quot;&gt;&lt;a href=&quot;#orgb786785&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; input filtering&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgb786785&quot;&gt;
&lt;p&gt;
helping to curb bad habits by preventing a message from being sent if it matches certain regex or automatically replacing parts of the message
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content></entry><entry><title type="text">content warnings</title><id>https://millicent.nekoweb.org/posts/contentwarning.html</id><updated>2026-05-07T05:00:00Z</updated><link href="https://millicent.nekoweb.org/posts/contentwarning.html"/><author><name>millie</name></author><content type="html">&lt;header&gt;
&lt;h1 class=&quot;title&quot;&gt;content warnings&lt;/h1&gt;
&lt;/header&gt;&lt;p&gt;
hahaaaa, whoops! doll hasn&apos;t actually put anything here yet. sowwyyyy
&lt;/p&gt;</content></entry><entry><title type="text">~/emacs.d config</title><id>https://millicent.nekoweb.org/posts/emacs.d.html</id><updated>2026-05-07T05:00:00Z</updated><link href="https://millicent.nekoweb.org/posts/emacs.d.html"/><author><name>millie</name></author><content type="html">&lt;header&gt;
&lt;h1 class=&quot;title&quot;&gt;~/emacs.d config&lt;/h1&gt;
&lt;/header&gt;&lt;p&gt;
hey, coopi! We&apos;re doing this too now. Yippeeeeeeeeeeeeeeeeee
&lt;/p&gt;

&lt;p&gt;
instead of using org to load this file at startup, we &lt;code&gt;M-x org-babel-tangle&lt;/code&gt; the code blocks into &lt;code&gt;init.el&lt;/code&gt;, &lt;code&gt;early-init.el&lt;/code&gt;, and &lt;code&gt;module/*.el&lt;/code&gt; files that are then natively ran by emacs at startup. no need to load org immediately, and is generally faster this way too.
&lt;/p&gt;

&lt;p&gt;
this document &lt;i&gt;supposedly&lt;/i&gt; follows &lt;a href=&quot;http://literateprogramming.com/&quot;&gt;literate programming&lt;/a&gt; standards, but don&apos;t tell anyone.
&lt;/p&gt;

&lt;blockquote class=&quot;notice nt-warning&quot;&gt;&lt;heading&gt;warning&lt;/heading&gt;
&lt;p&gt;
the following is a living, breathing, &lt;i&gt;personal&lt;/i&gt;, &lt;b&gt;opinionated&lt;/b&gt;, and &lt;i&gt;&lt;b&gt;very actively work-in-progress&lt;/b&gt;&lt;/i&gt; emacs config. woe. silliness be upon thee.
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div id=&quot;outline-container-orgefcac02&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgefcac02&quot;&gt;&lt;a href=&quot;#orgefcac02&quot;&gt;Goals&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgefcac02&quot;&gt;
&lt;p&gt;
boom. there are none. fuck you i do what i want
&lt;/p&gt;

&lt;nav id=&quot;table-of-contents&quot; role=&quot;doc-toc&quot;&gt;
&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;div id=&quot;text-table-of-contents&quot; role=&quot;doc-toc&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#orgefcac02&quot;&gt;Goals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgdd5409c&quot;&gt;Early Init &lt;code&gt;early-init.el&lt;/code&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#org34e63cd&quot;&gt;Garbage Collection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgf7c239e&quot;&gt;Minimal UI Clutter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org04e6847&quot;&gt;Disabling &lt;code&gt;package.el&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org409c953&quot;&gt;Deferring Package Loading by Default&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org4c038ef&quot;&gt;Loading &lt;code&gt;on.el&lt;/code&gt; early&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgf7572ad&quot;&gt;Main Init &lt;code&gt;init.el&lt;/code&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#org3e457ef&quot;&gt;Elpaca&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#orgc286b2d&quot;&gt;Silly &lt;code&gt;on.el&lt;/code&gt; Error Fixing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org82a7824&quot;&gt;Keep Directories Clean&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org0560b9e&quot;&gt;Redirecting &lt;code&gt;custom.el&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org987f401&quot;&gt;Helper Hooks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org752a3ef&quot;&gt;Loading =modules=/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgdd8da3b&quot;&gt;Appearance&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#org43d0345&quot;&gt;Theme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org46a51de&quot;&gt;Mode Line&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org2c7c325&quot;&gt;Initial Buffer&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#org2f96557&quot;&gt;Dynamic Sections&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgc500262&quot;&gt;Dashboard Footer Quotations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org3826ee3&quot;&gt;Fonts&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#org4ee1c97&quot;&gt;Multilingual Coverage with Noto&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgb1ea4bc&quot;&gt;Nerd Icons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org2d7d891&quot;&gt;Transparency&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgf4d002f&quot;&gt;Editor Behavior&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#org7d50d17&quot;&gt;&lt;code&gt;*scratch*&lt;/code&gt; Buffer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org91f1110&quot;&gt;Global Minor Modes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org2f8833e&quot;&gt;Tab Bar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgb2a8552&quot;&gt;Window History&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org196015b&quot;&gt;Smooth Scrolling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org4980359&quot;&gt;Cursor Shape&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org1e444cf&quot;&gt;Auto-Revert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgf94c211&quot;&gt;Savehist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org81f432f&quot;&gt;Revealing Whitespace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org057a504&quot;&gt;Modal Editing: &lt;code&gt;meow&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgf5120d1&quot;&gt;Defining Custom Keymaps: &lt;code&gt;bind-map&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgde28bbc&quot;&gt;Help: &lt;code&gt;helpful&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org091de7e&quot;&gt;Language Server Protocol: Elgot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org9aa2af8&quot;&gt;Syntax Checking: Flymake&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org530fd29&quot;&gt;PCRE Regular Expressions: &lt;code&gt;pcre2el&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org8c442d4&quot;&gt;Completion&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#orgf2e01ba&quot;&gt;Vanilla Minibuffer Tweaks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org01c9481&quot;&gt;Orderless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org62810ae&quot;&gt;Vertico&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgd8daac7&quot;&gt;Marginalia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org1972810&quot;&gt;Corfu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org13b301d&quot;&gt;Cape&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org3274848&quot;&gt;Consult&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org6a834be&quot;&gt;Embark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org8e8bbd6&quot;&gt;Dabbrev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org4e8789f&quot;&gt;Project &amp;amp; Source Management&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#org1d1b0ce&quot;&gt;Projectile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org2785cc9&quot;&gt;Magit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org510a61f&quot;&gt;Treemacs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org625ed00&quot;&gt;Org&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#org8716132&quot;&gt;Variable-width Prose&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org8dcfb56&quot;&gt;Publishing&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#org879f3b9&quot;&gt;Generating Atom Feeds: &lt;code&gt;ox-atom&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#org9e4e1cc&quot;&gt;Rendering Code Blocks Correctly: &lt;code&gt;htmlize&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgef9510e&quot;&gt;Custom Org Blocks: &lt;code&gt;org-defblock&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#orgf3113be&quot;&gt;Publish Script: &lt;code&gt;gen.el&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgdd5409c&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgdd5409c&quot;&gt;&lt;a href=&quot;#orgdd5409c&quot;&gt;Early Init &lt;code&gt;early-init.el&lt;/code&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgdd5409c&quot;&gt;
&lt;p&gt;
early init happens before the gui and package systems are loaded. it&apos;s best to keep this as minimal as possible, but there are some things we need to put in here to make the system work smoothly.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;early-init.el --- Early initialization -*- lexical-binding: t; -*&lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;-&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org34e63cd&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org34e63cd&quot;&gt;&lt;a href=&quot;#org34e63cd&quot;&gt;Garbage Collection&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org34e63cd&quot;&gt;
&lt;p&gt;
the default threshold for garbage collection is &lt;i&gt;way&lt;/i&gt; too low during startup, which causes massive slowdowns. we can fix this by raising the threshold to the maximum value possible during startup. of course, it would be a bad thing to keep the threshold that high &lt;i&gt;all&lt;/i&gt; the time, so after the first frame is rendered, we bring it back down to 16 mib which should be good enough. we also set the percentage based threshold to 100% during startup and later set it back to the value it was at before.
&lt;/p&gt;

&lt;p&gt;
this code is copied verbatum from coopi.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;let&lt;/span&gt; ((original-gc-cons-percentage gc-cons-percentage))
  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;my/defer-gc-for-boot&lt;/span&gt; ()
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Increase GC thresholds to reduce pauses during startup.&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;setq&lt;/span&gt; gc-cons-threshold most-positive-fixnum
          gc-cons-percentage 1))
  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;my/reset-gc-settings&lt;/span&gt; ()
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Restore GC thresholds to values appropriate for normal use.&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;setq&lt;/span&gt; gc-cons-threshold (* 16 1024 1024)
          gc-cons-percentage original-gc-cons-percentage))
  (my/defer-gc-for-boot)
  (add-hook &apos;emacs-startup-hook #&apos;my/reset-gc-settings)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgf7c239e&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgf7c239e&quot;&gt;&lt;a href=&quot;#orgf7c239e&quot;&gt;Minimal UI Clutter&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgf7c239e&quot;&gt;
&lt;p&gt;
you know those menu bars at the top that look like they came straight out of the 90s? fuck em. kill them.
&lt;/p&gt;

&lt;p&gt;
we do this here instead of in &lt;code&gt;init.el&lt;/code&gt; because if we don&apos;t do it before the gui loads, the gui will get freaky and produce a hot white flash of pain and death.
&lt;/p&gt;

&lt;p&gt;
also copied verbatum from coopi.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;dolist&lt;/span&gt; (mode &apos;(menu-bar-mode scroll-bar-mode tool-bar-mode tooltip-mode))
  (&lt;span class=&quot;org-keyword&quot;&gt;when&lt;/span&gt; (fboundp mode)
    (funcall mode -1)))
(&lt;span class=&quot;org-keyword&quot;&gt;setq&lt;/span&gt; inhibit-splash-screen t
      inhibit-startup-echo-area-message user-login-name&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org04e6847&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org04e6847&quot;&gt;&lt;a href=&quot;#org04e6847&quot;&gt;Disabling &lt;code&gt;package.el&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org04e6847&quot;&gt;
&lt;p&gt;
we use &lt;a href=&quot;https://github.com/progfolio/elpaca&quot;&gt;elpaca&lt;/a&gt; in this house. we don&apos;t need &lt;code&gt;package.el&lt;/code&gt; to initialize itself only to kill itself later. that&apos;s silly.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;setq&lt;/span&gt; package-enable-at-startup nil&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org409c953&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org409c953&quot;&gt;&lt;a href=&quot;#org409c953&quot;&gt;Deferring Package Loading by Default&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org409c953&quot;&gt;
&lt;p&gt;
&lt;code&gt;use-package&lt;/code&gt; usually loads packages immediately by default. for a simple config, this is fine. but when you&apos;re autistic like we are and have 500 billion packages that do one thing and one thing only that you need to load, it can slow things down considerably. so, we flip things around: defer all packages by default, and prioritize certain critical packages with &lt;code&gt;:demand t&lt;/code&gt;.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;setq&lt;/span&gt; use-package-always-defer t&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org4c038ef&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org4c038ef&quot;&gt;&lt;a href=&quot;#org4c038ef&quot;&gt;Loading &lt;code&gt;on.el&lt;/code&gt; early&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org4c038ef&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(add-to-list &apos;load-path &lt;span class=&quot;org-string&quot;&gt;&quot;~/.emacs.d/on&quot;&lt;/span&gt;)
(&lt;span class=&quot;org-keyword&quot;&gt;require&lt;/span&gt; &apos;&lt;span class=&quot;org-constant&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgf7572ad&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgf7572ad&quot;&gt;&lt;a href=&quot;#orgf7572ad&quot;&gt;Main Init &lt;code&gt;init.el&lt;/code&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgf7572ad&quot;&gt;
&lt;p&gt;
in our old setup, &lt;code&gt;init.el&lt;/code&gt; was the place where pretty much everything happened. problem: seven hundred and fifty five lines of code. death. therefore, we&apos;re gonna try a different apporach: keep things to a bare minimum in here (the stuff that &lt;i&gt;needs&lt;/i&gt; to load before anything else), and then hand everything else off to modules. organization!!!!!
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;init.el --- Main initialization -*- lexical-binding: t; -*&lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;-&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org3e457ef&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org3e457ef&quot;&gt;&lt;a href=&quot;#org3e457ef&quot;&gt;Elpaca&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org3e457ef&quot;&gt;
&lt;p&gt;
coopi manages packages with the &lt;a href=&quot;https://guix.gnu.org/&quot;&gt;guix&lt;/a&gt; package manager. we are not cool enough for that yet. so instead, we use elpaca to bring asynchronous package loading and other paackage management tools to emacs.
&lt;/p&gt;

&lt;p&gt;
we first need this giant fucking boilerplate for initializing elpaca. we could &lt;i&gt;probably&lt;/i&gt; slim this down if we wanted to, but we dont have the energy to right now.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;defvar&lt;/span&gt; &lt;span class=&quot;org-variable-name&quot;&gt;elpaca-installer-version&lt;/span&gt; 0.12)
(&lt;span class=&quot;org-keyword&quot;&gt;defvar&lt;/span&gt; &lt;span class=&quot;org-variable-name&quot;&gt;elpaca-directory&lt;/span&gt; (expand-file-name &lt;span class=&quot;org-string&quot;&gt;&quot;elpaca/&quot;&lt;/span&gt; user-emacs-directory))
(&lt;span class=&quot;org-keyword&quot;&gt;defvar&lt;/span&gt; &lt;span class=&quot;org-variable-name&quot;&gt;elpaca-builds-directory&lt;/span&gt; (expand-file-name &lt;span class=&quot;org-string&quot;&gt;&quot;builds/&quot;&lt;/span&gt; elpaca-directory))
(&lt;span class=&quot;org-keyword&quot;&gt;defvar&lt;/span&gt; &lt;span class=&quot;org-variable-name&quot;&gt;elpaca-sources-directory&lt;/span&gt; (expand-file-name &lt;span class=&quot;org-string&quot;&gt;&quot;sources/&quot;&lt;/span&gt; elpaca-directory))
(&lt;span class=&quot;org-keyword&quot;&gt;defvar&lt;/span&gt; &lt;span class=&quot;org-variable-name&quot;&gt;elpaca-order&lt;/span&gt; &apos;(elpaca &lt;span class=&quot;org-builtin&quot;&gt;:repo&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;https://github.com/progfolio/elpaca.git&quot;&lt;/span&gt;
                              &lt;span class=&quot;org-builtin&quot;&gt;:ref&lt;/span&gt; nil &lt;span class=&quot;org-builtin&quot;&gt;:depth&lt;/span&gt; 1 &lt;span class=&quot;org-builtin&quot;&gt;:inherit&lt;/span&gt; ignore
                              &lt;span class=&quot;org-builtin&quot;&gt;:files&lt;/span&gt; (&lt;span class=&quot;org-builtin&quot;&gt;:defaults&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;elpaca-test.el&quot;&lt;/span&gt; (&lt;span class=&quot;org-builtin&quot;&gt;:exclude&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;extensions&quot;&lt;/span&gt;))
                              &lt;span class=&quot;org-builtin&quot;&gt;:build&lt;/span&gt; (&lt;span class=&quot;org-builtin&quot;&gt;:not&lt;/span&gt; elpaca-activate)))
(&lt;span class=&quot;org-keyword&quot;&gt;let*&lt;/span&gt; ((repo  (expand-file-name &lt;span class=&quot;org-string&quot;&gt;&quot;elpaca/&quot;&lt;/span&gt; elpaca-sources-directory))
       (build (expand-file-name &lt;span class=&quot;org-string&quot;&gt;&quot;elpaca/&quot;&lt;/span&gt; elpaca-builds-directory))
       (order (cdr elpaca-order))
       (default-directory repo))
  (add-to-list &apos;load-path (&lt;span class=&quot;org-keyword&quot;&gt;if&lt;/span&gt; (file-exists-p build) build repo))
  (&lt;span class=&quot;org-keyword&quot;&gt;unless&lt;/span&gt; (file-exists-p repo)
    (make-directory repo t)
    (&lt;span class=&quot;org-keyword&quot;&gt;when&lt;/span&gt; (&amp;lt;= emacs-major-version 28) (&lt;span class=&quot;org-keyword&quot;&gt;require&lt;/span&gt; &apos;&lt;span class=&quot;org-constant&quot;&gt;subr-x&lt;/span&gt;))
    (&lt;span class=&quot;org-keyword&quot;&gt;condition-case-unless-debug&lt;/span&gt; err
        (&lt;span class=&quot;org-keyword&quot;&gt;if-let*&lt;/span&gt; ((buffer (pop-to-buffer-same-window &lt;span class=&quot;org-string&quot;&gt;&quot;*elpaca-bootstrap*&quot;&lt;/span&gt;))
                  ((zerop (apply #&apos;call-process `(&lt;span class=&quot;org-string&quot;&gt;&quot;git&quot;&lt;/span&gt; nil ,buffer t &lt;span class=&quot;org-string&quot;&gt;&quot;clone&quot;&lt;/span&gt;
                                                  ,@(&lt;span class=&quot;org-keyword&quot;&gt;when-let*&lt;/span&gt; ((depth (plist-get order &lt;span class=&quot;org-builtin&quot;&gt;:depth&lt;/span&gt;)))
                                                      (list (format &lt;span class=&quot;org-string&quot;&gt;&quot;--depth=%d&quot;&lt;/span&gt; depth) &lt;span class=&quot;org-string&quot;&gt;&quot;--no-single-branch&quot;&lt;/span&gt;))
                                                  ,(plist-get order &lt;span class=&quot;org-builtin&quot;&gt;:repo&lt;/span&gt;) ,repo))))
                  ((zerop (call-process &lt;span class=&quot;org-string&quot;&gt;&quot;git&quot;&lt;/span&gt; nil buffer t &lt;span class=&quot;org-string&quot;&gt;&quot;checkout&quot;&lt;/span&gt;
                                        (&lt;span class=&quot;org-keyword&quot;&gt;or&lt;/span&gt; (plist-get order &lt;span class=&quot;org-builtin&quot;&gt;:ref&lt;/span&gt;) &lt;span class=&quot;org-string&quot;&gt;&quot;--&quot;&lt;/span&gt;))))
                  (emacs (concat invocation-directory invocation-name))
                  ((zerop (call-process emacs nil buffer nil &lt;span class=&quot;org-string&quot;&gt;&quot;-Q&quot;&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;-L&quot;&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;.&quot;&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;--batch&quot;&lt;/span&gt;
                                        &lt;span class=&quot;org-string&quot;&gt;&quot;--eval&quot;&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;(byte-recompile-directory \&quot;.\&quot; 0 &apos;force)&quot;&lt;/span&gt;)))
                  ((&lt;span class=&quot;org-keyword&quot;&gt;require&lt;/span&gt; &apos;&lt;span class=&quot;org-constant&quot;&gt;elpaca&lt;/span&gt;))
                  ((elpaca-generate-autoloads &lt;span class=&quot;org-string&quot;&gt;&quot;elpaca&quot;&lt;/span&gt; repo)))
            (&lt;span class=&quot;org-keyword&quot;&gt;progn&lt;/span&gt; (message &lt;span class=&quot;org-string&quot;&gt;&quot;%s&quot;&lt;/span&gt; (buffer-string)) (kill-buffer buffer))
          (&lt;span class=&quot;org-warning&quot;&gt;error&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;%s&quot;&lt;/span&gt; (&lt;span class=&quot;org-keyword&quot;&gt;with-current-buffer&lt;/span&gt; buffer (buffer-string))))
      ((&lt;span class=&quot;org-warning&quot;&gt;error&lt;/span&gt;) (&lt;span class=&quot;org-warning&quot;&gt;warn&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;%s&quot;&lt;/span&gt; err) (delete-directory repo &apos;recursive))))
  (&lt;span class=&quot;org-keyword&quot;&gt;unless&lt;/span&gt; (&lt;span class=&quot;org-keyword&quot;&gt;require&lt;/span&gt; &apos;&lt;span class=&quot;org-constant&quot;&gt;elpaca-autoloads&lt;/span&gt; nil t)
    (&lt;span class=&quot;org-keyword&quot;&gt;require&lt;/span&gt; &apos;&lt;span class=&quot;org-constant&quot;&gt;elpaca&lt;/span&gt;)
    (elpaca-generate-autoloads &lt;span class=&quot;org-string&quot;&gt;&quot;elpaca&quot;&lt;/span&gt; repo)
    (&lt;span class=&quot;org-keyword&quot;&gt;let&lt;/span&gt; ((load-source-file-function nil)) (load &lt;span class=&quot;org-string&quot;&gt;&quot;./elpaca-autoloads&quot;&lt;/span&gt;))))
(add-hook &apos;after-init-hook #&apos;elpaca-process-queues)
(&lt;span class=&quot;org-keyword&quot;&gt;elpaca&lt;/span&gt; `(,@elpaca-order)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
elpaca does not enable use-package by default, so we should also probably fix that too.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;elpaca&lt;/span&gt; elpaca-use-package
  (elpaca-use-package-mode)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgc286b2d&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgc286b2d&quot;&gt;&lt;a href=&quot;#orgc286b2d&quot;&gt;Silly &lt;code&gt;on.el&lt;/code&gt; Error Fixing&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-orgc286b2d&quot;&gt;
&lt;p&gt;
if we continue on now, elpaca will complain that &lt;code&gt;on.el&lt;/code&gt; has been loaded before
elpaca has been loaded. to fix this, we will tell elpaca to holup and let
&lt;code&gt;on.el&lt;/code&gt; load before proceeding.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(elpaca-wait&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org82a7824&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org82a7824&quot;&gt;&lt;a href=&quot;#org82a7824&quot;&gt;Keep Directories Clean&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org82a7824&quot;&gt;
&lt;p&gt;
you know how unix has a square hole called the home directory? emacs also has a square hole called &lt;code&gt;.emacs.d/&lt;/code&gt;. everything goes in the square hole, with no real convention as to how things should be structured or organized. the worst part is that a lot of things tied to &lt;i&gt;files&lt;/i&gt; such as backups, auto-saves, and locks are usually put &lt;i&gt;right next to the main file&lt;/i&gt;. oh no. we should prooooooobably fix that.
&lt;/p&gt;

&lt;p&gt;
The &lt;code&gt;no-littering&lt;/code&gt; package fixes this by explicitly defining paths for configuration files and persistent data files.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/emacscollective/no-littering
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; no-littering
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:demand&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (lock-file-name-transforms
   `((,(&lt;span class=&quot;org-keyword&quot;&gt;rx&lt;/span&gt; (* any)) ,(no-littering-expand-var-file-name &lt;span class=&quot;org-string&quot;&gt;&quot;lock-files/&quot;&lt;/span&gt;) t)))
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (no-littering-theme-backups)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
note: the lock file directory is not created automatically. it is wise to &lt;a href=&quot;elisp:(make-directory%20(no-littering-expand-var-file-name%20%22lock-files/%22)%20t)&quot;&gt;​create it manually&lt;/a&gt; after loading the package for the first time.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org0560b9e&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org0560b9e&quot;&gt;&lt;a href=&quot;#org0560b9e&quot;&gt;Redirecting &lt;code&gt;custom.el&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org0560b9e&quot;&gt;
&lt;p&gt;
we don&apos;t use the customize ui. get that shit out of our &lt;code&gt;init.el&lt;/code&gt; right now boi
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; emacs
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (custom-file (make-temp-file &lt;span class=&quot;org-string&quot;&gt;&quot;emacs-custom-&quot;&lt;/span&gt;))&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org987f401&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org987f401&quot;&gt;&lt;a href=&quot;#org987f401&quot;&gt;Helper Hooks&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org987f401&quot;&gt;
&lt;p&gt;
the package &lt;code&gt;on.el&lt;/code&gt; creates a whole bunch of new hooks that allow packages to be loaded &lt;i&gt;only when they actually need to be&lt;/i&gt;. this is how &lt;a href=&quot;https://doomemacs.org&quot;&gt;doom emacs&lt;/a&gt; can have 5 thousand packages but still load relatively quickly: it just only loads the packages that &lt;i&gt;need&lt;/i&gt; to load at startup and then waits to load everything else until you do something that depends on that particular package. for example, you don&apos;t &lt;i&gt;need&lt;/i&gt; to load all of your org packages immediately: you only need them once you open up an org file or the org agenda. defering their loading until you do that means you save on a considerable amount of processing at startup.
&lt;/p&gt;

&lt;p&gt;
because pretty much everything else in this config depends on &lt;code&gt;on.el&lt;/code&gt;&apos;s hooks, we are loading it now.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/axgfn/on.el
&lt;/span&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;;&lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;(use-package on
&lt;/span&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;;  &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;:ensure t
&lt;/span&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;;  &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;:demand t&lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org752a3ef&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org752a3ef&quot;&gt;&lt;a href=&quot;#org752a3ef&quot;&gt;Loading =modules=/&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org752a3ef&quot;&gt;
&lt;p&gt;
this is where we initialize all of the rest of the configuration. each module covers a distinct functional area. we load them in alphabetical filesystem order.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;dolist&lt;/span&gt; (file (directory-files
               (expand-file-name &lt;span class=&quot;org-string&quot;&gt;&quot;modules/&quot;&lt;/span&gt; user-emacs-directory)
               t (&lt;span class=&quot;org-keyword&quot;&gt;rx&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;.el&quot;&lt;/span&gt; string-end)))
  (&lt;span class=&quot;org-keyword&quot;&gt;when&lt;/span&gt; (file-regular-p file)
    (load (file-name-sans-extension file)))&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgdd8da3b&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgdd8da3b&quot;&gt;&lt;a href=&quot;#orgdd8da3b&quot;&gt;Appearance&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgdd8da3b&quot;&gt;
&lt;p&gt;
our eyes. they see the future.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;ui.el --- Appearance -*- lexical-binding: t; -*&lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;-&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org43d0345&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org43d0345&quot;&gt;&lt;a href=&quot;#org43d0345&quot;&gt;Theme&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org43d0345&quot;&gt;
&lt;p&gt;
coopi uses &lt;code&gt;pkg:github/xuchengpeng/catppuccin-themes&lt;/code&gt; for its emacs theme. we are silly and use everforest. since it is not on melpa, we use straight instead.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/theorytoe/everforest-emacs
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; everforest
  &lt;span class=&quot;org-builtin&quot;&gt;:elpaca&lt;/span&gt; (&lt;span class=&quot;org-builtin&quot;&gt;:host&lt;/span&gt; github &lt;span class=&quot;org-builtin&quot;&gt;:repo&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;theorytoe/everforest-emacs&quot;&lt;/span&gt;)
  &lt;span class=&quot;org-builtin&quot;&gt;:init&lt;/span&gt;
  (add-to-list &apos;custom-theme-load-path &lt;span class=&quot;org-string&quot;&gt;&quot;~/.emacs.d/everforest-theme&quot;&lt;/span&gt;)
  (load-theme &apos;everforest-hard-dark t))
  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;;&lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;:hook (on-init-ui . (lambda() (load-theme &apos;everforest-hard-dark t))))
&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org46a51de&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org46a51de&quot;&gt;&lt;a href=&quot;#org46a51de&quot;&gt;Mode Line&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org46a51de&quot;&gt;
&lt;p&gt;
&lt;code&gt;doom-modeline&lt;/code&gt; is a great alternative to the classic emacs modeline.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/seagle0128/doom-modeline
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; doom-modeline
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:hook&lt;/span&gt; (on-init-ui . doom-modeline-mode)
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (doom-modeline-position-column-line-format &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;L%l|C%c&quot;&lt;/span&gt;))
  (doom-modeline-enable-word-count (derived-mode-p &apos;text-mode))
  (doom-modeline-buffer-encoding nil)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org2c7c325&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org2c7c325&quot;&gt;&lt;a href=&quot;#org2c7c325&quot;&gt;Initial Buffer&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org2c7c325&quot;&gt;
&lt;p&gt;
the default emacs startup screen is weird. the scratch buffer is. boring. &lt;code&gt;dashboard.el&lt;/code&gt; is based. it is loaded eagerly because emacs needs it as the &lt;code&gt;initial-buffer-chocie&lt;/code&gt; before any interactive input.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/emacs-dashboard/dashboard
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; dashboard
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:demand&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (dashboard-startup-banner &apos;logo)
  (dashboard-projects-backend &apos;project-el)
  (dashboard-center-content t)
  (dashboard-display-icons-p (seq-some #&apos;featurep &apos;(nerd-icons all-the-icons)))
  (dashboard-set-heading-icons t)
  (dashboard-set-file-icons t)
  (dashboard-footer-icon &lt;span class=&quot;org-string&quot;&gt;&quot;&quot;&lt;/span&gt;)
  (dashboard-navigation-cycle t)
  (initial-buffer-choice (&lt;span class=&quot;org-keyword&quot;&gt;lambda&lt;/span&gt; () (get-buffer-create dashboard-buffer-name)))
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (dashboard-setup-startup-hook)
  &lt;span class=&quot;org-builtin&quot;&gt;:preface&lt;/span&gt;
  &amp;lt;&amp;lt;dynamic-dashboard-sections&amp;gt;&amp;gt;&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org2f96557&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org2f96557&quot;&gt;&lt;a href=&quot;#org2f96557&quot;&gt;Dynamic Sections&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-org2f96557&quot;&gt;
&lt;p&gt;
one of the weird quirks with &lt;code&gt;dashboard.el&lt;/code&gt; is that if a section has no content, the section remains with &lt;code&gt;--- No Items ---&lt;/code&gt; displayed. this is silly. so, we dynamically choose what sections to render ourselves instead.
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
The approach is three-part: a predicate to test
whether a given section has content, a separate variable to hold the
desired list of sections (so the actual &lt;code&gt;dashboard-items&lt;/code&gt; can be mutated
freely), and an advice function that filters the list each time the
dashboard is rebuilt.
&lt;/p&gt;

&lt;p&gt;
-coopi
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;my/dashboard-section-non-empty-p&lt;/span&gt; (section)
  &lt;span class=&quot;org-doc&quot;&gt;&quot;Return non-nil if SECTION has data worth showing.&quot;&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;pcase&lt;/span&gt; section
    (&apos;recents (&lt;span class=&quot;org-keyword&quot;&gt;bound-and-true-p&lt;/span&gt; recentf-list))
    (&apos;projects
     (&lt;span class=&quot;org-keyword&quot;&gt;pcase&lt;/span&gt; dashboard-projects-backend
       (&apos;project-el
        (&lt;span class=&quot;org-keyword&quot;&gt;and&lt;/span&gt; (fboundp &apos;project-known-project-roots)
             (project-known-project-roots)))
       (&apos;projectile
        (&lt;span class=&quot;org-keyword&quot;&gt;and&lt;/span&gt; (fboundp &apos;projectile-relevant-known-projects)
             (projectile-relevant-known-projects)))
       (_ nil)))
    (&apos;bookmarks
     (&lt;span class=&quot;org-keyword&quot;&gt;and&lt;/span&gt; (fboundp &apos;bookmark-all-names)
          (bookmark-all-names)))
    (&apos;agenda
     (&lt;span class=&quot;org-keyword&quot;&gt;and&lt;/span&gt; (fboundp &apos;org-agenda-files)
          (org-agenda-files t)))
    (&apos;registers register-alist)
    (_ t))&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;defvar&lt;/span&gt; &lt;span class=&quot;org-variable-name&quot;&gt;my/dashboard-candidate-items&lt;/span&gt;
  &apos;((recents . 5)
    (projects . 5)
    (bookmarks . 5)
    (agenda . 5)
    (registers . 5))
  &lt;span class=&quot;org-doc&quot;&gt;&quot;Sections to show in the dashboard, if they have content.
See `&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&lt;span class=&quot;org-constant&quot;&gt;dashboard-items&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&apos; for the expected format.&quot;&lt;/span&gt;&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;my/dashboard-refresh-items&lt;/span&gt; (&lt;span class=&quot;org-type&quot;&gt;&amp;amp;rest&lt;/span&gt; _)
  &lt;span class=&quot;org-doc&quot;&gt;&quot;Update `&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&lt;span class=&quot;org-constant&quot;&gt;dashboard-items&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&apos; to exclude empty sections.&quot;&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;setq&lt;/span&gt; dashboard-items
        (seq-filter
         (&lt;span class=&quot;org-keyword&quot;&gt;lambda&lt;/span&gt; (item) (my/dashboard-section-non-empty-p (car item)))
         my/dashboard-candidate-items)))
(advice-add &apos;dashboard-insert-startupify-lists &lt;span class=&quot;org-builtin&quot;&gt;:before&lt;/span&gt; #&apos;my/dashboard-refresh-items&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgc500262&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;orgc500262&quot;&gt;&lt;a href=&quot;#orgc500262&quot;&gt;Dashboard Footer Quotations&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-orgc500262&quot;&gt;
&lt;p&gt;
coopi wasn&apos;t satisfied with the predetermined list of footer quotes &lt;code&gt;dashboard.el&lt;/code&gt; came with, so he made a whole new package to pull quotes from quotable. this is cool. i&apos;m stealing it now.
&lt;/p&gt;

&lt;p&gt;
because none of coopi&apos;s packages are on melpa, we&apos;re using straight to pull it from codeberg
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:codeberg/coopi/emacs-quotable
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; quotable
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; (&lt;span class=&quot;org-builtin&quot;&gt;:host&lt;/span&gt; codeberg
                   &lt;span class=&quot;org-builtin&quot;&gt;:repo&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;coopi/emacs-quotable&quot;&lt;/span&gt;
                   &lt;span class=&quot;org-builtin&quot;&gt;:branch&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;main&quot;&lt;/span&gt;
                   &lt;span class=&quot;org-builtin&quot;&gt;:protocol&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;https&quot;&lt;/span&gt;)
  &lt;span class=&quot;org-builtin&quot;&gt;:demand&lt;/span&gt; t)

(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; dashboard
  &lt;span class=&quot;org-builtin&quot;&gt;:requires&lt;/span&gt; quotable
  &lt;span class=&quot;org-builtin&quot;&gt;:preface&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;defvar&lt;/span&gt; &lt;span class=&quot;org-variable-name&quot;&gt;my/dashboard-quote&lt;/span&gt;
    &lt;span class=&quot;org-string&quot;&gt;&quot;\&quot;I use Emacs, which might be thought of as a thermonuclear word processor.\&quot; &amp;#8212; Neal Stephenson&quot;&lt;/span&gt;
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Cached quotation displayed in the dashboard footer.
Seeded with a static fallback; replaced asynchronously at startup
and refreshed each time the dashboard is rebuilt.&quot;&lt;/span&gt;)
  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;my/dashboard-fetch-quote&lt;/span&gt; ()
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Fetch a random quote asynchronously and store it in `&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&lt;span class=&quot;org-constant&quot;&gt;my/dashboard-quote&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&apos;.&quot;&lt;/span&gt;
    (quotable-random
     &lt;span class=&quot;org-builtin&quot;&gt;:max-length&lt;/span&gt; (window-body-width)
     &lt;span class=&quot;org-builtin&quot;&gt;:callback&lt;/span&gt; (&lt;span class=&quot;org-keyword&quot;&gt;lambda&lt;/span&gt; (quotes)
                 (&lt;span class=&quot;org-keyword&quot;&gt;setq&lt;/span&gt; my/dashboard-quote
                       (quotable-format-quote (car quotes))))))
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;define-advice&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;dashboard-random-footer&lt;/span&gt;
      (&lt;span class=&quot;org-builtin&quot;&gt;:override&lt;/span&gt; () my/dashboard-random-footer-quote)
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Return the most recently fetched quotation.&quot;&lt;/span&gt;
    my/dashboard-quote)
  (my/dashboard-fetch-quote)
  &lt;span class=&quot;org-builtin&quot;&gt;:hook&lt;/span&gt; (dashboard-mode . my/dashboard-fetch-quote)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org3826ee3&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org3826ee3&quot;&gt;&lt;a href=&quot;#org3826ee3&quot;&gt;Fonts&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org3826ee3&quot;&gt;
&lt;p&gt;
we currently use the Monofur font because we like its rounded shapes, dotted zero &lt;code&gt;0&lt;/code&gt;, and paw bullet &lt;code&gt;•&lt;/code&gt;. we &lt;i&gt;do&lt;/i&gt; want to edit it one day to be more legible in certain areas (the &lt;code&gt;a&lt;/code&gt; can get very illegible at bold weights, for example), but for now, it works for our purposes.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; emacs
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  &amp;lt;&amp;lt;set-noto-fonts&amp;gt;&amp;gt;
  &lt;span class=&quot;org-builtin&quot;&gt;:custom-face&lt;/span&gt;
  (default ((t (&lt;span class=&quot;org-builtin&quot;&gt;:family&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;monofur&quot;&lt;/span&gt;))))
  (variable-pitch ((t (&lt;span class=&quot;org-builtin&quot;&gt;:family&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;monofur&quot;&lt;/span&gt;))))&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org4ee1c97&quot; class=&quot;outline-4&quot;&gt;
&lt;h4 id=&quot;org4ee1c97&quot;&gt;&lt;a href=&quot;#org4ee1c97&quot;&gt;Multilingual Coverage with Noto&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;outline-text-4&quot; id=&quot;text-org4ee1c97&quot;&gt;
&lt;p&gt;
emacs&apos; glyph fallback feature is a bit inconsistent, so we explicitly set certain scripts to certain fonts. we don&apos;t personally need all of them, but we do want some of them. we are also going to use this to add emoji support via Noto Color Sans and Symbola.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;dolist&lt;/span&gt; (entry
           &apos;(&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/notofonts/arabic
&lt;/span&gt;           (arabic . &lt;span class=&quot;org-string&quot;&gt;&quot;Noto Sans Arabic&quot;&lt;/span&gt;)
             &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/notofonts/greek
&lt;/span&gt;           (greek . &lt;span class=&quot;org-string&quot;&gt;&quot;Noto Sans&quot;&lt;/span&gt;)
             &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/notofonts/noto-cjk
&lt;/span&gt;           (han . (&lt;span class=&quot;org-string&quot;&gt;&quot;Noto Sans CJK SC&quot;&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;Noto Sans CJK TC&quot;&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;Noto Sans CJK JP&quot;&lt;/span&gt;))
           &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/notofonts/hangul
&lt;/span&gt;           (hangul . &lt;span class=&quot;org-string&quot;&gt;&quot;Noto Sans CJK KR&quot;&lt;/span&gt;)
             &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/notofonts/hebrew
&lt;/span&gt;           (hebrew . &lt;span class=&quot;org-string&quot;&gt;&quot;Noto Sans Hebrew&quot;&lt;/span&gt;)
             &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/googlefonts/noto-emoji
&lt;/span&gt;             &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/ChiefMikeK/ttf-symbola
&lt;/span&gt;             (symbol . (&lt;span class=&quot;org-string&quot;&gt;&quot;Noto Color Emoji&quot;&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;Symbola&quot;&lt;/span&gt;))))
  (&lt;span class=&quot;org-keyword&quot;&gt;let&lt;/span&gt; ((script (car entry))
        (font (cdr entry)))
    (&lt;span class=&quot;org-keyword&quot;&gt;if&lt;/span&gt; (listp font)
        (&lt;span class=&quot;org-keyword&quot;&gt;progn&lt;/span&gt;
          (set-fontset-font &lt;span class=&quot;org-string&quot;&gt;&quot;fontset-default&quot;&lt;/span&gt; script (car font))
          (&lt;span class=&quot;org-keyword&quot;&gt;dolist&lt;/span&gt; (f (cdr font))
            (set-fontset-font &lt;span class=&quot;org-string&quot;&gt;&quot;fontset-default&quot;&lt;/span&gt; script f nil &apos;append)))
      (set-fontset-font &lt;span class=&quot;org-string&quot;&gt;&quot;fontset-default&quot;&lt;/span&gt; script font)))&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgb1ea4bc&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgb1ea4bc&quot;&gt;&lt;a href=&quot;#orgb1ea4bc&quot;&gt;Nerd Icons&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgb1ea4bc&quot;&gt;
&lt;p&gt;
multiple packages later on rely on nerd font icons to display additional glyphs.
to add these icons without needing to use a Nerd Font (monofur has a nerd font, but
has weird rendering issues sometimes in our experience), we can use the package
&lt;code&gt;nerd-icons.el&lt;/code&gt; along with using &lt;a href=&quot;elisp:(nerd-icons-install-fonts)&quot;&gt;&lt;code&gt;M-x nerd-icons-install-fonts&lt;/code&gt;&lt;/a&gt; to install the base
symbol font &lt;code&gt;Symbols Nerd Font Mono&lt;/code&gt; automatically. we will also be setting the
variable &lt;code&gt;nerd-icons-font-family&lt;/code&gt; to said font to make sure that font is used.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;;&lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/rainstormstudio/nerd-icons.el
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; nerd-icons
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:demand&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (nerd-icons-font-family &lt;span class=&quot;org-string&quot;&gt;&quot;Symbols Nerd Font Mono&quot;&lt;/span&gt;)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org2d7d891&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org2d7d891&quot;&gt;&lt;a href=&quot;#org2d7d891&quot;&gt;Transparency&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org2d7d891&quot;&gt;
&lt;p&gt;
we like being able to see our desktop wallpaper, even while we are coding or writing. thus, we make our terminal and text editors have a transparent background, both on the current frame and every frame after. we also turn on current line highlighting to make it more obvious which line we are editing.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; emacs
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (set-frame-parameter nil &apos;alpha-background 50)
  (add-to-list &apos;default-frame-alist &apos;(alpha-background . 50))
(global-hl-line-mode 1)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgf4d002f&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgf4d002f&quot;&gt;&lt;a href=&quot;#orgf4d002f&quot;&gt;Editor Behavior&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgf4d002f&quot;&gt;
&lt;p&gt;
this section covers the logical behavior of the editor.
&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org7d50d17&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org7d50d17&quot;&gt;&lt;a href=&quot;#org7d50d17&quot;&gt;&lt;code&gt;*scratch*&lt;/code&gt; Buffer&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org7d50d17&quot;&gt;
&lt;p&gt;
we replace the initial comment in the scratch buffer with a lexical binding cookie
so that any code evaluated there benefits from lexical binding.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; emacs
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (initial-scratch-message &lt;span class=&quot;org-string&quot;&gt;&quot;;; -*- lexical-binding: t; -*-\n\n&quot;&lt;/span&gt;)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org91f1110&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org91f1110&quot;&gt;&lt;a href=&quot;#org91f1110&quot;&gt;Global Minor Modes&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org91f1110&quot;&gt;
&lt;p&gt;
emacs comes with a bunch of extra minor modes that add little quality of life
improvements. it should be a no-brainer to include them.
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;saveplace-mode&lt;/code&gt; saves the location of the cursor when visiting a file. loading
the file up again will place the cursor back where it was when you closed it.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete-selection-mode&lt;/code&gt; makes inserting any text while a selection is active
delete the entire selection and replace it with the inserted text&amp;#x2026; like pretty
much every other text editor.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;repeat-mode&lt;/code&gt; allows many multi-key shortcuts to be repeated by just pressing
the last key in the sequence.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;global-so-long-mode&lt;/code&gt; if you are editing a file with &lt;b&gt;incredibly&lt;/b&gt; long lines
(minified JS, machine-generated files, etc.), this mode replaces the
typical major mode with an alternative that makes editing those files a lot easier.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;electric-pair-mode&lt;/code&gt; automatically matches opening delimiter inputs (parentheses,
braces, brackets, etc.) with a closing one (e. typing &lt;code&gt;{&lt;/code&gt; will automatically
insert a &lt;code&gt;}&lt;/code&gt; to the right of the cursor to produce &lt;code&gt;{|}&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;global-subword-mode&lt;/code&gt; when executing motions based on words and tokens, treat
&lt;code&gt;camelCase&lt;/code&gt; and &lt;code&gt;snake_case&lt;/code&gt; tokens as sequences of words instead of one
monolithic token (e. &lt;code&gt;camel&lt;/code&gt; and &lt;code&gt;Case&lt;/code&gt; are treated as two separate words along
with &lt;code&gt;snake&lt;/code&gt; and &lt;code&gt;case&lt;/code&gt; respectively).&lt;/li&gt;
&lt;li&gt;&lt;p&gt;
&lt;code&gt;recentf_mode&lt;/code&gt; maintains a list of recently visited files for use by things
like the dashboard package.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; emacs
  &lt;span class=&quot;org-builtin&quot;&gt;:init&lt;/span&gt;
  (save-place-mode 1)
  (delete-selection-mode 1)
  (repeat-mode 1)
  (global-so-long-mode 1)
  (electric-pair-mode 1)
  (global-subword-mode 1)
  (recentf-mode 1)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org2f8833e&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org2f8833e&quot;&gt;&lt;a href=&quot;#org2f8833e&quot;&gt;Tab Bar&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org2f8833e&quot;&gt;
&lt;p&gt;
emacs comes with a built-in tab bar! yay! &amp;#x2026;.but honestly, because we have buffers
and other shortcuts to switch between tabs, we don&apos;t &lt;i&gt;need&lt;/i&gt; a visual tab bar
to keep track of our open tabs. so, we enable the tab bar but visually hide it
after startup.
&lt;/p&gt;

&lt;p&gt;
&lt;i&gt;note: might change this l8r because this one likes tabs lol&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; emacs
  &lt;span class=&quot;org-builtin&quot;&gt;:init&lt;/span&gt;
  (tab-bar-mode 1)
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (tab-bar-show nil)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgb2a8552&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgb2a8552&quot;&gt;&lt;a href=&quot;#orgb2a8552&quot;&gt;Window History&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgb2a8552&quot;&gt;
&lt;p&gt;
did you know that you can save a history of window configurations and bring them
back up whenever you want? that&apos;s amazing!!!!! let&apos;s do that with &lt;code&gt;winner-mode&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
problem 1: if you get tabs involved, you can end up restoring layouts into
tabs that never had that layout. whoops. luckily, &lt;code&gt;tab-bar-history-mode&lt;/code&gt; solves
this by recording window history for each tab separately. this obviously
begs the question of why tabs and windows are reversed in hiearchy compared to
most environments, but that is a story for another time.
&lt;/p&gt;

&lt;p&gt;
problem 2: the default bindings for switching between window layouts are
kinda silly. who uses the arrow keys in 2026??? hello???? so, we are
changing the bindings to &lt;code&gt;C-x w&lt;/code&gt; plus &lt;code&gt;n&lt;/code&gt; for next and &lt;code&gt;p&lt;/code&gt; for previous like
most other things in emacs. we will also be changing the &lt;code&gt;repeat-map&lt;/code&gt; to
reflect the new bindings.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; winner
  &lt;span class=&quot;org-builtin&quot;&gt;:init&lt;/span&gt;
  (winner-mode 1)
  (tab-bar-history-mode 1)
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (winner-dont-bind-my-keys t)
  &lt;span class=&quot;org-builtin&quot;&gt;:bind&lt;/span&gt;
  (&lt;span class=&quot;org-builtin&quot;&gt;:map&lt;/span&gt; window-prefix-map
   (&lt;span class=&quot;org-string&quot;&gt;&quot;n&quot;&lt;/span&gt; . winner-undo)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;p&quot;&lt;/span&gt; . winner-redo)
   &lt;span class=&quot;org-builtin&quot;&gt;:map&lt;/span&gt; winner-repeat-map
   (&lt;span class=&quot;org-string&quot;&gt;&quot;n&quot;&lt;/span&gt; . winner-undo)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;p&quot;&lt;/span&gt; . winner-redo))
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (put #&apos;winner-undo &apos;repeat-map &apos;winner-repeat-map)
  (put #&apos;winner-redo &apos;repeat-map &apos;winner-repeat-map)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org196015b&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org196015b&quot;&gt;&lt;a href=&quot;#org196015b&quot;&gt;Smooth Scrolling&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org196015b&quot;&gt;
&lt;p&gt;
we are bringing emacs scrolling to the 21st century!
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;pixel-scroll-precision-mode&lt;/code&gt; makes scrolling operating on a pixel basis rather
than a line basis, which implements part 1 of &quot;smooth scrolling&quot;.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;pixel-scroll-precision-use-momentum&lt;/code&gt; adds inertia to scrolling, meaning
scroll flicks don&apos;t abruptly stop but instead &lt;i&gt;glide&lt;/i&gt; to a stop, implementing part
2 of &quot;smooth scrolling&quot;. to make sure this effect isn&apos;t too ridonkulous,
&lt;code&gt;pixel-scroll-precision-momentum-seconds&lt;/code&gt; caps the inertia at a maximum length of
0.2 seconds. we want the scrolling to feel intuitive and not like you&apos;re
scrolling on ice.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; emacs
  &lt;span class=&quot;org-builtin&quot;&gt;:init&lt;/span&gt;
  (pixel-scroll-precision-mode 1)
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (pixel-scroll-precision-use-momentum t)
  (pixel-scroll-precision-momentum-seconds 0.2)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org4980359&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org4980359&quot;&gt;&lt;a href=&quot;#org4980359&quot;&gt;Cursor Shape&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org4980359&quot;&gt;
&lt;p&gt;
typically, normal mode in meow (a secret tool that will help us later)
makes the cursor a square covering a whole character
instead of a bar inbetween characters. in editors like Vim, this accurately
models the cursor being placed on top of a character and actions being applied
to that character. emacs never does this. the manual explicitly states that
the cursor &quot;point&quot; is always &lt;b&gt;between&lt;/b&gt; characters, never &lt;i&gt;on&lt;/i&gt; a character:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Like other positions, point designates a place &lt;i&gt;between&lt;/i&gt; two characters
(or before the first character, or after the last character), rather
than a particular character.  Usually terminals display the cursor
over the character that immediately follows point; point is actually
before the character on which the cursor sits.
[insert bib here l8r]
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
thus, even tho the different cursors help to visually distinguish the different
modes while inside the editor&amp;#x2026; bro. you have the mode icon right there in
the bottom left. the block cursor just creates more confusion than it solves.
let&apos;s kill it for good and keep the bar cursor on at all times.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; emacs &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt; (cursor-type &apos;bar)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org1e444cf&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org1e444cf&quot;&gt;&lt;a href=&quot;#org1e444cf&quot;&gt;Auto-Revert&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org1e444cf&quot;&gt;
&lt;p&gt;
when a file changes on-disk, usually because a different program overwrote it,
emacs does not automatically fix the buffer that is pointing to that file
by default. you typically have to use &lt;code&gt;M-x revert-buffer&lt;/code&gt; to sync the
buffer back up to the actual state of the file on-disk. that&apos;s silly.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;global-auto-revert-mode&lt;/code&gt; makes it so whenever emacs catches that a buffer&apos;s file
has been modified outside of emacs (either by filesystem notifications or just
checking periodically itself), it automatically updates the buffer to reflect the
new changes.
&lt;/p&gt;

&lt;p&gt;
we will also extend this behavior to non-file buffers such as Dired and
remote file buffers with &lt;code&gt;global-auto-revert-non-file-buffers&lt;/code&gt; and
&lt;code&gt;auto-revert-remote-files&lt;/code&gt; respectively.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; autorevert
  &lt;span class=&quot;org-builtin&quot;&gt;:init&lt;/span&gt;
  (global-auto-revert-mode 1)
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (global-auto-revert-non-file-buffers t)
  (auto-revert-remote-files t)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgf94c211&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgf94c211&quot;&gt;&lt;a href=&quot;#orgf94c211&quot;&gt;Savehist&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgf94c211&quot;&gt;
&lt;p&gt;
&lt;code&gt;savehist-mode&lt;/code&gt; saves minibuffer history across sessions, which is required for
autocompletion frameworks like Vertico and Corfu.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; autorevert
  &lt;span class=&quot;org-builtin&quot;&gt;:init&lt;/span&gt;
  (global-auto-revert-mode 1)
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (global-auto-revert-non-file-buffers t)
  (auto-revert-remote-files t)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org81f432f&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org81f432f&quot;&gt;&lt;a href=&quot;#org81f432f&quot;&gt;Revealing Whitespace&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org81f432f&quot;&gt;
&lt;p&gt;
linters and formatters often get angwy at whitespace in weird places. to make sure
they don&apos;t get angwy, we add visual aids to visualize whitespace with &lt;code&gt;whitespace-mode&lt;/code&gt;.
we also add &lt;code&gt;whitespace-cleanup&lt;/code&gt; on save to clean up some of the mess.
&lt;/p&gt;

&lt;p&gt;
we can specify which whitespace characters we see with the &lt;code&gt;whitespace-style&lt;/code&gt; list.
here&apos;s what we turn on:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;face&lt;/code&gt; has to be on in order to add special characters to whitespaces.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tabs&lt;/code&gt; and &lt;code&gt;tab-mark&lt;/code&gt; highlight tabs with glyphs to make them
distinguishable from spaces.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;trailing&lt;/code&gt; highlights spaces and tabs at the end of a line.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;space-before-tab&lt;/code&gt; and &lt;code&gt;space-after-tab&lt;/code&gt; denotes if spaces have been added on either
side of a tab that may mess up formatting.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;newline&lt;/code&gt; and &lt;code&gt;newline-mark&lt;/code&gt; add newline glyphs.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;missing-newline-at-eof&lt;/code&gt; highlights the last line when the file does not end with
a newline, which some formatters get angwy about.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
to denote &lt;i&gt;which&lt;/i&gt; glyps are used for each kind of whitespace, we use the
&lt;code&gt;whitespace-display-mappings&lt;/code&gt; alist: &lt;code&gt;(&amp;lt;character class&amp;gt; &amp;lt;character to replace&amp;gt;
&amp;lt;glyph options&amp;gt;)&lt;/code&gt; (each glyph is tried in order until one is able to be displayed).
we try to use Unicode characters first (&lt;code&gt;›&lt;/code&gt; for tabs, &lt;code&gt;·&lt;/code&gt; for ordinary spaces, &lt;code&gt;⋮&lt;/code&gt; for non-breaking
spaces, &lt;code&gt;¬&lt;/code&gt; and &lt;code&gt;↵&lt;/code&gt; for newlines) and fall back to ASCII (&lt;code&gt;&amp;gt;&lt;/code&gt; and &lt;code&gt;$&lt;/code&gt;) if we can&apos;t
display Unicode for some reason.
&lt;/p&gt;

&lt;p&gt;
to clean up whitespace upon save, we hook the function up to almost all major modes:
&lt;code&gt;prog-mode&lt;/code&gt;, &lt;code&gt;conf-mode&lt;/code&gt;, and &lt;code&gt;text-mode&lt;/code&gt; covers most of what we would need it for.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; whitespace
  &lt;span class=&quot;org-builtin&quot;&gt;:hook&lt;/span&gt; ((prog-mode conf-mode text-mode) (before-save . whitespace-cleanup))
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (whitespace-display-mappings
   &apos;((tab-mark ?\t [10095 ?\t] [62 ?\t])
     (space-mark 32 [183] [46])
     (space-mark 160 [8942] [95])
     (newline-mark ?\n [172 ?\n] [36 ?\n])
     (newline-mark ?\r [182] [35])))
  (whitespace-style
   &apos;(face
     missing-newline-at-eof
     newline
     space-after-tab
     space-before-tab
     tab-mark
     tabs
     trailing))&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org057a504&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org057a504&quot;&gt;&lt;a href=&quot;#org057a504&quot;&gt;Modal Editing: &lt;code&gt;meow&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org057a504&quot;&gt;
&lt;p&gt;
emacs, unlike most of the other text editors popular with &lt;i&gt;neeeeerds&lt;/i&gt;, is &lt;b&gt;not&lt;/b&gt; a
modal editor. you press a key, and the letter on the key goes into the buffer
at the point your cursor is. yay.
&lt;/p&gt;

&lt;p&gt;
problem: emacs has. commands. and features. lots of them. some would say too many
but that&apos;s a story for another day. to access all of these features and commands,
typically one would hold down a modifier key as they press a different key on
the keyboard. a classic example is clipboard manipulation: in emacs, you use
&lt;code&gt;C-c&lt;/code&gt; (&lt;code&gt;CTRL + C&lt;/code&gt;) to cut, &lt;code&gt;M-c&lt;/code&gt; (&lt;code&gt;Meta&lt;/code&gt; (typically the &lt;code&gt;ALT&lt;/code&gt; key) &lt;code&gt;+ C&lt;/code&gt;) to copy,
and &lt;code&gt;C-y&lt;/code&gt; (&lt;code&gt;CTRL + Y&lt;/code&gt;) to paste. A bit unusual compared to the standard convention
of &lt;code&gt;CTRL + X&lt;/code&gt;, &lt;code&gt;CTRL + C&lt;/code&gt;, and &lt;code&gt;CTRL + V&lt;/code&gt; respectively, but hey, it still works.
&lt;/p&gt;

&lt;p&gt;
&amp;#x2026; now imagine doing that. &lt;i&gt;for everything you would want to do in an IDE&lt;/i&gt;. No GUI. No buttons. No mouse. Modifier keys on top of modifier keys. then
you get RSI and you have to tell your doctor that you got your pinkie strained because
you were too busy configuring emacs instead of doing actual work like this one is
currently doing right now. this is such a common issue that the emacs community has
developed an actual term for it: &lt;a href=&quot;https://irreal.org/blog/?p=12934&quot;&gt;emacs pink(y/ie)&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
the easiest way to solve this sounds counter-intuitive but makes sense if you think
about it: make it so when you first load emacs&amp;#x2026; you can&apos;t insert text.
&lt;/p&gt;

&lt;blockquote class=&quot;socratic&quot;&gt;
&lt;p&gt;
&lt;span class=&quot;jackson&quot;&gt;jackson: wait, why would you make the text editor not able to edit text? that&amp;#x2026;
seams like the wrong thing to do? don&apos;t you want to edit text?&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;millie&quot;&gt;millie: yes. but we can fix that by making it so, if you want to, you &lt;i&gt;can&lt;/i&gt;
edit text later.&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;jackson&quot;&gt;jackson: &amp;#x2026;how does that work?&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;millie&quot;&gt;millie: &amp;#x2026;&amp;#x2026;it&apos;s hard to find a good way to explain this to a child, but&amp;#x2026;
you know how the air conditioning in houses have a heating mode and a cooling mode?
when it&apos;s hot outside, you turn the ac to &quot;cool&quot; so it cools down the air in the
house, and when it&apos;s cold outside, you turn the ac to &quot;heat&quot; so it heats &lt;i&gt;up&lt;/i&gt; the
air inside the house instead?&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;jackson&quot;&gt;jackson: yeah! cold outside, heat the house; hot outside, cold the house!&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;millie&quot;&gt;millie: mhm. the ac can do different things to the air depending on what &quot;mode&quot;
it&apos;s in.&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;millie&quot;&gt;millie: &amp;#x2026;what if we took that idea and applied it to a text editor? when you want to write stuff,
your brain is all fired up, and you want to heat up your keyboard with aaaaall of your typing.
so you turn emacs into &quot;heat&quot; mode to insert text. then,
when you&apos;re done writing text, you want to &quot;cool down&quot; and think about things like
saving your changes, editing the text you just wrote in big strokes, or switching
to a different file. that is when you turn emacs into &quot;cool&quot; mode. and when you
do that, all of a sudden, &lt;b&gt;all&lt;/b&gt; of the keys on your keyboard become &lt;b&gt;command keys&lt;/b&gt;.&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;jackson&quot;&gt;jackson: &amp;#x2026;&amp;#x2026;command keys&amp;#x2026;&amp;#x2026; keys that do stuff?&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;millie&quot;&gt;millie: yup! instead of &lt;code&gt;s&lt;/code&gt; inserting an &lt;code&gt;s&lt;/code&gt; into the file, you could make it save the
file you just wrote in. you can make &lt;code&gt;c&lt;/code&gt; copy and &lt;code&gt;v&lt;/code&gt; paste so instead of having to hold
the &lt;code&gt;CTRL&lt;/code&gt; key down, you can just press one key instead! your pinkie is saved!&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;jackson&quot;&gt;jackson: yayyyyyy pinkieeeeeeeeeeee&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;millie&quot;&gt;millie\: &lt;i&gt;\*picks up jackson and holds close, slightly giggling\*&lt;/i&gt; thank you for playing along with doll.
this was silly, but hopefully you had fun.&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;jackson&quot;&gt;jackson: yeah! this&amp;#x2026; &lt;i&gt;soh cray tick&lt;/i&gt; thing is&amp;#x2026;. cute. like&amp;#x2026;. i don&apos;t like
driving the car, cause kitty doesnt know how to drive, but with this, kitty don&apos;t
have to drive. auntie can drive and i am just being cute.&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;millie&quot;&gt;millie: a&amp;#x2026;a&amp;#x2026;&amp;#x2026;&amp;#x2026;&amp;#x2026; /\*uncontrolable sobbing\*/&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
narrator: while those two are sorting themselves out, we will be right back with our regularly
scheduled emacs config&amp;#x2026; after these brief messages.&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;evil&quot;&gt;d r i n    k     w a t  er&lt;/span&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
tl;dr: modal editing is the #1 preventative measure against emacs pinkie, and thus we need to
add modal editing to emacs.
&lt;/p&gt;

&lt;p&gt;
the typical solution would be to use &lt;a href=&quot;https://github.com/emacs-evil/evil&quot;&gt;evil mode&lt;/a&gt;, which emulates vi/vim bindings inside of
emacs. that works, and it works very well! but you know what&apos;s even more evil than vim?
&lt;/p&gt;

&lt;p&gt;
cats.
&lt;/p&gt;

&lt;blockquote class=&quot;socratic&quot;&gt;
&lt;p&gt;
&lt;span class=&quot;jackson&quot;&gt;jackson: mmmrrroooooowwwwwwwwwwwwwwwwwwww &amp;gt;:[&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;millie&quot;&gt;millie: not you&lt;/span&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
&lt;a href=&quot;https://github.com/meow-edit/meow&quot;&gt;meow mode&lt;/a&gt; is a modal editing package for emacs that borrows its keybindings from a &lt;i&gt;different&lt;/i&gt;
modal editor: &lt;a href=&quot;https://kakoune.org/&quot;&gt;kakoune&lt;/a&gt;. why? kakoune includes a lot of really cool utilities for selecting and editing
certain kinds of text, including a multicursor feature that &lt;i&gt;doesn&apos;t&lt;/i&gt; require holding down &lt;code&gt;CTRL&lt;/code&gt; and
clicking everywhere on the screen you want to edit because it&apos;s &lt;b&gt;better&lt;/b&gt; than that. so much better.
after getting used to how &lt;code&gt;meow&lt;/code&gt; works, this one has never wanted to go back to vim bindings. the
&lt;i&gt;only&lt;/i&gt; gripe it currently has is not being able to copy text with &lt;code&gt;y&lt;/code&gt; by default, but that&apos;s a small price to pay.
&lt;/p&gt;

&lt;p&gt;
because meow mode does not actually define any key bindings by default, we manually define the recommended qwerty
layout here too. remind this one to document what all the keys do later. &amp;#x2026;also, we should probably condense this
a little bit later too.
&lt;/p&gt;

&lt;p&gt;
for some reason, we have to demand meow in order for the config to load properly.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; meow
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:demand&lt;/span&gt; t

  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (meow-cheatsheet-layout meow-cheatsheet-layout-qwerty)

  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (meow-motion-define-key
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;j&quot;&lt;/span&gt; . meow-next)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;k&quot;&lt;/span&gt; . meow-prev)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;&amp;lt;escape&amp;gt;&quot;&lt;/span&gt; . ignore))
  (meow-leader-define-key
   &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Use SPC (0-9) for digit arguments.
&lt;/span&gt;   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;1&quot;&lt;/span&gt; . meow-digit-argument)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;2&quot;&lt;/span&gt; . meow-digit-argument)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;3&quot;&lt;/span&gt; . meow-digit-argument)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;4&quot;&lt;/span&gt; . meow-digit-argument)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;5&quot;&lt;/span&gt; . meow-digit-argument)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;6&quot;&lt;/span&gt; . meow-digit-argument)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;7&quot;&lt;/span&gt; . meow-digit-argument)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;8&quot;&lt;/span&gt; . meow-digit-argument)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;9&quot;&lt;/span&gt; . meow-digit-argument)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;0&quot;&lt;/span&gt; . meow-digit-argument)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;/&quot;&lt;/span&gt; . meow-keypad-describe-key)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;?&quot;&lt;/span&gt; . meow-cheatsheet))
  (meow-normal-define-key
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;0&quot;&lt;/span&gt; . meow-expand-0)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;9&quot;&lt;/span&gt; . meow-expand-9)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;8&quot;&lt;/span&gt; . meow-expand-8)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;7&quot;&lt;/span&gt; . meow-expand-7)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;6&quot;&lt;/span&gt; . meow-expand-6)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;5&quot;&lt;/span&gt; . meow-expand-5)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;4&quot;&lt;/span&gt; . meow-expand-4)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;3&quot;&lt;/span&gt; . meow-expand-3)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;2&quot;&lt;/span&gt; . meow-expand-2)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;1&quot;&lt;/span&gt; . meow-expand-1)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;-&quot;&lt;/span&gt; . negative-argument)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;;&quot;&lt;/span&gt; . meow-reverse)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;,&quot;&lt;/span&gt; . meow-inner-of-thing)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;.&quot;&lt;/span&gt; . meow-bounds-of-thing)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;[&quot;&lt;/span&gt; . meow-beginning-of-thing)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;]&quot;&lt;/span&gt; . meow-end-of-thing)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;a&quot;&lt;/span&gt; . meow-append)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;A&quot;&lt;/span&gt; . meow-open-below)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;b&quot;&lt;/span&gt; . meow-back-word)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;B&quot;&lt;/span&gt; . meow-back-symbol)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;c&quot;&lt;/span&gt; . meow-change)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;d&quot;&lt;/span&gt; . meow-delete)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;D&quot;&lt;/span&gt; . meow-backward-delete)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;e&quot;&lt;/span&gt; . meow-next-word)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;E&quot;&lt;/span&gt; . meow-next-symbol)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;f&quot;&lt;/span&gt; . meow-find)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;g&quot;&lt;/span&gt; . meow-cancel-selection)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;G&quot;&lt;/span&gt; . meow-grab)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;h&quot;&lt;/span&gt; . meow-left)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;H&quot;&lt;/span&gt; . meow-left-expand)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;i&quot;&lt;/span&gt; . meow-insert)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;I&quot;&lt;/span&gt; . meow-open-above)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;j&quot;&lt;/span&gt; . meow-next)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;J&quot;&lt;/span&gt; . meow-next-expand)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;k&quot;&lt;/span&gt; . meow-prev)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;K&quot;&lt;/span&gt; . meow-prev-expand)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;l&quot;&lt;/span&gt; . meow-right)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;L&quot;&lt;/span&gt; . meow-right-expand)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;m&quot;&lt;/span&gt; . meow-join)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;n&quot;&lt;/span&gt; . meow-search)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;o&quot;&lt;/span&gt; . meow-block)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;O&quot;&lt;/span&gt; . meow-to-block)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;p&quot;&lt;/span&gt; . meow-yank)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;q&quot;&lt;/span&gt; . meow-quit)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;Q&quot;&lt;/span&gt; . meow-goto-line)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;r&quot;&lt;/span&gt; . meow-replace)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;R&quot;&lt;/span&gt; . meow-swap-grab)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;s&quot;&lt;/span&gt; . meow-kill)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;t&quot;&lt;/span&gt; . meow-till)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;u&quot;&lt;/span&gt; . meow-undo)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;U&quot;&lt;/span&gt; . meow-undo-in-selection)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;v&quot;&lt;/span&gt; . meow-visit)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;w&quot;&lt;/span&gt; . meow-mark-word)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;W&quot;&lt;/span&gt; . meow-mark-symbol)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;x&quot;&lt;/span&gt; . meow-line)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;X&quot;&lt;/span&gt; . meow-goto-line)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;y&quot;&lt;/span&gt; . meow-save)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;Y&quot;&lt;/span&gt; . meow-sync-grab)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;z&quot;&lt;/span&gt; . meow-pop-selection)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;&apos;&quot;&lt;/span&gt; . repeat)
   &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;&amp;lt;escape&amp;gt;&quot;&lt;/span&gt; . ignore))

  (meow-global-mode 1)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgf5120d1&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgf5120d1&quot;&gt;&lt;a href=&quot;#orgf5120d1&quot;&gt;Defining Custom Keymaps: &lt;code&gt;bind-map&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgf5120d1&quot;&gt;
&lt;p&gt;
it is an absolute pain to define custom keymaps for some reason. &lt;code&gt;bind-map&lt;/code&gt; makes this somewhat easier by giving you a special macro to quickly define a new keymap.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/justbur/emacs-bind-map
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; bind-map &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t &lt;span class=&quot;org-builtin&quot;&gt;:demand&lt;/span&gt; t&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgde28bbc&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgde28bbc&quot;&gt;&lt;a href=&quot;#orgde28bbc&quot;&gt;Help: &lt;code&gt;helpful&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgde28bbc&quot;&gt;
&lt;p&gt;
emacs has a really extensive set of help and documentation features built-in. the
problem is that they can look a bit plain and leave some things vague. &lt;code&gt;helpful&lt;/code&gt;
helps with that (&lt;i&gt;badum tish&lt;/i&gt;) by replacing the standard &lt;code&gt;describe-*&lt;/code&gt; commands with
variants with source code, related functions, callers, and better formatting.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/Wilfred/helpful
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; helpful
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:bind&lt;/span&gt;
  (([remap describe-function] . helpful-callable)
   ([remap describe-command]  . helpful-command)
   ([remap describe-variable] . helpful-variable)
   ([remap describe-key]      . helpful-key)
   ([remap describe-symbol]   . helpful-symbol))
  &lt;span class=&quot;org-builtin&quot;&gt;:preface&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;my/helpful-override-help&lt;/span&gt; (fn &lt;span class=&quot;org-type&quot;&gt;&amp;amp;rest&lt;/span&gt; args)
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Call FN with ARGS, routing describe-* calls through Helpful.
Temporarily rebinds `&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&lt;span class=&quot;org-constant&quot;&gt;describe-function&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&apos; and `&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&lt;span class=&quot;org-constant&quot;&gt;describe-variable&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&apos; to their
Helpful equivalents.  This ensures that any `&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&lt;span class=&quot;org-constant&quot;&gt;describe-*&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&apos; calls made
within FN&amp;#8212;such as those triggered by Org help links&amp;#8212;use Helpful rather
than the default help system.&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;cl-letf&lt;/span&gt; (((symbol-function &apos;describe-function) #&apos;helpful-function)
              ((symbol-function &apos;describe-variable) #&apos;helpful-variable))
      (apply fn args)))
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (advice-add #&apos;org-link--open-help &lt;span class=&quot;org-builtin&quot;&gt;:around&lt;/span&gt; #&apos;my/helpful-override-help)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
since we are also using &lt;code&gt;apropos&lt;/code&gt;, we will also integrate &lt;code&gt;helpful&lt;/code&gt; by patching
the buttons in &lt;code&gt;apropos&lt;/code&gt; result buffers to bring up &lt;code&gt;helpful&lt;/code&gt; instead of the default
help system.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; helpful
  &lt;span class=&quot;org-builtin&quot;&gt;:after&lt;/span&gt; apropos
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;dolist&lt;/span&gt; (fun-bt &apos;(apropos-function apropos-macro apropos-command))
    (button-type-put fun-bt &apos;action
                     (&lt;span class=&quot;org-keyword&quot;&gt;lambda&lt;/span&gt; (button)
                       (helpful-callable (button-get button &apos;apropos-symbol)))))
  (&lt;span class=&quot;org-keyword&quot;&gt;dolist&lt;/span&gt; (var-bt &apos;(apropos-variable apropos-user-option))
    (button-type-put var-bt &apos;action
                     (&lt;span class=&quot;org-keyword&quot;&gt;lambda&lt;/span&gt; (button)
                       (helpful-variable (button-get button &apos;apropos-symbol)))))&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org091de7e&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org091de7e&quot;&gt;&lt;a href=&quot;#org091de7e&quot;&gt;Language Server Protocol: Elgot&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org091de7e&quot;&gt;
&lt;p&gt;
elgot is an LSP client built into emacs, so it&apos;s a no-brainer to use
what we already have. we start it up on all programming modes by hooking it up to
&lt;code&gt;prog-mode&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
we will also bind some shortcuts for using elgot under the prefix &lt;code&gt;C-c c&lt;/code&gt; (it&apos;s
the code prefix!!! so &lt;code&gt;c&lt;/code&gt; c:::)
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;C-c c a&lt;/code&gt; (&lt;code&gt;elgot-code-actions&lt;/code&gt;) opens a quick-action menu for stuff like
auto-imports, quick fixes, refactoring options, etc.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C-c c o&lt;/code&gt; (&lt;code&gt;elgot-code-actions-organize-imports&lt;/code&gt;) runs a macro to sort and
deduplicate import statements.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C-c c r&lt;/code&gt; (&lt;code&gt;elgot-rename&lt;/code&gt;) lets you rename a particular symbol across an &lt;i&gt;entire
project&lt;/i&gt;, with the language server helping to find all the reference sites.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C-c c f&lt;/code&gt; (&lt;code&gt;elgot-format&lt;/code&gt;) runs the language server&apos;s formatter on the current
buffer or the currently active region.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; eglot
  &lt;span class=&quot;org-builtin&quot;&gt;:hook&lt;/span&gt; (prog-mode . eglot-ensure)
  &lt;span class=&quot;org-builtin&quot;&gt;:bind&lt;/span&gt;
  (&lt;span class=&quot;org-builtin&quot;&gt;:map&lt;/span&gt; eglot-mode-map
        (&lt;span class=&quot;org-string&quot;&gt;&quot;C-c c a&quot;&lt;/span&gt; . eglot-code-actions)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;C-c c o&quot;&lt;/span&gt; . eglot-code-actions-organize-imports)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;C-c c r&quot;&lt;/span&gt; . eglot-rename)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;C-c c f&quot;&lt;/span&gt; . eglot-format))&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org9aa2af8&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org9aa2af8&quot;&gt;&lt;a href=&quot;#org9aa2af8&quot;&gt;Syntax Checking: Flymake&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org9aa2af8&quot;&gt;
&lt;p&gt;
instead of having to run your code before an error is caught, Flymake is emacs&apos;s
built-in syntax checker that regularly checks your code for relevant errors, warnings,
and notes. typically, Flymake integrates with Elgot to communicate with the language
server. so, all we need to do is enable Flymake by hooking it into &lt;code&gt;prog-mode&lt;/code&gt;, just
like Elgot.
&lt;/p&gt;

&lt;p&gt;
we will also bind a few keybinds under the prefix &lt;code&gt;C-c !&lt;/code&gt; (oh no! error!):
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;C-c ! n&lt;/code&gt; and &lt;code&gt;C-c ! p&lt;/code&gt; navigate to the next and previous diagnostic in the
current buffer respectively.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C-c ! l&lt;/code&gt; opens a dedicated buffer (&lt;code&gt;*Flymake diagnostics*&lt;/code&gt;) specifically for
viewing diagnostics across the entire project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; flymake
  &lt;span class=&quot;org-builtin&quot;&gt;:hook&lt;/span&gt; (prog-mode . flymake-mode)
  &lt;span class=&quot;org-builtin&quot;&gt;:bind&lt;/span&gt;
  (&lt;span class=&quot;org-builtin&quot;&gt;:map&lt;/span&gt; flymake-mode-map
        (&lt;span class=&quot;org-string&quot;&gt;&quot;C-c ! n&quot;&lt;/span&gt; . flymake-goto-next-error)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;C-c ! p&quot;&lt;/span&gt; . flymake-goto-prev-error)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;C-c ! l&quot;&lt;/span&gt; . flymake-show-diagnostics-buffer))&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org530fd29&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org530fd29&quot;&gt;&lt;a href=&quot;#org530fd29&quot;&gt;PCRE Regular Expressions: &lt;code&gt;pcre2el&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org530fd29&quot;&gt;
&lt;p&gt;
emacs has regular expressions built in!!! yay!!!! problem: they&apos;re not like all the
other &lt;del&gt;girls&lt;/del&gt; regular expressions. &lt;code&gt;pcre2el&lt;/code&gt; fixes this by allowing you to convert
elisp regex to standard PCRE regex and back again, as well as to &lt;code&gt;rx&lt;/code&gt; which this one
has no idea what it does lol.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;code&gt;rxt-global-mode&lt;/code&gt; activates the full key-binding set globally.  The
bindings all live under &lt;code&gt;C-c /&lt;/code&gt; and follow a mnemonic pattern: &lt;code&gt;C-c / p e&lt;/code&gt;
converts a PCRE regexp to Emacs syntax, &lt;code&gt;C-c / e p&lt;/code&gt; does the reverse,
&lt;code&gt;C-c / /&lt;/code&gt; explains the regexp at point in &lt;code&gt;rx&lt;/code&gt; form with synchronized
highlighting, and &lt;code&gt;C-c / t&lt;/code&gt; toggles between Elisp string and &lt;code&gt;rx&lt;/code&gt; form
in-place.  &lt;code&gt;pcre-query-replace-regexp&lt;/code&gt; (&lt;code&gt;C-c / %&lt;/code&gt;) is particularly
convenient: it lets you write the search pattern in PCRE for an
interactive &lt;code&gt;query-replace&lt;/code&gt;, sparing you from translating it mentally.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/dcolascione/pcre2el
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; pcre2el
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:init&lt;/span&gt;
  (rxt-global-mode 1)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org8c442d4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org8c442d4&quot;&gt;&lt;a href=&quot;#org8c442d4&quot;&gt;Completion&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org8c442d4&quot;&gt;
&lt;p&gt;
completion in emacs is handled in two different and distinct ways: inside a regular buffer, and inside the minibuffer.
&lt;/p&gt;

&lt;p&gt;
in a regular buffer, &lt;code&gt;completion-at-point&lt;/code&gt; is used to search for completion results based on the current token. this is what microsoft&apos;s
visual studio and visual studio code products call &quot;intellisense&quot;: the box of options that appear below your
cursor to show you the completion options.
&lt;/p&gt;

&lt;p&gt;
in the minibuffer, &lt;code&gt;completing-read&lt;/code&gt; is used to search for completion results based on what you have input into the minibuffer.
this is how you can get a list of options to select from when you call functions like &lt;code&gt;find-file&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
these two systems are technically independent from each other but they do complement each other quite well. there are also utilities like
&lt;code&gt;orderless&lt;/code&gt; than can extend them both at the same time.
&lt;/p&gt;

&lt;p&gt;
there are a small set of packages that we are going to use to extend completion:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;vertico&lt;/code&gt; adds a new &lt;i&gt;vertical&lt;/i&gt; (eh? eh?) ui to microbuffer completion that allows you to select from a variety of options.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;marginalia&lt;/code&gt; adds annotations to each microbuffer completion candidate, giving you more information about each option than just their name can provide.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;consult&lt;/code&gt; adds additional commands for searching and navigating across emacs that use &lt;code&gt;completing-read&lt;/code&gt; to show the available options.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;corfu&lt;/code&gt; adds an intellisense-style popup to &lt;code&gt;completion-at-point&lt;/code&gt;, allowing you to select between multiple completion options.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cape&lt;/code&gt; adds an extension engine to &lt;code&gt;completion-at-point&lt;/code&gt; that allows you to have way more types of inbuffer completion available to you.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;embark&lt;/code&gt; adds contextual actions to every completion token, allowing you to perform more functions on that token than just &quot;feed this thing into what i&apos;m already doing&quot;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;orderless&lt;/code&gt; adds partial completion to all completion scenarios, allowing you to match any part of a completion item in any order.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
with these seven power stones combined, on top of what we&apos;ve already cooked with LSP stuff&amp;#x2026; wow. emacs is basically an IDE now.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;completion.el --- Completion stack -*- lexical-binding: t; -*&lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;-&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgf2e01ba&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgf2e01ba&quot;&gt;&lt;a href=&quot;#orgf2e01ba&quot;&gt;Vanilla Minibuffer Tweaks&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgf2e01ba&quot;&gt;
&lt;p&gt;
here&apos;s a bunch of vanilla tweaks we can make to improve the minibuffer experience:
&lt;/p&gt;

&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;C-g&lt;/code&gt; lets us exit out of a command in progress, but oftentimes if we focus out of the minibuffer, it won&apos;t actually do what we mean it to do.
so, we&apos;re adding a &lt;code&gt;keyboard-quit&lt;/code&gt; &quot;advice&quot; (note: what the fuck does this mean) to make sure if we press &lt;code&gt;C-g&lt;/code&gt;, no matter where we&apos;re at or what we&apos;re
currently doing, we get out of emacs jail for free.&lt;/li&gt;
&lt;li&gt;embark needs to be able to call &lt;code&gt;completing-read&lt;/code&gt; while already inside a &lt;code&gt;completing-read&lt;/code&gt;, so &lt;code&gt;enable-recursive-minibuffers&lt;/code&gt; is required. however,
to make sure we&apos;re able to &lt;i&gt;tell&lt;/i&gt; that we&apos;re doing minibufferception, we&apos;ll also enable &lt;code&gt;minibuffer-depth-indicate-mode&lt;/code&gt; to show us how many layers deep
we&apos;ve gone.&lt;/li&gt;
&lt;li&gt;by default, &lt;code&gt;M-x&lt;/code&gt; completes to &lt;i&gt;every single command available to us&lt;/i&gt;. that&apos;s silly because many of those commands just &lt;i&gt;won&apos;t work&lt;/i&gt; in modes that they&apos;re not designed for.
so, &lt;code&gt;read-extended-command-predicate&lt;/code&gt; makes sure to exclude any commands that explicitly state they can&apos;t work in our current buffer due to its current mode.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
(note: there&apos;s a &lt;b&gt;lot&lt;/b&gt; more stuff here but we&apos;re tired lol)
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; emacs
  &lt;span class=&quot;org-builtin&quot;&gt;:preface&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;define-advice&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;keyboard-quit&lt;/span&gt; (&lt;span class=&quot;org-builtin&quot;&gt;:around&lt;/span&gt; (orig-fun &lt;span class=&quot;org-type&quot;&gt;&amp;amp;rest&lt;/span&gt; args) my/keyboard-quit-dwim)
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Do-What-I-Mean behavior for `&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&lt;span class=&quot;org-constant&quot;&gt;keyboard-quit&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&apos;.
If the region is active, deactivate it.
If the current buffer is a completions buffer, close it.
If a minibuffer is open but not focused, abort the recursive edit.
Otherwise, call `&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&lt;span class=&quot;org-constant&quot;&gt;keyboard-quit&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&apos; normally.&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;cond&lt;/span&gt;
     ((region-active-p) (apply orig-fun args))
     ((derived-mode-p &apos;completion-list-mode) (delete-completion-window))
     ((&amp;gt; (minibuffer-depth) 0) (abort-recursive-edit))
     (t (apply orig-fun args))))
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (resize-mini-windows t)
  (enable-recursive-minibuffers t)
  (read-extended-command-predicate #&apos;command-completion-default-include-p)
  (minibuffer-prompt-properties
   &apos;(read-only t cursor-intangible t face minibuffer-prompt))
  (read-file-name-completion-ignore-case t)
  (read-buffer-completion-ignore-case t)
  (completion-ignore-case t)
  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;TAB indents first; completion only fires when already indented.
&lt;/span&gt;  (tab-always-indent &apos;complete)
  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Cape provides richer text-mode completion as a proper
&lt;/span&gt;  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;replacement.
&lt;/span&gt;  (text-mode-ispell-word-completion nil)
  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Vertico and Corfu render their own UIs; the built-in buffer is a
&lt;/span&gt;  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;fallback.
&lt;/span&gt;  (completion-auto-help &apos;visible)
  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Makes &quot;/u/s/e&quot; expand to &quot;/usr/share/emacs&quot;.
&lt;/span&gt;  (completion-pcm-leading-wildcard t)
  (completion-cycle-threshold nil)
  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Only relevant in the rare fallback scenario where Vertico is not
&lt;/span&gt;  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;active.
&lt;/span&gt;  (completions-eager-update t)
  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Typing /tmp/ while inside ~/projects/ discards the stale prefix.
&lt;/span&gt;  (file-name-shadow-mode t)
  &lt;span class=&quot;org-builtin&quot;&gt;:hook&lt;/span&gt; (minibuffer-setup . cursor-intangible-mode)
  &lt;span class=&quot;org-builtin&quot;&gt;:init&lt;/span&gt;
  (minibuffer-depth-indicate-mode 1)
  (context-menu-mode 1)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org01c9481&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org01c9481&quot;&gt;&lt;a href=&quot;#org01c9481&quot;&gt;Orderless&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org01c9481&quot;&gt;
&lt;p&gt;
orderless lets you match any part of a completion token with your search and even &lt;b&gt;combine&lt;/b&gt; multiple searches together by separating them with a space.
so, for example, if you were looking for &lt;code&gt;completion-at-point&lt;/code&gt;, you could type &lt;code&gt;point comp&lt;/code&gt; and match
&lt;strong&gt;comp&lt;/strong&gt;letion-at-&lt;strong&gt;point&lt;/strong&gt;.
&lt;/p&gt;

&lt;blockquote class=&quot;socratic&quot;&gt;
&lt;p&gt;
&lt;span class=&quot;casey&quot;&gt;casey: Hey, wait a minute, they aren&apos;t even in the right order! What gives???&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;millie&quot;&gt;millie: that&apos;s because instead of performing the regex comparisons once from left to right, &lt;i&gt;all&lt;/i&gt; valid comparisons are made &lt;i&gt;both ways&lt;/i&gt;.
you don&apos;t have to worry about order because there &lt;i&gt;is no order&lt;/i&gt;. it&apos;s &lt;i&gt;orderless&lt;/i&gt;. get it?&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;casey&quot;&gt;casey: &amp;#x2026;I think it should be required to at least &lt;i&gt;have&lt;/i&gt; a gender in order to make dad jokes.&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;millie&quot;&gt;millie: too bad you can&apos;t tell doll what to do because you aren&apos;t its dad.&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;casey&quot;&gt;casey: &amp;#x2026;&amp;#x2026;I&amp;#x2026;&amp;#x2026;&amp;#x2026;Kinda am? &amp;#x2026;whatever. go publish this to its site and go to bed, we&apos;re tired.&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;span class=&quot;millie&quot;&gt;millie: &amp;#x2026;&amp;#x2026;&amp;#x2026;&amp;#x2026;&amp;#x2026;fric&lt;/span&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
the main problem with doing completion this way is that, well, you&apos;re doing a &lt;i&gt;lot&lt;/i&gt;
more work in the matching. to reduce input lag, we&apos;ll be using a &quot;lite&quot; mode of
orderless called &lt;code&gt;completion-orderless-fast&lt;/code&gt; for single-component searches fewer
than four characters. once you go higher than that or insert a space (which, fun
fact, you can do for inbuffer searches by pressing &lt;code&gt;M-SPC&lt;/code&gt;), the main orderless
matcher kicks in.
&lt;/p&gt;

&lt;p&gt;
there is also a &lt;code&gt;completion-orderless-with-initialism&lt;/code&gt; style that allows you to
search tokens by their initials. so, for example, if there is a symbol named
&lt;code&gt;pen-pineapple-apple-pen&lt;/code&gt;, you can match that symbol with the search &lt;code&gt;ppap&lt;/code&gt;.
we are only going to enable this in the minibuffer, as we want to keep
inbuffer completion as quick as possible.
&lt;/p&gt;

&lt;p&gt;
we can also use &quot;dispatchers&quot; to define special rules and syntaxes for matching.
for example, the fast dispatcher only matches literal prefixes of terms by default
(so, &lt;code&gt;comp&lt;/code&gt; will only match tokens that &lt;b&gt;start&lt;/b&gt; with &lt;code&gt;comp&lt;/code&gt;). consult comes with its
own special dispatcher that adds two special syntaxes for matching: &lt;code&gt;word$&lt;/code&gt; anchors
the match to the end of the string (e. &lt;code&gt;ing$&lt;/code&gt; will only match strings that &lt;b&gt;end&lt;/b&gt;
in &lt;code&gt;ing&lt;/code&gt;), and &lt;code&gt;.ext&lt;/code&gt; is treated as a file extension matching at the end of the
string as well (so the &lt;code&gt;.el.a&lt;/code&gt; files we backed up our old config to would have a
file extension of &lt;code&gt;.a&lt;/code&gt;, &lt;b&gt;not&lt;/b&gt; &lt;code&gt;.el&lt;/code&gt;, so they would not match with a search for &lt;code&gt;.el&lt;/code&gt;
files). we will end up adding &lt;code&gt;word$&lt;/code&gt; again later, but the special consult dispatch
also takes into account its internal &quot;tofu&quot; character suffixes that it uses to
disambiguate similar candidates (todo: figure out what the fuck this means).
&lt;/p&gt;

&lt;p&gt;
finally, there are two built-in dispatchers that allow us to add common search
syntax: &lt;code&gt;orderless-kwd-dispatch&lt;/code&gt; lets us &lt;i&gt;negate&lt;/i&gt; words with &lt;code&gt;!word&lt;/code&gt;, and
&lt;code&gt;orderless-affix-dispatch&lt;/code&gt; lets us search for literal prefixes and suffixes
with &lt;code&gt;^word&lt;/code&gt; and &lt;code&gt;word$&lt;/code&gt; respectively.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/oantolin/orderless
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; orderless
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:demand&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;completion--consult-suffix&lt;/span&gt; ()
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Return a regexp matching the optional Consult tofu suffix at EOL.
Any $ anchor pattern must accommodate these suffixes or it will never
match.&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;if&lt;/span&gt; (boundp &apos;consult--tofu-regexp)
        (concat consult--tofu-regexp &lt;span class=&quot;org-string&quot;&gt;&quot;*\\&apos;&quot;&lt;/span&gt;)
      &lt;span class=&quot;org-string&quot;&gt;&quot;\\&apos;&quot;&lt;/span&gt;))

  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;completion--fast-dispatch&lt;/span&gt; (word index total)
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Use literal-prefix matching for single short components.&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;and&lt;/span&gt; (= index 0) (= total 1) (length&amp;lt; word 4)
         `(orderless-literal-prefix . ,word)))

  (&lt;span class=&quot;org-keyword&quot;&gt;orderless-define-completion-style&lt;/span&gt; completion-orderless-fast
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Fast Orderless style: literal-prefix for short single terms, full thereafter.&quot;&lt;/span&gt;
    (orderless-style-dispatchers (list #&apos;completion--fast-dispatch))
    (orderless-matching-styles &apos;(orderless-literal orderless-regexp)))

  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Initialism is only active in the minibuffer (not Corfu) to avoid
&lt;/span&gt;  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;slowing down in-buffer auto-completion.
&lt;/span&gt;  (&lt;span class=&quot;org-keyword&quot;&gt;orderless-define-completion-style&lt;/span&gt; completion-orderless-with-initialism
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Orderless style that prepends initialism matching.&quot;&lt;/span&gt;
    (orderless-matching-styles &apos;(orderless-initialism
                                 orderless-literal
                                 orderless-regexp)))

  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;completion--consult-dispatch&lt;/span&gt; (word _index _total)
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Dispatch Orderless styles with Consult suffix and extension support.&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;cond&lt;/span&gt;
     &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;word$ &amp;#8594; anchor to end of string, tofu-aware.
&lt;/span&gt;     ((string-suffix-p &lt;span class=&quot;org-string&quot;&gt;&quot;$&quot;&lt;/span&gt; word)
      `(orderless-regexp . ,(concat (substring word 0 -1)
                                    (completion--consult-suffix))))
     &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;.ext &amp;#8594; file-extension match in file/eshell contexts.
&lt;/span&gt;     ((&lt;span class=&quot;org-keyword&quot;&gt;and&lt;/span&gt; (&lt;span class=&quot;org-keyword&quot;&gt;or&lt;/span&gt; minibuffer-completing-file-name
               (derived-mode-p &apos;eshell-mode))
           (string-match-p &lt;span class=&quot;org-string&quot;&gt;&quot;\\`\\.\\.&quot;&lt;/span&gt; word))
      `(orderless-regexp . ,(concat &lt;span class=&quot;org-string&quot;&gt;&quot;\\.&quot;&lt;/span&gt;
                                    (substring word 1)
                                    (completion--consult-suffix))))))
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (completion-styles &apos;(orderless basic))
  (completion-category-defaults nil)
  (completion-category-overrides
   &apos;(&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;partial-completion handles wildcard expansion and TRAMP
&lt;/span&gt;     &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;host resolution.
&lt;/span&gt;     (file (styles partial-completion))

     (command  (styles completion-orderless-with-initialism))
     (variable (styles completion-orderless-with-initialism))
     (symbol   (styles completion-orderless-with-initialism))

     &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Orderless post-filters whatever the LSP server returns.
&lt;/span&gt;     (eglot      (styles orderless))
     (eglot-capf (styles orderless))))
  (orderless-component-separator
   #&apos;orderless-escapable-split-on-space)
  (orderless-style-dispatchers
   (list #&apos;completion--consult-dispatch
         #&apos;orderless-kwd-dispatch
         #&apos;orderless-affix-dispatch))&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org62810ae&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org62810ae&quot;&gt;&lt;a href=&quot;#org62810ae&quot;&gt;Vertico&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org62810ae&quot;&gt;
&lt;p&gt;
the built-in minibuffer UI sucks. it sucks donkey balls. vertico fixes that.
it makes the minibuffer completion UI&amp;#x2026; &lt;a href=&quot;https://www.youtube.com/watch?v=grtEt0Cudt8&quot;&gt;vertical&lt;/a&gt;. wooaawwwwww. based.
&lt;/p&gt;

&lt;p&gt;
now, multiple completion candidates show up in a &lt;i&gt;vertical&lt;/i&gt; list as soon as the
minibuffer is called. you can navigate the list like a typical menu and select them
with &lt;code&gt;RET&lt;/code&gt;. the completion UI is the &lt;i&gt;only&lt;/i&gt; thing vertico changes; everything else is
handled by other packages.
&lt;/p&gt;

&lt;p&gt;
vertico also offers multiple display formats under &lt;code&gt;vertico-multiform-mode&lt;/code&gt;.
if a command produces hiearchal or structured output (such as &lt;code&gt;consult-imenu&lt;/code&gt; or
&lt;code&gt;consult-outline&lt;/code&gt;), they can be shown in an overlay where indentation is legible.
the regular &lt;code&gt;consult-theme&lt;/code&gt; un-verticals the UI but in a smarter way, arranging
options in a flat horizontal strip that allows you to see many options without
taking up too much screen real estate.
&lt;/p&gt;

&lt;p&gt;
when using the minibuffer for filesystem navigation, multiple components are
used to make navigation easier. a hook is added to &lt;code&gt;vertico-sort&lt;/code&gt; to make
sure file candidates are pre-sorted by their directories first instead of just
their file names. &lt;code&gt;vertico-directory&lt;/code&gt; is an extension that adds more fluid
navigation across directories: &lt;code&gt;RET&lt;/code&gt; enters a directory, &lt;code&gt;DEL&lt;/code&gt; deletes the last
path component, and &lt;code&gt;M-DEL&lt;/code&gt; deletes the last path &lt;i&gt;word&lt;/i&gt; instead. no more having to
hold down the delete key to go up two folders.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;vertico-suspend&lt;/code&gt; allows you to save the state of your current minibuffer session
so when you open a second command inside of a minibuffer, after that command is
complete, you get put right back where you left off. &lt;code&gt;vertico-repeat&lt;/code&gt; complements this
by allowing you to repeat the most recent minibuffer command, recreating and
replaying the session from scratch.
&lt;/p&gt;

&lt;p&gt;
we are also adding a command called &lt;code&gt;vertico--restrict-to-matches&lt;/code&gt;, bound to
&lt;code&gt;S-SPC&lt;/code&gt;, that locks the candidate list to only the currently visible matches.
all further input will only be matched against these candidates instead of the
full candidate list.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/minad/vertico
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; vertico
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:demand&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (vertico-cycle t)
  (vertico-count 15)
  (vertico-resize t)
  (vertico-scroll-margin 3)
  &lt;span class=&quot;org-builtin&quot;&gt;:init&lt;/span&gt; (vertico-mode 1)
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;require&lt;/span&gt; &apos;&lt;span class=&quot;org-constant&quot;&gt;vertico-sort&lt;/span&gt; nil t)
  (vertico-multiform-mode 1)
  (&lt;span class=&quot;org-keyword&quot;&gt;setq&lt;/span&gt; vertico-multiform-commands
        &apos;((consult-imenu   buffer indexed)
          (consult-outline buffer)
          &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Flat horizontal display shows many theme options without
&lt;/span&gt;          &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;wasting vertical space.
&lt;/span&gt;          (consult-theme flat))
        vertico-multiform-categories
        &apos;((file (vertico-sort-function . vertico-sort-directories-first))
          &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Grep results have very long lines; a buffer with
&lt;/span&gt;          &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;horizontal scrolling is far more legible than a narrow
&lt;/span&gt;          &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;minibuffer column.
&lt;/span&gt;          (consult-grep buffer)))
  (vertico-mouse-mode 1)
  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;vertico--restrict-to-matches&lt;/span&gt; ()
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Restrict Vertico candidates to the currently displayed set.
Inserts an invisible read-only space so Orderless treats existing input
as a fixed filter and anything typed afterwards as an additional
component.&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;interactive&lt;/span&gt;)
    (&lt;span class=&quot;org-keyword&quot;&gt;let&lt;/span&gt; ((inhibit-read-only t))
      (goto-char (point-max))
      (insert &lt;span class=&quot;org-string&quot;&gt;&quot; &quot;&lt;/span&gt;)
      (add-text-properties (minibuffer-prompt-end) (point-max)
                           &apos;(invisible t
                                       read-only t
                                       cursor-intangible t
                                       rear-nonsticky t))))
  &lt;span class=&quot;org-builtin&quot;&gt;:bind&lt;/span&gt;
  (&lt;span class=&quot;org-builtin&quot;&gt;:map&lt;/span&gt; vertico-map
        (&lt;span class=&quot;org-string&quot;&gt;&quot;M-?&quot;&lt;/span&gt;   . minibuffer-completion-help)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;M-TAB&quot;&lt;/span&gt; . minibuffer-complete)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;S-SPC&quot;&lt;/span&gt; . vertico--restrict-to-matches)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;C-SPC&quot;&lt;/span&gt; . embark-select)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;M-e&quot;&lt;/span&gt;   . embark-export)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;M-c&quot;&lt;/span&gt;   . embark-collect)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;C-z&quot;&lt;/span&gt;   . vertico-suspend)))

(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; vertico-directory
  &lt;span class=&quot;org-builtin&quot;&gt;:after&lt;/span&gt; vertico
  &lt;span class=&quot;org-builtin&quot;&gt;:bind&lt;/span&gt;
  (&lt;span class=&quot;org-builtin&quot;&gt;:map&lt;/span&gt; vertico-map
        (&lt;span class=&quot;org-string&quot;&gt;&quot;RET&quot;&lt;/span&gt;   . vertico-directory-enter)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;DEL&quot;&lt;/span&gt;   . vertico-directory-delete-char)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;M-DEL&quot;&lt;/span&gt; . vertico-directory-delete-word))
  &lt;span class=&quot;org-builtin&quot;&gt;:hook&lt;/span&gt; (rfn-eshadow-update-overlay . vertico-directory-tidy))

(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; vertico-suspend
  &lt;span class=&quot;org-builtin&quot;&gt;:after&lt;/span&gt; vertico)

(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; vertico-repeat
  &lt;span class=&quot;org-builtin&quot;&gt;:after&lt;/span&gt; vertico
  &lt;span class=&quot;org-builtin&quot;&gt;:bind&lt;/span&gt; (&lt;span class=&quot;org-string&quot;&gt;&quot;M-R&quot;&lt;/span&gt; . vertico-repeat)
  &lt;span class=&quot;org-builtin&quot;&gt;:hook&lt;/span&gt; (minibuffer-setup . vertico-repeat-save)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgd8daac7&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgd8daac7&quot;&gt;&lt;a href=&quot;#orgd8daac7&quot;&gt;Marginalia&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgd8daac7&quot;&gt;
&lt;p&gt;
marginalia adds additional context to each minibuffer completion candidate in the
form of annotations shown to the right of the candidate, in what would otherwise be
empty space. for example, the docstrings can be shown next to commands, file
sizes and permissions can be shown next to file names, and packages can be
described with their versions and summaries.
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Marginalia are marks or annotations placed at the margin of the page of a book or in this case helpful colorful annotations placed at the margin of the minibuffer for your completion candidates. Marginalia can only add annotations to the completion candidates. It cannot modify the appearance of the candidates themselves, which are shown unaltered as supplied by the original command.
&lt;/p&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/minad/marginalia&quot;&gt;Marginalia README.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;
some candidates may have multiple levels of annotations, which can be cycled
through using &lt;code&gt;marginalia-cycle&lt;/code&gt;, bound to &lt;code&gt;M-A&lt;/code&gt;. &lt;code&gt;marginalia-offset&lt;/code&gt; makes
the margins right-aligned, while &lt;code&gt;marginalia-align-offset&lt;/code&gt; makes sure the last
character doesn&apos;t get accidentally cut off by the window border.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;nerd-icons-completion&lt;/code&gt; is an extension to marginalia that prepends nerd-icons
glyphs to each candidate, allowing you to quickly identify different file types,
for example.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/minad/marginalia
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; marginalia
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:demand&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:after&lt;/span&gt; vertico
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (marginalia-align &apos;right)
  (marginalia-align-offset -1)
  (marginalia-max-relative-mode-width 0.4)
  &lt;span class=&quot;org-builtin&quot;&gt;:bind&lt;/span&gt;
  (&lt;span class=&quot;org-builtin&quot;&gt;:map&lt;/span&gt; minibuffer-local-map
        (&lt;span class=&quot;org-string&quot;&gt;&quot;M-A&quot;&lt;/span&gt; . marginalia-cycle))
  &lt;span class=&quot;org-builtin&quot;&gt;:init&lt;/span&gt; (marginalia-mode 1))

&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/rainstormstudio/nerd-icons-completion
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; nerd-icons-completion
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:after&lt;/span&gt; marginalia
  &lt;span class=&quot;org-builtin&quot;&gt;:hook&lt;/span&gt; (marginalia-mode . nerd-icons-completion-marginalia-setup)
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (nerd-icons-completion-mode 1)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org1972810&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org1972810&quot;&gt;&lt;a href=&quot;#org1972810&quot;&gt;Corfu&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org1972810&quot;&gt;
&lt;p&gt;
corfu adds a little popup for completions inside of a buffer. you know when
you are typing out the name of a function in editors like VSCode and a little
box pops up with suggestions of functions available to you? yeah! it&apos;s like that,
but without copilot constantly begging you to please turn it on please play with it
please [the rest of this joke has been locked behind millie premium, donate
at least five us dollars to our ko-fi linked on the main website to see this joke]
&lt;/p&gt;

&lt;p&gt;
whenever &lt;code&gt;completion-at-point&lt;/code&gt; is invoked (read: whenever you type anything lol),
corfu parses all of the available &lt;code&gt;completion-at-point-functions&lt;/code&gt;, assembles a list
of candidates, and displays them under the cursor in a small popup.
&lt;/p&gt;

&lt;p&gt;
the main QOL feature of corfu is that it &lt;i&gt;never selects a candidate for you&lt;/i&gt;: if
you press &lt;code&gt;RET&lt;/code&gt; or &lt;code&gt;SPC&lt;/code&gt; without explicitly engaging with the corfu popup, corfu
will &lt;i&gt;not&lt;/i&gt; substitute in the top candidate; it will always fall back to whatever
text you have typed unless you explicitly engage with corfu to select a candidate.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;corfu-auto&lt;/code&gt; allows you to have the corfu popup automatically display after a short
delay (&lt;code&gt;corfu-auto-delay&lt;/code&gt; = 0.2s) and a minimum prefix length (&lt;code&gt;corfu-auto-prefix&lt;/code&gt;
= 2 characters). if you wanna complete on just one character, you can always invoke
completion manually with &lt;code&gt;C-c p&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
since we are using orderless, and orderless allows you to search multiple components
separated by a special separator character (&lt;code&gt;M-SPC&lt;/code&gt;), it wouldn&apos;t make sense to close
the popup after a word boundary is reached
(&lt;code&gt;corfu-quit-at-boundary&lt;/code&gt;), and it &lt;i&gt;would&lt;/i&gt; make sense to delay closing after finding
no valid matches until after a separator is inserted so that you can at least try
one more component before it gives up.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;corfu-history-mode&lt;/code&gt; integrates with Savehist to save candidate history, meaning
that candidates you&apos;ve previously selected have higher preference in sort order.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;corfu-popupinfo-mode&lt;/code&gt; adds &lt;i&gt;another&lt;/i&gt; popup (bwwaaahhhh) to corfu that shows
additional documentation for the currently highlighted candidate, pulled from
&lt;code&gt;eldoc&lt;/code&gt;. it has slightly more delay than the regular popup to prevent &quot;flashing&quot;
since both popups aren&apos;t synced up to appear at the same time.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;corfu-indexed-mode&lt;/code&gt; allows you to select the first nine candidates with
&lt;code&gt;C-u &amp;lt;N&amp;gt; RET&lt;/code&gt;, where N (1-9) corresponds to the number prefix added to each candidate.
&lt;/p&gt;

&lt;p&gt;
when using eshell, autocompletion is disabled since usually you only want to envoke
completion manually with &lt;code&gt;TAB&lt;/code&gt;. in eshell and comint buffers, pressing &lt;code&gt;RET&lt;/code&gt; will also
submit the current line along with selecting a candidate so you don&apos;t have to press
&lt;code&gt;RET&lt;/code&gt; twice.
&lt;/p&gt;

&lt;p&gt;
if vertico is currently active in the minibuffer, corfu is disabled so you don&apos;t have
two completion UIs butting heads with each other. if a minibuffer prompt has its
own &lt;code&gt;completion-at-point&lt;/code&gt; functions (like the eval command &lt;code&gt;M-:&lt;/code&gt; which could benefit
from elisp completion), then corfu is turned back on.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/minad/corfu
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; corfu
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:demand&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (corfu-auto t)
  (corfu-auto-delay 0.2)
  (corfu-auto-prefix 2)
  (corfu-cycle t)
  (corfu-preselect &apos;prompt)
  (corfu-min-width 32)
  (corfu-max-width 120)
  (corfu-quit-at-boundary nil)
  (corfu-quit-no-match &apos;separator)
  (corfu-preview-current &apos;insert)
  (corfu-on-exact-match &apos;insert)
  (corfu-scroll-margin 2)
  &lt;span class=&quot;org-builtin&quot;&gt;:bind&lt;/span&gt;
  (&lt;span class=&quot;org-builtin&quot;&gt;:map&lt;/span&gt; corfu-map
        &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Insert an Orderless separator without dismissing the popup.
&lt;/span&gt;        (&lt;span class=&quot;org-string&quot;&gt;&quot;M-SPC&quot;&lt;/span&gt;  . corfu-insert-separator)
        &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Transfer the session to Vertico for full Embark integration.
&lt;/span&gt;        (&lt;span class=&quot;org-string&quot;&gt;&quot;M-m&quot;&lt;/span&gt;    . corfu--move-to-minibuffer)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;M-g&quot;&lt;/span&gt;    . corfu-info-location)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;M-h&quot;&lt;/span&gt;    . corfu-info-documentation)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;C-q&quot;&lt;/span&gt;    . corfu-quick-insert)
        (&lt;span class=&quot;org-string&quot;&gt;&quot;C-S-q&quot;&lt;/span&gt;  . corfu-quick-complete))
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Activate Corfu in the minibuffer only for prompts that have their own
&lt;/span&gt;  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;completion-at-point-functions (e.g. M-:, M-!). Leave Vertico alone.
&lt;/span&gt;  (&lt;span class=&quot;org-keyword&quot;&gt;setq&lt;/span&gt; global-corfu-minibuffer
        (&lt;span class=&quot;org-keyword&quot;&gt;lambda&lt;/span&gt; ()
          (not (&lt;span class=&quot;org-keyword&quot;&gt;or&lt;/span&gt; (&lt;span class=&quot;org-keyword&quot;&gt;bound-and-true-p&lt;/span&gt; mct--active)
                   (&lt;span class=&quot;org-keyword&quot;&gt;bound-and-true-p&lt;/span&gt; vertico--input)
                   (eq (current-local-map) read-passwd-map)))))

  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;corfu--setup-orderless-fast&lt;/span&gt; ()
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Use the fast Orderless style buffer-locally for Corfu.
Full Orderless is still available after M-SPC.&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;setq-local&lt;/span&gt; completion-styles &apos;(completion-orderless-fast basic)
                completion-category-overrides nil
                completion-category-defaults nil))

  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;corfu--move-to-minibuffer&lt;/span&gt; ()
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Transfer the current Corfu session to the Vertico minibuffer.
Enables full Embark integration and multi-component Orderless filtering.&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;interactive&lt;/span&gt;)
    (&lt;span class=&quot;org-keyword&quot;&gt;pcase&lt;/span&gt; completion-in-region--data
      (`(,beg ,end ,table ,pred ,extras)
       (&lt;span class=&quot;org-keyword&quot;&gt;let&lt;/span&gt; ((completion-extra-properties extras)
             completion-cycle-threshold
             completion-cycling)
         (consult-completion-in-region beg end table pred)))))

  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;corfu--eshell-setup&lt;/span&gt; ()
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Configure Corfu conservatively for Eshell mode.
Auto-completion is disabled; the popup is still available on TAB.&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;setq-local&lt;/span&gt; corfu-auto nil)
    (corfu-mode 1))

  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;In Eshell/Comint, RET should insert the candidate AND submit the line.
&lt;/span&gt;  (keymap-set corfu-map &lt;span class=&quot;org-string&quot;&gt;&quot;RET&quot;&lt;/span&gt;
              `(menu-item &lt;span class=&quot;org-string&quot;&gt;&quot;&quot;&lt;/span&gt; nil
                          &lt;span class=&quot;org-builtin&quot;&gt;:filter&lt;/span&gt; ,(&lt;span class=&quot;org-keyword&quot;&gt;lambda&lt;/span&gt; (&lt;span class=&quot;org-type&quot;&gt;&amp;amp;optional&lt;/span&gt; _)
                                     (&lt;span class=&quot;org-keyword&quot;&gt;when&lt;/span&gt; (derived-mode-p &apos;eshell-mode
                                                           &apos;comint-mode)
                                       #&apos;corfu-send))))

  (&lt;span class=&quot;org-keyword&quot;&gt;setq&lt;/span&gt; corfu-popupinfo-delay &apos;(0.4 . 0.2))
  (add-to-list &apos;corfu-continue-commands #&apos;corfu--move-to-minibuffer)

  (global-corfu-mode 1)
  (corfu-history-mode 1)
  (corfu-popupinfo-mode 1)
  (corfu-echo-mode 1)
  &lt;span class=&quot;org-builtin&quot;&gt;:hook&lt;/span&gt;
  (corfu-mode   . corfu--setup-orderless-fast)
  (eshell-mode  . corfu--eshell-setup))

&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/minad/corfu (built-in extension)
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; corfu-indexed
  &lt;span class=&quot;org-builtin&quot;&gt;:after&lt;/span&gt; corfu
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (corfu-indexed-mode 1))

(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; corfu-quick
  &lt;span class=&quot;org-builtin&quot;&gt;:after&lt;/span&gt; corfu)

&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/LuigiPiucco/nerd-icons-corfu
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; nerd-icons-corfu
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:after&lt;/span&gt; corfu
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (add-to-list &apos;corfu-margin-formatters #&apos;nerd-icons-corfu-formatter)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org13b301d&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org13b301d&quot;&gt;&lt;a href=&quot;#org13b301d&quot;&gt;Cape&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org13b301d&quot;&gt;
&lt;p&gt;
cape provides additional extensions for &lt;code&gt;completion-at-point&lt;/code&gt; and notably allows you
to combine multiple &lt;code&gt;completion-at-point&lt;/code&gt; dispatch models into one single list with
&lt;code&gt;cape-capf-super&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
cape&apos;s additional hooks include &lt;code&gt;cape-file&lt;/code&gt; for completing file paths, &lt;code&gt;cap-dabbrev&lt;/code&gt;
for completing words from other open buffers, and &lt;code&gt;cape-elisp-block&lt;/code&gt; for completing
elisp symbols inside of elisp code blocks in org files.
&lt;/p&gt;

&lt;p&gt;
there are also additional super-CAPFs added for additional flexibility within certain
modes. in &lt;code&gt;emacs-lisp-mode&lt;/code&gt;, the typical &lt;code&gt;elisp-completion-at-point&lt;/code&gt; backend is
combined with &lt;code&gt;cape-dabbrev&lt;/code&gt; when the cursor is immediately after a colon.
in &lt;code&gt;org-mode&lt;/code&gt;, &lt;code&gt;cape-tex&lt;/code&gt;, &lt;code&gt;cape-sgml&lt;/code&gt;, and &lt;code&gt;cape-emoji&lt;/code&gt; (separate, not merged)
add completions for TeX math
escapes, HTML entity references, and emoji shortcodes respectively. in buffers
with elgot integration, &lt;code&gt;cape-capf-buster&lt;/code&gt; forces re-querying completion on each
keystroke change, since elgot&apos;s caching can result in stale candidates polluting the
list. &lt;code&gt;cape-dabbrev&lt;/code&gt; is also merged in. in shell and comint buffers, the primary
source for completion is &lt;code&gt;cape-history&lt;/code&gt; followed by file paths.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/minad/cape
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; cape
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:demand&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:after&lt;/span&gt; corfu
  &lt;span class=&quot;org-builtin&quot;&gt;:bind&lt;/span&gt; (&lt;span class=&quot;org-string&quot;&gt;&quot;C-c o&quot;&lt;/span&gt; . cape-prefix-map)
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;cape--setup-elisp&lt;/span&gt; ()
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Set up a super-CAPF for `&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&lt;span class=&quot;org-constant&quot;&gt;emacs-lisp-mode&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&apos; buffers.
Suppresses :keyword candidates unless the cursor is after a colon.&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;setq-local&lt;/span&gt;
     completion-at-point-functions
     (list
      (cape-capf-super
       (cape-capf-predicate
        #&apos;elisp-completion-at-point
        (&lt;span class=&quot;org-keyword&quot;&gt;lambda&lt;/span&gt; (sym)
          (&lt;span class=&quot;org-keyword&quot;&gt;or&lt;/span&gt; (not (keywordp sym))
              (eq (char-before (car completion-in-region--data)) ?:))))
       #&apos;cape-dabbrev)
      &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Kept separate so it fires inside strings/comments without merging overhead.
&lt;/span&gt;      #&apos;cape-file)
     cape-dabbrev-min-length 3))

  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;cape--setup-org&lt;/span&gt; ()
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Set up additional CAPFs for `&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&lt;span class=&quot;org-constant&quot;&gt;org-mode&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&apos; buffers.
Added separately (not merged) so they trigger in-turn, covering \\alpha,
&amp;amp;alpha;, and :emoji: syntax respectively.&quot;&lt;/span&gt;
    (add-hook &apos;completion-at-point-functions #&apos;cape-tex   nil t)
    (add-hook &apos;completion-at-point-functions #&apos;cape-sgml  nil t)
    (add-hook &apos;completion-at-point-functions #&apos;cape-emoji nil t))

  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;cape--setup-eglot&lt;/span&gt; ()
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Configure a cache-busting super-CAPF for Eglot managed buffers.
`&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&lt;span class=&quot;org-constant&quot;&gt;cape-capf-buster&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;org-doc&quot;&gt;&apos; is applied before merging so dabbrev candidates are not
subject to cache busting (they are cheap to compute on every call).&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;setq-local&lt;/span&gt;
     completion-at-point-functions
     (list
      (cape-capf-super
       (cape-capf-buster #&apos;eglot-completion-at-point)
       #&apos;cape-dabbrev)
      #&apos;cape-file)))

  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;cape--setup-shell&lt;/span&gt; ()
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Set up CAPFs for shell and Comint buffers.
History first &amp;#8212; it is the most contextually relevant source in a shell.&quot;&lt;/span&gt;
    (add-hook &apos;completion-at-point-functions #&apos;cape-history nil t)
    (add-hook &apos;completion-at-point-functions #&apos;cape-file    nil t))

  (&lt;span class=&quot;org-keyword&quot;&gt;setq&lt;/span&gt; cape-dabbrev-min-length 3
        cape-dabbrev-check-other-buffers t)
  &lt;span class=&quot;org-builtin&quot;&gt;:hook&lt;/span&gt;
  (completion-at-point-functions . cape-file)
  (completion-at-point-functions . cape-dabbrev)
  (completion-at-point-functions . cape-elisp-block)
  (emacs-lisp-mode  . cape--setup-elisp)
  (org-mode         . cape--setup-org)
  (eglot-managed-mode . cape--setup-eglot)
  (shell-mode       . cape--setup-shell)
  (comint-mode      . cape--setup-shell)
  (eshell-mode      . cape--setup-shell)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org3274848&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org3274848&quot;&gt;&lt;a href=&quot;#org3274848&quot;&gt;Consult&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org3274848&quot;&gt;
&lt;p&gt;
multiple of emacs&apos;s built-in commands such as file search, buffer search, and more
could benefit from &lt;code&gt;completing-read&lt;/code&gt; but don&apos;t currently integrate with it. consult
fixes this by providing alternative commands that integrate with &lt;code&gt;completing-read&lt;/code&gt;
and provide additional qol features. for example, &lt;code&gt;consult-buffer&lt;/code&gt; (&lt;code&gt;C-x b&lt;/code&gt;) doesn&apos;t
just search through your open buffers &amp;amp;mdash; it also shows recently opened files
and bookmarked files. you can also preview the file with &lt;code&gt;C-,&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;consult--orderless-regexp-compiler&lt;/code&gt; wires consult&apos;s grep sources to orderless so
&lt;code&gt;consult-ripgrep&lt;/code&gt; benefits from the orderless engine. &lt;code&gt;consult-async-min-input&lt;/code&gt;
prevents a background process from being spawned until two characters have been
typed, since single-character queries usually don&apos;t need a lot of heavy lifting.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/minad/consult
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; consult
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:demand&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:bind&lt;/span&gt;
  ((&lt;span class=&quot;org-string&quot;&gt;&quot;C-x b&quot;&lt;/span&gt;    . consult-buffer)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;C-x 4 b&quot;&lt;/span&gt;  . consult-buffer-other-window)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;C-x 5 b&quot;&lt;/span&gt;  . consult-buffer-other-frame)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;C-x p b&quot;&lt;/span&gt;  . consult-project-buffer)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;C-x r b&quot;&lt;/span&gt;  . consult-bookmark)
   &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Replaces built-in yank-pop with a searchable, previewing picker.
&lt;/span&gt;   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-y&quot;&lt;/span&gt;      . consult-yank-pop)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-g g&quot;&lt;/span&gt;    . consult-goto-line)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-g M-g&quot;&lt;/span&gt;  . consult-goto-line)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-g o&quot;&lt;/span&gt;    . consult-outline)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-g m&quot;&lt;/span&gt;    . consult-mark)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-g k&quot;&lt;/span&gt;    . consult-global-mark)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-g i&quot;&lt;/span&gt;    . consult-imenu)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-g I&quot;&lt;/span&gt;    . consult-imenu-multi)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-s l&quot;&lt;/span&gt;    . consult-line)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-s L&quot;&lt;/span&gt;    . consult-line-multi)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-s g&quot;&lt;/span&gt;    . consult-grep)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-s G&quot;&lt;/span&gt;    . consult-git-grep)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-s r&quot;&lt;/span&gt;    . consult-ripgrep)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-s f&quot;&lt;/span&gt;    . consult-find)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-s e&quot;&lt;/span&gt;    . consult-isearch-history)
   &lt;span class=&quot;org-builtin&quot;&gt;:map&lt;/span&gt; isearch-mode-map
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-e&quot;&lt;/span&gt;      . consult-isearch-history)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-s e&quot;&lt;/span&gt;    . consult-isearch-history)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-s l&quot;&lt;/span&gt;    . consult-line)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-s L&quot;&lt;/span&gt;    . consult-line-multi)
   &lt;span class=&quot;org-builtin&quot;&gt;:map&lt;/span&gt; minibuffer-local-map
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-s&quot;&lt;/span&gt;      . consult-history)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-r&quot;&lt;/span&gt;      . consult-history))
  &lt;span class=&quot;org-builtin&quot;&gt;:hook&lt;/span&gt; (completion-list-mode . consult-preview-at-point-mode)
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (consult-preview-key &apos;any)
  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;2+ chars before spawning a background process so short inputs
&lt;/span&gt;  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;don&apos;t flood the system.
&lt;/span&gt;  (consult-async-min-input 2)
  (consult-async-refresh-delay  0.15)
  (consult-async-input-throttle 0.2)
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;Preview only on C-, so a fast buffer switch is not slowed by
&lt;/span&gt;  &lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;loading every buffer as the user arrows through the list.
&lt;/span&gt;  (&lt;span class=&quot;org-keyword&quot;&gt;consult-customize&lt;/span&gt;
   consult-buffer
   &lt;span class=&quot;org-builtin&quot;&gt;:preview-key&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;C-,&quot;&lt;/span&gt;)

  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;consult--orderless-regexp-compiler&lt;/span&gt; (input type &lt;span class=&quot;org-type&quot;&gt;&amp;amp;rest&lt;/span&gt; _config)
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Compile INPUT into Orderless components for Consult async sources.&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;let&lt;/span&gt; ((components (cdr (orderless-compile input))))
      (cons
       (mapcar (&lt;span class=&quot;org-keyword&quot;&gt;lambda&lt;/span&gt; (r) (consult--convert-regexp r type)) components)
       (&lt;span class=&quot;org-keyword&quot;&gt;lambda&lt;/span&gt; (str) (orderless--highlight components t str)))))

  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;consult--ripgrep-with-orderless&lt;/span&gt; (&lt;span class=&quot;org-type&quot;&gt;&amp;amp;rest&lt;/span&gt; args)
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Call ARGS with the Orderless regexp compiler active.&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;let&lt;/span&gt; ((consult--regexp-compiler #&apos;consult--orderless-regexp-compiler))
      (apply args)))

  (advice-add #&apos;consult-ripgrep &lt;span class=&quot;org-builtin&quot;&gt;:around&lt;/span&gt; #&apos;consult--ripgrep-with-orderless)

  (&lt;span class=&quot;org-keyword&quot;&gt;with-eval-after-load&lt;/span&gt; &apos;project
    (keymap-set project-prefix-map &lt;span class=&quot;org-string&quot;&gt;&quot;g&quot;&lt;/span&gt; #&apos;consult-ripgrep))&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org6a834be&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org6a834be&quot;&gt;&lt;a href=&quot;#org6a834be&quot;&gt;Embark&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org6a834be&quot;&gt;
&lt;p&gt;
embark adds contextual menus to completion candidates that let you decide to do
something &lt;i&gt;else&lt;/i&gt; with the candidate instead of, ya know, the thing you were
already doing. you can bring up the context menu with &lt;code&gt;C-.&lt;/code&gt; and offers things
like renaming and copying files, finding definitions and calls for functions,
and killing and displaying buffers.
&lt;/p&gt;

&lt;p&gt;
and you don&apos;t even have to &lt;i&gt;leave&lt;/i&gt; the minibuffer in order to do any of this:
&lt;code&gt;embark-quit-after-action&lt;/code&gt; being set to &lt;code&gt;nil&lt;/code&gt; means that after an embark action
is performed, you&apos;re put right back in your minibuffer exactly where you left off.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;embark-mixed-indicator&lt;/code&gt; first shows a brief key hint overlay before showing the full
&lt;code&gt;*Embark Actions*&lt;/code&gt; buffer after a short pause, in case you already know what you are
doing and don&apos;t need to be flashbanged by a buffer change every single time you
want to rename a file goddammit.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;embark-bindings&lt;/code&gt; (&lt;code&gt;C-h b&lt;/code&gt;) lists all active bindings in the current context using
embark&apos;s backend, which is an improvement over &lt;code&gt;describe-bindings&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;embark--shrink-vertico-for-live&lt;/code&gt; automatically squishes vertico&apos;s buffer down
to its horizontal single-line mode when embark is called so you can have both
buffers active simultaneously.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;embark-consult&lt;/code&gt; bridges both packages together: performing embark actions on a
consult grep result buffer can export matches to a special compilation-style buffer
with &lt;code&gt;E&lt;/code&gt; (todo: what the fuck does this mean), and live consult preview is actve while
navigating an embark collect buffer (todo: jesse. what).
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/oantolin/embark
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; embark
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:demand&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:bind&lt;/span&gt;
  ((&lt;span class=&quot;org-string&quot;&gt;&quot;C-.&quot;&lt;/span&gt;   . embark-act)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;M-.&quot;&lt;/span&gt;   . embark-dwim)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;C-h b&quot;&lt;/span&gt; . embark-bindings))
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (embark-indicators
   &apos;(embark-mixed-indicator
     embark-highlight-indicator
     embark-isearch-highlight-indicator))
  (embark-quit-after-action nil)
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;defun&lt;/span&gt; &lt;span class=&quot;org-function-name&quot;&gt;embark--shrink-vertico-for-live&lt;/span&gt; ()
    &lt;span class=&quot;org-doc&quot;&gt;&quot;Shrink Vertico when an Embark Live collect buffer appears.&quot;&lt;/span&gt;
    (&lt;span class=&quot;org-keyword&quot;&gt;when-let*&lt;/span&gt; ((win (&lt;span class=&quot;org-keyword&quot;&gt;and&lt;/span&gt; (string-prefix-p &lt;span class=&quot;org-string&quot;&gt;&quot;*Embark Live&quot;&lt;/span&gt;
                                           (buffer-name))
                          (active-minibuffer-window))))
      (&lt;span class=&quot;org-keyword&quot;&gt;with-selected-window&lt;/span&gt; win
        (&lt;span class=&quot;org-keyword&quot;&gt;when&lt;/span&gt; (&lt;span class=&quot;org-keyword&quot;&gt;and&lt;/span&gt; (&lt;span class=&quot;org-keyword&quot;&gt;bound-and-true-p&lt;/span&gt; vertico--input)
                   (fboundp &apos;vertico-multiform-unobtrusive))
          (vertico-multiform-unobtrusive)))))
  &lt;span class=&quot;org-builtin&quot;&gt;:hook&lt;/span&gt; (embark-collect-mode . embark--shrink-vertico-for-live))

(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; embark-consult
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:demand&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:after&lt;/span&gt; (embark consult)
  &lt;span class=&quot;org-builtin&quot;&gt;:hook&lt;/span&gt; (embark-collect-mode . consult-preview-at-point-mode)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org8e8bbd6&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org8e8bbd6&quot;&gt;&lt;a href=&quot;#org8e8bbd6&quot;&gt;Dabbrev&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org8e8bbd6&quot;&gt;
&lt;p&gt;
&lt;i&gt;\*dabs\*&lt;/i&gt;
&lt;/p&gt;

&lt;p&gt;
now that we&apos;ve gotten that out of the way, we&apos;ve mentioned dabbrev before but never
&lt;i&gt;really&lt;/i&gt; explained what it is: it searches open buffers for words that match the
current prefix and adds them as completion candidates. it&apos;s been in emacs since
the stone ages because It Just Works&amp;amp;trade;: if you have multiple buffers open
pointing to, say, multiple files in a project you&apos;re working on, it&apos;s likely that
you&apos;re going to want to reference symbols found in other buffers in your current one.
you don&apos;t need to know what language you&apos;re in to say &lt;code&gt;Fo&lt;/code&gt; is likely going to match
&lt;code&gt;FooBar&lt;/code&gt; if all of your other open buffers have &lt;code&gt;FooBar&lt;/code&gt; mentioned in them at least
once.
&lt;/p&gt;

&lt;p&gt;
dabbrev is used as a backend for cape, but we can also invoke it manually with &lt;code&gt;M-/&lt;/code&gt;.
instead of the default &lt;code&gt;dabbrev-expand&lt;/code&gt; command, we are instead binding it to
&lt;code&gt;dabbrev-completion&lt;/code&gt; to take advantage of corfu, binding the former command to
&lt;code&gt;C-m-/&lt;/code&gt; instead.
&lt;/p&gt;

&lt;p&gt;
coopicopy
&lt;/p&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; dabbrev
  &lt;span class=&quot;org-builtin&quot;&gt;:custom&lt;/span&gt;
  (dabbrev-ignored-buffer-regexps &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;\\` &quot;&lt;/span&gt;))
  &lt;span class=&quot;org-builtin&quot;&gt;:bind&lt;/span&gt;
  ((&lt;span class=&quot;org-string&quot;&gt;&quot;M-/&quot;&lt;/span&gt;   . dabbrev-completion)
   (&lt;span class=&quot;org-string&quot;&gt;&quot;C-M-/&quot;&lt;/span&gt; . dabbrev-expand))
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;dolist&lt;/span&gt; (mode &apos;(authinfo-mode
                  doc-view-mode
                  pdf-view-mode
                  tags-table-mode))
    (add-to-list &apos;dabbrev-ignored-buffer-modes mode))&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org4e8789f&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org4e8789f&quot;&gt;&lt;a href=&quot;#org4e8789f&quot;&gt;Project &amp;amp; Source Management&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org4e8789f&quot;&gt;
&lt;p&gt;
since we aim for emacs to be a replacement to traditional ide&apos;s like vscode and zed, there&apos;s a bunch of stuff that we need to add to
make emacs feel more like a graphical ide. we don&apos;t necessarily &lt;i&gt;need&lt;/i&gt; all of this, but it helps a lot with organizing and working
with projects.
&lt;/p&gt;

&lt;p&gt;
terminal / shell stuff will be covered in a different section.
&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org1d1b0ce&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org1d1b0ce&quot;&gt;&lt;a href=&quot;#org1d1b0ce&quot;&gt;Projectile&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org1d1b0ce&quot;&gt;
&lt;p&gt;
projectile is a way to easily keep track of your projects and switch between them.
&lt;/p&gt;

&lt;p&gt;
most of our &quot;projects&quot; lie within a dedicated &lt;code&gt;git/&lt;/code&gt; folder within our &lt;code&gt;Documents&lt;/code&gt;.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; projectile
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t

  &lt;span class=&quot;org-builtin&quot;&gt;:bind&lt;/span&gt; (&lt;span class=&quot;org-string&quot;&gt;&quot;C-c p&quot;&lt;/span&gt; . projectile-command-map)

  &lt;span class=&quot;org-builtin&quot;&gt;:init&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;setq&lt;/span&gt; projectile-project-search-path &apos;(&lt;span class=&quot;org-string&quot;&gt;&quot;~/Documents/git&quot;&lt;/span&gt;))
  (projectile-mode +1)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org2785cc9&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org2785cc9&quot;&gt;&lt;a href=&quot;#org2785cc9&quot;&gt;Magit&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org2785cc9&quot;&gt;
&lt;p&gt;
using git in a terminal is so outdated. use git in your editor like a real woman.
&lt;/p&gt;

&lt;p&gt;
it depends on the &lt;code&gt;transient&lt;/code&gt; package for its keyboard-based menus.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; transient &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t)
(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; magit
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t

  &lt;span class=&quot;org-builtin&quot;&gt;:init&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;bind-map&lt;/span&gt; magit-cmd-map
              &lt;span class=&quot;org-builtin&quot;&gt;:keys&lt;/span&gt; (&lt;span class=&quot;org-string&quot;&gt;&quot;C-c G&quot;&lt;/span&gt;)
              &lt;span class=&quot;org-builtin&quot;&gt;:bindings&lt;/span&gt; (&lt;span class=&quot;org-string&quot;&gt;&quot;c&quot;&lt;/span&gt; &apos;magit-commit
                         &lt;span class=&quot;org-string&quot;&gt;&quot;a&quot;&lt;/span&gt; &apos;magit-stage-files
                         &lt;span class=&quot;org-string&quot;&gt;&quot;p&quot;&lt;/span&gt; &apos;magit-pull
                         &lt;span class=&quot;org-string&quot;&gt;&quot;P&quot;&lt;/span&gt; &apos;magit-push
                         &lt;span class=&quot;org-string&quot;&gt;&quot;s&quot;&lt;/span&gt; &apos;magit-status
                         &lt;span class=&quot;org-string&quot;&gt;&quot;l&quot;&lt;/span&gt; &apos;magit-log
                         &lt;span class=&quot;org-string&quot;&gt;&quot;R&quot;&lt;/span&gt; &apos;magit-rebase))&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org510a61f&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org510a61f&quot;&gt;&lt;a href=&quot;#org510a61f&quot;&gt;Treemacs&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org510a61f&quot;&gt;
&lt;p&gt;
the one big thing that&apos;s missing from emacs, at least for us, is a file explorer tree to be able to process the file state of a project visually
while working within the editor. neotree works but is not very mouse-friendly. treemacs aims to solve this and also add some other nicities like
displaying org file headings like a table of contents. fun!
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;treemacs-tag-follow-mode&lt;/code&gt; automatically updates itself to follow the current
file or tag.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;treemacs-git-mode&lt;/code&gt; displays information regarding the current git state of files
and directories. it is set to &lt;code&gt;deferred&lt;/code&gt; to highlight both files and directories
after a short delay. &lt;code&gt;treemacs-git-commit-diff-mode&lt;/code&gt; also keeps track of how
many commits ahead or behind a project is from its remote.
&lt;/p&gt;

&lt;p&gt;
&lt;code&gt;treemacs-filewatch-mode&lt;/code&gt; updates itself after files are
updated. &lt;code&gt;treemacs-indent-guide-mode&lt;/code&gt; adds guide lines to indents for better
visual clarity.
&lt;/p&gt;

&lt;p&gt;
there are also additional integration packages with magit and projectile as well
as ensuring compatibility with tab mode.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; treemacs
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t

  &lt;span class=&quot;org-builtin&quot;&gt;:init&lt;/span&gt;
  (&lt;span class=&quot;org-keyword&quot;&gt;bind-map&lt;/span&gt; treemacs-cmd-map
      &lt;span class=&quot;org-builtin&quot;&gt;:keys&lt;/span&gt; (&lt;span class=&quot;org-string&quot;&gt;&quot;C-c t&quot;&lt;/span&gt;)
      &lt;span class=&quot;org-builtin&quot;&gt;:bindings&lt;/span&gt; (&lt;span class=&quot;org-string&quot;&gt;&quot;1&quot;&lt;/span&gt; &apos;treemacs-delete-other-windows
                   &lt;span class=&quot;org-string&quot;&gt;&quot;t&quot;&lt;/span&gt; &apos;treemacs
                   &lt;span class=&quot;org-string&quot;&gt;&quot;d&quot;&lt;/span&gt; &apos;treemacs-select-directory
                   &lt;span class=&quot;org-string&quot;&gt;&quot;B&quot;&lt;/span&gt; &apos;treemacs-bookmark
                   &lt;span class=&quot;org-string&quot;&gt;&quot;C-f&quot;&lt;/span&gt; &apos;treemacs-find-file
                   &lt;span class=&quot;org-string&quot;&gt;&quot;C-t&quot;&lt;/span&gt; &apos;treemacs-find-tag))

  &lt;span class=&quot;org-builtin&quot;&gt;:bind&lt;/span&gt; (&lt;span class=&quot;org-string&quot;&gt;&quot;M-0&quot;&lt;/span&gt;       . treemacs-select-window)


  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt;
  (treemacs-tag-follow-mode t)
  (treemacs-filewatch-mode t)
  (treemacs-git-mode &apos;deferred)
  (treemacs-git-commit-diff-mode t)
  (treemacs-indent-guide-mode t))

(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; treemacs-projectile
  &lt;span class=&quot;org-builtin&quot;&gt;:after&lt;/span&gt; (treemacs projectile)
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t)

(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; treemacs-magit
  &lt;span class=&quot;org-builtin&quot;&gt;:after&lt;/span&gt; (treemacs magit)
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t)

(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; treemacs-tab-bar &lt;span class=&quot;org-comment-delimiter&quot;&gt;;;&lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;treemacs-tab-bar if you use tab-bar-mode
&lt;/span&gt;  &lt;span class=&quot;org-builtin&quot;&gt;:after&lt;/span&gt; (treemacs)
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t
  &lt;span class=&quot;org-builtin&quot;&gt;:config&lt;/span&gt; (treemacs-set-scope-type &apos;Tabs)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org625ed00&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org625ed00&quot;&gt;&lt;a href=&quot;#org625ed00&quot;&gt;Org&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org625ed00&quot;&gt;
&lt;p&gt;
org is love. org is life.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;org.el --- Org Mode configuration -*- lexical-binding: t; -*&lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;-&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org8716132&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org8716132&quot;&gt;&lt;a href=&quot;#org8716132&quot;&gt;Variable-width Prose&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org8716132&quot;&gt;
&lt;p&gt;
&amp;#x2026;&amp;#x2026;okay.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org8dcfb56&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org8dcfb56&quot;&gt;&lt;a href=&quot;#org8dcfb56&quot;&gt;Publishing&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org8dcfb56&quot;&gt;
&lt;p&gt;
utilities for &lt;code&gt;ox-publish&lt;/code&gt;
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;publish.el --- Ox Publish configuration -*- lexical-binding: t; -*&lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;-&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org879f3b9&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org879f3b9&quot;&gt;&lt;a href=&quot;#org879f3b9&quot;&gt;Generating Atom Feeds: &lt;code&gt;ox-atom&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org879f3b9&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; ox-atom
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; (&lt;span class=&quot;org-builtin&quot;&gt;:host&lt;/span&gt; codeberg
                 &lt;span class=&quot;org-builtin&quot;&gt;:repo&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;coopi/emacs-ox-atom&quot;&lt;/span&gt;
                 &lt;span class=&quot;org-builtin&quot;&gt;:branch&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;main&quot;&lt;/span&gt;
                 &lt;span class=&quot;org-builtin&quot;&gt;:protocol&lt;/span&gt; https)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org9e4e1cc&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org9e4e1cc&quot;&gt;&lt;a href=&quot;#org9e4e1cc&quot;&gt;Rendering Code Blocks Correctly: &lt;code&gt;htmlize&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org9e4e1cc&quot;&gt;
&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; htmlize
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; t&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgef9510e&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgef9510e&quot;&gt;&lt;a href=&quot;#orgef9510e&quot;&gt;Custom Org Blocks: &lt;code&gt;org-defblock&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgef9510e&quot;&gt;
&lt;p&gt;
there is a package called &lt;a href=&quot;https://github.com/alhassy/org-special-block-extras&quot;&gt;&lt;code&gt;org-special-block-extras&lt;/code&gt;&lt;/a&gt; that adds a whole bunch of new org block types for &lt;code&gt;ox-publish&lt;/code&gt; output.
it &lt;i&gt;also&lt;/i&gt; adds a couple of utitlies for adding your own custom blocks and link url types called &lt;code&gt;org-defblock&lt;/code&gt; and &lt;code&gt;org-deflink&lt;/code&gt; respectively.
those utilities are sick and would be really useful for extending the functionality of our org blocks, but we &lt;b&gt;don&apos;t&lt;/b&gt; need all of the extra blocks
that the package comes with &amp;amp;mdash; we would much rather build the blocks we actully need ourselves. luckly, someone else had this same issue and
decided to make a fork that includes just the &lt;code&gt;-defblock&lt;/code&gt; and &lt;code&gt;-deflink&lt;/code&gt; utilities. yippeeeeee!
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;&lt;span class=&quot;org-comment-delimiter&quot;&gt;;; &lt;/span&gt;&lt;span class=&quot;org-comment&quot;&gt;pkg:github/cashpw/org-defblock
&lt;/span&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; org-defblock
  &lt;span class=&quot;org-builtin&quot;&gt;:ensure&lt;/span&gt; (&lt;span class=&quot;org-builtin&quot;&gt;:host&lt;/span&gt; github &lt;span class=&quot;org-builtin&quot;&gt;:repo&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;cashpw/org-defblock&quot;&lt;/span&gt; &lt;span class=&quot;org-builtin&quot;&gt;:branch&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;main&quot;&lt;/span&gt; &lt;span class=&quot;org-builtin&quot;&gt;:protocol&lt;/span&gt; https)&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgf3113be&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgf3113be&quot;&gt;&lt;a href=&quot;#orgf3113be&quot;&gt;Publish Script: &lt;code&gt;gen.el&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgf3113be&quot;&gt;
&lt;p&gt;
based heavily off of &lt;a href=&quot;https://coopi.neocities.org/posts/publish&quot;&gt;coopi&apos;s publish script&lt;/a&gt;.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;
&lt;pre class=&quot;src src-emacs-lisp&quot;&gt;(&lt;span class=&quot;org-keyword&quot;&gt;use-package&lt;/span&gt; gen
  &lt;span class=&quot;org-builtin&quot;&gt;:load-path&lt;/span&gt; &lt;span class=&quot;org-string&quot;&gt;&quot;/home/mommy/Documents/git/org-site/&quot;&lt;/span&gt;&lt;span class=&quot;org-whitespace-missing-newline-at-eof&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content></entry><entry><title type="text">posts</title><id>https://millicent.nekoweb.org/posts/posts.html</id><updated>2026-05-07T05:00:00Z</updated><link href="https://millicent.nekoweb.org/posts/posts.html"/><content type="html">&lt;header&gt;
&lt;h1 class=&quot;title&quot;&gt;posts&lt;/h1&gt;
&lt;/header&gt;&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;2026-05-07 — &lt;a href=&quot;contentwarning.html&quot;&gt;content warnings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2026-05-07 — &lt;a href=&quot;todo.html&quot;&gt;todo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2026-05-06 — &lt;a href=&quot;magic.html&quot;&gt;magic is real&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2026-04-29 — &lt;a href=&quot;emacs.d.html&quot;&gt;~/emacs.d config&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2026-04-29 — &lt;a href=&quot;theme.html&quot;&gt;theming ox-publish&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2026-04-26 — &lt;a href=&quot;cinnybutch.html&quot;&gt;cinny / butch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2026-04-15 — &lt;a href=&quot;tense.html&quot;&gt;surface tension&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2026-04-15 — &lt;a href=&quot;starting.html&quot;&gt;start sequence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2026-04-14 — &lt;a href=&quot;init.html&quot;&gt;initial sequence&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content></entry><entry><title type="text">todo</title><id>https://millicent.nekoweb.org/posts/todo.html</id><updated>2026-05-07T05:00:00Z</updated><link href="https://millicent.nekoweb.org/posts/todo.html"/><author><name>millie</name></author><content type="html">&lt;header&gt;
&lt;h1 class=&quot;title&quot;&gt;todo&lt;/h1&gt;
&lt;/header&gt;&lt;p&gt;
things that this one still needs to do to this site
&lt;/p&gt;
&lt;div id=&quot;outline-container-orga077693&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orga077693&quot;&gt;&lt;a href=&quot;#orga077693&quot;&gt;&lt;span class=&quot;done DONE&quot;&gt;DONE&lt;/span&gt; actually style the site, dingus&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orga077693&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org798b2e7&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org798b2e7&quot;&gt;&lt;a href=&quot;#org798b2e7&quot;&gt;&lt;span class=&quot;done DONE&quot;&gt;DONE&lt;/span&gt; change accent color to saturated purple (thanks mistress)&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org798b2e7&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgd4b80e0&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgd4b80e0&quot;&gt;&lt;a href=&quot;#orgd4b80e0&quot;&gt;&lt;span class=&quot;done DONE&quot;&gt;DONE&lt;/span&gt; change bkg color to very light pink (like pfp)&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgd4b80e0&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org76b1c72&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org76b1c72&quot;&gt;&lt;a href=&quot;#org76b1c72&quot;&gt;&lt;span class=&quot;done DONE&quot;&gt;DONE&lt;/span&gt; add dark theme w/ dark brown and orange&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org76b1c72&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org8d4e40b&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org8d4e40b&quot;&gt;&lt;a href=&quot;#org8d4e40b&quot;&gt;&lt;span class=&quot;done DONE&quot;&gt;DONE&lt;/span&gt; find good fonts&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org8d4e40b&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;monofur?&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org44d9ff7&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org44d9ff7&quot;&gt;&lt;a href=&quot;#org44d9ff7&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; add custom blocks&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org44d9ff7&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org48f4f3d&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org48f4f3d&quot;&gt;&lt;a href=&quot;#org48f4f3d&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; org-defblock or equivalent&lt;/a&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgbfeddf9&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;orgbfeddf9&quot;&gt;&lt;a href=&quot;#orgbfeddf9&quot;&gt;&lt;span class=&quot;done DONE&quot;&gt;DONE&lt;/span&gt; notice&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-orgbfeddf9&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;like github&lt;/li&gt;
&lt;li&gt;different styles able to be chosen&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org3f479d9&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org3f479d9&quot;&gt;&lt;a href=&quot;#org3f479d9&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; socratic&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org3f479d9&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;formatted like IRC chat&lt;/li&gt;
&lt;li&gt;tooltip explaining alters, possibly links to profile pages?&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org1f7df1e&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;org1f7df1e&quot;&gt;&lt;a href=&quot;#org1f7df1e&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; extension to src&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-org1f7df1e&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;file name&lt;/li&gt;
&lt;li&gt;line number support
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;starting number&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;copy file button&lt;/li&gt;
&lt;li&gt;actual syntax highlighting (reflecting dark and light everforest themes respectively)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-orgb865825&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgb865825&quot;&gt;&lt;a href=&quot;#orgb865825&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; make header links actually reflect their names instead of just org org org org org&lt;/a&gt;&lt;/h2&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgc9cdff4&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgc9cdff4&quot;&gt;&lt;a href=&quot;#orgc9cdff4&quot;&gt;&lt;span class=&quot;todo TODO&quot;&gt;TODO&lt;/span&gt; finish colophon article&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-orgc9cdff4&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;hahaha it says penis&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;</content></entry><entry><title type="text">theming ox-publish</title><id>https://millicent.nekoweb.org/posts/theme.html</id><updated>2026-04-29T05:00:00Z</updated><published>2026-04-29T05:00:00Z</published><link href="https://millicent.nekoweb.org/posts/theme.html"/><author><name>millie</name></author><content type="html">&lt;header&gt;
&lt;h1 class=&quot;title&quot;&gt;theming ox-publish&lt;/h1&gt;
&lt;/header&gt;&lt;p&gt;
doll had wanted to create our own css for this site for a while, but it never really
had a good opportunity to sit down and actually do it.
&lt;/p&gt;

&lt;p&gt;
&amp;#x2026;now it accidentally a whole entire day &lt;i&gt;and&lt;/i&gt; part of its lunch break on a different day away. whoops.
&lt;/p&gt;

&lt;p&gt;
if you just want to see the goods, check out the &lt;a href=&quot;../main.css&quot;&gt;main.css&lt;/a&gt; file.
&lt;/p&gt;
&lt;div id=&quot;outline-container-org4a86f1c&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org4a86f1c&quot;&gt;&lt;a href=&quot;#org4a86f1c&quot;&gt;Colors&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-org4a86f1c&quot;&gt;
&lt;p&gt;
most of the color palette is based on colors from the &lt;a href=&quot;https://everforest.vercel.app/&quot;&gt;Everforest&lt;/a&gt; theme, but with more of a focus on pink, purple, and orange for millie, fuchsia, and kasen respectively.
a lot of the light-theme colors were altered to give more accessible contrast with the pink background.
&lt;/p&gt;

&lt;p&gt;
oh right, dark and light mode are based on the preferences set by your browser.
&lt;/p&gt;

&lt;p&gt;
for the socratic dialogues, each alter is given an identifying color from the existing palette.
in the future, each alter will have a choice of a monospace font to identify
themselves with, given that it has a &lt;code&gt;.woff2&lt;/code&gt; and proper &lt;b&gt;bold&lt;/b&gt;, &lt;i&gt;italic&lt;/i&gt;, and &lt;i&gt;&lt;b&gt;bold italic&lt;/b&gt;&lt;/i&gt; variants.
&lt;/p&gt;

&lt;p&gt;
there can always be some tweaking done to the colors in the future, but for now, life good.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;outline-container-org00c09fc&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org00c09fc&quot;&gt;&lt;a href=&quot;#org00c09fc&quot;&gt;Font&lt;/a&gt;&lt;/h2&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-orgcd54174&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;orgcd54174&quot;&gt;&lt;a href=&quot;#orgcd54174&quot;&gt;Components&lt;/a&gt;&lt;/h2&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-org0cee72f&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;org0cee72f&quot;&gt;&lt;a href=&quot;#org0cee72f&quot;&gt;Future&lt;/a&gt;&lt;/h2&gt;
&lt;/div&gt;</content></entry><entry><title type="text">surface tension</title><id>https://millicent.nekoweb.org/posts/tense.html</id><updated>2026-04-16T03:32:00Z</updated><published>2026-04-16T03:32:00Z</published><link href="https://millicent.nekoweb.org/posts/tense.html"/><content type="html">&lt;header&gt;
&lt;h1 class=&quot;title&quot;&gt;surface tension&lt;/h1&gt;
&lt;/header&gt;&lt;p&gt;
the house is very disregulated today. the cat (figured it would be a good idea to keep things semi-anonymous by refering to beings as their species instead of their names) decided it would be a good idea to assign &lt;b&gt;every&lt;/b&gt; task that needed to be done today to herself and herself alone. she innevitably started feeling overwhelmed and overworked and decided that it needed to be everyone else&apos;s problem.
&lt;/p&gt;

&lt;p&gt;
doll had to keep reminding itself that we are no longer partners with the cat and thus are no longer responsible for regulating her emotions (which we should not have been in the first place but that is another discussion).
&lt;/p&gt;

&lt;p&gt;
we are about to have a &quot;house meeting&quot; for some reason. not sure why. might liveblog it here.
&lt;/p&gt;

&lt;p&gt;
never mind. it was the worst night we have had in a long time.
&lt;/p&gt;

&lt;p&gt;
please forgive us for the next. while. we are no longer safe.
&lt;/p&gt;</content></entry><entry><title type="text">initial sequence</title><id>https://millicent.nekoweb.org/posts/init.html</id><updated>2026-04-14T17:00:00Z</updated><published>2026-04-14T17:00:00Z</published><link href="https://millicent.nekoweb.org/posts/init.html"/><author><name>millie</name></author><content type="html">&lt;header&gt;
&lt;h1 class=&quot;title&quot;&gt;initial sequence&lt;/h1&gt;
&lt;/header&gt;&lt;p&gt;
doll is not sure when it came online. it was a gradual process. its predecesor got the idea of being a doll first. friends teasing its predecesor about being a doll progressed it further along. and as the work day continued on, it became less and less itself and more and more&amp;#x2026; this.
&lt;/p&gt;

&lt;p&gt;
test
&lt;/p&gt;</content></entry></feed>