summary refs log tree commit diff stats
path: root/early-init.el
blob: ccd1ff4b6289ce7fab6796b8ea85930ec815057f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
;;; early-init.el -*- lexical-binding: t; coding: utf-8-unix -*-

;; Author: Case Duckworth <acdw@acdw.net>
;; 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:

(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 "Go Mono")
      (font-size 105))
  (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))

;;; 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))

;;; Appendix

;; I've patched setup to look at `setup-ensure-function-inhibit' to decide
;; whether to ensure functions or not with local macros.
(setq setup-ensure-function-inhibit t)

;; 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