feat(langs/conda): more robust conda env manipulation.
refactor(utils): add options for controlling time to incrementally load packages.
config(aichat): don't wrap the config by `use-package.
lisp-indent-function
from Doomemacs.org-capture
bugs when inserting entries into table to upstream.evil
.evil-args
to use spaces as argument delimiter for emacs-lisp-mode
.mu4e
.If you’re currently reading this README file in Markdown format, it
has been generated through org-export
, from its original org
format. For the best experience, please consider reading the org
format file instead.
With TTY starting in 0.32 seconds on a MacBook Air (M1, 2020), 0.73 seconds on a VPS with a 1-core CPU and 1 GB RAM, and 0.22 seconds on WSL with an Intel i7-1185G7 and 32 GB RAM, TTY is exceptionally fast. The GUI is just as quick, starting in 0.44 seconds on Mac M1 and 0.31 seconds on WSLg. For more information on startup speed, see 4.1.
Package versions are locked and under version control, so no breaking changes are expected.
This configuration works well on both TTY and GUI. Compatibility on
TTY is not compromised, while GUI features, including xwidget
, are
also well-configured.
A blazing fast startup speed doesn’t mean it is a lite and minimal configuration. Instead, it is “heavy” and feature rich, including:
A modern minibuffer completion experience powered by vertico+consult+orderless+embark+marginalia
family bucket.
Modal editing ecosystem everywhere, powered by evil
and many other extensions.
A keybinding scheme centered around leader and localleader keys, powered by general
and which-key
.
In-buffer autocompletion frontend based on company
(see 4.3).
Code completion and navigation based on eglot
(LSP) and citre
(Ctags).
Integration with eglot
and org-babel
or markdown-mode
that takes literate programming to the next level.
Randomly select a theme from a curated list each time you start up and automatically switches between day and night themes at scheduled time. Additionally, the displayed verses on the welcome screen is also randomized with each launch. Have a fresh experience at every time. Be casual and wild!
The welcome screen displays two randomly chosen verses from my carefully chosen collection. This serves as a scratch buffer where you can perform Lisp evaluations. Frequently used commands are also listed, allowing for convenient execution by simply clicking on the corresponding button.
Making use of LSP and Ctags, navigating code is a breeze. The file
tree is displayed on the leftmost window through dired-sidebar
, and
the bottom right window showcases the references of a selected symbol
via LSP find references
(the Emacs command is
xref-find-references
). In the central floating window, a preview of
the definition of the chosen symbol is displayed with the aid of
ctags
(the Emacs command is citre-peek
).
A typical workflow in data science involves multiple components. The
top right window showcases an embedded xwidget widget that displays
the HTML visualization created via plotly
. In the bottom left window
rests the R REPL console where you can send your code for
execution. Meanwhile, the bottom right window features a chatgpt REPL
console (via aichat). I specify
the aichat mode as exp-code-e
to prompt chatgpt to provide an
explanation of the code you sent.
Write prose in orgmode
, and export it into reveal.js
presentation.
The right window displays the HTML slides using xwidget
webkit. Preview slides in emacs without the need to open GUI browser
anymore.
lisp-indent-function
from Doomemacs.org-capture
bugs when inserting entries into table to upstream.evil
.evil-args
to use spaces as argument delimiter for emacs-lisp-mode
.mu4e
.Startup speed is measured using (emacs-init-time)
.
However, note that this metric may fool you. If you load some packages
in emacs-startup-hook
or after-init-hook
, then (emacs-init-time)
cannot properly measure your real startup time. Packages loaded at
emacs-start-hook
and after-init-hook
are actually not lazy loaded;
they are loaded during your startup anyway. Using these hooks only
skews (emacs-init-time)
and does not accurately reflect startup
time. This configuration is honest and truly lazy loads packages.
A symbol prefixed with my:
indicates it is a function.
A symbol prefixed with my$
indicates it is a variable.
A symbol prefixed with my%
indicates it is a macro.
A symbol prefixed with my~
indicates it is a mode or an interactive command.
(This also means that the derivative variables defined by a mode are
also prefixed with my~
, e.g. my~foo-mode-hook
).
A symbol prefixed with my*
indicates it is generated via closure or macro.
A symbol prefixed with my&
indicates it is a special symbol like faces.
Corfu
is a sleek and minimalistic auto-completion UI that uses only
completion-at-point-functions
as its backend. The GUI experience with
corfu
is delightful, providing a refreshing and intuitive
interface. However, to maintain full compatibility with TTY, I
continue to use company
as the auto-completion frontend until corfu
’s
TTY integration is complete.