351 lines
8.0 KiB
Org Mode
351 lines
8.0 KiB
Org Mode
#+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<separator>], 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-<return>" . 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
|