322 lines
9.5 KiB
EmacsLisp
322 lines
9.5 KiB
EmacsLisp
;; Initial greeting for debugging
|
|
(message "Welcome to Emacs")
|
|
(message "Loading user configuration...")
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; LOOK AND FEEL ;;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
;; Load default theme
|
|
(load-theme 'wombat)
|
|
|
|
;; Setting default font
|
|
(set-frame-font "Iosevka Nerd Font 14" nil t)
|
|
|
|
;; Remove toolbar
|
|
(tool-bar-mode -1)
|
|
|
|
;; Remove menu
|
|
(menu-bar-mode -1)
|
|
|
|
;; Disable startup screen
|
|
(setq inhibit-startup-screen t)
|
|
|
|
;; Disable splash screen
|
|
(setq inhibit-splash-screen t)
|
|
|
|
;; Start all frames maximized
|
|
(add-to-list 'default-frame-alist '(fullscreen . maximized))
|
|
|
|
;; Remove scrollbar
|
|
(scroll-bar-mode -1)
|
|
|
|
;; Simple 'y' for 'yes' and 'n' for 'no'
|
|
(defalias 'yes-or-no-p 'y-or-n-p)
|
|
|
|
;; Set global value for paragraph witdh
|
|
(setq-default fill-column 120)
|
|
|
|
;; Stop Emacs from losing informations
|
|
(setq undo-limit 2000000)
|
|
(setq undo-strong-limit 4000000000)
|
|
|
|
;; Smooth scroll
|
|
(setq scroll-step 3)
|
|
(setq ring-bell-function 'ignore)
|
|
|
|
;; Add column number in the status line
|
|
(column-number-mode)
|
|
|
|
;; View clock in the status line
|
|
(display-time)
|
|
|
|
;; Enable line numbers in the programming mode only
|
|
(add-hook 'prog-mode-hook 'display-line-numbers-mode)
|
|
|
|
;; Enable line numbers in the configuration mode only
|
|
(add-hook 'conf-mode-hook 'display-line-numbers-mode)
|
|
|
|
;; Setting default directory for Org files
|
|
(setq org-directory "~/Remotes/pCloud/Org")
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; EDITOR OPTIONS ;;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
(setq standard-indent 4)
|
|
(setq tab-stop-list nil)
|
|
(setq indent-tabs-mode nil)
|
|
|
|
;; Setting variables
|
|
(setq vc-follow-symlinks 't)
|
|
(prefer-coding-system 'utf-8-unix)
|
|
(setq custom-file (null-device))
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; PACKAGES ;;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
;; Initialize package system via use-package
|
|
(package-initialize)
|
|
(require 'use-package)
|
|
|
|
(use-package package
|
|
:config
|
|
;; Setting repo priorities
|
|
(setq package-archive-priorities
|
|
'(("melpa-stable" . 2)
|
|
("MELPA" . 1)
|
|
("gnu" . 0)))
|
|
;; Setting repo URL
|
|
(setq package-archives
|
|
'(("melpa-stable" . "https://stable.melpa.org/packages/")
|
|
("MELPA" . "https://melpa.org/packages/")
|
|
("gnu" . "https://elpa.gnu.org/packages/"))))
|
|
|
|
;; (use-package catppuccin-theme
|
|
;; :ensure t
|
|
;; :config
|
|
;; (load-theme 'catppuccin :no-confirm)
|
|
;; (setq catppuccin-flavor 'mocha))
|
|
|
|
;; Status line like Doom Emacs
|
|
(use-package doom-modeline
|
|
:ensure t
|
|
:init (doom-modeline-mode 1))
|
|
|
|
;; Help to remember or discover keybindings
|
|
(use-package which-key
|
|
:ensure t
|
|
:commands (which-key-mode)
|
|
:init (which-key-mode))
|
|
|
|
;; Configuration for mu4e, an interface for mu email index, running inside Emacs
|
|
;; (use-package mu4e
|
|
;; :ensure nil
|
|
;; ;; :load-path "/usr/share/emacs/site-lisp/mu4e/"
|
|
;; :defer 20 ; Wait until 20 seconds after startup
|
|
;; :bind (:map global-map ("C-c e" . mu4e))
|
|
;; :config
|
|
|
|
;; ;; This is set to 't' to avoid mail syncing issues when using mbsync
|
|
;; (setq mu4e-change-filenames-when-moving t)
|
|
|
|
;; ;; Refresh mail using isync every 10 minutes
|
|
;; (setq mu4e-update-interval (* 10 60))
|
|
;; (setq mu4e-get-mail-command "~/.emacs.d/scripts/email_sync.sh")
|
|
;; (setq mu4e-maildir "~/Maildir")
|
|
|
|
;; ;; Configure email accounts
|
|
;; (setq mu4e-contexts
|
|
;; (list
|
|
;; ;; Protonmail Account
|
|
;; (make-mu4e-context
|
|
;; :name "Protonmail"
|
|
;; :match-func
|
|
;; (lambda (msg)
|
|
;; (when msg
|
|
;; (string-prefix-p "/ProtonMailAccount" (mu4e-message-field msg :maildir))))
|
|
;; :vars '((user-mail-address . "fscottodisantolo@protonmail.com")
|
|
;; (user-full-name . "Fabio Scotto di Santolo")
|
|
;; (mu4e-drafts-folder . "/ProtonMailAccount/Drafts")
|
|
;; (mu4e-sent-folder . "/ProtonMailAccount/Sent")
|
|
;; (mu4e-refile-folder . "/ProtonMailAccount/All Mail")
|
|
;; (mu4e-trash-folder . "/ProtonMailAccount/Trash")))
|
|
|
|
;; ;; iCloud Account
|
|
;; (make-mu4e-context
|
|
;; :name "iCloud Mail"
|
|
;; :match-func
|
|
;; (lambda (msg)
|
|
;; (when msg
|
|
;; (string-prefix-p "/iCloudAccount" (mu4e-message-field msg :maildir))))
|
|
;; :vars '((user-mail-address . "fscottodisantolo@icloud.com")
|
|
;; (user-full-name . "Fabio Scotto di Santolo")
|
|
;; (mu4e-drafts-folder . "/iCloudAccount/Drafts")
|
|
;; (mu4e-sent-folder . "/iCloudAccount/Sent Messages")
|
|
;; (mu4e-refile-folder . "/iCloudAccount/INBOX")
|
|
;; (mu4e-trash-folder . "/iCloudAccount/Junk")))))
|
|
|
|
;; (setq sendmail-program "/usr/bin/msmtp"
|
|
;; send-mail-function 'sendmail-send-it
|
|
;; message-sendmail-f-is-evil t
|
|
;; message-sendmail-extra-arguments '("--read-envelope-from")
|
|
;; message-send-mail-function 'message-send-mail-with-sendmail))
|
|
|
|
;; Configure elfeed for RSS feed
|
|
(use-package elfeed
|
|
:ensure t
|
|
:custom
|
|
(elfeed-enclosure-default-dir "~/Downloads/")
|
|
(elfeed-search-remain-on-entry t)
|
|
(elfeed-search-title-max-width 100)
|
|
(elfeed-search-title-min-width 30)
|
|
(elfeed-search-trailing-width 25)
|
|
(elfeed-show-truncate-long-urls t)
|
|
(elfeed-sort-order 'descending)
|
|
(elfeed-search-filter "+unread")
|
|
:bind
|
|
("C-c o f" . fscotto/elfeed-load-db-and-open)
|
|
(:map elfeed-search-mode-map
|
|
("w" . elfeed-search-yank)
|
|
("R" . elfeed-update)
|
|
("q" . elfeed-kill-buffer))
|
|
(:map elfeed-show-mode-map
|
|
("S" . elfeed-show-new-live-search) ; moved to free up 's'
|
|
("c" . (lambda () (interactive) (org-capture nil "capture")))
|
|
("e" . email-elfeed-entry)
|
|
("f" . elfeed-show-fetch-full-text)
|
|
("w" . elfeed-show-yank))
|
|
:hook
|
|
(elfeed-show-mode . visual-line-mode))
|
|
|
|
(use-package elfeed-org
|
|
:ensure t
|
|
:after elfeed
|
|
:custom
|
|
;; Optionally specify a number of files containing elfeed
|
|
;; configuration. If not set then the location below is used.
|
|
;; Note: The customize interface is also supported.
|
|
(rmh-elfeed-org-files (list "~/.emacs.d/elfeed.org")))
|
|
|
|
(with-eval-after-load 'elfeed
|
|
(elfeed-org))
|
|
|
|
;; Terminal
|
|
(use-package vterm
|
|
:ensure t
|
|
:bind (:map global-map
|
|
("C-c o T" . vterm)
|
|
("C-c C-t" . vterm-copy-mode)))
|
|
|
|
;; FIXME PDF viewer with annotations
|
|
;; (use-package pdf-tools
|
|
;; :ensure t
|
|
;; :config
|
|
;; (pdf-tools-install))
|
|
|
|
;; EPub viewer
|
|
(use-package nov
|
|
:ensure t
|
|
:mode ("\\.epub\\'" . nov-mode))
|
|
|
|
(use-package visual-fill-column
|
|
:ensure t)
|
|
|
|
;; Git plugin
|
|
(use-package magit
|
|
:ensure t
|
|
:bind (:map global-map ("C-c v g" . magit-status)))
|
|
|
|
;; Highlight keywords to remember the activity when coding.
|
|
(use-package hl-todo
|
|
:ensure t
|
|
:commands (global-hl-todo-mode)
|
|
:init (global-hl-todo-mode))
|
|
|
|
(setq hl-todo-keyword-faces
|
|
'(("TODO" . "#94e2d5")
|
|
("FIXME" . "#f38ba8")
|
|
("DEBUG" . "#cba6f7")
|
|
("GOTCHA" . "#eba0ac")
|
|
("STUB" . "#89b4fa")))
|
|
|
|
(keymap-set hl-todo-mode-map "C-t p" #'hl-todo-previous)
|
|
(keymap-set hl-todo-mode-map "C-t n" #'hl-todo-next)
|
|
(keymap-set hl-todo-mode-map "C-t o" #'hl-todo-occur)
|
|
(keymap-set hl-todo-mode-map "C-t i" #'hl-todo-insert)
|
|
|
|
;; Highlight for i3 config file
|
|
(use-package i3wm-config-mode
|
|
:ensure t)
|
|
|
|
(use-package ivy
|
|
:ensure t
|
|
:config
|
|
(ivy-mode 1))
|
|
|
|
(use-package ibuffer
|
|
:ensure t
|
|
:bind (:map global-map ("C-x C-b" . ibuffer)))
|
|
|
|
(use-package ibuffer-tramp
|
|
:ensure t)
|
|
|
|
(use-package ibuffer-vc
|
|
:ensure t)
|
|
|
|
(use-package ibuffer-projectile
|
|
:ensure t)
|
|
|
|
(add-hook 'ibuffer-mode-hook
|
|
(lambda ()
|
|
(ibuffer-projectile-set-filter-groups)))
|
|
|
|
;; TODO adding lsp-mode, dap-mode, autocomplete and project handling for C, Go, Bash and Python
|
|
|
|
;; Add autocomplete feature to Emacs
|
|
(use-package company
|
|
:ensure t
|
|
:commands (global-company-mode)
|
|
:init (global-company-mode)
|
|
:custom
|
|
(company-tooltip-align-annotations 't)
|
|
(company-minimum-prefix-length 1)
|
|
(company-idle-delay 0.1))
|
|
|
|
(use-package flycheck
|
|
:ensure t
|
|
:config
|
|
(add-hook 'after-init-hook #'global-flycheck-mode))
|
|
|
|
(use-package lsp-mode
|
|
:ensure t
|
|
:init
|
|
;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l")
|
|
(setq lsp-keymap-prefix "C-c l")
|
|
:hook ((c-mode . lsp))
|
|
:commands lsp)
|
|
|
|
(use-package lsp-ui
|
|
:ensure t)
|
|
|
|
(use-package lsp-ivy
|
|
:ensure t)
|
|
|
|
(use-package dap-mode
|
|
:ensure t)
|
|
|
|
;;functions to support syncing .elfeed between machines
|
|
;;makes sure elfeed reads index from disk before launching
|
|
(defun fscotto/elfeed-load-db-and-open ()
|
|
"Wrapper to load the elfeed db from disk before opening URL https://pragmaticemacs.wordpress.com/2016/08/17/read-your-rss-feeds-in-emacs-with-elfeed/
|
|
Created: 2016-08-17
|
|
Updated: 2025-06-13"
|
|
(interactive)
|
|
(elfeed)
|
|
(elfeed-db-load)
|
|
;; (elfeed-search-update--force)
|
|
(elfeed-update)
|
|
(elfeed-db-save))
|
|
|
|
(message "...user configuration loaded")
|