#+TITLE: My Emacs Configuration #+AUTHOR: Arthur Barraux #+OPTIONS: num:nil * Init ** Package management #+begin_src emacs-lisp (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") #+end_src ** Theme #+BEGIN_SRC emacs-lisp (load-theme 'zenburn t) #+END_SRC ** Encoding #+begin_src emacs-lisp (set-language-environment "UTF-8") (prefer-coding-system 'utf-8) #+end_src * Completion ** Yas-snippet #+begin_src emacs-lisp (use-package yasnippet :ensure t :config (yas-global-mode 1)) (use-package yasnippet-snippets :ensure t) #+end_src ** Helm #+begin_src emacs-lisp (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) #+end_src ** Company #+BEGIN_SRC emacs-lisp (use-package company :hook (after-init . global-company-mode)) (use-package company-box :hook (company-mode . company-box-mode)) #+END_SRC ** Smart parenthesis #+begin_src emacs-lisp (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)) #+end_src ** LSP #+begin_src emacs-lisp (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-" . 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)) #+end_src ** Eglot #+begin_src emacs-lisp (use-package eglot) (add-to-list 'eglot-server-programs '((c-mode) "clangd")) (add-hook 'c-mode-hook 'eglot-ensure) #+end_src * Key-binds ** C *** Dereference arrow #+BEGIN_SRC emacs-lisp (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) #+END_SRC ** Reload config #+BEGIN_SRC emacs-lisp (defun reload-conf () (interactive) (load-file "~/.emacs.default/init.el")) (keymap-global-set "C-c r" 'reload-conf) #+END_SRC ** Open config #+begin_src emacs-lisp (defun open-config () (interactive) (find-file "~/.emacs.default/config.org")) (keymap-global-set "C-c c" 'open-config) #+end_src ** Window command *** Split verticaly #+begin_src emacs-lisp (keymap-global-set "C-x é" 'split-window-below) #+end_src *** Split horizontally #+begin_src emacs-lisp (keymap-global-set "C-x \"" 'split-window-right) #+end_src *** Close window #+begin_src emacs-lisp (keymap-global-set "C-x à" 'delete-window) #+end_src *** Switch window #+begin_src emacs-lisp (keymap-global-set "C-x :" 'next-window-any-frame) #+end_src * Org ** Org bullets #+begin_src emacs-lisp (use-package org-bullets :config (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))) #+end_src ** Font #+begin_src emacs-lisp (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)))))) #+end_src ** Emphasis markers #+begin_src emacs-lisp (setq org-hide-emphasis-markers t) #+end_src ** Hooks *** Variable pitch mode #+begin_src emacs-lisp (add-hook 'org-mode-hook 'variable-pitch-mode) #+end_src *** Visual line mode #+begin_src emacs-lisp (add-hook 'org-mode-hook 'visual-line-mode) #+end_src ** Custom faces #+begin_src emacs-lisp (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)))))) #+end_src * Terminal #+begin_src emacs-lisp (use-package vterm) #+end_src * Treemacs #+begin_src emacs-lisp (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)) #+end_src * Misceleaneous ** Menu bar #+BEGIN_SRC emacs-lisp (menu-bar-mode -1) #+END_SRC ** Tool bar #+BEGIN_SRC emacs-lisp (tool-bar-mode -1) #+END_SRC ** Scroll bar #+BEGIN_SRC emacs-lisp (scroll-bar-mode -1) #+END_SRC ** Global font #+begin_src emacs-lisp (set-face-attribute 'default nil :family "Cascadia Mono" :height 200) #+end_src ** Icons #+begin_src emacs-lisp (use-package all-the-icons :if (display-graphic-p)) #+end_src