GNU Software
1. Emacs  emacs
properties
ID: 5fc53135-1b6c-4260-b264-66be7a2b8ff0CREATED: <2025-01-18 Sat 20:47>
- refer to the INSTALL file in the root of the emacs repo for an overview of install options
- releases are hosted at https://ftp.gnu.org/gnu/emacs/
1.1. Releases
properties
CUSTOM_ID: releasesID: cfe9d1b9-f6f4-4866-8291-d125fc8b3eb6
For sanity checking, it's helpful to have access to older versions of Emacs. We can download and verify a version like this:
#aria2c -d /tmp/
#gpg --import /tmp/gnu-keyring.gpg
VERSION=24.2
aria2c -d /tmp/
gpg --verify /tmp/emacs-${VERSION}.tar.xz.sig
aria2c -d /tmp/
tar -xf emacs-${VERSION}.tar.xz
1.2. Building from Source
properties
CUSTOM_ID: building_from_sourceID: 31710a0d-bd27-4549-894e-62bb8ceaa015
First, clone the repo:
git clone /tmp/emacs
Once the source is in hand, I strongly recommend making a separate build directory and calling the configure script from there.
mkdir /tmp/emacs-build && cd /tmp/emacs-build
../emacs/configure --with-mailutils --with-imagemagick --with-x-toolkit=athena --without-pop --without-sound --with-json --enable-link-time-optimization --with-native-compilation --with-modules
NATIVE_FULL_AOT=1 make -j8
# test the build with './src/emacs' (location of output binary)
# install emacs binaries on current system
make install
The configure script takes a bunch of different flags that
customize the build, and generate a build-specific Makefile.
The next line compiles the source. Install with make install and
you're done! A custom Emacs binary with all the fixings has just
been installed for your current user. :)
Here are some of the other configuration flags worth investigating:
- –without-all
- –with-x-toolkit=no
- –without-x
- –without-dbus –without-gconf –without-gsettings
- Emacs General Variables
- probably want to set load-path
1.3. Diary
properties
ID: f344abcc-1a23-43cf-83fb-4a95b54c51edCREATED: <2026-06-02 Tue 20:18>
1.4. Remember
properties
ID: 7a0c9956-16ee-4302-a152-c3c5f0f0bdbfCREATED: <2026-06-02 Tue 20:18>
- textmodes/remember.el
Hyperbole, as a data presentation tool, always struck me as being very powerful, but it seemed to require a lot of "front-end" work before that data was really available. The problem with BBDB, or keeping up a Bibl-mode file, is that you have to use different functions to record the data, and it always takes time to stop what you're doing, format the data in the manner expected by that particular data interface, and then resume your work.
With "remember", you just hit `M-x remember' (you'd probably want to bind this to an easily accessible keystroke, like C-x M-r), slam in your text however you like, and then hit C-c C-c. It will file the data away for later retrieval, and possibly indexing.
Indexing is to data what "studying" is in the real world. What you do when you study (or lucubrate, for some of us) is to realize certain relationships implicit in the data, so that you can make use of those relationships. Expressing that a certain quote you remembered was a religious quote, and that you want the ability to pull up all quotes of a religious nature, is what studying does. This is a more labor intensive task than the original remembering of the data, and it's typical in real life to set aside a special period of time for doing this work.
"Remember" works in the same way. When you enter data, either by typing it into a buffer, or using the contents of the selected region, it will store that data – unindexed, uninterpreted – in a data pool. It will also try to remember as much context information as possible (any text properties that were set, where you copied it from, when, how, etc). Later, you can walk through your accumulated set of data (both organized, and unorganized) and easily begin moving things around, and making annotations that will express the full meaning of that data, as far as you know it.
Obviously this latter stage is more user-interface intensive, and it would be nice if "remember" could do it as elegantly as possible, rather than requiring a billion keystrokes to reorganize your hierarchy. Well, as the future arrives, hopefully experience and user feedback will help to make this as intuitive a tool as possible.
1.5. Change Logs
properties
ID: cf1cdbeb-5042-453d-a80b-f40e07cd7959CREATED: <2026-06-03 Wed 19:29>
1.6. Eww  browser
properties
ID: 21adcc1c-67ee-4f50-9049-12794824b2c7CREATED: <2025-03-01 Sat 13:35>
the Emacs Web Wowser, a browser written in elisp based on shr.el.
eww() {
emacsclient -a '' -t -e '(eww-browse-url "'"$1"'")'
}
1.7. Pages
properties
ID: ce9a92b0-ad75-4ca1-8653-cad020514c66CREATED: <2026-06-05 Fri 20:52>
1.8. Speedbar
properties
ID: 2cebd8b2-615e-44b2-afd4-2e302f836dd3CREATED: <2025-03-03 Mon 13:43>
1.9. ERC  irc
1.10. EUDC
properties
ID: b72f96f7-4040-4548-8da2-e619d26c4887CREATED: <2025-03-03 Mon 16:47>
Emacs Unified Directory Client
1.10.1. BBDB  bbdb
properties
ID: db8e43f4-78ec-4fb1-93e7-11ac7ee87799CREATED: <2025-03-03 Mon 17:46>
1.11. SLIME  lisp cl
1.12. Eshell
properties
ID: 86dbf792-301b-405e-806b-3df7e9531279CREATED: <2025-03-03 Mon 19:57>
1.13. Eglot
properties
ID: 8b1452eb-fc57-4026-8587-91ff8ebccba6CREATED: <2025-03-03 Mon 19:57>
Eglot is the Emacs client for the “Language Server Protocol” (LSP). The name "Eglot" is an acronym that stands for "Emacs polyGLOT". (1) Eglot provides infrastructure and a set of commands for enriching the source code editing capabilities of Emacs via LSP. LSP is a standardized communications protocol between source code editors (such as Emacs) and language servers–programs external to Emacs which analyze the source code on behalf of Emacs. The protocol allows Emacs to receive various source code services from the server, such as description and location of function calls, types of variables, class definitions, syntactic errors, etc. This way, Emacs doesn't need to implement the language-specific parsing and analysis capabilities in its own code, but is still capable of providing sophisticated editing features that rely on such capabilities, such as automatic code completion, go-to definition of function/class, documentation of symbol at-point, refactoring, on-the-fly diagnostics, and more.
Eglot itself is completely language-agnostic, but it can support any programming language for which there is a language server and an Emacs major mode.
- eglot-server-programs
- alist of
(major-mode . server)
- alist of
- eglot#Advanced server configuration
Featues
• At-point documentation: when point is near a symbol or an identifier, information about the identifier's significance in the program (its function or method signature, its type, its custom documentation string, etc.) is made available via the ElDoc package (*note (emacs)Programming Language Doc::).
• On-the-fly diagnostic annotations, via the Flymake package (*note (Flymake)Top::). Eglot's Flymake backend replaces other Flymake backends while it is managing a buffer, and enhances diagnostics with interactive server-suggested fixes (so-called “code actions”, *note Eglot Commands::).
• Finding definitions and uses of identifiers, via Xref (*note (emacs)Xref::). Eglot provides a backend for the Xref capabilities which uses the language server's understanding of the program source. In particular, it eliminates the need to generate tags tables (*note (emacs)Tags tables::) for languages which are only supported by the ‘etags’ backend.
• Buffer navigation by name of function, class, method, etc., via Imenu (*note (emacs)Imenu::). Eglot provides its own variant of ‘imenu-create-index-function’, which generates the index for the buffer based on the language server's program source analysis.
• Enhanced completion of symbol at point by the ‘completion-at-point’ command (*note (emacs)Symbol Completion::). This uses the language server's parser data for the completion candidates.
• Server-suggested code refactorings. The ElDoc package is also leveraged to retrieve so-called “code actions” nearby point. When such suggestions are available they are annotated with a special indication and can be easily invoked by the user with the ‘eglot-code-action’ command (*note Eglot Commands::).
• On-the-fly succinct informative annotations, so-called “inlay hints”. Eglot adds special intangible text nearby certain identifiers, be it the type of a variable, or the name of a formal parameter in a function call. *Note Eglot Commands::, and the ‘eglot-inlay-hints-mode’ minor mode.
• Enhanced source code fontification via LSP “semantic tokens”. Eglot can leverage the language server's understanding of the role and meaning of identifiers in the code to provide more accurate syntax highlighting. *Note Eglot Commands::, and the ‘eglot-semantic-tokens-mode’ minor mode.
• Display of function call and type hierarchies via the ‘eglot-show-call-hierarchy’ and ‘eglot-show-type-hierarchy’ commands (*note Eglot Commands::).
• Code reformatting via the ‘eglot-format’ and related commands (*note Eglot Commands::). Automatic reformatting of source code is also supported and is activated automatically as you type.
• Eglot enhances symbol completion front-ends by providing completion candidates based on the language server's understanding of the source code (*note (emacs)Symbol Completion::). The Company package, installable from GNU ELPA, is a popular package known to work well with Eglot.
• If YASnippet, a popular third-party package for automatic insertion of code templates (snippets), is installed, and the language server supports snippet completion candidates, Eglot arranges for the completion package to instantiate these snippets using YASnippet. (YASnippet can be installed from GNU ELPA.)
• When the server provides at-point documentation formatted as Markdown in addition to plain text, Eglot arranges for the ElDoc package to enrich this text with fontifications, hyperlinks and other nice formatting before displaying it to the user. This makes the documentation shown by ElDoc look nicer on display.
• In addition to enabling and enhancing other features and packages, Eglot also provides a number of user commands based on the capabilities of language servers. Examples include renaming symbols with ‘eglot-rename’ and asking to automatically correct problems with ‘eglot-code-actions’. *Note Eglot Commands::.
- eglot is optimistic by default - to opt out of features use
eglot-ignored-server-capabilitiesandeglot-managed-mode-hook - autostart:
(add-hook 'foo-mode-hook 'eglot-ensure)- on first connection:
eglot-connect-hook
- on first connection:
- some multiserver scenarios not supported by Eglot's architecture, better off building a LSP server multiplexer (hint hint)
- extension documentation recommends just read the source
- uses generics
- example included: eglot#Extending Eglot : inactiveRegions clangd 17 feature
- see also eglot#JSONRPC objects in Elisp
- performance opts:
eglot-events-buffer-config
1.14. Calc
properties
ID: 92ad7518-cf81-4aca-9940-bd40fb02f5ddCREATED: <2025-06-09 Mon 17:00>
24
3
'/
8
fsolve(x*2+x=4,x)
x = 1.33333333333
fsolve([x + y = a, x - y = b],[x,y])
[x = a + (b - a) / 2, y = (a - b) / 2]
1.15. dictionary
properties
ID: c344fc40-d6d8-4553-885b-fe8c55d6aa98CREATED: <2025-10-11 Sat 22:36>
1.16. SES
properties
ID: c40383a3-c717-43c6-8188-e2a564a641a1CREATED: <2025-03-03 Mon 19:58>
Simple Emacs Spreadsheet
1.17. Packages
properties
ID: 8b2930be-e877-4e6b-aea4-372be3c8340cCREATED: <2025-03-09 Sun 19:05>
1.17.1. Org-roam  org
properties
ID: 3bb08e71-1ce9-46ed-844a-31305162645eCREATED: <2025-03-03 Mon 19:46>
A plain-text personal knowledge management system.
- Popular extension which uses a sqlite backend to persist a Roam-like graph of Org-mode nodes.
- Our own
graph.elimplementation in core/emacs is inspired by org-roam
1.17.2. emacs-scrum  org
properties
ID: 947597c2-8f17-4ba8-8af7-6d5784219b0cCREATED: <2025-03-15 Sat 16:56>
dynamic scrum report generation for org-mode buffers
1.17.3. vertico
properties
ID: b1c1d365-1983-4e63-8cf6-c032932ff1b9CREATED: <2025-06-09 Mon 17:08>
1.17.4. corfu
properties
ID: 371ff3e8-d0e0-4260-bc41-4ba53d635ce5CREATED: <2025-06-09 Mon 17:09>
Completion in Region Function
1.17.5. cape
properties
ID: c69f7d77-7ec1-4d7e-b70d-23e54cdced4bCREATED: <2025-06-09 Mon 17:10>
1.17.6. kanban.el  org
properties
ID: 5ff7407e-32a0-463b-bf59-9519875da655CREATED: <2025-03-15 Sat 16:57>
Parse org-todo headlines to use org-tables as Kanban tables
1.18. Apps
properties
ID: 1bbc8529-d207-4a7e-a72a-b231316c90e6CREATED: <2025-03-03 Mon 15:54>
1.18.1. Cloudmacs
properties
ID: defa663e-3522-475c-ad44-615b64edabf1CREATED: <2025-03-03 Mon 15:54>
1.19. Blogs
properties
ID: 4d72736e-f3c1-4b6f-839d-474710771d78CREATED: <2025-10-11 Sat 22:33>
1.19.1. Mastering Emacs
properties
ID: cf98496a-d864-4878-8401-ffaa73aa7d04CREATED: <2025-10-11 Sat 22:33>
1.19.2. Sacha Chua
properties
ID: c6d79f1d-e5bd-479e-82fa-20df7e5dd83fCREATED: <2025-10-11 Sat 22:34>
2. GNU Radio
properties
ID: c92b3830-3836-41b0-a502-f04b44cd3292CREATED: <2025-02-14 Fri 22:22>
2.1. GRC  gui
properties
ID: c272a3f2-b0b0-4784-aeaf-4c677cbbd708CREATED: <2025-03-03 Mon 16:32>
edges
– [BROKEN LINK: man:gnuradio-companion]
GNU Radio Companion
- GUI tool for creating signal flowgraphs
3. Stow
properties
ID: 0b60eedf-686b-4f9a-bc2b-7cee2be7e828CREATED: <2026-04-18 Sat 20:46>
GNU Stow is a symlink farm manager which takes distinct packages of software and/or data located in separate directories on the filesystem, and makes them appear to be installed in the same place. For example,
/usr/local/bincould contain symlinks to files within/usr/local/stow/emacs/bin,/usr/local/stow/perl/binetc., and likewise recursively for any other subdirectories such as.../share,.../man, and so on.