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)" eval "$(devenv direnvrc)"
dotenv
# The use_devenv function supports passing flags to the devenv command
# For example: use devenv --impure --option services.postgres.enable:bool true
use devenv 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 node_modules
/docs/**/*.md
# Vitepress
/.vitepress/cache/
/.vitepress/dist/
/docs/.vitepress/
/docs/img
/docs/eittlandic/img
/docs/proto-nyqy/img
.temp .temp
.cache .cache
/docs/**/*.md
/docs/.vuepress/dist/
/.yarn/
# Devenv # Devenv
.devenv* .devenv*
devenv.local.nix devenv.local.nix
devenv.local.yaml
# direnv
.direnv
# pre-commit
.pre-commit-config.yaml
# Devenv
.devenv*
devenv.local.nix
devenv.local.yaml
# direnv # direnv
.direnv .direnv
+6 -2
View File
@@ -1,9 +1,13 @@
{ {
"$schema": "https://json.schemastore.org/prettierrc",
"semi": true,
"tabWidth": 2, "tabWidth": 2,
"useTabs": false, "useTabs": false,
"semi": true,
"singleQuote": true, "singleQuote": true,
"trailingComma": "all", "quoteProps": "as-needed",
"printWidth": 100,
"trailingComma": "es5",
"bracketSpacing": true, "bracketSpacing": true,
"bracketSameLine": true,
"arrowParens": "always" "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": { "devenv": {
"locked": { "locked": {
"dir": "src/modules", "dir": "src/modules",
"lastModified": 1777679510, "lastModified": 1783538213,
"narHash": "sha256-uG8LPb1useAwa0cjO5sEkYhCSPjbWiCH3DyNxQLVSck=", "narHash": "sha256-jNjKlmrejUrBgVAeiavlMLlkmC7ZEv1D9nhfuwMW5Q8=",
"owner": "cachix", "owner": "cachix",
"repo": "devenv", "repo": "devenv",
"rev": "bc8b21628907c726c74094cedc439c10a455cdb7", "rev": "d1fb321e73048d0e1e2b523580268ebb3df2ae90",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -22,11 +22,11 @@
"nixpkgs-src": "nixpkgs-src" "nixpkgs-src": "nixpkgs-src"
}, },
"locked": { "locked": {
"lastModified": 1776852779, "lastModified": 1783345554,
"narHash": "sha256-WwO/ITisCXwyiRgtktZgv3iGhAGO+IB5Av4kKCwezR0=", "narHash": "sha256-LZhOm4kqjHUnwP4CNHpaqqEVcumGNd1PvOEOad8LkS0=",
"owner": "cachix", "owner": "cachix",
"repo": "devenv-nixpkgs", "repo": "devenv-nixpkgs",
"rev": "ec3063523dcd911aeadb50faa589f237cdab5853", "rev": "6004ea8c229fe9d41b21c6f4c76bf6c2e10771dd",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -39,11 +39,11 @@
"nixpkgs-src": { "nixpkgs-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1776329215, "lastModified": 1783279667,
"narHash": "sha256-a8BYi3mzoJ/AcJP8UldOx8emoPRLeWqALZWu4ZvjPXw=", "narHash": "sha256-/NAkDSsve+GNM0Bt6tleJdCGfsTlK89nPjkVOzZMo0s=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "b86751bc4085f48661017fa226dee99fab6c651b", "rev": "f205b5574fd0cb7da5b702a2da51507b7f4fdd1b",
"type": "github" "type": "github"
}, },
"original": { "original": {
+38 -7
View File
@@ -1,9 +1,40 @@
{ pkgs, ... }: { pkgs, ... }: {
languages.javascript = {
{ enable = true;
languages.typescript.enable = true; npm.enable = false;
packages = [ pkgs.nodejs_20 ]; pnpm.enable = true;
scripts.export.exec = '' };
${pkgs.emacs}/bin/emacs -Q --script export.el 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: nixpkgs:
url: github:cachix/devenv-nixpkgs/rolling url: github:cachix/devenv-nixpkgs/rolling
# If you're using non-OSS software, you can set allowUnfree to true. # If you're using non-OSS software, you can set allow_unfree to true.
# allowUnfree: 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 # If you're willing to use a package that's vulnerable
# permittedInsecurePackages: # permitted_insecure_packages:
# - "openssl-1.1.1w" # - "openssl-1.1.1w"
# If you have more than one devenv you can merge them # If you have more than one devenv you can merge them
+4 -7
View File
@@ -1,6 +1,6 @@
#+TITLE: i3 #+TITLE: i3
#+setupfile: ../headers #+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 #+PROPERTY: header-args:emacs-lisp :exports none :tangle no
* i3 * i3
@@ -17,14 +17,11 @@ It is to be noted I am using [[https://github.com/Airblader/i3][Airbladers fo
#+END_SRC #+END_SRC
** Screenshots ** Screenshots
#+CAPTION: Desktop with Neofetch in the terminal #+html: <ImgFigure src="/img/neofetch.png.webp">Desktop with Neofetch in the terminal</ImgFigure>
[[./img/neofetch.png.webp]]
#+CAPTION: Desktop with Emacs opened #+html: <ImgFigure src="/img/emacs.png.webp">Desktop with Emacs opened</ImgFigure>
[[./img/emacs.png.webp]]
#+CAPTION: Desktop with Rofi #+html: <ImgFigure src="/img/rofi.png.webp">Desktop with Rofi</ImgFigure>
[[./img/rofi.png.webp]]
** Variables declaration ** Variables declaration
*** Global *** Global
File diff suppressed because it is too large Load Diff
+2 -4
View File
@@ -6,7 +6,7 @@
* Emacs Configuration * Emacs Configuration
[[file:./img/emacs.svg]] #+html: <ImgFigure src="/img/emacs.svg">Emacs Screenshot</ImgFigure>
** Introduction ** Introduction
After a couple of years using Spacemacs and a failed attempt at 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 something in Emacs, with enough Elisp you can do it --- if its not in
Emacs already, that is. Emacs already, that is.
#+attr_html: :alt Dammit Emacs… :loading lazy #+html: <ImgFigure src="/img/emacs.svg" alt="XKCD n°378: Real Programmers">Dammit Emacs…</ImgFigure>
#+caption: [[https://xkcd.com/378/][XKCD n°378]]: Real Programmers
[[file:./img/real_programmers.png]]
** A Warning Before You Proceed ** A Warning Before You Proceed
:PROPERTIES: :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-refactor, prefix="r")>>
<<general-keybindings-gen(table=keybindings-toggle, prefix="t ")>> <<general-keybindings-gen(table=keybindings-toggle, prefix="t ")>>
<<general-keybindings-gen(table=keybindings-text, 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-windows, prefix="w")>>
<<general-keybindings-gen(table=keybindings-quit, prefix="q")>>) <<general-keybindings-gen(table=keybindings-quit, prefix="q")>>)
#+end_src #+end_src
@@ -499,6 +500,26 @@ My toggle keybindings are prefixed by ~t~.
| is | set-input-method | | | is | set-input-method | |
*** TODO Rewrite =my/modify-frame-alpha-background/body= :noexport: *** 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 ** Windows
A couple of keybindings are hidden from which-key, otherwise theres not 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 anymore, jj (abbreviation of Jujutsu) has almost completely replaced
git for me. git for me.
I like Magits interface, as you can see in my [[file:./applications.md#magit][Magit]] config. I like Magits interface, as you can see in my [[file:./applications.md#magit][Magit]] config. But
Therefore, lets install =majjit=, my slow and scuffed attempt at reimplementing it entirely probably wont happen on my end (lack of
bringing some Magit features to jujutsu. 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 #+begin_src emacs-lisp
(use-package majjit (use-package majjit
:defer t :defer t
@@ -1544,6 +1545,22 @@ bringing some Magit features to jujutsu.
:custom ((majjit-default-directory "~/code/"))) :custom ((majjit-default-directory "~/code/")))
#+end_src #+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 Though, Ill be honest, I generally prefer to use Jujutsu in the
terminal, unlike git. Something I do use Emacs for, however, is terminal, unlike git. Something I do use Emacs for, however, is
writing my commit messages. writing my commit messages.
@@ -1556,12 +1573,6 @@ writing my commit messages.
:init (add-to-list 'auto-mode-alist '("\\.jjdescription\\'" . jjdescription-mode))) :init (add-to-list 'auto-mode-alist '("\\.jjdescription\\'" . jjdescription-mode)))
#+end_src #+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
Forge acts as an interface for GitHub, GitLab, and Bitbucket inside Forge acts as an interface for GitHub, GitLab, and Bitbucket inside
Magit. A lot of possibilities are present, you can read issues and 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 #+end_src
** Eshell ** 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 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 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) #+title: Emacs — Packages — EXWM (Deprecated)
#+setupfile: ../../headers #+setupfile: ../../headers
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code #+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 #+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
* EXWM (Deprecated) * EXWM (Deprecated)
@@ -47,7 +47,7 @@ easily.
In order to launch Emacs with EXWM with ~startx~, I need a ~xinit~ file. In order to launch Emacs with EXWM with ~startx~, I need a ~xinit~ file.
This one is exported to ~$HOME/.xinitrc.emacs~. 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 xhost +SI:localuser:$USER
# Set fallback cursor # 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, Markdown due to its far superior power and abilities. But still,
sometimes I need to use Markdown because not everyone uses org-mode, sometimes I need to use Markdown because not everyone uses org-mode,
unfortunately. 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 #+begin_src emacs-lisp
(use-package markdown-mode (use-package markdown-mode
:defer t :defer t
@@ -465,6 +469,9 @@ unfortunately.
("\\.mdx\\'" . markdown-mode)) ("\\.mdx\\'" . markdown-mode))
:hook (markdown-mode . orgtbl-mode) :hook (markdown-mode . orgtbl-mode)
:hook (markdown-mode . visual-line-mode) :hook (markdown-mode . visual-line-mode)
:config
(setq markdown-fontify-code-blocks-natively t
markdown-command '("," "pandoc" "--from=markdown" "--to=html5"))
:general :general
(phundrak/evil (phundrak/evil
:keymaps 'markdown-mode-map :keymaps 'markdown-mode-map
@@ -550,9 +557,7 @@ unfortunately.
"xp" #'markdown-insert-pre "xp" #'markdown-insert-pre
"xP" #'markdown-pre-region "xP" #'markdown-pre-region
"xs" #'markdown-insert-strike-through "xs" #'markdown-insert-strike-through
"xq" #'markdown-blockquote-region) "xq" #'markdown-blockquote-region))
:config
(setq markdown-fontify-code-blocks-natively t))
#+end_src #+end_src
Since most of my Markdown files are related to GitHub, Id like to be 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\\)\\'") :mode "/\\(Cargo.lock\\|\\.cargo/config\\)\\'")
#+end_src #+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 *** Yaml
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package yaml-mode (use-package yaml-mode
+7 -8
View File
@@ -2,7 +2,7 @@
#+title: Git #+title: Git
#+setupfile: headers #+setupfile: headers
#+PROPERTY: header-args :exports code :tangle no #+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 * Git
** Basic configuration ** Basic configuration
@@ -46,24 +46,23 @@ This is entirely a matter of personal preferences, but I like to use
*** Better Diffing *** Better Diffing
Gits diffing algorithm evolved and improved over time, but its 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 default algorithm did not. Take this example, from [[https://blog.gitbutler.com/how-git-core-devs-configure-git/][this Gitbutler article]]:
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 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 what happens, but really, we just moved the =h2= styling below the
=.event= styling. Git seems to think otherwise. However, lets turn on =.event= styling. Git seems to think otherwise. However, lets turn on
the =histogram= algorithm 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 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 let you on another secret: you can make it even clearer by using the
=colorMoved= option to color differently lines that were moved from =colorMoved= option to color differently lines that were moved from
lines that were actually modified! 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 Ill also add a configuration to make it easier to see what is being
compared using =mnemonicPrefix=. As per =man git-config=: 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 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: 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: 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 We have a new line beginning with =|||||||= with the original line
below. Also, its nice to see Emacs supports this syntax out of the 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, 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]]. 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 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 environment, tweaked to my liking. The sidebar will act as an index of
the various tools I use and their configuration. 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 #+setupfile: ../headers
#+property: header-args:emacs-lisp :tangle no :exports results :cache yes :noweb yes #+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) * 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", "name": "config.phundrak.com",
"version": "1.0.0", "version": "2.0.0",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"repository": { "repository": "https://labs.phundrak.com/phundrak/config.phundrak.com",
"type": "git",
"url": "https://labs.phundrak.com/phundrak/conlang.phundrak.com"
},
"author": "Lucien Cartier-Tilet <lucien@phundrak.com>", "author": "Lucien Cartier-Tilet <lucien@phundrak.com>",
"license": "AGPL-3.0", "license": "AGPL-3.0",
"private": true, "private": true,
"devDependencies": { "devDependencies": {
"@vuepress/bundler-vite": "2.0.0-rc.26", "vitepress": "^2.0.0-alpha.18"
"@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"
}, },
"scripts": { "scripts": {
"dev": "vuepress dev docs", "dev": "vitepress dev",
"build": "vuepress build docs" "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"
}