config.org (25305B)
1 #+TITLE: Ryan Jeffrey's Emacs config 2 #+AUTHOR: Ryan Jeffrey 3 #+EMAIL: ryan@ryanmj.xyz 4 #+OPTIONS: num:nil 5 * Emacs 6 ** init 7 #+BEGIN_SRC emacs-lisp 8 (eval-when-compile 9 (require 'use-package)) 10 11 (defalias 'yes-or-no-p 'y-or-n-p) 12 13 #+END_SRC 14 ** quelpa packages 15 #+begin_src emacs-lisp 16 17 (quelpa 18 '(ox-thtml 19 :fetcher git 20 :url "https://github.com/juanjosegarciaripoll/org-thtml")) 21 22 #+end_src 23 ** font and theme 24 #+BEGIN_SRC emacs-lisp 25 26 (add-to-list 'load-path (concat user-emacs-directory "lisp/")) 27 28 (setq x-gtk-use-system-tooltips nil) 29 30 ;; font 31 (when (not (eq system-type 'windows-nt)) 32 (if (string= system-name "Southpark") 33 (add-to-list 'default-frame-alist 34 '(font . "Inconsolata Nerd Font Mono:size=16")) 35 (add-to-list 'default-frame-alist 36 '(font . "Inconsolata Nerd Font Mono:size=16")))) 37 38 (use-package prettify-symbols-mode 39 :init 40 (defconst lisp--prettify-symbols-alist 41 '(("lambda" . ?λ))) 42 :hook 43 (lisp-mode)) 44 45 46 (add-to-list 'load-path (concat user-emacs-directory "/themes/")) 47 (setq custom-safe-themes t) ; Treat all themes as safe 48 (quelpa 49 '(replace-colorthemes 50 :fetcher git 51 :url "https://github.com/emacs-jp/replace-colorthemes")) 52 53 (use-package modus-themes 54 :ensure t 55 :init 56 (setq modus-themes-bold-constructs t 57 modus-themes-mode-line '3d 58 modus-themes-italic-constructs t 59 modus-themes-mixed-fonts nil 60 modus-themes-subtle-line-numbers nil 61 modus-themes-intense-markup t) 62 63 (modus-themes-load-themes) 64 (modus-themes-load-vivendi)) 65 66 (display-time-mode 1) 67 (display-battery-mode 1) 68 (defvar mode-line-modes 69 `(:propertize ("" mode-name) 70 help-echo "Major mode\n\ 71 mouse-1: Display major mode menu\n\ 72 mouse-2: Show help for major mode\n\ 73 mouse-3: Toggle minor modes" 74 mouse-face mode-line-highlight 75 local-map ,mode-line-major-mode-keymap)) 76 ;; Clarity 77 ;; Hober 78 ;; Comidia 79 ;; Dark laptop 80 ;; euphoria 81 ;; late-night 82 ;; ld-dark 83 ;; simple-1 84 ;; subdued 85 ;; TODO make joe theme 86 87 ; arjen 88 ; dark laptop 89 ; euphoria 90 ; simple-1 91 92 #+END_SRC 93 ** swiper 94 #+BEGIN_SRC emacs-lisp 95 (use-package swiper 96 :init 97 (global-set-key (kbd "C-s") 'swiper) 98 :ensure t) 99 100 (use-package counsel 101 :ensure t) 102 103 #+END_SRC 104 105 ** Misc 106 #+BEGIN_SRC emacs-lisp 107 (use-package rainbow-delimiters 108 :ensure t 109 :hook (prog-mode . rainbow-delimiters-mode)) 110 111 (add-hook 'prog-mode-hook #'(lambda () 112 (setq show-trailing-whitespace t))) 113 (save-place-mode 1) 114 (setq tty-menu-open-use-tmm t) 115 (global-set-key [f10] 'tmm-menubar) 116 (put 'upcase-region 'disabled nil) 117 (electric-pair-mode t) 118 (show-paren-mode 1) 119 (setq-default indent-tabs-mode nil) 120 (setq-default tab-width 4) 121 (setq column-number-mode t) 122 (tool-bar-mode -1) 123 (menu-bar-mode -1) 124 (scroll-bar-mode -1) 125 (setq ring-bell-function 'ignore) 126 (blink-cursor-mode 0) 127 (set-language-environment "UTF-8") 128 (setq redisplay-dont-pause t) 129 (setq vc-follow-symlinks t) ; Otherwise emacs asks 130 (setq tramp-terminal-type "tramp") ; See zshrc 131 (add-hook 'after-save-hook #'executable-make-buffer-file-executable-if-script-p) 132 (setq-default truncate-lines t) 133 ;; scroll one line at a time (less "jumpy" than defaults) 134 135 (setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time 136 (setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling 137 (setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse 138 139 (use-package good-scroll 140 :ensure t 141 :init 142 (good-scroll-mode 1)) 143 144 (use-package smooth-scrolling 145 :ensure t 146 :init 147 (setq smooth-scroll-margin 1) 148 (smooth-scrolling-mode 1)) 149 ;; Do not jump scroll 150 (setq auto-window-vscroll nil) 151 (setq scroll-conservatively 10) 152 (setq scroll-margin 1) 153 154 ;; Column 80 fill line. 155 (setq display-fill-column-indicator-column 80) 156 (add-hook 'prog-mode-hook #'display-fill-column-indicator-mode) 157 (add-hook 'org-mode-hook #'display-fill-column-indicator-mode) 158 159 160 (setenv "MANWIDTH" "100") ; For man mode 161 162 ;; Man-mode auto-kill frame on exit. Should only be called from shell. 163 (defun man-mode-shell (man-page) 164 (add-hook 'man-end-hook '(lambda () 165 (setq man-end-hook nil) 166 (delete-frame) 167 (message "Heck"))) 168 (man man-page) 169 (delete-window)) 170 171 ;; TODO Smithets 172 (global-set-key (kbd "M-SPC") #'(lambda () 173 (interactive) 174 (search-forward "<++>") 175 (delete-backward-char 4))) 176 177 (use-package command-log-mode 178 :ensure t) 179 180 #+END_SRC 181 182 ** Filename-mode associations, modes for specific file types 183 #+BEGIN_SRC emacs-lisp 184 185 (use-package conf-mode 186 :init 187 (add-to-list 'auto-mode-alist '("/sxhkdrc\\'" . conf-unix-mode)) 188 (add-to-list 'auto-mode-alist '("/zshrc\\'" . shell-script-mode)) 189 (add-to-list 'auto-mode-alist '("\\config\\'" . conf-mode)) 190 (add-to-list 'auto-mode-alist '("\\.Xdefaults'" . conf-xdefaults-mode)) 191 (add-to-list 'auto-mode-alist '("\\.Xresources'" conf-xdefaults-mode)) 192 (add-to-list 'auto-mode-alist '("\\.Xdefaults'" . conf-xdefaults-mode))) 193 194 195 (use-package systemd 196 :ensure t 197 :mode (("\\.service\\'" . systemd-mode))) 198 199 (use-package fish-mode 200 :ensure t 201 :mode (("\\.fish\\'" . fish-mode))) 202 203 #+END_SRC 204 ** Rust 205 #+BEGIN_SRC emacs-lisp 206 (use-package rustic 207 :ensure t 208 :mode (("\\.rs\\'" . rustic-mode)) 209 :config 210 (setq rustic-format-on-save t)) 211 212 #+END_SRC 213 ** toml 214 #+BEGIN_SRC emacs-lisp 215 216 (use-package toml-mode 217 :ensure t) 218 #+END_SRC 219 ** evil mode 220 #+BEGIN_SRC emacs-lisp 221 (use-package undo-tree 222 :ensure t) 223 (use-package highlight 224 :ensure t) 225 (use-package evil 226 :ensure t 227 :init 228 (setq evil-want-keybinding nil) 229 (global-undo-tree-mode) 230 (setq evil-undo-system 'undo-tree) 231 (evil-mode 1) 232 (use-package evil-collection 233 :ensure t 234 :init 235 (evil-collection-init)) 236 (setq-default evil-cross-lines t) 237 238 ;; Code snippet for color 239 ;;evil-emacs-state-tag (propertize " EMACS " 'face '((:background "turquoise" :foreground "black"))) 240 (setq evil-normal-state-tag (propertize "-COMMAND-" 'face '((:foreground "turquoise"))) 241 evil-emacs-state-tag (propertize "--EMACS--" 'face '((:foreground "blue"))) 242 evil-insert-state-tag (propertize "--INSRT--" 'face '((:foreground "gold"))) 243 evil-replace-state-tag (propertize "-REPLACE-" 'face '((:foreground "cyan"))) 244 evil-motion-state-tag (propertize "--MOTION-" 'face '((:foreground "grey"))) 245 evil-visual-state-tag (propertize "--VISUAL-" 'face '((:foreground "magenta"))) 246 evil-operator-state-tag (propertize " OPERATE-" 'face '((:foreground "grey")))) 247 (setq evil-insert-state-cursor '(bar "green") 248 evil-normal-state-cursor '(box "magenta")) 249 250 (use-package evil-terminal-cursor-changer 251 :ensure t 252 :init 253 (evil-terminal-cursor-changer-activate)) 254 255 (global-unset-key (kbd "C-SPC")) 256 (define-key evil-normal-state-map (kbd "SPC") nil) 257 (define-key evil-visual-state-map (kbd "SPC") nil) 258 (define-key evil-motion-state-map (kbd "SPC") nil) 259 260 (evil-define-key nil 'global (kbd "<leader>er") #'eval-region) 261 (evil-define-key nil 'global (kbd "<leader>ez") #'suspend-frame) 262 (evil-define-key nil 'global (kbd "<leader>ss") #'split-window-horizontally) 263 (evil-define-key nil 'global (kbd "<leader>so") #'split-window-vertically) 264 (evil-define-key nil 'global (kbd "<leader>x") #'execute-extended-command) 265 ;; This keybind must be bound to normal map for some reason. 266 (evil-define-key 'normal org-mode-map (kbd "TAB") #'org-cycle) 267 ;; set leader key in all states 268 (evil-set-leader 'insert (kbd "C-SPC")) 269 (evil-set-leader 'normal (kbd "SPC")) 270 (evil-set-leader 'visual (kbd "SPC")) 271 272 (define-key evil-visual-state-map (kbd "TAB") #'indent-region)) 273 274 ;; global move window keys so non joestar buffers can still have these bindings 275 (global-set-key (kbd "M-<left>") #'(lambda () 276 (interactive) 277 (other-window -1))) 278 279 (global-set-key (kbd "M-<right>") #'(lambda () 280 (interactive) 281 (other-window 1))) 282 283 #+END_SRC 284 ** markdown 285 #+begin_src emacs-lisp 286 287 (use-package markdown-mode 288 :ensure t 289 :mode (("README\\.md\\'" . gfm-mode) 290 ("\\.md\\'" . markdown-mode) 291 ("\\.markdown\\'" . markdown-mode)) 292 :init (setq markdown-command "multimarkdown")) 293 294 #+end_src 295 ** org 296 #+BEGIN_SRC emacs-lisp 297 298 (use-package org 299 :init 300 (setq org-src-preserve-indentation nil 301 org-edit-src-content-indentation 0) 302 (require 'org-tempo) 303 304 (setq org-src-tab-acts-natively t) 305 :bind (:map org-mode-map 306 ("M-S-<up>" . 'text-scale-increase) 307 ("M-S-<down>" . 'text-scale-decrease))) 308 309 (use-package org-ref 310 :ensure t 311 :config 312 (require 'bibtex) 313 (setq bibtex-completion-bibliography `(,(concat user-emacs-directory "/bibliography/references.bib") 314 ,(concat user-emacs-directory "/bibliography/dei.bib") 315 ,(concat user-emacs-directory "/bibliography/master.bib") 316 ,(concat user-emacs-directory "/bibliography/archive.bib")) 317 bibtex-completion-library-path `(,(concat user-emacs-directory "/bibliography/bibtex-pdfs/")) 318 bibtex-completion-additional-search-fields '(keywords) 319 bibtex-completion-notes-path (concat user-emacs-directory "/bibliography/notes/")) 320 (setq bibtex-autokey-year-length 4 321 bibtex-autokey-name-year-separator "-" 322 bibtex-autokey-year-title-separator "-" 323 bibtex-autokey-titleword-separator "-" 324 bibtex-autokey-titlewords 2 325 bibtex-autokey-titlewords-stretch 1 326 bibtex-autokey-titleword-length 5) 327 (define-key bibtex-mode-map (kbd "H-b") 'org-ref-bibtex-hydra/body) 328 (define-key org-mode-map (kbd "C-c ]") 'org-ref-insert-link) 329 (define-key org-mode-map (kbd "s-[") 'org-ref-insert-link-hydra/body) 330 (require 'helm-bibtex) 331 (require 'org-ref-helm) 332 (require 'org-ref-arxiv) 333 (require 'org-ref-scopus) 334 (require 'org-ref-wos)) 335 336 ;; (use-package org-ref-ivy 337 ;; :init (setq org-ref-insert-link-function 'org-ref-insert-link-hydra/body 338 ;; org-ref-insert-cite-function 'org-ref-cite-insert-ivy 339 ;; org-ref-insert-label-function 'org-ref-insert-label-link 340 ;; org-ref-insert-ref-function 'org-ref-insert-ref-link 341 ;; org-ref-cite-onclick-function (lambda (_) (org-ref-citation-hydra/body)))) 342 343 (use-package org-indent-mode 344 :config 345 (org-indent-mode t) 346 :hook org-mode) 347 348 (quelpa 349 '(ox-thtml 350 :fetcher git 351 :url "https://github.com/Ma11ock/org-thtml")) 352 353 (use-package org-bullets 354 :ensure t) 355 356 (use-package wc-mode 357 :ensure t 358 :hook org-mode) 359 360 361 (use-package display-line-numbers-mode 362 :hook (prog-mode org-mode LaTex-mode) 363 :init 364 (setq display-line-numbers-type 'relative)) 365 366 367 ;; Configuring LaTeX must be done like this because of legacy. 368 (use-package tex-mode 369 :ensure auctex 370 :init 371 ;(require 'tex-buf) 372 (use-package company-auctex 373 :ensure t) 374 375 (use-package auctex-latexmk 376 :ensure t) 377 378 :config 379 (setq TeX-auto-save t) 380 (setq TeX-parse-self t) 381 (setq Tex-command-default "LatexMk") 382 (setq-default TeX-master nil) 383 (setq-default TeX-engine 'luatex) 384 (setq-default TeX-PDF-mode t) 385 (setq-default TeX-show-compilation nil) 386 (setq-default TeX-process-asynchronous t) 387 ;(setq-default TeX-save-query nil) 388 (add-hook 'LaTeX-mode-hook #'flyspell-mode) 389 (add-hook 'LaTeX-mode-hook #'wc-mode) 390 (add-hook 'LaTeX-mode-hook #'company-auctex-init) 391 (add-hook 'LaTeX-mode-hook #'company-mode) 392 (add-hook 'LaTeX-mode-hook #'TeX-source-correlate-mode) 393 (add-hook 'LaTeX-mode-hook #'TeX-interactive-mode) 394 (add-hook 'after-save-hook #'(lambda () 395 (let* ((master-file (TeX-master-file))) 396 (TeX-command "LatexMk" #'TeX-master-file)))) 397 398 (require 'auctex-latexmk) 399 (auctex-latexmk-setup)) 400 401 #+End_src 402 ** vterm 403 #+BEGIN_SRC emacs-lisp 404 (when (and module-file-suffix (not (eq system-type 'windows-nt))) 405 (use-package vterm 406 :ensure t 407 :init (setq vterm-always-compile-module t) 408 :bind (:map vterm-mode-map 409 ("M-c" . 'vterm-copy-mode) 410 ("M-i" . 'ido-switch-buffer)))) 411 412 #+END_SRC 413 ** helm 414 #+begin_src emacs-lisp 415 416 (use-package helm 417 :ensure t 418 :init 419 (helm-mode 1) 420 421 422 (use-package helm-ag 423 :ensure t) 424 (use-package helm-unicode 425 :ensure t) 426 (use-package helm-xref 427 :ensure t) 428 (define-key global-map [remap find-file] #'helm-find-files) 429 (define-key global-map [remap execute-extended-command] #'helm-M-x) 430 (define-key global-map [remap switch-to-buffer] #'helm-mini) 431 (define-key global-map (kbd "M-i") #'switch-to-buffer) 432 433 (define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history) 434 ;(evil-define-key 'normal 'global (kbd "<leader>f") #'swiper) 435 ;(evil-define-key 'normal 'global (kbd "<leader>cf") #'counsel-fzf) 436 ;(evil-define-key 'normal 'global (kbd "<leader>co") #'counsel-find-file) 437 ;(evil-define-key 'normal 'global (kbd "<leader>cdf") #'counsel-describe-function) 438 ;(evil-define-key 'normal 'global (kbd "<leader>cds") #'counsel-describe-variable) 439 ;(evil-define-key 'normal 'global (kbd "<leader>cdv") #'counsel-describe-symbol) 440 ;(evil-define-key 'normal 'global (kbd "<leader>cdb") #'counsel-descbinds) 441 ;(evil-define-key 'normal 'global (kbd "<leader>dl") #'counsel-info-lookup-symbol) 442 ;(evil-define-key 'normal 'global (kbd "<leader>cg") #'counsel-git) 443 ;(evil-define-key 'normal 'global (kbd "<leader>cG") #'counsel-grep) 444 (evil-define-key 'normal 'global (kbd "<leader>ha") #'helm-ag) 445 (evil-define-key 'normal 'global (kbd "<leader>hu") #'helm-unicode) 446 (evil-define-key 'normal 'global (kbd "<leader>SPC") #'helm-M-x)) 447 ;; General ivy 448 ;;(global-set-key (kbd "M-i") 'ivy-switch-buffer)) 449 450 #+end_src 451 * IDE 452 ** Prettify 453 #+begin_src emacs-lisp 454 455 (use-package format-all 456 :ensure t) 457 458 #+end_src 459 ** Haskell 460 #+begin_src emacs-lisp 461 (use-package haskell-mode 462 :ensure t) 463 464 (use-package haskell-snippets 465 :ensure t) 466 467 (use-package haskell-tab-indent 468 :ensure t) 469 #+end_src 470 ** LSP 471 #+begin_src emacs-lisp 472 (use-package lsp-mode 473 :ensure t 474 :init 475 476 (setq gc-cons-threshold (* 100 1024 1024) 477 read-process-output-max (* 1024 1024) 478 treemacs-space-between-root-nodes nil 479 company-idle-delay 0.0 480 company-minimum-prefix-length 1 481 lsp-idle-delay 0.1) ;; clangd is fast 482 483 (with-eval-after-load 'lsp-mode 484 (add-hook 'lsp-mode-hook #'lsp-enable-which-key-integration) 485 (require 'dap-cpptools) 486 (yas-global-mode)) 487 488 ;; optional if you want which-key integration 489 (use-package which-key 490 :ensure t 491 :config 492 (which-key-mode)) 493 ;; optionally 494 (use-package lsp-ui :commands lsp-ui-mode :ensure t) 495 496 ;; optionally if you want to use debugger 497 (use-package dap-mode 498 :ensure t) 499 (require 'dap-gdb-lldb) 500 (dap-gdb-lldb-setup) 501 502 (use-package lsp-treemacs 503 :ensure t) 504 ;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l") 505 (setq lsp-keymap-prefix "C-c l") 506 :hook ((c-mode c++-mode) . lsp) 507 :commands lsp) 508 509 ;; (use-package dap-LANGUAGE) to load the dap adapter for your language 510 511 #+end_src 512 ** YAML 513 #+begin_src emacs-lisp 514 515 (use-package yaml-mode 516 :ensure t) 517 518 #+end_src 519 ** flutter 520 #+begin_src emacs-lisp 521 (use-package dart-mode 522 :ensure t 523 :init 524 (with-eval-after-load 'projectile 525 (add-to-list 'projectile-project-root-files-bottom-up "pubspec.yaml") 526 (add-to-list 'projectile-project-root-files-bottom-up "BUILD")) 527 528 (setq gc-cons-threshold (* 100 1024 1024) 529 read-process-output-max (* 1024 1024) 530 company-minimum-prefix-length 1 531 lsp-lens-enable t 532 lsp-signature-auto-activate nil) 533 (use-package flutter 534 :ensure t 535 :after dart-mode 536 :bind (:map dart-mode-map 537 ("s-f" . #'flutter-run-or-hot-reload)) 538 :custom 539 (if (eq system-type 'windows-nt) 540 (flutter-sdk-path "C:\\Users\\Ryan\\Documents\\flutter\\bin") 541 (flutter-sdk-path "/opt/flutter/bin"))) 542 543 (use-package lsp-dart 544 :ensure t 545 :hook dart-mode) 546 547 (use-package hover 548 :ensure t 549 :hook dart-mode) 550 551 (setq gc-cons-threshold (* 100 1024 1024) 552 read-process-output-max (* 1024 1024) 553 company-minimum-prefix-length 1 554 lsp-lens-enable t 555 lsp-signature-auto-activate nil)) 556 557 #+end_src 558 ** Clojure 559 #+begin_src emacs-lisp 560 (use-package cider 561 :ensure t 562 :bind (:map cider-mode-map 563 ("M-e" . cider-eval-last-sexp) 564 ("M-r" . cider-eval-region) 565 ) 566 :init 567 (eval-after-load "cider-mode" 568 '(define-key cider-mode-map (kbd "C-x") 'joe-nextword))) 569 570 (use-package clojure-mode 571 :ensure t) 572 #+end_src 573 ** all programming languages 574 *** company 575 #+begin_src emacs-lisp 576 (use-package company 577 :ensure t 578 :init (add-hook 'prog-mode-hook 'company-mode) 579 :bind (:map company-active-map 580 ("C-n" . company-select-next) 581 ("C-p" . company-select-previous)) 582 :config 583 (setq company-idle-delay 0.3) 584 (setq company-tooltip-align-annotations t) ; aligns annotation to the right hand side 585 (setq company-minimum-prefix-length 1) 586 (setq company-clang-arguments '("-std=c++17")) 587 (use-package company-c-headers 588 :ensure t 589 :init 590 (add-to-list 'company-backends 'company-c-headers))) 591 #+end_src 592 *** flycheck 593 #+begin_src emacs-lisp 594 (use-package flycheck 595 :ensure t) 596 597 #+end_src 598 599 ** magit 600 #+begin_src emacs-lisp 601 (use-package with-editor 602 :ensure t) 603 604 (use-package magit 605 :ensure t 606 :init 607 (add-hook 'diff-mode-hook #'whitespace-mode) 608 (add-hook 'git-commit-setup-hook #'git-commit-turn-on-flyspell)) 609 610 #+end_src 611 ** Misc 612 #+BEGIN_SRC emacs-lisp 613 (defun insert-current-date () 614 (interactive) 615 (insert (shell-command-to-string "echo -n $(date +%Y-%m-%d)"))) 616 617 (use-package git-modes 618 :ensure t 619 :init 620 (add-to-list 'auto-mode-alist '("\\.gitignore\\'" . gitignore-mode)) ) 621 622 (use-package rainbow-mode 623 :ensure t 624 :hook (web-mode emacs-lisp-mode)) 625 626 (use-package crontab-mode 627 :ensure t) 628 629 (add-hook 'prog-mode-hook #'flyspell-prog-mode) ; Flyspell on comments and strings. 630 631 (use-package cmake-mode 632 :ensure t 633 :hook (cmake-mode . lsp-deferred)) 634 635 (use-package cmake-font-lock 636 :ensure t 637 :after cmake-mode 638 :config (cmake-font-lock-activate)) 639 640 (use-package etc-sudoers-mode 641 :ensure t) 642 643 #+END_SRC 644 ** html 645 #+BEGIN_SRC emacs-lisp 646 (use-package web-mode 647 :ensure t 648 :config 649 (add-to-list 'auto-mode-alist '("\\.api\\'" . web-mode)) 650 (add-to-list 'auto-mode-alist '("/some/react/path/.*\\.js[x]?\\'" . web-mode)) 651 652 (setq web-mode-markup-indent-offset 2) 653 (setq web-mode-css-indent-offset 2) 654 (setq web-mode-code-indent-offset 2) 655 (setq web-mode-engines-alist 656 '(("php" . "\\.phtml\\'") 657 ("blade" . "\\.blade\\.") 658 ("handlebars" . "\\.handlebars\\'"))) 659 660 (setq web-mode-content-types-alist 661 '(("json" . "/some/path/.*\\.api\\'") 662 ("xml" . "/other/path/.*\\.api\\'") 663 ("jsx" . "/some/react/path/.*\\.js[x]?\\'"))) 664 (setq web-mode-markup-indent-offset 2) 665 (add-to-list 'auto-mode-alist '("\\.phtml\\'" . web-mode)) 666 (add-to-list 'auto-mode-alist '("\\.tpl\\.php\\'" . web-mode)) 667 (add-to-list 'auto-mode-alist '("\\.[agj]sp\\'" . web-mode)) 668 (add-to-list 'auto-mode-alist '("\\.as[cp]x\\'" . web-mode)) 669 (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode)) 670 (add-to-list 'auto-mode-alist '("\\.mustache\\'" . web-mode)) 671 (add-to-list 'auto-mode-alist '("\\.djhtml\\'" . web-mode)) 672 (add-to-list 'auto-mode-alist '("\\.css\\'" . web-mode)) 673 (add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode)) 674 (add-to-list 'auto-mode-alist '("\\.handlebars\\'" . web-mode)) 675 (define-key web-mode-map (kbd "C-n") 'web-mode-tag-match) 676 (setq web-mode-enable-current-column-highlight t) 677 (setq web-mode-enable-current-element-highlight t) 678 (setq web-mode-enable-auto-closing t)) 679 680 (use-package impatient-mode 681 :ensure t 682 :hook web-mode) 683 684 #+END_SRC 685 *** Emmet 686 #+BEGIN_SRC emacs-lisp 687 688 (use-package emmet-mode 689 :ensure t 690 :config 691 (define-key web-mode-map (kbd "C-j") 'emmet-expand-line) 692 (emmet-mode) 693 ; (emmet-preview-mode) 694 :hook web-mode) 695 696 #+END_SRC 697 698 ** C 699 #+begin_src emacs-lisp 700 701 (use-package cc-mode 702 :config 703 (setq c-default-style "java" 704 c-basic-offset 4) 705 (c-set-offset 'inline-open '0)) 706 707 708 #+end_src 709 ** JavaScript 710 #+begin_src emacs-lisp 711 (setq js-indent-level 2) 712 (use-package json-mode 713 :ensure t) 714 ;; Typescript 715 (use-package typescript-mode 716 :ensure t) 717 #+end_src 718 ** Python 719 #+begin_src emacs-lisp 720 (use-package elpy 721 :ensure t 722 :init 723 (add-hook 'python-mode-hook #'(lambda () 724 (elpy-enable) 725 (when (require 'flycheck nil t) 726 (setq elpy-modules (delq 'elpy-module-flymake elpy-modules)) 727 (add-hook 'elpy-mode-hook 'flycheck-mode))))) 728 729 (use-package blacken 730 :ensure t) 731 732 (use-package py-autopep8 733 :ensure t 734 :init 735 (add-hook 'elpy-mode-hook #'py-autopep8-enable-on-save)) 736 #+end_src 737 ** golang 738 #+begin_src emacs-lisp 739 (use-package go-mode 740 :ensure t 741 :init 742 (add-to-list 'auto-mode-alist '("\\.go\\'" . go-mode)) 743 (add-hook 'go-mode-hook 'lsp-deferred) 744 (add-hook 'before-save-hook 'gofmt-before-save)) 745 #+end_src 746 ** gdscript 747 #+begin_src emacs-lisp 748 (use-package gdscript-mode 749 :ensure t 750 :init 751 (defun lsp--gdscript-ignore-errors (original-function &rest args) 752 "Ignore the error message resulting from Godot not replying to the `JSONRPC' request." 753 (if (string-equal major-mode "gdscript-mode") 754 (let ((json-data (nth 0 args))) 755 (if (and (string= (gethash "jsonrpc" json-data "") "2.0") 756 (not (gethash "id" json-data nil)) 757 (not (gethash "method" json-data nil))) 758 nil ; (message "Method not found") 759 (apply original-function args))) 760 (apply original-function args))) 761 ;; Runs the function `lsp--gdscript-ignore-errors` around `lsp--get-message-type` to suppress unknown notification errors. 762 (advice-add #'lsp--get-message-type :around #'lsp--gdscript-ignore-errors) 763 (setq gdscript-godot-executable "/usr/bin/godot") 764 (setq gdscript-use-tab-indents nil) 765 (setq gdscript-indent-offset 4) 766 (setq gdscript-docs-local-path "/home/ryan/Documents/godot-docs/_build/html/") 767 :config 768 (auto-revert-mode)) 769 #+end_src 770 ** glsl 771 #+begin_src emacs-lisp 772 773 (use-package glsl-mode 774 :ensure t) 775 776 #+end_src 777 ** gradle 778 #+begin_src emacs-lisp 779 (use-package gradle-mode 780 :ensure t) 781 782 (use-package groovy-mode 783 :ensure t) 784 #+end_src 785 ** Lua 786 #+begin_src emacs-lisp 787 788 (use-package lua-mode 789 :ensure t) 790 791 #+end_src 792 * Text-editor 793 ** spellcheck 794 #+BEGIN_SRC emacs-lisp 795 796 (setq ispell-program-name (executable-find "hunspell")) 797 (setq ispell-local-dictionary "en_US") 798 (setq ispell-local-dictionary-alist 799 '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil nil nil utf-8))) 800 801 (add-hook 'org-mode-hook 'flyspell-mode) 802 803 #+END_SRC 804 ** sudo edit 805 #+BEGIN_SRC emacs-lisp 806 807 (defun er-doas-edit (&optional arg) 808 "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." 809 (interactive "P") 810 (if (or arg (not buffer-file-name)) 811 (find-file (concat "/doas:root@localhost:" 812 (ido-read-file-name "Find file(as root): "))) 813 (find-alternate-file (concat "/doas:root@localhost:" buffer-file-name)))) 814 815 816 817 (defun er-sudo-edit (&optional arg) 818 "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." 819 (interactive "P") 820 (if (or arg (not buffer-file-name)) 821 (find-file (concat "/sudo:root@localhost:" 822 (ido-read-file-name "Find file(as root): "))) 823 (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name)))) 824 825 826 #+END_SRC 827 ** misc 828 #+BEGIN_SRC emacs-lisp 829 830 ;; tell emacs not to use the clipboard 831 ;(setq x-select-enable-clipboard nil) 832 ;; Left-to-right by default for slight performance increase. 833 (setq-default bidi-paragraph-direction 'left-to-right) 834 (setq bidi-inhibit-bpa t) 835 ;; For slight performance increase with long lines. 836 (global-so-long-mode 1) 837 838 ;; For asynchronous. 839 (use-package async 840 :ensure t) 841 842 (use-package emojify 843 :ensure t) 844 #+END_SRC 845 ** snippets 846 #+begin_src emacs-lisp 847 (use-package yasnippet 848 :ensure t 849 :init 850 (require 'yasnippet) 851 (yas-reload-all) 852 (add-hook 'prog-mode-hook #'yas-minor-mode)) 853 854 (use-package yasnippet-snippets 855 :ensure t) 856 #+end_src 857 * emacs-os 858 #+begin_src emacs-lisp 859 (when 860 (or (string= system-name "arlen") (string= system-name "Springfield")) 861 (require 'ryan-os)) 862 #+end_src 863 864