#+TITLE: My Emacs Configuration #+AUTHOR: Arthur Barraux #+OPTIONS: num:nil * Init ** Package management #+begin_src emacs-lisp ;; This is only needed once, near the top of the file (require 'package) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) (package-initialize) (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))) (unless (package-install 'use-package) (package-refresh-contents) (package-install 'use-package)) (eval-when-compile (require 'use-package)) (setq use-package-always-ensure t) #+end_src ** Prolog #+begin_src emacs-lisp (autoload 'run-prolog "prolog" "Start a Prolog sub-process." t) (autoload 'prolog-mode "prolog" "Major mode for editing Prolog programs." t) (autoload 'mercury-mode "prolog" "Major mode for editing Mercury programs." t) (setq prolog-system 'swi) (setq auto-mode-alist (append '(("\\.pl$" . prolog-mode) ("\\.m$" . mercury-mode)) auto-mode-alist)) #+end_src ** Dired #+begin_src emacs-lisp (use-package dired-git :hook (dired-mode . dired-git-mode)) #+end_src ** Theme #+BEGIN_SRC emacs-lisp (use-package zenburn-theme) (load-theme 'zenburn t) (use-package vertico :custom (vertico-cycle t) ;; Enable cycling for `vertico-next/previous' :init (vertico-mode)) (use-package savehist :init (savehist-mode)) (use-package emacs :custom ;; Support opening new minibuffers from inside existing minibuffers. (enable-recursive-minibuffers t) ;; Hide commands in M-x which do not work in the current mode. Vertico ;; commands are hidden in normal buffers. This setting is useful beyond ;; Vertico. (read-extended-command-predicate #'command-completion-default-include-p) :init ;; Add prompt indicator to `completing-read-multiple'. ;; We display [CRM], e.g., [CRM,] if the separator is a comma. (defun crm-indicator (args) (cons (format "[CRM%s] %s" (replace-regexp-in-string "\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" "" crm-separator) (car args)) (cdr args))) (advice-add #'completing-read-multiple :filter-args #'crm-indicator) (setq minibuffer-prompt-properties '(read-only t cursor-intangible t face minibuffer-prompt)) (add-hook 'minibuffer-setup-hook #'cursor-intangible-mode)) (use-package vertico-directory :after vertico :ensure nil ;; More convenient directory navigation commands :bind (:map vertico-map ("RET" . vertico-directory-enter) ("DEL" . vertico-directory-delete-char) ("M-DEL" . vertico-directory-delete-word)) ;; Tidy shadowed file names :hook (rfn-eshadow-update-overlay . vertico-directory-tidy)) (use-package vertico-multiform :after vertico :load-path "~/.emacs.d/elpa/vertico-1.9/") (vertico-multiform-mode 1) (use-package vertico-posframe :ensure t) (setq vertico-posframe-parameters '((left-fringe . 8) (right-fringe . 8))) #+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) :bind (("M-x". 'helm-M-x) ("C-x C-f" . 'helm-find-files))) (helm-mode 1) (use-package helm-make :bind ("C-x m" . 'helm-make)) (use-package helm-posframe) (helm-posframe-enable) (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) :custom (company-backends '(company-capf))) (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 ((prog-mode . lsp) (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) :custom (lsp-prefer-capf t)) (use-package helm-lsp :commands helm-lsp-workspace-symbol) (use-package which-key :config (which-key-mode)) #+end_src * Key-binds ** Buffer #+begin_src emacs-lisp (keymap-global-set "M-a" 'switch-to-buffer) #+end_src ** 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) (keymap-global-set "∇" 'Control-X-prefix) #+END_SRC ** Reload config #+BEGIN_SRC emacs-lisp (defun reload-conf () (interactive) (load-file "~/.emacs.d/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.d/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 ** 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 ** Menu bar #+BEGIN_SRC emacs-lisp (add-hook 'before-make-frame-hook (lambda () (menu-bar-mode -1))) #+END_SRC ** Tool bar #+BEGIN_SRC emacs-lisp (add-hook 'before-make-frame-hook (lambda () (tool-bar-mode -1))) #+END_SRC ** Scroll bar #+BEGIN_SRC emacs-lisp (add-hook 'before-make-frame-hook (lambda () (scroll-bar-mode -1))) #+END_SRC * Terminal #+begin_src emacs-lisp (use-package vterm) #+end_src * Projectile #+begin_src emacs-lisp (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))) #+end_src * Misceleaneous ** 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 ** Delete backup files #+begin_src emacs-lisp (setq make-backup-files nil) #+end_src ** Line numberring #+begin_src emacs-lisp (add-hook 'prog-mode-hook 'display-line-numbers-mode) (setq-default tab-width 4) #+end_src