aboutsummaryrefslogtreecommitdiff
path: root/emacs/emacs.el
diff options
context:
space:
mode:
Diffstat (limited to 'emacs/emacs.el')
-rw-r--r--emacs/emacs.el162
1 files changed, 162 insertions, 0 deletions
diff --git a/emacs/emacs.el b/emacs/emacs.el
new file mode 100644
index 00000000..cd4ba72d
--- /dev/null
+++ b/emacs/emacs.el
@@ -0,0 +1,162 @@
+;; symlink this file to ~/.emacs
+
+;; if you get "End of file during parsing", refer to:
+;;
+;; https://github.com/radian-software/straight.el#debugging
+;;
+;; , particularly the note "Sometimes, in a corporate environment"... you
+;; might need to clone straight.el into ~/.emacs.d manually
+
+(defvar bootstrap-version)
+(let ((bootstrap-file
+ (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
+ (bootstrap-version 6))
+ (unless (file-exists-p bootstrap-file)
+ (with-current-buffer
+ (url-retrieve-synchronously
+ "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
+ 'silent 'inhibit-cookies)
+ (goto-char (point-max))
+ (eval-print-last-sexp)))
+ (load bootstrap-file nil 'nomessage))
+
+;; Nicer defaults
+
+(setq compilation-scroll-output t)
+(setq column-number-mode t)
+(setq-default show-trailing-whitespace t)
+
+;; From https://www.emacswiki.org/emacs/SmoothScrolling#h5o-8
+(setq scroll-step 1)
+(setq scroll-conservatively 10000)
+(setq auto-window-vscroll nil)
+
+;; Colorblind friendly theme.
+;; Emacs 28 has modus themes, but EL9 only has emacs 27
+
+(straight-use-package 'modus-themes)
+(require 'modus-themes)
+(load-theme 'modus-operandi :no-confirm)
+
+;; Install xclip so cutting/copying in Emacs on a terminal affects the graphical clipboard
+
+(straight-use-package 'xclip)
+(xclip-mode 1)
+
+;; Fancy undo
+
+(straight-use-package 'undo-tree)
+(global-undo-tree-mode)
+(setq undo-tree-visualizer-diff t)
+(setq undo-tree-visualizer-timestamp t)
+(setq undo-tree-auto-save-history t)
+
+;; Do not spill temporary files everywhere
+
+;; https://stackoverflow.com/a/18330742
+(defvar --backup-directory (concat user-emacs-directory "backups"))
+(if (not (file-exists-p --backup-directory))
+ (make-directory --backup-directory t))
+(setq backup-directory-alist `(("." . ,--backup-directory)))
+
+;; https://www.reddit.com/r/emacs/comments/tejte0/undotree_bug_undotree_files_scattering_everywhere/?rdt=39892
+(setq undo-tree-history-directory-alist '(("." . "~/.emacs.d/undo")))
+
+;; nicer completion UI
+
+(straight-use-package 'helm)
+
+(global-set-key (kbd "M-x") #'helm-M-x)
+(global-set-key (kbd "C-x C-f") #'helm-find-files)
+(global-set-key (kbd "C-x C-b") #'helm-mini)
+
+(setq helm-ff-skip-boring-files t)
+
+;; nicer project support
+
+(straight-use-package 'projectile)
+(straight-use-package 'helm-projectile)
+
+(projectile-mode +1)
+(define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map)
+(helm-projectile-on)
+
+;; LSP base for Rust and Java
+
+(straight-use-package 'lsp-mode)
+(straight-use-package 'company-mode)
+(straight-use-package 'lsp-ui)
+(straight-use-package 'yasnippet)
+
+(add-hook 'java-mode-hook (lambda ()
+ (setq c-basic-offset 2
+ indent-tabs-mode f)))
+
+(yas-global-mode 1)
+
+;; Rust support
+
+(straight-use-package 'rust-mode)
+(add-hook 'rust-mode-hook #'lsp)
+(add-hook 'rust-mode-hook
+ (lambda () (setq indent-tabs-mode nil)))
+(setq rust-format-on-save t)
+
+;; Python support
+
+(straight-use-package 'elpy)
+(elpy-enable)
+
+;;; Java Support
+
+(straight-use-package 'lsp-java)
+(add-hook 'java-mode-hook 'lsp)
+
+;; YAML support
+
+(straight-use-package 'yaml-mode)
+
+;; lsp-mode seems unusably slow, so don't install the Ansible language server
+;; if you want to get it working, try https://www.reddit.com/r/emacs/comments/ybbkks/how_to_properly_set_up_lsp_ansible_language/itfxoaa/
+
+(straight-use-package 'ansible)
+(add-hook 'yaml-mode-hook 'ansible)
+
+;; Puppet support; mostly for syntax highlighting
+
+(straight-use-package 'puppet-mode)
+
+;; ==== WORK ====
+
+;; Abbrevs for work, declared in emacs.el for version control
+
+(clear-abbrev-table global-abbrev-table)
+
+(progn
+ (when (boundp 'daoc-mode-abbrev-table)
+ (clear-abbrev-table adoc-mode-abbrev-table))
+ (define-abbrev-table 'adoc-mode-abbrev-table
+ '(
+ ("oomit" "_...output omitted..._")
+)))
+
+(set-default 'abbrev-mode t)
+
+(setq save-abbrevs nil)
+
+;; AsciiDoc + Vale + Aspell support for work
+
+(straight-use-package 'adoc-mode)
+
+(straight-use-package
+ '(flymake-vale :type git :host github :repo "tpeacock19/flymake-vale"))
+
+(add-hook 'adoc-mode-hook #'flymake-vale-load)
+(add-hook 'find-file-hook 'flymake-vale-maybe-load)
+(add-hook 'adoc-mode-hook 'flymake-mode)
+
+(straight-use-package 'flymake-aspell)
+(add-hook 'adoc-mode-hook #'flymake-aspell-setup)
+(setq ispell-dictionary "en_US-RH")
+
+(add-hook 'adoc-mode-hook (lambda () (setq flymake-aspell-aspell-mode "asciidoc")))