;; 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-") #'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