Compare commits

...

39 Commits

Author SHA1 Message Date
f4ae8b2e21 chore: upgrade Vuepress 2025-11-19 12:55:52 +01:00
21c570a440 fix(mu4e): disable ical features for now 2025-11-19 12:40:01 +01:00
9b266c444d docs: formatting 2025-11-19 12:40:01 +01:00
3fe9b05623 chore(applications): change remote of npm-transient 2025-11-19 12:40:01 +01:00
c29895d019 treesitter 2025-11-19 12:40:01 +01:00
003d5d12cf feat(Nix): add nix-ts-mode for TreeSitter support in Nix files 2025-11-19 12:40:01 +01:00
764be96265 feat(treesit/astro): disable autocompilation of astro grammar 2025-11-19 12:40:01 +01:00
4b070dbe4f langtool 2025-11-19 12:40:01 +01:00
e432aa5f20 feat(LSP): add better LSP config for LSP servers 2025-11-19 12:40:01 +01:00
419d291d21 feat(tree-sitter): better tree sitter config, precompiled grammars 2025-11-19 12:40:01 +01:00
43e54218a9 feat(wakatime): add wakatime package 2025-11-19 12:40:01 +01:00
bbfd7414f4 feat(webkit browser): remove webkit browser config
I no longer use it, and my Emacs build does not include it anyway.
2025-11-19 12:40:01 +01:00
06a787d3c9 feat(jujutsu): add jjdescription package 2025-11-19 12:40:01 +01:00
0adfe045a8 feat(langtool): restore langtool, using a local server 2025-11-19 12:40:01 +01:00
79fbbd45e5 fix(mu4e): preserve newlines in signature 2025-11-19 12:40:01 +01:00
df99684d3c feat(AI): add AI agent packages to Emacs 2025-11-19 12:40:01 +01:00
4adcfc8f6f feat(langtool): better keybind for langtool-correct-at-point 2025-11-19 12:40:01 +01:00
9d58977c68 feat(emacs): add Json and Tailwind CSS configuration 2025-11-19 12:40:01 +01:00
5c28ff6d39 feat(emacs): add QML configuration 2025-11-19 12:39:59 +01:00
880d9a0a4a feat(emacs): add Jujutsu packages 2025-11-19 12:39:59 +01:00
11aba117de feat(emacs): add keybinds for org-clock 2025-11-19 12:39:59 +01:00
7a7700855f feat(shell/eat): improve eat configuration
This commit enables eat-mode in Eshell, allowing the use of tools that
normally would not work in Eshell.

It also automatically closes the eat buffer when exiting the shell
instead of keeping it open.
2025-06-08 14:51:25 +02:00
b330e1c7e0 feat(emacs/exwm): deprecate EXWM config 2025-05-24 23:35:17 +02:00
5c5ec6f668 feat(emacs/avy): remove avy-dispatch-alist config
This variable was set to its default value already.
2025-05-24 23:24:17 +02:00
aaf7edeba6 feat(emacs/mu4e): remove .desktop for mu4e (already in NixOS config) 2025-05-24 23:22:28 +02:00
d37bfce977 docs(index): add note about NixOS configuration 2025-05-24 21:48:46 +02:00
b3a4f3cbd8 chore: switch from shell.nix to devenv 2025-05-24 21:48:46 +02:00
f720e6a57e chore: deprecate StumpWM, Picom, and Neofetch configurations 2025-05-24 21:48:46 +02:00
e87c0a9217 feat(keybinds): add treemacs keybinds 2025-05-24 21:24:14 +02:00
8748b30895 fix(emacs/keybinds): correct native Elisp functions closing buffers 2025-05-24 21:23:25 +02:00
295ed85fd5 feat(emacs/term): replace VTerm with Eat 2025-05-24 21:22:26 +02:00
4a31230d16 feat(emacs/mu4e): update config for current NixOS configuration 2025-05-24 21:21:47 +02:00
20ac94c9fb feat(emacs/tramp): add NixOS support for TRAMP connections 2025-05-24 21:20:20 +02:00
57a5be3183 fix(emacs/lsp): fix LSP on NixOS 2025-05-24 21:19:43 +02:00
1ad9328960 fix(emacs/packages): fix some packages setup 2025-05-24 21:19:25 +02:00
78029eefc8 feat(dart): remove Dart config 2025-05-24 21:17:34 +02:00
6e601839aa docs(git): switch from gpg signing to ssh signing 2025-03-12 13:53:48 +01:00
3c5e0db760 fix: move link to bootstrap script to deprecated links 2025-03-02 14:33:09 +01:00
5bc174dd9d docs(git): additional comments and documentation 2025-03-02 14:28:19 +01:00
24 changed files with 2425 additions and 2976 deletions

7
.envrc Normal file
View File

@@ -0,0 +1,7 @@
export DIRENV_WARN_TIMEOUT=20s
eval "$(devenv direnvrc)"
# The use_devenv function supports passing flags to the devenv command
# For example: use devenv --impure --option services.postgres.enable:bool true
use devenv

10
.gitignore vendored
View File

@@ -4,3 +4,13 @@ node_modules
/docs/**/*.md
/docs/.vuepress/dist/
/.yarn/
# Devenv
.devenv*
devenv.local.nix
# direnv
.direnv
# pre-commit
.pre-commit-config.yaml

View File

@@ -1,3 +0,0 @@
enableMessageNames: false
nodeLinker: node-modules

View File

@@ -14,6 +14,14 @@ through [[https://www.gnu.org/software/emacs/][Emacs]].
These Markdown files are then compiled by [[https://v2.vuepress.vuejs.org/][Vuepress]] into a beautiful
website available at [[https://beta.config.phundrak.com][config.phundrak.com]].
Note that a few configs here are no longer up to date. I am in the
process of switching over to [[https://nixos.org/][NixOS]]. You can find my current NixOS
configuration [[https://labs.phundrak.com/phundrak/nix-config][in this repository]]. It will eventually circle back to
being a litterary configuration. Not every piece of software will be
configured by Nix exclusively though, Emacs for instance will stay
relatively free of Nix configurations aside from its basic
installation.
* Running the project
In order to run the project, you need to export all =.org= files in the
Markdown format. To do that easily, you can use an org project setup

103
devenv.lock Normal file
View File

@@ -0,0 +1,103 @@
{
"nodes": {
"devenv": {
"locked": {
"dir": "src/modules",
"lastModified": 1747717470,
"owner": "cachix",
"repo": "devenv",
"rev": "c7f2256ee4a4a4ee9cbf1e82a6e49b253c374995",
"type": "github"
},
"original": {
"dir": "src/modules",
"owner": "cachix",
"repo": "devenv",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"gitignore": "gitignore",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1747372754,
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1746807397,
"owner": "cachix",
"repo": "devenv-nixpkgs",
"rev": "c5208b594838ea8e6cca5997fbf784b7cca1ca90",
"type": "github"
},
"original": {
"owner": "cachix",
"ref": "rolling",
"repo": "devenv-nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"devenv": "devenv",
"git-hooks": "git-hooks",
"nixpkgs": "nixpkgs",
"pre-commit-hooks": [
"git-hooks"
]
}
}
},
"root": "root",
"version": 7
}

9
devenv.nix Normal file
View File

@@ -0,0 +1,9 @@
{ pkgs, ... }:
{
languages.typescript.enable = true;
packages = [ pkgs.nodejs_20 ];
scripts.export.exec = ''
${pkgs.emacs}/bin/emacs -Q --script export.el
'';
}

15
devenv.yaml Normal file
View File

@@ -0,0 +1,15 @@
# yaml-language-server: $schema=https://devenv.sh/devenv.schema.json
inputs:
nixpkgs:
url: github:cachix/devenv-nixpkgs/rolling
# If you're using non-OSS software, you can set allowUnfree to true.
# allowUnfree: true
# If you're willing to use a package that's vulnerable
# permittedInsecurePackages:
# - "openssl-1.1.1w"
# If you have more than one devenv you can merge them
#imports:
# - ./backend

View File

@@ -1,19 +1,14 @@
import { defaultTheme } from '@vuepress/theme-default';
import { viteBundler } from '@vuepress/bundler-vite';
import { defineUserConfig } from 'vuepress';
import { searchProPlugin } from 'vuepress-plugin-search-pro';
import { slimsearchPlugin } from '@vuepress/plugin-slimsearch';
import head from './head';
interface ChildPage {
text: string;
link: string;
}
export default defineUserConfig({
lang: 'en-US',
title: "Phundrak's Dotfiles",
head: head,
head: head as any,
description: "Documentation of the GNU/Linux configuration of P'undrak",
bundler: viteBundler({}),
markdown: {
@@ -25,9 +20,9 @@ export default defineUserConfig({
},
},
plugins: [
searchProPlugin({
indexContent: true,
}),
slimsearchPlugin({
indexContent: true
})
],
theme: defaultTheme({
sidebarDepth: 5,
@@ -64,35 +59,36 @@ export default defineUserConfig({
'/git',
'/hyprland',
'/mpd',
'/neofetch',
'/picom',
{
text: 'StumpWM',
link: '/stumpwm/',
collapsible: true,
children: [
'/stumpwm/init',
'/stumpwm/colours',
'/stumpwm/mode-line',
'/stumpwm/groups',
'/stumpwm/theme',
'/stumpwm/commands',
'/stumpwm/keybindings',
'/stumpwm/utilities',
],
},
'/tmux',
'/bootstrap',
{
text: 'Deprecated Configs',
link: '/deprecated/',
collapsible: true,
children: [
'/deprecated/awesome',
'/deprecated/bootstrap',
'/emacs/packages/exwm',
'/deprecated/i3',
'/deprecated/nano',
'/neofetch',
'/picom',
'/deprecated/polybar',
'/deprecated/spacemacs',
{
text: 'StumpWM',
link: '/stumpwm/',
collapsible: true,
children: [
'/stumpwm/init',
'/stumpwm/colours',
'/stumpwm/mode-line',
'/stumpwm/groups',
'/stumpwm/theme',
'/stumpwm/commands',
'/stumpwm/keybindings',
'/stumpwm/utilities',
],
},
],
},
],

View File

@@ -1,9 +1,9 @@
interface SimplifiedHeader {
tag: string;
content: [any];
content: any[];
}
const simplifiedHead = [
const simplifiedHead:SimplifiedHeader[] = [
{
tag: 'script',
content: [
@@ -128,7 +128,7 @@ const simplifiedHead = [
},
];
let head = [];
let head:[string, any, string?][] = [];
simplifiedHead.forEach((tag: SimplifiedHeader) => {
let tagName = tag.tag;
tag.content.forEach((element) => {

View File

@@ -59,13 +59,6 @@ focus the new window immediately.
(interactive)
(split-window-below)
(windmove-down))
(defun kill-buffer-and-delete-window ()
"Kill the current buffer and delete its window."
(interactive)
(progn
(kill-this-buffer)
(delete-window)))
#+end_src
** Resize windows

View File

@@ -90,7 +90,6 @@ block.
| =autocompletion.el= | [[file:./packages/autocompletion.org][Packages — Autocompletion]] |
| =editing.el= | [[file:./packages/editing.org][Packages — Editing]] |
| =emacs-builtin.el= | [[file:./packages/emacs-builtin.org][Packages — Emacs Built-ins]] |
| =exwm.el= | [[file:./packages/exwm.org][Packages — EXWM]] |
| =helpful.el= | [[file:./packages/helpful.org][Packages — Making My Life Easier]] |
| =latex.el= | [[file:./packages/latex.org][Packages — LaTeX]] |
| =misc.el= | [[file:./packages/misc.org][Packages — Misc]] |
@@ -107,8 +106,8 @@ block.
" ")
#+end_src
#+RESULTS[f76449860408293997e174ff94c743d46951835b]: generate-modules
: "basic-config.el" "custom-elisp.el" "package-manager.el" "keybinding-managemers.el" "applications.el" "autocompletion.el" "editing.el" "emacs-builtin.el" "exwm.el" "helpful.el" "latex.el" "misc.el" "org.el" "programming.el" "visual-config.el" "keybindings.el"
#+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"
#+begin_src emacs-lisp :noweb yes
(dolist (module '(<<generate-modules()>>))

View File

@@ -90,38 +90,88 @@ Undefining some stuff to make keybind prefixes work correctly.
** Apps
Here are my apps keybindings. Each one of them is prefixed by ~a~.
#+name: keybindings-apps
| Key | Function | Description | Package |
|-----+----------------------------+-------------+------------|
| | | apps | |
| c | calc | | |
| C | | calendar | |
| CC | calendar | | |
| Co | org-agenda | | org |
| Cs | org-caldav-sync | | org-caldav |
| d | docker | | docker |
| E | elfeed | | elfeed |
| e | | email | |
| ec | mu4e-compose-new | | mu4e |
| em | mu4e | | mu4e |
| k | keycast-mode | | keycast |
| K | keycast-log-mode | | keycast |
| m | | mastodon | |
| mm | mastodon | | mastodon |
| mn | mastodon-notifications-get | | mastodon |
| mt | mastodon-toot | | mastodon |
| T | tetris | | |
| S | screenshot | | screenshot |
| w | wttrin | | wttrin |
| Key | Function | Description | Package |
|-----+----------------------------+-------------+-----------------|
| | | apps | |
| a | | AI | |
| ae | eca | | eca |
| aC | claude-code-ide | | claude-code-ide |
| ac | claude-code-ide-menu | | claude-code-ide |
| c | calc | | |
| C | | calendar | |
| CC | calendar | | |
| Co | org-agenda | | org |
| Cs | org-caldav-sync | | org-caldav |
| d | docker | | docker |
| E | elfeed | | elfeed |
| e | | email | |
| ec | mu4e-compose-new | | mu4e |
| em | mu4e | | mu4e |
| k | keycast-mode | | keycast |
| K | keycast-log-mode | | keycast |
| m | | mastodon | |
| mm | mastodon | | mastodon |
| mn | mastodon-notifications-get | | mastodon |
| mt | mastodon-toot | | mastodon |
| T | tetris | | |
| S | screenshot | | screenshot |
| w | wttrin | | wttrin |
*** Shell apps
I also have two main shell-related functions, prefixed with ~as~.
#+name: keybindings-apps-shell
| Key | Function | Description | Package |
|-----+-------------+-------------+-------------|
| | | shells | |
| e | eshell-new | | |
| v | vterm | | vterm |
| V | multi-vterm | | multi-vterm |
| Key | Function | Description | Package |
|-----+------------+-------------+---------|
| | | shells | |
| e | eshell-new | | |
| t | eat | | eat |
*** 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 |
*** Treemacs
#+name: keybindings-treemacs
@@ -181,7 +231,7 @@ My buffer-related keybindings are all prefixed by ~b~.
| c | clone-indirect-buffer | | |
| C | clone-indirect-buffer-other-window | | |
| l | bufler | | bufler |
| d | kill-this-buffer | | |
| d | kill-current-buffer | | |
| D | kill-buffer | | |
| h | dashboard-refresh-buffer | | dashboard |
| m | switch-to-messages-buffer | | |
@@ -361,10 +411,10 @@ My keybindings for jumping around are prefixed by ~j~.
| Key | Function | Description | Package |
|-----+----------------------------------+-------------+----------|
| | | language | |
| . | langtool-correct-at-point | | langtool |
| B | langtool-correct-buffer | | langtool |
| b | langtool-check-buffer | | langtool |
| c | langtool-check | | langtool |
| C | langtool-correct-at-point | | langtool |
| d | langtool-check-done | | langtool |
| l | langtool-switch-default-language | | langtool |
| p | langtool-show-message-at-point | | langtool |
@@ -420,7 +470,13 @@ My keybindings for my projects are prefixed by ~p~.
| Key | Function | Description | Package |
|-----+--------------------------------+-------------+----------|
| | | org | |
| c | org-capture | | org |
| c | | clock | |
| cc | org-clock-cancel | | org |
| cd | org-clock-display | | org |
| cg | org-clock-goto | | org |
| ci | org-clock-in | | org |
| co | org-clock-out | | org |
| C | org-capture | | org |
| r | | roam | |
| rb | org-mark-ring-goto | back | org-roam |
| rB | org-roam-buffer-toggle | | org-roam |
@@ -516,7 +572,7 @@ much to say. The prefix here is ~w~.
| 7 | winum-select-window-7 | none | winum |
| 8 | winum-select-window-8 | none | winum |
| 9 | winum-select-window-9 | none | winum |
| b | kill-buffer-and-delete-window | | |
| b | kill-buffer-and-window | | |
| d | delete-window | | |
| o | other-window | | |
| D | delete-other-windows | | |

View File

@@ -33,6 +33,35 @@
:defer t)
#+end_src
** AI
*** Claude Code Emacs
#+begin_src emacs-lisp
(use-package claude-code-ide
:defer t
:straight (:build t :type git :host github :repo "manzaltu/claude-code-ide.el")
:custom
((claude-code-ide-terminal-backend 'eat)
(claude-code-ide-enable-mcp-server t))
:config
(claude-code-ide-emacs-tools-setup))
#+end_src
*** Editor Code Assistant
The Editor Code Assistant, or ECA, is a nice package that allows the
user to use an AI agent right in Emacs. AI is certainly not something
that will replace programmers any time soon, but its still a nice
tool to have when you know what youre doing.
#+begin_src emacs-lisp
(use-package eca
:defer t
:init (setopt eca-extra-args '("--verbose" "--log-level debug"))
:straight (:build t
:host github
:repo "editor-code-assistant/eca-emacs"
:files ("*.el")))
#+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
@@ -295,6 +324,7 @@ know about it since I dont want it to include it a second time after
(setq message-signature nil
mail-signature nil)
#+end_src
*** Gnus
#+begin_src emacs-lisp
(use-package gnus
@@ -395,7 +425,7 @@ configuration for the ~mu4e~ package itself.
#+begin_src emacs-lisp
(use-package mu4e
:after all-the-icons
:straight (:build t)
:straight (:build nil)
:commands mu4e mu4e-compose-new
:init
(defun mu4e--main-action-str (name func)
@@ -406,8 +436,8 @@ configuration for the ~mu4e~ package itself.
(require 'mu4e)
(remove-hook 'mu4e-main-mode-hook 'evil-collection-mu4e-update-main-view)
<<mu4e-ical-setup>>
<<mu4e-ical-init-config>>
;; <<mu4e-ical-setup>>
;; <<mu4e-ical-init-config>>
(setopt mu4e-completing-read-function 'completing-read
mu4e-use-fancy-chars t
@@ -433,7 +463,7 @@ configuration for the ~mu4e~ package itself.
(add-hook 'mu4e-view-mode-hook (lambda () (setq truncate-lines nil)))
(add-hook 'mu4e-headers-mode-hook (lambda () (setq truncate-lines t)))
<<mu4e-ical-config>>
;; <<mu4e-ical-config>>
<<mu4e-keybindings-undef>>
<<mu4e-keybindings-view>>
<<mu4e-keybindings-view-no-prefix>>
@@ -499,21 +529,6 @@ Quick sidenote: on Arch Linux, youll need to install either ~mu~ or
~mu-git~ from the AUR in order to use mu4e. I also have a ~.desktop~ file
to make it possible to open mu4e directly from my program picker. It
uses the shell script ~emacsmail~ Ive written [[file:/scripts.md#emacsmail][here]].
#+header: :mkdirp yes
#+begin_src conf-desktop :tangle ~/.local/share/applications/mu4e.desktop
[Desktop Entry]
Name=Mu4e
GenericName=Mu4e
Comment=Maildir Utils for Emacs
MimeType=x-scheme-handler/mailto;
Exec=/home/phundrak/.local/bin/emacsmail %U
Icon=emacs
Type=Application
Terminal=false
Categories=Network;Email;TextEditor
StartupWMClass=Gnus
Keywords=Text;Editor;
#+end_src
**** Interact with iCalendar events
Something that has always bugged me was how to properly with iCalendar
@@ -521,8 +536,8 @@ events shared with me on my personal mailbox. The answer is actually
[[https://www.djcbsoftware.nl/code/mu/mu4e/iCalendar.html][dead simple]].
#+name: mu4e-ical-setup
#+begin_src emacs-lisp
(require 'mu4e-icalendar)
(mu4e-icalendar-setup)
;; (require 'mu4e-icalendar)
;; (mu4e-icalendar-setup)
#+end_src
Ill just configure a couple of things regarding these events, namely
@@ -530,14 +545,14 @@ converting them to org-mode and add them to my =~/org/notes.org= file,
and delete the email once I answered to the event.
#+name: mu4e-ical-config
#+begin_src emacs-lisp
(setq mu4e-icalendar-trash-after-reply t)
;; (setq mu4e-icalendar-trash-after-reply t)
#+end_src
#+name: mu4e-ical-init-config
#+begin_src emacs-lisp
(setq gnus-icalendar-org-capture-file "~/org/notes.org"
gnus-icalendar-org-capture-headline '("Calendar"))
(gnus-icalendar-org-setup)
;; (setq gnus-icalendar-org-capture-file "~/org/notes.org"
;; gnus-icalendar-org-capture-headline '("Calendar"))
;; (gnus-icalendar-org-setup)
#+end_src
**** Basic configuration
@@ -556,7 +571,7 @@ and how to retrieve them.
#+name: mu4e-mail-on-machine
#+begin_src emacs-lisp :tangle no
(setq mu4e-get-mail-command "mbsync -a"
mu4e-root-maildir "~/Mail"
mu4e-root-maildir (concat (getenv "HOME") "/Mail/lucien@phundrak.com/")
mu4e-trash-folder "/Trash"
mu4e-refile-folder "/Archive"
mu4e-sent-folder "/Sent"
@@ -791,29 +806,6 @@ With this piece of code, I can simply jump to my inbox maildir with
(:maildir "/Trash" :key ?t)))
#+end_src
**** Dealing with spammers
Im sure you have received at least one email recently from a sketchy
email address asking you something that might be completely unrelated
to what you do, or at least somewhat related. Fortunately, [[https://twitter.com/Boris/status/1360208504544444417][we have a
hero]]! Now, let me write a function that will insert their
pre-written text at point to avoid me going back to their Twitter
thread each time I want to shut spammers up.
#+begin_src emacs-lisp
(defun reply-to-bill ()
(interactive)
(insert "Please forward this email to bill@noprocurement.com,
and delete my email, as Ill be changing jobs soon, and this
email address will no longer be active.
Bill Whiskoney is a senior partner at Nordic Procurement
Services, and he handles our budget and will help you further or
introduce you to someone who can."))
#+end_src
If you want the full story, make sure to read the whole thread, I
guarantee it, its worth your time! And in case the Twitter thread
disappear in the future, [[https://threader.app/thread/1360208504544444417][here is a backup]].
**** Getting Fancy
Im not a huge fan of mu4es default icons marking my emails, so Ill
redefine them as follows. Be aware the name of these icons are from
@@ -1049,8 +1041,6 @@ skipping the export part and write your emails directly in org-mode?
org-msg-signature (format "\n--\n#+begin_signature\n%s\n#+end_signature"
(with-temp-buffer
(insert-file-contents mail-signature-file)
(while (re-search-forward "\n" nil t)
(replace-match "\n\n"))
(buffer-string))))
:general
(phundrak/major-leader-key
@@ -1252,6 +1242,40 @@ minibuffer, both separated by a single space."
("q" nil :exit t))
#+end_src
** Langtool
LanguageTool is a great tool for catching typos and grammatical errors
in quite a few languages.
#+begin_src emacs-lisp
(use-package langtool
:defer t
:straight (:build t)
:commands (langtool-check
langtool-check-done
langtool-show-message-at-point
langtool-correct-buffer)
:custom
(langtool-default-language "en-US")
(langtool-mother-tongue "fr")
:config
(setq langtool-http-server-host "localhost"
langtool-http-server-port 8081))
#+end_src
Finally, =writegood-mode= detects some simple general rules when writing
in English and can also calculate the Flesh-Kincaid levels of a
document.
#+begin_src emacs-lisp
(use-package writegood-mode
:defer t
:straight (:build t)
:hook org-mode latex-mode
:general
(phundrak/major-leader-key
:keymaps 'writegood-mode-map
"g" #'writegood-grade-level
"r" #'writegood-reading-ease))
#+end_src
** Nov
Nov is a major-mode for reading EPUB files within Emacs. Since I have
it, I dont need any other Epub reader on my computer! Plus this one
@@ -1349,6 +1373,60 @@ left it.
#+end_src
** Project Management
*** Jujutsu
Lets face it: [[https://git-scm.com/][git]] is awesome. Theres a reason it took over the world
of software development, replacing pretty much all competitors such as
subversion. And I will forever love it. But, it has a lot of
drawbacks, especially its interface that is... not great, to put it
mildly. I absolutely respect its commitment to staying backward
compatible, but its not great.
[[https://jj-vcs.github.io/][Jujutsu]] on the other hand, is awesome! Its interface is really clean,
really intuitive, especially for someone like me who rebases a LOT!
And, for now, it still uses git as its backend, so its entirely
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=.
#+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)
#+end_src
Though, Ill be honest, I generally prefer to use Jujutsu in the
terminal, unlike git. Something I do use Emacs for, however, is
writing my commit messages.
#+begin_src emacs-lisp
(use-package jjdescription
:defer nil
:straight (:build t)
:commands jjdescription-mode
:init (add-to-list 'auto-mode-alist '("\\.jjdescription\\'" . jjdescription-mode)))
#+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
@@ -1561,7 +1639,8 @@ excluded files.
eol)
,(rx "/"
(or "rsync" "ssh" "tmp" "yadm" "sudoedit" "sudo")
(* any)))))
(* any))
"/nix/.*")))
#+end_src
** Screenshot
@@ -1579,6 +1658,27 @@ look nice.
#+end_src
** Shells
*** Eat
Eat is a modern shell emulator for Emacs. I use it as a replacement
for VTerm as I never got VTerm to actually work on NixOS.
#+begin_src emacs-lisp
(use-package eat
:defer t
:straight (eat :type git
:host codeberg
:repo "akib/emacs-eat"
:files ("*.el" ("term" "term/*.el") "*.texi"
"*.ti" ("terminfo/e" "terminfo/e/*")
("terminfo/65" "terminfo/65/*")
("integration" "integration/*")
(:exclude ".dir-locals.el" "*-tests.el")))
:init
(add-hook 'eshell-load-hook #'eat-eshell-mode)
(eat-eshell-mode 1)
:config
(add-hook 'eat-exit-hook #'kill-this-buffer))
#+end_src
*** Shell-pop
Shell-pop allows the user to easily call for a new shell in a pop-up
buffer.
@@ -1588,7 +1688,7 @@ buffer.
:straight (:build t)
:custom
(shell-pop-default-directory "/home/phundrak")
(shell-pop-shell-type (quote ("eshell" "*eshell*" (lambda () (eshell shell-pop-term-shell)))))
(shell-pop-shell-type (quote ("eat" "*eat-pop*" (lambda () (eat)))))
(shell-pop-window-size 30)
(shell-pop-full-span nil)
(shell-pop-window-position "bottom")
@@ -1597,72 +1697,12 @@ buffer.
(shell-pop-cleanup-buffer-at-process-exit t))
#+end_src
*** VTerm
VTerm gives Emacs access to regular shells with an almost regular
emulator. Be aware you will most likely need to hit ~C-c~ twice to send
an interrupt signal.
** Wakatime
#+begin_src emacs-lisp
(use-package vterm
(use-package wakatime-mode
:defer t
:straight (:build t)
:config
(setq vterm-shell "/usr/bin/fish"
vterm-always-compile-module t))
#+end_src
One annoying think with vterm is it only can create one buffer, you
cant have multiple vterm buffers by default. ~multi-vterm~ fixes this
issue.
#+begin_src emacs-lisp
(use-package multi-vterm
:after vterm
:defer t
:straight (:build t)
:general
(phundrak/major-leader-key
:packages '(vterm multi-vterm)
:keymap 'vterm-mode-map
"c" #'multi-vterm
"n" #'multi-vterm-next
"p" #'multi-vterm-prev))
#+end_src
Another really neat package is =eshell-vterm= which allows to use vterm
to run visual commands when in Eshell.
#+begin_src emacs-lisp
(use-package eshell-vterm
:after eshell
:straight (:build t)
:config
(eshell-vterm-mode)
(defalias 'eshell/v 'eshell-exec-visual))
#+end_src
** XWidgets Webkit Browser
I used to use the xwidgets webkit browser in order to view or preview
HTML files from Emacs, but it seems the Cairo background transparency
patch breaks it. So while this isnt patched, I will disable Xwidgets
in my Emacs build, and these keybinds *will not* be tangled.
#+begin_src emacs-lisp :tangle no
(phundrak/evil
:keymaps 'xwidget-webkit-mode-map
"<mouse-4>" #'xwidget-webkit-scroll-down-line
"<mouse-5>" #'xwidget-webkit-scroll-up-line
"c" #'xwidget-webkit-scroll-backward
"t" #'xwidget-webkit-scroll-up-line
"s" #'xwidget-webkit-scroll-down-line
"r" #'xwidget-webkit-scroll-forward
"h" #'xwidget-webkit-goto-history
"C" #'xwidget-webkit-back
"R" #'xwidget-webkit-forward
"C-r" #'xwidget-webkit-reload
"j" nil
"k" nil
"l" nil
"H" nil
"L" nil
"C-d" #'xwidget-webkit-scroll-up
"C-u" #'xwidget-webkit-scroll-down)
:init (global-wakatime-mode))
#+end_src
** Wttr.in

View File

@@ -460,6 +460,7 @@ supported natively. I will describe them here.
(use-package tramp
:straight (tramp :type built-in :build t)
:config
<<tramp-nixos>>
<<tramp-add-yadm>>
(setopt tramp-ssh-controlmaster-options nil
tramp-verbose 0
@@ -469,6 +470,19 @@ supported natively. I will describe them here.
(cons tramp-file-name-regexp nil)))
#+end_src
*** SSHing into NixOS remotes
When using TRAMP to SSH into remote NixOS hosts, the true =$PATH= gets
truncated, rendering some binaries unavailable, such as =git= or =nil= (an
LSP server for the Nix language). To fix that, we simply need to write
the following code.
#+name: tramp-nixos
#+begin_src emacs-lisp :tangle no
(require 'tramp-sh)
(setq tramp-remote-path (append tramp-remote-path
'(tramp-own-remote-path)))
#+end_src
*** Yadm
[[https://yadm.io/][~yadm~]] is a git wrapper made to easily manage your dotfiles. It has
loads of features I dont use (the main one I like but dont use is

View File

@@ -1,10 +1,16 @@
#+title: Emacs — Packages — EXWM
#+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+ :mkdirp yes :noweb no-export
* EXWM
* EXWM (Deprecated)
#+html: ::: warning
This configuration of EXWM is no longer maintained and was deprecated
on May 24th, 2025. Therefore, it may not be up to date with the latest
versions of EXWM.
#+html: :::
So, Im finally slowly getting back to EXWM. I tried it a couple of
years ago, but that was with the SpacemacsOS layer on Spacemacs, on a
laptop which got accidentally formatted before I could save my config

View File

@@ -25,16 +25,7 @@ it bépo-compatible.
:defer t
:straight t
:config
(setopt avy-keys '(?a ?u ?i ?e ?c ?t ?s ?r ?n)
avy-dispatch-alist '((?x . avy-action-kill-move)
(?X . avy-action-kill-stay)
(?T . avy-action-teleport)
(?m . avy-action-mark)
(?C . avy-action-copy)
(?y . avy-action-yank)
(?Y . avy-action-yank-line)
(?I . avy-action-ispell)
(?z . avy-action-zap-to-char)))
(setopt avy-keys '(?a ?u ?i ?e ?c ?t ?s ?r ?n))
(defun my/avy-goto-url ()
"Jump to url with avy."
(interactive)

View File

@@ -18,34 +18,27 @@ variables to install grammars for different languages.
:hook ((bash-ts-mode c-ts-mode c++-ts-mode
html-ts-mode js-ts-mode typescript-ts-mode
json-ts-mode rust-ts-mode tsx-ts-mode python-ts-mode
css-ts-mode yaml-ts-mode) . lsp-deferred)
css-ts-mode yaml-ts-mode) . lsp-deferred))
#+end_src
#+begin_src emacs-lisp
(use-package tree-sitter-langs
:after tree-sitter
:straight t
:custom (global-tree-sitter-mode t)
:init
(setq treesit-font-lock-level 4
treesit-language-source-alist
'((astro "https://github.com/virchau13/tree-sitter-astro")
(bash "https://github.com/tree-sitter/tree-sitter-bash")
(c "https://github.com/tree-sitter/tree-sitter-c")
(cmake "https://github.com/uyha/tree-sitter-cmake")
(common-lisp "https://github.com/theHamsta/tree-sitter-commonlisp")
(cpp "https://github.com/tree-sitter/tree-sitter-cpp")
(css "https://github.com/tree-sitter/tree-sitter-css")
(csharp "https://github.com/tree-sitter/tree-sitter-c-sharp")
(elisp "https://github.com/Wilfred/tree-sitter-elisp")
(go "https://github.com/tree-sitter/tree-sitter-go")
(go-mod "https://github.com/camdencheek/tree-sitter-go-mod")
(html "https://github.com/tree-sitter/tree-sitter-html")
(js ("https://github.com/tree-sitter/tree-sitter-javascript" "master" "src"))
(json "https://github.com/tree-sitter/tree-sitter-json")
(lua "https://github.com/Azganoth/tree-sitter-lua")
(make "https://github.com/alemuller/tree-sitter-make")
(markdown "https://github.com/ikatyang/tree-sitter-markdown")
(python "https://github.com/tree-sitter/tree-sitter-python")
(r "https://github.com/r-lib/tree-sitter-r")
(rust "https://github.com/tree-sitter/tree-sitter-rust")
(toml "https://github.com/tree-sitter/tree-sitter-toml")
(tsx "https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src")
(typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src")
(yaml "https://github.com/ikatyang/tree-sitter-yaml"))))
(add-to-list 'treesit-extra-load-path
(expand-file-name "bin" tree-sitter-langs-grammar-dir)))
(use-package treesit-auto
:after tree-sitter
:straight t
:config (global-treesit-auto-mode))
(use-package treesit-fold
:after tree-sitter
:straight (:build t :host github :repo "emacs-tree-sitter/treesit-fold")
:config (treesit-fold-mode))
#+end_src
*** Appwrite
@@ -190,6 +183,7 @@ awesome!
:init
(setq lsp-keymap-prefix "C-c l"
read-process-output-max (* 3 1024 1024))
(setenv "LSP_USE_PLISTS" "true")
:hook ((c-mode . lsp-deferred)
(c++-mode . lsp-deferred)
(html-mode . lsp-deferred)
@@ -201,9 +195,18 @@ awesome!
(lsp-rust-analyzer-cargo-watch-command "clippy")
(lsp-eldoc-render-all t)
(lsp-idle-delay 0.6)
(lsp-rust-analyzer-server-display-inlay-hints t)
(lsp-use-plist t)
(lsp-enable-indentation nil)
;; Bash
(lsp-bash-highlight-parsing-errors t)
;; Nix
;; Rust
(lsp-rust-analyzer-server-display-inlay-hints t)
;; ;; Vue configuration
(lsp-vetur-emmet "always")
(lsp-vetur-format-default-formatter-html "prettier")
:config
(add-to-list 'lsp-file-watch-ignored-directories "[/\\\\]coverage\\'")
(lsp-register-client
(make-lsp-client :new-connection (lsp-tramp-connection "shellcheck")
:major-modes '(sh-mode)
@@ -305,42 +308,6 @@ that currently, ~dap-firefox~ and ~dap-chrome~ dont work correctly due to
:cwd nil))))
#+end_src
*** Langtool
LanguageTool is a great tool for catching typos and grammatical errors
in quite a few languages.
#+begin_src emacs-lisp
(use-package langtool
:defer t
:straight (:build t)
:commands (langtool-check
langtool-check-done
langtool-show-message-at-point
langtool-correct-buffer)
:custom
(langtool-default-language "en-US")
(langtool-mother-tongue "fr")
:config
(setq langtool-java-classpath (string-join '("/usr/share/languagetool"
"/usr/share/java/languagetool/*")
":")))
#+end_src
Finally, =writegood-mode= detects some simple general rules when writing
in English and can also calculate the Flesh-Kincaid levels of a
document.
#+begin_src emacs-lisp
(use-package writegood-mode
:defer t
:straight (:build t)
:hook org-mode latex-mode
:general
(phundrak/major-leader-key
:keymaps 'writegood-mode-map
"g" #'writegood-grade-level
"r" #'writegood-reading-ease))
#+end_src
**** TODO Auto detection of langtool java classpath :noexport:
** DSLs
DSLs, or /Domain Specific Languages/, are languages dedicated to some
very tasks, such as configuration languages or non-general programming
@@ -649,6 +616,13 @@ Markdown.
:defer t)
#+end_src
#+begin_src emacs-lisp
(use-package nix-ts-mode
:mode "\\.nix\\'"
:straight (:build t)
:config (add-to-list 'major-mode-remap-alist '((nix-mode . nix-ts-mode))))
#+end_src
*** Nginx
Nginx is another webserver, older and more mature than Caddy. A couple
of packages are required in order to be able to properly work with
@@ -719,6 +693,29 @@ or some I write myself.
org-plantuml-jar-path "~/.local/bin/plantuml.jar"))
#+end_src
*** QML
Im 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
@@ -892,26 +889,6 @@ configuration for StumpWM]].
:straight (:build t))
#+end_src
*** Dart
#+begin_src emacs-lisp
(use-package dart-mode
:straight (:build t)
:defer t
:hook (dart-mode . lsp-deferred)
:mode "\\.dart\\'")
#+end_src
#+begin_src emacs-lisp
(use-package lsp-dart
:straight (:build t)
:defer t
:general
(phundrak/major-leader-key
:keymaps 'dart-mode-map
:packages '(lsp-mode lsp-dart)
"l" '(:keymap lsp-command-map :which-key "lsp")))
#+end_src
*** EmacsLisp
This package displays the functions arglist or variables docstring
in the echo area at the bottom of the frame. Quite useful indeed.
@@ -1283,7 +1260,7 @@ development.
First, Im using =rust-mode= to tell it to use [[https://tree-sitter.github.io/tree-sitter/][tree sitter]].
#+begin_src emacs-lisp
(use-package rust-mode
:straight
:straight t
:defer t
:init
(setq rust-mode-treesitter-derive t))
@@ -1303,7 +1280,6 @@ several improvements on top of =rust-mode=.
(defalias 'org-babel-execute:rust #'org-babel-execute:rustic)
(add-to-list 'org-src-lang-modes '("rust" . rustic)))
(setq rustic-lsp-client 'lsp-mode)
(add-hook 'rustic-mode-hook #'tree-sitter-hl-mode)
:general
(general-define-key
:keymaps 'rustic-mode-map
@@ -1409,6 +1385,7 @@ languages in the same buffer, mainly HTML, CSS, and JavaScript.
("\\.svelte\\'" . web-mode)
("\\.ctp\\'" . web-mode)
("\\.djhtml\\'" . web-mode)
("\\.ftl\\'" . web-mode)
("\\.vue\\'" . web-mode))
:config
(setopt web-mode-markup-indent-offset 2
@@ -1456,8 +1433,7 @@ Auto-completion for ~emmet-mode~, ~html-mode~, and ~web-mode~.
(use-package astro-ts-mode
:straight (:build t)
:defer t
:init
(mapc #'treesit-install-language-grammar '(astro css tsx)))
:mode "\\.astro\\'")
#+end_src
**** CSS
@@ -1471,6 +1447,7 @@ Lets customize a bit the built-in CSS mode.
:hook (scss-mode . prettier-js-mode)
:init
(put 'css-indent-offset 'safe-local-variable #'integerp)
:config (setopt css-indent-offset 2)
:general
(phundrak/major-leader-key
:keymaps 'css-mode-map
@@ -1526,6 +1503,16 @@ activate when I open ~.less~ files by default. Lets fix that.
"l" '(:keymap lsp-command-map :which-key "lsp")))
#+end_src
I also use from time to time TailwindCSS. Lets add its LSP
configuration.
#+begin_src emacs-lisp
(use-package lsp-tailwindcss
:defer t
:after lsp
:init (setq lsp-tailwindcss-add-on-mode t)
:straight (:type git :host github :repo "merrickluo/lsp-tailwindcss"))
#+end_src
**** Javascript
~javascript-mode~ is meh at best, while ~rjsx-mode~ (Real JSX) is much
better: it supports both JavaScript and ~.jsx~ files for React and
@@ -1582,15 +1569,14 @@ dont. Lets interact with NPM through Emacs then.
#+begin_src emacs-lisp
(use-package npm-transient
:defer t
:straight (npm-transient :build t
:type git
:host github
:repo "Phundrak/npm-transient"))
;; :general
;; (phundrak/major-leader-key
;; :packages '(npm-transient rjsx-mode web-mode)
;; :keymaps '(rjsx-mode-map web-mode-map)
;; "n" #'npm-transient))
:straight (:build t
:type git
:repo "labs.phundrak.com/phundrak/npm-transient.el")
:general
(phundrak/major-leader-key
:packages '(npm-transient typescript-ts-mode web-mode)
:keymaps '(web-mode-map)
"n" #'npm-transient))
#+end_src
And finally, here is a formatter for JavaScript.
@@ -1604,8 +1590,21 @@ And finally, here is a formatter for JavaScript.
(setq prettier-js-args '("--single-quote" "--jsx-single-quote")))
#+end_src
**** Typescript
Typescript is a safer alternative to JavaScript. Lets install its major mode then.
**** Json
My configuration for Json is quite short, Im just defaulting to
Emacs built-in tree-sitter mode for any =.json= file and reducing the
indentation to 2 spaces for any file using a mode from the built-in
package =js=.
#+begin_src emacs-lisp
(use-package js
:straight (:type built-in)
:mode ("\\.json\\'" . json-ts-mode)
:config (setopt js-indent-level 2))
#+end_src
**** TypeScript
TypeScript is a safer alternative to JavaScript. Lets install its major mode then.
#+begin_src emacs-lisp
(use-package typescript-mode
:defer t
@@ -1672,7 +1671,12 @@ simplest fix is to run the following command:
#+begin_src sh
npm install --save-dev vue-tsc typescript
#+end_src
Or replace =npm= with whichever package manager you prefer.
If you want to work with Vue in Emacs, =web-mode= is more than enough
when paired with an LSP server.
With the Nix package manager, the Vue 3 LSP server is
=nodePackages."@vue/language-server"= and not =vue-language-server=. The
latter is for Vue 2.

View File

@@ -19,7 +19,7 @@ and which GPG key I sign my commits with.
[user]
email = lucien@phundrak.com
name = Lucien Cartier-Tilet
signingkey = BD7789E705CB8DCA
signingkey = ~/.ssh/id_ed25519.pub
#+end_src
In terms of core configuration, I simply set Emacs as my default Git
@@ -365,6 +365,9 @@ want to run the one you most likely wanted to run.
** Tools
*** Sendemail
With git, it is possible to directly send commits as patches to a
mailing list by email. However, it needs to know how. Ill just
configure my mail server here.
#+begin_src conf-unix
[sendemail]
smtpserver = mail.phundrak.com
@@ -373,12 +376,24 @@ want to run the one you most likely wanted to run.
smtpserverport = 587
#+end_src
Git also needs to know my password for my email address. Obviously, I
wont share it here, but I am using a helper which will itself return
my password to git.
#+begin_src conf-unix
[credentials "smtp://lucien@phundrak.com@mail.phundrak.com:587"]
helper = "secret-tool lookup password email_lucien-phundrak-com"
#+end_src
*** Magit
This configuration is specific for what I consider to be the best git
client out there, [[https://magit.vc/][Magit]]. Not just because it is an Emacs git client,
but also because it is quite transparent in terms of what happens with
the command line, but it also lets you see so much more easily what
happens with so many niceties. Rebases, including interactive rebases,
are a breeze with Magit.
I also can interact with some Git forges, including GitHub. Here are
some configurations recommended by Magit for Git.
#+begin_src conf-unix
[magithub]
online = true
@@ -391,12 +406,17 @@ want to run the one you most likely wanted to run.
*** GPG
#+begin_src conf-unix
[gpg]
program = gpg2
format = ssh
[gpg "ssh"]
allowedSignersFile = "~/.ssh/allowed_signers"
[commit]
gpgsign = true
#+end_src
*** Merge
I like to use Emacs for everything (is it surprising?). Lets declare
the merge tool =ediff= and use it in my git configuration.
#+begin_src conf-unix
[merge]
tool = ediff

View File

@@ -1,10 +1,17 @@
#+title: Neofetch
#+title: Neofetch (Deprecated)
#+setupfile: headers
#+PROPERTY: header-args :noweb yes :exports code :tangle no :exports none
#+PROPERTY: header-args:sh :tangle ~/.config/neofetch/config.conf :exports code
#+PROPERTY: header-args:sh+ :noweb yes :padline no :mkdirp yes
* Neofetch
* Neofetch (Deprecated)
#+html: ::: warning
This configuration of Neofetch is no longer maintained and was
deprecated on May 24th, 2025. Therefore, it may not be up to date with
the latest versions of Neofetch.
#+html: :::
[[https://github.com/dylanaraps/neofetch][Neofetch]] is a CLI utility used to display system information. It was
written in Bash, and thus its configuration file is written as a Bash
script too. This document was written with org-mode, and my

View File

@@ -2,7 +2,14 @@
#+setupfile: headers
#+PROPERTY: header-args:conf :exports code :mkdirp yes :tangle ~/.config/picom/picom.conf
* Picom
* Picom (deprecated)
#+html: ::: warning
This configuration of Picom is no longer maintained and was deprecated
on May 24th, 2025. Therefore, it may not be up to date with the latest
versions of Picom.
#+html: :::
Picom is the successor to Compton, a standalone compositor for Xorg. It provides
compositing for WM that do not provide any, such as i3. I am currently using
[[https://github.com/ibhagwan/picom][ibhagwans fork of compton]] which provides the ~dual-kawase~ blur from [[https://github.com/tryone144/compton][tryones

View File

@@ -1,10 +1,17 @@
#+title: StumpWM
#+title: StumpWM (Deprecated)
#+setupfile: ../headers
#+property: header-args:emacs-lisp :tangle no :exports results :cache yes :noweb yes
[[file:../img/stumpwm.png]]
* StumpWM
* StumpWM (deprecated)
#+html: ::: warning
This configuration of StumpWM is no longer maintained and was
deprecated on May 24th, 2025. Therefore, it may not be up to date with
the latest versions of StumpWM.
#+html: :::
** Introduction
*** What is StumpWM?
[[https://stumpwm.github.io/][StumpWM]] is a tiling window manager inheriting from [[http://www.nongnu.org/ratpoison/][RatPoison]], written

4471
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -11,14 +11,14 @@
"license": "AGPL-3.0",
"private": true,
"devDependencies": {
"@vuepress/bundler-vite": "2.0.0-rc.14",
"@vuepress/plugin-umami-analytics": "2.0.0-rc.41",
"@vuepress/theme-default": "2.0.0-rc.41",
"vuepress": "2.0.0-rc.14",
"vuepress-plugin-search-pro": "2.0.0-rc.52"
"@vuepress/bundler-vite": "2.0.0-rc.26",
"@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",
"vuepress": "2.0.0-rc.26"
},
"dependencies": {
"less": "^4.2.0",
"less": "^4.4.2",
"nord": "^0.2.1"
},
"scripts": {

View File

@@ -1,9 +0,0 @@
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
nativeBuildInputs = with pkgs.buildPackages; [
corepack
];
shellHook = ''
yarn set version stable
'';
}