config.org (12836B)
1 #+TITLE: Ryan Jeffrey's Emacs config 2 #+AUTHOR: Ryan Jeffrey 3 #+EMAIL: pwishie@gmail.com 4 #+OPTIONS: num:nil 5 * Emacs 6 ** init 7 #+BEGIN_SRC emacs-lisp 8 9 (eval-when-compile 10 (require 'use-package)) 11 12 (defalias 'yes-or-no-p 'y-or-n-p) 13 14 (set-frame-parameter (selected-frame) 'alpha '(80 . 80)) 15 (add-to-list 'default-frame-alist '(alpha . (80 . 80))) 16 17 #+END_SRC 18 ** font and theme 19 #+BEGIN_SRC emacs-lisp 20 21 (add-to-list 'load-path "~/.emacs.d/lisp/") 22 23 (setq x-gtk-use-system-tooltips nil) 24 25 ;; font 26 (if (string= system-name "Southpark") 27 (add-to-list 'default-frame-alist 28 '(font . "Hasklig:size=20:antialias=false:autohint=true:family=mono")) 29 (add-to-list 'default-frame-alist 30 '(font . "Hasklig:size=16:antialias=false:autohint=true:family=mono"))) 31 32 (use-package prettify-symbols-mode 33 :init 34 (defconst lisp--prettify-symbols-alist 35 '(("lambda" . ?λ))) 36 :hook 37 (lisp-mode)) 38 39 40 (add-to-list 'load-path "~/.emacs.d/themes/") 41 42 (setq modus-vivendi-theme-slanted-constructs nil 43 modus-vivendi-theme-bold-constructs nil 44 modus-vivendi-theme-visible-fringes nil 45 modus-vivendi-theme-subtle-diffs nil 46 modus-vivendi-theme-distinct-org-blocks nil 47 modus-vivendi-theme-proportional-fonts nil 48 modus-vivendi-theme-scale-headings nil 49 modus-vivendi-theme-scale-1 1 50 modus-vivendi-theme-scale-2 1 51 modus-vivendi-theme-scale-3 1 52 modus-vivendi-theme-scale-4 1) 53 54 (use-package modus-vivendi-theme 55 :ensure t) 56 (use-package modus-operandi-theme 57 :ensure t) 58 (load-theme 'modus-vivendi t) 59 60 (global-set-key (kbd "M-S-<up>") 'text-scale-increase) 61 (global-set-key (kbd "M-S-<down>") 'text-scale-decrease) 62 (scroll-bar-mode nil) 63 64 (use-package shr 65 :commands (eww 66 eww-browse-url) 67 :config 68 ;(setq browse-url-browser-function 'eww-browse-url) 69 (setq shr-use-fonts nil) 70 (setq shr-use-colors nil) 71 (setq shr-max-image-proportion 0.2) 72 (setq shr-width (current-fill-column))) 73 74 75 #+END_SRC 76 ** swiper 77 #+BEGIN_SRC emacs-lisp 78 (use-package swiper 79 :init 80 (global-set-key (kbd "C-s") 'swiper) 81 :ensure t) 82 83 (use-package counsel 84 :ensure t) 85 86 #+END_SRC 87 88 ** Misc 89 #+BEGIN_SRC emacs-lisp 90 (setq tty-menu-open-use-tmm t) 91 (global-set-key [f10] 'tmm-menubar) 92 (put 'upcase-region 'disabled nil) 93 (electric-pair-mode t) 94 (show-paren-mode 1) 95 (setq-default indent-tabs-mode nil) 96 (setq-default tab-width 4) 97 (setq column-number-mode t) 98 (display-time-mode 1) 99 (tool-bar-mode -1) 100 (menu-bar-mode -1) 101 (scroll-bar-mode -1) 102 (setq ring-bell-function 'ignore) 103 (blink-cursor-mode 0) 104 (set-language-environment "UTF-8") 105 (setq redisplay-dont-pause t) 106 (setq vc-follow-symlinks t) ; Otherwise emacs asks 107 108 ;; TODO Smithetsz 109 (global-set-key (kbd "M-SPC") #'(lambda () 110 (interactive) 111 (search-forward "<++>") 112 (delete-backward-char 4))) 113 114 115 #+END_SRC 116 117 ** Filename-mode associations, modes for specific file types 118 #+BEGIN_SRC emacs-lisp 119 120 (use-package conf-mode 121 :init 122 (add-to-list 'auto-mode-alist '("/sxhkdrc\\'" . conf-unix-mode)) 123 (add-to-list 'auto-mode-alist '("/zshrc\\'" . shell-script-mode)) 124 (add-to-list 'auto-mode-alist '("\\config\\'" . conf-mode)) 125 (add-to-list 'auto-mode-alist '("\\.Xdefaults'" . conf-xdefaults-mode)) 126 (add-to-list 'auto-mode-alist '("\\.Xresources'" conf-xdefaults-mode)) 127 (add-to-list 'auto-mode-alist '("\\.Xdefaults'" . conf-xdefaults-mode))) 128 129 130 (use-package systemd 131 :ensure t 132 :mode (("\\.service\\'" . systemd-mode))) 133 134 (use-package fish-mode 135 :ensure t 136 :mode (("\\.fish\\'" . fish-mode))) 137 138 (use-package rust-mode 139 :ensure t 140 :mode (("\\.rs\\'" . rust-mode))) 141 142 #+END_SRC 143 ** joestar 144 #+BEGIN_SRC emacs-lisp 145 (use-package undo-tree 146 :ensure t) 147 (use-package highlight 148 :ensure t) 149 (use-package joestar 150 :load-path 151 "~/.emacs.d/joestar/" 152 :init 153 (progn 154 (defvar undo-tree-map 155 (let ((map (make-sparse-keymap))) 156 ;; remap `undo' and `undo-only' to `undo-tree-undo' 157 (define-key map [remap undo] 'undo-tree-undo) 158 (define-key map [remap undo-only] 'undo-tree-undo) 159 ;; bind standard undo bindings (since these match redo counterparts) 160 (define-key map (kbd "C-/") 'undo-tree-undo) 161 (define-key map "\C-_" 'undo-tree-undo) 162 ;; redo doesn't exist normally, so define our own keybindings 163 (define-key map (kbd "C-?") 'undo-tree-redo) 164 (define-key map (kbd "M-_") 'undo-tree-redo) 165 ;; just in case something has defined `redo'... 166 (define-key map [remap redo] 'undo-tree-redo) 167 ;; we use "C-x u" for the undo-tree visualizer 168 (define-key map (kbd "s-x u") 'undo-tree-visualize) 169 ;; bind register commands 170 (define-key map (kbd "s-x r u") 'undo-tree-save-state-to-register) 171 (define-key map (kbd "s-x r U") 'undo-tree-restore-state-from-register) 172 ;; set keymap 173 (setq undo-tree-map map))))) 174 175 (global-joestar-mode) 176 177 ;; global move window keys so non joestar buffers can still have these bindings 178 (global-set-key (kbd "M-<left>") #'(lambda () 179 (interactive) 180 (other-window -1))) 181 182 (global-set-key (kbd "M-<right>") #'(lambda () 183 (interactive) 184 (other-window 1))) 185 186 (global-set-key (kbd "S-<right>") 'joe-nbuf) 187 (global-set-key (kbd "S-<left>") 'joe-pbuf) 188 189 190 #+END_SRC 191 ** markdown 192 #+begin_src emacs-lisp 193 194 (use-package markdown-mode 195 :ensure t 196 :mode (("README\\.md\\'" . gfm-mode) 197 ("\\.md\\'" . markdown-mode) 198 ("\\.markdown\\'" . markdown-mode)) 199 :init (setq markdown-command "multimarkdown")) 200 201 #+end_src 202 ** org 203 #+BEGIN_SRC emacs-lisp 204 205 (use-package org 206 :init 207 (setq org-src-preserve-indentation nil 208 org-edit-src-content-indentation 0) 209 (require 'org-tempo) 210 (add-hook 'org-mode-hook 'toggle-truncate-lines) 211 (setq org-src-tab-acts-natively t) 212 :bind (:map org-mode-map 213 ("M-S-<up>" . 'text-scale-increase) 214 ("M-S-<down>" . 'text-scale-decrease))) 215 216 (use-package org-indent-mode 217 :config 218 (org-indent-mode t) 219 :hook org-mode) 220 221 (use-package org-bullets 222 :ensure t) 223 224 (use-package wc-mode 225 :ensure t 226 :hook org-mode) 227 228 (use-package display-line-numbers-mode 229 :hook org-mode) 230 231 (use-package company-auctex 232 :ensure t) 233 234 ;; Configuring LaTeX must be done like this because of legacy. 235 (use-package tex-mode 236 :ensure auctex 237 :init 238 (setq TeX-auto-save t) 239 (setq TeX-parse-self t) 240 (setq-default TeX-master nil) 241 (setq-default TeX-engine 'luatex) 242 (setq-default TeX-PDF-mode t) 243 (add-hook 'LaTeX-mode-hook #'flyspell-mode) 244 (add-hook 'LaTeX-mode-hook #'wc-mode) 245 (add-hook 'LaTeX-mode-hook #'display-line-numbers-mode) 246 (add-hook 'LaTeX-mode-hook #'company-auctex-init) 247 (add-hook 'LaTeX-mode-hook #'company-mode) 248 (add-hook 'LaTeX-mode-hook #'TeX-source-correlate-mode) 249 250 (use-package auctex-latexmk 251 :ensure t 252 :init 253 ;(add-to-list 'TeX-command-list "-pvc") 254 (auctex-latexmk-setup) 255 (add-hook 'LaTeX-mode-hook 256 (lambda () 257 (add-hook 'after-save-hook #'(lambda () 258 (TeX-command-master "LaTeX")) nil t))))) 259 260 #+End_src 261 ** vterm 262 #+BEGIN_SRC emacs-lisp 263 (when module-file-suffix 264 (use-package vterm 265 :ensure t 266 :init (setq vterm-always-compile-module t) 267 :bind (:map vterm-mode-map 268 ("M-c" . 'vterm-copy-mode) 269 ("M-i" . 'ido-switch-buffer)))) 270 271 #+END_SRC 272 * IDE 273 ** Clojure 274 #+begin_src emacs-lisp 275 (use-package cider 276 :ensure t 277 :bind (:map cider-mode-map 278 ("M-e" . cider-eval-last-sexp) 279 ("M-r" . cider-eval-region) 280 ) 281 :init 282 (eval-after-load "cider-mode" 283 '(define-key cider-mode-map (kbd "C-x") 'joe-nextword))) 284 285 (use-package clojure-mode 286 :ensure t) 287 #+end_src 288 ** all programming languages 289 *** todos 290 #+BEGIN_SRC emacs-lisp 291 (use-package fic-mode 292 :ensure t 293 :init (add-hook 'prog-mode-hook 'fic-mode) 294 :config 295 (fic-mode t)) 296 297 #+END_SRC 298 *** company 299 #+begin_src emacs-lisp 300 (use-package company 301 :ensure t 302 :init (add-hook 'prog-mode-hook 'company-mode) 303 :bind (:map company-active-map 304 ("C-n" . company-select-next) 305 ("C-p" . company-select-previous)) 306 :config 307 (setq company-idle-delay 0.3) 308 (setq company-tooltip-align-annotations t) ; aligns annotation to the right hand side 309 (setq company-minimum-prefix-length 1)) 310 #+end_src 311 *** flycheck 312 #+begin_src emacs-lisp 313 (use-package flycheck 314 :ensure t 315 :init (add-hook 'prog-mode-hook 'flycheck-mode)) ; global 316 317 #+end_src 318 319 ** magit 320 #+begin_src emacs-lisp 321 (use-package magit 322 :ensure t 323 :init 324 ; (add-hook 'after-init-hook '(lambda () 325 ; (global-magit-file-mode -1))) 326 ) 327 #+end_src 328 ** Misc 329 #+BEGIN_SRC emacs-lisp 330 (defun insert-current-date () 331 (interactive) 332 (insert (shell-command-to-string "echo -n $(date +%Y-%m-%d)"))) 333 334 (use-package emojify 335 :ensure t 336 :init (global-emojify-mode)) 337 338 (use-package gitignore-mode 339 :ensure t 340 :init 341 (add-to-list 'auto-mode-alist '("\\.gitignore\\'" . gitignore-mode)) ) 342 343 (use-package rainbow-mode 344 :ensure t 345 :hook (web-mode emacs-lisp-mode)) 346 347 (use-package crontab-mode 348 :ensure t) 349 350 #+END_SRC 351 ** html 352 #+BEGIN_SRC emacs-lisp 353 (use-package web-mode 354 :ensure t 355 :config 356 (add-to-list 'auto-mode-alist '("\\.api\\'" . web-mode)) 357 (add-to-list 'auto-mode-alist '("/some/react/path/.*\\.js[x]?\\'" . web-mode)) 358 359 (setq web-mode-markup-indent-offset 2) 360 (setq web-mode-css-indent-offset 2) 361 (setq web-mode-code-indent-offset 2) 362 (setq web-mode-engines-alist 363 '(("php" . "\\.phtml\\'") 364 ("blade" . "\\.blade\\.") 365 ("handlebars" . "\\.handlebars\\'"))) 366 367 (setq web-mode-content-types-alist 368 '(("json" . "/some/path/.*\\.api\\'") 369 ("xml" . "/other/path/.*\\.api\\'") 370 ("jsx" . "/some/react/path/.*\\.js[x]?\\'"))) 371 (setq web-mode-markup-indent-offset 2) 372 (add-to-list 'auto-mode-alist '("\\.phtml\\'" . web-mode)) 373 (add-to-list 'auto-mode-alist '("\\.tpl\\.php\\'" . web-mode)) 374 (add-to-list 'auto-mode-alist '("\\.[agj]sp\\'" . web-mode)) 375 (add-to-list 'auto-mode-alist '("\\.as[cp]x\\'" . web-mode)) 376 (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode)) 377 (add-to-list 'auto-mode-alist '("\\.mustache\\'" . web-mode)) 378 (add-to-list 'auto-mode-alist '("\\.djhtml\\'" . web-mode)) 379 (add-to-list 'auto-mode-alist '("\\.css\\'" . web-mode)) 380 (add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode)) 381 (add-to-list 'auto-mode-alist '("\\.handlebars\\'" . web-mode)) 382 (define-key web-mode-map (kbd "C-n") 'web-mode-tag-match) 383 (setq web-mode-enable-current-column-highlight t) 384 (setq web-mode-enable-current-element-highlight t) 385 (setq web-mode-enable-auto-closing t)) 386 387 (use-package impatient-mode 388 :ensure t 389 :hook web-mode) 390 391 #+END_SRC 392 *** Emmet 393 #+BEGIN_SRC emacs-lisp 394 395 (use-package emmet-mode 396 :ensure t 397 :config 398 (define-key web-mode-map (kbd "C-j") 'emmet-expand-line) 399 (emmet-mode) 400 ; (emmet-preview-mode) 401 :hook web-mode) 402 403 #+END_SRC 404 405 ** C 406 #+begin_src emacs-lisp 407 408 (use-package cc-mode 409 :config 410 (setq c-default-style "linux" 411 c-basic-offset 4) 412 (c-set-offset 'inline-open '0)) 413 414 #+end_src 415 ** JavaScript 416 #+begin_src emacs-lisp 417 (setq js-indent-level 2) 418 (use-package json-mode 419 :ensure t) 420 #+end_src 421 * Text-editor 422 ** spellcheck 423 #+BEGIN_SRC emacs-lisp 424 425 (setq ispell-program-name (executable-find "hunspell")) 426 (setq ispell-local-dictionary "en_US") 427 (setq ispell-local-dictionary-alist 428 '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil nil nil utf-8))) 429 430 (add-hook 'org-mode-hook 'flyspell-mode) 431 432 #+END_SRC 433 ** sudo edit 434 #+BEGIN_SRC emacs-lisp 435 436 (defun er-sudo-edit (&optional arg) 437 "Edit currently visited file as root With a prefix ARG prompt for a file to visit. Will also prompt for a file to visit if current buffer is not visiting a file." 438 (interactive "P") 439 (if (or arg (not buffer-file-name)) 440 (find-file (concat "/sudo:root@localhost:" 441 (ido-read-file-name "Find file(as root): "))) 442 (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name)))) 443 444 #+END_SRC 445 ** misc 446 #+BEGIN_SRC emacs-lisp 447 448 ;; tell emacs not to use the clipboard 449 ;(setq x-select-enable-clipboard nil) 450 451 (global-set-key (kbd "M-i") 'ido-switch-buffer) 452 453 #+END_SRC 454 ** snippets 455 #+begin_src emacs-lisp 456 (use-package yasnippet 457 :ensure t 458 :init 459 (require 'yasnippet) 460 (yas-reload-all) 461 (add-hook 'prog-mode-hook #'yas-minor-mode)) 462 463 (use-package yasnippet-snippets 464 :ensure t) 465 #+end_src 466 * emacs-os 467 #+begin_src emacs-lisp 468 (when 469 (or (string= system-name "Southpark") (string= system-name "Springfield")) 470 (require 'ryan-os)) 471 #+end_src 472 473