Files
emacs-config/config.org
T
2025-01-02 15:13:17 +01:00

7.9 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.d/git-packages")

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-git
      :hook
      (dired-mode . dired-git-mode))

Theme

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

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

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

Key-binds

Buffer

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

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

Org bullets

  (use-package org-bullets
    :config
    (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))

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)

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)

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

Global font

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

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)
(setq-default tab-width 4)