doc | ||
.gitignore | ||
early-init.el | ||
init.el | ||
LICENSE | ||
README.org |
- Emacs Solo
- Obligatory Screenshots
- As seen on System Crafters!
- Minimum Emacs Version
- Optional Dependencies
- Installation
- Disclaimer
- How do I…
- 1.) Copy the current word under cursor?
- 2.) Edit multiple search entries at once?
- 3.) Edit multiple search entries between several files at once?
- 4.) Read news, like with elfeed?
- 5.) How do I see logs and their diffs?
- 6.) How do I revert a hunk?
- 7.) Use (neo)vi(m) keybindings (aka Evil keybindings)?
- 8.) Temporaraly highlight some word?
- 9.) Know what is changed when closing Emacs or several files?
- 10.) Show/Hide (toggle) hidden files in Dired?
- 11.) Open multiple terms/shells?
- 12.) How do I select a single hunk out of many?
- 13.) How do I edit commit messages?
- 14.) How do I amend commits?
A fast, powerful and modular Emacs configuration that favors built-in functionality over third-party packages.
Screenshots · System Crafters Demo · Emacs Version · Optional Dependencies · Installation · Disclaimer · FAQ
Emacs Solo
This is what you see as soon as you start Emacs:
███████╗███╗ ███╗ █████╗ ██████╗███████╗ ███████╗ ██████╗ ██╗ ██████╗
██╔════╝████╗ ████║██╔══██╗██╔════╝██╔════╝ ██╔════╝██╔═══██╗██║ ██╔═══██╗
█████╗ ██╔████╔██║███████║██║ ███████╗ ███████╗██║ ██║██║ ██║ ██║
██╔══╝ ██║╚██╔╝██║██╔══██║██║ ╚════██║ ╚════██║██║ ██║██║ ██║ ██║
███████╗██║ ╚═╝ ██║██║ ██║╚██████╗███████║ ███████║╚██████╔╝███████╗╚██████╔╝
╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚══════╝ ╚══════╝ ╚═════╝ ╚══════╝ ╚═════╝
Loading time : 0.172725 seconds
Packages : 0
Emacs Solo is a configuration I use when I want to go back to the roots and challenge myself by using Emacs with only built-in features.
It aims to be minimalist, at least in spirit. Yes, there are over 3000 lines of code, but most of that comes from organizing things cleanly and building small, reusable modules. Compared to full-featured distributions, it's still lean and focused.
The configuration favors Emacs built-ins, configured my way. But when something essential is missing (like margin git gutters), a small, hacky workaround is always added.
Obligatory Screenshots
Overall View
#+html:<details> #+html:<summary><h3>More screenshots here…</h3></summary>
iComplete + Flymake + Gutter
Help Variable
iComplete Vertical
Eshell
Dired + Gutter
Well behaved mode-line
#+html:</details>
As seen on System Crafters!
Minimum Emacs Version
Emacs Solo always requires the latest stable release of Emacs, which
is currently: 30.1
However, some bleeding-edge features may be tested as well. For those,
you’ll need to compile Emacs from the master branch. I do my best to
mark these features with the Emacs 31
tag.
Optional Dependencies
It is recommended you have this programs in your system:
ripgrep
(rg) This provides quicker project grep and xref navigation. If you opt to use regulargrep
, reset the customization of variablegrep-command
.
ghostscript
This is necessary if you want to be able to usedoc-view
to see documents like PDFs.
gls
MacOS comes with an implementation ofls
that misses some nice switches from the gnu implementation (gls
on homebrew). If you opt to use MacOS defaulls
you might need to change thedired-listing-switches
variable.
curl
Only needed if you'd like to upload text/images directly to 0x0.st site from Emacs Solo, by using eitheremacs-solo/0x0-upload-text
oremacs-solo/0x0-upload-file
. Also used foremacs-solo-weather
.
mpv
Only needed if you'd like to play videos directly from news innewsticker
, play music from dired with dired music playerC-c m
, play something from a m3u file withm3u-visualize-buffer
or listen to online radio withC-c r
.
rsync
Only needed if you'd like to useemacs-solo/dired-rsync-copy
.
ollama
Only needed if you'd like to useemacs-solo/ollama-run-model
.gemmini-cli
Only needed if you'd like to useemacs-solo/gemini-run-model
.khard
Only needed if you'd like to useemacs-solo/khard-...
funcitons.
In order to proper copy/paste from terminals (TUI), you need:
pbcopy/pbpaste
(macos)wl-copy/wl-paste
(Linux with Wayland)xclip
(Linux with Xorg)
Installation
Clone this repository into a directory of your liking and run Emacs with:
emacs --init-directory=YOUR_DIR
You can also simply copy init.el and early-init.el into any folder issue the same command as above
And that's it, happy hacking! 🐂
Disclaimer
I’m happy to share this configuration with a catchy name, and I’d be genuinely delighted if you find it useful. 🙂
However, this is not intended to be a distribution. This means I may not cover every user's needs, nor will I accept every contribution that pushes it in that direction. I use this configuration daily for both personal and professional work, and like any custom setup, it reflects my own preferences.
For example, this config does not include Python-specific settings, whether for Eglot or Tree-sitter. Since this is a real working setup and I’m not currently using Python, its absence might seem like an oversight.
If you'd like to add your own modifications while staying up to date
with Emacs Solo, simply create a private.el
file in the same directory
as init.el
. A hook is already in place to load this private file after
Emacs initializes.
Of course, you can also fork it! (please do 😊)
How do I…
A FAQ like session of common questions of how to do X with only Emacs Solo. #+html:<details> #+html:<summary><h3>So, how do I…</h3></summary>
1.) Copy the current word under cursor?
The usual answer is M-b to go back to the beginning of the word. C-M-SPC to expand the selection to the end of the word and M-w.
Custom Emacs Solo Solution: Use the isearch way to search a word (it has better completion than C-M-SPC), like M-s M-. you can now just M-w.
2.) Edit multiple search entries at once?
Original problem: I usually consult-outline, then embark-collect and wgrep...
You can start by using occur, or using isearch and than moving to occur.
Next start the edit mode of the occur buffer with e.
Make your changes, apply it with C-c C-c
From Emacs 30.1 onward you can also use the combo:
replace-regexp-as-diff
for replacements in a single buffer,
multi-replace-regexp-as-diff
for multiple buffers, and
dired-do-replace-regexp-as-diff
to perform replace-regexp-as-diff
3.) Edit multiple search entries between several files at once?
Original problem: I usually consult-grep, then use embark collect and wgrep...
Open dired on the root folder of where you search will happen. Mark some files and or folders with m.
Use dired-do-query-replace-regexp
or in a dired buffer hit Q
.
Confirm it all or one by one, use ? to check the options.
From Emacs 30.1 onward you can also use the combo:
replace-regexp-as-diff
for replacements in a single buffer,
multi-replace-regexp-as-diff
for multiple buffers, and
dired-do-replace-regexp-as-diff
to perform replace-regexp-as-diff
4.) Read news, like with elfeed?
You have two built-in options on Emacs.
M-x gnus
M-x newsticker-treeview
5.) How do I see logs and their diffs?
C-x v L
on a file inside your version controlled file. And over the
line you have the commit, press d
for diffing.
If you wanna diff a range, mark the lines starting with C-SPC
on the
first line of the range, and again C-SPC
in the last line of the range
(the content of what you want must be selected, if ther cursor is on
first column of the line it won't be included), now use d
to diff.
6.) How do I revert a hunk?
C-x v =
will open the diff panel for the current file, restrict it to
the hunk you'd like to revert with r
, revert the direction of the diff
with R
and apply the diff with C-c C-a
.
From Emacs 31, we also have C-c M-r
(diff-revert-and-kill
), when on
buffers generated by C-x v =
and C-x v D
.
7.) Use (neo)vi(m) keybindings (aka Evil keybindings)?
Emacs comes with viper
which is a vi
emulator. This means a lot of
modern editing capabilities are missing.
Take a look at use-package Emacs Solo-viper-extensions
, section of the
init.el
file. Emacs Solo extends viper mode to include a bunch of more
modern evil-like
bindings.
Just give it a try ;) M-x viper-mode
8.) Temporaraly highlight some word?
Use the powers of highlight-regexp
! Over a word you want to make
highlighted use M-s h .
You can repeat it to other words and Emacs will handle different colors for you.
To remove a highlight use M-s h u
and select the highlighted regexp on
the list.
Find out about more options regarding highlighting with M-s h ?
.
9.) Know what is changed when closing Emacs or several files?
It is a common thing trying to close Emacs with C-x C-c
just to find
out one of your buffers has some modification and now Emacs asks if
you'd like to save, override, etc.
Emacs Solo provides the extra option d
, which will generate a diff of
the current file being asked to take action, so you can see if saving
is needed.
10.) Show/Hide (toggle) hidden files in Dired?
Use dired-omit-mode
, which you can toggle with C-x M-o
. Notice that
this mode uses the regular expression defined in the dired-omit-files
variable. Emacs Solo already customizes this to ignore files matching
^\\.
11.) Open multiple terms/shells?
Ever felt the need of some multi-term
package on Emacs? Well, you
don't really need it, at least not with the internal implementations
of terminals and eshell
.
Just use the C-u
unversal argument command before calling your
term/shell, like: C-u M-x eshell
or C-u C-x p e
or C-u M-x term
, and
so on.
Now you have another instance of your term to work with, repeat this pattern if you need more instances.
12.) How do I select a single hunk out of many?
From Emacs 31, we have after C-x v =
a new C-c RET n
(diff-delete-other-hunks
) option to do so.
13.) How do I edit commit messages?
From C-x v L
, you can press e
and you'll be editing the commit
message. This is available from Emacs 31 onward.
14.) How do I amend commits?
From C-x v v
, you can press C-c C-e
and you'll be on 'amend' mode.
#+html:</details>