scripts/emacs/init.el

350 lines
9.1 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-backup (locate-user-emacs-file "backup"))
(usr-custom (locate-user-emacs-file "custom.el"))
(usr-data (locate-user-emacs-file "data.el")))
(setq auto-save-default nil
backup-directory-alist `((".*" . ,usr-backup))
create-lockfiles nil
custom-file usr-custom
gc-cons-threshold 64000000
global-mark-ring-max 1024
inhibit-compacting-font-caches t
inhibit-startup-screen t
initial-buffer-choice "~/org/init.org"
initial-scratch-message nil
mark-ring-max 1024)
(load custom-file)
(load usr-data))
(defalias #'yes-or-no-p #'y-or-n-p)
(setq fill-column 80
sentence-end-double-space nil)
(set-face-attribute 'variable-pitch nil :height 120 :family "Source Sans Pro")
(set-face-attribute 'fixed-pitch nil :height 120 :family "Source Code Pro")
(dolist (range '((#x2310 . #x26bf)
(#x26c0 . #x329f)
(#x1f000 . #x1fa9f)))
(set-fontset-font t range "Noto Color Emoji"))
(set-fontset-font t '(#x2e80 . #x9fff) "Noto Sans CJK JP")
;; mode line
(setq-default mode-line-format
'("%+"
mode-line-buffer-identification
mode-line-modes
"%5l↑ %5c→ %5i= "
mode-line-percent-position))
;; scrolling
(setq scroll-conservatively 101
scroll-step 1
hscroll-step 1)
(set-scroll-bar-mode nil)
;; `prog-mode'
(add-hook 'prog-mode-hook #'flyspell-prog-mode)
(add-hook 'prog-mode-hook #'prettify-symbols-mode)
(add-hook 'prog-mode-hook #'subword-mode)
(add-hook 'prog-mode-hook #'agw-prog-mode)
;; macros
(add-hook 'emacs-lisp-mode-hook #'agw-fp-mode)
(add-hook 'lisp-mode-hook #'agw-fp-mode)
(add-hook 'reb-lisp-mode-hook #'agw-fp-mode)
(add-hook 'scheme-mode-hook #'agw-fp-mode)
(add-hook 'before-save-hook #'copyright-update)
(add-hook 'before-save-hook #'delete-trailing-whitespace)
(agw-set-key "b d" #'kill-this-buffer)
(agw-set-key "b e" #'ibuffer)
(agw-set-key "h" #'windmove-left)
(agw-set-key "j" #'windmove-down)
(agw-set-key "k" #'windmove-up)
(agw-set-key "l" #'windmove-right)
(agw-set-key "t" #'agw-touch)
(agw-key-map)
(global-set-key (kbd "C-x C-<tab>") #'agw-key-map)
;; packages
(require 'package)
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
;; theme
(use-package base16-theme
:ensure t)
(use-package rand-theme
:ensure t
:after base16-theme
:config
(setq rand-theme-wanted '(base16-atelier-cave
base16-atelier-forest
base16-atelier-heath))
(rand-theme)
(set-face-attribute 'mode-line nil
:background "#0a0a0a"
:foreground "#92ebf0"))
;; major modes
(use-package cc-mode
:init
(defvaralias 'c-basic-offset 'tab-width))
(use-package fish-mode
:ensure t
:init
(defvaralias 'fish-indent-offset 'tab-width))
(use-package glsl-mode
:ensure t)
(use-package haskell-mode
:ensure t
:hook (haskell-mode . agw-fp-mode))
(use-package markdown-mode
:ensure t)
(use-package ruby-mode
:init
(defvaralias 'ruby-indent-level 'tab-width)
(setq ruby-insert-encoding-magic-comment nil))
(use-package rust-mode
:ensure t
:init
(defvaralias 'rust-indent-offset 'tab-width))
;; org-mode
(use-package org
:hook ((org-mode . variable-pitch-mode)
(org-mode . 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
(dolist (face '(org-block
org-block-begin-line
org-block-end-line
org-checkbox
org-code
org-date
org-document-info-keyword
org-table
org-verbatim))
(set-face-attribute face nil :inherit 'fixed-pitch))
(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)
:config
(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-insinuate
'c
'fish
'javascript
'rust
'glsl))
(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)
: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 nil :foreground "#7e4594")))
(use-package image-file
:config
(auto-image-file-mode))
;; 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))
;; file management
(use-package dired
:config
(setq dired-listing-switches "-alhp --si")
(agw-set-key "f" #'dired-jump))
(use-package ranger
:ensure t
:after dired
:hook (dired-mode . ranger-override-dired-fn)
:config
(setq ranger-override-dired 'ranger))
(use-package deadgrep
:ensure t)
;; input
(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
:init
(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)
:config
(evil-mode t)
(evil-global-set-key 'normal (kbd "K w") #'deadgrep)
(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
:config
(evil-collection-init))
;; visuals
(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))
;; EOF