Files
emacs-config/config.org
T
Arthur BARRAUX ef731cc6cd new org look
2025-03-02 14:29:40 +01:00

13 KiB

My Emacs Configuration

Init

Package management

  ;; 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)
(pdf-tools-install)

Prolog

(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))

Dired

      (use-package dired-preview)
      (use-package dired-git
            :hook
            (dired-mode . dired-git-mode))

Theme

  (use-package zenburn-theme)
  (use-package doom-themes)

  (load-theme 'doom-one 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)))

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)
	: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)

Company

	   (use-package company
	     :hook
	     (after-init . global-company-mode)
	     :custom
	     (company-backends '(company-capf)))
	   (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

  ;; Java
  (use-package exec-path-from-shell)
  (use-package lsp-java)
  (require 'lsp-java)
  (add-hook 'java-mode-hook #'lsp)
  (use-package hydra)
  (setq lsp-java-jdt-download-url  "https://download.eclipse.org/jdtls/milestones/0.57.0/jdt-language-server-0.57.0-202006172108.tar.gz")

    (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)
       (emacs-lisp-mode . lsp)
       (java-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))

Key-binds

Buffer

  (keymap-global-set "M-a" 'switch-to-buffer)

Dired

  (add-hook 'dired-mode-hook (lambda () (local-key-binding "-" 'dired-jump)))

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)
  (keymap-global-set "∇" 'Control-X-prefix)

Reload config

(defun reload-conf ()
  (interactive)
  (load-file "~/.emacs.d/init.el"))
(keymap-global-set "C-c r" 'reload-conf)

Open config

(defun open-config ()
  (interactive)
  (find-file "~/.emacs.d/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

  (defun my/buffer-face-mode-variable ()
      "Set font to a variable width (proportional) fonts in current buffer"
      (interactive)
      (setq buffer-face-mode-face '(:family "Roboto Slab"
                                    :height 150
                                    :width normal))
      (buffer-face-mode))
  (use-package org-bullets
      :config
      (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))

  (setq org-hide-emphasis-markers t)
  (defun my/set-general-faces-org ()
    (my/buffer-face-mode-variable)
    (setq line-spacing 0.1
          org-pretty-entities t
          org-startup-indented t
          org-adapt-indentation nil)
    (variable-pitch-mode +1)
    (mapc
     (lambda (face) ;; Other fonts that require it are set to fixed-pitch.
       (set-face-attribute face nil :inherit 'fixed-pitch))
     (list 'org-block
           'org-table
           'org-verbatim
           'org-block-begin-line
           'org-block-end-line
           'org-meta-line
           'org-date
           'org-drawer
           'org-property-value
           'org-special-keyword
           'org-document-info-keyword))
    (mapc ;; This sets the fonts to a smaller size
     (lambda (face)
       (set-face-attribute face nil :height 0.8))
     (list 'org-document-info-keyword
           'org-block-begin-line
           'org-block-end-line
           'org-meta-line
           'org-drawer
           'org-property-value
           )))

  (defun my/set-specific-faces-org ()
    (set-face-attribute 'org-code nil
                        :inherit '(shadow fixed-pitch))
    ;; Without indentation the headlines need to be different to be visible
    (set-face-attribute 'org-level-1 nil
                        :height 1.25
                        :foreground "#BEA4DB")
    (set-face-attribute 'org-level-2 nil
                        :height 1.15
                        :foreground "#A382FF"
                        :slant 'italic)
    (set-face-attribute 'org-level-3 nil
                        :height 1.1
                        :foreground "#5E65CC"
                        :slant 'italic)
    (set-face-attribute 'org-level-4 nil
                        :height 1.05
                        :foreground "#ABABFF")
    (set-face-attribute 'org-level-5 nil
                        :foreground "#2843FB")
    (set-face-attribute 'org-date nil
                        :foreground "#ECBE7B"
                        :height 0.8)
    (set-face-attribute 'org-document-title nil
                        :foreground "DarkOrange3"
                        :height 1.3)
    (set-face-attribute 'org-ellipsis nil
                        :foreground "#4f747a" :underline nil)
    (set-face-attribute 'variable-pitch nil
                        :family "Roboto Slab" :height 1.2))



  (defun my/set-keyword-faces-org ()
    (mapc (lambda (pair) (push pair prettify-symbols-alist))
          '(;; Syntax
            ("TODO" .     "")
            ("DONE" .     "")
            ("WAITING" .  "")
            ("HOLD" .     "")
            ("NEXT" .     "")
            ("CANCELLED" . "")
            ("#+begin_quote" . "“")
            ("#+end_quote" . "”")))
    (prettify-symbols-mode +1)
    (org-superstar-mode +1)
    )

  (defun my/style-org ()
    (my/set-general-faces-org)
    (my/set-specific-faces-org)
    (my/set-keyword-faces-org)
    )
  (add-hook 'org-mode-hook 'my/style-org)

  (setq org-return-follows-link t)

Hooks

Variable pitch mode

(add-hook 'org-mode-hook 'variable-pitch-mode)

Visual line mode

(add-hook 'org-mode-hook 'visual-line-mode)

Menu bar

  (add-hook 'before-make-frame-hook (lambda () (menu-bar-mode -1)))

Tool bar

  (add-hook 'before-make-frame-hook (lambda () (tool-bar-mode -1)))

Scroll bar

  (add-hook 'before-make-frame-hook (lambda () (scroll-bar-mode -1)))

Terminal

  (use-package vterm
    :bind
    ("C-x t" . vterm))

Projectile

(use-package projectile
  :ensure t
  :init
  (projectile-mode +1)
  :bind (:map projectile-mode-map
              ("M-z" . projectile-command-map)
              ("C-c p" . projectile-command-map)))

Misceleaneous

Music

  (use-package emms)
(emms-all)
(setq emms-player-list '(emms-player-vlc)
      emms-info-functions '(emms-info-native))

Indentation

  (use-package rainbow-delimiters)
  (use-package highlight-indent-guides)
  (add-hook 'prog-mode-hook 'highlight-indent-guides-mode)
  (set-variable highlight-indent-guides-method 'column)

Global font

  (set-face-attribute 'default nil :family "Cascadia Mono" :height 140)

Icons

(use-package all-the-icons
  :if (display-graphic-p))

Delete backup files

(setq make-backup-files nil)

Line numberring

  (add-hook 'prog-mode-hook 'display-line-numbers-mode)
  (add-hook 'prog-mode-hook #'rainbow-delimiters-mode)
  (setq-default indent-tabs-mode nil)
    (setq-default tab-width 4)