Skip to content

Latest commit

 

History

History
499 lines (423 loc) · 19.4 KB

nbm-config.org

File metadata and controls

499 lines (423 loc) · 19.4 KB

nbm-config

Packages

Core Packages

(unless (package-installed-p 'evil) (package-install 'evil))
(use-package evil :config (evil-mode))

(use-package tex :ensure auctex)
(use-package auctex-latexmk)

(use-package helm :diminish helm-mode
  :init
  (global-set-key (kbd "M-x") 'helm-M-x)
  (setq helm-autoresize-mode t)
  (setq helm-display-header-line nil)
  (setq helm-buffer-max-length 30)
  (helm-mode 1)
  (add-hook 'helm-minibuffer-set-up-hook 'helm-exchange-minibuffer-and-header-line))

(use-package helm-bibtex
  :init
  (with-eval-after-load 'helm-bibtex
    (require 'bibtex-completion)
    ;; changing the default action of helm-bibtex
    (helm-add-action-to-source "Insert BibTeX key" 'helm-bibtex-insert-citation helm-source-bibtex 0)
    (setq bibtex-completion-cite-prompt-for-optional-arguments nil)
    (setq bibtex-completion-display-formats (quote ((t . "${year:4} ${author:26} ${title:**} "))))))

(use-package org-ref)
(use-package org-roam)
(use-package org-roam-ui)

(use-package openwith :init (openwith-mode t)
  (cond ((equal system-type 'gnu/linux)
         (setq process-connection-type nil)
         (setq openwith-associations '(("\\.pdf\\'" "xdg-open" (file)))))
        ((equal system-type 'darwin)
         (setq openwith-associations '(("\\.pdf\\'" "open -a Skim.app" (file))
                                  ("\\.hwp\\'" "open" (file))
                                  ("\\.hwpx\\'" "open" (file))
                                  ("\\.pptx\\'" "open" (file))
                                  ("\\.xlsx\\'" "open" (file))
                                  ("\\.docx\\'" "open" (file))
                                  ("\\.djvu\\'" "open" (file)))))
        (t
         (setq openwith-associations '(("\\.pdf\\'" "open" (file))
                                  ("\\.hwp\\'" "open" (file))
                                  ("\\.hwpx\\'" "open" (file))
                                  ("\\.pptx\\'" "open" (file))
                                  ("\\.xlsx\\'" "open" (file))
                                  ("\\.docx\\'" "open" (file))
                                  ("\\.djvu\\'" "open" (file)))))))

(use-package yasnippet :diminish yas-minor-mode
  :init
  (setq yas-snippet-dirs (list (concat *nbm-home* "nbm-user-settings/snippets/")
                               (concat "~/nbm-root/newbiemacs/nbm-user-settings/snippets")))
  (setq yas-triggers-in-field t); Enable nested triggering of snippets
  (add-to-list 'warning-suppress-types '(yasnippet backquote-change))
  (yas-global-mode 1) (yas-reload-all))

(use-package spacemacs-theme :defer t
  :init (load-theme 'spacemacs-dark t))

(use-package spaceline)

(use-package which-key :diminish which-key-mode
  :init
  (setq which-key-sort-order 'which-key-key-order-alpha)
  (setq which-key-idle-delay 0.1)
  (setq which-key-prefix-prefix nil)
  (which-key-mode 1)
  (set-face-attribute 'which-key-key-face nil
                      :foreground "MediumSpringGreen" :weight 'bold)
  (set-face-attribute 'which-key-separator-face nil
                      :foreground "Antiquewhite1")
  (set-face-attribute 'which-key-command-description-face nil
                      :foreground "SandyBrown")
  (set-face-attribute 'which-key-group-description-face nil
                      :foreground "Deepskyblue1")
  (set-face-attribute 'which-key-note-face nil
                      :foreground "Mediumpurple1"))

Additional Package

(use-package magit
  :init
  (setq transient-values
        '((magit-log:magit-log-mode "-n256" "--graph" "--color" "--decorate"))))

(use-package evil-surround
  :bind (:map evil-visual-state-map
              ("s" . evil-surround-region))
  :init (global-evil-surround-mode 1))

(use-package evil-org :diminish evil-org-mode
  :init
  (with-eval-after-load 'evil-org
    (add-to-list 'load-path (concat (getenv "HOME") "/.emacs.d/plugins/evil-org-mode"))
    (add-hook 'org-mode-hook 'evil-org-mode)
    (evil-org-set-key-theme '(navigation insert textobjects additional calendar))
    (evil-define-key 'insert 'evil-org-mode (kbd "C-d") 'delete-char)
    (evil-define-key 'insert 'evil-org-mode (kbd "RET") 'org-return-and-maybe-indent)
    (require 'evil-org-agenda)
    (evil-org-agenda-set-keys)))

(use-package evil-nerd-commenter)

(use-package undo-tree :diminish undo-tree-mode
  :init
  (evil-set-undo-system 'undo-tree)
  (global-undo-tree-mode 1))

(use-package company :diminish company-mode
  :init (global-company-mode))

(use-package org-bullets
  :init
  (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))

(use-package ox-reveal)
(use-package org-pomodoro)

(use-package winum
  :init
  (setq winum-keymap
        (let ((map (make-sparse-keymap)))
          (define-key map (kbd "M-0") 'winum-select-window-0-or-10)
          (define-key map (kbd "M-1") 'winum-select-window-1)
          (define-key map (kbd "M-2") 'winum-select-window-2)
          (define-key map (kbd "M-3") 'winum-select-window-3)
          (define-key map (kbd "M-4") 'winum-select-window-4)
          (define-key map (kbd "M-5") 'winum-select-window-5)
          (define-key map (kbd "M-6") 'winum-select-window-6)
          (define-key map (kbd "M-7") 'winum-select-window-7)
          (define-key map (kbd "M-8") 'winum-select-window-8)
          map))
  (winum-mode))

(use-package anzu :diminish anzu-mode
  :init
  (global-anzu-mode +1)
  (setq anzu-cons-mode-line-p nil)
  (custom-set-faces
   `(lazy-highlight ((t (:foreground "#Ffd60a" :background "#Ff3e96"))))))

(use-package rainbow-delimiters :diminish rainbow-delimiters-mode
  :init
  (add-hook 'emacs-lisp-mode-hook #'rainbow-delimiters-mode) ; coloring nested parentheses
  (add-hook 'python-mode-hook #'rainbow-delimiters-mode)
  (add-hook 'LaTeX-mode-hook #'rainbow-delimiters-mode))

(use-package smartparens :diminish smartparens-mode
  :init
  (require 'smartparens-config)
  (smartparens-global-mode))

(use-package valign :diminish valign-mode
  :init (add-hook 'org-mode-hook #'valign-mode))

(use-package beacon :diminish beacon-mode
  :init (beacon-mode 1))

(use-package avy
  :init
  (setq avy-background t)
  (setq avy-keys (number-sequence ?a ?z))
  (global-set-key (kbd "M-n") 'avy-goto-word-or-subword-1)
  (setq avy-all-windows nil))

(use-package org-mac-link)

Diminish

(use-package diminish)
(with-eval-after-load 'org-indent (diminish 'org-indent-mode))
(with-eval-after-load 'reftex (diminish 'reftex-mode))
(with-eval-after-load 'autorevert (diminish 'auto-revert-mode))
(with-eval-after-load 'eldoc (diminish 'eldoc-mode))
(diminish 'visual-line-mode)
(diminish 'org-roam-ui-mode)
(diminish 'org-roam-ui-follow-mode)

load files

(dolist (file (directory-files (concat (getenv "HOME") "/nbm-root/nbm-system") t "[.]el$"))
  (load-file file))
(setq bookmark-default-file (concat *nbm-home* "nbm-user-settings/references/bookmark.el"))

(nbm-key-tree-load)

(cond ((equal system-type 'windows-nt)
       (setq ispell-program-name "hunspell")
       (setq ispell-dictionary "en_US")
       (setq ispell-hunspell-dictionary-alist '(("en_US" "c:/msys64/mingw64/share/hunspell/en_US.aff")))
       (setq ispell-local-dictionary-alist '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "en_US") nil utf-8))))
      ((equal system-type 'darwin)
       (if (file-exists-p "/opt/homebrew/bin/ispell")
           (setq ispell-program-name "/opt/homebrew/bin/ispell")
         (setq ispell-program-name "/usr/local/bin/ispell")))
      ((equal system-type 'gnu/linux)
       (setq ispell-program-name "/usr/bin/ispell")))

(unless (file-exists-p (concat *nbm-home* "nbm-user-settings/references/my-dictionary"))
  (copy-file (concat (getenv "HOME") "/nbm-root/newbiemacs/nbm-user-settings/references/my-dictionary")
             (concat *nbm-home* "nbm-user-settings/references/my-dictionary")))

(setq ispell-personal-dictionary (concat *nbm-home* "nbm-user-settings/references/my-dictionary"))

customization

system

(setq mac-command-modifier 'meta)
(setq mac-option-modifier 'apple)
(setq x-select-enable-clipboard t)
(setq delete-by-moving-to-trash t)
(when (eq system-type 'darwin)
  (setq trash-directory "~/.Trash"))

(setq help-window-select t)
(defalias 'yes-or-no-p 'y-or-n-p)
(setq large-file-warning-threshold nil)

(save-place-mode)
(setq find-file-visit-truename t)

(recentf-mode 1)
(setq recentf-max-menu-items 55)
(setq recentf-max-saved-items 55)

(setq sentence-end-double-space nil)
(add-to-list 'auto-mode-alist '("\\.sage\\'" . python-mode))

appearance

(global-visual-line-mode)
(global-hl-line-mode)

(setq max-mini-window-height 0.8)

(tool-bar-mode -1)
(setq scroll-step 1) ;; keyboard scroll one line at a time

(set-face-attribute 'default nil :height 150)
(setq ring-bell-function 'ignore)
(setq resize-mini-windows t)
(set-cursor-color "LightGreen")

(setq inhibit-startup-screen t)

tab-line-mode

(global-tab-line-mode)

(setq tab-line-new-button-show nil)
(setq tab-line-separator " ")
(set-face-attribute 'tab-line-tab nil
                    :background "YellowGreen" :foreground "black" :box nil)
(set-face-attribute 'tab-line-tab-current nil
                    :background "Yellow1" :foreground "black" :box nil)
(set-face-attribute 'tab-line-tab-inactive nil
                    :background "DarkGray" :foreground "black" :box nil)
(set-face-attribute 'tab-line-highlight nil
                    :background "Seagreen1" :foreground 'unspecified)

(setq tab-line-exclude-modes
      '(help-mode completion-list-mode org-agenda-mode helm-major-mode magit-status-mode))
(setq tab-line-tab-name-function 'tab-line-tab-name-truncated-buffer)
(setq tab-line-tab-name-truncated-max 15)

mode line

(spaceline-spacemacs-theme)
(spaceline-helm-mode)
(spaceline-info-mode)
(setq winum-auto-setup-mode-line nil)

(setq mode-line-position (list "(%l,%c)"))
(setq display-time-mode t)
(setq size-indication-mode t)
(setq spaceline-highlight-face-func 'spaceline-highlight-face-evil-state)
(spaceline-toggle-input-method-on)
(spaceline-toggle-version-control-off)
(spaceline-toggle-buffer-encoding-abbrev-off)
(setq spaceline-org-clock-p t)
(setq org-clock-mode-line-total 'today)

evil mode

(evil-set-leader '(normal visual motion) (kbd "SPC"))
(evil-set-leader '(normal visual motion) (kbd ",") t)
(evil-set-leader '(normal visual motion insert emacs) (kbd "M-o"))
(evil-set-leader '(normal visual motion insert emacs) (kbd "M-RET") t)

(define-key evil-visual-state-map (kbd "j") 'evil-next-visual-line)
(define-key evil-visual-state-map (kbd "k") 'evil-previous-visual-line)
(define-key evil-visual-state-map (kbd "<down>") 'evil-next-visual-line)
(define-key evil-visual-state-map (kbd "<up>") 'evil-previous-visual-line)
(define-key evil-normal-state-map (kbd "j") 'evil-next-visual-line)
(define-key evil-normal-state-map (kbd "k") 'evil-previous-visual-line)
(define-key evil-normal-state-map (kbd "<down>") 'evil-next-visual-line)
(define-key evil-normal-state-map (kbd "<up>") 'evil-previous-visual-line)

(define-key evil-insert-state-map (kbd "C-y") 'yank)
(define-key evil-insert-state-map (kbd "M-y") 'helm-show-kill-ring)

latex

(server-start)                        ; This is needed for Skim to inverse search
(setq TeX-source-correlate-mode 1)
(setq reftex-default-bibliography (concat *nbm-home* "nbm-user-settings/references/ref.bib"))

(setq TeX-save-query nil)
(setq TeX-auto-save t)
(setq TeX-electric-math (cons "\\( " " \\)"))
(setq reftex-plug-into-AUCTeX t)
(add-hook 'LaTeX-mode-hook 'LaTeX-math-mode)
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
(add-hook 'LaTeX-mode-hook (lambda () (setq TeX-command-default "LatexMk")))

;; On Mac, Skim will be used as a pdf-viewer.
(when (equal system-type 'darwin)
  (setq TeX-view-program-list
        '(("Skim" "/Applications/Skim.app/Contents/SharedSupport/displayline -b -g %n %o"))
        TeX-view-program-selection '((output-pdf "Skim"))))

;; On Windows, SumatraPDF will be used as a pdf-viewer.
(when (equal system-type 'windows-nt)
  (load-file (concat (getenv "HOME") "/nbm-root/nbm-windows-config.el")))

;; The following is helpful for recognizing ^ and _ in latex code.
(custom-set-faces
 '(font-latex-script-char-face ((t (:foreground "#Ff9f0a"))))
 '(font-latex-sectioning-1-face ((t (:foreground "#Ff82ab"))))
 '(font-latex-sectioning-2-face ((t (:foreground "#Ffd60a")))))

(evil-define-key '(normal visual) LaTeX-mode-map (kbd "%") 'nbm-latex-evil-jump-item)

(evil-define-key 'emacs reftex-toc-mode-map (kbd "q") 'nbm-reftex-toc-quit)
(evil-define-key 'emacs reftex-toc-mode-map (kbd "RET") 'nbm-reftex-toc-goto-line-and-hide)
(evil-define-key 'emacs reftex-toc-mode-map (kbd "j") 'reftex-toc-next)
(evil-define-key 'emacs reftex-toc-mode-map (kbd "k") 'reftex-toc-previous)

(evil-define-key 'emacs reftex-select-label-mode-map (kbd "k") 'reftex-select-previous)
(evil-define-key 'emacs reftex-select-label-mode-map (kbd "j") 'reftex-select-next)

(global-set-key "\C-\M-e" 'nbm-end-of-defun)
(define-key evil-normal-state-map (kbd "]]") 'nbm-end-of-defun)
(define-key evil-visual-state-map (kbd "]]") 'nbm-end-of-defun)

auctex-latexmk

(auctex-latexmk-setup)
(setq auctex-latexmk-inherit-TeX-PDF-mode t)
;; To make latexmk use pdflatex we need ~/.latexmkrc file.
(unless (file-exists-p (concat (getenv "HOME") "/.latexmkrc"))
  (find-file (concat (getenv "HOME") "/.latexmkrc"))
  (insert "$pdf_mode = 1;")
  (save-buffer) (kill-buffer))
(require 'reftex-ref)

(setq LaTeX-clean-intermediate-suffixes (remove "\\.synctex\\.gz" LaTeX-clean-intermediate-suffixes))

org-mode

(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-cc" 'org-capture)

(setq org-return-follows-link t)
(evil-define-key 'normal org-mode-map (kbd "RET") 'org-open-at-point)

(setq org-directory (concat *nbm-home* "org/"))
(setq org-default-notes-file (concat org-directory "/capture.org"))
(setq org-agenda-span 1)
(setq org-log-into-drawer t)
(setq org-startup-with-inline-images nil)
(setq org-duration-format (quote h:mm))
(setq org-startup-indented t)
(setq org-ref-default-bibliography(concat *nbm-home* "nbm-user-settings/references/ref.bib")
      bibtex-completion-bibliography (concat *nbm-home* "nbm-user-settings/references/ref.bib"))

(eval-after-load "org" '(require 'ox-md nil t))
(setq org-format-latex-options (plist-put org-format-latex-options :scale 2.0))

(define-key org-mode-map (kbd "M-m") 'nbm-org-toggle-latex-mode)
(define-key LaTeX-mode-map (kbd "M-m") 'nbm-org-toggle-latex-mode)
(define-key org-mode-map (kbd "<drag-n-drop>") 'nbm-org-drag-n-drop)

(setq org-imenu-depth 9)
(nbm-org-load-agenda-files)

Org-Roam

(when (package-installed-p 'org-roam)
  (setq org-roam-directory (concat *nbm-home* "org/"))
  (org-roam-db-autosync-mode)
  (setq org-roam-capture-templates '(("d" "default" plain "%?"
                                      :target (file+head "${slug}.org"
                                                         "#+title: ${title}\n ")))))

Sage

(font-lock-add-keywords 'python-mode
                        '(("<\\|>\\|=" . 'anzu-replace-to)
                          ("+\\|-\\|\\^\\|/\\|*" . 'compilation-info)
                          ("\\b[0-9]+\\b" . 'org-document-info)))

Dired

(setq dired-dwim-target t)
(evil-define-key 'normal dired-mode-map (kbd "M-<backspace>") 'newbie)
(evil-define-key 'normal dired-mode-map (kbd "SPC") 'evil-send-leader)
(evil-define-key 'normal dired-mode-map (kbd ",") 'evil-send-localleader)
(evil-define-key 'emacs dired-mode-map (kbd "M-<backspace>") 'newbie)
(evil-define-key 'emacs dired-mode-map (kbd "SPC") 'evil-send-leader)
(evil-define-key 'emacs dired-mode-map (kbd ",") 'evil-send-localleader)

Editing styles (Emacs, Vim, Windows)

(setq evil-default-state 'emacs)
(evil-set-initial-state 'org-agenda-mode 'emacs)
(evil-set-initial-state 'diff-mode 'emacs)
(evil-set-initial-state 'help-mode 'emacs)
(evil-set-initial-state 'Info-mode 'emacs)
(evil-set-initial-state 'org-mode 'emacs)

(unless (nbm-get-user-variable "editing-style")
  (nbm-set-user-variable "editing-style" "windows"))

(when (equal (nbm-get-user-variable "editing-style") "emacs")
  (evil-global-set-key 'emacs (kbd "C-r") 'evil-redo))

(unless (equal (nbm-get-user-variable "editing-style") "emacs")
  (define-key minibuffer-local-map (kbd "C-v") 'yank)
  (define-key minibuffer-local-map (kbd "M-v") 'yank)
  (define-key helm-map (kbd "C-v") 'yank)
  (define-key helm-map (kbd "M-v") 'yank))

(when (equal (nbm-get-user-variable "editing-style") "vim")
  (evil-set-initial-state 'text-mode 'normal)
  (evil-set-initial-state 'org-mode 'normal)
  (evil-set-initial-state 'latex-mode 'normal)
  (evil-set-initial-state 'bibtex-mode 'normal)
  (evil-set-initial-state 'emacs-lisp-mode 'normal)
  (evil-set-initial-state 'fundamental-mode 'normal)
  (evil-set-initial-state 'snippet-mode 'normal)
  (evil-set-initial-state 'python-mode 'normal))

(when (equal (nbm-get-user-variable "editing-style") "windows")
  (eval-after-load 'org
    (progn
      (define-key org-mode-map (kbd "<S-up>") nil)
      (define-key org-mode-map (kbd "<S-down>") nil)
      (define-key org-mode-map (kbd "<S-right>") nil)
      (define-key org-mode-map (kbd "<S-left>") nil)))
  (evil-global-set-key 'emacs (kbd "C-v") 'yank)
  (evil-global-set-key 'emacs (kbd "C-c") 'nbm-windows-ctrl-c)
  (evil-global-set-key 'emacs (kbd "C-x") 'nbm-windows-ctrl-x)
  (evil-global-set-key 'emacs (kbd "C-a") 'mark-whole-buffer)
  (evil-global-set-key 'emacs (kbd "C-f") 'isearch-forward)
  (evil-global-set-key 'emacs (kbd "C-S-f") 'query-replace)
  (evil-global-set-key 'emacs (kbd "C-s") 'save-buffer)
  (evil-global-set-key 'emacs (kbd "C-w") 'kill-this-buffer)
  (evil-global-set-key 'emacs (kbd "C-1") 'delete-other-windows)
  (define-key key-translation-map (kbd "ESC") (kbd "C-g"))
  (define-key key-translation-map (kbd "C-z") (kbd "C-/"))
  (evil-global-set-key 'emacs (kbd "C-y") 'evil-redo)
  (global-set-key "\C-c\C-c" 'org-capture-finalize)
  (global-set-key "\C-c\C-k" 'org-capture-kill)
  (setq org-support-shift-select t))

Welcome page

(when (window-system)  ; if emacs is run as an application other than terminal
  (if *nbm-startup-frame*
      (nbm-set-startup-frame)
    (nbm-magnet-move-frame ?l)))
(newbie)
(if (get-buffer "*scratch*") (kill-buffer "*scratch*"))