scripts/emacs/init.el

400 linhas
10 KiB
EmacsLisp
Original Anotar Histórico

Esse arquivo contém caracteres Unicode ambíguos!

Este arquivo contém caracteres ambíguos Unicode que podem ser confundidos com outros no seu idioma atual. Se o seu caso de uso for intencional e legítimo, você pode ignorar com segurança este aviso. Use o botão Escapar para destacar esses caracteres.

;; 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 #'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)
;; `text-mode'
(add-hook 'text-mode-hook #'flyspell-prog-mode)
(add-hook 'text-mode-hook #'subword-mode)
(add-hook 'text-mode-hook #'agw-prog-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-<tab>") #'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
(load-theme 'base16-atelier-cave t)
(dolist (face '(mode-line
mode-line-buffer-id
mode-line-emphasis
mode-line-highlight
mode-line-inactive
header-line
header-line-highlight))
(set-face-attribute face nil
:height 120
:family agw-mode-line-family
:weight 'normal
:width 'normal))
(set-face-attribute 'mode-line nil
:background "#0a0a0a"
:foreground "#92ebf0"))
;; major modes
(use-package powershell
:ensure t
:init
(defvaralias 'powershell-indent 'tab-width))
(use-package js
:init
(defvaralias 'js-indent-level 'tab-width))
(use-package json-mode
:ensure t
:after js
:init
(defvaralias 'json-reformat:indent-width 'tab-width))
(use-package mmm-mode
:ensure t
:init
(setq mmm-submode-decoration-level 0)
:config
(require 'mmm-auto)
(mmm-add-group 'rust-doc
'((rust-doc-line
:submode markdown-mode
:face mmm-comment-submode-face
:front "///\s+"
:back "\n")
(rust-doc-block
:submode markdown-mode
:face mmm-comment-submode-face
:front "/\\*\\*"
:back "\\*\\*/")))
(mmm-add-mode-ext-class 'ruby-mode nil 'here-doc)
(mmm-add-mode-ext-class 'rust-mode nil 'rust-doc))
(use-package cc-mode
:mode (("\\.zsc\\'" . c-mode)
("\\.zc\\'" . 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 . 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
:hook ((rust-mode . mmm-mode))
:init
(defvaralias 'rust-indent-offset 'tab-width))
;; org-mode
(use-package org
:hook ((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
(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 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-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 hl-line
:hook (prog-mode . hl-line-mode))
(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))
(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
(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))
;; EOF