Merge branch 'feature-doc-rewrite' into develop
* feature-doc-rewrite: Add file template for doom module READMEs Add READMEs for several modules Standardize module READMEs Simplify modules/private/README.org (replaced by wiki) Remove modules/README.org (replaced by wiki) Add feature/workspaces/README.org Revise modules/private/README.org Rewrite README
This commit is contained in:
commit
7365bab2a3
32 changed files with 672 additions and 574 deletions
248
README.md
248
README.md
|
@ -3,178 +3,134 @@
|
|||
[](https://travis-ci.org/hlissner/.emacs.d)
|
||||
[](./LICENSE)
|
||||
|
||||
[][sc]
|
||||
[](/../screenshots)
|
||||
|
||||
- - -
|
||||
|
||||
<p align="center">
|
||||
<a href="/wiki">Documentation</a> |
|
||||
<a href="/../screenshots">Screenshots</a> |
|
||||
<a href="/wiki/Troubleshooting">Troubleshooting</a> |
|
||||
<a href="/wiki/FAQ">FAQ</a> |
|
||||
<a href="/CHANGELOG.org">Changelog</a>
|
||||
</p>
|
||||
|
||||
- - -
|
||||
|
||||
<a href="http://ultravioletbat.deviantart.com/art/Yay-Evil-111710573">
|
||||
<img src="https://raw.githubusercontent.com/hlissner/.emacs.d/screenshots/cacochan.png" align="right" />
|
||||
<img src="/../screenshots/cacochan.png" align="right" />
|
||||
</a>
|
||||
|
||||
This is an Emacs configuration for a stubborn, shell-dwelling and melodramatic
|
||||
vimmer disappointed with the text-editor status quo.
|
||||
It is a story as old as time. A stubborn, shell-dwelling, and melodramatic
|
||||
vimmer -- envious of the features of modern text editors -- spirals into despair
|
||||
before he finally succumbs to the [dark side][evil-mode]. This is his config.
|
||||
|
||||
Doom tries to: look and act like modern editors (whatever that means to me on
|
||||
any given day), espouse vim's modal philosophy as best it can and strive to
|
||||
surpass vim in any way possible. It fits my needs as a software developer, indie
|
||||
game developer, scientist and doom enthusiast.
|
||||
DOOM's philosophy is simple: be **fast**, be **pretty**, and be **vim** (or
|
||||
better). It is tailored for neckbeards with a blue-belt or better in
|
||||
command-line-fu who don't shy away from dabbling with Elisp.
|
||||
|
||||
It was written for **Emacs 25.1+** on **MacOS 10.11+** and **Arch Linux 4.7+**.
|
||||
I use [vim] everywhere else.
|
||||
Rip and tear. Until it is done.
|
||||
|
||||
## Installation
|
||||
> **Important:** Doom only supports Emacs >= 25.1, and is tailored for Arch
|
||||
> Linux 4.7+ and Mac OS 10.11+.
|
||||
|
||||
- - -
|
||||
|
||||
## Quick start
|
||||
|
||||
```bash
|
||||
git clone https://github.com/hlissner/.emacs.d ~/.emacs.d
|
||||
cd ~/.emacs.d
|
||||
cp init.example.el init.el # maybe edit init.el
|
||||
make install
|
||||
|
||||
# Have problems? Run this to check for common issues with your setup
|
||||
make doctor
|
||||
```
|
||||
|
||||
Once you've tweaked the config to your liking, you may optionally byte-compile
|
||||
it. DOOM is designed to benefit from this. It will boost startup times and make
|
||||
Emacs feel a bit snappier in general.
|
||||
Visit the wiki for [a more detailed guide on installing, customizing and
|
||||
grokking Doom][wiki].
|
||||
|
||||
```bash
|
||||
make compile # may take a while
|
||||
# or
|
||||
make core # faster alternative; only compiles init.el & core files
|
||||
## Feature highlights
|
||||
|
||||
# If you byte-compile, changes to the config won't take effect until you
|
||||
# recompile or delete the byte-compiled files with:
|
||||
make clean
|
||||
```
|
||||
|
||||
## Package Management
|
||||
|
||||
Plugins can be managed from the command line with `make`:
|
||||
|
||||
```bash
|
||||
make install # install missing plugins
|
||||
make update # update installed plugins
|
||||
make autoremove # remove unused plugins
|
||||
# be sure to run install and autoremove after modifying init.el
|
||||
|
||||
# run this if you change autoload files
|
||||
make autoloads
|
||||
|
||||
# this is the equivalent of running all four of the above commands
|
||||
make
|
||||
|
||||
# you can run any make command with DEBUG=1 for extra logging, and YES=1 to
|
||||
# auto-accept confirmation prompts:
|
||||
DEBUG=1 make install
|
||||
YES=1 make update
|
||||
```
|
||||
|
||||
These commands are also available from within Emacs:
|
||||
|
||||
+ `doom/packages-install`
|
||||
+ `doom/packages-update`
|
||||
+ `doom/packages-autoremove`
|
||||
+ `doom/reload-autoloads`
|
||||
|
||||
## Deciphering my emacs.d
|
||||
|
||||
So you want to grok this madness. Here are a few suggestions:
|
||||
|
||||
* **[init.example.el](init.example.el)**: a birds eye view of available modules
|
||||
* **[modules/README.org](modules/README.org)**: a primer into module structure
|
||||
* **[modules/private/hlissner/+bindings.el](modules/private/hlissner/+bindings.el)**:
|
||||
my custom keybinds.
|
||||
* **[modules/private/hlissner/+commands.el](modules/private/hlissner/+commands.el)**:
|
||||
my custom ex-commands (for [evil-mode]).
|
||||
* **[modules/ui](modules/ui)**: the modules that makes my Emacs look the way it
|
||||
does, including [my theme][doom-theme], modeline, dashboard and more.
|
||||
* Find screenshots in the [screenshots branch][sc].
|
||||
|
||||
### Highlights
|
||||
|
||||
* A [popup management system](core/core-popups.el) using **[shackle]** to
|
||||
minimize mental context switching while dealing with temporary or disposable
|
||||
buffers.
|
||||
* Per-project code-style settings with **[editorconfig]**. Let someone else
|
||||
argue about tabs versus spaces (spaces, of course).
|
||||
* Workspaces & session persistence with **[persp-mode]**. Provides tab emulation
|
||||
that vaguely resembles vim's tabs.
|
||||
* Project & workspace-restricted buffer navigation and functions.
|
||||
* A vim-centric environment with **[evil-mode]**
|
||||
* 2-character motions (ala vim-seek/vim-sneak) with **[evil-snipe]**
|
||||
* Sublime Text-esque [multiple cursors][sc-multiedit] with
|
||||
**[evil-mc]** and **[evil-multiedit]**
|
||||
* <kbd>C-x</kbd> omnicompletion in insert mode
|
||||
* A better `:global` with buffer highlighting
|
||||
* A slew of [custom ex commands](modules/private/hlissner/+commands.el)
|
||||
* Fast search utilities:
|
||||
* Project and buffer navigation with **[ivy]**
|
||||
* File browser sidebar with **[neotree]**
|
||||
* Project text search powered by [the silver searcher][ag] and [ripgrep][rg]
|
||||
(see `:ag` and `:rg`)
|
||||
* Project search & replace with **[wgrep]**
|
||||
* Interactive buffer search with **[swiper]**
|
||||
* Inline/live code evaluation (using **[quickrun]**) and REPLs for a variety of
|
||||
languages, including Ruby, Python, PHP, JS, Elisp, Haskell, Lua and more.
|
||||
* [Minimalistic diffs in the fringe][sc-diffs] with **[git-gutter-fringe]**.
|
||||
* A do-what-I-mean jump-to-definition implementation that tries its darnest to
|
||||
find the definition of what you're looking at. It tries major-mode commands,
|
||||
xref (experimental Emacs library), **[dumb-jump]**, ctags (WIP), then
|
||||
**[ripgrep][rg]** or **[the_silver_searcher][ag]**.
|
||||
* Snippets and file-templates with **[yasnippet]** & **[auto-yasnippet]**.
|
||||
* A smarter, perdier, Atom-inspired mode-line that adds:
|
||||
* evil-search/iedit/evil-substitute mode-line integration
|
||||
* Macro-recording indicator
|
||||
* Python/ruby version in mode-line (for rbenv/pyenv)
|
||||
* Emacs as an:
|
||||
* Email client (using mu4e & offlineimap)
|
||||
* Presentation app (using org-tree-slides, ox-reveal, +present/big-mode
|
||||
& impatient-mode)
|
||||
* RSS feed reader (using elfeed)
|
||||
* Word Processor (using LaTeX, Org and Markdown)
|
||||
+ A fast, organized and opinionated Emacs configuration with a command line
|
||||
interface.
|
||||
+ A custom, declarative [package management system][doom-packages] that combines
|
||||
package.el, [use-package] and [quelpa]. This lets you install packages from
|
||||
sources other than ELPA, as well as manage packages from the command line.
|
||||
+ A [popup management system][doom-popups] (powered by [shackle]) that minimizes
|
||||
the presence and footprint of temporary and/or disposable buffers.
|
||||
+ A vim-like experience with [evil-mode], including ports for several vim
|
||||
plugins, <kbd>C-x</kbd> omnicompletion and a slew of [custom ex commands][doom-my-commands].
|
||||
+ Integration with [editorconfig]. Let someone else argue about tabs and spaces
|
||||
(spaces, duh).
|
||||
+ Code completion for a variety of languages, powered by [company-mode] (there
|
||||
may be other dependencies for certain languages).
|
||||
+ Project-awareness powered by [projectile], with tools to navigate and manage
|
||||
projects and project files.
|
||||
+ Fast project search (and replace) utilities, powered by [the_silver_searcher],
|
||||
[ripgrep] and [wgrep], with [ivy] (the default), [helm] and ido integration.
|
||||
+ Isolated and persistent workspaces powered by [persp-mode]. This can
|
||||
substitute for vim tabs.
|
||||
+ Inline/live code evaluation (using [quickrun]), including REPLs for a variety
|
||||
of languages.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
My config wasn't intended for public use, but I'm happy to help you use or crib
|
||||
from it.
|
||||
Found a problem? Here are some things to try:
|
||||
|
||||
+ If you have questions, drop me a line at henrik@lissner.net.
|
||||
+ If you have issues running or setting up DOOM, use `make doctor` to diagnose
|
||||
any common problems.
|
||||
+ If you still can't make sense of it, run `DEBUG=1 make doctor` and include
|
||||
it [with your bug report][new-issue].
|
||||
+ Make sure all plugins are installed with `make install`.
|
||||
+ A `void-function` or `void-variable` might signal an out-of-date autoloads
|
||||
file. Update it with `make autoloads`.
|
||||
+ Diagnose common OS/environment issues that could interfere with Emacs with
|
||||
`make doctor`.
|
||||
+ If you byte-compiled Doom, run `make clean` or `M-x doom/clean-compiled-files`
|
||||
and restart Emacs. Never debug byte-compiled code, it will interfere with your
|
||||
efforts in subtle (and not-so-subtle) ways.
|
||||
|
||||
**And please include steps to reproduce your issue, if possible.**
|
||||
If all else fails, [file a bug report][doom-new-issue].
|
||||
|
||||
## Contributing
|
||||
## Contribute
|
||||
|
||||
I welcome contributions of any kind: documentation, bug fixes/reports, extra
|
||||
modules, even elisp tips. Really,
|
||||
[don't hesitate to tell me my Elisp-fu sucks][new-issue]! I'm eager to learn.
|
||||
Doom (and my Emacs work in general) is a labor of love and incurable madness,
|
||||
done on my free time. It wasn't intended for public use, but I enjoy making Doom
|
||||
a resource for others.
|
||||
|
||||
If you'd like to support my efforts, I welcome contributions of any kind:
|
||||
|
||||
+ I love pull requests and bug reports (read the [contribution
|
||||
guidelines][wiki-contribute] first though!), and elisp pointers are especially
|
||||
welcome. Seriously, don't hesitate to [tell me my Elisp-fu
|
||||
sucks][doom-new-issue]!
|
||||
+ I'm happy to discuss Emacs workflow, ideas or tooling. If you think I, Doom or
|
||||
other Emacs users could benefit from them (or you just want to chat), drop me
|
||||
a line at henrik@lissner.net. I'm eager to learn.
|
||||
|
||||
|
||||
[ag]: https://github.com/ggreer/the_silver_searcher
|
||||
[auto-yasnippet]: https://melpa.org/#/auto-yasnippet
|
||||
[company-mode]: https://melpa.org/#/company
|
||||
[wiki]: /wiki
|
||||
[wiki-contribute]: /wiki/Contribute
|
||||
[wiki-conventions]: /wiki/Conventions
|
||||
[wiki-modules]: /wiki/Modules
|
||||
[wiki-customization]: /wiki/Customization
|
||||
|
||||
[doom-my-bindings]: modules/private/hlissner/+bindings.el
|
||||
[doom-my-commands]: modules/private/hlissner/+commands.el
|
||||
[doom-new-issue]: https://github.com/hlissner/.emacs.d/issues/new
|
||||
[doom-packages]: core/autoload/packages.el
|
||||
[doom-popups]: core/core-popups.el
|
||||
[doom-theme]: https://github.com/hlissner/emacs-doom-theme
|
||||
[dumb-jump]: https://melpa.org/#/dumb-jump
|
||||
|
||||
[company-mode]: https://github.com/company-mode/company-mode
|
||||
[editorconfig]: http://editorconfig.org/
|
||||
[evil-mc]: https://github.com/gabesoft/evil-mc
|
||||
[evil-mode]: https://melpa.org/#/evil
|
||||
[evil-multiedit]: https://melpa.org/#/evil-multiedit
|
||||
[evil-snipe]: https://melpa.org/#/evil-snipe
|
||||
[git-gutter-fringe]: https://melpa.org/#/git-gutter-fringe
|
||||
[ivy]: https://melpa.org/#/ivy
|
||||
[neotree]: https://melpa.org/#/neotree
|
||||
[new-issue]: https://github.com/hlissner/.emacs.d/issues/new
|
||||
[persp-mode]: https://melpa.org/#/persp-mode
|
||||
[quickrun]: https://melpa.org/#/quickrun
|
||||
[rg]: https://github.com/BurntSushi/ripgrep
|
||||
[sc-diffs]: https://github.com/hlissner/.emacs.d/blob/screenshots/git-gutter.png?raw=true
|
||||
[sc-multiedit]: https://raw.githubusercontent.com/hlissner/evil-multiedit/screenshots/main.gif?raw=true
|
||||
[sc]: https://github.com/hlissner/.emacs.d/tree/screenshots
|
||||
[shackle]: https://melpa.org/#/shackle
|
||||
[swiper]: https://melpa.org/#/swiper
|
||||
[evil-mode]: https://github.com/emacs-evil/evil
|
||||
[git-gutter-fringe]: https://github.com/syohex/emacs-git-gutter-fringe
|
||||
[helm]: https://github.com/emacs-helm/helm
|
||||
[ivy]: https://github.com/abo-abo/swiper
|
||||
[persp-mode]: https://github.com/Bad-ptr/persp-mode.el
|
||||
[projectile]: https://github.com/bbatsov/projectile
|
||||
[quelpa]: https://github.com/quelpa/quelpa
|
||||
[quickrun]: https://github.com/syohex/emacs-quickrun
|
||||
[ripgrep]: https://github.com/BurntSushi/ripgrep
|
||||
[shackle]: https://github.com/wasamasa/shackle
|
||||
[the_silver_searcher]: https://github.com/ggreer/the_silver_searcher
|
||||
[use-package]: https://github.com/jwiegley/use-package
|
||||
[vim]: https://github.com/hlissner/.vim
|
||||
[wgrep]: https://melpa.org/#/wgrep
|
||||
[yasnippet]: https://melpa.org/#/yasnippet
|
||||
[yay-evil]: http://ultravioletbat.deviantart.com/art/Yay-Evil-111710573
|
||||
[wgrep]: https://github.com/mhayashi1120/Emacs-wgrep
|
||||
|
||||
|
|
|
@ -1,168 +0,0 @@
|
|||
#+TITLE: DOOM modules
|
||||
|
||||
* Table of Contents :TOC:noexport:
|
||||
- [[#overview][Overview]]
|
||||
- [[#module-overview][Module overview]]
|
||||
- [[#the-structure-of-a-module][The structure of a module]]
|
||||
- [[#configel][config.el]]
|
||||
- [[#packagesel][packages.el]]
|
||||
- [[#autoloadel-or-autoloadel][autoload.el OR autoload/*.el]]
|
||||
- [[#additional-files][Additional files]]
|
||||
- [[#appendix][Appendix]]
|
||||
|
||||
* Overview
|
||||
DOOM is comprised of its core files and then its modules. A small list of macros are used to manage and configure plugins, other modules and DOOM Emacs itself.
|
||||
|
||||
These macros are:
|
||||
|
||||
+ Package management
|
||||
+ ~(featurep! MODULE SUBMODULE)~: returns =t= if =:module submodule= is activated.
|
||||
+ ~(load! NAME)~: loads NAME.el, relative to the current file.
|
||||
+ ~(require! MODULE SUBMODULE &optional RELOAD-P)~: activates a module & loads its config.el, if it isn't already loaded.
|
||||
+ ~(package! NAME &key recipe pin)~: declares a package to be installed and where to get it.
|
||||
+ ~(depends-on! MODULE SUBMODULE)~: loads a module's packages.el.
|
||||
+ Configuration
|
||||
+ ~(set! SETTING &rest ARGS)~: safely cross-configure other modules. Use ~M-x doom/describe-setting~ to see what's available.
|
||||
+ ~(def-package! NAME &rest PLIST)~: configure a package (wrapper around ~use-package~).
|
||||
+ ~(def-setting! SETTING &rest ARGS)~: defines a setting other modules can ~set!~.
|
||||
|
||||
The TL;DR of this document is:
|
||||
|
||||
+ Modules are comprised of: =config.el=, =packages.el=, either =autoload.el= or =autoload/*.el=, and =+*.el= files; these are all optional.
|
||||
+ =config.el= is the only file loaded when a module is activated, and is where you configure the module and its plugins.
|
||||
+ =packages.el= files inform DOOM what plugins to install and where from, using the ~package!~ macro. This macro accepts a MELPA-style recipe plist to specify a location other than the ELPA for fetching plugins.
|
||||
+ Use ~set!~ to safely cross-configure modules; ~doom/describe-setting~ can help you discover what settings are available.
|
||||
+ Packages are deferred by default; add ~:demand t~ to their ~def-package!~ declaration to load them immediately.
|
||||
+ The =private/{user-login-name}= module is automatically loaded. It is harmless to keep =:private {user-login-name}= in your init.el however.
|
||||
+ =private/{user-login-name}/init.el= is a special file that is automatically loaded after DOOM core files, but before modules are loaded. Use it to configure DOOM.
|
||||
|
||||
** Module overview
|
||||
These modules are in their ideal load order.
|
||||
|
||||
+ :feature :: Broad modules that bring essential functionality to Emacs as an editor.
|
||||
+ :completion :: Swappable completion modules for narrowing down candidate lists quickly.
|
||||
+ :ui :: Aesthetic modules that affect the Emacs interface or user experience.
|
||||
+ :tools :: Small modules that add specific, non-essential functionality to Emacs.
|
||||
+ :lang :: Modules that bring support for a language or group of languages to Emacs.
|
||||
+ :org :: Modules that affect and extend org-mode.
|
||||
+ :app :: Large, opinionated modules that transform Emacs' UI to serve a specific purpose.
|
||||
+ :private :: Private configuration modules that are untracked by version control (except for my personal one; use it as a reference).
|
||||
|
||||
Change the ~doom!~ block in your ~init.el~ file to enable/disable modules on startup. You'll need to restart Emacs.
|
||||
|
||||
Don't forget to run ~make~ afterwards to ensure that the needed packages are installed (and unneeded ones are uninstalled).
|
||||
|
||||
#+begin_quote
|
||||
*Remember*: if you've byte-compiled your config, your changes won't take effect
|
||||
until you recompile or delete the \*.elc files.
|
||||
#+end_quote
|
||||
|
||||
* The structure of a module
|
||||
Modules are made up of five *optional* parts:
|
||||
|
||||
+ config.el :: The heart of a module; loaded when the module is activated.
|
||||
+ packages.el :: Tells DOOM what packages to install and where from. Isn't loaded until package management commands are used.
|
||||
+ autoload.el (or autoload/*.el) :: Lazily-loaded functions for that module.
|
||||
+ +*.el :: Additional config files; not automatically loaded.
|
||||
+ test/*.el :: unit tests for that module, if any.
|
||||
|
||||
** config.el
|
||||
*config.el* is loaded immediately. It is the only file proactively loaded by the DOOM module system. Additional files must be explicitly loaded using ~load!~.
|
||||
|
||||
It should expect dependencies (in =packages.el=) to be installed and available, but shouldn't make assumptions about what modules are activated (use ~featurep!~ for this).
|
||||
|
||||
Packages should be configured using ~after!~ or ~def-package!~ (an alias for ~use-package~).
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
;; from modules/completion/company/config.el
|
||||
(def-package! company
|
||||
:commands (company-mode global-company-mode company-complete
|
||||
company-complete-common company-manual-begin company-grab-line)
|
||||
:config
|
||||
(setq company-idle-delay nil
|
||||
company-tooltip-limit 10
|
||||
company-dabbrev-downcase nil
|
||||
company-dabbrev-ignore-case nil)
|
||||
[...])
|
||||
#+END_SRC
|
||||
|
||||
+ Packages are *deferred* by default: add ~:demand t~ to ~def-package!~ blocks to load them immediately.
|
||||
+ Use ~featurep!~ to test DOOM module availability for conditional packages.
|
||||
+ Use ~set!~ to cross-configure modules safely, e.g. company backends:
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
;; from modules/lang/python/config.el
|
||||
(set! :company-backend 'python-mode '(company-anaconda))
|
||||
#+END_SRC
|
||||
|
||||
** packages.el
|
||||
This file isn't loaded until you use DOOM's package management commands.
|
||||
|
||||
Evaluating them should be deterministic, idempotent, and without side-effects (besides updating ~doom-modules~ and ~doom-packages~).
|
||||
|
||||
Packages are declared with the ~package!~ macro, e.g.
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
;; from modules/lang/org/packages.el
|
||||
(package! org-bullets)
|
||||
|
||||
;; from modules/tools/rotate-text/packages.el
|
||||
(package! rotate-text :recipe (:fetcher github :repo "debug-ito/rotate-text.el"))
|
||||
#+END_SRC
|
||||
|
||||
The packages.el of another module can loaded with ~depends-on!~:
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
;; from modules/feature/file-templates/packages.el
|
||||
(depends-on! :feature snippets)
|
||||
#+END_SRC
|
||||
|
||||
** autoload.el OR autoload/*.el
|
||||
Functions in these files are lazily loaded. ~doom/reload-autoloads~ will scan these and produce an =autoloads.el= file, which tells Emacs where to find these functions.
|
||||
|
||||
For example:
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
;; from modules/lang/org/autoload/org.el
|
||||
;;;###autoload
|
||||
(defun +org/toggle-checkbox ()
|
||||
(interactive)
|
||||
[...])
|
||||
|
||||
;; from modules/lang/org/autoload/evil.el
|
||||
;;;###autoload (autoload '+org:attach "lang/org/autoload/evil" nil t)
|
||||
(evil-define-command +org:attach (&optional uri)
|
||||
(interactive "<a>")
|
||||
[...])
|
||||
#+END_SRC
|
||||
|
||||
Autoload files named ~evil*.el~ will be ignored if =:feature evil= isn't loaded.
|
||||
|
||||
** Additional files
|
||||
The only convention is to prefix additional elisp files with a =+=, e.g.
|
||||
=modules/feature/version-control/+git.el=.
|
||||
|
||||
These are /not/ loaded automatically. Use ~load!~ to do so.
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
;; from modules/feature/version-control/config.el
|
||||
(load +git)
|
||||
#+END_SRC
|
||||
|
||||
* Appendix
|
||||
+ Macros
|
||||
+ ~(featurep! CATEGORY MODULE)~
|
||||
+ ~(load! NAME)~
|
||||
+ ~(package! NAME &key recipe pin)~
|
||||
+ ~(require! CATEGORY MODULE &optional RELOAD-P)~
|
||||
+ ~(def-package! NAME &rest PLIST)~
|
||||
+ ~(set! SETTING &rest ARGS)~
|
||||
+ ~(def-setting! NAME ARGLIST &rest BODY)~
|
||||
+ Commands
|
||||
+ ~doom/reload~
|
||||
+ ~doom/reload-autoloads~
|
||||
+ ~doom/compile~
|
||||
+ ~doom/recompile~
|
||||
+ ~doom/reset~
|
||||
+ ~doom/clean-compiled~
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
* :app email
|
||||
#+TITLE: :app email
|
||||
|
||||
This module makes Emacs an email client, using ~mu4e~.
|
||||
|
||||
|
@ -10,41 +10,45 @@ It uses ~mu4e~ to read my email, but depends on ~offlineimap~ (to sync my email
|
|||
WARNING: my config is gmail/gsuite oriented, and since Google has its own opinions on the IMAP standard, it is unlikely to translate to other hosts.
|
||||
#+end_quote
|
||||
|
||||
** Install
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#macos][MacOS]]
|
||||
- [[#arch-linux][Arch Linux]]
|
||||
- [[#dependencies][Dependencies]]
|
||||
|
||||
* Install
|
||||
This module requires:
|
||||
|
||||
+ ~offlineimap~ (to sync mail with)
|
||||
+ ~mu~ (to index your downloaded messages)
|
||||
|
||||
*** MacOS
|
||||
** MacOS
|
||||
#+BEGIN_SRC sh :tangle (if (doom-system-os 'macos) "yes")
|
||||
brew install mu --with-emacs
|
||||
brew install offlineimap
|
||||
#+END_SRC
|
||||
|
||||
*** Arch Linux
|
||||
** Arch Linux
|
||||
#+BEGIN_SRC sh :dir /sudo:: :tangle (if (doom-system-os 'arch) "yes")
|
||||
sudo pacman --noconfirm --needed -S offlineimap mu
|
||||
#+END_SRC
|
||||
|
||||
** Dependencies
|
||||
* Dependencies
|
||||
You need to do the following:
|
||||
|
||||
1. Write a ~\~/.offlineimaprc~. Mine can be found [[https://github.com/hlissner/dotfiles/tree/master/shell/+mu][in my dotfiles repository]]. It is configured to download mail to ~\~/.mail~. I use unix pass to securely store my login credentials.
|
||||
1. Write a ~\~/.offlineimaprc~. Mine can be found [[https://github.com/hlissner/dotfiles/tree/master/shell/+mu][in my dotfiles repository]]. It is configured to download mail to ~\~/.mail~. I use [[https://www.passwordstore.org/][unix pass]] to securely store my login credentials.
|
||||
2. Download your email: ~offlineimap -o~ (may take a while)
|
||||
3. Index it with mu: ~mu index --maildir ~/.mail~
|
||||
|
||||
Then configure Emacs to use your email address:
|
||||
|
||||
#+BEGIN_SRC emacs-lisp :tangle no
|
||||
;; + %s is replaced with the label, e.g. /%s/Drafts => /lissner.net/Drafts
|
||||
;; + Each path is relative to `+email-mu4e-mail-path', which is ~/.mail by
|
||||
;; default
|
||||
(set! :email "lissner.net"
|
||||
'((mu4e-sent-folder . "/%s/Sent Mail")
|
||||
(mu4e-drafts-folder . "/%s/Drafts")
|
||||
(mu4e-trash-folder . "/%s/Trash")
|
||||
(mu4e-refile-folder . "/%s/All Mail")
|
||||
;; Each path is relative to `+email-mu4e-mail-path', which is ~/.mail by default
|
||||
(set! :email "Lissner.net"
|
||||
'((mu4e-sent-folder . "/Lissner.net/Sent Mail")
|
||||
(mu4e-drafts-folder . "/Lissner.net/Drafts")
|
||||
(mu4e-trash-folder . "/Lissner.net/Trash")
|
||||
(mu4e-refile-folder . "/Lissner.net/All Mail")
|
||||
(smtpmail-smtp-user . "henrik@lissner.net")
|
||||
(user-mail-address . "henrik@lissner.net")
|
||||
(mu4e-compose-signature . "---\nHenrik Lissner"))
|
||||
|
|
|
@ -1,11 +1,17 @@
|
|||
* :app irc
|
||||
#+TITLE: :app irc
|
||||
|
||||
This module turns adds an IRC client to Emacs ([[https://github.com/jorgenschaefer/circe][~circe~)]] with native notifications ([[https://github.com/eqyiel/circe-notifications][circe-notifications]]).
|
||||
|
||||
** Dependencies
|
||||
* Table of Contents :TOC:
|
||||
- [[#dependencies][Dependencies]]
|
||||
- [[#configure][Configure]]
|
||||
- [[#pass-the-unix-password-manager][Pass: the unix password manager]]
|
||||
- [[#emacs-auth-source-api][Emacs' auth-source API]]
|
||||
|
||||
* Dependencies
|
||||
This module has no dependencies, besides =gnutls-cli= or =openssl= for secure connections.
|
||||
|
||||
** Configure
|
||||
* Configure
|
||||
Use the ~:irc~ setting to configure IRC servers. Its second argument (a plist) takes the same arguments as ~circe-network-options~.
|
||||
|
||||
#+BEGIN_SRC emacs-lisp :tangle no
|
||||
|
@ -19,7 +25,7 @@ Use the ~:irc~ setting to configure IRC servers. Its second argument (a plist) t
|
|||
|
||||
*It is a obviously a bad idea to store auth-details in plaintext,* so here are some ways to avoid that:
|
||||
|
||||
*** Pass: the unix password manager
|
||||
** Pass: the unix password manager
|
||||
[[https://www.passwordstore.org/][Pass]] is my tool of choice. I use it to manage my passwords. If you activate the [[/modules/tools/password-store/README.org][:tools password-store]] module you get an elisp API through which to access your password store.
|
||||
|
||||
~:irc~'s plist can use functions instead of strings. ~+pass-get-user~ and ~+pass-get-secret~ can help here:
|
||||
|
@ -46,7 +52,7 @@ But wait, there's more! This stores your password in a public variable which cou
|
|||
|
||||
And you're good to go!
|
||||
|
||||
*** Emacs' auth-source API
|
||||
** Emacs' auth-source API
|
||||
~auth-source~ is built into Emacs. As suggested [[https://github.com/jorgenschaefer/circe/wiki/Configuration#safer-password-management][in the circe wiki]], you can store (and retrieve) encrypted passwords with it.
|
||||
|
||||
#+BEGIN_SRC emacs-lisp :tangle no
|
||||
|
|
|
@ -1,29 +1,33 @@
|
|||
* :completion company
|
||||
#+TITLE: :completion company
|
||||
|
||||
This module adds completion support powered by [[https://github.com/company-mode/company-mode][company]].
|
||||
This module adds code-completion support, powered by [[https://github.com/company-mode/company-mode][company]].
|
||||
|
||||
+ Uses ~company-quickhelp~ for documentation tooltips
|
||||
+ Uses ~company-statistics~ to order results by usage frequency
|
||||
|
||||
[[/../screenshots/company.png]]
|
||||
|
||||
** Install
|
||||
Specific languages may require additional setup. Some languages may have no completion support at all.
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#configure][Configure]]
|
||||
- [[#auto-completion][Auto-completion]]
|
||||
- [[#troubleshooting][Troubleshooting]]
|
||||
|
||||
* Install
|
||||
Certain languages may require additional setup, and some languages may have no completion support at all.
|
||||
|
||||
Check the README.org in that language's module for details.
|
||||
|
||||
** Customization
|
||||
This module is configured to suit my preferences. Here are some things you may want to change:
|
||||
* Configure
|
||||
** Auto-completion
|
||||
By default, I've disabled auto-completion. This is my preference. I prefer to invoke company when I need it by calling ~company-complete~ manually (typically, bound to =C-SPC= in insert mode). However, some may not share my preference.
|
||||
|
||||
*** as-you-type completion
|
||||
By default, I've disabled auto-completion. This is my preference. I prefer to invoke company when I need it by pressing ~C-SPC~ from insert mode. Some don't like this.
|
||||
|
||||
To make it automatic, you need to do two things:
|
||||
To enable auto-completion you must:
|
||||
|
||||
1. Load ~company~,
|
||||
2. and change ~company-idle-delay~ to a non-nil float (the default is 0.5)
|
||||
|
||||
To do this, add the following to your ~modules/private/<username>~ module (remember, ~:private <username>~ needs to be added to init.el):
|
||||
For example, add the following to your ~modules/private/<username>/config.el~ module:
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(require 'company)
|
||||
|
@ -31,9 +35,9 @@ To do this, add the following to your ~modules/private/<username>~ module (remem
|
|||
company-minimum-prefix-length 3)
|
||||
#+END_SRC
|
||||
|
||||
** Troubleshooting
|
||||
* Troubleshooting
|
||||
If completion isn't working for you, please consider the following before posting a bug report:
|
||||
|
||||
+ Different languages will have different dependencies in order for auto-completion to work. Please look for the README.org in that language's respective module for details.
|
||||
+ If what you are expecting is popup-as-you-type completion (which is disabled by default), see the "Customize" section above; it includes instructions on how to enable this.
|
||||
+ Certain languages may have extra dependencies in order for auto-completion to work. Please look for that module's README.org for details.
|
||||
+ Some languages don't have any auto-completion support.
|
||||
+ Check [[*Customization][Customization]], perhaps what you are expecting is popup-as-you-type completion, which is disabled by default.
|
||||
|
|
|
@ -1,93 +1,96 @@
|
|||
* :completion ivy
|
||||
#+TITLE: :completion ivy
|
||||
|
||||
This module adds the Ivy completion backend.
|
||||
This module adds Ivy, a completion backend.
|
||||
|
||||
I prefer ivy over ido and helm, for its speed and simplicity. With ivy's help and some hackery, I get the following features:
|
||||
#+begin_quote
|
||||
I prefer ivy over ido for its flexibility. I prefer ivy over helm because it's lighter.
|
||||
#+end_quote
|
||||
|
||||
+ Project-wide search & replace powered by ~rg~ and ~ag~
|
||||
+ Project-wide search & replace powered by ~rg~ or ~ag~
|
||||
+ Project jump-to navigation ala Command-T, Sublime Text's Jump-to-anywhere or Vim's CtrlP plugin.
|
||||
+ Ivy integration for ~M-x~, ~imenu~, ~recentf~ and others.
|
||||
+ A powerful, interactive in-buffer search using ~swiper~.
|
||||
+ Ivy-powered TODO/FIXME navigation
|
||||
|
||||
** Install
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#macos][MacOS]]
|
||||
- [[#arch-linux][Arch Linux]]
|
||||
- [[#usage][Usage]]
|
||||
- [[#project-search--replace][Project search & replace]]
|
||||
- [[#jump-to-file-project-navigation][Jump-to-file project navigation]]
|
||||
- [[#in-buffer-searching][In-buffer searching]]
|
||||
- [[#task-lookup][Task lookup]]
|
||||
- [[#appendix][Appendix]]
|
||||
- [[#commands][Commands]]
|
||||
- [[#hacks][Hacks]]
|
||||
|
||||
* Install
|
||||
This module optionally depends on [[https://github.com/BurntSushi/ripgrep][ripgrep]] and [[https://github.com/ggreer/the_silver_searcher][the_silver_searcher]].
|
||||
|
||||
~rg~ is faster, but its results aren't deterministic and it doesn't support multiline search or full PCRE, that's where ~ag~ is useful.
|
||||
~rg~ is faster, but its results aren't deterministic, neither does it support multiline search or full PCRE, that's where ~ag~ is useful.
|
||||
|
||||
*** MacOS
|
||||
** MacOS
|
||||
#+BEGIN_SRC sh :tangle (if (doom-system-os 'macos) "yes")
|
||||
brew install ripgrep the_silver_searcher
|
||||
#+END_SRC
|
||||
|
||||
*** Arch Linux
|
||||
** Arch Linux
|
||||
#+BEGIN_SRC sh :dir /sudo:: :tangle (if (doom-system-os 'arch) "yes")
|
||||
sudo pacman --needed --noconfirm -S ripgrep the_silver_searcher
|
||||
#+END_SRC
|
||||
|
||||
** Usage
|
||||
*** Search & Replace
|
||||
A project-wide search can be performed with Ag (the silver searcher) or Rg
|
||||
(ripgrep) via their ex commands: ~:ag[!]~ and ~:rg[!]~ (or their
|
||||
current-directory counterparts ~:agcwd[!]~ and ~:rgcwd[!]~)
|
||||
* Usage
|
||||
Here is some insight into how I use this module. Keep in mind that the referenced commands and keybindings are defined [[/modules/private/hlissner][in my private module]].
|
||||
|
||||
** Project search & replace
|
||||
Ex interfaces to Ag (the silver searcher) and Rg (ripgrep) are available: ~:ag[!]~ and ~:rg[!]~, or their current-directory counterparts ~:agcwd[!]~ and ~:rgcwd[!]~.
|
||||
|
||||
[[/../screenshots/modules/completion/ivy/ivy-search.gif]]
|
||||
|
||||
From this session, you can press =Shift + Tab= to create an writeable occur
|
||||
buffer in wgrep mode.
|
||||
From this session, you can press =S+Tab= to create a writeable occur-buffer in wgrep mode.
|
||||
|
||||
[[/../screenshots/modules/completion/ivy/ivy-search-replace.gif]]
|
||||
|
||||
Make your modifications and press =C-c C-c= to commit them, or =C-c C-k= to
|
||||
abort.
|
||||
Make your modifications and press =C-c C-c= to commit them, or =C-c C-k= to abort.
|
||||
|
||||
*** Jump-to-file project navigation
|
||||
Inspired by Sublime Text's jump-to-anywhere, Vim's CtrlP or Unite plugins, and
|
||||
Textmate's Command-T, a marriage of ~projectile~ and ~ivy~ makes this available
|
||||
to you in Emacs. Invoke it with =<leader> /= or ~counsel-projectile-find-file~.
|
||||
** Jump-to-file project navigation
|
||||
Inspired by Sublime Text's jump-to-anywhere, Vim's CtrlP or Unite plugins, and Textmate's Command-T, a marriage of ~projectile~ and ~ivy~ makes this available to you in Emacs. Invoke it with =SPC f /=, =SPC SPC= or ~counsel-projectile-find-file~.
|
||||
|
||||
[[/../screenshots/modules/completion/ivy/ivy-projectile.gif]]
|
||||
|
||||
*** In-buffer searching
|
||||
I prefer to use ~evil-search~ (invoked by pressing =/= in normal mode) when
|
||||
jumping small/moderate (or predictable) distances. On occasion I need more
|
||||
feedback, so I turn to ~swiper~ (available directly with =M-x swiper RET=, or
|
||||
via ~:sw[iper]~).
|
||||
** In-buffer searching
|
||||
I use ~evil-search~ (invoked by pressing =/= in normal mode) when jumping small/moderate (or predictable) distances. However, there are occasions where I need more feedback, so I turn to ~swiper~ (available directly with =M-x swiper RET=, or via ~:sw[iper]~).
|
||||
|
||||
[[/../screenshots/modules/completion/ivy/ivy-swiper.gif]]
|
||||
|
||||
*** TODO-Task lookup
|
||||
I sprinkle my projects with TODO's & FIXME's. Using ivy and ripgrep, I wrote
|
||||
~+ivy/tasks~ to help me navigate to them. It can be invoked via ~:todo[!]~ as
|
||||
well.
|
||||
** Task lookup
|
||||
I sprinkle my projects with TODO's & FIXME's. You can navigate to and peruse them via ~M-x +ivy/tasks~ or ~:todo[!]~ (ex command).
|
||||
|
||||
[[/../screenshots/modules/completion/ivy/ivy-todo.gif]]
|
||||
|
||||
** Appendix
|
||||
*** Commands & Keybindings
|
||||
Here is a list of my commonly used commands, their default keybinds (defined in
|
||||
[[../../private/hlissner/+bindings.el][private/hlissner/+bindings.el]]), and their corresponding ex command (defined in
|
||||
[[../../private/hlissner/+commands.el][private/hlissner/+commands.el]]).
|
||||
* Appendix
|
||||
** Commands
|
||||
Here is a list of my commonly used commands, their default keybinds (defined in [[../../private/hlissner/+bindings.el][private/hlissner/+bindings.el]]), and their corresponding ex command (defined in [[../../private/hlissner/+commands.el][private/hlissner/+commands.el]]).
|
||||
|
||||
| command | key / ex command | description |
|
||||
|-------------------------------------+---------------------+------------------------------------------------------------------|
|
||||
| ~counsel-M-x~ | =M-x= | Smarter, smex-powered M-x |
|
||||
| ~counsel-bookmark~ | =<leader> b= | Find bookmark |
|
||||
| ~counsel-find-file~ | =<leader> .= | Browse from current directory |
|
||||
| ~counsel-projectile-find-file~ | =<leader> /= | Find file in project |
|
||||
| ~counsel-projectile-switch-project~ | =<leader> p= | Open another project |
|
||||
| ~counsel-recentf~ | =<leader> r= | Find recently opened file |
|
||||
| ~+ivy/switch-buffer~ | =<leader> ,= | Jump to buffer in current workspace |
|
||||
| ~+ivy/switch-workspace-buffer~ | =<leader> <= | Jump to buffer across workspaces |
|
||||
| ~+ivy:ag~ | ~:ag[!] [QUERY]~ | Search project (BANG = ignore gitignore) |
|
||||
| ~+ivy:ag-cwd~ | ~:agcwd[!] [QUERY]~ | Search this directory (BANG = don't recurse into subdirectories) |
|
||||
| ~+ivy:rg~ | ~:rg[!] [QUERY]~ | Search project (if BANG, ignore gitignore) |
|
||||
| ~+ivy:rg-cwd~ | ~:rgcwd[!] [QUERY]~ | Search this directory (BANG = don't recurse into subdirectories) |
|
||||
| ~+ivy:swiper~ | ~:sw[iper] [QUERY]~ | Search current buffer |
|
||||
| ~+ivy:todo~ | ~:todo[!]~ | List all TODO/FIXMEs in project (or current file if BANG) |
|
||||
| command | key / ex command | description |
|
||||
|-------------------------------------+------------------------+------------------------------------------------------------------|
|
||||
| ~counsel-M-x~ | =M-x= | Smarter, smex-powered M-x |
|
||||
| ~counsel-bookmark~ | =SPC RET= | Find bookmark |
|
||||
| ~counsel-find-file~ | =SPC f .= or =SPC .= | Browse from current directory |
|
||||
| ~counsel-projectile-find-file~ | =SPC f /= or =SPC SPC= | Find file in project |
|
||||
| ~counsel-projectile-switch-project~ | =SPC p p= | Open another project |
|
||||
| ~counsel-recentf~ | =SPC f r= | Find recently opened file |
|
||||
| ~ivy-switch-buffer~ | =SPC b b= | Jump to buffer in current workspace |
|
||||
| ~+ivy/switch-workspace-buffer~ | =SPC b B= | Jump to buffer across workspaces |
|
||||
| ~+ivy:ag~ | ~:ag[!] [QUERY]~ | Search project (BANG = ignore gitignore) |
|
||||
| ~+ivy:ag-cwd~ | ~:agcwd[!] [QUERY]~ | Search this directory (BANG = don't recurse into subdirectories) |
|
||||
| ~+ivy:rg~ | ~:rg[!] [QUERY]~ | Search project (if BANG, ignore gitignore) |
|
||||
| ~+ivy:rg-cwd~ | ~:rgcwd[!] [QUERY]~ | Search this directory (BANG = don't recurse into subdirectories) |
|
||||
| ~+ivy:swiper~ | ~:sw[iper] [QUERY]~ | Search current buffer |
|
||||
| ~+ivy:todo~ | ~:todo[!]~ | List all TODO/FIXMEs in project (or current file if BANG) |
|
||||
|
||||
While in a search (e.g. invoked from ~+ivy:ag~ or ~+ivy:rg~), these new
|
||||
keybindings are available to you:
|
||||
While in a search (e.g. invoked from ~+ivy:ag~ or ~+ivy:rg~), these new keybindings are available to you:
|
||||
|
||||
| key | description |
|
||||
|-------------+--------------------------------------------------------------------------------|
|
||||
|
@ -95,10 +98,8 @@ keybindings are available to you:
|
|||
| =C-SPC= | Preview the current candidate |
|
||||
| =M-RET= | Open the selected candidate in other-window |
|
||||
|
||||
*** Hacks
|
||||
+ Where possible, functions with ivy/counsel equivalents have been remapped
|
||||
(like ~find-file~ => ~counsel-find-file~). So a keybinding to ~find-file~ will
|
||||
invoke ~counsel-find-file~ instead.
|
||||
** Hacks
|
||||
+ Functions with ivy/counsel equivalents have been globally remapped (like ~find-file~ => ~counsel-find-file~). So a keybinding to ~find-file~ will invoke ~counsel-find-file~ instead.
|
||||
+ ~counsel-[arp]g~'s 3-character limit was reduced to 1 (mainly for the ex command)
|
||||
+ ~counsel-[arp]g~'s parentheses quoting behavior was reversed. Now, if you
|
||||
want literal parentheses, you must escape them: e.g. ~\(match\)~ is literal,
|
||||
|
|
|
@ -1,17 +1,21 @@
|
|||
* :feature eval
|
||||
#+TITLE: :feature eval
|
||||
|
||||
This module adds support for:
|
||||
This modules adds support for REPLs, build tasks and code evaluation.
|
||||
|
||||
+ [[#repls][Defining, invoking & interacting with REPLs]],
|
||||
+ [[#build-tasks][Defining & invoking build tasks for projects and files]],
|
||||
+ and [[#code-evaluation][evaluating code or entire buffers, printing their output to a popup window]].
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#usage][Usage]]
|
||||
- [[#configuration][Configuration]]
|
||||
- [[#repls][REPLs]]
|
||||
- [[#build-tasks][Build Tasks]]
|
||||
- [[#code-evaluation][Code Evaluation]]
|
||||
|
||||
** Install
|
||||
* Install
|
||||
This module has no external dependencies. However, specific languages may require additional setup.
|
||||
|
||||
Check the README.org in that language's module for details.
|
||||
|
||||
** Usage
|
||||
* Usage
|
||||
+ *REPLs*
|
||||
Invoked via:
|
||||
+ ~:repl~ (evil ex-command)
|
||||
|
@ -33,13 +37,15 @@ Check the README.org in that language's module for details.
|
|||
+ ~M-x +eval/region-and-replace~
|
||||
+ Evil users can use the ~gr~ operator to select and run a region.
|
||||
|
||||
** Configuration
|
||||
*** REPLs
|
||||
REPLs have been defined for most of the languages DOOM supports (check its README.org to see if it does).
|
||||
* Configuration
|
||||
** REPLs
|
||||
REPLs are defined for most of the languages Doom supports (check its README.org to see if it does).
|
||||
|
||||
Otherwise, you can define your own:
|
||||
Otherwise, you can define your own for a specified major-mode with the =:repl= setting.
|
||||
|
||||
A REPL definition consists of two parts: an interactive command that opens (and returns) a REPL buffer and a ~:repl~ definition that maps a major-mode to said command:
|
||||
~(set! :repl MAJOR-MODE FUNCTION)~
|
||||
|
||||
FUNCTION must return the repl buffer. Any window changes are ignored, then handed off to shackle (assuming shackle-mode is on) to display in a popup window.
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(defun +emacs-lisp/repl ()
|
||||
|
@ -54,8 +60,8 @@ A REPL definition consists of two parts: an interactive command that opens (and
|
|||
(set! :repl 'emacs-lisp-mode #'+emacs-lisp/repl)
|
||||
#+END_SRC
|
||||
|
||||
*** Build Tasks
|
||||
A build task is little more than major-mode-local commands, comprised of an interactive command, an association with a major mode and an optional predicate function.
|
||||
** Build Tasks
|
||||
A build task is little more than a major-mode-local interactive command that performs a task, such as compiling the current project or running unit tests. A predicate function can be supplied to ensure a command is only available when it is appropriate.
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(defun +lua/run-love ()
|
||||
|
@ -83,7 +89,7 @@ A build task is little more than major-mode-local commands, comprised of an inte
|
|||
(set! :build 'generate-docs 'lua-mode #'+lua/generate-docs)
|
||||
#+END_SRC
|
||||
|
||||
*** Code Evaluation
|
||||
** Code Evaluation
|
||||
Run regions or entire buffers with [[https://github.com/syohex/emacs-quickrun][Quickrun]]. Output will be sent to a popup window.
|
||||
|
||||
Quickrun includes support for many languages, but occasionally, you'll find a language without support, such as [[https://crystal-lang.org/][Crystal]]. A "runner" can be defined like so:
|
||||
|
|
|
@ -1,20 +1,27 @@
|
|||
* :feature evil
|
||||
#+TITLE: :feature evil
|
||||
|
||||
This holy module brings vim to Emacs.
|
||||
This holy module brings the vim experience to Emacs.
|
||||
|
||||
** Removing evil-mode
|
||||
Some users want vanilla Emacs back. To do so remove =:feature evil= from init.el. Evil-specific configuration and keybindings (defined with ~map!~) will be ignored without evil present (and removed when byte-compiling).
|
||||
* Table of Contents :TOC:
|
||||
- [[#removing-evil-mode][Removing evil-mode]]
|
||||
- [[#features][Features]]
|
||||
- [[#multiple-cursors][Multiple-cursors]]
|
||||
- [[#a-hybrid-code-folding-system][A hybrid code-folding system]]
|
||||
- [[#hacks][Hacks]]
|
||||
- [[#differences-from-vim][Differences from vim]]
|
||||
|
||||
** Differences from vanilla evil
|
||||
*** Overview
|
||||
+ A better ~:g[lobal]~ command with match highlighting
|
||||
+ ~:al[ign]~: an ex interface to ~align-regexp~ with match highlighting
|
||||
* Removing evil-mode
|
||||
To get back a more vanilla Emacs experience, remove =:feature evil= from init.el. Evil-specific configuration and keybindings (defined with ~map!~) will be ignored without evil present (and removed when byte-compiling).
|
||||
|
||||
* Features
|
||||
+ A better ~:g[lobal]~ command with incremental highlighting.
|
||||
+ Adds the ~:al[ign]~ ex command: offers an ex interface to ~align-regexp~ with incremental highlighting.
|
||||
+ Support for more of vim's filename modifiers in ex commands (like ~:p~, ~:p:h~ or ~:t~) than vanilla evil-mode offers.
|
||||
+ A list of new text objects:
|
||||
+ Blocks: ~B~ (from ~evil-textobj-anyblock~)
|
||||
+ Args: ~a~ (from ~evil-args~)
|
||||
+ Indentation: ~i~ / ~I~ / ~J~ (from ~evil-indent-plus~)
|
||||
+ Ported vim plugins:
|
||||
+ Incorporates vim functionality ported to evil:
|
||||
+ ~vim-commentary~ => ~evil-commentary~
|
||||
+ ~vim-easymotion~ => ~evil-easymotion~
|
||||
+ ~vim-multiedit~ => ~evil-multiedit~
|
||||
|
@ -23,19 +30,21 @@ Some users want vanilla Emacs back. To do so remove =:feature evil= from init.el
|
|||
+ ~vim-surround~ => ~evil-embrace~ & ~evil-surround~
|
||||
+ =NERDTree= equivalent is available in =:tools neotree=
|
||||
|
||||
*** Multiple-cursors
|
||||
** Multiple-cursors
|
||||
Two multiple-cursor implementations exist in this module: ~evil-mc~ and ~evil-multiedit~. Together, these provide the functionality of ~vim-multiple-cursors~.
|
||||
|
||||
The former lets you place "clone" cursors. The latter lets you interactively edit many regions from one place (like an interactive version of ~:%s~).
|
||||
|
||||
*** A saner code-folding system
|
||||
This module combines ~evil-vimish-fold~ (allows arbitrary folds) and ~hideshow~ (folds based on markers and indent) to create a more consistent code-folding system. All the vim folding keys should work (=zr=, =zm=, =za=, =zo=, etc).
|
||||
** A hybrid code-folding system
|
||||
This module combines ~evil-vimish-fold~ and ~hideshow~. The former allows arbitrary folds and the latter allows folds on markers and indentation. Together, they create a more consistent (and feature-complete) code-folding system.
|
||||
|
||||
*** Hacks
|
||||
Most vim folding keys should work, e.g. =zr=, =zm=, =za=, =zo=, etc.
|
||||
|
||||
** Hacks
|
||||
+ Automatically moves to new window when splitting
|
||||
+ If in visual mode, =*= and =#= will search for the current selection instead of the word-at-point.
|
||||
|
||||
** Differences from vim
|
||||
+ Column-wise ranges in ex commands are enabled by default. i.e. the range in =:'<,'>s/a/b= will only affects the visual selection, not full lines (see ~evil-ex-visual-char-range~).
|
||||
+ =:g= will highlight buffer matches incrementally.
|
||||
+ =:g= will incrementally highlight buffer matches.
|
||||
|
||||
|
|
|
@ -55,6 +55,7 @@
|
|||
("-test\\.el$" "__" emacs-ert-mode)
|
||||
("/.emacs.d/.+\\.el$" "__doom-module" emacs-lisp-mode)
|
||||
("/.emacs.d/.+/packages\\.el$" "__doom-packages" emacs-lisp-mode)
|
||||
("/.emacs.d/.+/README\\.org$" "__doom-readme" org-mode)
|
||||
(snippet-mode "__" snippet-mode)
|
||||
;; Go
|
||||
("\\.go$" "__.go" go-mode)
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: Doom module readme
|
||||
# --
|
||||
#+TITLE: ${1:`(progn (string-match "modules/\\([^/]+\\)/\\([^/]+\\)/.+" buffer-file-name)
|
||||
(format ":%s %s"
|
||||
(match-string 1 buffer-file-name)
|
||||
(match-string 2 buffer-file-name)))`}
|
||||
|
||||
${2:A short summary about what this module does.}
|
||||
|
||||
${3:If necessary, include a longer description below it that goes into more detail. This may be as long as you like.
|
||||
|
||||
+ If possible, include a list of features
|
||||
+ Include links to major plugins that the module uses, if applicable
|
||||
+ Use links whenever you can
|
||||
+ Mention dependencies on other modules here}
|
||||
|
||||
* Table of Contents :TOC:
|
||||
|
||||
* Install
|
||||
** Main dependencies
|
||||
*** MacOS
|
||||
#+BEGIN_SRC sh :tangle (if (doom-system-os 'macos) "yes")
|
||||
brew install x
|
||||
#+END_SRC
|
||||
|
||||
*** Arch Linux
|
||||
#+BEGIN_SRC sh :dir /sudo:: :tangle (if (doom-system-os 'arch) "yes")
|
||||
sudo pacman --needed --noconfirm -S X
|
||||
#+END_SRC
|
||||
|
||||
** Extra Dependencies
|
||||
+ A
|
||||
+ B
|
||||
+ C
|
||||
|
||||
#+BEGIN_SRC sh
|
||||
Y install A B C
|
||||
#+END_SRC
|
||||
|
||||
* Configuration
|
||||
|
||||
* Usage
|
||||
|
||||
* Appendix
|
||||
** Commands
|
||||
** Hacks
|
||||
$0
|
27
modules/feature/snippets/README.org
Normal file
27
modules/feature/snippets/README.org
Normal file
|
@ -0,0 +1,27 @@
|
|||
#+TITLE: :feature snippets
|
||||
|
||||
This module adds snippets to Emacs, powered by yasnippet.
|
||||
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
|
||||
* Install
|
||||
There are no extra dependencies for this module.
|
||||
|
||||
By default, this module uses the snippet library included with yasnippet.
|
||||
|
||||
For the best experience, I'd suggest installing mine from https://github.com/hlissner/emacs-snippets -- they have been tailored specifically for Doom.
|
||||
|
||||
1. Clone the repo to your private module:
|
||||
#+BEGIN_SRC bash
|
||||
git clone https://github.com/hlissner/emacs-snippets ~/.emacs.d/modules/private/$(whoami)/snippets
|
||||
#+END_SRC
|
||||
2. Tell yasnippet where to look for them:
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
;; modules/private/{USERNAME}/config.el
|
||||
(after! yasnippet
|
||||
(setq yas-snippet-dirs
|
||||
(append (list (expand-file-name "snippets/" (file-name-directory load-file-name)))
|
||||
(delq 'yas-installed-snippets-dir yas-snippet-dirs))))
|
||||
#+END_SRC
|
||||
|
75
modules/feature/workspaces/README.org
Normal file
75
modules/feature/workspaces/README.org
Normal file
|
@ -0,0 +1,75 @@
|
|||
#+TITLE: :feature workspaces
|
||||
|
||||
This module adds support for workspaces, powered by persp_mode, as well as a unified API for manipulating them.
|
||||
|
||||
#+begin_quote
|
||||
There are many ways to use workspaces. Some use them to group buffers/windows by project or categories (views, models, logic, etc). I use them differently: on a per-task basis, which may traverse multiple projects or aspects, but are tied to an objective. For example: implement a specific feature or fix a certain bug; sometimes unrelated to the project at hand.
|
||||
#+end_quote
|
||||
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#features][Features]]
|
||||
- [[#isolated-buffer-list][Isolated buffer-list]]
|
||||
- [[#automatic-workspaces][Automatic workspaces]]
|
||||
- [[#session-persistence][Session persistence]]
|
||||
- [[#workspace-persistence][Workspace persistence]]
|
||||
- [[#appendix][Appendix]]
|
||||
- [[#commands--keybindings][Commands & Keybindings]]
|
||||
- [[#api][API]]
|
||||
|
||||
* Install
|
||||
This module has no additional dependencies.
|
||||
|
||||
* Features
|
||||
** Isolated buffer-list
|
||||
When persp-mode is active, ~doom-buffer-list~ becomes workspace-restricted. You can overcome this by using ~buffer-list~.
|
||||
|
||||
** Automatic workspaces
|
||||
A workspace is automatically created (and switched to) when you:
|
||||
|
||||
+ Create a new frame (with =make-frame=; bound to =M-N= by default)
|
||||
+ Switch to a project using ~projectile-switch-project~ (or its ivy/helm equivalents)
|
||||
|
||||
** Session persistence
|
||||
By default, your session is autosaved when you quit Emacs (or disable ~persp-mode~). You can load a previous session with ~M-x +workspace/load-session~ or ~:sl[oad]~ (ex command).
|
||||
|
||||
You can supply either a name to load a specific session to replace your current one.
|
||||
|
||||
** Workspace persistence
|
||||
If you'd like to save a specific workspace, use ~M-x +workspace/save~, which can be loaded into the current session (as another workspace) with ~M-x +workspace/load~.
|
||||
|
||||
* Appendix
|
||||
** Commands & Keybindings
|
||||
Here is a list of available commands, their default keybindings (defined in private/hlissner/+bindings.el), and corresponding ex commands (if any -- defined in private/hlissner/+commands.el).
|
||||
|
||||
| command | key / ex command | description |
|
||||
|---------------------------+----------------------------+------------------------------------------------------------|
|
||||
| ~+workspace/new~ | =SPC TAB n= | Create a new, blank workspace |
|
||||
| ~+workspace/display~ | =SPC TAB TAB= | Display open workspaces in the mode-line |
|
||||
| ~+workspace/load~ | =SPC TAB l= | Load a saved workspace into the current session |
|
||||
| ~+workspace/load-session~ | =SPC TAB L= / =:sl[oad]= | Replace current session with a saved one |
|
||||
| ~+workspace/save~ | =SPC TAB s= | Save the current workspace to a file |
|
||||
| ~+workspace/save-session~ | =SPC TAB S= / =:ss[ave]= | Save current session |
|
||||
| ~+workspace/switch-to~ | =SPC TAB .= | Switch to an open workspace |
|
||||
| ~+workspace/switch-left~ | =SPC TAB [= / =[ w= / =gT= | Switch to previous workspace |
|
||||
| ~+workspace/switch-right~ | =SPC TAB [= / =] w= / =gt= | Switch to next workspace |
|
||||
| ~+workspace/kill-session~ | =SPC TAB X= / =:sclear= | Clears the current session (kills all windows and buffers) |
|
||||
|
||||
** API
|
||||
+ ~+workspace-list~ -> list<Struct>
|
||||
+ ~+workspace-list-names~ -> list<string>
|
||||
+ ~+workspace-buffer-list &optional PERSP~ -> bool
|
||||
+ ~+workspace-p OBJ~ -> bool
|
||||
+ ~+workspace-exists-p NAME~ -> bool
|
||||
+ ~+workspace-get NAME &optional NOERROR~ -> Struct
|
||||
+ ~+workspace-current &optional FRAME WINDOW~ -> Struct
|
||||
+ ~+workspace-current-name~ -> string
|
||||
+ ~+workspace-load NAME~
|
||||
+ ~+workspace-load-session NAME~
|
||||
+ ~+workspace-save NAME~
|
||||
+ ~+workspace-save-session NAME~
|
||||
+ ~+workspace-new NAME~
|
||||
+ ~+workspace-rename NAME NEW-NAME~
|
||||
+ ~+workspace-delete NAME &optional INHIBIT-KILL-P~
|
||||
+ ~+workspace-switch NAME &optional AUTO-CREATE-P~
|
||||
+ ~+workspace-protected-p NAME~ -> bool
|
|
@ -1,4 +1,4 @@
|
|||
* :lang cc
|
||||
#+TITLE: :lang cc
|
||||
|
||||
This module adds support for the C-family of languages: C, C++, and Objective-C.
|
||||
|
||||
|
@ -8,17 +8,23 @@ This module adds support for the C-family of languages: C, C++, and Objective-C.
|
|||
+ Code navigation (~irony~)
|
||||
+ File Templates ([[../../feature/file-templates/templates/c-mode][c-mode]], [[../../feature/file-templates/templates/c++-mode][c++-mode]])
|
||||
+ Snippets ([[https://github.com/hlissner/emacs-snippets/tree/master/cc-mode][cc-mode]], [[https://github.com/hlissner/emacs-snippets/tree/master/c-mode][c-mode]], [[https://github.com/hlissner/emacs-snippets/tree/master/c++-mode][c++-mode]])
|
||||
+ Several improvements to C++11 indentation and syntax highlighting.
|
||||
|
||||
#+begin_quote
|
||||
C contends with Haskell and Ruby for my favorite language. It's hard to beat this combination of simplicity and power. I've used C for my work since 2009, and it (along with C++) is a personal favorite for game development (with SDL, SFML or, more recently, cocos2d).
|
||||
C contends with Haskell and Ruby for my favorite language. That said, it's more accurate to say I write C, but with two or three C++ features.
|
||||
|
||||
The module provides nominal support for Objective-C, which I really only use to inspect generated glue code for iOS mobile apps. Otherwise, I prefer Swift.
|
||||
#+end_quote
|
||||
|
||||
** Install
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#macos][MacOS]]
|
||||
- [[#arch-linux][Arch Linux]]
|
||||
|
||||
* Install
|
||||
This module requires ~irony-server~ for most of its features, which depends on ~cmake~ and ~libclang~.
|
||||
|
||||
*** MacOS
|
||||
** MacOS
|
||||
Due to linking issues, MacOS users must compile irony-server manually:
|
||||
|
||||
#+BEGIN_SRC sh :tangle (if (doom-system-os 'macos) "yes")
|
||||
|
@ -43,9 +49,10 @@ popd
|
|||
rm -rf irony-mode
|
||||
#+END_SRC
|
||||
|
||||
*** Arch Linux
|
||||
** Arch Linux
|
||||
#+BEGIN_SRC sh :tangle (if (doom-system-os 'arch) "yes")
|
||||
sudo pacman --needed --noconfirm -S clang cmake
|
||||
#+END_SRC
|
||||
|
||||
Then run ~M-x irony-install-server~ in Emacs.
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
* :lang go
|
||||
#+TITLE: :lang go
|
||||
|
||||
This module adds [[https://golang.org][Go]] support.
|
||||
|
||||
|
@ -13,12 +13,18 @@ This module adds [[https://golang.org][Go]] support.
|
|||
+ [[https://github.com/hlissner/emacs-snippets/tree/master/go-mode][Snippets]]
|
||||
|
||||
#+begin_quote
|
||||
I have mixed feelings about Go. It's a decent compromise between C and higher-level languages. It's a pleasantly straight-forward language with elegant syntax, but it lacks /native/ support for certain luxuries I miss from other languages, like generics, optional arguments, and function overloading. You've got to learn to love ~interface{}~.
|
||||
I have mixed feelings about Go. It's a decent compromise between C and higher-level languages, is pleasantly straight-forward and elegant, but lacks /native/ support for luxuries I miss from other languages, like generics, optional arguments, and function overloading. You've got to learn to love ~interface{}~.
|
||||
|
||||
Still, Go has been a remarkably useful (and fast!) companion for a variety of small-to-medium backend web and CLI projects.
|
||||
#+end_quote
|
||||
|
||||
** Install
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#go][Go]]
|
||||
- [[#dependencies][Dependencies]]
|
||||
|
||||
* Install
|
||||
** Go
|
||||
To get started with Go, you need the ~go~ tool:
|
||||
|
||||
*** MacOS
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
* :lang haskell
|
||||
#+TITLE: :lang haskell
|
||||
|
||||
This module adds [[https://www.haskell.org/][Haskell]] support.
|
||||
|
||||
|
@ -11,52 +11,55 @@ This module adds [[https://www.haskell.org/][Haskell]] support.
|
|||
+ [[https://github.com/hlissner/emacs-snippets/tree/master/haskell-mode][Snippets]]
|
||||
|
||||
#+begin_quote
|
||||
Haskell contends with C and Ruby as my favorite language. I don't think my Haskell code will ever save the world, but I'll reach for it when working on smaller projects and programming exercises (like projecteuler.com or exercism.io).
|
||||
Haskell contends with C and Ruby as my favorite language. I don't think my Haskell code will ever save the world, but I'll reach for it for small projects and programming exercises (like projecteuler.com or exercism.io).
|
||||
|
||||
I'd love to incorporate more of it into my machine learning work, but Python and Julia hold that crown. For now.
|
||||
#+end_quote
|
||||
|
||||
** Install
|
||||
To get started with Haskell, you need:
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#haskell][Haskell]]
|
||||
- [[#dependencies][Dependencies]]
|
||||
- [[#troubleshooting][Troubleshooting]]
|
||||
- [[#resources][Resources]]
|
||||
|
||||
+ cabal (the haskell package builder)
|
||||
+ ghc/ghci (the compiler, syntax checker & repl)
|
||||
* Install
|
||||
** Haskell
|
||||
To get started with Haskell, you need *stack* installed.
|
||||
|
||||
*** MacOS
|
||||
#+BEGIN_SRC sh :tangle (if (doom-system-os 'macos) "yes")
|
||||
brew install cabal-install ghc
|
||||
brew install haskell-stack
|
||||
stack setup
|
||||
#+END_SRC
|
||||
|
||||
*** Arch Linux
|
||||
#+BEGIN_SRC sh :dir /sudo:: :tangle (if (doom-system-os 'arch) "yes")
|
||||
sudo pacman --needed --noconfirm -S cabal-install ghc
|
||||
sudo pacman --needed --noconfirm -S stack
|
||||
# Replace pacaur with your AUR package manager of choice
|
||||
pacaur --needed --noconfirm -S ncurses5-compat-lib
|
||||
stack setup
|
||||
#+END_SRC
|
||||
|
||||
** Dependencies
|
||||
This module requires the following ~cabal~ packages:
|
||||
|
||||
+ ~happy~ (required by ~haskell-src-exts~)
|
||||
+ ~haskell-src-exts~ (required by ~ghc-mod~ & ~hoogle~)
|
||||
+ ~ghc-mod~ (for auto-completion)
|
||||
+ ~hoogle~ (for documentation lookup)
|
||||
This module requires ~ghc-mod~ (as well as ~intero~, but those will be automatically installed).
|
||||
|
||||
#+BEGIN_SRC sh
|
||||
cabal update
|
||||
cabal install happy haskell-src-exts ghc-mod hoogle
|
||||
stack install ghc-mod
|
||||
#+END_SRC
|
||||
|
||||
Ensure that ~\~/.cabal/bin~ is in ~PATH~:
|
||||
Also ensure that ~\~/.local/bin~ is in ~PATH~:
|
||||
|
||||
#+BEGIN_SRC sh
|
||||
# place this in your profile file, like ~/.bash_profile or ~/.zshenv
|
||||
export PATH="~/.cabal/bin:$PATH"
|
||||
export PATH="~/.local/bin:$PATH"
|
||||
#+END_SRC
|
||||
|
||||
** Troubleshooting
|
||||
* Troubleshooting
|
||||
+ Stack users: if a ~dist/setup-config~ file exists in your project, [[ https://github.com/DanielG/ghc-mod/wiki#known-issues-related-to-stack][ghc-mod may
|
||||
refuse to work]].
|
||||
|
||||
** Resources
|
||||
* Resources
|
||||
Here are a few resources I've found indespensible in my Haskell adventures:
|
||||
|
||||
+ [[http://learnyouahaskell.com/][Learn you a haskell for great good]]
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
# javascript
|
||||
|
||||
Javascript support, including auto-completion (tern), REPL support
|
||||
(nodejs-repl), refactoring commands (js2-refactor), and syntax checking
|
||||
(flycheck).
|
||||
|
||||
Includes coffescript and jsx support, as well as project minor modes for nodejs
|
||||
projects (with a package.json) or launchbar 6 actions.
|
||||
|
||||
## External Dependencies
|
||||
|
||||
Run `make bootstrap js` to install these.
|
||||
|
||||
+ NodeJS & NPM (`brew install node`, `pacman -S nodejs npm`)
|
||||
+ tern: `npm -g install tern` (for completion)
|
||||
|
46
modules/lang/javascript/README.org
Normal file
46
modules/lang/javascript/README.org
Normal file
|
@ -0,0 +1,46 @@
|
|||
#+TITLE: :lang javascript
|
||||
|
||||
This module adds Javascript support.
|
||||
|
||||
+ Code completion (tern)
|
||||
+ REPL support (nodejs-repl)
|
||||
+ Refactoring commands (js2-refactor)
|
||||
+ Syntax checking (flycheck)
|
||||
+ Browser code injection with skewer-mode
|
||||
+ Coffeescript & JSX support
|
||||
+ Jump-to-definitions and references support (xref)
|
||||
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#node--npm][Node & NPM]]
|
||||
- [[#dependencies][Dependencies]]
|
||||
- [[#appendix][Appendix]]
|
||||
- [[#commands][Commands]]
|
||||
|
||||
* Install
|
||||
** Node & NPM
|
||||
To get started with Javascript, you'll need node and its package manager, NPM, installed.
|
||||
|
||||
*** MacOS
|
||||
#+BEGIN_SRC sh :tangle (if (doom-system-os 'macos) "yes")
|
||||
brew install node
|
||||
#+END_SRC
|
||||
|
||||
*** Arch Linux
|
||||
#+BEGIN_SRC sh :dir /sudo:: :tangle (if (doom-system-os 'arch) "yes")
|
||||
sudo pacman --needed --noconfirm -S nodejs npm
|
||||
#+END_SRC
|
||||
|
||||
** Dependencies
|
||||
This module optionally requires ~tern~ for code completion.
|
||||
|
||||
#+BEGIN_SRC sh
|
||||
npm -g install tern
|
||||
#+END_SRC
|
||||
|
||||
* Appendix
|
||||
** Commands
|
||||
| command | key / ex command | description |
|
||||
|----------------------------------+------------------+------------------------------------------------------------|
|
||||
| ~+javascript/repl~ | =:repl= | Open the NodeJS REPL (or send the current selection to it) |
|
||||
| ~+javascript/skewer-this-buffer~ | =SPC m S= | Attaches a browser to the current buffer |
|
13
modules/lang/perl/README.org
Normal file
13
modules/lang/perl/README.org
Normal file
|
@ -0,0 +1,13 @@
|
|||
#+TITLE: :lang perl
|
||||
|
||||
This module adds support for Perl 6, and flycheck support for all versions of Perl.
|
||||
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
|
||||
* Install
|
||||
This module depends on perl itself. Perl <5 typically comes bundled with most OSes and Linux distros.
|
||||
|
||||
You'll have to install
|
||||
|
||||
There are no other dependencies.
|
|
@ -1,4 +1,4 @@
|
|||
* :lang php
|
||||
#+TITLE: :lang php
|
||||
|
||||
This module adds support for PHP 5.3+ (including PHP7).
|
||||
|
||||
|
@ -12,14 +12,18 @@ This module adds support for PHP 5.3+ (including PHP7).
|
|||
+ [[https://github.com/hlissner/emacs-snippets/tree/master/php-mode][Snippets]]
|
||||
|
||||
#+begin_quote
|
||||
PHP was the first programming language I got paid to code in, back in the Cretaceous period (2003). I'm so, so sorry. All those programmers who inherited my earliest PHP work. I know you're out there, writhing in your straitjackets.
|
||||
|
||||
I suppose it's hip for programmers to projectile vomit to any mention of PHP, but they have good reason to. Not because it's /necessarily/ a bad language, and not /just/ because of a couple inconsistently ordered parameters, but because it's too easy to make junk with. You've heard the war stories.
|
||||
PHP was the first programming language I got paid to code in, back in the Cretaceous period (2003). My sincerest apologies go out to all the programmers who inherited my earliest PHP work. I know you're out there, writhing in your straitjackets.
|
||||
|
||||
Save a programmer today. Stop a friend from choosing PHP as their first language.
|
||||
#+end_quote
|
||||
|
||||
** Install
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#php][PHP]]
|
||||
- [[#dependencies][Dependencies]]
|
||||
|
||||
* Install
|
||||
** PHP
|
||||
To get started with PHP, you'll need ~php~ (5.3+) and ~composer~:
|
||||
|
||||
*** MacOS
|
||||
|
@ -37,7 +41,7 @@ sudo pacman --needed --noconfirm -S php composer # or php53, php54, php55
|
|||
#+END_SRC
|
||||
|
||||
** Dependencies
|
||||
The features in this module optionally depends on the following php packages:
|
||||
The features in this module optionally depend on the following php packages:
|
||||
|
||||
+ ~boris~ (REPL)
|
||||
+ ~phpctags~ (better code completion)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
* :lang rest
|
||||
#+TITLE: :lang rest
|
||||
|
||||
This module adds [[https://en.wikipedia.org/wiki/Representational_state_transfer][REST]] support.
|
||||
|
||||
|
@ -10,10 +10,14 @@ This module adds [[https://en.wikipedia.org/wiki/Representational_state_transfer
|
|||
~restclient-mode~ is tremendously useful for testing REST APIs. My workflow is to open an ~org-mode~ buffer, create a restclient source block and hack away. ~restclient-mode~ and ~company-restclient~ power this arcane wizardry.
|
||||
#+end_quote
|
||||
|
||||
** Install
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#example][Example]]
|
||||
|
||||
* Install
|
||||
No additional setup required.
|
||||
|
||||
** Example
|
||||
* Example
|
||||
#+BEGIN_SRC restclient
|
||||
GET https://jsonplaceholder.typicode.com/posts/1
|
||||
#+END_SRC
|
||||
|
|
22
modules/lang/sh/README.org
Normal file
22
modules/lang/sh/README.org
Normal file
|
@ -0,0 +1,22 @@
|
|||
#+TITLE: :lang sh
|
||||
|
||||
This module adds support for shell scripting languages.
|
||||
|
||||
+ Code completion (company-shell)
|
||||
+ Syntax Checking (flycheck)
|
||||
+ Added command substitution and variable interpolation fontification
|
||||
+ REPL support
|
||||
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#appendix][Appendix]]
|
||||
- [[#commands][Commands]]
|
||||
|
||||
* Install
|
||||
This module has no dependencies.
|
||||
|
||||
* Appendix
|
||||
** Commands
|
||||
| command | key / ex command | description |
|
||||
|------------+------------------+-------------------------------------------------------|
|
||||
| ~+sh/repl~ | =:repl= | Open a terminal (or send the current selection to it) |
|
|
@ -1,61 +1,8 @@
|
|||
* :private
|
||||
Modules here represent all your personal customizations. I suggest you keep them contained here to minimize friction when updating from upstream (if that matters to you).
|
||||
#+TITLE: :private modules
|
||||
|
||||
I include my private module as a reference. I recommend you don't delete/rename it as that could cause merge conflicts.
|
||||
Use this directory to store your private configuration modules.
|
||||
|
||||
** Loading your private module
|
||||
~:private {user-login-name}~ is loaded automatically after all other modules.
|
||||
Mine is included as a reference. I recommend you neither delete nor rename it, to avoid merge conflicts upstream.
|
||||
|
||||
Keeping it in your init.el is unnecessary, but harmless.
|
||||
|
||||
~private/{user-login-name}/init.el~ is a special file, unique to the private module named after your username in ~user-login-name~. It is loaded immediately after DOOM core is, but before any module is. This gives you an opportunity to overwrite variables and settings earlier. I will refer to this as your "private init.el".
|
||||
|
||||
** Reconfiguring packages
|
||||
If your configuration needs are simple, ~add-hook!~ and ~after!~ will be sufficient to reconfigure packages:
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
;; private/hlissner/config.el
|
||||
(after! evil
|
||||
(setq evil-magic nil))
|
||||
|
||||
;; Takes a major-mode or a quoted hook function
|
||||
(add-hook! python-mode
|
||||
(setq python-shell-interpreter "bpython"))
|
||||
#+END_SRC
|
||||
|
||||
Look into ~def-package-hook!~ if you need more customizability. It lets you disable, add to or overwrite DOOM's ~def-package!~ blocks. These are powered by ~use-package~'s inject-hooks under the hood.
|
||||
|
||||
*They must be used from your private init.el to work.*
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
;; private/hlissner/init.el
|
||||
|
||||
;; To disable a package
|
||||
(def-package-hook! evil-goggles :disable)
|
||||
|
||||
;; If a :pre-init / :pre-config hook returns nil, it overwrites that
|
||||
;; package's original :init / :config block. Exploit this to overwrite
|
||||
;; DOOM's config. Otherwise, make sure they always return non-nil!
|
||||
(def-package-hook! doom-themes
|
||||
:post-config
|
||||
(setq doom-neotree-file-icons t)
|
||||
nil)
|
||||
|
||||
;; Otherwise, you append to a packages config
|
||||
(def-package-hook! evil
|
||||
:post-init
|
||||
(setq evil-magic nil)
|
||||
t)
|
||||
#+END_SRC
|
||||
|
||||
** Installing your own packages
|
||||
Your private module is otherwise like any other module. It may possess a packages.el file, which -- with the advantage of being loaded last -- may be used not only to install your own packages, but overwrite past ~package!~ declarations.
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
;; prevent a certain package from being installed; pair this with something
|
||||
;; like (def-package-hook! evil-goggles :disable) in your private init.el
|
||||
(package! evil-goggles :ignore t)
|
||||
|
||||
;; Tell doom to get evil from somewhere else
|
||||
(package! evil :recipe (:fetcher github :repo "hlissner/my-evil-fork"))
|
||||
#+END_SRC
|
||||
-----
|
||||
You'll find [[/wiki/Customization][more information about customizing Doom]] on the [[/wiki][wiki]].
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
* :evil neotree
|
||||
#+TITLE: :evil neotree
|
||||
|
||||
This module brings a side panel for browsing project files, inspired by vim's NERDTree.
|
||||
|
||||
|
|
17
modules/ui/doom-dashboard/README.org
Normal file
17
modules/ui/doom-dashboard/README.org
Normal file
|
@ -0,0 +1,17 @@
|
|||
#+TITLE: :ui doom-dashboard
|
||||
|
||||
This module gives Doom Emacs a dashboard buffer.
|
||||
|
||||
It is loosely inspired by Atom's dashboard.
|
||||
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#keybindings][Keybindings]]
|
||||
- [[#customization][Customization]]
|
||||
|
||||
* Install
|
||||
This module only requires that ~all-the-icons~'s icon fonts are installed. Use ~M-x all-the-icons-install-fonts~ to do so.
|
||||
|
||||
* Keybindings
|
||||
|
||||
* Customization
|
|
@ -1,4 +1,4 @@
|
|||
* :ui doom-modeline
|
||||
#+TITLE: :ui doom-modeline
|
||||
|
||||
This module customizes the Emacs mode-line.
|
||||
|
||||
|
@ -17,12 +17,18 @@ The DOOM modeline was designed for minimalism, and offers:
|
|||
[[/../screenshots/ml-version.png]]
|
||||
[[/../screenshots/ml-errors.png]]
|
||||
|
||||
** Install
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#extracting-my-modeline][Extracting my modeline]]
|
||||
- [[#troubleshooting][Troubleshooting]]
|
||||
- [[#where-are-my-minor-modes][Where are my minor modes?]]
|
||||
|
||||
* Install
|
||||
This module requires the fonts included with ~all-the-icons~ to be installed.
|
||||
|
||||
Run ~M-x all-the-icons-install-fonts~ to do so.
|
||||
|
||||
** Extracting my modeline
|
||||
* Extracting my modeline
|
||||
Some might want my modeline without the DOOM config altogether. I've tried to make this easier for you, but there are a few things you'll need to do:
|
||||
|
||||
+ Ensure [[https://github.com/bbatsov/projectile][projectile]] and [[https://github.com/domtronn/all-the-icons.el][all-the-icons]] are installed.
|
||||
|
@ -30,7 +36,6 @@ Some might want my modeline without the DOOM config altogether. I've tried to ma
|
|||
+ Ensure the fonts included with ~all-the-icons~ are installed (~M-x all-the-icons-install-fonts~).
|
||||
+ Replace ~def-package!~ calls with ~use-package~.
|
||||
+ Replace ~doom-project-root~ calls with ~projectile-project-root~.
|
||||
+ Change the one ~def-memoized!~ function to ~defun~.
|
||||
+ The ~+doom-modeline--make-xpm~ function is memoized with the ~def-memoized!~ macro. Change ~def-memoized!~ to ~defun~.
|
||||
+ Copy the ~add-hook!~ macro definition from [[/master/core/core-lib.el][core/core-lib.el]].
|
||||
+ Copy the following macros and functions from [[/master/core/core-ui.el][core/core-ui.el]]:
|
||||
|
@ -40,8 +45,8 @@ Some might want my modeline without the DOOM config altogether. I've tried to ma
|
|||
+ ~doom-modeline~
|
||||
+ ~doom-set-modeline~
|
||||
|
||||
That /should/ be everything. As I have never used this out of my config I can't guarantee immediate success, but I'd be happy to help you out. File an issue.
|
||||
That /should/ be everything. As I have never used this out of my config I can't guarantee immediate success, but I'd be happy to help you out if you file an issue.
|
||||
|
||||
** Troubleshooting
|
||||
*** Where are my minor-modes?
|
||||
I didn't need it, so I removed it. I wrote ~doom/what-minor-mode~ in the rare case I needed to investigate the currently active minor modes however.
|
||||
* Troubleshooting
|
||||
** Where are my minor modes?
|
||||
I didn't need it, so I removed it. Run ~M-x doom/what-minor-mode~ to investigate what minor modes are currently active.
|
||||
|
|
7
modules/ui/doom-quit/README.org
Normal file
7
modules/ui/doom-quit/README.org
Normal file
|
@ -0,0 +1,7 @@
|
|||
#+TITLE: :ui doom-quit
|
||||
|
||||
Remember these?
|
||||
|
||||
[[http://cf.geekdo-images.com/images/pic969210_md.jpg]]
|
||||
|
||||
Yeah.
|
|
@ -1,32 +1,60 @@
|
|||
* :ui doom
|
||||
#+TITLE: :ui doom
|
||||
|
||||
This module modifies Emacs' user interface.
|
||||
|
||||
DOOM's look is loosely inspired by Atom's One Dark theme, and is largely contained in the [[https://github.com/hlissner/emacs-doom-theme/][doom-themes]] plugin.
|
||||
Doom's look is loosely inspired by Atom's One Dark theme, and is largely contained in the] plugin.
|
||||
|
||||
By default, this module uses:
|
||||
+ A colorscheme inspired by Atom's One Dark theme (now available in a separate plugin: [[https://github.com/hlissner/emacs-doom-theme/][doom-themes]])
|
||||
+ Uses the [[https://github.com/mozilla/Fira][Fira Mono and Fira Sans]] fonts, and [[https://dejavu-fonts.github.io/][DejaVu Sans Mono]] for unicode symbols.
|
||||
+ A custom folded-region indicator for ~hideshow~
|
||||
+ "Thin bar" fringe bitmaps for ~git-gutter-fringe~
|
||||
+ File-visiting buffers are slightly brighter (powered by solaire-mode)
|
||||
|
||||
+ [[https://github.com/mozilla/Fira][Fira Mono and Fira Sans]] (fonts)
|
||||
+ [[https://dejavu-fonts.github.io/][DejaVu Sans Mono]] (font, for displaying unicode characters)
|
||||
+ ~hideshow~, modified to use a nicer folded-region indicator.
|
||||
+ Custom fringe bitmaps for ~git-gutter-fringe~ (thin bars)
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#macos][MacOS]]
|
||||
- [[#arch-linux][Arch Linux]]
|
||||
- [[#configuration][Configuration]]
|
||||
- [[#changing-fonts][Changing fonts]]
|
||||
- [[#troubleshooting][Troubleshooting]]
|
||||
- [[#strange-font-symbols][Strange font symbols]]
|
||||
|
||||
** Install
|
||||
[[https://github.com/mozilla/Fira][Fira Mono]] is this module's only dependency (if you want to use it).
|
||||
* Install
|
||||
This module optionally depends on:
|
||||
|
||||
*** MacOS
|
||||
+ The [[https://github.com/mozilla/Fira][Fira Mono]] family of fonts
|
||||
+ [[https://dejavu-fonts.github.io/][DejaVu Sans Mono]]
|
||||
|
||||
You don't have to install these if you use a different font.
|
||||
|
||||
** MacOS
|
||||
#+BEGIN_SRC sh :tangle (if (doom-system-os 'macos) "yes")
|
||||
brew tap caskroom/fonts
|
||||
brew cask install font-fira-{sans,mono} font-dejavu-sans
|
||||
#+END_SRC
|
||||
|
||||
*** Arch Linux
|
||||
** Arch Linux
|
||||
#+BEGIN_SRC sh :dir /sudo:: :tangle (if (doom-system-os 'arch) "yes")
|
||||
sudo pacman --noconfirm --needed -S ttf-fira-{sans,mono} ttf-dejavu
|
||||
#+END_SRC
|
||||
|
||||
** Troubleshooting
|
||||
*** Strange font symbols
|
||||
If you're getting strange unicode symbols, that is likely ~all-the-icons~ doing (caused by other UI modules, specifically [[../doom-modeline][doom-modeline]] and [[../doom-dashboard][doom-dashboard]]).
|
||||
* Configuration
|
||||
** Changing fonts
|
||||
There are four font settings you can change:
|
||||
|
||||
You must install the fonts included with ~all-the-icons~ with: ~M-x all-the-icons-install-fonts~.
|
||||
+ ~:font~ :: the default font.
|
||||
+ ~:big-font~ :: the font to use when ~doom-big-font-mode~ is enabled.
|
||||
+ ~:variable-font~ :: the font to use when ~variable-pitch-mode~ is active (or where the ~variable-pitch~ face is used).
|
||||
+ ~:unicode-font~ :: the font used to display unicode symbols. This is ignored if the =:ui unicode= module is enabled.
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
;; These are the defaults of this module
|
||||
(set! :font "Fira Mono" :size 12)
|
||||
(set! :big-font "Fira Mono" :size 18)
|
||||
(set! :variable-font "Fira Sans" :size 12)
|
||||
(set! :unicode-font "DejaVu Sans Mono" :size 12)
|
||||
#+END_SRC
|
||||
|
||||
* Troubleshooting
|
||||
** Strange font symbols
|
||||
If you're seeing strange unicode symbols, this is likely because you don't have ~all-the-icons~'s font icon installed. You can install them with ~M-x all-the-icons-install-fonts~.
|
||||
|
|
|
@ -1,12 +1,16 @@
|
|||
* :ui evil-goggles
|
||||
#+TITLE: :ui evil-goggles
|
||||
|
||||
This module uses ~evil goggles~ to displays visual hints when editing with evil.
|
||||
|
||||
** Install
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#configure][Configure]]
|
||||
|
||||
* Install
|
||||
This module requires:
|
||||
|
||||
+ ~evil~ (inherently tied to evil mode)
|
||||
|
||||
** Configure
|
||||
* Configure
|
||||
By default, ~evil-goggles~ will be enabled by default and requires no additional configuration.
|
||||
|
||||
|
|
13
modules/ui/hl-todo/README.org
Normal file
13
modules/ui/hl-todo/README.org
Normal file
|
@ -0,0 +1,13 @@
|
|||
#+TITLE: :ui hl-todo
|
||||
|
||||
This module adds syntax highlighting for TODO/FIXME/NOTE tags in programming major-modes.
|
||||
|
||||
What keywords are highlighted (and their color) can be customized through ~hl-todo-keyword-faces~.
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
;; the default
|
||||
(setq hl-todo-keyword-faces
|
||||
`(("TODO" . ,(face-foreground 'warning))
|
||||
("FIXME" . ,(face-foreground 'error))
|
||||
("NOTE" . ,(face-foreground 'success))))
|
||||
#+END_SRC
|
|
@ -1,4 +1,4 @@
|
|||
* :ui nav-flash
|
||||
#+TITLE: :ui nav-flash
|
||||
|
||||
This module uses ~nav-flash~ to flash the line around the cursor after any motion command that might reasonably send the cursor somewhere the eyes can't follow.
|
||||
|
||||
|
@ -6,10 +6,14 @@ This module uses ~nav-flash~ to flash the line around the cursor after any motio
|
|||
Tremendously helpful on a 30" 2560x1600 display.
|
||||
#+end_quote
|
||||
|
||||
** Install
|
||||
* Table of Contents :TOC:
|
||||
- [[#install][Install]]
|
||||
- [[#configure][Configure]]
|
||||
|
||||
* Install
|
||||
This module has no other dependencies.
|
||||
|
||||
** Configure
|
||||
* Configure
|
||||
By default, ~nav-flash~ will be triggered whenever ~recenter~ is called. =:feature jump= attaches ~recenter~ to various hooks:
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
|
|
5
modules/ui/tabbar/README.org
Normal file
5
modules/ui/tabbar/README.org
Normal file
|
@ -0,0 +1,5 @@
|
|||
#+TITLE: :ui tabbar
|
||||
|
||||
This module adds a tabbar to the Emacs UI.
|
||||
|
||||
I don't recommend you use this module. It is here for reference, is unstable and doesn't integrate with Doom's UI well. I find ivy, helm or even ~buffer-menu~ to be better suited for buffer management.
|
10
modules/ui/unicode/README.org
Normal file
10
modules/ui/unicode/README.org
Normal file
|
@ -0,0 +1,10 @@
|
|||
#+TITLE: :ui unicode
|
||||
|
||||
This unicode extends Doom's ability to display non-English unicode.
|
||||
|
||||
This is for non-English Emacs users, for whom Doom's built-in unicode support in insufficient.
|
||||
|
||||
When this module is enabled...
|
||||
|
||||
+ The first time you run Emacs a unicode cache will be generated -- this will take a while!
|
||||
+ Doom will ignore the ~doom-unicode-font~ variable and the ~:unicode-font~ setting.
|
Loading…
Add table
Add a link
Reference in a new issue