Compare commits

...

No commits in common. "main" and "public" have entirely different histories.

164 changed files with 25914 additions and 2351 deletions

View file

@ -1,33 +0,0 @@
on:
pull_request:
types: [ closed, merged ]
jobs:
cleanup:
runs-on: x86_64
container:
image: alpine:latest
steps:
- name: Environment setup
run: |
apk add git nodejs jq coreutils curl tree gawk grep
- name: Public repo pull
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.PAGES_TOKEN }}
ref: public
- name: Render website
run: |
export GITHUB_PR_NAME=$(grep -l ${{ github.sha }} previews/*/git_sha.txt | awk -F '/' '{print $2}')
echo $GITHUB_PR_NAME >> $GITHUB_ENV
rm -rf previews/$GITHUB_PR_NAME || true
cd previews
tree -d -H '.' -L 1 --noreport --charset utf-8 -T "Versions" -o index.html
- name: Website upload
run: |
git config user.name "forgejo-actions[bot]"
git config user.email "dev@ayakael.net"
git add .
git commit -m "Clean-up $GITHUB_PR_NAME"
git push

View file

@ -1,46 +0,0 @@
on:
push:
branches:
- 'main'
jobs:
render:
runs-on: x86_64
container:
image: alpine:latest
steps:
- name: Environment setup
run: |
apk add git ikiwiki po4a perl-yaml-tiny tree nodejs tzdata pandoc perl-json
rm -f /etc/localtime
ln -s /usr/share/zoneinfo/America/Montreal /etc/localtime
- name: Repo pull
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.PAGES_TOKEN }}
- name: Public repo pull
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: public
path: public
token: ${{ secrets.PAGES_TOKEN }}
- name: Render website
run: |
rm -Rf public/*
ikiwiki --setup ikiwiki.setup --getctime
- name: Website upload
run: |
rm -Rf public/.forgejo
mkdir -p public/.forgejo/workflows
cp .forgejo/workflows/deploy.yaml public/.forgejo/workflows/.
git log -1 --pretty=%B > commit.txt
cd public
date > generated.txt
# Note: the following account information will not work on GHES
git config user.name "forgejo-actions[bot]"
git config user.email "dev@ayakael.net"
git add .
git commit -F ../commit.txt
git push

View file

@ -1,49 +0,0 @@
on:
pull_request:
types: [ assigned, opened, synchronize, reopened ]
jobs:
preview:
runs-on: x86_64
container:
image: alpine:latest
steps:
- name: Environment setup
run: |
apk add git ikiwiki po4a perl-yaml-tiny tree nodejs jq coreutils curl
echo "GITHUB_PR_NAME=$(curl -Ls ${{ github.server_url }}/api/v1/repos/${{ github.repository }}/pulls/${{ github.ref_name }} | jq .title | tr ' ' '-' | tr -d ':' | tr -d '"' | tr '[:upper:]' '[:lower:]' | tr '/' '-')" >> $GITHUB_ENV
- name: Repo pull
uses: actions/checkout@v4
with:
fetch-depth: 1
token: ${{ secrets.PAGES_TOKEN }}
- name: Public repo pull
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: public
path: public
token: ${{ secrets.PAGES_TOKEN }}
- name: Render website
run: |
rm -rf public/previews/$GITHUB_PR_NAME || true
mkdir -p public/previews/$GITHUB_PR_NAME
sed -i "s|destdir.*|destdir: ./public/previews/$GITHUB_PR_NAME|" ikiwiki.setup
ikiwiki --setup ikiwiki.setup
cd public/previews
tree -d -H '.' -L 1 --noreport --charset utf-8 -T "Versions" -o index.html
- name: Website upload
run: |
rm -Rf public/.forgejo
mkdir -p public/.forgejo/workflows
cp .forgejo/workflows/deploy.yaml public/.forgejo/workflows/.
git log -1 --pretty=%B > commit.txt
cd public
date > previews/$GITHUB_PR_NAME/generated.txt
echo ${{ github.sha }} > previews/$GITHUB_PR_NAME/git_sha.txt
# Note: the following account information will not work on GHES
git config user.name "forgejo-actions[bot]"
git config user.email "dev@ayakael.net"
git add .
git commit -F ../commit.txt
git push

3
.gitignore vendored
View file

@ -1,3 +0,0 @@
.ikiwiki
public/
tools/http-server/

View file

@ -1,136 +0,0 @@
# Bootstrap features
This page will contain a display of various features from Bootstrap.
They require some manual HTML tags.
Note that not all Markdown parsers allow Markdown markup inside all HTML tags.
In the case of ikiwiki, adding `markdown="1"` to `div` elements usually allows markup to be used inside them.
For a full list of features provided by Bootstrap 4, go to <http://v4-alpha.getbootstrap.com/getting-started/introduction/>.
<div class="jumbotron" markdown="1">
## Jumbotron
It's big and in your face.
---
You can still use Markdown syntax inside HTML blocks, if you are careful.
<a class="btn btn-primary btn-large" href="#">Button</a>
</div>
## Labels <span class="label label-info">Hi!</span>
Span elements work inside Markdown headings.
<div class="card card-block" markdown="1">
## Cards
Put a border with soft round corners around your content.
</div>
## Card decks
These require some more work.
You can use the `\[[!img]]` directive, but make sure to add `class="card-img-top"` or `class="card-img-bottom"` where appropriate.
For images in cards to work properly, they need to have their width forced to 100% of their container.
This is done in the `style.css` file that comes with ikistrap.
Another issue is that due to all the nested HTML tags, even with `markdown="1"`, Markdown markup does not get parsed anymore.
<div class="card-deck">
<div class="card-deck-wrapper">
<div class="card">
[[!img Lemonshark.jpg alt="Lemon shark" class="card-img-top"]]
<div class="card-block">
<p class="card-text">
A lemon shark and his little friends are out for a swim.
</p>
<p><a href="#" class="btn btn-danger">Escape</a></p>
</div>
</div>
<div class="card">
[[!img Anemones.jpg alt="Anemones" class="card-img-top"]]
<div class="card-block">
<p class="card-text">
Anemones look really nice and are much less dangerous than lemon sharks.
</p>
<p><a href="#" class="btn btn-success">Admire</a></p>
</div>
</div>
<div class="card">
[[!img Sea_Star.jpg alt="Sea star" class="card-img-top"]]
<div class="card-block">
<p class="card-text">
Sea stars are also less dangerous than lemon sharks, but they are slightly more dangerous than
anemones, <em>especially</em> when stepped on.
</p>
<p><a href="#" class="btn btn-warning">Sidestep</a></p>
</div>
</div>
</div>
</div>
## Card columns
These can be created by writing the outer card-columns `div` elements yourself,
and using `\[[!inline]]` with `template="simplecard"` to generate the cards.
<div class="card-columns">
[[!inline pages="sample_text/* and !*/Discussion" template="simplecard" feeds="no"]]
</div>
## Carousel
These can be created by writing the outer two carousel `div` elements yourself,
and using `\[[!inline]]` with `template="carouselpage"` to generate the carousel items.
<p>
<div id="carousel-example-pages" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators"></ol>
<div class="carousel-inner" role="listbox">
[[!inline pages="sample_text/* and !*/Discussion" template="carouselpage" feeds="no"]]
</div>
<a class="left carousel-control" href="#carousel-example-pages" role="button" data-slide="prev">
<span class="icon-prev" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#carousel-example-pages" role="button" data-slide="next">
<span class="icon-next" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
</p>
If you only want to show images, use `template="carouselimage"`, and select your images directly with the `pages` parameter.
<p>
<div id="carousel-example-images" class="carousel slide" data-ride="carousel">
<div class="carousel-inner" role="listbox">
[[!inline pages="*.jpg" template="carouselimage" feeds="no"]]
</div>
<a class="left carousel-control" href="#carousel-example-images" role="button" data-slide="prev">
<span class="icon-prev" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#carousel-example-images" role="button" data-slide="next">
<span class="icon-next" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
</p>
## Progress bars
Ikistrap also provides a progress directive which works in the same way as the progress plugin,
but it also allows an extra class to be specified to change the style per bar.
[[!progress totalpages="* and !*/Discussion" donepages="*/Discussion"]]
[[!progress percent="33%"]]
[[!progress percent="66%" class="progress-success progress-striped"]]
## Other stuff
Goes here.

View file

@ -0,0 +1,282 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Bootstrap features - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="manifest" href="../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../">
<img alt="Ayakael" src="../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../index.en.html">Home</a></li>
<li><a href="../blog/index.en.html">Blog</a></li>
<li><a href="../guides/index.en.html">Guides</a></li>
<li><a href="../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<h1 id="bootstrap-features">Bootstrap features</h1>
<p>This page will contain a display of various features from Bootstrap.
They require some manual HTML tags. Note that not all Markdown parsers
allow Markdown markup inside all HTML tags. In the case of ikiwiki,
adding <code>markdown="1"</code> to <code>div</code> elements usually
allows markup to be used inside them. For a full list of features
provided by Bootstrap 4, go to <a
href="http://v4-alpha.getbootstrap.com/getting-started/introduction/"
class="uri">http://v4-alpha.getbootstrap.com/getting-started/introduction/</a>.</p>
<section id="jumbotron" class="jumbotron" data-markdown="1">
<h2>Jumbotron</h2>
<p>Its big and in your face.</p>
<hr />
<p>You can still use Markdown syntax inside HTML blocks, if you are
careful.</p>
<p><a class="btn btn-primary btn-large" href="#">Button</a></p>
</section>
<h2 id="labels-hi">Labels <span class="label label-info">Hi!</span></h2>
<p>Span elements work inside Markdown headings.</p>
<section id="cards" class="card card-block" data-markdown="1">
<h2>Cards</h2>
<p>Put a border with soft round corners around your content.</p>
</section>
<h2 id="card-decks">Card decks</h2>
<p>These require some more work. You can use the <code>[[!img ]]</code>
directive, but make sure to add <code>class="card-img-top"</code> or
<code>class="card-img-bottom"</code> where appropriate. For images in
cards to work properly, they need to have their width forced to 100% of
their container. This is done in the <code>style.css</code> file that
comes with ikistrap.</p>
<p>Another issue is that due to all the nested HTML tags, even with
<code>markdown="1"</code>, Markdown markup does not get parsed
anymore.</p>
<div class="card-deck">
<div class="card-deck-wrapper">
<div class="card">
[[!img <span class="error">Error: Image::Magick is not
installed</span>]]
<div class="card-block">
<p class="card-text">
A lemon shark and his little friends are out for a swim.
</p>
<p>
<a href="#" class="btn btn-danger">Escape</a>
</p>
</div>
</div>
<div class="card">
[[!img <span class="error">Error: Image::Magick is not
installed</span>]]
<div class="card-block">
<p class="card-text">
Anemones look really nice and are much less dangerous than lemon sharks.
</p>
<p>
<a href="#" class="btn btn-success">Admire</a>
</p>
</div>
</div>
<div class="card">
[[!img <span class="error">Error: Image::Magick is not
installed</span>]]
<div class="card-block">
<p class="card-text">
Sea stars are also less dangerous than lemon sharks, but they are
slightly more dangerous than anemones, <em>especially</em> when stepped
on.
</p>
<p>
<a href="#" class="btn btn-warning">Sidestep</a>
</p>
</div>
</div>
</div>
</div>
<h2 id="card-columns">Card columns</h2>
<p>These can be created by writing the outer card-columns
<code>div</code> elements yourself, and using <code>[[!inline ]]</code>
with <code>template="simplecard"</code> to generate the cards.</p>
<div class="card-columns">
<p>[[!inline <span class="error">Error: failed to process template
simplecard.tmpl: template simplecard.tmpl not found
</span>]]</p>
</div>
<h2 id="carousel">Carousel</h2>
<p>These can be created by writing the outer two carousel
<code>div</code> elements yourself, and using <code>[[!inline ]]</code>
with <code>template="carouselpage"</code> to generate the carousel
items.</p>
<p>
<div id="carousel-example-pages" class="carousel slide"
data-ride="carousel">
<ol class="carousel-indicators">
</ol>
<div class="carousel-inner" role="listbox">
<p>[[!inline <span class="error">Error: failed to process template
carouselpage.tmpl: template carouselpage.tmpl not found
</span>]]</p>
</div>
<p><a class="left carousel-control" href="#carousel-example-pages" role="button" data-slide="prev">
<span class="icon-prev" aria-hidden="true"></span> <span
class="sr-only">Previous</span> </a>
<a class="right carousel-control" href="#carousel-example-pages" role="button" data-slide="next">
<span class="icon-next" aria-hidden="true"></span> <span
class="sr-only">Next</span> </a></p>
</div>
</p>
<p>If you only want to show images, use
<code>template="carouselimage"</code>, and select your images directly
with the <code>pages</code> parameter.</p>
<p>
<div id="carousel-example-images" class="carousel slide"
data-ride="carousel">
<div class="carousel-inner" role="listbox">
<p>[[!inline <span class="error">Error: failed to process template
carouselimage.tmpl: template carouselimage.tmpl not found
</span>]]</p>
</div>
<p><a class="left carousel-control" href="#carousel-example-images" role="button" data-slide="prev">
<span class="icon-prev" aria-hidden="true"></span> <span
class="sr-only">Previous</span> </a>
<a class="right carousel-control" href="#carousel-example-images" role="button" data-slide="next">
<span class="icon-next" aria-hidden="true"></span> <span
class="sr-only">Next</span> </a></p>
</div>
</p>
<h2 id="progress-bars">Progress bars</h2>
<p>Ikistrap also provides a progress directive which works in the same
way as the progress plugin, but it also allows an extra class to be
specified to change the style per bar.</p>
<div class="progress">
<div class="progress-done" style="width: 0%">
0%
</div>
</div>
<div class="progress">
<div class="progress-done" style="width: 33%">
33%
</div>
</div>
<div class="progress">
<div class="progress-done" style="width: 66%">
66%
</div>
</div>
<h2 id="other-stuff">Other stuff</h2>
<p>Goes here.</p>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2024-09-17T18:41:08Z" class="dt-published">Tue Sep 17 14:41:08 2024</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/Bootstrap_features.mdwn">Edited <time datetime="2024-09-17T18:41:08Z">Tue Sep 17 14:41:08 2024</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=Bootstrap_features&t=Bootstrap%20features" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

View file

@ -1,10 +0,0 @@
# Calendar
This is an example of the ikiwiki calendar function.
Here is a monthly calendar:
[[!calendar type="month"]]
And this is a yearly calendar:
[[!calendar type="year"]]

141
Calendars/index.html Normal file
View file

@ -0,0 +1,141 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Calendars - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="manifest" href="../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../">
<img alt="Ayakael" src="../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../index.en.html">Home</a></li>
<li><a href="../blog/index.en.html">Blog</a></li>
<li><a href="../guides/index.en.html">Guides</a></li>
<li><a href="../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<h1 id="calendar">Calendar</h1>
<p>This is an example of the ikiwiki calendar function. Here is a
monthly calendar:</p>
<p>[[!calendar type=“month”]]</p>
<p>And this is a yearly calendar:</p>
<p>[[!calendar type=“year”]]</p>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2024-09-17T18:41:08Z" class="dt-published">Tue Sep 17 14:41:08 2024</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/Calendars.mdwn">Edited <time datetime="2024-09-17T18:41:08Z">Tue Sep 17 14:41:08 2024</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=Calendars&t=Calendars" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

View file

@ -1,3 +0,0 @@
# Comments
This is an example of a page where comments are allowed.

137
Comments/index.html Normal file
View file

@ -0,0 +1,137 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Comments - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="manifest" href="../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../">
<img alt="Ayakael" src="../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../index.en.html">Home</a></li>
<li><a href="../blog/index.en.html">Blog</a></li>
<li><a href="../guides/index.en.html">Guides</a></li>
<li><a href="../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<h1 id="comments">Comments</h1>
<p>This is an example of a page where comments are allowed.</p>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2024-09-17T18:41:08Z" class="dt-published">Tue Sep 17 14:41:08 2024</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/Comments.mdwn">Edited <time datetime="2024-09-17T18:41:08Z">Tue Sep 17 14:41:08 2024</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=Comments&t=Comments" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

View file

@ -1,9 +0,0 @@
# Inline pages
Here is an example of inline pages using the default inlining theme:
[[!inline pages="sample_text/* and !*/Discussion" reverse="yes" limit="3"]]
Here is an example of inlining with actions enabled:
[[!inline pages="sample_text/* and !*/Discussion" reverse="yes" skip="3" limit="2" actions="1"]]

387
Inline_pages/index.html Normal file
View file

@ -0,0 +1,387 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Inline pages - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="manifest" href="../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../">
<img alt="Ayakael" src="../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../index.en.html">Home</a></li>
<li><a href="../blog/index.en.html">Blog</a></li>
<li><a href="../guides/index.en.html">Guides</a></li>
<li><a href="../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<h1 id="inline-pages">Inline pages</h1>
<p>Here is an example of inline pages using the default inlining
theme:</p>
<p><div class="feedlink">
</div>
<article class="inlinepage">
<section class="inlineheader">
<header class="header">
<a href="../sample_text/Sed_eget/">Sed eget</a>
</header>
</section>
<section class="inlinecontent">
<p>Sed eget turpis a pede tempor malesuada. Vivamus quis mi at leo
pulvinar hendrerit. Cum sociis natoque penatibus et magnis dis
parturient montes, nascetur ridiculus mus. Pellentesque aliquet lacus
vitae pede. Nullam mollis dolor ac nisi. Phasellus sit amet urna.
Praesent pellentesque sapien sed lacus. Donec lacinia odio in odio. In
sit amet elit. Maecenas gravida interdum urna. Integer pretium, arcu
vitae imperdiet facilisis, elit tellus tempor nisi, vel feugiat ante
velit sit amet mauris. Vivamus arcu. Integer pharetra magna ac lacus.
Aliquam vitae sapien in nibh vehicula auctor. Suspendisse leo mauris,
pulvinar sed, tempor et, consequat ac, lacus. Proin velit. Nulla semper
lobortis mauris. Duis urna erat, ornare et, imperdiet eu, suscipit sit
amet, massa. Nulla nulla nisi, pellentesque at, egestas quis, fringilla
eu, diam.</p>
</section>
<footer class="inlinefooter">
<span class="pagedate">
Posted <time datetime="2024-09-17T18:41:08Z" class="dt-published">Tue Sep 17 14:41:08 2024</time>
</span>
</footer>
</article>
<article class="inlinepage">
<section class="inlineheader">
<header class="header">
<a href="../sample_text/Nulla_facilisi/">Nulla facilisi</a>
</header>
</section>
<section class="inlinecontent">
<p>Nulla facilisi. Nunc volutpat. Vestibulum ante ipsum primis in
faucibus orci luctus et ultrices posuere cubilia Curae; Ut sit amet orci
vel mauris blandit vehicula. Nullam quis enim. Integer dignissim viverra
velit. Curabitur in odio. In hac habitasse platea dictumst. Ut
consequat, tellus eu volutpat varius, justo orci elementum dolor, sed
imperdiet nulla tellus ut diam. Vestibulum ipsum ante, malesuada quis,
tempus ac, placerat sit amet, elit.</p>
</section>
<footer class="inlinefooter">
<span class="pagedate">
Posted <time datetime="2024-09-17T18:41:08Z" class="dt-published">Tue Sep 17 14:41:08 2024</time>
</span>
<nav class="tags">
Tags:
<span class="createlink">Cicero</span>
<span class="createlink">Latin</span>
<span class="createlink">typesetting</span>
</nav>
</footer>
</article>
<article class="inlinepage">
<section class="inlineheader">
<span class="author">
Cicero
</span>
<header class="header">
<a href="../sample_text/Lorem_ipsum/">Lorem ipsum</a>
</header>
</section>
<section class="inlinecontent">
<p>[[!meta <span class="error">Error: cannot parse date/time: 45
B.C.</span>]]</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed at ante.
Mauris eleifend, quam a vulputate dictum, massa quam dapibus leo, eget
vulputate orci purus ut lorem. In fringilla mi in ligula. Pellentesque
aliquam quam vel dolor. Nunc adipiscing. Sed quam odio, tempus ac,
aliquam molestie, varius ac, tellus. Vestibulum ut nulla aliquam risus
rutrum interdum. Pellentesque lorem. Curabitur sit amet erat quis risus
feugiat viverra. Pellentesque augue justo, sagittis et, lacinia at,
venenatis non, arcu. Nunc nec libero. In cursus dictum risus. Etiam
tristique nisl a nulla. Ut a orci. Curabitur dolor nunc, egestas at,
accumsan at, malesuada nec, magna.</p>
</section>
<footer class="inlinefooter">
<span class="pagedate">
Posted <time datetime="2024-09-17T18:41:08Z" class="dt-published">Tue Sep 17 14:41:08 2024</time>
</span>
</footer>
</article>
</p>
<p>Here is an example of inlining with actions enabled:</p>
<p><div class="feedlink">
</div>
<article class="inlinepage">
<section class="inlineheader">
<header class="header">
<a href="../sample_text/Donec_semper/">Donec semper</a>
</header>
</section>
<section class="inlinecontent">
<p>Donec semper, sem nec tristique tempus, justo neque commodo nisl, ut
gravida sem tellus suscipit nunc. Aliquam erat volutpat. Ut tincidunt
pretium elit. Aliquam pulvinar. Nulla cursus. Suspendisse potenti. Etiam
condimentum hendrerit felis. Duis iaculis aliquam enim. Donec dignissim
augue vitae orci. Curabitur luctus felis a metus. Cum sociis natoque
penatibus et magnis dis parturient montes, nascetur ridiculus mus. In
varius neque at enim. Suspendisse massa nulla, viverra in, bibendum
vitae, tempor quis, lorem.</p>
</section>
<footer class="inlinefooter">
<span class="pagedate">
Posted <time datetime="2024-09-17T18:41:08Z" class="dt-published">Tue Sep 17 14:41:08 2024</time>
</span>
</footer>
</article>
<article class="inlinepage">
<section class="inlineheader">
<header class="header">
<a href="../sample_text/Donec_dapibus/">Donec dapibus</a>
</header>
</section>
<section class="inlinecontent">
<p>Donec dapibus orci sit amet elit. Maecenas rutrum ultrices lectus.
Aliquam suscipit, lacus a iaculis adipiscing, eros orci pellentesque
nisl, non pharetra dolor urna nec dolor. Integer cursus dolor vel magna.
Integer ultrices feugiat sem. Proin nec nibh. Duis eu dui quis nunc
sagittis lobortis. Fusce pharetra, enim ut sodales luctus, lectus arcu
rhoncus purus, in fringilla augue elit vel lacus. In hac habitasse
platea dictumst. Aliquam erat volutpat. Fusce iaculis elit id tellus. Ut
accumsan malesuada turpis. Suspendisse potenti. Vestibulum lacus augue,
lobortis mattis, laoreet in, varius at, nisi. Nunc gravida. Phasellus
faucibus. In hac habitasse platea dictumst. Integer tempor lacus eget
lectus. Praesent fringilla augue fringilla dui.</p>
</section>
<footer class="inlinefooter">
<span class="pagedate">
Posted <time datetime="2024-09-17T18:41:08Z" class="dt-published">Tue Sep 17 14:41:08 2024</time>
</span>
</footer>
</article>
</p>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2024-09-17T18:41:08Z" class="dt-published">Tue Sep 17 14:41:08 2024</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/Inline_pages.mdwn">Edited <time datetime="2024-09-17T18:41:08Z">Tue Sep 17 14:41:08 2024</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=Inline_pages&t=Inline%20pages" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

View file

@ -1,82 +0,0 @@
# ayakael.net
Upstream: https://ayakael.net/forge/ayakael.net/actions
![Build Status](https://ayakael.net/forge/ayakael.net/badges/workflows/pages.yaml/badge.svg)
![Push Status](https://ayakael.net/forge/ayakael.net/badges/workflows/deploy.yaml/badge.svg)
## Forgejo Actions
This project's static Pages are built by Forgejo Actions, following the steps
defined in [`.forgejo/workflows/pages.yaml`](.forgejo/workflows/pages.yaml).
That builds this website using ikiwiki, and pushes the build artifacts to the
`public` branch.
The `public` branch has its own workflow following steps defined in
[`forgejo/workflows/deploy.yaml`](https://ayakael.net/forge/ayakael.net/src/branch/public/.forgejo/workflows/deploy.yaml)
that uploads the artifacts to a remote HTTP server for deployment in
production. This workflow is automatically updated from `main` so that `public`
should never be manually modified.
The deployment is done by a simple remote git push via SSH to a non-bare repo
where `git config receive.denyCurrentBranch` is set as `updateInstead`. This
allows this repo to be checked out as `public`, allowing it to be a root for
your favorite HTTP server.
The following secrets are expected to be set for operation:
* PAGES_PRIVKEY: SSH private key that is used to push to the HTTP server's git
repo
* PAGES_TOKEN: Forgejo application token used to push to `public` branch.
The following variables are expected to be set for operation:
* PAGES_TARGET: SSH target for HTTP server's git repo, following this format:
user@example.net:/path/to/http/repo
## Building locally
To work locally with this project, you'll have to follow the steps below:
1. Fork, clone or download this project
1. Install ikiwiki:
* [mac][]
* [linux][]
* [source][]
1. Generate the website: `ikiwiki --setup ikiwiki.setup`
1. Start http-server: `./test-server.sh`
1. Preview your project: open 127.0.0.1:8080 in your browser
Read more at ikiwiki's [documentation][].
## Contributing
1. Fork the main ayakael.net repo.
2. Checkout the forked repository.
- `git clone ssh://git@ayakael.net/$USER/ayakael.net`
- `cd ayakael.net`
3. Make your changes.
4. Do local build.
- `ikiwiki --setup ikiwiki.setup`
5. Fix any errors that come up and rebuild until it works locally.
6. Commit the changes to the git repo in a git branch
- `git checkout -b <name>`
- `git add` changes
- `git commit -m 'content/index: descriptive description'`
- `git push`
7. Create a merge request with your changes by following link in server response.
8. Once the tests in the merge-request pass, and reviewers are happy, your changes
will be merged.
[ikiwiki]: https://ikiwiki.info/
[source]: https://ikiwiki.info/install/
[linux]: https://ikiwiki.info/setup/
[mac]: https://ikiwiki.info/tips/ikiwiki_on_mac_os_x/
[documentation]: https://ikiwiki.info/

217
README/index.html Normal file
View file

@ -0,0 +1,217 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>README - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="manifest" href="../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../">
<img alt="Ayakael" src="../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../index.en.html">Home</a></li>
<li><a href="../blog/index.en.html">Blog</a></li>
<li><a href="../guides/index.en.html">Guides</a></li>
<li><a href="../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<h1>ayakael.net</h1>
<p>Upstream: https://ayakael.net/forge/ayakael.net/actions</p>
<p><img src="https://ayakael.net/forge/ayakael.net/badges/workflows/pages.yaml/badge.svg" alt="Build Status" />
<img src="https://ayakael.net/forge/ayakael.net/badges/workflows/deploy.yaml/badge.svg" alt="Push Status" /></p>
<h2>Forgejo Actions</h2>
<p>This project's static Pages are built by Forgejo Actions, following the steps
defined in <a href=".forgejo/workflows/pages.yaml"><code>.forgejo/workflows/pages.yaml</code></a>.
That builds this website using ikiwiki, and pushes the build artifacts to the
<code>public</code> branch.</p>
<p>The <code>public</code> branch has its own workflow following steps defined in
<a href="https://ayakael.net/forge/ayakael.net/src/branch/public/.forgejo/workflows/deploy.yaml"><code>forgejo/workflows/deploy.yaml</code></a>
that uploads the artifacts to a remote HTTP server for deployment in
production. This workflow is automatically updated from <code>main</code> so that <code>public</code>
should never be manually modified.</p>
<p>The deployment is done by a simple remote git push via SSH to a non-bare repo
where <code>git config receive.denyCurrentBranch</code> is set as <code>updateInstead</code>. This
allows this repo to be checked out as <code>public</code>, allowing it to be a root for
your favorite HTTP server.</p>
<p>The following secrets are expected to be set for operation:
* PAGES_PRIVKEY: SSH private key that is used to push to the HTTP server's git
repo
* PAGES_TOKEN: Forgejo application token used to push to <code>public</code> branch.</p>
<p>The following variables are expected to be set for operation:
* PAGES_TARGET: SSH target for HTTP server's git repo, following this format:
user@example.net:/path/to/http/repo</p>
<h2>Building locally</h2>
<p>To work locally with this project, you'll have to follow the steps below:</p>
<ol>
<li>Fork, clone or download this project</li>
<li>Install ikiwiki:
<ul>
<li><a href="https://ikiwiki.info/tips/ikiwiki_on_mac_os_x/">mac</a></li>
<li><a href="https://ikiwiki.info/setup/">linux</a></li>
<li><a href="https://ikiwiki.info/install/">source</a></li>
</ul></li>
<li>Generate the website: <code>ikiwiki --setup ikiwiki.setup</code></li>
<li>Start http-server: <code>./test-server.sh</code></li>
<li>Preview your project: open 127.0.0.1:8080 in your browser</li>
</ol>
<p>Read more at ikiwiki's <a href="https://ikiwiki.info/">documentation</a>.</p>
<h2>Contributing</h2>
<ol>
<li><p>Fork the main ayakael.net repo.</p></li>
<li><p>Checkout the forked repository.</p>
<ul>
<li><code>git clone ssh://git@ayakael.net/&#036;USER/ayakael.net</code></li>
<li><code>cd ayakael.net</code></li>
</ul></li>
<li><p>Make your changes.</p></li>
<li><p>Do local build.</p>
<ul>
<li><code>ikiwiki --setup ikiwiki.setup</code></li>
</ul></li>
<li><p>Fix any errors that come up and rebuild until it works locally.</p></li>
<li><p>Commit the changes to the git repo in a git branch</p>
<ul>
<li><code>git checkout -b &lt;name&gt;</code></li>
<li><code>git add</code> changes</li>
<li><code>git commit -m 'content/index: descriptive description'</code></li>
<li><code>git push</code></li>
</ul></li>
<li><p>Create a merge request with your changes by following link in server response.</p></li>
<li><p>Once the tests in the merge-request pass, and reviewers are happy, your changes
will be merged.</p></li>
</ol>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2016-07-07T06:40:37Z" class="dt-published">Thu Jul 7 02:40:37 2016</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/README.md">Edited <time datetime="2024-08-26T00:45:42Z">Sun Aug 25 20:45:42 2024</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=README&t=README" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

View file

@ -1,71 +0,0 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2026-01-03 13:52-0500\n"
"PO-Revision-Date: 2026-01-03 13:54-0500\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.8\n"
#. type: Plain text
#, no-wrap
msgid "[[!meta title=\"Blog\"]]\n"
msgstr ""
#. type: Plain text
#, no-wrap
msgid "<!-- shamelessly copied from https://joeyh.name/blog/ -->\n"
msgstr ""
#. type: Title #
#, no-wrap
msgid "Latest"
msgstr ""
"Récent\n"
"(basculer vers l'anglais pour tout mon contenu)"
#. type: Plain text
#, no-wrap
msgid ""
"[[!inline pages=\"\n"
"(\n"
" page(blog/*)\n"
" or tagged(blog)\n"
")\n"
"and !blog/*/*\n"
"and !blog/*fr*\n"
"and !tagged(draft)\n"
"and !tagged(redirection)\"\n"
"archive=yes\n"
"title=\"Ayakael - Blog\"\n"
"description=\"For those who wish to follow my goings\"\n"
"feedshow=\"10\"\n"
"actions=yes\n"
"trail=yes\n"
"]]\n"
msgstr ""
"[[!inline pages=\"\n"
"(\n"
" page(blog/*fr*)\n"
" or tagged(blog)\n"
")\n"
"and !blog/*/*\n"
"and !tagged(draft)\n"
"and !tagged(redirection)\"\n"
"archive=yes\n"
"title=\"Ayakael - Blog\"\n"
"description=\"Pour ceux et celles qui veulent suivre mes mises à jour\"\n"
"feedshow=\"10\"\n"
"actions=yes\n"
"trail=yes\n"
"]]\n"

View file

@ -1,23 +0,0 @@
[[!meta title="Blog"]]
<!-- shamelessly copied from https://joeyh.name/blog/ -->
# Latest
[[!inline pages="
(
page(blog/*)
or tagged(blog)
)
and !blog/*/*
and !blog/*fr*
and !tagged(draft)
and !tagged(redirection)"
archive=yes
title="Ayakael - Blog"
description="For those who wish to follow my goings"
feedshow="10"
actions=yes
trail=yes
]]

View file

@ -1,53 +0,0 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2026-01-03 13:54-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. type: Plain text
#, markdown-text, no-wrap
msgid "[[!meta title=\"Blog\"]]\n"
msgstr ""
#. type: Plain text
#, markdown-text, no-wrap
msgid "<!-- shamelessly copied from https://joeyh.name/blog/ -->\n"
msgstr ""
#. type: Title #
#, markdown-text, no-wrap
msgid "Latest"
msgstr ""
#. type: Plain text
#, markdown-text, no-wrap
msgid ""
"[[!inline pages=\"\n"
"(\n"
" page(blog/*)\n"
" or tagged(blog)\n"
")\n"
"and !blog/*/*\n"
"and !blog/*fr*\n"
"and !tagged(draft)\n"
"and !tagged(redirection)\"\n"
"archive=yes\n"
"title=\"Ayakael - Blog\"\n"
"description=\"For those who wish to follow my goings\"\n"
"feedshow=\"10\"\n"
"actions=yes\n"
"trail=yes\n"
"]]\n"
msgstr ""

View file

@ -1,126 +0,0 @@
[[!meta title="FOSS Recap 2025"]]
# FOSS Recap 2025
<hr>
Following many other developpers, here is a recap of all the noticeable FOSS related projects that I have contributed to in 2025.
## Alpine Linux
As of beginning of 2026, I maintain a total of [178](https://pkgs.alpinelinux.org/packages?name=&branch=edge&repo=&arch=x86_64&origin=&flagged=&maintainer=Antoine+Martin+%28ayakael%29) packages for Alpine Linux, in addition to 26 that I maintain in my [own repo](https://ayakael.net/forge/ayaports).
#### Aports
During the last year, I pushed a total of 451 commits (top 12 committer!) to Alpine Linux [aports](https://gitlab.alpinelinux.org/alpine/aports). Almost half were updates to python packages (231).
I also added 14 new aports to Alpine Linux repositories:
* dotnet10-{sdk,runtime,stage0}
* koreader
* nwg-menu
* openterface-qt
* pinenote-service
* pneink-theme
* py3-coverage-conditional-plugin
* py3-cron-descriptor
* py3-epmeh
* py3-django-celery-beat
* py3-django-ninja
* py3-python-crontab
* rot8
* skiasharp
I also took maintainership of 3 aports:
* raspberrypi-usbbot
* looking-glass
* arm-trusted-firmware
The last one (arm-trusted-firmware) is my first main package!
That said, this looks to be less activity than last year, where I pushed 605 commits, added 69 new aports, and took maintainership of 17 packages.
#### Ayaports
As mentionned, I maintain my own port repo, which acts as my staging repo, and allows me to backports packages from Alpine's testing to latest stable Alpine release. Ignoring my backports, I pushed 58 updates to my staging packages and added 8 new aports.
I improved a lot on my package monitoring CI that alerts me (by creating a new issue on my forge) whenever a package needs updating. I pushed 78 commits to this, mostly related to adding exceptions and rules to my CI. Notably, I added the ability to track minor and patch releases on package, so I get alerted to new minor relases on Alpine's stable releases.
Indeed, this is still less activity than last year, where I added 48 new aports to my staging repo, and pushed 282 new commits.
#### QubesOS template
I created a few years ago an Alpine Linux template for QubesOS. I pushed 69 commits to this repo, and ported the template to Qubes' latest version. I have not done much in improvements to this, given that I hadn't had the time to push this project further.
## postmarketOS
I pushed a total of 60 commits in the last year, all centered around two devices: the PineNote and the uConsole.
#### pine64's PineNote
I took maintainership of the PineNote port, having made many improvements. Notably:
* Upgraded the linux kernel to latest mainline (6.18)
* Ported hrdl's patchset that uses clever logics to improve e-ink response time
* Upgraded the u-boot to latest release, and now boots using EFI
* Made the port community ready, and submitted a merge request to move the device to community
#### ClockworkPi's uConsole
I contributed to the uConsole ports by extending the raspberrypi support from the cm4 to the cm5 and cm3. I also added support to the radxa-cm5, but unfortunately the port was removed as the build for the downstream kernel was problematic.
## Ilot
In 2021, I started a [small Nextcloud instance](https://ilot.io) to be used by community and student groups in Montreal. In 2025, I made many improvement to the service. Notably, I finally got a team together to improve the bus factor, and migrated the services to a new Ampere based server cluster. Our services are packaged in Alpine packages, thus buildable using a [repo](https://forge.ilot.io/ilot/iports). I pushed 102 commits, mostly related to our authentik package and its dependencies.
## Other
I attended this year's Hackers on Planet Earth and met some very cool people! My favorite talk was *Marlon Kautz's Data Autonomy: Counter-Surveillance Strategies for Civil Society*.
## Plans for 2026
I certainly feel like I stepped back from contributing to FOSS this year, as I got busy with other obligations. I'd like to change that, and better organize my goals to get a momentum going. Here are a few goals and projets that I'd like to work on.
#### postmarketOS
I'd like to get myself involved more with postmarketOS. I think it is a fantastic project, and I think this blasts Alpine Linux into very important and exciting territories. This was my first year getting involved, and I'd like to contribute more. Notably:
* Get the PineNote pmOS port in community, and improve e-ink support on the mobile UIs pmOS ships with for the v26.06 release
* Improve uConsole support with the Radxa CM5 module so that it can at least be reintroduced in testing. This would involve using the mainline kernel.
* Add support for the MNT reform next laptop
* Add support for zfs
* Become a trusted contributor to help with MR reviews
* Become a financial contributor to the pmOS project
#### Alpine Linux
I don't think I'll improve my odds this year in Alpine Linux. I've been a maintainer since 2022 when I first merged the .NET 3.1 compiler. I've had a lot of fun since then, but the project never felt accessible enough for me to get involved more. At best, maintaining Alpine packages feels like my morning sudoku, at worst it feels like a chore. In any case, I don't plan on taking on more, but I'd like to improve my current packages:
* Finish the dotnet10 port to riscv64
* Introduce a test suite for electron, so that I can move electron to community
* Improve raspberrypi-usbboot and move it to community
* Add rockchiprs as a new aport
#### Qubes
This project has been in maintainance mode for a long while, mostly by lack of time to improve it. Some longstanding goals that I'd like to work-on this year includes:
* Upstream the package building, so that builds are done on upstream hardware.
* Make the template buildable on the new (v2) version of the builder
* (maybe) Get the template working for system Appvms
* Get a postmarketOS template going
#### Ilot
Most work in 2026 for ilot will involve getting a better governance structure going, and move our servers out of my server closet. I also aim to help more student unions migrate off of Google Drive to our infrastructure, and improve on service availability.
#### Documentation
I'd like to get better at documenting my different projects. Contributing to postmarketOS' wiki has been great fun and practice, and the last few years of integrating infrastructure as code approaches has helped make my process more transparent. Ilot's documentation is also very incomplete. This blog might be a good place to document progress on different projets, but I don't have a consolidated knowledge base. In any case, this year I practiced taking more notes down, so that I have some knowledge that I can eventually organize.
-
Well that's it folks!
Happy new years!

View file

@ -0,0 +1,271 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>FOSS Recap 2025 - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../../favicon-16x16.png">
<link rel="manifest" href="../../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../../">
<img alt="Ayakael" src="../../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../../index.en.html">Home</a></li>
<li><a href="../index.en.html">Blog</a></li>
<li><a href="../../guides/index.en.html">Guides</a></li>
<li><a href="../../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<h1>FOSS Recap 2025</h1>
<hr>
<p>Following many other developpers, here is a recap of all the noticeable FOSS related projects that I have contributed to in 2025.</p>
<h2>Alpine Linux</h2>
<p>As of beginning of 2026, I maintain a total of <a href="https://pkgs.alpinelinux.org/packages?name=&amp;branch=edge&amp;repo=&amp;arch=x86_64&amp;origin=&amp;flagged=&amp;maintainer=Antoine+Martin+%28ayakael%29">178</a> packages for Alpine Linux, in addition to 26 that I maintain in my <a href="https://ayakael.net/forge/ayaports">own repo</a>.</p>
<h4>Aports</h4>
<p>During the last year, I pushed a total of 451 commits (top 12 committer!) to Alpine Linux <a href="https://gitlab.alpinelinux.org/alpine/aports">aports</a>. Almost half were updates to python packages (231).</p>
<p>I also added 14 new aports to Alpine Linux repositories:</p>
<ul>
<li>dotnet10-{sdk,runtime,stage0}</li>
<li>koreader</li>
<li>nwg-menu</li>
<li>openterface-qt</li>
<li>pinenote-service</li>
<li>pneink-theme</li>
<li>py3-coverage-conditional-plugin</li>
<li>py3-cron-descriptor</li>
<li>py3-epmeh</li>
<li>py3-django-celery-beat</li>
<li>py3-django-ninja</li>
<li>py3-python-crontab</li>
<li>rot8</li>
<li>skiasharp</li>
</ul>
<p>I also took maintainership of 3 aports:</p>
<ul>
<li>raspberrypi-usbbot</li>
<li>looking-glass</li>
<li>arm-trusted-firmware</li>
</ul>
<p>The last one (arm-trusted-firmware) is my first main package!</p>
<p>That said, this looks to be less activity than last year, where I pushed 605 commits, added 69 new aports, and took maintainership of 17 packages.</p>
<h4>Ayaports</h4>
<p>As mentionned, I maintain my own port repo, which acts as my staging repo, and allows me to backports packages from Alpine's testing to latest stable Alpine release. Ignoring my backports, I pushed 58 updates to my staging packages and added 8 new aports. </p>
<p>I improved a lot on my package monitoring CI that alerts me (by creating a new issue on my forge) whenever a package needs updating. I pushed 78 commits to this, mostly related to adding exceptions and rules to my CI. Notably, I added the ability to track minor and patch releases on package, so I get alerted to new minor relases on Alpine's stable releases.</p>
<p>Indeed, this is still less activity than last year, where I added 48 new aports to my staging repo, and pushed 282 new commits.</p>
<h4>QubesOS template</h4>
<p>I created a few years ago an Alpine Linux template for QubesOS. I pushed 69 commits to this repo, and ported the template to Qubes' latest version. I have not done much in improvements to this, given that I hadn't had the time to push this project further.</p>
<h2>postmarketOS</h2>
<p>I pushed a total of 60 commits in the last year, all centered around two devices: the PineNote and the uConsole.</p>
<h4>pine64's PineNote</h4>
<p>I took maintainership of the PineNote port, having made many improvements. Notably:</p>
<ul>
<li>Upgraded the linux kernel to latest mainline (6.18)</li>
<li>Ported hrdl's patchset that uses clever logics to improve e-ink response time</li>
<li>Upgraded the u-boot to latest release, and now boots using EFI</li>
<li>Made the port community ready, and submitted a merge request to move the device to community</li>
</ul>
<h4>ClockworkPi's uConsole</h4>
<p>I contributed to the uConsole ports by extending the raspberrypi support from the cm4 to the cm5 and cm3. I also added support to the radxa-cm5, but unfortunately the port was removed as the build for the downstream kernel was problematic.</p>
<h2>Ilot</h2>
<p>In 2021, I started a <a href="https://ilot.io">small Nextcloud instance</a> to be used by community and student groups in Montreal. In 2025, I made many improvement to the service. Notably, I finally got a team together to improve the bus factor, and migrated the services to a new Ampere based server cluster. Our services are packaged in Alpine packages, thus buildable using a <a href="https://forge.ilot.io/ilot/iports">repo</a>. I pushed 102 commits, mostly related to our authentik package and its dependencies.</p>
<h2>Other</h2>
<p>I attended this year's Hackers on Planet Earth and met some very cool people! My favorite talk was <em>Marlon Kautz's Data Autonomy: Counter-Surveillance Strategies for Civil Society</em>.</p>
<h2>Plans for 2026</h2>
<p>I certainly feel like I stepped back from contributing to FOSS this year, as I got busy with other obligations. I'd like to change that, and better organize my goals to get a momentum going. Here are a few goals and projets that I'd like to work on.</p>
<h4>postmarketOS</h4>
<p>I'd like to get myself involved more with postmarketOS. I think it is a fantastic project, and I think this blasts Alpine Linux into very important and exciting territories. This was my first year getting involved, and I'd like to contribute more. Notably:</p>
<ul>
<li>Get the PineNote pmOS port in community, and improve e-ink support on the mobile UIs pmOS ships with for the v26.06 release</li>
<li>Improve uConsole support with the Radxa CM5 module so that it can at least be reintroduced in testing. This would involve using the mainline kernel.</li>
<li>Add support for the MNT reform next laptop</li>
<li>Add support for zfs</li>
<li>Become a trusted contributor to help with MR reviews</li>
<li>Become a financial contributor to the pmOS project</li>
</ul>
<h4>Alpine Linux</h4>
<p>I don't think I'll improve my odds this year in Alpine Linux. I've been a maintainer since 2022 when I first merged the .NET 3.1 compiler. I've had a lot of fun since then, but the project never felt accessible enough for me to get involved more. At best, maintaining Alpine packages feels like my morning sudoku, at worst it feels like a chore. In any case, I don't plan on taking on more, but I'd like to improve my current packages:</p>
<ul>
<li>Finish the dotnet10 port to riscv64</li>
<li>Introduce a test suite for electron, so that I can move electron to community</li>
<li>Improve raspberrypi-usbboot and move it to community</li>
<li>Add rockchiprs as a new aport</li>
</ul>
<h4>Qubes</h4>
<p>This project has been in maintainance mode for a long while, mostly by lack of time to improve it. Some longstanding goals that I'd like to work-on this year includes:</p>
<ul>
<li>Upstream the package building, so that builds are done on upstream hardware.</li>
<li>Make the template buildable on the new (v2) version of the builder</li>
<li>(maybe) Get the template working for system Appvms</li>
<li>Get a postmarketOS template going</li>
</ul>
<h4>Ilot</h4>
<p>Most work in 2026 for ilot will involve getting a better governance structure going, and move our servers out of my server closet. I also aim to help more student unions migrate off of Google Drive to our infrastructure, and improve on service availability.</p>
<h4>Documentation</h4>
<p>I'd like to get better at documenting my different projects. Contributing to postmarketOS' wiki has been great fun and practice, and the last few years of integrating infrastructure as code approaches has helped make my process more transparent. Ilot's documentation is also very incomplete. This blog might be a good place to document progress on different projets, but I don't have a consolidated knowledge base. In any case, this year I practiced taking more notes down, so that I have some knowledge that I can eventually organize. </p>
<p>-</p>
<p>Well that's it folks!</p>
<p>Happy new years!</p>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2026-01-03T18:46:34Z" class="dt-published">Sat Jan 3 13:46:34 2026</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/blog/2026-01-02-foss-recap-2025.md">Edited <time datetime="2026-01-03T20:46:35Z">Sat Jan 3 15:46:35 2026</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=blog/2026-01-02-foss-recap-2025&t=FOSS%20Recap%202025" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

165
blog/index.en.html Normal file
View file

@ -0,0 +1,165 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Blog - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="manifest" href="../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../">
<img alt="Ayakael" src="../favicon.png" width="48" height="48" />
</a>
<div class="dropdown ps-2 pe-2">
<button class="btn language-switcher dropdown" type="button" id="language-menu-top" data-bs-toggle="dropdown" aria-expanded="false">
<div class="collapse navbar-collapse float-end ms-1" id="navbar">
English
</div>
<img src="../images/languages.png">
</button>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start" aria-labelledby="language-menu-top">
<li><a href="./index.fr.html">Français</a></li>
</ul>
</div>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../index.en.html">Home</a></li>
<li><span class="selflink">Blog</span></li>
<li><a href="../guides/index.en.html">Guides</a></li>
<li><a href="../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<!-- shamelessly copied from https://joeyh.name/blog/ -->
<h1 id="latest">Latest</h1>
<p><div class="feedlink">
</div>
<div class="archivepage">
<a href="./2026-01-02-foss-recap-2025/">FOSS Recap 2025</a><br />
<span class="archivepagedate">
Posted <time datetime="2026-01-03T18:46:34Z" class="dt-published">Sat Jan 3 13:46:34 2026</time>
</span>
</div>
</p>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2026-01-03T00:37:29Z" class="dt-published">Fri Jan 2 19:37:29 2026</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/blog.mdwn">Edited <time datetime="2026-01-03T18:56:00Z">Sat Jan 3 13:56:00 2026</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=blog&t=Blog" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

158
blog/index.fr.html Normal file
View file

@ -0,0 +1,158 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Blog - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="manifest" href="../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../">
<img alt="Ayakael" src="../favicon.png" width="48" height="48" />
</a>
<div class="dropdown ps-2 pe-2">
<button class="btn language-switcher dropdown" type="button" id="language-menu-top" data-bs-toggle="dropdown" aria-expanded="false">
<div class="collapse navbar-collapse float-end ms-1" id="navbar">
Français
</div>
<img src="../images/languages.png">
</button>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start" aria-labelledby="language-menu-top">
<li><a href="./index.en.html">English</a></li>
</ul>
</div>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../index.fr.html">Accueil</a></li>
<li><span class="selflink">Blog</span></li>
<li><a href="../guides/index.fr.html">Guides</a></li>
<li><a href="../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../contact/index.fr.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<!-- shamelessly copied from https://joeyh.name/blog/ -->
<h1 id="récent">Récent</h1>
<p>(basculer vers langlais pour tout mon contenu)</p>
<p><div class="feedlink">
</div>
</p>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2026-01-03T00:37:29Z" class="dt-published">Fri Jan 2 19:37:29 2026</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/blog.fr.po">Edited <time datetime="2026-01-03T18:56:00Z">Sat Jan 3 13:56:00 2026</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Propulsé par <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=blog.fr&t=Blog" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

View file

@ -1,69 +0,0 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: ayakael.net\n"
"POT-Creation-Date: 2025-04-03 10:51-0400\n"
"PO-Revision-Date: 2025-04-03 10:52-0400\n"
"Last-Translator: \n"
"Language-Team: ayakael <antoine@ayakael.net>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.5\n"
#. type: Plain text
#, no-wrap
msgid "[[!meta title=\"Contact\"]]\n"
msgstr "[[!meta title=\"Contact\"]]\n"
#. type: Title #
#, no-wrap
msgid "How to contact me"
msgstr "Comment me joindre"
#. type: Plain text
#, no-wrap
msgid "<hr>\n"
msgstr "<hr>\n"
#. type: Plain text
msgid ""
"The best way to reach me is by email, use the ProtonMail-backed address: "
"[antoine@ayakael.net](mailto:antoine@ayakael.net). If you contact me using a "
"non-ProtonMail email, you can encrypt using [this PGP key](/keys/"
"publickey.antoine.at.ayakael.net-72498db60f2a3d5786517585eba2a86db6fcb3ab.asc)."
msgstr ""
"La meilleure façon de me joindre est par courriel, en utilisant l'adresse "
"soutenue par ProtonMail : [antoine@ayakael.net](mailto:antoine@ayakael.net). "
"Si vous me contactez en utilisant un email autre qu'un de ProtonMail, vous "
"pouvez le chiffrer en utilisant [cette clé PGP](/keys/"
"publickey.antoine.at.ayakael.net-72498db60f2a3d5786517585eba2a86db6fcb3ab.asc)."
#. type: Plain text
msgid ""
"You can also send me a direct message on my Mastodon account: "
"[@agora.ilot.io@ayakael](https://agora.ilot.io/@ayakael)"
msgstr ""
"Vous pouvez également m'envoyer un message direct à mon compte Mastodon : "
"[@agora.ilot.io@ayakael](https://agora.ilot.io/@ayakael)"
#. type: Plain text
msgid ""
"Finally, you can send a message to [my Signal](https://signal.me/#eu/"
"AoOsWsIcxLrP0hxNNk1HpU9RbZuBYwVfJkLYSLTptO816TwldtBMypTrPPhZH8Gv)"
msgstr ""
"Pour terminer, vous pouvez m'envoyer un message vers [mon Signal](https://"
"signal.me/#eu/"
"AoOsWsIcxLrP0hxNNk1HpU9RbZuBYwVfJkLYSLTptO816TwldtBMypTrPPhZH8Gv)"
#. type: Plain text
msgid "If you found an error on the site, you can report it to me by email."
msgstr ""
"Si vous avez trouvé une erreur sur le site, vous pouvez me la signaler par "
"courriel."

View file

@ -1,13 +0,0 @@
[[!meta title="Contact"]]
# How to contact me
<hr>
The best way to reach me is by email, use the ProtonMail-backed address: [antoine@ayakael.net](mailto:antoine@ayakael.net). If you contact me using a non-ProtonMail email, you can encrypt using [this PGP key](/keys/publickey.antoine.at.ayakael.net-72498db60f2a3d5786517585eba2a86db6fcb3ab.asc).
You can also send me a direct message on my Mastodon account: [@agora.ilot.io@ayakael](https://agora.ilot.io/@ayakael)
Finally, you can send a message to [my Signal](https://signal.me/#eu/AoOsWsIcxLrP0hxNNk1HpU9RbZuBYwVfJkLYSLTptO816TwldtBMypTrPPhZH8Gv)
If you found an error on the site, you can report it to me by email.

View file

@ -1,60 +0,0 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2025-04-03 10:51-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. type: Plain text
#, markdown-text, no-wrap
msgid "[[!meta title=\"Contact\"]]\n"
msgstr ""
#. type: Title #
#, markdown-text, no-wrap
msgid "How to contact me"
msgstr ""
#. type: Plain text
#, markdown-text, no-wrap
msgid "<hr>\n"
msgstr ""
#. type: Plain text
#, markdown-text
msgid ""
"The best way to reach me is by email, use the ProtonMail-backed address: "
"[antoine@ayakael.net](mailto:antoine@ayakael.net). If you contact me using a "
"non-ProtonMail email, you can encrypt using [this PGP "
"key](/keys/publickey.antoine.at.ayakael.net-72498db60f2a3d5786517585eba2a86db6fcb3ab.asc)."
msgstr ""
#. type: Plain text
#, markdown-text
msgid ""
"You can also send me a direct message on my Mastodon account: "
"[@agora.ilot.io@ayakael](https://agora.ilot.io/@ayakael)"
msgstr ""
#. type: Plain text
#, markdown-text
msgid ""
"Finally, you can send a message to [my "
"Signal](https://signal.me/#eu/AoOsWsIcxLrP0hxNNk1HpU9RbZuBYwVfJkLYSLTptO816TwldtBMypTrPPhZH8Gv)"
msgstr ""
#. type: Plain text
#, markdown-text
msgid "If you found an error on the site, you can report it to me by email."
msgstr ""

165
contact/index.en.html Normal file
View file

@ -0,0 +1,165 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Contact - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="manifest" href="../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../">
<img alt="Ayakael" src="../favicon.png" width="48" height="48" />
</a>
<div class="dropdown ps-2 pe-2">
<button class="btn language-switcher dropdown" type="button" id="language-menu-top" data-bs-toggle="dropdown" aria-expanded="false">
<div class="collapse navbar-collapse float-end ms-1" id="navbar">
English
</div>
<img src="../images/languages.png">
</button>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start" aria-labelledby="language-menu-top">
<li><a href="./index.fr.html">Français</a></li>
</ul>
</div>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../index.en.html">Home</a></li>
<li><a href="../blog/index.en.html">Blog</a></li>
<li><a href="../guides/index.en.html">Guides</a></li>
<li><a href="../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><span class="selflink">Contact</span></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<h1 id="how-to-contact-me">How to contact me</h1>
<hr>
<p>The best way to reach me is by email, use the ProtonMail-backed
address: <a href="mailto:antoine@ayakael.net">antoine@ayakael.net</a>.
If you contact me using a non-ProtonMail email, you can encrypt using <a
href="/keys/publickey.antoine.at.ayakael.net-72498db60f2a3d5786517585eba2a86db6fcb3ab.asc">this
PGP key</a>.</p>
<p>You can also send me a direct message on my Mastodon account: <a
href="https://agora.ilot.io/@ayakael"><span class="citation"
data-cites="agora.ilot.io">@agora.ilot.io</span><span class="citation"
data-cites="ayakael">@ayakael</span></a></p>
<p>Finally, you can send a message to <a
href="https://signal.me/#eu/AoOsWsIcxLrP0hxNNk1HpU9RbZuBYwVfJkLYSLTptO816TwldtBMypTrPPhZH8Gv">my
Signal</a></p>
<p>If you found an error on the site, you can report it to me by
email.</p>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2024-09-17T18:41:08Z" class="dt-published">Tue Sep 17 14:41:08 2024</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/contact.mdwn">Edited <time datetime="2025-04-03T14:52:58Z">Thu Apr 3 10:52:58 2025</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=contact&t=Contact" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

168
contact/index.fr.html Normal file
View file

@ -0,0 +1,168 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Contact - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="manifest" href="../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../">
<img alt="Ayakael" src="../favicon.png" width="48" height="48" />
</a>
<div class="dropdown ps-2 pe-2">
<button class="btn language-switcher dropdown" type="button" id="language-menu-top" data-bs-toggle="dropdown" aria-expanded="false">
<div class="collapse navbar-collapse float-end ms-1" id="navbar">
Français
</div>
<img src="../images/languages.png">
</button>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start" aria-labelledby="language-menu-top">
<li><a href="./index.en.html">English</a></li>
</ul>
</div>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../index.fr.html">Accueil</a></li>
<li><a href="../blog/index.fr.html">Blog</a></li>
<li><a href="../guides/index.fr.html">Guides</a></li>
<li><a href="../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><span class="selflink">Contact</span></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<h1 id="comment-me-joindre">Comment me joindre</h1>
<hr>
<p>La meilleure façon de me joindre est par courriel, en utilisant
ladresse soutenue par ProtonMail : <a
href="mailto:antoine@ayakael.net">antoine@ayakael.net</a>. Si vous me
contactez en utilisant un email autre quun de ProtonMail, vous pouvez
le chiffrer en utilisant <a
href="/keys/publickey.antoine.at.ayakael.net-72498db60f2a3d5786517585eba2a86db6fcb3ab.asc">cette
clé PGP</a>.</p>
<p>Vous pouvez également menvoyer un message direct à mon compte
Mastodon : <a href="https://agora.ilot.io/@ayakael"><span
class="citation" data-cites="agora.ilot.io">@agora.ilot.io</span><span
class="citation" data-cites="ayakael">@ayakael</span></a></p>
<p>Pour terminer, vous pouvez menvoyer un message vers <a
href="https://signal.me/#eu/AoOsWsIcxLrP0hxNNk1HpU9RbZuBYwVfJkLYSLTptO816TwldtBMypTrPPhZH8Gv">mon
Signal</a></p>
<p>Si vous avez trouvé une erreur sur le site, vous pouvez me la
signaler par courriel.</p>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2024-09-17T18:41:08Z" class="dt-published">Tue Sep 17 14:41:08 2024</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/contact.fr.po">Edited <time datetime="2025-04-03T14:52:58Z">Thu Apr 3 10:52:58 2025</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Propulsé par <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=contact.fr&t=Contact" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

View file

@ -1,51 +0,0 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: ayakael.net\n"
"POT-Creation-Date: 2024-09-10 22:25-0400\n"
"PO-Revision-Date: 2024-09-10 22:25-0400\n"
"Last-Translator: \n"
"Language-Team: ayakael <dev@ayakael.net>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.4.3\n"
#. type: Content of: <div><div>
#, fuzzy
#| msgid "Copyleft © 2024-2024 ayakael [[CC-BY-SA|meta/license]]"
msgid "Copyleft © 2024 ayakael [[CC-BY-SA|meta/license]]"
msgstr "Copyleft © 2024 ayakael [[CC-BY-SA|meta/license]]"
#. type: Content of: <div><div>
msgid "Powered by [[ikiwiki|http://ikiwiki.info/]]."
msgstr "Propulsé par [[ikiwiki|http://ikiwiki.info/]]."
#, fuzzy
#~| msgid ""
#~| "<p class=\"text-muted\">\n"
#~| "\t<span class=\"copyright\">\n"
#~| "\t\tCopyleft © 2024-2024 ayakael [[CC-BY-SA|meta/license]]\n"
#~| "\t</span>\n"
#~| "\t<span class=\"pull-right powered-by\">\n"
#~| "\t\tPowered by [[ikiwiki|http://ikiwiki.info/]].\n"
#~| "\t\t[[Theme|https://gitlab.com/anarcat/ikiwiki-bootstrap-anarcat]] by [[anarcat|https://anarc.at/blog/2015-09-09-bootstrap]].\n"
#~| "\t</span>\n"
#~| "</p>\n"
#~ msgid "<span class=\"me-auto copyright\"> Copyleft © 2024-2024 ayakael [[CC-BY-SA|meta/license]] </span> <span class=\"ms-auto powered-by\"> Powered by [[ikiwiki|http://ikiwiki.info/]]. </span>"
#~ msgstr ""
#~ "<p class=\"text-muted\">\n"
#~ "\t<span class=\"copyright\">\n"
#~ "\t\tCopyleft © 2024-2024 ayakael [[CC-BY-SA|meta/license]]\n"
#~ "\t</span>\n"
#~ "\t<span class=\"pull-right powered-by\">\n"
#~ "\t\tPropulsé par [[ikiwiki|http://ikiwiki.info/]].\n"
#~ "\t\t[[Thème|https://gitlab.com/anarcat/ikiwiki-bootstrap-anarcat]] par [[anarcat|https://anarc.at/blog/2015-09-09-bootstrap]].\n"
#~ "\t</span>\n"
#~ "</p>\n"

View file

@ -1,8 +0,0 @@
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael [[CC-BY-SA|meta/license]]
</div>
<div class="col-sm text-sm-end">
Powered by [[ikiwiki|http://ikiwiki.info/]].
</div>
</div>

View file

@ -1,25 +0,0 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2024-09-17 14:37-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. type: Content of: <div><div>
msgid "Copyleft © 2024 ayakael [[CC-BY-SA|meta/license]]"
msgstr ""
#. type: Content of: <div><div>
msgid "Powered by [[ikiwiki|http://ikiwiki.info/]]."
msgstr ""

157
footer/index.en.html Normal file
View file

@ -0,0 +1,157 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>footer - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="manifest" href="../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../">
<img alt="Ayakael" src="../favicon.png" width="48" height="48" />
</a>
<div class="dropdown ps-2 pe-2">
<button class="btn language-switcher dropdown" type="button" id="language-menu-top" data-bs-toggle="dropdown" aria-expanded="false">
<div class="collapse navbar-collapse float-end ms-1" id="navbar">
English
</div>
<img src="../images/languages.png">
</button>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start" aria-labelledby="language-menu-top">
<li><a href="./index.fr.html">Français</a></li>
</ul>
</div>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../index.en.html">Home</a></li>
<li><a href="../blog/index.en.html">Blog</a></li>
<li><a href="../guides/index.en.html">Guides</a></li>
<li><a href="../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2024-09-17T18:41:08Z" class="dt-published">Tue Sep 17 14:41:08 2024</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/footer.html">Edited <time datetime="2024-09-17T18:41:08Z">Tue Sep 17 14:41:08 2024</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=footer&t=footer" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

158
footer/index.fr.html Normal file
View file

@ -0,0 +1,158 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>footer.fr - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="manifest" href="../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../">
<img alt="Ayakael" src="../favicon.png" width="48" height="48" />
</a>
<div class="dropdown ps-2 pe-2">
<button class="btn language-switcher dropdown" type="button" id="language-menu-top" data-bs-toggle="dropdown" aria-expanded="false">
<div class="collapse navbar-collapse float-end ms-1" id="navbar">
Français
</div>
<img src="../images/languages.png">
</button>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start" aria-labelledby="language-menu-top">
<li><a href="./index.en.html">English</a></li>
</ul>
</div>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../index.fr.html">Accueil</a></li>
<li><a href="../blog/index.fr.html">Blog</a></li>
<li><a href="../guides/index.fr.html">Guides</a></li>
<li><a href="../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../contact/index.fr.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Propulsé par <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2024-09-17T18:41:08Z" class="dt-published">Tue Sep 17 14:41:08 2024</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/footer.fr.po">Edited <time datetime="2024-09-17T18:41:08Z">Tue Sep 17 14:41:08 2024</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Propulsé par <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=footer.fr&t=footer.fr" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

1
generated.txt Normal file
View file

@ -0,0 +1 @@
Wed May 20 09:38:23 EDT 2026

View file

@ -1,66 +0,0 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2026-01-03 13:57-0500\n"
"PO-Revision-Date: 2026-01-03 13:58-0500\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.8\n"
#. type: Plain text
#, no-wrap
msgid "[[!meta title=\"Guides\"]]\n"
msgstr ""
#. type: Title #
#, no-wrap
msgid "Latest"
msgstr ""
"Récent\n"
"(basculer vers l'anglais pour tout mon contenu)"
#. type: Plain text
#, no-wrap
msgid ""
"[[!inline pages=\"\n"
"(\n"
" page(guides/*)\n"
" or tagged(guide)\n"
")\n"
"and !guides/*/*\n"
"and !guides/*fr*\n"
"and !tagged(draft)\n"
"and !tagged(redirection)\"\n"
"archive=yes\n"
"title=\"Ayakael - Guides\"\n"
"description=\"For those who wish to follow my attempt at documentation\"\n"
"feedshow=\"10\"\n"
"actions=yes\n"
"trail=yes\n"
"]]\n"
msgstr ""
"[[!inline pages=\"\n"
"(\n"
" page(guides/*fr*)\n"
" or tagged(guide)\n"
")\n"
"and !guides/*/*\n"
"and !tagged(draft)\n"
"and !tagged(redirection)\"\n"
"archive=yes\n"
"title=\"Ayakael - Guides\"\n"
"description=\"Pour ceux et celles qui veulent suivre mes tentatives à documenter\"\n"
"feedshow=\"10\"\n"
"actions=yes\n"
"trail=yes\n"
"]]\n"

View file

@ -1,21 +0,0 @@
[[!meta title="Guides"]]
# Latest
[[!inline pages="
(
page(guides/*)
or tagged(guide)
)
and !guides/*/*
and !guides/*fr*
and !tagged(draft)
and !tagged(redirection)"
archive=yes
title="Ayakael - Guides"
description="For those who wish to follow my attempt at documentation"
feedshow="10"
actions=yes
trail=yes
]]

View file

@ -1,48 +0,0 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2026-01-03 13:58-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. type: Plain text
#, markdown-text, no-wrap
msgid "[[!meta title=\"Guides\"]]\n"
msgstr ""
#. type: Title #
#, markdown-text, no-wrap
msgid "Latest"
msgstr ""
#. type: Plain text
#, markdown-text, no-wrap
msgid ""
"[[!inline pages=\"\n"
"(\n"
" page(guides/*)\n"
" or tagged(guide)\n"
")\n"
"and !guides/*/*\n"
"and !guides/*fr*\n"
"and !tagged(draft)\n"
"and !tagged(redirection)\"\n"
"archive=yes\n"
"title=\"Ayakael - Guides\"\n"
"description=\"For those who wish to follow my attempt at documentation\"\n"
"feedshow=\"10\"\n"
"actions=yes\n"
"trail=yes\n"
"]]\n"
msgstr ""

View file

@ -1,143 +0,0 @@
[[!meta title="Davinci Resolve Workstation"]]
# Davinci Resolve Workstation
<hr>
I do my editing on Davinci Resolve. Since I am trying to get editing and gaming
off of Windows, I created a Davinci Resolve workstation that is based on Rocky
Linux 8, the OS Davinci officially supports. While Davinci can be installed on
other distros, it doesn't work on my [[distro of choice|alpine linux]], thus
might as well create a dedicated VM for it. Since my [[workstation]] uses
Proxmox, I can easily use different distros.
This guide thus documents my installation process.
## 1) Install Rocky Linux 8.6
You can download the [BlackMagic's
ISO](https://downloads.blackmagicdesign.com/DaVinciResolve/DaVinci-Resolve-Linux-RockyLinux_8.6.iso)
for easier installation
* Upgrade to latest packages
```
sudo dnf update
```
* Enable networking
By default, wired networking is not automatically turned on.
## 2) Install `amdgpu-pro`
* Remove `nomodeset` and `rdblacklist=nouveau` in grub config in
`/etc/default/grub` and `/boot/grub2/grubenv`
```
sudo dnf install http://repo.radeon.com/amdgpu-install/6.3/rhel/8.10/amdgpu-install-6.3.60300-1.el8.noarch.rpm
sudo amdgpu-install --usecase=workstation --vulkan=pro --opencl=rocr
```
* Add user to `video` and `render` group:
```
sudo usermod -a -G render
sudo usermod -a -G video
```
## 3) Install Davince Resolve Studio 19
* Install `xcb-util-cursor`:
```
sudo dnf install epel-release
sudo dnf install xcb-util-cursor
```
* Download Davinci Resolve Studio 19 by going to [support
center](https://www.blackmagicdesign.com/support/family/davinci-resolve-and-fusion),
clicking the desired version, and finally `Downlod only`
* Extract and run the installer
* Apply crack (confirmed working with version 19.1.2)
```
sudo perl -pi -e 's/\x00\x85\xc0\x74\x7b\xe8/\x00\x85\xc0\xEB\x7b\xe8/g' /opt/resolve/bin/resolve
```
## 4) Install `awesome` window manager
I only care for tiling window managers. Unfortunately, my manager of choice
`awesome` is not available on Rocky Linux 8. I thus have to compile it myself,
which involces compiling its build dependencies.
Compiling awesome on Rocky Linux 8.10 requires the following dependencies (in order of build):
* lua
* lua-markdown
* lua-lgi
* lua-filesystem
* lua-ldoc
* lua-penlight
* xapian-xire
* doxygen (note: this ought to be fc29 version)
* libxdg-basedir
* xcb-util
* xcb-util-wm
* xcb-util-keysymx
* xorg-x11-util-macros
* xcb-util-xrm
* libxkb
* xcb-util-image
* xcb-util-renderutil
To build these, you have to go through various iterations of fetching
source RPMs from [fedora 28 src repo](https://archive.fedoraproject.org/pub/archive/fedora/linux/releases/28/Everything/source/tree/Packages),
installing the builddeps and finally rebuilding using `rpbbuild`. Thus,
for lua, you would:
```
wget https://archive.fedoraproject.org/pub/archive/fedora/linux/releases/28/Everything/source/tree/Packages/l/lua-5.3.4-10.fc28.src.rpm
sudo dnf builddep lua-*.src.rpm --nobest --refresh
rpmbuild --rebuild lua-.src.rpm
```
To facilitate installing the built dependencies, you can use `createrepo` to
create a repo in `/home/user/rpmbuild` and pointing a new dnf repo to this
folder.
Specific notes:
* doxygen src rpm should come Fedora 29
* lua-ldoc and lua-penlight depend on each other, thus you will need to
temporarily activate the fc28 repo by adding this in
`/etc/yum.repos.d/fedora.repo`
```
[fedora]
name=Fedora 28 - x86_64
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-28&arch=x86_64
enabled=1
gpgcheck=0
```
Make sure to disable it after getting lua-ldoc or lua-penlight built.
After building all of your dependencies, clean-up everything by rolling back to
the transaction before you started installing build dependencies. Use `dnf
history info <transaction no>` to find that number and then `dnf history
rollback <transaction no>`
Once everything is rolledback, you can install awesome and *just* it's runtime
dependencies, and then refer to archlinux's
[awesome-gnome](https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=awesome-gnome)
package or the [wiki article it is based
on](http://web.archive.org/web/20160205182002/http://awesome.naquadah.org/wiki/Quickly_Setting_up_Awesome_with_Gnome)
to integrate awesome in gnome.
## 5) Install git-annex standalone
I use git-annex to store my footage. Indeed, there isn't a git-annex package, but it is easy to install git-annex
standalone by following [upstream's guide](https://git-annex.branchable.com/install/rpm_standalone/)
## Other options
I mentionned above that there were other ways to install Davinci on Linux
without having to use Rocky Linux. Here are a few:
* [via distrobox](https://github.com/zelikos/davincibox)
* [on debian](https://github.com/flolu/davinci-resolve-linux)
* [on arch](https://wiki.archlinux.org/title/DaVinci_Resolve)
* [on fedora](https://github.com/H3rz3n/How-install-DaVinci-Resolve-in-Fedora-Linux)

View file

@ -0,0 +1,272 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Davinci Resolve Workstation - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../../favicon-16x16.png">
<link rel="manifest" href="../../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../../">
<img alt="Ayakael" src="../../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../../index.en.html">Home</a></li>
<li><a href="../../blog/index.en.html">Blog</a></li>
<li><a href="../index.en.html">Guides</a></li>
<li><a href="../../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<h1 id="davinci-resolve-workstation">Davinci Resolve Workstation</h1>
<hr>
<p>I do my editing on Davinci Resolve. Since I am trying to get editing
and gaming off of Windows, I created a Davinci Resolve workstation that
is based on Rocky Linux 8, the OS Davinci officially supports. While
Davinci can be installed on other distros, it doesnt work on my <span
class="createlink">distro of choice</span>, thus might as well create a
dedicated VM for it. Since my <span
class="createlink">workstation</span> uses Proxmox, I can easily use
different distros.</p>
<p>This guide thus documents my installation process.</p>
<h2 id="install-rocky-linux-8.6">1) Install Rocky Linux 8.6</h2>
<p>You can download the <a
href="https://downloads.blackmagicdesign.com/DaVinciResolve/DaVinci-Resolve-Linux-RockyLinux_8.6.iso">BlackMagics
ISO</a> for easier installation</p>
<ul>
<li>Upgrade to latest packages</li>
</ul>
<pre><code>sudo dnf update</code></pre>
<ul>
<li>Enable networking</li>
</ul>
<p>By default, wired networking is not automatically turned on.</p>
<h2 id="install-amdgpu-pro">2) Install <code>amdgpu-pro</code></h2>
<ul>
<li>Remove <code>nomodeset</code> and <code>rdblacklist=nouveau</code>
in grub config in <code>/etc/default/grub</code> and
<code>/boot/grub2/grubenv</code></li>
</ul>
<pre><code>sudo dnf install http://repo.radeon.com/amdgpu-install/6.3/rhel/8.10/amdgpu-install-6.3.60300-1.el8.noarch.rpm
sudo amdgpu-install --usecase=workstation --vulkan=pro --opencl=rocr</code></pre>
<ul>
<li>Add user to <code>video</code> and <code>render</code> group:</li>
</ul>
<pre><code>sudo usermod -a -G render
sudo usermod -a -G video</code></pre>
<h2 id="install-davince-resolve-studio-19">3) Install Davince Resolve
Studio 19</h2>
<ul>
<li>Install <code>xcb-util-cursor</code>:</li>
</ul>
<pre><code>sudo dnf install epel-release
sudo dnf install xcb-util-cursor</code></pre>
<ul>
<li>Download Davinci Resolve Studio 19 by going to <a
href="https://www.blackmagicdesign.com/support/family/davinci-resolve-and-fusion">support
center</a>, clicking the desired version, and finally
<code>Downlod only</code></li>
<li>Extract and run the installer</li>
<li>Apply crack (confirmed working with version 19.1.2)</li>
</ul>
<pre><code>sudo perl -pi -e &#39;s/\x00\x85\xc0\x74\x7b\xe8/\x00\x85\xc0\xEB\x7b\xe8/g&#39; /opt/resolve/bin/resolve</code></pre>
<h2 id="install-awesome-window-manager">4) Install <code>awesome</code>
window manager</h2>
<p>I only care for tiling window managers. Unfortunately, my manager of
choice <code>awesome</code> is not available on Rocky Linux 8. I thus
have to compile it myself, which involces compiling its build
dependencies.</p>
<p>Compiling awesome on Rocky Linux 8.10 requires the following
dependencies (in order of build):</p>
<ul>
<li>lua</li>
<li>lua-markdown</li>
<li>lua-lgi</li>
<li>lua-filesystem</li>
<li>lua-ldoc</li>
<li>lua-penlight</li>
<li>xapian-xire</li>
<li>doxygen (note: this ought to be fc29 version)</li>
<li>libxdg-basedir</li>
<li>xcb-util</li>
<li>xcb-util-wm</li>
<li>xcb-util-keysymx</li>
<li>xorg-x11-util-macros</li>
<li>xcb-util-xrm</li>
<li>libxkb</li>
<li>xcb-util-image</li>
<li>xcb-util-renderutil</li>
</ul>
<p>To build these, you have to go through various iterations of fetching
source RPMs from <a
href="https://archive.fedoraproject.org/pub/archive/fedora/linux/releases/28/Everything/source/tree/Packages">fedora
28 src repo</a>, installing the builddeps and finally rebuilding using
<code>rpbbuild</code>. Thus, for lua, you would:</p>
<pre><code>wget https://archive.fedoraproject.org/pub/archive/fedora/linux/releases/28/Everything/source/tree/Packages/l/lua-5.3.4-10.fc28.src.rpm
sudo dnf builddep lua-*.src.rpm --nobest --refresh
rpmbuild --rebuild lua-.src.rpm</code></pre>
<p>To facilitate installing the built dependencies, you can use
<code>createrepo</code> to create a repo in
<code>/home/user/rpmbuild</code> and pointing a new dnf repo to this
folder.</p>
<p>Specific notes:</p>
<ul>
<li>doxygen src rpm should come Fedora 29</li>
<li>lua-ldoc and lua-penlight depend on each other, thus you will need
to temporarily activate the fc28 repo by adding this in
<code>/etc/yum.repos.d/fedora.repo</code></li>
</ul>
<pre><code>[fedora]
name=Fedora 28 - x86_64
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-28&amp;arch=x86_64
enabled=1
gpgcheck=0</code></pre>
<p>Make sure to disable it after getting lua-ldoc or lua-penlight
built.</p>
<p>After building all of your dependencies, clean-up everything by
rolling back to the transaction before you started installing build
dependencies. Use <code>dnf history info &lt;transaction no&gt;</code>
to find that number and then
<code>dnf history rollback &lt;transaction no&gt;</code></p>
<p>Once everything is rolledback, you can install awesome and
<em>just</em> its runtime dependencies, and then refer to archlinuxs
<a
href="https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=awesome-gnome">awesome-gnome</a>
package or the <a
href="http://web.archive.org/web/20160205182002/http://awesome.naquadah.org/wiki/Quickly_Setting_up_Awesome_with_Gnome">wiki
article it is based on</a> to integrate awesome in gnome.</p>
<h2 id="install-git-annex-standalone">5) Install git-annex
standalone</h2>
<p>I use git-annex to store my footage. Indeed, there isnt a git-annex
package, but it is easy to install git-annex standalone by following <a
href="https://git-annex.branchable.com/install/rpm_standalone/">upstreams
guide</a></p>
<h2 id="other-options">Other options</h2>
<p>I mentionned above that there were other ways to install Davinci on
Linux without having to use Rocky Linux. Here are a few:</p>
<ul>
<li><a href="https://github.com/zelikos/davincibox">via
distrobox</a></li>
<li><a href="https://github.com/flolu/davinci-resolve-linux">on
debian</a></li>
<li><a href="https://wiki.archlinux.org/title/DaVinci_Resolve">on
arch</a></li>
<li><a
href="https://github.com/H3rz3n/How-install-DaVinci-Resolve-in-Fedora-Linux">on
fedora</a></li>
</ul>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2026-01-03T18:33:00Z" class="dt-published">Sat Jan 3 13:33:00 2026</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/guides/davinci-resolve.mdwn">Edited <time datetime="2026-01-03T20:47:06Z">Sat Jan 3 15:47:06 2026</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=guides/davinci-resolve&t=Davinci%20Resolve%20Workstation" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

View file

@ -1,177 +0,0 @@
[[!meta title="Gaming VM on Qubes Using Bazzite"]]
# Gaming VM on Qubes Using Bazzite
<hr>
My main workstation now uses QubesOS rather than Proxmox. This workstation has two GPUs and two USB controllers. I wanted to be able to assign the more powerful GPU to a Gaming Qubes, but Qubes doesn't support that well. On top of that, the Sapphire Pulse 6700XT GPU that I have has [the AMD reset bug](https://forum.level1techs.com/t/6700xt-reset-bug/181814). To seamlessly be able to shutdown and assign the GPU to another VM (say my video editing environment), I applied a workaround that involved flashing a BIOS from another (working) 6700XT model (the Sapphire Nitro+ 6700XT). This solved the issue, at the cost of having to apply the original romfile on VM start. While this is easy on Proxmox (via `romfile` options), it isn't so easy on Qubes.
I have ressources down at the bottom one can refer to for more information. In any case, lets start the guide.
A note: QubesOS explicitely does not support GPU Passthrough as these devices are notoriously bad at security. I've done my threat modelling, you should do yours to make sure GPU passthrough doesn't expose you. The team is working on [safe GPU acceleration](https://github.com/orgs/QubesOS/projects/17), but it looks like it stalled.
## Setup Bazzite
* Download ISO from https://bazzite.gg/#image-picker (in my case, went with Deck version for big screen mode)
* Transfer ISO to dom0 (in my case, using ISO from qubes wasn't working). From dom0:
```shell
qvm-run -p $vm 'cat /path/to/iso' > bazzite.iso
```
* Create standalone VM using Qubes VM manager, setting root drive to 64GB and start VM from dom0 commandline pointing to ISO:
```shell
qvm-start --cdrom=dom0:/path/to/iso bazzite
```
* In screen, install bazzite with default settings, setting the 64GB image as root. When finished, start to see if everything starts without issue. If all good, shutdown.
## Flash good bios on Sapphire Pulse 6700XT
(this is copy-pasted almost verbatim from a [level1techs.com forum post](https://forum.level1techs.com/t/6700xt-reset-bug/181814/41) by [Mechanical](https://forum.level1techs.com/u/Mechanical))
**I did this for the Sapphire Pulse 6700XT, I make no guarantees this will work on other cards, not even on this card if you have one**
First off you need to check your cards memory vendor and you need amdvbflash. I used version 4.71.
You should be able to find your memory vendor by checking GPU-Z in Windows using the stock VBIOS on your current card. Pass it through to your WIndows guest as usual and check GPU-Z for further information.
The memory vendor and chip needs to be one of the following:
* 12288 MB, GDDR6, Hynix H56G42AS8DX014
* 12288 MB, GDDR6, Micron MT61K512M32C
* 12288 MB, GDDR6, Samsung K4ZAF325BM
If it isnt youre taking a gigantic risk flashing anything.
Next up is dumping the VBIOS. You can also do that through GPU-Z, but Id do it through Linux as well to ensure the VBIOS is matching. You need to turn off VFIO anyway to flash a VBIOS. Comment out vfio-pci binding the GPU at boot like in /etc/modprobe.d using # and rebuild initramfs using something like mkinitcpio -P and rebooting. The GPU needs to be taken by amdgpu module.
The command for dumping the BIOS using amdvbflash is:
```shell
./amdvbflash -s 0 MyOriginalVBIOS.rom
```
You can also just dump it through sysbus:
```shell
cat /sys/bus/pci/devices/0000:0X:00.0/rom
```
Where the X is the hexadecimal digit for where your GPU is located. You can find it using lspci -vvv . You probably know yours already.
Dump multiple version of your VBIOS and ensure their checksum are the same so that you dont sit there with a corrupted VBIOS backup and put it on another machine/cloud to ensure you have it around.
As everyone points in every guide about these kind of things, but it needs to be said anyway:
**Flashing any VBIOS, especially cross-vendor like this, will 100% destroy your warranty and you might sit there with a brick.**
Use caution and remember it is your own fault if it never boots up ever again. You should have dual-BIOS possibilities on your card to be safer. Single-BIOS is very dangerous. You have been warned.
So to flash the thing, get the working VBIOS from here: VGA Bios Collection: Sapphire RX 6700 XT 12 GB | TechPowerUp 48
The MD5 for this should be `bbcf8fd1e226609094cd2283b3ea2259`
Next up you need to flash the thing.
The `-p 0` here means card 0, make sure youre using the correct card and not your hosts card!!!
```
./amdvbflash -i # Check that 0 is the card you want to flash first!
./amdvbflash -fs -fp -fv -p 0 ./249630.rom # This is the actual flashing
```
That will essentially flash and change the IDs of the card to match the ROM.
You can verify that the ROM was correctly flashed by using:
```
./amdvbflash -v 0 ./249630.rom
```
If everything looks ok, shut down the system completely, cold boot and pray things work out. If it boots up in Linux now without any issues you should re-enable the VFIO-PCI module so it binds the card on the next boot. Dont forget to rebuild initramfs.
Lastly, use your original VBIOS and pass that to the guest. That way the card will use the correct clocks for your card and make it run like it used to.
I would NOT recommend using the Sapphire RX 6700 XT on the host, use your original VBIOS so it runs correctly.
## Setup PCI Passthrough
In my configuration, I pass USB device + GPU + NVMe (containing game files), while also loading the original GPU ROM on the guest. Unlike Proxmox, Qubes does not support this, even though Xen supports setting a custom ROM file. A [creative (read: hacky) solution](https://github.com/QubesOS/qubes-issues/issues/7559#issuecomment-1152944698) by [chriswoope](https://github.com/chriswoope) exists to introduce the romfile, but it involves adding the romfile to the linux stubdomain and making changes to `vchan-socket-proxy` to add the necessary arguments when adding the GPU as a device.
* Add GPU bios to stubdomain using following script that can be created under `/usr/local/bin/add-gpubios-stubdomain.sh`:
```bash
#!/usr/bin/bash
gpubio=$1
for stubdom in /usr/libexec/xen/boot/qemu-stubdom-linux-rootfs /usr/libexec/xen/boot/qemu-stubdom-linux-full-rootfs; do
dir="$(mktemp -d)"
cd "$dir"
if ! test -e "$stubdom.orig"; then
mv "$stubdom" "$stubdom.orig"
fi
zcat "$stubdom.orig"|cpio -idm
cp -a "${gpubios:=/usr/libexec/xen/boot/gpubios}" ./share/gpubios
find .|cpio -o -c|gzip -9 > "$stubdom"
done
```
* Rename `vchan-socket-proxy` to `vchan-socket-proxy.orig`:
```shell
mv /usr/bin/vchan-socket-proxy /usr/bin/vchan-socket-proxy.orig
```
* Install `nmap-ncat`:
```shell
qubes-dom0-update nmap-ncat
```
* Create wrapper for `vchan-socket-proxy.orig` under `/usr/bin/vchan-socket-proxy`, replacing `0000:07:00:0` with PCI address of device:
```bash
#!/usr/bin/bash
vchan-socket-proxy.orig "$1" "$2" "$3" "$4" "$5.internal" &
ncat -k --listen --unixsock "$5" --sh-exec "sed -u -e 's|\"hostaddr\":\"0000:07:00.0\"|\"hostaddr\":\"0000:07:00.0\",\"romfile\":\"/share/gpubios\"|'|ncat --unixsock $5.internal"
```
* Make these two files executable and add gpu bios to stubdomains:
```shell
chmod +x /usr/bin/vchan-socket-proxy /usr/local/bin/add-gpubios-stubdomain.sh
add-gpubios-stubdomain.sh /path/to/rom
```
* add devices to qubes:
```shell
qvm-pci list
qvm-pci attach bazzite (address of GPU) --persistent -o no-strict-reset=true -o permissive=true
qvm-pci attach bazzite (address of GPU audio) --persistent -o no-strict-reset=true -o permissive=true
qvm-pci attach bazzite (address of USB controller) --persistent -o no-strict-reset=true -o permissive=true
```
* disable virtual video mode on qubes, else boot crashes when setting romfile:
```shell
qvm-features bazzite video-model none
```
* start bazzite qubes, seeing if anything appears on display attached to passthroughed GPU.
* you can follow `/var/log/xen/console/guest-bazzite-dm.log` to make sure romfile argument has been applied
## Configuring Steam storage and ModOrganizer2.
Since I am using an nvme drive for the game files, I setup this up as a btrfs drive using the included disk manager. In terminal, on Bazzite's desktop, I setup two subvolumes as `steam` and `mods`. The `steam` submodule is mounted using `/etc/fstab` under `/home/bazzite/.local/share/steam` while `mods` is mounted under `/home/bazzite/Mods`. The latter contains mod files used by ModOrganizer2.
ModOrganizer2 can be setup using Furglitch's [modorganiser2-linux-installer](https://github.com/Furglitch/modorganizer2-linux-installer/releases). The following should be noted:
* ModOrganizer does not like being on anywhere that's not under `/home/bazzite` even when setting `STEAM_COMPAT_MOUNTS`. Hence why the NVMe drive is mounted at different locations.
* Barring that, ModOrganizer should be installed in « Global mode », but mod files can be stored under `~/Mods`
* `qpaths` is expected in a different location, a symbolic link needed to be created:
```shell
sudo ln -s /usr/bin/qtpaths6 /usr/local/bin/qtpaths
```
## Other notes
* The qubes' home drive isn't in use. Although, maybe it might be a good idea to move the `home` subvolume from root to there. I didn't do that since I didn't know if that would break Bazzite's storage model. If (for some reason) one would want to set Bazzite up as a template (why, who knows), moving to the private subvolume would be necessary
* My GPU's (already broken) reset mechanism was even more buggy on kernel 6.12. Upgrading to 6.18 did wonders to solve that.
* My USB controller, based on asm2142, is a bit buggy. It sometimes stops recognizing new devices. I suspect that this is due to the USB hub being USB type A rather than C, so I bought a USB-C 10Gbit hub to make sure it isn't signal degradation.
## Other ressources
* [[1]Qubes OS forums - GPU Passthrough (passthrough works but no monitor recognized, only vDisplay)](https://forum.qubes-os.org/t/gpu-passthrough-passthrough-works-but-no-monitor-recognized-only-vdisplay/31306) Issue that shows different approaches that might work, notably:
```
* Edit /etc/default/grub to include rd.qubes.hide_pci, iommu=pt, video=vesafb:off video=efifb:off video=simplefb:off nofb initcall_blacklist=sysfb_init (all the frame buffer stuff is a precaution since I noticed without it I would get text on the monitor connected to the gpu indicating memory being initialized.) See Explaining CSM, efifb=off, and Setting the * Boot GPU Manually - The Passthrough POST for some background on csm vs uefi and how it affects gpu passthrough.
* Edit /usr/share/qubes/templates/libvirt/devices/pci.xml to pass a techpower rom file (didnt seem to help). For those who care, I filtered on vm.name and device.libvirt_name=pci_0000_05_00_0.
* Edit /usr/share/qubes/templates/libvirt/devices/pci.xml to set rom bar=off (didnt see to help)
* Edit /usr/share/qubes/templates/libvirt/xen.xml to disable the cpu hypervisor feature (no noticeable affect)
* Create an sh file to change bar0 to 32GB and bar2 to 8MB. This is apparently necessary for Windows to avoid error 43 for whatever reason. Enabling or disabling rebar in bios does not seem to change behavior (may change performance) [SOLVED] 7900 XTX Code 43 or How to get 7900 XTX to work on VFIO - Virtualization - Level1Techs Forums
* Create an sh file to remount the gpu (remove and rescan).
* Attach the GPU with permissive and no-strict-reset. Didnt seem to change behavior.
* Enable everything related to virtualization in my motherboard bios (proart x670e-creator)
* Disable motherboard and cpu ASPM in my motherboard bios. Didnt seem to change behavior.
```

View file

@ -0,0 +1,369 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Gaming VM on Qubes Using Bazzite - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../../favicon-16x16.png">
<link rel="manifest" href="../../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../../">
<img alt="Ayakael" src="../../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../../index.en.html">Home</a></li>
<li><a href="../../blog/index.en.html">Blog</a></li>
<li><a href="../index.en.html">Guides</a></li>
<li><a href="../../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<h1 id="gaming-vm-on-qubes-using-bazzite">Gaming VM on Qubes Using
Bazzite</h1>
<hr>
<p>My main workstation now uses QubesOS rather than Proxmox. This
workstation has two GPUs and two USB controllers. I wanted to be able to
assign the more powerful GPU to a Gaming Qubes, but Qubes doesnt
support that well. On top of that, the Sapphire Pulse 6700XT GPU that I
have has <a
href="https://forum.level1techs.com/t/6700xt-reset-bug/181814">the AMD
reset bug</a>. To seamlessly be able to shutdown and assign the GPU to
another VM (say my video editing environment), I applied a workaround
that involved flashing a BIOS from another (working) 6700XT model (the
Sapphire Nitro+ 6700XT). This solved the issue, at the cost of having to
apply the original romfile on VM start. While this is easy on Proxmox
(via <code>romfile</code> options), it isnt so easy on Qubes.</p>
<p>I have ressources down at the bottom one can refer to for more
information. In any case, lets start the guide.</p>
<p>A note: QubesOS explicitely does not support GPU Passthrough as these
devices are notoriously bad at security. Ive done my threat modelling,
you should do yours to make sure GPU passthrough doesnt expose you. The
team is working on <a
href="https://github.com/orgs/QubesOS/projects/17">safe GPU
acceleration</a>, but it looks like it stalled.</p>
<h2 id="setup-bazzite">Setup Bazzite</h2>
<ul>
<li>Download ISO from https://bazzite.gg/#image-picker (in my case, went
with Deck version for big screen mode)</li>
<li>Transfer ISO to dom0 (in my case, using ISO from qubes wasnt
working). From dom0:</li>
</ul>
<pre class="shell"><code>qvm-run -p $vm &#39;cat /path/to/iso&#39; &gt; bazzite.iso</code></pre>
<ul>
<li>Create standalone VM using Qubes VM manager, setting root drive to
64GB and start VM from dom0 commandline pointing to ISO:</li>
</ul>
<pre class="shell"><code>qvm-start --cdrom=dom0:/path/to/iso bazzite</code></pre>
<ul>
<li>In screen, install bazzite with default settings, setting the 64GB
image as root. When finished, start to see if everything starts without
issue. If all good, shutdown.</li>
</ul>
<h2 id="flash-good-bios-on-sapphire-pulse-6700xt">Flash good bios on
Sapphire Pulse 6700XT</h2>
<p>(this is copy-pasted almost verbatim from a <a
href="https://forum.level1techs.com/t/6700xt-reset-bug/181814/41">level1techs.com
forum post</a> by <a
href="https://forum.level1techs.com/u/Mechanical">Mechanical</a>)</p>
<p><strong>I did this for the Sapphire Pulse 6700XT, I make no
guarantees this will work on other cards, not even on this card if you
have one</strong></p>
<p>First off you need to check your cards memory vendor and you need
amdvbflash. I used version 4.71. You should be able to find your memory
vendor by checking GPU-Z in Windows using the stock VBIOS on your
current card. Pass it through to your WIndows guest as usual and check
GPU-Z for further information.</p>
<p>The memory vendor and chip needs to be one of the following:</p>
<ul>
<li>12288 MB, GDDR6, Hynix H56G42AS8DX014</li>
<li>12288 MB, GDDR6, Micron MT61K512M32C</li>
<li>12288 MB, GDDR6, Samsung K4ZAF325BM</li>
</ul>
<p>If it isnt youre taking a gigantic risk flashing anything.</p>
<p>Next up is dumping the VBIOS. You can also do that through GPU-Z, but
Id do it through Linux as well to ensure the VBIOS is matching. You
need to turn off VFIO anyway to flash a VBIOS. Comment out vfio-pci
binding the GPU at boot like in /etc/modprobe.d using # and rebuild
initramfs using something like mkinitcpio -P and rebooting. The GPU
needs to be taken by amdgpu module.</p>
<p>The command for dumping the BIOS using amdvbflash is:</p>
<pre class="shell"><code>./amdvbflash -s 0 MyOriginalVBIOS.rom</code></pre>
<p>You can also just dump it through sysbus:</p>
<pre class="shell"><code>cat /sys/bus/pci/devices/0000:0X:00.0/rom </code></pre>
<p>Where the X is the hexadecimal digit for where your GPU is located.
You can find it using lspci -vvv . You probably know yours already. Dump
multiple version of your VBIOS and ensure their checksum are the same so
that you dont sit there with a corrupted VBIOS backup and put it on
another machine/cloud to ensure you have it around.</p>
<p>As everyone points in every guide about these kind of things, but it
needs to be said anyway:</p>
<p><strong>Flashing any VBIOS, especially cross-vendor like this, will
100% destroy your warranty and you might sit there with a
brick.</strong></p>
<p>Use caution and remember it is your own fault if it never boots up
ever again. You should have dual-BIOS possibilities on your card to be
safer. Single-BIOS is very dangerous. You have been warned. So to flash
the thing, get the working VBIOS from here: VGA Bios Collection:
Sapphire RX 6700 XT 12 GB | TechPowerUp 48 The MD5 for this should be
<code>bbcf8fd1e226609094cd2283b3ea2259</code></p>
<p>Next up you need to flash the thing.</p>
<p>The <code>-p 0</code> here means card 0, make sure youre using the
correct card and not your hosts card!!!</p>
<pre><code>./amdvbflash -i # Check that 0 is the card you want to flash first!
./amdvbflash -fs -fp -fv -p 0 ./249630.rom # This is the actual flashing</code></pre>
<p>That will essentially flash and change the IDs of the card to match
the ROM.</p>
<p>You can verify that the ROM was correctly flashed by using:</p>
<pre><code>./amdvbflash -v 0 ./249630.rom</code></pre>
<p>If everything looks ok, shut down the system completely, cold boot
and pray things work out. If it boots up in Linux now without any issues
you should re-enable the VFIO-PCI module so it binds the card on the
next boot. Dont forget to rebuild initramfs.</p>
<p>Lastly, use your original VBIOS and pass that to the guest. That way
the card will use the correct clocks for your card and make it run like
it used to.</p>
<p>I would NOT recommend using the Sapphire RX 6700 XT on the host, use
your original VBIOS so it runs correctly.</p>
<h2 id="setup-pci-passthrough">Setup PCI Passthrough</h2>
<p>In my configuration, I pass USB device + GPU + NVMe (containing game
files), while also loading the original GPU ROM on the guest. Unlike
Proxmox, Qubes does not support this, even though Xen supports setting a
custom ROM file. A <a
href="https://github.com/QubesOS/qubes-issues/issues/7559#issuecomment-1152944698">creative
(read: hacky) solution</a> by <a
href="https://github.com/chriswoope">chriswoope</a> exists to introduce
the romfile, but it involves adding the romfile to the linux stubdomain
and making changes to <code>vchan-socket-proxy</code> to add the
necessary arguments when adding the GPU as a device. * Add GPU bios to
stubdomain using following script that can be created under
<code>/usr/local/bin/add-gpubios-stubdomain.sh</code>:</p>
<div class="sourceCode" id="cb7"><pre
class="sourceCode bash"><code class="sourceCode bash"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="co">#!/usr/bin/bash</span></span>
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a><span class="va">gpubio</span><span class="op">=</span><span class="va">$1</span></span>
<span id="cb7-4"><a href="#cb7-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb7-5"><a href="#cb7-5" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span> stubdom <span class="kw">in</span> /usr/libexec/xen/boot/qemu-stubdom-linux-rootfs /usr/libexec/xen/boot/qemu-stubdom-linux-full-rootfs<span class="kw">;</span> <span class="cf">do</span></span>
<span id="cb7-6"><a href="#cb7-6" aria-hidden="true" tabindex="-1"></a> <span class="va">dir</span><span class="op">=</span><span class="st">&quot;</span><span class="va">$(</span><span class="fu">mktemp</span> <span class="at">-d</span><span class="va">)</span><span class="st">&quot;</span></span>
<span id="cb7-7"><a href="#cb7-7" aria-hidden="true" tabindex="-1"></a> <span class="bu">cd</span> <span class="st">&quot;</span><span class="va">$dir</span><span class="st">&quot;</span></span>
<span id="cb7-8"><a href="#cb7-8" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> <span class="ot">! </span><span class="bu">test</span> <span class="at">-e</span> <span class="st">&quot;</span><span class="va">$stubdom</span><span class="st">.orig&quot;</span><span class="kw">;</span> <span class="cf">then</span></span>
<span id="cb7-9"><a href="#cb7-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">mv</span> <span class="st">&quot;</span><span class="va">$stubdom</span><span class="st">&quot;</span> <span class="st">&quot;</span><span class="va">$stubdom</span><span class="st">.orig&quot;</span></span>
<span id="cb7-10"><a href="#cb7-10" aria-hidden="true" tabindex="-1"></a> <span class="cf">fi</span></span>
<span id="cb7-11"><a href="#cb7-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">zcat</span> <span class="st">&quot;</span><span class="va">$stubdom</span><span class="st">.orig&quot;</span><span class="kw">|</span><span class="fu">cpio</span> <span class="at">-idm</span></span>
<span id="cb7-12"><a href="#cb7-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">cp</span> <span class="at">-a</span> <span class="st">&quot;</span><span class="va">${gpubios</span><span class="op">:=</span>/usr/libexec/xen/boot/gpubios<span class="va">}</span><span class="st">&quot;</span> ./share/gpubios</span>
<span id="cb7-13"><a href="#cb7-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">find</span> .<span class="kw">|</span><span class="fu">cpio</span> <span class="at">-o</span> <span class="at">-c</span><span class="kw">|</span><span class="fu">gzip</span> <span class="at">-9</span> <span class="op">&gt;</span> <span class="st">&quot;</span><span class="va">$stubdom</span><span class="st">&quot;</span></span>
<span id="cb7-14"><a href="#cb7-14" aria-hidden="true" tabindex="-1"></a><span class="cf">done</span></span></code></pre></div>
<ul>
<li>Rename <code>vchan-socket-proxy</code> to
<code>vchan-socket-proxy.orig</code>:</li>
</ul>
<pre class="shell"><code>mv /usr/bin/vchan-socket-proxy /usr/bin/vchan-socket-proxy.orig</code></pre>
<ul>
<li>Install <code>nmap-ncat</code>:</li>
</ul>
<pre class="shell"><code>qubes-dom0-update nmap-ncat</code></pre>
<ul>
<li>Create wrapper for <code>vchan-socket-proxy.orig</code> under
<code>/usr/bin/vchan-socket-proxy</code>, replacing
<code>0000:07:00:0</code> with PCI address of device:</li>
</ul>
<div class="sourceCode" id="cb10"><pre
class="sourceCode bash"><code class="sourceCode bash"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="co">#!/usr/bin/bash</span></span>
<span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb10-3"><a href="#cb10-3" aria-hidden="true" tabindex="-1"></a><span class="ex">vchan-socket-proxy.orig</span> <span class="st">&quot;</span><span class="va">$1</span><span class="st">&quot;</span> <span class="st">&quot;</span><span class="va">$2</span><span class="st">&quot;</span> <span class="st">&quot;</span><span class="va">$3</span><span class="st">&quot;</span> <span class="st">&quot;</span><span class="va">$4</span><span class="st">&quot;</span> <span class="st">&quot;</span><span class="va">$5</span><span class="st">.internal&quot;</span> <span class="kw">&amp;</span></span>
<span id="cb10-4"><a href="#cb10-4" aria-hidden="true" tabindex="-1"></a><span class="ex">ncat</span> <span class="at">-k</span> <span class="at">--listen</span> <span class="at">--unixsock</span> <span class="st">&quot;</span><span class="va">$5</span><span class="st">&quot;</span> <span class="at">--sh-exec</span> <span class="st">&quot;sed -u -e &#39;s|</span><span class="dt">\&quot;</span><span class="st">hostaddr</span><span class="dt">\&quot;</span><span class="st">:</span><span class="dt">\&quot;</span><span class="st">0000:07:00.0</span><span class="dt">\&quot;</span><span class="st">|</span><span class="dt">\&quot;</span><span class="st">hostaddr</span><span class="dt">\&quot;</span><span class="st">:</span><span class="dt">\&quot;</span><span class="st">0000:07:00.0</span><span class="dt">\&quot;</span><span class="st">,</span><span class="dt">\&quot;</span><span class="st">romfile</span><span class="dt">\&quot;</span><span class="st">:</span><span class="dt">\&quot;</span><span class="st">/share/gpubios</span><span class="dt">\&quot;</span><span class="st">|&#39;|ncat --unixsock </span><span class="va">$5</span><span class="st">.internal&quot;</span></span></code></pre></div>
<ul>
<li>Make these two files executable and add gpu bios to
stubdomains:</li>
</ul>
<pre class="shell"><code>chmod +x /usr/bin/vchan-socket-proxy /usr/local/bin/add-gpubios-stubdomain.sh
add-gpubios-stubdomain.sh /path/to/rom</code></pre>
<ul>
<li>add devices to qubes:</li>
</ul>
<pre class="shell"><code>qvm-pci list
qvm-pci attach bazzite (address of GPU) --persistent -o no-strict-reset=true -o permissive=true
qvm-pci attach bazzite (address of GPU audio) --persistent -o no-strict-reset=true -o permissive=true
qvm-pci attach bazzite (address of USB controller) --persistent -o no-strict-reset=true -o permissive=true</code></pre>
<ul>
<li>disable virtual video mode on qubes, else boot crashes when setting
romfile:</li>
</ul>
<pre class="shell"><code>qvm-features bazzite video-model none</code></pre>
<ul>
<li>start bazzite qubes, seeing if anything appears on display attached
to passthroughed GPU.</li>
<li>you can follow
<code>/var/log/xen/console/guest-bazzite-dm.log</code> to make sure
romfile argument has been applied</li>
</ul>
<h2 id="configuring-steam-storage-and-modorganizer2.">Configuring Steam
storage and ModOrganizer2.</h2>
<p>Since I am using an nvme drive for the game files, I setup this up as
a btrfs drive using the included disk manager. In terminal, on Bazzites
desktop, I setup two subvolumes as <code>steam</code> and
<code>mods</code>. The <code>steam</code> submodule is mounted using
<code>/etc/fstab</code> under
<code>/home/bazzite/.local/share/steam</code> while <code>mods</code> is
mounted under <code>/home/bazzite/Mods</code>. The latter contains mod
files used by ModOrganizer2.</p>
<p>ModOrganizer2 can be setup using Furglitchs <a
href="https://github.com/Furglitch/modorganizer2-linux-installer/releases">modorganiser2-linux-installer</a>.
The following should be noted:</p>
<ul>
<li>ModOrganizer does not like being on anywhere thats not under
<code>/home/bazzite</code> even when setting
<code>STEAM_COMPAT_MOUNTS</code>. Hence why the NVMe drive is mounted at
different locations.</li>
<li>Barring that, ModOrganizer should be installed in « Global mode »,
but mod files can be stored under <code>~/Mods</code></li>
<li><code>qpaths</code> is expected in a different location, a symbolic
link needed to be created:</li>
</ul>
<pre class="shell"><code>sudo ln -s /usr/bin/qtpaths6 /usr/local/bin/qtpaths</code></pre>
<h2 id="other-notes">Other notes</h2>
<ul>
<li>The qubes home drive isnt in use. Although, maybe it might be a
good idea to move the <code>home</code> subvolume from root to there. I
didnt do that since I didnt know if that would break Bazzites storage
model. If (for some reason) one would want to set Bazzite up as a
template (why, who knows), moving to the private subvolume would be
necessary</li>
<li>My GPUs (already broken) reset mechanism was even more buggy on
kernel 6.12. Upgrading to 6.18 did wonders to solve that.</li>
<li>My USB controller, based on asm2142, is a bit buggy. It sometimes
stops recognizing new devices. I suspect that this is due to the USB hub
being USB type A rather than C, so I bought a USB-C 10Gbit hub to make
sure it isnt signal degradation.</li>
</ul>
<h2 id="other-ressources">Other ressources</h2>
<ul>
<li><a
href="https://forum.qubes-os.org/t/gpu-passthrough-passthrough-works-but-no-monitor-recognized-only-vdisplay/31306">[1]Qubes
OS forums - GPU Passthrough (passthrough works but no monitor
recognized, only vDisplay)</a> Issue that shows different approaches
that might work, notably:</li>
</ul>
<pre><code>* Edit /etc/default/grub to include rd.qubes.hide_pci, iommu=pt, video=vesafb:off video=efifb:off video=simplefb:off nofb initcall_blacklist=sysfb_init (all the frame buffer stuff is a precaution since I noticed without it I would get text on the monitor connected to the gpu indicating memory being initialized.) See Explaining CSM, efifb=off, and Setting the * Boot GPU Manually - The Passthrough POST for some background on csm vs uefi and how it affects gpu passthrough.
* Edit /usr/share/qubes/templates/libvirt/devices/pci.xml to pass a techpower rom file (didnt seem to help). For those who care, I filtered on vm.name and device.libvirt_name=pci_0000_05_00_0.
* Edit /usr/share/qubes/templates/libvirt/devices/pci.xml to set rom bar=off (didnt see to help)
* Edit /usr/share/qubes/templates/libvirt/xen.xml to disable the cpu hypervisor feature (no noticeable affect)
* Create an sh file to change bar0 to 32GB and bar2 to 8MB. This is apparently necessary for Windows to avoid error 43 for whatever reason. Enabling or disabling rebar in bios does not seem to change behavior (may change performance) [SOLVED] 7900 XTX Code 43 or How to get 7900 XTX to work on VFIO - Virtualization - Level1Techs Forums
* Create an sh file to remount the gpu (remove and rescan).
* Attach the GPU with permissive and no-strict-reset. Didnt seem to change behavior.
* Enable everything related to virtualization in my motherboard bios (proart x670e-creator)
* Disable motherboard and cpu ASPM in my motherboard bios. Didnt seem to change behavior.</code></pre>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2026-01-03T20:16:29Z" class="dt-published">Sat Jan 3 15:16:29 2026</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/guides/gaming-vm-on-qubes-using-bazzite.mdwn">Edited <time datetime="2026-01-03T20:46:35Z">Sat Jan 3 15:46:35 2026</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=guides/gaming-vm-on-qubes-using-bazzite&t=Gaming%20VM%20on%20Qubes%20Using%20Bazzite" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

191
guides/index.en.html Normal file
View file

@ -0,0 +1,191 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Guides - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="manifest" href="../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../">
<img alt="Ayakael" src="../favicon.png" width="48" height="48" />
</a>
<div class="dropdown ps-2 pe-2">
<button class="btn language-switcher dropdown" type="button" id="language-menu-top" data-bs-toggle="dropdown" aria-expanded="false">
<div class="collapse navbar-collapse float-end ms-1" id="navbar">
English
</div>
<img src="../images/languages.png">
</button>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start" aria-labelledby="language-menu-top">
<li><a href="./index.fr.html">Français</a></li>
</ul>
</div>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../index.en.html">Home</a></li>
<li><a href="../blog/index.en.html">Blog</a></li>
<li><span class="selflink">Guides</span></li>
<li><a href="../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<h1 id="latest">Latest</h1>
<p><div class="feedlink">
</div>
<div class="archivepage">
<a href="./qubes-os-backups-using-zfs/">QubesOS backups using ZFS</a><br />
<span class="archivepagedate">
Posted <time datetime="2026-05-08T13:29:05Z" class="dt-published">Fri May 8 09:29:05 2026</time>
</span>
</div>
<div class="archivepage">
<a href="./virtualized-hardware-acceleration-qubes-os/">Virtualized hardware acceleration on QubesOS using Intel Arc B50</a><br />
<span class="archivepagedate">
Posted <time datetime="2026-04-27T20:18:46Z" class="dt-published">Mon Apr 27 16:18:46 2026</time>
</span>
</div>
<div class="archivepage">
<a href="./gaming-vm-on-qubes-using-bazzite/">Gaming VM on Qubes Using Bazzite</a><br />
<span class="archivepagedate">
Posted <time datetime="2026-01-03T20:16:29Z" class="dt-published">Sat Jan 3 15:16:29 2026</time>
</span>
</div>
<div class="archivepage">
<a href="./davinci-resolve/">Davinci Resolve Workstation</a><br />
<span class="archivepagedate">
Posted <time datetime="2026-01-03T18:33:00Z" class="dt-published">Sat Jan 3 13:33:00 2026</time>
</span>
</div>
</p>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2026-01-03T18:33:00Z" class="dt-published">Sat Jan 3 13:33:00 2026</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/guides.mdwn">Edited <time datetime="2026-01-03T18:59:42Z">Sat Jan 3 13:59:42 2026</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=guides&t=Guides" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

157
guides/index.fr.html Normal file
View file

@ -0,0 +1,157 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Guides - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="manifest" href="../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../">
<img alt="Ayakael" src="../favicon.png" width="48" height="48" />
</a>
<div class="dropdown ps-2 pe-2">
<button class="btn language-switcher dropdown" type="button" id="language-menu-top" data-bs-toggle="dropdown" aria-expanded="false">
<div class="collapse navbar-collapse float-end ms-1" id="navbar">
Français
</div>
<img src="../images/languages.png">
</button>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start" aria-labelledby="language-menu-top">
<li><a href="./index.en.html">English</a></li>
</ul>
</div>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../index.fr.html">Accueil</a></li>
<li><a href="../blog/index.fr.html">Blog</a></li>
<li><span class="selflink">Guides</span></li>
<li><a href="../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../contact/index.fr.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<h1 id="récent">Récent</h1>
<p>(basculer vers langlais pour tout mon contenu)</p>
<p><div class="feedlink">
</div>
</p>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2026-01-03T18:33:00Z" class="dt-published">Sat Jan 3 13:33:00 2026</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/guides.fr.po">Edited <time datetime="2026-01-03T18:59:42Z">Sat Jan 3 13:59:42 2026</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Propulsé par <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=guides.fr&t=Guides" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

View file

@ -1,115 +0,0 @@
[[!meta title="QubesOS backups using ZFS"]]
# QubesOS backups using ZFS
<hr>
Rather than use the QubesOS backup solution, I homecooked my own leveraging
ZFS. Since my disk is encrypted using ZFS, this has the benefit of allowing
incremental backups while sending encrypted backups to another ZFS pool.
My implementation uses sanoid / syncoid to handle the incremental subvolume
management. Fortunately, this is packaged in Fedora and simply requires:
```shell
qubes-dom0-update sanoid
```
The rest of the workflow is handled by very simple shell scripts.
**SSH tunnel**
Since dom0 is without internet, syncoid needs to send the encrypted dataset
via an ssh tunnel that goes through `qvm-run`. To facilitate this, under
`/usr/local/bin/qubes-ssh-proxy`, I have a very simple wrapper script:
```shell
#!/bin/bash
CMD="ssh ${@}"
CMD=$(sed 's$;$\\;$g' <<< ${CMD})
CMD=$(sed 's$|$\\|$g' <<< ${CMD})
qvm-run -p $QUBES_SSH_PROXY "${CMD}"
```
This uses environment variable `QUBES_SSH_PROXY` to set target, wraps the ssh
command and feeds it into `qvm-run`. Special characters are escaped.
So that syncoid uses the SSH proxy, we have to modify `/usr/sbin/syncoid`:
```diff
diff --git a/usr/sbin/syncoid.orig b/usr/sbin/syncoid
index 956f3e7..484aae4 100755
--- a/usr/sbin/syncoid.orig
+++ b/usr/sbin/syncoid
@@ -103,7 +103,7 @@ $ENV{'PATH'} = $ENV{'PATH'} . ":/bin:/usr/bin:/sbin";
my $zfscmd = 'zfs';
my $zpoolcmd = 'zpool';
-my $sshcmd = 'ssh';
+my $sshcmd = 'qubes-ssh-proxy';
my $pscmd = 'ps';
my $pvcmd = 'pv';
```
Eventually, might be worthwhile to implement an environment variable to feed
`$sshcmd` in a more elegant way.
**Syncoid wrapper**
Finally, I use a very small script that wraps syncoid, and transfers the subvolumes
that I want to transfer. I call it `bacoid`, and it lives under `/usr/local/bin`:
```shell
#!/bin/bash
USER=(target user)
MACHINE=(machine name)
HOST=(target host)
PORT=(target port)
POOL=(target pool)
KEY=(key on dom0 to use)
KNOWN_HOSTS=(known hosts on dom0 to use)
export QUBES_SSH_PROXY=sys-firewall
if ! qvm-run -p $QUBES_SSH_PROXY "ls /home/user/QubesIncoming/dom0/${KEY##*/}"; then
echo "copying dom0 key"
qvm-copy-to-vm $QUBES_SSH_PROXY $KEY
fi
if ! qvm-run -p $QUBES_SSH_PROXY "ls /home/user/QubesIncoming/dom0/${KNOWN_HOSTS##*/}"; then
echo "copying dom0 known_hosts"
qvm-copy-to-vm $QUBES_SSH_PROXY $KNOWN_HOSTS
fi
subvolArray=(
(array of subvolumes to transfer)
)
for subvol in ${subvolArray[@]}; do
syncoid --sendoptions="w" --compress=none --recvoptions="u" -r --sshport=${PORT} --no-privilege-elevation ${subvol} ${USER}@${HOST}:${POOL}/${USER/-/\/}/${MACHINE}/${subvol} --sshkey=/home/user/QubesIncoming/dom0/${KEY##*/}
done
```
What this does is use `qubes-ssh-proxy` to tunnel a ZFS send / receive
operation that targets a remote server. We leverage `--sendoptions="w"` to send
the ZFS subvolume as raw, thus encrypted. The target machine will not be able
to read the subvolume.
This wrapper evidently assumes you have a key generated on dom0, and `known_hosts` file
with the target machines' host. So you have the send the public key to the remote server
and import the server's fingerprint in dom0. Since I use a disposable VM for `sys-firewall`,
this is why dom0 key and known hosts file is transferred.
**Security**
It's worth mentionning again that if your dataset is not encrypted, it will be
readable by the target machine. That said, the transfer is always encrypted
since it's over SSH. In any case, I send this to a machine that I control, and
the hosts fingerprint would be different in the event of a man-in-the-middle
attack.
There are also more sophisticated implementation of this idea. For example,
another version of bacoid used on my servers leverage ZFS config parameters
to set target machine, user, etc. Since my needs on my Qubes workstation is
limited, I kept this KISS.

View file

@ -0,0 +1,232 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>QubesOS backups using ZFS - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../../favicon-16x16.png">
<link rel="manifest" href="../../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../../">
<img alt="Ayakael" src="../../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../../index.en.html">Home</a></li>
<li><a href="../../blog/index.en.html">Blog</a></li>
<li><a href="../index.en.html">Guides</a></li>
<li><a href="../../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<h1 id="qubesos-backups-using-zfs">QubesOS backups using ZFS</h1>
<hr>
<p>Rather than use the QubesOS backup solution, I homecooked my own
leveraging ZFS. Since my disk is encrypted using ZFS, this has the
benefit of allowing incremental backups while sending encrypted backups
to another ZFS pool.</p>
<p>My implementation uses sanoid / syncoid to handle the incremental
subvolume management. Fortunately, this is packaged in Fedora and simply
requires:</p>
<pre class="shell"><code>qubes-dom0-update sanoid</code></pre>
<p>The rest of the workflow is handled by very simple shell scripts.</p>
<p><strong>SSH tunnel</strong></p>
<p>Since dom0 is without internet, syncoid needs to send the encrypted
dataset via an ssh tunnel that goes through <code>qvm-run</code>. To
facilitate this, under <code>/usr/local/bin/qubes-ssh-proxy</code>, I
have a very simple wrapper script:</p>
<pre class="shell"><code>#!/bin/bash
CMD=&quot;ssh ${@}&quot;
CMD=$(sed &#39;s$;$\\;$g&#39; &lt;&lt;&lt; ${CMD})
CMD=$(sed &#39;s$|$\\|$g&#39; &lt;&lt;&lt; ${CMD})
qvm-run -p $QUBES_SSH_PROXY &quot;${CMD}&quot;</code></pre>
<p>This uses environment variable <code>QUBES_SSH_PROXY</code> to set
target, wraps the ssh command and feeds it into <code>qvm-run</code>.
Special characters are escaped.</p>
<p>So that syncoid uses the SSH proxy, we have to modify
<code>/usr/sbin/syncoid</code>:</p>
<div class="sourceCode" id="cb3"><pre
class="sourceCode diff"><code class="sourceCode diff"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="kw">diff --git a/usr/sbin/syncoid.orig b/usr/sbin/syncoid</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a>index 956f3e7..484aae4 100755</span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a><span class="dt">--- a/usr/sbin/syncoid.orig</span></span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a><span class="dt">+++ b/usr/sbin/syncoid</span></span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a><span class="dt">@@ -103,7 +103,7 @@ $ENV{&#39;PATH&#39;} = $ENV{&#39;PATH&#39;} . &quot;:/bin:/usr/bin:/sbin&quot;;</span></span>
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a> </span>
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a> my $zfscmd = &#39;zfs&#39;;</span>
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a> my $zpoolcmd = &#39;zpool&#39;;</span>
<span id="cb3-9"><a href="#cb3-9" aria-hidden="true" tabindex="-1"></a><span class="st">-my $sshcmd = &#39;ssh&#39;;</span></span>
<span id="cb3-10"><a href="#cb3-10" aria-hidden="true" tabindex="-1"></a><span class="va">+my $sshcmd = &#39;qubes-ssh-proxy&#39;;</span></span>
<span id="cb3-11"><a href="#cb3-11" aria-hidden="true" tabindex="-1"></a> my $pscmd = &#39;ps&#39;;</span>
<span id="cb3-12"><a href="#cb3-12" aria-hidden="true" tabindex="-1"></a> </span>
<span id="cb3-13"><a href="#cb3-13" aria-hidden="true" tabindex="-1"></a> my $pvcmd = &#39;pv&#39;;</span></code></pre></div>
<p>Eventually, might be worthwhile to implement an environment variable
to feed <code>$sshcmd</code> in a more elegant way.</p>
<p><strong>Syncoid wrapper</strong></p>
<p>Finally, I use a very small script that wraps syncoid, and transfers
the subvolumes that I want to transfer. I call it <code>bacoid</code>,
and it lives under <code>/usr/local/bin</code>:</p>
<pre class="shell"><code>#!/bin/bash
USER=(target user)
MACHINE=(machine name)
HOST=(target host)
PORT=(target port)
POOL=(target pool)
KEY=(key on dom0 to use)
KNOWN_HOSTS=(known hosts on dom0 to use)
export QUBES_SSH_PROXY=sys-firewall
if ! qvm-run -p $QUBES_SSH_PROXY &quot;ls /home/user/QubesIncoming/dom0/${KEY##*/}&quot;; then
echo &quot;copying dom0 key&quot;
qvm-copy-to-vm $QUBES_SSH_PROXY $KEY
fi
if ! qvm-run -p $QUBES_SSH_PROXY &quot;ls /home/user/QubesIncoming/dom0/${KNOWN_HOSTS##*/}&quot;; then
echo &quot;copying dom0 known_hosts&quot;
qvm-copy-to-vm $QUBES_SSH_PROXY $KNOWN_HOSTS
fi
subvolArray=(
(array of subvolumes to transfer)
)
for subvol in ${subvolArray[@]}; do
syncoid --sendoptions=&quot;w&quot; --compress=none --recvoptions=&quot;u&quot; -r --sshport=${PORT} --no-privilege-elevation ${subvol} ${USER}@${HOST}:${POOL}/${USER/-/\/}/${MACHINE}/${subvol} --sshkey=/home/user/QubesIncoming/dom0/${KEY##*/}
done</code></pre>
<p>What this does is use <code>qubes-ssh-proxy</code> to tunnel a ZFS
send / receive operation that targets a remote server. We leverage
<code>--sendoptions="w"</code> to send the ZFS subvolume as raw, thus
encrypted. The target machine will not be able to read the
subvolume.</p>
<p>This wrapper evidently assumes you have a key generated on dom0, and
<code>known_hosts</code> file with the target machines host. So you
have the send the public key to the remote server and import the
servers fingerprint in dom0. Since I use a disposable VM for
<code>sys-firewall</code>, this is why dom0 key and known hosts file is
transferred.</p>
<p><strong>Security</strong></p>
<p>Its worth mentionning again that if your dataset is not encrypted,
it will be readable by the target machine. That said, the transfer is
always encrypted since its over SSH. In any case, I send this to a
machine that I control, and the hosts fingerprint would be different in
the event of a man-in-the-middle attack.</p>
<p>There are also more sophisticated implementation of this idea. For
example, another version of bacoid used on my servers leverage ZFS
config parameters to set target machine, user, etc. Since my needs on my
Qubes workstation is limited, I kept this KISS.</p>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2026-05-08T13:29:05Z" class="dt-published">Fri May 8 09:29:05 2026</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/guides/qubes-os-backups-using-zfs.mdwn">Edited <time datetime="2026-05-08T13:33:35Z">Fri May 8 09:33:35 2026</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=guides/qubes-os-backups-using-zfs&t=QubesOS%20backups%20using%20ZFS" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

View file

@ -1,204 +0,0 @@
[[!meta title="Virtualized hardware acceleration on QubesOS using Intel Arc B50"]]
# Virtualized hardware acceleration on QubesOS using Intel Arc B50
<hr>
## Setting up the Arc Pro B50
### Update the Arc Pro firmware
The Arc Pro B50, out of factory, does not include a firmware that supports
SR-IOV. We thus have to update it. Unfortunately, it looks like [newer version
of the firmware artifically limits to VF count to 2](https://community.intel.com/t5/Graphics/Why-did-the-latest-Intel-Arc-ProB50-firmware-nerf-SR-IOV-VFs/td-p/1732703)
rather than 12, when the feature was first supported. You might want to flash
to older version, in this case.
Driver overview for the B50:
* Driver 32.0.101.8331 for Intel Arc < max VFs = 2
* Driver 32.0.101.8306 for Intel Arc Pro < max VFs = 2
* Driver 32.0.101.6979 for Intel Arc Pro < max VFs = 12
The last driver in the list is still the one to get to have access to all
Virtual Functions. The easy way to flash the new drivers is by installing, in a
windows environment, the [Intel Arc Pro Graphic driver](https://www.intel.com/content/www/us/en/download/741626/intel-arc-pro-graphics-windows.html) of the version you desire. Unfortunately, this requires
running windows on bare-metal to flash safely.
There is a way to update the firmware using `fwupd`, but this guide has not
documented this way yet on QubesOS.
### Determine the device address
```shell
$ lspci -vv | grep B50
06:00.0 VGA compatible controller: Intel Corporation Battlemage G21 [Arc Pro B50] (prog-if 00 [VGA controller])
```
For the rest of the guide, I will reference the B50 with 0000:06:00.0. Update
the snippets accordingly.
```shell
$ lspci -vv -s 06:00.0
06:00.0 VGA compatible controller: Intel Corporation Battlemage G21 [Arc Pro B50] (prog-if 00 [VGA controller])
Subsystem: Intel Corporation Device 1114
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin ? routed to IRQ 228
IOMMU group: 13
Region 0: Memory at 13e0c000000 (64-bit, prefetchable) [size=16M]
Region 2: Memory at 13400000000 (64-bit, prefetchable) [size=16G]
Expansion ROM at cdc00000 [disabled] [size=2M]
Capabilities: <access denied>
Kernel driver in use: xe
Kernel modules: xe
```
If everything went well the last two lines should point to the xe driver.
Query max Virtual Functions
```shell
$ cat /sys/bus/pci/devices/0000:06:00.0/sriov_totalvfs
2
```
## Boot process
### Hardware
Not all hardware will support the SR-IOV use case. The following needs to be
enabled in BIOS:
* ResizeBar
* IOMMU / SR-IOV
* ASPM (optional, but advised by Intel)
In my case, I have a Supermicro X10-based system, which means ResizeBar is not
supported. To unlock, I thus leveraged [xCurio0's
ReBarUEFI](https://github.com/xCuri0/ReBARUEFI) to patch in ResizeBar support.
How to do this is out-of-scope of this guide.
### Kernel
This also requires a newer kernel. At the time of writing this guide, kernel
6.19 works, but kernel 6.17 theoretically includes SR-IOV support in xe drivers
### Disabling auto probing
There is a currently a bug with Xen, where unbinding `xe` from virtual
functions after creation leads to a kernel crash. To mitigate this issue, we can
disable automatic probing by leveraging the `sriov_drivers_autoprobe` sysfs
parameter:
```shell
echo 0 | sudo tee /sys/bus/pci/devices/"$DEVICE"/sriov_drivers_autoprobe
```
This will ensure that the virtual function will be able to attach the device
when starting the VM.
That said, the following udev rule can be created to do this automatically:
```udev
ACTION="add", SUBSYSTEM="pci", ATTR{sriov_totalvfs}=="*", ATTR{sriov_drivers_autoprobe}="0"
```
### Enable virtual function creation
Due to how the driver works, when the virtual functions are created, whatever
VRAM is not currently in use will be split up between the functions. Thus, to
keep some VRAM for the host, we have to allocate some memory, before creating
the VFs. There isn'tan elegant way to do so, so this guide proposes the use of
[vramfs](https://github.com/Overv/vramfs) to pre-allocate VRAM for the host,
then drop the vram filesystem after creation of the virtual functions.
Unfortunately, `vramfs` is not packaged in Fedora, so it is provided by myself
via my [qubes-pkgs](https://ayakael.net/forge/qubes-pkgs) repo, and installable
through dnf using [this
package](https://ayakael.net/forge/-/packages/rpm/vramfs).
To facilitate setting up the virtual functions, I took [vitabis'
script](https://forum.level1techs.com/t/virtualization-workstation-with-the-intel-arc-pro-b50/243577)
and wrapped it in a udev rule. So, on dom0, you can create the following file
under `/usr/local/bin/spawn_xe_vfs.sh`:
```shell
#!/bin/bash
###################################################################
# Helper script to automate the initialization of Virtual Functions
# The idea is to quickly allocate memory space on the Arc Pro GPU,
# before the Virtual Functions are created. After VF creation,
# this memory is released and will remain available to the PF.
###################################################################
### VARIABLES FOR USER TO SET (REQUIRED)
# The Physical Function's address (eg from lspci, domain:bus:device.function)
DEVICE="$1"
# Number of Virtual Functions to create
NUM_VFS="$2"
### VARIABLES FOR USER TO OVERRIDE (OPTIONAL)
# Amount of memory that will remain available to the Physical Function after
# Virtual Functions have been created (in KB/MB/GB).
VRAMFS_SIZE="$3"
# Entry path into the vramfs filesystem
VRAMFS_PATH="/tmp/vram"
# Delay until the vramfs filesystem is mounted (in seconds)
DELAY_VFS=3
# Create vramfs storage of requested size.
if [ ! -e "$VRAMFS_PATH" ]; then
/usr/bin/mkdir $VRAMFS_PATH
fi
/usr/bin/vramfs $VRAMFS_PATH $VRAMFS_SIZE &
# Wait for the filesystem to mount (in the background) before spawning VFs
sleep $DELAY_VFS
# Create Virtual Functions
echo "creating vfs."
/usr/bin/echo $NUM_VFS > "/sys/bus/pci/devices/"$DEVICE"/sriov_numvfs"
# Tear down the vramfs filesystem
echo "terminating vramfs."
```
Make it executable:
```shell
chmod +x /usr/local/bin/spawn_xe_vfs.sh
```
Finally, create the udev rule under
`/etc/udev/rules.d/81-enable-sriov-numvfs.rules`:
```udev
ACTION="add", SUBSYSTEM=="pci", ATTR{subsystem_device}=="0x1114", ATTR{subsystem_vendor}=="0x8086", RUN+="/usr/local/bin/spawn_xe_vfs.sh %k 2 1GB"
```
This rule, when adding the Intel Arc B50, executes `spawn_xe_vfs.sh` and feeds
the device address, tells the script to create 2 virtual functions, while
pre-allocating 1GB of VRAM to the host. You can adjust these arguments
depending on your needs, and which firmware you used.
## Assign VF to VM
After this, you should be able to assign the virtual functions to the VM like
any other PCI device. You should use, at least, the kernel version used in
dom0. The VM should also be an HVM, like any other VM you attach devices to.
## References
* [Vitabis' guide on virtualization workstation with the Inter Arc Pro B50](https://forum.level1techs.com/t/virtualization-workstation-with-the-intel-arc-pro-b50/243577)
* [Level1Tech forums thread on the Intel Arc Pro B50 and SR-IOV support with many many comments](https://forum.level1techs.com/t/intel-arc-pro-b50-sr-iov-and-me/236473)
* [QubesOS forum thread on using SR-IOV in QubesOS contact](https://forum.qubes-os.org/t/virtualised-intel-gpu-with-sr-iov/40649/35)
## Known issues
* Fans can sometimes get stuck at 100% when there is no monitor connected. Workaround is to plug a headless displayport adapter. ([read more](https://www.linkedin.com/pulse/running-docker-swarm-cluster-intel-arc-pro-b50-sascha-siekmann-wcwqc#:~:text=Well%2C%20after%2020%20minutes%20the,advice:%20never%20throw%20anything%20away.))
* Using the Intel Arc B50 as dom0's GPU is problematic. After a while, artifacts appear (flickering black bars, black boxes). This seems to be a bug with Xen when dom0 is in PV mode ([qubes os ticket](https://github.com/QubesOS/qubes-issues/issues/10661), [upstream report](https://lore.kernel.org/xen-devel/aYtznP_tT6xNPwf-@mail-itl/T/#u)). My workaround is to use a different GPU for dom0, which defeats the purpose of pre-allocating VRAM, but alas... hopefully this is fixed soon. (update 2026/05/20 - since update to linux 7.0, these artifacts happen a lot less frequently)
* Quite often, VM hangs for a moment, and kernel log shows: `xe 0000:00:08.0: [drm] *ERROR* TLB invalidation fence timeout, seqno=287 recv=286`. Still investigating a workaround. (seems to be related to [gitlab.freedesktop.org/drm/i915#14469](https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/14469#note_3170015) and [gh/strongtz/i915-sriov-dkms#332](https://github.com/strongtz/i915-sriov-dkms/issues/332))

View file

@ -0,0 +1,326 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Virtualized hardware acceleration on QubesOS using Intel Arc B50 - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../../favicon-16x16.png">
<link rel="manifest" href="../../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../../css/local.css" type="text/css" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../../">
<img alt="Ayakael" src="../../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../../index.en.html">Home</a></li>
<li><a href="../../blog/index.en.html">Blog</a></li>
<li><a href="../index.en.html">Guides</a></li>
<li><a href="../../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<h1
id="virtualized-hardware-acceleration-on-qubesos-using-intel-arc-b50">Virtualized
hardware acceleration on QubesOS using Intel Arc B50</h1>
<hr>
<h2 id="setting-up-the-arc-pro-b50">Setting up the Arc Pro B50</h2>
<h3 id="update-the-arc-pro-firmware">Update the Arc Pro firmware</h3>
<p>The Arc Pro B50, out of factory, does not include a firmware that
supports SR-IOV. We thus have to update it. Unfortunately, it looks like
<a
href="https://community.intel.com/t5/Graphics/Why-did-the-latest-Intel-Arc-ProB50-firmware-nerf-SR-IOV-VFs/td-p/1732703">newer
version of the firmware artifically limits to VF count to 2</a> rather
than 12, when the feature was first supported. You might want to flash
to older version, in this case.</p>
<p>Driver overview for the B50:</p>
<ul>
<li>Driver 32.0.101.8331 for Intel Arc &lt; max VFs = 2</li>
<li>Driver 32.0.101.8306 for Intel Arc Pro &lt; max VFs = 2</li>
<li>Driver 32.0.101.6979 for Intel Arc Pro &lt; max VFs = 12</li>
</ul>
<p>The last driver in the list is still the one to get to have access to
all Virtual Functions. The easy way to flash the new drivers is by
installing, in a windows environment, the <a
href="https://www.intel.com/content/www/us/en/download/741626/intel-arc-pro-graphics-windows.html">Intel
Arc Pro Graphic driver</a> of the version you desire. Unfortunately,
this requires running windows on bare-metal to flash safely.</p>
<p>There is a way to update the firmware using <code>fwupd</code>, but
this guide has not documented this way yet on QubesOS.</p>
<h3 id="determine-the-device-address">Determine the device address</h3>
<pre class="shell"><code>$ lspci -vv | grep B50
06:00.0 VGA compatible controller: Intel Corporation Battlemage G21 [Arc Pro B50] (prog-if 00 [VGA controller])</code></pre>
<p>For the rest of the guide, I will reference the B50 with
0000:06:00.0. Update the snippets accordingly.</p>
<pre class="shell"><code>$ lspci -vv -s 06:00.0
06:00.0 VGA compatible controller: Intel Corporation Battlemage G21 [Arc Pro B50] (prog-if 00 [VGA controller])
Subsystem: Intel Corporation Device 1114
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast &gt;TAbort- &lt;TAbort- &lt;MAbort- &gt;SERR- &lt;PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin ? routed to IRQ 228
IOMMU group: 13
Region 0: Memory at 13e0c000000 (64-bit, prefetchable) [size=16M]
Region 2: Memory at 13400000000 (64-bit, prefetchable) [size=16G]
Expansion ROM at cdc00000 [disabled] [size=2M]
Capabilities: &lt;access denied&gt;
Kernel driver in use: xe
Kernel modules: xe</code></pre>
<p>If everything went well the last two lines should point to the xe
driver.</p>
<p>Query max Virtual Functions</p>
<pre class="shell"><code>$ cat /sys/bus/pci/devices/0000:06:00.0/sriov_totalvfs
2</code></pre>
<h2 id="boot-process">Boot process</h2>
<h3 id="hardware">Hardware</h3>
<p>Not all hardware will support the SR-IOV use case. The following
needs to be enabled in BIOS:</p>
<ul>
<li>ResizeBar</li>
<li>IOMMU / SR-IOV</li>
<li>ASPM (optional, but advised by Intel)</li>
</ul>
<p>In my case, I have a Supermicro X10-based system, which means
ResizeBar is not supported. To unlock, I thus leveraged <a
href="https://github.com/xCuri0/ReBARUEFI">xCurio0s ReBarUEFI</a> to
patch in ResizeBar support. How to do this is out-of-scope of this
guide.</p>
<h3 id="kernel">Kernel</h3>
<p>This also requires a newer kernel. At the time of writing this guide,
kernel 6.19 works, but kernel 6.17 theoretically includes SR-IOV support
in xe drivers</p>
<h3 id="disabling-auto-probing">Disabling auto probing</h3>
<p>There is a currently a bug with Xen, where unbinding <code>xe</code>
from virtual functions after creation leads to a kernel crash. To
mitigate this issue, we can disable automatic probing by leveraging the
<code>sriov_drivers_autoprobe</code> sysfs parameter:</p>
<pre class="shell"><code>echo 0 | sudo tee /sys/bus/pci/devices/&quot;$DEVICE&quot;/sriov_drivers_autoprobe</code></pre>
<p>This will ensure that the virtual function will be able to attach the
device when starting the VM.</p>
<p>That said, the following udev rule can be created to do this
automatically:</p>
<pre class="udev"><code>ACTION=&quot;add&quot;, SUBSYSTEM=&quot;pci&quot;, ATTR{sriov_totalvfs}==&quot;*&quot;, ATTR{sriov_drivers_autoprobe}=&quot;0&quot;</code></pre>
<h3 id="enable-virtual-function-creation">Enable virtual function
creation</h3>
<p>Due to how the driver works, when the virtual functions are created,
whatever VRAM is not currently in use will be split up between the
functions. Thus, to keep some VRAM for the host, we have to allocate
some memory, before creating the VFs. There isntan elegant way to do
so, so this guide proposes the use of <a
href="https://github.com/Overv/vramfs">vramfs</a> to pre-allocate VRAM
for the host, then drop the vram filesystem after creation of the
virtual functions.</p>
<p>Unfortunately, <code>vramfs</code> is not packaged in Fedora, so it
is provided by myself via my <a
href="https://ayakael.net/forge/qubes-pkgs">qubes-pkgs</a> repo, and
installable through dnf using <a
href="https://ayakael.net/forge/-/packages/rpm/vramfs">this
package</a>.</p>
<p>To facilitate setting up the virtual functions, I took <a
href="https://forum.level1techs.com/t/virtualization-workstation-with-the-intel-arc-pro-b50/243577">vitabis
script</a> and wrapped it in a udev rule. So, on dom0, you can create
the following file under
<code>/usr/local/bin/spawn_xe_vfs.sh</code>:</p>
<pre class="shell"><code>#!/bin/bash
###################################################################
# Helper script to automate the initialization of Virtual Functions
# The idea is to quickly allocate memory space on the Arc Pro GPU,
# before the Virtual Functions are created. After VF creation,
# this memory is released and will remain available to the PF.
###################################################################
### VARIABLES FOR USER TO SET (REQUIRED)
# The Physical Function&#39;s address (eg from lspci, domain:bus:device.function)
DEVICE=&quot;$1&quot;
# Number of Virtual Functions to create
NUM_VFS=&quot;$2&quot;
### VARIABLES FOR USER TO OVERRIDE (OPTIONAL)
# Amount of memory that will remain available to the Physical Function after
# Virtual Functions have been created (in KB/MB/GB).
VRAMFS_SIZE=&quot;$3&quot;
# Entry path into the vramfs filesystem
VRAMFS_PATH=&quot;/tmp/vram&quot;
# Delay until the vramfs filesystem is mounted (in seconds)
DELAY_VFS=3
# Create vramfs storage of requested size.
if [ ! -e &quot;$VRAMFS_PATH&quot; ]; then
/usr/bin/mkdir $VRAMFS_PATH
fi
/usr/bin/vramfs $VRAMFS_PATH $VRAMFS_SIZE &amp;
# Wait for the filesystem to mount (in the background) before spawning VFs
sleep $DELAY_VFS
# Create Virtual Functions
echo &quot;creating vfs.&quot;
/usr/bin/echo $NUM_VFS &gt; &quot;/sys/bus/pci/devices/&quot;$DEVICE&quot;/sriov_numvfs&quot;
# Tear down the vramfs filesystem
echo &quot;terminating vramfs.&quot;</code></pre>
<p>Make it executable:</p>
<pre class="shell"><code>chmod +x /usr/local/bin/spawn_xe_vfs.sh</code></pre>
<p>Finally, create the udev rule under
<code>/etc/udev/rules.d/81-enable-sriov-numvfs.rules</code>:</p>
<pre class="udev"><code>ACTION=&quot;add&quot;, SUBSYSTEM==&quot;pci&quot;, ATTR{subsystem_device}==&quot;0x1114&quot;, ATTR{subsystem_vendor}==&quot;0x8086&quot;, RUN+=&quot;/usr/local/bin/spawn_xe_vfs.sh %k 2 1GB&quot;</code></pre>
<p>This rule, when adding the Intel Arc B50, executes
<code>spawn_xe_vfs.sh</code> and feeds the device address, tells the
script to create 2 virtual functions, while pre-allocating 1GB of VRAM
to the host. You can adjust these arguments depending on your needs, and
which firmware you used.</p>
<h2 id="assign-vf-to-vm">Assign VF to VM</h2>
<p>After this, you should be able to assign the virtual functions to the
VM like any other PCI device. You should use, at least, the kernel
version used in dom0. The VM should also be an HVM, like any other VM
you attach devices to.</p>
<h2 id="references">References</h2>
<ul>
<li><a
href="https://forum.level1techs.com/t/virtualization-workstation-with-the-intel-arc-pro-b50/243577">Vitabis
guide on virtualization workstation with the Inter Arc Pro B50</a></li>
<li><a
href="https://forum.level1techs.com/t/intel-arc-pro-b50-sr-iov-and-me/236473">Level1Tech
forums thread on the Intel Arc Pro B50 and SR-IOV support with many many
comments</a></li>
<li><a
href="https://forum.qubes-os.org/t/virtualised-intel-gpu-with-sr-iov/40649/35">QubesOS
forum thread on using SR-IOV in QubesOS contact</a></li>
</ul>
<h2 id="known-issues">Known issues</h2>
<ul>
<li>Fans can sometimes get stuck at 100% when there is no monitor
connected. Workaround is to plug a headless displayport adapter. (<a
href="https://www.linkedin.com/pulse/running-docker-swarm-cluster-intel-arc-pro-b50-sascha-siekmann-wcwqc#:~:text=Well%2C%20after%2020%20minutes%20the,advice:%20never%20throw%20anything%20away.">read
more</a>)</li>
<li>Using the Intel Arc B50 as dom0s GPU is problematic. After a while,
artifacts appear (flickering black bars, black boxes). This seems to be
a bug with Xen when dom0 is in PV mode (<a
href="https://github.com/QubesOS/qubes-issues/issues/10661">qubes os
ticket</a>, <a
href="https://lore.kernel.org/xen-devel/aYtznP_tT6xNPwf-@mail-itl/T/#u">upstream
report</a>). My workaround is to use a different GPU for dom0, which
defeats the purpose of pre-allocating VRAM, but alas… hopefully this is
fixed soon. (update 2026/05/20 - since update to linux 7.0, these
artifacts happen a lot less frequently)</li>
<li>Quite often, VM hangs for a moment, and kernel log shows:
<code>xe 0000:00:08.0: [drm] *ERROR* TLB invalidation fence timeout, seqno=287 recv=286</code>.
Still investigating a workaround. (seems to be related to <a
href="https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/14469#note_3170015">gitlab.freedesktop.org/drm/i915#14469</a>
and <a
href="https://github.com/strongtz/i915-sriov-dkms/issues/332">gh/strongtz/i915-sriov-dkms#332</a>)</li>
</ul>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2026-04-27T20:18:46Z" class="dt-published">Mon Apr 27 16:18:46 2026</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/guides/virtualized-hardware-acceleration-qubes-os.mdwn">Edited <time datetime="2026-05-20T13:37:39Z">Wed May 20 09:37:39 2026</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=guides/virtualized-hardware-acceleration-qubes-os&t=Virtualized%20hardware%20acceleration%20on%20QubesOS%20using%20Intel%20Arc%20B50" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

204
ikiwiki.fr/index.html Normal file
View file

@ -0,0 +1,204 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="robots" content="\&quot;noindex," />
<title>ikiwiki.fr - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="manifest" href="../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../css/local.css" type="text/css" />
<meta name="robots" content="\&quot;noindex," />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../">
<img alt="Ayakael" src="../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../index.en.html">Home</a></li>
<li><a href="../blog/index.en.html">Blog</a></li>
<li><a href="../guides/index.en.html">Guides</a></li>
<li><a href="../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
# Traduction de ikiwiki
# Copyright (C) 2009 Debian French l10n team <debian-l10n-french@lists.debian.org>
# This file is distributed under the same license as the PACKAGE Ikiwiki.
#
msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"POT-Creation-Date: 2010-07-18 22:29+0000\n"
"PO-Revision-Date: 2010-07-21 16:41+0200\n"
"Last-Translator: Philippe Batailler <philippe.batailler@free.fr>\n"
"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. type: Plain text
#, no-wrap
msgid "\n"
msgstr "\n"
#. type: Plain text
#, no-wrap
msgid ""
"This wiki is powered by [ikiwiki](http://ikiwiki.info/).\n"
"[[!if <span class="error">Error: syntax error in pagespec &quot;&#92;&quot;enabled&#40;version&#41;&#92;&quot;&#92;n&quot;&quot;</span>]]\n"
msgstr ""
"Ce wiki est propulsé par [ikiwiki](http://ikiwiki.info/).\n"
"[[!if <span class="error">Error: syntax error in pagespec &quot;&#92;&quot;enabled&#40;version&#41;&#92;&quot;&#92;n&quot;&quot;</span>]]\n"
#. type: Plain text
msgid "Some documentation on using ikiwiki:"
msgstr "Voici quelques pages de documentation sur l'utilisation d'ikiwiki :"
#. type: Bullet: '* '
msgid "<a href="../ikiwiki/formatting/">formatting</a>"
msgstr "<a href="../ikiwiki/formatting/">formatting</a>"
#. type: Bullet: '* '
msgid "<a href="../ikiwiki/wikilink/">wikilink</a>"
msgstr "<a href="../ikiwiki/wikilink/">wikilink</a>"
#. type: Bullet: '* '
msgid "<a href="../ikiwiki/subpage/">subpage</a>"
msgstr "<a href="../ikiwiki/subpage/">subpage</a>"
#. type: Bullet: '* '
msgid "<a href="../ikiwiki/pagespec/">pagespec</a>"
msgstr "<a href="../ikiwiki/pagespec/">pagespec</a>"
#. type: Bullet: '* '
msgid "<a href="../ikiwiki/directive/">directive</a>"
msgstr "<a href="../ikiwiki/directive/">directive</a>"
#. type: Bullet: '* '
msgid "<a href="../ikiwiki/markdown/">markdown</a>"
msgstr "<a href="../ikiwiki/markdown/">markdown</a>"
#. type: Bullet: '* '
msgid "<a href="../ikiwiki/openid/">openid</a>"
msgstr "<a href="../ikiwiki/openid/">openid</a>"
#. type: Bullet: '* '
msgid "<a href="../ikiwiki/searching/">searching</a>"
msgstr "<a href="../ikiwiki/searching/">searching</a>"
#. type: Bullet: '* '
msgid "<a href="../templates/">templates</a>"
msgstr "<a href="../templates/">templates</a>"
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2025-06-12T19:35:06Z" class="dt-published">Thu Jun 12 15:35:06 2025</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/ikiwiki.fr.po">Edited <time datetime="2025-06-12T19:35:06Z">Thu Jun 12 15:35:06 2025</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=ikiwiki.fr&t=ikiwiki.fr" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

View file

@ -0,0 +1,258 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="robots" content="\&quot;noindex," />
<title>directive.fr - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../../favicon-16x16.png">
<link rel="manifest" href="../../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../../css/local.css" type="text/css" />
<meta name="robots" content="\&quot;noindex," />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../../">
<img alt="Ayakael" src="../../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../../index.en.html">Home</a></li>
<li><a href="../../blog/index.en.html">Blog</a></li>
<li><a href="../../guides/index.en.html">Guides</a></li>
<li><a href="../../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
# Traduction de ikiwiki
# Copyright (C) 2009 Debian French l10n team <debian-l10n-french@lists.debian.org>
# This file is distributed under the same license as the PACKAGE Ikiwiki.
#
msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"POT-Creation-Date: 2009-08-15 18:30-0300\n"
"PO-Revision-Date: 2009-08-25 11:25+0200\n"
"Last-Translator: Philippe Batailler <philippe.batailler@free.fr>\n"
"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bits\n"
#. type: Plain text
#, no-wrap
msgid "\n"
msgstr "\n"
#. type: Plain text
msgid ""
"Directives are similar to a <a href="../wikilink/">WikiLink</a> in form, except they begin "
"with `!` and may contain parameters. The general form is:"
msgstr ""
"Les directives sont semblables aux <a href="../wikilink/">WikiLink</a> mais elles "
"commencent par un `!` et peuvent contenir des paramètres. La forme d'une "
"directive est la suivante :"
#. type: Plain text
#, no-wrap
msgid "\t\[[!directive param=\"value\" param=\"value\"]]\n"
msgstr "\t\[[!directive param=\"value\" param=\"value\"]]\n"
#. type: Plain text
msgid ""
"This gets expanded before the rest of the page is processed, and can be used "
"to transform the page in various ways."
msgstr ""
"Le contenu de cette directive est traité avant que la page ne soit traitée "
"et cela peut être utilisé pour modifier cette page."
#. type: Plain text
msgid ""
"The quotes around values can be omitted if the value is a simple word. "
"Also, some directives may use parameters without values, for example:"
msgstr ""
"Les guillements autour des valeurs des paramètres peuvent être omis si cette "
"valeur est un simple mot. D'autre part, certaines directives peuvent avoir "
"des paramètres sans valeur, par exemple : "
#. type: Plain text
#, no-wrap
msgid "\t\[[!tag foo]]\n"
msgstr "\t\[[!tag foo]]\n"
#. type: Plain text
msgid ""
"A directive does not need to all be on one line, it can be wrapped to "
"multiple lines if you like:"
msgstr ""
"Il n'est pas nécessaire d'écrire une directive sur une seule ligne ; elle "
"peut l'être sur plusieurs si vous préférez. Par exemple :"
#. type: Plain text
#, no-wrap
msgid ""
"\t\[[!directive foo=\"baldersnatch\"\n"
"\tbar=\"supercalifragilisticexpialidocious\" baz=11]]\n"
msgstr ""
"\t\[[!directive foo=\"baldersnatch\"\n"
"\tbar=\"supercalifragilisticexpialidocious\" baz=11]]\n"
#. type: Plain text
msgid ""
"Also, multiple lines of *quoted* text can be used for a value. To allow "
"quote marks inside the quoted text, delimit the block of text with triple-"
"quotes:"
msgstr ""
"De plus, une *citation* sur plusieurs lignes peut servir de valeur. Pour "
"autoriser les guillemets du texte, il suffit de mettre trois séries de "
"guillemets autour du texte :"
#. type: Plain text
#, no-wrap
msgid "\t\[[!directive text=\"\"\"\n"
msgstr "\t\\[[!directive text=\"\"\"\n"
#. type: Bullet: ' 1. '
msgid "\"foo\""
msgstr "\"foo\""
#. type: Bullet: ' 2. '
msgid "\"bar\""
msgstr "\"bar\""
#. type: Bullet: ' 3. '
msgid "\"baz\""
msgstr "\"baz\""
#. type: Plain text
msgid ""
"ikiwiki also has an older syntax for directives, which requires a space in "
"directives to distinguish them from <a href="../wikilink/">wikilinks</a>. This "
"syntax has several disadvantages: it requires a space after directives with "
"no parameters (such as `\[[pagecount ]]`), and it prohibits spaces in "
"<a href="../wikilink/">wikilinks</a>. ikiwiki now provides the `!`-prefixed "
"syntax shown above as default. However, ikiwiki still supports wikis using "
"the older syntax, if the `prefix_directives` option is disabled."
msgstr ""
"Il existe aussi une ancienne syntaxe pour les directives. Elle demande un "
"espace dans la directive pour les distinguer des [[wikilinks|ikiwiki/"
"wikilink]]. Cette syntaxe a plusieurs défauts : elle demande un espace après "
"une directive sans paramètre, comme `\[[pagecount ]]`, et elle interdit les "
"espaces dans les <a href="../wikilink/">wikilinks</a>. Par défaut, ikiwiki utilise "
"maintenant la syntaxe montrée plus haut, avec le `!`. Cependant, l'ancienne "
"syntaxe est toujours acceptée, une fois que l'option `prefix_directives` est "
"désactivée."
#. type: Plain text
#, no-wrap
msgid "[[!if <span class="error">Error: syntax error in pagespec &quot;&#92;&quot;enabled&#40;listdirectives&#41;&#92;&quot;&quot;</span>]]\n"
msgstr "[[!listdirectives ]]\n"
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2025-06-12T19:35:06Z" class="dt-published">Thu Jun 12 15:35:06 2025</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/ikiwiki/directive.fr.po">Edited <time datetime="2025-06-12T19:35:06Z">Thu Jun 12 15:35:06 2025</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=ikiwiki/directive.fr&t=directive.fr" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

View file

@ -0,0 +1,179 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="robots" content="noindex, follow" />
<title>directive - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../../favicon-16x16.png">
<link rel="manifest" href="../../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../../css/local.css" type="text/css" />
<meta name="robots" content="noindex, follow" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../../">
<img alt="Ayakael" src="../../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../../index.en.html">Home</a></li>
<li><a href="../../blog/index.en.html">Blog</a></li>
<li><a href="../../guides/index.en.html">Guides</a></li>
<li><a href="../../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<p>Directives are similar to a <a href="../wikilink/">WikiLink</a> in
form, except they begin with <code>!</code> and may contain parameters.
The general form is:</p>
<pre><code>[[!directive param=&quot;value&quot; param=&quot;value&quot;]]</code></pre>
<p>This gets expanded before the rest of the page is processed, and can
be used to transform the page in various ways.</p>
<p>The quotes around values can be omitted if the value is a simple
word. Also, some directives may use parameters without values, for
example:</p>
<pre><code>[[!tag foo]]</code></pre>
<p>A directive does not need to all be on one line, it can be wrapped to
multiple lines if you like:</p>
<pre><code>[[!directive foo=&quot;baldersnatch&quot;
bar=&quot;supercalifragilisticexpialidocious&quot; baz=11]]</code></pre>
<p>Also, multiple lines of <em>quoted</em> text can be used for a value.
To allow quote marks inside the quoted text, delimit the block of text
with triple-double-quotes or triple-single-quotes:</p>
<pre><code>[[!directive text=&quot;&quot;&quot;
1. &quot;foo&quot;
2. &quot;bar&quot;
3. &quot;baz&quot;
&quot;&quot;&quot; othertext=&#39;&#39;&#39;
1. &#39;quux&#39;
2. &quot;foo&quot;
&#39;&#39;&#39;]]</code></pre>
<p>If you want to put text with triple quotes into a parameter value,
you can use perl-style here-doc syntax, even nesting it like this:</p>
<pre><code>[[!directive text=&lt;&lt;OUTER
[[!otherdirective &lt;&lt;INNER
inner text
INNER]]
outer text
OUTER]]</code></pre>
<p>ikiwiki also has an older syntax for directives, which requires a
space in directives to distinguish them from
<a href="../wikilink/">wikilinks</a>. This syntax has several
disadvantages: it requires a space after directives with no parameters
(such as <code>[[pagecount ]]</code>), and it prohibits spaces in
<a href="../wikilink/">wikilinks</a>. ikiwiki now provides the
<code>!</code>-prefixed syntax shown above as default. However, ikiwiki
still supports wikis using the older syntax, if the
<code>prefix_directives</code> option is disabled.</p>
<p>Here is a list of currently available directives in this wiki:</p>
<p>[[!listdirectives ]]</p>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2025-06-12T19:35:06Z" class="dt-published">Thu Jun 12 15:35:06 2025</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/ikiwiki/directive.mdwn">Edited <time datetime="2025-06-12T19:35:06Z">Thu Jun 12 15:35:06 2025</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=ikiwiki/directive&t=directive" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

View file

@ -0,0 +1,368 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="robots" content="\&quot;noindex," />
<title>\&#x22;Formater - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../../favicon-16x16.png">
<link rel="manifest" href="../../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../../css/local.css" type="text/css" />
<meta name="robots" content="\&quot;noindex," />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../../">
<img alt="Ayakael" src="../../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../../index.en.html">Home</a></li>
<li><a href="../../blog/index.en.html">Blog</a></li>
<li><a href="../../guides/index.en.html">Guides</a></li>
<li><a href="../../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
# Traduction de ikiwiki
# Copyright (C) 2009 Debian French l10n team <debian-l10n-french@lists.debian.org>
# This file is distributed under the same license as the PACKAGE Ikiwiki.
#
msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"POT-Creation-Date: 2009-08-26 13:39-0300\n"
"PO-Revision-Date: 2009-08-26 21:18+0200\n"
"Last-Translator: Philippe Batailler <philippe.batailler@fre.fr>\n"
"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bits\n"
#. type: Plain text
#, no-wrap
msgid "\n"
msgstr "\n"
#. type: Plain text
#, no-wrap
msgid "\n"
msgstr "\n"
#. type: Plain text
msgid ""
"Text on this wiki is, by default, written in a form very close to how you "
"might write text for an email message. This style of text formatting is "
"called <a href="../markdown/">MarkDown</a>, and it works like this:"
msgstr ""
"Sur ce wiki, la mise en forme du texte est semblable à celle utilisée dans "
"les courriels. Ce style de formatage s'appelle <a href="../markdown/">MarkDown</a>. Voici comment "
"il fonctionne :"
#. type: Plain text
msgid "Leave blank lines between paragraphs."
msgstr "Lignes vides entre les paragraphes."
#. type: Plain text
msgid ""
"You can *\\*emphasise\\** or **\\*\\*strongly emphasise\\*\\*** text by "
"placing it in single or double asterisks."
msgstr ""
"Texte en *\\*italique\\** avec un astérisque ou texte en **\\*\\*gras\\*"
"\\*** avec deux astérisques."
#. type: Plain text
msgid "To create a list, start each line with an asterisk:"
msgstr "Une liste, chaque ligne commençant par un astérisque :"
#. type: Bullet: '* '
msgid "\"* this is my list\""
msgstr "\"* ma liste\""
#. type: Bullet: '* '
msgid "\"* another item\""
msgstr "\"* un autre élément\""
#. type: Plain text
msgid ""
"To make a numbered list, start each line with a number (any number will do) "
"followed by a period:"
msgstr ""
"Une liste numérotée, chaque ligne commençant par un chiffre (n'importe "
"lequel), suivi d'un point :"
#. type: Bullet: '1. '
msgid "\"1. first line\""
msgstr "\"1. première ligne\""
#. type: Bullet: '2. '
msgid "\"2. second line\""
msgstr "\"2. deuxième ligne\""
#. type: Bullet: '2. '
msgid "\"2. third line\""
msgstr "\"2. troisième ligne\""
#. type: Plain text
msgid ""
"To create a header, start a line with one or more `#` characters followed by "
"a space and the header text. The number of `#` characters controls the size "
"of the header:"
msgstr ""
"Un titre, une ligne commençant par un ou plusieurs caractères `#` suivis "
"d'un caractère espace et du texte du titre. Le nombre de `#` détermine la "
"taille du titre :"
#. type: Title #
#, no-wrap
msgid "# h1"
msgstr "# h1"
#. type: Title ##
#, no-wrap
msgid "## h2"
msgstr "## h2"
#. type: Title ###
#, no-wrap
msgid "### h3"
msgstr "### h3"
#. type: Title ####
#, no-wrap
msgid "#### h4"
msgstr "#### h4"
#. type: Title #####
#, no-wrap
msgid "##### h5"
msgstr "##### h5"
#. type: Title ######
#, no-wrap
msgid "###### h6"
msgstr "###### h6"
#. type: Plain text
msgid ""
"To create a horizontal rule, just write three or more dashes or stars on "
"their own line:"
msgstr ""
"Une règle horizontale, au moins trois tirets ou étoiles sur la même ligne :"
#. type: Plain text
#, no-wrap
msgid "To quote someone, prefix the quote with \">\":\n"
msgstr "Pour citer quelqu'un, faire précéder la citation de \">\" :\n"
#. type: Plain text
#, no-wrap
msgid ""
"> To be or not to be,\n"
"> that is the question.\n"
msgstr ""
"> To be or not to be,\n"
"> that is the question.\n"
#. type: Plain text
msgid "To write a code block, indent each line with a tab or 4 spaces:"
msgstr ""
"Un morceau de code, faire précéder chaque ligne par une tabulation ou quatre "
"espaces :"
#. type: Plain text
#, no-wrap
msgid ""
"\t10 PRINT \"Hello, world!\"\n"
"\t20 GOTO 10\n"
msgstr ""
"\t10 PRINT \"Hello, world!\"\n"
"\t20 GOTO 10\n"
#. type: Plain text
#, no-wrap
msgid ""
"To link to an url or email address, you can just put the\n"
"url in angle brackets: <<http://ikiwiki.info>>, or you can use the\n"
"form \\[link text\\]\\(url\\)\n"
msgstr ""
"Pour créer un lien avec une URL ou une adresse électronique,\n"
"mettre l'URL entre crochets, <<http://ikiwiki.info>>,\n"
"ou utiliser la forme \\[texte du lien\\]\\(url\\)\n"
#. type: Plain text
msgid ""
"In addition to basic html formatting using <a href="../markdown/">MarkDown</a>, this wiki lets you "
"use the following additional features:"
msgstr ""
"En plus du formatage html élémentaire avec <a href="../markdown/">MarkDown</a>, ce wiki offre "
"d'autres possibilités :"
#. type: Bullet: '* '
msgid ""
"To link to another page on the wiki, place the page's name inside double "
"square brackets. So you would use `\[[WikiLink]]` to link to <a href="../wikilink/">WikiLink</a>."
msgstr ""
"Pour créer un lien vers une autre page du wiki, mettre le nom de la page "
"entre deux paires de crochets. Ainsi, utilisez `\[[WikiLink]]` pour un lien "
"avec <a href="../wikilink/">WikiLink</a>."
#. type: Plain text
#, no-wrap
msgid "[[!if <span class="error">Error: syntax error in pagespec &quot;&#92;&quot;enabled&#40;smiley&#41;&quot;</span>]] and some other useful symbols. :-)"
msgstr "Insérer des <a href="../../smileys/">smileys</a> et d'autres symboles très utiles :-)"
#. type: Plain text
#, no-wrap
msgid "[[!if <span class="error">Error: syntax error in pagespec &quot;&#92;&quot;enabled&#40;shortcut&#41;&quot;</span>]] to link to common resources."
msgstr "Utiliser des <a href="../../shortcuts/index.en.html">shortcuts</a> pour renvoyer à des ressources communes."
#. type: Plain text
#, no-wrap
msgid "\t\[[!wikipedia War\\_of\\_1812]]\n"
msgstr "\t\[[!wikipedia War\\_of\\_1812]]\n"
#. type: Plain text
#, no-wrap
msgid "[[!if <span class="error">Error: syntax error in pagespec &quot;&#92;&quot;enabled&#40;template&#41;&quot;</span>]] for repeated chunks of parameterized wiki "
"text."
msgstr ""
"Créer et utiliser des modèles (<a href="../../templates/">templates</a>) pour répéter des morceaux de "
"texte standard."
#. type: Plain text
#, no-wrap
msgid ""
"* Insert various <a href="../directive/">directives</a> onto a page to perform useful\n"
" actions.\n"
"[[!if <span class="error">Error: syntax error in pagespec &quot;&#92;&quot;enabled&#40;toc&#41;&#92;&quot;&quot;</span>]]\n"
msgstr "\t\[[!toc ]]\n"
#. type: Plain text
#, no-wrap
msgid "[[!if <span class="error">Error: syntax error in pagespec &quot;&#92;&quot;enabled&#40;meta&#41;&#92;&quot;&quot;</span>]]\n"
msgstr "\t\[[!meta title=\"titre complet de la page\"]]\n"
#. type: Plain text
#, no-wrap
msgid "[[!if <span class="error">Error: syntax error in pagespec &quot;&#92;&quot;enabled&#40;inline&#41;&#92;&quot;&quot;</span>]]\n"
msgstr "\t\[[!inline pages=\"blog/*\"]]\n"
#. type: Plain text
#, no-wrap
msgid "[[!if <span class="error">Error: syntax error in pagespec &quot;&#92;&quot;enabled&#40;listdirectives&#41;&#92;&quot;&quot;</span>]] enabled for this wiki:\n"
msgstr " Voici la liste complète des directives activées sur ce wiki :\n"
#. type: Plain text
#, no-wrap
msgid " [[!listdirectives ]]\n"
msgstr " [[!listdirectives ]]\n"
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2025-06-12T19:35:06Z" class="dt-published">Thu Jun 12 15:35:06 2025</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/ikiwiki/formatting.fr.po">Edited <time datetime="2025-06-12T19:35:06Z">Thu Jun 12 15:35:06 2025</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=ikiwiki/formatting.fr&t=%5C%26%23x22%3BFormater" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

View file

@ -0,0 +1,206 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="robots" content="noindex, follow" />
<title>Formatting wiki pages - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../../favicon-16x16.png">
<link rel="manifest" href="../../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../../css/local.css" type="text/css" />
<meta name="robots" content="noindex, follow" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../../">
<img alt="Ayakael" src="../../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../../index.en.html">Home</a></li>
<li><a href="../../blog/index.en.html">Blog</a></li>
<li><a href="../../guides/index.en.html">Guides</a></li>
<li><a href="../../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<p>Text on this wiki is, by default, written in a form very close to how
you might write text for an email message. This style of text formatting
is called <a href="../markdown/">MarkDown</a>, and it works like
this:</p>
<p>Leave blank lines between paragraphs.</p>
<p>You can <em>*emphasise*</em> or <strong>**strongly
emphasise**</strong> text by placing it in single or double
asterisks.</p>
<p>To create a list, start each line with an asterisk:</p>
<ul>
<li>“* this is my list”</li>
<li>“* another item”</li>
</ul>
<p>To make a numbered list, start each line with a number (any number
will do) followed by a period:</p>
<ol type="1">
<li>“1. first line”</li>
<li>“2. second line”</li>
<li>“2. third line”</li>
</ol>
<p>To create a header, start a line with one or more <code>#</code>
characters followed by a space and the header text. The number of
<code>#</code> characters controls the size of the header:</p>
<h1 id="h1"># h1</h1>
<h2 id="h2">## h2</h2>
<h3 id="h3">### h3</h3>
<h4 id="h4">#### h4</h4>
<h5 id="h5">##### h5</h5>
<h6 id="h6">###### h6</h6>
<p>To create a horizontal rule, just write three or more dashes or stars
on their own line:</p>
<hr />
<p>To quote someone, prefix the quote with “&gt;”:</p>
<blockquote>
<p>To be or not to be, that is the question.</p>
</blockquote>
<p>To write a code block, indent each line with a tab or 4 spaces:</p>
<pre><code>10 PRINT &quot;Hello, world!&quot;
20 GOTO 10</code></pre>
<p>To link to an url or email address, you can just put the url in angle
brackets: &lt;<a href="http://ikiwiki.info"
class="uri">http://ikiwiki.info</a>&gt;, or you can use the form [link
text](url)</p>
<hr />
<p>In addition to basic html formatting using
<a href="../markdown/">MarkDown</a>, this wiki lets you use the
following additional features:</p>
<ul>
<li><p>To link to another page on the wiki, place the pages name inside
double square brackets. So you would use <code>[[WikiLink]]</code> to
link to <a href="../wikilink/">WikiLink</a>.</p></li>
<li><p>Insert <a href="../../smileys/">smileys</a> and some other useful
symbols. <img src="../../smileys/smile.png" alt=":-)" /></p></li>
<li><p>Use <a href="../../shortcuts/index.en.html">shortcuts</a> to link
to common resources.</p>
<p>[[!wikipedia War_of_1812]]</p></li>
<li><p>Create and fill out <a href="../../templates/">templates</a> for
repeated chunks of parameterized wiki text.</p></li>
<li><p>Insert various <a href="../directive/">directives</a> onto a page
to perform useful actions. For example, you can:</p>
<ul>
<li><p>Add a table of contents to a page:</p>
<p>[[!toc ]]</p></li>
<li><p>Change the title of a page:</p>
<p>[[!meta title=“full page title”]]</p></li>
<li><p>Create a blog by inlining a set of pages:</p>
<p>[[!inline pages=“blog/*”]]</p></li>
</ul>
<p>Full list of <a href="../directive/">directives</a> enabled for this
wiki: [[!listdirectives ]]</p></li>
</ul>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2025-06-12T19:35:06Z" class="dt-published">Thu Jun 12 15:35:06 2025</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/ikiwiki/formatting.mdwn">Edited <time datetime="2025-06-12T19:35:06Z">Thu Jun 12 15:35:06 2025</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=ikiwiki/formatting&t=Formatting%20wiki%20pages" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

58
ikiwiki/ikiwiki.js Normal file
View file

@ -0,0 +1,58 @@
// © 2006-2010 Joey Hess
// Redistribution and use in source and compiled forms, with or without
// modification, are permitted under any circumstances. No warranty.
//
// ikiwiki's javascript utility function library
var hooks;
// Run onload as soon as the DOM is ready, if possible.
// gecko, opera 9
if (document.addEventListener) {
document.addEventListener("DOMContentLoaded", run_hooks_onload, false);
}
// other browsers
window.onload = run_hooks_onload;
var onload_done = 0;
function run_hooks_onload() {
// avoid firing twice
if (onload_done)
return;
onload_done = true;
run_hooks("onload");
}
function run_hooks(name) {
if (typeof(hooks) != "undefined") {
for (var i = 0; i < hooks.length; i++) {
if (hooks[i].name == name) {
hooks[i].call();
}
}
}
}
function hook(name, call) {
if (typeof(hooks) == "undefined")
hooks = new Array;
hooks.push({name: name, call: call});
}
function getElementsByClass(cls, node, tag) {
if (document.getElementsByClass)
return document.getElementsByClass(cls, node, tag);
if (! node) node = document;
if (! tag) tag = '*';
var ret = new Array();
var pattern = new RegExp("(^|\\s)"+cls+"(\\s|$)");
var els = node.getElementsByTagName(tag);
for (i = 0; i < els.length; i++) {
if ( pattern.test(els[i].className) ) {
ret.push(els[i]);
}
}
return ret;
}

149
ikiwiki/index.html Normal file
View file

@ -0,0 +1,149 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="robots" content="noindex, follow" />
<title>ikiwiki - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="manifest" href="../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../css/local.css" type="text/css" />
<meta name="robots" content="noindex, follow" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../">
<img alt="Ayakael" src="../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../index.en.html">Home</a></li>
<li><a href="../blog/index.en.html">Blog</a></li>
<li><a href="../guides/index.en.html">Guides</a></li>
<li><a href="../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<p>This wiki is powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
(Currently running version [[!version ]].)</p>
<p>Some documentation on using ikiwiki:</p>
<ul>
<li><a href="./formatting/">formatting</a></li>
<li><a href="./wikilink/">wikilink</a></li>
<li><a href="./subpage/">subpage</a></li>
<li><a href="./pagespec/">pagespec</a></li>
<li><a href="./directive/">directive</a></li>
<li><a href="./markdown/">markdown</a></li>
<li><a href="./openid/">openid</a></li>
<li><a href="./searching/">searching</a></li>
<li><a href="../templates/">templates</a></li>
</ul>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2025-06-12T19:35:06Z" class="dt-published">Thu Jun 12 15:35:06 2025</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/ikiwiki.mdwn">Edited <time datetime="2025-06-12T19:35:06Z">Thu Jun 12 15:35:06 2025</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=ikiwiki&t=ikiwiki" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

23
ikiwiki/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,219 @@
/*
Based on the Simple OpenID Plugin
http://code.google.com/p/openid-selector/
This code is licenced under the New BSD License.
*/
var selections_email_large = {
email: {
name: 'Email',
icon: 'wikiicons/email.png',
label: 'Enter your email address:',
url: null
}
};
var selections_openid_large = {
openid: {
name: 'OpenID',
icon: 'wikiicons/openidlogin-bg.png',
label: 'Enter your OpenID:',
url: null
}
};
var selections = $.extend({}, selections_email_large, selections_openid_large);
var selector = {
ajaxHandler: null,
cookie_expires: 6*30, // 6 months.
cookie_name: 'openid_selection', // historical name
cookie_path: '/',
img_path: 'images/',
input_id: null,
selection_url: null,
selection_id: null,
othersignin_id: null,
init: function(input_id, login_methods, othersignin_id, othersignin_label) {
var selector_btns = $('#login_btns');
this.input_id = input_id;
$('#login_choice').show();
$('#login_input_area').empty();
// add box for each selection
if (login_methods['openid']) {
for (id in selections_openid_large) {
selector_btns.append(this.getBoxHTML(selections_openid_large[id], 'large'));
}
}
if (login_methods['email']) {
for (id in selections_email_large) {
selector_btns.prepend(this.getBoxHTML(selections_email_large[id], 'large'));
}
}
if (othersignin_label != "") {
this.othersignin_label=othersignin_label;
}
else {
this.othersignin_label="other";
}
if (othersignin_id != "") {
this.othersignin_id=othersignin_id;
selector_btns.prepend(
'<a href="javascript: selector.signin(\'othersignin\');"' +
'class="othersignin login_large_btn">' +
'<img alt="" width="16" height="16" src="favicon.ico" />' +
' ' + this.othersignin_label +
'</a>'
);
$('#'+this.othersignin_id).hide();
}
$('#login_selector_form').submit(this.submit);
var box_id = this.readCookie();
if (box_id) {
this.signin(box_id, true);
}
},
getBoxHTML: function(selection, box_size) {
var label="";
var title=""
if (box_size == 'large') {
label=' ' + selection["name"];
}
else {
title=' title="'+selection["name"]+'"';
}
var box_id = selection["name"].toLowerCase();
return '<a' + title +' href="javascript: selector.signin(\''+ box_id +'\');"' +
'class="' + box_id + ' login_' + box_size + '_btn">' +
'<img alt="" width="16" height="16" src="' + selection["icon"] + '" />' +
label +
'</a>';
},
/* selection image click */
signin: function(box_id, onload) {
if (box_id == 'othersignin') {
this.highlight(box_id);
$('#login_input_area').empty();
$('#'+this.othersignin_id).show();
this.setCookie(box_id);
return;
}
else {
if (this.othersignin_id) {
$('#'+this.othersignin_id).hide();
}
}
var selection = selections[box_id];
if (! selection) {
return;
}
this.highlight(box_id);
this.selection_id = box_id;
this.selection_url = selection['url'];
// prompt user for input?
if (selection['label']) {
this.setCookie(box_id);
this.useInputBox(selection);
} else {
this.setCookie('');
$('#login_input_area').empty();
if (! onload) {
$('#login_selector_form').submit();
}
}
},
/* Sign-in button click */
submit: function() {
var url = selector.selection_url;
if (url) {
url = url.replace('{username}', $('#entry').val());
selector.setOpenIdUrl(url);
}
else {
selector.setOpenIdUrl("");
}
if (selector.ajaxHandler) {
selector.ajaxHandler(selector.selection_id, document.getElementById(selector.input_id).value);
return false;
}
return true;
},
setOpenIdUrl: function (url) {
var hidden = $('#'+this.input_id);
if (hidden.length > 0) {
hidden.value = url;
} else {
$('#login_selector_form').append('<input style="display:none" id="' + this.input_id + '" name="' + this.input_id + '" value="'+url+'"/>');
}
},
highlight: function (box_id) {
// remove previous highlight.
var highlight = $('#login_highlight');
if (highlight) {
highlight.replaceWith($('#login_highlight a')[0]);
}
// add new highlight.
$('.'+box_id).wrap('<div id="login_highlight"></div>');
},
setCookie: function (value) {
var date = new Date();
date.setTime(date.getTime()+(this.cookie_expires*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
document.cookie = this.cookie_name+"="+value+expires+"; path=" + this.cookie_path;
},
readCookie: function () {
var nameEQ = this.cookie_name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
},
useInputBox: function (selection) {
var input_area = $('#login_input_area');
var html = '';
var id = selection['name']+'_entry';
var label = selection['label'];
if (selection['name'] == 'OpenID') {
id = this.input_id;
}
if (label) {
html = '<label for="'+ id +'" class="block">' + label + '</label>';
}
html += '<input id="'+id+'" type="text" name="'+id+'" />' +
'<input id="selector_submit" type="submit" value="Login"/>';
input_area.empty();
input_area.append(html);
$('#'+id).focus();
},
setAjaxHandler: function (ajaxFunction) {
this.ajaxHandler = ajaxFunction;
}
};

View file

@ -0,0 +1,184 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="robots" content="\&quot;noindex," />
<title>markdown.fr - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../../favicon-16x16.png">
<link rel="manifest" href="../../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../../css/local.css" type="text/css" />
<meta name="robots" content="\&quot;noindex," />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../../">
<img alt="Ayakael" src="../../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../../index.en.html">Home</a></li>
<li><a href="../../blog/index.en.html">Blog</a></li>
<li><a href="../../guides/index.en.html">Guides</a></li>
<li><a href="../../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
# Traduction de ikiwiki
# Copyright (C) 2009 Debian French l10n team <debian-l10n-french@lists.debian.org>
# This file is distributed under the same license as the PACKAGE Ikiwiki.
#
msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"POT-Creation-Date: 2009-08-15 18:30-0300\n"
"PO-Revision-Date: 2009-08-25 09:31+0200\n"
"Last-Translator: Alexandre Dupas <alexandre.dupas@gmail.com>\n"
"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bits\n"
#. type: Plain text
#, no-wrap
msgid "\n"
msgstr "\n"
#. type: Plain text
msgid ""
"[Markdown](http://daringfireball.net/projects/markdown/) is a minimal "
"markup language that resembles plain text as used in email messages. It is "
"the markup language used by this wiki by default."
msgstr ""
"[Markdown](http://daringfireball.net/projects/markdown/) est un langage de "
"balisage élémentaire, comparable à celui utilisé dans la messagerie "
"électronique. Il s'agit du langage de balisage utilisé par défaut dans ce "
"wiki."
#. type: Plain text
msgid ""
"For documentation about the markdown syntax, see <a href="../formatting/">formatting</a> and "
"[Markdown: syntax](http://daringfireball.net/projects/markdown/syntax)."
msgstr ""
"Référez vous à <a href="../formatting/">formatting</a> et [Syntaxe Markdown](http://daringfireball."
"net/projects/markdown/syntax) pour la documentation sur la syntaxe du langage "
"markdown."
#. type: Plain text
msgid ""
"Note that <a href="../wikilink/">WikiLinks</a> and <a href="../directive/">directives</a> are not part "
"of the markdown syntax, and are the only bit of markup that this wiki "
"handles internally."
msgstr ""
"Notez que les <a href="../wikilink/">WikiLinks</a> et les <a href="../directive/">directives</a> ne font "
"pas partie de la syntaxe du langage markdown. Il s'agit des seules balises "
"qui sont traitées en interne par ce wiki."
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->
<div class="pagedate text-muted">
<span class="created">Created <time datetime="2025-06-12T19:35:06Z" class="dt-published">Thu Jun 12 15:35:06 2025</time>.</span>
<span class="edited">
<a href="https://ayakael.net/forge/ayakael.net/commits/branch/main/ikiwiki/markdown.fr.po">Edited <time datetime="2025-06-12T19:35:06Z">Thu Jun 12 15:35:06 2025</time>.</a>
</span>
</div>
</div> <!-- /container -->
</main>
<footer class="footer mt-auto bg-light py-2" role="contentinfo">
<div class="container">
<div class="row text-muted">
<div class="col-sm">
Copyleft © 2024 ayakael <a href="../../meta/license/">CC-BY-SA</a>
</div>
<div class="col-sm text-sm-end">
Powered by <a href="http://ikiwiki.info/">ikiwiki</a>.
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>
<!-- TODO: Find other ways to setup analytics
<script data-goatcounter="https://analytics.anarc.at/count" async src="//analytics.anarc.at/count.js"></script>
<noscript>
<img src="https://analytics.anarc.at/count?p=ikiwiki/markdown.fr&t=markdown.fr" alt="tracking pixel to count visitors when Javascript is disabled" />
</noscript>
-->
</body>
</html>

146
ikiwiki/markdown/index.html Normal file
View file

@ -0,0 +1,146 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="h-100">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="robots" content="noindex, follow" />
<title>markdown - Ayakael</title>
<!-- cargo-culted from https://realfavicongenerator.net/ -->
<!-- for the record: it is absolutely ridiculous that new browsers
*and* operating systems each want their own little precious
snowflake just for a frigging icon -->
<link rel="apple-touch-icon" sizes="180x180" href="../../apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../../favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../../favicon-16x16.png">
<link rel="manifest" href="../../site.webmanifest">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<!-- ikiwiki CSS -->
<link href="../../css/style.css" rel="stylesheet" />
<!-- Bootstrap core CSS -->
<!-- those checksums can be verified with: shasum -b -a 384 $file | xxd -r -p | base64 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<!-- Custom styles for this template -->
<link href="../../css/bootstrap.local.css" rel="stylesheet" />
<!-- Custom styles for derivatives -->
<link rel="stylesheet" href="../../css/local.css" type="text/css" />
<meta name="robots" content="noindex, follow" />
</head>
<body class="d-flex flex-column h-100">
<header>
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-light border">
<div class="container-fluid">
<a class="navbar-brand me-auto" href="../../">
<img alt="Ayakael" src="../../favicon.png" width="48" height="48" />
</a>
<button class="navbar-toggler collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar" class="collapse navbar-collapse">
<!-- the anchors force ikiwiki to use a tags instead of spans. hopefully. -->
<ul class="navbar-nav nav-link align-items-center ms-auto">
<li><a href="../../index.en.html">Home</a></li>
<li><a href="../../blog/index.en.html">Blog</a></li>
<li><a href="../../guides/index.en.html">Guides</a></li>
<li><a href="../../services/">Services</a></li>
<li><a href="https://ayakael.net/forge/">Forge</a></li>
<li><a href="../../contact/index.en.html">Contact</a></li>
</ul>
<ul class="navbar-nav nav-link align-items-center ms-auto">
</ul>
</div>
</div>
</nav>
</header>
<main class="flex-shrink-0">
<div class="container" id="content">
<p><a href="http://daringfireball.net/projects/markdown/">Markdown</a>
is a minimal markup language that resembles plain text as used in email
messages. It is the markup language used by this wiki by default.</p>
<p>For documentation about the markdown syntax, see
<a href="../formatting/">formatting</a> and <a
href="http://daringfireball.net/projects/markdown/syntax">Markdown:
syntax</a>.</p>
<p>Note that <a href="../wikilink/">WikiLinks</a> and
<a href="../directive/">directives</a> are not part of the markdown
syntax, and are the only bit of markup that this wiki handles
internally.</p>
<!-- legacy Ikiwiki comments.pm section -->
<!-- Mastodon comments -->