feat!: switch from Vuepress to Vitepress
deploy / deploy (push) Successful in 4m45s

This commit is contained in:
2026-06-24 10:57:57 +02:00
parent 9903f5bed5
commit a46efb3e3f
45 changed files with 1691 additions and 10238 deletions
+10
View File
@@ -0,0 +1,10 @@
root = true
[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
[*.{js,ts,json,mts,css}]
indent_style = space
indent_size = 2
+2 -5
View File
@@ -1,7 +1,4 @@
export DIRENV_WARN_TIMEOUT=20s
#!/usr/bin/env bash
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
dotenv
use devenv
+26
View File
@@ -0,0 +1,26 @@
name: deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: cachix/install-nix-action@v31
with:
nix_path: nixpkgs=channel:nixos-unstable
- uses: cachix/cachix-action@v16
with:
name: phundrak
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
extraPullNames: devenv
- name: Install devenv
run: nix profile add nixpkgs#devenv
- name: Deploy to Cloudflare Pages
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
run: devenv tasks run website:deploy
-40
View File
@@ -1,40 +0,0 @@
name: deploy
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: purcell/setup-emacs@master
with:
version: 29.1
- name: "Export org to md"
run: emacs -Q --script export.el
- uses: actions/setup-node@v4
with:
node-version: 20.x
- run: corepack enable
- run: npm ci
- run: npm run build
- name: "Deploy to Cloudflare Pages"
uses: cloudflare/pages-action@v1
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.ACCOUNT_ID }}
projectName: config-phundrak-com
directory: docs/.vuepress/dist/
githubToken: ${{ secrets.TOKEN }}
# - name: "Deploy to remote server"
# uses: appleboy/scp-action@v0.1.4
# with:
# host: ${{ secrets.HOST }}
# username: ${{ secrets.USERNAME }}
# key: ${{ secrets.KEY }}
# port: ${{ secrets.PORT }}
# source: docs/.vuepress/dist/*
# target: ${{ secrets.DESTPATH }}
# strip_components: 3
+21 -3
View File
@@ -1,13 +1,31 @@
node_modules
/docs/**/*.md
# Vitepress
/.vitepress/cache/
/.vitepress/dist/
/docs/.vitepress/
/docs/img
/docs/eittlandic/img
/docs/proto-nyqy/img
.temp
.cache
/docs/**/*.md
/docs/.vuepress/dist/
/.yarn/
# Devenv
.devenv*
devenv.local.nix
devenv.local.yaml
# direnv
.direnv
# pre-commit
.pre-commit-config.yaml
# Devenv
.devenv*
devenv.local.nix
devenv.local.yaml
# direnv
.direnv
+6 -2
View File
@@ -1,9 +1,13 @@
{
"$schema": "https://json.schemastore.org/prettierrc",
"semi": true,
"tabWidth": 2,
"useTabs": false,
"semi": true,
"singleQuote": true,
"trailingComma": "all",
"quoteProps": "as-needed",
"printWidth": 100,
"trailingComma": "es5",
"bracketSpacing": true,
"bracketSameLine": true,
"arrowParens": "always"
}
+21
View File
@@ -0,0 +1,21 @@
<template>
<figure>
<img :alt="alt" :src="src" />
<figcaption><slot></slot></figcaption>
</figure>
</template>
<script setup lang="ts">
const props = defineProps<{
src: string;
alt?: string;
}>();
</script>
<style>
figcaption {
text-align: center;
margin-top: 1rem;
margin-bottom: 1rem;
}
</style>
+33
View File
@@ -0,0 +1,33 @@
// -*- mode: typescript; -*-
import { defineConfig, HeadConfig } from 'vitepress';
import appHead from './head';
import { sidebar } from './sidebar';
import { nav } from './nav';
export default defineConfig({
title: "Pundraks Dotfiles",
cleanUrls: true,
description: 'Pundraks Linux configuration',
head: appHead as HeadConfig[],
srcDir: './docs',
themeConfig: {
sidebar,
nav,
outline: {
level: 'deep'
},
search: {
provider: 'local'
},
},
markdown: {
image: {
lazyLoading: true
},
linkify: true,
typographer: true,
headers: {
level: [1, 2, 3, 4, 5]
}
},
})
+79
View File
@@ -0,0 +1,79 @@
interface Head {
type?: 'image/png';
async?: boolean,
src?: string,
'data-website-id'?: string
}
interface Favicon extends Head {
rel: 'apple-touch-icon' | 'icon' | 'manifest';
href: string;
sizes?: string;
}
interface Meta extends Head {
property?: string,
name?: string,
content: string
}
const favicons: Favicon[] = [
{ rel: 'apple-touch-icon', sizes: '57x57', href: '/img/meta/apple-icon-57x57.png' },
{ rel: 'apple-touch-icon', sizes: '60x60', href: '/img/meta/apple-icon-60x60.png' },
{ rel: 'apple-touch-icon', sizes: '72x72', href: '/img/meta/apple-icon-72x72.png' },
{ rel: 'apple-touch-icon', sizes: '76x76', href: '/img/meta/apple-icon-76x76.png' },
{ rel: 'apple-touch-icon', sizes: '114x114', href: '/img/meta/apple-icon-114x114.png' },
{ rel: 'apple-touch-icon', sizes: '120x120', href: '/img/meta/apple-icon-120x120.png' },
{ rel: 'apple-touch-icon', sizes: '144x144', href: '/img/meta/apple-icon-144x144.png' },
{ rel: 'apple-touch-icon', sizes: '152x152', href: '/img/meta/apple-icon-152x152.png' },
{ rel: 'apple-touch-icon', sizes: '180x180', href: '/img/meta/apple-icon-180x180.png' },
{ rel: 'icon', type: 'image/png', sizes: '192x192', href: '/img/meta/android-icon-192x192.png' },
{ rel: 'icon', type: 'image/png', sizes: '32x32', href: '/img/meta/favicon-32x32.png' },
{ rel: 'icon', type: 'image/png', sizes: '96x96', href: '/img/meta/favicon-96x96.png' },
{ rel: 'icon', type: 'image/png', sizes: '16x16', href: '/img/meta/favicon-16x16.png' },
{ rel: 'manifest', href: '/img/meta/manifest.json' },
];
const meta: Meta[] = [
{
name: 'author',
content: 'Lucien Cartier-Tilet',
},
{
property: 'og:image',
content: 'https://cdn.phundrak.com/img/rich_preview.png',
},
{
property: 'og:title',
content: 'Pundraks Dotfiles',
},
{
property: 'og:description',
content: 'Pundraks Linux configuration',
},
{
name: 'fediverse:creator',
content: '@phundrak@mastodon.phundrak.com',
},
{
name: 'twitter:card',
content: 'summary',
},
{
name: 'twitter:site',
content: '@phundrak',
},
{
name: 'twitter:creator',
content: '@phundrak',
},
{ name: 'msapplication-TileColor', content: '#3b4252' },
{ name: 'msapplication-TileImage', content: '/ms-icon-144x144.png' },
{ name: 'theme-color', content: '#3b4252' },
]
const appHead: (string | Head)[][] = favicons.map((head) => ['link', head])
meta.map((item) => appHead.push(['meta', item]))
export default appHead;
+8
View File
@@ -0,0 +1,8 @@
import { DefaultTheme } from "vitepress";
export const nav: DefaultTheme.NavItem[] = [
{ text: 'About', link: '/about' },
{ text: 'Configs', link: '/' },
{ text: 'Deprecated Configs', link: '/deprecated/', activeMatch: '/deprecated/*' },
{ text: 'Source', link: 'https://labs.phundrak.com/phundrak/config.phundrak.com' },
]
+59
View File
@@ -0,0 +1,59 @@
import { DefaultTheme } from "vitepress";
export const sidebar: DefaultTheme.Sidebar = {
'/': [
{ text: 'Index', link: '/' },
{ text: 'Custom Scripts', link: '/scripts' },
{ text: 'Desktop', link: '/desktop' },
{ text: 'General Shell Config', link: '/shell' },
{ text: 'Fish', link: '/fish' },
{ text: 'Git', link: '/git' },
{ text: 'Hyprland', link: '/hyprland' },
{ text: 'MPD', link: '/mpd' },
{ text: 'Tmux', link: '/tmux' },
{
text: 'Emacs',
items: [
{ text: 'Index', link: '/emacs/' },
{ text: 'Basic Config', link: '/emacs/basic-config' },
{ text: 'Custom Elisp', link: '/emacs/custom-elisp' },
{ text: 'Package Managers', link: '/emacs/package-manager' },
{ text: 'Keybind Managers', link: '/emacs/keybinding-managers' },
{ text: 'Autocompletion', link: '/emacs/packages/autocompletion' },
{ text: 'Applications', link: '/emacs/packages/applications' },
{ text: 'Editing', link: '/emacs/packages/editing' },
{ text: 'Built-in', link: '/emacs/packages/emacs-builtin' },
{ text: 'Making My Life Easier', link: '/emacs/packages/helpful' },
{ text: 'LaTeX', link: '/emacs/packages/latex' },
{ text: 'Org Mode', link: '/emacs/packages/org' },
{ text: 'Programming', link: '/emacs/packages/programming' },
{ text: 'Visual Config', link: '/emacs/packages/visual-config' },
{ text: 'Misc', link: '/emacs/packages/misc' },
{ text: 'Keybindings', link: '/emacs/keybindings' },
]
}
],
'/deprecated/': [
{ text: 'AwesomeWM', link: '/deprecated/awesome' },
{ text: 'Bootstrap Script', link: '/deprecated/bootstrap' },
{ text: 'EXWM', link: '/emacs/packages/exwm' },
{ text: 'i3', link: '/deprecated/i3' },
{ text: 'Nano', link: '/deprecated/nano' },
{ text: 'Neofetch', link: '/neofetch' },
{ text: 'Picom', link: '/picom' },
{ text: 'Polybar', link: '/deprecated/polybar' },
{
text: 'StumpWM', items: [
{ text: 'Index', link: '/stumpwm/' },
{ text: 'Basic Configuration', link: '/stumpwm/init' },
{ text: 'Colours', link: '/stumpwm/colours' },
{ text: 'Modeline', link: '/stumpwm/mode-line' },
{ text: 'Groups and Placement', link: '/stumpwm/groups' },
{ text: 'Theme', link: '/stumpwm/theme' },
{ text: 'Commands', link: '/stumpwm/commands' },
{ text: 'Keybinds', link: '/stumpwm/keybindings' },
{ text: 'Utilities', link: '/stumpwm/utilities' },
]
}
]
}
+10
View File
@@ -0,0 +1,10 @@
import { Theme } from "vitepress";
import DefaultTheme from "vitepress/theme";
import ImgFigure from "../components/ImgFigure.vue";
export default {
extends: DefaultTheme,
enhanceApp({ app }) {
app.component('ImgFigure', ImgFigure);
}
} satisfies Theme;
+9 -9
View File
@@ -3,11 +3,11 @@
"devenv": {
"locked": {
"dir": "src/modules",
"lastModified": 1777679510,
"narHash": "sha256-uG8LPb1useAwa0cjO5sEkYhCSPjbWiCH3DyNxQLVSck=",
"lastModified": 1783538213,
"narHash": "sha256-jNjKlmrejUrBgVAeiavlMLlkmC7ZEv1D9nhfuwMW5Q8=",
"owner": "cachix",
"repo": "devenv",
"rev": "bc8b21628907c726c74094cedc439c10a455cdb7",
"rev": "d1fb321e73048d0e1e2b523580268ebb3df2ae90",
"type": "github"
},
"original": {
@@ -22,11 +22,11 @@
"nixpkgs-src": "nixpkgs-src"
},
"locked": {
"lastModified": 1776852779,
"narHash": "sha256-WwO/ITisCXwyiRgtktZgv3iGhAGO+IB5Av4kKCwezR0=",
"lastModified": 1783345554,
"narHash": "sha256-LZhOm4kqjHUnwP4CNHpaqqEVcumGNd1PvOEOad8LkS0=",
"owner": "cachix",
"repo": "devenv-nixpkgs",
"rev": "ec3063523dcd911aeadb50faa589f237cdab5853",
"rev": "6004ea8c229fe9d41b21c6f4c76bf6c2e10771dd",
"type": "github"
},
"original": {
@@ -39,11 +39,11 @@
"nixpkgs-src": {
"flake": false,
"locked": {
"lastModified": 1776329215,
"narHash": "sha256-a8BYi3mzoJ/AcJP8UldOx8emoPRLeWqALZWu4ZvjPXw=",
"lastModified": 1783279667,
"narHash": "sha256-/NAkDSsve+GNM0Bt6tleJdCGfsTlK89nPjkVOzZMo0s=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "b86751bc4085f48661017fa226dee99fab6c651b",
"rev": "f205b5574fd0cb7da5b702a2da51507b7f4fdd1b",
"type": "github"
},
"original": {
+39 -8
View File
@@ -1,9 +1,40 @@
{ pkgs, ... }:
{
languages.typescript.enable = true;
packages = [ pkgs.nodejs_20 ];
scripts.export.exec = ''
${pkgs.emacs}/bin/emacs -Q --script export.el
'';
{ pkgs, ... }: {
languages.javascript = {
enable = true;
npm.enable = false;
pnpm.enable = true;
};
dotenv.enable = true;
processes.dev.exec = "pnpm dev";
cachix = {
push = "phundrak";
pull = [
"phundrak"
"devenv"
];
};
tasks = {
"website:install-deps".exec = "pnpm ci";
"website:export-md" = {
exec = "${pkgs.emacs}/bin/emacs -Q --script export.el";
execIfModified = [ "docs/**/*.org" ];
};
"website:build" = {
exec = "pnpm build";
after = [
"website:export-md@succeeded"
"website:install-deps@succeeded"
];
};
"website:deploy" = {
exec = ''
if [[ -z "''${CLOUDFLARE_API_TOKEN:-}" ]]; then
echo "Error: CLOUDFLARE_API_TOKEN is not set. Run this in CI only."
exit 1
fi
${pkgs.wrangler}/bin/wrangler pages deploy
'';
after = [ "website:build@succeeded" ];
};
};
}
+6 -3
View File
@@ -3,11 +3,14 @@ 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 using non-OSS software, you can set allow_unfree to true.
# allow_unfree: true
# If you're not willing to allow unsupported packages:
# allow_unsupported_system: false
# If you're willing to use a package that's vulnerable
# permittedInsecurePackages:
# permitted_insecure_packages:
# - "openssl-1.1.1w"
# If you have more than one devenv you can merge them
+4 -7
View File
@@ -1,6 +1,6 @@
#+TITLE: i3
#+setupfile: ../headers
#+PROPERTY: header-args :noweb yes :exports code :tangle ~/.config/i3/config
#+PROPERTY: header-args :noweb yes :exports code :tangle no
#+PROPERTY: header-args:emacs-lisp :exports none :tangle no
* i3
@@ -17,14 +17,11 @@ It is to be noted I am using [[https://github.com/Airblader/i3][Airbladers fo
#+END_SRC
** Screenshots
#+CAPTION: Desktop with Neofetch in the terminal
[[./img/neofetch.png.webp]]
#+html: <ImgFigure src="/img/neofetch.png.webp">Desktop with Neofetch in the terminal</ImgFigure>
#+CAPTION: Desktop with Emacs opened
[[./img/emacs.png.webp]]
#+html: <ImgFigure src="/img/emacs.png.webp">Desktop with Emacs opened</ImgFigure>
#+CAPTION: Desktop with Rofi
[[./img/rofi.png.webp]]
#+html: <ImgFigure src="/img/rofi.png.webp">Desktop with Rofi</ImgFigure>
** Variables declaration
*** Global
File diff suppressed because it is too large Load Diff
+2 -4
View File
@@ -6,7 +6,7 @@
* Emacs Configuration
[[file:./img/emacs.svg]]
#+html: <ImgFigure src="/img/emacs.svg">Emacs Screenshot</ImgFigure>
** Introduction
After a couple of years using Spacemacs and a failed attempt at
@@ -29,9 +29,7 @@ general-purpose programming language. Therefore, if you want to do
something in Emacs, with enough Elisp you can do it --- if its not in
Emacs already, that is.
#+attr_html: :alt Dammit Emacs… :loading lazy
#+caption: [[https://xkcd.com/378/][XKCD n°378]]: Real Programmers
[[file:./img/real_programmers.png]]
#+html: <ImgFigure src="/img/emacs.svg" alt="XKCD n°378: Real Programmers">Dammit Emacs…</ImgFigure>
** A Warning Before You Proceed
:PROPERTIES:
+21
View File
@@ -83,6 +83,7 @@ Undefining some stuff to make keybind prefixes work correctly.
<<general-keybindings-gen(table=keybindings-refactor, prefix="r")>>
<<general-keybindings-gen(table=keybindings-toggle, prefix="t ")>>
<<general-keybindings-gen(table=keybindings-text, prefix="T")>>
<<general-keybindings-gen(table=keybindings-vc, prefix="v")>>
<<general-keybindings-gen(table=keybindings-windows, prefix="w")>>
<<general-keybindings-gen(table=keybindings-quit, prefix="q")>>)
#+end_src
@@ -499,6 +500,26 @@ My toggle keybindings are prefixed by ~t~.
| is | set-input-method | |
*** TODO Rewrite =my/modify-frame-alpha-background/body= :noexport:
** VCS
Magit is awesome, but I rarely use it nowadays in favour of [[https://jj-vcs.github.io/][Jujutsu]].
And for that, I use =vc.el= in Emacs thanks to =vc-jj= (see [[file:./packages/applications.md#Jujutsu][my Jujutsu
config for Emacs]]). But this is only half the story, let me now set my
keybinds for =vc.el=. ethey are all prefixed by =v=.
#+name: keybindings-vc
| Key | Function | Description | Package |
|-----+-----------------------+-------------+---------|
| a | vc-annotate | | vc |
| r | vc-revset | | vc |
| | | VCS | |
| j | | jujutsu | |
| ja | vc-jj-abandon-change | abandon | vc-jj |
| jb | | bookmarks | |
| jbd | vc-jj-bookmark-delete | delete | vc-jj |
| jbr | vc-jj-bookmark-rename | rename | vc-jj |
| jbs | vc-jj-bookmark-set | set | vc-jj |
| je | vc-jj-edit-change | edit | vc-jj |
| jn | vc-jj-new-change | new | vc-jj |
** Windows
A couple of keybindings are hidden from which-key, otherwise theres not
+20 -9
View File
@@ -1530,9 +1530,10 @@ compatible with git repositories. In fact, I pretty much dont use git
anymore, jj (abbreviation of Jujutsu) has almost completely replaced
git for me.
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.
I like Magits interface, as you can see in my [[file:./applications.md#magit][Magit]] config. But
reimplementing it entirely probably wont happen on my end (lack of
time, mainly), so Ill leave that up to people more motivated than me.
In the meantime, I can reimplement some of its API with =majjit=.
#+begin_src emacs-lisp
(use-package majjit
:defer t
@@ -1544,6 +1545,22 @@ bringing some Magit features to jujutsu.
:custom ((majjit-default-directory "~/code/")))
#+end_src
Speaking of other projects others did better, I use =vc-jj=, which
brings basic jujutsu support to =project.el= and =vc.el=. And Ill just
add my grain of salt to force =project.el= to recognize jujutsu
repositories as projects.
#+begin_src emacs-lisp
(use-package vc-jj
:straight (:build t)
:after '(project vc)
:config
(add-to-list 'project-vc-extra-root-markers ".jj")
:init
(require 'project)
(require 'vc)
(require 'vc-jj))
#+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.
@@ -1556,12 +1573,6 @@ 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
*** Forge
Forge acts as an interface for GitHub, GitLab, and Bitbucket inside
Magit. A lot of possibilities are present, you can read issues and
+1 -1
View File
@@ -175,7 +175,7 @@ compilation buffer, as well as enable some syntax highlighting.
#+end_src
** Eshell
[[file:../img/emacs-eshell.svg]]
#+html: <ImgFigure src="/img/emacs-eshell.svg">Eshell in Emacs</ImgFigure>
Eshell is a built-in shell available from Emacs which I use almost as
often as fish. Some adjustments are necessary to make it fit my taste
+2 -2
View File
@@ -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 no
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
* EXWM (Deprecated)
@@ -47,7 +47,7 @@ easily.
In order to launch Emacs with EXWM with ~startx~, I need a ~xinit~ file.
This one is exported to ~$HOME/.xinitrc.emacs~.
#+begin_src sh :tangle ~/.xinitrc.emacs :shebang "#!/bin/sh"
#+begin_src sh :tangle no :shebang "#!/bin/sh"
xhost +SI:localuser:$USER
# Set fallback cursor
+30 -3
View File
@@ -455,6 +455,10 @@ 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,
sometimes I need to use Markdown because not everyone uses org-mode,
unfortunately.
I prefer to use =pandoc= to =markdown= as my =markdown-command=, as it
better handles modern Markdown, including Githubs dialect, which
=markdown= has troubles with.
#+begin_src emacs-lisp
(use-package markdown-mode
:defer t
@@ -465,6 +469,9 @@ unfortunately.
("\\.mdx\\'" . markdown-mode))
:hook (markdown-mode . orgtbl-mode)
:hook (markdown-mode . visual-line-mode)
:config
(setq markdown-fontify-code-blocks-natively t
markdown-command '("," "pandoc" "--from=markdown" "--to=html5"))
:general
(phundrak/evil
:keymaps 'markdown-mode-map
@@ -550,9 +557,7 @@ unfortunately.
"xp" #'markdown-insert-pre
"xP" #'markdown-pre-region
"xs" #'markdown-insert-strike-through
"xq" #'markdown-blockquote-region)
:config
(setq markdown-fontify-code-blocks-natively t))
"xq" #'markdown-blockquote-region))
#+end_src
Since most of my Markdown files are related to GitHub, Id like to be
@@ -704,6 +709,28 @@ When editing some scripts though, I need to use the built-in ~shell-mode~.
:mode "/\\(Cargo.lock\\|\\.cargo/config\\)\\'")
#+end_src
*** Typst
[[https://typst.app/][Typst]] is an attempt at making a simpler LaTeX alternative with a quite
simple language that still has some programming capabilities. In my
case, I use [[https://codeberg.org/meow_king/typst-ts-mode/][typst-ts-mode]] to get a major mode for Typst, relying on
[[https://github.com/uben0/tree-sitter-typst][uben0s Typst treesitter module]].
#+begin_src emacs-lisp
(use-package typst-ts-mode
:defer t
:straight (:build t))
#+end_src
I also wrote a package that extends =lsp-mode= to support [[https://github.com/Myriad-Dreamin/tinymist][tinymist]] as an
LSP server for Typst.
#+begin_src emacs-lisp
(use-package lsp-typst
:after lsp-mode
:mode "\\.typ\\'"
:hook (typst-ts-mode . lsp-deferred)
:straight (:build t :type git :repo "labs.phundrak.com/phundrak/lsp-typst"))
#+end_src
*** Yaml
#+begin_src emacs-lisp
(use-package yaml-mode
+7 -8
View File
@@ -2,7 +2,7 @@
#+title: Git
#+setupfile: headers
#+PROPERTY: header-args :exports code :tangle no
#+PROPERTY: header-args:conf-unix :mkdirp yes :tangle ~/.config/git/config :exports code :noweb yes
#+PROPERTY: header-args:conf-unix :mkdirp yes :tangle no :exports code :noweb yes
* Git
** Basic configuration
@@ -46,24 +46,23 @@ This is entirely a matter of personal preferences, but I like to use
*** Better Diffing
Gits diffing algorithm evolved and improved over time, but its
default algorithm did not. Take this example, from [[https://blog.gitbutler.com/how-git-core-devs-configure-git/][this Gitbutler
article]]:
default algorithm did not. Take this example, from [[https://blog.gitbutler.com/how-git-core-devs-configure-git/][this Gitbutler article]]:
[[file:./img/git/diff-default.png]]
#+html: <ImgFigure src="/img/git/diff-default.png">Default git diff output</ImgFigure>
Not really readable, I think youll agree. I mean, you can sort of see
what happens, but really, we just moved the =h2= styling below the
=.event= styling. Git seems to think otherwise. However, lets turn on
the =histogram= algorithm on:
[[file:./img/git/diff-histogram.png]]
#+html: <ImgFigure src="/img/git/diff-histogram.png">git diff output with histogram algorithm</ImgFigure>
Immediately, we have a much clearer picture of what happened! But Ill
let you on another secret: you can make it even clearer by using the
=colorMoved= option to color differently lines that were moved from
lines that were actually modified!
[[file:./img/git/diff-moved.png]]
#+html: <ImgFigure src="/img/git/diff-moved.png">git diff output with histogram algorithm and specific colours for moved blocks</ImgFigure>
Ill also add a configuration to make it easier to see what is being
compared using =mnemonicPrefix=. As per =man git-config=:
@@ -127,11 +126,11 @@ show you the conflicting incoming and HEAD changes, but it will also
show you what the code was before either modified the conflicting
area. Not a must-have feature, but a nice one to have. Compare this:
[[file:./img/git/merge-default.png]]
#+html: <ImgFigure src="/img/git/merge-default.png">Default appearance of a git conflict during a merge</ImgFigure>
To this:
[[file:./img/git/merge-zdiff3.png]]
#+html: <ImgFigure src="/img/git/merge-zdiff3.png">Same git conflict but with zdiff3</ImgFigure>
We have a new line beginning with =|||||||= with the original line
below. Also, its nice to see Emacs supports this syntax out of the
+7
View File
@@ -6,6 +6,13 @@ Hi, Im Pundrak (pronounced /PUN-drak/, or more exactly {{{phon(pʰynɖak̚
also known as Lucien Cartier-Tilet. If you want to know more about me,
you can head to my [[https://phundrak.com/en][main website]].
#+html: ::: warning
This website is currently not maintained, aside from the Emacs part of
it. If you want to see my current Linux configuration, head over to my
[[https://labs.phundrak.com/phundrak/nix-config][NixOS configuration]]. This website will be, at some point, rewritten to
reflect it.
#+html: :::
This website is my collection of dotfiles for my daily GNU/Linux
environment, tweaked to my liking. The sidebar will act as an index of
the various tools I use and their configuration.

Before

Width:  |  Height:  |  Size: 323 KiB

After

Width:  |  Height:  |  Size: 323 KiB

Before

Width:  |  Height:  |  Size: 592 KiB

After

Width:  |  Height:  |  Size: 592 KiB

Before

Width:  |  Height:  |  Size: 4.3 MiB

After

Width:  |  Height:  |  Size: 4.3 MiB

Before

Width:  |  Height:  |  Size: 114 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Before

Width:  |  Height:  |  Size: 415 KiB

After

Width:  |  Height:  |  Size: 415 KiB

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Before

Width:  |  Height:  |  Size: 395 KiB

After

Width:  |  Height:  |  Size: 395 KiB

+1 -1
View File
@@ -2,7 +2,7 @@
#+setupfile: ../headers
#+property: header-args:emacs-lisp :tangle no :exports results :cache yes :noweb yes
[[file:../img/stumpwm.png]]
#+html: <ImgFigure src="/img/stumpwm.png">StumpWM Screenshot</ImgFigure>
* StumpWM (deprecated)
-5337
View File
File diff suppressed because it is too large Load Diff
+5 -18
View File
@@ -1,30 +1,17 @@
{
"name": "config.phundrak.com",
"version": "1.0.0",
"version": "2.0.0",
"description": "",
"main": "index.js",
"repository": {
"type": "git",
"url": "https://labs.phundrak.com/phundrak/conlang.phundrak.com"
},
"repository": "https://labs.phundrak.com/phundrak/config.phundrak.com",
"author": "Lucien Cartier-Tilet <lucien@phundrak.com>",
"license": "AGPL-3.0",
"private": true,
"devDependencies": {
"@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",
"baseline-browser-mapping": "^2.10.0",
"sass-embedded": "^1.97.3",
"vuepress": "2.0.0-rc.26"
},
"dependencies": {
"less": "^4.4.2",
"nord": "^0.2.1"
"vitepress": "^2.0.0-alpha.18"
},
"scripts": {
"dev": "vuepress dev docs",
"build": "vuepress build docs"
"dev": "vitepress dev",
"build": "vitepress build"
}
}
+1252
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -0,0 +1,3 @@
allowBuilds:
'@parcel/watcher': true
esbuild: true
+7
View File
@@ -0,0 +1,7 @@
// -*- mode: json-ts; -*-
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "config-phundrak-com",
"pages_build_output_dir": ".vitepress/dist/",
"compatibility_date": "2026-07-11"
}