Compare commits
No commits in common. "main" and "public" have entirely different histories.
164 changed files with 25914 additions and 2351 deletions
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
3
.gitignore
vendored
|
|
@ -1,3 +0,0 @@
|
|||
.ikiwiki
|
||||
public/
|
||||
tools/http-server/
|
||||
|
|
@ -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.
|
||||
|
||||
282
Bootstrap_features/index.html
Normal file
282
Bootstrap_features/index.html
Normal 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>It’s 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>
|
||||
|
|
@ -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
141
Calendars/index.html
Normal 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>
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
# Comments
|
||||
|
||||
This is an example of a page where comments are allowed.
|
||||
137
Comments/index.html
Normal file
137
Comments/index.html
Normal 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>
|
||||
|
|
@ -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
387
Inline_pages/index.html
Normal 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>
|
||||
82
README.md
82
README.md
|
|
@ -1,82 +0,0 @@
|
|||
# ayakael.net
|
||||
Upstream: https://ayakael.net/forge/ayakael.net/actions
|
||||
|
||||

|
||||

|
||||
|
||||
## 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
217
README/index.html
Normal 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/$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 <name></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>
|
||||
71
blog.fr.po
71
blog.fr.po
|
|
@ -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"
|
||||
23
blog.mdwn
23
blog.mdwn
|
|
@ -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
|
||||
]]
|
||||
|
||||
53
blog.pot
53
blog.pot
|
|
@ -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 ""
|
||||
|
|
@ -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!
|
||||
271
blog/2026-01-02-foss-recap-2025/index.html
Normal file
271
blog/2026-01-02-foss-recap-2025/index.html
Normal 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=&branch=edge&repo=&arch=x86_64&origin=&flagged=&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
165
blog/index.en.html
Normal 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
158
blog/index.fr.html
Normal 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 l’anglais 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>
|
||||
|
|
@ -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."
|
||||
13
contact.mdwn
13
contact.mdwn
|
|
@ -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.
|
||||
60
contact.pot
60
contact.pot
|
|
@ -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
165
contact/index.en.html
Normal 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
168
contact/index.fr.html
Normal 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
|
||||
l’adresse soutenue par ProtonMail : <a
|
||||
href="mailto:antoine@ayakael.net">antoine@ayakael.net</a>. Si vous me
|
||||
contactez en utilisant un email autre qu’un 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 m’envoyer 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 m’envoyer 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>
|
||||
51
footer.fr.po
51
footer.fr.po
|
|
@ -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"
|
||||
|
|
@ -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>
|
||||
25
footer.pot
25
footer.pot
|
|
@ -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
157
footer/index.en.html
Normal 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
158
footer/index.fr.html
Normal 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
1
generated.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
Wed May 20 09:38:23 EDT 2026
|
||||
66
guides.fr.po
66
guides.fr.po
|
|
@ -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"
|
||||
21
guides.mdwn
21
guides.mdwn
|
|
@ -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
|
||||
]]
|
||||
|
||||
48
guides.pot
48
guides.pot
|
|
@ -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 ""
|
||||
|
|
@ -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)
|
||||
272
guides/davinci-resolve/index.html
Normal file
272
guides/davinci-resolve/index.html
Normal 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 doesn’t 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">BlackMagic’s
|
||||
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 's/\x00\x85\xc0\x74\x7b\xe8/\x00\x85\xc0\xEB\x7b\xe8/g' /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&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 <transaction no></code>
|
||||
to find that number and then
|
||||
<code>dnf history rollback <transaction no></code></p>
|
||||
<p>Once everything is rolledback, you can install awesome and
|
||||
<em>just</em> it’s runtime dependencies, and then refer to archlinux’s
|
||||
<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 isn’t 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/">upstream’s
|
||||
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>
|
||||
|
|
@ -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 card’s 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 isn’t you’re taking a gigantic risk flashing anything.
|
||||
|
||||
Next up is dumping the VBIOS. You can also do that through GPU-Z, but I’d 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 don’t 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 you’re using the correct card and not your host’s 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. Don’t 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 (didn’t 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 (didn’t 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. Didn’t 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. Didn’t seem to change behavior.
|
||||
```
|
||||
369
guides/gaming-vm-on-qubes-using-bazzite/index.html
Normal file
369
guides/gaming-vm-on-qubes-using-bazzite/index.html
Normal 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 doesn’t
|
||||
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 isn’t 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. I’ve done my threat modelling,
|
||||
you should do yours to make sure GPU passthrough doesn’t 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 wasn’t
|
||||
working). From dom0:</li>
|
||||
</ul>
|
||||
<pre class="shell"><code>qvm-run -p $vm 'cat /path/to/iso' > 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 card’s 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 isn’t you’re taking a gigantic risk flashing anything.</p>
|
||||
<p>Next up is dumping the VBIOS. You can also do that through GPU-Z, but
|
||||
I’d 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 don’t 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 you’re using the
|
||||
correct card and not your host’s 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. Don’t 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">"</span><span class="va">$(</span><span class="fu">mktemp</span> <span class="at">-d</span><span class="va">)</span><span class="st">"</span></span>
|
||||
<span id="cb7-7"><a href="#cb7-7" aria-hidden="true" tabindex="-1"></a> <span class="bu">cd</span> <span class="st">"</span><span class="va">$dir</span><span class="st">"</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">"</span><span class="va">$stubdom</span><span class="st">.orig"</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">"</span><span class="va">$stubdom</span><span class="st">"</span> <span class="st">"</span><span class="va">$stubdom</span><span class="st">.orig"</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">"</span><span class="va">$stubdom</span><span class="st">.orig"</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">"</span><span class="va">${gpubios</span><span class="op">:=</span>/usr/libexec/xen/boot/gpubios<span class="va">}</span><span class="st">"</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">></span> <span class="st">"</span><span class="va">$stubdom</span><span class="st">"</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">"</span><span class="va">$1</span><span class="st">"</span> <span class="st">"</span><span class="va">$2</span><span class="st">"</span> <span class="st">"</span><span class="va">$3</span><span class="st">"</span> <span class="st">"</span><span class="va">$4</span><span class="st">"</span> <span class="st">"</span><span class="va">$5</span><span class="st">.internal"</span> <span class="kw">&</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">"</span><span class="va">$5</span><span class="st">"</span> <span class="at">--sh-exec</span> <span class="st">"sed -u -e 's|</span><span class="dt">\"</span><span class="st">hostaddr</span><span class="dt">\"</span><span class="st">:</span><span class="dt">\"</span><span class="st">0000:07:00.0</span><span class="dt">\"</span><span class="st">|</span><span class="dt">\"</span><span class="st">hostaddr</span><span class="dt">\"</span><span class="st">:</span><span class="dt">\"</span><span class="st">0000:07:00.0</span><span class="dt">\"</span><span class="st">,</span><span class="dt">\"</span><span class="st">romfile</span><span class="dt">\"</span><span class="st">:</span><span class="dt">\"</span><span class="st">/share/gpubios</span><span class="dt">\"</span><span class="st">|'|ncat --unixsock </span><span class="va">$5</span><span class="st">.internal"</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 Bazzite’s
|
||||
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 Furglitch’s <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 that’s 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 isn’t in use. Although, maybe it might be a
|
||||
good idea to move the <code>home</code> 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</li>
|
||||
<li>My GPU’s (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 isn’t 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 (didn’t 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 (didn’t 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. Didn’t 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. Didn’t 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
191
guides/index.en.html
Normal 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
157
guides/index.fr.html
Normal 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 l’anglais 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>
|
||||
|
|
@ -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.
|
||||
232
guides/qubes-os-backups-using-zfs/index.html
Normal file
232
guides/qubes-os-backups-using-zfs/index.html
Normal 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="ssh ${@}"
|
||||
CMD=$(sed 's$;$\\;$g' <<< ${CMD})
|
||||
CMD=$(sed 's$|$\\|$g' <<< ${CMD})
|
||||
qvm-run -p $QUBES_SSH_PROXY "${CMD}"</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{'PATH'} = $ENV{'PATH'} . ":/bin:/usr/bin:/sbin";</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 = 'zfs';</span>
|
||||
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a> my $zpoolcmd = 'zpool';</span>
|
||||
<span id="cb3-9"><a href="#cb3-9" aria-hidden="true" tabindex="-1"></a><span class="st">-my $sshcmd = 'ssh';</span></span>
|
||||
<span id="cb3-10"><a href="#cb3-10" aria-hidden="true" tabindex="-1"></a><span class="va">+my $sshcmd = 'qubes-ssh-proxy';</span></span>
|
||||
<span id="cb3-11"><a href="#cb3-11" aria-hidden="true" tabindex="-1"></a> my $pscmd = 'ps';</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 = 'pv';</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 "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</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
|
||||
server’s 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>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.</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>
|
||||
|
|
@ -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))
|
||||
326
guides/virtualized-hardware-acceleration-qubes-os/index.html
Normal file
326
guides/virtualized-hardware-acceleration-qubes-os/index.html
Normal 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 < max VFs = 2</li>
|
||||
<li>Driver 32.0.101.8306 for Intel Arc Pro < max VFs = 2</li>
|
||||
<li>Driver 32.0.101.6979 for Intel Arc Pro < 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 >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</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">xCurio0’s 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/"$DEVICE"/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="add", SUBSYSTEM="pci", ATTR{sriov_totalvfs}=="*", ATTR{sriov_drivers_autoprobe}="0"</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 isn’tan 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'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."</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="add", SUBSYSTEM=="pci", ATTR{subsystem_device}=="0x1114", ATTR{subsystem_vendor}=="0x8086", RUN+="/usr/local/bin/spawn_xe_vfs.sh %k 2 1GB"</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 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 (<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
204
ikiwiki.fr/index.html
Normal 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="\"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="\"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 "\"enabled(version)\"\n""</span>]]\n"
|
||||
msgstr ""
|
||||
"Ce wiki est propulsé par [ikiwiki](http://ikiwiki.info/).\n"
|
||||
"[[!if <span class="error">Error: syntax error in pagespec "\"enabled(version)\"\n""</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>
|
||||
258
ikiwiki/directive.fr/index.html
Normal file
258
ikiwiki/directive.fr/index.html
Normal 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="\"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="\"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 "\"enabled(listdirectives)\""</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>
|
||||
179
ikiwiki/directive/index.html
Normal file
179
ikiwiki/directive/index.html
Normal 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="value" param="value"]]</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="baldersnatch"
|
||||
bar="supercalifragilisticexpialidocious" 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="""
|
||||
1. "foo"
|
||||
2. "bar"
|
||||
3. "baz"
|
||||
""" othertext='''
|
||||
1. 'quux'
|
||||
2. "foo"
|
||||
''']]</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=<<OUTER
|
||||
[[!otherdirective <<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>
|
||||
368
ikiwiki/formatting.fr/index.html
Normal file
368
ikiwiki/formatting.fr/index.html
Normal 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="\"noindex," />
|
||||
|
||||
|
||||
<title>\"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="\"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 "\"enabled(smiley)"</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 "\"enabled(shortcut)"</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 "\"enabled(template)"</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 "\"enabled(toc)\""</span>]]\n"
|
||||
msgstr "\t\[[!toc ]]\n"
|
||||
|
||||
#. type: Plain text
|
||||
#, no-wrap
|
||||
msgid "[[!if <span class="error">Error: syntax error in pagespec "\"enabled(meta)\""</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 "\"enabled(inline)\""</span>]]\n"
|
||||
msgstr "\t\[[!inline pages=\"blog/*\"]]\n"
|
||||
|
||||
#. type: Plain text
|
||||
#, no-wrap
|
||||
msgid "[[!if <span class="error">Error: syntax error in pagespec "\"enabled(listdirectives)\""</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>
|
||||
206
ikiwiki/formatting/index.html
Normal file
206
ikiwiki/formatting/index.html
Normal 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 “>”:</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 "Hello, world!"
|
||||
20 GOTO 10</code></pre>
|
||||
<p>To link to an url or email address, you can just put the url in angle
|
||||
brackets: <<a href="http://ikiwiki.info"
|
||||
class="uri">http://ikiwiki.info</a>>, 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 page’s 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
58
ikiwiki/ikiwiki.js
Normal 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
149
ikiwiki/index.html
Normal 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
23
ikiwiki/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
219
ikiwiki/login-selector/login-selector.js
Normal file
219
ikiwiki/login-selector/login-selector.js
Normal 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;
|
||||
}
|
||||
};
|
||||
184
ikiwiki/markdown.fr/index.html
Normal file
184
ikiwiki/markdown.fr/index.html
Normal 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="\"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="\"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
146
ikiwiki/markdown/index.html
Normal 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 -->
|
||||
|
||||