diff --git a/.doomrc b/.doomrc index e01f5c0a6..880fb896b 100644 --- a/.doomrc +++ b/.doomrc @@ -19,20 +19,24 @@ (after! doom-cli-make ;;; Codeowners - (dolist (path (doom-module-load-path (list doom-modules-dir))) - ;; I will be the default owner for everything in the repo unless a later - ;; match takes precedence. - (add-to-list 'doom-make-codeowners "# The default owner(s) unless another takes precedence") - (add-to-list 'doom-make-codeowners '("*" . "@doomemacs/maintainers")) - ;; Module maintainers (see https://git.doomemacs.org/teams) - (save-match-data - (add-to-list 'doom-make-codeowners "# Module maintainers") - (when (string-match "/modules/\\([^/]+\\)/\\([^/]+\\)/$" path) - (push (cons (substring (match-string 0 path) 1) - (format "@doomemacs/%s-%s" - (match-string 1 path) - (match-string 2 path))) - doom-make-codeowners))))) + ;; I will be the default owner for everything in the repo unless a later match + ;; takes precedence. + (add-to-list 'doom-make-codeowners "# The default owner(s) unless another takes precedence") + (add-to-list 'doom-make-codeowners '("*" . "@doomemacs/maintainers")) + ;; Module maintainers (see https://git.doomemacs.org/teams) + (add-to-list 'doom-make-codeowners "# Module maintainers") + (save-match-data + (setq doom-make-codeowners + (nreverse + (append doom-make-codeowners + (cl-sort + (cl-loop for path in (doom-module-load-path (list doom-modules-dir)) + if (string-match "/modules/\\([^/]+\\)/\\([^/]+\\)$" path) + collect (cons (substring (match-string 0 path) 1) + (format "@doomemacs/%s-%s" + (match-string 1 path) + (match-string 2 path)))) + #'string-lessp :key #'car)))))) ;;; Helpers (defun ci-check-module-scope (scope _plist) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9fb8e8171..396ad8f44 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -2,163 +2,165 @@ # Each line is a file pattern followed by one or more owners. # This file was generated by 'doom make codeowners', do not edit it by hand. -# The default owner(s) unless another takes precedence -* @doomemacs/maintainers - # Module maintainers -modules/app/calendar/ @doomemacs/app-calendar -modules/app/emms/ @doomemacs/app-emms -modules/app/everywhere/ @doomemacs/app-everywhere -modules/app/irc/ @doomemacs/app-irc -modules/app/rss/ @doomemacs/app-rss -modules/app/twitter/ @doomemacs/app-twitter -modules/checkers/grammar/ @doomemacs/checkers-grammar -modules/checkers/spell/ @doomemacs/checkers-spell -modules/checkers/syntax/ @doomemacs/checkers-syntax -modules/completion/company/ @doomemacs/completion-company -modules/completion/helm/ @doomemacs/completion-helm -modules/completion/ido/ @doomemacs/completion-ido -modules/completion/ivy/ @doomemacs/completion-ivy -modules/completion/vertico/ @doomemacs/completion-vertico -modules/config/default/ @doomemacs/config-default -modules/config/literate/ @doomemacs/config-literate -modules/editor/evil/ @doomemacs/editor-evil -modules/editor/file-templates/ @doomemacs/editor-file-templates -modules/editor/fold/ @doomemacs/editor-fold -modules/editor/format/ @doomemacs/editor-format -modules/editor/god/ @doomemacs/editor-god -modules/editor/lispy/ @doomemacs/editor-lispy -modules/editor/multiple-cursors/ @doomemacs/editor-multiple-cursors -modules/editor/objed/ @doomemacs/editor-objed -modules/editor/parinfer/ @doomemacs/editor-parinfer -modules/editor/rotate-text/ @doomemacs/editor-rotate-text -modules/editor/snippets/ @doomemacs/editor-snippets -modules/editor/word-wrap/ @doomemacs/editor-word-wrap -modules/emacs/dired/ @doomemacs/emacs-dired -modules/emacs/electric/ @doomemacs/emacs-electric -modules/emacs/ibuffer/ @doomemacs/emacs-ibuffer -modules/emacs/tramp/ @doomemacs/emacs-tramp -modules/emacs/undo/ @doomemacs/emacs-undo -modules/emacs/vc/ @doomemacs/emacs-vc -modules/email/mu4e/ @doomemacs/email-mu4e -modules/email/notmuch/ @doomemacs/email-notmuch -modules/email/wanderlust/ @doomemacs/email-wanderlust -modules/input/bidi/ @doomemacs/input-bidi -modules/input/chinese/ @doomemacs/input-chinese -modules/input/japanese/ @doomemacs/input-japanese -modules/input/layout/ @doomemacs/input-layout -modules/lang/agda/ @doomemacs/lang-agda -modules/lang/beancount/ @doomemacs/lang-beancount -modules/lang/cc/ @doomemacs/lang-cc -modules/lang/clojure/ @doomemacs/lang-clojure -modules/lang/common-lisp/ @doomemacs/lang-common-lisp -modules/lang/coq/ @doomemacs/lang-coq -modules/lang/crystal/ @doomemacs/lang-crystal -modules/lang/csharp/ @doomemacs/lang-csharp -modules/lang/dart/ @doomemacs/lang-dart -modules/lang/data/ @doomemacs/lang-data -modules/lang/dhall/ @doomemacs/lang-dhall -modules/lang/elixir/ @doomemacs/lang-elixir -modules/lang/elm/ @doomemacs/lang-elm -modules/lang/emacs-lisp/ @doomemacs/lang-emacs-lisp -modules/lang/erlang/ @doomemacs/lang-erlang -modules/lang/ess/ @doomemacs/lang-ess -modules/lang/factor/ @doomemacs/lang-factor -modules/lang/faust/ @doomemacs/lang-faust -modules/lang/fortran/ @doomemacs/lang-fortran -modules/lang/fsharp/ @doomemacs/lang-fsharp -modules/lang/fstar/ @doomemacs/lang-fstar -modules/lang/gdscript/ @doomemacs/lang-gdscript -modules/lang/go/ @doomemacs/lang-go -modules/lang/graphql/ @doomemacs/lang-graphql -modules/lang/haskell/ @doomemacs/lang-haskell -modules/lang/hy/ @doomemacs/lang-hy -modules/lang/idris/ @doomemacs/lang-idris -modules/lang/java/ @doomemacs/lang-java -modules/lang/javascript/ @doomemacs/lang-javascript -modules/lang/json/ @doomemacs/lang-json -modules/lang/julia/ @doomemacs/lang-julia -modules/lang/kotlin/ @doomemacs/lang-kotlin -modules/lang/latex/ @doomemacs/lang-latex -modules/lang/lean/ @doomemacs/lang-lean -modules/lang/ledger/ @doomemacs/lang-ledger -modules/lang/lua/ @doomemacs/lang-lua -modules/lang/markdown/ @doomemacs/lang-markdown -modules/lang/nim/ @doomemacs/lang-nim -modules/lang/nix/ @doomemacs/lang-nix -modules/lang/ocaml/ @doomemacs/lang-ocaml -modules/lang/org/ @doomemacs/lang-org -modules/lang/php/ @doomemacs/lang-php -modules/lang/plantuml/ @doomemacs/lang-plantuml -modules/lang/purescript/ @doomemacs/lang-purescript -modules/lang/python/ @doomemacs/lang-python -modules/lang/qt/ @doomemacs/lang-qt -modules/lang/racket/ @doomemacs/lang-racket -modules/lang/raku/ @doomemacs/lang-raku -modules/lang/rest/ @doomemacs/lang-rest -modules/lang/rst/ @doomemacs/lang-rst -modules/lang/ruby/ @doomemacs/lang-ruby -modules/lang/rust/ @doomemacs/lang-rust -modules/lang/scala/ @doomemacs/lang-scala -modules/lang/scheme/ @doomemacs/lang-scheme -modules/lang/sh/ @doomemacs/lang-sh -modules/lang/sml/ @doomemacs/lang-sml -modules/lang/solidity/ @doomemacs/lang-solidity -modules/lang/swift/ @doomemacs/lang-swift -modules/lang/terra/ @doomemacs/lang-terra -modules/lang/web/ @doomemacs/lang-web -modules/lang/yaml/ @doomemacs/lang-yaml -modules/lang/zig/ @doomemacs/lang-zig -modules/os/macos/ @doomemacs/os-macos -modules/os/tty/ @doomemacs/os-tty -modules/term/eshell/ @doomemacs/term-eshell -modules/term/shell/ @doomemacs/term-shell -modules/term/term/ @doomemacs/term-term -modules/term/vterm/ @doomemacs/term-vterm -modules/tools/ansible/ @doomemacs/tools-ansible -modules/tools/biblio/ @doomemacs/tools-biblio -modules/tools/debugger/ @doomemacs/tools-debugger -modules/tools/direnv/ @doomemacs/tools-direnv -modules/tools/docker/ @doomemacs/tools-docker -modules/tools/editorconfig/ @doomemacs/tools-editorconfig -modules/tools/ein/ @doomemacs/tools-ein -modules/tools/eval/ @doomemacs/tools-eval -modules/tools/gist/ @doomemacs/tools-gist -modules/tools/lookup/ @doomemacs/tools-lookup -modules/tools/lsp/ @doomemacs/tools-lsp -modules/tools/magit/ @doomemacs/tools-magit -modules/tools/make/ @doomemacs/tools-make -modules/tools/pass/ @doomemacs/tools-pass -modules/tools/pdf/ @doomemacs/tools-pdf -modules/tools/prodigy/ @doomemacs/tools-prodigy -modules/tools/rgb/ @doomemacs/tools-rgb -modules/tools/taskrunner/ @doomemacs/tools-taskrunner -modules/tools/terraform/ @doomemacs/tools-terraform -modules/tools/tmux/ @doomemacs/tools-tmux -modules/tools/tree-sitter/ @doomemacs/tools-tree-sitter -modules/tools/upload/ @doomemacs/tools-upload -modules/ui/deft/ @doomemacs/ui-deft -modules/ui/doom/ @doomemacs/ui-doom -modules/ui/doom-dashboard/ @doomemacs/ui-doom-dashboard -modules/ui/doom-quit/ @doomemacs/ui-doom-quit -modules/ui/emoji/ @doomemacs/ui-emoji -modules/ui/hl-todo/ @doomemacs/ui-hl-todo -modules/ui/hydra/ @doomemacs/ui-hydra -modules/ui/indent-guides/ @doomemacs/ui-indent-guides -modules/ui/ligatures/ @doomemacs/ui-ligatures -modules/ui/minimap/ @doomemacs/ui-minimap -modules/ui/modeline/ @doomemacs/ui-modeline -modules/ui/nav-flash/ @doomemacs/ui-nav-flash -modules/ui/neotree/ @doomemacs/ui-neotree -modules/ui/ophints/ @doomemacs/ui-ophints -modules/ui/popup/ @doomemacs/ui-popup -modules/ui/tabs/ @doomemacs/ui-tabs -modules/ui/treemacs/ @doomemacs/ui-treemacs -modules/ui/unicode/ @doomemacs/ui-unicode -modules/ui/vc-gutter/ @doomemacs/ui-vc-gutter -modules/ui/vi-tilde-fringe/ @doomemacs/ui-vi-tilde-fringe -modules/ui/window-select/ @doomemacs/ui-window-select -modules/ui/workspaces/ @doomemacs/ui-workspaces -modules/ui/zen/ @doomemacs/ui-zen +* @doomemacs/maintainers + +# The default owner(s) unless another takes precedence +modules/app/calendar @doomemacs/app-calendar +modules/app/emms @doomemacs/app-emms +modules/app/everywhere @doomemacs/app-everywhere +modules/app/irc @doomemacs/app-irc +modules/app/rss @doomemacs/app-rss +modules/checkers/grammar @doomemacs/checkers-grammar +modules/checkers/spell @doomemacs/checkers-spell +modules/checkers/syntax @doomemacs/checkers-syntax +modules/completion/company @doomemacs/completion-company +modules/completion/corfu @doomemacs/completion-corfu +modules/completion/helm @doomemacs/completion-helm +modules/completion/ido @doomemacs/completion-ido +modules/completion/ivy @doomemacs/completion-ivy +modules/completion/vertico @doomemacs/completion-vertico +modules/config/default @doomemacs/config-default +modules/config/literate @doomemacs/config-literate +modules/config/use-package @doomemacs/config-use-package +modules/core/cli @doomemacs/core-cli +modules/core/defaults @doomemacs/core-defaults +modules/editor/evil @doomemacs/editor-evil +modules/editor/file-templates @doomemacs/editor-file-templates +modules/editor/fold @doomemacs/editor-fold +modules/editor/format @doomemacs/editor-format +modules/editor/god @doomemacs/editor-god +modules/editor/lispy @doomemacs/editor-lispy +modules/editor/multiple-cursors @doomemacs/editor-multiple-cursors +modules/editor/objed @doomemacs/editor-objed +modules/editor/parinfer @doomemacs/editor-parinfer +modules/editor/rotate-text @doomemacs/editor-rotate-text +modules/editor/snippets @doomemacs/editor-snippets +modules/editor/word-wrap @doomemacs/editor-word-wrap +modules/emacs/dired @doomemacs/emacs-dired +modules/emacs/electric @doomemacs/emacs-electric +modules/emacs/ibuffer @doomemacs/emacs-ibuffer +modules/emacs/tramp @doomemacs/emacs-tramp +modules/emacs/undo @doomemacs/emacs-undo +modules/emacs/vc @doomemacs/emacs-vc +modules/email/mu4e @doomemacs/email-mu4e +modules/email/notmuch @doomemacs/email-notmuch +modules/email/wanderlust @doomemacs/email-wanderlust +modules/input/bidi @doomemacs/input-bidi +modules/input/chinese @doomemacs/input-chinese +modules/input/japanese @doomemacs/input-japanese +modules/input/layout @doomemacs/input-layout +modules/lang/agda @doomemacs/lang-agda +modules/lang/beancount @doomemacs/lang-beancount +modules/lang/cc @doomemacs/lang-cc +modules/lang/clojure @doomemacs/lang-clojure +modules/lang/common-lisp @doomemacs/lang-common-lisp +modules/lang/coq @doomemacs/lang-coq +modules/lang/crystal @doomemacs/lang-crystal +modules/lang/csharp @doomemacs/lang-csharp +modules/lang/dart @doomemacs/lang-dart +modules/lang/data @doomemacs/lang-data +modules/lang/dhall @doomemacs/lang-dhall +modules/lang/elixir @doomemacs/lang-elixir +modules/lang/elm @doomemacs/lang-elm +modules/lang/emacs-lisp @doomemacs/lang-emacs-lisp +modules/lang/erlang @doomemacs/lang-erlang +modules/lang/ess @doomemacs/lang-ess +modules/lang/factor @doomemacs/lang-factor +modules/lang/faust @doomemacs/lang-faust +modules/lang/fortran @doomemacs/lang-fortran +modules/lang/fsharp @doomemacs/lang-fsharp +modules/lang/fstar @doomemacs/lang-fstar +modules/lang/gdscript @doomemacs/lang-gdscript +modules/lang/go @doomemacs/lang-go +modules/lang/graphql @doomemacs/lang-graphql +modules/lang/haskell @doomemacs/lang-haskell +modules/lang/hy @doomemacs/lang-hy +modules/lang/idris @doomemacs/lang-idris +modules/lang/janet @doomemacs/lang-janet +modules/lang/java @doomemacs/lang-java +modules/lang/javascript @doomemacs/lang-javascript +modules/lang/json @doomemacs/lang-json +modules/lang/julia @doomemacs/lang-julia +modules/lang/kotlin @doomemacs/lang-kotlin +modules/lang/latex @doomemacs/lang-latex +modules/lang/lean @doomemacs/lang-lean +modules/lang/ledger @doomemacs/lang-ledger +modules/lang/lua @doomemacs/lang-lua +modules/lang/markdown @doomemacs/lang-markdown +modules/lang/nim @doomemacs/lang-nim +modules/lang/nix @doomemacs/lang-nix +modules/lang/ocaml @doomemacs/lang-ocaml +modules/lang/org @doomemacs/lang-org +modules/lang/php @doomemacs/lang-php +modules/lang/plantuml @doomemacs/lang-plantuml +modules/lang/purescript @doomemacs/lang-purescript +modules/lang/python @doomemacs/lang-python +modules/lang/qt @doomemacs/lang-qt +modules/lang/racket @doomemacs/lang-racket +modules/lang/raku @doomemacs/lang-raku +modules/lang/rest @doomemacs/lang-rest +modules/lang/rst @doomemacs/lang-rst +modules/lang/ruby @doomemacs/lang-ruby +modules/lang/rust @doomemacs/lang-rust +modules/lang/scala @doomemacs/lang-scala +modules/lang/scheme @doomemacs/lang-scheme +modules/lang/sh @doomemacs/lang-sh +modules/lang/sml @doomemacs/lang-sml +modules/lang/solidity @doomemacs/lang-solidity +modules/lang/swift @doomemacs/lang-swift +modules/lang/terra @doomemacs/lang-terra +modules/lang/web @doomemacs/lang-web +modules/lang/yaml @doomemacs/lang-yaml +modules/lang/zig @doomemacs/lang-zig +modules/os/macos @doomemacs/os-macos +modules/os/tty @doomemacs/os-tty +modules/term/eshell @doomemacs/term-eshell +modules/term/shell @doomemacs/term-shell +modules/term/term @doomemacs/term-term +modules/term/vterm @doomemacs/term-vterm +modules/tools/ansible @doomemacs/tools-ansible +modules/tools/biblio @doomemacs/tools-biblio +modules/tools/collab @doomemacs/tools-collab +modules/tools/debugger @doomemacs/tools-debugger +modules/tools/direnv @doomemacs/tools-direnv +modules/tools/docker @doomemacs/tools-docker +modules/tools/editorconfig @doomemacs/tools-editorconfig +modules/tools/ein @doomemacs/tools-ein +modules/tools/eval @doomemacs/tools-eval +modules/tools/lookup @doomemacs/tools-lookup +modules/tools/lsp @doomemacs/tools-lsp +modules/tools/magit @doomemacs/tools-magit +modules/tools/make @doomemacs/tools-make +modules/tools/pass @doomemacs/tools-pass +modules/tools/pdf @doomemacs/tools-pdf +modules/tools/prodigy @doomemacs/tools-prodigy +modules/tools/terraform @doomemacs/tools-terraform +modules/tools/tmux @doomemacs/tools-tmux +modules/tools/tree-sitter @doomemacs/tools-tree-sitter +modules/tools/upload @doomemacs/tools-upload +modules/ui/deft @doomemacs/ui-deft +modules/ui/doom @doomemacs/ui-doom +modules/ui/doom-dashboard @doomemacs/ui-doom-dashboard +modules/ui/doom-quit @doomemacs/ui-doom-quit +modules/ui/emoji @doomemacs/ui-emoji +modules/ui/hl-todo @doomemacs/ui-hl-todo +modules/ui/hydra @doomemacs/ui-hydra +modules/ui/indent-guides @doomemacs/ui-indent-guides +modules/ui/ligatures @doomemacs/ui-ligatures +modules/ui/minimap @doomemacs/ui-minimap +modules/ui/modeline @doomemacs/ui-modeline +modules/ui/nav-flash @doomemacs/ui-nav-flash +modules/ui/neotree @doomemacs/ui-neotree +modules/ui/ophints @doomemacs/ui-ophints +modules/ui/popup @doomemacs/ui-popup +modules/ui/tabs @doomemacs/ui-tabs +modules/ui/treemacs @doomemacs/ui-treemacs +modules/ui/unicode @doomemacs/ui-unicode +modules/ui/vc-gutter @doomemacs/ui-vc-gutter +modules/ui/vi-tilde-fringe @doomemacs/ui-vi-tilde-fringe +modules/ui/window-select @doomemacs/ui-window-select +modules/ui/workspaces @doomemacs/ui-workspaces +modules/ui/zen @doomemacs/ui-zen # End of CODEOWNERS \ No newline at end of file diff --git a/lisp/cli/make.el b/lisp/cli/make.el index 879f527b9..a7a5c657a 100644 --- a/lisp/cli/make.el +++ b/lisp/cli/make.el @@ -54,7 +54,7 @@ OPTIONS: (dolist (entry (nreverse doom-make-codeowners)) (if (stringp entry) (insert "\n" entry "\n") - (insert (car entry) " " (cdr entry) "\n"))) + (insert (format "%-35s %s" (car entry) (cdr entry)) "\n"))) (insert "\n# End of CODEOWNERS") (setq indent-tabs-mode nil) ; align w/ spaces, not tabs (align-regexp (point-min) (point-max) "/\\(\\s-+\\)@" 1) diff --git a/lisp/doom.el b/lisp/doom.el index 4b5f1f19c..9e8626122 100644 --- a/lisp/doom.el +++ b/lisp/doom.el @@ -201,7 +201,7 @@ "Current version of Doom Emacs core.") ;; DEPRECATED: Remove these when the modules are moved out of core. -(defconst doom-modules-version "24.07.0-pre" +(defconst doom-modules-version "24.08.0-pre" "Current version of Doom Emacs.") (defvar doom-init-time nil diff --git a/modules/app/twitter/README.org b/modules/app/twitter/README.org deleted file mode 100644 index e4912d364..000000000 --- a/modules/app/twitter/README.org +++ /dev/null @@ -1,106 +0,0 @@ -#+title: :app twitter -#+subtitle: Be superficial in plain text -#+created: October 11, 2019 -#+since: 2.0.0 - -#+begin_quote -  *This module is deprecated.* Changes upstream to Twitter's API has rendered - twittering-mode non-functional, and there is no known alternative. -#+end_quote - -* Description :unfold: -Enjoy twitter from emacs. - -- View various timelines side by side, e.g. user's timeline, home, etc. -- Post new tweets -- Send direct messages -- Retweet -- Follow and un-follow users -- Favorite tweets - -** Maintainers -/This module has no dedicated maintainers./ [[doom-contrib-maintainer:][Become a maintainer?]] - -** Module flags -/This module has no flags./ - -** Packages -- [[doom-package:avy]] -- [[doom-package:twittering-mode]] - -** Hacks -/No hacks documented for this module./ - -** TODO Changelog -# This section will be machine generated. Don't edit it by hand. -/This module does not have a changelog yet./ - -* Installation -[[id:01cffea4-3329-45e2-a892-95a384ab2338][Enable this module in your ~doom!~ block.]] - -This module requires: -- One of the following (for SSL connections; required by Twitter's API): - - [[http://curl.haxx.se/][cURL]] - - [[http://www.gnu.org/software/wget/][GNU Wget]] - - [[http://www.openssl.org/][OpenSSL]] - - [[http://www.gnu.org/software/gnutls/][GnuTLS]] -- [[http://www.gnupg.org/][GnuPG]], for encrypting the OAuth token, stored locally. -- [[http://www.gzip.org/][gzip]], for compressing retrieved profile pictures, -- [[http://www.imagemagick.org/][ImageMagick]], for displaying and resizing profile pictures. - - Build Emacs with ImageMagick support using the ~--with-imagemagick~ flag ([[https://git.savannah.gnu.org/cgit/emacs.git/tree/INSTALL][how - to build Emacs from source]]). - -* TODO Usage -#+begin_quote - 󱌣 This module has no usage documentation yet. [[doom-contrib-module:][Write some?]] -#+end_quote - -* TODO Configuration -#+begin_quote - 󱌣 /This module's configuration documentation is incomplete./ [[doom-contrib-module:][Complete it?]] -#+end_quote - -** Commands & Keybindings -Here is a list of available commands and their default keybindings (defined in -[[./config.el][config.el]]): -| command | key / ex command | description | -|---------------------+------------------+-------------------------------------------------------------| -| ~+twitter/quit~ | [[kbd:][q]] | Close current window | -| ~+twitter/quit-all~ | [[kbd:][Q]] | Close all twitter windows and buffers, and delete workspace | - -And when [[doom-module::editor evil +everywhere]] is active: -| command | key / ex command | description | -|--------------------------------------------------+------------------+------------------------------------------------------------------| -| ~twittering-favorite~ | [[kbd:][f]] | Favorite/Like a tweet | -| ~twittering-unfavorite~ | [[kbd:][F]] | Un-favorite/Un-like a tweet | -| ~twittering-follow~ | [[kbd:][C-f]] | Follow user | -| ~twittering-unfollow~ | [[kbd:][C-F]] | Un-follow user | -| ~twittering-delete-status~ | [[kbd:][d]] | Delete a tweet | -| ~twittering-retweet~ | [[kbd:][r]] | Retweet | -| ~twittering-toggle-or-retrieve-replied-statuses~ | [[kbd:][R]] | Toggle or retrieve replies | -| ~twittering-update-status-interactive~ | [[kbd:][o]] | Update tweets | -| ~+twitter/ace-link~ | [[kbd:][O]] | Open some visible link from a ~twittering-mode~ buffer using ace | -| ~twittering-search~ | [[kbd:][/]] | Search | -| ~twittering-goto-next-status~ | [[kbd:][J]] | Go to next tweet | -| ~twittering-goto-previous-status~ | [[kbd:][K]] | Go to previous tweet | -| ~twittering-goto-first-status~ | [[kbd:][gg]] | Go to first tweet | -| ~twittering-goto-last-status~ | [[kbd:][G]] | Go to last tweet | -| ~twittering-goto-next-status-of-user~ | [[kbd:][gj]] | Go to next tweet of user | -| ~twittering-goto-previous-status-of-user)))~ | [[kbd:][gk]] | Go to previous tweet of user | - -* Troubleshooting -[[doom-report:][Report an issue?]] - -** ~twittering-mode~ overrides the [[kbd:][SPC]] key -Currently ~twittering-mode~ binds [[kbd:][SPC]], breaking its functionality as a leader -key for evil users. To work around this issue you may use [[kbd:][M-SPC]] instead. - -* Frequently asked questions -/This module has no FAQs yet./ [[doom-suggest-faq:][Ask one?]] - -* TODO Appendix -#+begin_quote - 󱌣 This module has no appendix yet. [[doom-contrib-module:][Write one?]] -#+end_quote - diff --git a/modules/app/twitter/autoload.el b/modules/app/twitter/autoload.el deleted file mode 100644 index 6148b1f2f..000000000 --- a/modules/app/twitter/autoload.el +++ /dev/null @@ -1,104 +0,0 @@ -;;; app/twitter/autoload.el -*- lexical-binding: t; -*- - -(defvar +twitter-workspace-name "*Twitter*" - "The name to use for the twitter workspace.") - -;;;###autoload -(defun +twitter-display-buffer-fn (buf) - "A replacement display-buffer command for `twittering-pop-to-buffer-function' -that works with the ui/popup module." - (let ((win (selected-window))) - (display-buffer buf) - ;; This is required because the new window generated by `pop-to-buffer' - ;; may hide the region following the current position. - (twittering-ensure-whole-of-status-is-visible win))) - -;;;###autoload -(defun +twitter-buffer-p (buf) - "Return non-nil if BUF is a `twittering-mode' buffer." - (eq 'twittering-mode (buffer-local-value 'major-mode buf))) - - -;; -;; Commands - -(defvar +twitter--old-wconf nil) -;;;###autoload -(defun =twitter (arg) - "Opens a workspace dedicated to `twittering-mode'." - (interactive "P") - (condition-case _ - (progn - (if (and (not arg) (modulep! :ui workspaces)) - (+workspace/new +twitter-workspace-name) - (setq +twitter--old-wconf (current-window-configuration)) - (delete-other-windows) - (switch-to-buffer (doom-fallback-buffer))) - (call-interactively #'twit) - (unless (get-buffer (car twittering-initial-timeline-spec-string)) - (error "Failed to open twitter")) - (switch-to-buffer (car twittering-initial-timeline-spec-string)) - (dolist (name (cdr twittering-initial-timeline-spec-string)) - (split-window-horizontally) - (switch-to-buffer name)) - (balance-windows) - (call-interactively #'+twitter/rerender-all)) - ('error (+twitter/quit-all)))) - -;;;###autoload -(defun +twitter/quit () - "Close the current `twitter-mode' buffer." - (interactive) - (when (eq major-mode 'twittering-mode) - (twittering-kill-buffer) - (cond ((one-window-p) (+twitter/quit-all)) - ((modulep! :ui workspaces) - (+workspace/close-window-or-workspace)) - ((delete-window))))) - -;;;###autoload -(defun +twitter/quit-all () - "Close all open `twitter-mode' buffers and the associated workspace, if any." - (interactive) - (when (modulep! :ui workspaces) - (+workspace/delete +twitter-workspace-name)) - (when +twitter--old-wconf - (set-window-configuration +twitter--old-wconf) - (setq +twitter--old-wconf nil)) - (dolist (buf (doom-buffers-in-mode 'twittering-mode (buffer-list) t)) - (twittering-kill-buffer buf))) - -;;;###autoload -(defun +twitter/rerender-all () - "Rerender all `twittering-mode' buffers." - (interactive) - (dolist (buf (doom-buffers-in-mode 'twittering-mode (buffer-list) t)) - (with-current-buffer buf - (twittering-rerender-timeline-all buf) - (setq-local line-spacing 0.2) - (goto-char (point-min))))) - -;;;###autoload -(defun +twitter/ace-link () - "Open a visible link, username or hashtag in a `twittering-mode' buffer." - (interactive) - (require 'avy) - ;; REVIEW Is this necessary anymore with `link-hint' - (let ((pt (avy-with +twitter/ace-link - (avy--process - (+twitter--collect-links) - (avy--style-fn avy-style))))) - (when (number-or-marker-p pt) - (goto-char pt) - (let ((uri (get-text-property (point) 'uri))) - (if uri (browse-url uri)))))) - -(defun +twitter--collect-links () - (let ((end (window-end)) - points) - (save-excursion - (goto-char (window-start)) - (while (and (< (point) end) - (ignore-errors (twittering-goto-next-thing) t)) - (push (point) points)) - (nreverse points)))) diff --git a/modules/app/twitter/config.el b/modules/app/twitter/config.el deleted file mode 100644 index 7752f7cf7..000000000 --- a/modules/app/twitter/config.el +++ /dev/null @@ -1,76 +0,0 @@ -;;; app/twitter/config.el -*- lexical-binding: t; -*- - -(use-package! twittering-mode - :commands twit - :config - (setq twittering-private-info-file - (expand-file-name "twittering-mode.gpg" doom-data-dir) - twittering-use-master-password t - twittering-request-confirmation-on-posting t - ;; twittering-icon-mode t - ;; twittering-use-icon-storage t - ;; twittering-icon-storage-file (concat doom-cache-dir "twittering-mode-icons.gz") - ;; twittering-convert-fix-size 12 - twittering-timeline-header "" - twittering-timeline-footer "" - twittering-edit-skeleton 'inherit-any - twittering-status-format "%FACE[font-lock-function-name-face]{ @%s} %FACE[italic]{%@} %FACE[error]{%FIELD-IF-NONZERO[❤ %d]{favorite_count}} %FACE[warning]{%FIELD-IF-NONZERO[↺ %d]{retweet_count}} -%FOLD[ ]{%FILL{%t}%QT{ -%FOLD[ ]{%FACE[font-lock-function-name-face]{@%s}\t%FACE[shadow]{%@} -%FOLD[ ]{%FILL{%t}} -}}} - -%FACE[twitter-divider]{ } -" - ;; twittering-timeline-spec-alias '() - twittering-initial-timeline-spec-string - '(":home" ":mentions" ":direct_messages")) - - (set-popup-rule! "^\\*twittering-edit" :size 15 :ttl nil :quit nil :select t) - - (defface twitter-divider - '((((background dark)) (:underline (:color "#141519"))) - (((background light)) (:underline (:color "#d3d3d3")))) - "The vertical divider between tweets." - :group 'twittering-mode) - - (add-hook 'doom-real-buffer-functions #'+twitter-buffer-p) - (when (modulep! :ui popup) - (setq twittering-pop-to-buffer-function #'+twitter-display-buffer-fn)) - - ;; Custom header-line for twitter buffers - (add-hook! 'twittering-mode-hook - (defun +twitter-switch-mode-and-header-line-h () - (setq header-line-format mode-line-format - mode-line-format nil))) - - ;; `epa--decode-coding-string' isn't defined in later versions of Emacs 27 - (unless (fboundp 'epa--decode-coding-string) - (defalias 'epa--decode-coding-string #'decode-coding-string)) - - (define-key! twittering-mode-map - "q" #'+twitter/quit - "Q" #'+twitter/quit-all - [remap twittering-kill-buffer] #'+twitter/quit - [remap delete-window] #'+twitter/quit - [remap +workspace/close-window-or-workspace] #'+twitter/quit) - (when (modulep! :editor evil +everywhere) - (define-key! twittering-mode-map - [remap evil-window-delete] #'+twitter/quit - "f" #'twittering-favorite - "F" #'twittering-unfavorite - "\C-f" #'twittering-follow - "\C-F" #'twittering-unfollow - "d" #'twittering-delete-status - "r" #'twittering-retweet - "R" #'twittering-toggle-or-retrieve-replied-statuses - "o" #'twittering-update-status-interactive - "O" #'+twitter/ace-link - "/" #'twittering-search - "J" #'twittering-goto-next-status - "K" #'twittering-goto-previous-status - "g" nil - "gg" #'twittering-goto-first-status - "G" #'twittering-goto-last-status - "gj" #'twittering-goto-next-status-of-user - "gk" #'twittering-goto-previous-status-of-user))) diff --git a/modules/app/twitter/packages.el b/modules/app/twitter/packages.el deleted file mode 100644 index 12533702a..000000000 --- a/modules/app/twitter/packages.el +++ /dev/null @@ -1,5 +0,0 @@ -;; -*- no-byte-compile: t; -*- -;;; app/twitter/packages.el - -(package! twittering-mode :pin "114891e8fdb4f06b1326a6cf795e49c205cf9e29") -(package! avy :pin "be612110cb116a38b8603df367942e2bb3d9bdbe") diff --git a/modules/checkers/syntax/README.org b/modules/checkers/syntax/README.org index 5aa7ac8d8..80857885a 100644 --- a/modules/checkers/syntax/README.org +++ b/modules/checkers/syntax/README.org @@ -25,6 +25,9 @@ This module provides syntax checking and error highlighting, powered by ** Hacks - If ~lsp-ui-mode~ is active, most of the aesthetic functionality of this module is turned off, as they show the same information. +- If childframes are enabled, and the flycheck childframe is shown, it will be + hidden on the next user input (as well as the default behavior: to hide it the + next time the user is idle for ~flycheck-display-errors-delay~ seconds). ** TODO Changelog # This section will be machine generated. Don't edit it by hand. diff --git a/modules/checkers/syntax/config.el b/modules/checkers/syntax/config.el index a458d8768..5108ba7ee 100644 --- a/modules/checkers/syntax/config.el +++ b/modules/checkers/syntax/config.el @@ -74,6 +74,21 @@ (setq flycheck-posframe-warning-prefix "! " flycheck-posframe-info-prefix "··· " flycheck-posframe-error-prefix "X ") + + ;; HACK: Hide the flycheck posframe immediately on the next keypress/user + ;; action, otherwise it lingers until the next time the user is idle. + (defun +syntax--flycheck-posframe-hide-h () + (unless (flycheck-posframe-check-position) + (posframe-hide flycheck-posframe-buffer)) + (remove-hook 'post-command-hook #'+syntax--flycheck-posframe-hide-h)) + + (defadvice! +syntax-hide-posframe-on-next-command-a (fn &rest args) + :around #'flycheck-posframe-show-posframe + (letf! ((defun posframe-show (&rest args) + (add-hook 'post-command-hook #'+syntax--flycheck-posframe-hide-h) + (apply posframe-show args))) + (apply fn args))) + (after! company ;; Don't display popups if company is open (add-hook 'flycheck-posframe-inhibit-functions #'company--active-p)) diff --git a/modules/config/default/+emacs-bindings.el b/modules/config/default/+emacs-bindings.el index 7c63e68e2..18f45574f 100644 --- a/modules/config/default/+emacs-bindings.el +++ b/modules/config/default/+emacs-bindings.el @@ -469,15 +469,7 @@ (:when (modulep! :completion ivy) :desc "Jump to channel" "j" #'+irc/ivy-jump-to-channel) (:when (modulep! :completion vertico) - :desc "Jump to channel" "j" #'+irc/vertico-jump-to-channel))) - - ;;; T --- twitter - (:when (modulep! :app twitter) - (:prefix-map ("T" . "twitter") - :desc "Open twitter app" "T" #'=twitter - :desc "Quit twitter" "q" #'+twitter/quit - :desc "Rerender twits" "r" #'+twitter/rerender-all - :desc "Ace link" "l" #'+twitter/ace-link))) + :desc "Jump to channel" "j" #'+irc/vertico-jump-to-channel)))) ;; diff --git a/modules/editor/evil/config.el b/modules/editor/evil/config.el index 74d7b942c..6c8b75f8d 100644 --- a/modules/editor/evil/config.el +++ b/modules/editor/evil/config.el @@ -155,14 +155,6 @@ directives. By default, this only recognizes C directives.") :after-until #'evil-global-marker-p (and (>= char ?2) (<= char ?9))) - ;; REVIEW Fix #2493: dir-locals cannot target fundamental-mode when evil-mode - ;; is active. See hlissner/doom-emacs#2493. Revert this if - ;; emacs-evil/evil#1268 is resolved upstream. - (defadvice! +evil--fix-local-vars-a (&rest _) - :before #'turn-on-evil-mode - (when (eq major-mode 'fundamental-mode) - (hack-local-variables))) - ;; HACK Invoking helpful from evil-ex throws a "No recursive edit is in ;; progress" error because, between evil-ex and helpful, ;; `abort-recursive-edit' gets called one time too many. diff --git a/modules/lang/common-lisp/autoload/common-lisp.el b/modules/lang/common-lisp/autoload/common-lisp.el index d66b54897..b40de3e51 100644 --- a/modules/lang/common-lisp/autoload/common-lisp.el +++ b/modules/lang/common-lisp/autoload/common-lisp.el @@ -37,4 +37,8 @@ (defun +lisp/find-file-in-quicklisp () "Find a file belonging to a library downloaded by Quicklisp." (interactive) - (doom-project-find-file "~/quicklisp/dists/")) + (doom-project-find-file + (or (cl-loop for dir in +lisp-quicklisp-paths + if (file-directory-p dir) + return (expand-file-name "dists/" dir)) + (user-error "Couldn't find your Quicklisp directory (customize `+lisp-quicklisp-paths')")))) diff --git a/modules/lang/common-lisp/config.el b/modules/lang/common-lisp/config.el index 8f866be0c..0044697f7 100644 --- a/modules/lang/common-lisp/config.el +++ b/modules/lang/common-lisp/config.el @@ -1,5 +1,9 @@ ;;; lang/common-lisp/config.el -*- lexical-binding: t; -*- +(defcustom +lisp-quicklisp-paths '("~/quicklisp" "~/.quicklisp") + "A list of directories to search for Quicklisp's site files." + :type '(repeat directory)) + ;; `lisp-mode' is loaded at startup. In order to lazy load its config we need to ;; pretend it isn't loaded (defer-feature! lisp-mode) diff --git a/modules/lang/python/config.el b/modules/lang/python/config.el index 3014db9db..373f580b6 100644 --- a/modules/lang/python/config.el +++ b/modules/lang/python/config.el @@ -104,6 +104,12 @@ (bound-and-true-p lsp--buffer-deferred) (not (executable-find python-shell-interpreter t))) (anaconda-mode +1)))) + + (add-hook! 'eglot-server-initialized-hook + (defun +python-disable-anaconda-mode-h (&rest _) + "Ensure `anaconda-mode' doesn't interfere with `eglot'." + (when (bound-and-true-p anaconda-mode) + (anaconda-mode -1)))) :config (set-company-backend! 'anaconda-mode '(company-anaconda)) (set-lookup-handlers! 'anaconda-mode diff --git a/modules/tools/lsp/+lsp.el b/modules/tools/lsp/+lsp.el index 96361aae4..ecb2907d8 100644 --- a/modules/tools/lsp/+lsp.el +++ b/modules/tools/lsp/+lsp.el @@ -54,9 +54,6 @@ Can be a list of backends; accepts any value `company-backends' accepts.") lsp-xml-jar-file (expand-file-name "org.eclipse.lsp4xml-0.3.0-uber.jar" lsp-server-install-dir) lsp-groovy-server-file (expand-file-name "groovy-language-server-all.jar" lsp-server-install-dir)) - ;; REVIEW Remove this once this is fixed upstream. - (add-to-list 'lsp-client-packages 'lsp-racket) - (add-hook! 'doom-escape-hook (defun +lsp-signature-stop-maybe-h () "Close the displayed `lsp-signature'." diff --git a/modules/tools/rgb/README.org b/modules/tools/rgb/README.org deleted file mode 100644 index 5e35fb60b..000000000 --- a/modules/tools/rgb/README.org +++ /dev/null @@ -1,61 +0,0 @@ -#+title: :tools rgb -#+subtitle: Creating color strings -#+created: May 06, 2020 -#+since: 21.12.0 - -#+begin_quote -  *This module is deprecated.* The module is too trivial to warrant a module. -#+end_quote - -* Description :unfold: -Highlights color hex values and names with the color itself, and provides tools -to easily modify color values or formats. - -** Maintainers -/This module has no dedicated maintainers./ [[doom-contrib-maintainer:][Become a maintainer?]] - -** Module flags -/This module has no flags./ - -** Packages -- [[doom-package:kurecolor]] -- [[doom-package:rainbow-mode]] - -** Hacks -/No hacks documented for this module./ - -* Installation -[[id:01cffea4-3329-45e2-a892-95a384ab2338][Enable this module in your ~doom!~ block.]] - -/This module has no external requirements./ - -* Usage -=rainbow-mode= provides automatic highlighting to hex color codes, and in -relevant modes, color names (e.g. html color names in =css-mode= or LaTeX color -names in =latex-mode=) - -=kurecolor= provides commands to easily change the brightness, saturation, and -hue of hex colors (and a useful hydra for this, if =:ui hydra= is enabled), as -well as conversion between hex and css colors - -* Configuration -=hl-line-mode= overrides the color highlighting of =rainbow-mode=, limiting the -use of that plugin and on-site color changes using =kurecolor=. To automatically -disable it only when =rainbow-mode= is active, you can add the following hook: - -#+begin_src emacs-lisp -;; in $DOOMDIR/config.el -(add-hook! 'rainbow-mode-hook - (hl-line-mode (if rainbow-mode -1 +1))) -#+end_src - -* Troubleshooting -/There are no known problems with this module./ [[doom-report:][Report one?]] - -* Frequently asked questions -/This module has no FAQs yet./ [[doom-suggest-faq:][Ask one?]] - -* TODO Appendix -#+begin_quote - 󱌣 This module has no appendix yet. [[doom-contrib-module:][Write one?]] -#+end_quote diff --git a/modules/tools/rgb/autoload.el b/modules/tools/rgb/autoload.el deleted file mode 100644 index cc392df02..000000000 --- a/modules/tools/rgb/autoload.el +++ /dev/null @@ -1,14 +0,0 @@ -;;; tools/rgb/autoload.el -*- lexical-binding: t; -*- -;;;###if (modulep! :ui hydra) - -;;;###autoload (autoload '+rgb/kurecolor-hydra/body "tools/rgb/autoload" nil t) -(defhydra +rgb/kurecolor-hydra (:color pink :hint nil) - " -Inc/Dec _w_/_W_ brightness _d_/_D_ saturation _e_/_E_ hue " - ("w" kurecolor-decrease-brightness-by-step) - ("W" kurecolor-increase-brightness-by-step) - ("d" kurecolor-decrease-saturation-by-step) - ("D" kurecolor-increase-saturation-by-step) - ("e" kurecolor-decrease-hue-by-step) - ("E" kurecolor-increase-hue-by-step) - ("q" nil "cancel" :color blue)) diff --git a/modules/tools/rgb/packages.el b/modules/tools/rgb/packages.el deleted file mode 100644 index c6cb355cb..000000000 --- a/modules/tools/rgb/packages.el +++ /dev/null @@ -1,5 +0,0 @@ -;; -*- no-byte-compile: t; -*- -;;; tools/rgb/packages.el - -(package! rainbow-mode :pin "0740f31f300982534183a2f60b1918de418a6f2c") -(package! kurecolor :pin "fbf98e1e384dd11bbb5764ae54b36353f0691d1e") diff --git a/modules/tools/taskrunner/README.org b/modules/tools/taskrunner/README.org deleted file mode 100644 index ce5806e95..000000000 --- a/modules/tools/taskrunner/README.org +++ /dev/null @@ -1,61 +0,0 @@ -#+title: :tools taskrunner -#+subtitle: Taskrunner for all your projects -#+created: November 09, 2019 -#+since: 21.12.0 - -#+begin_quote -  *This module is deprecated.* The module is too trivial and taskrunner is no - longer maintained. -#+end_quote - -* Description :unfold: -This module integrates [[doom-package:taskrunner]] into Doom Emacs, which scraps runnable tasks -from build systems like make, gradle, npm and the like. - -** Maintainers -/This module has no dedicated maintainers./ [[doom-contrib-maintainer:][Become a maintainer?]] - -** Module flags -/This module has no flags./ - -** Packages -- [[doom-package:emacs-taskrunner]] -- [[doom-package:helm-taskrunner]] if [[doom-module::completion helm]] -- [[doom-package:ivy-taskrunner]] if [[doom-module::completion ivy]] - -** Hacks -/No hacks documented for this module./ - -** TODO Changelog -# This section will be machine generated. Don't edit it by hand. -/This module does not have a changelog yet./ - -* Installation -[[id:01cffea4-3329-45e2-a892-95a384ab2338][Enable this module in your ~doom!~ block.]] - -/This module has no external requirements./ - -* TODO Usage -#+begin_quote - 󱌣 /This module's usage documentation is incomplete./ [[doom-contrib-module:][Complete it?]] -#+end_quote - -Keybindings: -| Binding | Description | -| ~p z~ | ~List project tasks~ | - -* TODO Configuration -#+begin_quote - 󱌣 This module has no configuration documentation yet. [[doom-contrib-module:][Write some?]] -#+end_quote - -* Troubleshooting -/There are no known problems with this module./ [[doom-report:][Report one?]] - -* Frequently asked questions -/This module has no FAQs yet./ [[doom-suggest-faq:][Ask one?]] - -* TODO Appendix -#+begin_quote - 󱌣 This module has no appendix yet. [[doom-contrib-module:][Write one?]] -#+end_quote diff --git a/modules/tools/taskrunner/autoload.el b/modules/tools/taskrunner/autoload.el deleted file mode 100644 index bbc09d0d1..000000000 --- a/modules/tools/taskrunner/autoload.el +++ /dev/null @@ -1,9 +0,0 @@ -;;; app/taskrunner/autoload.el -*- lexical-binding: t; -*- - -;;;###autoload -(defun +taskrunner/project-tasks () - "Invokes `ivy-taskrunner' or `helm-tasksrunner', depending on which is -available." - (interactive) - (cond ((modulep! :completion ivy) (ivy-taskrunner)) - ((modulep! :completion helm) (helm-taskrunner)))) diff --git a/modules/tools/taskrunner/config.el b/modules/tools/taskrunner/config.el deleted file mode 100644 index 318da3653..000000000 --- a/modules/tools/taskrunner/config.el +++ /dev/null @@ -1,14 +0,0 @@ -;;; tools/taskrunner/config.el -*- lexical-binding: t; -*- - -(after! taskrunner - (set-popup-rule! taskrunner--buffer-name-regexp :quit t)) - -(use-package! helm-taskrunner - :when (modulep! :completion helm) - :defer t - :config (helm-taskrunner-minor-mode +1)) - -(use-package! ivy-taskrunner - :when (modulep! :completion ivy) - :defer t - :config (ivy-taskrunner-minor-mode +1)) diff --git a/modules/tools/taskrunner/packages.el b/modules/tools/taskrunner/packages.el deleted file mode 100644 index 284de40fc..000000000 --- a/modules/tools/taskrunner/packages.el +++ /dev/null @@ -1,14 +0,0 @@ -;; -*- no-byte-compile: t; -*- -;;; tools/taskrunner/packages.el - -(package! taskrunner :pin "716323aff410b4d864d137c9ebe4bbb5b8587f5e") - -(when (modulep! :completion helm) - (package! helm-taskrunner - :pin "70ef8117aafdc01a1f06151a82cecb9a2fcf4d32" - :recipe (:host github :repo "emacs-taskrunner/helm-taskrunner"))) - -(when (modulep! :completion ivy) - (package! ivy-taskrunner - :pin "c731ee6279f65061ef70e79d3818ea1d9678e6da" - :recipe (:host github :repo "emacs-taskrunner/ivy-taskrunner"))) diff --git a/templates/init.example.el b/templates/init.example.el index cef45ecb3..e1b3dc6e6 100644 --- a/templates/init.example.el +++ b/templates/init.example.el @@ -102,8 +102,6 @@ ;;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 ;;tree-sitter ; syntax and parsing, sitting in a tree... @@ -188,7 +186,6 @@ ;;everywhere ; *leave* Emacs!? You must be joking ;;irc ; how neckbeards socialize ;;(rss +org) ; emacs as an RSS reader - ;;twitter ; twitter client https://twitter.com/vnought :config ;;literate