summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Iannetta <paul.iannetta@ens-lyon.fr>2022-04-22 00:17:33 +0200
committerPaul Iannetta <paul.iannetta@ens-lyon.fr>2022-04-22 08:24:15 +0200
commitf9b3891a29fb5d412c9c1623ff12720ac7a451e1 (patch)
tree47f9bd82a466619c6e07c56da540719ffa64019d
parenta23da99177cae9705f33fbae4aa20409201e3c34 (diff)
add emacs confHEADmaster
-rw-r--r--.emacs.d/config.org785
-rw-r--r--.emacs.d/emacs-customize.el25
-rw-r--r--.emacs.d/init.el28
-rw-r--r--.emacs.d/notes.el4
4 files changed, 842 insertions, 0 deletions
diff --git a/.emacs.d/config.org b/.emacs.d/config.org
new file mode 100644
index 0000000..40ebc21
--- /dev/null
+++ b/.emacs.d/config.org
@@ -0,0 +1,785 @@
+* General settings
+** Garbage Collector
+
+ #+begin_src emacs-lisp
+ (defvar last-file-name-handler-alist file-name-handler-alist)
+ (setq gc-cons-threshold (* 64 1024 1024)
+ gc-cons-percentage 0.6
+ file-name-handler-alist nil)
+
+ ;; after startup, it is important you reset this to some reasonable default. A large
+ ;; gc-cons-threshold will cause freezing and stuttering during long-term
+ ;; interactive use.
+ (add-hook 'emacs-startup-hook
+ (lambda () (setq gc-cons-threshold 16777216
+ gc-cons-percentage 0.1
+ file-name-handler-alist last-file-name-handler-alist)))
+ #+end_src
+
+** Appearance
+
+ Set emacs theme.
+#+begin_src emacs-lisp
+ (use-package doom-themes
+ :ensure t
+ :config
+ ;; Global settings (defaults)
+ (setq doom-themes-enable-bold t ; if nil, bold is universally disabled
+ doom-themes-enable-italic t) ; if nil, italics is universally disabled
+ (load-theme 'doom-one t)
+
+ ;; Enable flashing mode-line on errors
+ (doom-themes-visual-bell-config)
+ (doom-themes-treemacs-config)
+ ;; Corrects (and improves) org-mode's native fontification.
+ (doom-themes-org-config))
+#+end_src
+
+Colorize compilation windows
+#+begin_src emacs-lisp
+(use-package ansi-color
+ :config
+ (defun my-colorize-compilation-buffer ()
+ (when (eq major-mode 'compilation-mode)
+ (ansi-color-apply-on-region compilation-filter-start (point-max))))
+ :hook (compilation-filter . my-colorize-compilation-buffer))
+#+end_src
+
+ Disabling menu/tool/scroll bars
+ #+begin_src emacs-lisp
+ (menu-bar-mode -1)
+ (tool-bar-mode -1)
+ (scroll-bar-mode -1)
+ (setq-default indent-tabs-mode nil)
+ (setq read-file-name-completion-ignore-case t)
+ (setq org-src-window-setup 'current-window)
+ #+end_src
+
+#+begin_src emacs-lisp
+ (use-package all-the-icons :defer t :ensure t)
+#+end_src
+
+ Show line numbers
+ #+begin_src emacs-lisp
+ (global-display-line-numbers-mode)
+ #+end_src
+
+ Show columns
+ #+begin_src emacs-lisp
+ (column-number-mode 1)
+ #+end_src
+
+ #+begin_src emacs-lisp
+ (when (display-graphic-p)
+ (defvar emacs-english-font "DejaVu Sans Mono"
+ "The font name of English.")
+
+ (defvar emacs-cjk-font "Noto Sans JP"
+ "The font name for CJK.")
+
+ (defvar emacs-font-size-pair '(15 . 18)
+ "Default font size pair for (english . cjk)")
+
+ (defvar emacs-font-size-pair-list
+ '(( 5 . 6) ( 9 . 10) (10 . 12) (12 . 14)
+ (13 . 16) (15 . 18) (17 . 20) (19 . 22)
+ (20 . 24) (21 . 26) (24 . 28) (26 . 32)
+ (28 . 34) (30 . 36) (34 . 40) (36 . 44))
+ "This list is used to store matching (english . cjk) font-size.")
+
+ (defun font-exist-p (fontname)
+ "Test if this font is exist or not."
+ (if (or (not fontname) (string= fontname ""))
+ nil
+ (if (not (x-list-fonts fontname)) nil t)))
+
+ (defun set-font (english chinese size-pair)
+ "Setup Emacs English and CJK font on X window-system."
+
+ (if (font-exist-p english)
+ (set-frame-font (format "%s:pixelsize=%d" english (car size-pair)) t))
+
+ (if (font-exist-p chinese)
+ (dolist (charset '(kana han symbol cjk-misc bopomofo))
+ (set-fontset-font (frame-parameter nil 'font) charset
+ (font-spec :family chinese :size (cdr size-pair))))))
+
+ ;; Setup font size based on emacs-font-size-pair
+ (set-font emacs-english-font emacs-cjk-font emacs-font-size-pair)
+
+ (defun emacs-step-font-size (step)
+ "Increase/Decrease emacs's font size."
+ (let ((scale-steps emacs-font-size-pair-list))
+ (if (< step 0) (setq scale-steps (reverse scale-steps)))
+ (setq emacs-font-size-pair
+ (or (cadr (member emacs-font-size-pair scale-steps))
+ emacs-font-size-pair))
+ (when emacs-font-size-pair
+ (message "emacs font size set to %.1f" (car emacs-font-size-pair))
+ (set-font emacs-english-font emacs-cjk-font emacs-font-size-pair))))
+
+ (defun increase-emacs-font-size ()
+ "Decrease emacs's font-size acording emacs-font-size-pair-list."
+ (interactive) (emacs-step-font-size 1))
+
+ (defun decrease-emacs-font-size ()
+ "Increase emacs's font-size acording emacs-font-size-pair-list."
+ (interactive) (emacs-step-font-size -1))
+
+ (global-set-key (kbd "C-=") 'increase-emacs-font-size)
+ (global-set-key (kbd "C--") 'decrease-emacs-font-size))
+ #+end_src
+
+
+** Basics
+
+ Set default encoding
+ #+begin_src emacs-lisp
+ (prefer-coding-system 'utf-8)
+ (set-default-coding-systems 'utf-8)
+ (set-language-environment 'utf-8)
+ (set-selection-coding-system 'utf-8)
+ #+end_src
+
+ Subword
+ #+begin_src emacs-lisp
+ (global-subword-mode 1)
+ #+end_src
+
+ Electric
+ #+begin_src emacs-lisp
+ (setq-default electric-pair-pairs
+ '((?\( . ?\))
+ (?\[ . ?\])))
+ (electric-pair-mode t)
+ #+end_src
+
+Show trailing white space
+#+begin_src emacs-lisp
+ (setq-default show-trailing-whitespace t)
+#+end_src
+
+ Config editing/reloading
+ #+begin_src emacs-lisp
+ (defun lys/config-visit ()
+ (interactive)
+ (find-file "~/.emacs.d/config.org"))
+
+ (defun lys/config-reload ()
+ (interactive)
+ (org-babel-load-file (expand-file-name "~/.emacs.d/config.org")))
+ #+end_src
+
+ Move backup files in a specific folder
+ #+begin_src emacs-lisp
+ (setq backup-directory-alist '(("" . "~/.emacs.d/backup")))
+ #+end_src
+
+ Disabling emacs auto-saves
+ #+begin_src emacs-lisp
+ (setq auto-save-default nil)
+ #+end_src
+
+ #+begin_src emacs-lisp
+ (use-package vterm :defer t :ensure t)
+ #+end_src
+
+ #+begin_src emacs-lisp
+ (use-package treemacs :ensure t)
+ #+end_src
+
+
+** Evil
+
+ #+begin_src emacs-lisp
+ (fset 'lys/ctl-x-map ctl-x-map)
+ (fset 'lys/help-map help-map)
+
+ (defvar lys/evil-leader-command-map
+ (let ((map (make-sparse-keymap)))
+ ;; modeline-map
+ (define-prefix-command 'lys/modeline-map)
+ (define-key lys/modeline-map (kbd "c") '("cycle separators" . lys/telephone-line-separator-cycle))
+ ;; config-map
+ (define-prefix-command 'lys/config-map)
+ (define-key lys/config-map (kbd "o") '("open config" . lys/config-visit))
+ (define-key lys/config-map (kbd "r") '("reload config" . lys/config-reload))
+ ;; file-map
+ (define-prefix-command 'lys/file-map)
+ (define-key lys/file-map (kbd "f") '("open file" . counsel-find-file))
+ ;; buffer-map
+ (define-prefix-command 'lys/buffer-map)
+ (define-key lys/buffer-map (kbd "b") '("switch buffer" . counsel-ibuffer))
+ ;; leader-map
+ (define-key map (kbd ";") '("eval" . eval-expression))
+ (define-key map (kbd ":") '("command" . counsel-M-x))
+ (define-key map (kbd "f") '("file" . lys/file-map))
+ (define-key map (kbd "b") '("buffer" . lys/buffer-map))
+ (define-key map (kbd "m") '("modeline" . lys/modeline-map))
+ (define-key map (kbd "p") '("projectile" . projectile-command-map))
+ (define-key map (kbd "w") '("windows" . evil-window-map))
+ ;; (define-key map (kbd "TAB") '("persp" . persp-key-map))
+ (define-key map (kbd "c") '("config" . lys/config-map))
+ (define-key map (kbd "x") '("commands" . lys/ctl-x-map))
+ (define-key map (kbd "h") '("help" . lys/help-map))
+ map)
+ "Keymap for <leader>.")
+ (fset 'lys/evil-leader-command-map lys/evil-leader-command-map)
+
+ (defun lys/local-map-with-leader ()
+ "Set `current-local-map' to include C-c bindings under `lys/evil-leader-command-map'."
+ (when (current-local-map)
+ (let ((prefix (lookup-key (current-local-map) (kbd "C-c"))))
+ (when (keymapp prefix)
+ (let ((map (make-sparse-keymap)))
+ (set-keymap-parent map (current-local-map))
+ (define-key lys/evil-leader-command-map (kbd ",")
+ (make-composed-keymap nil prefix))
+ map)))))
+ (add-hook 'after-change-major-mode-hook #'lys/local-map-with-leader)
+ #+end_src
+
+ #+begin_src emacs-lisp
+ (use-package evil
+ :ensure t
+ :after (undo-tree)
+ :hook (evil-local-mode . turn-on-undo-tree-mode)
+ :init
+ ;; This is optional since it's already set to t by default.
+ (setq evil-want-integration t)
+ (setq evil-want-keybinding nil)
+ (setq evil-undo-system 'undo-tree)
+ :config
+ (setq evil-move-beyond-eol t)
+ (evil-mode 1)
+ (evil-set-leader '(normal visual) (kbd "SPC"))
+ (evil-define-key '(normal visual) 'global (kbd "<leader>") 'lys/evil-leader-command-map)
+ ;; (evil-define-key 'normal 'org-mode-map "]]" 'lys/org-next-heading)
+ (global-undo-tree-mode 1))
+
+ (use-package evil-collection
+ :after (evil)
+ :ensure t
+ :config
+ (evil-collection-init))
+
+ (use-package evil-surround
+ :after (evil evil-collection)
+ :ensure t
+ :config
+ (global-evil-surround-mode 1))
+ #+end_src
+
+Undo
+#+begin_src emacs-lisp
+ (use-package undo-tree :ensure t)
+#+end_src
+
+** Projects
+
+Let's also add projectile
+#+begin_src emacs-lisp
+ (use-package projectile
+:defer t
+ :ensure t
+ :bind
+ (:map projectile-mode-map
+ ("C-c p" . projectile-command-map))
+ :init (projectile-mode +1))
+#+end_src
+
+
+** Spelling
+
+Let's also add syntax checking
+#+begin_src emacs-lisp
+ (use-package flycheck
+ :ensure t
+ :init (global-flycheck-mode))
+#+end_src
+
+And add inline messages for flycheck
+#+begin_src emacs-lisp
+ (use-package flycheck-inline
+ :ensure t
+ :after flycheck
+ (add-hook 'flycheck-mode-hook #'flycheck-inline-mode))
+#+end_src
+
+#+begin_src emacs-lisp
+ (use-package flyspell-correct
+ :ensure t
+ :bind
+ (("C-c s" . ace-flyspell-jump-word)
+("C-M-;" . flyspell-correct-wrapper))
+ :hook
+ '((text-mode . flyspell-mode)
+ (prog-mode . flyspell-prog-mode)))
+
+ (use-package ace-flyspell
+ :ensure t
+ :after flyspell-correct)
+
+ (use-package flyspell-correct-ivy
+ :init
+ (setq flyspell-correct-interface #'flyspell-correct-ivy)
+ :after flyspell-correct)
+#+end_src
+
+** Perspectives
+
+ #+begin_src emacs-lisp
+ ;; (use-package persp-mode
+ ;; :ensure t
+ ;; :init
+ ;; (persp-mode))
+ #+end_src
+
+** Snippets
+
+Let's install yasnippet
+#+begin_src emacs-lisp
+ (use-package yasnippet
+ :defer t
+ :ensure t
+ :init
+ (yas-global-mode 1))
+#+end_src
+
+Now we can add snippets !
+#+begin_src emacs-lisp
+ (use-package yasnippet-snippets
+ :defer t
+ :after (yasnippet)
+ :ensure t)
+#+end_src
+
+** Git
+
+Let's install magit for git support
+#+begin_src emacs-lisp
+ (use-package magit :defer t :ensure t)
+#+end_src
+
+** Org mode
+
+#+begin_src emacs-lisp
+ (defun disable-flycheck-in-org-src-block ()
+ (setq-local flycheck-disabled-checkers '(emacs-lisp-checkdoc)))
+
+ (use-package org-bullets :ensure t :after org)
+ (use-package org-tempo :after org)
+
+ (use-package org
+ :defer t
+ :init
+ (setq org-startup-folded t)
+ (setq org-directory "~/.org/")
+ (setq org-agenda-files '("~/.org/agenda/")))
+
+ (setq org-hide-emphasis-markers t)
+ (font-lock-add-keywords
+ 'org-mode
+ '(("^ +\\([-*]\\) "
+ (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•"))))))
+
+ (add-hook 'org-mode-hook (lambda ()
+ (org-bullets-mode 1)
+ (electric-pair-local-mode -1)
+ (electric-indent-local-mode -1)))
+ (add-hook 'org-src-mode-hook 'disable-flycheck-in-org-src-block)
+#+end_src
+
+** Ledger mode
+ #+begin_src emacs-lisp
+ (use-package ledger-mode :defer t :ensure t)
+ #+end_src
+
+** Which-key
+#+begin_src emacs-lisp
+ (use-package which-key
+ :ensure t
+ :init
+ (which-key-mode))
+#+end_src
+
+** Rainbow
+#+begin_src emacs-lisp
+ (use-package rainbow-mode :ensure t)
+ (use-package rainbow-delimiters :ensure t)
+;; todo: rewrite as a loop
+ (set-face-attribute 'rainbow-delimiters-depth-1-face nil :foreground "dark orange")
+ (set-face-attribute 'rainbow-delimiters-depth-2-face nil :foreground "deep pink")
+ (set-face-attribute 'rainbow-delimiters-depth-3-face nil :foreground "chartreuse")
+ (set-face-attribute 'rainbow-delimiters-depth-4-face nil :foreground "deep sky blue")
+ (set-face-attribute 'rainbow-delimiters-depth-5-face nil :foreground "yellow")
+ (set-face-attribute 'rainbow-delimiters-depth-6-face nil :foreground "orchid")
+ (set-face-attribute 'rainbow-delimiters-depth-7-face nil :foreground "spring green")
+ (set-face-attribute 'rainbow-delimiters-depth-8-face nil :foreground "sienna1")
+#+end_src
+
+** Visual fill columns
+ #+begin_src emacs-lisp
+ (use-package visual-fill-column :ensure t)
+ #+end_src
+
+** Windows
+
+ #+begin_src emacs-lisp
+ (use-package ace-window
+ :ensure t
+ :bind
+ (:map evil-window-map
+ ("C-w" . ace-window)
+ ("w" . ace-window))
+ :config (setq-default aw-scope 'frame)
+ :after (evil))
+ #+end_src
+
+ Get special buffers go straight
+ #+begin_src emacs-lisp
+ (use-package shackle
+ :ensure t
+ :config
+ (setq shackle-default-rule '(:select t))
+ :init
+ (shackle-mode 1))
+ #+end_src
+
+** Auto completion
+#+begin_src emacs-lisp
+ (use-package company
+ :ensure t
+ :init
+ (add-hook 'after-init-hook 'global-company-mode))
+#+end_src
+
+** ivy
+
+#+begin_src emacs-lisp
+ (use-package ivy
+ :bind (("C-s" . swiper)
+ :map ivy-minibuffer-map
+ ("TAB" . ivy-alt-done)
+ ("C-f" . ivy-alt-done)
+ ("C-l" . ivy-alt-done)
+ ("C-j" . ivy-next-line)
+ ("C-k" . ivy-previous-line)
+ :map ivy-switch-buffer-map
+ ("C-k" . ivy-previous-line)
+ ("C-l" . ivy-done)
+ ("C-d" . ivy-switch-buffer-kill)
+ :map ivy-reverse-i-search-map
+ ("C-k" . ivy-previous-line)
+ ("C-d" . ivy-reverse-i-search-kill))
+ :init
+ (ivy-mode 1))
+
+ (use-package counsel
+ :demand t
+ :bind (("M-x" . counsel-M-x)
+ ("C-x b" . counsel-ibuffer)
+ ("C-x C-f" . counsel-find-file)
+ ;; ("C-M-j" . counsel-switch-buffer)
+ ("C-M-l" . counsel-imenu)
+ :map minibuffer-local-map
+ ("C-r" . 'counsel-minibuffer-history)))
+
+ (use-package counsel-projectile
+ :ensure t
+ :config (counsel-projectile-mode)
+ :after (projectile))
+
+ (use-package ivy-rich
+ :ensure t
+ :after counsel
+ :config
+ (ivy-rich-mode 1))
+#+end_src
+
+** Others
+
+*** y-or-n-p
+Uses y-or-n-p instead of 'yes-or-no-p
+#+begin_src emacs-lisp
+ (defalias 'yes-or-no-p 'y-or-n-p)
+#+end_src
+
+*** Scroll conservatively
+#+begin_src emacs-lisp
+ (setq scroll-conservatively 100)
+#+end_src
+
+*** Ring bell
+#+begin_src emacs-lisp
+ (setq ring-bell-function 'ignore)
+#+end_src
+
+*** Line highlighting
+#+begin_src emacs-lisp
+ (when window-system (global-hl-line-mode t))
+#+end_src
+
+*** Symbols prettifying
+#+begin_src emacs-lisp
+ (when window-system (global-prettify-symbols-mode t))
+#+end_src
+
+*** Backups, autosaves
+#+begin_src emacs-lisp
+ (setq make-backup-file nil)
+ (setq auto-save-default nil)
+#+end_src
+
+*** Startup Profiling
+
+ #+begin_src emacs-lisp
+ ;; Package `esup' allows you to run a child Emacs process with special
+ ;; profiling functionality, and to collect timing results for each
+ ;; form in your init-file.
+ (use-package esup
+ :config
+
+ ;; Work around a bug where esup tries to step into the byte-compiled
+ ;; version of `cl-lib', and fails horribly.
+ (setq esup-depth 0))
+ #+end_src
+
+** Dashboard
+Disable the startup messages and replace it by a nice dashboard which lists the 5 most recent visited files, recent bookmarks, projects and appointments.
+
+#+begin_src emacs-lisp
+ (use-package dashboard
+ :ensure t
+ :config
+ (setq inhibit-startup-message t
+ inhibit-startup-screen t
+ initial-buffer-choice (lambda () (get-buffer "*dashboard*"))
+ dashboard-show-shortcuts nil
+ dashboard-set-heading-icons t
+ dashboard-set-file-icons t
+ dashboard-agenda-time-string-format "%Y-%m-%d %H:%M"
+ dashboard-filter-agenda-entry 'dashboard-no-filter-agenda
+ dashboard-items '((recents . 5)
+ (bookmarks . 5)
+ (projects . 5)
+ (agenda . 5)))
+ (dashboard-setup-startup-hook))
+#+end_src
+
+** Mode-line
+
+#+begin_src emacs-lisp
+ (defvar *lys/telephone-line-current-separator* 'halfsin
+ "Telephone line's current separator.")
+
+ (defun lys/telephone-line-symbols (symbol)
+ "Generate all the list of variant's of symbol."
+ (mapcar (lambda (suf) (intern (concat "telephone-line-" (symbol-name symbol) "-" suf)))
+ '("left" "hollow-left" "right" "hollow-right")))
+
+ (defvar *lys/telephone-line-separators*
+ `(,@(mapcar (lambda (sym) `(,sym . ,(lys/telephone-line-symbols sym)))
+ '(cubed sin cos tan halfsin halfcos)))
+ "Association list between a theme and the left/right separators of the theme.")
+
+ (defun lys/telephone-set-separator ()
+ (let ((seps (alist-get *lys/telephone-line-current-separator*
+ ,*lys/telephone-line-separators*)))
+ (setq telephone-line-primary-left-separator (nth 0 seps)
+ telephone-line-secondary-left-separator (nth 1 seps)
+ telephone-line-primary-right-separator (nth 2 seps)
+ telephone-line-secondary-right-separator (nth 3 seps))))
+
+ (defun lys/telephone-line-update ()
+ (setq mode-line-format (telephone-line--generate-mode-line)))
+
+ (defun lys/telephone-line-separator-cycle ()
+ (interactive)
+ (let* ((n (length *lys/telephone-line-separators*))
+ (seps (mapcar 'car *lys/telephone-line-separators*))
+ (next-sep-pos (mod (+ 1 (cl-position *lys/telephone-line-current-separator*
+ seps))
+ n )))
+ (setq *lys/telephone-line-current-separator* (nth next-sep-pos seps))
+ (lys/telephone-set-separator)
+ (lys/telephone-line-update)))
+
+ (use-package telephone-line
+ :ensure t
+ :init
+ (setq telephone-line-lhs
+ '((evil . (telephone-line-evil-tag-segment))
+ (accent . (telephone-line-vc-segment
+ telephone-line-erc-modified-channels-segment
+ telephone-line-process-segment))
+ (nil . (telephone-line-buffer-segment))))
+ (setq telephone-line-rhs
+ '((nil . (telephone-line-misc-info-segment))
+ (accent . (telephone-line-major-mode-segment))
+ (evil . (telephone-line-airline-position-segment))))
+ (setq telephone-line-height 20
+ telephone-line-evil-use-short-tag t)
+ (lys/telephone-set-separator)
+ (telephone-line-mode t))
+#+end_src
+
+
+* Languages
+
+** Language Server Protocol
+
+Installing LSP mode
+#+begin_src emacs-lisp
+ (use-package lsp-mode
+ :ensure t
+ :commands lsp
+ :init (setq lsp-keymap-prefix "C-c l")
+ :hook ((rust-mode . lsp)
+ (lsp-mode . lsp-enable-which-key-integration)))
+
+(use-package lsp-mode
+ :ensure
+ :commands lsp
+ :custom
+ ;; what to use when checking on-save. "check" is default, I prefer clippy
+ (lsp-rust-analyzer-cargo-watch-command "clippy")
+ (lsp-idle-delay 0.6)
+ (lsp-rust-analyzer-server-display-inlay-hints t)
+ :config
+ (add-hook 'lsp-mode-hook 'lsp-ui-mode))
+#+end_src
+
+Installing lsp-ui
+#+begin_src emacs-lisp
+ (use-package lsp-ui :defer t :ensure t)
+#+end_src
+
+#+begin_src emacs-lisp
+ (use-package lsp-treemacs :ensure t)
+#+end_src
+
+** C++
+
+#+begin_src emacs-lisp
+ (use-package c++-mode
+ :mode ("\\.cpp\\'" "\\.tpp\\'"))
+#+end_src
+
+#+begin_src emacs-lisp
+ ;; (use-package flycheck-clang-tidy
+ ;; :ensure t
+ ;; :after c++-mode
+ ;; :config
+ ;; (add-hook 'flycheck-mode-hook #'flycheck-rust-setup))
+
+ (use-package flycheck-clang-analyzer
+ :ensure t
+ :after c++-mode
+ :config
+ (add-hook 'flycheck-mode-hook #'flycheck-clang-analyzer-setup))
+#+end_src
+
+** Objective Caml
+#+begin_src emacs-lisp
+ (use-package tuareg :defer t :ensure t)
+#+end_src
+
+** Rust
+Let's install rust-mode !
+
+#+begin_src emacs-lisp
+ (use-package rust-mode
+ :ensure t
+ :config (add-hook 'rust-mode-hook 'lsp))
+
+ ;;; Add some formatting setup
+ (add-hook 'rust-mode-hook
+ (lambda () (setq indent-tabs-mode nil)))
+ (setq rust-format-on-save t)
+
+ ;;; Add flycheck support
+ (use-package flycheck-rust
+ :ensure t
+ :after rust-mode
+ :config
+ (add-hook 'flycheck-mode-hook #'flycheck-rust-setup))
+
+ ;;; Add cargo support
+ (use-package cargo
+ :ensure t
+ :defer t
+ :after rust-mode
+ :config
+ (add-hook 'rust-mode-hook 'cargo-minor-mode))
+#+end_src
+
+** Java
+
+#+begin_src emacs-lisp
+ (use-package lsp-java :ensure t :config (add-hook 'java-mode-hook 'lsp))
+ (use-package dap-mode :ensure t :after lsp-mode :config (dap-auto-configure-mode))
+ (use-package dap-java)
+#+end_src
+
+** Lisp
+
+#+begin_src emacs-lisp
+ (use-package lispy
+ :ensure t
+ :hook
+ (common-lisp-mode . lispy-mode)
+ (emacs-lisp-mode . lispy-mode)
+ (scheme-mode . lispy-mode)
+ (racket-mode . lispy-mode)
+ ;; (hy-mode . lispy-mode)
+ ;; (lfe-mode . lispy-mode)
+ ;; (dune-mode . lispy-mode)
+ ;; (clojure-mode . lispy-mode)
+ (lisp-mode . lispy-mode)
+ :config
+ (setq lispy-close-quotes-at-end-p t))
+ ;; (add-hook 'lispy-mode-hook #'turn-off-smartparens-mode))
+ (use-package lispyville :ensure t :after lispy :after evil)
+ (add-hook 'lispy-mode-hook #'lispyville-mode)
+ (add-hook 'emacs-lisp-mode-hook
+ (lambda ()
+ (lispy-mode 1)
+ (rainbow-delimiters-mode 1)))
+#+end_src
+
+#+begin_src emacs-lisp
+ (use-package sly :ensure t :defer t)
+#+end_src
+
+** Racket
+
+ #+begin_src emacs-lisp
+ (use-package racket-mode :ensure t :defer t)
+ #+end_src
+
+** Latex
+
+#+begin_src emacs-lisp
+ (setq font-latex-fontify-sectioning 'color)
+ (setq font-latex-fontify-script nil)
+#+end_src
+
+* Utilities
+** PDF-tools
+#+begin_src emacs-lisp
+ (use-package pdf-tools
+ :mode ("\\.pdf\\'" . pdf-view-mode)
+ :ensure t
+ ;; :hook (pdf-view-mode . pdf-view-midnight-minor-mode)
+ :hook (pdf-view-mode . (lambda () (display-line-numbers-mode 0)))
+ :config
+ (setq pdf-view-midnight-colors '("#ABB2BF" . "#282C35")))
+#+end_src
+
+** Not much mail
+#+begin_src emacs-lisp
+ (use-package notmuch :defer t :ensure t)
+#+end_src
+
+
diff --git a/.emacs.d/emacs-customize.el b/.emacs.d/emacs-customize.el
new file mode 100644
index 0000000..6d2c606
--- /dev/null
+++ b/.emacs.d/emacs-customize.el
@@ -0,0 +1,25 @@
+;;; emacs-customize.el --- Emacs customize file
+
+;;; Commentary:
+;;
+
+;;; Code:
+
+(custom-set-variables
+ ;; custom-set-variables was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ '(delete-selection-mode nil)
+ '(package-selected-packages
+ '(rustic sly-macrostep sly-quicklisp sly-asdf treemacs-projectile lsp-treemacs dap-java dap-mode lsp-java treemacs flycheck-clang-analyser flycheck-analyser flycheck-clang-analyzer flycheck-clang-tidy sly racket-mode ivy-rich electric-pair electric-pair-mode esup flyspell-correct-ivy ace-flyspell flyspell-correct persp-mode perp-mode doom-themes org-bullets org-tempo undo-tree undo-tree-mode shackle counsel-projectile visual-fill-column yasnippet-snippets which-key vterm use-package tuareg telephone-line rust-mode rainbow-mode rainbow-delimiters projectile pdf-tools notmuch magit lsp-ui lispyville ledger-mode flycheck-rust flycheck-inline evil-surround evil-collection dashboard company cargo all-the-icons))
+ '(telephone-line-mode t))
+(custom-set-faces
+ ;; custom-set-faces was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ )
+(provide 'emacs-customize)
+
+;;; emacs-customize.el ends here
diff --git a/.emacs.d/init.el b/.emacs.d/init.el
new file mode 100644
index 0000000..7adc1a4
--- /dev/null
+++ b/.emacs.d/init.el
@@ -0,0 +1,28 @@
+;;; init.el --- Initialization file for Emacs
+;;; -*- lexical-binding : true -*-
+
+;;; Commentary:
+;; Emacs Startup File --- initialization for Emacs
+
+(require 'package)
+
+;;; Code:
+
+(setq package-enable-at-startup nil)
+(setq custom-file "~/.emacs.d/emacs-customize.el")
+(load custom-file)
+
+(add-to-list 'package-archives
+ '("melpa" . "https://melpa.org/packages/")
+ '("elpa" . "https://elpa.org/packages/"))
+(package-initialize)
+
+(unless (package-installed-p 'use-package)
+ (package-refresh-contents)
+ (package-install 'use-package))
+
+(org-babel-load-file (expand-file-name "~/.emacs.d/config.org"))
+
+(provide 'init)
+
+;;; init.el ends here
diff --git a/.emacs.d/notes.el b/.emacs.d/notes.el
new file mode 100644
index 0000000..e84d375
--- /dev/null
+++ b/.emacs.d/notes.el
@@ -0,0 +1,4 @@
+(set-fringe-mode
+ (/ (- (frame-pixel-width)
+ (* 100 (frame-char-width)))
+ 2))