aboutsummaryrefslogtreecommitdiff
path: root/share/home/emacs/emacs.el
diff options
context:
space:
mode:
authorMiran Bastaja <miran.bastaja04@gmail.com>2023-12-11 13:34:24 +0100
committerMiran Bastaja <miran.bastaja04@gmail.com>2023-12-11 13:34:24 +0100
commit29f838ed5ad2746b156338fad1d4938671fcbe57 (patch)
tree51276c32bf2ab8827e44fbf61902afb5d4bc1faa /share/home/emacs/emacs.el
parent74c1182bbf0b74a96cd2b9e3b2080f9e2acb2461 (diff)
WIP
Diffstat (limited to 'share/home/emacs/emacs.el')
-rw-r--r--share/home/emacs/emacs.el185
1 files changed, 125 insertions, 60 deletions
diff --git a/share/home/emacs/emacs.el b/share/home/emacs/emacs.el
index 8eb5a89..76d7f9f 100644
--- a/share/home/emacs/emacs.el
+++ b/share/home/emacs/emacs.el
@@ -1,5 +1,4 @@
-;; -*- lexical-binding: t -*-
-;;; emacs-config --- My emacs config
+;;; init.el --- Initalization -*- lexical-binding: t; -*-
;;;
;;; Commentary:
;;; Various resources were used to hack together this config:
@@ -8,7 +7,55 @@
;;;
;;; Code:
-;;; Early stuff
+;;;;;;;;;;;;;;;;;;;;;;;
+;;; Startup ;;;
+;;;;;;;;;;;;;;;;;;;;;;;
+
+;;; Startup - Use package ;;;
+
+;; Most of this config is broken down into [[https://github.com/jwiegley/use-package][~use-package~]] stanzas. All
+;; dependencies are managed by [[https://nixos.org/][Nix]]. Any package with a true ~:ensure~
+;; keyword is found by [[https://github.com/nix-community/emacs-overlay#extra-library-functionality][~emacsWithPackagesFromUsePackage~]] to generate
+;; the set of Emacs packages to install with Nix.
+;;
+;; In the brutish non-Nix world, ~:ensure~ triggers Emacs' own package
+;; manager with willy nilly downloads. To prevent this, we tell
+;; ~use-package~ to assume the package is there and merely look for its
+;; autoloads.
+
+(defun ross/use-package-ensure-already-installed
+ (name _ensure state &optional _context)
+ "Value for `use-package-ensure-function` that assumes the package
+ is already installed. This is true in our Nix environment."
+ (let ((autoloads-file-name (format "%s-autoloads" name)))
+ (with-demoted-errors "Error loading autoloads: %s"
+ (load autoloads-file-name t t))))
+
+(setq use-package-ensure-function #'ross/use-package-ensure-already-installed)
+
+;; ~use-package~ also by default appends ~"-hook"~ to all its hooks.
+;; This impairs ripgreppability. Let's be explicit:
+
+(setq use-package-hook-name-suffix nil)
+
+;; use-package doesn't use itself. (Well, I think it could, but this
+;; is the recommended approach...)
+
+(eval-when-compile
+ (require 'use-package))
+
+;; some packages complain if I don't have this
+(use-package bind-key
+ :demand t
+ :bind
+ (:prefix-map rab/files-map
+ :prefix "C-c f")
+ :bind
+ (:prefix-map rab/toggles-map
+ :prefix "C-c t"))
+
+;;; Startup - Benchmarking ;;;
+
(use-package benchmark-init
:ensure t
:demand t
@@ -16,19 +63,15 @@
:config
(benchmark-init/activate))
-;;; GC
+;;; Startup - Garbage collection ;;;
+
(use-package gcmh
:ensure t
:diminish
:init (setq gc-cons-threshold (* 80 1024 1024))
:hook (emacs-startup . gcmh-mode))
-;; Trusted connections?
-(use-package gnutls
- :defer t
- :custom
- (gnutls-verify-error t))
-
+;;; Startup - Better cache location ;;;
(use-package no-littering
:ensure t
:init
@@ -39,19 +82,32 @@
(convert-standard-filename
(expand-file-name "eln-cache/" no-littering-var-directory)))))
-;;; use-package keywords
-(use-package bind-key
- :demand t
- :bind
- (:prefix-map rab/files-map
- :prefix "C-c f")
- :bind
- (:prefix-map rab/toggles-map
- :prefix "C-c t"))
-(use-package diminish :ensure t)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Customization ;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;; Customization - Scrolling ;;;
+;; TODO: Smooth scroll
+
+;;; Customization - Theme ;;;
-;;; Disable menu-bar, tool-bar, and scroll-bar.
+(use-package doom-themes
+ :ensure t
+ :config
+ ;; Global settings (defaults)
+ (setq doom-themes-enable-bold t ; if nil, bold is universally disabled
+ doom-themes-enable-italic t) ; if nil, italics is universally disabled
+ (load-theme 'doom-one t)
+
+ ;; Enable flashing mode-line on errors
+ (doom-themes-visual-bell-config)
+ ;; Corrects (and improves) org-mode's native fontification.
+ (doom-themes-org-config))
+
+;;; Customization - General settings ;;;
+
+;; Disable menu-bar, tool-bar, and scroll-bar.
(if (fboundp 'menu-bar-mode)
(menu-bar-mode -1))
(if (fboundp 'tool-bar-mode)
@@ -59,21 +115,7 @@
(if (fboundp 'scroll-bar-mode)
(scroll-bar-mode -1))
-;;; Setup package.el
-(require 'package)
-(setq package-enable-at-startup nil)
-(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
-(unless package--initialized (package-initialize))
-
-;;; Setup use-package
-(unless (package-installed-p 'use-package)
- (package-refresh-contents)
- (package-install 'use-package))
-(eval-when-compile
- (require 'use-package))
-(setq use-package-always-ensure t)
-
-;;; Useful Defaults
+;; Useful Defaults
(setq-default cursor-type 'bar) ; Line-style cursor similar to other text editors
(setq inhibit-startup-screen t) ; Disable startup screen
(setq initial-scratch-message "") ; Make *scratch* buffer blank
@@ -82,45 +124,28 @@
(fset 'yes-or-no-p 'y-or-n-p) ; y-or-n-p makes answering questions faster
(show-paren-mode 1) ; Show closing parens by default
(global-auto-revert-mode t) ; Auto-update buffer if file has changed on disk
-(setopt create-lockfiles nil)
+(setopt create-lockfiles nil) ; Don't create lockfiles
+(electric-pair-mode 1) ; Autopairs
-(use-package display-line-numbers
- :custom
- (display-line-numbers-widen t)
- :hook
- ((prog-mode conf-mode) . display-line-numbers-mode))
+;;; Customization - Highlight current line ;;;
(use-package hl-line
:hook (on-first-buffer . global-hl-line-mode))
-;;; Load wheatgrass as the default theme if one is not loaded already
-(if (not custom-enabled-themes)
- (load-theme 'wheatgrass t))
-
-;; Autopairs
-(electric-pair-mode 1)
+;;; Customization - Evil ;;;
;; Set up vi keybinds
(use-package evil
:config
(evil-mode 1))
+;;; Customization - Direnv support ;;;
+
(use-package envrc
:ensure t
:hook (on-first-file . envrc-global-mode))
-(use-package nix-mode
- :mode "\\.nix\\'")
-
-;; Set up proof general for working with coq
-(use-package proof-general
- :mode ("\\.v\\'" . coq-mode))
-
-(use-package flycheck
- :init (global-flycheck-mode))
-
-(use-package company
- :init (global-company-mode))
+;;; Customziation - Completion framework ;;;
(use-package helm
:init
@@ -138,9 +163,49 @@
completion-category-defaults nil
completion-category-overrides nil))
+;;; Customization - Project management ;;;
+
(use-package projectile
:bind-keymap ("C-c p" . projectile-command-map)
:config
(projectile-mode +1))
+;;; Customization - Completions ;;;
+
+(use-package company
+ :init (global-company-mode))
+
+;;; Customization - Syntax checking ;;;
+
+(use-package flycheck
+ :init (global-flycheck-mode))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Languages ;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;; Langauges - Emacs lisp ;;;
+
+;; Preserve indentation in org mode source blocks
+(dolist (pair '((org-src-preserve-indentation . t) (org-src-tab-acts-natively . t)))
+ (add-to-list 'safe-local-variable-values pair))
+
+;;; Languages - Nix ;;;
+
+(use-package nix-mode
+ :mode "\\.nix\\'")
+
+;;; Languages - Coq ;;;
+
+(use-package proof-general
+ :mode ("\\.v\\'" . coq-mode))
+
+;; ----------------------------------------------------------------------- ;;
+
+;; (use-package display-line-numbers
+;; :custom
+;; (display-line-numbers-widen t)
+;; :hook
+;; ((prog-mode conf-mode) . display-line-numbers-mode))
+
;;; emacs.el ends here