From b5e8c2052c43e9865aad35380ff0b36cabae19d2 Mon Sep 17 00:00:00 2001 From: David Morgan Date: Wed, 26 May 2021 10:06:56 +0000 Subject: Add emacs prelude config --- emacs-prelude/personal/.dir-locals.el | 5 ++ emacs-prelude/personal/.gitkeep | 0 emacs-prelude/personal/custom.el | 14 ++++ emacs-prelude/personal/lisp/init-clojure.el | 35 ++++++++ emacs-prelude/personal/lisp/init-completion.el | 69 +++++++++++++++ emacs-prelude/personal/lisp/init-dashboard.el | 15 ++++ emacs-prelude/personal/lisp/init-hydra.el | 7 ++ emacs-prelude/personal/lisp/init-lisp.el | 13 +++ emacs-prelude/personal/lisp/init-lsp.el | 23 +++++ emacs-prelude/personal/lisp/init-modeline.el | 14 ++++ emacs-prelude/personal/lisp/init-paredit.el | 27 ++++++ emacs-prelude/personal/lisp/init-prelude.el | 22 +++++ emacs-prelude/personal/lisp/init-ui.el | 16 ++++ emacs-prelude/personal/lisp/init-use-package.el | 7 ++ emacs-prelude/personal/lisp/paredit-functions.el | 102 +++++++++++++++++++++++ emacs-prelude/personal/personal.el | 29 +++++++ emacs-prelude/personal/prelude-modules.el | 102 +++++++++++++++++++++++ 17 files changed, 500 insertions(+) create mode 100644 emacs-prelude/personal/.dir-locals.el create mode 100644 emacs-prelude/personal/.gitkeep create mode 100644 emacs-prelude/personal/custom.el create mode 100644 emacs-prelude/personal/lisp/init-clojure.el create mode 100644 emacs-prelude/personal/lisp/init-completion.el create mode 100644 emacs-prelude/personal/lisp/init-dashboard.el create mode 100644 emacs-prelude/personal/lisp/init-hydra.el create mode 100644 emacs-prelude/personal/lisp/init-lisp.el create mode 100644 emacs-prelude/personal/lisp/init-lsp.el create mode 100644 emacs-prelude/personal/lisp/init-modeline.el create mode 100644 emacs-prelude/personal/lisp/init-paredit.el create mode 100644 emacs-prelude/personal/lisp/init-prelude.el create mode 100644 emacs-prelude/personal/lisp/init-ui.el create mode 100644 emacs-prelude/personal/lisp/init-use-package.el create mode 100644 emacs-prelude/personal/lisp/paredit-functions.el create mode 100644 emacs-prelude/personal/personal.el create mode 100644 emacs-prelude/personal/prelude-modules.el diff --git a/emacs-prelude/personal/.dir-locals.el b/emacs-prelude/personal/.dir-locals.el new file mode 100644 index 0000000..69fa3ca --- /dev/null +++ b/emacs-prelude/personal/.dir-locals.el @@ -0,0 +1,5 @@ +;; This will make sure that nothing in your personal directory will be +;; forced through the emacs-lisp-checkdoc flychecker. That's a great +;; checker for real modules, but these are just config files, and you +;; deserve not to get warnings all the time +((emacs-lisp-mode . ((flycheck-disabled-checkers . (emacs-lisp-checkdoc))))) diff --git a/emacs-prelude/personal/.gitkeep b/emacs-prelude/personal/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/emacs-prelude/personal/custom.el b/emacs-prelude/personal/custom.el new file mode 100644 index 0000000..5a298bd --- /dev/null +++ b/emacs-prelude/personal/custom.el @@ -0,0 +1,14 @@ +(custom-set-variables + ;; custom-set-variables was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + '(org-agenda-files '("~/foo.org")) + '(package-selected-packages + '(hydra helm-projectile counsel-projectile ivy-hydra easy-kill-extras paredit-functions eval-expr lsp clj-refactor flycheck-clj-kondo yasnippet paredit dashboard doom-modeline minions all-the-icons helm emacs-dashboard company-quickhelp company-box company-prescient ivy-prescient yaml-mode web-mode lsp-ui lsp-mode json-mode js2-mode rainbow-mode elisp-slime-nav cider clojure-mode rainbow-delimiters company counsel swiper ivy exec-path-from-shell zop-to-char zenburn-theme which-key volatile-highlights undo-tree super-save smartrep smartparens operate-on-number nlinum move-text magit projectile imenu-anywhere hl-todo guru-mode gitignore-mode gitconfig-mode git-timemachine gist flycheck expand-region epl editorconfig easy-kill diminish diff-hl discover-my-major crux browse-kill-ring anzu ag ace-window))) +(custom-set-faces + ;; custom-set-faces was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + '(aw-leading-char-face ((t (:foreground "white" :background "red" :weight bold :height 2.5 :box (:line-width 10 :color "red")))))) diff --git a/emacs-prelude/personal/lisp/init-clojure.el b/emacs-prelude/personal/lisp/init-clojure.el new file mode 100644 index 0000000..174dffd --- /dev/null +++ b/emacs-prelude/personal/lisp/init-clojure.el @@ -0,0 +1,35 @@ +(require 'init-lisp) + +(prelude-require-package 'yasnippet) +(use-package yasnippet + :diminish yas) + +(prelude-require-package 'flycheck-clj-kondo) +(use-package clojure-mode + :config + (require 'flycheck-clj-kondo)) + +(prelude-require-package 'clj-refactor) +(use-package clj-refactor + :diminish + :bind ("C-c '" . hydra-cljr-help-menu/body) + :config + (cljr-add-keybindings-with-prefix "C-c C-m") + (setq cljr-suppress-no-project-warning t) + :hook + (clojure-mode . + (lambda () + (clj-refactor-mode 1) + (yas-minor-mode 1)))) + +(use-package cider + :config + (setq cider-repl-pop-to-buffer-on-connect 'display-only + cider-repl-display-help-banner nil + cider-repl-history-highlight-current-entry t + cider-repl-history-highlight-inserted-item t + cider-repl-use-clojure-font-lock t + cider-repl-use-pretty-printing t)) + +(provide 'init-clojure) + diff --git a/emacs-prelude/personal/lisp/init-completion.el b/emacs-prelude/personal/lisp/init-completion.el new file mode 100644 index 0000000..c34ea45 --- /dev/null +++ b/emacs-prelude/personal/lisp/init-completion.el @@ -0,0 +1,69 @@ +(setq tab-always-indent 'complete) + +(use-package company + :bind (("M-/" . company-complete)) + :hook (after-init . company-tng-mode) + :config + (global-company-mode) + (setq company-idle-delay 0.3 + company-selection-wrap-around t + company-show-numbers t + company-tooltip-align-annotations t + company-require-match nil)) + +(prelude-require-package 'company-quickhelp) +(use-package company-quickhelp + :diminish + :hook (global-company-mode . company-quickhelp-mode)) + +(prelude-require-package 'company-box) +(use-package company-box + :diminish + :hook (company-mode . company-box-mode) + :config + (setq company-box-backends-colors nil ;; TODO why? + company-box-doc-delay 0.3)) + +(prelude-require-package 'ivy-prescient) +(use-package ivy-prescient + :diminish + :config + (ivy-prescient-mode 1)) + +(prelude-require-package 'company-prescient) +(use-package company-prescient + :diminish + :config + (company-prescient-mode 1)) + +(use-package counsel + :diminish ivy-mode counsel-mode + :config + (setq counsel-grep-base-command "rg -i -M 120 --no-heading --line-number --color never '%s' %s" + counsel-rg-base-command "rg -i -M 120 --no-heading --line-number --color never '%s' %s") + :bind (("C-c h" . counsel-command-history) + ;("C-c i" . counsel-git) + ;("C-c j" . counsel-git-grep) + ("C-c c g" . counsel-grep) + ("C-c c r" . counsel-rg) + ("C-c c o" . counsel-outline) + ("C-c z" . counsel-fzf) + ("C-c c z" . counsel-fzf) + ("C-c c a" . counsel-apropos) + ("C-c c f" . counsel-recentf) + ("C-c C-f" . counsel-recentf) + :map counsel-mode-map + ([remap swiper] . counsel-grep-or-swiper) + ([remap swiper-backward] . counsel-grep-or-swiper-backward) + ;([remap recentf-open-files] . counsel-recentf) + ([remap dired] . counsel-dired)) + :hook ((after-init . ivy-mode) + (ivy-mode . counsel-mode))) + +(prelude-require-package 'counsel-projectile) +(use-package counsel-projectile + :config + (counsel-projectile-mode)) + +(provide 'init-completion) + diff --git a/emacs-prelude/personal/lisp/init-dashboard.el b/emacs-prelude/personal/lisp/init-dashboard.el new file mode 100644 index 0000000..7256c37 --- /dev/null +++ b/emacs-prelude/personal/lisp/init-dashboard.el @@ -0,0 +1,15 @@ +(prelude-require-package 'dashboard) +(use-package dashboard + :init + (setq dashboard-center-content t + dashboard-set-footer nil + dashboard-items '((recents . 5) + (bookmarks . 5) + (projects . 5) + (agenda . 5) + (registers . 5))) + :config + (dashboard-setup-startup-hook)) + +(provide 'init-dashboard) + diff --git a/emacs-prelude/personal/lisp/init-hydra.el b/emacs-prelude/personal/lisp/init-hydra.el new file mode 100644 index 0000000..706df45 --- /dev/null +++ b/emacs-prelude/personal/lisp/init-hydra.el @@ -0,0 +1,7 @@ +(prelude-require-package 'hydra) +(use-package hydra) + +;(prelude-require-package 'ivy-hydra) +;(use-package ivy-hydra) + +(provide 'init-hydra) diff --git a/emacs-prelude/personal/lisp/init-lisp.el b/emacs-prelude/personal/lisp/init-lisp.el new file mode 100644 index 0000000..e09c882 --- /dev/null +++ b/emacs-prelude/personal/lisp/init-lisp.el @@ -0,0 +1,13 @@ +(require 'init-paredit) + +(prelude-require-package 'eval-expr) +(use-package eval-expr + :bind ("M-:" . eval-expr) + :config + (defun eval-expr-minibuffer-setup () + (local-set-key (kbd "") #'completion-at-point) + (set-syntax-table emacs-lisp-mode-syntax-table) + (paredit-mode))) + +(provide 'init-lisp) + diff --git a/emacs-prelude/personal/lisp/init-lsp.el b/emacs-prelude/personal/lisp/init-lsp.el new file mode 100644 index 0000000..c92ade7 --- /dev/null +++ b/emacs-prelude/personal/lisp/init-lsp.el @@ -0,0 +1,23 @@ +(use-package lsp-mode + :hook (clojure-mode . lsp) + :config + (setq gc-cons-threshold (* 100 1024 1024) + read-process-output-max (* 1024 1024) + treemacs-space-between-root-nodes nil + lsp-ui-doc-delay 1 + lsp-lens-enable nil + lsp-ui-doc-enable t + lsp-ui-doc-show-with-cursor t + lsp-ui-doc-show-with-mouse t + lsp-headerline-breadcrumb-enable nil + lsp-enable-symbol-highlighting t + lsp-ui-sideline-show-diagnostics t + lsp-ui-sideline-show-code-actions nil + lsp-modeline-code-actions-enable nil ;; TODO this causes errors in *Messages* if t + lsp-modeline-diagnostics-enable nil + ;; user cider for indendation and completion instead + lsp-enable-indentation nil + lsp-completion-enable nil)) + +(provide 'init-lsp) + diff --git a/emacs-prelude/personal/lisp/init-modeline.el b/emacs-prelude/personal/lisp/init-modeline.el new file mode 100644 index 0000000..5ae8281 --- /dev/null +++ b/emacs-prelude/personal/lisp/init-modeline.el @@ -0,0 +1,14 @@ +(prelude-require-package 'doom-modeline) +(use-package doom-modeline + :hook (after-init . doom-modeline-mode) + :config ;(add-hook 'after-init-hook #'doom-modeline-mode) + (setq doom-modeline-minor-modes t + doom-modeline-major-mode-icon t)) + +(prelude-require-package 'minions) +(use-package minions + :hook (doom-modeline-mode . minions-mode)) + + +(provide 'init-modeline) + diff --git a/emacs-prelude/personal/lisp/init-paredit.el b/emacs-prelude/personal/lisp/init-paredit.el new file mode 100644 index 0000000..6eb20d8 --- /dev/null +++ b/emacs-prelude/personal/lisp/init-paredit.el @@ -0,0 +1,27 @@ +(defun add-hooks (modes func) + (dolist (mode modes) + (add-hook (intern (concat (symbol-name mode) "-hook")) func))) + +(setq lisp-modes + '(scheme-mode emacs-lisp-mode lisp-mode clojure-mode cider-repl-mode + eval-expression-minibuffer-setup ielm-mode lisp-interaction-mode)) + +(defun add-lisp-hook (func) + (add-hooks lisp-modes func)) + +(prelude-require-package 'paredit) +(use-package paredit + :diminish + :bind (([remap mark-sexp] . sp-mark-sexp) ;; sp does this better! + ("M-[" . paredit-wrap-square)) + :config + (add-lisp-hook #'turn-off-smartparens-mode) + (add-lisp-hook #'enable-paredit-mode)) + +(use-package paredit-functions + :after paredit + :ensure nil + :load-path "~/.emacs.d/personal/lisp/paredit-functions.el") + +(provide 'init-paredit) + diff --git a/emacs-prelude/personal/lisp/init-prelude.el b/emacs-prelude/personal/lisp/init-prelude.el new file mode 100644 index 0000000..a8cb3af --- /dev/null +++ b/emacs-prelude/personal/lisp/init-prelude.el @@ -0,0 +1,22 @@ +;; config for misc packages included with prelude + +(use-package flycheck + :diminish + :config + (global-flycheck-mode)) + +(use-package which-key + :diminish) + +(use-package whitespace + :diminish) + +(use-package ace-window + :diminish + :custom-face + (aw-leading-char-face + ((t (:foreground "white" :background "red" + :weight bold :height 2.5 :box (:line-width 10 :color "red")))))) + +(provide 'init-prelude) + diff --git a/emacs-prelude/personal/lisp/init-ui.el b/emacs-prelude/personal/lisp/init-ui.el new file mode 100644 index 0000000..b40e207 --- /dev/null +++ b/emacs-prelude/personal/lisp/init-ui.el @@ -0,0 +1,16 @@ +;(prelude-require-package 'all-the-icons) + +(toggle-frame-maximized) + +(menu-bar-mode -1) +(tool-bar-mode -1) +(scroll-bar-mode -1) + +(setq whitespace-line-column 120) + +(use-package paren + :config + (show-paren-mode +1)) + +(provide 'init-ui) + diff --git a/emacs-prelude/personal/lisp/init-use-package.el b/emacs-prelude/personal/lisp/init-use-package.el new file mode 100644 index 0000000..35280f5 --- /dev/null +++ b/emacs-prelude/personal/lisp/init-use-package.el @@ -0,0 +1,7 @@ +(prelude-require-package 'use-package) +(require 'use-package) + +(setq use-package-always-ensure t) + +(provide 'init-use-package) + diff --git a/emacs-prelude/personal/lisp/paredit-functions.el b/emacs-prelude/personal/lisp/paredit-functions.el new file mode 100644 index 0000000..12fd4e0 --- /dev/null +++ b/emacs-prelude/personal/lisp/paredit-functions.el @@ -0,0 +1,102 @@ +(with-eval-after-load 'paredit +;; From emacswiki +(defun paredit-barf-all-the-way-backward () + (interactive) + (paredit-split-sexp) + (paredit-backward-down) + (paredit-splice-sexp)) + +(defun paredit-barf-all-the-way-forward () + (interactive) + (paredit-split-sexp) + (paredit-forward-down) + (paredit-splice-sexp) + (if (eolp) (delete-horizontal-space))) + +(defun paredit-slurp-all-the-way-backward () + (interactive) + (catch 'done + (while (not (bobp)) + (save-excursion + (paredit-backward-up) + (if (eq (char-before) ?\() + (throw 'done t))) + (paredit-backward-slurp-sexp)))) + +(defun paredit-slurp-all-the-way-forward () + (interactive) + (catch 'done + (while (not (eobp)) + (save-excursion + (paredit-forward-up) + (if (eq (char-after) ?\)) + (throw 'done t))) + (paredit-forward-slurp-sexp)))) + +(nconc paredit-commands + '("Extreme Barfage & Slurpage" + (("C-M-)") + paredit-slurp-all-the-way-forward + ("(foo (bar |baz) quux zot)" + "(foo (bar |baz quux zot))") + ("(a b ((c| d)) e f)" + "(a b ((c| d)) e f)")) + (("C-M-}" "M-F") + paredit-barf-all-the-way-forward + ("(foo (bar |baz quux) zot)" + "(foo (bar|) baz quux zot)")) + (("C-M-(") + paredit-slurp-all-the-way-backward + ("(foo bar (baz| quux) zot)" + "((foo bar baz| quux) zot)") + ("(a b ((c| d)) e f)" + "(a b ((c| d)) e f)")) + (("C-M-{" "M-B") + paredit-barf-all-the-way-backward + ("(foo (bar baz |quux) zot)" + "(foo bar baz (|quux) zot)")))) + +(paredit-define-keys) +(paredit-annotate-mode-with-examples) +(paredit-annotate-functions-with-examples) + +;; From bodil +;; Inverse M-( +(defun paredit-wrap-round-from-behind () + (interactive) + (forward-sexp -1) + (paredit-wrap-round) + (insert " ") + (forward-char -1)) +(eval-after-load "paredit" + '(define-key paredit-mode-map (kbd "M-)") + 'paredit-wrap-round-from-behind)) + +;; From bodil +;; Duplicate sexp +(defun paredit-duplicate-after-point + () + "Duplicates the content of the line that is after the point." + (interactive) + ;; skips to the next sexp + (while (looking-at " ") + (forward-char)) + (set-mark-command nil) + ;; while we find sexps we move forward on the line + (while (and (<= (point) (car (bounds-of-thing-at-point 'sexp))) + (not (= (point) (line-end-position)))) + (forward-sexp) + (while (looking-at " ") + (forward-char))) + (kill-ring-save (mark) (point)) + ;; go to the next line and copy the sexprs we encountered + (paredit-newline) + (set-mark-command nil) + (yank) + (exchange-point-and-mark))) +(eval-after-load "paredit" + '(define-key paredit-mode-map (kbd "C-c C-d") + 'paredit-duplicate-after-point)) + +(provide 'paredit-functions) + diff --git a/emacs-prelude/personal/personal.el b/emacs-prelude/personal/personal.el new file mode 100644 index 0000000..ca5962d --- /dev/null +++ b/emacs-prelude/personal/personal.el @@ -0,0 +1,29 @@ +(add-to-list 'load-path (expand-file-name "personal/lisp" user-emacs-directory)) + +;; TODO persp/perspective/projectile-persp, dired/counsel-dired/..?, lsp-ivy +(require 'init-use-package) +(require 'init-prelude) +(require 'init-ui) +(require 'init-hydra) +(require 'init-modeline) +;(require 'init-dashboard) +(require 'init-completion) +(require 'init-lisp) +(require 'init-clojure) +(require 'init-lsp) + +(global-unset-key (kbd "")) +(global-unset-key (kbd "")) +(global-unset-key (kbd "")) +(global-unset-key (kbd "")) +(global-unset-key (kbd "")) +(global-unset-key (kbd "")) +(global-unset-key (kbd "")) +(global-unset-key (kbd "")) +(global-unset-key (kbd "")) +(global-unset-key (kbd "")) +(global-unset-key (kbd "")) +(global-unset-key (kbd "")) +(global-unset-key (kbd "")) +(global-unset-key (kbd "")) + diff --git a/emacs-prelude/personal/prelude-modules.el b/emacs-prelude/personal/prelude-modules.el new file mode 100644 index 0000000..9f0ec13 --- /dev/null +++ b/emacs-prelude/personal/prelude-modules.el @@ -0,0 +1,102 @@ +;;; prelude-modules.el --- A listing of modules to load on startup +;; +;; Copyright © 2011-2021 Bozhidar Batsov +;; +;; Author: Bozhidar Batsov +;; URL: https://github.com/bbatsov/prelude + +;; This file is not part of GNU Emacs. + +;;; Commentary: + +;; This file is just a list of Prelude modules to load on startup. +;; For convenience the modules are grouped in several categories. +;; The prelude-modules.el in the samples folder should be copied +;; to your personal folder and edited there. + +;; Note that some modules can't be used together - e.g. you shouldn't +;; enable both prelude-ido and prelude-ivy, as they serve the same +;; purpose. + +;;; License: + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License +;; as published by the Free Software Foundation; either version 3 +;; of the License, or (at your option) any later version. +;; +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Code: + +;;; Uncomment the modules you'd like to use and restart Prelude afterwards + +;;; General productivity tools + +;; (require 'prelude-ido) ;; Supercharges Emacs completion for C-x C-f and more +(require 'prelude-ivy) ;; A mighty modern alternative to ido +;; (require 'prelude-selectrum) ;; A powerful, yet simple, alternative to ivy +;; (require 'prelude-helm) ;; Interface for narrowing and search +;; (require 'prelude-helm-everywhere) ;; Enable Helm everywhere +(require 'prelude-company) +(require 'prelude-key-chord) ;; Binds useful features to key combinations + +;;; Vim emulation +;; +;; Enable this module if you're fond of vim's keybindings. +;; (require 'prelude-evil) + +;;; Org-mode (a legendary productivity tool that deserves its own category) +;; +;; Org-mode helps you keep TODO lists, notes and more. +(require 'prelude-org) + +;;; Programming languages support +;; +;; Modules for a few very common programming languages +;; are enabled by default. + +(require 'prelude-c) +(require 'prelude-clojure) +;; (require 'prelude-coffee) +;; (require 'prelude-common-lisp) +(require 'prelude-css) +;; (require 'prelude-dart) +(require 'prelude-emacs-lisp) +;; (require 'prelude-erlang) +;; (require 'prelude-elixir) +;; (require 'prelude-go) +;; (require 'prelude-haskell) +(require 'prelude-js) +;; (require 'prelude-latex) +(require 'prelude-lisp) ;; Common setup for Lisp-like languages +(require 'prelude-lsp) ;; Base setup for the Language Server Protocol +;; (require 'prelude-lua) +;; (require 'prelude-ocaml) +;; (require 'prelude-perl) +;; (require 'prelude-python) +;; (require 'prelude-racket) +;; (require 'prelude-ruby) +;; (require 'prelude-rust) +;; (require 'prelude-scala) +;; (require 'prelude-scheme) +(require 'prelude-shell) +;; (require 'prelude-scss) +;; (require 'prelude-ts) +(require 'prelude-web) ;; Emacs mode for web templates +(require 'prelude-xml) +(require 'prelude-yaml) + +;;; Misc +;; (require 'prelude-erc) ;; A popular Emacs IRC client (useful if you're still into Freenode) + +(provide 'prelude-modules) +;;; prelude-modules.el ends here -- cgit 1.4.1-2-gfad0