home

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 12d58a133c9d90823fca6c9aaa4389b0e0fde6e5
parent bc404fbc1ab50922e0209544a7611b8a3f59cfce
Author: Vincent Demeester <vincent@sbr.pm>
Date:   Thu, 24 Sep 2020 18:18:10 +0100

tools/emacs: no more litterate

Signed-off-by: Vincent Demeester <vincent@sbr.pm>

Diffstat:
Mtools/emacs/early-init.el | 76++--------------------------------------------------------------------------
Mtools/emacs/init.el | 171+------------------------------------------------------------------------------
2 files changed, 3 insertions(+), 244 deletions(-)

diff --git a/tools/emacs/early-init.el b/tools/emacs/early-init.el @@ -1,86 +1,18 @@ -;; Early initialization -;; :PROPERTIES: -;; :header-args: :tangle ~/src/home/tools/emacs/early-init.el -;; :header-args+: :comments org -;; :ID: 317fc8fd-1220-423d-8a45-497f951014ee -;; :END: -;; -;; Starting with Emacs 27, an =early-init.el= file can be used to do early configuration -;; and optimization. -;; -;; #+begin_quote -;; Emacs can now be configured using an early init file. The file is called ~early-init.el~, -;; in ~user-emacs-directory~. It is loaded very early in the startup process: before -;; graphical elements such as the tool bar are initialized, and before the package manager is -;; initialized. The primary purpose is to allow customizing how the package system is -;; initialized given that initialization now happens before loading the regular init file -;; (see below). -;; -;; We recommend against putting any customizations in this file that don't need to be set up -;; before initializing installed add-on packages, because the early init file is read too -;; early into the startup process, and some important parts of the Emacs session, such as -;; 'window-system' and other GUI features, are not yet set up, which could make some -;; customization fail to work. -;; #+end_quote -;; -;; We can use this to our advantage and optimize the initial loading of emacs. -;; -;; - Before Emacs 27, the init file was responsible for initializing the package manager by -;; calling `package-initialize'. Emacs 27 changed the default behavior: It now calls -;; `package-initialize' before loading the init file. - +;;; early-init.el -*- lexical-binding: t; -*- (setq package-enable-at-startup nil) - - - -;; - Let's inhibit resizing the frame at early stage. - - (setq frame-inhibit-implied-resize t) - - - -;; - I never use the /menu-bar/, or the /tool-bar/ or even the /scroll-bar/, so we can safely -;; disable those very very early. - - (menu-bar-mode -1) (tool-bar-mode -1) (scroll-bar-mode -1) (horizontal-scroll-bar-mode -1) - - -;; - Finally we can try to avoid garbage collection at startup. The garbage collector can -;; easily double startup time, so we suppress it at startup by turning up ~gc-cons-threshold~ -;; (and perhaps ~gc-cons-percentage~) temporarily. - - (setq gc-cons-threshold 402653184 gc-cons-percentage 0.6) - - -;; - Another small optimization concerns on =file-name-handler-alist= : on every .el and .elc -;; file loaded during start up, it has to runs those regexps against the filename ; setting -;; it to ~nil~ and after initialization finished put the value back make the initialization -;; process quicker. - - (defvar file-name-handler-alist-original file-name-handler-alist) (setq file-name-handler-alist nil) - - -;; However, it is important to reset it eventually. Not doing so will cause garbage -;; collection freezes during long-term interactive use. Conversely, a ~gc-cons-threshold~ -;; that is too small will cause stuttering. This will be done at the end. -;; -;; - It's also possible to put the theme *and* the font in =early-init.el= to speed the -;; start. - - (defvar contrib/after-load-theme-hook nil "Hook run after a color theme is loaded using `load-theme'.") @@ -110,7 +42,7 @@ This is used internally by `vde/modus-themes-toggle'." modus-operandi-theme-completions 'opinionated ; {nil,'moderate,'opinionated} modus-operandi-theme-diffs 'desaturated ; {nil,'desaturated,'fg-only} modus-operandi-theme-org-blocks 'greyscale ; {nil,'greyscale,'rainbow} - modus-operandi-theme-variable-pitch-headings t + modus-operandi-theme-variable-pitch-headings nil modus-operandi-theme-rainbow-headings t modus-operandi-theme-section-headings nil modus-operandi-theme-scale-headings t @@ -168,11 +100,7 @@ This is used internally by `vde/modus-themes-toggle'." ;; cursor color is concerned). (advice-add #'x-apply-session-resources :override #'ignore) - - ;; - Reseting garbage collection and file-name-handler values. - - (add-hook 'after-init-hook `(lambda () (setq gc-cons-threshold 67108864 ; 64mb diff --git a/tools/emacs/init.el b/tools/emacs/init.el @@ -1,133 +1,30 @@ -;; Initialization -;; :PROPERTIES: -;; :ID: a8fe7fee-d339-4854-9b75-c627adce788a -;; :END: -;; -;; I am using the [[https://archive.casouri.cat/note/2020/painless-transition-to-portable-dumper/index.html][portable dump]] feature (/to speed things up/) *but* I want to also start -;; without =pdump=, so I need to take both cases into account. - - -(defvar sbr-dumped nil - "non-nil when a dump file is loaded (because dump.el sets this variable).") - -(defmacro sbr-if-dump (then &rest else) - "Evaluate IF if running with a dump file, else evaluate ELSE." - (declare (indent 1)) - `(if sbr-dumped - ,then - ,@else)) - -(sbr-if-dump - (progn - (global-font-lock-mode) - (transient-mark-mode) - (setq load-path sbr-dumped-load-path)) - ;; add load-path’s and load autoload files - (package-initialize)) - - - -;; First thing first, let's define a =emacs-start-time= constant to be able to compute the -;; time Emacs took to start. - (defconst emacs-start-time (current-time)) - - -;; My configuration do not support Emacs version lower than 26. - - (let ((minver 26)) (unless (>= emacs-major-version minver) (error "Your Emacs is too old -- this configuration requires v%s or higher" minver))) - - -;; One thing though, I am currently not necessarily running Emacs 27, so I am going to need -;; to have the same configuration in ~init.el~ for a little bit of time. -;; -;; /Note: the lowest emacs version I wanna support is 26 (as of today, might evolve)/ - - ;; load early-init.el before Emacs 27.0 (unless (>= emacs-major-version 27) (message "Early init: Emacs Version < 27.0") (load (expand-file-name "early-init.el" user-emacs-directory))) - - -;; We also want our configuration to be working the same on any computer, this means we want -;; to define every option by ourselves, not relying on default files (~default.el~) that -;; would be set by our distribution. This is where =inhibit-default-init= comes into play, -;; setting it to non-nil inhibit loading the ~default~ library. -;; -;; We also want to inhibit some initial default start messages and screen. The default screen -;; will be as bare as possible. - - (setq inhibit-default-init t) ; Disable the site default settings (setq inhibit-startup-message t inhibit-startup-screen t) - - -;; Let's also use =y= or =n= instead of =yes= and =no= when exiting Emacs. - - (setq confirm-kill-emacs #'y-or-n-p) - - - -;; One last piece to the puzzle is the default mode. Setting it to fundamental-mode means we -;; won't load any /heavy/ mode at startup (like =org-mode=). We also want this scratch buffer -;; to be empty, so let's set it as well - - (setq initial-major-mode 'fundamental-mode initial-scratch-message nil) -;; Unicode all the way -;; :PROPERTIES: -;; :ID: e98f57c6-565a-4919-8ecb-f12e939dab03 -;; :END: -;; -;; By default, all my systems are configured and support =utf-8=, so let's just make it a -;; default in Emacs ; and handle special case on demand. - - (prefer-coding-system 'utf-8) (set-default-coding-systems 'utf-8) (set-language-environment 'utf-8) (set-selection-coding-system 'utf-8) (set-terminal-coding-system 'utf-8) -;; Package management with =use-package= -;; :PROPERTIES: -;; :ID: d2d75dfe-5085-4655-a81f-b6033f273f6f -;; :END: -;; -;; =use-package= is a tool that streamlines the configuration of packages. It handles -;; everything from assigning key bindings, setting the value of customisation options, -;; writing hooks, declaring a package as a dependency for another, and so on. -;; -;; #+begin_quote -;; The =use-package= macro allows you to isolate package configuration in your =.emacs= file -;; in a way that is both performance-oriented and, well, tidy. I created it because I have -;; over 80 packages that I use in Emacs, and things were getting difficult to manage. Yet -;; with this utility my total load time is around 2 seconds, with no loss of functionality! -;; #+end_quote -;; -;; With =use-package= we can improve the start-up performance of Emacs in a few fairly simple -;; ways. Whenever a command is bound to a key it is configured to be loaded only once -;; invoked. Otherwise we can specify which functions should be autoloaded by means of the -;; =:commands= keyword. -;; -;; We need to setup the emacs package system and install =use-package= if not present -;; already. - - (require 'package) (setq package-archives @@ -178,26 +75,8 @@ (eval-when-compile (require 'use-package)) -;; Early environment setup -;; :PROPERTIES: -;; :ID: de0aad38-4742-4601-9fe6-c659ddc76bcb -;; :END: -;; -;; I want to *force* ==SSH_AUTH_SOCK= in Emacs to use my gpg-agent. - - (setenv "SSH_AUTH_SOCK" "/run/user/1000/gnupg/S.gpg-agent.ssh") -;; =custom.el= -;; :PROPERTIES: -;; :ID: afd8123e-1461-4f65-a9b7-c8195f1054c8 -;; :END: -;; -;; When you install a package or use the various customisation interfaces to tweak things to -;; your liking, Emacs will append a piece of elisp to your init file. I prefer to have that -;; stored in a separate file. - - (defconst vde/custom-file (locate-user-emacs-file "custom.el") "File used to store settings from Customization UI.") @@ -214,16 +93,7 @@ (load vde/custom-file 'no-error 'no-message)) -;; Remove built-in =org-mode= -;; :PROPERTIES: -;; :ID: b2b2ac61-2ce6-4a86-b67c-88592bc0f111 -;; :END: -;; -;; I want to make sure I am using the installed version of =orgmode= (from my org -;; configuration) instead of the built-in one. To do that safely, let's remove the built-in -;; version out of the load path. - - +;; Remove built-in org-mode (require 'cl-seq) (setq load-path (cl-remove-if @@ -231,22 +101,6 @@ (string-match-p "org$" x)) load-path)) -;; Loading configuration files -;; :PROPERTIES: -;; :ID: ca8dd6f8-47c1-40bd-932b-baf3fb9e6407 -;; :END: -;; -;; This =org-mode= document /tangles/ into several files in different folders : -;; - ~config~ for my configuration -;; - ~lisp~ for imported code or library I've written and not yet published -;; -;; I used to load them by hand in the ~init.el~ file, which is very cumbersome, so let's try -;; to automatically load them. I want to first load the file in the ~lisp~ folder as they are -;; potentially used by my configuration (in ~config~). -;; -;; Let's define some functions that would do the job. - - (defun vde/el-load-dir (dir) "Load el files from the given folder" (let ((files (directory-files dir nil "\.el$"))) @@ -259,11 +113,6 @@ (substring system-name (match-beginning 0) (match-end 0))) - -;; Let's define some constants early, based on the system, and the environment, to be able to -;; use those later on to skip some package or change some configuration accordingly. - - (defconst *sys/gui* (display-graphic-p) "Are we running on a GUI Emacs ?") @@ -296,32 +145,14 @@ (not *sys/full*) "Is it a light system ?") - - -;; Now, in order to load ~lisp~ and ~config~ files, it's just a matter of calling this -;; function with the right argument. - - (add-to-list 'load-path (concat user-emacs-directory "lisp/")) (add-to-list 'load-path (concat user-emacs-directory "lisp/vorg")) (require 'init-func) (vde/el-load-dir (concat user-emacs-directory "/config/")) - - -;; Finally, I want to be able to load files for a specific machine, in case I need it (not -;; entirely sure why yet but…) - - (if (file-exists-p (downcase (concat user-emacs-directory "/hosts/" (vde/short-hostname) ".el"))) (load-file (downcase (concat user-emacs-directory "/hosts/" (vde/short-hostname) ".el")))) -;; Counting the time of loading -;; :PROPERTIES: -;; :ID: 2c7541e4-ed3c-497a-b078-732d18e82759 -;; :END: - - (let ((elapsed (float-time (time-subtract (current-time) emacs-start-time)))) (message "Loading %s...done (%.3fs)" load-file-name elapsed))