12 KiB
12 KiB
My Emacs Configuration
Init
Package management
(unless (package-install 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(eval-when-compile (require 'use-package))
(setq use-package-always-ensure t)
(setq package-archives
'(("GNU ELPA" . "https://elpa.gnu.org/packages/")
("MELPA Stable" . "https://stable.melpa.org/packages/")
("MELPA" . "https://melpa.org/packages/"))
package-archive-priorities
'(("GNU ELPA" . 10)
("MELPA" . 5)
("MELPA Stable" . 0)))
(add-to-list 'load-path "~/.emacs.default/git-packages")
Theme
(use-package zenburn-theme)
(load-theme 'zenburn t)
Encoding
(set-language-environment "UTF-8")
(prefer-coding-system 'utf-8)
Completion
Yas-snippet
(use-package yasnippet
:ensure t
:config
(yas-global-mode 1))
(use-package yasnippet-snippets
:ensure t)
Helm
(use-package helm
:config (require 'helm-autoloads))
(global-set-key (kbd "M-x") #'helm-M-x)
(helm-mode 1)
(setq helm-recentf-fuzzy-match t
helm-locate-fuzzy-match nil ;; locate fuzzy is worthless
helm-M-x-fuzzy-match t
helm-buffers-fuzzy-matching t
helm-semantic-fuzzy-match t
helm-apropos-fuzzy-match t
helm-imenu-fuzzy-match t
helm-lisp-fuzzy-completion t
helm-completion-in-region-fuzzy-match t)
Company
(use-package company
:hook
(after-init . global-company-mode))
(use-package company-box
:hook
(company-mode . company-box-mode))
Smart parenthesis
(use-package smartparens
:ensure smartparens ;; install the package
:hook (prog-mode text-mode markdown-mode) ;; add `smartparens-mode` to these hooks
:config
;; load default config
(require 'smartparens-config))
LSP
(use-package lsp-mode
:init
;;set prefix
(setq lsp-keymap-prefix "C-c l")
(setq lsp-diagnostics-provider :flycheck) ; Use flycheck for diagnostics
(setq lsp-enable-snippet t) ; Enable snippet support
(setq company-idle-delay 0.2) ; Set delay for completion pop-up
(setq company-minimum-prefix-length 1)
(setq lsp-clients-clangd-executable "clangd")
:hook
((c-mode . lsp)
(latex-mode . lsp)
(python-mode . lsp)
(lsp-mode . lsp-enable-which-key-integration)
(before-save . lsp-format-buffer))
:commands lsp
:bind
("C-<return>" . ff-find-other-file))
(use-package lsp-ui
:init
(setq lsp-ui-doc-enable t
lsp-ui-position 'at-point)
:hook
(lsp-mode . lsp-ui-mode))
(use-package helm-lsp
:commands helm-lsp-workspace-symbol)
(use-package which-key
:config
(which-key-mode))
Eglot
(use-package eglot)
(add-to-list 'eglot-server-programs '((c-mode) "clangd"))
(add-hook 'c-mode-hook 'eglot-ensure)
Key-binds
C
Dereference arrow
(defun print-arrow ()
(interactive)
(if (eq major-mode 'c-mode)
(with-current-buffer (buffer-name);
(insert "->"))
(with-current-buffer (buffer-name);
(insert "ù"))
))
(keymap-global-set "ù" 'print-arrow)
Reload config
(defun reload-conf ()
(interactive)
(load-file "~/.emacs.default/init.el"))
(keymap-global-set "C-c r" 'reload-conf)
Open config
(defun open-config ()
(interactive)
(find-file "~/.emacs.default/config.org"))
(keymap-global-set "C-c c" 'open-config)
Window command
Split verticaly
(keymap-global-set "C-x é" 'split-window-below)
Split horizontally
(keymap-global-set "C-x \"" 'split-window-right)
Close window
(keymap-global-set "C-x à" 'delete-window)
Switch window
(keymap-global-set "C-x :" 'next-window-any-frame)
Org
Org bullets
(use-package org-bullets
:config
(add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))
Font
(font-lock-add-keywords 'org-mode
'(("^ *\\([-]\\) "
(0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•"))))))
(custom-theme-set-faces
'user
'(variable-pitch ((t (:family "ETBembo" :height 220 :weight thin))))
'(fixed-pitch ((t ( :family "Fira Code Retina" :height 200)))))
(let* ((variable-tuple
(cond ((x-list-fonts "ETBembo") '(:font "ETBembo"))
((x-list-fonts "Source Sans Pro") '(:font "Source Sans Pro"))
((x-list-fonts "Lucida Grande") '(:font "Lucida Grande"))
((x-list-fonts "Verdana") '(:font "Verdana"))
((x-family-fonts "Sans Serif") '(:family "Sans Serif"))
(nil (warn "Cannot find a Sans Serif Font. Install Source Sans Pro."))))
(base-font-color (face-foreground 'default nil 'default))
(headline `(:inherit default :weight bold :foreground ,base-font-color)))
;; Headlines
(custom-theme-set-faces
'user
`(org-level-8 ((t (,@headline ,@variable-tuple))))
`(org-level-7 ((t (,@headline ,@variable-tuple))))
`(org-level-6 ((t (,@headline ,@variable-tuple))))
`(org-level-5 ((t (,@headline ,@variable-tuple))))
`(org-level-4 ((t (,@headline ,@variable-tuple :height 1.1))))
`(org-level-3 ((t (,@headline ,@variable-tuple :height 1.25))))
`(org-level-2 ((t (,@headline ,@variable-tuple :height 1.5))))
`(org-level-1 ((t (,@headline ,@variable-tuple :height 1.75))))
`(org-document-title ((t (,@headline ,@variable-tuple :height 2.0 :underline nil))))))
Emphasis markers
(setq org-hide-emphasis-markers t)
Hooks
Variable pitch mode
(add-hook 'org-mode-hook 'variable-pitch-mode)
Visual line mode
(add-hook 'org-mode-hook 'visual-line-mode)
Custom faces
(custom-theme-set-faces
'user
'(org-block ((t (:inherit fixed-pitch))))
'(org-code ((t (:inherit (shadow fixed-pitch)))))
'(org-document-info ((t (:foreground "dark orange"))))
'(org-document-info-keyword ((t (:inherit (shadow fixed-pitch)))))
'(org-indent ((t (:inherit (org-hide fixed-pitch)))))
'(org-link ((t (:foreground "royal blue" :underline t))))
'(org-meta-line ((t (:inherit (font-lock-comment-face fixed-pitch)))))
'(org-property-value ((t (:inherit fixed-pitch))) t)
'(org-special-keyword ((t (:inherit (font-lock-comment-face fixed-pitch)))))
'(org-table ((t (:inherit fixed-pitch :foreground "#83a598"))))
'(org-tag ((t (:inherit (shadow fixed-pitch) :weight bold :height 0.8))))
'(org-verbatim ((t (:inherit (shadow fixed-pitch))))))
Terminal
(use-package vterm)
Treemacs
(use-package treemacs
:ensure t
:defer t
:init
(with-eval-after-load 'winum
(define-key winum-keymap (kbd "M-0") #'treemacs-select-window))
:config
(progn
(setq treemacs-collapse-dirs (if treemacs-python-executable 3 0)
treemacs-deferred-git-apply-delay 0.5
treemacs-directory-name-transformer #'identity
treemacs-display-in-side-window t
treemacs-eldoc-display 'simple
treemacs-file-event-delay 2000
treemacs-file-extension-regex treemacs-last-period-regex-value
treemacs-file-follow-delay 0.2
treemacs-file-name-transformer #'identity
treemacs-follow-after-init t
treemacs-expand-after-init t
treemacs-find-workspace-method 'find-for-file-or-pick-first
treemacs-git-command-pipe ""
treemacs-goto-tag-strategy 'refetch-index
treemacs-header-scroll-indicators '(nil . "^^^^^^")
treemacs-hide-dot-git-directory t
treemacs-indentation 2
treemacs-indentation-string " "
treemacs-is-never-other-window nil
treemacs-max-git-entries 5000
treemacs-missing-project-action 'ask
treemacs-move-files-by-mouse-dragging t
treemacs-move-forward-on-expand nil
treemacs-no-png-images nil
treemacs-no-delete-other-windows t
treemacs-project-follow-cleanup nil
treemacs-persist-file (expand-file-name ".cache/treemacs-persist" user-emacs-directory)
treemacs-position 'left
treemacs-read-string-input 'from-child-frame
treemacs-recenter-distance 0.1
treemacs-recenter-after-file-follow nil
treemacs-recenter-after-tag-follow nil
treemacs-recenter-after-project-jump 'always
treemacs-recenter-after-project-expand 'on-distance
treemacs-litter-directories '("/node_modules" "/.venv" "/.cask")
treemacs-project-follow-into-home nil
treemacs-show-cursor nil
treemacs-show-hidden-files t
treemacs-silent-filewatch nil
treemacs-silent-refresh nil
treemacs-sorting 'alphabetic-asc
treemacs-select-when-already-in-treemacs 'move-back
treemacs-space-between-root-nodes t
treemacs-tag-follow-cleanup t
treemacs-tag-follow-delay 1.5
treemacs-text-scale nil
treemacs-user-mode-line-format nil
treemacs-user-header-line-format nil
treemacs-wide-toggle-width 70
treemacs-width 35
treemacs-width-increment 1
treemacs-width-is-initially-locked t
treemacs-workspace-switch-cleanup nil)
;; The default width and height of the icons is 22 pixels. If you are
;; using a Hi-DPI display, uncomment this to double the icon size.
;;(treemacs-resize-icons 44)
(treemacs-follow-mode t)
(treemacs-filewatch-mode t)
(treemacs-fringe-indicator-mode 'always)
(when treemacs-python-executable
(treemacs-git-commit-diff-mode t))
(pcase (cons (not (null (executable-find "git")))
(not (null treemacs-python-executable)))
(`(t . t)
(treemacs-git-mode 'deferred))
(`(t . _)
(treemacs-git-mode 'simple)))
(treemacs-hide-gitignored-files-mode nil))
:bind
(:map global-map
("M-0" . treemacs-select-window)
("C-x t 1" . treemacs-delete-other-windows)
("C-x t t" . treemacs)
("C-x t d" . treemacs-select-directory)
("C-x t B" . treemacs-bookmark)
("C-x t C-t" . treemacs-find-file)
("C-x t M-t" . treemacs-find-tag)))
(use-package treemacs-projectile
:after (treemacs projectile)
:ensure t)
(use-package treemacs-icons-dired
:hook (dired-mode . treemacs-icons-dired-enable-once)
:ensure t)
(use-package treemacs-magit
:after (treemacs magit)
:ensure t)
(use-package treemacs-persp ;;treemacs-perspective if you use perspective.el vs. persp-mode
:after (treemacs persp-mode) ;;or perspective vs. persp-mode
:ensure t
:config (treemacs-set-scope-type 'Perspectives))
(use-package treemacs-tab-bar ;;treemacs-tab-bar if you use tab-bar-mode
:after (treemacs)
:ensure t
:config (treemacs-set-scope-type 'Tabs))
Projectile
(use-package projectile
:ensure t
:init
(projectile-mode +1)
:bind (:map projectile-mode-map
("s-p" . projectile-command-map)
("C-c p" . projectile-command-map)))
Misceleaneous
Menu bar
(menu-bar-mode -1)
Tool bar
(tool-bar-mode -1)
Scroll bar
(scroll-bar-mode -1)
Global font
(set-face-attribute 'default nil :family "Cascadia Mono" :height 200)
Icons
(use-package all-the-icons
:if (display-graphic-p))