scripts/emacs/init.el

492 lines
13 KiB
EmacsLisp
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

;; startup
(let ((usr-data (locate-user-emacs-file "data.el")))
(load custom-file)
(load usr-data))
;; tabulation
(setq-default tab-width 3)
(setq-default standard-indent 3)
;; mode line
(setq-default mode-line-format
'("%+"
mode-line-buffer-identification
"%5l↑%3c→%6i⇆"
(:eval
(number-to-string (count-lines (point-min) (point-max))))
""
mode-line-percent-position
" "
mode-line-modes))
;; scrolling
(setq scroll-conservatively 101
scroll-step 1
hscroll-step 1)
(set-scroll-bar-mode nil)
;; `prog-mode'
(add-hook 'prog-mode-hook #'agw-flyspell-prog-mode)
(add-hook 'prog-mode-hook #'subword-mode)
;; `text-mode'
(add-hook 'text-mode-hook #'agw-flyspell-prog-mode)
(add-hook 'text-mode-hook #'subword-mode)
;; macros
(setq initial-buffer-choice
(lambda ()
(if (buffer-file-name)
(current-buffer)
(find-file "~/org/init.org"))))
(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)
(global-set-key (kbd "C-x C-<tab>") #'agw-key-map-mode)
;; packages
(eval-when-compile
(add-to-list 'load-path "/home/marrub/src/use-package")
(require 'use-package))
;; theme
(use-package base16-theme
: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))
;; major modes
(use-package elisp-mode)
(use-package eldoc)
(use-package sfz-mode
:ensure t)
(use-package yaml-mode
:ensure t)
(use-package cmake-mode
:ensure t
:init
(defvaralias 'cmake-tab-width 'tab-width))
(use-package powershell
:hook (powershell-mode . agw-maybe-smart-tabs-mode)
:ensure t
:init
(defvaralias 'powershell-indent 'tab-width))
(use-package js
:hook (js-mode . agw-maybe-smart-tabs-mode)
:init
(defvaralias 'js-indent-level 'tab-width))
(use-package css-mode
:init
(defvaralias 'css-indent-offset 'tab-width))
(use-package lua-mode
:hook (lua-mode . agw-maybe-smart-tabs-mode)
:ensure t
:init
(setq lua-indent-nested-block-content-align nil))
(use-package json-mode
:ensure t
:after js
:init
(defvaralias 'json-reformat:indent-width 'tab-width))
(use-package nim-mode
:ensure t
:init
(defvaralias 'nim-indent-offset 'tab-width))
(use-package poly-markdown
:ensure t)
(use-package poly-org
:ensure t)
(use-package python
:init
(defvaralias 'python-indent-offset 'tab-width))
(use-package cc-mode
:hook (( c-mode . agw-cc-mode)
( c-mode . agw-maybe-smart-tabs-mode)
(c++-mode . agw-cc-mode)
(c++-mode . agw-maybe-smart-tabs-mode))
:mode (("\\.zsc\\'" . c-mode)
("\\.zc\\'" . c-mode)
("\\.build\\'" . c++-mode))
:init
(setq c-auto-align-backslashes nil
c-basic-offset tab-width
c-default-style "linux")
(defvaralias 'c-basic-offset 'tab-width))
(use-package fish-mode
:hook (fish-mode . agw-maybe-smart-tabs-mode)
:ensure t
:init
(defvaralias 'fish-indent-offset 'tab-width))
(use-package glsl-mode
:hook (glsl-mode . agw-maybe-smart-tabs-mode)
:ensure t)
(use-package haskell-mode
:ensure t
:hook (haskell-mode . agw-no-tabs))
(use-package markdown-mode
:ensure t
:hook (markdown-mode . agw-flyspell-mode)
:mode (("\\.mdwn\\'" . markdown-mode)))
(use-package ninja-mode
:ensure t)
(use-package ruby-mode
:init
(defvaralias 'ruby-indent-level 'tab-width)
(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
:hook (rust-mode . agw-maybe-smart-tabs-mode)
:ensure t
:init
(defvaralias 'rust-indent-offset 'tab-width))
(use-package sgml-mode
: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))
(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
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
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)
(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
(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
:after (fish-mode glsl-mode rust-mode lua-mode ruby-mode)
:config
(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)))
(smart-tabs-add-language-support ruby ruby-mode-hook
((ruby-indent-line . ruby-indent-level)))
(smart-tabs-add-language-support lua lua-mode-hook
((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
: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))
(set-face-attribute face nil :background "#0f0c11" :foreground "#7e4594")))
(use-package hl-line
:hook ((prog-mode . hl-line-mode)
(text-mode . hl-line-mode)))
(use-package image-file
:config
(auto-image-file-mode))
(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))
(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))
(use-package dired-x)
(use-package diredfl
:ensure t
:hook (dired-mode . diredfl-mode))
(use-package dirvish
:ensure t
:demand t
:after dired
:config
(agw-set-key "f" #'dirvish)
(dirvish-override-dired-mode))
(use-package deadgrep
:ensure t)
;; input
(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
: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
evil-mode-line-format 'after
evil-shift-width 3
evil-vsplit-window-right t
evil-want-keybinding nil
evil-indent-convert-tabs nil
evil-normal-state-tag "~"
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"
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
:demand t
:config
(evil-collection-init))
;; visuals
(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))
(use-package fringe
:config
(fringe-mode 0))
(use-package subword)
(use-package rainbow-mode
:ensure t
:hook ((prog-mode . rainbow-mode)
(text-mode . rainbow-mode)))
;; end of init
(setq gc-cons-threshold (* 1 1000 1000))
;; EOF