mirror of
https://github.com/emacscollective/emacs.g.git
synced 2025-06-07 08:14:16 -04:00
334 lines
9.6 KiB
EmacsLisp
334 lines
9.6 KiB
EmacsLisp
;;; init.el --- user-init-file -*- lexical-binding: t -*-
|
|
;;; Early birds
|
|
(progn ; startup
|
|
(defvar before-user-init-time (current-time)
|
|
"Value of `current-time' when Emacs begins loading `user-init-file'.")
|
|
(message "Loading Emacs...done (%.3fs)"
|
|
(float-time (time-subtract before-user-init-time
|
|
before-init-time)))
|
|
(setq user-init-file (or load-file-name buffer-file-name))
|
|
(setq user-emacs-directory (file-name-directory user-init-file))
|
|
(message "Loading %s..." user-init-file)
|
|
(when (< emacs-major-version 27)
|
|
(setq package-enable-at-startup nil)
|
|
;; (package-initialize)
|
|
(load-file (expand-file-name "early-init.el" user-emacs-directory)))
|
|
(setq inhibit-startup-buffer-menu t)
|
|
(setq inhibit-startup-screen t)
|
|
(setq inhibit-startup-echo-area-message "locutus")
|
|
(setq initial-buffer-choice t)
|
|
(setq initial-scratch-message "")
|
|
(when (fboundp 'scroll-bar-mode)
|
|
(scroll-bar-mode 0))
|
|
(when (fboundp 'tool-bar-mode)
|
|
(tool-bar-mode 0))
|
|
(menu-bar-mode 0))
|
|
|
|
(eval-and-compile ; `borg'
|
|
(add-to-list 'load-path (expand-file-name "lib/borg" user-emacs-directory))
|
|
(require 'borg)
|
|
(borg-initialize))
|
|
|
|
(eval-and-compile ; `use-package'
|
|
(require 'use-package)
|
|
(setq use-package-verbose t))
|
|
|
|
(use-package dash)
|
|
(use-package eieio)
|
|
|
|
(use-package auto-compile
|
|
:config
|
|
(setq auto-compile-display-buffer nil)
|
|
(setq auto-compile-mode-line-counter t)
|
|
(setq auto-compile-source-recreate-deletes-dest t)
|
|
(setq auto-compile-toggle-deletes-nonlib-dest t)
|
|
(setq auto-compile-update-autoloads t))
|
|
|
|
(use-package no-littering)
|
|
|
|
(use-package epkg
|
|
:defer t
|
|
:init
|
|
(setq epkg-repository
|
|
(expand-file-name "var/epkgs/" user-emacs-directory))
|
|
(setq epkg-database-connector
|
|
(if (>= emacs-major-version 29) 'sqlite-builtin 'sqlite-module)))
|
|
|
|
(use-package custom
|
|
:no-require t
|
|
:config
|
|
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
|
|
(when (file-exists-p custom-file)
|
|
(load custom-file)))
|
|
|
|
(use-package server
|
|
:commands (server-running-p)
|
|
:config (or (server-running-p) (server-mode)))
|
|
|
|
(progn ; startup
|
|
(message "Loading early birds...done (%.3fs)"
|
|
(float-time (time-subtract (current-time)
|
|
before-user-init-time))))
|
|
|
|
;;; Long tail
|
|
|
|
(use-package autorevert
|
|
:config
|
|
(setq auto-revert-verbose nil))
|
|
|
|
(use-package copyright
|
|
:defer t
|
|
:config
|
|
(add-hook 'before-save-hook 'copyright-update))
|
|
|
|
(use-package dash
|
|
:config (global-dash-fontify-mode))
|
|
|
|
(use-package diff-hl
|
|
:config
|
|
(setq diff-hl-draw-borders nil)
|
|
(global-diff-hl-mode)
|
|
(add-hook 'magit-post-refresh-hook 'diff-hl-magit-post-refresh t))
|
|
|
|
(use-package diff-hl-flydiff
|
|
:config (diff-hl-flydiff-mode))
|
|
|
|
(use-package diff-mode
|
|
:defer t
|
|
:config
|
|
(when (>= emacs-major-version 27)
|
|
(set-face-attribute 'diff-refine-changed nil :extend t)
|
|
(set-face-attribute 'diff-refine-removed nil :extend t)
|
|
(set-face-attribute 'diff-refine-added nil :extend t)))
|
|
|
|
(use-package dim-autoload
|
|
:config (global-dim-autoload-cookies-mode))
|
|
|
|
(use-package dired
|
|
:defer t
|
|
:config (setq dired-listing-switches "-alh"))
|
|
|
|
(use-package ediff
|
|
:defer t
|
|
:config (setq ediff-window-setup-function 'ediff-setup-windows-plain))
|
|
|
|
(use-package eldoc
|
|
:when (version< "25" emacs-version)
|
|
:config (global-eldoc-mode))
|
|
|
|
(use-package forge
|
|
:after magit
|
|
:init
|
|
(setq forge-database-connector
|
|
(if (>= emacs-major-version 29) 'sqlite-builtin 'sqlite-module)))
|
|
|
|
(use-package git-commit
|
|
:defer t
|
|
:config
|
|
(remove-hook 'git-commit-setup-hook 'git-commit-setup-changelog-support)
|
|
(remove-hook 'git-commit-setup-hook 'git-commit-propertize-diff)
|
|
(remove-hook 'git-commit-setup-hook 'with-editor-usage-message)
|
|
(add-hook 'git-commit-setup-hook 'git-commit-turn-on-flyspell t))
|
|
|
|
(use-package git-rebase
|
|
:defer t
|
|
:config
|
|
(setq git-rebase-confirm-cancel nil)
|
|
(setq git-rebase-show-instructions nil))
|
|
|
|
(use-package help
|
|
:defer t
|
|
:config (temp-buffer-resize-mode))
|
|
|
|
(use-package hl-todo
|
|
:config (global-hl-todo-mode))
|
|
|
|
(progn ; `isearch'
|
|
(setq isearch-allow-scroll t))
|
|
|
|
(use-package lisp-mode
|
|
:config
|
|
(add-hook 'emacs-lisp-mode-hook 'outline-minor-mode)
|
|
(add-hook 'emacs-lisp-mode-hook 'reveal-mode)
|
|
(defun indent-spaces-mode ()
|
|
(setq indent-tabs-mode nil))
|
|
(add-hook 'lisp-interaction-mode-hook 'indent-spaces-mode))
|
|
|
|
(use-package magit
|
|
:defer t
|
|
:commands (magit-add-section-hook)
|
|
;;
|
|
;; Key bindings
|
|
:bind (("C-c g" . magit-dispatch)
|
|
("C-c f" . magit-file-dispatch))
|
|
;;
|
|
;; Margin settings
|
|
:init
|
|
(setq magit-log-margin '(nil age magit-log-margin-width nil 15))
|
|
(setq magit-refs-margin-for-tags t)
|
|
;;
|
|
;; Disable safety nets
|
|
:config
|
|
(setq magit-commit-squash-confirm nil)
|
|
(setq magit-save-repository-buffers 'dontask)
|
|
(setf (nth 2 (assq 'magit-stash-pop magit-dwim-selection)) t)
|
|
(setf (nth 2 (assq 'magit-stash-drop magit-dwim-selection)) t)
|
|
(add-to-list 'magit-no-confirm 'safe-with-wip t)
|
|
(add-to-list 'magit-no-confirm 'rename t)
|
|
(add-to-list 'magit-no-confirm 'resurrect t)
|
|
(add-to-list 'magit-no-confirm 'trash t)
|
|
;;
|
|
;; Window managment
|
|
(setq magit-display-buffer-function
|
|
'magit-display-buffer-fullframe-status-topleft-v1)
|
|
(add-hook 'magit-section-movement-hook 'magit-status-maybe-update-revision-buffer)
|
|
(add-hook 'magit-section-movement-hook 'magit-status-maybe-update-blob-buffer)
|
|
(add-hook 'magit-section-movement-hook 'magit-log-maybe-update-blob-buffer)
|
|
;;
|
|
;; Global settings
|
|
(add-hook 'after-save-hook 'magit-after-save-refresh-status t)
|
|
(add-to-list 'magit-repository-directories (cons "~/.emacs.d/" 0))
|
|
(add-to-list 'magit-repository-directories (cons "~/.emacs.d/lib/" 1))
|
|
;;
|
|
;; Branch settings
|
|
(setq magit-branch-adjust-remote-upstream-alist
|
|
'(("main" . ("main" "master" "next" "maint"))
|
|
("master" . ("main" "master" "next" "maint"))))
|
|
;;
|
|
;; Push settings
|
|
(setq magit-push-current-set-remote-if-missing 'default)
|
|
;;
|
|
;; Status buffer settings
|
|
(add-to-list 'magit-section-initial-visibility-alist
|
|
'(magit-status-initial-section . show))
|
|
(setq magit-status-initial-section
|
|
'(((unpulled . "..@{upstream}") (status))
|
|
((unpushed . "@{upstream}..") (status))))
|
|
(magit-add-section-hook 'magit-status-sections-hook
|
|
'magit-insert-modules
|
|
'magit-insert-stashes
|
|
'append)
|
|
(magit-add-section-hook 'magit-status-sections-hook
|
|
'magit-insert-worktrees
|
|
'magit-insert-modules
|
|
'append)
|
|
;;
|
|
;; Diff buffer settings
|
|
(setq magit-diff-refine-hunk 'all)
|
|
;;
|
|
;; Revision buffer settings
|
|
(setq magit-revision-show-gravatars t))
|
|
|
|
(use-package magit-wip
|
|
:after magit
|
|
:config (magit-wip-mode))
|
|
|
|
(use-package man
|
|
:defer t
|
|
:config (setq Man-width 80))
|
|
|
|
(use-package mode-line-debug
|
|
:config (mode-line-debug-mode))
|
|
|
|
(use-package morlock
|
|
:config (global-morlock-mode))
|
|
|
|
(use-package paren
|
|
:config (show-paren-mode))
|
|
|
|
(use-package paren-face
|
|
:config (global-paren-face-mode))
|
|
|
|
(use-package prog-mode
|
|
:config (global-prettify-symbols-mode)
|
|
(defun indicate-buffer-boundaries-left ()
|
|
(setq indicate-buffer-boundaries 'left))
|
|
(add-hook 'prog-mode-hook 'indicate-buffer-boundaries-left))
|
|
|
|
(use-package recentf
|
|
:demand t
|
|
:config (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?x?:"))
|
|
|
|
(use-package savehist
|
|
:config (savehist-mode))
|
|
|
|
(use-package saveplace
|
|
:when (version< "25" emacs-version)
|
|
:config (save-place-mode))
|
|
|
|
(use-package shell
|
|
:defer t
|
|
:config
|
|
(require 'with-editor)
|
|
(add-hook 'shell-mode-hook 'with-editor-export-editor))
|
|
|
|
(use-package simple
|
|
:config (column-number-mode))
|
|
|
|
(use-package sisyphus
|
|
:when (>= emacs-major-version 27)
|
|
:after magit)
|
|
|
|
(use-package smerge-mode
|
|
:defer t
|
|
:config
|
|
(setq smerge-refine-ignore-whitespace nil)
|
|
(when (>= emacs-major-version 27)
|
|
(set-face-attribute 'smerge-refined-removed nil :extend t)
|
|
(set-face-attribute 'smerge-refined-added nil :extend t)))
|
|
|
|
(use-package term
|
|
:defer t
|
|
:config
|
|
(require 'with-editor)
|
|
(add-hook 'term-exec-hook 'with-editor-export-editor))
|
|
|
|
(progn ; `text-mode'
|
|
(add-hook 'text-mode-hook 'indicate-buffer-boundaries-left))
|
|
|
|
(use-package tramp
|
|
:defer t
|
|
:config
|
|
(add-to-list 'tramp-default-proxies-alist '(nil "\\`root\\'" "/ssh:%h:"))
|
|
(add-to-list 'tramp-default-proxies-alist '("localhost" nil nil))
|
|
(add-to-list 'tramp-default-proxies-alist
|
|
(list (regexp-quote (system-name)) nil nil))
|
|
(setq vc-ignore-dir-regexp
|
|
(format "\\(%s\\)\\|\\(%s\\)"
|
|
vc-ignore-dir-regexp
|
|
tramp-file-name-regexp)))
|
|
|
|
(use-package tramp-sh
|
|
:defer t
|
|
:config (cl-pushnew 'tramp-own-remote-path tramp-remote-path))
|
|
|
|
(use-package undo-tree
|
|
:config
|
|
(global-undo-tree-mode)
|
|
(setq undo-tree-mode-lighter ""))
|
|
|
|
;;; Tequila worms
|
|
|
|
(progn ; startup
|
|
(message "Loading %s...done (%.3fs)" user-init-file
|
|
(float-time (time-subtract (current-time)
|
|
before-user-init-time)))
|
|
(add-hook 'after-init-hook
|
|
(lambda ()
|
|
(message
|
|
"Loading %s...done (%.3fs) [after-init]" user-init-file
|
|
(float-time (time-subtract (current-time)
|
|
before-user-init-time))))
|
|
t))
|
|
|
|
(progn ; personalize
|
|
(let ((file (expand-file-name (concat (user-real-login-name) ".el")
|
|
user-emacs-directory)))
|
|
(when (file-exists-p file)
|
|
(load file))))
|
|
|
|
;; Local Variables:
|
|
;; indent-tabs-mode: nil
|
|
;; End:
|
|
;;; init.el ends here
|