scripts/emacs/init.el

492 lines
13 KiB
EmacsLisp
Raw Normal View History

;; startup
(let ((usr-data (locate-user-emacs-file "data.el")))
(load custom-file)
(load usr-data))
2022-02-14 11:15:27 -08:00
;; tabulation
2022-06-05 21:51:41 -07:00
(setq-default tab-width 3)
(setq-default standard-indent 3)
2022-02-14 11:15:27 -08:00
2020-02-15 18:53:32 -08:00
;; mode line
(setq-default mode-line-format
'("%+"
mode-line-buffer-identification
"%5l↑%3c→%6i⇆"
(:eval
(number-to-string (count-lines (point-min) (point-max))))
""
2022-06-05 21:51:41 -07:00
mode-line-percent-position
" "
mode-line-modes))
2020-02-15 18:53:32 -08:00
;; scrolling
(setq scroll-conservatively 101
scroll-step 1
hscroll-step 1)
(set-scroll-bar-mode nil)
2020-02-01 23:08:21 -08:00
;; `prog-mode'
(add-hook 'prog-mode-hook #'agw-flyspell-prog-mode)
(add-hook 'prog-mode-hook #'subword-mode)
2020-03-20 20:24:06 -07:00
;; `text-mode'
(add-hook 'text-mode-hook #'agw-flyspell-prog-mode)
2020-03-20 20:24:06 -07:00
(add-hook 'text-mode-hook #'subword-mode)
;; macros
(setq initial-buffer-choice
(lambda ()
(if (buffer-file-name)
(current-buffer)
(find-file "~/org/init.org"))))
2022-02-14 11:15:27 -08:00
(add-hook 'emacs-lisp-mode-hook #'agw-no-tabs)
(add-hook 'lisp-mode-hook #'agw-no-tabs)
(add-hook 'reb-lisp-mode-hook #'agw-no-tabs)
(add-hook 'scheme-mode-hook #'agw-no-tabs)
(add-hook 'before-save-hook #'agw-before-save)
(agw-set-key "b d" #'kill-this-buffer)
(agw-set-key "b e" #'ibuffer)
(agw-set-key "m j" #'agw-create-back-link)
(agw-set-key "m k" #'agw-create-memb-link)
(agw-set-key "m l" #'agw-create-mthd-link)
(agw-set-key "a" #'org-archive-to-archive-sibling)
(agw-set-key "A" #'org-force-cycle-archived)
(agw-set-key "k" #'deadgrep)
(agw-key-map-mode)
2020-02-05 18:27:28 -08:00
(global-set-key (kbd "C-x C-<tab>") #'agw-key-map-mode)
;; packages
2022-02-14 11:15:27 -08:00
(eval-when-compile
(add-to-list 'load-path "/home/marrub/src/use-package")
(require 'use-package))
;; theme
(use-package base16-theme
2020-11-23 09:46:15 -08:00
:ensure t
:config
(defvar agw-base16-fira-colors
'(:base00 "#0f0c11" ; default bg
:base01 "#1b161f" ; lighter bg
:base02 "#382c3f" ; selection bg
:base03 "#505170" ; comments
:base04 "#8d6f9f" ; dark fg
:base05 "#ffffff" ; default fg, caret, delims, ops
:base06 "#c59cdf" ; light fg
:base07 "#e1b2ff" ; light bg
:base08 "#e873af" ; vars, tags, lists, deletion
:base09 "#f367f8" ; ints, bools, constants, attribs
:base0A "#53bdb1" ; classes, bold, search bg
:base0B "#5dffae" ; strings, inherited, code, insertion
:base0C "#ff344f" ; support, regexps, escapes, quotes
:base0D "#ba8cc6" ; funcs, methods, attrib ids, headings
:base0E "#e8a8c9" ; keywords, storage, change
:base0F "#b03060")) ; deprecated, open/close tags
(deftheme agw-base16-fira)
(base16-theme-define 'agw-base16-fira agw-base16-fira-colors)
(provide-theme 'agw-base16-fira)
(provide 'agw-base16-fira-theme)
(enable-theme 'agw-base16-fira))
2020-11-15 12:58:53 -08:00
;; major modes
2020-12-07 05:02:01 -08:00
(use-package elisp-mode)
(use-package eldoc)
2022-02-14 11:15:27 -08:00
(use-package sfz-mode
:ensure t)
2021-06-20 06:54:18 -07:00
(use-package yaml-mode
:ensure t)
(use-package cmake-mode
:ensure t
:init
(defvaralias 'cmake-tab-width 'tab-width))
2020-08-24 21:27:01 -07:00
(use-package powershell
2021-08-12 06:32:27 -07:00
:hook (powershell-mode . agw-maybe-smart-tabs-mode)
2020-08-24 21:27:01 -07:00
:ensure t
:init
(defvaralias 'powershell-indent 'tab-width))
2020-08-26 17:41:47 -07:00
(use-package js
2021-08-12 06:32:27 -07:00
:hook (js-mode . agw-maybe-smart-tabs-mode)
2020-08-26 17:41:47 -07:00
:init
(defvaralias 'js-indent-level 'tab-width))
2020-08-31 17:40:13 -07:00
(use-package css-mode
:init
(defvaralias 'css-indent-offset 'tab-width))
(use-package lua-mode
2021-08-12 06:32:27 -07:00
:hook (lua-mode . agw-maybe-smart-tabs-mode)
2020-08-31 17:40:13 -07:00
:ensure t
:init
(setq lua-indent-nested-block-content-align nil))
2020-08-03 22:39:32 -07:00
(use-package json-mode
2020-08-26 17:41:47 -07:00
:ensure t
:after js
:init
(defvaralias 'json-reformat:indent-width 'tab-width))
2020-08-03 22:39:32 -07:00
2021-06-20 06:54:18 -07:00
(use-package nim-mode
:ensure t
:init
(defvaralias 'nim-indent-offset 'tab-width))
2021-08-12 06:32:27 -07:00
(use-package poly-markdown
:ensure t)
(use-package poly-org
2020-08-31 17:40:37 -07:00
:ensure t)
2020-08-31 17:40:13 -07:00
(use-package python
:init
(defvaralias 'python-indent-offset 'tab-width))
(use-package cc-mode
2020-11-12 05:06:04 -08:00
:hook (( c-mode . agw-cc-mode)
2021-08-12 06:32:27 -07:00
( c-mode . agw-maybe-smart-tabs-mode)
(c++-mode . agw-cc-mode)
(c++-mode . agw-maybe-smart-tabs-mode))
2021-06-20 06:54:18 -07:00
:mode (("\\.zsc\\'" . c-mode)
("\\.zc\\'" . c-mode)
("\\.build\\'" . c++-mode))
:init
2020-08-03 22:39:20 -07:00
(setq c-auto-align-backslashes nil
2020-08-24 21:13:06 -07:00
c-basic-offset tab-width
c-default-style "linux")
(defvaralias 'c-basic-offset 'tab-width))
(use-package fish-mode
2021-08-12 06:32:27 -07:00
:hook (fish-mode . agw-maybe-smart-tabs-mode)
:ensure t
:init
(defvaralias 'fish-indent-offset 'tab-width))
(use-package glsl-mode
2021-08-12 06:32:27 -07:00
:hook (glsl-mode . agw-maybe-smart-tabs-mode)
:ensure t)
(use-package haskell-mode
:ensure t
2022-02-14 11:15:27 -08:00
:hook (haskell-mode . agw-no-tabs))
(use-package markdown-mode
2020-02-15 18:55:45 -08:00
:ensure t
2022-02-14 11:15:27 -08:00
:hook (markdown-mode . agw-flyspell-mode)
:mode (("\\.mdwn\\'" . markdown-mode)))
2020-08-02 10:55:21 -07:00
(use-package ninja-mode
:ensure t)
(use-package ruby-mode
:init
2020-02-01 23:08:21 -08:00
(defvaralias 'ruby-indent-level 'tab-width)
2022-02-14 11:15:27 -08:00
(defvaralias 'ruby-indent-tabs-mode 'indent-tabs-mode)
(setq ruby-insert-encoding-magic-comment nil
ruby-deep-arglist nil
ruby-deep-indent-paren nil
ruby-use-smie nil))
(use-package rust-mode
2021-08-12 06:32:27 -07:00
:hook (rust-mode . agw-maybe-smart-tabs-mode)
2020-02-01 23:08:21 -08:00
:ensure t
:init
(defvaralias 'rust-indent-offset 'tab-width))
2021-06-20 06:54:18 -07:00
(use-package sgml-mode
2022-02-14 11:15:27 -08:00
:hook (html-mode . agw-no-tabs))
(use-package typescript-mode
:hook (typescript-mode . agw-maybe-smart-tabs-mode)
:ensure t
:init
(defvaralias 'typescript-indent-level 'tab-width))
2021-06-20 06:54:18 -07:00
2022-06-05 21:51:41 -07:00
(use-package go-mode
:hook (go-mode . agw-maybe-smart-tabs-mode)
:ensure t)
;; org-mode
(use-package org
:hook ((org-mode . agw-flyspell-mode)
(org-mode . agw-org-mode))
:init
(setq org-fontify-whole-heading-line t
org-hide-emphasis-markers t
org-hide-leading-stars t
org-hide-macro-markers t
2020-02-05 22:48:10 -08:00
org-image-actual-width nil
org-indent-indentation-per-level 2
org-list-indent-offset 2
org-log-done '(note)
org-pretty-entities t
org-return-follows-link t
org-startup-folded nil
2020-02-05 18:26:56 -08:00
org-startup-with-inline-images t
org-link-frame-setup '((vm . vm-visit-folder)
(vm-imap . vm-visit-imap-folder)
(gnus . gnus)
(file . find-file)
(wl . wl)))
:config
(set-face-attribute
'org-document-title nil
:foreground "#aa573c"
:weight 'bold
:height 1.6)
2020-02-05 22:48:10 -08:00
(font-lock-add-keywords 'org-mode
'(("^ +\\([-*+]\\) "
(0 (prog1 ()
(compose-region (match-beginning 1)
(match-end 1)
""))))))
(dolist (face '((org-level-1 outline-1 1.35 "#ff6161")
(org-level-2 outline-2 1.30 "#ff9b61")
(org-level-3 outline-3 1.25 "#fff861")
(org-level-4 outline-4 1.20 "#81ff61")
(org-level-5 outline-5 1.15 "#61ffb5")
(org-level-6 outline-6 1.10 "#61c8ff")
(org-level-7 outline-7 1.05 "#8161ff")
(org-level-8 outline-8 1.00 "#ff61e2")))
(set-face-attribute
2020-02-05 22:48:10 -08:00
(nth 0 face) nil
:inherit (nth 1 face)
:height (nth 2 face))
(set-face-attribute
(nth 1 face) nil
:foreground (nth 3 face))))
(use-package org-bullets
:ensure t
:after org
:hook (org-mode . org-bullets-mode)
:init
(setq org-bullets-bullet-list '("" "" "" "" "")))
;; adjustments
(use-package smart-tabs-mode
:ensure t
2022-02-14 11:15:27 -08:00
:after (fish-mode glsl-mode rust-mode lua-mode ruby-mode)
:config
2020-08-24 21:27:01 -07:00
(smart-tabs-add-language-support powershell powershell-mode-hook
((powershell-indent-line . powershell-indent)))
(smart-tabs-add-language-support rust rust-mode-hook
((rust-mode-indent-line . rust-indent-offset)))
(smart-tabs-add-language-support fish fish-mode-hook
((fish-indent-line . fish-indent-offset)))
(smart-tabs-add-language-support glsl glsl-mode-hook
((c-indent-line . c-basic-offset)
(c-indent-region . c-basic-offset)))
2022-02-14 11:15:27 -08:00
(smart-tabs-add-language-support ruby ruby-mode-hook
((ruby-indent-line . ruby-indent-level)))
2020-08-31 17:40:52 -07:00
(smart-tabs-add-language-support lua lua-mode-hook
2021-08-12 06:32:27 -07:00
((lua-indent-line . lua-indent-level))))
(use-package ialign
:ensure t
:init
(setq ialign-initial-repeat t))
(use-package rainbow-delimiters
:ensure t
:hook (prog-mode . rainbow-delimiters-mode)
:init
(setq rainbow-delimiters-max-face-count 8)
:config
(dolist (face '((rainbow-delimiters-depth-1-face . "#e88385")
(rainbow-delimiters-depth-2-face . "#ec79c0")
(rainbow-delimiters-depth-3-face . "#cb88e8")
(rainbow-delimiters-depth-4-face . "#9181e8")
(rainbow-delimiters-depth-5-face . "#8dc8e8")
(rainbow-delimiters-depth-6-face . "#9fe8b6")
(rainbow-delimiters-depth-7-face . "#e2e8ab")
(rainbow-delimiters-depth-8-face . "#e8c498")))
(set-face-attribute (car face) nil :foreground (cdr face))))
(use-package undo-tree
:ensure t)
(use-package whitespace
2022-06-05 21:51:41 -07:00
:hook ((prog-mode . whitespace-mode)
(text-mode . whitespace-mode))
:init
(setq whitespace-style '(face
space-before-tab
space-mark
spaces
tab-mark
tabs
trailing))
:config
(dolist (face '(whitespace-space whitespace-tab))
2022-06-05 21:51:41 -07:00
(set-face-attribute face nil :background "#0f0c11" :foreground "#7e4594")))
2020-03-20 20:22:31 -07:00
(use-package hl-line
2022-06-05 21:51:41 -07:00
:hook ((prog-mode . hl-line-mode)
(text-mode . hl-line-mode)))
2020-03-20 20:22:31 -07:00
(use-package image-file
:config
(auto-image-file-mode))
2020-12-07 05:02:01 -08:00
(use-package editorconfig
:ensure t
:config
(editorconfig-mode 1))
;; ergonomics
(use-package mwheel
:init
(setq mouse-wheel-progressive-speed nil))
(use-package vc
:init
(setq vc-follow-symlinks t))
(use-package files
:init
(setq require-final-newline t))
2020-02-15 18:55:26 -08:00
(use-package iedit
:ensure t
:init
(setq iedit-toggle-key-default nil)
:config
(agw-set-key "s" #'iedit-mode))
;; file management
(use-package dired
:config
(setq dired-listing-switches "-alhp --si")
(agw-set-key "t" #'dired-create-empty-file))
2022-02-14 11:15:27 -08:00
(use-package dired-x)
(use-package diredfl
:ensure t
2022-02-14 11:15:27 -08:00
:hook (dired-mode . diredfl-mode))
(use-package dirvish
:ensure t
:demand t
:after dired
:config
2022-02-14 11:15:27 -08:00
(agw-set-key "f" #'dirvish)
(dirvish-override-dired-mode))
(use-package deadgrep
:ensure t)
;; input
2020-10-02 12:39:46 -07:00
(unless (eq system-type 'windows-nt)
(use-package mule
:init
(setq current-language-environment "UTF-8"
keyboard-coding-system 'utf-8-unix))
(use-package mozc
:ensure t
:after mule
:config
(setq default-input-method "japanese-mozc")))
(use-package evil
:ensure t
2022-02-14 11:15:27 -08:00
:after (dirvish undo-tree)
:demand t
:hook ((evil-local-mode . turn-on-undo-tree-mode))
:config
(setq evil-cjk-emacs-word-boundary t
evil-cross-lines t
2020-02-15 18:53:32 -08:00
evil-mode-line-format 'after
evil-shift-width 3
evil-vsplit-window-right t
evil-want-keybinding nil
2022-02-14 11:15:27 -08:00
evil-indent-convert-tabs nil
evil-normal-state-tag "~"
2020-02-15 18:55:14 -08:00
evil-insert-state-tag "i"
evil-operator-state-tag "o"
evil-replace-state-tag "r"
evil-visual-state-tag 'agw-evil-visual-state-tag
evil-motion-state-tag "m"
2022-02-14 11:15:27 -08:00
evil-emacs-state-tag "x"
evil-undo-system 'undo-tree)
(evil-mode t)
(evil-global-set-key 'visual (kbd "g s") #'sort-lines)
(evil-global-set-key 'visual (kbd "g a") #'ialign))
(use-package evil-collection
:ensure t
:after evil
2022-02-14 11:15:27 -08:00
:demand t
:config
(evil-collection-init))
2020-01-16 01:34:14 -08:00
;; visuals
2022-02-14 11:15:27 -08:00
(use-package ligature
:load-path "/home/marrub/src/ligature.el"
:config
(ligature-set-ligatures
't
'("---" "===" "!==" "=!=" "!=" "=:=" "=/=" "&&&" "&&" "&=" "+++"
"++" "***" ";;" "!!" "???" "??" "?:" "?." "?=" "<:<" "<:" ":<"
":>" ">:" "<>" "<<<" ">>>" "-|" "_|_" "||-" "||=" "####" "###"
"##" "#{" "#[" "]#" "#(" "#?" "#_(" "#_" "#:" "#!" "#=" "^="
"<$>" "<$" "$>" "<+>" "<+" "+>" "<*>" "<*" "*>" "</>" "</" "/>"
"<!--" "<#--" "-->" "--" "->>" "<<-" "<-" "<=<" "=<<" "<<="
"<==>" "<==" "<=>" "==>" "=>>" ">=>" ">>=" ">=" ">>-" "-<<" ">->"
">-" "<-<" "-<" "<-|" "<=|" "<=" "<->" "|=>" "|->" "->" "=>" "|="
"|-" "<~~" "<~>" "<~" "~~>" "~~" "~>" "~-" "-~" "~@" "[||]" "|]"
"[|" "|}" "{|" "[<" ">]" "<|>" "|||>" "<|||" "||>" "<||" "|>"
"<|" "||" "..." "..<" ".." ".=" ".?" ":::" "::=" "::" ":=" ":?"
":?>" "///" "//" "/*" "*/" "//=" "/==" "==" "/=" "@_" "__" "<<"
">>"))
(global-ligature-mode 't))
(use-package simple
:init
(setq line-move-ignore-invisible nil)
:config
(transient-mark-mode t))
(use-package tool-bar
:config
(tool-bar-mode 0))
(use-package menu-bar
:config
(menu-bar-mode 0))
(use-package paren
:init
(setq show-paren-delay 0.0
show-paren-style 'parenthesis)
:config
(show-paren-mode t))
2020-02-05 22:43:59 -08:00
(use-package fringe
:config
(fringe-mode 0))
2020-12-07 05:02:01 -08:00
(use-package subword)
2021-06-20 06:54:18 -07:00
(use-package rainbow-mode
:ensure t
:hook ((prog-mode . rainbow-mode)
(text-mode . rainbow-mode)))
2020-12-07 05:02:01 -08:00
;; end of init
(setq gc-cons-threshold (* 1 1000 1000))
2020-01-16 01:34:14 -08:00
;; EOF