dotfiles

My dotfiles.
git clone git://git.ryanmj.xyz/dotfiles.git
Log | Files | Refs | LICENSE

commit 8226abfed24c2740095f4d3b9968c5d8ccc97fc1
parent 5d5a785cbeccf3edc0b57fb4f66876c47014bb30
Author: Ryan Jeffrey <ryan@ryanmj.xyz>
Date:   Mon, 15 Aug 2022 15:35:11 -0700

No longer separate config into an org-mode file, just use init.el. Fix
auctex bug

Diffstat:
M.config/emacs/init.el | 834+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------
M.config/zsh/.zshrc | 2+-
M.gitignore | 1-
3 files changed, 781 insertions(+), 56 deletions(-)

diff --git a/.config/emacs/init.el b/.config/emacs/init.el @@ -1,54 +1,780 @@ -;;; package --- Summary - -;;; Commentary: My init.el. - - -;;; Code: -(prefer-coding-system 'utf-8-unix) - -(if (eq system-type 'windows-nt) - (setq user-emacs-directory (concat (getenv "HOME") "/.emacs.d/")) - ;; Linux. - (setq user-emacs-directory (concat (getenv "HOME") "/.config/emacs/"))) - -;; Move where emacs puts its cache variables. -(let* ((my-emacs-custom-file (concat user-emacs-directory "custom-vars.el"))) - ;; Create custom variable file if it does not exist. - (when (not (file-exists-p my-emacs-custom-file)) - (with-temp-buffer (write-file my-emacs-custom-file))) - (setq custom-file my-emacs-custom-file) - (load "custom-vars.el" 'noerror)) - - -;; Set up package management. -(require 'package) - -(package-initialize) - -(add-to-list 'package-archives - '("melpa" . "https://melpa.org/packages/") t) - -;; Set up quelpa. -(unless (package-installed-p 'quelpa) - (with-temp-buffer - (url-insert-file-contents "https://github.com/quelpa/quelpa/raw/master/quelpa.el") - (eval-buffer) - (quelpa-self-upgrade))) - -(unless (package-installed-p 'quelpa-use-package) - (package-refresh-contents) - (package-install 'quelpa-use-package)) - -(quelpa - '(quelpa-use-package - :fetcher git - :url "https://github.com/quelpa/quelpa-use-package.git")) -(require 'quelpa-use-package) - -;; Load my actual config. -(org-babel-load-file (concat user-emacs-directory "config.org")) - -(put 'narrow-to-region 'disabled nil) - -(provide '.emacs) -;;; .emacs ends here +;;; package --- Summary Ryan Jeffrey's init.el. + +;;; Copyright (C) Ryan Jeffrey 2019-2022 + +;;; Author: Ryan Jeffrey <pwishie@gmail.com> +;;; Created: 2019-05-12 +;;; Version: 69.420 +;;; URL: https://github.com/Ma11ock/dotfiles + +;;; License: + +;; This file is part of Ryan's configuration. +;; +;; Ryan's configuration 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. +;; +;; Ryan's configuration 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 Ryan's configuration. If not, see <http://www.gnu.org/licenses/>. + +;;; Commentary: + +;;; Code: +(prefer-coding-system 'utf-8-unix) + +(if (eq system-type 'windows-nt) + (setq user-emacs-directory (concat (getenv "HOME") "/.emacs.d/")) + ;; Linux. + (setq user-emacs-directory (concat (getenv "HOME") "/.config/emacs/"))) + +;; Move where emacs puts its cache variables. +(let* ((my-emacs-custom-file (concat user-emacs-directory "custom-vars.el"))) + ;; Create custom variable file if it does not exist. + (when (not (file-exists-p my-emacs-custom-file)) + (with-temp-buffer (write-file my-emacs-custom-file))) + (setq custom-file my-emacs-custom-file) + (load "custom-vars.el" 'noerror)) + + +;; Set up package management. +(require 'package) + +(package-initialize) + +(add-to-list 'package-archives + '("melpa" . "https://melpa.org/packages/") t) + +;; Real package managers. +;; Set up quelpa. +(unless (package-installed-p 'quelpa) + (with-temp-buffer + (url-insert-file-contents "https://github.com/quelpa/quelpa/raw/master/quelpa.el") + (eval-buffer) + (quelpa-self-upgrade))) + +(unless (package-installed-p 'quelpa-use-package) + (package-refresh-contents) + (package-install 'quelpa-use-package)) + +(quelpa + '(quelpa-use-package + :fetcher git + :url "https://github.com/quelpa/quelpa-use-package.git")) + +(defalias 'yes-or-no-p 'y-or-n-p) + +(require 'quelpa-use-package) + +(eval-when-compile + (require 'use-package)) + +(quelpa + '(ox-thtml + :fetcher git + :url "https://github.com/juanjosegarciaripoll/org-thtml")) + + +(add-to-list 'load-path (concat user-emacs-directory "lisp/")) + +(setq x-gtk-use-system-tooltips nil) + +;; Font +(if (string= system-name "Southpark") + (add-to-list 'default-frame-alist + '(font . "Inconsolata Nerd Font Mono:size=16")) + (add-to-list 'default-frame-alist + '(font . "Inconsolata Nerd Font Mono:size=16"))) + +(use-package prettify-symbols-mode + :init + (defconst lisp--prettify-symbols-alist + '(("lambda" . ?λ))) + :hook + (lisp-mode)) + + +(add-to-list 'load-path (concat user-emacs-directory "/themes/")) +(setq custom-safe-themes t) ; Treat all themes as safe +(quelpa + '(replace-colorthemes + :fetcher git + :url "https://github.com/emacs-jp/replace-colorthemes")) + +;; Theme +(use-package modus-themes + :ensure t + :init + (setq modus-themes-bold-constructs t + modus-themes-mode-line '3d + modus-themes-italic-constructs t + modus-themes-mixed-fonts nil + modus-themes-subtle-line-numbers nil + modus-themes-intense-markup t) + + (modus-themes-load-themes) + (modus-themes-load-vivendi)) + +(display-time-mode 1) +(display-battery-mode 1) +;; Custom modeline. +(defvar mode-line-modes + `(:propertize ("" mode-name) + help-echo "Major mode\n\ +mouse-1: Display major mode menu\n\ +mouse-2: Show help for major mode\n\ +mouse-3: Toggle minor modes" + mouse-face mode-line-highlight + local-map ,mode-line-major-mode-keymap)) +;; Themes I like: +;; manoj dark +;; modus vivendi +;; Clarity +;; Hober +;; Comidia +;; Dark laptop +;; euphoria +;; late-night +;; ld-dark +;; simple-1 +;; subdued +;; arjen +;; dark laptop +;; euphoria +;; simple-1 +;; TODO make joe theme + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Misc ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(use-package rainbow-delimiters + :ensure t + :hook (prog-mode . rainbow-delimiters-mode)) + +(add-hook 'prog-mode-hook #'(lambda () + (setq show-trailing-whitespace t))) +(save-place-mode 1) +(setq tty-menu-open-use-tmm t) +(global-set-key [f10] 'tmm-menubar) +(put 'upcase-region 'disabled nil) +(electric-pair-mode t) +(show-paren-mode 1) +(setq-default indent-tabs-mode nil) +(setq-default tab-width 4) +(setq column-number-mode t) +(tool-bar-mode -1) +(menu-bar-mode -1) +(scroll-bar-mode -1) +(setq ring-bell-function 'ignore) +(blink-cursor-mode 0) +(set-language-environment "UTF-8") +(setq redisplay-dont-pause t) +(setq vc-follow-symlinks t) ; Otherwise emacs asks +(setq tramp-terminal-type "tramp") ; See zshrc +(add-hook 'after-save-hook #'executable-make-buffer-file-executable-if-script-p) +(setq-default truncate-lines t) +;; scroll one line at a time (less "jumpy" than defaults) +(setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time +(setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling +(setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse +(use-package good-scroll + :ensure t + :init + (good-scroll-mode 1)) + +(use-package smooth-scrolling + :ensure t + :init + (setq smooth-scroll-margin 1) + (smooth-scrolling-mode 1)) +;; Do not jump scroll +(setq auto-window-vscroll nil) +(setq scroll-conservatively 10) +(setq scroll-margin 1) + +;; Column 80 fill line. +(setq display-fill-column-indicator-column 80) +(add-hook 'prog-mode-hook #'display-fill-column-indicator-mode) +(add-hook 'org-mode-hook #'display-fill-column-indicator-mode) + +(setenv "MANWIDTH" "100") ; For man mode + +;; Man-mode auto-kill frame on exit. Should only be called from shell. +(defun man-mode-shell (man-page) + (add-hook 'man-end-hook '(lambda () + (setq man-end-hook nil) + (delete-frame) + (message "Heck"))) + (man man-page) + (delete-window)) + +;; Luke Smith style snippets. +(global-set-key (kbd "M-SPC") #'(lambda () + (interactive) + (search-forward "<++>") + (delete-backward-char 4))) + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Modes ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(use-package command-log-mode + :ensure t) + +(use-package conf-mode + :init + (add-to-list 'auto-mode-alist '("/sxhkdrc\\'" . conf-unix-mode)) + (add-to-list 'auto-mode-alist '("/zshrc\\'" . shell-script-mode)) + (add-to-list 'auto-mode-alist '("\\config\\'" . conf-mode)) + (add-to-list 'auto-mode-alist '("\\.Xdefaults'" . conf-xdefaults-mode)) + (add-to-list 'auto-mode-alist '("\\.Xresources'" conf-xdefaults-mode)) + (add-to-list 'auto-mode-alist '("\\.Xdefaults'" . conf-xdefaults-mode))) + + +(use-package systemd + :ensure t + :mode (("\\.service\\'" . systemd-mode))) + +(use-package fish-mode + :ensure t + :mode (("\\.fish\\'" . fish-mode))) + +(use-package rustic + :ensure t + :mode (("\\.rs\\'" . rustic-mode)) + :config + (setq rustic-format-on-save t)) + +(use-package toml-mode + :ensure t) + +(use-package undo-tree + :ensure t) +(use-package highlight + :ensure t) +(use-package evil + :ensure t + :init + (setq evil-want-keybinding nil) + (global-undo-tree-mode) + (setq evil-undo-system 'undo-tree) + (evil-mode 1) + (use-package evil-collection + :ensure t + :init + (evil-collection-init)) + (setq-default evil-cross-lines t) + + ;; Code snippet for color + ;;evil-emacs-state-tag (propertize " EMACS " 'face '((:background "turquoise" :foreground "black"))) + (setq evil-normal-state-tag (propertize "-COMMAND-" 'face '((:foreground "turquoise"))) + evil-emacs-state-tag (propertize "--EMACS--" 'face '((:foreground "blue"))) + evil-insert-state-tag (propertize "--INSRT--" 'face '((:foreground "gold"))) + evil-replace-state-tag (propertize "-REPLACE-" 'face '((:foreground "cyan"))) + evil-motion-state-tag (propertize "--MOTION-" 'face '((:foreground "grey"))) + evil-visual-state-tag (propertize "--VISUAL-" 'face '((:foreground "magenta"))) + evil-operator-state-tag (propertize " OPERATE-" 'face '((:foreground "grey")))) + (setq evil-insert-state-cursor '(bar "green") + evil-normal-state-cursor '(box "magenta")) + + (use-package evil-terminal-cursor-changer + :ensure t + :init + (evil-terminal-cursor-changer-activate)) + + (global-unset-key (kbd "C-SPC")) + (define-key evil-normal-state-map (kbd "SPC") nil) + (define-key evil-visual-state-map (kbd "SPC") nil) + (define-key evil-motion-state-map (kbd "SPC") nil) + + (evil-define-key nil 'global (kbd "<leader>er") #'eval-region) + (evil-define-key nil 'global (kbd "<leader>ez") #'suspend-frame) + (evil-define-key nil 'global (kbd "<leader>ss") #'split-window-horizontally) + (evil-define-key nil 'global (kbd "<leader>so") #'split-window-vertically) + (evil-define-key nil 'global (kbd "<leader>x") #'execute-extended-command) + ;; This keybind must be bound to normal map for some reason. + (evil-define-key 'normal org-mode-map (kbd "TAB") #'org-cycle) + ;; set leader key in all states + (evil-set-leader 'insert (kbd "C-SPC")) + (evil-set-leader 'normal (kbd "SPC")) + (evil-set-leader 'visual (kbd "SPC")) + + (define-key evil-visual-state-map (kbd "TAB") #'indent-region)) + +;; global move window keys so non joestar buffers can still have these bindings +(global-set-key (kbd "M-<left>") #'(lambda () + (interactive) + (other-window -1))) + +(global-set-key (kbd "M-<right>") #'(lambda () + (interactive) + (other-window 1))) + +(use-package markdown-mode + :ensure t + :mode (("README\\.md\\'" . gfm-mode) + ("\\.md\\'" . markdown-mode) + ("\\.markdown\\'" . markdown-mode)) + :init (setq markdown-command "multimarkdown")) + +(use-package org + :init + (setq org-src-preserve-indentation nil + org-edit-src-content-indentation 0) + (require 'org-tempo) + + (setq org-src-tab-acts-natively t) + :bind (:map org-mode-map + ("M-S-<up>" . 'text-scale-increase) + ("M-S-<down>" . 'text-scale-decrease))) +(use-package org-ref + :ensure t + :init + (use-package helm-bibtex + :ensure t) + :config + (require 'bibtex) + (setq bibtex-completion-bibliography `(,(concat user-emacs-directory "/bibliography/references.bib") + ,(concat user-emacs-directory "/bibliography/dei.bib") + ,(concat user-emacs-directory "/bibliography/master.bib") + ,(concat user-emacs-directory "/bibliography/archive.bib")) + bibtex-completion-library-path `(,(concat user-emacs-directory "/bibliography/bibtex-pdfs/")) + bibtex-completion-additional-search-fields '(keywords) + bibtex-completion-notes-path (concat user-emacs-directory "/bibliography/notes/")) + (setq bibtex-autokey-year-length 4 + bibtex-autokey-name-year-separator "-" + bibtex-autokey-year-title-separator "-" + bibtex-autokey-titleword-separator "-" + bibtex-autokey-titlewords 2 + bibtex-autokey-titlewords-stretch 1 + bibtex-autokey-titleword-length 5) + (define-key bibtex-mode-map (kbd "H-b") 'org-ref-bibtex-hydra/body) + (define-key org-mode-map (kbd "C-c ]") 'org-ref-insert-link) + (define-key org-mode-map (kbd "s-[") 'org-ref-insert-link-hydra/body) + (require 'helm-bibtex) + (require 'org-ref-helm) + (require 'org-ref-arxiv) + (require 'org-ref-scopus) + (require 'org-ref-wos)) + +;; (use-package org-ref-ivy +;; :init (setq org-ref-insert-link-function 'org-ref-insert-link-hydra/body +;; org-ref-insert-cite-function 'org-ref-cite-insert-ivy +;; org-ref-insert-label-function 'org-ref-insert-label-link +;; org-ref-insert-ref-function 'org-ref-insert-ref-link +;; org-ref-cite-onclick-function (lambda (_) (org-ref-citation-hydra/body)))) + +(use-package org-indent-mode + :config + (org-indent-mode t) + :hook org-mode) + +(quelpa + '(ox-thtml + :fetcher git + :url "https://github.com/Ma11ock/org-thtml")) + +(use-package org-bullets + :ensure t) + +(use-package wc-mode + :ensure t + :hook org-mode) + + +(use-package display-line-numbers-mode + :hook (prog-mode org-mode LaTex-mode) + :init + (setq display-line-numbers-type 'relative)) + + +;; Configuring LaTeX must be done like this because of legacy. +(use-package tex-mode + :ensure auctex + :config + (auctex-latexmk-setup) + :init + (use-package company-auctex + :ensure t) + + (use-package auctex-latexmk + :ensure t) + + :config + (setq TeX-auto-save t) + (setq TeX-parse-self t) + (setq Tex-command-default "LatexMk") + (setq-default TeX-master nil) + (setq-default TeX-engine 'luatex) + (setq-default TeX-PDF-mode t) + (setq-default TeX-show-compilation nil) + (setq-default TeX-process-asynchronous t) + ;(setq-default TeX-save-query nil) + (add-hook 'LaTeX-mode-hook #'flyspell-mode) + (add-hook 'LaTeX-mode-hook #'wc-mode) + (add-hook 'LaTeX-mode-hook #'company-auctex-init) + (add-hook 'LaTeX-mode-hook #'company-mode) + (add-hook 'LaTeX-mode-hook #'TeX-source-correlate-mode) + (add-hook 'LaTeX-mode-hook #'TeX-interactive-mode) + (add-hook 'after-save-hook #'(lambda () + (let* ((master-file (TeX-master-file))) + (TeX-command "LatexMk" #'TeX-master-file)))) + + (require 'auctex-latexmk)) + +(when (and module-file-suffix (not (eq system-type 'windows-nt))) + (use-package vterm + :ensure t + :init (setq vterm-always-compile-module t) + :bind (:map vterm-mode-map + ("M-c" . 'vterm-copy-mode) + ("M-i" . 'ido-switch-buffer)))) + +(use-package helm + :ensure t + :init + (helm-mode 1) + + + (use-package helm-ag + :ensure t) + (use-package helm-unicode + :ensure t) + (use-package helm-xref + :ensure t) + (define-key global-map [remap find-file] #'helm-find-files) + (define-key global-map [remap execute-extended-command] #'helm-M-x) + (define-key global-map [remap switch-to-buffer] #'helm-mini) + (define-key global-map (kbd "M-i") #'switch-to-buffer) + + (define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history) + ;(evil-define-key 'normal 'global (kbd "<leader>f") #'swiper) + ;(evil-define-key 'normal 'global (kbd "<leader>cf") #'counsel-fzf) + ;(evil-define-key 'normal 'global (kbd "<leader>co") #'counsel-find-file) + ;(evil-define-key 'normal 'global (kbd "<leader>cdf") #'counsel-describe-function) + ;(evil-define-key 'normal 'global (kbd "<leader>cds") #'counsel-describe-variable) + ;(evil-define-key 'normal 'global (kbd "<leader>cdv") #'counsel-describe-symbol) + ;(evil-define-key 'normal 'global (kbd "<leader>cdb") #'counsel-descbinds) + ;(evil-define-key 'normal 'global (kbd "<leader>dl") #'counsel-info-lookup-symbol) + ;(evil-define-key 'normal 'global (kbd "<leader>cg") #'counsel-git) + ;(evil-define-key 'normal 'global (kbd "<leader>cG") #'counsel-grep) + (evil-define-key 'normal 'global (kbd "<leader>ha") #'helm-ag) + (evil-define-key 'normal 'global (kbd "<leader>hu") #'helm-unicode) + (evil-define-key 'normal 'global (kbd "<leader>SPC") #'helm-M-x)) +;; General ivy +;;(global-set-key (kbd "M-i") 'ivy-switch-buffer)) + +(use-package format-all + :ensure t) + +(use-package haskell-mode + :ensure t) + +(use-package haskell-snippets + :ensure t) + +(use-package haskell-tab-indent + :ensure t) + +(use-package lsp-mode + :ensure t + :init + + (setq gc-cons-threshold (* 100 1024 1024) + read-process-output-max (* 1024 1024) + treemacs-space-between-root-nodes nil + company-idle-delay 0.0 + company-minimum-prefix-length 1 + lsp-idle-delay 0.1) ;; clangd is fast + + (with-eval-after-load 'lsp-mode + (add-hook 'lsp-mode-hook #'lsp-enable-which-key-integration) + (require 'dap-cpptools) + (yas-global-mode)) + + ;; optional if you want which-key integration + (use-package which-key + :ensure t + :config + (which-key-mode)) + ;; optionally + (use-package lsp-ui :commands lsp-ui-mode :ensure t) + + ;; optionally if you want to use debugger + (use-package dap-mode + :ensure t) + (require 'dap-gdb-lldb) + (dap-gdb-lldb-setup) + + (use-package lsp-treemacs + :ensure t) + ;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l") + (setq lsp-keymap-prefix "C-c l") + :hook ((c-mode c++-mode) . lsp) + :commands lsp) + +;; (use-package dap-LANGUAGE) to load the dap adapter for your language + +(use-package yaml-mode + :ensure t) + +(use-package cider + :ensure t + :bind (:map cider-mode-map + ("M-e" . cider-eval-last-sexp) + ("M-r" . cider-eval-region) + ) + :init + (eval-after-load "cider-mode" + '(define-key cider-mode-map (kbd "C-x") 'joe-nextword))) + +(use-package clojure-mode + :ensure t) + +(use-package company + :ensure t + :init (add-hook 'prog-mode-hook 'company-mode) + :bind (:map company-active-map + ("C-n" . company-select-next) + ("C-p" . company-select-previous)) + :config + (setq company-idle-delay 0.3) + (setq company-tooltip-align-annotations t) ; aligns annotation to the right hand side + (setq company-minimum-prefix-length 1) + (setq company-clang-arguments '("-std=c++17")) + (use-package company-c-headers + :ensure t + :init + (add-to-list 'company-backends 'company-c-headers))) + +(use-package flycheck + :ensure t) + +(use-package with-editor + :ensure t) + +(use-package magit + :ensure t + :init + (add-hook 'diff-mode-hook #'whitespace-mode) + (add-hook 'git-commit-setup-hook #'git-commit-turn-on-flyspell)) + +(defun insert-current-date () + (interactive) + (insert (shell-command-to-string "echo -n $(date +%Y-%m-%d)"))) + +(use-package git-modes + :ensure t + :init + (add-to-list 'auto-mode-alist '("\\.gitignore\\'" . gitignore-mode)) ) + +(use-package rainbow-mode + :ensure t + :hook (web-mode emacs-lisp-mode)) + +(use-package crontab-mode + :ensure t) + +(add-hook 'prog-mode-hook #'flyspell-prog-mode) ; Flyspell on comments and strings. + +(use-package cmake-mode + :ensure t + :hook (cmake-mode . lsp-deferred)) + +(use-package cmake-font-lock + :ensure t + :after cmake-mode + :config (cmake-font-lock-activate)) + +(use-package etc-sudoers-mode + :ensure t) + +(use-package web-mode + :ensure t + :config + (add-to-list 'auto-mode-alist '("\\.api\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("/some/react/path/.*\\.js[x]?\\'" . web-mode)) + + (setq web-mode-markup-indent-offset 2) + (setq web-mode-css-indent-offset 2) + (setq web-mode-code-indent-offset 2) + (setq web-mode-engines-alist + '(("php" . "\\.phtml\\'") + ("blade" . "\\.blade\\.") + ("handlebars" . "\\.handlebars\\'"))) + + (setq web-mode-content-types-alist + '(("json" . "/some/path/.*\\.api\\'") + ("xml" . "/other/path/.*\\.api\\'") + ("jsx" . "/some/react/path/.*\\.js[x]?\\'"))) + (setq web-mode-markup-indent-offset 2) + (add-to-list 'auto-mode-alist '("\\.phtml\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.tpl\\.php\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.[agj]sp\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.as[cp]x\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.mustache\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.djhtml\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.css\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.handlebars\\'" . web-mode)) + (define-key web-mode-map (kbd "C-n") 'web-mode-tag-match) + (setq web-mode-enable-current-column-highlight t) + (setq web-mode-enable-current-element-highlight t) + (setq web-mode-enable-auto-closing t)) + +(use-package impatient-mode + :ensure t + :hook web-mode) + +(use-package emmet-mode + :ensure t + :config + (define-key web-mode-map (kbd "C-j") 'emmet-expand-line) + (emmet-mode) + ; (emmet-preview-mode) + :hook web-mode) + +(use-package cc-mode + :config + (setq c-default-style "java" + c-basic-offset 4) + (c-set-offset 'inline-open '0)) + +(setq js-indent-level 2) +(use-package json-mode + :ensure t) +;; Typescript +(use-package typescript-mode + :ensure t) + +(use-package elpy + :ensure t + :init + (add-hook 'python-mode-hook #'(lambda () + (elpy-enable) + (when (require 'flycheck nil t) + (setq elpy-modules (delq 'elpy-module-flymake elpy-modules)) + (add-hook 'elpy-mode-hook 'flycheck-mode))))) + +(use-package blacken + :ensure t) + +(use-package py-autopep8 + :ensure t + :init + (add-hook 'elpy-mode-hook #'py-autopep8-enable-on-save)) + +(use-package go-mode + :ensure t + :init + (add-to-list 'auto-mode-alist '("\\.go\\'" . go-mode)) + (add-hook 'go-mode-hook 'lsp-deferred) + (add-hook 'before-save-hook 'gofmt-before-save)) + +(use-package gdscript-mode + :ensure t + :init + (defun lsp--gdscript-ignore-errors (original-function &rest args) + "Ignore the error message resulting from Godot not replying to the `JSONRPC' request." + (if (string-equal major-mode "gdscript-mode") + (let ((json-data (nth 0 args))) + (if (and (string= (gethash "jsonrpc" json-data "") "2.0") + (not (gethash "id" json-data nil)) + (not (gethash "method" json-data nil))) + nil ; (message "Method not found") + (apply original-function args))) + (apply original-function args))) + ;; Runs the function `lsp--gdscript-ignore-errors` around `lsp--get-message-type` to suppress unknown notification errors. + (advice-add #'lsp--get-message-type :around #'lsp--gdscript-ignore-errors) + (setq gdscript-godot-executable "/usr/bin/godot") + (setq gdscript-use-tab-indents nil) + (setq gdscript-indent-offset 4) + (setq gdscript-docs-local-path "/home/ryan/Documents/godot-docs/_build/html/") + :config + (auto-revert-mode)) + +(use-package glsl-mode + :ensure t) + +(use-package gradle-mode + :ensure t) + +(use-package groovy-mode + :ensure t) + +(use-package lua-mode + :ensure t) + +(setq ispell-program-name (executable-find "hunspell")) +(setq ispell-local-dictionary "en_US") +(setq ispell-local-dictionary-alist + '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil nil nil utf-8))) + +(add-hook 'org-mode-hook 'flyspell-mode) + +;; For asynchronous. +(use-package async + :ensure t) + +(use-package emojify + :ensure t) + +(use-package yasnippet + :ensure t + :init + (require 'yasnippet) + (yas-reload-all) + (add-hook 'prog-mode-hook #'yas-minor-mode)) + +(use-package yasnippet-snippets + :ensure t) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Utilities ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defun er-doas-edit (&optional arg) + "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." + (interactive "P") + (if (or arg (not buffer-file-name)) + (find-file (concat "/doas:root@localhost:" + (ido-read-file-name "Find file(as root): "))) + (find-alternate-file (concat "/doas:root@localhost:" buffer-file-name)))) + + + +(defun er-sudo-edit (&optional arg) + "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." + (interactive "P") + (if (or arg (not buffer-file-name)) + (find-file (concat "/sudo:root@localhost:" + (ido-read-file-name "Find file(as root): "))) + (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name)))) + +;; tell emacs not to use the clipboard + ;(setq x-select-enable-clipboard nil) +;; Left-to-right by default for slight performance increase. +(setq-default bidi-paragraph-direction 'left-to-right) +(setq bidi-inhibit-bpa t) +;; For slight performance increase with long lines. +(global-so-long-mode 1) + +(when + (or (string= system-name "arlen") (string= system-name "Springfield")) + (require 'ryan-os)) + +(put 'narrow-to-region 'disabled nil) + +(provide '.emacs) +;;; .emacs ends here diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc @@ -147,7 +147,7 @@ else alias cfv="vim $HOME/.vimrc" fi alias cfz="$EDITOR $MY_CONF_DIR/zsh/.zshrc" -alias cfe="$EDITOR $MY_CONF_DIR/emacs/config.org $MY_CONF_DIR/emacs/init.el" +alias cfe="$EDITOR $MY_CONF_DIR/emacs/init.el" # default options and shortcuts alias rip='abcde -o opus' alias ls='ls --hyperlink=auto --color -h --group-directories-first' diff --git a/.gitignore b/.gitignore @@ -109,7 +109,6 @@ flycheck_*.el # Emacs !/.config/emacs/ !/.config/emacs/init.el -!/.config/emacs/config.org !/.config/ncmpcpp !/.config/ncmpcpp/config !/.config/ncmpcpp/bindings