Symex is distributed as a collection of small, composable packages, hosted directly at the source repository. This allows you maximum flexibility to install just the functionality you actually need, without getting anything extra. But it also means that you must explicitly list the Symex packages you are interested in. Each of the Symex packages is described below, along with sample installation config using Straight.el (if you are using another package manager, See Instructions for Other Package Managers).
symex-core
. This includes a DSL for structural operations, which is the core functionality of Symex, and is required for all users of Symex.
(use-package symex-core :straight (symex-core :host github :repo "drym-org/symex.el" :files ("symex-core/symex*.el")))
This core package provides the structural editing engine, supporting both Lisp (via paredit
) and other languages (via Treesitter). This is a lean package with few dependencies, so that, in addition to use by end users, it’s also appropriate as a library dependency for third party packages to gain Symex features.
symex
. The main user-facing package, required for all end users. It provides the modal UI that makes Symex features easy to use.
(use-package symex :after (symex-core) :straight (symex :host github :repo "drym-org/symex.el" :files ("symex/symex*.el" "symex/doc/*.texi" "symex/doc/figures")) :config (symex-mode 1) (global-set-key (kbd "s-;") #'symex-mode-interface)) ; or whatever keybinding you like ;; and any other customizations you like
Note the keybinding “s-;“ which enters the Symex modal UI. Feel free to set it to whatever you find convenient. There are many ways to enter Symex mode in different contexts, and we’ll cover these in detail as we go along.
All of the remaining packages in this list depend on, and extend, this modal UI package.
symex-ide
. A recommended, optional, extension integrating Symex with major modes for IDE-like features, such as easy evaluation and documentation lookup, and entering a REPL.
(use-package symex-ide :after (symex) :straight (symex-ide :host github :repo "drym-org/symex.el" :files ("symex-ide/symex*.el")) :config (symex-ide-mode 1))
symex-evil
. An extension for integration with Evil mode, including familiar keybindings, advising Evil functions to play well with Symex mode, and other functionality to make using Symex with Evil seamless. This is only required for Evil users.
(use-package symex-evil :after (symex evil) :straight (symex-evil :host github :repo "drym-org/symex.el" :files ("symex-evil/symex*.el")) :config (symex-evil-mode 1))
symex-rigpa
. This integrates Symex with Rigpa, allowing you to conveniently manage Symex as a mode within the broader Rigpa modal framework, including defining convenient entry and exit via familiar key sequences such as Enter
and Escape
. This is only required for Rigpa users.
(use-package symex-rigpa :after (symex rigpa symex-evil) :straight (symex-rigpa :host github :repo "drym-org/symex.el" :files ("symex-rigpa/symex*.el")) :config (symex-rigpa-mode 1))