HOME | EDIT | RSS | INDEX | ABOUT | GITHUB

Literal Programming Emacs Configure Literal Programming Emacs Configure

UI

Theme

dracula dark theme

(use-package dracula-theme
  :config
  (load-theme 'dracula t))

Fonts

Download JetBrain Mono font.

(if (member "JetBrains Mono" (font-family-list))
    (set-frame-font "JetBrains Mono Light 15"))

(when (eq system-type 'gnu/linux)
  (dolist (charset '(kana han symbol cjk-misc bopomofo))
    (set-fontset-font (frame-parameter nil 'font) charset
                      (font-spec :family "Noto Sans CJK SC"))))

(global-prettify-symbols-mode 1)

Default Settings

;; Setting
(server-start)
(keyboard-translate ?\C-h ?\C-?)
(column-number-mode 1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(menu-bar-mode -1)
(delete-selection-mode 1)
(global-auto-revert-mode 1)
(electric-indent-mode t)

(setq-default
 make-backup-files nil
 indent-tabs-mode nil)
;; make unix lineendings default
 (setq default-buffer-file-coding-system 'utf-8-unix)
(when (eq system-type 'darwin)
  (setq mac-option-modifier 'alt)
  (setq mac-option-modifier 'super) ; make opt key do Super
  (setq mac-command-modifier 'meta))
(setenv "PATH" "/usr/local/bin:/usr/bin:/bin")
    (if (eq system-type 'gnu/linux)
(let ((path-from-shell (shell-command-to-string "/usr/bin/fish -c \"echo -n \\$PATH[1]; for val in \\$PATH[2..-1];echo -n \\\":\\$val\\\";end\"")))
  (setenv "PATH" path-from-shell)
  (setq exec-path (split-string path-from-shell ":")))
(let ((path-from-shell (shell-command-to-string "/usr/local/bin/fish -c \"echo -n \\$PATH[1]; for val in \\$PATH[2..-1];echo -n \\\":\\$val\\\";end\"")))
  (setenv "PATH" path-from-shell)
  (setq exec-path (split-string path-from-shell ":")))
        )

Modes

ace jump mode

You can move your cursor to ANY position ( across window and frame ) in emacs by using only 3 times key press.

(use-package ace-jump-mode
:ensure t
:bind
("C-c SPC" . ace-jump-mode)
("C-c u SPC" . ace-jump-mode-pop-mark)
("C-c l SPC" . ace-jump-line-mode))

company

text completion framework

(use-package company
  :config
   (add-hook 'after-init-hook 'global-company-mode)
   )

Dhall

(use-package dhall-mode
  :ensure t
  :config
  (setq
    ;; uncomment the next line to disable automatic format
    ;; dhall-format-at-save nil

    ;; comment the next line to use unicode syntax
    ;; dhall-format-arguments (\` ("--ascii"))

    ;; header-line is obsoleted by lsp-mode
    dhall-use-header-line nil))

expand region

(use-package expand-region
:bind
("C-8" . er/expand-region)
("C--" . er/contract-region))

Flyspell

(use-package flycheck
  :ensure t
  :init
  (global-flycheck-mode)
  :config
  (dolist (hook '(text-mode-hook))
    (add-hook hook (lambda ()
                     (flyspell-mode 1)
                     (add-to-list 'company-backends 'company-ispell)
                     (message "company-ispell enable")
                     )
              ))
  (dolist (hook '(prog-mode-hook))
    (add-hook hook (lambda ()
                     (flyspell-prog-mode)
                     (setq company-backends (delete 'company-ispell company-backends))
                     (message "company-ispell disable")
                     )))
  )

fish

(use-package company-fish
:hook (shell-mode-hook . company-mode)
:init (add-to-list 'company-backends 'company-fish)
)

forge

;;(use-package forge
;;:after magit)

helm

  (use-package helm
    :ensure t
    :bind
    ("M-x" . helm-M-x)
    ("C-x b" . helm-mini)
    ("M-y" . helm-show-kill-ring)
    :bind (:map helm-map
          ("<tab>" . helm-execute-persistent-action) ; rebind tab to run persistent action
          ("C-i" . helm-execute-persistent-action) ; make TAB works in terminal
          ("C-z" . helm-select-action))
    :config

    (helm-autoresize-mode 1)
    (setq 
     helm-M-x-fuzzy-match t
     helm-buffers-fuzzy-matching t
     helm-recentf-fuzzy-match t
     helm-ag-fuzzy-match t ;(ref: ag-fuzzy-match)
     helm-locate-fuzzy-match t
     )
    )
(use-package helm-swoop
  :ensure t
  :bind (("M-m" . helm-multi-swoop-projectile)
         ("M-M" . helm-swoop-back-to-last-point))
  :init
(bind-key "M-m" 'helm-swoop-from-isearch isearch-mode-map))

  (use-package projectile
:ensure t
  :bind-keymap
  ("C-c p" . projectile-command-map)
  :config
  (projectile-global-mode)
  (setq projectile-indexing-method 'alien
  projectile-enable-caching t
  projectile-completion-system 'helm))

  (use-package helm-projectile
:ensure t
    :config
    (helm-projectile-on)
    )

ido

(use-package ido
  :bind
  :config
  (setq ido-everywhere t
        ido-enable-flex-matching t)
  (ido-mode 1))

indent guide

(use-package indent-guide
:hook (prog-mode . indent-guide-mode))

js2 mode

(use-package js2-mode
:config
(add-to-list 'auto-mode-alist '("\\.js$" . js2-mode))
(add-to-list 'auto-mode-alist '("\\.sjs$" . js2-mode))
(add-to-list 'auto-mode-alist '("\\.es6$" . js2-mode))
(setq js2-allow-rhino-new-expr-initializer nil)
(setq js2-enter-indents-newline t)
(setq js2-global-externs '("module" "require" "buster" "sinon" "assert" "refute" "setTimeout" "clearTimeout" "setInterval" "clearInterval" "location" "__dirname" "console" "JSON"))
(setq js2-idle-timer-delay 0.1)
(setq js2-indent-on-enter-key nil)
(setq js2-mirror-mode nil)
(setq js2-strict-inconsistent-return-warning nil)
(setq js2-auto-indent-p t)
(setq js2-include-rhino-externs nil)
(setq js2-include-gears-externs nil)
(setq js2-concat-multiline-strings 'eol)
(setq js2-rebind-eol-bol-keys nil)
(setq js2-mode-show-parse-errors t)
(setq js2-mode-show-strict-warnings nil))

key chord

  (use-package key-chord
    :config
    (key-chord-mode 1)
    (setq key-chord-two-keys-delay 0.03)
    (key-chord-define-global "vr"     'vr/replace)
    (key-chord-define-global "ln"     'display-line-numbers-mode)
    (key-chord-define-global ",."     "<>\C-b")
)

Langtool

Install LanguageTool version 3.0 or later (and java) https://languagetool.org/

extract them into /usr/local/share/LanguageTool

(use-package langtool
:config
(setq langtool-language-tool-jar "/usr/local/share/LanguageTool/languagetool-commandline.jar"
      langtool-disabled-rules '("WHITESPACE_RULE"
                                "EN_UNPAIRED_BRACKETS"
                                "COMMA_PARENTHESIS_WHITESPACE"
                                "EN_QUOTES")
      langtool-default-language "en-US")
)

ligature

(when (cl-search "27." (emacs-version))
  (use-package ligature
    :ensure t
    :init
    (ligature-set-ligatures 'prog-mode '("|||>" "<|||" "<==>" "<!--" "####" "~~>" "***" "||=" "||>"
                                         ":::" "::=" "=:=" "===" "==>" "=!=" "=>>" "=<<" "=/=" "!=="
                                         "!!." ">=>" ">>=" ">>>" ">>-" ">->" "->>" "-->" "---" "-<<"
                                         "<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->"
                                         "<--" "<-<" "<<=" "<<-" "<<<" "<+>" "</>" "###" "#_(" "..<"
                                         "..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~="
                                         "~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|"
                                         "[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:"
                                         ">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:"
                                         "<$" "<=" "<>" "<-" "<<" "<+" "</" "#{" "#[" "#:" "#=" "#!"
                                         "##" "#(" "#?" "#_" "%%" ".=" ".-" ".." ".?" "+>" "++" "?:"
                                         "?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)"
                                         "\\" "://"))
    (global-ligature-mode t))
  )

magit

(use-package magit
:bind
("C-x g" . magit-status))

multi cursor

(use-package multiple-cursors
:bind
("C-<" . mc/mark-previous-like-this)
 ("C->" . mc/mark-next-like-this)
 ("C-*" . mc/mark-all-like-this))

Nya mode

(use-package nyan-mode
:ensure t
:config (nyan-mode t))

on screen

(use-package on-screen
:ensure t
:config
(on-screen-global-mode 1)
(setq on-screen-highlight-method 'narrow-line))

org mode

(when (cl-search "27." (emacs-version))
  (require 'org-tempo))
(setq org-startup-folded 'content)
(setq org-startup-indented nil)
(setq org-startup-with-inline-images t)
(setq org-startup-truncated nil)
(setq org-src-tab-acts-natively t)

(setq js-indent-level 2)
(use-package org-crypt
:config 
(org-crypt-use-before-save-magic)
(setq org-crypt-key "A506C38D5CC847D0DF01134ADA8B833B52604E63")
(setq org-tags-exclude-from-inheritance '("crypt"))
)
(setq org-agenda-files (quote ("~/Dropbox/org")))
(setq org-refile-targets (quote ((nil :maxlevel . 9)
                                 (org-agenda-files :maxlevel . 9))))
    (setq org-directory "~/Dropbox/org")
    (setq org-default-notes-file "~/Dropbox/org/refile.org")

    ;; I use C-c c to start capture mode
    (global-set-key (kbd "C-c c") 'org-capture)
    (global-set-key (kbd "C-c a") 'org-agenda)

    ;; Capture templates for: TODO tasks, Notes, appointments, phone calls, meetings, and org-protocol
    (setq org-capture-templates
          (quote (("t" "Todo" entry (file+headline "~/Dropbox/org/refile.org" "Todos")
                   "* TODO %?\n%U\n%a\n" :clock-in t :clock-resume t)
                  ("n" "Note" entry (file+headline "~/Dropbox/org/note.org" "Notes")
                   "* %?\n%U\n%a\n" :clock-in t :clock-resume t)
                  ("w" "Work" entry (file+headline "~/Dropbox/org/myob.org" "Work Notes")
                   "* %?\n%U\n" :clock-in t :clock-resume t)
                  )))
  (setq org-refile-use-outline-path t)

  ; Targets complete directly with IDO
  (setq org-outline-path-complete-in-steps nil)
  ; Use IDO for both buffer and file completion and ido-everywhere to t
  (setq org-completion-use-ido t)
  (setq ido-everywhere t)
  (setq ido-max-directory-size 100000)
  (ido-mode (quote both))
  ; Use the current window when visiting files and buffers with ido
  (setq ido-default-file-method 'selected-window)
  (setq ido-default-buffer-method 'selected-window)
  ; Use the current window for indirect buffer display
  (setq org-indirect-buffer-display 'current-window)

pallet

(use-package pallet
:config
(pallet-mode t))

prompt

(defalias 'yes-or-no-p 'y-or-n-p)
(setq kill-buffer-query-functions
      (remq 'process-kill-buffer-query-function
            kill-buffer-query-functions))

PureScript

(use-package psc-ide
:init
(setq psc-ide-use-npm-bin t)
:config
(add-hook 'purescript-mode-hook
  (lambda ()
    (psc-ide-mode)
    (company-mode)
    (flycheck-mode)
    (turn-on-purescript-indentation)))

)

rainbow delimiter

(use-package rainbow-delimiters
  :hook (prog-mode . rainbow-delimiters-mode))

Restclient

(use-package restclient
  :config
  (add-to-list 'company-backends 'company-restclient))
;; :config
;; ;
                                        ; 
;; :hook (company-mode))

Scala Metals

;; Enable scala-mode for highlighting, indentation and motion commands
(use-package scala-mode
  :mode "\\.s\\(cala\\|bt\\)$")

;; Enable sbt mode for executing sbt commands
(use-package sbt-mode
  :commands sbt-start sbt-command
  :config
  ;; WORKAROUND: https://github.com/ensime/emacs-sbt-mode/issues/31
  ;; allows using SPACE when in the minibuffer
  (substitute-key-definition
   'minibuffer-complete-word
   'self-insert-command
   minibuffer-local-completion-map)
   ;; sbt-supershell kills sbt-mode:  https://github.com/hvesalai/emacs-sbt-mode/issues/152
   (setq sbt:program-options '("-Dsbt.supershell=false"))
)

(use-package lsp-mode
  ;; Optional - enable lsp-mode automatically in scala files
  :hook  (scala-mode . lsp)
         (lsp-mode . lsp-lens-mode)
         (dhall-mode . lsp)
  :config (setq lsp-prefer-flymake nil))

;; Add metals backend for lsp-mode
(use-package lsp-metals)

;; Enable nice rendering of documentation on hover
(use-package lsp-ui)

;; Add company-lsp backend for metals
(use-package company-lsp)

shell-mode

(setq comint-output-filter-functions
      (remove 'ansi-color-process-output comint-output-filter-functions))

(add-hook 'shell-mode-hook
          (lambda ()
            ;; Disable font-locking in this buffer to improve performance
            (font-lock-mode -1)
            ;; Prevent font-locking from being re-enabled in this buffer
            (make-local-variable 'font-lock-function)
            (setq font-lock-function (lambda (_) nil))
            (add-hook 'comint-preoutput-filter-functions 'xterm-color-filter nil t)))
(setenv "TERM" "xterm-256color")

smartparens

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

textmate

(use-package textmate
:init
(textmate-mode)
(bind-keys
 :map *textmate-mode-map*
 ("M--" . text-scale-decrease)
 ("M-=" . text-scale-increase)
 ("M-}" . textmate-shift-right)
 ("M-<backspace>" . kill-whole-line)
 ("M-c" . kill-ring-save)
 ("M-{" . textmate-shift-left)
 ("M-/" . comment-line)
 ("M-l" . textmate-select-line)
 ))

undo tree

(use-package undo-tree
  :init (global-undo-tree-mode))

unicode

(use-package unicode-fonts
   :ensure t
   :config
    (unicode-fonts-setup))

web-mode

(use-package web-mode
  :mode "\\.html$'" "\\.jsx$" "\\.tsx$"
  :init 
  (setq web-mode-markup-indent-offset 2)
  (setq web-mode-css-indent-offset 2)
  (setq web-mode-code-indent-offset 2)
  )

which key

     (use-package which-key
       :config
       (which-key-mode)
       (setq which-key-use-C-h-commands t)
       (setq which-key-paging-key "<f5>")
)

yasnippet

(use-package yasnippet
:config
(yas-global-mode 1))