@ -61,6 +61,7 @@
- [[#the-nebkor-essentialsel-section-about-using-tree-sitter-for-marking-expreg ][The =nebkor-essentials.el= section about using tree-sitter for marking (~expreg~) ]]
- [[#the-nebkor-essentialsel-section-for-osx-changes ][The =nebkor-essentials.el= section for OSX changes ]]
- [[#the-nebkor-essentialsel-section-for-simpleel-changes ][The =nebkor-essentials.el= section for ~simple.el~ changes ]]
- [[#the-nebkor-essentialsel-section-for-better-help-helpful ][The =nebkor-essentials.el= section for better help (~helpful~) ]]
- [[#the-nebkor-essentials-section-for-indent-tools ][The =nebkor-essentials= section for ~indent-tools~ ]]
- [[#the-nebkor-essentials-section-for-undo-tree ][The =nebkor-essentials= section for ~undo-tree~ ]]
- [[#the-nebkor-essentials-section-for-fancy-keyboard-shortcuts-key-chord ][The =nebkor-essentials= section for fancy keyboard shortcuts (~key-chord~) ]]
@ -156,6 +157,8 @@
- [[#the-nebkor-langsel-section-for-ziglang-zig-mode ][The =nebkor-langs.el= section for Ziglang (~zig-mode~) ]]
- [[#the-nebkor-langsel-section-for-clojure-programming ][The =nebkor-langs.el= section for Clojure programming ]]
- [[#the-nebkor-langsel-section-for-scheme ][The =nebkor-langs.el= section for Scheme ]]
- [[#the-nebkor-langsel-section-for-go ][The =nebkor-langs.el= section for Go ]]
- [[#the-nebkor-langsel-section-for-terrform ][The =nebkor-langs.el= section for Terrform ]]
- [[#the-nebkor-langsel-section-for-emacs-lisp ][The =nebkor-langs.el= section for Emacs Lisp ]]
- [[#finally-we-provide-the-nebkor-langsel-module ][Finally, we provide the =nebkor-langs.el= module ]]
- [[#the-nebkor-studyel-module ][The =nebkor-study.el= module ]]
@ -213,7 +216,8 @@ be updated accordingly.
#+end_quote
#+begin_src emacs-lisp :tangle no :results none
(org-babel-tangle)
;; -*- lexical-binding: t; -* -
(org-babel-tangle)
#+end_src
@ -495,8 +499,9 @@ When using ~elpaca~, here are some gotchas you should be aware of
assumptions about order of execution.
#+begin_src emacs-lisp :tangle "init.el"
;;; Install Elpaca
(defvar elpaca-installer-version 0.9)
;;; Install Elpaca
(defvar elpaca-installer-version 0.10)
(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))
@ -511,7 +516,6 @@ When using ~elpaca~, here are some gotchas you should be aware of
(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"
@ -669,6 +673,7 @@ Now we are ready to load our per-module configuration files:
This module defines everything related to the aesthetics of Emacs.
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-theme.el" :mkdirp yes
;; -*- lexical-binding: t; -* -
;;; Everything related to the look of Emacs
#+end_src
@ -1011,6 +1016,7 @@ in the function ~prot/enable-variable-pitch~.
:END:
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-essentials.el" :mkdirp yes
;; -*- lexical-binding: t; -* -
;;; Essential configurations
(use-package emacs
:ensure nil
@ -1347,8 +1353,8 @@ These are modifications to basic configuration I use on my Mac OSX machine.
(process-send-string proc text)
(process-send-eof proc))))
(setq mac-command-modifier 'meta)
(setq mac-option-modifier 'alt)
;; (setq mac-command-modifier 'meta)
;; (setq mac-option-modifier 'alt)
(setq interprogram-cut-function #'paste-to-osx)
(setq interprogram-paste-function #'copy-from-osx)
;; Work around a bug on OS X where system-name is a fully qualified
@ -1392,6 +1398,22 @@ These are modifications to basic configuration I use on my Mac OSX machine.
(setq column-number-mode t))
#+end_src
** The =nebkor-essentials.el= section for better help (~helpful~)
:PROPERTIES:
:CUSTOM_ID: h:ECAF81D8-4111-4C71-AB77-3C3D322B235F
:CREATED: [2024-12-02 Mon 09:50]
:ID: 01JGD333ED000CFWD9GWED35XD
:END:
Helpful is a package that improves the default Emacs *Help* buffer. I don't want to replace what
Emacs provides with default, and I find myself using Helpful only as an Avy action ([[#h:4E8593F7-C065-4DFA-B513-98602EC2BA1A][The
=nebkor-search.el= settings for ~avy~ (jumping)]]). However, it's really useful in that context.
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-essentials.el"
(use-package helpful
:ensure t)
#+end_src
** The =nebkor-essentials= section for ~indent-tools~
:PROPERTIES:
:ID: 01JGD1ASTX0008J83XRB4TZW77
@ -1550,73 +1572,74 @@ soon as I type a space after some characters I am using ~orderless~.
(There are more details in Prot's file, for the interested reader)
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-completion.el" :mkdirp yes
;;; General minibuffer settings
(use-package minibuffer
:ensure nil
:config
;;;; Completion styles
(setq completion-styles '(basic substring initials flex orderless)) ; also see `completion-category-overrides'
(setq completion-pcm-leading-wildcard t) ; Emacs 31: make `partial-completion' behave like `substring'
;; -*- lexical-binding: t; -* -
;;; General minibuffer settings
(use-package minibuffer
:ensure nil
:config
;;;; Completion styles
(setq completion-styles '(basic substring initials flex orderless)) ; also see `completion-category-overrides'
(setq completion-pcm-leading-wildcard t) ; Emacs 31: make `partial-completion' behave like `substring'
;; Reset all the per-category defaults so that (i) we use the
;; standard `completion-styles' and (ii) can specify our own styles
;; in the `completion-category-overrides' without having to
;; explicitly override everything.
(setq completion-category-defaults nil)
;; Reset all the per-category defaults so that (i) we use the
;; standard `completion-styles' and (ii) can specify our own styles
;; in the `completion-category-overrides' without having to
;; explicitly override everything.
(setq completion-category-defaults nil)
;; A non-exhaustve list of known completion categories:
;;
;; - `bookmark'
;; - `buffer'
;; - `charset'
;; - `coding-system'
;; - `color'
;; - `command' (e.g. `M-x')
;; - `customize-group'
;; - `environment-variable'
;; - `expression'
;; - `face'
;; - `file'
;; - `function' (the `describe-function' command bound to `C-h f')
;; - `info-menu'
;; - `imenu'
;; - `input-method'
;; - `kill-ring'
;; - `library'
;; - `minor-mode'
;; - `multi-category'
;; - `package'
;; - `project-file'
;; - `symbol' (the `describe-symbol' command bound to `C-h o')
;; - `theme'
;; - `unicode-name' (the `insert-char' command bound to `C-x 8 RET')
;; - `variable' (the `describe-variable' command bound to `C-h v')
;; - `consult-grep'
;; - `consult-isearch'
;; - `consult-kmacro'
;; - `consult-location'
;; - `embark-keybinding'
;;
(setq completion-category-overrides
;; NOTE 2021-10-25: I am adding `basic' because it works better as a
;; default for some contexts. Read:
;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=50387 >.
;;
;; `partial-completion' is a killer app for files, because it
;; can expand ~/.l/s/fo to ~ /.local/share/fonts.
;;
;; If `basic' cannot match my current input, Emacs tries the
;; next completion style in the given order. In other words,
;; `orderless' kicks in as soon as I input a space or one of its
;; style dispatcher characters.
'((file (styles . (basic partial-completion orderless)))
(bookmark (styles . (basic substring)))
(library (styles . (basic substring)))
(embark-keybinding (styles . (basic substring)))
(imenu (styles . (basic substring orderless)))
(consult-location (styles . (basic substring orderless)))
(kill-ring (styles . (emacs22 orderless)))
(eglot (styles . (emacs22 substring orderless))))))
;; A non-exhaustve list of known completion categories:
;;
;; - `bookmark'
;; - `buffer'
;; - `charset'
;; - `coding-system'
;; - `color'
;; - `command' (e.g. `M-x')
;; - `customize-group'
;; - `environment-variable'
;; - `expression'
;; - `face'
;; - `file'
;; - `function' (the `describe-function' command bound to `C-h f')
;; - `info-menu'
;; - `imenu'
;; - `input-method'
;; - `kill-ring'
;; - `library'
;; - `minor-mode'
;; - `multi-category'
;; - `package'
;; - `project-file'
;; - `symbol' (the `describe-symbol' command bound to `C-h o')
;; - `theme'
;; - `unicode-name' (the `insert-char' command bound to `C-x 8 RET')
;; - `variable' (the `describe-variable' command bound to `C-h v')
;; - `consult-grep'
;; - `consult-isearch'
;; - `consult-kmacro'
;; - `consult-location'
;; - `embark-keybinding'
;;
(setq completion-category-overrides
;; NOTE 2021-10-25: I am adding `basic' because it works better as a
;; default for some contexts. Read:
;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=50387 >.
;;
;; `partial-completion' is a killer app for files, because it
;; can expand ~/.l/s/fo to ~ /.local/share/fonts.
;;
;; If `basic' cannot match my current input, Emacs tries the
;; next completion style in the given order. In other words,
;; `orderless' kicks in as soon as I input a space or one of its
;; style dispatcher characters.
'((file (styles . (basic partial-completion orderless)))
(bookmark (styles . (basic substring)))
(library (styles . (basic substring)))
(embark-keybinding (styles . (basic substring)))
(imenu (styles . (basic substring orderless)))
(consult-location (styles . (basic substring orderless)))
(kill-ring (styles . (emacs22 orderless)))
(eglot (styles . (emacs22 substring orderless))))))
#+end_src
** The =nebkor-completion.el= for the ~orderless~ completion style
@ -2217,6 +2240,7 @@ I use ~vertico-repeat~ to mimic the functionality that ~helm-resume~ would provi
My old custom functions file.
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-functions.el" :mkdirp yes
;; -*- lexical-binding: t; -* -
(defun diff-and-set-modified-p ()
"Diff the current buffer with its associated file and set buffer modified status."
(let* ((tmpfile (diff-file-local-copy (current-buffer)))
@ -2290,6 +2314,20 @@ My old custom functions file.
(set-window-buffer-start-and-point w1 b2 s2 p2)
(set-window-buffer-start-and-point w2 b1 s1 p1)))))))
(defun my-update-env (fn)
(let ((str
(with-temp-buffer
(insert-file-contents fn)
(buffer-string))) lst)
(setq lst (split-string str "\000"))
(while lst
(setq cur (car lst))
(when (string-match "^\\(.*?\\)=\\(.* \\)" cur)
(setq var (match-string 1 cur))
(setq value (match-string 2 cur))
(setenv var value))
(setq lst (cdr lst)))))
(provide 'nebkor-functions)
#+end_src
@ -2394,6 +2432,7 @@ Now on to the configurations.
tweak to ensure that ~consult-imenu~ returns good ~imenu~ results to us.
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-search.el" :mkdirp yes
;; -*- lexical-binding: t; -* -
(use-package imenu
:ensure nil
:config
@ -2711,14 +2750,15 @@ them manually. I prefer this extra layer of safety. Plus, we have the
#+end_quote
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-dired.el" :mkdirp yes
;;; Dired file manager and prot-dired.el extras
(use-package dired
:ensure nil
:commands (dired)
:config
(setq dired-recursive-copies 'always)
(setq dired-recursive-deletes 'always)
(setq delete-by-moving-to-trash t))
;; -*- lexical-binding: t; -* -
;;; Dired file manager and prot-dired.el extras
(use-package dired
:ensure nil
:commands (dired)
:config
(setq dired-recursive-copies 'always)
(setq dired-recursive-deletes 'always)
(setq delete-by-moving-to-trash t))
#+end_src
** The =nebkor-dired.el= switches for how files are listed (~ls~)
@ -3060,14 +3100,15 @@ name.
#+end_quote
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-window.el"
;;; General window and buffer configurations
(use-package uniquify
:ensure nil
:config
;;;; `uniquify' (unique names for buffers)
(setq uniquify-buffer-name-style 'forward)
(setq uniquify-strip-common-suffix t)
(setq uniquify-after-kill-buffer-p t))
;; -*- lexical-binding: t; -* -
;;; General window and buffer configurations
(use-package uniquify
:ensure nil
:config
;;;; `uniquify' (unique names for buffers)
(setq uniquify-buffer-name-style 'forward)
(setq uniquify-strip-common-suffix t)
(setq uniquify-after-kill-buffer-p t))
#+end_src
@ -3243,18 +3284,19 @@ integrates with ~magit~ ([[#h:b08af527-9ebf-4425-ac3a-24b4f371a4fd][The =nebkor-
#+end_quote
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-git.el" :mkdirp yes
;;;; `ediff'
(use-package ediff
:ensure nil
:commands (ediff-buffers ediff-files ediff-buffers3 ediff-files3)
:init
(setq ediff-split-window-function 'split-window-horizontally)
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
:config
(setq ediff-keep-variants nil)
(setq ediff-make-buffers-readonly-at-startup nil)
(setq ediff-merge-revisions-with-ancestor t)
(setq ediff-show-clashes-only t))
;; -*- lexical-binding: t; -* -
;;;; `ediff'
(use-package ediff
:ensure nil
:commands (ediff-buffers ediff-files ediff-buffers3 ediff-files3)
:init
(setq ediff-split-window-function 'split-window-horizontally)
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
:config
(setq ediff-keep-variants nil)
(setq ediff-make-buffers-readonly-at-startup nil)
(setq ediff-merge-revisions-with-ancestor t)
(setq ediff-show-clashes-only t))
#+end_src
** The =nebkor-git.el= section about project management (~project~)
@ -3421,6 +3463,21 @@ branches, etc.
'(("~/src/prototypes" . 1))))
#+end_src
#+begin_quote
The difftastic Emacs package is designed to integrate difftastic - a structural diff tool - into
your Emacs workflow, enhancing your code review and comparison experience. This package
automatically displays difftastic’ s output within Emacs using faces from your user theme, ensuring
consistency with your overall coding environment.
#+end_quote
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-git.el"
(elpaca (difftastic :host "github.com" :repo "pkryger/difftastic.el")
(use-package difftastic))
(use-package difftastic-bindings
:config (difftastic-bindings-mode))
#+end_src
** Finally, we provide the =nebkor-git.el= module
:PROPERTIES:
:CUSTOM_ID: h:4e7035c5-9350-4c51-be85-85f2539ed295
@ -3504,28 +3561,29 @@ Org is far more capable, so I switched to it completely.
#+end_quote
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-org.el" :mkdirp yes
;;; Calendar
(use-package calendar
:ensure nil
:commands (calendar)
:config
(setq calendar-mark-diary-entries-flag nil)
(setq calendar-mark-holidays-flag t)
(setq calendar-mode-line-format nil)
(setq calendar-time-display-form
'( 24-hours ":" minutes
(when time-zone (format "(%s)" time-zone))))
(setq calendar-week-start-day 1) ; Monday
(setq calendar-date-style 'iso)
(setq calendar-time-zone-style 'numeric) ; Emacs 28.1
;; -*- lexical-binding: t; -* -
;;; Calendar
(use-package calendar
:ensure nil
:commands (calendar)
:config
(setq calendar-mark-diary-entries-flag nil)
(setq calendar-mark-holidays-flag t)
(setq calendar-mode-line-format nil)
(setq calendar-time-display-form
'( 24-hours ":" minutes
(when time-zone (format "(%s)" time-zone))))
(setq calendar-week-start-day 1) ; Monday
(setq calendar-date-style 'iso)
(setq calendar-time-zone-style 'numeric) ; Emacs 28.1
(require 'solar)
(setq calendar-latitude 35.17 ; Not my actual coordinates
calendar-longitude 33.36)
(require 'solar)
(setq calendar-latitude 35.17 ; Not my actual coordinates
calendar-longitude 33.36)
(require 'cal-dst)
(setq calendar-standard-time-zone-name "+0700")
(setq calendar-daylight-time-zone-name "+0800"))
(require 'cal-dst)
(setq calendar-standard-time-zone-name "+0700")
(setq calendar-daylight-time-zone-name "+0800"))
#+end_src
** The =nebkor-org.el= section about appointment reminders (~appt~)
@ -4480,6 +4538,7 @@ title of the task, and the like. The documentation string of
:END:
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-langs.el" :mkdirp yes
;; -*- lexical-binding: t; -* -
;;;; Tabs, indentation, and the TAB key
(use-package emacs
:ensure nil
@ -4882,12 +4941,14 @@ colors (you can use tree-sitter to do *syntactic* highlighting, but that's diffe
lsp-eldoc-render-all t
lsp-idle-delay 0.2
lsp-enable-snippet t
lsp-file-watch-threshold 3000
read-process-output-max (* 1024 1024))
:hook
(
(lsp-mode . lsp-enable-which-key-integration)
(lsp-mode . subword-mode)
(lsp-completion-mode . my/lsp-mode-setup-completion)
(go-ts-mode . lsp-mode)
;;(before-save . lsp-format-buffer)
))
#+end_src
@ -5214,6 +5275,45 @@ for this to continue.
:config (add-hook 'geiser-repl-mode-hook #'macrostep-geiser-setup))
#+end_src
** The =nebkor-langs.el= section for Go
:PROPERTIES:
:ID: 3EE09964-FF3B-43BC-A09D-7CA94A245D25
:END:
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-langs.el"
(use-package go-ts-mode
:ensure nil
:hook
(go-ts-mode . go-format-on-save-mode)
(go-ts-mode . (lambda () (set (make-local-variable 'tab-width) 2)))
:custom
(go-mode-indent-offset 2)
:init
(add-to-list 'treesit-language-source-alist '(go "https://github.com/tree-sitter/tree-sitter-go"))
(add-to-list 'treesit-language-source-alist '(gomod "https://github.com/camdencheek/tree-sitter-go-mod"))
(add-to-list 'auto-mode-alist '("\\.go\\'" . go-ts-mode))
(add-to-list 'auto-mode-alist '("/go\\.mod\\'" . go-mod-ts-mode))
:config
(reformatter-define go-format
:program "goimports"
:args '("/dev/stdin")))
(use-package flycheck-golangci-lint
:ensure t
:hook
(go-ts-mode . flycheck-golangci-lint-setup))
#+end_src
** The =nebkor-langs.el= section for Terrform
:PROPERTIES:
:ID: 43DB91FB-9B4E-4D6A-AF89-CDCD22469C3A
:END:
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-langs.el"
(use-package terraform-mode
:ensure t)
#+end_src
** The =nebkor-langs.el= section for Emacs Lisp
:PROPERTIES:
@ -5249,7 +5349,6 @@ for this to continue.
This file contains configuration for everything I use to make Emacs my
go-to place for studying anything.
** The =nebkor-study.el= section for reading and annotation of PDFs (~pdf-tools~)
:PROPERTIES:
:CUSTOM_ID: h:B662EABD-DC46-468A-BF59-E67AC48D2DDA
@ -5261,6 +5360,7 @@ PDF Tools is an absolute powerhouse for reading and annotating PDF
files. It is my goto tool for reading any academic papers.
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-study.el" :mkdirp yes
;; -*- lexical-binding: t; -* -
;;; PDF Tools for reading and annotating PDF files
(use-package pdf-tools
:ensure (:host github :repo "vedang/pdf-tools" :branch "master")
@ -6245,6 +6345,7 @@ figure it out.
:END:
#+begin_src emacs-lisp :tangle "custom-lisp/nebkor-personal.el" :mkdirp yes
;; -*- lexical-binding: t; -* -
(global-set-key [C-tab] #'other-window)
(global-set-key [C-S-tab] #'sother-window)
(global-set-key [C-iso-lefttab] #'sother-window)
@ -6261,6 +6362,14 @@ figure it out.
"//-************************************************************************
//
//-************************************************************************")
(use-package restclient
:ensure t)
(use-package restclient-jq
:ensure t)
(elpaca (1password :host github :repo "kamushadenes/1password.el")
(use-package 1password))
#+end_src
*** Finally, we provide the =nebkor-personal.el= module