Move doom emacs into home manager

This commit is contained in:
Nathan McCarty 2022-05-09 21:16:01 -04:00
parent 0bb0265a89
commit 459ecd3312
Signed by: thatonelutenist
GPG Key ID: D70DA3DD4D1E9F96
5 changed files with 608 additions and 153 deletions

View File

@ -1,14 +1,7 @@
{ config, pkgs, unstable, doomEmacs, ... }:
let
emacsPackage = (unstable.emacsPackagesFor unstable.emacsPgtkNativeComp).emacsWithPackages (epkgs: with epkgs; [
vterm
pdf-tools
]);
in
{
# Install emacs
environment.systemPackages = [
emacsPackage
# For markdown rendering
pkgs.pythonPackages.grip
# For graph generation
@ -18,20 +11,17 @@ in
# Utilize home-manager
home-manager.users.nathan = {
# Nixify doomEmacs
# TODO:Reenable, currently off because of splash bug
imports = [ doomEmacs ];
programs.doom-emacs = {
enable = false;
enable = true;
doomPrivateDir = ../doom.d;
emacsPackage = emacsPackage;
emacsPackage = unstable.emacsPgtkNativeComp;
};
# Startup service
services.emacs = {
enable = pkgs.stdenv.isLinux;
client.enable = true;
defaultEditor = true;
# TODO remove when we enable doom-emacs again
package = emacsPackage;
};
};
}

View File

@ -21,8 +21,8 @@
;; See 'C-h v doom-font' for documentation and more examples of what they
;; accept. For example:
;;
(setq doom-font (font-spec :family "FiraCode Nerd Font" :size 12 :weight 'semi-light))
;; doom-variable-pitch-font (font-spec :family "Fira Sans" :size 13))
(setq doom-font (font-spec :family "FiraCode Nerd Font" :size 11 :weight 'semi-light)
doom-variable-pitch-font (font-spec :family "Fira Sans" :size 15))
;;
;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
@ -32,7 +32,15 @@
;; There are two ways to load a theme. Both assume the theme is installed and
;; available. You can either set `doom-theme' or manually load a theme with the
;; `load-theme' function. This is the default:
(setq doom-theme 'doom-one)
;; (setq doom-theme 'doom-solarized-dark)
(use-package! solarized-theme
:demand t
:config
(setq solarized-distinct-fringe-background t
solarized-distinct-doc-face t
solarized-scale-markdown-headlines t
solarized-scale-org-headlines t)
(load-theme 'solarized-selenized-dark t))
;; This determines the style of line numbers in effect. If set to `nil', line
;; numbers are disabled. For relative line numbers, set this to `relative'.
@ -40,7 +48,7 @@
;; If you use `org' and don't want your org files in the default location below,
;; change `org-directory'. It must be set before org loads!
(setq org-directory "~/org/")
(setq org-directory "~/Org/")
;; Whenever you reconfigure a package, make sure to wrap your config in an
@ -74,3 +82,145 @@
;;
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
;; they are implemented.
(after! centaur-tabs
(setq centaur-tabs-set-icons t
centaur-tabs-set-bar 'underflow
centaur-tabs-style "alternate")
(centaur-tabs-headline-match)
(centaur-tabs-group-by-projectile-project))
(use-package! mixed-pitch
:hook
(org-mode . mixed-pitch-mode)
(markdown-mode . mixed-pitch-mode)
:config
(setq mixed-pitch-set-height t))
(after! avy
(define-key!
"C-:" 'avy-goto-char
"C-'" 'avy-goto-char-2
"M-g f" 'avy-goto-line
"M-g w" 'avy-goto-word-1
"M-g e" 'avy-goto-word-0)
(cheatsheet-add-group 'Avy
'(:key "C-:" :description "Goto Char")
'(:key "C-'" :description "Goto Char (2)")
'(:key "M-g f" :description "Goto line")
'(:key "M-g w" :description "Goto word")
'(:key "M-g e" :description "Goto word (0)")))
(after! swiper
(define-key! "C-s" 'swiper))
(use-package! crux
:bind (("C-k" . crux-smart-kill-line)
("C-c ^" . crux-top-join-line)))
(global-unset-key (kbd "C-q"))
(use-package! string-inflection
:bind (("C-q" . string-inflection-all-cycle)))
(cheatsheet-add-group 'string-inflection
'(:key "C-q" :description "Rotate case"))
(use-package! smart-hungry-delete
:bind (("M-<backspace>" . smart-hungry-delete-backward-char)))
(use-package! deadgrep
:bind ("C-c s r" . deadgrep))
(setq org-hide-emphasis-markers t
org-pretty-entities t)
(font-lock-add-keywords 'org-mode
'(("^ *\\([-]\\) "
0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "")))
("^ *\\([+]\\) "
0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "")))))
(use-package! org-roam
:custom
(org-roam-directory (concat org-directory "Roam/"))
(org-roam-complete-everywhere t)
:bind (("C-c r l" . org-roam-buffer-toggle)
("C-c r f" . org-roam-node-find)
("C-c r g" . org-roam-graph)
("C-c r i" . org-roam-node-insert)
("C-c r c" . org-roam-capture)
("C-c r T" . org-roam-dailies-capture-today)
("C-c r t" . org-roam-dailies-goto-today)
:map org-mode-map
("C-M-i" . completion-at-point))
:config
(setq org-roam-node-display-template (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag)))
(org-roam-db-autosync-mode)
(setq org-roam-dailies-capture-templates
'(("d" "default" entry "* %<%I:%M %p>: %?"
:if-new (file+head "%<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n")))))
(use-package! magit-todos
:hook (magit-mode . magit-todos-mode))
(use-package! magit-delta
:hook (magit-mode . magit-delta-mode))
(magit-wip-mode)
(use-package! multi-vterm
:bind (("C-c o M" . multi-vterm)
("C-c o m" . multi-vterm-project)))
(use-package! separedit
:bind
(:map prog-mode-map
("C-c '" . separedit))
:config
(setq separedit-default-mode 'gfm-mode
separedit-continue-fill-column t))
(after! lsp-ui
(setq lsp-ui-sideline-show-diagnostics t
lsp-ui-sideline-show-hover t
lsp-ui-sideline-show-code-actions t))
(after! lsp-ui
(setq lsp-ui-peek-enable t
lsp-ui-peek-show-directory t))
(after! lsp-ui
(setq lsp-ui-doc-enable t
lsp-ui-doc-position 'top
lsp-ui-doc-show-with-cursor t))
(after! lsp-mode
(setq lsp-auto-configure t
lsp-lens-enable t
lsp-rust-analyzer-cargo-watch-command "clippy"
lsp-rust-analyzer-cargo-watch-args ["--all-features"]
lsp-rust-analyzer-experimental-proc-attr-macros t
lsp-rust-analyzer-proc-macro-enable t
lsp-rust-analyzer-use-rustc-wrapper-for-build-scripts t
lsp-rust-analyzer-import-enforce-granularity t))
(use-package! markdown-mode
:mode ("README\\.md" . gfm-mode)
:hook (markdown-mode . variable-pitch-mode)
(markdown-mode . auto-fill-mode)
:config
(setq markdown-header-scaling t
markdown-hide-markup t
markdown-fontify-code-blocks-natively t))
(use-package! grip-mode
:bind (:map markdown-mode-command-map
("g" . grip-mode)))
(use-package! elfeed
:hook (elfeed-search-mode . elfeed-update)
:bind ("C-x w" . elfeed)
:config
(setq elfeed-search-filter "@2-weeks-ago +unread"
elfeed-db-directory (concat org-directory "elfeed/db/")
elfeed-enclosure-default-dir (concat org-directory "elfeed/enclosures/"))
(make-directory elfeed-db-directory t))

387
doom.d/config.org Normal file
View File

@ -0,0 +1,387 @@
#+title: Nathan's Doom Emacs Configuration
#+author: Nathan McCarty
#+PROPERTY: header-args:emacs-lisp :tangle yes
My doom emacs configuration
* Basic Doom stuff
The provided default ~config.el~
#+begin_src emacs-lisp
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
;; Place your private configuration here! Remember, you do not need to run 'doom
;; sync' after modifying this file!
;; Some functionality uses this to identify you, e.g. GPG configuration, email
;; clients, file templates and snippets. It is optional.
(setq user-full-name "Nathan McCarty"
user-mail-address "nathan@mccarty.io")
;; Doom exposes five (optional) variables for controlling fonts in Doom:
;;
;; - `doom-font' -- the primary font to use
;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable)
;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
;; presentations or streaming.
;; - `doom-unicode-font' -- for unicode glyphs
;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
;;
;; See 'C-h v doom-font' for documentation and more examples of what they
;; accept. For example:
;;
(setq doom-font (font-spec :family "FiraCode Nerd Font" :size 11 :weight 'semi-light)
doom-variable-pitch-font (font-spec :family "Fira Sans" :size 15))
;;
;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
;; refresh your font settings. If Emacs still can't find your font, it likely
;; wasn't installed correctly. Font issues are rarely Doom issues!
;; There are two ways to load a theme. Both assume the theme is installed and
;; available. You can either set `doom-theme' or manually load a theme with the
;; `load-theme' function. This is the default:
;; (setq doom-theme 'doom-solarized-dark)
(use-package! solarized-theme
:demand t
:config
(setq solarized-distinct-fringe-background t
solarized-distinct-doc-face t
solarized-scale-markdown-headlines t
solarized-scale-org-headlines t)
(load-theme 'solarized-selenized-dark t))
;; This determines the style of line numbers in effect. If set to `nil', line
;; numbers are disabled. For relative line numbers, set this to `relative'.
(setq display-line-numbers-type t)
;; If you use `org' and don't want your org files in the default location below,
;; change `org-directory'. It must be set before org loads!
(setq org-directory "~/Org/")
;; Whenever you reconfigure a package, make sure to wrap your config in an
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
;;
;; (after! PACKAGE
;; (setq x y))
;;
;; The exceptions to this rule:
;;
;; - Setting file/directory variables (like `org-directory')
;; - Setting variables which explicitly tell you to set them before their
;; package is loaded (see 'C-h v VARIABLE' to look up their documentation).
;; - Setting doom variables (which start with 'doom-' or '+').
;;
;; Here are some additional functions/macros that will help you configure Doom.
;;
;; - `load!' for loading external *.el files relative to this one
;; - `use-package!' for configuring packages
;; - `after!' for running code after a package has loaded
;; - `add-load-path!' for adding directories to the `load-path', relative to
;; this file. Emacs searches the `load-path' when you load packages with
;; `require' or `use-package'.
;; - `map!' for binding new keys
;;
;; To get information about any of these functions/macros, move the cursor over
;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
;; This will open documentation for it, including demos of how they are used.
;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
;; etc).
;;
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
;; they are implemented.
#+end_src
* Appearance and UI
** Centaur tabs
#+begin_src emacs-lisp
(after! centaur-tabs
(setq centaur-tabs-set-icons t
centaur-tabs-set-bar 'underflow
centaur-tabs-style "alternate")
(centaur-tabs-headline-match)
(centaur-tabs-group-by-projectile-project))
#+end_src
** Mixed Pitch Mode
Use mixed pitch mode in prose writing modes, to make the writing experience a bit more pleasant.
This tweak applies to:
- ~org-mode~
- ~markdown-mode~
#+begin_src emacs-lisp
(use-package! mixed-pitch
:hook
(org-mode . mixed-pitch-mode)
(markdown-mode . mixed-pitch-mode)
:config
(setq mixed-pitch-set-height t))
#+end_src
Setting ~mixed-pitch-set-height~ is required to get ~mixed-pitch-mode~ to render fonts with the correct size in doom emacs, apparently.
* Basic Editing
** Navigation
*** Avy
More modern ace-jump-mode
Set up our key bindings
#+begin_src emacs-lisp
(after! avy
(define-key!
"C-:" 'avy-goto-char
"C-'" 'avy-goto-char-2
"M-g f" 'avy-goto-line
"M-g w" 'avy-goto-word-1
"M-g e" 'avy-goto-word-0)
(cheatsheet-add-group 'Avy
'(:key "C-:" :description "Goto Char")
'(:key "C-'" :description "Goto Char (2)")
'(:key "M-g f" :description "Goto line")
'(:key "M-g w" :description "Goto word")
'(:key "M-g e" :description "Goto word (0)")))
#+end_src
*** Swiper
Better isearch
Override old isearch
#+begin_src emacs-lisp
(after! swiper
(define-key! "C-s" 'swiper))
#+end_src
** Crux
Smarter replacements for emacs built ins, with the following in use:
- ~crux-smart-kill-line~ - Smart ~C-k~ replacement
- ~crux-top-join-line~ - ~C-c ^~ Join two lines
#+begin_src emacs-lisp
(use-package! crux
:bind (("C-k" . crux-smart-kill-line)
("C-c ^" . crux-top-join-line)))
#+end_src
** string-inflection
Automatically cycle case of names
#+begin_src emacs-lisp
(global-unset-key (kbd "C-q"))
(use-package! string-inflection
:bind (("C-q" . string-inflection-all-cycle)))
(cheatsheet-add-group 'string-inflection
'(:key "C-q" :description "Rotate case"))
#+end_src
** Smart Hungry Delete
Gobble up whitespace in a smarter way
#+begin_src emacs-lisp
(use-package! smart-hungry-delete
:bind (("M-<backspace>" . smart-hungry-delete-backward-char)))
#+end_src
** Search
*** Deadgrep
Ripgrep, but from within emacs
#+begin_src emacs-lisp
(use-package! deadgrep
:bind ("C-c s r" . deadgrep))
#+end_src
* Org Mode
Improvements to the best mode in emacs
Setup some basic cosmetic improvements
- Disable showing of emphasis markers
- Show entities as utf-8 ~test~
#+begin_src emacs-lisp
(setq org-hide-emphasis-markers t
org-pretty-entities t)
#+end_src
Setup font lock for normal (non-heading) list items, to make things a bit more pleasnt to look at
#+begin_src emacs-lisp
(font-lock-add-keywords 'org-mode
'(("^ *\\([-]\\) "
0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "")))
("^ *\\([+]\\) "
0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "")))))
#+end_src
** org-roam
A second brain in emacs
Here we:
- Set the roam directory to be a sub-directory of the org directory, which I have in syncthing
- Use a more informative display template, as we use ivy
- Turn on db autosync
- Setup dalies to add the time of the capture to the note
#+begin_src emacs-lisp
(use-package! org-roam
:custom
(org-roam-directory (concat org-directory "Roam/"))
(org-roam-complete-everywhere t)
:bind (("C-c r l" . org-roam-buffer-toggle)
("C-c r f" . org-roam-node-find)
("C-c r g" . org-roam-graph)
("C-c r i" . org-roam-node-insert)
("C-c r c" . org-roam-capture)
("C-c r T" . org-roam-dailies-capture-today)
("C-c r t" . org-roam-dailies-goto-today)
:map org-mode-map
("C-M-i" . completion-at-point))
:config
(setq org-roam-node-display-template (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag)))
(org-roam-db-autosync-mode)
(setq org-roam-dailies-capture-templates
'(("d" "default" entry "* %<%I:%M %p>: %?"
:if-new (file+head "%<%Y-%m-%d>.org" "#+title: %<%Y-%m-%d>\n")))))
#+end_src
* General Modes
** Magit
Further configuration for magit
*** magit-todos
Count the number of todos in the project in the ~magit-status~ buffer
#+begin_src emacs-lisp
(use-package! magit-todos
:hook (magit-mode . magit-todos-mode))
#+end_src
*** magit-delta
Use delta for git diff display
#+begin_src emacs-lisp
(use-package! magit-delta
:hook (magit-mode . magit-delta-mode))
#+end_src
*** magit-wip-mode
Stash autosaves inside of git
#+begin_src emacs-lisp
(magit-wip-mode)
#+end_src
** System integration
Various tools for interacting with the system from within emacs
*** Terminal
Doom already provides pretty nice vterm support, but lets take us a step further, using ~multi-vterm~ to provide ergonomic support for multiple terminals.
Vterm really doesn't like being installed through emacs on nix, so proper support for it in my setup requires installing it through nix like so:
#+begin_src nix :tangle no
let emacsPackage = (emacsPackagesFor emacs).emacsWithPackages (epgks: with epkgs; [
vterm
]);
in
{
environment.systemPackages = [
emacsPackage
];
}
#+end_src
**** [[https://github.com/suonlight/multi-vterm][multi-vterm]]
Add ergonomic support for multiple vterm terminals
#+begin_src emacs-lisp
(use-package! multi-vterm
:bind (("C-c o M" . multi-vterm)
("C-c o m" . multi-vterm-project)))
#+end_src
* Programming
** General Editing
*** Sepraedit
Edit indirect for comments
Set the default mode to github flavored markdown, turn on smart use of fill column, and bind to the normal edit-indirect keybinding.
#+begin_src emacs-lisp
(use-package! separedit
:bind
(:map prog-mode-map
("C-c '" . separedit))
:config
(setq separedit-default-mode 'gfm-mode
separedit-continue-fill-column t))
#+end_src
** LSP Mode
Custom configuration for lsp-mode
*** LSP UI
Turn on the UI features we want
**** Sideline
Show as much as possible in the sideline
#+begin_src emacs-lisp
(after! lsp-ui
(setq lsp-ui-sideline-show-diagnostics t
lsp-ui-sideline-show-hover t
lsp-ui-sideline-show-code-actions t))
#+end_src
**** Peeking
Turn on peeking, and show us the directory as well
#+begin_src emacs-lisp
(after! lsp-ui
(setq lsp-ui-peek-enable t
lsp-ui-peek-show-directory t))
#+end_src
**** Documentation
Show the documentation in a popup frame in the top right corner
#+begin_src emacs-lisp
(after! lsp-ui
(setq lsp-ui-doc-enable t
lsp-ui-doc-position 'top
lsp-ui-doc-show-with-cursor t))
#+end_src
** Rust
Configuration specific for rust
*** LSP Tweaks
Most of these are defaults, but I like having them explicit for my sanity
#+begin_src emacs-lisp
(after! lsp-mode
(setq lsp-auto-configure t
lsp-lens-enable t
lsp-rust-analyzer-cargo-watch-command "clippy"
lsp-rust-analyzer-cargo-watch-args ["--all-features"]
lsp-rust-analyzer-experimental-proc-attr-macros t
lsp-rust-analyzer-proc-macro-enable t
lsp-rust-analyzer-use-rustc-wrapper-for-build-scripts t
lsp-rust-analyzer-import-enforce-granularity t))
#+end_src
* Composition
Modes for handling plain text and prose
** Markdown
Everybody's favorite markup format
*** Markdown mode
Make the following configuration tweaks to result in a better markdown experience:
- Use a variable pitch font (this is prose after all)
- Turn on header scaling
- Default to gfm mode for readmes
- Turn on auto-fill mode
- Hide mark up
- Fontify code blocks with the language's native mode
The goal here is to create a more pretty and fluid composition environment for prose, closer to what you would get in a word processor, but without the horrors of wysiwyg.
#+begin_src emacs-lisp
(use-package! markdown-mode
:mode ("README\\.md" . gfm-mode)
:hook (markdown-mode . variable-pitch-mode)
(markdown-mode . auto-fill-mode)
:config
(setq markdown-header-scaling t
markdown-hide-markup t
markdown-fontify-code-blocks-natively t))
#+end_src
*** Grip mode
Provide a live, rendered preview when editing markdown readmes using [[https://github.com/joeyespo/grip][grip]].
#+begin_src emacs-lisp
(use-package! grip-mode
:bind (:map markdown-mode-command-map
("g" . grip-mode)))
#+end_src
* Applications
Emacs is good for more than just editing text
** RSS
Use ~elfeed~ for RSS. Doom provides most of the configuration, but we'll make a few minor tweaks:
- Automatically update the feed when opening elfeed
- Set default filter to only show unread posts
- Put the elfeed directory in the org dir (I have it in syncthing)
- Create a global keybinding for elfeed (~C-x w~)
#+begin_src emacs-lisp
(use-package! elfeed
:hook (elfeed-search-mode . elfeed-update)
:bind ("C-x w" . elfeed)
:config
(setq elfeed-search-filter "@2-weeks-ago +unread"
elfeed-db-directory (concat org-directory "elfeed/db/")
elfeed-enclosure-default-dir (concat org-directory "elfeed/enclosures/"))
(make-directory elfeed-db-directory t))
#+end_src

View File

@ -14,165 +14,79 @@
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
;; directory (for easy access to its source code).
(doom! :input
;;chinese
;;japanese
;;layout ; auie,ctsrnm is the superior home row
:completion
company ; the ultimate code completion backend
;;helm ; the *other* search engine for love and life
;;ido ; the other *other* search engine...
;;ivy ; a search engine for love and life
vertico ; the search engine of the future
(doom! :completion
company ; the ultimate code completion backend
(ivy +fuzzy +precient +childframe +icons)
:ui
;;deft ; notational velocity for Emacs
doom ; what makes DOOM look the way it does
doom-dashboard ; a nifty splash screen for Emacs
;;doom-quit ; DOOM quit-message prompts when you quit Emacs
(emoji +unicode) ; 🙂
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
;;hydra
indent-guides ; highlighted indent columns
ligatures ; ligatures and symbols to make your code pretty again
;;minimap ; show a map of the code on the side
modeline ; snazzy, Atom-inspired modeline, plus API
nav-flash ; blink cursor line after big motions
;;neotree ; a project drawer, like NERDTree for vim
ophints ; highlight the region an operation acts on
doom ; what makes DOOM look the way it does
doom-dashboard ; a nifty splash screen for Emacs
(emoji +unicode +github) ; 🙂
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
indent-guides ; highlighted indent columns
;;(ligatures +fira) ; ligatures and symbols to make your code pretty again
modeline ; snazzy, Atom-inspired modeline, plus API
nav-flash ; blink cursor line after big motions
;; ophints ; highlight the region an operation acts on
(popup +defaults) ; tame sudden yet inevitable temporary windows
tabs ; a tab bar for Emacs
treemacs ; a project drawer, like neotree but cooler
unicode ; extended unicode support for various languages
vc-gutter ; vcs diff in the fringe
vi-tilde-fringe ; fringe tildes to mark beyond EOB
window-select ; visually switch windows
workspaces ; tab emulation, persistence & separate workspaces
zen ; distraction-free coding or writing
tabs ; a tab bar for Emacs
(treemacs +lsp) ; a project drawer, like neotree but cooler
unicode ; extended unicode support for various languages
window-select ; visually switch windows
;; workspaces ; tab emulation, persistence & separate workspaces
zen ; distraction-free coding or writing
:editor
;;(evil +everywhere); come to the dark side, we have cookies
file-templates ; auto-snippets for empty files
fold ; (nigh) universal code folding
(format +onsave) ; automated prettiness
god ; run Emacs commands without modifier keys
;;lispy ; vim for lisp, for people who don't like vim
multiple-cursors ; editing in many places at once
;;objed ; text object editing for the innocent
;;parinfer ; turn lisp into python, sort of
;;rotate-text ; cycle region at point between text candidates
snippets ; my elves. They type so I don't have to
word-wrap ; soft wrapping with language-aware indent
file-templates ; auto-snippets for empty files
fold ; (nigh) universal code folding
(format +onsave) ; automated prettiness
;; multiple-cursors ; editing in many places at once
rotate-text ; cycle region at point between text candidates
snippets ; my elves. They type so I don't have to
word-wrap ; soft wrapping with language-aware indent
:emacs
dired ; making dired pretty [functional]
(dired +icons) ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent
ibuffer ; interactive buffer management
(ibuffer +icons) ; interactive buffer management
undo ; persistent, smarter undo for your inevitable mistakes
vc ; version-control and Emacs, sitting in a tree
:term
;;eshell ; the elisp shell that works everywhere
;;shell ; simple shell REPL for Emacs
;;term ; basic terminal emulator for Emacs
vterm ; the best terminal emulation in Emacs
vterm ; the best terminal emulation in Emacs
:checkers
syntax ; tasing you for every semicolon you forget
(spell +flyspell) ; tasing you for misspelling mispelling
;;grammar ; tasing grammar mistake every you make
(syntax +childframe) ; tasing you for every semicolon you forget
(spell +flyspell +hunspell +everywhere) ; tasing you for misspelling mispelling
:tools
;;ansible
biblio ; Writes a PhD for you (citation needed)
;;debugger ; FIXME stepping through code, to help you add bugs
(debugger +lsp) ; FIXME stepping through code, to help you add bugs
direnv
;;docker
;;editorconfig ; let someone else argue about tabs vs spaces
;;ein ; tame Jupyter notebooks with emacs
docker
editorconfig ; let someone else argue about tabs vs spaces
(eval +overlay) ; run code, run (also, repls)
gist ; interacting with github gists
lookup ; navigate your code and its documentation
lsp ; M-x vscode
magit ; a git porcelain for Emacs
;;make ; run make tasks from Emacs
;;pass ; password manager for nerds
pdf ; pdf enhancements
;;prodigy ; FIXME managing external services & code builders
rgb ; creating color strings
;;taskrunner ; taskrunner for all your projects
;;terraform ; infrastructure as code
;;tmux ; an API for interacting with tmux
;;upload ; map local to remote projects via ssh/ftp
lsp ; M-x vscode
(magit +forge) ; a git porcelain for Emacs
pdf ; pdf enhancements
rgb ; creating color strings
:os
(:if IS-MAC macos) ; improve compatibility with macOS
;;tty ; improve the terminal Emacs experience
:lang
;;agda ; types of types of types of types...
;;beancount ; mind the GAAP
;;(cc +lsp) ; C > C++ == 1
;;clojure ; java with a lisp
;;common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c
;;csharp ; unity, .NET, and mono shenanigans
;;data ; config/data formats
;;(dart +flutter) ; paint ui and not much else
;;dhall
;;elixir ; erlang done right
;;elm ; care for a cup of TEA?
emacs-lisp ; drown in parentheses
;;erlang ; an elegant language for a more civilized age
;;ess ; emacs speaks statistics
;;factor
;;faust ; dsp, but you get to keep your soul
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
;;fsharp ; ML stands for Microsoft's Language
;;fstar ; (dependent) types and (monadic) effects and Z3
;;gdscript ; the language you waited for
;;(go +lsp) ; the hipster dialect
;;(graphql +lsp) ; Give queries a REST
;;(haskell +lsp) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python
;;idris ; a language you can depend on
;;json ; At least it ain't XML
;;(java +lsp) ; the poster child for carpal tunnel syndrome
;;javascript ; all(hope(abandon(ye(who(enter(here))))))
;;julia ; a better, faster MATLAB
;;kotlin ; a better, slicker Java(Script)
;;latex ; writing papers in Emacs has never been so fun
;;lean ; for folks with too much to prove
;;ledger ; be audit you can be
;;lua ; one-based indices? one-based indices
markdown ; writing docs for people to ignore
;;nim ; python + lisp at the speed of c
nix ; I hereby declare "nix geht mehr!"
;;ocaml ; an objective camel
org ; organize your plain life in plain text
;;php ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more
;;purescript ; javascript, but functional
;;python ; beautiful is better than ugly
;;qt ; the 'cutest' gui framework ever
;;racket ; a DSL for DSLs
;;raku ; the artist formerly known as perl6
;;rest ; Emacs as a REST client
;;rst ; ReST in peace
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
;;scala ; java, but good
;;(scheme +guile) ; a fully conniving family of lisps
sh ; she sells {ba,z,fi}sh shells on the C xor
;;sml
;;solidity ; do you need a blockchain? No.
;;swift ; who asked for emoji variables?
;;terra ; Earth and Moon in alignment for performance.
;;web ; the tubes
yaml ; JSON, but readable
;;zig ; C, but simpler
data ; config/data formats
emacs-lisp ; drown in parentheses
json ; At least it ain't XML
(latex +fold) ; writing papers in Emacs has never been so fun
markdown ; writing docs for people to ignore
nix ; I hereby declare "nix geht mehr!"
(org +pandoc +present +pretty +roam2 +pomodoro) ; organize your plain life in plain text
raku ; the artist formerly known as perl6
rest ; Emacs as a REST client
(rust +lsp)
(sh +fish) ; she sells {ba,z,fi}sh shells on the C xor
yaml ; JSON, but readable
:email
;;(mu4e +org +gmail)
@ -184,9 +98,11 @@
;;emms
;;everywhere ; *leave* Emacs!? You must be joking
;;irc ; how neckbeards socialize
;;(rss +org) ; emacs as an RSS reader
(rss +org) ; emacs as an RSS reader
;;twitter ; twitter client https://twitter.com/vnought
:config
;;literate
literate
(default +bindings +smartparens))
(add-hook! 'emacs-startup-hook #'doom-init-ui-h)

View File

@ -48,3 +48,15 @@
;(unpin! pinned-package another-pinned-package)
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
;(unpin! t)
(package! avy)
(package! cheatsheet)
(package! separedit)
(package! magit-delta)
(package! crux)
(package! string-inflection)
(package! smart-hungry-delete)
(package! solarized-theme)
(package! deadgrep)
(package! multi-vterm)
(package! grip-mode)