Skip to content

Cackbone/dot-emacs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 

Repository files navigation

EMACS CONFIG 2.1.0

  • Emacs version: 28.2

Fish macro

function ne
    emacsclient -ncu -a "" $argv &
end

Package manager

;;==============;;
;; Melpa config ;;
;;==============;;

(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
;; Comment/uncomment this line to enable MELPA Stable if desired.  See `package-archive-priorities`
;; and `package-pinned-packages`. Most users will not need or want to do this.
;;(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t)
(package-initialize)

Init

;; Update packages
(use-package auto-package-update
   :ensure t
   :init
   (setq auto-package-update-delete-old-versions t
         auto-package-update-interval 4)
   (auto-package-update-maybe))


;; Save backups inside a unique folder
(let ((backup-dir "~/.emacs/.backups")
      (auto-saves-dir "~/.emacs/.backups"))
  (dolist (dir (list backup-dir auto-saves-dir))
    (when (not (file-directory-p dir))
      (make-directory dir t)))
  (setq backup-directory-alist `(("." . ,backup-dir))
        auto-save-file-name-transforms `((".*" ,auto-saves-dir t))
        auto-save-list-file-prefix (concat auto-saves-dir ".saves-")
        tramp-backup-directory-alist `((".*" . ,backup-dir))
        tramp-auto-save-directory auto-saves-dir))

(setq backup-by-copying t    ; Don't delink hardlinks
      delete-old-versions t  ; Clean up the backups
      version-control t      ; Use version numbers on backups,
      kept-new-versions 10    ; keep some new versions
      kept-old-versions 5)   ; and some old ones, too

;; Use so long mode to avoid slowing down emacs when file is big
(global-so-long-mode 1) ; Emacs >= 27

Server initialization

;; Emacs server
(require 'server)
(server-start)
; (setq server-use-tcp t)
; (setq server-host "10.0.1.169")
; (setq server-port 6363)


;; Garbage collection
(use-package gcmh
  :ensure t
  :config
  (setq gcmh-idle-delay 10 ; garbage collect after 10s of idle time
        gcmh-high-cons-threshold 16777216) ; 16mb
  (setq gc-cons-threshold 16777216
      gc-cons-percentage 0.1)
  (gcmh-mode +1))

Theme and UI

;;=============;;
;; EMACS THEME ;;
;;=============;;

;; Camron theme
(add-to-list 'custom-theme-load-path "~/.emacs.d/camron-theme.el")
(load-theme 'camron t)

;; Remove menu, tool and scroll bars
(menu-bar-mode -1)
(tool-bar-mode -1)
(add-hook 'after-make-frame-functions
          (lambda (frame)
            (modify-frame-parameters frame
                                     '((vertical-scroll-bars . nil)
                                       (horizontal-scroll-bars . nil)))))


;; Line number mode
(global-display-line-numbers-mode t)
(setq-default display-line-numbers-width 4)
;; (setq linum-format "%4d  ") ; TODO: Find an alternative for this


;; Setup font
(add-to-list 'default-frame-alist '(font . "Hasklug Nerd Font 12"))

;; Icons mode
(use-package all-the-icons
  :if (display-graphic-p)
  :config
  (setq all-the-icons-color-icons 11)
  (setq inhibit-compacting-font-caches t))

;; Spaceline
(use-package spaceline
  :ensure t
  :config
  (use-package spaceline-config
    :config
    (spaceline-spacemacs-theme)
    (column-number-mode)))


;; Pretty mode
(use-package pretty-mode :ensure t)

;; Rainbow
(use-package rainbow-mode
  :ensure t
  :config
  (define-globalized-minor-mode global-rainbow-mode rainbow-mode
    (lambda () (rainbow-mode t)))
  (global-rainbow-mode t))

Spaces and indentations

;;=============;;
;; WHITESPACES ;;
;;=============;;
(require 'whitespace)

(setq whitespace-display-mappings
    '((space-mark   ?\     [?.]     [?.])
      (newline-mark ?\n    [?◀ ?\n])
      (tab-mark     ?\t    [?\u2502 ?\t] [?\\ ?\t])))

(setq whitespace-style '(face trailing tabs newline tab-mark newline-mark))

(global-whitespace-mode t)

(add-hook 'before-save-hook 'whitespace-cleanup)

;;=============;;
;;    TABS     ;;
;;=============;;
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(defvaralias 'c-basic-offset 'tab-width)

Ligatures

(use-package ligature
    :ensure t
    :config
    ;(ligature-set-ligatures '(web-mode) '("<!--" "-->" "</>" "</" "/>" "://"))
    ;(ligature-set-ligatures '(typescript-mode js2-mode) '("=>" "==" "===" "!=" "!==" "??" "||" "&&" "..." ">=" "<="))
    (ligature-set-ligatures 'prog-mode '("|||>" "<|||" "<==>" "<!--" "####" "~~>" "***" "||=" "||>"
                                     ":::" "::=" "=:=" "===" "==>" "=!=" "=>>" "=<<" "=/=" "!=="
                                     "!!." ">=>" ">>=" ">>>" ">>-" ">->" "->>" "-->" "---" "-<<"
                                     "<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->"
                                     "<--" "<-<" "<<=" "<<-" "<<<" "<+>" "</>" "###" "#_(" "..<"
                                     "..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~="
                                     "~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|"
                                     "[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:"
                                     ">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:"
                                     "<$" "<=" "<>" "<-" "<<" "<+" "</" "#{" "#[" "#:" "#=" "#!"
                                     "##" "#(" "#?" "#_" "%%" ".=" ".-" ".." ".?" "+>" "++" "?:"
                                     "?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)"
                                     "\\\\" "://"))
    (global-ligature-mode))

Languages

Enable Flycheck and Company globally

(use-package flycheck
    :ensure t
    :config
    (global-flycheck-mode))

(use-package company
    :ensure t
    :config
    (add-hook 'after-init-hook 'global-company-mode)
    (setq lsp-completion-provider :capf))

;; Trigger completion immediately.
(setq company-idle-delay 0)

;; Number the candidates (use M-1, M-2 etc to select completions).
(setq company-show-numbers t)

Language Server Protocol

;;==========;;
;; LSP MODE ;;
;;==========;;

(use-package lsp-mode
  :ensure t
  :init
  ;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l")
  (setq lsp-keymap-prefix "C-c l")
  :hook (;; replace XXX-mode with concrete major-mode(e. g. python-mode)
         (web-mode . lsp)
         (js2-mode . lsp)
         (sh-mode . lsp)
         (typescript-mode . lsp)
         (rust-mode . lsp)
         (lsp-mode . lsp-enable-which-key-integration))
  :commands lsp)

;; lsp ui
(use-package lsp-ui
  :ensure t
  :commands lsp-ui-mode)

Web

;; Front end modes
(use-package web-mode
    :ensure t
    :mode ("\\.html\\'"
           "\\.css\\'"
           "\\.vue\\'"
           "\\.tsx\\'"
           "\\.jsx\\'"
           "\\.cjs\\'"
           "\\.svelte\\'"))

;; Javascript
(use-package js2-mode
    :ensure t
    :mode "\\.js\\'"
    :config
    (setq js2-include-node-externs t)
    (add-hook 'js2-mode-hook 'lsp)
)

;; Typescript
(use-package typescript-mode
  :ensure t
  :mode "\\.ts\\'")

Config

(use-package json-mode
    :ensure t
    :mode "\\.json\\'"
    :hook (json-mode . json-pretty-print-buffer))

Shell

(use-package fish-mode
  :ensure t
  :mode "\\.fish\\'")

Sys prog

(use-package rust-mode
  :ensure t
  :mode "\\.rs\\'")