summaryrefslogtreecommitdiff
path: root/emacs/init.el
blob: 22ffb244ead6581c8d08c3a7abf7d56bcfc8e4dd (plain) (blame)
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
;;; init.el --- Initialize my Emacs configuration
;;; Commentary:

;;; Code:

;; store all the customizations into that file. if the file does not
;; exists, we create an empty file, and then we load it.
(setq custom-file (expand-file-name "var/custom.el" user-emacs-directory))
(when (not (file-exists-p custom-file))
  (write-region "" nil custom-file))
(load custom-file)

(setq gc-cons-threshold 64000000)
(add-hook 'after-init-hook #'(lambda ()
                               ;; restore after startup
                               (setq gc-cons-threshold 800000)))

(require 'package)

(add-to-list 'package-archives
	     '("melpa" .
	       "https://melpa.org/packages/"))

(defvar my/package-list '(chef-mode
                          consult
                          corfu
                          dockerfile-mode
                          eglot
                          elfeed
                          elfeed-org
                          eshell-bookmark
                          exec-path-from-shell
                          git-commit
                          git-link
                          git-modes
                          go-mode
                          gotest
                          hcl-mode
                          jq-format
                          magit
                          marginalia
                          markdown-mode
                          nix-mode
                          notmuch
                          ol-notmuch
                          orderless
                          protobuf-mode
                          rg
                          rustic
                          systemd
                          terraform-doc
                          terraform-mode
                          toml-mode
                          tree-sitter
                          tree-sitter-langs
                          vertico
                          which-key
                          yaml-mode
                          yasnippet)
  "List of packages to be installed.")

(defun my/packages-installed-p ()
  "Check if all packages in `my/package-list' are installed."
  (cl-every #'package-installed-p my/package-list))

(defun my/require-package (package)
  "Install PACKAGE unless already installed."
  (unless (memq package my/package-list)
    (add-to-list 'my/package-list package))
  (unless (package-installed-p package)
    (package-install package)))

(defun my/require-packages (packages)
  "Ensure PACKAGES are installed.
Missing packages are installed automatically."
  (mapc #'my/require-package packages))

(defun my/install-packages ()
  "Install all packages listed in `my/package-list'."
  (unless (my/packages-installed-p)
    ;; check for new packages (package versions)
    (message "%s" "Reloading packages DB...")
    (package-refresh-contents)
    (message "%s" " done.")
    ;; install the missing packages
    (my/require-packages my/package-list)))

;; run package installation
(my/install-packages)

;; configure straight to manage packages
(defvar bootstrap-version)
(let ((bootstrap-file
      (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
      (bootstrap-version 5))
  (unless (file-exists-p bootstrap-file)
    (with-current-buffer
        (url-retrieve-synchronously
        "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))

(add-to-list 'load-path (expand-file-name "custom/" user-emacs-directory))
(add-to-list 'load-path (expand-file-name "elisp/" user-emacs-directory))

(require 'my-settings)
(require 'my-ui)
(require 'my-dired)
(require 'my-navigation)
(require 'my-completion)
(require 'my-edit)
(require 'my-text)
(require 'my-git)
(require 'my-org)
(require 'my-conf)
(require 'my-prog)
(require 'my-eshell)
(require 'my-tramp)
(require 'my-notmuch)
(require 'my-elfeed)

(require 'my-buffers)
(require 'my-git-extra)
(require 'my-gerrit)
(require 'my-strings)
(require 'my-web)
(require 'my-work)
(require 'my-uptime)
(require 'my-cheeseboard)
(require 'my-packages-extra)

;;; init.el ends here