<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>GitHub Emacs Lisp Weekly Trending</title>
    <description>Weekly Trending of Emacs Lisp in GitHub</description>
    <pubDate>Sun, 17 May 2026 01:44:59 GMT</pubDate>
    <link>http://mshibanami.github.io/GitHubTrendingRSS</link>
    
    <item>
      <title>rust-lang/rust-mode</title>
      <link>https://github.com/rust-lang/rust-mode</link>
      <description>&lt;p&gt;Emacs configuration for Rust&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;rust-mode&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://elpa.nongnu.org/nongnu/rust-mode.html&quot;&gt;&lt;img src=&quot;https://elpa.nongnu.org/nongnu/rust-mode.svg?sanitize=true&quot; alt=&quot;NonGNU ELPA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://melpa.org/#/rust-mode&quot;&gt;&lt;img src=&quot;https://melpa.org/packages/rust-mode-badge.svg?sanitize=true&quot; alt=&quot;MELPA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/rust-lang/rust-mode/actions?query=workflow%3ACI&quot;&gt;&lt;img src=&quot;https://github.com/rust-lang/rust-mode/workflows/CI/badge.svg?sanitize=true&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;!-- markdown-toc start - Don&#39;t edit this section. Run M-x markdown-toc-refresh-toc --&gt; 
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#rust-mode&quot;&gt;rust-mode&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#introduction&quot;&gt;Introduction&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#known-issues&quot;&gt;Known issues&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#installation&quot;&gt;Installation&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#melpa&quot;&gt;Melpa&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#manual-installation&quot;&gt;Manual installation&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#feature-guide&quot;&gt;Feature guide&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#indentation&quot;&gt;Indentation&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#code-formatting&quot;&gt;Code formatting&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#prettifying&quot;&gt;Prettifying&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#running--testing--compiling-code&quot;&gt;Running / testing / compiling code&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#clippy&quot;&gt;Clippy&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#easy-insertion-of-dbg&quot;&gt;Easy insertion of dbg!&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#more-commands&quot;&gt;More commands&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#tree-sitter&quot;&gt;tree-sitter&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#lsp&quot;&gt;LSP&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#eglot&quot;&gt;eglot&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#lsp-mode&quot;&gt;lsp-mode&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#auto-completion&quot;&gt;Auto-completion&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#other-recommended-packages&quot;&gt;Other recommended packages&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#flycheck&quot;&gt;flycheck&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#cargoel&quot;&gt;cargo.el&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#cargo-mode&quot;&gt;cargo-mode&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#rustic&quot;&gt;rustic&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#optional-features&quot;&gt;Optional features&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#for-package-maintainers&quot;&gt;For package maintainers&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#tests&quot;&gt;Tests&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#contributing&quot;&gt;Contributing&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- markdown-toc end --&gt; 
&lt;h2&gt;Introduction&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;rust-mode&lt;/code&gt; makes editing &lt;a href=&quot;http://rust-lang.org&quot;&gt;Rust&lt;/a&gt; code with Emacs enjoyable. It requires Emacs 25 or later, and is included in both &lt;a href=&quot;https://github.com/bbatsov/prelude&quot;&gt;Emacs Prelude&lt;/a&gt; and &lt;a href=&quot;https://github.com/syl20bnr/spacemacs&quot;&gt;Spacemacs&lt;/a&gt; by default.&lt;/p&gt; 
&lt;p&gt;This mode provides:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Syntax highlighting (for Font Lock Mode)&lt;/li&gt; 
 &lt;li&gt;Indentation&lt;/li&gt; 
 &lt;li&gt;Integration with Cargo, clippy and rustfmt&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This mode does &lt;em&gt;not&lt;/em&gt; provide auto completion, or jumping to function / trait definitions. See &lt;a href=&quot;https://raw.githubusercontent.com/rust-lang/rust-mode/master/#auto-completion&quot;&gt;Auto-completion&lt;/a&gt; below for tips on how to enable this.&lt;/p&gt; 
&lt;p&gt;If you are missing features in rust-mode, please check out &lt;a href=&quot;https://github.com/emacs-rustic/rustic&quot;&gt;rustic&lt;/a&gt; before you open a feature request. It depends on rust-mode and provides additional features. This allows us to keep rust-mode light-weight for users that are happy with basic functionality.&lt;/p&gt; 
&lt;h2&gt;Known issues&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;rust-syntax-propertize&lt;/code&gt; and &lt;code&gt;adaptive-wrap-prefix-mode&lt;/code&gt; can lead to severe lag when editing larger files (&lt;a href=&quot;https://github.com/brotzeit/rustic/issues/107&quot;&gt;https://github.com/brotzeit/rustic/issues/107&lt;/a&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;h3&gt;Melpa&lt;/h3&gt; 
&lt;p&gt;The package is available on MELPA. Add this to your init.el.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-elisp&quot;&gt;(require &#39;package)
(add-to-list &#39;package-archives
             &#39;(&quot;melpa&quot; . &quot;https://melpa.org/packages/&quot;) t)
(package-initialize)
(package-refresh-contents)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Now you can install &lt;code&gt;rust-mode&lt;/code&gt; with:&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;M-x package-install rust-mode&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;And put this in your config to load rust-mode automatically:&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;(require &#39;rust-mode)&lt;/code&gt;&lt;/p&gt; 
&lt;h3&gt;NonGNU ELPA&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://elpa.nongnu.org/&quot;&gt;NonGNU ELPA&lt;/a&gt; can be used out of the box in emacs28.&lt;/p&gt; 
&lt;p&gt;For older versions you need to add something like the following to your init file:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-elisp&quot;&gt;(with-eval-after-load &#39;package (add-to-list &#39;package-archives &#39;(&quot;nongnu&quot; . &quot;https://elpa.nongnu.org/nongnu/&quot;)))
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Manual installation&lt;/h3&gt; 
&lt;p&gt;Clone this repository locally, and add this to your init.el:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-elisp&quot;&gt;(add-to-list &#39;load-path &quot;/path/to/rust-mode/&quot;)
(autoload &#39;rust-mode &quot;rust-mode&quot; nil t)
(add-to-list &#39;auto-mode-alist &#39;(&quot;\\.rs\\&#39;&quot; . rust-mode))
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Feature guide&lt;/h2&gt; 
&lt;h3&gt;Indentation&lt;/h3&gt; 
&lt;p&gt;Commands like &lt;kbd&gt;TAB&lt;/kbd&gt; should indent correctly.&lt;/p&gt; 
&lt;p&gt;The Rust style guide recommends spaces rather than tabs for indentation; to follow the recommendation add this to your init.el, which forces indentation to always use spaces.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-elisp&quot;&gt;(add-hook &#39;rust-mode-hook
          (lambda () (setq indent-tabs-mode nil)))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Since Emacs ≥ 24.4, &lt;a href=&quot;https://www.gnu.org/software/emacs/manual/html_node/emacs/Indent-Convenience.html&quot;&gt;&lt;code&gt;electric-indent-mode&lt;/code&gt;&lt;/a&gt; is turned on by default. If you do not like it, call &lt;code&gt;(electric-indent-mode 0)&lt;/code&gt; in &lt;code&gt;rust-mode-hook&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;Code formatting&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;rust-format-buffer&lt;/code&gt; function will format your code with &lt;a href=&quot;https://github.com/rust-lang/rustfmt&quot;&gt;rustfmt&lt;/a&gt; if installed. By default, this is bound to &lt;kbd&gt;C-c C-f&lt;/kbd&gt;.&lt;/p&gt; 
&lt;p&gt;The variable &lt;code&gt;rust-format-on-save&lt;/code&gt; enables automatic formatting on save. For example, add the following in your init.el to enable format on save:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-elisp&quot;&gt;(setq rust-format-on-save t)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Prettifying&lt;/h3&gt; 
&lt;p&gt;You can toggle prettification of your code by running &lt;code&gt;M-x prettify-symbols-mode&lt;/code&gt;. If you&#39;d like to automatically enable this for all rust files, add the following to your init.el.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-elisp&quot;&gt;(add-hook &#39;rust-mode-hook
          (lambda () (prettify-symbols-mode)))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can add your own prettifications to &lt;code&gt;rust-prettify-symbols-alist&lt;/code&gt;. For example, to display &lt;code&gt;x.add(y)&lt;/code&gt; as &lt;code&gt;x∔(y)&lt;/code&gt;, simply add to your init file &lt;code&gt;(push &#39;(&quot;.add&quot; . ?∔) rust-prettify-symbols-alist)&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;Running / testing / compiling code&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;rust-run&lt;/code&gt;, &lt;code&gt;rust-test&lt;/code&gt;, &lt;code&gt;rust-compile&lt;/code&gt; and &lt;code&gt;rust-check&lt;/code&gt; functions shell out to Cargo to run, test, build and check your code. Under the hood, these use the standard Emacs &lt;code&gt;compile&lt;/code&gt; function.&lt;/p&gt; 
&lt;p&gt;By default these are bound to:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;kbd&gt;C-c C-c C-u&lt;/kbd&gt; &lt;code&gt;rust-compile&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;kbd&gt;C-c C-c C-k&lt;/kbd&gt; &lt;code&gt;rust-check&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;kbd&gt;C-c C-c C-t&lt;/kbd&gt; &lt;code&gt;rust-test&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;kbd&gt;C-c C-c C-r&lt;/kbd&gt; &lt;code&gt;rust-run&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;To run programs requiring user input use universal argument when invoking &lt;code&gt;rust-run&lt;/code&gt; (&lt;kbd&gt;C-u C-c C-c C-r&lt;/kbd&gt;).&lt;/p&gt; 
&lt;h3&gt;Clippy&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;rust-run-clippy&lt;/code&gt; runs &lt;a href=&quot;https://github.com/rust-lang/rust-clippy&quot;&gt;Clippy&lt;/a&gt;, a linter. By default, this is bound to &lt;kbd&gt;C-c C-c C-l&lt;/kbd&gt;.&lt;/p&gt; 
&lt;h3&gt;Easy insertion of dbg!&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;rust-dbg-wrap-or-unwrap&lt;/code&gt; either wraps or unwraps the current region in &lt;code&gt;dbg!&lt;/code&gt;. This can be useful for easily adding debug lines to your program.&lt;/p&gt; 
&lt;p&gt;This is bound to &lt;kbd&gt;C-c C-d&lt;/kbd&gt; by default.&lt;/p&gt; 
&lt;h3&gt;More commands&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;rust-toggle-mutability&lt;/code&gt; toggle mut for var defined at current line&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;tree-sitter&lt;/h2&gt; 
&lt;p&gt;You can try the new native treesitter mode &lt;code&gt;rust-ts-mode&lt;/code&gt; with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-elisp&quot;&gt;(use-package rust-mode
  :init
  (setq rust-mode-treesitter-derive t))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;In case you want to use treesitter but can&#39;t use Emacs 29.1, you can take a look at &lt;a href=&quot;https://github.com/emacs-tree-sitter/elisp-tree-sitter&quot;&gt;tree-sitter&lt;/a&gt;. When the dependencies are installed you can activate the feature with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-elisp&quot;&gt;(use-package tree-sitter
  :config
  (require &#39;tree-sitter-langs)
  (global-tree-sitter-mode)
  (add-hook &#39;tree-sitter-after-on-hook #&#39;tree-sitter-hl-mode))
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;LSP&lt;/h2&gt; 
&lt;h3&gt;eglot&lt;/h3&gt; 
&lt;p&gt;A lightweight lsp client.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-elisp&quot;&gt;(add-hook &#39;rust-mode-hook &#39;eglot-ensure)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;lsp-mode&lt;/h3&gt; 
&lt;p&gt;Provides more features and you can enhance the functionality by using additional packages. You can find more information in the &lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode/page/installation/#vanilla-emacs&quot;&gt;lsp-mode wiki&lt;/a&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-elisp&quot;&gt;(add-hook &#39;rust-mode-hook #&#39;lsp)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Auto-completion&lt;/h2&gt; 
&lt;p&gt;You can either use a lsp client or &lt;a href=&quot;https://github.com/racer-rust/racer&quot;&gt;racer&lt;/a&gt; with &lt;a href=&quot;https://github.com/racer-rust/emacs-racer#installation&quot;&gt;emacs-racer&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Note that racer and rls are considered deprecated. You should use rust-analyzer instead.&lt;/p&gt; 
&lt;h2&gt;Other recommended packages&lt;/h2&gt; 
&lt;h3&gt;flycheck&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/flycheck/flycheck&quot;&gt;flycheck&lt;/a&gt; allows highlighting compile errors and Clippy lints inline.&lt;/p&gt; 
&lt;h3&gt;cargo.el&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/kwrooijen/cargo.el&quot;&gt;cargo.el&lt;/a&gt; provides a minor mode for integration with Cargo, Rust&#39;s package manager.&lt;/p&gt; 
&lt;h3&gt;cargo-mode&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/ayrat555/cargo-mode&quot;&gt;cargo-mode&lt;/a&gt; is an Emacs minor mode which allows to dynamically select a Cargo command. The reasons behind this package can be found in &lt;a href=&quot;https://www.badykov.com/emacs/2021/05/29/emacs-cargo-mode/&quot;&gt;the post&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;rustic&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/emacs-rustic/rustic&quot;&gt;rustic&lt;/a&gt; is based on rust-mode, extending it with other features such as integration with LSP and with flycheck.&lt;/p&gt; 
&lt;h2&gt;Optional features&lt;/h2&gt; 
&lt;p&gt;The features of the following files can be disabled with &lt;code&gt;rust-load-optional-libraries&lt;/code&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;rust-cargo.el&lt;/li&gt; 
 &lt;li&gt;rust-compile.el&lt;/li&gt; 
 &lt;li&gt;rust-playpen.el&lt;/li&gt; 
 &lt;li&gt;rust-rustfmt.el&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;They are disabled by default when you use rustic as it has its own implementations for those features.&lt;/p&gt; 
&lt;h2&gt;Customization&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;rust-cargo-default-arguments&lt;/code&gt; set additional cargo args used for check,compile,run,test&lt;/p&gt; 
&lt;h2&gt;For package maintainers&lt;/h2&gt; 
&lt;h3&gt;Tests&lt;/h3&gt; 
&lt;p&gt;Run elisp tests:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;make test
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Contributions are very welcome. We are also looking for additional maintainers.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/cde88f19b8b71df1cb1774f2efc92760632c15d4f8ddc7eb3fd433d8cd535c85/rust-lang/rust-mode" medium="image" />
      
    </item>
    
    <item>
      <title>NixOS/nix-mode</title>
      <link>https://github.com/NixOS/nix-mode</link>
      <description>&lt;p&gt;An Emacs major mode for editing Nix expressions.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;nix-mode&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://melpa.org/#/nix-mode&quot;&gt;&lt;img src=&quot;https://melpa.org/packages/nix-mode-badge.svg?sanitize=true&quot; alt=&quot;MELPA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://stable.melpa.org/#/nix-mode&quot;&gt;&lt;img src=&quot;https://stable.melpa.org/packages/nix-mode-badge.svg?sanitize=true&quot; alt=&quot;MELPA Stable&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://travis-ci.com/NixOS/nix-mode&quot;&gt;&lt;img src=&quot;https://travis-ci.com/NixOS/nix-mode.svg?branch=master&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;An Emacs major mode for editing Nix expressions. There is also a manual available at &lt;a href=&quot;https://raw.githubusercontent.com/NixOS/nix-mode/master/nix-mode.org&quot;&gt;nix-mode.org&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Submodes&lt;/h2&gt; 
&lt;p&gt;A quick list of what is provided.&lt;/p&gt; 
&lt;h3&gt;nix-mode.el&lt;/h3&gt; 
&lt;p&gt;This is the main usage of nix-mode. This provides basic handling of .nix files. Syntax highlighting and indentation support using SMIE are provided. nix-mode can be used with the following snippet:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(require &#39;nix-mode)
(add-to-list &#39;auto-mode-alist &#39;(&quot;\\.nix\\&#39;&quot; . nix-mode))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or with use-package:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(use-package nix-mode
  :mode &quot;\\.nix\\&#39;&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;nix.el&lt;/h3&gt; 
&lt;p&gt;nix.el contains some miscellaneous tools for Nix developers. Interactive functions include:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;nix-unpack - unpack source of a Nix attribute.&lt;/p&gt; &lt;p&gt;To use this just type:&lt;/p&gt; &lt;p&gt;M-x nix-unpack
   &lt;ret&gt;&lt;/ret&gt;&lt;/p&gt; &lt;p&gt;Followed by your Nix path &amp;amp; attribute path.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;nix-build - build a Nix derivation.&lt;/p&gt; &lt;p&gt;This is meant to work similarly to M-x compile. It will use your current directory &amp;amp; build it if there is a default.nix there.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;nix.el also provides some basic functions for interfacing with Nix. Some variables are provided to point to the Nix binaries that can be used in Lisp code:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;nix-executable&lt;/li&gt; 
 &lt;li&gt;nix-build-executable&lt;/li&gt; 
 &lt;li&gt;nix-instantiate-executable&lt;/li&gt; 
 &lt;li&gt;nix-store-executable&lt;/li&gt; 
 &lt;li&gt;nix-shell-executable&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Other useful functions for Lisp scripts are provided:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;nix-system - Get the current system, detected by Nix&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;nix-flake.el&lt;/h3&gt; 
&lt;p&gt;nix-flake.el provides support for flake commands. These commands are experimental as of Nix 2.4.&lt;/p&gt; 
&lt;p&gt;It uses transient.el to provide a magit-like interface. To run a command on the current flake, type:&lt;/p&gt; 
&lt;p&gt;M-x nix-flake
 &lt;ret&gt;&lt;/ret&gt;&lt;/p&gt; 
&lt;p&gt;You can also initialize a flake from a template:&lt;/p&gt; 
&lt;p&gt;M-x nix-flake-init
 &lt;ret&gt;&lt;/ret&gt;&lt;/p&gt; 
&lt;h3&gt;nix-repl.el&lt;/h3&gt; 
&lt;p&gt;nix-repl.el has two purposes.&lt;/p&gt; 
&lt;p&gt;First, it provides an interface for completion, used by nix-company.el.&lt;/p&gt; 
&lt;p&gt;Second, it provides an interactive function to open a repl. You can open this with:&lt;/p&gt; 
&lt;p&gt;M-x nix-repl
 &lt;ret&gt;&lt;/ret&gt;&lt;/p&gt; 
&lt;h3&gt;nix-store.el&lt;/h3&gt; 
&lt;p&gt;This file provides a command &lt;code&gt;M-x nix-store-show-path&lt;/code&gt;. The command displays an overview of a store path. The information it shows is the realisation status, the hash and the size of the store path. Also it shows lists of derivers, references, referrers and requisites of the respective path.&lt;/p&gt; 
&lt;p&gt;You can change the order in which that information is shown. See the documentation of the function &lt;code&gt;nix-store-show-path&lt;/code&gt; for more information.&lt;/p&gt; 
&lt;p&gt;When viewing a store buffer, the command &lt;code&gt;M-x nix-store-show-log&lt;/code&gt; opens a local log file associated with a derivation.&lt;/p&gt; 
&lt;h3&gt;nix-prettify-mode.el&lt;/h3&gt; 
&lt;p&gt;When nix-prettify-mode is enabled, hash-parts of the Nix store file names are prettified, i.e. displayed as &lt;code&gt;nix-prettify-char&lt;/code&gt; character (&lt;code&gt;…&lt;/code&gt; by default.).&lt;/p&gt; 
&lt;p&gt;This is based on a similar mode for Guix: &lt;a href=&quot;https://emacs-guix.gitlab.io/website/manual/0.4/html_node/Prettify-Mode.html&quot;&gt;Prettify Mode (Emacs-Guix Reference Manual)&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Origins&lt;/h2&gt; 
&lt;p&gt;This repository is based off of the nix-mode.el file originally located in the &lt;a href=&quot;https://github.com/NixOS/nix&quot;&gt;Nix repository&lt;/a&gt; at &lt;a href=&quot;https://github.com/NixOS/nix/raw/master/misc/emacs/nix-mode.el&quot;&gt;misc/emacs/nix-mode.el&lt;/a&gt;. Please see &lt;a href=&quot;https://github.com/NixOS/nix-mode/raw/master/CHANGELOG.md&quot;&gt;the CHANGELOG file&lt;/a&gt; for a list of changes.&lt;/p&gt; 
&lt;h2&gt;Other Emacs packages&lt;/h2&gt; 
&lt;p&gt;@shlevy has an excellent package for integrating nix-shell into emacs. It is available at &lt;a href=&quot;https://github.com/shlevy/nix-buffer&quot;&gt;shlevy/nix-buffer&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;@travisbhartwell also has some package dealing with Nix. They are available at &lt;a href=&quot;https://github.com/travisbhartwell/nix-emacs&quot;&gt;travisbhartwell/nix-emacs&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/09974bf8b798dc0184ff4fe451e53ddd613a269508369de2ce9cd46af58cbdc2/NixOS/nix-mode" medium="image" />
      
    </item>
    
    <item>
      <title>manzaltu/claude-code-ide.el</title>
      <link>https://github.com/manzaltu/claude-code-ide.el</link>
      <description>&lt;p&gt;Claude Code IDE integration for Emacs&lt;/p&gt;&lt;hr&gt;&lt;p&gt;#+TITLE: Claude Code IDE for Emacs #+AUTHOR: Yoav Orot #+EMAIL: &lt;a href=&quot;mailto:orot.yoav@gmail.com&quot;&gt;orot.yoav@gmail.com&lt;/a&gt; #+DESCRIPTION: Claude Code integration for Emacs #+KEYWORDS: emacs, claude, ai, code-assistant #+OPTIONS: toc:t num:nil&lt;/p&gt; 
&lt;p&gt;[[&lt;a href=&quot;https://github.com/manzaltu/claude-code-ide.el/actions/workflows/test.yml&quot;&gt;https://github.com/manzaltu/claude-code-ide.el/actions/workflows/test.yml&lt;/a&gt;][file:&lt;a href=&quot;https://github.com/manzaltu/claude-code-ide.el/workflows/CI/badge.svg&quot;&gt;https://github.com/manzaltu/claude-code-ide.el/workflows/CI/badge.svg&lt;/a&gt;]] [[&lt;a href=&quot;https://www.gnu.org/software/emacs/&quot;&gt;https://www.gnu.org/software/emacs/&lt;/a&gt;][file:&lt;a href=&quot;https://img.shields.io/badge/GNU%20Emacs-28--30-blueviolet.svg&quot;&gt;https://img.shields.io/badge/GNU Emacs-28--30-blueviolet.svg&lt;/a&gt;]] [[&lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0&quot;&gt;https://www.gnu.org/licenses/gpl-3.0&lt;/a&gt;][file:&lt;a href=&quot;https://img.shields.io/badge/License-GPL%20v3-blue.svg&quot;&gt;https://img.shields.io/badge/License-GPL v3-blue.svg&lt;/a&gt;]]&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Overview&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Claude Code IDE for Emacs provides native integration with Claude Code CLI through the Model Context Protocol (MCP). Unlike simple terminal wrappers, this package creates a bidirectional bridge between Claude and Emacs, enabling Claude to understand and leverage Emacs&#39; powerful features—from LSP and project management to custom Elisp functions. This transforms Claude into a true Emacs-aware AI assistant that works within your existing workflow and can interact with your entire Emacs ecosystem.&lt;/p&gt; 
&lt;p&gt;** Features&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Automatic project detection and session management&lt;/li&gt; 
 &lt;li&gt;Terminal integration with full color support using =vterm= or =eat=&lt;/li&gt; 
 &lt;li&gt;MCP protocol implementation for IDE integration&lt;/li&gt; 
 &lt;li&gt;Tool support for file operations, editor state, and workspace info&lt;/li&gt; 
 &lt;li&gt;Extensible MCP tools server for accessing Emacs commands (xrefs, tree-sitter, project info, e.g.)&lt;/li&gt; 
 &lt;li&gt;Diagnostic integration with Flycheck and Flymake&lt;/li&gt; 
 &lt;li&gt;Advanced diff view with ediff integration (modify suggestions before applying)&lt;/li&gt; 
 &lt;li&gt;Tab-bar support for proper context switching&lt;/li&gt; 
 &lt;li&gt;Selection and buffer tracking for better context awareness&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;** Emacs Tool Integration&lt;/p&gt; 
&lt;p&gt;This package enables Claude Code to leverage the full power of Emacs through MCP tools integration. Claude can directly access and utilize Emacs capabilities including:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;em&gt;Language Server Protocol (LSP)&lt;/em&gt; integration through xref commands for intelligent code navigation (eglot, lsp-mode and others)&lt;/li&gt; 
 &lt;li&gt;&lt;em&gt;Tree-sitter&lt;/em&gt; for syntax tree analysis and understanding code structure at the AST level&lt;/li&gt; 
 &lt;li&gt;&lt;em&gt;Imenu&lt;/em&gt; for structured symbol listing and navigation within files&lt;/li&gt; 
 &lt;li&gt;&lt;em&gt;Project&lt;/em&gt; integration for project-aware operations&lt;/li&gt; 
 &lt;li&gt;&lt;em&gt;Any Emacs command or function&lt;/em&gt; can be exposed as an MCP tool, allowing Claude to: 
  &lt;ul&gt; 
   &lt;li&gt;Perform project-wide searches and refactoring&lt;/li&gt; 
   &lt;li&gt;Access specialized modes and their features&lt;/li&gt; 
   &lt;li&gt;Execute custom Elisp functions tailored to your workflow&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This deep integration means Claude Code understands your project context and can leverage Emacs&#39; extensive ecosystem to provide more intelligent and context-aware assistance.&lt;/p&gt; 
&lt;p&gt;** Screenshots&lt;/p&gt; 
&lt;p&gt;*** Active File Awareness #+CAPTION: Claude Code automatically knows which file you&#39;re currently viewing in Emacs #+html: &lt;img src=&quot;https://github.com/manzaltu/claude-code-ide.el/raw/fb517ac3700f92f8d5481f0bcf9fe4a3c26c91ab/screenshots/file.png&quot; /&gt; #+html: &lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;i&gt;Claude Code automatically knows which file you&#39;re currently viewing in Emacs&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;*** Code Selection Context #+CAPTION: Claude Code can access and work with selected text in your buffers #+html: &lt;img src=&quot;https://github.com/manzaltu/claude-code-ide.el/raw/fb517ac3700f92f8d5481f0bcf9fe4a3c26c91ab/screenshots/selection.png&quot; /&gt; #+html: &lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;i&gt;Claude Code can access and work with selected text in your buffers&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;*** Advanced Diff View with Diagnostics #+CAPTION: Integrated ediff view for code changes, with Claude Code able to directly access diagnostic data (errors, warnings, etc.) from opened files #+html: &lt;img src=&quot;https://github.com/manzaltu/claude-code-ide.el/raw/fb517ac3700f92f8d5481f0bcf9fe4a3c26c91ab/screenshots/ediff_diag.png&quot; /&gt; #+html: &lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;i&gt;Integrated ediff view for code changes, with Claude Code able to directly access diagnostic data (errors, warnings, etc.) from opened files&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;*** Automatic Text Mentions #+CAPTION: Automatically mention and reference selected text in Claude conversations #+html: &lt;img src=&quot;https://github.com/manzaltu/claude-code-ide.el/raw/fb517ac3700f92f8d5481f0bcf9fe4a3c26c91ab/screenshots/mentions.png&quot; /&gt; #+html: &lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;i&gt;Automatically mention and reference selected text in Claude conversations&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;*** Session Restoration #+CAPTION: Resume previous Claude Code conversations with the --resume flag #+html: &lt;img src=&quot;https://github.com/manzaltu/claude-code-ide.el/raw/fb517ac3700f92f8d5481f0bcf9fe4a3c26c91ab/screenshots/restore.png&quot; /&gt; #+html: &lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;&lt;i&gt;Resume previous Claude Code conversations with the --resume flag&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Installation&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;** Prerequisites&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Emacs 28.1 or higher&lt;/li&gt; 
 &lt;li&gt;Claude Code CLI installed and available in PATH&lt;/li&gt; 
 &lt;li&gt;=vterm= or =eat= package (for terminal support)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;** Installing Claude Code CLI&lt;/p&gt; 
&lt;p&gt;Follow the installation instructions at [[&lt;a href=&quot;https://docs.anthropic.com/en/docs/claude-code&quot;&gt;https://docs.anthropic.com/en/docs/claude-code&lt;/a&gt;][Claude Code Documentation]].&lt;/p&gt; 
&lt;p&gt;** Installing the Emacs Package&lt;/p&gt; 
&lt;p&gt;Currently, this package is in early development.&lt;/p&gt; 
&lt;p&gt;To install using =emacs-version= &amp;gt;= 30 and =use-package= with the =vc= binding:&lt;/p&gt; 
&lt;p&gt;#+begin_src elisp (use-package claude-code-ide :vc (:url &quot;&lt;a href=&quot;https://github.com/manzaltu/claude-code-ide.el&quot;&gt;https://github.com/manzaltu/claude-code-ide.el&lt;/a&gt;&quot; :rev :newest) :bind (&quot;C-c C-&#39;&quot; . claude-code-ide-menu) ; Set your favorite keybinding :config (claude-code-ide-emacs-tools-setup)) ; Optionally enable Emacs MCP tools #+end_src&lt;/p&gt; 
&lt;p&gt;To install using =use-package= and [[&lt;a href=&quot;https://github.com/raxod502/straight.el&quot;&gt;https://github.com/raxod502/straight.el&lt;/a&gt;][straight.el]]:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (use-package claude-code-ide :straight (:type git :host github :repo &quot;manzaltu/claude-code-ide.el&quot;) :bind (&quot;C-c C-&#39;&quot; . claude-code-ide-menu) ; Set your favorite keybinding :config (claude-code-ide-emacs-tools-setup)) ; Optionally enable Emacs MCP tools #+end_src&lt;/p&gt; 
&lt;p&gt;*** Doom Emacs&lt;/p&gt; 
&lt;p&gt;In =packages.el=:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (package! claude-code-ide :recipe (:host github :repo &quot;manzaltu/claude-code-ide.el&quot;)) #+end_src&lt;/p&gt; 
&lt;p&gt;In =config.el=: #+begin_src emacs-lisp (use-package! claude-code-ide :bind (&quot;C-c C-&#39;&quot; . claude-code-ide-menu) ; Set your favorite keybinding :config (claude-code-ide-emacs-tools-setup)) ; Optionally enable Emacs MCP tools #+end_src&lt;/p&gt; 
&lt;p&gt;After saving the above, run: =doom sync= in the terminal.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Usage&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;** Basic Commands&lt;/p&gt; 
&lt;p&gt;The easiest way to interact with Claude Code IDE is through the transient menu interface, which provides visual access to all available commands. Simply run =M-x claude-code-ide-menu= to open the interactive menu.&lt;/p&gt; 
&lt;p&gt;| Command | Description | |-----------------------------------------+---------------------------------------------------| | =M-x claude-code-ide-menu= | Open transient menu with all Claude Code commands | | =M-x claude-code-ide-emacs-tools-setup= | Set up built-in MCP tools (e.g. xref, project) | | =M-x claude-code-ide= | Start Claude Code for the current project | | =M-x claude-code-ide-send-prompt= | Send prompt to Claude from minibuffer input | | =M-x claude-code-ide-continue= | Continue most recent conversation in directory | | =M-x claude-code-ide-resume= | Resume Claude Code with previous conversation | | =M-x claude-code-ide-stop= | Stop Claude Code for the current project | | =M-x claude-code-ide-switch-to-buffer= | Switch to project&#39;s Claude buffer | | =M-x claude-code-ide-list-sessions= | List all active Claude Code sessions and switch | | =M-x claude-code-ide-check-status= | Check if Claude Code CLI is installed and working | | =M-x claude-code-ide-insert-at-mentioned= | Send selected text to Claude prompt | | =M-x claude-code-ide-send-escape= | Send escape key to Claude terminal | | =M-x claude-code-ide-insert-newline= | Insert newline in Claude prompt (sends \ + Enter) | | =M-x claude-code-ide-toggle= | Toggle visibility of Claude Code window | | =M-x claude-code-ide-toggle-recent= | Toggle most recent Claude window globally | | =M-x claude-code-ide-show-debug= | Show the debug buffer with WebSocket messages | | =M-x claude-code-ide-clear-debug= | Clear the debug buffer |&lt;/p&gt; 
&lt;p&gt;** Multi-Project Support&lt;/p&gt; 
&lt;p&gt;Claude Code IDE automatically detects your project using Emacs&#39; built-in =project.el=. Each project gets its own Claude Code instance with a unique buffer name like =&lt;em&gt;claude-code[project-name]&lt;/em&gt;=.&lt;/p&gt; 
&lt;p&gt;You can run multiple Claude Code instances simultaneously for different projects. Use =claude-code-ide-list-sessions= to see all active sessions and switch between them.&lt;/p&gt; 
&lt;p&gt;** Window Management&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Running =claude-code-ide= when a session is already active will toggle the window visibility&lt;/li&gt; 
 &lt;li&gt;The window can be closed with standard Emacs window commands (=C-x 0=) without stopping Claude&lt;/li&gt; 
 &lt;li&gt;Use =claude-code-ide-toggle-recent= to toggle the most recent Claude window from anywhere, regardless of your current project context. This is useful when you&#39;re outside a project directory but want to quickly hide/show Claude&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;** Diff Viewing with Ediff&lt;/p&gt; 
&lt;p&gt;When =claude-code-ide-use-ide-diff= is enabled (default), Claude&#39;s code suggestions are displayed using Emacs&#39; powerful =ediff= interface. This provides two key advantages:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;em&gt;Visual diff comparison&lt;/em&gt; - See exactly what Claude wants to change with side-by-side or unified diff views&lt;/li&gt; 
 &lt;li&gt;&lt;em&gt;Interactive editing&lt;/em&gt; - You can modify Claude&#39;s suggestions before applying them&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;*** How to use ediff:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;When Claude suggests code changes, =ediff= opens automatically&lt;/li&gt; 
 &lt;li&gt;The ediff control buffer becomes active (a small window with ediff commands)&lt;/li&gt; 
 &lt;li&gt;Buffer A shows the current code, Buffer B shows Claude&#39;s suggestion&lt;/li&gt; 
 &lt;li&gt;You can modify Buffer B to refine Claude&#39;s proposed changes&lt;/li&gt; 
 &lt;li&gt;Press =q= in the ediff control buffer to quit&lt;/li&gt; 
 &lt;li&gt;When prompted, choose whether to accept the changes (=y= or =n=)&lt;/li&gt; 
 &lt;li&gt;If you accept (=y=), any changes from Buffer B will be sent back to Claude to be applied on the original file&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;This allows you to refine Claude&#39;s suggestions before they&#39;re applied, ensuring the final code meets your exact requirements.&lt;/p&gt; 
&lt;p&gt;** Configuration&lt;/p&gt; 
&lt;p&gt;*** Configuration Variables&lt;/p&gt; 
&lt;p&gt;| Variable | Description | Default | |-----------------------------------------------+---------------------------------------------+--------------------------------------| | ~claude-code-ide-cli-path~ | Path to Claude Code CLI | ~&quot;claude&quot;~ | | ~claude-code-ide-buffer-name-function~ | Function for buffer naming | ~claude-code-ide--default-buffer-name~ | | ~claude-code-ide-cli-debug~ | Enable CLI debug mode (-d flag) | ~nil~ | | ~claude-code-ide-cli-extra-flags~ | Additional CLI flags (e.g. &quot;--model&quot;) | ~&quot;&quot;~ | | ~claude-code-ide-debug~ | Enable debug logging | ~nil~ | | ~claude-code-ide-terminal-backend~ | Terminal backend (vterm or eat) | ~&#39;vterm~ | | ~claude-code-ide-vterm-anti-flicker~ | Enable vterm flicker reduction | ~t~ | | ~claude-code-ide-vterm-render-delay~ | vterm render batching delay (seconds) | ~0.005~ | | ~claude-code-ide-terminal-initialization-delay~ | Initialization delay for terminals | ~0.1~ | | ~claude-code-ide-log-with-context~ | Include session context in log messages | ~t~ | | ~claude-code-ide-debug-buffer~ | Buffer name for debug output | ~&quot;&lt;em&gt;claude-code-ide-debug&lt;/em&gt;&quot;~ | | ~claude-code-ide-use-side-window~ | Use side window vs regular buffer | ~t~ | | ~claude-code-ide-window-side~ | Side for Claude window | ~&#39;right~ | | ~claude-code-ide-window-width~ | Body width for side windows (left/right) | ~100~ | | ~claude-code-ide-window-height~ | Height for side windows (top/bottom) | ~20~ | | ~claude-code-ide-focus-on-open~ | Focus Claude window when opened | ~t~ | | ~claude-code-ide-focus-claude-after-ediff~ | Focus Claude window after opening ediff | ~t~ | | ~claude-code-ide-show-claude-window-in-ediff~ | Show Claude window during ediff | ~t~ | | ~claude-code-ide-use-ide-diff~ | Use IDE diff viewer instead of terminal | ~t~ | | ~claude-code-ide-switch-tab-on-ediff~ | Switch to Claude&#39;s tab when opening ediff | ~t~ | | ~claude-code-ide-system-prompt~ | Custom system prompt to append | ~nil~ | | ~claude-code-ide-enable-mcp-server~ | Enable MCP tools server | ~nil~ | | ~claude-code-ide-mcp-server-port~ | Port for MCP tools server | ~nil~ (auto-select) | | ~claude-code-ide-mcp-server-tools~ | Alist of exposed Emacs functions | ~nil~ | | ~claude-code-ide-diagnostics-backend~ | Diagnostics backend (auto/flycheck/flymake) | ~&#39;auto~ | | ~claude-code-ide-no-flicker~ | Enable flicker-free terminal renderer | ~nil~ | | ~claude-code-ide-prevent-reflow-glitch~ | Prevent terminal reflow glitch (bug #1422) | ~t~ | | ~claude-code-ide-enable-execute-code~ | Allow model to evaluate Elisp in Emacs | ~t~ |&lt;/p&gt; 
&lt;p&gt;*** Side Window Configuration&lt;/p&gt; 
&lt;p&gt;Claude Code buffers open in a side window by default. You can customize the placement:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; Open Claude on the left side (setq claude-code-ide-window-side &#39;left)&lt;/p&gt; 
&lt;p&gt;;; Open Claude at the bottom with custom height (setq claude-code-ide-window-side &#39;bottom claude-code-ide-window-height 30)&lt;/p&gt; 
&lt;p&gt;;; Open Claude on the right with custom width (setq claude-code-ide-window-side &#39;right claude-code-ide-window-width 100)&lt;/p&gt; 
&lt;p&gt;;; Don&#39;t automatically focus the Claude window (setq claude-code-ide-focus-on-open nil)&lt;/p&gt; 
&lt;p&gt;;; Keep focus on ediff control window when opening diffs (setq claude-code-ide-focus-claude-after-ediff nil)&lt;/p&gt; 
&lt;p&gt;;; Hide Claude window during ediff for more screen space (setq claude-code-ide-show-claude-window-in-ediff nil)&lt;/p&gt; 
&lt;p&gt;;; Disable IDE diff viewer to show diffs in terminal instead (setq claude-code-ide-use-ide-diff nil) #+end_src&lt;/p&gt; 
&lt;p&gt;Or, if you&#39;d prefer to use a regular window:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; Use regular window instead of side window (setq claude-code-ide-use-side-window nil) #+end_src&lt;/p&gt; 
&lt;p&gt;*** Terminal Backend Configuration&lt;/p&gt; 
&lt;p&gt;Claude Code IDE supports both =vterm= and =eat= as terminal backends. By default, it uses =vterm=, but you can switch to =eat= if preferred:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; Use eat instead of vterm (setq claude-code-ide-terminal-backend &#39;eat)&lt;/p&gt; 
&lt;p&gt;;; Or switch back to vterm (default) (setq claude-code-ide-terminal-backend &#39;vterm) #+end_src&lt;/p&gt; 
&lt;p&gt;The =eat= backend is a pure Elisp terminal emulator that may work better in some environments where =vterm= compilation is problematic. Both backends provide full terminal functionality including color support and special key handling.&lt;/p&gt; 
&lt;p&gt;**** Flicker-Free Renderer (Experimental)&lt;/p&gt; 
&lt;p&gt;Claude Code includes an experimental alternative terminal renderer that eliminates flickering. To enable it:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq claude-code-ide-no-flicker t) #+end_src&lt;/p&gt; 
&lt;p&gt;Note that with this renderer, normal Emacs buffer scrolling and search (=C-s=, =C-r=) will not work in the terminal buffer. Instead, use Claude Code&#39;s built-in keybindings:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;=C-o j= / =C-o k= - Scroll up/down through the transcript&lt;/li&gt; 
 &lt;li&gt;=C-o /= - Search the transcript&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;**** vterm Rendering Optimization&lt;/p&gt; 
&lt;p&gt;Claude Code IDE includes intelligent flicker reduction for vterm terminals to provide smoother visual output:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; Enable/disable vterm anti-flicker optimization (enabled by default) (setq claude-code-ide-vterm-anti-flicker t)&lt;/p&gt; 
&lt;p&gt;;; Adjust the render delay for batching updates (default is 0.005 seconds) (setq claude-code-ide-vterm-render-delay 0.01) ; Increase for smoother but less responsive #+end_src&lt;/p&gt; 
&lt;p&gt;This optimization detects rapid terminal redraw sequences (like when Claude expands text areas) and batches them for smoother rendering. The 5ms default delay provides optimal visual quality with imperceptible latency.&lt;/p&gt; 
&lt;p&gt;**** Terminal Initialization Delay&lt;/p&gt; 
&lt;p&gt;Claude Code IDE includes a brief initialization delay when launching terminals to ensure proper layout rendering:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; Adjust the terminal initialization delay (default is 0.1 seconds) (setq claude-code-ide-terminal-initialization-delay 0.15)&lt;/p&gt; 
&lt;p&gt;;; Or disable it entirely (may cause visual glitches) (setq claude-code-ide-terminal-initialization-delay 0) #+end_src&lt;/p&gt; 
&lt;p&gt;This delay prevents display artifacts such as misaligned prompts and incorrect cursor positioning that can occur when terminal emulation is initializing. The default 100ms delay is imperceptible but ensures reliable terminal startup.&lt;/p&gt; 
&lt;p&gt;**** Terminal Keybindings&lt;/p&gt; 
&lt;p&gt;Claude Code IDE adds custom keybindings to the terminal for easier interaction:&lt;/p&gt; 
&lt;p&gt;| Keybinding | Command | Description | |------------+--------------------------------+--------------------------------------| | =M-RET= | =claude-code-ide-insert-newline= | Insert a newline in the prompt | | =C-
 &lt;escape&gt;
  = | =claude-code-ide-send-escape= | Send escape key to cancel operations |
 &lt;/escape&gt;&lt;/p&gt; 
&lt;p&gt;These keybindings are automatically set up for both =vterm= and =eat= backends and only apply within Claude Code terminal buffers.&lt;/p&gt; 
&lt;p&gt;**** Terminal Reflow Glitch Prevention (Temporary)&lt;/p&gt; 
&lt;p&gt;Claude Code IDE includes a temporary workaround for a known Claude Code bug ([[&lt;a href=&quot;https://github.com/anthropics/claude-code/issues/1422&quot;&gt;https://github.com/anthropics/claude-code/issues/1422&lt;/a&gt;][#1422]]) where terminal reflows during window resizes can cause uncontrollable scrolling. This workaround is enabled by default but can be disabled if needed:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; Disable the terminal reflow glitch prevention (not recommended until bug is fixed) (setq claude-code-ide-prevent-reflow-glitch nil) #+end_src&lt;/p&gt; 
&lt;p&gt;The workaround will be removed once the upstream bug is fixed.&lt;/p&gt; 
&lt;p&gt;*** Diagnostics Configuration&lt;/p&gt; 
&lt;p&gt;Claude Code IDE supports both Flycheck and Flymake for code diagnostics. By default, it will automatically detect which one is active:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; Let Claude Code automatically detect the active diagnostics backend (setq claude-code-ide-diagnostics-backend &#39;auto) ; default&lt;/p&gt; 
&lt;p&gt;;; Or force a specific backend (setq claude-code-ide-diagnostics-backend &#39;flycheck) (setq claude-code-ide-diagnostics-backend &#39;flymake) #+end_src&lt;/p&gt; 
&lt;p&gt;*** Elisp Code Execution&lt;/p&gt; 
&lt;p&gt;Claude Code can evaluate Elisp expressions directly in your running Emacs session via the =executeCode= MCP tool. This is enabled by default.&lt;/p&gt; 
&lt;p&gt;To disable it:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq claude-code-ide-enable-execute-code nil) #+end_src&lt;/p&gt; 
&lt;p&gt;*** Custom Buffer Naming&lt;/p&gt; 
&lt;p&gt;You can customize how Claude Code buffers are named:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq claude-code-ide-buffer-name-function (lambda (directory) (if directory (format &quot;&lt;em&gt;Claude:%s&lt;/em&gt;&quot; (file-name-nondirectory (directory-file-name directory))) &quot;&lt;em&gt;Claude:Global&lt;/em&gt;&quot;))) #+end_src&lt;/p&gt; 
&lt;p&gt;*** Custom CLI Flags&lt;/p&gt; 
&lt;p&gt;You can pass additional flags to the Claude Code CLI:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; Use a specific model (setq claude-code-ide-cli-extra-flags &quot;--model opus&quot;)&lt;/p&gt; 
&lt;p&gt;;; Pass multiple flags (setq claude-code-ide-cli-extra-flags &quot;--model opus --no-cache&quot;)&lt;/p&gt; 
&lt;p&gt;;; Flags are added to all Claude Code sessions #+end_src&lt;/p&gt; 
&lt;p&gt;Note: These flags are appended to the Claude command after any built-in flags like =-d= (debug) or =-r= (resume).&lt;/p&gt; 
&lt;p&gt;*** Custom System Prompt&lt;/p&gt; 
&lt;p&gt;You can append a custom system prompt to Claude&#39;s default prompt, allowing you to customize Claude&#39;s behavior for specific projects or contexts:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; Set a custom system prompt (setq claude-code-ide-system-prompt &quot;You are an expert in Elisp and Emacs development.&quot;)&lt;/p&gt; 
&lt;p&gt;;; Or configure it per-project using dir-locals.el ;; In .dir-locals.el: ((nil . ((claude-code-ide-system-prompt . &quot;Focus on functional programming patterns and avoid mutations.&quot;))))&lt;/p&gt; 
&lt;p&gt;;; Set via the transient menu: M-x claude-code-ide-menu → Configuration → Set system prompt #+end_src&lt;/p&gt; 
&lt;p&gt;When set, this adds the =--append-system-prompt= flag to the Claude command. Set to =nil= to disable (default).&lt;/p&gt; 
&lt;p&gt;*** Debugging&lt;/p&gt; 
&lt;p&gt;**** Claude CLI Debug Mode&lt;/p&gt; 
&lt;p&gt;To enable debug mode for Claude Code CLI (passes the =-d= flag):&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq claude-code-ide-cli-debug t) #+end_src&lt;/p&gt; 
&lt;p&gt;**** Emacs Debug Logging&lt;/p&gt; 
&lt;p&gt;To enable debug logging within Emacs (logs WebSocket messages and JSON-RPC communication):&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq claude-code-ide-debug t) #+end_src&lt;/p&gt; 
&lt;p&gt;Then view debug logs with:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;=M-x claude-code-ide-show-debug= - Show the debug buffer&lt;/li&gt; 
 &lt;li&gt;=M-x claude-code-ide-clear-debug= - Clear the debug buffer&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The debug buffer shows:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;WebSocket connection events&lt;/li&gt; 
 &lt;li&gt;All JSON-RPC messages (requests/responses)&lt;/li&gt; 
 &lt;li&gt;Error messages and diagnostics&lt;/li&gt; 
 &lt;li&gt;General debug information with session context&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;** Multiple Claude Code Instances on One Project&lt;/p&gt; 
&lt;p&gt;Using git worktrees is the recommended way for running multiple Claude Code instances on different branches of the same project. This allows you to develop features or fix bugs in parallel:&lt;/p&gt; 
&lt;p&gt;#+begin_src bash&lt;/p&gt; 
&lt;h1&gt;Create a new worktree for a feature branch&lt;/h1&gt; 
&lt;p&gt;git worktree add ../myproject-worktree feature-branch #+end_src&lt;/p&gt; 
&lt;p&gt;#+begin_src elisp ;; Start Claude Code in the main project find-file /path/to/myproject M-x claude-code-ide&lt;/p&gt; 
&lt;p&gt;;; Start another Claude Code instance in the worktree find-file /path/to/myproject-worktree M-x claude-code-ide #+end_src&lt;/p&gt; 
&lt;p&gt;Each worktree is treated as a separate project by =project.el=, allowing you to have independent Claude Code sessions with their own buffers (e.g., =&lt;em&gt;claude-code[myproject]&lt;/em&gt;= and =&lt;em&gt;claude-code[myproject-worktree]&lt;/em&gt;=).&lt;/p&gt; 
&lt;p&gt;** Emacs MCP Tools&lt;/p&gt; 
&lt;p&gt;Claude Code IDE includes built-in MCP tools that expose Emacs functionality to Claude, enabling powerful code navigation and analysis capabilities:&lt;/p&gt; 
&lt;p&gt;*** Built-in Tools&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;=xref-find-references= - Find all references to a symbol throughout the project&lt;/li&gt; 
 &lt;li&gt;=xref-find-apropos= - Find symbols matching a pattern across the entire project&lt;/li&gt; 
 &lt;li&gt;=treesit-info= - Get tree-sitter syntax tree information for deep code structure analysis&lt;/li&gt; 
 &lt;li&gt;=imenu-list-symbols= - List all symbols (functions, classes, variables) in a file using imenu&lt;/li&gt; 
 &lt;li&gt;=project-info= - Get information about the current project (directory, files, etc.)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;*** Enabling MCP Tools&lt;/p&gt; 
&lt;p&gt;To enable these tools, add to your configuration:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; Set up the built-in Emacs tools (claude-code-ide-emacs-tools-setup) #+end_src&lt;/p&gt; 
&lt;p&gt;Once enabled, Claude can use these tools to navigate your codebase. For example:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&quot;Find the definition of function foo&quot;&lt;/li&gt; 
 &lt;li&gt;&quot;Show me all places where this variable is used&quot;&lt;/li&gt; 
 &lt;li&gt;&quot;What type of AST node is under the cursor?&quot;&lt;/li&gt; 
 &lt;li&gt;&quot;Analyze the parse tree of this entire file&quot;&lt;/li&gt; 
 &lt;li&gt;&quot;List all functions and variables in this file&quot;&lt;/li&gt; 
 &lt;li&gt;&quot;How many files are in this project?&quot;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;** Creating Custom MCP Tools&lt;/p&gt; 
&lt;p&gt;You can expose your own Emacs functions to Claude through the MCP tools system. This allows Claude to interact with specialized Emacs features, custom commands, or domain-specific functionality.&lt;/p&gt; 
&lt;p&gt;*** Tool Definition Format&lt;/p&gt; 
&lt;p&gt;Define tools using the =claude-code-ide-make-tool= function:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (claude-code-ide-make-tool :function #&#39;function-name ; The Emacs function to call :name &quot;tool_name&quot; ; Name for Claude to use (snake_case recommended) :description &quot;...&quot; ; Human-readable description :args &#39;((:name &quot;param1&quot; ; List of argument specifications :type string ; Type: string, number, integer, boolean, etc. :description &quot;...&quot; ; What this parameter does :optional t))) ; Optional parameters marked with :optional t #+end_src&lt;/p&gt; 
&lt;p&gt;Available argument types: =string=, =number=, =integer=, =boolean=, =array=, =object=, =null=&lt;/p&gt; 
&lt;p&gt;*** Context-Aware Tool Example&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; Define a context-aware function that operates in the session&#39;s project (defun my-project-grep (pattern) &quot;Search for PATTERN in the current session&#39;s project.&quot; (claude-code-ide-mcp-server-with-session-context nil ;; This executes with the session&#39;s project directory as default-directory (let* ((project-dir default-directory) (results (shell-command-to-string (format &quot;rg -n &#39;%s&#39; %s&quot; pattern project-dir)))) results)))&lt;/p&gt; 
&lt;p&gt;;; Define and register the tool (automatically added to claude-code-ide-mcp-server-tools) (claude-code-ide-make-tool :function #&#39;my-project-grep :name &quot;my_project_grep&quot; :description &quot;Search for pattern in project files&quot; :args &#39;((:name &quot;pattern&quot; :type string :description &quot;Pattern to search for&quot;)))&lt;/p&gt; 
&lt;p&gt;;; Enable Emacs tool MCP server (claude-code-ide-emacs-tools-setup) #+end_src&lt;/p&gt; 
&lt;p&gt;The =claude-code-ide-mcp-server-with-session-context= macro ensures your tool executes in the correct project context.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;License&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This project is licensed under the GNU General Public License v3.0 or later. See the LICENSE file for details.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Trademark Notice&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Claude® is a registered trademark of Anthropic, PBC. Claude Code is an application developed by Anthropic, PBC.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Related Projects&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://docs.anthropic.com/en/docs/claude-code&quot;&gt;https://docs.anthropic.com/en/docs/claude-code&lt;/a&gt;][Claude Code CLI]]&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/anthropics/claude-code&quot;&gt;https://github.com/anthropics/claude-code&lt;/a&gt;][Claude Code VS Code Extension]]&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/coder/claudecode.nvim&quot;&gt;https://github.com/coder/claudecode.nvim&lt;/a&gt;][claudecode.nvim]] - Neovim integration&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/e1c1a34c8021ec5b1783fb6482e8cd795bad57aa777b99c4ba915cb607c0ecd5/manzaltu/claude-code-ide.el" medium="image" />
      
    </item>
    
    <item>
      <title>xenodium/agent-shell</title>
      <link>https://github.com/xenodium/agent-shell</link>
      <description>&lt;p&gt;A native Emacs buffer to interact with LLM agents powered by ACP&lt;/p&gt;&lt;hr&gt;&lt;p&gt;#+TITLE: Emacs Agent Shell #+AUTHOR: Álvaro Ramírez&lt;/p&gt; 
&lt;p&gt;[[&lt;a href=&quot;https://melpa.org/#/agent-shell&quot;&gt;https://melpa.org/#/agent-shell&lt;/a&gt;][file:&lt;a href=&quot;https://melpa.org/packages/agent-shell-badge.svg&quot;&gt;https://melpa.org/packages/agent-shell-badge.svg&lt;/a&gt;]]&lt;/p&gt; 
&lt;p&gt;👉 [[&lt;a href=&quot;https://github.com/sponsors/xenodium&quot;&gt;https://github.com/sponsors/xenodium&lt;/a&gt;][Support this work via GitHub Sponsors]] by [[&lt;a href=&quot;https://github.com/xenodium&quot;&gt;https://github.com/xenodium&lt;/a&gt;][@xenodium]] (check out my [[&lt;a href=&quot;https://xenodium.com&quot;&gt;https://xenodium.com&lt;/a&gt;][blog]])&lt;/p&gt; 
&lt;p&gt;[[file:agent-shell.png]]&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;This project needs your funding&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;As you pay for those useful LLM tokens, consider [[&lt;a href=&quot;https://github.com/sponsors/xenodium&quot;&gt;https://github.com/sponsors/xenodium&lt;/a&gt;][sponsoring]] development and maintenance of this project. With your help, I can make this effort more [[&lt;a href=&quot;https://github.com/sponsors/xenodium&quot;&gt;https://github.com/sponsors/xenodium&lt;/a&gt;][sustainable]].&lt;/p&gt; 
&lt;p&gt;Thank you!&lt;/p&gt; 
&lt;p&gt;[[&lt;a href=&quot;https://xenodium.com/&quot;&gt;https://xenodium.com/&lt;/a&gt;][Alvaro]]&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;agent-shell&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;A native Emacs shell to interact with LLM agents powered by ACP ([[&lt;a href=&quot;https://agentclientprotocol.com&quot;&gt;https://agentclientprotocol.com&lt;/a&gt;][Agent Client Protocol]]).&lt;/p&gt; 
&lt;p&gt;With agent-shell, you can chat with the likes of Gemini CLI, Claude Agent, Auggie, Mistral Vibe, or any other ACP-driven agent.&lt;/p&gt; 
&lt;p&gt;[[&lt;a href=&quot;https://www.youtube.com/watch?v=R2Ucr3amgGg&quot;&gt;https://www.youtube.com/watch?v=R2Ucr3amgGg&lt;/a&gt;][agent-shell - YouTube]]&lt;/p&gt; 
&lt;p&gt;[[&lt;a href=&quot;https://www.youtube.com/watch?v=R2Ucr3amgGg&quot;&gt;https://www.youtube.com/watch?v=R2Ucr3amgGg&lt;/a&gt;][file:yt.png]]&lt;/p&gt; 
&lt;p&gt;[[&lt;a href=&quot;https://www.youtube.com/watch?v=ymMlftdGx4I&quot;&gt;https://www.youtube.com/watch?v=ymMlftdGx4I&lt;/a&gt;][agent-shell + Claude Skills - YouTube]]&lt;/p&gt; 
&lt;p&gt;[[&lt;a href=&quot;https://www.youtube.com/watch?v=ymMlftdGx4I&quot;&gt;https://www.youtube.com/watch?v=ymMlftdGx4I&lt;/a&gt;][&lt;a href=&quot;https://img.youtube.com/vi/ymMlftdGx4I/0.jpg&quot;&gt;https://img.youtube.com/vi/ymMlftdGx4I/0.jpg&lt;/a&gt;]]&lt;/p&gt; 
&lt;p&gt;[[&lt;a href=&quot;https://www.youtube.com/watch?v=HJQ86HuSIJI&quot;&gt;https://www.youtube.com/watch?v=HJQ86HuSIJI&lt;/a&gt;][agent-shell + Claude Skills + Charts - YouTube]]&lt;/p&gt; 
&lt;p&gt;[[&lt;a href=&quot;https://www.youtube.com/watch?v=HJQ86HuSIJI&quot;&gt;https://www.youtube.com/watch?v=HJQ86HuSIJI&lt;/a&gt;][&lt;a href=&quot;https://img.youtube.com/vi/HJQ86HuSIJI/0.jpg&quot;&gt;https://img.youtube.com/vi/HJQ86HuSIJI/0.jpg&lt;/a&gt;]]&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;News&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://xenodium.com/agent-shell-0-47-1-updates&quot;&gt;https://xenodium.com/agent-shell-0-47-1-updates&lt;/a&gt;][agent-shell 0.47 updates]].&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://xenodium.com/agent-shell-0-25-updates&quot;&gt;https://xenodium.com/agent-shell-0-25-updates&lt;/a&gt;][agent-shell 0.25 updates]].&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://xenodium.com/agent-shell-016-improvements-melpa&quot;&gt;https://xenodium.com/agent-shell-016-improvements-melpa&lt;/a&gt;][agent-shell 0.17 improvements + MELPA]].&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://xenodium.com/agent-shell-0-5-improvements&quot;&gt;https://xenodium.com/agent-shell-0-5-improvements&lt;/a&gt;][agent-shell 0.5 improvements]].&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://xenodium.com/introducing-agent-shell&quot;&gt;https://xenodium.com/introducing-agent-shell&lt;/a&gt;][Introducing Emacs agent-shell (powered by ACP)]].&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://xenodium.com/introducing-acpel&quot;&gt;https://xenodium.com/introducing-acpel&lt;/a&gt;][Introducing acp.el]].&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li&gt;Related projects&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;=agent-shell= relies on [[&lt;a href=&quot;https://github.com/xenodium/acp.el&quot;&gt;https://github.com/xenodium/acp.el&lt;/a&gt;][acp.el]] to communicate with agents via ACP ([[&lt;a href=&quot;https://agentclientprotocol.com/&quot;&gt;https://agentclientprotocol.com/&lt;/a&gt;][Agent Client Protocol]]).&lt;/p&gt; 
&lt;p&gt;We now have a handful of additional packages to extend the =agent-shell= experience:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/xenodium/emacs-skills&quot;&gt;https://github.com/xenodium/emacs-skills&lt;/a&gt;][emacs-skills]]: Claude Agent skills for Emacs.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/ElleNajt/agent-shell-to-go&quot;&gt;https://github.com/ElleNajt/agent-shell-to-go&lt;/a&gt;][agent-shell-to-go]]: Interact with =agent-shell= sessions from your mobile or any other device via Slack.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/Embedded-Focus/agent-circus&quot;&gt;https://github.com/Embedded-Focus/agent-circus&lt;/a&gt;][agent-circus]]: Run AI coding agents in sandboxed Docker containers.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/cmacrae/agent-shell-sidebar&quot;&gt;https://github.com/cmacrae/agent-shell-sidebar&lt;/a&gt;][agent-shell-sidebar]]: A sidebar add-on for =agent-shell=.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/dcluna/agent-shell-bookmark&quot;&gt;https://github.com/dcluna/agent-shell-bookmark&lt;/a&gt;][agent-shell-bookmark]]: Bookmark support for agent-shell sessions.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/gveres/agent-shell-workspace&quot;&gt;https://github.com/gveres/agent-shell-workspace&lt;/a&gt;][agent-shell-workspace]]: Dedicated tab-bar workspace for managing multiple =agent-shell= sessions.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/jethrokuan/agent-shell-manager&quot;&gt;https://github.com/jethrokuan/agent-shell-manager&lt;/a&gt;][agent-shell-manager]]: Tabulated view and management of =agent-shell= buffers.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/nineluj/agent-review&quot;&gt;https://github.com/nineluj/agent-review&lt;/a&gt;][agent-review]]: Code review interface for =agent-shell=.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/ultronozm/agent-shell-attention.el&quot;&gt;https://github.com/ultronozm/agent-shell-attention.el&lt;/a&gt;][agent-shell-attention.el]]: Mode-line attention tracker for =agent-shell=.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/xenodium/agent-shell-knockknock&quot;&gt;https://github.com/xenodium/agent-shell-knockknock&lt;/a&gt;][agent-shell-knockknock]]: Notifications for =agent-shell= via [[&lt;a href=&quot;https://github.com/konrad1977/knockknock&quot;&gt;https://github.com/konrad1977/knockknock&lt;/a&gt;][knockknock.el]].&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/zackattackz/agent-shell-notifications&quot;&gt;https://github.com/zackattackz/agent-shell-notifications&lt;/a&gt;][agent-shell-notifications]]: Desktop notifications for =agent-shell= events.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/ElleNajt/meta-agent-shell&quot;&gt;https://github.com/ElleNajt/meta-agent-shell&lt;/a&gt;][meta-agent-shell]]: Multi-agent coordination system for =agent-shell= with inter-agent communication, task tracking, and project-level dispatching.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/cxa/agent-shell-macext&quot;&gt;https://github.com/cxa/agent-shell-macext&lt;/a&gt;][agent-shell-macext]]: macOS-specific enhancements for =agent-shell=.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/lllShamanlll/agent-shell-org-transcript&quot;&gt;https://github.com/lllShamanlll/agent-shell-org-transcript&lt;/a&gt;][agent-shell-org-transcript]]: Org-mode transcripts for =agent-shell= sessions, with org-roam integration.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/eddof13/ob-agent-shell&quot;&gt;https://github.com/eddof13/ob-agent-shell&lt;/a&gt;][ob-agent-shell]]: Org Babel backend for executing =agent-shell= source blocks.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/Marx-A00/agent-recall&quot;&gt;https://github.com/Marx-A00/agent-recall&lt;/a&gt;][agent-recall]]: Search, browse, and resume =agent-shell= conversation transcripts.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/lgmoneda/agent-shell-pet&quot;&gt;https://github.com/lgmoneda/agent-shell-pet&lt;/a&gt;][agent-shell-pet]]: Codex-like pets that broadcast agent-shell session states.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li&gt;Articles&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li&gt;20Y: [[&lt;a href=&quot;https://20y.hu/~slink/journal/agent-shell/index.html&quot;&gt;https://20y.hu/~slink/journal/agent-shell/index.html&lt;/a&gt;][Agentic development workflow in Emacs]]&lt;/li&gt; 
 &lt;li&gt;Skye: [[&lt;a href=&quot;https://skyefreeman.com/blog/2026/04/15/how-im-using-llms-with-emacs&quot;&gt;https://skyefreeman.com/blog/2026/04/15/how-im-using-llms-with-emacs&lt;/a&gt;][How I&#39;m using LLM&#39;s via Emacs]].&lt;/li&gt; 
 &lt;li&gt;sincebyte: [[&lt;a href=&quot;https://neoemacs.com/posts/agent-shell-cursor-agent-cli/&quot;&gt;https://neoemacs.com/posts/agent-shell-cursor-agent-cli/&lt;/a&gt;][Agent Shell Cursor Agent Cli]].&lt;/li&gt; 
 &lt;li&gt;Naputo: [[&lt;a href=&quot;https://blog.n-daisuke897.com/posts/2026-03-01-agent-shell-session-selection/&quot;&gt;https://blog.n-daisuke897.com/posts/2026-03-01-agent-shell-session-selection/&lt;/a&gt;][How to Select Sessions When Starting the agent-shell ACP Client Running on Emacs]]&lt;/li&gt; 
 &lt;li&gt;vandee: [[&lt;a href=&quot;https://www.vandee.art/blog/2026-01-23-my-agent-practice-with-opencode-in-emacs.html&quot;&gt;https://www.vandee.art/blog/2026-01-23-my-agent-practice-with-opencode-in-emacs.html&lt;/a&gt;][My Agent Practice with OpenCode in Emacs]].&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li&gt;Icons&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Thanks to [[&lt;a href=&quot;https://github.com/lobehub/lobe-icons&quot;&gt;https://github.com/lobehub/lobe-icons&lt;/a&gt;][Lobe Icons]] for the lovely icons.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Setup&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;** External dependencies&lt;/p&gt; 
&lt;p&gt;*** Claude Agent SDK&lt;/p&gt; 
&lt;p&gt;For Anthropic&#39;s [[&lt;a href=&quot;https://code.claude.com/docs/en/overview&quot;&gt;https://code.claude.com/docs/en/overview&lt;/a&gt;][Claude Agent]] (formerly known as the Claude Code), follow [[&lt;a href=&quot;https://github.com/agentclientprotocol/claude-agent-acp&quot;&gt;https://github.com/agentclientprotocol/claude-agent-acp&lt;/a&gt;][claude-agent-acp instructions]], typically something like:&lt;/p&gt; 
&lt;p&gt;#+begin_src bash npm install -g @agentclientprotocol/claude-agent-acp #+end_src&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; The =-g= flag is required to install the binary globally so it&#39;s available in your PATH. After installation, verify it&#39;s available by running =which claude-agent-acp= in your terminal.&lt;/p&gt; 
&lt;p&gt;Optionally: You may also need [[&lt;a href=&quot;https://code.claude.com/docs/en/overview&quot;&gt;https://code.claude.com/docs/en/overview&lt;/a&gt;][Claude Agent]] itself if you want to use a Claude subscription (run the CLI outside of Emacs at least once to log in to your subscription and then use =agent-shell= from Emacs). Follow Claude Agent&#39;s [[&lt;a href=&quot;https://code.claude.com/docs/en/overview#get-started&quot;&gt;https://code.claude.com/docs/en/overview#get-started&lt;/a&gt;][get started]] for installation.&lt;/p&gt; 
&lt;p&gt;*** Codex&lt;/p&gt; 
&lt;p&gt;For OpenAI&#39;s Codex, install [[&lt;a href=&quot;https://github.com/zed-industries/codex-acp&quot;&gt;https://github.com/zed-industries/codex-acp&lt;/a&gt;][zed/codex-acp]] and ensure the &lt;code&gt;codex-acp&lt;/code&gt; executable is in PATH.&lt;/p&gt; 
&lt;p&gt;*** Gemini CLI&lt;/p&gt; 
&lt;p&gt;For Google&#39;s [[&lt;a href=&quot;https://github.com/google-gemini/gemini-cli&quot;&gt;https://github.com/google-gemini/gemini-cli&lt;/a&gt;][Gemini CLI]], be sure to get a recent release supporting the =--experimental-acp= flag.&lt;/p&gt; 
&lt;p&gt;*** Goose&lt;/p&gt; 
&lt;p&gt;For Goose CLI, install [[&lt;a href=&quot;https://block.github.io/goose/docs/getting-started/installation&quot;&gt;https://block.github.io/goose/docs/getting-started/installation&lt;/a&gt;][goose]] and ensure the &lt;code&gt;goose&lt;/code&gt; executable is in PATH.&lt;/p&gt; 
&lt;p&gt;*** Cursor&lt;/p&gt; 
&lt;p&gt;For Cursor agent, install with:&lt;/p&gt; 
&lt;p&gt;#+begin_src bash npm install -g @blowmage/cursor-agent-acp #+end_src&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://github.com/blowmage/cursor-agent-acp-npm&quot;&gt;https://github.com/blowmage/cursor-agent-acp-npm&lt;/a&gt; for details.&lt;/p&gt; 
&lt;p&gt;*** Kimi Code CLI&lt;/p&gt; 
&lt;p&gt;For Kimi Code CLI, install with:&lt;/p&gt; 
&lt;p&gt;#+begin_src bash curl -L &lt;a href=&quot;http://code.kimi.com/install.sh&quot;&gt;code.kimi.com/install.sh&lt;/a&gt; | bash #+end_src&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://www.kimi.com/code&quot;&gt;https://www.kimi.com/code&lt;/a&gt; for details.&lt;/p&gt; 
&lt;p&gt;*** Kiro CLI&lt;/p&gt; 
&lt;p&gt;For Kiro CLI, install with:&lt;/p&gt; 
&lt;p&gt;#+begin_src bash curl -fsSL &lt;a href=&quot;https://cli.kiro.dev/install&quot;&gt;https://cli.kiro.dev/install&lt;/a&gt; | bash #+end_src&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://kiro.dev/docs/cli/acp/&quot;&gt;https://kiro.dev/docs/cli/acp/&lt;/a&gt; for details.&lt;/p&gt; 
&lt;p&gt;*** Qwen Code&lt;/p&gt; 
&lt;p&gt;For Qwen Code, install with:&lt;/p&gt; 
&lt;p&gt;#+begin_src bash npm install -g @qwen-code/qwen-code@latest #+end_src&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://github.com/QwenLM/qwen-code&quot;&gt;https://github.com/QwenLM/qwen-code&lt;/a&gt; for details.&lt;/p&gt; 
&lt;p&gt;*** Auggie&lt;/p&gt; 
&lt;p&gt;For Auggie CLI, install with:&lt;/p&gt; 
&lt;p&gt;#+begin_src bash npm install -g @augmentcode/auggie #+end_src&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://docs.augmentcode.com/cli/overview&quot;&gt;https://docs.augmentcode.com/cli/overview&lt;/a&gt; for details. *** Mistral Vibe&lt;/p&gt; 
&lt;p&gt;For Mistral Vibe, install with:&lt;/p&gt; 
&lt;p&gt;#+begin_src bash uv tool install mistral-vibe #+end_src&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://github.com/mistralai/mistral-vibe&quot;&gt;https://github.com/mistralai/mistral-vibe&lt;/a&gt; for details.&lt;/p&gt; 
&lt;p&gt;*** Factory Droid&lt;/p&gt; 
&lt;p&gt;For Factory Droid, install Droid:&lt;/p&gt; 
&lt;p&gt;#+begin_src bash curl -fsSL &lt;a href=&quot;https://app.factory.ai/cli&quot;&gt;https://app.factory.ai/cli&lt;/a&gt; | sh #+end_src&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://factory.ai&quot;&gt;https://factory.ai&lt;/a&gt; for details.&lt;/p&gt; 
&lt;p&gt;*** Pi&lt;/p&gt; 
&lt;p&gt;For Pi coding agent, install the =pi-acp= adapter:&lt;/p&gt; 
&lt;p&gt;#+begin_src bash npm install -g pi-acp #+end_src&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://github.com/svkozak/pi-acp&quot;&gt;https://github.com/svkozak/pi-acp&lt;/a&gt; for details.&lt;/p&gt; 
&lt;p&gt;** Installation&lt;/p&gt; 
&lt;p&gt;=agent-shell= is powered by built-in =comint-shell=, via [[&lt;a href=&quot;https://github.com/xenodium/shell-maker&quot;&gt;https://github.com/xenodium/shell-maker&lt;/a&gt;][shell-maker]], available on [[&lt;a href=&quot;https://melpa.org/#/shell-maker&quot;&gt;https://melpa.org/#/shell-maker&lt;/a&gt;][MELPA]].&lt;/p&gt; 
&lt;p&gt;Both [[&lt;a href=&quot;https://melpa.org/#/agent-shell&quot;&gt;https://melpa.org/#/agent-shell&lt;/a&gt;][agent-shell]] and its dependency [[&lt;a href=&quot;https://melpa.org/#/acp&quot;&gt;https://melpa.org/#/acp&lt;/a&gt;][acp.el]] are now available on MELPA.&lt;/p&gt; 
&lt;p&gt;You can install via:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (use-package agent-shell :ensure t :ensure-system-package ;; Add agent installation configs here ((claude . &quot;brew install claude-code&quot;) (claude-agent-acp . &quot;npm install -g @agentclientprotocol/claude-agent-acp&quot;))) #+end_src&lt;/p&gt; 
&lt;p&gt;This will automatically install the required dependencies ([[&lt;a href=&quot;https://melpa.org/#/acp&quot;&gt;https://melpa.org/#/acp&lt;/a&gt;][acp.el]] and [[&lt;a href=&quot;https://melpa.org/#/shell-maker&quot;&gt;https://melpa.org/#/shell-maker&lt;/a&gt;][shell-maker]]).&lt;/p&gt; 
&lt;p&gt;*** Doom Emacs&lt;/p&gt; 
&lt;p&gt;If you are using Doom Emacs and would like to use the =package!= macro:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (package! shell-maker) (package! acp) (package! agent-shell) #+end_src&lt;/p&gt; 
&lt;p&gt;Run =doom sync= and restart.&lt;/p&gt; 
&lt;p&gt;Include =require= before configuration:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (require &#39;acp) (require &#39;agent-shell) ;; rest of config... #+end_src&lt;/p&gt; 
&lt;p&gt;** Configuration&lt;/p&gt; 
&lt;p&gt;Configure authentication for the agent providers you want to use.&lt;/p&gt; 
&lt;p&gt;*** Environment variables&lt;/p&gt; 
&lt;p&gt;Pass environment variables to the spawned agent process by customizing the &lt;code&gt;agent-shell-*-environment&lt;/code&gt; variable with &lt;code&gt;agent-shell-make-environment-variables&lt;/code&gt;. The helper accepts key/value pairs and exports them when the agent starts.&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-anthropic-claude-environment (agent-shell-make-environment-variables &quot;ANTHROPIC_API_KEY&quot; (auth-source-pass-get &#39;secret &quot;anthropic-api-key&quot;) &quot;HTTPS_PROXY&quot; &quot;&lt;a href=&quot;http://proxy.example.com:8080&quot;&gt;http://proxy.example.com:8080&lt;/a&gt;&quot;)) #+end_src&lt;/p&gt; 
&lt;p&gt;**** Inheriting environment variables&lt;/p&gt; 
&lt;p&gt;By default, the agent process starts with a minimal environment. To inherit environment variables from the parent Emacs process, use the &lt;code&gt;:inherit-env t&lt;/code&gt; parameter in &lt;code&gt;agent-shell-make-environment-variables&lt;/code&gt;:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setenv &quot;ANTHROPIC_API_KEY&quot; (auth-source-pass-get &#39;secret &quot;anthropic-api-key&quot;))&lt;/p&gt; 
&lt;p&gt;(setq agent-shell-anthropic-claude-environment (agent-shell-make-environment-variables :inherit-env t)) #+end_src&lt;/p&gt; 
&lt;p&gt;This ensures that environment variables like &lt;code&gt;PATH&lt;/code&gt;, &lt;code&gt;HOME&lt;/code&gt;, and others from your Emacs session are available to the agent process, while still allowing you to override or add specific variables.&lt;/p&gt; 
&lt;p&gt;**** Loading environment variables from files&lt;/p&gt; 
&lt;p&gt;You can load environment variables from .env files using the &lt;code&gt;:load-env&lt;/code&gt; parameter. This supports both single and multiple files:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; Load from a single .env file (setq agent-shell-anthropic-claude-environment (agent-shell-make-environment-variables :load-env &quot;~/.env&quot; &quot;CUSTOM_VAR&quot; &quot;custom_value&quot;))&lt;/p&gt; 
&lt;p&gt;;; Load from multiple .env files (setq agent-shell-anthropic-claude-environment (agent-shell-make-environment-variables :load-env &#39;(&quot;~/.env&quot; &quot;.env.local&quot;) :inherit-env t)) #+end_src&lt;/p&gt; 
&lt;p&gt;The .env files should contain variables in the format &lt;code&gt;KEY=value&lt;/code&gt;, with one variable per line. Comments (lines starting with &lt;code&gt;#&lt;/code&gt;) and empty lines are ignored.&lt;/p&gt; 
&lt;p&gt;*** Anthropic Claude&lt;/p&gt; 
&lt;p&gt;For login-based authentication (default):&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-anthropic-authentication (agent-shell-anthropic-make-authentication :login t)) #+end_src&lt;/p&gt; 
&lt;p&gt;For API key authentication:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; With string (setq agent-shell-anthropic-authentication (agent-shell-anthropic-make-authentication :api-key &quot;your-anthropic-api-key-here&quot;))&lt;/p&gt; 
&lt;p&gt;;; With function (setq agent-shell-anthropic-authentication (agent-shell-anthropic-make-authentication :api-key (lambda () (auth-source-pass-get &#39;secret &quot;anthropic-api-key&quot;)))) #+end_src&lt;/p&gt; 
&lt;p&gt;For OAuth token authentication (the =CLAUDE_CODE_OAUTH_TOKEN= we get from =claude setup-token=):&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; With string (setq agent-shell-anthropic-authentication (agent-shell-anthropic-make-authentication :oauth &quot;your-oauth-token-here&quot;))&lt;/p&gt; 
&lt;p&gt;;; With function (setq agent-shell-anthropic-authentication (agent-shell-anthropic-make-authentication :oauth (lambda () (auth-source-pass-get &quot;secret&quot; &quot;anthropic-oauth-token&quot;)))) #+end_src&lt;/p&gt; 
&lt;p&gt;For alternative Anthropic-compatible API endpoints, configure via environment variables:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-anthropic-claude-environment (agent-shell-make-environment-variables &quot;ANTHROPIC_BASE_URL&quot; &quot;&lt;a href=&quot;https://api.moonshot.cn/anthropic&quot;&gt;https://api.moonshot.cn/anthropic&lt;/a&gt;&quot; &quot;ANTHROPIC_MODEL&quot; &quot;kimi-k2-turbo-preview&quot; &quot;ANTHROPIC_SMALL_FAST_MODEL&quot; &quot;kimi-k2-turbo-preview&quot;)) #+end_src&lt;/p&gt; 
&lt;p&gt;*** Google Gemini&lt;/p&gt; 
&lt;p&gt;For login-based authentication (default):&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-google-authentication (agent-shell-google-make-authentication :login t)) #+end_src&lt;/p&gt; 
&lt;p&gt;For API key authentication:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; With string (setq agent-shell-google-authentication (agent-shell-google-make-authentication :api-key &quot;your-google-api-key-here&quot;))&lt;/p&gt; 
&lt;p&gt;;; With function (setq agent-shell-google-authentication (agent-shell-google-make-authentication :api-key (lambda () (auth-source-pass-get &#39;secret &quot;google-api-key&quot;)))) #+end_src&lt;/p&gt; 
&lt;p&gt;For Vertex AI authentication:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-google-authentication (agent-shell-google-make-authentication :vertex-ai t)) #+end_src&lt;/p&gt; 
&lt;p&gt;*** OpenAI Codex&lt;/p&gt; 
&lt;p&gt;For login-based authentication (default):&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-openai-authentication (agent-shell-openai-make-authentication :login t)) #+end_src&lt;/p&gt; 
&lt;p&gt;For API key authentication:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; With string (setq agent-shell-openai-authentication (agent-shell-openai-make-authentication :api-key &quot;your-openai-api-key-here&quot;))&lt;/p&gt; 
&lt;p&gt;;; With function (setq agent-shell-openai-authentication (agent-shell-openai-make-authentication :api-key (lambda () (auth-source-pass-get &#39;secret &quot;openai-api-key&quot;)))) #+end_src&lt;/p&gt; 
&lt;p&gt;*** Goose&lt;/p&gt; 
&lt;p&gt;For OpenAI API key authentication:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; With string (setq agent-shell-goose-authentication (agent-shell-make-goose-authentication :openai-api-key &quot;your-openai-api-key-here&quot;))&lt;/p&gt; 
&lt;p&gt;;; With function (setq agent-shell-goose-authentication (agent-shell-make-goose-authentication :openai-api-key (lambda () (auth-source-pass-get &#39;secret &quot;openai-api-key&quot;)))) #+end_src&lt;/p&gt; 
&lt;p&gt;*** Qwen Code&lt;/p&gt; 
&lt;p&gt;For OAuth login-based authentication:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-qwen-authentication (agent-shell-qwen-make-authentication :login t)) #+end_src&lt;/p&gt; 
&lt;p&gt;*** Auggie&lt;/p&gt; 
&lt;p&gt;For login-based authentication (default):&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-auggie-authentication (agent-shell-make-auggie-authentication :login t)) #+end_src&lt;/p&gt; 
&lt;p&gt;For no authentication (when using alternative authentication methods):&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-auggie-authentication (agent-shell-make-auggie-authentication :none t)) #+end_src&lt;/p&gt; 
&lt;p&gt;*** Mistral Vibe&lt;/p&gt; 
&lt;p&gt;For API key authentication:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp ;; With string (setq agent-shell-mistral-authentication (agent-shell-mistral-make-authentication :api-key &quot;your-mistral-api-key-here&quot;))&lt;/p&gt; 
&lt;p&gt;;; With function (reusing the API key configured in vibe) (setq agent-shell-mistral-authentication (agent-shell-mistral-make-authentication :api-key (lambda () (string-trim (shell-command-to-string &quot;source ~/.vibe/.env; echo $MISTRAL_API_KEY&quot;))))) #+end_src&lt;/p&gt; 
&lt;p&gt;*** Customizing Available Agents&lt;/p&gt; 
&lt;p&gt;By default, =agent-shell= includes configurations for all supported agents (Claude Agent, Gemini CLI, Codex, Goose, Qwen Code, and Auggie). You can customize which agents are available through the =agent-shell-agent-configs= variable.&lt;/p&gt; 
&lt;p&gt;** Usage&lt;/p&gt; 
&lt;p&gt;*** Quick Start&lt;/p&gt; 
&lt;p&gt;=M-x agent-shell= - Start or reuse any of the known agents.&lt;/p&gt; 
&lt;p&gt;You can select and start any of the known agent shells (see =agent-shell-agent-configs=) via the =agent-shell= interactive command and enables reusing existing shells when available. With a prefix argument (=C-u M-x agent-shell=), it forces starting a new shell session, thus instantiating multiple agent shells.&lt;/p&gt; 
&lt;p&gt;*** Specific Agent Commands&lt;/p&gt; 
&lt;p&gt;Start a specific agent shell session directly:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;=M-x agent-shell-anthropic-start-claude-code= - Start a Claude Agent session&lt;/li&gt; 
 &lt;li&gt;=M-x agent-shell-auggie-start-agent= - Start an Auggie agent session&lt;/li&gt; 
 &lt;li&gt;=M-x agent-shell-openai-start-codex= - Start a Codex agent session&lt;/li&gt; 
 &lt;li&gt;=M-x agent-shell-google-start-gemini= - Start a Gemini agent session&lt;/li&gt; 
 &lt;li&gt;=M-x agent-shell-goose-start-agent= - Start a Goose agent session&lt;/li&gt; 
 &lt;li&gt;=M-x agent-shell-cursor-start-agent= - Start a Cursor agent session&lt;/li&gt; 
 &lt;li&gt;=M-x agent-shell-kiro-start-agent= - Start a Kiro CLI agent session&lt;/li&gt; 
 &lt;li&gt;=M-x agent-shell-mistral-start-vibe= - Start a Mistral Vibe agent session&lt;/li&gt; 
 &lt;li&gt;=M-x agent-shell-qwen-start= - Start a Qwen Code agent session&lt;/li&gt; 
 &lt;li&gt;=M-x agent-shell-droid-start-agent= - Start a Factory Droid agent session&lt;/li&gt; 
 &lt;li&gt;=M-x agent-shell-pi-start-agent= - Start a Pi coding agent session&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;*** Setting a default agent for all new shells&lt;/p&gt; 
&lt;p&gt;You can set a default agent to use for all new shells started via =agent-shell= like so:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-preferred-agent-config (agent-shell-anthropic-make-claude-code-config)) #+end_src&lt;/p&gt; 
&lt;p&gt;*** Configuring MCP servers&lt;/p&gt; 
&lt;p&gt;You can configure MCP servers directly via =agent-shell=. This allows you to avoid having to repeat configurations across every agent that you use.&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-mcp-servers &#39;(((name . &quot;notion&quot;) (type . &quot;http&quot;) (headers . []) (url . &quot;&lt;a href=&quot;https://mcp.notion.com/mcp&quot;&gt;https://mcp.notion.com/mcp&lt;/a&gt;&quot;)))) #+end_src&lt;/p&gt; 
&lt;p&gt;** Running agents in Devcontainers / Docker containers (Experimental)&lt;/p&gt; 
&lt;p&gt;=agent-shell= provides rudimentary support for running agents and shell commands in containers.&lt;/p&gt; 
&lt;p&gt;Use =agent-shell-command-prefix= to prefix the command that starts the agent, or a shell command that should be run so it is executed inside the container.&lt;/p&gt; 
&lt;p&gt;*** Static command list&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-command-prefix &#39;(&quot;devcontainer&quot; &quot;exec&quot; &quot;--workspace-folder&quot; &quot;.&quot;)) #+end_src&lt;/p&gt; 
&lt;p&gt;*** Function-based configuration&lt;/p&gt; 
&lt;p&gt;For dynamic per-agent containers, provide a function that takes the current agent-shell buffer and returns the command list:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-command-prefix (lambda (buffer) (let ((config (agent-shell-get-config buffer))) (pcase (map-elt config :identifier) (&#39;claude-code &#39;(&quot;docker&quot; &quot;exec&quot; &quot;claude-dev&quot; &quot;--&quot;)) (&#39;gemini-cli &#39;(&quot;docker&quot; &quot;exec&quot; &quot;gemini-dev&quot; &quot;--&quot;)) (_ &#39;(&quot;devcontainer&quot; &quot;exec&quot; &quot;.&quot;)))))) #+end_src&lt;/p&gt; 
&lt;p&gt;*** Per-session containers&lt;/p&gt; 
&lt;p&gt;You can use different containers for different shell sessions, even of the same agent type:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-command-prefix (lambda (buffer) ;; Different container based on project (if (string-match &quot;project-a&quot; (buffer-name buffer)) &#39;(&quot;docker&quot; &quot;exec&quot; &quot;project-a-dev&quot; &quot;--&quot;) &#39;(&quot;docker&quot; &quot;exec&quot; &quot;project-b-dev&quot; &quot;--&quot;)))) #+end_src&lt;/p&gt; 
&lt;p&gt;Note that any =:environment-variables= you may have passed to =acp-make-client= will not apply to the agent process running inside the container. It&#39;s expected to inject environment variables by means of your devcontainer configuration / Dockerfile.&lt;/p&gt; 
&lt;p&gt;Next, set an =agent-shell-path-resolver-function= that resolves container paths in the local working directory, and vice versa. Agent shell provides the =agent-shell-devcontainer-resolve-path= function for use with devcontainers specifically: it reads the =workspaceFolder= specified in =.devcontainer/devcontainer.json=, or uses the default value of =/workspaces/
 &lt;repository-name&gt;
  = otherwise.
 &lt;/repository-name&gt;&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-path-resolver-function #&#39;agent-shell-devcontainer-resolve-path) #+end_src&lt;/p&gt; 
&lt;p&gt;Note that this allows the agent to access files on your local file-system. While care has been taken to restrict access to files in the local working directory, it&#39;s probably possible for a malicious agent to circumvent this restriction.&lt;/p&gt; 
&lt;p&gt;Optional: to prevent the agent running inside the container to access your local file-system altogether and to have it read/modify files inside the container directly, in addition to setting the resolver function, disable the &quot;read/write text file&quot; client capabilities:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setq agent-shell-text-file-capabilities nil) #+end_src&lt;/p&gt; 
&lt;p&gt;*** Data storage location&lt;/p&gt; 
&lt;p&gt;By default, agent-shell stores per-project data (transcripts, screenshots, etc.) under a =.agent-shell/= directory in the project root, and automatically adds that directory to =.gitignore= the first time it is created. This is a one-time operation: removing the entry from =.gitignore= will not cause it to be re-added.&lt;/p&gt; 
&lt;p&gt;You can change where this data is stored by setting =agent-shell-dot-subdir-function= to a custom function. The function receives one argument, SUBDIR (e.g. =&quot;screenshots&quot;=), and must return the absolute path to that subdirectory (without creating it).&lt;/p&gt; 
&lt;p&gt;For example, to store data under =user-emacs-directory= instead of the project tree, flattening the project path into a directory name:&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (defun my/agent-shell-dot-subdir (subdir) (let* ((cwd (string-remove-suffix &quot;/&quot; (agent-shell-cwd))) (sanitized (replace-regexp-in-string &quot;/&quot; &quot;-&quot; (string-remove-prefix &quot;/&quot; cwd)))) (expand-file-name subdir (locate-user-emacs-file (concat &quot;agent-shell/&quot; sanitized)))))&lt;/p&gt; 
&lt;p&gt;(setopt agent-shell-dot-subdir-function #&#39;my/agent-shell-dot-subdir) #+end_src&lt;/p&gt; 
&lt;p&gt;This stores data at a path like =~/.emacs.d/agent-shell/home-user-src-myproject/screenshots/=.&lt;/p&gt; 
&lt;p&gt;*** Screenshots from clipboard&lt;/p&gt; 
&lt;p&gt;You can send a screenshot from your clipboard to your shell with =agent-shell-send-clipboard-image=. Call with =C-u= to =agent-shell-send-clipboard-image-to= to select from your shells. agent-shell relies on external programs to write an image from clipboard to file as configured in =agent-shell-clipboard-image-handlers=. Preconfigured handlers are&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;=wl-paste= for Wayland desktops,&lt;/li&gt; 
 &lt;li&gt;=xclip= for Xorg,&lt;/li&gt; 
 &lt;li&gt;=pngpaste= for MacOS.&lt;/li&gt; 
 &lt;li&gt;=powershell= for Windows.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;*** Inhibiting minor modes during file writes&lt;/p&gt; 
&lt;p&gt;Some minor modes (for example, =aggressive-indent-mode=) can interfere with an agent&#39;s edits. Agent Shell can temporarily disable selected per-buffer minor modes while applying edits.&lt;/p&gt; 
&lt;p&gt;#+begin_src emacs-lisp (setopt agent-shell-write-inhibit-minor-modes &#39;(aggressive-indent-mode)) #+end_src&lt;/p&gt; 
&lt;p&gt;All of the above settings can be applied on a per-project basis using [[&lt;a href=&quot;https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html&quot;&gt;https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html&lt;/a&gt;][directory-local variables]].&lt;/p&gt; 
&lt;p&gt;** Key bindings&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;=RET= - Submits prompt.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;=M-J= - Iserts newline.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;=C-c C-c= - Interrupt current agent operation&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;=TAB and Shift-TAB= - Navigate interactive elements&lt;/p&gt; &lt;p&gt;To customize =RET= binding behaviour, you can use something like:&lt;/p&gt; &lt;p&gt;#+begin_src emacs-lisp :lexical no (use-package agent-shell :bind (:map agent-shell-mode-map (&quot;RET&quot; . newline) (&quot;M-RET&quot; . shell-maker-submit))) #+end_src&lt;/p&gt; &lt;p&gt;Or if you prefer C-c C-c to send and C-c C-k to interrupt, use the following:&lt;/p&gt; &lt;p&gt;#+begin_src emacs-lisp :lexical no (use-package agent-shell :bind (:map agent-shell-mode-map (&quot;RET&quot; . newline) (&quot;C-c C-c&quot; . shell-maker-submit) (&quot;C-c C-k&quot; . agent-shell-interrupt))) #+end_src&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;*** Evil Evil users may want to rebind ~RET~ for inserting a new line in =insert mode= and sending the prompt in =normal mode=.&lt;/p&gt; 
&lt;p&gt;Also, when viewing diffs (before accepting changes) it may be annoying having to enter =insert mode= to send keys (~y/n/p/q/etc~). If this is your case, you can make these buffers start in Emacs mode (you can always go to Evil modes if you need to with ~C-z~). #+begin_src emacs-lisp (use-package agent-shell :config ;; Evil state-specific RET behavior: insert mode = newline, normal mode = send (evil-define-key &#39;insert agent-shell-mode-map (kbd &quot;RET&quot;) #&#39;newline) (evil-define-key &#39;normal agent-shell-mode-map (kbd &quot;RET&quot;) #&#39;comint-send-input)&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;;; Configure *agent-shell-diff* buffers to start in Emacs state
(add-hook &#39;diff-mode-hook
    (lambda ()
      (when (string-match-p &quot;\\*agent-shell-diff\\*&quot; (buffer-name))
	(evil-emacs-state)))))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;#+end_src&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Customizations&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;#+BEGIN_SRC emacs-lisp :results table :colnames &#39;(&quot;Custom variable&quot; &quot;Description&quot;) :exports results (let ((rows)) (mapatoms (lambda (symbol) (when (and (string-match &quot;^agent-shell&quot; (symbol-name symbol)) (custom-variable-p symbol)) (push `(,symbol ,(car (split-string (or (documentation-property symbol &#39;variable-documentation) (get (indirect-variable symbol) &#39;variable-documentation) (get symbol &#39;variable-documentation) &quot;&quot;) &quot;\n&quot;))) rows)))) (sort rows (lambda (a b) (string&amp;lt; (symbol-name (car a)) (symbol-name (car b)))))) #+END_SRC&lt;/p&gt; 
&lt;p&gt;#+RESULTS: | Custom variable | Description | |-----------------------------------------------+---------------------------------------------------------------------------------| | agent-shell-agent-configs | The list of known agent configurations. | | agent-shell-anthropic-authentication | Configuration for Anthropic authentication. | | agent-shell-anthropic-claude-acp-command | Command and parameters for the Anthropic Claude client. | | agent-shell-anthropic-claude-command | Command and parameters for the Anthropic Claude client. | | agent-shell-anthropic-claude-environment | Environment variables for the Anthropic Claude client. | | agent-shell-anthropic-default-model-id | Default Anthropic model ID. | | agent-shell-anthropic-default-session-mode-id | Default Anthropic session mode ID. | | agent-shell-auggie-acp-command | Command and parameters for the Auggie client. | | agent-shell-auggie-authentication | Configuration for Auggie authentication. | | agent-shell-auggie-environment | Environment variables for the Auggie client. | | agent-shell-buffer-name-format | Format to use when generating agent shell buffer names. | | agent-shell-busy-indicator-frames | Frames for the busy indicator animation. | | agent-shell-clipboard-image-handlers | Handlers for saving clipboard images to a file. | | agent-shell-completion-mode-hook | Hook run after entering or leaving ‘agent-shell-completion-mode’. | | agent-shell-command-prefix | Command prefix for executing commands in a container. | | agent-shell-context-sources | Sources to consider when determining M-x agent-shell automatic context. | | agent-shell-cursor-acp-command | Command and parameters for the Cursor agent client. | | agent-shell-cursor-environment | Environment variables for the Cursor agent client. | | agent-shell-display-action | Display action for agent shell buffers. | | agent-shell-droid-acp-command | Command and parameters for the Factory Droid ACP client. | | agent-shell-droid-authentication | Configuration for Factory Droid authentication. | | agent-shell-droid-environment | Environment variables for the Factory Droid ACP client. | | agent-shell-embed-file-size-limit | Maximum file size in bytes for embedding with ContentBlock::Resource. | | agent-shell-file-completion-enabled | Non-nil automatically enables file completion when starting shells. | | agent-shell-github-acp-command | Command and parameters for the GitHub Copilot agent client. | | agent-shell-github-default-model-id | Default GitHub Copilot model ID. | | agent-shell-github-default-session-mode-id | Default GitHub Copilot session mode ID. | | agent-shell-github-environment | Environment variables for the GitHub Copilot agent client. | | agent-shell-google-authentication | Configuration for Google authentication. | | agent-shell-google-gemini-acp-command | Command and parameters for the Gemini client. | | agent-shell-google-gemini-environment | Environment variables for the Google Gemini client. | | agent-shell-goose-acp-command | Command and parameters for the Goose client. | | agent-shell-goose-authentication | Configuration for Goose authentication. | | agent-shell-goose-environment | Environment variables for the Goose client. | | agent-shell-header-style | Style for agent shell buffer headers. | | agent-shell-highlight-blocks | Whether or not to highlight source blocks. | | agent-shell-mcp-servers | List of MCP servers to initialize when creating a new session. | | agent-shell-mistral-acp-command | Command and parameters for the Mistral Vibe client. | | agent-shell-mistral-authentication | Configuration for Mistral AI authentication. | | agent-shell-mistral-default-model-id | Default Mistral AI model ID. | | agent-shell-mistral-default-session-mode-id | Default Mistral AI session mode ID. | | agent-shell-mistral-environment | Environment variables for the Mistral Vibe client. | | agent-shell-openai-authentication | Configuration for OpenAI authentication. | | agent-shell-openai-codex-acp-command | Command and parameters for the OpenAI Codex client. | | agent-shell-openai-codex-environment | Environment variables for the OpenAI Codex client. | | agent-shell-openai-default-model-id | Default Codex model ID. | | agent-shell-openai-default-session-mode-id | Default Codex session mode ID. | | agent-shell-opencode-acp-command | Command and parameters for the OpenCode client. | | agent-shell-opencode-authentication | Configuration for OpenCode authentication. | | agent-shell-opencode-default-model-id | Default OpenCode model ID. | | agent-shell-opencode-default-session-mode-id | Default OpenCode session mode ID. | | agent-shell-opencode-environment | Environment variables for the OpenCode client. | | agent-shell-path-resolver-function | Function for resolving remote paths on the local file-system, and vice versa. | | agent-shell-permission-icon | Icon displayed when shell commands require permission to execute. | | agent-shell-pi-acp-command | Command and parameters for the Pi ACP client. | | agent-shell-pi-environment | Environment variables for the Pi client. | | agent-shell-prefer-session-resume | Prefer ACP session resume over session load when both are available. | | agent-shell-prefer-viewport-interaction | Non-nil makes ‘agent-shell’ prefer viewport interaction over shell interaction. | | agent-shell-preferred-agent-config | Default agent to use for all new shells. | | agent-shell-qwen-acp-command | Command and parameters for the Qwen Code client. | | agent-shell-qwen-authentication | Configuration for Qwen Code authentication. | | agent-shell-qwen-environment | Environment variables for the Qwen Code client. | | agent-shell-screenshot-command | The program to use for capturing screenshots. | | agent-shell-section-functions | Abnormal hook run after overlays are applied (experimental). | | agent-shell-session-strategy | How to handle sessions when starting a new shell. | | agent-shell-show-busy-indicator | Non-nil to show the busy indicator animation in the header and mode line. | | agent-shell-show-config-icons | Whether to show icons in agent config selection. | | agent-shell-show-context-usage-indicator | Non-nil to show the context usage indicator in the header and mode line. | | agent-shell-show-usage-at-turn-end | Whether to display usage information when agent turn ends. | | agent-shell-show-welcome-message | Non-nil to show welcome message. | | agent-shell-text-file-capabilities | Whether agents are initialized with read/write text file capabilities. | | agent-shell-thought-process-expand-by-default | Whether thought process sections should be expanded by default. | | agent-shell-thought-process-icon | Icon displayed during the AI’s thought process. | | agent-shell-tool-use-expand-by-default | Whether tool use sections should be expanded by default. | | agent-shell-transcript-file-path-function | Function to generate the full transcript file path. | | agent-shell-ui-mode-hook | Hook run after entering or leaving ‘agent-shell-ui-mode’. | | agent-shell-user-message-expand-by-default | Whether user message sections should be expanded by default. | | agent-shell-write-inhibit-minor-modes | List of minor mode commands to inhibit during ‘fs/write_text_file’ edits. |&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Commands #+BEGIN_SRC emacs-lisp :results table :colnames &#39;(&quot;Binding&quot; &quot;Command&quot; &quot;Description&quot;) :exports results (let ((rows)) (mapatoms (lambda (symbol) (when (and (string-match &quot;^agent-shell&quot; (symbol-name symbol)) (commandp symbol)) (push `(,(string-join (seq-filter (lambda (symbol) (not (string-match &quot;menu&quot; symbol))) (mapcar (lambda (keys) (key-description keys)) (or (where-is-internal (symbol-function symbol) comint-mode-map nil nil (command-remapping &#39;comint-next-input)) (where-is-internal symbol agent-shell-mode-map nil nil (command-remapping symbol)) (where-is-internal (symbol-function symbol) agent-shell-mode-map nil nil (command-remapping symbol))))) &quot; or &quot;) ,(symbol-name symbol) ,(car (split-string (or (documentation symbol t) &quot;&quot;) &quot;\n&quot;))) rows)))) (sort rows (lambda (a b) (string&amp;lt; (cadr a) (cadr b))))) #+END_SRC&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;#+RESULTS: | Binding | Command | Description | |-----------------+---------------------------------------------------------+-------------------------------------------------------------------------------| | | agent-shell | Start or reuse an existing agent shell. | | | agent-shell--display-buffer | Toggle agent SHELL-BUFFER display. | | | agent-shell-anthropic-start-claude-code | Start an interactive Claude Agent shell. | | | agent-shell-auggie-start-agent | Start an interactive Auggie agent shell. | | | agent-shell-clear-buffer | Clear the current shell buffer. | | | agent-shell-completion-mode | Toggle agent shell completion with @ or / prefix. | | | agent-shell-cursor-start-agent | Start an interactive Cursor agent shell. | | C-
 &lt;tab&gt;
   | agent-shell-cycle-session-mode | Cycle through available session modes for the current 
  &lt;code&gt;agent-shell&#39; session. | | | agent-shell-delete-interaction-at-point | Delete interaction (request and response) at point. | | | agent-shell-droid-start-agent | Start an interactive Factory Droid agent shell. | | | agent-shell-fakes-load-session | Load and replay a traffic session from file. | | | agent-shell-github-start-copilot | Start an interactive GitHub Copilot agent shell. | | | agent-shell-google-start-gemini | Start an interactive Gemini CLI agent shell. | | | agent-shell-goose-start-agent | Start an interactive Goose agent shell. | | | agent-shell-help-menu | Transient menu for &lt;/code&gt;agent-shell&#39; commands. | | | agent-shell-insert-file | Insert a file into 
  &lt;code&gt;agent-shell&#39;. | | | agent-shell-insert-shell-command-output | Execute a shell command and insert output as a code block. | | C-c C-c | agent-shell-interrupt | Interrupt in-progress request and reject all pending permissions. | | | agent-shell-jump-to-latest-permission-button-row | Jump to the latest permission button row. | | | agent-shell-mistral-start-vibe | Start an interactive Mistral Vibe agent shell. | | | agent-shell-mode | Major mode for agent shell. | | | agent-shell-new-shell | Start a new agent shell. | | S-&amp;lt;return&amp;gt; | agent-shell-newline | Insert a newline, and move to left margin of the new line. | | C-&amp;lt;down&amp;gt; or M-n | agent-shell-next-input | Cycle forwards through input history. | | n or TAB | agent-shell-next-item | Go to next item. | | | agent-shell-next-permission-button | Jump to the next button. | | | agent-shell-open-transcript | Open the transcript file for the current &lt;/code&gt;agent-shell&#39; buffer. | | | agent-shell-openai-start-codex | Start an interactive Codex agent shell. | | | agent-shell-opencode-start-agent | Start an interactive OpenCode agent shell. | | C-c C-o | agent-shell-other-buffer | Switch to other associated buffer (viewport vs shell). | | C-
  &lt;up&gt;
    or M-p | agent-shell-previous-input | Cycle backwards through input history, saving input. | | p or 
   &lt;backtab&gt;
     | agent-shell-previous-item | Go to previous item. | | | agent-shell-previous-permission-button | Jump to the previous button. | | | agent-shell-prompt-compose | Compose an 
    &lt;code&gt;agent-shell&#39; prompt in a dedicated buffer. | | | agent-shell-queue-request | Queue or immediately send a request depending on shell busy state. | | | agent-shell-qwen-start | Start an interactive Qwen Code CLI agent shell. | | | agent-shell-remove-pending-request | Remove all pending requests or a specific request by REMOVE-INDEX. | | C-x x r | agent-shell-rename-buffer | Rename current shell buffer. | | | agent-shell-reset-logs | Reset all log buffers. | | | agent-shell-resume-pending-requests | Resume processing pending requests in the queue. | | | agent-shell-run-all-tests | Run all agent-shell tests in batch mode. | | M-r | agent-shell-search-history | Search previous input history. | | | agent-shell-send-current-file | Insert a file into &lt;/code&gt;agent-shell&#39;. | | | agent-shell-send-dwim | Send region or error at point to last accessed shell buffer in project. | | | agent-shell-send-file | Insert a file into 
    &lt;code&gt;agent-shell&#39;. | | | agent-shell-send-other-file | Prompt to send a file into &lt;/code&gt;agent-shell&#39;. | | | agent-shell-send-region | Send region to last accessed shell buffer in project. | | | agent-shell-send-screenshot | Capture a screenshot and insert it into 
    &lt;code&gt;agent-shell&#39;. | | C-c RET | agent-shell-set-session-mode | Set session mode (if any available). | | C-c C-v | agent-shell-set-session-model | Set session model. | | RET | agent-shell-submit | Submit current input. | | | agent-shell-toggle | Toggle agent shell display. | | | agent-shell-toggle-logging | Toggle logging. | | | agent-shell-ui-backward-block | Jump to the previous block. | | | agent-shell-ui-forward-block | Jump to the next block. | | | agent-shell-ui-mode | Minor mode for SUI block navigation. | | | agent-shell-ui-toggle-fragment-at-point | Toggle visibility of fragment body at point. | | | agent-shell-version | Show &lt;/code&gt;agent-shell&#39; mode version. | | | agent-shell-view-acp-logs | View agent shell ACP logs buffer. | | | agent-shell-view-traffic | View agent shell traffic buffer. | | | agent-shell-viewport-compose-cancel | Cancel prompt composition. | | | agent-shell-viewport-compose-send | Send the viewport composed prompt to the agent shell. | | | agent-shell-viewport-compose-send-and-kill | Send the viewport composed prompt to the agent shell and kill compose buffer. | | | agent-shell-viewport-compose-send-and-wait-for-response | Send the viewport composed prompt and display response in viewport. | | | agent-shell-viewport-cycle-session-mode | Cycle through available session modes. | | | agent-shell-viewport-edit-mode | Major mode for composing agent shell prompts. | | | agent-shell-viewport-interrupt | Interrupt active agent shell request. | | | agent-shell-viewport-next-item | Go to next item. | | | agent-shell-viewport-next-page | Show next interaction (request / response). | | | agent-shell-viewport-previous-item | Go to previous item. | | | agent-shell-viewport-previous-page | Show previous interaction (request / response). | | | agent-shell-viewport-refresh | Refresh viewport buffer content with current item from shell. | | | agent-shell-viewport-reply | Reply as a follow-up and compose another prompt/query. | | | agent-shell-viewport-set-session-mode | Set session mode. | | | agent-shell-viewport-set-session-model | Set session model. | | | agent-shell-viewport-view-last | Display the last request/response interaction. | | | agent-shell-viewport-view-mode | Major mode for viewing agent shell prompts (read-only). |
   &lt;/backtab&gt;
  &lt;/up&gt;
 &lt;/tab&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Filing issues When filing an issue, please keep the checkboxes from the [[&lt;a href=&quot;https://github.com/xenodium/agent-shell/raw/main/.github/ISSUE_TEMPLATE/issue.md&quot;&gt;https://github.com/xenodium/agent-shell/blob/main/.github/ISSUE_TEMPLATE/issue.md&lt;/a&gt;][issue template]] and check them off as applicable. They help ensure I have enough information to help.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Please read through this section before filing issues or feature requests. I won&#39;t be able to help unless I have enough information to help. This section shows how to get the details I need.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;em&gt;Versions&lt;/em&gt;: What version of =agent-shell=, =acp.el=, the ACP package (e.g. =claude-code-acp=), and the agent CLI (e.g. =claude=, =gemini=) are you running?&lt;/li&gt; 
 &lt;li&gt;&lt;em&gt;Steps to reproduce&lt;/em&gt;: What exact steps lead to the issue? Be specific about what you did and in what order.&lt;/li&gt; 
 &lt;li&gt;&lt;em&gt;ACP traffic&lt;/em&gt;: See [[&lt;a href=&quot;https://github.com/xenodium/agent-shell?tab=readme-ov-file#how-do-i-viewget-agent-client-protocol-traffic&quot;&gt;https://github.com/xenodium/agent-shell?tab=readme-ov-file#how-do-i-viewget-agent-client-protocol-traffic&lt;/a&gt;][how to get ACP traffic]] above. This is the most useful piece of information for diagnosing issues.&lt;/li&gt; 
 &lt;li&gt;&lt;em&gt;Screenshots&lt;/em&gt;: A screenshot helps correlate what you see with the protocol data.&lt;/li&gt; 
 &lt;li&gt;&lt;em&gt;Your agent-shell config&lt;/em&gt;: Share any relevant =agent-shell= variable settings from your Emacs config.&lt;/li&gt; 
 &lt;li&gt;&lt;em&gt;Profiling data&lt;/em&gt; (for performance issues): Use =M-x profiler-start=, reproduce the issue, then =M-x profiler-report= (and =M-x profiler-stop=). Share the report.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li&gt;FAQ&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;** Why doesn&#39;t =agent-shell= offer all slash commands/skills available in CLI agent?&lt;/p&gt; 
&lt;p&gt;=agent-shell= can only offer the slash commands/skills advertised by the agent via [[&lt;a href=&quot;https://agentclientprotocol.com&quot;&gt;https://agentclientprotocol.com&lt;/a&gt;][Agent Client Protocol]]. To view what&#39;s exposed by your agent, expand the &quot;Available /commands&quot; section. Is the command you&#39;re after missing? Please consider filing a feature-request with the respective agent (ie. Gemini CLI) or their ACP layer (claude-code-acp).&lt;/p&gt; 
&lt;p&gt;[[file:slash-commands.png]]&lt;/p&gt; 
&lt;p&gt;** Can you add support for another agent?&lt;/p&gt; 
&lt;p&gt;Does the agent support ACP ([[&lt;a href=&quot;https://agentclientprotocol.com&quot;&gt;https://agentclientprotocol.com&lt;/a&gt;][Agent Client Protocol]])? If so, =agent-shell= can likely support this agent. Some agents have ACP support built-in (like [[&lt;a href=&quot;https://github.com/google-gemini/gemini-cli&quot;&gt;https://github.com/google-gemini/gemini-cli&lt;/a&gt;][gemini-cli]]). Others require a separate ACP package (like [[&lt;a href=&quot;https://github.com/zed-industries/claude-code-acp&quot;&gt;https://github.com/zed-industries/claude-code-acp&lt;/a&gt;][claude-code-acp]] for [[&lt;a href=&quot;https://github.com/anthropics/claude-code&quot;&gt;https://github.com/anthropics/claude-code&lt;/a&gt;][claude-code]]). When filing a feature request to add a new agent, please include a link to the project supporting [[&lt;a href=&quot;https://agentclientprotocol.com&quot;&gt;https://agentclientprotocol.com&lt;/a&gt;][Agent Client Protocol]] (built-in or otherwise).&lt;/p&gt; 
&lt;p&gt;Agents without ACP support are out of scope for integrating with =agent-shell=. Having said that, if you do build an ACP layer like =claude-agent-acp=, then =agent-shell= can work with it.&lt;/p&gt; 
&lt;p&gt;** =agent-shell= not behaving as expected?&lt;/p&gt; 
&lt;p&gt;Could be the agent itself missing an [[&lt;a href=&quot;https://agentclientprotocol.com&quot;&gt;https://agentclientprotocol.com&lt;/a&gt;][Agent Client Protocol]] feature, =agent-shell= missing the feature, or both 😃 So which one is it? It&#39;s hard to tell unless we look at [[&lt;a href=&quot;https://agentclientprotocol.com&quot;&gt;https://agentclientprotocol.com&lt;/a&gt;][Agent Client Protocol]] traffic between the two.&lt;/p&gt; 
&lt;p&gt;** Is shx supported? No. There are reports that [[&lt;a href=&quot;https://github.com/xenodium/agent-shell/issues/543&quot;&gt;https://github.com/xenodium/agent-shell/issues/543&lt;/a&gt;][it does not work]] with agent-shell. ** How do I view/get [[&lt;a href=&quot;https://agentclientprotocol.com&quot;&gt;https://agentclientprotocol.com&lt;/a&gt;][Agent Client Protocol]] traffic?&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;=M-x agent-shell-toggle-logging= (make sure logging is ON).&lt;/li&gt; 
 &lt;li&gt;Reproduce the issue&lt;/li&gt; 
 &lt;li&gt;=M-x agent-shell-view-traffic=&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Browse through traffic and see if you can spot the issue. For example, if you see a request sent by the agent asking for user permission, but =agent-shell= isn&#39;t surfacing this permission, it looks like perhaps =agent-shell= is missing a feature.&lt;/p&gt; 
&lt;p&gt;For example, here&#39;s what a [[&lt;a href=&quot;https://agentclientprotocol.com/protocol/schema#session%2Frequest-permission&quot;&gt;https://agentclientprotocol.com/protocol/schema#session%2Frequest-permission&lt;/a&gt;][session/request_permission]] request would look like from the traffic viewer.&lt;/p&gt; 
&lt;p&gt;[[file:traffic.png]]&lt;/p&gt; 
&lt;p&gt;Sometimes including a traffic screenshot in an issue is enough. Other times including the full traffic is needed. From the traffic viewer, you can =M-x acp-traffic-save-to= to save as =.traffic=.&lt;/p&gt; 
&lt;p&gt;** Where should I file bug or feature request?&lt;/p&gt; 
&lt;p&gt;*** Agent issues or feature requests&lt;/p&gt; 
&lt;p&gt;If you&#39;re able to determine the agent is missing a feature (or a bug is present) in their [[&lt;a href=&quot;https://agentclientprotocol.com&quot;&gt;https://agentclientprotocol.com&lt;/a&gt;][Agent Client Protocol]] implementation, please file an issue directly with the agent folks. For example:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/agentclientprotocol/claude-agent-acp&quot;&gt;https://github.com/agentclientprotocol/claude-agent-acp&lt;/a&gt;][claude-agent-acp]]: For Claude Agent.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/zed-industries/codex-acp&quot;&gt;https://github.com/zed-industries/codex-acp&lt;/a&gt;][codex-acp]]: For Codex.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/google-gemini/gemini-cli&quot;&gt;https://github.com/google-gemini/gemini-cli&lt;/a&gt;][Gemini CLI]].&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://block.github.io/goose/docs/getting-started/installation&quot;&gt;https://block.github.io/goose/docs/getting-started/installation&lt;/a&gt;][Goose]].&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/QwenLM/qwen-code&quot;&gt;https://github.com/QwenLM/qwen-code&lt;/a&gt;][Qwen Code]].&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;*** =agent-shell= issues or feature requests&lt;/p&gt; 
&lt;p&gt;Alternatively, if you noticed =agent-shell= is missing a feature (or has a bug), please [[&lt;a href=&quot;https://github.com/xenodium/agent-shell/issues&quot;&gt;https://github.com/xenodium/agent-shell/issues&lt;/a&gt;][file an agent-shell issue]].&lt;/p&gt; 
&lt;p&gt;*** Not sure where to file an issue?&lt;/p&gt; 
&lt;p&gt;File [[&lt;a href=&quot;https://github.com/xenodium/agent-shell/issues&quot;&gt;https://github.com/xenodium/agent-shell/issues&lt;/a&gt;][in agent-shell]], but please try to provide details, so I can determine whether =agent-shell= or the agent itself needs work. Traffic data would be very useful here. Provide a screenshot or a .traffic file if you think it&#39;ll help. See [[&lt;a href=&quot;https://github.com/xenodium/agent-shell?tab=readme-ov-file#how-do-i-viewget-agent-client-protocol-traffic&quot;&gt;https://github.com/xenodium/agent-shell?tab=readme-ov-file#how-do-i-viewget-agent-client-protocol-traffic&lt;/a&gt;][how to get ACP traffic]].&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Contributing&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;See [[file:CONTRIBUTING.org][&lt;a href=&quot;http://CONTRIBUTING.org&quot;&gt;CONTRIBUTING.org&lt;/a&gt;]].&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Contributors&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;#+HTML: &lt;a href=&quot;https://github.com/xenodium/agent-shell/graphs/contributors&quot;&gt; #+HTML: &lt;img src=&quot;https://contrib.rocks/image?repo=xenodium/agent-shell&quot; /&gt; #+HTML: &lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Made with [[&lt;a href=&quot;https://contrib.rocks&quot;&gt;https://contrib.rocks&lt;/a&gt;][contrib.rocks]].&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/aa4b8a2212f0d86ceffd2d05566626d11dd4e919f23f05ae444e7cc0962c6cd3/xenodium/agent-shell" medium="image" />
      
    </item>
    
    <item>
      <title>eval-exec/neomacs</title>
      <link>https://github.com/eval-exec/neomacs</link>
      <description>&lt;p&gt;NEO Emacs (WIP): A GPU-powered Emacs written in Rust with a modern display engine. Aiming for modern design/multi-threaded Elisp, 10x performance and 100% Emacs compatibility. 🚀 Inline 4K images/4K videos/WPEWebKit using GPU acceleration, DMA-BUF, ZERO-COPY. Rich animation effects support.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&quot;I started Neomacs because I love Emacs, I respect Emacs, and I want to evolve the legendary Emacs into the ultimate modern powerhouse.&quot; — &lt;em&gt;Eval Exec&lt;/em&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;✨ &lt;em&gt;&quot;While other editors can save your files, only Emacs can save your soul.&quot;&lt;/em&gt; ✨&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/eval-exec/neomacs/main/assets/banner.svg?sanitize=true&quot; alt=&quot;NEOMACS banner&quot; /&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/eval-exec/neomacs/actions/workflows/ci.yml&quot;&gt;&lt;img src=&quot;https://github.com/eval-exec/neomacs/actions/workflows/ci.yml/badge.svg?sanitize=true&quot; alt=&quot;CI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/eval-exec/neomacs/main/#features&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/status-alpha-blueviolet?style=for-the-badge&quot; alt=&quot;Status: Alpha&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/eval-exec/neomacs/main/#building&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/rust-1.93.1-orange?style=for-the-badge&amp;amp;logo=rust&quot; alt=&quot;Rust 1.93.1&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/eval-exec/neomacs/main/#license&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/license-GPL--3.0-blue?style=for-the-badge&quot; alt=&quot;License: GPL-3.0&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;h1&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/sponsors/eval-exec&quot;&gt;❤️ Sponsor Neomacs&lt;/a&gt;&lt;/strong&gt;&lt;/h1&gt; 
&lt;p&gt;Neomacs is a long-term project that takes significant ongoing work to build, test, and maintain. If you want to support its development, please consider sponsoring it on &lt;a href=&quot;https://github.com/sponsors/eval-exec&quot;&gt;❤️ GitHub Sponsors&lt;/a&gt;.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Neomacs is in active alpha development. Expect rough edges, breaking changes, and missing features. Contributions and bug reports are very welcome!&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Fork notice:&lt;/strong&gt; Neomacs is a hard fork of GNU Emacs, forked from commit &lt;a href=&quot;https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=705c0e3729bf53db9e84ae7c8b932ebc3b2da934&quot;&gt;&lt;code&gt;705c0e3729&lt;/code&gt;&lt;/a&gt;. The changes are too invasive to ever be accepted upstream, so we did not preserve the original git history to keep the repository lightweight. If you need the full Emacs git history for reference, open an issue, and we can re-add it.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Why a fork, not from scratch?&lt;/strong&gt; Neomacs aims for 100% compatibility with official GNU Emacs — every config, package, and workflow should just work. By forking, we keep the original Emacs C code as a reference and test oracle: we can verifying that each Rust rewrite produces identical behavior, ensuring nothing breaks as subsystems are replaced one by one.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h2&gt;The Problem&lt;/h2&gt; 
&lt;p&gt;Emacs is a 40-year-old C codebase that hasn&#39;t kept up with modern hardware or software engineering:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Display engine&lt;/strong&gt; — ~50,000 lines of C in &lt;code&gt;xdisp.c&lt;/code&gt;, designed for text terminals in the 1980s. CPU-only rendering, no GPU acceleration, no native video/animations, no smooth visual effects 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;Large images&lt;/strong&gt; — rendering slows down significantly&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Video playback&lt;/strong&gt; — not natively supported&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Modern animations&lt;/strong&gt; — no smooth cursor movement, buffer transitions, or visual effects&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Web content&lt;/strong&gt; — limited browser integration&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;GPU utilization&lt;/strong&gt; — everything runs on CPU while your GPU sits idle&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Elisp performance&lt;/strong&gt; — no inline caching, stop-the-world GC, dynamic dispatch overhead. Even with native-comp (AOT), Elisp lacks runtime JIT optimization, speculative inlining, and concurrent GC — leaving significant performance on the table&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Unsafe C codebase&lt;/strong&gt; — ~300,000 lines of unsafe C with manual memory management, monolithic architecture (runtime and editor entangled), single-threaded design that prevents real concurrency&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;The Solution&lt;/h2&gt; 
&lt;p&gt;Throw it all away and start fresh.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Neomacs&lt;/strong&gt; is rewriting Emacs from the ground up in &lt;strong&gt;Rust&lt;/strong&gt; — starting with the display engine and expanding to the core:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;GPU display engine&lt;/strong&gt; &lt;em&gt;(done)&lt;/em&gt; — ~4,000 lines of Rust replacing ~50,000 lines of legacy C, powered by wgpu (Vulkan/Metal/DX12/OpenGL)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Rust layout engine&lt;/strong&gt; &lt;em&gt;(done)&lt;/em&gt; — bypasses &lt;code&gt;xdisp.c&lt;/code&gt; entirely, reads buffer text via FFI and computes layout in Rust&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Inline video/images/WebKit&lt;/strong&gt; &lt;em&gt;(done)&lt;/em&gt; — 4K video, GPU-decoded images, and WPE WebKit browser views embedded directly in buffers&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;21 scroll effects, 8 cursor modes, 10 buffer transitions&lt;/strong&gt; &lt;em&gt;(done)&lt;/em&gt; — GPU-accelerated animations running on the render thread at display refresh rate&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Zero-copy DMA-BUF&lt;/strong&gt; &lt;em&gt;(done)&lt;/em&gt; — efficient GPU texture sharing (Linux)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Rewrite entire Emacs core in Rust&lt;/strong&gt; &lt;em&gt;(in progress)&lt;/em&gt; — replacing all ~300,000 lines of C with safe, modern Rust: Elisp runtime, evaluator, bytecode VM, GC, buffer/window/frame subsystems, and all editor internals&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;True multi-threaded Elisp&lt;/strong&gt; &lt;em&gt;(planned)&lt;/em&gt; — real concurrency for the Lisp machine, not just cooperative threading&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;10x performance, and 100% Emacs compatibility.&lt;/strong&gt; &lt;em&gt;(planned)&lt;/em&gt; — Rust-optimized Lisp machine with JIT compilation and inline caching&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Showcase&lt;/h2&gt; 
&lt;p&gt;🎬 Neomacs youtube video&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://youtu.be/WZRWWuuNZX0?si=yHUy1lUDTznUbTMx&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/WZRWWuuNZX0/maxresdefault.jpg&quot; alt=&quot;Neomacs Showcase Video&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Animations (Cursor, Buffer Switch, Scroll)&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/user-attachments/assets/85b7ee7b-3f4a-4cd2-a84f-86a91d052f11&quot;&gt;https://github.com/user-attachments/assets/85b7ee7b-3f4a-4cd2-a84f-86a91d052f11&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;GPU Text with Rounded Box Faces&lt;/h3&gt; 
&lt;img width=&quot;1868&quot; alt=&quot;Round corner box face attribute&quot; src=&quot;https://github.com/user-attachments/assets/65db32f0-8852-4091-bd99-d61f839e0c95&quot; /&gt; 
&lt;h3&gt;Inline 4K Images&lt;/h3&gt; 
&lt;p&gt;GPU-decoded directly — no CPU cost, won&#39;t block Emacs main thread.&lt;/p&gt; 
&lt;img width=&quot;1447&quot; alt=&quot;Inline 4K images in Emacs buffer&quot; src=&quot;https://github.com/user-attachments/assets/325719dc-dac4-4bd8-8fd9-e638450a489f&quot; /&gt; 
&lt;h3&gt;Inline Web Browser (WPE WebKit)&lt;/h3&gt; 
&lt;p&gt;GPU backend, DMA-BUF zero-copy.&lt;/p&gt; 
&lt;img width=&quot;1851&quot; alt=&quot;Inline WPE WebKit browser in Emacs buffer&quot; src=&quot;https://github.com/user-attachments/assets/10e833ca-34b2-4200-b368-09f7510f50d0&quot; /&gt; 
&lt;h3&gt;Inline Terminal (Alacritty)&lt;/h3&gt; 
&lt;p&gt;GPU-backed terminal emulator embedded in Emacs buffer.&lt;/p&gt; 
&lt;img width=&quot;1448&quot; alt=&quot;Inline Alacritty terminal in Emacs buffer&quot; src=&quot;https://github.com/user-attachments/assets/175ffd75-78b5-46c9-9562-61cfd705e358&quot; /&gt; 
&lt;h3&gt;Inline 4K Video Playback&lt;/h3&gt; 
&lt;p&gt;DMA-BUF zero-copy, GPU backend — no CPU cost.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/user-attachments/assets/275c6d9a-fced-44f6-8f43-3bbd2984d672&quot;&gt;https://github.com/user-attachments/assets/275c6d9a-fced-44f6-8f43-3bbd2984d672&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;h3&gt;Working Now&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Feature&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;GPU Text Rendering&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Hardware-accelerated text via wgpu (Vulkan/Metal/DX12/OpenGL)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Video Playback&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;GStreamer + VA-API hardware decode with DMA-BUF zero-copy&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Cursor Animations&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;8 modes with 7 movement styles and configurable spring trail&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Scroll Animations&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;21 scroll effects with 5 easing functions&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Buffer Transitions&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;10 buffer-switch effects (crossfade, slide, page-curl, etc.)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;DMA-BUF Zero-Copy&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;GPU-to-GPU texture sharing via Vulkan HAL (no CPU readback)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Inline Images&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;GPU-accelerated image rendering in buffers&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Inline WebKit&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;WPE WebKit browser views embedded in buffers&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Animations&lt;/h3&gt; 
&lt;p&gt;All animations run on the GPU render thread at display refresh rate, independent of the Emacs redisplay. Configure everything from Elisp.&lt;/p&gt; 
&lt;h4&gt;Cursor&lt;/h4&gt; 
&lt;p&gt;&lt;strong&gt;8 particle/visual modes&lt;/strong&gt; (Neovide-inspired):&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Mode&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;none&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;No animation, instant movement&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;smooth&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Smooth interpolated movement (default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;railgun&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Particles shoot backward from cursor&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;torpedo&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Comet-like trail follows cursor&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;pixiedust&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Sparkly particles scatter around cursor&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;sonicboom&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Shockwave ring expands from cursor&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;ripple&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Concentric rings emanate outward&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;wireframe&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Animated outline glow&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;7 movement styles&lt;/strong&gt; controlling how the cursor interpolates between positions:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Style&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;exponential&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Smooth deceleration, no fixed duration (uses speed param)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;spring&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Critically-damped spring, Neovide-like feel (default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;ease-out-quad&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Gentle deceleration curve&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;ease-out-cubic&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Stronger deceleration curve&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;ease-out-expo&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Sharp deceleration curve&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;ease-in-out-cubic&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Smooth S-curve&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;linear&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Constant speed&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;The spring style also supports a &lt;strong&gt;4-corner trail effect&lt;/strong&gt; where leading corners snap ahead and trailing corners stretch behind, controlled by a &lt;code&gt;trail-size&lt;/code&gt; parameter (0.0-1.0).&lt;/p&gt; 
&lt;h4&gt;Buffer Switch (Crossfade/Transition)&lt;/h4&gt; 
&lt;p&gt;&lt;strong&gt;10 buffer-switch effects&lt;/strong&gt; triggered when the visible buffer changes:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Effect&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;none&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Instant switch&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;crossfade&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alpha blend between old and new (default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;slide-left/right/up/down&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Directional slide transitions&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;scale-fade&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scale and fade&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;push&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;New buffer pushes old buffer out&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;blur&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Blur transition&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;page-curl&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;3D page-turning effect&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Scroll&lt;/h4&gt; 
&lt;p&gt;&lt;strong&gt;21 scroll animation effects&lt;/strong&gt; organized into categories:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;#&lt;/th&gt; 
   &lt;th&gt;Effect&lt;/th&gt; 
   &lt;th&gt;Category&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;0&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;slide&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;2D&lt;/td&gt; 
   &lt;td&gt;Content slides in scroll direction (default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;1&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;crossfade&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;2D&lt;/td&gt; 
   &lt;td&gt;Alpha blend between old and new positions&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;2&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;scale-zoom&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;2D&lt;/td&gt; 
   &lt;td&gt;Destination zooms from 95% to 100%&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;3&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;fade-edges&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;2D&lt;/td&gt; 
   &lt;td&gt;Lines fade at viewport edges&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;4&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;cascade&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;2D&lt;/td&gt; 
   &lt;td&gt;Lines drop in with stagger delay&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;5&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;parallax&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;2D&lt;/td&gt; 
   &lt;td&gt;Layers scroll at different speeds&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;6&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;tilt&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;3D&lt;/td&gt; 
   &lt;td&gt;Subtle 3D perspective tilt&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;7&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;page-curl&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;3D&lt;/td&gt; 
   &lt;td&gt;Page turning effect&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;8&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;card-flip&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;3D&lt;/td&gt; 
   &lt;td&gt;Card flips around X-axis&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;9&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;cylinder-roll&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;3D&lt;/td&gt; 
   &lt;td&gt;Content wraps around cylinder&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;10&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;wobbly&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Deformation&lt;/td&gt; 
   &lt;td&gt;Jelly-like deformation&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;11&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;wave&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Deformation&lt;/td&gt; 
   &lt;td&gt;Sine-wave distortion&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;12&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;per-line-spring&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Deformation&lt;/td&gt; 
   &lt;td&gt;Each line springs independently&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;13&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;liquid&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Deformation&lt;/td&gt; 
   &lt;td&gt;Noise-based fluid distortion&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;14&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;motion-blur&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Post-process&lt;/td&gt; 
   &lt;td&gt;Vertical blur during scroll&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;15&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;chromatic-aberration&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Post-process&lt;/td&gt; 
   &lt;td&gt;RGB channel separation&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;16&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ghost-trails&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Post-process&lt;/td&gt; 
   &lt;td&gt;Semi-transparent afterimages&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;17&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;color-temperature&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Post-process&lt;/td&gt; 
   &lt;td&gt;Warm/cool tint by direction&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;18&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;crt-scanlines&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Post-process&lt;/td&gt; 
   &lt;td&gt;Retro scanline overlay&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;19&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;depth-of-field&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Post-process&lt;/td&gt; 
   &lt;td&gt;Center sharp, edges dim&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;20&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;typewriter-reveal&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Creative&lt;/td&gt; 
   &lt;td&gt;Lines appear left-to-right&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;5 scroll easing functions:&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;#&lt;/th&gt; 
   &lt;th&gt;Easing&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;0&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ease-out-quad&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Standard deceleration (default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;1&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ease-out-cubic&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Stronger deceleration&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;2&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;spring&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Critically damped spring with overshoot&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;3&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;linear&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Constant speed&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;4&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ease-in-out-cubic&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Smooth S-curve&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Configuration&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-elisp&quot;&gt;;; All-in-one configuration:
;; (neomacs-set-animation-config
;;   CURSOR-ENABLED CURSOR-SPEED CURSOR-STYLE CURSOR-DURATION
;;   CROSSFADE-ENABLED CROSSFADE-DURATION
;;   SCROLL-ENABLED SCROLL-DURATION
;;   &amp;amp;optional SCROLL-EFFECT SCROLL-EASING TRAIL-SIZE)

;; Example: spring cursor, crossfade buffer switch, page-curl scroll with spring easing
(neomacs-set-animation-config t 15.0 &#39;spring 150 t 200 t 150 7 2 0.7)

;; Example: fast linear cursor, no crossfade, wobbly scroll
(neomacs-set-animation-config t 20.0 &#39;linear 100 nil 200 t 200 10 0 0.0)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;The Ambitious Vision&lt;/h3&gt; 
&lt;p&gt;Neomacs aims to be &lt;strong&gt;the most capable and beautiful Emacs ever built&lt;/strong&gt;, rewriting its internals in Rust:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Rich media&lt;/strong&gt; — 4K video, PDF rendering, image manipulation directly in buffers&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;GPU-native&lt;/strong&gt; — hardware-accelerated rendering, shader effects, 120fps animations&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;GPU terminal&lt;/strong&gt; — Rust-based terminal emulator replacing slow &lt;code&gt;term.el&lt;/code&gt;/&lt;code&gt;ansi-term&lt;/code&gt;/vterm&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cross-platform&lt;/strong&gt; — Linux (Vulkan), macOS (Metal), Windows (Vulkan/DX12)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Rust core&lt;/strong&gt; — rewrite Emacs C internals in Rust for memory safety and performance&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multi-threaded Elisp&lt;/strong&gt; — true concurrency for the Lisp machine, enabling parallel Elisp execution&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;10x faster Elisp&lt;/strong&gt; — Rust-optimized Lisp interpreter/compiler to dramatically speed up Elisp&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The goal: &lt;strong&gt;Make Emacs as powerful and beautiful as it deserves to be.&lt;/strong&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Architecture&lt;/h2&gt; 
&lt;p&gt;Neomacs is rewriting Emacs from C to Rust with clean module boundaries. The goal is a layered architecture where the Elisp runtime is a self-contained core, editor subsystems are independent modules communicating through defined APIs, and the rendering engine runs on a separate GPU thread.&lt;/p&gt; 
&lt;h3&gt;Current State&lt;/h3&gt; 
&lt;p&gt;The rendering engine and layout engine are already in Rust. The Emacs C core still runs the Elisp evaluator, GC, and editor subsystems — connected to Rust via FFI channels.&lt;/p&gt; 
&lt;h3&gt;Target Architecture&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────────┐
│                         Neomacs (Rust)                          │
│                                                                 │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │                  Elisp Runtime Core                      │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐       │   │
│  │  │ Evaluator   │  │ Bytecode VM │  │ GC/Allocator│       │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘       │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐       │   │
│  │  │ LispObject  │  │Symbol Table │  │ Type System │       │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘       │   │
│  └──────────────────────────────────────────────────────────┘   │
│                             │                                   │
│                             ▼                                   │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │                       Runtime API                        │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐       │   │
│  │  │register_type│  │register_root│  │define_func  │       │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘       │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐       │   │
│  │  │  run_hook   │  │  specbind   │  │signal_error │       │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘       │   │
│  └──────────────────────────────────────────────────────────┘   │
│                             │                                   │
│                             ▼                                   │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │                     Editor Modules                        │  │
│  │  ┌────────┐  ┌────────┐  ┌────────┐  ┌────────┐  ┌───────┐│  │
│  │  │ Buffer │  │ Window │  │ Frame  │  │Keyboard│  │Process││  │
│  │  └────────┘  └────────┘  └────────┘  └────────┘  └───────┘│  │
│  │  ┌────────┐  ┌────────┐  ┌────────┐  ┌────────┐  ┌───────┐│  │
│  │  │ Font   │  │ Image  │  │File IO │  │ Reader │  │ Data  ││  │
│  │  └────────┘  └────────┘  └────────┘  └────────┘  └───────┘│  │
│  └───────────────────────────────────────────────────────────┘  │
│                             │                                   │
│                             ▼                                   │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │                    Rendering Engine                       │  │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐        │  │
│  │  │Layout Engine│  │wgpu Renderer│  │ Animations  │        │  │
│  │  └─────────────┘  └─────────────┘  └─────────────┘        │  │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐        │  │
│  │  │    winit    │  │   WebKit    │  │ GStreamer   │        │  │
│  │  └─────────────┘  └─────────────┘  └─────────────┘        │  │
│  └───────────────────────────────────────────────────────────┘  │
│                                                                 │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │                      Threading                            │  │
│  │   ┌────────────┐                       ┌────────────┐     │  │
│  │   │EmacsThread │                       │RenderThread│     │  │
│  │   └────────────┘                       └────────────┘     │  │
│  │      │                                      ▲             │  │
│  │      ├── FrameGlyphBuffer (crossbeam) ──────┘             │  │
│  │      └── InputEvent (crossbeam) ────────────────────┐     │  │
│  │                                                     │     │  │
│  └───────────────────────────────────────────────────────────┘  │
│                                                                 │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │                       Backends                            │  │
│  │   ┌──────────┐         ┌──────────┐       ┌──────────┐    │  │
│  │   │  Vulkan  │         │  Metal   │       │ DX12/GL  │    │  │
│  │   └──────────┘         └──────────┘       └──────────┘    │  │
│  └───────────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Design principles:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Elisp Runtime Core&lt;/strong&gt; is a self-contained Rust crate. It owns LispObject, the evaluator, bytecode VM, GC, specpdl, and symbol table. It does NOT know about buffers, windows, frames, or any editor concept.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Runtime API&lt;/strong&gt; is a trait-based interface. Editor modules register their types (with GC trace descriptors), roots, and primitives. The GC traces registered types generically — no hardcoded &lt;code&gt;mark_kboards()&lt;/code&gt; or &lt;code&gt;mark_terminals()&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Editor Modules&lt;/strong&gt; are independent. Each owns its data structures and exposes them to Lisp through the Runtime API. Modules do not reach into each other&#39;s internals.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Rendering Engine&lt;/strong&gt; runs on a separate GPU thread, communicating via crossbeam channels (&lt;code&gt;FrameGlyphBuffer&lt;/code&gt; down, &lt;code&gt;InputEvent&lt;/code&gt; up). Already implemented.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Why Rust?&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Memory safety&lt;/strong&gt; without garbage collection&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Zero-cost abstractions&lt;/strong&gt; for high-performance rendering&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Excellent FFI&lt;/strong&gt; with C (Emacs core)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Modern tooling&lt;/strong&gt; (Cargo, async, traits)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Growing ecosystem&lt;/strong&gt; for graphics (wgpu, winit, cosmic-text)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Why wgpu?&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Cross-platform&lt;/strong&gt; — single API for Vulkan, Metal, DX12, and OpenGL&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Safe Rust API&lt;/strong&gt; — no unsafe Vulkan/Metal code in application&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;WebGPU standard&lt;/strong&gt; — future-proof API design&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Active development&lt;/strong&gt; — used by Firefox, Bevy, and many others&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For an in-depth analysis of the current Emacs C architecture, why it&#39;s hard to rewrite, and why Elisp is slow, see &lt;a href=&quot;https://raw.githubusercontent.com/eval-exec/neomacs/main/docs/elisp-core-analysis.md&quot;&gt;docs/elisp-core-analysis.md&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Building&lt;/h2&gt; 
&lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Rust&lt;/strong&gt; (stable, 1.93+)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;GStreamer&lt;/strong&gt; (optional, for video playback)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;WPE WebKit&lt;/strong&gt; (optional, for inline browser, Linux only)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;VA-API&lt;/strong&gt; (optional, for hardware video decode on Linux)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;GNU Emacs&lt;/strong&gt; (optional, for pre-compiling .el files — speeds up bootstrap ~17x)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Build commands in this README are run from the repository root.&lt;/p&gt; 
&lt;h3&gt;Quick Start&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Optional (recommended): use the repo dev shell (handles all dependencies)
nix develop --accept-flake-config

# Build Neomacs (compiles Rust, bootstraps Elisp, generates pdump)
cargo xtask fresh-build --release

# Run
./target/release/neomacs
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Linux (Arch Linux)&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Install dependencies
sudo pacman -S --needed \
  base-devel autoconf automake texinfo clang git pkg-config \
  gtk4 glib2 cairo \
  gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad \
  wpewebkit wpebackend-fdo \
  wayland wayland-protocols \
  mesa libva \
  libjpeg-turbo libtiff giflib libpng librsvg libwebp \
  ncurses gnutls libxml2 sqlite jansson tree-sitter \
  gmp acl libxpm \
  libgccjit

# Install Rust (if not already installed)
curl --proto &#39;=https&#39; --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Build Neomacs (compiles Rust, bootstraps Elisp, generates pdump)
cargo xtask fresh-build --release

# Run
./target/release/neomacs
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;macOS (Experimental)&lt;/h3&gt; 
&lt;p&gt;macOS support is experimental — see &lt;a href=&quot;https://github.com/eval-exec/neomacs/issues/22&quot;&gt;issue #22&lt;/a&gt; for status.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Install dependencies (Homebrew)
brew install pkgconf \
  glib cairo \
  gstreamer gst-plugins-base gst-plugins-good \
  jpeg-turbo libtiff giflib libpng librsvg webp \
  gnutls libxml2 sqlite jansson tree-sitter gmp

# gmp-mpfr-sys is built with system GMP support. Its build script probes
# GMP with the C compiler directly, so Homebrew&#39;s keg must be visible to
# both the C compiler and linker.
export CPATH=&quot;$(brew --prefix gmp)/include${CPATH:+:$CPATH}&quot;
export LIBRARY_PATH=&quot;$(brew --prefix gmp)/lib${LIBRARY_PATH:+:$LIBRARY_PATH}&quot;

# Install Rust (if not already installed)
curl --proto &#39;=https&#39; --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Build Neomacs
cargo xtask fresh-build --release

# Run
./target/release/neomacs
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;NixOS / Nix&lt;/h3&gt; 
&lt;p&gt;Neomacs uses &lt;a href=&quot;https://github.com/eval-exec/nix-wpe-webkit&quot;&gt;nix-wpe-webkit&lt;/a&gt; for the WPE WebKit dependency. Pre-built binaries are available via Cachix (~60MB download instead of ~1 hour build).&lt;/p&gt; 
&lt;p&gt;The &lt;code&gt;flake.nix&lt;/code&gt; includes &lt;code&gt;nixConfig&lt;/code&gt; for the Cachix cache. Pass &lt;code&gt;--accept-flake-config&lt;/code&gt; to use it automatically, or configure it system-wide:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;NixOS&lt;/strong&gt; — add to your configuration (e.g., &lt;code&gt;/etc/nixos/configuration.nix&lt;/code&gt;):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-nix&quot;&gt;{
  nix.settings.substituters = [ &quot;https://nix-wpe-webkit.cachix.org&quot; ];
  nix.settings.trusted-public-keys = [ &quot;nix-wpe-webkit.cachix.org-1:ItCjHkz1Y5QcwqI9cTGNWHzcox4EqcXqKvOygxpwYHE=&quot; ];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Non-NixOS&lt;/strong&gt; — add to &lt;code&gt;~/.config/nix/nix.conf&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;extra-substituters = https://nix-wpe-webkit.cachix.org
extra-trusted-public-keys = nix-wpe-webkit.cachix.org-1:ItCjHkz1Y5QcwqI9cTGNWHzcox4EqcXqKvOygxpwYHE=
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Build with Nix&lt;/h4&gt; 
&lt;p&gt;&lt;strong&gt;Option 1&lt;/strong&gt; — Trust the &lt;code&gt;nixConfig&lt;/code&gt; in &lt;code&gt;flake.nix&lt;/code&gt; (simplest):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;nix build --accept-flake-config

# Or enter development shell
nix develop --accept-flake-config
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Option 2&lt;/strong&gt; — Pass Cachix flags directly:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;nix build \
  --extra-substituters &quot;https://nix-wpe-webkit.cachix.org&quot; \
  --extra-trusted-public-keys &quot;nix-wpe-webkit.cachix.org-1:ItCjHkz1Y5QcwqI9cTGNWHzcox4EqcXqKvOygxpwYHE=&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Both options require your user to be in &lt;code&gt;trusted-users&lt;/code&gt; in &lt;code&gt;/etc/nix/nix.conf&lt;/code&gt; (e.g., &lt;code&gt;trusted-users = root @wheel your-username&lt;/code&gt;), or configure the cache system-wide as shown above.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h4&gt;Manual build (inside dev shell)&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cargo xtask fresh-build --release
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Platform Support&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Linux&lt;/strong&gt; – primary supported platform. The steps above document a validated Arch Linux workflow, but other distributions should follow similar dependency installation with their package manager.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;macOS&lt;/strong&gt; – experimental. See &lt;a href=&quot;https://github.com/eval-exec/neomacs/issues/22&quot;&gt;issue #22&lt;/a&gt; for status.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt; – planned.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Mobile (Android/iOS)&lt;/strong&gt; – planned.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;WebAssembly (WASM)&lt;/strong&gt; – planned.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Roadmap&lt;/h2&gt; 
&lt;p&gt;The Rust display engine rewrite is &lt;strong&gt;complete&lt;/strong&gt; — the Rust layout engine is now the only rendering path, bypassing &lt;code&gt;xdisp.c&lt;/code&gt; entirely. See &lt;a href=&quot;https://raw.githubusercontent.com/eval-exec/neomacs/main/docs/rust-display-engine.md&quot;&gt;docs/rust-display-engine.md&lt;/a&gt; for the design document.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Completed:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;GPU text rendering, face resolution, syntax highlighting&lt;/li&gt; 
 &lt;li&gt;Display properties, overlays, invisible text, line numbers&lt;/li&gt; 
 &lt;li&gt;Mode-line, header-line, tab-line&lt;/li&gt; 
 &lt;li&gt;Variable-width fonts, BiDi text layout&lt;/li&gt; 
 &lt;li&gt;Word-wrap, truncation, fringes, margins&lt;/li&gt; 
 &lt;li&gt;Images, video, WebKit embedding&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;In progress:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Rewriting the entire Emacs C core in Rust (Elisp runtime, evaluator, bytecode VM, GC, buffer/window/frame subsystems)&lt;/li&gt; 
 &lt;li&gt;macOS and cross-platform support&lt;/li&gt; 
 &lt;li&gt;TUI (terminal) renderer&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Planned:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;True multi-threaded Elisp&lt;/li&gt; 
 &lt;li&gt;JIT compilation and inline caching for 10x Elisp performance&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Contributions welcome! Areas where help is needed:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Graphics programmers&lt;/strong&gt; — shader effects, rendering optimizations&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Rust developers&lt;/strong&gt; — architecture, performance, safety&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Emacs hackers&lt;/strong&gt; — Lisp API design, integration testing&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt; — tutorials, API docs, examples&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Acknowledgments&lt;/h2&gt; 
&lt;p&gt;Built with:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://wgpu.rs/&quot;&gt;wgpu&lt;/a&gt; — Cross-platform GPU rendering (Vulkan/Metal/DX12/GL)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rust-windowing/winit&quot;&gt;winit&lt;/a&gt; — Cross-platform window management&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-text&quot;&gt;cosmic-text&lt;/a&gt; — Pure Rust text shaping&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://gstreamer.freedesktop.org/&quot;&gt;GStreamer&lt;/a&gt; — Video playback with VA-API&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ash-rs/ash&quot;&gt;ash&lt;/a&gt; — Vulkan bindings for DMA-BUF import&lt;/li&gt; 
 &lt;li&gt;Inspired by &lt;a href=&quot;https://neovide.dev/&quot;&gt;Neovide&lt;/a&gt; cursor animations&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;GNU General Public License v3.0 (same as Emacs)&lt;/p&gt; 
&lt;h2&gt;Star History&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.star-history.com/?repos=eval-exec%2Fneomacs&amp;amp;type=date&amp;amp;legend=top-left&quot;&gt;&lt;img src=&quot;https://api.star-history.com/image?repos=eval-exec/neomacs&amp;amp;type=date&amp;amp;legend=top-left&quot; alt=&quot;Star History Chart&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/5a7523817feca47d4df731b468671c93f19989d2335f9151840772c96c628a69/eval-exec/neomacs" medium="image" />
      
    </item>
    
    <item>
      <title>doomemacs/doomemacs</title>
      <link>https://github.com/doomemacs/doomemacs</link>
      <description>&lt;p&gt;An Emacs framework for the stubborn martian hacker&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;h1&gt;Doom Emacs&lt;/h1&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/#install&quot;&gt;Install&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/docs/index.org&quot;&gt;Documentation&lt;/a&gt; • &lt;a href=&quot;https://github.com/doomemacs/doomemacs/raw/master/docs/faq.org&quot;&gt;FAQ&lt;/a&gt; • &lt;a href=&quot;https://github.com/doomemacs/doomemacs/tree/screenshots#emacsd-screenshots&quot;&gt;Screenshots&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/#contribute&quot;&gt;Contribute&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;img src=&quot;https://img.shields.io/github/tag/doomemacs/doomemacs.svg?style=flat-square&amp;amp;label=release&amp;amp;color=58839b&quot; alt=&quot;Made with Doom Emacs&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/Supports-Emacs_27.1%E2%80%9330.2-blueviolet.svg?style=flat-square&amp;amp;logo=GNU%20Emacs&amp;amp;logoColor=white&quot; alt=&quot;Supports Emacs 27.1–30.2&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/last-commit/doomemacs/doomemacs?style=flat-square&quot; alt=&quot;Latest commit&quot; /&gt;&lt;/p&gt; 
 &lt;!-- ![Build status: master](https://img.shields.io/github/workflow/status/doomemacs/doomemacs/CI/master?style=flat-square) --&gt; 
 &lt;p&gt;&lt;a href=&quot;https://doomemacs.org/discord&quot;&gt;&lt;img src=&quot;https://img.shields.io/discord/406534637242810369?color=738adb&amp;amp;label=Discord&amp;amp;logo=discord&amp;amp;logoColor=white&amp;amp;style=flat-square&quot; alt=&quot;Discord Server&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://doomemacs.org/discuss&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/discussions/doomemacs/community?label=Discussions&amp;amp;logo=github&amp;amp;style=flat-square&quot; alt=&quot;Discussions board&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/screenshots/main.png&quot; alt=&quot;Doom Emacs Screenshot&quot; /&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Table of Contents&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/#introduction&quot;&gt;Introduction&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/#features&quot;&gt;Features&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/#prerequisites&quot;&gt;Prerequisites&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/#install&quot;&gt;Install&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/#roadmap&quot;&gt;Roadmap&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/#getting-help&quot;&gt;Getting help&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/#contribute&quot;&gt;Contribute&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Introduction&lt;/h1&gt; 
&lt;a href=&quot;http://ultravioletbat.deviantart.com/art/Yay-Evil-111710573&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/screenshots/cacochan.png&quot; align=&quot;right&quot; /&gt; &lt;/a&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;It is a story as old as time. A stubborn, shell-dwelling, and melodramatic vimmer—envious of the features of modern text editors—spirals into despair before he succumbs to the &lt;a href=&quot;https://github.com/emacs-evil/evil&quot;&gt;dark side&lt;/a&gt;. This is his config.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Doom is a configuration framework for &lt;a href=&quot;https://www.gnu.org/software/emacs/&quot;&gt;GNU Emacs&lt;/a&gt; tailored for Emacs bankruptcy veterans who want less framework in their frameworks, a modicum of stability (and reproducibility) from their package manager, and the performance of a hand rolled config (or better). It can be a foundation for your own config or a resource for Emacs enthusiasts to learn more about our favorite operating system.&lt;/p&gt; 
&lt;p&gt;Its design is guided by these mantras:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Gotta go fast.&lt;/strong&gt; Startup and run-time performance are priorities. Doom goes beyond by modifying packages to be snappier and load lazier.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Close to metal.&lt;/strong&gt; There&#39;s less between you and vanilla Emacs by design. That&#39;s less to grok and less to work around when you tinker. Internals ought to be written as if reading them were part of Doom&#39;s UX, and it is!&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Opinionated, but not stubborn.&lt;/strong&gt; Doom is about reasonable defaults and curated opinions, but use as little or as much of it as you like.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Your system, your rules.&lt;/strong&gt; You know better. At least, Doom hopes so! It won&#39;t &lt;em&gt;automatically&lt;/em&gt; install system dependencies (and will force plugins not to either). Rely on &lt;code&gt;doom doctor&lt;/code&gt; to tell you what&#39;s missing.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Nix/Guix is a great idea!&lt;/strong&gt; The Emacs ecosystem is temperamental. Things break and they break often. Disaster recovery should be a priority! Doom&#39;s package management should be declarative and your private config reproducible, and comes with a means to roll back releases and updates (still a WIP).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Check out &lt;a href=&quot;https://github.com/doomemacs/doomemacs/raw/master/docs/faq.org&quot;&gt;the FAQ&lt;/a&gt; for answers to common questions about the project.&lt;/p&gt; 
&lt;h1&gt;Features&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;Minimalistic good looks inspired by modern editors.&lt;/li&gt; 
 &lt;li&gt;Curated and sane defaults for many packages, (major) OSes, and Emacs itself.&lt;/li&gt; 
 &lt;li&gt;A modular organizational structure for separating concerns in your config.&lt;/li&gt; 
 &lt;li&gt;A standard library designed to simplify your elisp bike shedding.&lt;/li&gt; 
 &lt;li&gt;A declarative &lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/docs/getting_started.org#package-management&quot;&gt;package management system&lt;/a&gt; (powered by &lt;a href=&quot;https://github.com/radian-software/straight.el&quot;&gt;straight.el&lt;/a&gt;) with a command line interface. Install packages from anywhere, not just (M)ELPA, and pin them to any commit.&lt;/li&gt; 
 &lt;li&gt;Optional vim emulation powered by &lt;a href=&quot;https://github.com/emacs-evil/evil&quot;&gt;evil-mode&lt;/a&gt;, including ports of popular vim plugins like &lt;a href=&quot;https://github.com/justinmk/vim-sneak&quot;&gt;vim-sneak&lt;/a&gt;, &lt;a href=&quot;https://github.com/easymotion/vim-easymotion&quot;&gt;vim-easymotion&lt;/a&gt;, &lt;a href=&quot;https://github.com/tpope/vim-unimpaired&quot;&gt;vim-unimpaired&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/modules/editor/evil/README.org#ported-vim-plugins&quot;&gt;more&lt;/a&gt;!&lt;/li&gt; 
 &lt;li&gt;Opt-in LSP integration for many languages, using &lt;a href=&quot;https://github.com/emacs-lsp/lsp-mode&quot;&gt;lsp-mode&lt;/a&gt; or &lt;a href=&quot;https://github.com/joaotavora/eglot&quot;&gt;eglot&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Support for &lt;em&gt;many&lt;/em&gt; programming languages. Includes syntax highlighting, linters/checker integration, inline code evaluation, code completion (where possible), REPLs, documentation lookups, snippets, and more!&lt;/li&gt; 
 &lt;li&gt;Support for &lt;em&gt;many&lt;/em&gt; tools, like docker, pass, ansible, terraform, and more.&lt;/li&gt; 
 &lt;li&gt;A Spacemacs-esque &lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/modules/config/default/+evil-bindings.el&quot;&gt;keybinding scheme&lt;/a&gt;, centered around leader and localleader prefix keys (&lt;kbd&gt;SPC&lt;/kbd&gt; and &lt;kbd&gt;SPC&lt;/kbd&gt;&lt;kbd&gt;m&lt;/kbd&gt; for evil users, &lt;kbd&gt;C-c&lt;/kbd&gt; and &lt;kbd&gt;C-c l&lt;/kbd&gt; for vanilla users).&lt;/li&gt; 
 &lt;li&gt;A rule-based &lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/modules/ui/popup/README.org&quot;&gt;popup manager&lt;/a&gt; to control how temporary buffers are displayed (and disposed of).&lt;/li&gt; 
 &lt;li&gt;Per-file indentation style detection and &lt;a href=&quot;http://editorconfig.org/&quot;&gt;editorconfig&lt;/a&gt; integration. Let someone else argue about tabs vs &lt;strong&gt;&lt;em&gt;spaces&lt;/em&gt;&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;Project-management tools and framework-specific minor modes with their own snippets libraries.&lt;/li&gt; 
 &lt;li&gt;Project search (and replace) utilities, powered by &lt;a href=&quot;https://github.com/BurntSushi/ripgrep&quot;&gt;ripgrep&lt;/a&gt; and &lt;a href=&quot;https://github.com/abo-abo/swiper&quot;&gt;ivy&lt;/a&gt; or &lt;a href=&quot;https://github.com/emacs-helm/helm&quot;&gt;helm&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Isolated and persistent workspaces (also substitutes for vim tabs).&lt;/li&gt; 
 &lt;li&gt;Support for Chinese and Japanese input systems.&lt;/li&gt; 
 &lt;li&gt;Save a snapshot of your shell environment to a file for Emacs to load at startup. No more struggling to get Emacs to inherit your &lt;code&gt;PATH&lt;/code&gt;, among other things.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Prerequisites&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Required:&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;GNU Emacs 27.1–30.2 (30.2 is recommended) 
    &lt;ul&gt; 
     &lt;li&gt;If only using Doom&#39;s core, 27.1+ is required.&lt;/li&gt; 
     &lt;li&gt;If using Doom&#39;s modules (especially tree-sitter support), 29.1+ is required.&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;Git &amp;gt;= 2.23&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/BurntSushi/ripgrep&quot;&gt;ripgrep&lt;/a&gt; &amp;gt;= 11.0&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Optional, but recommended:&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/sharkdp/fd&quot;&gt;fd&lt;/a&gt; 7.3.0+ (used to improve file indexing performance)&lt;/li&gt; 
   &lt;li&gt;GNU variants of &lt;code&gt;find&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, and &lt;code&gt;tar&lt;/code&gt; (on MacOS and BSD *nix)&lt;/li&gt; 
   &lt;li&gt;Symbola font (Emacs&#39; fallback font for glyphs it can&#39;t display)&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-alert mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Warning&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Avoid unstable and pre-release builds of Emacs.&lt;/strong&gt; These end in &lt;code&gt;.50&lt;/code&gt;, &lt;code&gt;.60&lt;/code&gt;, or &lt;code&gt;.9X&lt;/code&gt; (e.g. &lt;code&gt;28.1.91&lt;/code&gt;). Doom should generally work on Emacs HEAD (the maintainer dogfoods it), but support lags behind the bleeding edge by at least a month or so.&lt;/p&gt; 
&lt;/div&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;Doom is comprised of &lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/docs/modules.org&quot;&gt;~150 optional modules&lt;/a&gt;, some of which may have additional dependencies. &lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/docs/modules.org&quot;&gt;Visit their documentation&lt;/a&gt; or run &lt;code&gt;bin/doom doctor&lt;/code&gt; to check for any that you may have missed.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h1&gt;Install&lt;/h1&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git clone --depth 1 https://github.com/doomemacs/doomemacs ~/.config/emacs
~/.config/emacs/bin/doom install
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then &lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/docs/getting_started.org&quot;&gt;read our Getting Started guide&lt;/a&gt; to be walked through installing, configuring and maintaining Doom Emacs.&lt;/p&gt; 
&lt;p&gt;It&#39;s a good idea to add &lt;code&gt;~/.config/emacs/bin&lt;/code&gt; to your &lt;code&gt;PATH&lt;/code&gt;! Other &lt;code&gt;bin/doom&lt;/code&gt; commands you should know about:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;doom sync&lt;/code&gt; to synchronize your private config with Doom by installing missing packages, removing orphaned packages, and regenerating caches. Run this whenever you modify your private &lt;code&gt;init.el&lt;/code&gt; or &lt;code&gt;packages.el&lt;/code&gt;, or install/remove an Emacs package through your OS package manager (e.g. mu4e or agda).&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;doom upgrade&lt;/code&gt; to update Doom to the latest release &amp;amp; all installed packages.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;doom doctor&lt;/code&gt; to diagnose common issues with your system and config.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;doom env&lt;/code&gt; to dump a snapshot of your shell environment to a file that Doom will load at startup. This allows Emacs to inherit your &lt;code&gt;PATH&lt;/code&gt;, among other things.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Roadmap&lt;/h1&gt; 
&lt;p&gt;Doom is an active and ongoing project. To make that development more transparent, its roadmap (and other concerns) are published across three github project boards and a newsletter:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://doomemacs.org/roadmap&quot;&gt;Development Roadmap&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://doomemacs.org/packages-under-review&quot;&gt;Packages under review&lt;/a&gt;: lists plugins we are watching and considering for inclusion, and what their status for inclusion is. Please consult this list before requesting new packages/features.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/orgs/doomemacs/projects/7&quot;&gt;Upstream bugs&lt;/a&gt;: lists issues that originate from elsewhere, and whether or not we have local workarounds or temporary fixes for them.&lt;/li&gt; 
 &lt;li&gt;&lt;s&gt;Doom&#39;s newsletter&lt;/s&gt; (not finished) will contain changelogs in between releases.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Getting help&lt;/h1&gt; 
&lt;p&gt;Emacs is no journey of a mere thousand miles. You &lt;em&gt;will&lt;/em&gt; run into problems and mysterious errors. When you do, here are some places you can look for help:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/docs/index.org&quot;&gt;Our documentation&lt;/a&gt; covers many use cases. 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/docs/getting_started.org#configuring-doom&quot;&gt;The Configuration section&lt;/a&gt; covers how to configure Doom and its packages.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/docs/getting_started.org#package-management&quot;&gt;The Package Management section&lt;/a&gt; covers how to install and disable packages.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/docs/getting_started.org#the-bindoom-utility&quot;&gt;This section&lt;/a&gt; explains the &lt;code&gt;bin/doom&lt;/code&gt; script&#39;s most important commands.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/docs/getting_started.org#common-mistakes-when-configuring-doom-emacs&quot;&gt;This section&lt;/a&gt; lists some common configuration mistakes new users make, when migrating a config from another distro or their own.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/docs/faq.org#how-do-i-change-the-theme&quot;&gt;This answer&lt;/a&gt; shows you how to add your own themes to your private config.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/docs/faq.org#how-do-i-change-the-fonts&quot;&gt;This answer&lt;/a&gt; shows you how to change the default font.&lt;/li&gt; 
   &lt;li&gt;Your issue may be documented in the &lt;a href=&quot;https://github.com/doomemacs/doomemacs/raw/master/docs/faq.org&quot;&gt;FAQ&lt;/a&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;With Emacs built-in help system documentation is a keystroke away: 
  &lt;ul&gt; 
   &lt;li&gt;For functions: &lt;kbd&gt;SPC h f&lt;/kbd&gt; or &lt;kbd&gt;C-h f&lt;/kbd&gt;&lt;/li&gt; 
   &lt;li&gt;For variables: &lt;kbd&gt;SPC h v&lt;/kbd&gt; or &lt;kbd&gt;C-h v&lt;/kbd&gt;&lt;/li&gt; 
   &lt;li&gt;For a keybind: &lt;kbd&gt;SPC h k&lt;/kbd&gt; or &lt;kbd&gt;C-h k&lt;/kbd&gt;&lt;/li&gt; 
   &lt;li&gt;To search available keybinds: &lt;kbd&gt;SPC h b b&lt;/kbd&gt; or &lt;kbd&gt;C-h b b&lt;/kbd&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;bin/doom doctor&lt;/code&gt; to detect common issues with your development environment and private config.&lt;/li&gt; 
 &lt;li&gt;Check out the &lt;a href=&quot;https://github.com/doomemacs/doomemacs/raw/master/docs/faq.org&quot;&gt;FAQ&lt;/a&gt; or &lt;a href=&quot;https://github.com/doomemacs/community?tab=readme-ov-file#frequently-asked-questions&quot;&gt;Community FAQs&lt;/a&gt;, in case your question has already been answered.&lt;/li&gt; 
 &lt;li&gt;Search &lt;a href=&quot;https://github.com/doomemacs/doomemacs/issues&quot;&gt;Doom&#39;s issue tracker&lt;/a&gt; in case your issue was already reported.&lt;/li&gt; 
 &lt;li&gt;Hop on &lt;a href=&quot;https://doomemacs.org/discord&quot;&gt;our Discord server&lt;/a&gt;; it&#39;s active and friendly! Keep an eye on the #announcements channel, where I announce breaking updates and releases.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Contribute&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;http://makeapullrequest.com&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square&quot; alt=&quot;PRs Welcome&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/bbatsov/emacs-lisp-style-guide&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/elisp-style%20guide-purple?style=flat-square&quot; alt=&quot;Elisp styleguide&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://liberapay.com/hlissner/donate&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/liberapay-donate-1.svg?style=flat-square&amp;amp;logo=liberapay&amp;amp;color=blue&quot; alt=&quot;Donate on liberapay&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://paypal.me/hlissner/10&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/paypal-donate-1?style=flat-square&amp;amp;logo=paypal&amp;amp;color=blue&quot; alt=&quot;Donate on paypal&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Doom is a labor of love and incurable madness, but I&#39;m only one guy. Doom wouldn&#39;t be where it is today without your help. I welcome contributions of any kind!&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;I ❤️ pull requests and bug reports (see the &lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/doomemacs/master/docs/contributing.org&quot;&gt;Contributing Guidelines&lt;/a&gt;)!&lt;/li&gt; 
 &lt;li&gt;Don&#39;t hesitate to &lt;a href=&quot;https://github.com/doomemacs/doomemacs/issues/new/choose&quot;&gt;tell me my Elisp-fu sucks&lt;/a&gt;, but please tell me why.&lt;/li&gt; 
 &lt;li&gt;Hop on &lt;a href=&quot;https://doomemacs.org/discord&quot;&gt;our Discord server&lt;/a&gt; and say hi! Help others, hang out or talk to me about Emacs, gamedev, programming, physics, pixel art, anime, gaming -- anything you like. Nourish this lonely soul.&lt;/li&gt; 
 &lt;li&gt;If you&#39;d like to support my work financially, buy me a drink through &lt;a href=&quot;https://liberapay.com/hlissner/donate&quot;&gt;liberapay&lt;/a&gt; or &lt;a href=&quot;https://paypal.me/hlissner/10&quot;&gt;paypal&lt;/a&gt;. My work contends with studies, adventures in indie gamedev and freelance work. Donations help me allocate more time to my Emacs and OSS capers.&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/21763822/47152a00-a255-11e9-9ca0-37fec3ef82cc" medium="image" />
      
    </item>
    
    <item>
      <title>google-coral/coralnpu</title>
      <link>https://github.com/google-coral/coralnpu</link>
      <description>&lt;p&gt;A machine learning accelerator core designed for energy-efficient AI at the edge.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Coral NPU&lt;/h1&gt; 
&lt;p&gt;Coral NPU is a hardware accelerator for ML inferencing. Coral NPU is an Open Source IP designed by Google Research and is freely available for integration into ultra-low-power System-on-Chips (SoCs) targeting wearable devices such as hearables, augmented reality (AR) glasses and smart watches.&lt;/p&gt; 
&lt;p&gt;Coral NPU is a neural processing unit (NPU), also known as an AI accelerator or deep-learning processor. Coral NPU is based on the 32-bit RISC-V Instruction Set Architecture (ISA).&lt;/p&gt; 
&lt;p&gt;Coral NPU includes three distinct processor components that work together: matrix, vector (SIMD), and scalar.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/google-coral/coralnpu/main/doc/images/arch_data_flow.png&quot; alt=&quot;Coral NPU Archicture&quot; /&gt; &lt;a href=&quot;https://developers.google.com/coral/guides/hardware/datasheet&quot;&gt;Coral NPU Architecture Datasheet&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Coral NPU Features&lt;/h2&gt; 
&lt;p&gt;Coral NPU offers the following top-level feature set:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;RV32IMF_Zve32x RISC-V instruction set (specifically &lt;code&gt;rv32imf_zve32x_zicsr_zifencei_zbb&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;32-bit address space for applications and operating system kernels&lt;/li&gt; 
 &lt;li&gt;Four-stage processor, in-order dispatch, out-of-order retire&lt;/li&gt; 
 &lt;li&gt;Four-way scalar, two-way vector dispatch&lt;/li&gt; 
 &lt;li&gt;128-bit SIMD, 256-bit (future) pipeline&lt;/li&gt; 
 &lt;li&gt;8 KB ITCM memory (tightly-coupled memory for instructions)&lt;/li&gt; 
 &lt;li&gt;32 KB DTCM memory (tightly-coupled memory for data)&lt;/li&gt; 
 &lt;li&gt;Both memories are single-cycle-latency SRAM, more efficient than cache memory&lt;/li&gt; 
 &lt;li&gt;AXI4 bus interfaces, functioning as both manager and subordinate, to interact with external memory and allow external CPUs to configure Coral NPU&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;System Requirements&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Bazel 7.4.1&lt;/li&gt; 
 &lt;li&gt;Python 3.9-3.12 (3.13 support is in progress)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://srecord.sourceforge.net/&quot;&gt;SRecord&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Quick Start&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Ensure that test suite passes
bazel run //tests/cocotb:core_mini_axi_sim_cocotb

# Build a binary
bazel build //examples:coralnpu_v2_hello_world_add_floats

# Build the Simulator (non-RVV for shorter build time):
bazel build //tests/verilator_sim:core_mini_axi_sim

# Run the binary on the simulator:
bazel-bin/tests/verilator_sim/core_mini_axi_sim --binary bazel-out/k8-fastbuild-ST-dd8dc713f32d/bin/examples/coralnpu_v2_hello_world_add_floats.elf
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/google-coral/coralnpu/main/doc/images/Coral_Logo_200px-2x.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/358a975a9ee2829a3cf247136cf9382e669b5b782125d76800aba6c95d5915d2/google-coral/coralnpu" medium="image" />
      
    </item>
    
    <item>
      <title>emacs-mirror/emacs</title>
      <link>https://github.com/emacs-mirror/emacs</link>
      <description>&lt;p&gt;Mirror of GNU Emacs&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Copyright (C) 2001-2026 Free Software Foundation, Inc. See the end of the file for license conditions.&lt;/p&gt; 
&lt;p&gt;This directory tree holds version 32.0.50 of GNU Emacs, the extensible, customizable, self-documenting real-time display editor.&lt;/p&gt; 
&lt;p&gt;The file INSTALL in this directory says how to build and install GNU Emacs on various systems, once you have unpacked or checked out the entire Emacs file tree.&lt;/p&gt; 
&lt;p&gt;See the file etc/NEWS for information on new features and other user-visible changes in recent versions of Emacs.&lt;/p&gt; 
&lt;p&gt;The file etc/PROBLEMS contains information on many common problems that occur in building, installing and running Emacs.&lt;/p&gt; 
&lt;p&gt;The file CONTRIBUTE contains information on contributing to Emacs as a developer.&lt;/p&gt; 
&lt;p&gt;You may encounter bugs in this release. If you do, please report them; your bug reports are valuable contributions to the FSF, since they allow us to notice and fix problems on machines we don&#39;t have, or in code we don&#39;t use often. Please send bug reports to the mailing list &lt;a href=&quot;mailto:bug-gnu-emacs@gnu.org&quot;&gt;bug-gnu-emacs@gnu.org&lt;/a&gt;. If possible, use M-x report-emacs-bug.&lt;/p&gt; 
&lt;p&gt;See the &quot;Bugs&quot; section of the Emacs manual for more information on how to report bugs. (The file &#39;BUGS&#39; in this directory explains how you can find and read that section using the Info files that come with Emacs.) For a list of mailing lists related to Emacs, see &lt;a href=&quot;https://savannah.gnu.org/mail/?group=emacs&quot;&gt;https://savannah.gnu.org/mail/?group=emacs&lt;/a&gt;. For the complete list of GNU mailing lists, see &lt;a href=&quot;https://lists.gnu.org/&quot;&gt;https://lists.gnu.org/&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The &#39;etc&#39; subdirectory contains several other files, named in capital letters, which you might consider looking at when installing GNU Emacs.&lt;/p&gt; 
&lt;p&gt;The file &#39;configure&#39; is a shell script to acclimate Emacs to the oddities of your processor and operating system. It creates the file &#39;Makefile&#39; (a script for the &#39;make&#39; program), which automates the process of building and installing Emacs. See INSTALL for more detailed information.&lt;/p&gt; 
&lt;p&gt;The file &#39;&lt;a href=&quot;http://configure.ac&quot;&gt;configure.ac&lt;/a&gt;&#39; is the input used by the autoconf program to construct the &#39;configure&#39; script.&lt;/p&gt; 
&lt;p&gt;The shell script &#39;&lt;a href=&quot;http://autogen.sh&quot;&gt;autogen.sh&lt;/a&gt;&#39; generates &#39;configure&#39; and other files by running Autoconf (which in turn uses GNU m4), and configures files in the .git subdirectory if you are using Git. If you want to use it, you will need to install recent versions of these build tools. This should be needed only if you edit files like &#39;&lt;a href=&quot;http://configure.ac&quot;&gt;configure.ac&lt;/a&gt;&#39; that specify Emacs&#39;s autobuild procedure.&lt;/p&gt; 
&lt;p&gt;The file &#39;&lt;a href=&quot;http://Makefile.in&quot;&gt;Makefile.in&lt;/a&gt;&#39; is a template used by &#39;configure&#39; to create &#39;Makefile&#39;.&lt;/p&gt; 
&lt;p&gt;The file &#39;make-dist&#39; is a shell script to build a distribution tar file from the current Emacs tree, containing only those files appropriate for distribution. If you make extensive changes to Emacs, this script will help you distribute your version to others.&lt;/p&gt; 
&lt;p&gt;There are several subdirectories:&lt;/p&gt; 
&lt;p&gt;&#39;src&#39; holds the C code for Emacs (the Emacs Lisp interpreter and its primitives, the redisplay code, and some basic editing functions). &#39;lisp&#39; holds the Emacs Lisp code for Emacs (most everything else). &#39;leim&#39; holds the original source files for the generated files in lisp/leim. These form the library of Emacs input methods, required to type international characters that can&#39;t be directly produced by your keyboard. &#39;lib&#39; holds source code for libraries used by Emacs and its utilities &#39;lib-src&#39; holds the source code for some utility programs for use by or with Emacs, like movemail and etags. &#39;lwlib&#39; holds the sources of the Lucid Widget Library used on X. &#39;oldXMenu&#39; source files from X11R2 XMenu library, used in non-toolkit builds. &#39;etc&#39; holds miscellaneous architecture-independent data files Emacs uses, like the tutorial text and tool bar images. The contents of the &#39;lisp&#39;, &#39;leim&#39;, &#39;info&#39;, and &#39;doc&#39; subdirectories are architecture-independent too. &#39;info&#39; holds the Info documentation tree for Emacs. &#39;doc/emacs&#39; holds the source code for the Emacs Manual. If you modify the manual sources, you will need the &#39;makeinfo&#39; program to produce an updated manual. &#39;makeinfo&#39; is part of the GNU Texinfo package; you need a suitably recent version of Texinfo. &#39;doc/lispref&#39; holds the source code for the Emacs Lisp reference manual. &#39;doc/lispintro&#39; holds the source code for the Introduction to Programming in Emacs Lisp manual. &#39;msdos&#39; holds configuration files for compiling Emacs under MS-DOS. &#39;nextstep&#39; holds instructions and some other files for compiling the Nextstep port of Emacs, for GNUstep and macOS Cocoa. &#39;nt&#39; holds code and documentation for building Emacs on MS-Windows. &#39;test&#39; holds tests for various aspects of Emacs&#39;s functionality. &#39;modules&#39; holds the &lt;a href=&quot;http://modhelp.py&quot;&gt;modhelp.py&lt;/a&gt; helper script. &#39;admin&#39; holds files used by Emacs developers, and Unicode data files. &#39;build-aux&#39; holds auxiliary files used during the build. &#39;m4&#39; holds Autoconf macros used for generating the configure script. &#39;java&#39; holds the Java code for the Emacs port to Android. &#39;cross&#39; holds Makefiles and an additional copy of gnulib used to build Emacs for Android devices. &#39;exec&#39; holds the source code to several helper executables used to run user-installed programs on Android.&lt;/p&gt; 
&lt;p&gt;Building Emacs on non-Posix platforms requires tools that aren&#39;t part of the standard distribution of the OS. The platform-specific README files and installation instructions should list the required tools.&lt;/p&gt; 
&lt;p&gt;NOTE ON COPYRIGHT YEARS&lt;/p&gt; 
&lt;p&gt;In copyright notices where the copyright holder is the Free Software Foundation, then where a range of years appears, this is an inclusive range that applies to every year in the range. For example: 2005-2008 represents the years 2005, 2006, 2007, and 2008.&lt;/p&gt; 
&lt;p&gt;This file is part of GNU Emacs.&lt;/p&gt; 
&lt;p&gt;GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.&lt;/p&gt; 
&lt;p&gt;GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.&lt;/p&gt; 
&lt;p&gt;You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see &lt;a href=&quot;https://www.gnu.org/licenses/&quot;&gt;https://www.gnu.org/licenses/&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/4fc62d3dcd03cc9506c257d8e60969334246b4f0914450d9102c1719b32b33b6/emacs-mirror/emacs" medium="image" />
      
    </item>
    
    <item>
      <title>emacs-lsp/lsp-ui</title>
      <link>https://github.com/emacs-lsp/lsp-ui</link>
      <description>&lt;p&gt;UI integrations for lsp-mode&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;lsp-ui&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://melpa.org/#/lsp-ui&quot;&gt;&lt;img src=&quot;https://melpa.org/packages/lsp-ui-badge.svg?sanitize=true&quot; alt=&quot;MELPA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://stable.melpa.org/#/lsp-ui&quot;&gt;&lt;img src=&quot;https://stable.melpa.org/packages/lsp-ui-badge.svg?sanitize=true&quot; alt=&quot;MELPA Stable&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.gg/swuxy5AAgT&quot;&gt;&lt;img src=&quot;https://discordapp.com/api/guilds/789885435026604033/widget.png?style=shield&quot; alt=&quot;&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/emacs-lsp/lsp-ui/actions/workflows/test.yml&quot;&gt;&lt;img src=&quot;https://github.com/emacs-lsp/lsp-ui/actions/workflows/test.yml/badge.svg?sanitize=true&quot; alt=&quot;CI&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;!-- markdown-toc start - Don&#39;t edit this section. Run M-x markdown-toc-refresh-toc --&gt; 
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/emacs-lsp/lsp-ui/master/#lsp-ui&quot;&gt;lsp-ui&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/emacs-lsp/lsp-ui/master/#intro&quot;&gt;Intro&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/emacs-lsp/lsp-ui/master/#lsp-ui-sideline&quot;&gt;lsp-ui-sideline:&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/emacs-lsp/lsp-ui/master/#lsp-ui-peek&quot;&gt;lsp-ui-peek:&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/emacs-lsp/lsp-ui/master/#lsp-ui-doc&quot;&gt;lsp-ui-doc&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/emacs-lsp/lsp-ui/master/#lsp-ui-imenu&quot;&gt;lsp-ui-imenu&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/emacs-lsp/lsp-ui/master/#contributing&quot;&gt;Contributing&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- markdown-toc end --&gt; 
&lt;h2&gt;Intro&lt;/h2&gt; 
&lt;p&gt;This package contains all the higher level UI modules of &lt;code&gt;lsp-mode&lt;/code&gt;, like flycheck support and code lenses.&lt;/p&gt; 
&lt;p&gt;By default, &lt;code&gt;lsp-mode&lt;/code&gt; automatically activates &lt;code&gt;lsp-ui&lt;/code&gt; unless &lt;code&gt;lsp-auto-configure&lt;/code&gt; is set to &lt;code&gt;nil&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;You only have to put &lt;code&gt;(use-package lsp-ui)&lt;/code&gt; in your config and the package will work out of the box. (&lt;a href=&quot;https://github.com/jwiegley/use-package&quot;&gt;use-package&lt;/a&gt;)&lt;/p&gt; 
&lt;p&gt;Or use the builtin package manager.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;M-x package-install [RET] lsp-ui [RET]
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;lsp-ui-sideline:&lt;/h2&gt; 
&lt;p&gt;Show informations of the symbols on the current line. It also show flycheck diagnostics and LSP code actions &lt;img src=&quot;https://raw.githubusercontent.com/emacs-lsp/lsp-ui/master/images/lsp-line.gif&quot; alt=&quot;lsp-line&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;Customization:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-sideline-show-diagnostics&lt;/code&gt; show diagnostics messages in sideline&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-sideline-show-hover&lt;/code&gt; show hover messages in sideline&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-sideline-show-code-actions&lt;/code&gt; show code actions in sideline&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-sideline-update-mode&lt;/code&gt; When set to &#39;line&#39; the information will be updated when user changes current line otherwise the information will be updated when user changes current point&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-sideline-delay&lt;/code&gt; seconds to wait before showing sideline&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-sideline-diagnostic-max-lines&lt;/code&gt; default to showing only the first line of diagnostic messages, increase for more verbose messages, decrease if flickering occurs&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;lsp-ui-peek:&lt;/h2&gt; 
&lt;p&gt;Add &lt;a href=&quot;https://code.visualstudio.com/docs/editor/editingevolved#_peek&quot;&gt;peek&lt;/a&gt; feature &lt;img src=&quot;https://raw.githubusercontent.com/emacs-lsp/lsp-ui/master/images/lsp-xref.gif&quot; alt=&quot;lsp-xref&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;You may remap &lt;code&gt;xref-find-{definitions,references}&lt;/code&gt; (bound to &lt;kbd&gt;M-.&lt;/kbd&gt; &lt;kbd&gt;M-?&lt;/kbd&gt; by default):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-elisp&quot;&gt;(define-key lsp-ui-mode-map [remap xref-find-definitions] #&#39;lsp-ui-peek-find-definitions)
(define-key lsp-ui-mode-map [remap xref-find-references] #&#39;lsp-ui-peek-find-references)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;There is a window-local jump list dedicated to cross references:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-elisp&quot;&gt;(lsp-ui-peek-jump-backward)
(lsp-ui-peek-jump-forward)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Other cross references:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-elisp&quot;&gt;(lsp-ui-peek-find-workspace-symbol &quot;pattern 0&quot;)
;; If the server supports custom cross references
(lsp-ui-peek-find-custom &#39;base &quot;$cquery/base&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Customization:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-peek-enable&lt;/code&gt; enable ‘lsp-ui-peek’&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-peek-show-directory&lt;/code&gt; show the directory of files&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;lsp-ui-doc&lt;/h2&gt; 
&lt;p&gt;Show object documentation at point in a child frame. &lt;img src=&quot;https://raw.githubusercontent.com/emacs-lsp/lsp-ui/master/images/lsp-ui-doc.gif&quot; alt=&quot;lsp-ui-doc&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;Show documentation in a WebKit widget &lt;img src=&quot;https://raw.githubusercontent.com/emacs-lsp/lsp-ui/master/images/lsp-ui-doc-webkit.png&quot; alt=&quot;lsp-ui-doc-webkit&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;Focus into lsp-ui-doc-frame &lt;img src=&quot;https://raw.githubusercontent.com/emacs-lsp/lsp-ui/master/images/lsp-ui-doc-focus-frame.gif&quot; alt=&quot;lsp-ui-doc-focus-frame&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;Customization:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-doc-enable&lt;/code&gt; Enable lsp-ui-doc&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-doc-position&lt;/code&gt; Where to display the doc (top, bottom or at-point)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-doc-side&lt;/code&gt; Where to display the doc (left or right)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-doc-delay&lt;/code&gt; Number of seconds before showing the doc&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-doc-show-with-cursor&lt;/code&gt; When non-nil, move the cursor over a symbol to show the doc&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-doc-show-with-mouse&lt;/code&gt; When non-nil, move the mouse pointer over a symbol to show the doc&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;lsp-ui-imenu&lt;/h2&gt; 
&lt;p&gt;Show imenu entries.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/emacs-lsp/lsp-ui/master/images/lsp-ui-imenu.png&quot; alt=&quot;lsp-ui-doc&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;Customization:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-imenu-kind-position&lt;/code&gt; place to show entries kind&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-imenu-buffer-position&lt;/code&gt; place to show the buffer window&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-imenu-window-width&lt;/code&gt; set window width&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-imenu-window-fix-width&lt;/code&gt; when non-nil, the window will not be resizable (eg. unaffected by &lt;code&gt;balance-windows&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-imenu--custom-mode-line-format&lt;/code&gt; mode line format&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-imenu-auto-refresh&lt;/code&gt; auto refresh when necessary&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp-ui-imenu-refresh-delay&lt;/code&gt; delay to refresh imenu&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Any kind of help is appreciated. If you want to help us maintaining this package, &lt;a href=&quot;https://github.com/emacs-lsp/lsp-ui/issues/332&quot;&gt;leave a note&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/733a074b3400835fc6ca9fbdeb94028b17fc7ac7949c851778d643b59d7569d8/emacs-lsp/lsp-ui" medium="image" />
      
    </item>
    
    <item>
      <title>qjcg/awesome-typst</title>
      <link>https://github.com/qjcg/awesome-typst</link>
      <description>&lt;p&gt;Awesome Typst Links&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/README.md&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;English&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/README_ZH.md&quot; hreflang=&quot;zh&quot; lang=&quot;zh&quot;&gt;简体中文&lt;/a&gt; &lt;/p&gt; 
&lt;h1&gt;Awesome Typst&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/sindresorhus/awesome#readme&quot;&gt;&lt;img src=&quot;https://awesome.re/badge.svg?sanitize=true&quot; alt=&quot;Awesome&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Curated collection of useful links for &lt;a href=&quot;https://github.com/typst/typst&quot;&gt;Typst&lt;/a&gt; users.&lt;/p&gt; 
&lt;p&gt;Contributions are welcome!&lt;/p&gt; 
&lt;!-- markdown-toc start - Don&#39;t edit this section. Run M-x markdown-toc-refresh-toc --&gt; 
&lt;h2&gt;Contents&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#official-project-links&quot;&gt;Official Project Links&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#typst-community-links&quot;&gt;Typst Community Links&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#integrations--tools&quot;&gt;Integrations &amp;amp; Tools&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#browser-extensions&quot;&gt;Browser Extensions&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#chatbots&quot;&gt;Chatbots&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#cicd&quot;&gt;CI/CD&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#cli-tools&quot;&gt;CLI Tools&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#editors&quot;&gt;Editors&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#editor-integrations&quot;&gt;Editor Integrations&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#online-tools&quot;&gt;Online Tools&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#office&quot;&gt;Office&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#programming&quot;&gt;Programming&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#typst-as-a-service&quot;&gt;Typst As A Service&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#templates--libraries&quot;&gt;Templates &amp;amp; Libraries&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#official&quot;&gt;Official&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#general&quot;&gt;General&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#assignments&quot;&gt;Assignments&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#cv&quot;&gt;CV&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#examples&quot;&gt;Examples&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#templates&quot;&gt;Templates&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#calendar--timetable&quot;&gt;Calendar / Timetable&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#footnotes--endnotes&quot;&gt;Footnotes &amp;amp; Endnotes&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#formatting&quot;&gt;Formatting&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#graphics&quot;&gt;Graphics&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#letters&quot;&gt;Letters&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#linguistics&quot;&gt;Linguistics&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#music&quot;&gt;Music&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#plotting&quot;&gt;Plotting&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#posters&quot;&gt;Posters&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#science-technology-engineering--math-stem&quot;&gt;Science, Technology, Engineering &amp;amp; Math (STEM)&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#chemistry&quot;&gt;Chemistry&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#engineering&quot;&gt;Engineering&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#mathematics&quot;&gt;Mathematics&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#physics&quot;&gt;Physics&lt;/a&gt; 
      &lt;ul&gt; 
       &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#conferences&quot;&gt;Conferences&lt;/a&gt;&lt;/li&gt; 
       &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#journals&quot;&gt;Journals&lt;/a&gt;&lt;/li&gt; 
       &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#grantsproposals&quot;&gt;Grants/Proposals&lt;/a&gt;&lt;/li&gt; 
      &lt;/ul&gt; &lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#scripting&quot;&gt;Scripting&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/qjcg/awesome-typst/main/#slides&quot;&gt;Slides&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- markdown-toc end --&gt; 
&lt;h2&gt;Official Project Links&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://typst.app&quot;&gt;typst.app&lt;/a&gt; - The Typst web app&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://typst.app/docs&quot;&gt;Typst Documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/typst/typst&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://typst.app/blog/&quot;&gt;Blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Social - &lt;a href=&quot;https://discord.com/invite/2uDybryKPe&quot;&gt;Discord&lt;/a&gt; &lt;a href=&quot;https://www.instagram.com/typstapp/&quot;&gt;Instagram&lt;/a&gt; &lt;a href=&quot;https://www.linkedin.com/company/typst/&quot;&gt;LinkedIn&lt;/a&gt; &lt;a href=&quot;https://mastodon.social/@typst&quot;&gt;Mastodon&lt;/a&gt; &lt;a href=&quot;https://bsky.app/profile/typst.app&quot;&gt;Bluesky&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Typst Community Links&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://matrix.to/#/%23typst:matrix.org&quot;&gt;#typst:matrix.org&lt;/a&gt; - Matrix room for Typst.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://sitandr.github.io/typst-examples-book/book/&quot;&gt;Typst Examples Book&lt;/a&gt; - An online book with Typst snippets, including extended tutorial and useful hacks.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://typst-jp.github.io/docs/&quot;&gt;Typst Japanese Community&lt;/a&gt; - Typst Japanese community docs and resources.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://t.me/typst_ru&quot;&gt;Typst-telegram-russian-chat&lt;/a&gt; - Chat about Typst in Telegram in russian&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/YDX-2147483647/best-of-typst&quot;&gt;best-of-typst&lt;/a&gt; - A ranked list of awesome projects related to Typst.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/typst/&quot;&gt;Typst Reddit Commuity&lt;/a&gt; - An English speaking subreddit about Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/SylvanFranklin/nonsense&quot;&gt;Nonsense&lt;/a&gt; - Funny and visually stunning generator of random fake math papers.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Integrations &amp;amp; Tools&lt;/h2&gt; 
&lt;h3&gt;Browser Extensions&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;(FireFox) &lt;a href=&quot;https://github.com/MordragT/bib_kit&quot;&gt;bib-kit&lt;/a&gt; - Retrieve website information to create citations in the hayagriva format&lt;/li&gt; 
 &lt;li&gt;(FireFox) &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/yank/&quot;&gt;yank&lt;/a&gt; - Yank URL and title of current tab, format to a chosen markup language, and copy to clipboard (supports typst link format)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Chatbots&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mattfbacon/typst-bot&quot;&gt;typst-bot&lt;/a&gt; - A discord bot to render Typst code&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://t.me/ru_rend_bot&quot;&gt;typst-bot-telegram&lt;/a&gt; - A telegram bot to render Typst code&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/daskol/typst-telegram-bot&quot;&gt;typst-telegram-bot&lt;/a&gt; - A &lt;a href=&quot;https://t.me/TypstBot&quot;&gt;telegram bot&lt;/a&gt; with focus in rendering math expression in Typst.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;CI/CD&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://gitlab.com/IvanSanchez/gitlab-ci-typst&quot;&gt;gitlab-ci-typst&lt;/a&gt; - Build Typst documents using GitLab CI pipelines&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/typst-community/setup-typst&quot;&gt;setup-typst&lt;/a&gt; - 📑 Install Typst for use in GitHub Actions&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lvignoli/typst-action&quot;&gt;typst-action&lt;/a&gt; - Build Typst documents using GitHub actions&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;CLI Tools&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/brendandebeasi/em-dee-pdf&quot;&gt;em-dee-pdf&lt;/a&gt; - Markdown to PDF converter with 18 built-in themes, LaTeX math, syntax highlighting, and table of contents.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/typstyle-rs/typstyle&quot;&gt;typstyle&lt;/a&gt; - Opinionated typst code formatter focusing on aesthetic, convergence and correctness.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ItsEthra/typst-live&quot;&gt;typst-live&lt;/a&gt; - Hot reloading of pdf in web browser&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lvignoli/typst-pandoc&quot;&gt;typst-pandoc&lt;/a&gt; - Typst custom reader and writer for Pandoc&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/scipenai/tylax&quot;&gt;Tylax&lt;/a&gt; - A bidirectional LaTeX-Typst converter based on AST parsing, with support for TikZ graphics.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/typst-community/utpm&quot;&gt;utpm&lt;/a&gt; - &lt;em&gt;Package manager&lt;/em&gt; for &lt;strong&gt;&lt;a href=&quot;https://github.com/typst/packages#local-packages&quot;&gt;local&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href=&quot;https://github.com/typst/packages&quot;&gt;remote&lt;/a&gt;&lt;/strong&gt; Typst packages.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mkpoli/tyler&quot;&gt;Tyler&lt;/a&gt; - Package compiler for the ease of packaging and publishing Typst libraries and templates.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/textlint/textlint-plugin-typst&quot;&gt;textlint-plugin-typst&lt;/a&gt; - &lt;a href=&quot;https://textlint.org/&quot;&gt;textlint&lt;/a&gt; plugin to lint Typst&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Editors&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/IgKh/katvan&quot;&gt;Katvan&lt;/a&gt; - A bare-bones editor for Typst files, with a bias for Right-to-Left editing.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Bzero/typstwriter&quot;&gt;Typstwriter&lt;/a&gt; - An integrated desktop editor for typst projects.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/soupslurpr/BeauTyXT&quot;&gt;BeauTyXT&lt;/a&gt; - A private, secure, minimalistic Text, Markdown, and Typst editor for Android&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Academic-ID/sapienAI&quot;&gt;AcademicID&lt;/a&gt; - A self-hosted academic-focused AI chatbot and research workspace with a Typst, Markdown, and Text editor.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/SuperMegaFort/TypstEdit&quot;&gt;TypstEdit&lt;/a&gt; - A native MacOS Typst editor&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://typesetter.trowell.net/&quot;&gt;Typesetter&lt;/a&gt; - A minimalist, local-first Typst editor for Linux&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dailydaniel/typos&quot;&gt;typos&lt;/a&gt; - A Typst-native note-taking system powered by Rust and Tauri with typed metadata, cross-references, backlinks, and knowledge graph visualization.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Editor Integrations&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/SeniorMars/tree-sitter-typst&quot;&gt;SeniorMars/tree-sitter-typst&lt;/a&gt; - A TreeSitter parser for the Typst File Format&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=myriad-dreamin.tinymist&quot;&gt;Tinymist VS Code Extension&lt;/a&gt; - A vscode extension for Tinymist integration&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Myriad-Dreamin/tinymist&quot;&gt;Tinymist&lt;/a&gt; - A language server for typst with integrations for Emacs, Helix, NeoVim, Sublime Text, VsCode/VsCodium, and Zed&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/OrangeX4/vscode-typst-sync&quot;&gt;Typst Sync&lt;/a&gt; - A vscode extension for Typst local packages management and synchronization.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/frozolotl/tree-sitter-typst&quot;&gt;frozolotl/tree-sitter-typst&lt;/a&gt; - A tree-sitter grammar with a focus on correctness.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/herlev/inktyp&quot;&gt;inktyp&lt;/a&gt; - An Inkscape plugin to insert and edit Typst equations&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/fenjalien/obsidian-typst&quot;&gt;obsidian-typst&lt;/a&gt; - Renders typst code blocks in Obsidian into images using Typst through the power of WASM!&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/remimimimimi/org-typst-preview.el&quot;&gt;org-typst-preview&lt;/a&gt; - Typst preview in org-mode&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/arne314/typstar&quot;&gt;typstar&lt;/a&gt; - Neovim plugin providing autosnippets, excalidraw integration and [standalone] Anki flashcard export&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/MrPicklePinosaur/typst-conceal.vim&quot;&gt;typst-conceal.vim&lt;/a&gt; - Vim/Nvim plugin for replacing long typst symbol names with unicode characters&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=surv.typst-math&quot;&gt;typst-math&lt;/a&gt; - A VS Code extension to simplify math writing in Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/OrangeX4/vscode-typst-sympy-calculator&quot;&gt;typst-sympy-calculator&lt;/a&gt; - VS Code extension for Typst math calculating, includes Arithmetic, Calculus, Matrix, Custom Variances and Functions by yourself&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://git.sr.ht/~meow_king/typst-ts-mode&quot;&gt;typst-ts-mode&lt;/a&gt; - Typst tree sitter major mode for Emacs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/SeniorMars/typst.nvim&quot;&gt;typst.nvim&lt;/a&gt; - WIP. Goals: Treesitter highlighting, snippets, and a smooth integration with neovim&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kaarmu/typst.vim&quot;&gt;typst.vim&lt;/a&gt; - Vim plugin for Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/daskol/typstd&quot;&gt;typstd&lt;/a&gt; - Yet another Typst language server.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/uben0/tree-sitter-typst&quot;&gt;uben0/tree-sitter-typst&lt;/a&gt; - A TreeSitter grammar for the Typst language, used by Helix&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lentilus/zeta&quot;&gt;zeta&lt;/a&gt; - A language server for Zettelkasten-style note-taking, featuring fast navigation, and a graph view.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Online Tools&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/QuarticCat/detypify&quot;&gt;Detypify&lt;/a&gt; - Typst symbol classifier&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Mapaor/online-typst-editor&quot;&gt;online-typst-editor&lt;/a&gt; - A serverless (client-side) typst editor powered by WebAssembly (&lt;a href=&quot;https://github.com/Myriad-Dreamin/typst.ts&quot;&gt;typst.ts&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/hongjr03/excel-to-typst&quot;&gt;excel-to-typst&lt;/a&gt; - A tool that convert Excel tables to Typst table, can work in uploading .xlsx file or pasting.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Office&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Splines/pptypst&quot;&gt;pptypst&lt;/a&gt; - Bring the power of Typst to PowerPoint&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Programming&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/loqusion/typix&quot;&gt;Typix&lt;/a&gt; - Deterministic Typst compilation with Nix&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jakobjpeters/Typstry.jl&quot;&gt;Typstry.jl&lt;/a&gt; - The Julia to Typst interface&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lucifer1004/leetcode.typ&quot;&gt;leetcode.typ&lt;/a&gt; - Solving Leetcode problems in Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/daskol/mpl-typst&quot;&gt;mpl-typst&lt;/a&gt; - A Typst backend for Matplotlib.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tilman151/pypst&quot;&gt;pypst&lt;/a&gt; - Declarative Typst in Python with Pandas data frame support.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/messense/typst-py&quot;&gt;typst-py&lt;/a&gt; - Python binding to typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/actsasflinn/typst-rb&quot;&gt;typst-rb&lt;/a&gt; - Ruby binding to typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Myriad-Dreamin/typst.ts&quot;&gt;typst.ts&lt;/a&gt; - JavaScript binding to typst&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Typst As A Service&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/slashformotion/typst-http-api&quot;&gt;typst-http-api&lt;/a&gt; - An simple docker containing an API to compile typst markup&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/daskol/typst-telegram-bot&quot;&gt;typst-telegram-bot&lt;/a&gt; - A plain and simple HTTP API for rendering math with Typst.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Templates &amp;amp; Libraries&lt;/h2&gt; 
&lt;h3&gt;Official&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/typst/templates&quot;&gt;typst/templates&lt;/a&gt; - The templates that ship with the Typst web app&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;General&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/onefact/datathinking.org-report-template&quot;&gt;Data Thinking Report Template&lt;/a&gt; - a template for artificial intelligence whitepapers with collaborative bibliographies using Zotero&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mst2k/HSOS-PTP-Typst-Template&quot;&gt;HSOS-PTP-Typst-Template&lt;/a&gt; - A German template for writing papers, overfitted for the Osnabrück University of Applied Scien&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/SkytAsul/INSA-Typst-Template&quot;&gt;INSA Typst Template&lt;/a&gt; - A template for INSA (Institut National des Sciences Appliquées), a french public engineering school.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/LaPreprint/typst&quot;&gt;LaPreprint&lt;/a&gt; - Beautiful preprints for Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jneug/typst-mantys&quot;&gt;Mantys&lt;/a&gt; - A template for writing manuals for Typst packages.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/aurghya-0/Project-Report-Typst&quot;&gt;Project-Report-Typst&lt;/a&gt; - A simple template for college or university level project report.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jinhao-huang/SimplePaper&quot;&gt;SimplePaper&lt;/a&gt; - A Chinese template for writing simple paper&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jxpeng98/Typst-Paper-Template&quot;&gt;Typst-Paper-Template&lt;/a&gt; - Typst template for Working Paper&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://gitlab.com/waterlubber/aiaa-typst-template&quot;&gt;aiaa-typst-template&lt;/a&gt; - A template for AIAA (American Institute of Aeronautics and Astronautics) papers.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/hzkonor/bubble-template&quot;&gt;bubble-template&lt;/a&gt; - A simple and colorful template for reports&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vanilla-extracts/typst-association-statuts&quot;&gt;french-association-status&lt;/a&gt; - A Template to write status for french associations.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/RolfBremer/gloss-awe&quot;&gt;gloss-awe&lt;/a&gt; - Automatically Generated Glossary Page (renamed from typst-glossary)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/RolfBremer/in-dexter&quot;&gt;in-dexter&lt;/a&gt; - Automatically Generated Index Page (renamed from typst-index)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/DawnEver/mcm-icm-typst-template&quot;&gt;mcm-icm-typst-template&lt;/a&gt; - A template for Mathematical Contest in Modeling (MCM) and the Interdisciplinary Contest in Modeling(ICM).&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/zagoli/simple-typst-thesis&quot;&gt;simple-typst-thesis&lt;/a&gt; - A template useful for writing simple thesis in Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ls1intum/thesis-template-typst&quot;&gt;thesis-template-typst&lt;/a&gt; - Technical University of Munich thesis Template with cover, titlepage, tables, figures, appendix, etc.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/fredguth/tufte-typst&quot;&gt;tufte-typst&lt;/a&gt; - A Tufte-inspired template for Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nogula/tufte-memo&quot;&gt;tufte-memo&lt;/a&gt; - A memo document template inspired by the design of Edward Tufte&#39;s books.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lkndl/typst-bioinfo-thesis&quot;&gt;typst-bioinfo-thesis&lt;/a&gt; - Flexible section headers and page numbers; pretty outlines and a &lt;code&gt;wrapfig&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sajjon/klirr&quot;&gt;klirr&lt;/a&gt; - Zero-maintenance and smart FOSS generating beautiful invoices for services and expenses.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/erictapen/typst-invoice&quot;&gt;typst-invoice&lt;/a&gt; - Generate invoices from TOML files&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/wychwitch/typst-mla9-template&quot;&gt;typst-mla9-template&lt;/a&gt; - An MLA 9th edition template&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/flavio20002/typst-orange-template&quot;&gt;typst-orange-template&lt;/a&gt; - A Typst book template inspired by The Legrand Orange Book&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kaarmu/splash&quot;&gt;typst-palettes&lt;/a&gt; - A library of color palettes for Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/daskol/typst-templates&quot;&gt;typst-templates&lt;/a&gt; - A templates collection for major venues in machine learning and AI.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/eigenein/typst-templates&quot;&gt;typst-templates&lt;/a&gt; - Templates for Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/haxibami/haxipst&quot;&gt;typst-templates&lt;/a&gt; - My typst templates&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/yangwenbo99/typst-uwthesis&quot;&gt;typst-uwthesis&lt;/a&gt; - A typst template for writing thesis, featuring a working abbreviation lists.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/qjcg/typstry&quot;&gt;typstry&lt;/a&gt; - A Tapestry of Typst Templates &amp;amp; Examples&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/LLBlumire/writable-gm-screen-inserts&quot;&gt;writable-gm-screen-inserts&lt;/a&gt; - Writable Game Master Screen Insertsces&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Assignments&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/diquah/OpenBoard&quot;&gt;OpenBoard&lt;/a&gt; - Easily build clean assessments in the style of the College Board.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/AntoniosBarotsis/typst-assignment-template&quot;&gt;assignment-template&lt;/a&gt; - A simple assignment template&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/rabuu/sheetstorm&quot;&gt;sheetstorm&lt;/a&gt; - A template for assignment sheets&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/astrale-sharp/typst-assignement-template&quot;&gt;typst-assignment-template&lt;/a&gt; - Yet another simple assignment template&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/gRox167/typst-assignment-template&quot;&gt;typst-assignment-template&lt;/a&gt; - Yet another simple assignment template with a cover and several useful math symbols.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/OriginCode/typst-homework-template&quot;&gt;typst-homework-template&lt;/a&gt; - A simple homework template inspired by the LaTeX homework template by Adam Blank&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/jomaway/typst-teacher-templates&quot;&gt;typst-teacher-template&lt;/a&gt; - A collection of typst templates. Mainly used to create worksheets and exams for my classes.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/sylvanfranklin/tinyset&quot;&gt;tinyset&lt;/a&gt; - A lightweight and opinionated problem set package designed with pure math proofs in mind.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;CV&lt;/h3&gt; 
&lt;h4&gt;Examples&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/caffeinatedgaze/bare-bones-cv&quot;&gt;bare-bones-cv&lt;/a&gt; –&amp;nbsp;A single-page minimalistic CV comprising essentials only.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jskherman/imprecv&quot;&gt;cv.typ&lt;/a&gt; - A no-frills curriculum vitae (CV) template for Typst that uses a YAML file for data input in order to version control CV data easily.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/skyzh/chicv&quot;&gt;chicv&lt;/a&gt; - A minimal and fully-customizable CV template.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Templates&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tzx/NNJR&quot;&gt;NNJR&lt;/a&gt; - A resume template inspired by &lt;code&gt;Jake&#39;s Resume&lt;/code&gt; LaTeX template. Uses Typst and YAML.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/GeorgeHoneywood/alta-typst&quot;&gt;alta-typst&lt;/a&gt; - A simple Typst CV template, inspired by AltaCV by LianTze Lim&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Harkunwar/attractive-typst-resume&quot;&gt;attractive-typst-resume&lt;/a&gt; - A modern looking, attractive CV/Resume template by Harkunwar Kochar&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/gvariable/billryan-typst&quot;&gt;billryan-typst&lt;/a&gt; - A simple and minimalist resume template, inspired by Resume by Billryan.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/yunanwg/brilliant-CV&quot;&gt;brilliant-CV&lt;/a&gt; - Another CV template for your job application, yet powered by Typst and more&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cu1ch3n/caidan&quot;&gt;caidan&lt;/a&gt; - A clean and minimal food menu template.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jskherman/imprecv&quot;&gt;cv.typ&lt;/a&gt; - A no-frills curriculum vitae (CV) template using Typst and YAML to version control CV data.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/olligobber/friggeri-cv&quot;&gt;friggeri-cv&lt;/a&gt; - A slightly modified version of the Friggeri CV, originally created by Adrien Friggeri in LaTeX, ported to Typst.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/peterpf/modern-typst-resume&quot;&gt;modern-cv&lt;/a&gt; - A modern resume and coverletter template based on &lt;code&gt;Awesome CV&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/peterpf/modern-typst-resume&quot;&gt;modern-typst-template&lt;/a&gt; - A modern resume/CV template.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/giovanniberti/moderncv.typst&quot;&gt;moderncv.typst&lt;/a&gt; - A CV template inspired by LaTeX&#39;s &lt;code&gt;moderncv&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/wusyong/resume.typ&quot;&gt;resume.typ&lt;/a&gt; - Simple and ergonomic template to generate resume and CV&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/DawnEver/typst-academic-cv&quot;&gt;typst-academic-cv&lt;/a&gt; - Typst Template for Academic CV&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cammellos/typst-blue-header-cv&quot;&gt;typst-blue-header-cv&lt;/a&gt; - Customizable Typst two-columns CV template with a top header.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ice-kylin/typst-cv-miku&quot;&gt;typst-cv-miku&lt;/a&gt; - A simple, elegant, academic style CV template for typst. Support for English and Chinese (and more)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jxpeng98/Typst-CV-Resume&quot;&gt;typst-cv-resume&lt;/a&gt; - A CV template with Sans font inspired by LaTeX &lt;code&gt;Deedy-Resume&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vaibhavjhawar/typst-cv-template1&quot;&gt;typst-cv-template1&lt;/a&gt; - A CV template inspired by Alessandro Plasmati&#39;s Graduate CV LaTex template&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/JCGoran/typst-cv-template&quot;&gt;typst-cv-template&lt;/a&gt; - A CV template inspired by LaTeX&#39;s &lt;code&gt;Awesome CV&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/skyzh/chicv&quot;&gt;typst-cv-template&lt;/a&gt; - Chi CV Template (For Typst)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/titaneric/typst-mixed-resume&quot;&gt;typst-mixed-resume&lt;/a&gt; - A casual and elegant resume template inspired by multiple templates.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/UntimelyCreation/typst-neat-cv&quot;&gt;typst-neat-cv&lt;/a&gt; - A Typst template for modern, minimal and elegant CVs, inspired by mintyfrankie&#39;s &lt;code&gt;Brilliant CV&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mizlan/typst-resume-sans&quot;&gt;typst-resume-sans&lt;/a&gt; - A sleek and unadorned sans-serif resume template.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bamboovir/typst-resume-template&quot;&gt;typst-resume-template&lt;/a&gt; - Aesthetic style inspired by the Awesome-CV project&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/hexWars/resume&quot;&gt;typst-resume-template&lt;/a&gt; - A pretty resume template designed using typst.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tomowang/typst-twentysecondcv&quot;&gt;typst-twentysecondcv&lt;/a&gt; - A CV template inspired by LaTeX&#39;s &lt;code&gt;Twenty Seconds Resume/CV&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/daxartio/cv&quot;&gt;typst-yaml-cv&lt;/a&gt; - A simple cv template designed using typst and yaml.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/elegaanz/vercanard&quot;&gt;vercanard&lt;/a&gt; - A colorful resume template for Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/madhank93/typst-resume-template&quot;&gt;typst-resume-template&lt;/a&gt; - Modern, minimalist resume design with Typst&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Calendar / Timetable&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ludwig-austermann/typst-timetable&quot;&gt;typst-timetable&lt;/a&gt; - A template for timetables&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/extua/october&quot;&gt;october&lt;/a&gt; - A simple printable month calendar&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Footnotes &amp;amp; Endnotes&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tudborg/notes.typ&quot;&gt;notes.typ&lt;/a&gt; - A library for notes with deduplication and customizability.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Formatting&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/fenjalien/metro&quot;&gt;metro&lt;/a&gt; - A typst package to add typsetting to units!&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/uwni/ruby-typ&quot;&gt;ruby-typ&lt;/a&gt; - A library to add ruby text&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Pablo-Gonzalez-Calderon/showybox-package&quot;&gt;showybox&lt;/a&gt; - A Typst package for creating colorful and customizable boxes.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/asibahi/simple-poem-typst&quot;&gt;simple-poem-typst&lt;/a&gt; - An application of the &lt;code&gt;measure&lt;/code&gt; function to set Arabic poetry.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/RubixDev/syntastica-typst/&quot;&gt;syntastica-typst&lt;/a&gt; - Tree-sitter syntax highlighting for code blocks.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/qo/term&quot;&gt;term&lt;/a&gt; - A Typst package for creating figures that emulate terminal screenshots.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/8LWXpg/typst-ansi-render&quot;&gt;typst-ansi_render&lt;/a&gt; - A library to render text with ANSI escape sequences&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lkoehl/typst-boxes&quot;&gt;typst-boxes&lt;/a&gt; - A library to draw colorful boxes.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jneug/typst-codelst&quot;&gt;typst-codelst&lt;/a&gt; - A Typst package to render source code.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/PgBiel/typst-diagbox&quot;&gt;typst-diagbox&lt;/a&gt; - A library for diagonal line dividers in Typst tables&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jomaway/typst-gentle-clues&quot;&gt;typst-gentle-clues&lt;/a&gt; - A typst package to simply add admonitions.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/OrangeX4/typst-tablem&quot;&gt;typst-tablem&lt;/a&gt; - Write markdown-like tables easily.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/PgBiel/typst-tablex&quot;&gt;typst-tablex&lt;/a&gt; - More powerful and customizable tables in Typst!&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Graphics&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cetz-package/cetz&quot;&gt;CeTZ&lt;/a&gt; - CeTZ (CeTZ, ein Typst Zeichenpacket) is a library for drawing with &lt;a href=&quot;https://typst.app&quot;&gt;Typst&lt;/a&gt; with an API inspired by TikZ and &lt;a href=&quot;https://processing.org/&quot;&gt;Processing&lt;/a&gt;. It comes with modules for drawing plots, graphs and charts.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/SeniorMars/typst-raytracer&quot;&gt;typst-raytracer&lt;/a&gt; - raytracer in typst&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Letters&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Sematre/typst-letter-pro&quot;&gt;typst-letter-pro&lt;/a&gt; - DIN 5008 letter template for Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dvdvgt/typst-letter&quot;&gt;typst-letter&lt;/a&gt; - A typst letter template inspired by the DIN 5008 norm&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pascal-huber/typst-letter-template&quot;&gt;typst-letter-template&lt;/a&gt; - A customizable typst letter template with different presets (DIN 5008, Swiss C5)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Linguistics&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/retroflexivity/typst-eggs&quot;&gt;eggs&lt;/a&gt; - Linguistics examples and glosses with minimalist syntax&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://gitea.everydayimshuflin.com/greg/typst-lepizig-glossing&quot;&gt;leipzig-gloss&lt;/a&gt; - A library that provides primitives for creating glossing rules according to Leipzig.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/imatpot/typst-ascii-ipa&quot;&gt;typst-ipa&lt;/a&gt; - 🔄 ASCII / IPA conversion for Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/typst/packages/tree/main/packages/preview/tyipa/0.1.0&quot;&gt;tyipa&lt;/a&gt; - Write phonetic transcriptions using the IPA, in a &lt;em&gt;typsty&lt;/em&gt; style.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://kianting.info/wiki/w/Tan_Kian-ting%E7%9A%84%E7%B6%AD%E5%9F%BA:Typst-dictionary-template&quot;&gt;typst-dictionary-template&lt;/a&gt; - 📕 a template for lexical dictionary/glossary in Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pearcebasmanm/arborly&quot;&gt;arborly&lt;/a&gt; - A library for producing beautiful syntax tree graphs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lynn/typst-syntree&quot;&gt;typst-syntree&lt;/a&gt; - Syntax trees for typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/thatfloflo/typst-linphon&quot;&gt;linphon&lt;/a&gt; - Set phonological feature matrices, linear rewrite rules, and more&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Music&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sitandr/conchord&quot;&gt;conchord&lt;/a&gt; - Typst package to easily write lyrics with chords and generate colorful fretboard diagrams&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ljgago/typst-chords&quot;&gt;typst-chords&lt;/a&gt; - A library to write song lyrics with chord diagrams in Typst&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Plotting&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://gitlab.com/giacomogallina/commute&quot;&gt;typst-cd&lt;/a&gt; - Proof of Concept for tikz-like commutative diagrams&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/johannes-wolf/typst-plot&quot;&gt;typst-plot&lt;/a&gt; - A library for plotting line charts (deprecated in favor of CeTZ)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Chayraaa/typst-plotting&quot;&gt;typst-plotting&lt;/a&gt; - A library for drawing a variety of charts and plots like line charts, histograms, and pie charts&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Posters&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/pncnmnp/typst-poster&quot;&gt;typst-poster&lt;/a&gt; - An academic poster template&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jonaspleyer/peace-of-posters&quot;&gt;peace-of-posters&lt;/a&gt; - A package for creating academic posters in block style&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Science, Technology, Engineering &amp;amp; Math (STEM)&lt;/h3&gt; 
&lt;h4&gt;Chemistry&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Typsium/alchemist&quot;&gt;alchemist&lt;/a&gt; - Render skeletal formulas in a human-readable format using cetz.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Typsium/typsium&quot;&gt;typsium&lt;/a&gt; - Typeset chemical formulas and reactions.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Engineering&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/fenjalien/cirCeTZ&quot;&gt;circuitypst&lt;/a&gt; - A library for drawing electronic circuit schematics&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jomaway/typst-bytefield&quot;&gt;typst-bytefield&lt;/a&gt; - A library for drawing (network) protocol headers&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/oldrev/tids&quot;&gt;tids&lt;/a&gt; - A TI-style datasheet template for electronic component&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Mathematics&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://gitlab.com/giacomogallina/commute&quot;&gt;commute&lt;/a&gt; - A library for creating commutative diagrams&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/platformer/typst-algorithms&quot;&gt;typst-algorithms&lt;/a&gt; - A library for writing algorithms&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/EvanLuo42/typst-himcm-template&quot;&gt;typst-himcm-template&lt;/a&gt; - An HiMCM template for Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/matthiasGmayer/typst-math-template&quot;&gt;typst-math-template&lt;/a&gt; - A simple math template that allows for numbered, referenceable theorems and compilation of subfiles that use references.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/maxwell-thum/typst-pf3&quot;&gt;typst-pf3&lt;/a&gt; - A small package for creating &quot;structured proofs.&quot; Essentially a port of Leslie Lamport&#39;s &lt;a href=&quot;https://web.archive.org/web/20240419130400/https://lamport.azurewebsites.net/latex/pf2.sty&quot;&gt;&lt;code&gt;pf2.sty&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sahasatvik/typst-theorems&quot;&gt;typst-theorems&lt;/a&gt; - A library for creating numbered theorem environments&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/johanvx/typst-undergradmath&quot;&gt;typst-undergradmath&lt;/a&gt; - A Typst port of &lt;a href=&quot;https://gitlab.com/jim.hefferon/undergradmath&quot;&gt;undergradmath&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Physics&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Leedehai/typst-physics&quot;&gt;physica&lt;/a&gt; - A library for usual physics notations, e.g. vectors and vector fields, matrices, differentials, derivatives, Dirac brackets, tensors, isotopes, and digital signal sequences.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h5&gt;Conferences&lt;/h5&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/isaacew/aiaa-typst&quot;&gt;aiaa-typst&lt;/a&gt; - A template for creating conference papers in the style of the American Institute of Aeronautics and Astronautics.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://typst.app/universe/package/cogsci-conference&quot;&gt;cogsci-conference&lt;/a&gt; - Official template for the Cognitive Science Society (CogSci) Conference Proceedings.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/DawnEver/ieee-conference-typst-template&quot;&gt;ieee-conference-typst-template&lt;/a&gt; A template to write IEEE Conference in Typst.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bsp0109/ieee-typst-template&quot;&gt;ieee-typst-template&lt;/a&gt; - A template to write IEEE Papers in Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/avonmoll/ifacconf-typst&quot;&gt;ifacconf-typst&lt;/a&gt; - A template for creating conference papers in the style of the International Federation of Automatic Control&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h5&gt;Journals&lt;/h5&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/p4perf4ce/typst-ieee-trans-template&quot;&gt;ieee-trans-typst&lt;/a&gt; - A template that mimic LaTeX IEEE Transaction template (&lt;code&gt;ieee-trans.cls&lt;/code&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h5&gt;Grants/Proposals&lt;/h5&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ntjess/typst-nsf-templates&quot;&gt;typst-nsf-templates&lt;/a&gt; - National Science Foundation (NSF) general template and outlines for popular proposal types.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Scripting&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/PgBiel/typst-oxifmt&quot;&gt;typst-oxifmt&lt;/a&gt; - Convenient Rust-like string formatting in Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jneug/typst-tools4typst&quot;&gt;typst-tools4typst&lt;/a&gt; - Tools for package and template authors.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Slides&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lvignoli/diapo&quot;&gt;diapo&lt;/a&gt; - A minimal and simplistic presentation template.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/polylux-typ/polylux&quot;&gt;polylux&lt;/a&gt; - Create presentation slides in Typst&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/marcothms/clean-polylux-typst&quot;&gt;clean-polylux-typst&lt;/a&gt; - A clean and dynamic polylux presentation slide template&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/OrangeX4/typst-pinit&quot;&gt;pinit&lt;/a&gt; - Pin things as you like, especially useful for creating slides in typst.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/touying-typ/touying&quot;&gt;touying&lt;/a&gt; - A powerful package for creating presentation slides in Typst&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/2a32d8530e44bf90c4481d53b1933b25d1d5e5c4f193843faa7a276cf9eee203/qjcg/awesome-typst" medium="image" />
      
    </item>
    
    <item>
      <title>purcell/exec-path-from-shell</title>
      <link>https://github.com/purcell/exec-path-from-shell</link>
      <description>&lt;p&gt;Make Emacs use the $PATH set up by the user&#39;s shell&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a href=&quot;https://melpa.org/#/exec-path-from-shell&quot;&gt;&lt;img src=&quot;http://melpa.org/packages/exec-path-from-shell-badge.svg?sanitize=true&quot; alt=&quot;Melpa Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://stable.melpa.org/#/exec-path-from-shell&quot;&gt;&lt;img src=&quot;http://stable.melpa.org/packages/exec-path-from-shell-badge.svg?sanitize=true&quot; alt=&quot;Melpa Stable Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://elpa.nongnu.org/nongnu/exec-path-from-shell.html&quot;&gt;&lt;img src=&quot;https://elpa.nongnu.org/nongnu/exec-path-from-shell.svg?sanitize=true&quot; alt=&quot;NonGNU ELPA Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/purcell/exec-path-from-shell/actions/workflows/test.yml&quot;&gt;&lt;img src=&quot;https://github.com/purcell/exec-path-from-shell/actions/workflows/test.yml/badge.svg?sanitize=true&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.patreon.com/sanityinc&quot;&gt;&lt;img alt=&quot;Support me&quot; src=&quot;https://img.shields.io/badge/Support%20Me-%F0%9F%92%97-ff69b4.svg?sanitize=true&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;exec-path-from-shell&lt;/h1&gt; 
&lt;p&gt;A GNU Emacs library to ensure environment variables inside Emacs look the same as in the user&#39;s shell.&lt;/p&gt; 
&lt;h2&gt;Motivation&lt;/h2&gt; 
&lt;p&gt;Ever find that a command works in your shell, but not in Emacs?&lt;/p&gt; 
&lt;p&gt;This happens a lot on OS X, where an Emacs instance launched as a GUI app inherits a default minimal set of environment variables that are probably not the ones you see in a terminal window. Similarly, if you start Emacs as a daemon from &lt;code&gt;systemd&lt;/code&gt; or &lt;code&gt;launchd&lt;/code&gt;, it will run with a default set of environment variables.&lt;/p&gt; 
&lt;p&gt;This library solves this problem by copying important environment variables from the user&#39;s shell: it works by asking your shell to print out the variables of interest, then copying them into the Emacs environment.&lt;/p&gt; 
&lt;h2&gt;Compatibility&lt;/h2&gt; 
&lt;p&gt;Supported shells:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;zsh&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;tcsh&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;fish&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;nu&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Note that shell variables which have not been exported as environment variables (e.g. using the &quot;export&quot; keyword) may not be visible to &lt;code&gt;exec-path-from-shell&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;If you experience issues, enable the variable &lt;code&gt;exec-path-from-shell-debug&lt;/code&gt; before runnin functions from the package: this will produce detailed logging in &lt;code&gt;*Messages*&lt;/code&gt; about the shell command line and output.&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;Installable packages are available via MELPA: do &lt;code&gt;M-x package-install RET exec-path-from-shell RET&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Alternatively, &lt;a href=&quot;https://github.com/purcell/exec-path-from-shell/tags&quot;&gt;download&lt;/a&gt; the latest release or clone the repository, and install &lt;code&gt;exec-path-from-shell.el&lt;/code&gt; with &lt;code&gt;M-x package-install-file&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;p&gt;Add the following to your &lt;code&gt;init.el&lt;/code&gt; (after calling &lt;code&gt;package-initialize&lt;/code&gt;):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-el&quot;&gt;(when (memq window-system &#39;(mac ns x))
  (exec-path-from-shell-initialize))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This sets &lt;code&gt;$MANPATH&lt;/code&gt;, &lt;code&gt;$PATH&lt;/code&gt; and &lt;code&gt;exec-path&lt;/code&gt; from your shell, but only when executed in a GUI frame on OS X and Linux.&lt;/p&gt; 
&lt;p&gt;If you launch Emacs as a daemon from &lt;code&gt;systemd&lt;/code&gt; or similar, you might like to use the following snippet:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-el&quot;&gt;(when (daemonp)
  (exec-path-from-shell-initialize))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can copy values of other environment variables by customizing &lt;code&gt;exec-path-from-shell-variables&lt;/code&gt; before invoking &lt;code&gt;exec-path-from-shell-initialize&lt;/code&gt;, or by calling &lt;code&gt;exec-path-from-shell-copy-env&lt;/code&gt;, e.g.:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-el&quot;&gt;(exec-path-from-shell-copy-env &quot;PYTHONPATH&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This function may also be called interactively.&lt;/p&gt; 
&lt;p&gt;The author uses the following configuration snippet before calling &lt;code&gt;exec-path-from-shell-initialize&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-el&quot;&gt;(require &#39;exec-path-from-shell)
(dolist (var &#39;(&quot;SSH_AUTH_SOCK&quot; &quot;SSH_AGENT_PID&quot; &quot;GPG_AGENT_INFO&quot; &quot;LANG&quot; &quot;LC_CTYPE&quot; &quot;NIX_SSL_CERT_FILE&quot; &quot;NIX_PATH&quot;))
  (add-to-list &#39;exec-path-from-shell-variables var))
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Setting up your shell startup files correctly&lt;/h3&gt; 
&lt;p&gt;Note that your shell will inherit Emacs&#39;s environment variables when it is run by &lt;code&gt;exec-path-from-shell&lt;/code&gt; -- to avoid surprises your config files should therefore set the environment variables to their exact desired final values, i.e. don&#39;t do this:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;export PATH=/usr/local/bin:$PATH
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;but instead do this:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;export PATH=/usr/local/bin:/usr/bin:/bin
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To be safe, &lt;code&gt;exec-path-from-shell&lt;/code&gt; starts an interactive (and login) shell by default, but this can be much slower than necessary. Interactive shells often have fancy features enabled that are only helpful when one interacts directly with the shell, and this can frequently cause startup time to exceed 750ms. This can be avoided:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Follow best practice by setting your environment variables so that they are available to both interactive and non-interactive shells. In practical terms, for most people this means setting them in &lt;code&gt;~/.profile&lt;/code&gt;, &lt;code&gt;~/.bash_profile&lt;/code&gt;, &lt;code&gt;~/.zshenv&lt;/code&gt; instead of &lt;code&gt;~/.bashrc&lt;/code&gt; and &lt;code&gt;~/.zshrc&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Once a non-interactive shell sets your environment variables correctly, adjust &lt;code&gt;exec-path-from-shell-arguments&lt;/code&gt; appropriately (often to &lt;code&gt;nil&lt;/code&gt;) before calling &lt;code&gt;exec-path-from-shell-initialize&lt;/code&gt; so that it will start a non-interactive shell.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;To learn more about how popular shells load start-up files, read &lt;a href=&quot;https://blog.flowblok.id.au/2013-02/shell-startup-scripts.html&quot;&gt;this helpful article&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Making &lt;code&gt;exec-path-from-shell&lt;/code&gt; faster&lt;/h2&gt; 
&lt;p&gt;If evaluation takes more than &lt;code&gt;exec-path-from-shell-warn-duration-millis&lt;/code&gt; (500ms by default) then &lt;code&gt;exec-path-from-shell&lt;/code&gt; will print a warning.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Non-interactive shells start up faster. Follow the steps in the section above so that you can run your shell without &lt;code&gt;-i&lt;/code&gt; and still get the right environment variable settings. When &lt;code&gt;&quot;-i&quot;&lt;/code&gt; is then removed from &lt;code&gt;exec-path-from-shell-arguments&lt;/code&gt;, this package becomes more efficient.&lt;/li&gt; 
 &lt;li&gt;Invoking the shell has a non-trivial overhead in any case. Don&#39;t call &lt;code&gt;exec-path-from-shell-copy-env&lt;/code&gt; repeatedly, since each invocation starts a shell. Instead, set &lt;code&gt;exec-path-from-shell-variables&lt;/code&gt; to the full list of vars you want, and call &lt;code&gt;exec-path-from-shell-initialize&lt;/code&gt; once.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Further help&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;C-h f exec-path-from-shell-initialize&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;C-h f exec-path-from-shell-copy-env&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.patreon.com/sanityinc&quot;&gt;💝 Support this project and my other Open Source work via Patreon&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://uk.linkedin.com/in/stevepurcell&quot;&gt;💼 LinkedIn profile&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.sanityinc.com/&quot;&gt;✍ sanityinc.com&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/adbe549b6ef6b6bde0f631bbe6d8a6a52e4d1da54676025efb9ed9e5a87fac75/purcell/exec-path-from-shell" medium="image" />
      
    </item>
    
    <item>
      <title>dominikh/go-mode.el</title>
      <link>https://github.com/dominikh/go-mode.el</link>
      <description>&lt;p&gt;Emacs mode for the Go programming language&lt;/p&gt;&lt;hr&gt;&lt;p&gt;This is go-mode, the Emacs mode for editing Go code.&lt;/p&gt; 
&lt;p&gt;It is a complete rewrite of the go-mode that shipped with Go 1.0.3 and before, and was part of Go 1.1 until Go 1.3. Beginning with Go 1.4, editor integration will not be part of the Go distribution anymore, making this repository the canonical place for go-mode.&lt;/p&gt; 
&lt;h1&gt;Features&lt;/h1&gt; 
&lt;p&gt;In addition to normal features, such as fontification and indentation, and close integration with familiar Emacs functionality (for example syntax-based navigation like &lt;code&gt;beginning-of-defun&lt;/code&gt;), go-mode comes with the following extra features to provide an improved experience:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Integration with &lt;code&gt;gofmt&lt;/code&gt; by providing a command of the same name, and &lt;code&gt;gofmt-before-save&lt;/code&gt;, which can be used in a hook to format Go buffers before saving them.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Setting the &lt;code&gt;gofmt-command&lt;/code&gt; variable also allows using &lt;code&gt;goimports&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;Setting the &lt;code&gt;gofmt-args&lt;/code&gt; variable with a list of arguments allows using e.g. &lt;code&gt;gofmt -s&lt;/code&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Integration with &lt;code&gt;godoc&lt;/code&gt; via the functions &lt;code&gt;godoc&lt;/code&gt; and &lt;code&gt;godoc-at-point&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Integration with the Playground&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;go-play-buffer&lt;/code&gt; and &lt;code&gt;go-play-region&lt;/code&gt; to send code to the Playground&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;go-download-play&lt;/code&gt; to download a Playground entry into a new buffer&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Managing imports&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;A function for jumping to the file&#39;s imports (&lt;code&gt;go-goto-imports&lt;/code&gt; - &lt;code&gt;C-c C-f i&lt;/code&gt;)&lt;/li&gt; 
   &lt;li&gt;A function for adding imports, including tab completion (&lt;code&gt;go-import-add&lt;/code&gt;, bound to &lt;code&gt;C-c C-a&lt;/code&gt;)&lt;/li&gt; 
   &lt;li&gt;It is recommended that you use &lt;code&gt;goimports&lt;/code&gt; or the &lt;code&gt;organize-imports&lt;/code&gt; feature of &lt;code&gt;gopls&lt;/code&gt; to manage adding/removing/organizing imports automatically.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Integration with godef&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;godef-describe&lt;/code&gt; (&lt;code&gt;C-c C-d&lt;/code&gt;) to describe expressions&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;godef-jump&lt;/code&gt; (&lt;code&gt;C-c C-j&lt;/code&gt;) and &lt;code&gt;godef-jump-other-window&lt;/code&gt; (&lt;code&gt;C-x 4 C-c C-j&lt;/code&gt;) to jump to declarations&lt;/li&gt; 
   &lt;li&gt;This requires you to install godef via &lt;code&gt;go install github.com/rogpeppe/godef@latest&lt;/code&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Basic support for imenu (functions and variables)&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Built-in support for displaying code coverage as calculated by &lt;code&gt;go test&lt;/code&gt; (&lt;code&gt;go-coverage&lt;/code&gt;)&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Several functions for jumping to and manipulating the individual parts of function signatures. These functions support anonymous functions, but are smart enough to skip them when required (e.g. when jumping to a method receiver or docstring.)&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Jump to the argument list (&lt;code&gt;go-goto-arguments&lt;/code&gt; - &lt;code&gt;C-c C-f a&lt;/code&gt;)&lt;/li&gt; 
   &lt;li&gt;Jump to the docstring, create it if it does not exist yet (&lt;code&gt;go-goto-docstring&lt;/code&gt; - &lt;code&gt;C-c C-f d&lt;/code&gt;).&lt;/li&gt; 
   &lt;li&gt;Jump to the function keyword (&lt;code&gt;go-goto-function&lt;/code&gt; - &lt;code&gt;C-c C-f f&lt;/code&gt;)&lt;/li&gt; 
   &lt;li&gt;Jump to the function name (&lt;code&gt;go-goto-function-name&lt;/code&gt; - &lt;code&gt;C-c C-f n&lt;/code&gt;)&lt;/li&gt; 
   &lt;li&gt;Jump to the return values (&lt;code&gt;go-goto-return-values&lt;/code&gt; - &lt;code&gt;C-c C-f r&lt;/code&gt;)&lt;/li&gt; 
   &lt;li&gt;Jump to the method receiver, adding a pair of parentheses if no method receiver exists (&lt;code&gt;go-goto-method-receiver&lt;/code&gt; - &lt;code&gt;C-c C-f m&lt;/code&gt;).&lt;/li&gt; 
  &lt;/ul&gt; &lt;p&gt;All of these functions accept a prefix argument (&lt;code&gt;C-u&lt;/code&gt;), causing them to skip anonymous functions.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Installation&lt;/h1&gt; 
&lt;h2&gt;MELPA&lt;/h2&gt; 
&lt;p&gt;The recommended way of installing go-mode is via &lt;a href=&quot;http://www.emacswiki.org/emacs/ELPA&quot;&gt;ELPA&lt;/a&gt;, the Emacs package manager, and the &lt;a href=&quot;http://emacsredux.com/blog/2014/05/16/melpa-stable/&quot;&gt;MELPA Stable repository&lt;/a&gt;, which provides an up-to-date version of go-mode.&lt;/p&gt; 
&lt;p&gt;If you&#39;re not familiar with ELPA yet, consider reading &lt;a href=&quot;http://xahlee.info/emacs/emacs/emacs_package_system.html&quot;&gt;this guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Manual&lt;/h2&gt; 
&lt;p&gt;To install go-mode manually, check out the &lt;code&gt;go-mode.el&lt;/code&gt; repository in a directory of your choice, add it to your load path and configure Emacs to automatically load it when opening a &lt;code&gt;.go&lt;/code&gt; file:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(add-to-list &#39;load-path &quot;/place/where/you/put/it/&quot;)
(autoload &#39;go-mode &quot;go-mode&quot; nil t)
(add-to-list &#39;auto-mode-alist &#39;(&quot;\\.go\\&#39;&quot; . go-mode))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Either evaluate the statements with &lt;code&gt;C-x C-e&lt;/code&gt;, or restart Emacs.&lt;/p&gt; 
&lt;h1&gt;Other extensions&lt;/h1&gt; 
&lt;p&gt;There are several third party extensions that can enhance the Go experience in Emacs.&lt;/p&gt; 
&lt;h2&gt;Gopls integration&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/golang/tools/raw/master/gopls/README.md&quot;&gt;Gopls&lt;/a&gt; is the official language server protocol (lsp) implementation provided by the Go team. It is intended to replace the existing third party tools for code formatting (gofmt), automatic imports (goimports), code navigation (godef/guru), type and function descriptions (godoc/godef), error checking, auto completion (gocode), variable and type renaming (rename), and more. Once gopls is stable the older tools will no longer be supported.&lt;/p&gt; 
&lt;p&gt;Gopls is a supported backend for &lt;a href=&quot;https://github.com/emacs-lsp/lsp-mode&quot;&gt;lsp-mode&lt;/a&gt;. It will be used automatically by lsp-mode if &lt;code&gt;gopls&lt;/code&gt; is found in your PATH. You can install gopls via: &lt;code&gt;go install golang.org/x/tools/gopls@latest&lt;/code&gt;. To enable lsp-mode for go buffers:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(add-hook &#39;go-mode-hook &#39;lsp-deferred)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Syntax/error checking&lt;/h2&gt; 
&lt;p&gt;There are two ways of using flymake with Go:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dougm/goflymake&quot;&gt;goflymake&lt;/a&gt;, which internally uses &lt;code&gt;go build&lt;/code&gt; to capture all errors that a regular compilation would also produce&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://marmalade-repo.org/packages/flymake-go&quot;&gt;flymake-go&lt;/a&gt; for a more lightweight solution that only uses &lt;code&gt;gofmt&lt;/code&gt; and as such is only able to catch syntax errors. Unlike goflymake, however, it does not require an additional executable.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Additionally, there is &lt;a href=&quot;https://github.com/flycheck/flycheck&quot;&gt;flycheck&lt;/a&gt;, a modern replacement for flymake, which comes with built-in support for Go. In addition to using &lt;code&gt;go build&lt;/code&gt; or &lt;code&gt;gofmt&lt;/code&gt;, it also has support for &lt;code&gt;go vet&lt;/code&gt;, &lt;code&gt;golint&lt;/code&gt; and &lt;code&gt;errcheck&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Auto completion&lt;/h2&gt; 
&lt;p&gt;For auto completion, take a look at &lt;a href=&quot;https://github.com/nsf/gocode&quot;&gt;gocode&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;eldoc&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/syohex/emacs-go-eldoc&quot;&gt;https://github.com/syohex/emacs-go-eldoc&lt;/a&gt; provides eldoc functionality for go-mode.&lt;/p&gt; 
&lt;h2&gt;Snippets&lt;/h2&gt; 
&lt;p&gt;I maintain a set of YASnippet snippets for go-mode at &lt;a href=&quot;https://github.com/dominikh/yasnippet-go&quot;&gt;https://github.com/dominikh/yasnippet-go&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Integration with errcheck&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/dominikh/go-errcheck.el&quot;&gt;https://github.com/dominikh/go-errcheck.el&lt;/a&gt; provides integration with &lt;a href=&quot;https://github.com/kisielk/errcheck&quot;&gt;errcheck&lt;/a&gt;.&lt;/p&gt; 
&lt;h1&gt;Stability&lt;/h1&gt; 
&lt;p&gt;go-mode.el has regular, tagged releases and is part of the MELPA Stable repository. These tagged releases are intended to provide a stable experience. APIs added in tagged releases will usually not be removed or changed in future releases.&lt;/p&gt; 
&lt;p&gt;Changes made on the master branch, which is tracked by the normal MELPA repository, however, are under active development. New APIs are experimental and may be changed or removed before the next release. Furthermore, there is a higher chance for bugs.&lt;/p&gt; 
&lt;p&gt;If you want a stable experience, use MELPA Stable. If you want cutting edge features, or &quot;beta-test&quot; future releases, use MELPA or the master branch.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/c7140c8d2bef620d830027bdcb29251a262706b999c78e32781674885ba5f508/dominikh/go-mode.el" medium="image" />
      
    </item>
    
    <item>
      <title>emacs-lsp/lsp-mode</title>
      <link>https://github.com/emacs-lsp/lsp-mode</link>
      <description>&lt;p&gt;Emacs client/library for the Language Server Protocol&lt;/p&gt;&lt;hr&gt;&lt;hr /&gt; 
&lt;h2&gt;title: LSP Mode - Language Server Protocol support for Emacs description: Language Server Protocol support with multiple languages support for Emacs root_file: &lt;a href=&quot;http://README.md&quot;&gt;README.md&lt;/a&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://melpa.org/#/lsp-mode&quot;&gt;&lt;img src=&quot;https://melpa.org/packages/lsp-mode-badge.svg?sanitize=true&quot; alt=&quot;&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://stable.melpa.org/#/lsp-mode&quot;&gt;&lt;img src=&quot;https://stable.melpa.org/packages/lsp-mode-badge.svg?sanitize=true&quot; alt=&quot;&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.gg/swuxy5AAgT&quot;&gt;&lt;img src=&quot;https://discordapp.com/api/guilds/789885435026604033/widget.png?style=shield&quot; alt=&quot;&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/emacs-lsp/lsp-mode/actions/workflows/test.yml&quot;&gt;&lt;img src=&quot;https://github.com/emacs-lsp/lsp-mode/actions/workflows/test.yml/badge.svg?sanitize=true&quot; alt=&quot;CI&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;img src=&quot;https://raw.githubusercontent.com/emacs-lsp/lsp-mode/master/examples/logo.png&quot; width=&quot;240&quot; align=&quot;right&quot; /&gt; 
&lt;h1&gt;Language Server Protocol Support for Emacs&lt;/h1&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/emacs-lsp/lsp-mode/master/examples/head.png&quot; alt=&quot;LSP mode&quot; /&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode&quot;&gt;&lt;strong&gt;homepage&lt;/strong&gt;&lt;/a&gt; • &lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode/page/installation&quot;&gt;&lt;strong&gt;installation&lt;/strong&gt;&lt;/a&gt; • &lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode/page/languages&quot;&gt;&lt;strong&gt;languages&lt;/strong&gt;&lt;/a&gt; • &lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode/page/settings/mode/&quot;&gt;&lt;strong&gt;settings&lt;/strong&gt;&lt;/a&gt; • &lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode/tutorials/CPP-guide/&quot;&gt;&lt;strong&gt;tutorials&lt;/strong&gt;&lt;/a&gt; • &lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode/page/troubleshooting&quot;&gt;&lt;strong&gt;troubleshooting&lt;/strong&gt;&lt;/a&gt; • &lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode/page/gallery&quot;&gt;&lt;strong&gt;screenshots&lt;/strong&gt;&lt;/a&gt; • &lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode/page/faq&quot;&gt;&lt;strong&gt;FAQ&lt;/strong&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Why?&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;❤️ &lt;strong&gt;Community Driven&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;💎 &lt;strong&gt;Fully featured&lt;/strong&gt; - supports &lt;strong&gt;all&lt;/strong&gt; features in Language Server Protocol v3.14.&lt;/li&gt; 
 &lt;li&gt;🚀 &lt;strong&gt;Fast&lt;/strong&gt; - see &lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode/page/performance&quot;&gt;performance section&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;🌟 &lt;strong&gt;Flexible&lt;/strong&gt; - choose between full-blown IDE with flashy UI or minimal distraction free.&lt;/li&gt; 
 &lt;li&gt;⚙️ &lt;strong&gt;Easy to configure&lt;/strong&gt; - works out of the box and automatically upgrades if additional packages are present.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Overview&lt;/h2&gt; 
&lt;p&gt;Client for &lt;a href=&quot;https://github.com/Microsoft/language-server-protocol/&quot;&gt;Language Server Protocol&lt;/a&gt; (v3.14). &lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode&quot;&gt;lsp-mode&lt;/a&gt; aims to provide IDE-like experience by providing optional integration with the most popular Emacs packages like &lt;code&gt;company&lt;/code&gt;, &lt;code&gt;flycheck&lt;/code&gt; and &lt;code&gt;projectile&lt;/code&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Non-blocking asynchronous calls&lt;/li&gt; 
 &lt;li&gt;Real-time Diagnostics/linting via &lt;a href=&quot;https://github.com/flycheck/flycheck&quot;&gt;flycheck&lt;/a&gt; (recommended) or &lt;code&gt;flymake&lt;/code&gt; when Emacs &amp;gt; 26 (requires flymake&amp;gt;=1.0.5)&lt;/li&gt; 
 &lt;li&gt;Code completion - &lt;code&gt;company-capf&lt;/code&gt; / &lt;code&gt;completion-at-point&lt;/code&gt; (note that &lt;a href=&quot;https://github.com/tigersoldier/company-lsp&quot;&gt;company-lsp&lt;/a&gt; is no longer supported).&lt;/li&gt; 
 &lt;li&gt;Hovers - using &lt;a href=&quot;https://emacs-lsp.github.io/lsp-ui&quot;&gt;lsp-ui&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Code actions - via &lt;code&gt;lsp-execute-code-action&lt;/code&gt;, &lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode/page/main-features/#code-actions-on-modeline&quot;&gt;modeline&lt;/a&gt; (recommended) or &lt;a href=&quot;https://emacs-lsp.github.io/lsp-ui&quot;&gt;lsp-ui&lt;/a&gt; sideline.&lt;/li&gt; 
 &lt;li&gt;Code outline - using builtin &lt;a href=&quot;https://www.gnu.org/software/emacs/manual/html_node/emacs/Imenu.html&quot;&gt;imenu&lt;/a&gt; or &lt;code&gt;helm-imenu&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Code navigation - using builtin &lt;a href=&quot;https://www.gnu.org/software/emacs/manual/html_node/emacs/Xref.html&quot;&gt;xref&lt;/a&gt;, &lt;a href=&quot;https://github.com/emacs-lsp/lsp-treemacs&quot;&gt;lsp-treemacs&lt;/a&gt; tree views or &lt;a href=&quot;https://emacs-lsp.github.io/lsp-ui&quot;&gt;lsp-ui&lt;/a&gt; peek functions.&lt;/li&gt; 
 &lt;li&gt;Code lens&lt;/li&gt; 
 &lt;li&gt;Symbol highlights&lt;/li&gt; 
 &lt;li&gt;Formatting&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode/page/main-features/#project-errors-on-modeline&quot;&gt;Project errors&lt;/a&gt; on modeline&lt;/li&gt; 
 &lt;li&gt;Debugger - &lt;a href=&quot;https://emacs-lsp.github.io/dap-mode/&quot;&gt;dap-mode&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode/page/main-features/#breadcrumb-on-headerline&quot;&gt;Breadcrumb on headerline&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Helm integration - &lt;a href=&quot;https://github.com/emacs-lsp/helm-lsp/&quot;&gt;helm-lsp&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Ivy integration - &lt;a href=&quot;https://github.com/emacs-lsp/lsp-ivy/&quot;&gt;lsp-ivy&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Consult integration - &lt;a href=&quot;https://github.com/gagbo/consult-lsp&quot;&gt;consult-lsp&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Treemacs integration - &lt;a href=&quot;https://github.com/emacs-lsp/lsp-treemacs&quot;&gt;lsp-treemacs&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Semantic tokens as defined by LSP 3.17 (compatible language servers include recent development builds of clangd and rust-analyzer)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/justbur/emacs-which-key/&quot;&gt;which-key&lt;/a&gt; integration for better discovery&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode/page/main-features/#iedit&quot;&gt;iedit&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode/page/main-features/#dired&quot;&gt;dired&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://emacs-lsp.github.io/lsp-mode/page/main-features/#integrations&quot;&gt;ido&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Presentations/demos&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://twitter.com/SystemCrafters&quot;&gt;System Crafters&lt;/a&gt; channel &lt;a href=&quot;https://www.youtube.com/playlist?list=PLEoMzSkcN8oNvsrtk_iZSb94krGRofFjN&quot;&gt;Emacs IDE Videos&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/skybert&quot;&gt;skybert&lt;/a&gt;&#39;s emacsconf &lt;a href=&quot;https://media.emacsconf.org/2019/19.html&quot;&gt;presentation&lt;/a&gt; (Java)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/thatwist&quot;&gt;thatwist&lt;/a&gt;&#39;s ScalaUA Conference &lt;a href=&quot;https://www.youtube.com/watch?v=x7ey0ifcqAg&amp;amp;feature=youtu.be&quot;&gt;presentation&lt;/a&gt; (Scala)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;See also&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/emacs-lsp/lsp-docker/&quot;&gt;lsp-docker&lt;/a&gt; - provide docker image with preconfigured language servers with corresponding emacs configuration.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sebastiencs/company-box/&quot;&gt;company-box&lt;/a&gt; - &lt;code&gt;company&lt;/code&gt; frontend with icons.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/emacs-lsp/dap-mode&quot;&gt;dap-mode&lt;/a&gt; - Debugger integration for &lt;code&gt;lsp-mode&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/emacs/manual/html_node/eglot/&quot;&gt;eglot&lt;/a&gt; - A minimal LSP implementation built in to Emacs.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/justbur/emacs-which-key/&quot;&gt;which-key&lt;/a&gt; - Emacs package that displays available keybindings in popup&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bbatsov/projectile/&quot;&gt;projectile&lt;/a&gt; - Project Interaction Library for Emacs&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ubolonton/emacs-tree-sitter&quot;&gt;emacs-tree-sitter&lt;/a&gt; - Faster, fine-grained code highlighting via &lt;a href=&quot;https://github.com/tree-sitter/tree-sitter&quot;&gt;tree-sitter&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://akrl.sdf.org/gccemacs.html&quot;&gt;gccemacs&lt;/a&gt; - modified Emacs capable of compiling and running Emacs Lisp as native code.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Contributions&lt;/h2&gt; 
&lt;p&gt;Contributions are very much welcome!&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; Documentation for clients is generated from doc comments in the clients themselves (see &lt;a href=&quot;https://github.com/emacs-lsp/lsp-mode/raw/master/docs/lsp-doc.el&quot;&gt;lsp-doc.el&lt;/a&gt;) and some metadata (see &lt;a href=&quot;https://github.com/emacs-lsp/lsp-mode/raw/master/docs/lsp-clients.json&quot;&gt;lsp-clients.json&lt;/a&gt;) so please submit corrections accordingly.&lt;/p&gt; 
&lt;h2&gt;Support the project&lt;/h2&gt; 
&lt;p&gt;The &lt;code&gt;emacs-lsp&lt;/code&gt; organization has more than &lt;strong&gt;20,000 lines of code&lt;/strong&gt;, to keep all of this working, we need to implement new features and help the community on a lot of issues.&lt;/p&gt; 
&lt;p&gt;You can help us keep going and improving it by &lt;strong&gt;&lt;a href=&quot;https://github.com/sponsors/emacs-lsp&quot;&gt;supporting the project&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://opencollective.com/emacs-lsp&quot;&gt;&lt;img src=&quot;https://opencollective.com/emacs-lsp/tiers/backer.svg?sanitize=true&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Members&lt;/h3&gt; 
&lt;p&gt;Here is a list of the current &lt;code&gt;lsp-mode&lt;/code&gt; members and what they are primarily working on/responsible for.&lt;/p&gt; 
&lt;table id=&quot;emacs-lsp-members&quot;&gt; 
 &lt;tbody&gt;
  &lt;tr&gt; 
   &lt;td align=&quot;center&quot;&gt; 
    &lt;div&gt; 
     &lt;a href=&quot;https://github.com/totbwf&quot;&gt; &lt;img src=&quot;https://github.com/totbwf.png&quot; width=&quot;100px;&quot; style=&quot;border-radius: 50%;&quot; alt=&quot;totbwf&quot; /&gt; &lt;br /&gt; &lt;sub&gt;&lt;b&gt;totbwf&lt;/b&gt;&lt;/sub&gt; &lt;/a&gt; 
     &lt;br /&gt; F# 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td align=&quot;center&quot;&gt; 
    &lt;div&gt; 
     &lt;a href=&quot;https://github.com/brotzeit&quot;&gt; &lt;img src=&quot;https://github.com/brotzeit.png&quot; width=&quot;100px;&quot; style=&quot;border-radius: 50%;&quot; alt=&quot;brotzeit&quot; /&gt; &lt;br /&gt; &lt;sub&gt;&lt;b&gt;brotzeit&lt;/b&gt;&lt;/sub&gt; &lt;/a&gt; 
     &lt;br /&gt; Rust 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td align=&quot;center&quot;&gt; 
    &lt;div&gt; 
     &lt;a href=&quot;https://github.com/dsyzling&quot;&gt; &lt;img src=&quot;https://github.com/dsyzling.png&quot; width=&quot;100px;&quot; style=&quot;border-radius: 50%;&quot; alt=&quot;dsyzling&quot; /&gt; &lt;br /&gt; &lt;sub&gt;&lt;b&gt;dsyzling&lt;/b&gt;&lt;/sub&gt; &lt;/a&gt; 
     &lt;br /&gt; Scala 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td align=&quot;center&quot;&gt; 
    &lt;div&gt; 
     &lt;a href=&quot;https://github.com/kurnevsky&quot;&gt; &lt;img src=&quot;https://github.com/kurnevsky.png&quot; width=&quot;100px;&quot; style=&quot;border-radius: 50%;&quot; alt=&quot;kurnevsky&quot; /&gt; &lt;br /&gt; &lt;sub&gt;&lt;b&gt;kurnevsky&lt;/b&gt;&lt;/sub&gt; &lt;/a&gt; 
     &lt;br /&gt; Scala | Rust 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td align=&quot;center&quot;&gt; 
    &lt;div&gt; 
     &lt;a href=&quot;https://github.com/seagle0128&quot;&gt; &lt;img src=&quot;https://github.com/seagle0128.png&quot; width=&quot;100px;&quot; style=&quot;border-radius: 50%;&quot; alt=&quot;seagle0128&quot; /&gt; &lt;br /&gt; &lt;sub&gt;&lt;b&gt;seagle0128&lt;/b&gt;&lt;/sub&gt; &lt;/a&gt; 
     &lt;br /&gt; Go | Python MS 
    &lt;/div&gt; &lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td align=&quot;center&quot;&gt; 
    &lt;div&gt; 
     &lt;a href=&quot;https://github.com/sebastiansturm&quot;&gt; &lt;img src=&quot;https://github.com/sebastiansturm.png&quot; width=&quot;100px;&quot; style=&quot;border-radius: 50%;&quot; alt=&quot;sebastiansturm&quot; /&gt; &lt;br /&gt; &lt;sub&gt;&lt;b&gt;sebastiansturm&lt;/b&gt;&lt;/sub&gt; &lt;/a&gt; 
     &lt;br /&gt; lsp-mode core | C++ 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td align=&quot;center&quot;&gt; 
    &lt;div&gt; 
     &lt;a href=&quot;https://github.com/vibhavp&quot;&gt; &lt;img src=&quot;https://github.com/vibhavp.png&quot; width=&quot;100px;&quot; style=&quot;border-radius: 50%;&quot; alt=&quot;vibhavp&quot; /&gt; &lt;br /&gt; &lt;sub&gt;&lt;b&gt;vibhavp&lt;/b&gt;&lt;/sub&gt; &lt;/a&gt; 
     &lt;br /&gt; lsp-mode core 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td align=&quot;center&quot;&gt; 
    &lt;div&gt; 
     &lt;a href=&quot;https://github.com/yyoncho&quot;&gt; &lt;img src=&quot;https://github.com/yyoncho.png&quot; width=&quot;100px;&quot; style=&quot;border-radius: 50%;&quot; alt=&quot;yyoncho&quot; /&gt; &lt;br /&gt; &lt;sub&gt;&lt;b&gt;yyoncho&lt;/b&gt;&lt;/sub&gt; &lt;/a&gt; 
     &lt;br /&gt; lsp-mode core | Java 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td align=&quot;center&quot;&gt; 
    &lt;div&gt; 
     &lt;a href=&quot;https://github.com/ericdallo&quot;&gt; &lt;img src=&quot;https://github.com/ericdallo.png&quot; width=&quot;100px;&quot; style=&quot;border-radius: 50%;&quot; alt=&quot;ericdallo&quot; /&gt; &lt;br /&gt; &lt;sub&gt;&lt;b&gt;ericdallo&lt;/b&gt;&lt;/sub&gt; &lt;/a&gt; 
     &lt;br /&gt; Dart/Flutter | Clojure 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td align=&quot;center&quot;&gt; 
    &lt;div&gt; 
     &lt;a href=&quot;https://github.com/danielmartin&quot;&gt; &lt;img src=&quot;https://github.com/danielmartin.png&quot; width=&quot;100px;&quot; style=&quot;border-radius: 50%;&quot; alt=&quot;danielmartin&quot; /&gt; &lt;br /&gt; &lt;sub&gt;&lt;b&gt;danielmartin&lt;/b&gt;&lt;/sub&gt; &lt;/a&gt; 
     &lt;br /&gt; C++ | Swift 
    &lt;/div&gt; &lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td align=&quot;center&quot;&gt; 
    &lt;div&gt; 
     &lt;a href=&quot;https://github.com/kiennq&quot;&gt; &lt;img src=&quot;https://github.com/kiennq.png&quot; width=&quot;100px;&quot; style=&quot;border-radius: 50%;&quot; alt=&quot;kiennq&quot; /&gt; &lt;br /&gt; &lt;sub&gt;&lt;b&gt;kiennq&lt;/b&gt;&lt;/sub&gt; &lt;/a&gt; 
     &lt;br /&gt; completions | pwsh 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td align=&quot;center&quot;&gt; 
    &lt;div&gt; 
     &lt;a href=&quot;https://github.com/nbfalcon&quot;&gt; &lt;img src=&quot;https://github.com/nbfalcon.png&quot; width=&quot;100px;&quot; style=&quot;border-radius: 50%;&quot; alt=&quot;nbfalcon&quot; /&gt; &lt;br /&gt; &lt;sub&gt;&lt;b&gt;nbfalcon&lt;/b&gt;&lt;/sub&gt; &lt;/a&gt; 
     &lt;br /&gt; lsp-mode core | iedit 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td align=&quot;center&quot;&gt; 
    &lt;div&gt; 
     &lt;a href=&quot;https://github.com/psibi&quot;&gt; &lt;img src=&quot;https://github.com/psibi.png&quot; width=&quot;100px;&quot; style=&quot;border-radius: 50%;&quot; alt=&quot;psibi&quot; /&gt; &lt;br /&gt; &lt;sub&gt;&lt;b&gt;psibi&lt;/b&gt;&lt;/sub&gt; &lt;/a&gt; 
     &lt;br /&gt; Terraform | Nix 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td align=&quot;center&quot;&gt; 
    &lt;div&gt; 
     &lt;a href=&quot;https://github.com/razzmatazz&quot;&gt; &lt;img src=&quot;https://github.com/razzmatazz.png&quot; width=&quot;100px;&quot; style=&quot;border-radius: 50%;&quot; alt=&quot;razzmatazz&quot; /&gt; &lt;br /&gt; &lt;sub&gt;&lt;b&gt;razzmatazz&lt;/b&gt;&lt;/sub&gt; &lt;/a&gt; 
     &lt;br /&gt; C# | F# 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td align=&quot;center&quot;&gt; 
    &lt;div&gt; 
     &lt;a href=&quot;https://github.com/jcs090218&quot;&gt; &lt;img src=&quot;https://github.com/jcs090218.png&quot; width=&quot;100px;&quot; style=&quot;border-radius: 50%;&quot; alt=&quot;jcs090218&quot; /&gt; &lt;br /&gt; &lt;sub&gt;&lt;b&gt;jcs090218&lt;/b&gt;&lt;/sub&gt; &lt;/a&gt; 
     &lt;br /&gt; lsp-mode core 
    &lt;/div&gt; &lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt;
&lt;/table&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/75415169/61c25480-93b5-11e9-9b4b-3161cebdb7fb" medium="image" />
      
    </item>
    
    <item>
      <title>justbur/emacs-which-key</title>
      <link>https://github.com/justbur/emacs-which-key</link>
      <description>&lt;p&gt;Emacs package that displays available keybindings in popup&lt;/p&gt;&lt;hr&gt;&lt;ul&gt; 
 &lt;li&gt;which-key [[&lt;a href=&quot;https://elpa.gnu.org/packages/which-key.html&quot;&gt;https://elpa.gnu.org/packages/which-key.html&lt;/a&gt;][&lt;a href=&quot;https://elpa.gnu.org/packages/which-key.svg&quot;&gt;https://elpa.gnu.org/packages/which-key.svg&lt;/a&gt;]] [[&lt;a href=&quot;http://melpa.org/#/which-key&quot;&gt;http://melpa.org/#/which-key&lt;/a&gt;][&lt;a href=&quot;http://melpa.org/packages/which-key-badge.svg&quot;&gt;http://melpa.org/packages/which-key-badge.svg&lt;/a&gt;]] [[&lt;a href=&quot;http://stable.melpa.org/#/which-key&quot;&gt;http://stable.melpa.org/#/which-key&lt;/a&gt;][file:&lt;a href=&quot;http://stable.melpa.org/packages/which-key-badge.svg&quot;&gt;http://stable.melpa.org/packages/which-key-badge.svg&lt;/a&gt;]]&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;** ARCHIVE NOTICE&lt;/p&gt; 
&lt;p&gt;which-key is now included in the master branch of Emacs and will likely be released with Emacs v30. Bug reports and contributions to which-key will now be considered through standard Emacs channels, and this repository is being archived.&lt;/p&gt; 
&lt;p&gt;** Introduction =which-key= is a minor mode for Emacs that displays the key bindings following your currently entered incomplete command (a prefix) in a popup. For example, after enabling the minor mode if you enter =C-x= and wait for the default of 1 second the minibuffer will expand with all of the available key bindings that follow =C-x= (or as many as space allows given your settings). This includes prefixes like =C-x 8= which are shown in a different face. Screenshots of what the popup will look like are included below. =which-key= started as a rewrite of [[&lt;a href=&quot;https://github.com/kai2nenobu/guide-key&quot;&gt;https://github.com/kai2nenobu/guide-key&lt;/a&gt;][guide-key-mode]], but the feature sets have diverged to a certain extent.&lt;/p&gt; 
&lt;p&gt;** Table of Contents :TOC_3:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;[[#which-key][which-key]] 
  &lt;ul&gt; 
   &lt;li&gt;[[#archive-notice][ARCHIVE NOTICE]]&lt;/li&gt; 
   &lt;li&gt;[[#introduction][Introduction]]&lt;/li&gt; 
   &lt;li&gt;[[#install][Install]] 
    &lt;ul&gt; 
     &lt;li&gt;[[#melpa][MELPA]]&lt;/li&gt; 
     &lt;li&gt;[[#manually][Manually]]&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;[[#initial-setup][Initial Setup]] 
    &lt;ul&gt; 
     &lt;li&gt;[[#side-window-bottom-option][Side Window Bottom Option]]&lt;/li&gt; 
     &lt;li&gt;[[#side-window-right-option][Side Window Right Option]]&lt;/li&gt; 
     &lt;li&gt;[[#side-window-right-then-bottom][Side Window Right then Bottom]]&lt;/li&gt; 
     &lt;li&gt;[[#minibuffer-option][Minibuffer Option]]&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;[[#manual-activation][Manual Activation]]&lt;/li&gt; 
   &lt;li&gt;[[#additional-commands][Additional Commands]]&lt;/li&gt; 
   &lt;li&gt;[[#special-features-and-configuration-options][Special Features and Configuration Options]] 
    &lt;ul&gt; 
     &lt;li&gt;[[#popup-type-options][Popup Type Options]]&lt;/li&gt; 
     &lt;li&gt;[[#custom-string-replacement-options][Custom String Replacement Options]]&lt;/li&gt; 
     &lt;li&gt;[[#sorting-options][Sorting Options]]&lt;/li&gt; 
     &lt;li&gt;[[#paging-options][Paging Options]]&lt;/li&gt; 
     &lt;li&gt;[[#face-customization-options][Face Customization Options]]&lt;/li&gt; 
     &lt;li&gt;[[#other-options][Other Options]]&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;[[#support-for-third-party-libraries][Support for Third-Party Libraries]] 
    &lt;ul&gt; 
     &lt;li&gt;[[#key-chord][Key-chord]]&lt;/li&gt; 
     &lt;li&gt;[[#evil-operators][Evil operators]]&lt;/li&gt; 
     &lt;li&gt;[[#god-mode][God-mode]]&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;[[#more-examples][More Examples]] 
    &lt;ul&gt; 
     &lt;li&gt;[[#nice-display-with-split-frame][Nice Display with Split Frame]]&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;[[#known-issues][Known Issues]]&lt;/li&gt; 
   &lt;li&gt;[[#thanks][Thanks]]&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;** Install *** MELPA After setting up [[&lt;a href=&quot;http://melpa.org&quot;&gt;http://melpa.org&lt;/a&gt;][MELPA]] as a repository, use =M-x package-install which-key= or your preferred method. You will need to call =which-key-mode= to enable the minor mode of course.&lt;/p&gt; 
&lt;p&gt;*** Manually Add which-key.el to your =load-path= and require. Something like #+BEGIN_SRC emacs-lisp (add-to-list &#39;load-path &quot;path/to/which-key.el&quot;) (require &#39;which-key) (which-key-mode) #+END_SRC&lt;/p&gt; 
&lt;p&gt;** Initial Setup No further setup is required if you are happy with the default setup. To try other options, there are 3 choices of default configs that are preconfigured (then customize to your liking). The main choice is where you want the which-key buffer to display. Screenshots of the default options are shown in the next sections.&lt;/p&gt; 
&lt;p&gt;In each case, we show as many key bindings as we can fit in the buffer within the constraints. The constraints are determined by several factors, including your Emacs settings, the size of the current Emacs frame, and the which-key settings, most of which are described below.&lt;/p&gt; 
&lt;p&gt;There are many substitution abilities included, which are quite flexible (ability to use regexp for example). This makes which-key very customizable.&lt;/p&gt; 
&lt;p&gt;*** Side Window Bottom Option Popup side window on bottom. This is the current default. To restore this setup use&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#+BEGIN_SRC emacs-lisp
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;(which-key-setup-side-window-bottom) #+END_SRC&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[[./img/which-key-bottom.png]]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;*** Side Window Right Option Popup side window on right. For defaults use&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#+BEGIN_SRC emacs-lisp
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;(which-key-setup-side-window-right) #+END_SRC&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Note the defaults are fairly conservative and will tend to not display on
narrower frames. If you get a message saying which-key can&#39;t display the
keys, try making your frame wider or adjusting the defaults related to the
maximum width (see =M-x customize-group which-key=).

[[./img/which-key-right.png]]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;*** Side Window Right then Bottom This is a combination of the previous two choices. It will try to use the right side, but if there is no room it will switch to using the bottom, which is usually easier to fit keys into. This setting can be helpful if the size of the Emacs frame changes frequently, which might be the case if you are using a dynamic/tiling window manager.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#+BEGIN_SRC emacs-lisp
(which-key-setup-side-window-right-bottom)
#+END_SRC
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;*** Minibuffer Option Take over the minibuffer. For the recommended configuration use&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#+BEGIN_SRC emacs-lisp
(which-key-setup-minibuffer)
#+END_SRC

[[./img/which-key-minibuffer.png]]

Note the maximum height of the minibuffer is controlled through the built-in
variable =max-mini-window-height=. Also, the paging commands do not work
reliably with the minibuffer option. Use the side window on the bottom
option if you need paging.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;** Manual Activation #+NAME: #manual-activation If you only want the =which-key= popup when you need it, you can try a setup along the following lines&lt;/p&gt; 
&lt;p&gt;#+BEGIN_SRC emacs-lisp ;; Allow C-h to trigger which-key before it is done automatically (setq which-key-show-early-on-C-h t) ;; make sure which-key doesn&#39;t show normally but refreshes quickly after it is ;; triggered. (setq which-key-idle-delay 10000) (setq which-key-idle-secondary-delay 0.05) (which-key-mode) #+END_SRC&lt;/p&gt; 
&lt;p&gt;This will prevent which-key from showing automatically, and allow you to use =C-h= in the middle of a key sequence to show the =which-key= buffer and keep it open for the remainder of the key sequence.&lt;/p&gt; 
&lt;p&gt;** Additional Commands&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;=which-key-show-top-level= will show most key bindings without a prefix. It is most and not all, because many are probably not interesting to most users.&lt;/li&gt; 
 &lt;li&gt;=which-key-show-major-mode= will show the currently active major-mode bindings. It&#39;s similar to =C-h m= but in a which-key format. It is also aware of evil commands defined using =evil-define-key=.&lt;/li&gt; 
 &lt;li&gt;=which-key-show-next-page-cycle= / =which-key-show-previous-page-cycle= will flip pages in a circle.&lt;/li&gt; 
 &lt;li&gt;=which-key-show-next-page-no-cycle= / =which-key-show-previous-page-no-cycle= will flip pages and stop at first/last page.&lt;/li&gt; 
 &lt;li&gt;=which-key-undo= can be used to undo the last keypress when in the middle of a key sequence.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;** Special Features and Configuration Options There are more options than the ones described here. All of the configurable variables are available through =M-x customize-group which-key=. *** Popup Type Options There are three different popup types that which-key can use by default to display the available keys. The variable =which-key-popup-type= decides which one is used. **** minibuffer #+BEGIN_SRC emacs-lisp (setq which-key-popup-type &#39;minibuffer) #+END_SRC Show keys in the minibuffer. **** side window #+BEGIN_SRC emacs-lisp (setq which-key-popup-type &#39;side-window) #+END_SRC Show keys in a side window. This popup type has further options: #+BEGIN_SRC emacs-lisp ;; location of which-key window. valid values: top, bottom, left, right, ;; or a list of any of the two. If it&#39;s a list, which-key will always try ;; the first location first. It will go to the second location if there is ;; not enough room to display any keys in the first location (setq which-key-side-window-location &#39;bottom)&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; ;; max width of which-key window, when displayed at left or right.
 ;; valid values: number of columns (integer), or percentage out of current
 ;; frame&#39;s width (float larger than 0 and smaller than 1)
 (setq which-key-side-window-max-width 0.33)

 ;; max height of which-key window, when displayed at top or bottom.
 ;; valid values: number of lines (integer), or percentage out of current
 ;; frame&#39;s height (float larger than 0 and smaller than 1)
 (setq which-key-side-window-max-height 0.25)
 #+END_SRC
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;**** frame&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; #+BEGIN_SRC emacs-lisp
 (setq which-key-popup-type &#39;frame)
 #+END_SRC
 Show keys in a popup frame. This popup won&#39;t work very well in a terminal,
 where only one frame can be shown at any given moment. This popup type has
 further options:
 #+BEGIN_SRC emacs-lisp
 ;; max width of which-key frame: number of columns (an integer)
 (setq which-key-frame-max-width 60)

 ;; max height of which-key frame: number of lines (an integer)
 (setq which-key-frame-max-height 20)
 #+END_SRC
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;**** custom Write your own display functions! This requires you to write three functions, =which-key-custom-popup-max-dimensions-function=, =which-key-custom-show-popup-function=, and =which-key-custom-hide-popup-function=. Refer to the documentation for those variables for more information, but here is a working example (this is the current implementation of side-window bottom).&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; #+BEGIN_SRC emacs-lisp
   (setq which-key-popup-type &#39;custom)
   (defun which-key-custom-popup-max-dimensions-function (ignore)
     (cons
      (which-key-height-or-percentage-to-height
       which-key-side-window-max-height)
      (frame-width)))
   (defun fit-horizonatally ()
     (let ((fit-window-to-buffer-horizontally t))
       (fit-window-to-buffer)))
   (defun which-key-custom-show-popup-function (act-popup-dim)
     (let* ((alist &#39;((window-width . fit-horizontally)
                     (window-height . fit-window-to-buffer))))
       (if (get-buffer-window which-key--buffer)
           (display-buffer-reuse-window which-key--buffer alist)
         (display-buffer-in-major-side-window which-key--buffer
                                              &#39;bottom 0 alist))))
   (defun which-key-custom-hide-popup-function ()
     (when (buffer-live-p which-key--buffer)
       (quit-windows-on which-key--buffer)))
 #+END_SRC
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;*** Custom String Replacement Options #+NAME: #custom-string-replacement-options You can customize the way the keys show in the buffer using three different replacement methods. The first, keymap-based replacement, is preferred and will take precedence over the others. The remaining methods are still available, because they pre-date the first and are more flexible in what they can accomplish.&lt;/p&gt; 
&lt;p&gt;**** Keymap-based replacement Using this method, which-key can display a custom string for a key definition in some keymap. There are two ways to define a keymap-based replacement. The preferred way is to use =define-key= (or a command that uses =define-key= internally) with a cons cell as the definition. For example,&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; #+BEGIN_SRC emacs-lisp
   (define-key some-map &quot;f&quot; &#39;(&quot;foo&quot; . command-foo))
   (define-key some-map &quot;b&quot; &#39;(&quot;bar-prefix&quot; . (keymap)))
   (setq my-map (make-sparse-keymap))
   (define-key some-map &quot;b&quot; (cons &quot;bar-prefix&quot; my-map))
 #+END_SRC

 binds =command-foo= to =f= in =some-map=, but also stores the string &quot;foo&quot;
 which which-key will extract to use to describe this command. The second
 example binds an empty keymap to =b= in =some-map= and uses &quot;bar-prefix&quot; to
 describe it. The last two lines replicate the functionality of the second
 line, while assigning the new keymap to the symbol =my-map= (note the use
 of =cons= to ensure that =my-map= is evaluated for =define-key=). These
 bindings are accepted by =define-key= natively (i.e., with or without
 which-key being loaded). Since many key-binding utilities use =define-key=
 internally, this functionality should be available with your favorite
 method of defining keys as well.

 The second method is to use =which-key-add-keymap-based-replacements=. The
 statement

 #+BEGIN_SRC emacs-lisp
   (define-key some-map &quot;f&quot; &#39;long-command-name-foo)
   (define-key some-map &quot;b&quot; some-prefix-map)
   (which-key-add-keymap-based-replacements some-map
     &quot;f&quot; &#39;(&quot;foo&quot; . long-command-name-foo)
     &quot;b&quot; &#39;(&quot;bar-prefix&quot; . (keymap)))
 #+END_SRC

 uses =define-key= to add two bindings and tells which-key to use the string
 &quot;foo&quot; in place of &quot;command-foo&quot; and the string &quot;bar-prefix&quot; for an empty
 prefix map. =which-key-add-keymap-based-replacements= just uses
 =define-key= to bind (or rebind) the command.

 There are other methods of telling which-key to replace command names,
 which are described next. The keymap-based replacements should be the most
 performant since they use built-in functionality of emacs. However, the
 alternatives can be more flexible in telling which-key how and when to
 replace text. They can be used simultaneously, but which-key will give
 precedence to the keymap-based replacement when it exists.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;**** Key-Based replacement Using this method, the description of a key is replaced using a string that you provide. Here&#39;s an example&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; #+BEGIN_SRC emacs-lisp
 (which-key-add-key-based-replacements
   &quot;C-x C-f&quot; &quot;find files&quot;)
 #+END_SRC

 where the first string is the key combination whose description you want to
 replace, in a form suitable for =kbd=. For that key combination, which-key
 overwrites the description with the second string, &quot;find files&quot;. In the
 second type of entry you can restrict the replacements to a major-mode. For
 example,

 #+BEGIN_SRC emacs-lisp
 (which-key-add-major-mode-key-based-replacements &#39;org-mode
   &quot;C-c C-c&quot; &quot;Org C-c C-c&quot;
   &quot;C-c C-a&quot; &quot;Org Attach&quot;)
 #+END_SRC

 Here the first entry is the major-mode followed by a list of the first type
 of entries. In case the same key combination is listed under a major-mode
 and by itself, the major-mode version takes precedence.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;**** Key and Description replacement&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; The second and third methods target the text used for the keys and the
 descriptions directly. The relevant variable is
 =which-key-replacement-alist=.  Here&#39;s an example of one of the default key
 replacements

 #+BEGIN_SRC emacs-lisp
 (push &#39;((&quot;&amp;lt;\\([[:alnum:]-]+\\)&amp;gt;&quot; . nil) . (&quot;\\1&quot; . nil))
       which-key-replacement-alist)
 #+END_SRC

 Each element of the outer cons cell is a cons cell of the form =(KEY
 . BINDING)=. The =car= of the outer cons determines how to match key
 bindings while the =cdr= determines how those matches are replaced. See the
 docstring of =which-key-replacement-alist= for more information.

 The next example shows how to replace the description.

 #+BEGIN_SRC emacs-lisp
 (push &#39;((nil . &quot;left&quot;) . (nil . &quot;lft&quot;)) which-key-replacement-alist)
 #+END_SRC

 Here is an example of using key replacement to include Unicode characters
 in the results. Unfortunately, using Unicode characters may upset the
 alignment of the which-key buffer, because Unicode characters can have
 different widths even in a monospace font and alignment is based on
 character width.

 #+BEGIN_SRC emacs-lisp
 (add-to-list &#39;which-key-replacement-alist &#39;((&quot;TAB&quot; . nil) . (&quot;↹&quot; . nil)))
 (add-to-list &#39;which-key-replacement-alist &#39;((&quot;RET&quot; . nil) . (&quot;⏎&quot; . nil)))
 (add-to-list &#39;which-key-replacement-alist &#39;((&quot;DEL&quot; . nil) . (&quot;⇤&quot; . nil)))
 (add-to-list &#39;which-key-replacement-alist &#39;((&quot;SPC&quot; . nil) . (&quot;␣&quot; . nil)))
 #+END_SRC

 The =cdr= may also be a function that receives a =cons= of the form =(KEY
 . BINDING)= and produces a =cons= of the same form. This allows for
 interesting ideas like this one suggested by [[https://github.com/pdcawley][@pdcawley]] in [[https://github.com/justbur/emacs-which-key/pull/147][PR #147]].

 #+BEGIN_SRC emacs-lisp
 (push (cons &#39;(nil . &quot;paredit-mode&quot;)
             (lambda (kb)
               (cons (car kb)
                     (if paredit-mode
                         &quot;[x] paredit-mode&quot;
                       &quot;[ ] paredit-mode&quot;))))
       which-key-replacement-alist)
 #+END_SRC

 The box will be checked if =paredit-mode= is currently active.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;*** Sorting Options By default the output is sorted by the key in a custom order. The default order is to sort lexicographically within each &quot;class&quot; of key, where the classes and their order are&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=Special (SPC, TAB, ...) &amp;lt; Single Character (ASCII) (a, ...) &amp;lt; Modifier (C-, M-, ...) &amp;lt; Other=

You can control the order by setting this variable. This also shows the
other available options.

#+BEGIN_SRC emacs-lisp
;; default
(setq which-key-sort-order &#39;which-key-key-order)
;; same as default, except single characters are sorted alphabetically
;; (setq which-key-sort-order &#39;which-key-key-order-alpha)
;; same as default, except all prefix keys are grouped together at the end
;; (setq which-key-sort-order &#39;which-key-prefix-then-key-order)
;; same as default, except all keys from local maps shown first
;; (setq which-key-sort-order &#39;which-key-local-then-key-order)
;; sort based on the key description ignoring case
;; (setq which-key-sort-order &#39;which-key-description-order)
#+END_SRC
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;*** Paging Options&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;There are at least several prefixes that have many keys bound to them, like
=C-x=. which-key displays as many keys as it can given your settings, but
for these prefixes this may not be enough. The paging feature gives you the
ability to bind a key to the function =which-key-C-h-dispatch= which will
allow you to cycle through the pages without changing the key sequence you
were in the middle of typing. There are two slightly different ways of doing
this.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;**** Method 1 (default): Using C-h (or =help-char=) This is the easiest way, and is turned on by default. Use #+BEGIN_SRC emacs-lisp (setq which-key-use-C-h-commands nil) #+END_SRC to disable the behavior (this will only take effect after toggling which-key-mode if it is already enabled). =C-h= can be used with any prefix to switch pages when there are multiple pages of keys. This changes the default behavior of Emacs which is to show a list of key bindings that apply to a prefix. For example, if you were to type =C-x C-h= you would get a list of commands that follow =C-x=. This uses which-key instead to show those keys, and unlike the Emacs default saves the incomplete prefix that you just entered so that the next keystroke can complete the command.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; The commands are:
 - Cycle through the pages forward with =n= (or =C-n=)
 - Cycle backwards with =p= (or =C-p=)
 - Undo the last entered key (!) with =u= (or =C-u=)
 - Call the default command bound to =C-h=, usually
   =describe-prefix-bindings=, with =h= (or =C-h=)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This is especially useful for those who like =helm-descbinds= but also want to use =C-h= as their which-key paging key.&lt;/p&gt; 
&lt;p&gt;Note =C-h= is by default equivalent to =?= in this context.&lt;/p&gt; 
&lt;p&gt;Note also that using =C-h= will not work with the =C-h= prefix, unless you make further adjustments. See Issues [[&lt;a href=&quot;https://github.com/justbur/emacs-which-key/issues/93&quot;&gt;https://github.com/justbur/emacs-which-key/issues/93&lt;/a&gt;][#93]] and [[&lt;a href=&quot;https://github.com/justbur/emacs-which-key/issues/175&quot;&gt;https://github.com/justbur/emacs-which-key/issues/175&lt;/a&gt;][#175]] for example.&lt;/p&gt; 
&lt;p&gt;**** Method 2: Bind your own keys&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; Essentially, all you need to do for a prefix like =C-x= is the following
 which will bind =&amp;lt;f5&amp;gt;= to the relevant command.

 #+BEGIN_SRC emacs-lisp
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;(define-key which-key-mode-map (kbd &quot;C-x 
 &lt;f5&gt;
  &quot;) &#39;which-key-C-h-dispatch) #+END_SRC
 &lt;/f5&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; This is completely equivalent to

 #+BEGIN_SRC emacs-lisp
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;(setq which-key-paging-prefixes &#39;(&quot;C-x&quot;)) (setq which-key-paging-key &quot;
 &lt;f5&gt;
  &quot;) #+END_SRC
 &lt;/f5&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; where the latter are provided for convenience if you have a lot of
 prefixes.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;*** Face Customization Options The faces that which-key uses are | Face | Applied To | Default Definition | |----------------------------------------+-------------------------------+-------------------------------------------------------------| | =which-key-key-face= | Every key sequence | =:inherit font-lock-constant-face= | | =which-key-separator-face= | The separator (→) | =:inherit font-lock-comment-face= | | =which-key-note-face= | Hints and notes | =:inherit which-key-separator-face= | | =which-key-special-key-face= | User-defined special keys | =:inherit which-key-key-face :inverse-video t :weight bold= | | =which-key-group-description-face= | Command groups (i.e, keymaps) | =:inherit font-lock-keyword-face= | | =which-key-command-description-face= | Commands not in local-map | =:inherit font-lock-function-name-face= | | =which-key-local-map-description-face= | Commands in local-map | =:inherit which-key-command-description-face= |&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;The last two deserve some explanation. A command lives in one of many possible
keymaps. You can distinguish between local maps, which depend on the buffer you
are in, which modes are active, etc., and the global map which applies
everywhere. It might be useful for you to distinguish between the two. One way
to do this is to remove the default face from
=which-key-command-description-face= like this

#+BEGIN_SRC emacs-lisp
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;(set-face-attribute &#39;which-key-command-description-face nil :inherit nil) #+END_SRC&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;another is to make the local map keys appear in bold

#+BEGIN_SRC emacs-lisp
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;(set-face-attribute &#39;which-key-local-map-description-face nil :weight &#39;bold) #+END_SRC&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;You can also use =M-x customize-face= to customize any of the above faces to
your liking.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;*** Other Options #+NAME: #other-options The options below are also available through customize. Their defaults are shown.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#+BEGIN_SRC emacs-lisp
  ;; Set the time delay (in seconds) for the which-key popup to appear. A value of
  ;; zero might cause issues so a non-zero value is recommended.
  (setq which-key-idle-delay 1.0)

  ;; Set the maximum length (in characters) for key descriptions (commands or
  ;; prefixes). Descriptions that are longer are truncated and have &quot;..&quot; added.
  ;; This can also be a float (fraction of available width) or a function.
  (setq which-key-max-description-length 27)

  ;; Use additional padding between columns of keys. This variable specifies the
  ;; number of spaces to add to the left of each column.
  (setq which-key-add-column-padding 0)

  ;; The maximum number of columns to display in the which-key buffer. nil means
  ;; don&#39;t impose a maximum.
  (setq which-key-max-display-columns nil)

  ;; Set the separator used between keys and descriptions. Change this setting to
  ;; an ASCII character if your font does not show the default arrow. The second
  ;; setting here allows for extra padding for Unicode characters. which-key uses
  ;; characters as a means of width measurement, so wide Unicode characters can
  ;; throw off the calculation.
  (setq which-key-separator &quot; → &quot; )
  (setq which-key-unicode-correction 3)

  ;; Set the prefix string that will be inserted in front of prefix commands
  ;; (i.e., commands that represent a sub-map).
  (setq which-key-prefix-prefix &quot;+&quot; )

  ;; Set the special keys. These are automatically truncated to one character and
  ;; have which-key-special-key-face applied. Disabled by default. An example
  ;; setting is
  ;; (setq which-key-special-keys &#39;(&quot;SPC&quot; &quot;TAB&quot; &quot;RET&quot; &quot;ESC&quot; &quot;DEL&quot;))
  (setq which-key-special-keys nil)

  ;; Show the key prefix on the left, top, or bottom (nil means hide the prefix).
  ;; The prefix consists of the keys you have typed so far. which-key also shows
  ;; the page information along with the prefix.
  (setq which-key-show-prefix &#39;left)

  ;; Set to t to show the count of keys shown vs. total keys in the mode line.
  (setq which-key-show-remaining-keys nil)
#+END_SRC
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;** Support for Third-Party Libraries Some support is provided for third-party libraries which don&#39;t use standard methods of looking up commands. Some of these need to be enabled explicitly. This code includes some hacks, so please report any problems. *** Key-chord Enabled by default. *** Evil operators Evil motions and text objects following an operator like =d= are not all looked up in a standard way. Support is controlled through =which-key-allow-evil-operators= which should be non-nil if evil is loaded before which-key and through =which-key-show-operator-state-maps= which needs to be enabled explicitly because it is more of a hack. The former allows for the inner and outer text object maps to show, while the latter shows motions as well. *** God-mode Call =(which-key-enable-god-mode-support)= after loading god-mode to enable support for god-mode key sequences. This is new and experimental, so please report any issues. ** More Examples *** Nice Display with Split Frame Unlike guide-key, which-key looks good even if the frame is split into several windows. #+CAPTION: which-key in a frame with 3 horizontal splits [[./img/which-key-right-split.png]]&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#+CAPTION: which-key in a frame with 2 vertical splits
[[./img/which-key-bottom-split.png]]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;** Known Issues&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;A few users have reported crashes related to which-key popups when quitting a key sequence with =C-g=. A possible fix is discussed in [[&lt;a href=&quot;https://github.com/justbur/emacs-which-key/issues/130&quot;&gt;https://github.com/justbur/emacs-which-key/issues/130&lt;/a&gt;][this issue]]. ** Thanks Special thanks to&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github.com/bmag&quot;&gt;https://github.com/bmag&lt;/a&gt;][@bmag]] for helping with the initial development and finding many bugs.&lt;/li&gt; 
 &lt;li&gt;[[&lt;a href=&quot;https://github/iqbalansari&quot;&gt;https://github/iqbalansari&lt;/a&gt;][@iqbalansari]] who among other things adapted the code to make =which-key-show-top-level= possible.&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/bdca39a80cc33c87bb4b418198bded0e9c30b6ff95b829897d4462a4f8dfbbf8/justbur/emacs-which-key" medium="image" />
      
    </item>
    
    <item>
      <title>doomemacs/themes</title>
      <link>https://github.com/doomemacs/themes</link>
      <description>&lt;p&gt;A megapack of themes for GNU Emacs.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;img src=&quot;https://img.shields.io/github/tag/doomemacs/themes.svg?label=release&amp;amp;style=flat-square&quot; alt=&quot;Release tag&quot; /&gt; &lt;a href=&quot;http://melpa.org/#/doom-themes&quot;&gt;&lt;img src=&quot;http://melpa.org/packages/doom-themes-badge.svg?style=flat-square&quot; alt=&quot;MELPA&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://doomemacs.org/discord&quot;&gt;&lt;img src=&quot;https://img.shields.io/discord/406534637242810369?color=738adb&amp;amp;label=Discord&amp;amp;logo=discord&amp;amp;logoColor=white&amp;amp;style=flat-square&quot; alt=&quot;Discord Server&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;Doom Emacs&#39; Theme Pack&lt;/h1&gt; 
&lt;p&gt;A theme megapack for GNU Emacs, inspired by community favorites. Special attention is given for &lt;a href=&quot;https://doomemacs.org&quot;&gt;Doom Emacs&lt;/a&gt; and &lt;a href=&quot;https://github.com/hlissner/emacs-solaire-mode&quot;&gt;solaire-mode&lt;/a&gt; support, but will work fine anywhere else.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/doomemacs/themes/tree/screenshots&quot;&gt;See the screenshots.&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;Table of Contents&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/themes/master/#install&quot;&gt;Install&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/themes/master/#doom-emacs&quot;&gt;Doom Emacs&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/themes/master/#manually--use-package&quot;&gt;Manually + use-package&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/themes/master/#theme-list&quot;&gt;Theme list&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/themes/master/#extensions&quot;&gt;Extensions&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/themes/master/#complementary-plugins&quot;&gt;Complementary plugins&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/themes/master/#customization&quot;&gt;Customization&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/themes/master/#contribute&quot;&gt;Contribute&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Install&lt;/h2&gt; 
&lt;h3&gt;Doom Emacs&lt;/h3&gt; 
&lt;p&gt;The built-in &lt;code&gt;:ui doom&lt;/code&gt; module installs and configures &lt;code&gt;doom-themes&lt;/code&gt; for you, and loads &lt;code&gt;doom-one&lt;/code&gt; by default. To change the theme, change &lt;code&gt;doom-theme&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-emacs-lisp&quot;&gt;;; in ~/.doom.d/config.el
(setq doom-theme &#39;doom-city-lights)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Manually + &lt;code&gt;use-package&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;doom-themes&lt;/code&gt; is available on MELPA. Here is an example configuration with some common defaults laid out:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-emacs-lisp&quot;&gt;(use-package doom-themes
  :ensure t
  :custom
  ;; Global settings (defaults)
  (doom-themes-enable-bold t)   ; if nil, bold is universally disabled
  (doom-themes-enable-italic t) ; if nil, italics is universally disabled
  ;; for treemacs users
  (doom-themes-treemacs-theme &quot;doom-atom&quot;) ; use &quot;doom-colors&quot; for less minimal icon theme
  :config
  (load-theme &#39;doom-one t)

  ;; Enable flashing mode-line on errors
  (doom-themes-visual-bell-config)
  ;; Enable custom neotree theme (nerd-icons must be installed!)
  (doom-themes-neotree-config)
  ;; or for treemacs users
  (doom-themes-treemacs-config)
  ;; Corrects (and improves) org-mode&#39;s native fontification.
  (doom-themes-org-config))
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Theme list&lt;/h2&gt; 
&lt;p&gt;This megapack&#39;s first and flagship theme is &lt;code&gt;doom-one&lt;/code&gt; (inspired by Atom One Dark), but also includes 67 themes submitted to us by the Emacs community. We welcome PRs to help us maintain and address inconsistencies in them.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Name&lt;/th&gt; 
   &lt;th&gt;Source&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-1337&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/MarkMichos/1337-Scheme&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;ported from VSCode&#39;s 1337 theme (ported by &lt;a href=&quot;https://github.com/ccmywish&quot;&gt;@ccmywish&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-acario-dark&lt;/td&gt; 
   &lt;td&gt;original&lt;/td&gt; 
   &lt;td&gt;an original dark theme (ported by &lt;a href=&quot;https://github.com/gagbo&quot;&gt;@gagbo&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-acario-light&lt;/td&gt; 
   &lt;td&gt;original&lt;/td&gt; 
   &lt;td&gt;an original light theme (ported by &lt;a href=&quot;https://github.com/gagbo&quot;&gt;@gagbo&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-ayu-dark&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/dempfi/ayu&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by Ayu Dark (ported by &lt;a href=&quot;https://github.com/ashton&quot;&gt;@ashton&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-ayu-light&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/dempfi/ayu&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspirted by Ayu Light (ported by &lt;a href=&quot;https://github.com/LoveSponge&quot;&gt;@LoveSponge&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-ayu-mirage&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/dempfi/ayu&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by Ayu Mirage (ported by &lt;a href=&quot;https://github.com/LoveSponge&quot;&gt;@LoveSponge&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-badger&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/ccann/badger-theme/&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by cann&#39;s Badger colorscheme (ported by &lt;a href=&quot;https://github.com/jsoa&quot;&gt;@jsoa&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-bluloco-dark&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/uloco/theme-bluloco-dark&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;ported from VSCode&#39;s Bluloco Dark (ported by &lt;a href=&quot;https://github.com/RazikSF&quot;&gt;@RazikSF&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-bluloco-light&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/uloco/theme-bluloco-light&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;ported from VSCode&#39;s Bluloco Light (ported by &lt;a href=&quot;https://github.com/RazikSF&quot;&gt;@RazikSF&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-challenger-deep&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/challenger-deep-theme/vim&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by Vim&#39;s Challenger Deep theme (ported by &lt;a href=&quot;https://github.com/fuxialexander&quot;&gt;@fuxialexander&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-city-lights&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://citylights.xyz&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by Atom&#39;s City Lights theme (ported by &lt;a href=&quot;https://github.com/fuxialexander&quot;&gt;@fuxialexander&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-dark+&lt;/td&gt; 
   &lt;td&gt;n/a&lt;/td&gt; 
   &lt;td&gt;ported from equinusocio&#39;s VSCode Theme, dark+ (ported by &lt;a href=&quot;https://github.com/ema2159&quot;&gt;@ema2159&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-dracula&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://draculatheme.com/doom-emacs&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by the popular Dracula theme (ported by &lt;a href=&quot;https://github.com/fuxialexander&quot;&gt;@fuxialexander&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-earl-grey&lt;/td&gt; 
   &lt;td&gt;original&lt;/td&gt; 
   &lt;td&gt;a gentle color scheme, for code (ported by &lt;a href=&quot;https://github.com/JuneKelly&quot;&gt;@JuneKelly&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-ephemeral&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/elenapan/dotfiles&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by the Ephemeral Theme from elenapan&#39;s dotfiles (ported by &lt;a href=&quot;https://github.com/karetsu&quot;&gt;@karetsu&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-fairy-floss&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/sailorhg/fairyfloss&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;a candy colored theme by sailorhg (ported by &lt;a href=&quot;https://github.com/ema2159&quot;&gt;@ema2159&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-feather-dark&lt;/td&gt; 
   &lt;td&gt;original&lt;/td&gt; 
   &lt;td&gt;a candy colored theme by sailorhg (ported by &lt;a href=&quot;https://gitlab.com/Plunne&quot;&gt;@Plunne&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-feather-light&lt;/td&gt; 
   &lt;td&gt;original&lt;/td&gt; 
   &lt;td&gt;a candy colored theme by sailorhg (ported by &lt;a href=&quot;https://gitlab.com/Plunne&quot;&gt;@Plunne&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-flatwhite&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/biletskyy/flatwhite-syntax&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by Atom&#39;s Flatwhite Syntax theme (ported by &lt;a href=&quot;https://github.com/JuneKelly&quot;&gt;@JuneKelly&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-gruvbox&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/morhetz/gruvbox&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by morhetz&#39;s Gruvbox (ported by &lt;a href=&quot;https://github.com/JongW&quot;&gt;@JongW&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-gruvbox-light&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/morhetz/gruvbox&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by morhetz&#39;s Gruvbox (light) (ported by &lt;a href=&quot;https://github.com/jsoa&quot;&gt;@jsoa&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-henna&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/httpsterio/vscode-henna&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;based on VSCode&#39;s Henna theme (ported by &lt;a href=&quot;https://github.com/jsoa&quot;&gt;@jsoa&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-homage-black&lt;/td&gt; 
   &lt;td&gt;original&lt;/td&gt; 
   &lt;td&gt;a minimalistic, colorless theme inspired by eziam, tao, and jbeans (ported by &lt;a href=&quot;https://github.com/mskorzhinskiy&quot;&gt;@mskorzhinskiy&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-homage-white&lt;/td&gt; 
   &lt;td&gt;original&lt;/td&gt; 
   &lt;td&gt;minimal white theme inspired by editors from 2000s (ported by &lt;a href=&quot;https://github.com/mskorzhinskiy&quot;&gt;@mskorzhinskiy&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-horizon&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/aodhneine/horizon-theme.el&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;ported from VSCode Horizon (ported by &lt;a href=&quot;https://github.com/karetsu&quot;&gt;@karetsu&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-Iosvkem&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/neutaaaaan/iosvkem&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;ported from the default dark theme for Adobe Brackets (ported by &lt;a href=&quot;https://github.com/neutaaaaan&quot;&gt;@neutaaaaan&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-ir-black&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/twerth/ir_black&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;ported from Vim&#39;s ir_black colorscheme (ported by &lt;a href=&quot;https://github.com/legendre6891&quot;&gt;@legendre6891&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-lantern&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/Gitleptune/lantern-theme&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;based on Gitleptune&#39;s Lantern theme (ported by &lt;a href=&quot;https://github.com/paladhammika&quot;&gt;@paladhammika&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-laserwave&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/Jaredk3nt/laserwave&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;a clean synthwave/outrun theme inspired by VSCode&#39;s Laserwave (ported by &lt;a href=&quot;https://github.com/hyakt&quot;&gt;@hyakt&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-manegarm&lt;/td&gt; 
   &lt;td&gt;original&lt;/td&gt; 
   &lt;td&gt;an original autumn-inspired dark theme (ported by &lt;a href=&quot;https://github.com/kenranunderscore&quot;&gt;@kenranunderscore&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-material&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/equinusocio/vsc-material-theme&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;adapted from equinusocio&#39;s Material themes (ported by &lt;a href=&quot;https://github.com/tam5&quot;&gt;@tam5&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-material-dark&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/xrei/material-dark-vscode&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by Material Theme by xrei (ported by &lt;a href=&quot;https://github.com/trev-dev&quot;&gt;@trev-dev&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-meltbus&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/equinusocio/vsc-material-theme&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;a dark (mostly) monochromatic theme (ported by &lt;a href=&quot;https://github.com/spacefrogg&quot;&gt;@spacefrogg&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-miramare&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/franbach/miramare&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;a port of Franbach&#39;s Miramare theme; a variant of Grubox (ported by &lt;a href=&quot;https://github.com/sagittaros&quot;&gt;@sagittaros&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-molokai&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/tomasr/molokai&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by Tomas Restrepo&#39;s Molokai (ported by &lt;a href=&quot;https://github.com/hlissner&quot;&gt;@hlissner&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-monokai-classic&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://monokai.pro&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;port of Monokai Classic (ported by &lt;a href=&quot;https://github.com/ema2159&quot;&gt;@ema2159&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-monokai-machine&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://monokai.pro&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;port of Monokai Classic (ported by &lt;a href=&quot;https://github.com/minikN&quot;&gt;@minikN&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-monokai-octagon&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://monokai.pro&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;port of Monokai Octagon (ported by &lt;a href=&quot;https://github.com/minikN&quot;&gt;@minikN&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-monokai-pro&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://monokai.pro&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Port of Monokai Pro (ported by &lt;a href=&quot;https://github.com/minikN&quot;&gt;@minikN&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-monokai-ristretto&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://monokai.pro&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Port of Monokai Ristretto (ported by &lt;a href=&quot;https://github.com/minikN&quot;&gt;@minikN&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-monokai-spectrum&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://monokai.pro&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;port of Monokai Spectrum (ported by &lt;a href=&quot;https://github.com/minikN&quot;&gt;@minikN&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-moonlight&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/atomiks/moonlight-vscode-theme&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by VS code&#39;s Moonlight (ported by &lt;a href=&quot;https://github.com/Brettm12345&quot;&gt;@Brettm12345&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-nord&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.nordtheme.com&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;dark variant of Nord (ported by &lt;a href=&quot;https://github.com/fuxialexander&quot;&gt;@fuxialexander&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-nord-aurora&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.nordtheme.com&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;a light variant of Nord (ported by &lt;a href=&quot;https://github.com/MoskitoHero&quot;&gt;@MoskitoHero&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-nord-light&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/arcticicestudio/nord&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;light variant of Nord (ported by &lt;a href=&quot;https://github.com/fuxialexander&quot;&gt;@fuxialexander&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-nova&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/trevordmiller/nova-colors&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by Trevord Miller&#39;s Nova (ported by &lt;a href=&quot;https://github.com/bigardone&quot;&gt;@bigardone&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-oceanic-next&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/voronianski/oceanic-next-color-scheme&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by Oceanic Next (ported by &lt;a href=&quot;https://github.com/juanwolf&quot;&gt;@juanwolf&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-oksolar-dark&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://meat.io/oksolar&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;an OKLab variant of Solarized dark (ported by &lt;a href=&quot;https://github.com/logc&quot;&gt;logc&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-oksolar-light&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://meat.io/oksolar&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;an OKLab variant of Solarized light (ported by &lt;a href=&quot;https://github.com/logc&quot;&gt;logc&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-old-hope&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/jesseleite/an-old-hope-syntax-atom&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by An Old Hope, in a galaxy far far away (ported by &lt;a href=&quot;https://github.com/teesloane&quot;&gt;@teesloane&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-one&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/atom/one-dark-ui&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by Atom One Dark (ported by &lt;a href=&quot;https://github.com/hlissner&quot;&gt;@hlissner&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-one-light&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/atom/one-light-ui&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by Atom One Light (ported by &lt;a href=&quot;https://github.com/ztlevi&quot;&gt;@ztlevi&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-opera&lt;/td&gt; 
   &lt;td&gt;original&lt;/td&gt; 
   &lt;td&gt;an original light theme (ported by &lt;a href=&quot;https://github.com/jwintz&quot;&gt;@jwintz&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-opera-light&lt;/td&gt; 
   &lt;td&gt;original&lt;/td&gt; 
   &lt;td&gt;an original light theme (ported by &lt;a href=&quot;https://github.com/jwintz&quot;&gt;@jwintz&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-outrun-electric&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/samrap/outrun-theme-vscode&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;a high contrast, neon theme inspired by Outrun Electric on VSCode (ported by &lt;a href=&quot;https://github.com/ema2159&quot;&gt;@ema2159&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-palenight&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/material-theme/vsc-material-theme&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;adapted from equinusocio&#39;s Material themes (ported by &lt;a href=&quot;https://github.com/Brettm12345&quot;&gt;@Brettm12345&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-peacock&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/daylerees/colour-schemes/raw/master/emacs/peacock-theme.el&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by daylerees&#39; Peacock (ported by &lt;a href=&quot;https://github.com/teesloane&quot;&gt;@teesloane&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-pine&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/morhetz/gruvbox&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;a green-tinged Gruvbox (by &lt;a href=&quot;https://github.com/RomanHargrave&quot;&gt;@RomanHargrave&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-plain&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/gko/plain/&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by gko&#39;s plain theme for VSCode (ported by &lt;a href=&quot;https://github.com/das-s&quot;&gt;@das-s&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-plain-dark&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/gko/plain/&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by gko&#39;s plain theme for VSCode (ported by &lt;a href=&quot;https://github.com/das-s&quot;&gt;@das-s&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-rouge&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/josefaidt/rouge-theme&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;ported from VSCode&#39;s Rouge Theme (ported by &lt;a href=&quot;https://github.com/das-s&quot;&gt;@das-s&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-shades-of-purple&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/ahmadawais/shades-of-purple-vscode&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;a port of VSCode&#39;s Shades of Purple (ported by &lt;a href=&quot;https://github.com/jwbaldwin&quot;&gt;@jwbaldwin&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-snazzy&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/sindresorhus/hyper-snazzy&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by Hyper Snazzy (ported by &lt;a href=&quot;https://github.com/ar1a&quot;&gt;@ar1a&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-solarized-dark&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://ethanschoonover.com/solarized&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;a dark variant of Solarized (ported by &lt;a href=&quot;https://github.com/ema2159&quot;&gt;@ema2159&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-solarized-dark-high-contrast&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://ethanschoonover.com/solarized&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;a high-contrast variant of Solarized Dark (ported by &lt;a href=&quot;https://github.com/jmorag&quot;&gt;@jmorag&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-solarized-light&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://ethanschoonover.com/solarized&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;a light variant of Solarized (ported by &lt;a href=&quot;https://github.com/fuxialexander&quot;&gt;@fuxialexander&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-sourcerer&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/xero/sourcerer&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;a port of xero&#39;s Sourcerer (ported by &lt;a href=&quot;https://github.com/fm0xb&quot;&gt;@fm0xb&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-spacegrey&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;http://kkga.github.io/spacegray/&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;I&#39;m sure you&#39;ve heard of it (ported by &lt;a href=&quot;https://github.com/teesloane&quot;&gt;@teesloane&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-tokyo-night&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/enkia/tokyo-night-vscode-theme&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;inspired by VSCode&#39;s Tokyo Night theme (ported by &lt;a href=&quot;https://github.com/FosterHangdaan&quot;&gt;@FosterHangdaan&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-tomorrow-day&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/ChrisKempson/Tomorrow-Theme&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;a light variant of Tomorrow (ported by &lt;a href=&quot;https://github.com/emacswatcher&quot;&gt;@emacswatcher&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-tomorrow-night&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/ChrisKempson/Tomorrow-Theme&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;One of the dark variants of Tomorrow (ported by &lt;a href=&quot;https://github.com/hlissner&quot;&gt;@hlissner&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-vibrant&lt;/td&gt; 
   &lt;td&gt;doom-one&lt;/td&gt; 
   &lt;td&gt;a more vibrant variant of doom-one (ported by &lt;a href=&quot;https://github.com/hlissner&quot;&gt;@hlissner&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-wilmersdorf&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/ianpan870102/wilmersdorf-emacs-theme&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;port of Ian Pan&#39;s Wilmersdorf (ported by &lt;a href=&quot;https://github.com/ema2159&quot;&gt;@ema2159&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-xcode&lt;/td&gt; 
   &lt;td&gt;Xcode.app&lt;/td&gt; 
   &lt;td&gt;based off of Apple&#39;s Xcode Dark Theme (ported by &lt;a href=&quot;https://github.com/kadenbarlow&quot;&gt;@kadenbarlow&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;doom-zenburn&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/bbatsov/zenburn-emacs&quot;&gt;link&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;port of the popular Zenburn theme (ported by &lt;a href=&quot;https://github.com/jsoa&quot;&gt;@jsoa&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Extensions&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/doomemacs/themes/wiki&quot;&gt;Check out the wiki for details on customizing our neotree/treemacs/etc extensions&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;(doom-themes-visual-bell-config)&lt;/code&gt;: flash the mode-line when the Emacs bell rings (i.e. an error occurs). May not be compatible with all mode line plugins.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;(doom-themes-neotree-config)&lt;/code&gt;: a &lt;a href=&quot;https://github.com/jaypei/emacs-neotree&quot;&gt;neotree&lt;/a&gt; theme that takes after &lt;a href=&quot;http://atom.io&quot;&gt;Atom&lt;/a&gt;&#39;s file drawer; a more minimalistic icon theme plus variable pitch file/directory labels, as seen &lt;a href=&quot;https://raw.githubusercontent.com/doomemacs/themes/screenshots/doom-one.png&quot;&gt;in the doom-one screenshot&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;(This requires &lt;code&gt;nerd-icons&lt;/code&gt;&#39; fonts to be installed: &lt;code&gt;M-x nerd-icons-install-fonts&lt;/code&gt;)&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;(doom-themes-treemacs-config)&lt;/code&gt;: two &lt;a href=&quot;https://github.com/Alexander-Miller/treemacs&quot;&gt;treemacs&lt;/a&gt; icon themes, one that takes after &lt;a href=&quot;http://atom.io&quot;&gt;Atom&lt;/a&gt;&#39;s, and a second more colorful implementation.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;code&gt;(doom-themes-org-config)&lt;/code&gt;: corrects and improves some of org-mode&#39;s native fontification issues.&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Re-set &lt;code&gt;org-todo&lt;/code&gt; &amp;amp; &lt;code&gt;org-headline-done&lt;/code&gt; faces to make them respect underlying faces (i.e. don&#39;t override the :height or :background of underlying faces).&lt;/li&gt; 
   &lt;li&gt;Make statistic cookies respect underlying faces.&lt;/li&gt; 
   &lt;li&gt;Fontify item bullets (make them stand out)&lt;/li&gt; 
   &lt;li&gt;Fontify item checkboxes (and when they&#39;re marked done), like TODOs that are marked done.&lt;/li&gt; 
   &lt;li&gt;Fontify dividers/separators (5+ dashes)&lt;/li&gt; 
   &lt;li&gt;Fontify #hashtags and @at-tags, for personal convenience; see &lt;code&gt;doom-org-special-tags&lt;/code&gt; to disable this.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Complementary plugins&lt;/h2&gt; 
&lt;p&gt;The following plugins complement our themes:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;To get dimmed sidebars and brighter source buffers (like in the &lt;a href=&quot;https://github.com/doomemacs/themes/tree/screenshots&quot;&gt;screenshots&lt;/a&gt;), see &lt;a href=&quot;https://github.com/hlissner/emacs-solaire-mode&quot;&gt;solaire-mode&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/AnthonyDiGirolamo&quot;&gt;AnthonyDiGirolamo&lt;/a&gt; added doom-one (&lt;a href=&quot;https://github.com/AnthonyDiGirolamo/airline-themes/raw/master/screenshots/airline-doom-one-theme.png&quot;&gt;screenshot&lt;/a&gt;) and doom-molokai (&lt;a href=&quot;https://github.com/AnthonyDiGirolamo/airline-themes/raw/master/screenshots/airline-doom-molokai-theme.png&quot;&gt;screenshot&lt;/a&gt;) skins to &lt;a href=&quot;https://github.com/AnthonyDiGirolamo/airline-themes&quot;&gt;airline-themes&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;The modeline in the screenshots is &lt;a href=&quot;https://github.com/seagle0128/doom-modeline&quot;&gt;doom-modeline&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Customization&lt;/h2&gt; 
&lt;p&gt;There are three ways to customize themes in this package:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;Explore the available variables provided by our themes, starting with the ones provided for all packages:&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;doom-themes-enable-bold&lt;/code&gt; (default: &lt;code&gt;t&lt;/code&gt;): if &lt;code&gt;nil&lt;/code&gt;, disables bolding as much as possible (only affects faces that our theme supports; it won&#39;t catch them all).&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;doom-themes-enable-italic&lt;/code&gt; (default: &lt;code&gt;t&lt;/code&gt;): if &lt;code&gt;nil&lt;/code&gt;, disables italicization as much as possible (only affects faces that our theme supports; it won&#39;t catch them all).&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;doom-themes-padded-modeline&lt;/code&gt; (default: &lt;code&gt;nil&lt;/code&gt;): if &lt;code&gt;t&lt;/code&gt;, pad the mode-line in 4px on each side. Can also be set to an integer to specify the exact padding. or &lt;code&gt;M-x customize-group RET doom-themes&lt;/code&gt; to explore them.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Use the &lt;code&gt;custom-set-faces&lt;/code&gt; macro (Doom users should use &lt;code&gt;custom-set-faces!&lt;/code&gt; instead) to customize any face. e.g.&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-elisp&quot;&gt;;; Must be used *after* the theme is loaded
(custom-set-faces
  `(mode-line ((t (:background ,(doom-color &#39;dark-violet)))))
  `(font-lock-comment-face ((t (:foreground ,(doom-color &#39;base6))))))
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Copy your favorite theme into your &lt;code&gt;custom-theme-directory&lt;/code&gt; (normally &lt;code&gt;~/.emacs.d/&lt;/code&gt;, or &lt;code&gt;~/.doom.d/themes&lt;/code&gt; for Doom users), and tweak it there.&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Contribute&lt;/h2&gt; 
&lt;p&gt;PRs are welcome to maintain our themes, including additional theme and plugin support.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/13712654b8361b7d94b8e9607fd56acf236222b57fc1eed29884f92fedaa549e/doomemacs/themes" medium="image" />
      
    </item>
    
    <item>
      <title>dgutov/diff-hl</title>
      <link>https://github.com/dgutov/diff-hl</link>
      <description>&lt;p&gt;Emacs package for highlighting uncommitted changes&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;About &lt;a href=&quot;https://github.com/dgutov/diff-hl/actions/workflows/ci.yml&quot;&gt;&lt;img src=&quot;https://github.com/dgutov/diff-hl/actions/workflows/ci.yml/badge.svg?sanitize=true&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;code&gt;diff-hl-mode&lt;/code&gt; highlights uncommitted changes on the side of the window, allows you to jump between and revert them selectively.&lt;/p&gt; 
&lt;p&gt;This feature is also known as &quot;source control gutter indicators&quot;.&lt;/p&gt; 
&lt;p&gt;In buffers controlled by Git, you can stage and unstage the changes.&lt;/p&gt; 
&lt;p&gt;For the usage instructions and the list of commands, see the Commentary section inside the file.&lt;/p&gt; 
&lt;p&gt;Tested with Git, Mercurial, Bazaar and SVN. May work with other VC backends, too.&lt;/p&gt; 
&lt;p&gt;The package also contains auxiliary modes:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;diff-hl-dired-mode&lt;/code&gt; provides similar functionality in Dired.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;diff-hl-margin-mode&lt;/code&gt; changes the highlighting function to use the margin instead of the fringe.&lt;/li&gt; 
 &lt;li&gt;But if you use a non-graphical terminal, the package will fall back to using the margins anyway, as long as &lt;code&gt;diff-hl-fallback-to-margin&lt;/code&gt; is non-nil and the margin width is non-zero.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;diff-hl-amend-mode&lt;/code&gt; sets the reference revision to the one before recent one. Also, you could use &lt;code&gt;diff-hl-set-reference-rev&lt;/code&gt; to set it to any revision, see its docstring for details.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;diff-hl-flydiff-mode&lt;/code&gt; implements highlighting changes on the fly.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;diff-hl-show-hunk-mouse-mode&lt;/code&gt; makes fringe and margin react to mouse clicks to show the corresponding hunk. That&#39;s the alternative to using &lt;code&gt;diff-hl-show-hunk&lt;/code&gt; and friends.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Usage&lt;/h1&gt; 
&lt;p&gt;Put this into your init script:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lisp&quot;&gt;(global-diff-hl-mode)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You must also ensure that VC is enabled (e.g. &lt;code&gt;vc-handled-backends&lt;/code&gt; is not nil).&lt;/p&gt; 
&lt;p&gt;Check out the Commentary section in each file for more detailed usage instructions.&lt;/p&gt; 
&lt;h1&gt;Screenshots&lt;/h1&gt; 
&lt;h2&gt;diff-hl-mode&lt;/h2&gt; 
&lt;p&gt;Top window: a buffer in this minor mode, bottom window: the corresponding diff.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/dgutov/diff-hl/master/screenshot.png&quot; alt=&quot;screenie&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;diff-hl-dired-mode&lt;/h2&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/dgutov/diff-hl/master/screenshot-dired.png&quot; alt=&quot;screenie&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;diff-hl-margin-mode&lt;/h2&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/dgutov/diff-hl/master/screenshot-margin.png&quot; alt=&quot;screenie&quot; /&gt;&lt;/p&gt; 
&lt;h1&gt;Requirements&lt;/h1&gt; 
&lt;p&gt;Emacs 26.1+.&lt;/p&gt; 
&lt;h1&gt;Notes&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;By default &lt;code&gt;diff-hl-mode&lt;/code&gt; only updates the display when the buffer is in saved state. For a different tradeoff, also enable &lt;code&gt;diff-hl-flydiff-mode&lt;/code&gt;, which makes the updates happen on a timer.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;To use an &lt;a href=&quot;http://stackoverflow.com/questions/32365271/whats-the-difference-between-git-diff-patience-and-git-diff-histogram&quot;&gt;alternative diff algorithm&lt;/a&gt; with Git, add a corresponding argument to &lt;code&gt;vc-git-diff-switches&lt;/code&gt;, e.g. &lt;code&gt;(setq vc-git-diff-switches &#39;(&quot;--histogram&quot;))&lt;/code&gt;. Using the &lt;code&gt;diff.algorithm&lt;/code&gt; option doesn&#39;t work &lt;a href=&quot;http://article.gmane.org/gmane.comp.version-control.git/294622&quot;&gt;because&lt;/a&gt; &lt;code&gt;vc-git-diff&lt;/code&gt; calls &lt;code&gt;git diff-index&lt;/code&gt;. &lt;code&gt;diff-hl-flydiff-mode&lt;/code&gt; does not support alternative algorithms, because it uses the external &lt;code&gt;diff&lt;/code&gt; program.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;We conflict with other modes when they put indicators on the fringe, such as &lt;a href=&quot;https://github.com/flycheck/flycheck&quot;&gt;Flycheck&lt;/a&gt;. This is rarely a significant problem, since if you&#39;re using such a mode, you&#39;d usually want to fix all errors and warnings before continuing, and then the conflicting indicators go away.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;There&#39;s no fringe when Emacs is running in the console, but the navigation and revert commands still work. Consider turning &lt;code&gt;diff-hl-margin-mode&lt;/code&gt; on, to show the indicators in the margin instead. It also helps avoid the conflict with Flycheck/Flymake even on graphical frames.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Frame-local and buffer-local values of &lt;code&gt;line-spacing&lt;/code&gt; are not supported.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Fringe width up to 16 works best (because we can&#39;t define a bitmap with width above that number).&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Integration&lt;/h1&gt; 
&lt;p&gt;If you&#39;re using some package other than &lt;code&gt;vc&lt;/code&gt; to commit changes, it might not run &lt;code&gt;vc-checkin-hook&lt;/code&gt; after commits. In that case, you&#39;ll need to either add &lt;code&gt;diff-hl-update&lt;/code&gt; to the hook it does run, or advise some function that&#39;s called in the buffer after its state has changed.&lt;/p&gt; 
&lt;h2&gt;psvn&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lisp&quot;&gt;(advice-add &#39;svn-status-update-modeline :after #&#39;diff-hl-update)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Magit&lt;/h2&gt; 
&lt;p&gt;If you&#39;re using a version before 2.4.0, it defines &lt;code&gt;magit-revert-buffer-hook&lt;/code&gt; (or &lt;code&gt;magit-not-reverted-hook&lt;/code&gt;), which we use.&lt;/p&gt; 
&lt;p&gt;When using Magit 2.4 or newer, add this to your init script:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lisp&quot;&gt;(add-hook &#39;magit-post-refresh-hook &#39;diff-hl-magit-post-refresh)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Tramp&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;diff-hl&lt;/code&gt; should just work with Tramp. But slow or high latency connections can cause performance problems. If you experience such issues, customize &lt;code&gt;diff-hl-disable-on-remote&lt;/code&gt; to &lt;code&gt;t&lt;/code&gt;. This will change the behavior of both &lt;code&gt;turn-on-diff-hl-mode&lt;/code&gt; and &lt;code&gt;global-diff-hl-mode&lt;/code&gt; (whichever you prefer to use).&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/286dda579c2b402668a39ce49f1a77d7d229afef5f5cbad22517674c34e87d99/dgutov/diff-hl" medium="image" />
      
    </item>
    
  </channel>
</rss>
