Compare commits

...

14 Commits

Author SHA1 Message Date
493815b939 chore(deps): add baseline-browser-mapping dev dependency 2026-02-24 14:25:08 +01:00
45d000d6b4 chore(deps): add dev dependency sass-embedded 2026-02-24 14:08:25 +01:00
e13d144293 fix(emacs): remove redundant table 2026-02-24 14:03:43 +01:00
370980c320 feat(emacs): add missing LaTeX package for some chars 2026-02-24 14:02:56 +01:00
537ec62fae feat(emacs): add cucumber major mode 2026-02-24 14:02:27 +01:00
6239775fe8 fix(emacs): better init for package treesit-fold 2026-02-24 14:00:12 +01:00
a206f952f9 feat(emacs): add .jj directory as possible project root 2026-02-24 13:59:34 +01:00
f6dbe82f18 feat(emacs): finally updated my inboxes in mu4e 2026-02-24 13:59:05 +01:00
42dfafd536 feat(emacs): add evil-surround config 2026-02-24 13:58:21 +01:00
71e7bdec0c feat(emacs): add Ellama config 2026-02-24 13:57:54 +01:00
dependabot[bot]
b94d6d0309 chore(deps-dev): bump mdast-util-to-hast
Bumps the npm_and_yarn group with 1 update in the / directory: [mdast-util-to-hast](https://github.com/syntax-tree/mdast-util-to-hast).


Updates `mdast-util-to-hast` from 13.2.0 to 13.2.1
- [Release notes](https://github.com/syntax-tree/mdast-util-to-hast/releases)
- [Commits](https://github.com/syntax-tree/mdast-util-to-hast/compare/13.2.0...13.2.1)

---
updated-dependencies:
- dependency-name: mdast-util-to-hast
  dependency-version: 13.2.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-24 13:54:21 +01:00
210c75cce9 feat(emacs): add majjit 2026-02-24 13:54:21 +01:00
e427c1866e chore(devenv): update shell 2026-02-24 13:47:57 +01:00
a7fdaa066f feat(emacs/webdev): better default padding in web-mode 2025-12-17 23:10:12 +01:00
8 changed files with 1318 additions and 253 deletions

View File

@@ -3,10 +3,10 @@
"devenv": {
"locked": {
"dir": "src/modules",
"lastModified": 1747717470,
"lastModified": 1771852244,
"owner": "cachix",
"repo": "devenv",
"rev": "c7f2256ee4a4a4ee9cbf1e82a6e49b253c374995",
"rev": "c88c14a32d06173867e26b7d4f5daed38a3f6f1e",
"type": "github"
},
"original": {
@@ -19,14 +19,14 @@
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"owner": "edolstra",
"lastModified": 1767039857,
"owner": "NixOS",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "edolstra",
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
@@ -40,10 +40,10 @@
]
},
"locked": {
"lastModified": 1747372754,
"lastModified": 1771858127,
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46",
"rev": "49bbbfc218bf3856dfa631cead3b052d78248b83",
"type": "github"
},
"original": {
@@ -60,10 +60,10 @@
]
},
"locked": {
"lastModified": 1709087332,
"lastModified": 1762808025,
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"rev": "cb5e3fdca1de58ccbc3ef53de65bd372b48f567c",
"type": "github"
},
"original": {
@@ -73,11 +73,14 @@
}
},
"nixpkgs": {
"inputs": {
"nixpkgs-src": "nixpkgs-src"
},
"locked": {
"lastModified": 1746807397,
"lastModified": 1770434727,
"owner": "cachix",
"repo": "devenv-nixpkgs",
"rev": "c5208b594838ea8e6cca5997fbf784b7cca1ca90",
"rev": "8430f16a39c27bdeef236f1eeb56f0b51b33d348",
"type": "github"
},
"original": {
@@ -87,6 +90,23 @@
"type": "github"
}
},
"nixpkgs-src": {
"flake": false,
"locked": {
"lastModified": 1769922788,
"narHash": "sha256-H3AfG4ObMDTkTJYkd8cz1/RbY9LatN5Mk4UF48VuSXc=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "207d15f1a6603226e1e223dc79ac29c7846da32e",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"devenv": "devenv",

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")
@@ -1388,31 +1414,18 @@ compatible with git repositories. In fact, I pretty much dont use git
anymore, jj (abbreviation of Jujutsu) has almost completely replaced
git for me.
It comes to no surprise then that I will use [[https://elpa.gnu.org/packages/vc-jj.html][=vc-jj=]], a Jujutsu
backend for =vc.el= and =project.el=.
I like Magits interface, as you can see in my [[file:./applications.md#magit][Magit]] config.
Therefore, lets install =majjit=, my slow and scuffed attempt at
bringing some Magit features to jujutsu.
#+begin_src emacs-lisp
(use-package vc-jj
:straight (:build t)
:defer nil)
#+end_src
As mentioned in the packages README, I do need to set these lines in
my jj config:
#+begin_src toml :tangle no
[ui]
diff-formatter = ":git"
conflict-marker-style = "git"
#+end_src
I also like Magits interface, as you can see in my [[file:./applications.md#magit][Magit]] config.
Therefore, lets install =jujutsu-mode= which attempts to recreate a
Magit-style interface for Jujutsu.
#+begin_src emacs-lisp
(use-package jj-mode
:straight (:build t :host github :repo "bolivier/jj-mode.el")
:defer t)
(use-package majjit
:defer t
:after magit
:straight (majjit :built t
:type git
:host nil
:repo "https://labs.phundrak.com/phundrak/majjit")
:custom ((majjit-default-directory "~/code/")))
#+end_src
Though, Ill be honest, I generally prefer to use Jujutsu in the
@@ -1427,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,
@@ -1337,6 +1350,10 @@ hand.
(scss-mode . emmet-mode)
(web-mode . emmet-mode))
:config
(setopt standard-indent 2
web-mode-block-padding 0
web-mode-part-padding 0
web-mode-markup-indent-offset 0)
(general-define-key
:keymaps 'emmet-mode-keymap
"M-RET" #'emmet-expand-yas)

1319
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -15,6 +15,8 @@
"@vuepress/plugin-slimsearch": "^2.0.0-rc.118",
"@vuepress/plugin-umami-analytics": "2.0.0-rc.118",
"@vuepress/theme-default": "2.0.0-rc.118",
"baseline-browser-mapping": "^2.10.0",
"sass-embedded": "^1.97.3",
"vuepress": "2.0.0-rc.26"
},
"dependencies": {