Compare commits
4 commits
voltus-mac
...
main
Author | SHA1 | Date | |
---|---|---|---|
|
bf9b17e6e5 | ||
|
d8cab4e766 | ||
|
1c82c0ccf4 | ||
|
0e8ba5b408 |
14 changed files with 294 additions and 646 deletions
|
@ -1,3 +1,4 @@
|
|||
;; -*- 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)
|
||||
|
@ -15,4 +16,11 @@
|
|||
//
|
||||
//-************************************************************************")
|
||||
|
||||
(use-package restclient
|
||||
:ensure t)
|
||||
(use-package restclient-jq
|
||||
:ensure t)
|
||||
(elpaca (1password :host github :repo "kamushadenes/1password.el")
|
||||
(use-package 1password))
|
||||
|
||||
(provide 'nebkor-personal)
|
||||
|
|
7
init.el
7
init.el
|
@ -28,7 +28,7 @@
|
|||
'("nebkor-modules" "custom-lisp"))
|
||||
|
||||
;;; Install Elpaca
|
||||
(defvar elpaca-installer-version 0.9)
|
||||
(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))
|
||||
|
@ -43,7 +43,7 @@
|
|||
(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))
|
||||
(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"
|
||||
|
@ -63,10 +63,11 @@
|
|||
(unless (require 'elpaca-autoloads nil t)
|
||||
(require 'elpaca)
|
||||
(elpaca-generate-autoloads "elpaca" repo)
|
||||
(load "./elpaca-autoloads")))
|
||||
(let ((load-source-file-function nil)) (load "./elpaca-autoloads"))))
|
||||
(add-hook 'after-init-hook #'elpaca-process-queues)
|
||||
(elpaca `(,@elpaca-order))
|
||||
|
||||
|
||||
;; Install use-package support for Elpaca
|
||||
(elpaca elpaca-use-package
|
||||
;; Enable use-package :ensure support for Elpaca.
|
||||
|
|
637
nebkor-emacs.org
637
nebkor-emacs.org
|
@ -157,10 +157,11 @@
|
|||
- [[#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]]
|
||||
- [[#the-nebkor-studyel-section-for-notes-and-file-naming-denote][The =nebkor-study.el= section for notes and file-naming (~denote~)]]
|
||||
- [[#the-nebkor-studyel-section-for-reading-and-annotation-of-pdfs-pdf-tools][The =nebkor-study.el= section for reading and annotation of PDFs (~pdf-tools~)]]
|
||||
- [[#the-nebkor-studyel-section-for-annotation-of-org-and-eww-files-org-remark][The =nebkor-study.el= section for annotation of org and eww files (~org-remark~)]]
|
||||
- [[#the-nebkor-studyel-section-for-flashcards-org-fc][The =nebkor-study.el= section for flashcards (~org-fc~)]]
|
||||
|
@ -215,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
|
||||
|
||||
|
||||
|
@ -498,7 +500,7 @@ When using ~elpaca~, here are some gotchas you should be aware of
|
|||
|
||||
#+begin_src emacs-lisp :tangle "init.el"
|
||||
;;; Install Elpaca
|
||||
(defvar elpaca-installer-version 0.9)
|
||||
(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))
|
||||
|
@ -513,7 +515,7 @@ 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))
|
||||
(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"
|
||||
|
@ -533,10 +535,11 @@ When using ~elpaca~, here are some gotchas you should be aware of
|
|||
(unless (require 'elpaca-autoloads nil t)
|
||||
(require 'elpaca)
|
||||
(elpaca-generate-autoloads "elpaca" repo)
|
||||
(load "./elpaca-autoloads")))
|
||||
(let ((load-source-file-function nil)) (load "./elpaca-autoloads"))))
|
||||
(add-hook 'after-init-hook #'elpaca-process-queues)
|
||||
(elpaca `(,@elpaca-order))
|
||||
|
||||
|
||||
;; Install use-package support for Elpaca
|
||||
(elpaca elpaca-use-package
|
||||
;; Enable use-package :ensure support for Elpaca.
|
||||
|
@ -671,6 +674,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
|
||||
|
@ -1013,6 +1017,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
|
||||
|
@ -1349,8 +1354,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
|
||||
|
@ -1568,73 +1573,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
|
||||
|
@ -2235,6 +2241,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)))
|
||||
|
@ -2308,6 +2315,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
|
||||
|
||||
|
@ -2412,6 +2433,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
|
||||
|
@ -2729,14 +2751,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~)
|
||||
|
@ -3078,14 +3101,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
|
||||
|
||||
|
||||
|
@ -3261,18 +3285,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~)
|
||||
|
@ -3439,6 +3464,22 @@ 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
|
||||
:after difftastic
|
||||
:config (difftastic-bindings-mode))
|
||||
#+end_src
|
||||
|
||||
** Finally, we provide the =nebkor-git.el= module
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:4e7035c5-9350-4c51-be85-85f2539ed295
|
||||
|
@ -3522,28 +3563,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~)
|
||||
|
@ -4498,6 +4540,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
|
||||
|
@ -4731,12 +4774,12 @@ of packaging. I use it whenever I work on my numerous Emacs packages.
|
|||
(use-package flymake
|
||||
:ensure nil
|
||||
:bind
|
||||
( :map flymake-mode-map
|
||||
(:map flymake-mode-map
|
||||
("C-c ! s" . flymake-start)
|
||||
("C-c ! l" . flymake-show-buffer-diagnostics) ; Emacs28
|
||||
("C-c ! L" . flymake-show-project-diagnostics) ; Emacs28
|
||||
("C-c ! n" . flymake-goto-next-error)
|
||||
("C-c ! p" . flymake-goto-prev-error))
|
||||
("M-g n" . flymake-goto-next-error)
|
||||
("M-g p" . flymake-goto-prev-error))
|
||||
:hook
|
||||
(prog-mode . turn-on-flymake)
|
||||
:config
|
||||
|
@ -4900,12 +4943,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
|
||||
|
@ -5232,6 +5277,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:
|
||||
|
@ -5267,301 +5351,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 notes and file-naming (~denote~)
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:e86a66dc-7ef9-4f09-ad7e-946de2034e8d
|
||||
:CREATED: [2024-12-12 Thu 21:33]
|
||||
:ID: 01JGD334B4000DNEXGHP7T9FSS
|
||||
:END:
|
||||
|
||||
Denote is my goto tool for any and all note-taking. This is what
|
||||
powers my brain forest, and where anything and everything I write
|
||||
starts from.
|
||||
|
||||
By default, Denote looks for files in the =~/Documents/notes/=
|
||||
directory. If you want to use a location other than the default
|
||||
localtion for your ~denote~ files, set the environment variable
|
||||
~DENOTE_DIRECTORY~.
|
||||
|
||||
#+begin_quote
|
||||
This is another one of my packages and is extended by my
|
||||
~consult-denote~ package ([[#h:ee82e629-fb05-4c75-9175-48a760a25691][The =nebkor-study.el= integration between Consult and Denote (~consult-denote~)]]).
|
||||
|
||||
Denote is a simple note-taking tool for Emacs. It is based on the idea
|
||||
that notes should follow a predictable and descriptive file-naming
|
||||
scheme. The file name must offer a clear indication of what the note is
|
||||
about, without reference to any other metadata. Denote basically
|
||||
streamlines the creation of such files while providing facilities to
|
||||
link between them.
|
||||
|
||||
Denote's file-naming scheme is not limited to "notes". It can be used
|
||||
for all types of file, including those that are not editable in Emacs,
|
||||
such as videos. Naming files in a consistent way makes their
|
||||
filtering and retrieval considerably easier. Denote provides relevant
|
||||
facilities to rename files, regardless of file type.
|
||||
#+end_quote
|
||||
|
||||
Prot is the developer and maintainer of this package.
|
||||
|
||||
+ Package name (GNU ELPA): ~denote~
|
||||
+ Official manual: <https://protesilaos.com/emacs/denote>
|
||||
+ Change log: <https://protesilaos.com/emacs/denote-changelog>
|
||||
+ Git repositories:
|
||||
- GitHub: <https://github.com/protesilaos/denote>
|
||||
- GitLab: <https://gitlab.com/protesilaos/denote>
|
||||
+ Video demo: <https://protesilaos.com/codelog/2022-06-18-denote-demo/>
|
||||
+ Backronyms: Denote Everything Neatly; Omit The Excesses. Don't Ever
|
||||
Note Only The Epiphenomenal.
|
||||
|
||||
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-study.el" :mkdirp yes
|
||||
;;; Denote (simple note-taking and file-naming)
|
||||
|
||||
;; Read the manual: <https://protesilaos.com/emacs/denote>. This does
|
||||
;; not include all the useful features of Denote. I have a separate
|
||||
;; private setup for those, as I need to test everything is in order.
|
||||
(use-package denote
|
||||
:ensure t
|
||||
:hook
|
||||
;; If you use Markdown or plain text files you want to fontify links
|
||||
;; upon visiting the file (Org renders links as buttons right away).
|
||||
((text-mode . denote-fontify-links-mode-maybe)
|
||||
|
||||
;; Highlight Denote file names in Dired buffers. Below is the
|
||||
;; generic approach, which is great if you rename files Denote-style
|
||||
;; in lots of places as I do.
|
||||
;;
|
||||
;; If you only want the `denote-dired-mode' in select directories,
|
||||
;; then modify the variable `denote-dired-directories' and use the
|
||||
;; following instead:
|
||||
;;
|
||||
;; (dired-mode . denote-dired-mode-in-directories)
|
||||
(dired-mode . denote-dired-mode))
|
||||
:bind
|
||||
;; Denote DOES NOT define any key bindings. This is for the user to
|
||||
;; decide. Here I only have a subset of what Denote offers.
|
||||
( :map global-map
|
||||
("C-c d n" . denote-create-note)
|
||||
("C-c d N" . denote-silo-extras-select-silo-then-command)
|
||||
("C-c d o" . denote-open-or-create)
|
||||
("C-c d O" . denote-silo-extras-open-or-create)
|
||||
("C-c d l" . denote-link-or-create)
|
||||
("C-c d L" . denote-link-after-creating-with-command)
|
||||
;; Note that `denote-rename-file' can work from any context, not
|
||||
;; just Dired buffers. That is why we bind it here to the
|
||||
;; `global-map'.
|
||||
;;
|
||||
;; Also see `denote-rename-file-using-front-matter' further below.
|
||||
("C-c d r" . denote-rename-file)
|
||||
;; If you intend to use Denote with a variety of file types, it is
|
||||
;; easier to bind the link-related commands to the `global-map', as
|
||||
;; shown here. Otherwise follow the same pattern for
|
||||
;; `org-mode-map', `markdown-mode-map', and/or `text-mode-map'.
|
||||
("C-c d j" . denote-journal-extras-new-entry)
|
||||
("C-c d s" . denote-sort-dired)
|
||||
;; Bindings to personal functions (defined below)
|
||||
("C-c d p m" . vedang/denote-publishing-extras-new-microblog-entry)
|
||||
("C-c d p b" . vedang/denote-publishing-extras-new-blog-entry)
|
||||
:map text-mode-map
|
||||
("C-c d B" . denote-backlinks)
|
||||
("C-c d b" . denote-find-backlink)
|
||||
;; Also see `denote-rename-file' further above.
|
||||
("C-c d R" . denote-rename-file-using-front-matter)
|
||||
("C-c d k" . denote-rename-file-keywords)
|
||||
:map org-mode-map
|
||||
("C-c d h" . denote-org-extras-link-to-heading)
|
||||
("C-c d d l" . denote-org-extras-dblock-insert-links)
|
||||
("C-c d d b" . denote-org-extras-dblock-insert-backlinks)
|
||||
("C-c d d m" . denote-org-extras-dblock-insert-missing-links)
|
||||
;; Key bindings specifically for Dired.
|
||||
:map dired-mode-map
|
||||
("C-c C-d C-i" . denote-dired-link-marked-notes)
|
||||
("C-c C-d C-r" . denote-dired-rename-marked-files)
|
||||
("C-c C-d C-k" . denote-dired-rename-marked-files-with-keywords)
|
||||
("C-c C-d C-A" . denote-dired-rename-marked-files-add-keywords)
|
||||
("C-c C-d C-K" . denote-dired-rename-marked-files-remove-keywords)
|
||||
("C-c C-d C-f" . denote-dired-rename-marked-files-using-front-matter))
|
||||
:config
|
||||
(require 'denote-silo-extras)
|
||||
(require 'denote-journal-extras)
|
||||
(require 'denote-org-extras)
|
||||
|
||||
;; Remember to check the doc strings of those variables.
|
||||
(let ((dir (string-trim (shell-command-to-string "echo $DENOTE_DIRECTORY"))))
|
||||
(when (not (string-empty-p dir))
|
||||
(setq denote-directory (expand-file-name dir))
|
||||
(setq denote-journal-extras-directory (expand-file-name "journal" denote-directory))))
|
||||
(setq denote-infer-keywords t)
|
||||
(setq denote-sort-keywords t)
|
||||
(setq denote-excluded-directories-regexp "data") ; external data related to headings is stored in these directories (web archives)
|
||||
(setq denote-date-format nil) ; read its doc string
|
||||
(setq denote-date-prompt-use-org-read-date t)
|
||||
(setq denote-prompts '(title keywords subdirectory signature))
|
||||
|
||||
(setq denote-rename-confirmations nil) ; CAREFUL with this if you are not familiar with Denote!
|
||||
(setq denote-save-buffers t)
|
||||
(setq denote-rename-buffer-format "[D] %s %t%b")
|
||||
;; Automatically rename Denote buffers when opening them so that
|
||||
;; instead of their long file name they have a literal "[D]"
|
||||
;; followed by the file's title. Read the doc string of
|
||||
;; `denote-rename-buffer-format' for how to modify this.
|
||||
(denote-rename-buffer-mode 1)
|
||||
|
||||
(setq denote-buffer-has-backlinks-string " (<--->)")
|
||||
(setq denote-backlinks-show-context t)
|
||||
(setq denote-org-store-link-to-heading t)
|
||||
|
||||
;; Journal settings
|
||||
(setq denote-journal-extras-keyword "")
|
||||
|
||||
;; I use Yasnippet to expand these into a better template.
|
||||
(add-to-list 'denote-templates '(reference-note . "reference"))
|
||||
(add-to-list 'denote-templates '(morning . "morningpage"))
|
||||
(add-to-list 'denote-templates '(emotion . "emotion"))
|
||||
(add-to-list 'denote-templates '(insight . "insight"))
|
||||
(add-to-list 'denote-templates '(weekly_intentions . "weekint"))
|
||||
(add-to-list 'denote-templates '(weekly_report . "weekrpt"))
|
||||
(add-to-list 'denote-templates '(sketch . "sketch"))
|
||||
|
||||
;; Front-matter for Org files
|
||||
(setq denote-org-front-matter
|
||||
":PROPERTIES:
|
||||
:ID: %4$s
|
||||
:CREATED: %2$s
|
||||
:END:
|
||||
,#+title: %1$s
|
||||
,#+filetags: %3$s
|
||||
,#+date: %2$s
|
||||
,#+identifier: %4$s
|
||||
\n")
|
||||
|
||||
(defun vedang/denote-publishing-extras-new-blog-entry (&optional date)
|
||||
"Create a new blog entry.
|
||||
|
||||
With optional DATE as a prefix argument, prompt for a date. If
|
||||
`denote-date-prompt-use-org-read-date' is non-nil, use the Org
|
||||
date selection module.
|
||||
|
||||
When called from Lisp DATE is a string and has the same format as
|
||||
that covered in the documentation of the `denote' function. It
|
||||
is internally processed by `denote-parse-date'."
|
||||
(interactive (list (when current-prefix-arg (denote-date-prompt))))
|
||||
(let ((internal-date (denote-parse-date date))
|
||||
(denote-directory (file-name-as-directory (expand-file-name "published" denote-directory))))
|
||||
(denote
|
||||
(denote-title-prompt)
|
||||
'("draft")
|
||||
nil nil date
|
||||
;; See YASnippet
|
||||
"fullblog")))
|
||||
|
||||
(defun vedang/denote-publishing-extras-new-microblog-entry (&optional date)
|
||||
"Create a new microblog entry.
|
||||
Set the title of the new entry according to the value of the user option
|
||||
`denote-journal-extras-title-format'.
|
||||
|
||||
With optional DATE as a prefix argument, prompt for a date. If
|
||||
`denote-date-prompt-use-org-read-date' is non-nil, use the Org
|
||||
date selection module.
|
||||
|
||||
When called from Lisp DATE is a string and has the same format as
|
||||
that covered in the documentation of the `denote' function. It
|
||||
is internally processed by `denote-parse-date'."
|
||||
(interactive (list (when current-prefix-arg (denote-date-prompt))))
|
||||
(let ((internal-date (denote-parse-date date))
|
||||
(denote-directory (file-name-as-directory (expand-file-name "published" denote-directory))))
|
||||
(denote
|
||||
(denote-journal-extras-daily--title-format internal-date)
|
||||
'("draft" "microblog")
|
||||
nil nil date
|
||||
;; See YASnippet
|
||||
"microblog")))
|
||||
|
||||
(defun vedang/denote-link-ol-get-id ()
|
||||
"Get the CUSTOM_ID of the current entry.
|
||||
|
||||
If the entry already has a CUSTOM_ID, return it as-is, else create a new
|
||||
one.
|
||||
|
||||
If we are creating a new ID, add a CREATED property with the current
|
||||
timestamp as well.
|
||||
|
||||
This function is based on `denote-link-ol-get-id', with minor
|
||||
modifications."
|
||||
(interactive)
|
||||
(let* ((pos (point))
|
||||
(id (org-entry-get pos "CUSTOM_ID"))
|
||||
(created (org-entry-get pos "CREATED")))
|
||||
(if (and (stringp id) (string-match-p "\\S-" id))
|
||||
id
|
||||
(setq id (org-id-new "h"))
|
||||
(org-entry-put pos "CUSTOM_ID" id))
|
||||
(when (not created)
|
||||
(setq created (format-time-string (org-time-stamp-format t t) (current-time)))
|
||||
(org-entry-put pos "CREATED" created))
|
||||
id))
|
||||
|
||||
(defun vedang/denote--split-luhman-sig (signature)
|
||||
"Split numbers and letters in Luhmann-style SIGNATURE string."
|
||||
(replace-regexp-in-string
|
||||
"\\([a-zA-Z]+?\\)\\([0-9]\\)" "\\1=\\2"
|
||||
(replace-regexp-in-string
|
||||
"\\([0-9]+?\\)\\([a-zA-Z]\\)" "\\1=\\2"
|
||||
signature)))
|
||||
|
||||
(defun vedang/denote--pad-sig (signature)
|
||||
"Create a new signature with padded spaces for all components"
|
||||
(combine-and-quote-strings
|
||||
(mapcar
|
||||
(lambda (x)
|
||||
(string-pad x 5 32 t))
|
||||
(split-string (vedang/denote--split-luhman-sig signature) "=" t))
|
||||
"="))
|
||||
|
||||
(defun vedang/denote-sort-for-signatures (sig1 sig2)
|
||||
"Return non-nil if SIG1 is smaller that SIG2.
|
||||
|
||||
Perform the comparison with `string<'."
|
||||
(string< (vedang/denote--pad-sig sig1) (vedang/denote--pad-sig sig2)))
|
||||
|
||||
(setq denote-sort-signature-comparison-function #'vedang/denote-sort-for-signatures))
|
||||
|
||||
#+end_src
|
||||
|
||||
*** The =nebkor-study.el= integration between Consult and Denote (~consult-denote~)
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:ee82e629-fb05-4c75-9175-48a760a25691
|
||||
:ID: 01JGD334BB000DF3EBFKMP10F4
|
||||
:END:
|
||||
|
||||
#+begin_quote
|
||||
This is another package of mine which extends my ~denote~ package
|
||||
([[#h:e86a66dc-7ef9-4f09-ad7e-946de2034e8d][The =nebkor-study.el= settings for ~denote~ (notes and file-naming)]]).
|
||||
|
||||
This is glue code to integrate ~denote~ with Daniel Mendler's
|
||||
~consult~ ([[#h:22e97b4c-d88d-4deb-9ab3-f80631f9ff1d][The =nebkor-completion.el= settings for ~consult~]]). The
|
||||
idea is to enhance minibuffer interactions, such as by providing a
|
||||
preview of the file-to-linked/opened and by adding more sources to the
|
||||
~consult-buffer~ command.
|
||||
#+end_quote
|
||||
|
||||
Prot is the developer of this package.
|
||||
|
||||
+ Package name (GNU ELPA): ~consult-denote~
|
||||
+ Official manual: not available yet.
|
||||
+ Git repositories:
|
||||
+ GitHub: <https://github.com/protesilaos/consult-denote>
|
||||
|
||||
#+begin_src emacs-lisp :tangle "nebkor-modules/nebkor-study.el"
|
||||
(use-package consult-denote
|
||||
:ensure t
|
||||
:bind
|
||||
(("C-c d f" . consult-denote-find)
|
||||
("C-c d g" . consult-denote-grep))
|
||||
:config
|
||||
(consult-denote-mode 1))
|
||||
#+end_src
|
||||
|
||||
|
||||
** The =nebkor-study.el= section for reading and annotation of PDFs (~pdf-tools~)
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: h:B662EABD-DC46-468A-BF59-E67AC48D2DDA
|
||||
|
@ -5572,7 +5361,8 @@ Prot is the developer of this package.
|
|||
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"
|
||||
#+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")
|
||||
|
@ -6557,6 +6347,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)
|
||||
|
@ -6573,6 +6364,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
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
;; -*- lexical-binding: t; -*-
|
||||
;;; General minibuffer settings
|
||||
(use-package minibuffer
|
||||
:ensure nil
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
;; -*- lexical-binding: t; -*-
|
||||
;;; Dired file manager and prot-dired.el extras
|
||||
(use-package dired
|
||||
:ensure nil
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
;; -*- lexical-binding: t; -*-
|
||||
;;; Essential configurations
|
||||
(use-package emacs
|
||||
:ensure nil
|
||||
|
@ -166,8 +167,8 @@ word. Fall back to regular `expreg-expand'."
|
|||
(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
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
;; -*- 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)))
|
||||
|
@ -71,4 +72,18 @@
|
|||
(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)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
;; -*- lexical-binding: t; -*-
|
||||
;;;; `ediff'
|
||||
(use-package ediff
|
||||
:ensure nil
|
||||
|
@ -74,4 +75,11 @@
|
|||
(setq magit-repository-directories
|
||||
'(("~/src/prototypes" . 1))))
|
||||
|
||||
(elpaca (difftastic :host "github.com" :repo "pkryger/difftastic.el")
|
||||
(use-package difftastic))
|
||||
|
||||
(use-package difftastic-bindings
|
||||
:after difftastic
|
||||
:config (difftastic-bindings-mode))
|
||||
|
||||
(provide 'nebkor-git)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
;; -*- lexical-binding: t; -*-
|
||||
;;;; Tabs, indentation, and the TAB key
|
||||
(use-package emacs
|
||||
:ensure nil
|
||||
|
@ -77,12 +78,12 @@
|
|||
(use-package flymake
|
||||
:ensure nil
|
||||
:bind
|
||||
( :map flymake-mode-map
|
||||
(:map flymake-mode-map
|
||||
("C-c ! s" . flymake-start)
|
||||
("C-c ! l" . flymake-show-buffer-diagnostics) ; Emacs28
|
||||
("C-c ! L" . flymake-show-project-diagnostics) ; Emacs28
|
||||
("C-c ! n" . flymake-goto-next-error)
|
||||
("C-c ! p" . flymake-goto-prev-error))
|
||||
("M-g n" . flymake-goto-next-error)
|
||||
("M-g p" . flymake-goto-prev-error))
|
||||
:hook
|
||||
(prog-mode . turn-on-flymake)
|
||||
:config
|
||||
|
@ -192,12 +193,14 @@
|
|||
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)
|
||||
))
|
||||
|
||||
|
@ -363,6 +366,31 @@ NS is the namespace information passed into the function by cider."
|
|||
:after geiser-repl
|
||||
:config (add-hook 'geiser-repl-mode-hook #'macrostep-geiser-setup))
|
||||
|
||||
(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))
|
||||
|
||||
(use-package terraform-mode
|
||||
:ensure t)
|
||||
|
||||
;;; Settings for Interaction mode for Emacs-Lisp
|
||||
(use-package ielm
|
||||
:ensure nil
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
;; -*- lexical-binding: t; -*-
|
||||
;;; Calendar
|
||||
(use-package calendar
|
||||
:ensure nil
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
;; -*- lexical-binding: t; -*-
|
||||
(use-package imenu
|
||||
:ensure nil
|
||||
:config
|
||||
|
|
|
@ -1,222 +1,4 @@
|
|||
;;; Denote (simple note-taking and file-naming)
|
||||
|
||||
;; Read the manual: <https://protesilaos.com/emacs/denote>. This does
|
||||
;; not include all the useful features of Denote. I have a separate
|
||||
;; private setup for those, as I need to test everything is in order.
|
||||
(use-package denote
|
||||
:ensure t
|
||||
:hook
|
||||
;; If you use Markdown or plain text files you want to fontify links
|
||||
;; upon visiting the file (Org renders links as buttons right away).
|
||||
((text-mode . denote-fontify-links-mode-maybe)
|
||||
|
||||
;; Highlight Denote file names in Dired buffers. Below is the
|
||||
;; generic approach, which is great if you rename files Denote-style
|
||||
;; in lots of places as I do.
|
||||
;;
|
||||
;; If you only want the `denote-dired-mode' in select directories,
|
||||
;; then modify the variable `denote-dired-directories' and use the
|
||||
;; following instead:
|
||||
;;
|
||||
;; (dired-mode . denote-dired-mode-in-directories)
|
||||
(dired-mode . denote-dired-mode))
|
||||
:bind
|
||||
;; Denote DOES NOT define any key bindings. This is for the user to
|
||||
;; decide. Here I only have a subset of what Denote offers.
|
||||
( :map global-map
|
||||
("C-c d n" . denote-create-note)
|
||||
("C-c d N" . denote-silo-extras-select-silo-then-command)
|
||||
("C-c d o" . denote-open-or-create)
|
||||
("C-c d O" . denote-silo-extras-open-or-create)
|
||||
("C-c d l" . denote-link-or-create)
|
||||
("C-c d L" . denote-link-after-creating-with-command)
|
||||
;; Note that `denote-rename-file' can work from any context, not
|
||||
;; just Dired buffers. That is why we bind it here to the
|
||||
;; `global-map'.
|
||||
;;
|
||||
;; Also see `denote-rename-file-using-front-matter' further below.
|
||||
("C-c d r" . denote-rename-file)
|
||||
;; If you intend to use Denote with a variety of file types, it is
|
||||
;; easier to bind the link-related commands to the `global-map', as
|
||||
;; shown here. Otherwise follow the same pattern for
|
||||
;; `org-mode-map', `markdown-mode-map', and/or `text-mode-map'.
|
||||
("C-c d j" . denote-journal-extras-new-entry)
|
||||
("C-c d s" . denote-sort-dired)
|
||||
;; Bindings to personal functions (defined below)
|
||||
("C-c d p m" . vedang/denote-publishing-extras-new-microblog-entry)
|
||||
("C-c d p b" . vedang/denote-publishing-extras-new-blog-entry)
|
||||
:map text-mode-map
|
||||
("C-c d B" . denote-backlinks)
|
||||
("C-c d b" . denote-find-backlink)
|
||||
;; Also see `denote-rename-file' further above.
|
||||
("C-c d R" . denote-rename-file-using-front-matter)
|
||||
("C-c d k" . denote-rename-file-keywords)
|
||||
:map org-mode-map
|
||||
("C-c d h" . denote-org-extras-link-to-heading)
|
||||
("C-c d d l" . denote-org-extras-dblock-insert-links)
|
||||
("C-c d d b" . denote-org-extras-dblock-insert-backlinks)
|
||||
("C-c d d m" . denote-org-extras-dblock-insert-missing-links)
|
||||
;; Key bindings specifically for Dired.
|
||||
:map dired-mode-map
|
||||
("C-c C-d C-i" . denote-dired-link-marked-notes)
|
||||
("C-c C-d C-r" . denote-dired-rename-marked-files)
|
||||
("C-c C-d C-k" . denote-dired-rename-marked-files-with-keywords)
|
||||
("C-c C-d C-A" . denote-dired-rename-marked-files-add-keywords)
|
||||
("C-c C-d C-K" . denote-dired-rename-marked-files-remove-keywords)
|
||||
("C-c C-d C-f" . denote-dired-rename-marked-files-using-front-matter))
|
||||
:config
|
||||
(require 'denote-silo-extras)
|
||||
(require 'denote-journal-extras)
|
||||
(require 'denote-org-extras)
|
||||
|
||||
;; Remember to check the doc strings of those variables.
|
||||
(let ((dir (string-trim (shell-command-to-string "echo $DENOTE_DIRECTORY"))))
|
||||
(when (not (string-empty-p dir))
|
||||
(setq denote-directory (expand-file-name dir))
|
||||
(setq denote-journal-extras-directory (expand-file-name "journal" denote-directory))))
|
||||
(setq denote-infer-keywords t)
|
||||
(setq denote-sort-keywords t)
|
||||
(setq denote-excluded-directories-regexp "data") ; external data related to headings is stored in these directories (web archives)
|
||||
(setq denote-date-format nil) ; read its doc string
|
||||
(setq denote-date-prompt-use-org-read-date t)
|
||||
(setq denote-prompts '(title keywords subdirectory signature))
|
||||
|
||||
(setq denote-rename-confirmations nil) ; CAREFUL with this if you are not familiar with Denote!
|
||||
(setq denote-save-buffers t)
|
||||
(setq denote-rename-buffer-format "[D] %s %t%b")
|
||||
;; Automatically rename Denote buffers when opening them so that
|
||||
;; instead of their long file name they have a literal "[D]"
|
||||
;; followed by the file's title. Read the doc string of
|
||||
;; `denote-rename-buffer-format' for how to modify this.
|
||||
(denote-rename-buffer-mode 1)
|
||||
|
||||
(setq denote-buffer-has-backlinks-string " (<--->)")
|
||||
(setq denote-backlinks-show-context t)
|
||||
(setq denote-org-store-link-to-heading t)
|
||||
|
||||
;; Journal settings
|
||||
(setq denote-journal-extras-keyword "")
|
||||
|
||||
;; I use Yasnippet to expand these into a better template.
|
||||
(add-to-list 'denote-templates '(reference-note . "reference"))
|
||||
(add-to-list 'denote-templates '(morning . "morningpage"))
|
||||
(add-to-list 'denote-templates '(emotion . "emotion"))
|
||||
(add-to-list 'denote-templates '(insight . "insight"))
|
||||
(add-to-list 'denote-templates '(weekly_intentions . "weekint"))
|
||||
(add-to-list 'denote-templates '(weekly_report . "weekrpt"))
|
||||
(add-to-list 'denote-templates '(sketch . "sketch"))
|
||||
|
||||
;; Front-matter for Org files
|
||||
(setq denote-org-front-matter
|
||||
":PROPERTIES:
|
||||
:ID: %4$s
|
||||
:CREATED: %2$s
|
||||
:END:
|
||||
#+title: %1$s
|
||||
#+filetags: %3$s
|
||||
#+date: %2$s
|
||||
#+identifier: %4$s
|
||||
\n")
|
||||
|
||||
(defun vedang/denote-publishing-extras-new-blog-entry (&optional date)
|
||||
"Create a new blog entry.
|
||||
|
||||
With optional DATE as a prefix argument, prompt for a date. If
|
||||
`denote-date-prompt-use-org-read-date' is non-nil, use the Org
|
||||
date selection module.
|
||||
|
||||
When called from Lisp DATE is a string and has the same format as
|
||||
that covered in the documentation of the `denote' function. It
|
||||
is internally processed by `denote-parse-date'."
|
||||
(interactive (list (when current-prefix-arg (denote-date-prompt))))
|
||||
(let ((internal-date (denote-parse-date date))
|
||||
(denote-directory (file-name-as-directory (expand-file-name "published" denote-directory))))
|
||||
(denote
|
||||
(denote-title-prompt)
|
||||
'("draft")
|
||||
nil nil date
|
||||
;; See YASnippet
|
||||
"fullblog")))
|
||||
|
||||
(defun vedang/denote-publishing-extras-new-microblog-entry (&optional date)
|
||||
"Create a new microblog entry.
|
||||
Set the title of the new entry according to the value of the user option
|
||||
`denote-journal-extras-title-format'.
|
||||
|
||||
With optional DATE as a prefix argument, prompt for a date. If
|
||||
`denote-date-prompt-use-org-read-date' is non-nil, use the Org
|
||||
date selection module.
|
||||
|
||||
When called from Lisp DATE is a string and has the same format as
|
||||
that covered in the documentation of the `denote' function. It
|
||||
is internally processed by `denote-parse-date'."
|
||||
(interactive (list (when current-prefix-arg (denote-date-prompt))))
|
||||
(let ((internal-date (denote-parse-date date))
|
||||
(denote-directory (file-name-as-directory (expand-file-name "published" denote-directory))))
|
||||
(denote
|
||||
(denote-journal-extras-daily--title-format internal-date)
|
||||
'("draft" "microblog")
|
||||
nil nil date
|
||||
;; See YASnippet
|
||||
"microblog")))
|
||||
|
||||
(defun vedang/denote-link-ol-get-id ()
|
||||
"Get the CUSTOM_ID of the current entry.
|
||||
|
||||
If the entry already has a CUSTOM_ID, return it as-is, else create a new
|
||||
one.
|
||||
|
||||
If we are creating a new ID, add a CREATED property with the current
|
||||
timestamp as well.
|
||||
|
||||
This function is based on `denote-link-ol-get-id', with minor
|
||||
modifications."
|
||||
(interactive)
|
||||
(let* ((pos (point))
|
||||
(id (org-entry-get pos "CUSTOM_ID"))
|
||||
(created (org-entry-get pos "CREATED")))
|
||||
(if (and (stringp id) (string-match-p "\\S-" id))
|
||||
id
|
||||
(setq id (org-id-new "h"))
|
||||
(org-entry-put pos "CUSTOM_ID" id))
|
||||
(when (not created)
|
||||
(setq created (format-time-string (org-time-stamp-format t t) (current-time)))
|
||||
(org-entry-put pos "CREATED" created))
|
||||
id))
|
||||
|
||||
(defun vedang/denote--split-luhman-sig (signature)
|
||||
"Split numbers and letters in Luhmann-style SIGNATURE string."
|
||||
(replace-regexp-in-string
|
||||
"\\([a-zA-Z]+?\\)\\([0-9]\\)" "\\1=\\2"
|
||||
(replace-regexp-in-string
|
||||
"\\([0-9]+?\\)\\([a-zA-Z]\\)" "\\1=\\2"
|
||||
signature)))
|
||||
|
||||
(defun vedang/denote--pad-sig (signature)
|
||||
"Create a new signature with padded spaces for all components"
|
||||
(combine-and-quote-strings
|
||||
(mapcar
|
||||
(lambda (x)
|
||||
(string-pad x 5 32 t))
|
||||
(split-string (vedang/denote--split-luhman-sig signature) "=" t))
|
||||
"="))
|
||||
|
||||
(defun vedang/denote-sort-for-signatures (sig1 sig2)
|
||||
"Return non-nil if SIG1 is smaller that SIG2.
|
||||
|
||||
Perform the comparison with `string<'."
|
||||
(string< (vedang/denote--pad-sig sig1) (vedang/denote--pad-sig sig2)))
|
||||
|
||||
(setq denote-sort-signature-comparison-function #'vedang/denote-sort-for-signatures))
|
||||
|
||||
(use-package consult-denote
|
||||
:ensure t
|
||||
:bind
|
||||
(("C-c d f" . consult-denote-find)
|
||||
("C-c d g" . consult-denote-grep))
|
||||
:config
|
||||
(consult-denote-mode 1))
|
||||
|
||||
;; -*- lexical-binding: t; -*-
|
||||
;;; PDF Tools for reading and annotating PDF files
|
||||
(use-package pdf-tools
|
||||
:ensure (:host github :repo "vedang/pdf-tools" :branch "master")
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
;; -*- lexical-binding: t; -*-
|
||||
;;; Everything related to the look of Emacs
|
||||
|
||||
;;(add-to-list 'default-frame-alist '(background-color . "snow"))
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
;; -*- lexical-binding: t; -*-
|
||||
;;; General window and buffer configurations
|
||||
(use-package uniquify
|
||||
:ensure nil
|
||||
|
|
Loading…
Reference in a new issue