dotfiles/emacs.d/config.org
Smirnov Oleksandr 6f27c7f6ab add emacs config
2022-09-02 11:00:10 +03:00

6 KiB

Emacs config

Mepal

(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)

selected packages

The packages what I need/use in emacs

(setq package-list
  '(paredit
    magit
    cider
    clojure-mode
    mood-line
    one-themes
    emojify
    async
    ob-async
    ob-clojurescript
    org-babel-eval-in-repl
    eval-in-repl))

(package-initialize)

;; fetch the list of packages available
(unless package-archive-contents
  (package-refresh-contents))

;; install missing packages
(dolist (package package-list)
  (unless (package-installed-p package)
    (package-install package)))

Global settings

Disable backups, atuosave, loads

(setq make-backup-files nil) ;; stop creating backup~ files
(setq auto-save-default nil) ;; stop creating #autosave# files
(setq create-lockfiles nil)  ;; no lockfiles

good defaults

(set-frame-font "JetBrains Mono 14" nil t)
(load-theme 'one-light t)

(global-auto-revert-mode t)
(tool-bar-mode 0)
(scroll-bar-mode 0)
(cua-mode 1)

(setq-default
 ad-redefinition-action 'accept                   ; Silence warnings for redefinition
 auto-window-vscroll nil                          ; Lighten vertical scroll
 confirm-kill-emacs 'yes-or-no-p                  ; Confirm before exiting Emacs
 display-time-default-load-average nil            ; Don't display load average
 display-time-mode 0                              ; Display time in frames
 display-time-format "%H:%M"                      ; Format the time string
 fill-column 80                                   ; Set width for automatic line breaks
 scroll-bar-mode nil
 display-line-numbers-type nil
 help-window-select t                             ; Focus new help windows when opened
 indent-tabs-mode nil                             ; Stop using tabs to indent
 inhibit-startup-screen t                         ; Disable start-up screen
 initial-scratch-message ""                       ; Empty the initial *scratch* buffer
 left-margin-width 1 right-margin-width 1         ; Add left and right margins
 mouse-yank-at-point t                            ; Yank at point rather than pointer
 ns-use-srgb-colorspace nil                       ; Don't use sRGB colors
 select-enable-clipboard t                        ; Merge system's and Emacs' clipboard
 sentence-end-double-space nil                    ; End a sentence after a dot and a space
 show-trailing-whitespace nil                     ; Display trailing whitespaces
 split-height-threshold nil                       ; Disable vertical window splitting
 split-width-threshold 1                          ; Disable horizontal window splitting
 tab-width 4                                      ; Set width for tabs
 uniquify-buffer-name-style 'forward              ; Uniquify buffer names
 window-combination-resize t                      ; Resize windows proportionally
 x-stretch-cursor t                               ; Stretch cursor to the glyph width
 scroll-step 1
 scroll-conservatively 10000)

(delete-selection-mode 1)                         ; Replace region when inserting text
(display-time-mode 0)                             ; Enable time in the mode-line
(fset 'yes-or-no-p 'y-or-n-p)                     ; Replace yes/no prompts with y/n
(menu-bar-mode 0)                                 ; Disable the menu bar
(put 'downcase-region 'disabled nil)              ; Enable downcase-region
(put 'upcase-region 'disabled nil)                ; Enable upcase-region
(set-default-coding-systems 'utf-8)               ; Default to utf-8 encoding
(add-hook 'focus-out-hook #'garbage-collect)      ; make Garbage faster

Other setups

org-mode

(require 'org)
(add-to-list 'org-modules 'org-tempo)
(setq org-startup-folded nil
      org-hide-emphasis-markers nil
      org-edit-src-content-indentation 0
      org-src-tab-acts-natively t
      org-src-fontify-natively t
      org-confirm-babel-evaluate nil
      org-support-shift-select 'always)

(remove-hook 'org-cycle-hook
             'org-optimize-window-after-visibility-change)

(eval-after-load 'org
  (org-babel-do-load-languages
   'org-babel-load-languages
   '((clojure . t)
     (clojurescript . t)
     (emacs-lisp . t)
     (shell . t))))

Clojure

REPL setup cuz editing clj is feeling best with it.

(setq nrepl-hide-special-buffers t
      cider-repl-clear-help-banner t
      cider-font-lock-dynamically nil
      cider-popup-stacktraces nil
      cider-repl-popup-stacktraces t
      cider-repl-use-pretty-printing t
      cider-repl-pop-to-buffer-on-connect t
      cider-repl-display-help-banner nil)

;; Allow cider-repl to be cleared with shortcut
(add-hook 'cider-repl-mode-hook
      '(lambda () (define-key cider-repl-mode-map (kbd "C-c M-b")
            'cider-repl-clear-buffer)))

(add-hook 'clojure-mode-hook #'cider-mode)
(add-hook 'clojurescript-mode #'enable-paredit-mode)

(add-hook 'cider-mode-hook (lambda () (show-paren-mode 1)))
(add-hook 'cider-mode-hook #'eldoc-mode)
(add-hook 'cider-mode-hook #'enable-paredit-mode)
(add-hook 'cider-repl-mode-hook #'enable-paredit-mode)
(add-hook 'cider-mode-hook #'imenu-add-menubar-index)

Paredit

Enable paredit in org-mode code block

(defun my-paredit-in-code-block ()
  (interactive)
  (when (derived-mode-p 'org-mode)
    (unless (window-minibuffer-p)
      (if (org-babel-when-in-src-block)
          (paredit-mode 1)
        (paredit-mode 0)))))

(add-hook 'post-command-hook #'my-paredit-in-code-block)
(define-key org-mode-map (kbd "M-s") 'org-babel-demarcate-block)
(define-key org-mode-map (kbd "M-P") 'paredit-mode)

(remove-hook 'org-cycle-hook
             'org-optimize-window-after-visibility-change)

Status line

(mood-line-mode)

Funcs

Reload config

(defun reload-conf ()
  (interactive)
  (load-file (expand-file-name "init.el" user-emacs-directory)))