emacs.d/init.el

158 lines
6.1 KiB
EmacsLisp

;;; -*- lexical-binding: t; -*-
;;; BEGIN OPTIMIZATION
;; Optimizations (mostly taken from doom)
(defvar init-done-hook nil)
;; Don't garbage collect during init
(add-hook 'init-done-hook
`(lambda () (setq gc-cons-threshold
,(default-toplevel-value 'gc-cons-threshold))))
(setq gc-cons-threshold most-positive-fixnum)
;; Don't use file type handlers during init
(let ((old-value (default-toplevel-value 'file-name-handler-alist)))
(setq file-name-handler-alist nil)
(set-default-toplevel-value 'file-name-handler-alist file-name-handler-alist)
(put 'file-name-handler-alist 'initial-value old-value)
(add-hook 'init-done-hook
(lambda ()
(setq file-name-handler-alist
;; Merge instead of overwrite because there may have been changes to
;; `file-name-handler-alist' since startup we want to preserve.
(delete-dups (append file-name-handler-alist old-value))))))
;; Don't resize during init
(setq frame-inhibit-implied-resize t)
(setq inhibit-startup-screen t
inhibit-startup-echo-area-message user-login-name)
(advice-add #'display-startup-echo-area-message :override #'ignore)
(advice-add #'display-startup-screen :override #'ignore)
;; Don't use advanced modes for scratch buffer
(setq initial-major-mode 'fundamental-mode
initial-scratch-message nil)
;; Don't cause rewrites when loading file
(define-advice load-file (:override (file) silence) (load file nil 'nomessage))
(define-advice startup--load-user-init-file (:before (&rest _) undo-silence)
(advice-remove #'load-file #'load-file@silence))
;; Disable modeline
(put 'mode-line-format 'initial-value (default-toplevel-value 'mode-line-format))
(setq-default mode-line-format nil)
(dolist (buf (buffer-list))
(with-current-buffer buf (setq mode-line-format nil)))
;; Inhibit redraws
(setq-default inhibit-redisplay t
inhibit-message t)
(defun reset-inhibited-vars-h ()
(setq-default inhibit-redisplay nil
;; Inhibiting `message' only prevents redraws and
inhibit-message nil)
(redraw-frame))
(add-hook 'after-init-hook #'reset-inhibited-vars-h)
(define-advice startup--load-user-init-file (:after (&rest _) undo-inhibit-vars)
(when init-file-had-error
(reset-inhibited-vars-h))
(unless (default-toplevel-value 'mode-line-format)
(setq-default mode-line-format (get 'mode-line-format 'initial-value))))
;; Don't load toolbar
(advice-add #'tool-bar-setup :override #'ignore)
(define-advice startup--load-user-init-file (:before (&rest _) defer-tool-bar-setup)
(advice-remove #'tool-bar-setup #'ignore)
(add-transient-hook! 'tool-bar-mode (tool-bar-setup)))
;; Don't bother with MACOS exclusive options
(setq command-line-ns-option-alist nil)
;;; END OPTIMIZATION
;; Packages
(require 'package)
(setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
("melpa" . "https://melpa.org/packages/")))
(package-initialize)
;; File inclusion
(defun path (f) (concat "/home/deppy/.emacs.d/" f))
(defmacro include (f) (load (path f)))
;; Keybinds
(include "binds.el")
;; Style (theme, etc)
(include "style.el")
;; Zotero
(include "packages.el")
;; Secrets
(include "secrets.el")
;; Behaviour
(include "behaviour.el")
;; Emacs server
(server-start)
;; Exwm
(include "exwm.el")
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(display-time-24hr-format t)
'(display-time-default-load-average nil)
'(display-time-interval 15)
'(display-time-mode t)
'(evil-undo-system 'undo-tree)
'(image-converter 'imagemagick)
'(image-file-name-extensions
'("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm" "svg" "ora"))
'(image-use-external-converter t)
'(imagemagick-enabled-types
'(3FR ARW AVS BMP BMP2 BMP3 CAL CALS CMYK CMYKA CR2 CRW CUR CUT DCM DCR DCX DDS DJVU DNG DPX EXR FAX FITS GBR GIF GIF87 GRB HRZ ICB ICO ICON J2C JNG JP2 JPC JPEG JPG JPX K25 KDC MIFF MNG MRW MSL MSVG MTV NEF ORF OTB PBM PCD PCDS PCL PCT PCX PDB PEF PGM PICT PIX PJPEG PNG PNG24 PNG32 PNG8 PNM PPM PSD PTIF PWP RAF RAS RBG RGB RGBA RGBO RLA RLE SCR SCT SFW SGI SR2 SRF SUN SVG SVGZ TGA TIFF TIFF64 TILE TIM TTF UYVY VDA VICAR VID VIFF VST WBMP WPG X3F XBM XC XCF XPM XV XWD YCbCr YCbCrA YUV ORA))
'(org-agenda-files '("/home/deppy/doc/org/todo.org"))
'(package-selected-packages
'(multi-vterm dmenu markdown-preview-mode markdown-mode exwm org-superstar org-fragtog org-pretty-tags visual-fill writeroom-mode haskell-emacs treemacs-evil treemacs solarized-theme doom-modeline all-the-icons-dired page-break-lines all-the-icons dashboard org-evil zotero vterm magit undo-fu latex-math-preview use-package haskell-mode evil-surround undo-tree evil-org evil))
'(shell-file-name "/bin/bash")
'(treemacs-collapse-dirs 3)
'(treemacs-filewatch-mode t)
'(treemacs-follow-mode t)
'(treemacs-fringe-indicator-mode t)
'(treemacs-git-mode t)
'(treemacs-no-delete-other-windows nil)
'(treemacs-select-when-already-in-treemacs 'next-or-back)
'(warning-suppress-log-types '((comp)))
'(warning-suppress-types '((comp)))
'(writeroom-mode-line t)
'(writeroom-width 100)
'(zotero-recognize-pdfdata
"/home/deppy/.emacs.d/elpa/zotero-20211008.2207/pdftools/poppler-data/")
'(zotero-recognize-pdfinfo
"/home/deppy/.emacs.d/elpa/zotero-20211008.2207/pdftools/pdfinfo-linux-x86_64" t)
'(zotero-recognize-pdftotext
"/home/deppy/.emacs.d/elpa/zotero-20211008.2207/pdftools/pdftotext-linux-x86_64"))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(bookmark-face ((t (:foreground "#fdf6e3"))))
'(mode-line ((t (:underline nil :overline nil))))
'(mode-line-inactive ((t (:underline nil :overline nil)))))
;; Reset values
(run-hooks 'init-done-hook)
;; Performance post-init
(setq gc-cons-threshold (* 512 1024 1024))
(run-with-idle-timer 1 t 'garbage-collect)