Compare commits
10 Commits
main
..
35a525e3fc
| Author | SHA1 | Date | |
|---|---|---|---|
|
35a525e3fc
|
|||
|
39c311ba41
|
|||
|
8f68f4ba04
|
|||
|
027761fc52
|
|||
|
c05329171d
|
|||
|
0a2b238e1e
|
|||
|
c8b7d1b899
|
|||
|
aa793e0638
|
|||
|
af2f22aa4b
|
|||
|
1ea379f907
|
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Basic Configuration
|
||||
#+setupfile: ../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/basic-config.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/basic-config.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
* Basic Configuration
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Custom Elisp
|
||||
#+setupfile: ../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/custom-elisp.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/custom-elisp.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
* Custom Elisp
|
||||
|
||||
+52
-19
@@ -78,6 +78,8 @@ block.
|
||||
#+end_src
|
||||
|
||||
** Loading All Configuration Modules
|
||||
Here are all my Emacs configuration modules, each dedicated to a
|
||||
specific aspect of my Emacs configuration.
|
||||
|
||||
#+name: emacs-modules
|
||||
| Module Name | Config Page |
|
||||
@@ -98,27 +100,58 @@ block.
|
||||
| =visual-config.el= | [[file:./packages/visual-config.org][Packages — Visual Configuration]] |
|
||||
| =keybindings.el= | [[file:./keybindings.org][Keybindings]] |
|
||||
|
||||
#+name: generate-modules
|
||||
#+begin_src emacs-lisp :tangle no :cache yes :var modules=emacs-modules :exports none
|
||||
(mapconcat (lambda (line)
|
||||
(concat "\"" (string-trim (car line) "=" "=") "\""))
|
||||
modules
|
||||
" ")
|
||||
#+name: modules
|
||||
#+begin_src emacs-lisp :tangle no :cache yes :var modules=emacs-modules :exports none :results list
|
||||
(mapcar (lambda (module) (string-trim (car module) "=" "="))
|
||||
modules)
|
||||
#+end_src
|
||||
|
||||
#+RESULTS[05f9bb535bec2ba84390cc118600323683f51e7c]: generate-modules
|
||||
: "basic-config.el" "custom-elisp.el" "package-manager.el" "keybinding-managers.el" "applications.el" "autocompletion.el" "editing.el" "emacs-builtin.el" "helpful.el" "latex.el" "misc.el" "org.el" "programming.el" "visual-config.el" "keybindings.el"
|
||||
#+RESULTS[1c6034eb268577137e95a6f828c249fc306943b1]: modules
|
||||
- basic-config.el
|
||||
- custom-elisp.el
|
||||
- package-manager.el
|
||||
- keybinding-managers.el
|
||||
- applications.el
|
||||
- autocompletion.el
|
||||
- editing.el
|
||||
- emacs-builtin.el
|
||||
- helpful.el
|
||||
- latex.el
|
||||
- misc.el
|
||||
- org.el
|
||||
- programming.el
|
||||
- visual-config.el
|
||||
- keybindings.el
|
||||
|
||||
#+begin_src emacs-lisp :noweb yes
|
||||
(dolist (module '(<<generate-modules()>>))
|
||||
The first thing Emacs does is verify if any of these modules need to
|
||||
be byte-compiled again, i.e. if the =.el= file is younger than its
|
||||
corresponding =.elc= file. If so, the =.el= file is byte-compiled.
|
||||
|
||||
#+begin_src emacs-lisp :var modules=modules :results none
|
||||
(defun my/mtime (file)
|
||||
"Get the modification time of FILE as a timestamp."
|
||||
(let* ((current-time-list nil)
|
||||
(attr (file-attributes file))
|
||||
(time-attr (file-attribute-modification-time attr)))
|
||||
(/ (car time-attr) (cdr time-attr))))
|
||||
|
||||
;; `modules' is a variable created by org-mode from the table of modules
|
||||
(let* ((config-dir (expand-file-name "user-lisp" user-emacs-directory))
|
||||
(modules (mapcar (lambda (module)
|
||||
(file-name-sans-extension (expand-file-name module config-dir)))
|
||||
modules)))
|
||||
(dolist (module modules)
|
||||
(let* ((el-file (concat module ".el"))
|
||||
(elc-file (concat module ".elc"))
|
||||
(el-last-change (my/mtime el-file))
|
||||
(elc-last-change (if (file-exists-p elc-file) (my/mtime elc-file) 0)))
|
||||
(when (> el-last-change elc-last-change)
|
||||
(byte-compile-file el-file)))))
|
||||
#+end_src
|
||||
|
||||
Now we can load them.
|
||||
#+begin_src emacs-lisp :var modules=modules :results none
|
||||
(dolist (module (mapcar #'file-name-sans-extension modules))
|
||||
(load (expand-file-name module
|
||||
(expand-file-name "lisp" user-emacs-directory))))
|
||||
(expand-file-name "user-lisp" user-emacs-directory))))
|
||||
#+end_src
|
||||
|
||||
* TODOs :noexport:
|
||||
** TODO advise ~evil-insert~ in eshell
|
||||
Advise ~evil-insert~ to go to the end of the buffer while in
|
||||
~eshell-mode~.
|
||||
|
||||
** DONE Get started with org-roam
|
||||
CLOSED: [2023-06-17 Sat 13:38]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Keybinding Managers
|
||||
#+setupfile: ../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/keybinding-managers.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/keybinding-managers.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
* Keybinding Managers
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Keybindings
|
||||
#+setupfile: ../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/keybindings.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/keybindings.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
* Keybindings
|
||||
@@ -263,7 +263,7 @@ I also have some keybindings dedicated to opening specific files.
|
||||
"fI" '((lambda ()
|
||||
(interactive)
|
||||
(quick-find-files nil
|
||||
(expand-file-name "lisp" user-emacs-directory)
|
||||
(expand-file-name "user-lisp" user-emacs-directory)
|
||||
"el"))
|
||||
:which-key "elisp config"
|
||||
:package quick-find-files)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Package Manager
|
||||
#+setupfile: ../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/package-manager.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/package-manager.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
* Package Manager
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Packages — Applications
|
||||
#+setupfile: ../../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/applications.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/applications.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
* Applications
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Packages — Autocompletion
|
||||
#+setupfile: ../../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/autocompletion.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/autocompletion.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
* Autocompletion
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Packages — Editing
|
||||
#+setupfile: ../../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/editing.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/editing.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Packages — Emacs Built-ins
|
||||
#+setupfile: ../../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/emacs-builtin.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/emacs-builtin.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Packages — EXWM (Deprecated)
|
||||
#+setupfile: ../../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/exwm.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/exwm.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
* EXWM (Deprecated)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Packages — Making My Life Easier
|
||||
#+setupfile: ../../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/helpful.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/helpful.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
* Making my life easier
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Packages — LaTeX
|
||||
#+setupfile: ../../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/latex.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/latex.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
* LaTeX
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Packages — Misc
|
||||
#+setupfile: ../../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/misc.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/misc.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
* Misc
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Packages — Org Mode
|
||||
#+setupfile: ../../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/org.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/org.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
* Org-mode
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Packages — Programming
|
||||
#+setupfile: ../../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/programming.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/programming.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
* Programming
|
||||
@@ -37,6 +37,22 @@ variables to install grammars for different languages.
|
||||
:init (global-treesit-fold-mode t))
|
||||
#+end_src
|
||||
|
||||
*** Appwrite
|
||||
[[https://appwrite.io][Appwrite]] is an open-source and self-hostable alternative to Firebase.
|
||||
I am currently working on a server SDK for Appwrite in Emacs, so here
|
||||
it is.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package appwrite
|
||||
:defer t
|
||||
:straight (appwrite :build t
|
||||
:type git
|
||||
:host github
|
||||
:repo "Phundrak/appwrite.el")
|
||||
:config
|
||||
(setopt appwrite-endpoint "https://appwrite.phundrak.com"
|
||||
appwrite-devel t))
|
||||
#+end_src
|
||||
|
||||
*** Flycheck
|
||||
#+begin_src emacs-lisp
|
||||
(use-package flycheck
|
||||
@@ -642,6 +658,74 @@ Nginx syntax.
|
||||
(add-to-list 'company-backends #'company-nginx))))
|
||||
#+end_src
|
||||
|
||||
*** PKGBUILD
|
||||
As I am an ArchLinux user, I sometimes have to interact with PKGBUILD
|
||||
files, both from the AUR when I want to install something from there
|
||||
or some I write myself.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package pkgbuild-mode
|
||||
:straight (:build t)
|
||||
:defer t
|
||||
:custom
|
||||
(pkgbuild-update-sums-on-save nil)
|
||||
(pkgbuild-ask-about-save nil)
|
||||
:general
|
||||
(phundrak/major-leader-key
|
||||
:keymaps 'pkgbuild-mode-map
|
||||
"c" #'pkgbuild-syntax-check
|
||||
"i" #'pkgbuild-initialize
|
||||
"I" #'pkgbuild-increase-release-tag
|
||||
"m" #'pkgbuild-makepkg
|
||||
"u" '(:ignore :wk "update")
|
||||
"us" #'pkgbuild-update-sums-line
|
||||
"uS" #'pkgbuild-update-srcinfo))
|
||||
#+end_src
|
||||
|
||||
*** PlantUML
|
||||
#+begin_src emacs-lisp
|
||||
(use-package plantuml-mode
|
||||
:defer t
|
||||
:straight (:build t)
|
||||
:mode ("\\.\\(pum\\|puml\\)\\'" . plantuml-mode)
|
||||
:after ob
|
||||
:init
|
||||
(add-to-list 'org-babel-load-languages '(plantuml . t))
|
||||
:general
|
||||
(phundrak/major-leader-key
|
||||
:keymaps 'plantuml-mode-map
|
||||
:packages 'plantuml-mode
|
||||
"c" '(:ignore t :which-key "compile")
|
||||
"cc" #'plantuml-preview
|
||||
"co" #'plantuml-set-output-type)
|
||||
:config
|
||||
(setq plantuml-default-exec-mode 'jar
|
||||
plantuml-jar-path "~/.local/bin/plantuml.jar"
|
||||
org-plantuml-jar-path "~/.local/bin/plantuml.jar"))
|
||||
#+end_src
|
||||
|
||||
*** QML
|
||||
I’m currently working on a [[https://quickshell.org/][Quickshell]] configuration to replace my
|
||||
[[https://github.com/Alexays/Waybar][Waybar]] one. Quickshell is configured with [[https://doc.qt.io/qt-6/qmlapplications.html][QML]], which requires its
|
||||
major mode.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package qml-ts-mode
|
||||
:after lsp-mode
|
||||
:straight (qml-ts-mode :build t
|
||||
:type git
|
||||
:host github
|
||||
:repo "xhcoding/qml-ts-mode")
|
||||
:config
|
||||
(add-to-list 'lsp-language-id-configuration '(qml-ts-mode . "qml-ts"))
|
||||
(lsp-register-client
|
||||
(make-lsp-client :new-connection (lsp-stdio-connection '("qmlls" "-E"))
|
||||
:activation-fn (lsp-activate-on "qml-ts")
|
||||
:server-id 'qmlls))
|
||||
(add-hook 'qml-ts-mode-hook (lambda ()
|
||||
(setq-local electric-indent-chars '(?\n ?\( ?\) ?{ ?} ?\[ ?\] ?\; ?,))
|
||||
(lsp-deferred))))
|
||||
#+end_src
|
||||
|
||||
*** Ron files
|
||||
Rusty Object Notation, or RON for short, is to Rust what Json is to
|
||||
Javascript. Sometimes, I have to work with such files, which is why I
|
||||
@@ -713,6 +797,17 @@ When editing some scripts though, I need to use the built-in ~shell-mode~.
|
||||
:mode "\\.yaml\\'")
|
||||
#+end_src
|
||||
|
||||
*** yuck
|
||||
This is one of the two file formats used by [[https://github.com/elkowar/eww/][eww]]’s configuration, a
|
||||
Lisp-like language. Therefore, it will also use [[file:./editing.md#parinfer][parinfer]] to manage its
|
||||
parenthesis.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package yuck-mode
|
||||
:straight (:build t)
|
||||
:defer t
|
||||
:hook ((yuck-mode . parinfer-rust-mode)))
|
||||
#+end_src
|
||||
|
||||
** General Programming Languages
|
||||
*** C/C++
|
||||
I know, I know, C and C++ no longer are closely related languages,
|
||||
@@ -1230,6 +1325,13 @@ several improvements on top of =rust-mode=.
|
||||
(remove-hook 'rustic-mode-hook #'rustic-setup-lsp))
|
||||
#+end_src
|
||||
|
||||
*** Uiua
|
||||
#+begin_src emacs-lisp
|
||||
(use-package uiua-ts-mode
|
||||
:mode "\\.ua\\'"
|
||||
:straight (:build t))
|
||||
#+end_src
|
||||
|
||||
*** Web programming
|
||||
[[https://emmet.io/][Emmet]] is a powerful templating engine that can generate through simple
|
||||
CSS-like expression some HTML to avoid the user writing everything by
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#+title: Emacs — Packages — Visual Configuration
|
||||
#+setupfile: ../../headers
|
||||
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/visual-config.el
|
||||
#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/user-lisp/visual-config.el
|
||||
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
|
||||
|
||||
* Visual Configuration
|
||||
|
||||
Reference in New Issue
Block a user