Various init file optimizations

This commit is contained in:
Jeremy Dormitzer 2020-01-07 17:04:34 -05:00
parent 12183b916a
commit c3d9832295

View File

@ -10,11 +10,6 @@ Enables lexical binding for everything in init.el:
;;; -*- lexical-binding: t; -*-
#+END_SRC
Requires:
#+BEGIN_SRC emacs-lisp
(require 'json)
#+END_SRC
Variables:
#+BEGIN_SRC emacs-lisp
(setq vc-follow-symlinks t)
@ -61,7 +56,8 @@ Load [[https://github.com/raxod502/straight.el][straight.el]] to manage package
Load org-mode early to [[https://github.com/raxod502/straight.el#the-wrong-version-of-my-package-was-loaded][avoid a version clash]] (but don't load it if the bootstrap file already did):
#+BEGIN_SRC emacs-lisp
(use-package org
:straight org-plus-contrib)
:straight org-plus-contrib
:mode (("\\.org\\'" . org-mode)))
#+END_SRC
* Doom themes
@ -314,11 +310,6 @@ Interfacing with Pass, the "standard Unix password manager". This should also be
#+END_SRC
* Emacs Lisp
Requires:
#+BEGIN_SRC emacs-lisp
(eval-when-compile (require 'subr-x))
#+END_SRC
** Packages
Some helpful ELisp packages:
- [[https://github.com/kiwanami/emacs-deferred][deferred]] is an async API library
@ -360,7 +351,8 @@ Some helpful ELisp packages:
(use-package dash)
(use-package dash-functional)
(use-package f)
(use-package request)
(use-package request
:commands (request request-deferred))
#+END_SRC
** Editing Elisp
@ -1401,8 +1393,8 @@ Set up evil keybindings:
#+BEGIN_SRC emacs-lisp
(use-package evil-org
:after (evil org)
:hook (org-mode . evil-org-mode)
:config
(add-hook 'org-mode-hook #'evil-org-mode)
(add-hook 'evil-org-mode-hook
(lambda ()
(evil-org-set-key-theme
@ -1515,7 +1507,6 @@ Finally, add a helpful agenda-mode hydra:
(general-def '(normal visual motion insert emacs) org-agenda-mode-map "." 'hydra-org-agenda/body))
#+END_SRC
** Exporting
*** HTML
Export to HTML:
@ -1618,7 +1609,9 @@ Display inline images after executing a source block:
Enable async source block execution. Note: this execute the contents of the source block in a separate Emacs process, so blocks that rely on anything defined in init.org or the current Emacs process won't work as expected.
#+BEGIN_SRC emacs-lisp
(use-package ob-async
:straight (ob-async :host github :repo "astahlman/ob-async"))
:straight (ob-async :host github :repo "astahlman/ob-async")
:defer t
:hook (org-mode . (lambda () (require 'ob-async))))
#+END_SRC
** Images
@ -2003,6 +1996,7 @@ Emacs support for the Language Server Protocol
#+BEGIN_SRC emacs-lisp
(use-package lsp-mode
:defer t
:init
(defhydra hydra-lsp (:exit t :hint nil)
"
@ -2069,16 +2063,18 @@ Emacs support for the Language Server Protocol
["Misc."
("T" "Edit template" dap-debug-edit-template)
("h" "Hydra" dap-hydra)])
:commands (dap-mode)
:hook ((python-mode) . dap-mode)
:config
(add-hook 'dap-mode-hook
(lambda ()
(dap-ui-mode 1)
(dap-tooltip-mode 1)))
(require 'dap-python)
:general
(leader-map "cm" 'dap-dispatch)
((normal visual motion) "zd" 'dap-dispatch))
(dap-mode 1)
(dap-ui-mode 1)
(dap-tooltip-mode 1)
(with-eval-after-load 'lsp-clients
(defun lsp-typescript-javascript-tsx-jsx-activate-p (filename major-mode)
"Checks if the javascript-typescript language server should be enabled
@ -2090,34 +2086,6 @@ Emacs support for the Language Server Protocol
(string-suffix-p ".js" filename t))))))
#+END_SRC
* Java
LSP Java uses the Eclipse JDT Language Server as a backend to enable Java IDE features.
#+BEGIN_SRC emacs-lisp
(defun jdormit/set-up-java ()
(lsp-java-enable)
(flycheck-mode t)
(push 'company-lsp company-backends)
(company-mode t)
(lsp-ui-flycheck-enable t)
(set-variable 'c-basic-offset 2)
(lsp-ui-sideline-mode))
(use-package lsp-java
:requires (lsp-ui-flycheck lsp-ui-sideline)
:config
(add-hook 'java-mode-hook 'jdormit/set-up-java)
(setq lsp-inhibit-message t
lsp-java-import-maven-enabled t))
#+END_SRC
Configure Java project sources:
#+BEGIN_SRC emacs-lisp
(setq lsp-java--workspace-folders
(list (expand-file-name "~/src/Automation")
(expand-file-name "~/src/AutomationSharedExecution")
(expand-file-name "~/src/AutomationPlatform")))
#+END_SRC
* Python
#+BEGIN_SRC emacs-lisp
;; (leader-def-key "sp" #'elpy-shell-switch-to-shell)
@ -2285,8 +2253,10 @@ Clj-refactor adds magical refactoring abilities:
Enable Org-mode Clojure evaluation:
#+BEGIN_SRC emacs-lisp
(add-hook 'org-mode-hook
(lambda ()
(require 'ob-clojure)
(setq org-babel-clojure-backend 'cider)
(setq org-babel-clojure-backend 'cider)))
#+END_SRC
Integrate with cljfmt, the Clojure code formatter:
@ -2694,8 +2664,9 @@ Instead of the *GNU Emacs* buffer on startup, display a cool dashboard:
dashboard-startup-banner 'official
dashboard-set-heading-icons t
dashboard-set-file-icons t
dashboard-set-navigator t)
(dashboard-setup-startup-hook))
dashboard-set-navigator t))
(dashboard-setup-startup-hook)
#+END_SRC
For some reason Emacs is starting up with the dashboard and the *scratch* buffer open in a split configuration. Not sure why, but let's put a stop to that...
@ -3296,73 +3267,6 @@ Because emojis make everything better.
(leader-def-key "te" 'emojify-mode)
#+END_SRC
* Mastodon
[[https://joinmastodon.org/][Mastodon]] is a federated FOSS social network similar to Twitter. Let's put it in Emacs!
First, install a dependency:
#+BEGIN_SRC emacs-lisp
(use-package discover)
#+END_SRC
#+BEGIN_SRC emacs-lisp
(defun jdormit/mastodon-setup ()
(general-def 'normal mastodon-mode-map "j" #'mastodon-tl--goto-next-toot)
(general-def 'normal mastodon-mode-map "k" #'mastodon-tl--goto-prev-toot)
(general-def 'normal mastodon-mode-map "h" #'mastodon-tl--next-tab-item)
(general-def 'normal mastodon-mode-map "l" #'mastodon-tl--previous-tab-item)
(general-def 'normal mastodon-mode-map [?\t] #'mastodon-tl--next-tab-item)
(general-def 'normal mastodon-mode-map [backtab] #'mastodon-tl--previous-tab-item)
(general-def 'normal mastodon-mode-map [?\S-\t] #'mastodon-tl--previous-tab-item)
(general-def 'normal mastodon-mode-map [?\M-\t] #'mastodon-tl--previous-tab-item)
;; Navigating to other buffers:
(general-def 'normal mastodon-mode-map "N" #'mastodon-notifications--get)
(general-def 'normal mastodon-mode-map "A" #'mastodon-profile--get-toot-author)
(general-def 'normal mastodon-mode-map "U" #'mastodon-profile--show-user)
(general-def 'normal mastodon-mode-map "F" #'mastodon-tl--get-federated-timeline)
(general-def 'normal mastodon-mode-map "H" #'mastodon-tl--get-home-timeline)
(general-def 'normal mastodon-mode-map "L" #'mastodon-tl--get-local-timeline)
(general-def 'normal mastodon-mode-map "t" #'mastodon-tl--thread)
(general-def 'normal mastodon-mode-map "T" #'mastodon-tl--get-tag-timeline)
(general-def 'normal mastodon-mode-map "q" #'kill-this-buffer)
(general-def 'normal mastodon-mode-map "Q" #'kill-buffer-and-window)
;; Actions
(general-def 'normal mastodon-mode-map "c" #'mastodon-tl--toggle-spoiler-text-in-toot)
(general-def 'normal mastodon-mode-map "g" #'undefined) ;; override special mode binding
(general-def 'normal mastodon-mode-map "n" #'mastodon-toot)
(general-def 'normal mastodon-mode-map "r" #'mastodon-toot--reply)
(general-def 'normal mastodon-mode-map "u" #'mastodon-tl--update)
(general-def 'normal mastodon-mode-map "b" #'mastodon-toot--toggle-boost)
(general-def 'normal mastodon-mode-map "f" #'mastodon-toot--toggle-favourite)
(general-def 'normal mastodon-mode-map "?" #'makey-key-mode-popup-mastodon)
(general-def 'normal mastodon-profile-mode-map "F" #'mastodon-profile--open-followers)
(general-def 'normal mastodon-profile-mode-map "f" #'mastodon-profile--open-following))
(eval-and-compile
(defun mastodon-load-path ()
(expand-file-name "~/mastodon.el/lisp")))
(if (file-exists-p (mastodon-load-path))
(use-package mastodon
:load-path (lambda () (mastodon-load-path))
:init (setq mastodon-instance-url "https://mastodon.technology")
:config
(jdormit/mastodon-setup)
:commands
(mastodon
mastodon-toot))
(use-package mastodon
:init (setq mastodon-instance-url "https://mastodon.technology")
:config
(jdormit/mastodon-setup)
:commands
(mastodon
mastodon-toot)))
(jdormit/define-prefix "aM" "mastodon")
(leader-def-key "aMm" 'mastodon)
(leader-def-key "aMt" 'mastodon-toot)
#+END_SRC
* Calc
#+BEGIN_SRC emacs-lisp
(leader-def-key "ac" 'calc)
@ -3456,7 +3360,7 @@ Or Gnus can read RSS feeds directly:
#+END_SRC
* Dired
Set up a hydra for dired and enable [[info:dired-x#Top][Dired-X]]:
Set up a hydra for dired:
#+BEGIN_SRC emacs-lisp
(use-package dired
:straight (:type built-in)
@ -3491,7 +3395,7 @@ Set up a hydra for dired and enable [[info:dired-x#Top][Dired-X]]:
("G" dired-do-chgrp)
("g" revert-buffer) ;; read all directories again (refresh)
("i" dired-maybe-insert-subdir)
("l" dired-do-redisplay) ;; relist the marked or singel directory
("l" dired-do-redisplay) ;; relist the marked or single directory
("M" dired-do-chmod)
("m" dired-mark)
("O" dired-display-file)
@ -3511,8 +3415,6 @@ Set up a hydra for dired and enable [[info:dired-x#Top][Dired-X]]:
("Z" dired-do-compress)
("q" nil)
("." nil :color blue))
:config
(require 'dired-x)
:general
((normal visual motion insert emacs) dired-mode-map "." 'hydra-dired/body)
(dired-mode-map "SPC" leader-map))
@ -3669,7 +3571,8 @@ An alternative minibuffer completion framework:
(use-package graphviz-dot-mode
:mode (("\\.dot\\'" . graphviz-dot))
:init
(add-to-list 'org-src-lang-modes '("dot" . graphviz-dot)))
(with-eval-after-load 'org
(add-to-list 'org-src-lang-modes '("dot" . graphviz-dot))))
#+END_SRC
** Functions
@ -4326,9 +4229,10 @@ Some functions to make my day job easier.
** Debug configurations (dap)
#+BEGIN_SRC emacs-lisp
(with-eval-after-load 'dap-mode
(dap-register-debug-template
"lola-server"
(list :type "python"
(list :type "python")
:args "bin/start_web.py"
:cwd (expand-file-name "~/lola/lola-server")
:env (extract-vars-from-env-file (expand-file-name "~/lola/lola-server/.env"))
@ -4600,7 +4504,8 @@ Explore APIs from within Emacs!
(add-to-list 'company-backends 'company-restclient))
(use-package ob-restclient
:after (restclient))
:defer t
:hook (org-mode . (lambda () (require 'ob-restclient))))
#+END_SRC
* IMenu