(placeholder name)
Name ideas:
- cdrmacs
- xrdg
- ri-macs
- rin-emacs
- Xmodmacs
- windowmacs
- terramacs
- (these are all mid....)
A modular Emacs distribution designed for speed, flexibility, transparency, and ease of configuration.
I found that most popular Emacs distros like Doom Emacs are slow, bloated, and too abstracted away for my liking. I wanted to create an Emacs distribution that’s very fast, minimal, and transparent, all the while meeting my needs and beyond.
And beyond me simply creating a personal Emacs config that does all of that, I wanted others, including those with very little Emacs experience, to be able to pick up and use my config. I wanted users to be able to start off with a polished experience like that of Doom Emacs, then gradually strip away abstractions and uncessesary features to make it as minimal as desired, while still meeting all of their needs.
And to those who love having an environment that’s as minimal and transparent as possible, instead of Emacs distro-hopping to increasingly more minimal distros, your config can simply be flexibly molded into a more minimal one, all the way to something that’s akin to vanilla Emacs.
This distribution provides many modules, with each one providing a specific feature. The user has their own config file where they can load any of those modules, allowing one to easily put together a base config that meets their needs without introducing too much bloat.
- ./init.el
- The first file that is loaded. Does miscellaneous initial setup, then loads the userside config.
- ./config.el
- The userside config and is for declaring default fonts, loading your modules of choice, setting variables related to those modules, and writing whatever elisp you want. You could even try writing your own modules and load them from here, if you’d like.
- ./modules/
- Directory containing a list of subdirectories from which modules will be loaded from. These subdirectories are organized by how/when they are loaded.
- ./modules/pre-init/
- Directory containing modules that are run in init.el, and must be run in a very specific order. These deal with package management and other pivotal features that must be configured first.
- ./modules/init/
- Directory containing modules that are run in init.el after the modules in pre-init/, and can be run in any order, but some may be more preferable. These deal with themes and basic packages that are expected to be installed in many later modules.
- ./modules/features/
- Directory containing lots of modules to be loaded from config.el. This is where you get to freely choose which modules to load. The order does not matter.
This project is still very incomplete and under active (procrastinative) development.
At its current state, the default config has keybinds designed for dvorak-programmer.
To use this config without eradicating your pre-existing ~/.emacs.d
, you may git clone the project anywhere, and then run $ emacs --init-directory <path-to-repo>
to run emacs from that directory.
Because meow with dvorak-programmer is the default, run the previous command with the argument --sane-keybinds
to load qwerty meow keybinds (temporary feature so others can easily try out my config).
All this is subject to change.
You can configure which modules are loaded in config.el
. However, I wouldn’t advise configuring it and expecting everything to work when you next run git pull. Use at your own risk!!!
- M-o
- other-window
- SPC
- Meow/Evil leader key (if Meow,
SPC
is basically same asC-c
) - SPC f
- (prefix) files
- SPC b
- (prefix) buffers
- SPC w
- (prefix) windows (TO FIX)
- [ ] able to swap between evil and meow
- [ ] try to make compatible with at least dvp and qwerty
- [ ] evil-mode
- [ ] undo-tree
- [ ] crux
- [ ] free-keys
- [ ] better window management
- [ ] better ivy
- [ ] info
- [ ] darkroom
- [ ] calc
- [ ] improve dired/dirvish keybinds
- [ ] improve keybinds for everything
- [ ] stumpwm-mode
- [ ] ALL of org and related stuff
- [ ] polish LSP, ide, languages
- [ ] crdt
- [ ] eshell
- [ ] sudo edit
- [ ] hide dots
- [ ] misc programs
- [ ] lots and lots and lots more
Cool keybinds to write down:
- M-/
- dabbrev-expand
- C-M-/
- dabbrev-completion
- C-M-i (C-M– if dvorak)
- complete-symbol
(override-module ‘ri-meow-gen) ;; module not found ;; run before load modules?
have cursor pre-indented to header body distance in org-mode? is this bad? slow? when open new help window, make it auto switch?
- actually, only has this effect if cursor at end of file/buffer…
For each user module found, create a function called mod/file-name that can be run to load the module!
Make C-<return> take the C-j command for lsp-mode? using [brackets] thing used in helpful mode?
For crux, make it local to buffer, like in org-mode only…
In userside config, (:ri-disable)
will prevent future setup declaration with same name from running.
docview disable line numbers mode
docview disable blink cursor modee
TODO: create backup bitmap fontface for symbols? tamzen-powerline?
TODO: in stumpwm, startup emacsclient with cmd multi-vterm instance?
emacsclient -ce "(multi-vterm)" -a "alacritty"
TODO: in stumpwm, for scratchpad terminal, run emacsclient with standard vterm?
emacsclient -ce "(vterm)" -a "emacs"
do i need to do -a "emacs -e '(vterm)'"
to work?
ri-lsp–depend <- pulled by both ri-lsp-mode and ri-lsp-eglot ?
(require ‘ri-lsp-mode)
(ri/require-incl-setups ‘ri-lsp-mode ‘(“lsp-mode” “flycheck” “company”)
(ri/require-excl-setups ‘ri-lsp-mode ‘(“lsp-ui” “yasnippet”)
- will need to modify setup macro. Vars ri/require–to-incl and ri/require–to-excl, both nil by def. Make it so for every setup macro, if either vars are non-nil, print message and abort. function ri/require-....-setups (TO-REQ LIST): fill appropriate var to LIST (require TO-REQ) set appropriate var to nil end of fun;
For bitmap fonts, create custom backup italic face.
Keep yas-minor-mode enabled, but disable TAB to randomly complete at point
dired sort by file size (or any value)
SPC-SPC error, commandp 1 (fix?)
for stumpwm, notifs, make persisting, or at least cmd to show last few notifs
create a script that plays random media in a dir with mpv
Switch to ratpoison and script it with Emacs or guile following system crafters tutorial
set up org-roam for stats and bio classes (everything in there) (follow bookmarked tutorials)
add whatever everything in config.el after init part, will later convert to modules maybe. (require-module ‘ri-org) for less verbose shortcut, inline with misc config.el configs down
post-system fix: make sure to daily btrfs snapshot
notice that there’s a lot of user-related stuff in init.el (is-guix, etc…). move these to user-side, gradually make it more separate between default init.el and user config, all the while adding more random stuff to the end of config.el to make into defined user-side stuff.
use #’load or use-package with path to local repo for each module: e.g.: https://github.com/countvajhula/.emacs.d/blob/master/init.el
straight-normalize-all vs straight-pull-all https://github.com/radian-software/straight.el?tab=readme-ov-file#version-control-operations
switch to use-package? (if yes, don’t ever use :ensure, and use :require if required).