From 8c507ef505b1f640b05ca09a1451854ae96064ed Mon Sep 17 00:00:00 2001 From: JensJeBecker Date: Tue, 3 Mar 2026 18:10:23 +0100 Subject: [PATCH] init party ... with magit :O --- .gitignore | 8 ++ early-init.el | 24 ++++++ init.el | 222 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 254 insertions(+) create mode 100644 .gitignore create mode 100644 early-init.el create mode 100644 init.el diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1933e6b --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +auto-save-list/ +backups/ +elpa/ +elpaca/ +eshell/ +history + +*.el~ \ No newline at end of file diff --git a/early-init.el b/early-init.el new file mode 100644 index 0000000..11030af --- /dev/null +++ b/early-init.el @@ -0,0 +1,24 @@ +;; Example Elpaca early-init.el -*- lexical-binding: t; -*- + +(setq package-enable-at-startup nil) + +(setq-default use-short-answers t) + +(menu-bar-mode -1) ;; disables menubar +(tool-bar-mode -1) ;; disables toolbar +(scroll-bar-mode -1) ;; disables scrollbar +(pixel-scroll-precision-mode 1) ;; enable smooth scrolling + +(setq inhibit-splash-screen t ;; no thanks + use-file-dialog nil ;; don't use system file dialog + tab-bar-new-button-show nil ;; don't show new tab button + tab-bar-close-button-show nil ;; don't show tab close button + tab-line-close-button-show nil) ;; don't show tab close button(setq inhibit-startup-screen t) + +(setq confirm-kill-emacs #'yes-or-no-p) + +;; Local Variables: +;; no-byte-compile: t +;; no-native-compile: t +;; no-update-autoloads: t +;; End: diff --git a/init.el b/init.el new file mode 100644 index 0000000..b0ebf48 --- /dev/null +++ b/init.el @@ -0,0 +1,222 @@ +(defvar elpaca-installer-version 0.11) +(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory)) +(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory)) +(defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory)) + + +(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git" + :ref nil :depth 1 :inherit ignore + :files (:defaults "elpaca-test.el" (:exclude "extensions")) + :build (:not elpaca--activate-package))) + +(let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory)) + (build (expand-file-name "elpaca/" elpaca-builds-directory)) + (order (cdr elpaca-order)) + (default-directory repo)) + (add-to-list 'load-path (if (file-exists-p build) build repo)) + (unless (file-exists-p repo) + (make-directory repo t) + (when (<= emacs-major-version 28) (require 'subr-x)) + (condition-case-unless-debug err + (if-let* ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*")) + ((zerop (apply #'call-process `("git" nil ,buffer t "clone" + ,@(when-let* ((depth (plist-get order :depth))) + (list (format "--depth=%d" depth) "--no-single-branch")) + ,(plist-get order :repo) ,repo)))) + ((zerop (call-process "git" nil buffer t "checkout" + (or (plist-get order :ref) "--")))) + (emacs (concat invocation-directory invocation-name)) + ((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch" + "--eval" "(byte-recompile-directory \".\" 0 'force)"))) + ((require 'elpaca)) + ((elpaca-generate-autoloads "elpaca" repo))) + (progn (message "%s" (buffer-string)) (kill-buffer buffer)) + (error "%s" (with-current-buffer buffer (buffer-string)))) + ((error) (warn "%s" err) (delete-directory repo 'recursive)))) + (unless (require 'elpaca-autoloads nil t) + (require 'elpaca) + (elpaca-generate-autoloads "elpaca" repo) + (let ((load-source-file-function nil)) (load "./elpaca-autoloads")))) + +(add-hook 'after-init-hook #'elpaca-process-queues) + +(elpaca `(,@elpaca-order)) + +(elpaca elpaca-use-package + (elpaca-use-package-mode)) +(setq use-package-always-ensure t) + +;; FONTS +(set-frame-font "JetBrains Mono 15" nil t) + +;; Some defaults +(use-package emacs + :demand t + :ensure nil + :init + + (setq enable-recursive-minibuffers t) + + (setq backup-by-copying t) + + (setq sentence-end-double-space nil) + + (setq frame-inhibit-implied-resize t) ;; useless for a tiling window manager + + (setq show-trailing-whitespace t) ;; self-explanatory + + (setq user-full-name "Jens Becker") ;; my details + (setq user-mail-address "mail@jens.pub") + + (defalias 'yes-or-no-p 'y-or-n-p) ;; life is too short + + (setq indent-tabs-mode nil) ;; no tabs + + ;; keep backup and save files in a dedicated directory + (setq backup-directory-alist + `((".*" . ,(concat user-emacs-directory "backups"))) + auto-save-file-name-transforms + `((".*" ,(concat user-emacs-directory "backups") t))) + + (setq create-lockfiles nil) ;; no need to create lockfiles + + (set-charset-priority 'unicode) ;; utf8 everywhere + (setq locale-coding-system 'utf-8 + coding-system-for-read 'utf-8 + coding-system-for-write 'utf-8) + (set-terminal-coding-system 'utf-8) + (set-keyboard-coding-system 'utf-8) + (set-selection-coding-system 'utf-8) + (prefer-coding-system 'utf-8) + (setq default-process-coding-system '(utf-8-unix . utf-8-unix)) + + (global-set-key (kbd "") 'keyboard-escape-quit) ;; escape quits everything + + + ;; Don't persist a custom file + (setq custom-file (make-temp-file "")) ; use a temp file as a placeholder + (setq custom-safe-themes t) ; mark all themes as safe, since we can't persist now + (setq enable-local-variables :all) ; fix =defvar= warnings + + (setq delete-by-moving-to-trash t) ;; use trash-cli rather than rm when deleting files. + + ;; less noise when compiling elisp + (setq byte-compile-warnings '(not free-vars unresolved noruntime lexical make-local)) + (setq native-comp-async-report-warnings-errors nil) + (setq load-prefer-newer t) + + (show-paren-mode t) + + ;; Hide commands in M-x which don't work in the current mode + (setq read-extended-command-predicate #'command-completion-default-include-p)) + + +;; EVIL STUFF + + +(use-package evil + :demand t + :init + (setq evil-respect-visual-line-mode t) + (setq evil-search-module 'evil-search-module) + + (setq evil-want-C-u-scroll t) ;; allow scroll up with 'C-u' + (setq evil-want-C-d-scroll t) ;; allow scroll down with 'C-d' + + (setq evil-want-integration t) ;; necessary for evil collection + (setq evil-want-keybinding nil) + + (setq evil-split-window-below t) ;; split windows created below + (setq evil-vsplit-window-right t) ;; vertically split windows created to the right + + (setq evil-undo-system 'undo-redo) ;; undo via 'u', and redo the undone change via 'C-r'; only available in emacs 28+. + + :config + (evil-mode t) ;; globally enable evil mode + ;; set the initial state for some kinds of buffers. + (evil-set-initial-state 'messages-buffer-mode 'normal) + (evil-set-initial-state 'dashboard-mode 'normal) + ;; buffers in which I want to immediately start typing should be in 'insert' state by default. + (evil-set-initial-state 'eshell-mode 'insert) + (evil-set-initial-state 'magit-diff-mode 'insert)) + +(use-package evil-collection ;; evilifies a bunch of things + :after evil + :init + (setq evil-collection-outline-bind-tab-p t) ;; '' cycles visibility in 'outline-minor-mode' + ;; If I want to incrementally enable evil-collection mode-by-mode, I can do something like the following: + (setq evil-collection-mode-list nil) ;; I don't like surprises + (add-to-list 'evil-collection-mode-list 'magit) ;; evilify magit + ;; (add-to-list 'evil-collection-mode-list '(pdf pdf-view)) ;; evilify pdf-view + :config + (evil-collection-init)) + +(use-package evil-commentary + :after evil + :config + (evil-commentary-mode)) ;; globally enable evil-commentary + +(use-package evil-surround + :after evil + :config + (global-evil-surround-mode 1)) ;; globally enable evil-surround + +(use-package evil-goggles + :config + (evil-goggles-mode) + + ;; optionally use diff-mode's faces; as a result, deleted text + ;; will be highlighted with `diff-removed` face which is typically + ;; some red color (as defined by the color theme) + ;; other faces such as `diff-added` will be used for other actions + (evil-goggles-use-diff-faces)) + +;; WHICH KEY +(use-package which-key + :after evil + :demand t + :init (which-key-mode) + :config + (which-key-setup-minibuffer)) + +(use-package mood-line + :demand t + :config + (mood-line-mode) + (setq mood-line-format mood-line-format-default-extended)) + +(use-package all-the-icons + :demand t) + +;; prettify dired with icons +(use-package all-the-icons-dired + :demand t + :hook + (dired-mode . all-the-icons-dired-mode)) + +(use-package all-the-icons-completion + :after (marginalia all-the-icons) + :demand t + :hook (marginalia-mode . all-the-icons-completion-marginalia-setup) + :init (all-the-icons-completion-mode)) + +(use-package orderless + :ensure t + :custom + (completion-styles '(orderless basic)) + (completion-category-overrides '((file (styles partial-completion)))) + (completion-pcm-leading-wildcard t)) ;; Emacs 31: partial-completion behaves like substring + +(use-package treesit-fold + :demand t) + +(use-package vscode-dark-plus-theme + :config + (load-theme 'vscode-dark-plus t)) + +(use-package transient) +(use-package magit + :after (transient)) + + +(fido-vertical-mode t)