Compare commits

..

8 Commits

5 changed files with 88 additions and 79 deletions

View File

@@ -173,53 +173,6 @@ I also have two main shell-related functions, prefixed with ~as~.
| yr | treemacs-copy-relative-path-at-point | | treemacs |
| yf | treemacs-copy-file | | treemacs |
*** Treemacs
#+name: keybindings-treemacs
| Key | Function | Description | Package |
|-----+----------------------------------------+-------------+----------|
| | | treemacs | |
| c | | create | |
| cd | treemacs-create-dir | | treemacs |
| cf | treemacs-create-file | | treemacs |
| ci | treemacs-create-icon | | treemacs |
| ct | treemacs-create-theme | | treemacs |
| cw | treemacs-create-workspace | | treemacs |
| d | treemacs-delete-file | | treemacs |
| f | | files | |
| ff | treemacs-find-file | | treemacs |
| ft | treemacs-find-tag | | treemacs |
| l | | lsp | |
| ls | treemacs-expand-lsp-symbol | | treemacs |
| ld | treemacs-expand-lsp-treemacs-deps | | treemacs |
| lD | treemacs-collapse-lsp-treemacs-deps | | treemacs |
| lS | treemacs-collapse-lsp-symbol | | treemacs |
| p | | projects | |
| pa | treemacs-add-project-to-workspace | | treemacs |
| pf | treemacs-project-follow-mode | | treemacs |
| pn | treemacs-project-of-node | | treemacs |
| pp | treemacs-project-at-point | | treemacs |
| pr | treemacs-remove-project-from-workspace | | treemacs |
| pt | treemacs-move-project-down | | treemacs |
| ps | treemacs-move-project-up | | treemacs |
| r | | rename | |
| rf | treemacs-rename-file | | treemacs |
| rp | treemacs-rename-project | | treemacs |
| rr | treemacs-rename | | treemacs |
| rw | treemacs-rename-workspace | | treemacs |
| t | treemacs | | treemacs |
| T | | toggles | |
| Td | treemacs-toggle-show-dotfiles | | treemacs |
| Tn | treemacs-toggle-node | | treemacs |
| v | | visit node | |
| va | treemacs-visit-node-ace | | treemacs |
| vc | treemacs-visit-node-close-treemacs | | treemacs |
| vn | treemacs-visit-node-default | | treemacs |
| y | | yank | |
| ya | treemacs-copy-absolute-path-at-point | | treemacs |
| yp | treemacs-copy-project-path-at-point | | treemacs |
| yr | treemacs-copy-relative-path-at-point | | treemacs |
| yf | treemacs-copy-file | | treemacs |
** Buffers
My buffer-related keybindings are all prefixed by ~b~.
#+name: keybindings-buffers

View File

@@ -43,6 +43,7 @@
((claude-code-ide-terminal-backend 'eat)
(claude-code-ide-enable-mcp-server t))
:config
(setopt claude-code-ide-cli-path "claude-jj")
(claude-code-ide-emacs-tools-setup))
#+end_src
@@ -62,6 +63,48 @@ tool to have when you know what youre doing.
:files ("*.el")))
#+end_src
*** Ellama
#+begin_src emacs-lisp
(use-package ellama
:ensure t
:bind ("C-c e" . ellama)
:hook (org-ctrl-c-ctrl-c-final . ellama-chat-send-last-message)
:init
(require 'llm-ollama)
(setopt ellama-provider
(make-llm-ollama :chat-model "gemma3:27b"
:embedding-model "nomic-embed-text"
:default-chat-non-standard-params `(("num_ctx" . ,(* 8 1024)))))
(setopt ellama-summarization-provider
(make-llm-ollama :chat-model "qwen2.5:8b"
:embedding-model "nomic-embed-text"
:default-chat-non-standard-params `(("num_ctx" . ,(* 16 1024)))))
(setopt ellama-coding-provider
(make-llm-ollama :chat-model "gpt-oss:20b"
:embedding-model "nomic-embed-text"
:default-chat-non-standard-params `(("num_ctx" . ,(* 8 1024)))))
(setopt ellama-providers
'(("deepseek-coder" . (make-llm-ollama :chat-model "deepseek-coder:6.7b"
:embedding-model "nomic-embed-text"))
("qwen2.5-coder" . (make-llm-ollama :chat-model "qwen2.5-coder:1.5b"
:embedding-model "nomic-embed-text"))
("qwen3-coder" . (make-llm-ollama :chat-model "qwen3-coder:30b"
:embedding-model "nomic-embed-text"))
("qwen3-vl" . (make-llm-ollama :chat-model "qwen3-vl:30b"
:embedding-model "nomic-embed-text"))))
(setopt ellama-naming-provider (make-llm-ollama :chat-model "phi3:mini-4k"
:embedding-model "nomic-embed-text"))
(setopt ellama-naming-scheme 'ellama-generate-name-by-llm)
(setopt ellama-chat-display-action-function #'display-buffer-full-frame)
(setopt ellama-instant-display-action-function #'display-buffer-at-bottom)
(setopt ellama-auto-scroll t)
:config
(ellama-context-header-line-global-mode +1)
(ellama-session-header-line-global-mode +1)
(advice-add 'pixel-scroll-precision :before #'ellama-disable-scroll)
(advice-add 'end-of-buffer :after #'ellama-enable-scroll))
#+end_src
** Bitwarden
This package is still a very much work in progress one Im developing
in order to interact with Bitwarden in Emacs with the help of the
@@ -594,7 +637,7 @@ simple inbox, outbox and all. Actually, four of my bookmarks have a
couple of filtering:
- anything in my inbox linked to my university
- the [[https://emacs-doctor.com/lists/listinfo][emacs-doctor mailing list]] (French Emacs mailing list)
- emails related to my internship
- emails related to my job
- and my inbox for any mail not caught by any of these filters
And all of them will have the requirement not to display any trashed
email. Actually, all of my bookmarks will have this requirement,
@@ -640,17 +683,6 @@ Paris 8 (my university).
#+RESULTS[083992a66ea6339d3a55773108e520a6024102c5]: mu4e-bookmarks-filter-uni
: f:/.*up8\.edu|.*univ-paris8.*/ OR c:/.*up8\.edu|.*univ-paris8.*/ OR t:/.*up8\.edu|.*univ-paris8.*/ OR maildir:/Univ/Inbox OR maildir:/Univ/Junk
Next I need an inbox dedicated to the association Im part of.
#+name: mu4e-bookmarks-filter-asso
#+header: :tangle no :cache yes
#+begin_src emacs-lisp
(let ((regex "/.*supran\\.fr/"))
<<mu4e-bookmarks-from-copy-to-gen>>)
#+end_src
#+RESULTS[e04566a9d56624e063b3dd4e2c639e87cf9683aa]: mu4e-bookmarks-filter-asso
: f:/.*supran\.fr/ OR c:/.*supran\.fr/ OR t:/.*supran\.fr/
As for the Emacs-doctor list, I need to match both the current, modern
mailing list address but also its old address. The same applies for
the emacs-devel mailing list as well as GitHub emails related to my
@@ -696,7 +728,7 @@ more general development topics, including issues and PRs from GitHub.
#+RESULTS[673f76e7a682ed64f98dbe6d4a06810436ba6799]: mu4e-bookmarks-filter-github-list
: list:/.*\.github\.com/ OR t:/.*\.github\.com/ OR f:/.*\.github\.com/ OR contact:/.*\.github\.com/ OR list:/.*\.gitlab\.com/ OR t:/.*\.gitlab\.com/ OR f:/.*\.gitlab\.com/ OR contact:/.*\.gitlab\.com/ OR list:stumpwm-devel@nongnu.org OR t:stumpwm-devel@nongnu.org OR f:stumpwm-devel@nongnu.org OR contact:stumpwm-devel@nongnu.org OR list:/.*sr\.ht/ OR t:/.*sr\.ht/ OR f:/.*sr\.ht/ OR contact:/.*sr\.ht/ AND NOT ( list:/ateliers.*emacs.*/ OR t:/ateliers.*emacs.*/ OR f:/ateliers.*emacs.*/ OR contact:/ateliers.*emacs.*/ OR list:/emacs-.*@gnu.org/ OR t:/emacs-.*@gnu.org/ OR f:/emacs-.*@gnu.org/ OR contact:/emacs-.*@gnu.org/ OR list:/.*eshell-info-banner.*/ OR t:/.*eshell-info-banner.*/ OR f:/.*eshell-info-banner.*/ OR contact:/.*eshell-info-banner.*/ OR list:/.*emacsfr.*/ OR t:/.*emacsfr.*/ OR f:/.*emacsfr.*/ OR contact:/.*emacsfr.*/ )
When it comes to my internship, all emails will contain an address containing ~aubay.com~ (thats where my internship takes place).
When it comes to my job, all emails will contain an address containing ~aubay.com~ (thats where my internship takes place).
- ~/.*aubay.com/~
#+name: mu4e-bookmarks-filter-aubay
@@ -734,7 +766,6 @@ And for the last string-generating code, lets describe my main inbox:
(cons "<<mu4e-bookmarks-default-filter()>>"
`(,(format "(%s)"
<<mu4e-bookmarks-filter-aubay>>)
,(format "(%s)" "<<mu4e-bookmarks-filter-asso()>>")
,(format "(%s)"
<<mu4e-bookmarks-filter-emacs-list>>)
,(format "(%s)"
@@ -744,8 +775,8 @@ And for the last string-generating code, lets describe my main inbox:
" AND NOT ")
#+end_src
#+RESULTS[94290b02a0da24cffeba43e1d47395e801bc0158]: mu4e-bookmarks-inbox-filters
: NOT flag:trashed AND (maildir:/Inbox OR maildir:/Junk) AND NOT (f:/.*aubay\.com/ OR c:/.*aubay\.com/ OR t:/.*aubay\.com/) AND NOT (f:/.*supran.fr/ OR c:/.*supran.fr/ OR t:/.*supran.fr/) AND NOT (list:/ateliers.*emacs.*/ OR t:/ateliers.*emacs.*/ OR f:/ateliers.*emacs.*/ OR contact:/ateliers.*emacs.*/ OR list:/emacs-.*@gnu.org/ OR t:/emacs-.*@gnu.org/ OR f:/emacs-.*@gnu.org/ OR contact:/emacs-.*@gnu.org/ OR list:/.*eshell-info-banner.*/ OR t:/.*eshell-info-banner.*/ OR f:/.*eshell-info-banner.*/ OR contact:/.*eshell-info-banner.*/ OR list:/.*emacsfr.*/ OR t:/.*emacsfr.*/ OR f:/.*emacsfr.*/ OR contact:/.*emacsfr.*/) AND NOT (list:/.*\.github\.com/ OR t:/.*\.github\.com/ OR f:/.*\.github\.com/ OR contact:/.*\.github\.com/ OR list:/.*\.gitlab\.com/ OR t:/.*\.gitlab\.com/ OR f:/.*\.gitlab\.com/ OR contact:/.*\.gitlab\.com/ OR list:stumpwm-devel@nongnu.org OR t:stumpwm-devel@nongnu.org OR f:stumpwm-devel@nongnu.org OR contact:stumpwm-devel@nongnu.org OR list:/.*sr\.ht/ OR t:/.*sr\.ht/ OR f:/.*sr\.ht/ OR contact:/.*sr\.ht/ AND NOT ( list:/ateliers.*emacs.*/ OR t:/ateliers.*emacs.*/ OR f:/ateliers.*emacs.*/ OR contact:/ateliers.*emacs.*/ OR list:/emacs-.*@gnu.org/ OR t:/emacs-.*@gnu.org/ OR f:/emacs-.*@gnu.org/ OR contact:/emacs-.*@gnu.org/ OR list:/.*eshell-info-banner.*/ OR t:/.*eshell-info-banner.*/ OR f:/.*eshell-info-banner.*/ OR contact:/.*eshell-info-banner.*/ OR list:/.*emacsfr.*/ OR t:/.*emacsfr.*/ OR f:/.*emacsfr.*/ OR contact:/.*emacsfr.*/ )) AND NOT (f:/.*up8\.edu|.*univ-paris8.*/ OR c:/.*up8\.edu|.*univ-paris8.*/ OR t:/.*up8\.edu|.*univ-paris8.*/ OR maildir:/Univ/Inbox OR maildir:/Univ/Junk)
#+RESULTS[bcdff5943898f52a55d2e0c124b85fb157983d2f]: mu4e-bookmarks-inbox-filters
: NOT flag:trashed AND (maildir:/Inbox OR maildir:/Junk) AND NOT (f:/.*aubay\.com/ OR c:/.*aubay\.com/ OR t:/.*aubay\.com/) AND NOT (list:/ateliers.*emacs.*/ OR t:/ateliers.*emacs.*/ OR f:/ateliers.*emacs.*/ OR contact:/ateliers.*emacs.*/ OR list:/emacs-.*@gnu.org/ OR t:/emacs-.*@gnu.org/ OR f:/emacs-.*@gnu.org/ OR contact:/emacs-.*@gnu.org/ OR list:/.*eshell-info-banner.*/ OR t:/.*eshell-info-banner.*/ OR f:/.*eshell-info-banner.*/ OR contact:/.*eshell-info-banner.*/ OR list:/.*emacsfr.*/ OR t:/.*emacsfr.*/ OR f:/.*emacsfr.*/ OR contact:/.*emacsfr.*/) AND NOT (list:/.*\.github\.com/ OR t:/.*\.github\.com/ OR f:/.*\.github\.com/ OR contact:/.*\.github\.com/ OR list:/.*\.gitlab\.com/ OR t:/.*\.gitlab\.com/ OR f:/.*\.gitlab\.com/ OR contact:/.*\.gitlab\.com/ OR list:stumpwm-devel@nongnu.org OR t:stumpwm-devel@nongnu.org OR f:stumpwm-devel@nongnu.org OR contact:stumpwm-devel@nongnu.org OR list:/.*sr\.ht/ OR t:/.*sr\.ht/ OR f:/.*sr\.ht/ OR contact:/.*sr\.ht/ AND NOT ( list:/ateliers.*emacs.*/ OR t:/ateliers.*emacs.*/ OR f:/ateliers.*emacs.*/ OR contact:/ateliers.*emacs.*/ OR list:/emacs-.*@gnu.org/ OR t:/emacs-.*@gnu.org/ OR f:/emacs-.*@gnu.org/ OR contact:/emacs-.*@gnu.org/ OR list:/.*eshell-info-banner.*/ OR t:/.*eshell-info-banner.*/ OR f:/.*eshell-info-banner.*/ OR contact:/.*eshell-info-banner.*/ OR list:/.*emacsfr.*/ OR t:/.*emacsfr.*/ OR f:/.*emacsfr.*/ OR contact:/.*emacsfr.*/ )) AND NOT (f:/.*up8\.edu|.*univ-paris8.*/ OR c:/.*up8\.edu|.*univ-paris8.*/ OR t:/.*up8\.edu|.*univ-paris8.*/ OR maildir:/Univ/Inbox OR maildir:/Univ/Junk)
We can finally define our bookmarks! The code reads as follows:
#+name: mu4e-bookmarks
@@ -755,7 +786,7 @@ We can finally define our bookmarks! The code reads as follows:
:key ?i
:query ,(format "%s"
<<mu4e-bookmarks-inbox-filters>>))
(:name "Internship"
(:name "Aubay"
:key ?a
:query ,(format "(%s) AND (%s)"
"<<mu4e-bookmarks-default-filter()>>"
@@ -775,11 +806,6 @@ We can finally define our bookmarks! The code reads as follows:
:query ,(format "%s AND %s"
"<<mu4e-bookmarks-default-filter()>>"
<<mu4e-bookmarks-filter-emacs-list>>))
(:name "Supran"
:key ?s
:query ,(format "%s AND %s"
"<<mu4e-bookmarks-default-filter()>>"
"<<mu4e-bookmarks-filter-asso()>>"))
(:name "Sent" :key ?S :query "maildir:/Sent OR maildir:/Univ/Sent")
(:name "All Unread" :key ?U :query "flag:unread AND NOT flag:trashed")
(:name "Today" :key ?t :query "date:today..now AND NOT flag:trashed")
@@ -1414,6 +1440,12 @@ writing my commit messages.
:init (add-to-list 'auto-mode-alist '("\\.jjdescription\\'" . jjdescription-mode)))
#+end_src
And I want Emacs to know that any directory which has a =.jj= repository
is the root of a project.
#+begin_src emacs-lisp
(add-to-list 'project-vc-extra-root-markers ".jj")
#+end_src
*** Magit
Magit is an awesome wrapper around Git for Emacs! Very often, I go
from disliking to really hating Git GUI clients because they often

View File

@@ -60,6 +60,16 @@ enough for me.
:straight (:build t))
#+end_src
** Evil Surround
#+begin_src emacs-lisp
(use-package evil-surround
:straight (:build t)
:after evil
:config
(add-to-list 'evil-surround-pairs-alist '(?$ . ("${" . "}")))
(global-evil-surround-mode 1))
#+end_src
** Iedit
Iedit is a powerful text editing tool that can be used to refactor
code through the edition of multiple regions at once, be it in a

View File

@@ -705,7 +705,8 @@ default packages:
("AUTO" "polyglossia" nil ("xelatex" "lualatex"))
("capitalize" "cleveref")
("" "booktabs")
("" "tabularx")))
("" "tabularx")
("" "amssymb")))
(add-to-list 'org-latex-default-packages-alist package t))
(setq org-latex-reference-command "\\cref{%s}")

View File

@@ -38,7 +38,7 @@ variables to install grammars for different languages.
(use-package treesit-fold
:after tree-sitter
:straight (:build t :host github :repo "emacs-tree-sitter/treesit-fold")
:config (treesit-fold-mode))
:init (global-treesit-fold-mode t))
#+end_src
*** Appwrite
@@ -313,14 +313,6 @@ DSLs, or /Domain Specific Languages/, are languages dedicated to some
very tasks, such as configuration languages or non-general programming
such as SQL.
*** Makefiles
#+begin_src emacs-lisp
(defun my/local-tab-indent ()
(setq-local indent-tabs-mode 1))
(add-hook 'makefile-mode-hook #'my/local-tab-indent)
#+end_src
*** Caddy
[[https://caddyserver.com/][Caddy]] (or /Caddyserver/) is a web server akin to Nginx or Apache which I
find much easier to configure that the latter two, plus it has
@@ -401,6 +393,19 @@ And finally, lets enable some Eldoc integration for CMake.
"yt" #'csv-yank-as-new-table))
#+end_src
*** Cucumber
[[https://cucumber.io/][Cucumber]] is a library that lets you write =.feature= files for
Behaviour-Driven Development, or /BDD/. Although not much configuration
is required to use it in Emacs, we do need to install =feature-mode= to
support the Gherkin syntax in =.feature= files.
#+begin_src emacs-lisp
(use-package feature-mode
:defer t
:straight (:build t)
:mode (("\\.feature\\'" . feature-mode)))
#+end_src
*** Dotenv
It is not rare to encounter a dotenv file, that is, a file with either
the ~.env~ extension or simply called ~.env~. They contain environment
@@ -457,6 +462,14 @@ visual graphs and networks.
(setq graphviz-dot-indent-width 4))
#+end_src
*** Makefiles
#+begin_src emacs-lisp
(defun my/local-tab-indent ()
(setq-local indent-tabs-mode 1))
(add-hook 'makefile-mode-hook #'my/local-tab-indent)
#+end_src
*** Markdown
Yes, I love org-mode and I largely prefer to use it instead of
Markdown due to its far superior power and abilities. But still,