;;; early-init.el -*- lexical-binding: t; coding: utf-8-unix -*- ;; Author: Case Duckworth ;; Created: Sometime during Covid-19, 2020 ;; Keywords: configuration ;; URL: https://tildegit.org/acdw/emacs ;;; License: ;; Everyone is permitted to do whatever they like with this software ;; without limitation. This software comes without any warranty ;; whatsoever, but with two pieces of advice: ;; - Be kind to yourself. ;; - Make good choices. ;;; Commentary: ;; Starting with Emacs 27.1, early-init.el is sourced before ;; package.el and any graphical frames. In this file, I set up frame ;; parameters and packaging infrastructure. ;;; Code: (define-advice load (:before (feature &rest _)) "Message the user when loading a library." (with-temp-message (format "Now loading: '%s'" feature))) ;;; Speed up init (setq gc-cons-threshold most-positive-fixnum) (add-hook 'emacs-startup-hook (defun emacs-startup@restore-values () "Restore values set during early-init for speed." (setq gc-cons-threshold 134217728 ; 128mb ;; I don't do the common `file-name-handler-alist' thing here ;; because of a weirdness where my Emacs doesn't know how to ;; load bookmark.el.gz when initializing. ))) ;;; Set up extra load paths and functionality (push (locate-user-emacs-file "lisp") load-path) (add-to-list 'load-path (locate-user-emacs-file "lisp/compat") :append) (require 'acdw) (+define-dir .etc (locate-user-emacs-file ".etc") "Directory for all of Emacs's various files. See `no-littering' for examples.") (+define-dir sync/ (expand-file-name "~/Sync") "My Syncthing directory.") ;;; Default frame settings (setq default-frame-alist '((tool-bar-lines . 0) (menu-bar-lines . 0) (vertical-scroll-bars) (horizontal-scroll-bars)) frame-inhibit-implied-resize t frame-resize-pixelwise t window-resize-pixelwise t inhibit-x-resources t indicate-empty-lines nil indicate-buffer-boundaries '((top . right) (bottom . right))) ;; Fonts (let ((font-name "DejaVu Sans Mono") (font-size 105) (variable-font-name "DejaVu Sans") (variable-font-size 1.0)) (set-face-attribute 'default nil :family font-name :height font-size :weight 'book) (set-face-attribute 'italic nil :family font-name :height font-size :slant 'italic) (set-face-attribute 'variable-pitch nil :family variable-font-name :height variable-font-size)) ;;; Packages (setq package-enable-at-startup nil package-quickstart nil straight-host-usernames '((github . "duckwork") (gitlab . "acdw")) straight-check-for-modifications '(check-on-save find-when-checking)) (setq no-littering-etc-directory .etc no-littering-var-directory .etc straight-base-dir .etc) ;; Bootstrap straight.el ;; https://github.com/raxod502/straight.el (defvar bootstrap-version) (let ((bootstrap-file (expand-file-name "straight/repos/straight.el/bootstrap.el" straight-base-dir)) (bootstrap-version 5)) (unless (file-exists-p bootstrap-file) (with-current-buffer (url-retrieve-synchronously (concat "https://raw.githubusercontent.com/" "raxod502/straight.el/develop/install.el") 'silent 'inhibit-cookies) (goto-char (point-max)) (eval-print-last-sexp))) (load bootstrap-file nil 'nomessage)) ;; Early-loaded packages -- those that, for some reason or another, ;; need to be ensured to be loaded first. (require 'straight-x) (dolist (pkg '(el-patch no-littering setup)) (straight-use-package pkg) (require pkg) (require (intern (format "+%s" pkg)) nil :noerror)) ;; Setup `setup' (add-to-list 'setup-modifier-list 'setup-wrap-to-demote-errors) ;;; Appendix ;; Get rid of a dumb alias. straight-ಠ_ಠ-mode really slows down all ;; minibuffer completion functions. Since it's a (rarely-used, even) ;; alias anyway, I just define it back to nil. By the way, the alias ;; is `straight-package-neutering-mode'. (defalias 'straight-ಠ_ಠ-mode nil) (provide 'early-init) ;;; early-init.el ends here