Initial check in

This commit is contained in:
2026-01-03 18:06:01 +01:00
commit 0d98a59d6c
4 changed files with 341 additions and 0 deletions
+8
View File
@@ -0,0 +1,8 @@
early-init.el
init.el
backup
r2849-faces.el
r2849-theme.el
.DS_Store
*~
+6
View File
@@ -0,0 +1,6 @@
(progn
(delete-directory (expand-file-name "~/.cache/emacs/") t)
(prefer-coding-system 'utf-8)
(require 'ob-tangle)
(org-babel-tangle-file "readme.org"))
Executable
+2
View File
@@ -0,0 +1,2 @@
#! /bin/sh
emacs -nw -q -script boot.el
+325
View File
@@ -0,0 +1,325 @@
#+TITLE: Emacs configuration
#+PROPERTY: header-args:emacs-lisp :tangle init.el
* Preface
GNU Emacs isn't a text editor, it's the ultimate productivity environment for hackers.
This document contains the core parts of my Emacs configuration which drive the workflow
I use every day.
This Emacs configuration file does use =setup.el= for package management.
* Default themes and faces
Default theme. It is needed by =early-init.el= too. In this case we have nice themed
emacs even only early-init does exist.
** Face extensions
*** Common face definitions
#+begin_src emacs-lisp :tangle ~/.emacs.d/lisp/themes/r2849-faces.el :mkdirp true
;;; -*- lexical-binding: t -*-
;;; Do not edit by hand! It is generated from readme.org.
;; -------------------------------------------------------------------------------------------------
;; common face definitions
;; -------------------------------------------------------------------------------------------------
(defface mr:operator-face
'((t (:foreground "red")))
"Face used to highlight operator characters like +, -"
:group 'mr:faces)
(defface mr:relop-face
'((t (:foreground "dodgerblue1")))
"Face used to highlight relational operator characters like <, >="
:group 'mr:faces)
(defface mr:paren-face
'((t (:foreground "indianred")))
"Face used to highlight parentheses characters like (, ]"
:group 'mr:faces)
(defvar mr:operator-face 'mr:operator-face )
(defvar mr:relop-face 'mr:relop-face )
(defvar mr:paren-face 'mr:paren-face )
#+end_src
*** Assembly mode face definitions
#+begin_src emacs-lisp :tangle ~/.emacs.d/lisp/themes/r2849-faces.el
;; -------------------------------------------------------------------------------------------------
;; assembly mode face definitions
;; -------------------------------------------------------------------------------------------------
(defface mr:asm-comment2-face
'((t (:foreground "gray50")))
"Face used to highlight comments beginnig with ;;"
:group 'mr:faces)
(defface mr:asm-comment3-face
'((t (:foreground "gray50")))
"Face used to highlight comments beginnig with ;;;"
:group 'mr:faces)
(defface mr:asm-glabel-face
'((t (:foreground "sienna3")))
"Face used to highlight global labels"
:group 'mr:faces)
(defface mr:asm-label-face
'((t (:foreground "sienna1")))
"Face used to highligh labels"
:group 'mr:faces)
(defface mr:asm-delim-face
'((t (:foreground "firebrick")))
"Face used to highlight delimiters"
:group 'mr:faces)
(defface mr:asm-inst-face
'((t (:foreground "DodgerBlue3")))
"Face used to highlight mnemonics"
:group 'mr:faces)
(defface mr:asm-reg-face
'((t (:foreground "DeepSkyBlue3")))
"Face used to highlight register names"
:group 'mr:faces)
(defface mr:asm-dir-face
'((t (:foreground "brown")))
"Face used to highlight assembler directives"
:group 'mr:faces)
(defface mr:asm-op-face
'((t (:foreground "firebrick")))
"Face used to highlight operators"
:group 'mr:faces)
(defface mr:asm-op2-face
'((t (:foreground "CadetBlue3")))
"Face used to highlight text operators"
:group 'mr:faces)
(defvar mr:asm-comment2-face 'mr:asm-comment2-face )
(defvar mr:asm-comment3-face 'mr:asm-comment3-face )
(defvar mr:asm-glabel-face 'mr:asm-glabel-face )
(defvar mr:asm-label-face 'mr:asm-label-face )
(defvar mr:asm-delim-face 'mr:asm-delim-face )
(defvar mr:asm-inst-face 'mr:asm-inst-face )
(defvar mr:asm-reg-face 'mr:asm-reg-face )
(defvar mr:asm-dir-face 'mr:asm-dir-face )
(defvar mr:asm-op-face 'mr:asm-op-face )
(defvar mr:asm-op2-face 'mr:asm-op2-face )
#+end_src
*** Provide face
#+begin_src emacs-lisp :tangle ~/.emacs.d/lisp/themes/r2849-faces.el
(provide 'r2849-faces)
#+end_src
** Default theme
#+begin_src emacs-lisp :tangle "~/.emacs.d/lisp/themes/r2849-theme.el" :mkdirp yes
;;; -*- lexical-binding: t -*-
;;; Do not edit by hand! It is generated from readme.org.
(deftheme r2849
"Created 2023-04-13.")
(custom-theme-set-variables
'r2849
'(inhibit-startup-message t)
'(scroll-step 1)
'(truncate-lines t)
'(tool-bar-mode nil)
'(scroll-bar-mode nil)
'(column-number-mode t)
'(size-indication-mode t)
'(display-time-24hr-format t)
'(display-time-day-and-date t)
'(tab-always-indent nil)
'(scroll-bar-mode nil)
'(visible-bell nil))
(custom-set-faces
'(default
((t
(
:inherit nil
:family "RobotoMono Nerd Font Mono"
:foundry "monotype"
:stipple nil
:background "black"
:foreground "gray70"
:height 140
:weight normal
))))
;; org mode faces
'(org-document-title ((t (:height 1.50 :bold t :italic nil ))))
'(org-level-1 ((t (:height 1.20 :bold t :italic nil ))))
'(org-level-2 ((t (:height 1.10 :bold nil :italic t ))))
'(org-level-3 ((t (:height 1.05 ))))
'(org-level-4 ((t (:height 1.00 ))))
'(org-level-5 ((t (:height 1.00 ))))
'(org-level-6 ((t (:height 1.00 ))))
'(org-level-7 ((t (:height 1.00 ))))
'(org-level-8 ((t (:height 1.00 ))))
;; modeline
'(mode-line-emphasis ((t (:italic t :bold nil))))
;; doom modeline
'(doom-modeline-persp-name ((t (:inherit mode-line-emphasis :foreground "dark orange" :italic t))))
;; common progmode faces
'(font-lock-comment-face ((t (:foreground "gray50" ))))
'(font-lock-function-name-face ((t (:foreground "deep pink" ))))
'(font-lock-keyword-face ((t (:foreground "dark orange" ))))
'(font-lock-string-face ((t (:foreground "dark sea green" ))))
;; current line and line number faces
'(line-number-current-line ((t (:foreground "white" :italic nil :bold nil ))))
'(line-number ((t (:foreground "gray50" :italic nil :bold nil ))))
'(hl-line ((t (:background "gray10" ))))
)
;; Local Variables:
;; no-byte-compile: t
;; End:
(provide-theme 'r2849)
#+end_src
* Early init
Most customizations for Emacs should be put in the normal init file. However, it is sometimes
necessary to have customizations take effect during Emacs startup earlier than the normal init
file is processed. Such customizations can be put in the early init file. This file is loaded
before the package system and GUI is initialized, so in it you can customize variables that
affect the package initialization process, such as =package-enable-at-startup=, =package-load-list=,
and =package-user-dir=.
#+begin_src emacs-lisp :tangle early-init.el
;;; -*- lexical-binding: t -*-
;;; Do not edit by hand! It is generated from readme.org.
;;; Disable package.el in favor of straight.el
;;; Do not allow loading from the package cache.
(setq package-enable-at-startup nil)
(setq package-quickstart nil)
;;; Make startup faster by reducing the frequency of garbage collection and then use a hook to
;;; measure Emacs startup time. After init, restore the default garbage collection parameters.
(let ((default-gc-threshold gc-cons-threshold)
(default-gc-percentage gc-cons-percentage))
(setq gc-cons-threshold most-positive-fixnum
gc-cons-percentage 0.8)
(add-hook 'after-init-hook
(lambda ()
(setq gc-cons-percentage default-gc-percentage
gc-cons-threshold default-gc-threshold))))
;;; profile emacs startup
(add-hook 'emacs-startup-hook
(lambda ()
(message "*** Emacs loaded in %s seconds with %d garbage collections."
(emacs-init-time "%.2f")
gcs-done)))
;;; Prevent unwanted runtime builds in gccemacs (native-comp); packages are compiled
;;; ahead-of-time when they are installed and site files are compiled when gccemacs
;;; is installed.
(setq comp-deferred-compilation nil)
;;; Prevent the glimpse of un-styled Emacs by disabling these UI elements early.
(push '(menu-bar-lines . 0) default-frame-alist)
(push '(tool-bar-lines . 0) default-frame-alist)
(push '(vertical-scroll-bars) default-frame-alist)
;;; Resizing the Emacs frame can be a terribly expensive part of changing the font. By inhibiting
;;; this, we easily halve startup times with fonts that are larger than the system default.
(setq frame-inhibit-implied-resize t)
;;; disable GUI elements
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(setq inhibit-splash-screen t)
(setq use-file-dialog nil)
;;; Default coding system
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(setq buffer-file-coding-system 'utf-8)
;;; Default frame size
(add-to-list 'default-frame-alist '(height . 45))
(add-to-list 'default-frame-alist '(width . 160))
;;; Include paths
(add-to-list 'load-path (expand-file-name "~/.emacs.d/lisp" ))
(add-to-list 'load-path (expand-file-name "~/.emacs.d/lisp/themes" ))
(add-to-list 'load-path (expand-file-name "~/.emacs.d/lisp/progmodes" ))
;;; Theme paths
(add-to-list 'custom-theme-load-path
(expand-file-name "~/.emacs.d/lisp/themes"))
;;; tab-bar-mode is incompatible with perspective (as of 2023-05) so do not enable it.
;;; (setq tab-bar-format '(tab-bar-format-global))
;;; (tab-bar-mode)
(setq tab-width 4)
;;; Do not appear a bunch of transient files as untracked in the Git/Plastic repo so
;;; move them all to another location.
;;;
;;; Change the user-emacs-directory to keep unwanted things out of ~/.emacs.d
(setq user-emacs-directory (expand-file-name "~/.cache/emacs/")
url-history-file (expand-file-name "url/history" user-emacs-directory))
;;; Set the cache folder for native compiled files.
(when (boundp 'native-comp-eln-load-path)
(startup-redirect-eln-cache (expand-file-name "eln-cache" user-emacs-directory)))
;;; Bootstrap feature =straight= to install no-littering which is needed to keep clean .emacs.d
;;; It should install itself into the redefined user-emacs-directory !
(unless (featurep 'straight)
;; Bootstrap straight.el
(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)))
;;; Use straight.el for use-package expressions
(straight-use-package 'use-package)
;;; Use no-littering to automatically set common paths to the new user-emacs-directory.
;;; Load the feature =no-littering= as early as possible. Make sure it is loaded at least
;;; before any path variables are changed using some other methods.
(straight-use-package 'no-littering)
(require 'no-littering)
;;; Customizations must be in a separate file not in the user initialization script (init.el).
(setq custom-file (locate-user-emacs-file "custom.el"))
(load custom-file 'noerror 'nomessage)
;;; Load theme as soon as possible
(setq custom-safe-themes t)
(load-theme 'r2849)
#+end_src