;; startup (let ((usr-data (locate-user-emacs-file "data.el"))) (load custom-file) (load usr-data)) ;; mode line (setq-default mode-line-format '("%+" mode-line-buffer-identification mode-line-modes "%5l↑%3c→%6i⇆" (:eval (number-to-string (count-lines (point-min) (point-max)))) "↓" 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 #'agw-flyspell-prog-mode) (add-hook 'prog-mode-hook #'prettify-symbols-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) ;; `hack-local-variables' (add-hook 'hack-local-variables-hook #'agw-after-local-vars) ;; macros (setq initial-buffer-choice (lambda () (if (buffer-file-name) (current-buffer) (find-file "~/org/init.org")))) (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 #'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-") #'agw-key-map-mode) ;; packages (require 'package) (unless (package-installed-p 'use-package) (package-refresh-contents) (package-install '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)) (use-package inkpot-theme :after base16-theme :ensure t :config (unless (display-graphic-p) (load-theme 'inkpot t nil)) (set-face-attribute 'mode-line nil :background "#0a0a0a" :foreground "#92ebf0")) ;; major modes (use-package elisp-mode) (use-package eldoc) (use-package yaml-mode :ensure t) (use-package cmake-mode :ensure t :init (defvaralias 'cmake-tab-width 'tab-width)) (use-package powershell :ensure t :init (defvaralias 'powershell-indent 'tab-width)) (use-package js :init (defvaralias 'js-indent-level 'tab-width)) (use-package css-mode :init (defvaralias 'css-indent-offset 'tab-width)) (use-package lua-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 mmm-mode :ensure t) (use-package mmm-auto :init (setq mmm-submode-decoration-level 0) :config (mmm-add-mode-ext-class 'ruby-mode nil 'here-doc)) (use-package python :init (defvaralias 'python-indent-offset 'tab-width)) (use-package cc-mode :hook (( c-mode . agw-cc-mode) (c++-mode . agw-cc-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 :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 :hook ((markdown-mode . agw-flyspell-mode)) :mode (("\\.mdwn\\'" . markdown-mode))) (use-package ninja-mode :ensure t) (use-package ruby-mode :hook ((ruby-mode . mmm-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)) (use-package sgml-mode :hook (html-mode . agw-fp-mode)) ;; 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) :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 lua lua-mode-hook ((lua-indent-line . lua-indent-level))) (smart-tabs-insinuate 'c 'fish 'glsl 'javascript 'lua 'rust)) (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 hl-line :hook (prog-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 "f" #'dired-jump) (agw-set-key "t" #'dired-create-empty-file)) (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 (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 :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 evil-indent-convert-tabs nil) ;; tags (setq 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") :config (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 :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)) (use-package subword) (use-package dim :ensure t :after (editorconfig eldoc rainbow-mode simple subword undo-tree whitespace) :config (dim-minor-names '((abbrev-mode "Ab") (editorconfig-mode "Ec") (eldoc-mode "El") (isearch-mode "Is") (subword-mode "Sw") (undo-tree-mode "Ut") (whitespace-mode "Ws") (flyspell-mode "Fs") (rainbow-mode "Rb")))) (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