From 05bd1193a1778d171b5faf4493adc984189e55c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Hauspie?= <michael.hauspie@univ-lille.fr> Date: Tue, 17 May 2022 14:25:31 +0200 Subject: [PATCH] Add terraform mode --- configuration.org | 794 ++++++++++++++++++++++++---------------------- 1 file changed, 407 insertions(+), 387 deletions(-) diff --git a/configuration.org b/configuration.org index 2f78959..befa462 100644 --- a/configuration.org +++ b/configuration.org @@ -8,251 +8,251 @@ Some of my configuration entries where borrowed from other people, see * Performances tweaks (part. 1, start) - I am currently experimenting with Emacs 28 and, specifically, - GccEmacs that compiles elisp to native binaries. To compile emacs28 - to macOs (until it is released): - - 1. Clone [[https://github.com/jimeh/build-emacs-for-macos][build-emacs-for-macos]] - 2. Install build dependencies with =brew bundle install= in the cloned folder - 3. run =./build-emacs-for-macos feature/native-comp= - 4. The =Emacs.app= will be available in an archive in the =builds= - folder - - This sets gcc optimization flag to =-O2= (max optimization level, - fully adherent to the langage semantic). -#+begin_src emacs-lisp +I am currently experimenting with Emacs 28 and, specifically, +GccEmacs that compiles elisp to native binaries. To compile emacs28 +to macOs (until it is released): + +1. Clone [[https://github.com/jimeh/build-emacs-for-macos][build-emacs-for-macos]] +2. Install build dependencies with =brew bundle install= in the cloned folder +3. run =./build-emacs-for-macos feature/native-comp= +4. The =Emacs.app= will be available in an archive in the =builds= + folder + + This sets gcc optimization flag to =-O2= (max optimization level, + fully adherent to the langage semantic). + #+begin_src emacs-lisp (unless (version< emacs-version "28") -(setq comp-speed 2) -) -#+end_src + (setq comp-speed 2) + ) + #+end_src - Decrease the GC frequency by setting the threshold high for - configuration loading. The threshold will be set lower at the end of - the configuration to make each GC call faster for normal emacs use. + Decrease the GC frequency by setting the threshold high for + configuration loading. The threshold will be set lower at the end of + the configuration to make each GC call faster for normal emacs use. - #+begin_src emacs-lisp + #+begin_src emacs-lisp (setq gc-cons-threshold (* 60 1024 1024)) - #+end_src + #+end_src * Personal information - Sets who I am +Sets who I am - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq user-full-name "Michaël Hauspie" user-mail-address "michael.hauspie@univ-lille.fr" calendar-latitude 50.60483 calendar-longitude 3.1464 calendar-location-name "Villeneuve d'Ascq, France") - #+end_src +#+end_src * Packages management - I use [[https://elpa.gnu.org][Elpa]], [[https://melpa.org][Melpa]] and [[http://orgmode.org][Org mode]] packages repository, thus I need to add them to the =package-archives= list +I use [[https://elpa.gnu.org][Elpa]], [[https://melpa.org][Melpa]] and [[http://orgmode.org][Org mode]] packages repository, thus I need to add them to the =package-archives= list - #+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp (require 'package) (add-to-list 'package-archives '("gnu" . "https://elpa.gnu.org/packages/") t) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) (add-to-list 'package-archives '("org" . "https://orgmode.org/elpa/") t) (package-initialize) - #+END_SRC +#+END_SRC - Then, to ensure that packages are installed and that I can launch - Emacs on a new computer and have it setup automatically, I use - =use-package=. +Then, to ensure that packages are installed and that I can launch +Emacs on a new computer and have it setup automatically, I use +=use-package=. - #+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp (when (not (package-installed-p 'use-package)) (package-refresh-contents) (package-install 'use-package)) - #+END_SRC +#+END_SRC - If I use a package, I want to ensure that it is installed, so set - ensure package by default +If I use a package, I want to ensure that it is installed, so set +ensure package by default - #+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp (require 'use-package-ensure) (setq use-package-always-ensure t) - #+END_SRC +#+END_SRC - I like to keep things up to date, so I use =auto-package-update= +I like to keep things up to date, so I use =auto-package-update= - #+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp ;; (use-package auto-package-update ;; :config ;; (setq auto-package-update-delete-old-versions t) ;; (setq auto-package-update-hide-results t) ;; (auto-package-update-maybe)) - #+END_SRC +#+END_SRC - and I want to be sure that compiled versions of packages are up-to-date +and I want to be sure that compiled versions of packages are up-to-date - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package auto-compile :config (auto-compile-on-load-mode)) (setq load-prefer-newer t) - #+end_src +#+end_src * Global editing configuration ** Default behavior - I use [[https://github.com/technomancy/better-defaults][better-defaults]] to tweak some annoying Emacs default behaviors. The two most important beeing: +I use [[https://github.com/technomancy/better-defaults][better-defaults]] to tweak some annoying Emacs default behaviors. The two most important beeing: - - use =ido= almost everywhere - - put temporary files in a specific folder rather as =~= files everywhere + - use =ido= almost everywhere + - put temporary files in a specific folder rather as =~= files everywhere - there is more to =better-defaults=, be sure to have a look at its list - of changed behaviors. In particular, it switches the menu bar off and - I quite like have it around sometimes, so I re-enable it. + there is more to =better-defaults=, be sure to have a look at its list + of changed behaviors. In particular, it switches the menu bar off and + I quite like have it around sometimes, so I re-enable it. - #+BEGIN_SRC emacs-lisp + #+BEGIN_SRC emacs-lisp (use-package better-defaults) ;; I want menu bar (menu-bar-mode t) - #+END_SRC + #+END_SRC - Ido is not set everywhere by =better-defaults= and I really want it everywhere + Ido is not set everywhere by =better-defaults= and I really want it everywhere - #+begin_src emacs-lisp + #+begin_src emacs-lisp (setq ido-enable-flex-matching t) (setq ido-everywhere t) - #+end_src + #+end_src - As I often use Emacs on MacOS, I need the right option (alt) key to - behave *as* an option key and not an Emacs =meta= key. +As I often use Emacs on MacOS, I need the right option (alt) key to +behave *as* an option key and not an Emacs =meta= key. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (when (eq system-type 'darwin) (setq mac-right-option-modifier nil)) - #+end_src +#+end_src - Allow pressing only =y= instead of =yes= for fast answer to yes or no question +Allow pressing only =y= instead of =yes= for fast answer to yes or no question - #+begin_src emacs-lisp +#+begin_src emacs-lisp ;; Make the y or n suffice for a yes or no question (fset 'yes-or-no-p 'y-or-n-p) - #+end_src +#+end_src ** Editor tweaks - Save the place in the file when killing the buffer so that it reopens at the same spot later +Save the place in the file when killing the buffer so that it reopens at the same spot later - #+begin_src emacs-lisp +#+begin_src emacs-lisp (save-place-mode t) - #+end_src +#+end_src - Syntax highlighting everywhere +Syntax highlighting everywhere - #+begin_src emacs-lisp +#+begin_src emacs-lisp (global-font-lock-mode t) (setq font-lock-maximum-decoration t) - #+end_src +#+end_src - Use 4 spaces as tab +Use 4 spaces as tab - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq tab-width 4) - #+end_src +#+end_src - Allow cursor to top/bottom of file before signaling a scrolling error +Allow cursor to top/bottom of file before signaling a scrolling error - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq scroll-error-top-bottom t) - #+end_src +#+end_src - Replace selection as I type +Replace selection as I type - #+begin_src emacs-lisp +#+begin_src emacs-lisp (delete-selection-mode t) - #+end_src +#+end_src - When using =C-k=, kill the whole line (including =\n=) +When using =C-k=, kill the whole line (including =\n=) - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq kill-whole-line t) - #+end_src +#+end_src - When moving the cursor up or down, remember when it was on a line end - and keep it that way even if next line is longer or shorter +When moving the cursor up or down, remember when it was on a line end +and keep it that way even if next line is longer or shorter - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq track-eol t) - #+end_src +#+end_src - Automatically revert buffers if they change on disk. This prevent - keeping an outdated buffer open and makes changes that will overwrite - the newer file on disk. If the buffer was edited since the last - save/revert, Emacs asks what to do. +Automatically revert buffers if they change on disk. This prevent +keeping an outdated buffer open and makes changes that will overwrite +the newer file on disk. If the buffer was edited since the last +save/revert, Emacs asks what to do. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (global-auto-revert-mode t) ;; kept for future use, I think I do not want that ;; (setq global-auto-revert-non-file-buffers nil) - #+end_src +#+end_src - Do not word wrap buffers, truncate long lines - #+begin_src emacs-lisp +Do not word wrap buffers, truncate long lines +#+begin_src emacs-lisp ;; Truncate lines (don't word wrap) (setq truncate-lines t) - #+end_src +#+end_src - If a timestamp tag is present in the file, update it when saving +If a timestamp tag is present in the file, update it when saving - #+begin_src emacs-lisp +#+begin_src emacs-lisp ;; Time stamping (setq time-stamp-active t ; do enable time-stamps time-stamp-line-limit 70 ; check first 70 buffer lines for Time-stamp: time-stamp-format "%Y-%02m-%02d %02H:%02M:%02S (%u)") ; date format (add-hook 'write-file-hooks 'time-stamp) - #+end_src +#+end_src - Define a shortcut to re-indent all buffer. This saves the current point, marks whole buffer and call =indent-region= +Define a shortcut to re-indent all buffer. This saves the current point, marks whole buffer and call =indent-region= - #+begin_src emacs-lisp +#+begin_src emacs-lisp (defun mh/indent-buffer() (interactive) (save-excursion (indent-region (point-min) (point-max)))) (global-set-key (kbd "C-c i b") 'mh/indent-buffer) - #+end_src +#+end_src - #+RESULTS: - : mh/indent-buffer +#+RESULTS: +: mh/indent-buffer ** Undo on steroids - Manage undo as a tree so that we can undo/redo more. Bound by default on =C-x u= +Manage undo as a tree so that we can undo/redo more. Bound by default on =C-x u= - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package undo-tree :config (global-undo-tree-mode)) - #+end_src +#+end_src * UI and visual tweaks ** Changes to builtin visuals - I always display visual line where the cursor is and I like to have - line numbers at the left of the buffer. I also have Emacs to show me - matching parenthesis. Also do not show the welcome screen. +I always display visual line where the cursor is and I like to have +line numbers at the left of the buffer. I also have Emacs to show me +matching parenthesis. Also do not show the welcome screen. - #+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp ;; Do not show welcome screen (setq inhibit-startup-screen t) @@ -268,50 +268,50 @@ Some of my configuration entries where borrowed from other people, see ;; Detailed window title (setq-default frame-title-format (list "%65b %f")) (setq-default icon-title-format (list "%b")) - #+END_SRC +#+END_SRC - #+RESULTS: - | %b | +#+RESULTS: +| %b | ** Theme - #+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp (use-package color-theme-sanityinc-tomorrow :config (load-theme 'sanityinc-tomorrow-bright t) ) - #+END_SRC +#+END_SRC - Use Fira Code with ligature +Use Fira Code with ligature - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package fira-code-mode :config (global-fira-code-mode) (setq fira-code-mode-enable-hex-literal nil) ) - #+end_src +#+end_src ** Modeline - Use =moody= for a nice looking bottom modeline +Use =moody= for a nice looking bottom modeline - #+begin_src emacs-lisp +#+begin_src emacs-lisp ;; (use-package moody ;; :config ;; (setq x-underline-at-descent-line t ;; moody-mode-line-height 10) ;; (moody-replace-mode-line-buffer-identification) ;; (moody-replace-vc-mode)) - #+end_src +#+end_src - Tweak how some modeline elements are displayed +Tweak how some modeline elements are displayed - #+begin_src emacs-lisp +#+begin_src emacs-lisp ;; Show line and column number in mode line (column-number-mode t) (line-number-mode t) @@ -320,13 +320,13 @@ Some of my configuration entries where borrowed from other people, see (setq display-time-24hr-format t) (setq display-time-day-and-date t) (display-time-mode t) - #+end_src +#+end_src - To not display all minor modes. =eval-after-load= is there to - ensure that diminish is called only for modules that are installed - and loaded. - #+begin_src emacs-lisp +To not display all minor modes. =eval-after-load= is there to +ensure that diminish is called only for modules that are installed +and loaded. +#+begin_src emacs-lisp (use-package diminish :config (eval-after-load "company" '(diminish 'company-mode)) @@ -336,40 +336,40 @@ Some of my configuration entries where borrowed from other people, see (eval-after-load "which-key" '(diminish 'which-key-mode)) (diminish 'eldoc-mode) ) - #+end_src +#+end_src ** Shortcut dynamic help buffer - When a key binding sequence is started and not finished, display - possible next keys in the mini-buffer +When a key binding sequence is started and not finished, display +possible next keys in the mini-buffer - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package which-key :config (which-key-mode t)) - #+end_src +#+end_src ** Winner mode for undo/redo buffer configuration - Enable winner mode globally. Then with =C-c left= and =C-c right= - we can redo/undo the buffer configuration +Enable winner mode globally. Then with =C-c left= and =C-c right= +we can redo/undo the buffer configuration - #+begin_src emacs-lisp +#+begin_src emacs-lisp (winner-mode t) - #+end_src +#+end_src * Org mode - This is one of the most important mode I use in Emacs. I use it to - organize tasks, take meetings notes, write articles, lectures... I use - org with contributed packages added. +This is one of the most important mode I use in Emacs. I use it to +organize tasks, take meetings notes, write articles, lectures... I use +org with contributed packages added. ** Basics - #+BEGIN_SRC emacs-lisp +#+BEGIN_SRC emacs-lisp (use-package org ;; :ensure org-plus-contrib ;; :ensure org-tempo @@ -379,22 +379,22 @@ Some of my configuration entries where borrowed from other people, see ;; IDO for completion when applicable (org-completion-use-ido t) ;; hide emphasis markers -;; (org-hide-emphasis-markers t) + ;; (org-hide-emphasis-markers t) :config ;; (require 'org-tempo) (add-hook 'org-mode-hook (lambda () - (setq org-file-apps - '(("org" . emacs) - ("rs" . emacs) - ("c" . emacs) - ("h" . emacs) - ))))) - #+END_SRC + (setq org-file-apps + '(("org" . emacs) + ("rs" . emacs) + ("c" . emacs) + ("h" . emacs) + ))))) +#+END_SRC - Add a shortcut to toggle display of emphasis characters +Add a shortcut to toggle display of emphasis characters - #+begin_src emacs-lisp +#+begin_src emacs-lisp (defun org-toggle-emphasis () "Toggle hiding/showing of org emphasize markers." (interactive) @@ -402,70 +402,70 @@ Some of my configuration entries where borrowed from other people, see (set-variable 'org-hide-emphasis-markers nil) (set-variable 'org-hide-emphasis-markers t))) (define-key org-mode-map (kbd "C-c e") 'org-toggle-emphasis) - #+end_src +#+end_src - Use =org-mode= for the initial scratch buffer +Use =org-mode= for the initial scratch buffer - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq initial-major-mode 'org-mode) - #+end_src +#+end_src - And set some keyboard shortcuts for links and agenda +And set some keyboard shortcuts for links and agenda - #+begin_src emacs-lisp +#+begin_src emacs-lisp (global-set-key (kbd "C-c l") 'org-store-link) (global-set-key (kbd "C-c a") 'org-agenda) (global-set-key (kbd "C-c c") 'org-capture) - #+end_src +#+end_src - Add shortcuts to quickly add code blocks using =C-,= +Add shortcuts to quickly add code blocks using =C-,= - #+begin_src emacs-lisp +#+begin_src emacs-lisp (add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp")) - #+end_src +#+end_src ** Visuals - Use bullets instead of asterisks +Use bullets instead of asterisks - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package org-bullets :init (add-hook 'org-mode-hook 'org-bullets-mode)) - #+end_src +#+end_src - #+begin_src emacs-lisp +#+begin_src emacs-lisp (set-face-foreground 'org-verbatim "orange1") - #+end_src +#+end_src ** Task management - Record when a todo item was marked as done and enforce marking - dependencies as done before being able to mark an item as done +Record when a todo item was marked as done and enforce marking +dependencies as done before being able to mark an item as done - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq org-log-done 'time) (setq org-enforce-todo-dependencies t) (setq org-enforce-todo-checkbox-dependencies t) - #+end_src +#+end_src - Set default task completion states to =TODO=, =WAITING= and - =DONE=. I use =WAITING= when I can't go further on a task because - I'm waiting for some inputs. +Set default task completion states to =TODO=, =WAITING= and +=DONE=. I use =WAITING= when I can't go further on a task because +I'm waiting for some inputs. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq org-todo-keywords '((sequence "TODO" "WAITING" "|" "DONE"))) - #+end_src +#+end_src *** index and archive files - Index and archive are my main todo lists (index) and a list of archived (done) tasks. +Index and archive are my main todo lists (index) and a list of archived (done) tasks. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq org-directory "~/documents/org") (defun org-file-path (filename) @@ -475,20 +475,20 @@ Some of my configuration entries where borrowed from other people, see (setq org-index-file (org-file-path "index.org")) (setq org-archive-location (concat (org-file-path "archive.org") "::* From %s")) - #+end_src +#+end_src - Then more specifics org files to add to the agenda list +Then more specifics org files to add to the agenda list - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq org-agenda-files (list org-index-file "~/.emacs.d/configuration.org" (org-file-path "work.org") (org-file-path "archive.org"))) ; Just in case I forget to mark a subtask as done and archive the main one - #+end_src +#+end_src - Hitting =C-c C-x C-s= will mark a todo as done and move it to an appropriate place in the archive. +Hitting =C-c C-x C-s= will mark a todo as done and move it to an appropriate place in the archive. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (defun hrs/mark-done-and-archive () "Mark the state of an org-mode item as DONE and archive it." (interactive) @@ -496,44 +496,44 @@ Some of my configuration entries where borrowed from other people, see (org-archive-subtree)) (define-key org-mode-map (kbd "C-c C-x C-s") 'hrs/mark-done-and-archive) - #+end_src +#+end_src ** Agenda - The week should begin today, not last Monday for the agenda view +The week should begin today, not last Monday for the agenda view - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq org-agenda-start-on-weekday nil) - #+end_src +#+end_src - I want to see more days in the agenda view +I want to see more days in the agenda view - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq org-agenda-span 15) - #+end_src +#+end_src - Define a custom agenda view. I want my agenda with tasks that are - scheduled or have a deadline, but also all other tasks that do not - have a date scheduled or as deadline. This is for tasks that I will - eventualy do later. +Define a custom agenda view. I want my agenda with tasks that are +scheduled or have a deadline, but also all other tasks that do not +have a date scheduled or as deadline. This is for tasks that I will +eventualy do later. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq org-agenda-custom-commands '(("a" "Agenda" ( (agenda "" ((org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done)))) (alltodo "" ((org-agenda-skip-function '(org-agenda-skip-entry-if 'scheduled 'deadline 'todo 'done)))) )))) - #+end_src +#+end_src ** Capture - Define some capture template to be able to create tasks, or maybe - other things later +Define some capture template to be able to create tasks, or maybe +other things later - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq org-capture-templates '(("f" "Finished book" table-line (file "~/Documents/org/books-read.org") @@ -556,25 +556,25 @@ Some of my configuration entries where borrowed from other people, see ("w" "Cycling to work" table-line (file "~/Documents/org/cycling.org") "| %t | boulot | %^{prompt|électrique|standard} | 26.2 |"))) - #+end_src +#+end_src ** Tree slide - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package org-tree-slide -:config -(define-key org-mode-map (kbd "<f8>") 'org-tree-slide-mode) -) - #+end_src + :config + (define-key org-mode-map (kbd "<f8>") 'org-tree-slide-mode) + ) +#+end_src ** Export configuration - I use =org-mode= to export to LaTeX, (beamer and article) markdown and to HTML - using bootstrap template. +I use =org-mode= to export to LaTeX, (beamer and article) markdown and to HTML +using bootstrap template. - #+begin_src emacs-lisp +#+begin_src emacs-lisp ;; Add Beamer to export list (require 'ox-beamer) ;; And markdown @@ -588,15 +588,15 @@ Some of my configuration entries where borrowed from other people, see ;; bootstrap html (use-package ox-twbs) - #+end_src +#+end_src - #+RESULTS: +#+RESULTS: - So that code highlighting can be done using [[https://www.ctan.org/pkg/minted][minted]] (which uses - [[https://pygments.org/][Pygments]] as an external tool), we need to change latex export commands. +So that code highlighting can be done using [[https://www.ctan.org/pkg/minted][minted]] (which uses +[[https://pygments.org/][Pygments]] as an external tool), we need to change latex export commands. - #+begin_src emacs-lisp +#+begin_src emacs-lisp ;; Configure ox-latex to export source block using minted ;; Setting minted cache to false as cache seems to fail when changing the output-directory (add-to-list 'org-latex-packages-alist '("cache=false" "minted")) @@ -606,23 +606,23 @@ Some of my configuration entries where borrowed from other people, see '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f" "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f" "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f")) - #+end_src +#+end_src - For HTML source code highlight, use =htmlize= +For HTML source code highlight, use =htmlize= - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package htmlize) - #+end_src +#+end_src ** Source code evaluation - So that source code blocks can be evaluated inside =org-mode=, we add - it to babel languages. =org-babel= is what executes code and outputs - its result in your org file. +So that source code blocks can be evaluated inside =org-mode=, we add +it to babel languages. =org-babel= is what executes code and outputs +its result in your org file. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package gnuplot) (use-package gnuplot-mode) (use-package ob-rust) @@ -643,59 +643,59 @@ Some of my configuration entries where borrowed from other people, see (shell . t) (rust . t) )) - #+END_SRC +#+END_SRC - Preserve indentation in source block (useful for makefiles to preserve tabs for example) - #+begin_src emacs-lisp +Preserve indentation in source block (useful for makefiles to preserve tabs for example) +#+begin_src emacs-lisp (setq org-src-preserve-indentation t) - #+end_src +#+end_src - Don't ask before evaluating +Don't ask before evaluating - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq org-confirm-babel-evaluate nil) - #+end_src +#+end_src - Correctly associate =dot= language with the correct major-mode inside org. +Correctly associate =dot= language with the correct major-mode inside org. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package graphviz-dot-mode) (add-to-list 'org-src-lang-modes '("dot" . graphviz-dot)) - #+end_src +#+end_src - Make org mode correctly export quotes +Make org mode correctly export quotes - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq org-export-with-smart-quotes t) - #+end_src +#+end_src - Use =python3= +Use =python3= #+begin_src emacs-lisp (setq org-babel-python-command "python3") #+end_src - Set line count limit before using =begin_example= blocs in code evaluation results - #+begin_src emacs-lisp +Set line count limit before using =begin_example= blocs in code evaluation results +#+begin_src emacs-lisp (setq org-babel-min-lines-for-block-output 10) - #+end_src +#+end_src - #+RESULTS: - : 10 +#+RESULTS: +: 10 * Completion setup - I use [[http://company-mode.github.io/][company]] mode for completion. It provides a visual completion - list of what can be used to complete. It works with several backends such as - LSP, with which it provides semantic completion for code editing. +I use [[http://company-mode.github.io/][company]] mode for completion. It provides a visual completion +list of what can be used to complete. It works with several backends such as +LSP, with which it provides semantic completion for code editing. - First, install and configure company and enable it for - all buffers. I also set =M-/= to trigger =company-complete= +First, install and configure company and enable it for +all buffers. I also set =M-/= to trigger =company-complete= - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package company :ensure company-lsp :ensure company-box @@ -709,94 +709,94 @@ Some of my configuration entries where borrowed from other people, see (company-minimum-prefix-length 3) (company-idle-delay 0.1) ) - #+end_src +#+end_src - #+RESULTS: +#+RESULTS: - Then, add backends and company tweaks. +Then, add backends and company tweaks. - =company-box= adds icons to company complete list. It is useful when - completing symbols in source code. +=company-box= adds icons to company complete list. It is useful when +completing symbols in source code. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package company-box :ensure frame-local :hook (company-mode . company-box-mode)) - #+end_src +#+end_src - Now some backends I use. Mainly lsp, php and web - related. =company-lsp= is slow to start, so we force a defer loading - only when it's needed. +Now some backends I use. Mainly lsp, php and web +related. =company-lsp= is slow to start, so we force a defer loading +only when it's needed. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package company-php) (use-package company-web) (use-package company-lsp :defer t) - #+end_src +#+end_src * Code navigation ** Treemacs - I use [[https://github.com/Alexander-Miller/treemacs][Treemacs]] for code navigation. You can use it to define - /projects/ (a project is a folder actually) from which you can easily - navigate. You can have several workspaces that are simply a list of - projects. I bind =C-c t= to toggle treemacs panel. +I use [[https://github.com/Alexander-Miller/treemacs][Treemacs]] for code navigation. You can use it to define +/projects/ (a project is a folder actually) from which you can easily +navigate. You can have several workspaces that are simply a list of +projects. I bind =C-c t= to toggle treemacs panel. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package treemacs :custom (treemacs--icon-size 16) :bind ("C-c t" . treemacs-select-window) ) - #+end_src +#+end_src ** Projectile - Projectile allows for easy file navigation inside - projects. Projects are automatically detected by projectile - whenever a =.git= folder or a =.projectile= file is in a foler. +Projectile allows for easy file navigation inside +projects. Projects are automatically detected by projectile +whenever a =.git= folder or a =.projectile= file is in a foler. - Bind =C-c p= as the prefix for projectile command keybinds. +Bind =C-c p= as the prefix for projectile command keybinds. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package projectile :config (define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map) (projectile-mode t)) - #+end_src +#+end_src - As I use =treemacs=, adds =treemacs-projectile= plugin +As I use =treemacs=, adds =treemacs-projectile= plugin - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package treemacs-projectile) - #+end_src +#+end_src * Snippets - I use =yasnippet= for defining and using snippets for several modes. I - preload all snippets by [[https://github.com/AndreaCrotti/yasnippet-snippets][AndreaCrotti]] (=yasnippet-snippets= package). +I use =yasnippet= for defining and using snippets for several modes. I +preload all snippets by [[https://github.com/AndreaCrotti/yasnippet-snippets][AndreaCrotti]] (=yasnippet-snippets= package). - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package yasnippet :init (yas-global-mode)) (use-package yasnippet-snippets) - #+end_src +#+end_src * Developpement - Here, I setup all packages for developping in several languages. This - starts by configuring [[https://emacs-lsp.github.io/lsp-mode/][LSP]] which allow emacs to get semantic - information from a language server dedicated to the programming - language currently in use. +Here, I setup all packages for developping in several languages. This +starts by configuring [[https://emacs-lsp.github.io/lsp-mode/][LSP]] which allow emacs to get semantic +information from a language server dedicated to the programming +language currently in use. ** LSP - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package lsp-mode :hook ( (c++-mode . lsp) @@ -808,67 +808,77 @@ Some of my configuration entries where borrowed from other people, see (lsp-headerline-breadcrumb-mode t) :commands lsp ) - #+end_src +#+end_src - For displaying more information directly in the buffer, I use =lsp-ui= +For displaying more information directly in the buffer, I use =lsp-ui= - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package lsp-ui :commands lsp-ui-mode) - #+end_src +#+end_src - LSP keybinds +LSP keybinds - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq lsp-keymap-prefix "s-l") - #+end_src +#+end_src *** Integration with treemacs - LSP can integrate with treemacs to display packages, class, symbols and such. +LSP can integrate with treemacs to display packages, class, symbols and such. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package lsp-treemacs :custom (lsp-treemacs-sync-mode 1)) - #+end_src +#+end_src ** Flycheck - [[https://www.flycheck.org/][Flycheck]] allow synthax checking in the source code buffer. LSP uses - flycheck if available to show code diagnosis. +[[https://www.flycheck.org/][Flycheck]] allow synthax checking in the source code buffer. LSP uses +flycheck if available to show code diagnosis. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package flycheck) - #+end_src +#+end_src - For languages that do not have LSP yet, we can add some flycheck extensions +For languages that do not have LSP yet, we can add some flycheck extensions - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package flycheck-perl6) - #+end_src +#+end_src ** Language specific configuration +*** C + +Set indentation size and parameters +#+begin_src emacs-lisp +(setq c-default-style "linux" + c-basic-offset 4) +#+end_src + +#+RESULTS: + *** Rust - Install =rust-mode= and set the rust language server to [[https://rust-analyzer.github.io/][rust-analyzer]] +Install =rust-mode= and set the rust language server to [[https://rust-analyzer.github.io/][rust-analyzer]] - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package rust-mode :custom (lsp-rust-server 'rust-analyzer) ; (rust-format-on-save t) ) - #+end_src +#+end_src - For this to work, you need to install =rust-analyzer= and =rustmft=. +For this to work, you need to install =rust-analyzer= and =rustmft=. - #+begin_src bash :results output verbatim +#+begin_src bash :results output verbatim if [[ "$OSTYPE" =~ ^darwin ]] then echo "Installing for macos" @@ -879,54 +889,54 @@ else fi curl -L https://github.com/rust-analyzer/rust-analyzer/releases/latest/download/$binary -o ~/.cargo/bin/rust-analyzer chmod +x ~/.cargo/bin/rust-analyzer - #+end_src +#+end_src - #+RESULTS: - : Installing for macos +#+RESULTS: +: Installing for macos - Adds cargo installed binaries to exec path +Adds cargo installed binaries to exec path - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq exec-path (cons "~/.cargo/bin" exec-path)) - #+end_src +#+end_src *** Lua - Simply add =lua-mode= +Simply add =lua-mode= - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package lua-mode) - #+end_src +#+end_src *** Docker - For dockerfiles and docker-compose files, install some docker packages +For dockerfiles and docker-compose files, install some docker packages - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package dockerfile-mode) (use-package docker-compose-mode) (use-package docker) (use-package docker-api) (use-package docker-cli) (use-package docker-tramp) - #+end_src +#+end_src *** Web - Add =web-mode=, =rainbow-mode=, =simple-httpd= and =impatient-mode= for web editing. - - - =web-mode= is a major mode for web template editing. We - associate the mode with web files - - =rainbow-mode= colorizes color names in buffers - - =simple-httpd= is an http server implemented in =elisp= that can - serve local directory and even remote directory if associated - with tramp - - =impatient-mode= serves buffers dynamically with - =simple-httpd=. What you edit in emacs is immediatly visible on - the web browser +Add =web-mode=, =rainbow-mode=, =simple-httpd= and =impatient-mode= for web editing. + +- =web-mode= is a major mode for web template editing. We + associate the mode with web files +- =rainbow-mode= colorizes color names in buffers +- =simple-httpd= is an http server implemented in =elisp= that can + serve local directory and even remote directory if associated + with tramp +- =impatient-mode= serves buffers dynamically with + =simple-httpd=. What you edit in emacs is immediatly visible on + the web browser - #+begin_src emacs-lisp + #+begin_src emacs-lisp (use-package web-mode :config (add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode)) @@ -941,43 +951,53 @@ chmod +x ~/.cargo/bin/rust-analyzer (use-package rainbow-mode) (use-package simple-httpd) (use-package impatient-mode) - #+end_src + #+end_src *** LaTeX - Enable =reftex= whenever =tex-mode= is activated +Enable =reftex= whenever =tex-mode= is activated - #+begin_src emacs-lisp +#+begin_src emacs-lisp (add-hook 'latex-mode-hook 'reftex-mode) - #+end_src +#+end_src - Use =auctex= for better experience editing latex files +Use =auctex= for better experience editing latex files - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package auctex :ensure auctex-latexmk :defer t ) - #+end_src +#+end_src - If using macos, add mactex to =exec-path= +If using macos, add mactex to =exec-path= - #+begin_src emacs-lisp +#+begin_src emacs-lisp (when (eq system-type 'darwin) (setq exec-path (cons "/Library/TeX/texbin" exec-path))) - #+end_src +#+end_src *** Ningx configuration - A mode to edit [[https://nginx.org/][nginx]] configuration files. +A mode to edit [[https://nginx.org/][nginx]] configuration files. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package nginx-mode) - #+end_src +#+end_src + +*** Terraform + +Packages to edit terraform configuration files + +#+begin_src emacs-lisp +(use-package terraform-mode) +(use-package terraform-doc) +(use-package company-terraform) +#+end_src ** Magit - [[https://magit.vc/][Magit]] is git porcelain inside emacs. +[[https://magit.vc/][Magit]] is git porcelain inside emacs. + Bind =C-x g= to pop up the magit status buffer @@ -987,85 +1007,85 @@ chmod +x ~/.cargo/bin/rust-analyzer + Save buffers that visit a file that belongs to a repository if needed - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package magit :config (magit-auto-revert-mode t) (magit-save-repository-buffers t) :bind ("C-x g" . magit-status) ) - #+end_src +#+end_src *** Protocol buffers - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package protobuf-mode) - #+end_src +#+end_src * Spell checking - First, set =aspell= to be the spell checking program instead of =ispell= +First, set =aspell= to be the spell checking program instead of =ispell= - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq ispell-program-name "aspell") - #+end_src +#+end_src - #+RESULTS: - : aspell +#+RESULTS: +: aspell - Then define a command that will run flyspell on the buffer *and* activate it +Then define a command that will run flyspell on the buffer *and* activate it - #+begin_src emacs-lisp +#+begin_src emacs-lisp (defun mh/spellcheck () (interactive) (flyspell-mode t) (flyspell-buffer) ) - #+end_src +#+end_src - And define a global binding to call it +And define a global binding to call it - #+begin_src emacs-lisp +#+begin_src emacs-lisp (global-set-key (kbd "C-c s") 'mh/spellcheck) - #+end_src +#+end_src - Binding to fix a word /then/ go to the next error. Special syntax - =[?\C-\$]= is used to protect the =$= sign +Binding to fix a word /then/ go to the next error. Special syntax +=[?\C-\$]= is used to protect the =$= sign - #+begin_src emacs-lisp +#+begin_src emacs-lisp (defun mh/cycle-spellcheck () (interactive) (flyspell-goto-next-error) (ispell-word)) (global-set-key (kbd "C-$") 'mh/cycle-spellcheck) - #+end_src +#+end_src * Misc. - Adds =/usr/local/bin= to Emacs =exec-path= +Adds =/usr/local/bin= to Emacs =exec-path= - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq exec-path (cons "/usr/local/bin" exec-path)) - #+end_src +#+end_src - Starts Emacs server so that we can use =emacsclient= for opening new - files. +Starts Emacs server so that we can use =emacsclient= for opening new +files. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (server-start) - #+end_src +#+end_src - A handy way of starting Emacs from the shell is then to call +A handy way of starting Emacs from the shell is then to call - #+begin_src bash +#+begin_src bash emacsclient -a emacs ... - #+end_src +#+end_src - This will attempt to connect to Emacs server and run Emacs if the - server is not started yet. +This will attempt to connect to Emacs server and run Emacs if the +server is not started yet. * To check later @@ -1077,10 +1097,10 @@ emacsclient -a emacs ... * Performances tweaks (part. 2, profiling) - This configuration can make emacs being long to start, let's profile a bit +This configuration can make emacs being long to start, let's profile a bit - This will print emacs start time as well as the count of GC calls - #+begin_src emacs-lisp +This will print emacs start time as well as the count of GC calls +#+begin_src emacs-lisp (add-hook 'emacs-startup-hook (lambda () (message "Emacs ready in %s with %d garbage collections." @@ -1088,41 +1108,41 @@ emacsclient -a emacs ... (float-time (time-subtract after-init-time before-init-time))) gcs-done))) - #+end_src +#+end_src - [[https://github.com/jschaf/esup][ESup]] is an emacs profiler +[[https://github.com/jschaf/esup][ESup]] is an emacs profiler - #+begin_src emacs-lisp +#+begin_src emacs-lisp (use-package esup :ensure t ;; To use MELPA Stable use ":pin mepla-stable", :pin melpa :commands (esup)) - #+end_src +#+end_src - #+RESULTS: +#+RESULTS: * Performances tweaks (part. 3, the end) - Set GC threshold to something more reasonable for standard use. +Set GC threshold to something more reasonable for standard use. - #+begin_src emacs-lisp +#+begin_src emacs-lisp (setq gc-cons-threshold (* 2 1024 1024)) - #+end_src +#+end_src * Acknowledgment - I learned a great deal of how to use =org-mode= for emacs - configuration from [[https://github.com/hrs/dotfiles/][Harry R. Schwartz]] configuration files. He also gave - a great [[https://www.youtube.com/watch?v=SzA2YODtgK4][talk]] on emacs =org-mode=. Parts of my configuration are - directly copied from his. +I learned a great deal of how to use =org-mode= for emacs +configuration from [[https://github.com/hrs/dotfiles/][Harry R. Schwartz]] configuration files. He also gave +a great [[https://www.youtube.com/watch?v=SzA2YODtgK4][talk]] on emacs =org-mode=. Parts of my configuration are +directly copied from his. - [[https://www.youtube.com/watch?v=gfZDwYeBlO4][Alain M. Lafon]] also gave a great talk on how emacs can be /played - like an instrument/. +[[https://www.youtube.com/watch?v=gfZDwYeBlO4][Alain M. Lafon]] also gave a great talk on how emacs can be /played +like an instrument/. - A [[https://blog.d46.us/advanced-emacs-startup/][guide]] on how to speed up emacs starting time +A [[https://blog.d46.us/advanced-emacs-startup/][guide]] on how to speed up emacs starting time -- GitLab