rm
|
@ -1,20 +0,0 @@
|
|||
on: [push]
|
||||
jobs:
|
||||
job:
|
||||
container:
|
||||
image: ${{vars.DOCKER}}debian:bookworm
|
||||
steps:
|
||||
- name: spcd
|
||||
env:
|
||||
SPCD: ${{vars.SPCD}}
|
||||
SPCD_GIT_RWX: ${{vars.SPCD_GIT_RWX}}
|
||||
SPCD_GIT_SPCD: ${{vars.SPCD_GIT_SPCD}}
|
||||
SPCD_SSH_HOSTS: ${{vars.SPCD_SSH_HOSTS}}
|
||||
SPCD_SSH_KEY: ${{secrets.SPCD_SSH_KEY}}
|
||||
SPCD_TXT_LOCALE: ${{vars.SPCD_TXT_LOCALE}}
|
||||
run: ${{vars.SPCD}}
|
||||
|
||||
#- run: spcd-check-project
|
||||
- run: spcd-build-project
|
||||
- run: spcd-browse-workspace
|
||||
- run: spcd-synchronize
|
2
.gitignore
vendored
|
@ -1,2 +0,0 @@
|
|||
__pycache__
|
||||
/out
|
914
build.py
|
@ -1,914 +0,0 @@
|
|||
#! /usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
|
||||
def run(*args):
|
||||
subprocess.call(args)
|
||||
|
||||
|
||||
def main():
|
||||
time = datetime.datetime.now()
|
||||
time_id = time.strftime('%Y%m%d%H%M%S')
|
||||
style = 'css'
|
||||
script = 'js'
|
||||
root = os.path.dirname(os.path.realpath(__file__))
|
||||
input_directory = os.path.join(root, 'in')
|
||||
out = os.path.join(root, 'out')
|
||||
web = os.path.join(out, 'web')
|
||||
if os.path.exists(web):
|
||||
shutil.rmtree(web)
|
||||
os.makedirs(web)
|
||||
gen = os.path.join(web, time_id)
|
||||
css = os.path.join(gen, style)
|
||||
js = os.path.join(gen, script)
|
||||
#
|
||||
run('rsync', '--archive', f'{input_directory}/', f'{web}/')
|
||||
for directory in [css, js]:
|
||||
os.makedirs(directory)
|
||||
#
|
||||
link_gv = os.path.join(root, 'link.gv')
|
||||
link_svg = os.path.join(gen, 'link.svg')
|
||||
run('dot', link_gv, '-Tsvg', '-o', link_svg)
|
||||
with open(link_svg, 'br') as f:
|
||||
link_text = f.read().decode('u8')
|
||||
page_file = os.path.join(web, 'index.html')
|
||||
page_text = f'''\
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="initial-scale=1,width=device-width" />
|
||||
<link rel="stylesheet" href="{time_id}/{style}/index.css" />
|
||||
<script src="{time_id}/{script}/index.js"></script>
|
||||
<title>Marc Beninca</title>
|
||||
</head>
|
||||
|
||||
<body onload="main()">
|
||||
|
||||
<main>
|
||||
|
||||
<div class="tabs">
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab" id="tab/my" />
|
||||
<label for="tab/my">My/</label>
|
||||
<div><div class="tabs">
|
||||
<!--
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/my" id="tab/my/about" />
|
||||
<label for="tab/my/about">About</label>
|
||||
<div>{tabs['about']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/my" id="tab/my/bio" />
|
||||
<label for="tab/my/bio">Bio</label>
|
||||
<div>{tabs['bio']}</div>
|
||||
-->
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/my" id="tab/my/cv" />
|
||||
<label for="tab/my/cv">CV</label>
|
||||
<div>{tabs['cv']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/my" id="tab/my/profiles" />
|
||||
<label for="tab/my/profiles">Profiles</label>
|
||||
<div>{tabs['profiles']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/my" id="tab/my/projects" />
|
||||
<label for="tab/my/projects">Projects</label>
|
||||
<div><div class="tabs">
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/my/projects" id="tab/my/projects/lsgm" />
|
||||
<label for="tab/my/projects/lsgm">LSGM</label>
|
||||
<div>{tabs['lsgm']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/my/projects" id="tab/my/projects/ofsp" />
|
||||
<label for="tab/my/projects/ofsp">OFSP</label>
|
||||
<div>{tabs['ofsp']}</div>
|
||||
</div></div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/my" id="tab/my/tasks" />
|
||||
<label for="tab/my/tasks">Tasks</label>
|
||||
<div>{tabs['tasks']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/my" id="tab/my/trips" />
|
||||
<label for="tab/my/trips">Trips</label>
|
||||
<div>{tabs['trips']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/my" id="tab/my/sub" />
|
||||
<label for="tab/my/sub">…/</label>
|
||||
<div><div class="tabs">
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/my/sub" id="tab/my/sub/id" />
|
||||
<label for="tab/my/sub/id">Identity</label>
|
||||
<div>{tabs['id']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/my/sub" id="tab/my/sub/links" />
|
||||
<label for="tab/my/sub/links">Links</label>
|
||||
<div>{tabs['links']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/my/sub" id="tab/my/sub/repos" />
|
||||
<label for="tab/my/sub/repos">Repos</label>
|
||||
<div>{tabs['repos']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/my/sub" id="tab/my/sub/others" />
|
||||
<label for="tab/my/sub/others">…</label>
|
||||
<div>{tabs['others']}</div>
|
||||
</div></div>
|
||||
</div></div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab" id="tab/learn" />
|
||||
<label for="tab/learn">Learn</label>
|
||||
<div>{tabs['learn']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab" id="tab/music" />
|
||||
<label for="tab/music">Music</label>
|
||||
<div>{tabs['music']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab" id="tab/sites" />
|
||||
<label for="tab/sites">Sites/</label>
|
||||
<div><div class="tabs">
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/sites" id="tab/sites/books" />
|
||||
<label for="tab/sites/books">Books</label>
|
||||
<div>{tabs['books']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/sites" id="tab/sites/buy" />
|
||||
<label for="tab/sites/buy">Buy</label>
|
||||
<div>{tabs['buy']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/sites" id="tab/sites/social" />
|
||||
<label for="tab/sites/social">Social</label>
|
||||
<div>{tabs['social']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/sites" id="tab/sites/software" />
|
||||
<label for="tab/sites/software">Software</label>
|
||||
<div>{tabs['software']}</div>
|
||||
</div></div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab" id="tab/videos" />
|
||||
<label for="tab/videos">Videos/</label>
|
||||
<div><div class="tabs">
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/videos" id="tab/videos/comments" />
|
||||
<label for="tab/videos/comments">Comments</label>
|
||||
<div>{tabs['comments']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/videos" id="tab/videos/health" />
|
||||
<label for="tab/videos/health">Health</label>
|
||||
<div>{tabs['health']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/videos" id="tab/videos/vegan" />
|
||||
<label for="tab/videos/vegan">Vegan</label>
|
||||
<div>{tabs['vegan']}</div>
|
||||
</div></div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab" id="tab/sub" />
|
||||
<label for="tab/sub">…/</label>
|
||||
<div><div class="tabs">
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/sub" id="tab/sub/style" />
|
||||
<label for="tab/sub/style">Style</label>
|
||||
<div>{tabs['style']}</div>
|
||||
<input type="radio" onclick="update(id)"
|
||||
name="tab/sub" id="tab/sub/unsorted" />
|
||||
<label for="tab/sub/unsorted">…</label>
|
||||
<div>{tabs['unsorted']}</div>
|
||||
</div></div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<hr />
|
||||
Last update: {time.strftime('%Y/%m/%d %H:%M:%S')}
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
'''
|
||||
css_file = os.path.join(css, 'index.css')
|
||||
css_text = f'''\
|
||||
@media screen and (max-aspect-ratio: 10/16) {{
|
||||
|
||||
body {{
|
||||
font-size: 2em;
|
||||
}}
|
||||
|
||||
}}
|
||||
|
||||
body {{
|
||||
background: rgb(255,255,255);
|
||||
color: rgb(0,0,0);
|
||||
font-family: sans;
|
||||
margin: .5em;
|
||||
}}
|
||||
body.dark {{
|
||||
background: rgb(0,0,0);
|
||||
color: rgb(160,160,160);
|
||||
}}
|
||||
|
||||
header {{
|
||||
background-image: url("../img/debian.jpeg");
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}}
|
||||
|
||||
.tabs {{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}}
|
||||
.tabs .tabs {{
|
||||
padding: .5em 0 0 0;
|
||||
}}
|
||||
.tabs > input {{
|
||||
display: none;
|
||||
}}
|
||||
.tabs > input:checked + label + div {{
|
||||
display: block;
|
||||
}}
|
||||
.tabs > label {{
|
||||
order: 1;
|
||||
}}
|
||||
.tabs > div {{
|
||||
display: none;
|
||||
flex-basis: 100%;
|
||||
order: 2;
|
||||
}}
|
||||
|
||||
.tabs {{
|
||||
margin: 0;
|
||||
}}
|
||||
.tabs > input:checked + label {{
|
||||
background: linear-gradient(rgba(128,128,128,1), rgba(128,128,128,0));
|
||||
}}
|
||||
.tabs > label {{
|
||||
background: linear-gradient(rgba(64,64,64,1), rgba(64,64,64,0));
|
||||
border-color: rgb(128,128,128);
|
||||
border-radius: .5em;
|
||||
border-style: solid;
|
||||
border-width: 1px 1px 0 1px;
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
padding: .5em 1.5em;
|
||||
}}
|
||||
.tabs > label:hover {{
|
||||
background: linear-gradient(rgba(64,64,64,0), rgba(64,64,64,1));
|
||||
color: rgb(192,0,0);
|
||||
}}
|
||||
.tabs > div {{
|
||||
margin: 0;
|
||||
}}
|
||||
|
||||
a {{
|
||||
color: rgb(0,192,192);
|
||||
text-decoration: none;
|
||||
}}
|
||||
a:hover {{
|
||||
color: rgb(192,0,0);
|
||||
}}
|
||||
a:visited {{
|
||||
color: rgb(0,160,160);
|
||||
}}
|
||||
|
||||
img {{
|
||||
border: 1px solid;
|
||||
border-color: rgb(192,192,192);
|
||||
border-radius: 1em;
|
||||
height: 8em;
|
||||
}}
|
||||
|
||||
table {{
|
||||
empty-cells: hide;
|
||||
}}
|
||||
th,td {{
|
||||
border-radius: .2em;
|
||||
}}
|
||||
th:hover,td:hover {{
|
||||
background: rgb(48,0,0);
|
||||
}}
|
||||
th {{
|
||||
background: rgb(64,64,64);
|
||||
color: rgb(128,128,0);
|
||||
}}
|
||||
td {{
|
||||
background: rgb(48,48,48);
|
||||
border: 1px solid;
|
||||
border-color: rgb(192,192,192);
|
||||
text-align: center;
|
||||
}}
|
||||
|
||||
.cards {{
|
||||
display: flex;
|
||||
}}
|
||||
.card {{
|
||||
list-style: none;
|
||||
margin: 0 1em;
|
||||
text-align: center;
|
||||
}}
|
||||
.card img {{
|
||||
border: none;
|
||||
height: 3em;
|
||||
}}
|
||||
|
||||
.debug {{
|
||||
border-color: rgb(255,0,255);
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
}}
|
||||
'''
|
||||
js_file = os.path.join(js, 'index.js')
|
||||
js_text = f'''\
|
||||
function check(tab) {{
|
||||
const tabs = tab.split('/')
|
||||
let id = 'tab'
|
||||
let element
|
||||
for (tab of tabs) {{
|
||||
id = `${{id}}/${{tab}}`
|
||||
element = document.getElementById(id)
|
||||
if (element) {{
|
||||
element.checked = true
|
||||
}}
|
||||
}}
|
||||
}}
|
||||
|
||||
function debug() {{
|
||||
for (element of document.getElementsByTagName('*')) {{
|
||||
element.classList.toggle('debug')
|
||||
}}
|
||||
}}
|
||||
|
||||
function push(tab) {{
|
||||
window.history.pushState(null, null, `?tab=${{tab}}`)
|
||||
}}
|
||||
|
||||
function update(id) {{
|
||||
const tab = id.split('/').slice(1).join('/')
|
||||
push(tab)
|
||||
}}
|
||||
|
||||
function main() {{
|
||||
let tab = (new URL(document.location)).searchParams.get('tab')
|
||||
if (tab) {{
|
||||
check(tab)
|
||||
}} else {{
|
||||
tab = 'my/profiles'
|
||||
check(tab)
|
||||
push(tab)
|
||||
}}
|
||||
const dark = document.getElementById('dark')
|
||||
if (dark) {{
|
||||
dark.click()
|
||||
}}
|
||||
}}
|
||||
|
||||
function swap() {{
|
||||
document.body.classList.toggle('dark')
|
||||
}}
|
||||
'''
|
||||
# {link_text}
|
||||
with open(page_file, 'bw') as f:
|
||||
f.write(page_text.encode('u8'))
|
||||
with open(css_file, 'bw') as f:
|
||||
f.write(css_text.encode('u8'))
|
||||
with open(js_file, 'bw') as f:
|
||||
f.write(js_text.encode('u8'))
|
||||
|
||||
|
||||
tabs = {
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'about': f'''\
|
||||
About…
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'bio': f'''\
|
||||
<h1>Marc Beninca</h1>
|
||||
Welcome to a recap attempt of my IT life!
|
||||
|
||||
<h2>The early days</h2>
|
||||
In my primary school days I started to interact with computers at home,
|
||||
mainly Amstrad CPC 464 & 6128 machines.<br />
|
||||
It was the occasion for me to:
|
||||
<ul>
|
||||
<li>discover computer architectures</li>
|
||||
<li>learn how to program in BASIC</li>
|
||||
<li>suffer the noise and speed of tape recorders</li>
|
||||
<li>experience the revolution of floppy disks transfer rates</li>
|
||||
</ul>
|
||||
|
||||
<h2>Diving in</h2>
|
||||
Right before beginning high school, I was introduced to the PC platform.<br />
|
||||
The “system programming PC bible” was my reference for a long time.<br />
|
||||
I had the occasion to develop projects in:
|
||||
<ul>
|
||||
<li>Pascal (for example my own hexadecimal file editor)</li>
|
||||
<li>Assembly (mainly for critical subroutines performance)</li>
|
||||
<li>AutoLISP (automation in LISP of AutoCAD elements processing)</li>
|
||||
</ul>
|
||||
|
||||
To be continued…
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'books': f'''\
|
||||
<ul>
|
||||
<li><a href="https://www.tradepub.com">TradePub</a></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'buy': f'''\
|
||||
<ul>
|
||||
<li><a href="https://www.i-comparateur.com">i-comparateur</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://www.amazon.fr">Amazon</a><ul>
|
||||
<li><a href="https://www.amazon.fr/SanDisk-Extreme-externe-000-Mo-mousqueton/dp/B08RX3343D">SanDisk Extreme Pro</a></li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://www.gl-inet.com/products">GL-iNet</a></li>
|
||||
<li>OVH<ul>
|
||||
<li><a href="https://checkservers.ovh">check servers</a></li>
|
||||
<li><a href="https://eco.ovhcloud.com/fr/#filterValue=kimsufi,so">eco</a></li>
|
||||
</ul></li>
|
||||
<li><a href="https://www.thinkpenguin.com">ThinkPenguin</a></li>
|
||||
<li><a href="https://www.tuxedocomputers.com">Tuxedo Computers</a></li>
|
||||
<li><a href="https://vollebak.com/collections">Vollebak</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://www.leboncoin.fr">Le bon coin</a></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'comments': f'''\
|
||||
<ul>
|
||||
<li><a href="https://www.youtube.com/@LogicallyAnswered/videos">Logically Answered</a></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'cv': f'''\
|
||||
<ul class="cards">
|
||||
<li class="card"><a href="https://cv.marc.beninca.link/en">
|
||||
<img src="img/en.svg" /><br />English</a></li>
|
||||
<li class="card"><a href="https://cv.marc.beninca.link/fr">
|
||||
<img src="img/fr.svg" /><br />Français</a></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'repos': f'''\
|
||||
<ul>
|
||||
<li><a href="https://forge.rwx.work/marc.beninca">RWX</a></li>
|
||||
</ul><ul>
|
||||
<li><a href="https://codeberg.org/marc.beninca">CodeBerg</a></li>
|
||||
<li><a href="https://git.disroot.org/marc.beninca">DisRoot</a></li>
|
||||
<li><a href="https://git.froggi.es/marc.beninca">Froggies</a></li>
|
||||
<li><a href="https://gitdab.com/marc.beninca">GitDab</a></li>
|
||||
<li><a href="https://gitnet.fr/marc.beninca">GitNet</a></li>
|
||||
<li><a href="https://git.nixnet.services/marc.beninca">NixNet</a></li>
|
||||
</ul><hr /><ul>
|
||||
<li><a href="https://framagit.org/marc.beninca">FramaGit</a></li>
|
||||
<li><a href="https://gitgud.io/marc.beninca">GitGud</a></li>
|
||||
<li><a href="https://git.insomnia247.nl/marc.beninca">Insomnia</a></li>
|
||||
<li><a href="https://forge.tedomum.net/marc.beninca">TeDomum</a></li>
|
||||
</ul><hr /><ul>
|
||||
<li><a href="https://git.42l.fr/marc.beninca">42l</a></li>
|
||||
<li><a href="https://git.afpy.org/marc.beninca">AFPy</a></li>
|
||||
<li><a href="https://forge.chapril.org/marc.beninca">Chapril</a></li>
|
||||
<li><a href="https://git.envs.net/marc.beninca">Envs</a></li>
|
||||
<li><a href="https://git.fsfe.org/marc.beninca">FSFE</a></li>
|
||||
<li><a href="https://git.projectsegfau.lt/marc.beninca">ProjectSegfault</a></li>
|
||||
<!--<li><a href="https://silica.codes/marc.beninca">SilicaCodes</a></li>-->
|
||||
<li><a href="https://tildegit.org/marc.beninca">TildeGit</a></li>
|
||||
</ul>
|
||||
|
||||
<hr />
|
||||
|
||||
<ul>
|
||||
<li><a href="https://notabug.org/marc.beninca">NotABug</a></li>
|
||||
<li><a href="https://pagure.io/user/marc-beninca">Pagure</a></li>
|
||||
<li><a href="https://rocketgit.com/marc.beninca">RocketGit</a></li>
|
||||
<li><a href="https://sr.ht/~marc_beninca/rwx.work/sources">SourceHut</a></li>
|
||||
<li><a href="https://git.tilde.institute/mspe">TildeInstitute</a></li>
|
||||
</ul>
|
||||
|
||||
<hr />
|
||||
|
||||
<ul>
|
||||
<li>Gforge</li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'health': f'''\
|
||||
<ul>
|
||||
<li><a href="https://www.youtube.com/@chubbyemu/videos">Chubby Emu</a></li>
|
||||
<li><a href="https://www.youtube.com/@drekberg/videos">Sten Ekberg</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><a href="https://www.youtube.com/@KianaDocherty/videos">Kiana Docherty</a></li>
|
||||
<li><a href="https://www.youtube.com/@ThomasDeLauerOfficial/videos">Thomas DeLauer</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://www.youtube.com/@ivredevie/videos">Ivre de vie</a></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'id': f'''\
|
||||
<table>
|
||||
|
||||
<tr><th colspan="2">OpenPGP</th><td colspan="3" rowspan="4"><img src="img/marc.jpeg" /></td></tr>
|
||||
<tr><td colspan="2">marc.beninca.link<br><a href="marc.beninca.pgp">binary</a> | <a href="marc.beninca.asc">textual</a></td></tr>
|
||||
<tr><td colspan="2"><a href="https://meta.sr.ht/~marc_beninca.pgp">meta.sr.ht</a></td></tr>
|
||||
<tr><td colspan="2"><a href="https://keys.openpgp.org/search?q=marc@beninca.link">keys.openpgp.org</a></td></tr>
|
||||
|
||||
<tr>
|
||||
<th><a href="https://keyoxide.org/08EDA7006234A0EB29A3A8471DBD5EC4BADA5579">KeyOxide<br>PGP</a></th>
|
||||
<th><a href="https://keyoxide.org/aspe:keyoxide.org:WUD5YVN52J3RJ6CD4ZCWYL6S54">KeyOxide<br>ASP</a></th>
|
||||
<th><a href="https://liberapay.com/marc.beninca">Libera<br>Pay</a></th>
|
||||
<th><a href="https://patreon.com/marc_beninca">Patreon</a></th>
|
||||
<th><a href="https://tipeee.com/marc-beninca">Tip<br>eee</a></th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="3"><a href="https://mastodon.cloud/@marc_beninca">Mastodon</a></td>
|
||||
<td colspan="2"><a href="https://discord.gg/v6p7CtZ4Zh">Discord</a></td>
|
||||
</tr><tr>
|
||||
<td colspan="3"><a href="https://devs.live/users/marc_beninca">Pleroma</a></td>
|
||||
<td><a href="https://vimeo.com/marcbeninca">Vimeo</a></td>
|
||||
</tr><tr>
|
||||
<td colspan="2"><a href="https://videos.trom.tf/@marc_beninca">PeerTube</a></td>
|
||||
<td><a href="https://openstreetmap.org/user/Marc Beninca">OpenStreetMap</a></td>
|
||||
<td><a href="https://youtube.com/@marc.beninca">YouTube</a></td>
|
||||
</tr><tr>
|
||||
<td colspan="2"><a href="https://pixelfed.social/marc.beninca">PixelFed</a></td>
|
||||
<td><a href="https://linuxfr.org/users/marc-beninca">LinuxFR</a></td>
|
||||
<td><a href="https://instagram.com/marc.beninca">Instagram</a></td>
|
||||
</tr><tr>
|
||||
<td colspan="2"><a href="https://rant.li/marc-beninca">WriteFreely</a></td>
|
||||
</tr><tr>
|
||||
<td colspan="2"><a href="https://programming.dev/u/marc_beninca">Lemmy</a></td>
|
||||
</tr><tr>
|
||||
<td colspan="2"><a href="https://lobste.rs/u/marc_beninca">Lobsters</a></td>
|
||||
</tr><tr>
|
||||
<td colspan="2"><a href="https://news.ycombinator.com/user?id=marc_beninca">HackerNews</a></td>
|
||||
</tr>
|
||||
|
||||
<tr><th colspan="2">DNS</th></tr>
|
||||
|
||||
<tr><td colspan="2"><a href="https://beninca.link">beninca.link</a></td></tr>
|
||||
<tr><td colspan="2">computing.land</td></tr>
|
||||
<tr><td colspan="2">marc-beninca.fr</td></tr>
|
||||
<tr><td colspan="2"><a href="https://rwx.work">rwx.work</a></td></tr>
|
||||
<tr><td colspan="2"><a href="https://tilde.link">tilde.link</a></td></tr>
|
||||
|
||||
<tr><th colspan="2">Git / Forgejo</th></tr>
|
||||
|
||||
<tr><td colspan="2"><a href="https://forge.rwx.work/marc.beninca">forge.rwx.work</a></td></tr>
|
||||
|
||||
</table>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'learn': f'''\
|
||||
<ul>
|
||||
<li><a href="https://roadmap.sh">Roadmap</a></li>
|
||||
<li><a href="https://teachyourselfcs.com">Teach Yourself Computer Science</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://www.youtube.com/@ExternCode/videos">Extern Code</a></li>
|
||||
<li><a href="https://www.youtube.com/@freecodecamp/videos">FreeCodeCamp</a></li>
|
||||
<li><a href="https://debian-facile.org/projets/lescahiersdudebutant">Les cahiers du débutant sur Debian</a></li>
|
||||
<li><a href="https://www.youtube.com/@SimplicodeOfficial/videos">SimpliCode</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://overthewire.org">Over The Wire</a></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'links': f'''\
|
||||
<ul>
|
||||
<li><a href="https://marc-beninca.8b.io">8bio</a></li>
|
||||
<li><a href="https://allmylinks.com/marc-beninca">AllMyLinks</a></li>
|
||||
<li><a href="https://beacons.ai/marc.beninca">Beacons</a></li>
|
||||
<li><a href="https://biglink.to/marc_beninca">BigLinkTo</a></li>
|
||||
<li><a href="https://bioin.link/marc.beninca">BioInLink</a></li>
|
||||
<li><a href="https://marc_beninca.bio.link">Bio.Link</a></li>
|
||||
<li><a href="https://biolinky.co/marcbeninca">BioLinky</a></li>
|
||||
<li><a href="https://marc_beninca.c8ke.com">C8ke</a></li>
|
||||
<li><a href="https://campsite.bio/marc.beninca">CampSite</a></li>
|
||||
<li><a href="https://marc-beninca.carrd.co">Carrd</a></li>
|
||||
<li><a href="https://direct.me/marc_beninca">DirectMe</a></li>
|
||||
<li><a href="https://everlink.tools/marc.beninca">EverLink</a></li>
|
||||
<li><a href="https://feedlink.io/marcbeninca">FeedLink</a></li>
|
||||
<li><a href="https://flow.page/marc.beninca">FlowPage</a></li>
|
||||
<li><a href="https://heylink.me/marc.beninca">HeyLinkMe</a></li>
|
||||
<li><a href="https://hy.page/marcbeninca">HyPage</a></li>
|
||||
<li><a href="https://ichi.gg/marc.beninca">Ichi.GG</a></li>
|
||||
<li><a href="https://linkfly.to/marc-beninca">LinkFly</a></li>
|
||||
<li><a href="https://instabio.cc/marc-beninca">LinkInBio</a></li>
|
||||
<li><a href="https://linkpluto.com/marc-beninca">LinkPluto</a></li>
|
||||
<li><a href="https://linkpop.com/marc-beninca">LinkPop</a></li>
|
||||
<li><a href="https://linkr.bio/marc.beninca">Linkr.Bio</a></li>
|
||||
<li><a href="https://linksight.me/marc_beninca">LinkSight</a></li>
|
||||
<li><a href="https://link.space/@marc_beninca">LinkSpace</a></li>
|
||||
<li><a href="https://linkstack.fr/@marc.beninca">LinkStack</a></li>
|
||||
<li><a href="https://linktr.ee/marc.beninca">LinkTree</a></li>
|
||||
<li><a href="https://lnk.bio/marc.beninca">Lnk.Bio</a></li>
|
||||
<li><a href="https://lu.ma/marc.beninca">Luma</a></li>
|
||||
<li><a href="https://nano.site/marc.beninca">NanoSite</a></li>
|
||||
<li><a href="https://marcbeninca.podia.com">Podia</a></li>
|
||||
<li><a href="https://solo.to/marc.beninca">SoloTo</a></li>
|
||||
<li><a href="https://marc-beninca.start.page">StartPage</a></li>
|
||||
<li><a href="https://tap.bio/marc.beninca">Tap.Bio</a></li>
|
||||
<li><a href="https://marc-beninca.taplink.ws">TapLink</a></li>
|
||||
<li><a href="https://url.bio/marc_beninca">URL.Bio</a></li>
|
||||
<li><a href="https://vu.fr/marc-beninca">Vu.Fr</a></li>
|
||||
<li><a href="https://zaap.bio/marc.beninca">Zaap</a></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'music': f'''\
|
||||
<ul>
|
||||
<li><a href="https://www.youtube.com/watch?v=_ITiwPMUzho">3 AM Coding Session</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://www.youtube.com/@Daniellabjarnhof/videos">Daniella Bjarnhof</a></li>
|
||||
<li><a href="https://www.youtube.com/@DJGroove/videos">DJ Groove</a></li>
|
||||
<li><a href="https://www.youtube.com/@flavourtrip/videos">Flavour Trip</a></li>
|
||||
<li><a href="https://www.youtube.com/@garsimusic/videos">Garsi</a></li>
|
||||
<li><a href="https://www.youtube.com/@jabig/videos">Ja Big</a></li>
|
||||
<li><a href="https://www.youtube.com/@johnny_m/videos">Johnny M (GR)</a></li>
|
||||
<li><a href="https://www.youtube.com/@johnnymgrchannelc3145/videos">Johnny M (GR) (Channel C')</a></li>
|
||||
<li><a href="https://www.youtube.com/@djmissmonique/videos">Miss Monique</a></li>
|
||||
<li><a href="https://www.youtube.com/@DJRaphaelPPRV/videos">Raphael</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://www.youtube.com/watch?v=lP26UCnoH9s">Coffee Shop Radio</a></li>
|
||||
<li><a href="https://www.youtube.com/watch?v=8wHjuR2gagI">Sad songs for sad people</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="http://radio.garden/visit/pessac">Radio Garden</a></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'profiles': f'''\
|
||||
<ul class="cards">
|
||||
<li class="card"><a href="https://forge.rwx.work/marc.beninca">
|
||||
<img src="img/ForgeJo.svg" /><br />ForgeJo</a></li>
|
||||
<li class="card"><a href="https://keyoxide.org/08EDA7006234A0EB29A3A8471DBD5EC4BADA5579">
|
||||
<img src="img/KeyOxide.png" /><br />KeyOxide / PGP</a></li>
|
||||
<li class="card"><a href="https://keyoxide.org/aspe:keyoxide.org:WUD5YVN52J3RJ6CD4ZCWYL6S54">
|
||||
<img src="img/KeyOxide.png" /><br />KeyOxide / ASP</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul class="cards">
|
||||
<li class="card"><a href="https://videos.trom.tf/@marc.beninca">
|
||||
<img src="img/PeerTube.png" /><br />PeerTube</a></li>
|
||||
<li class="card"><a href="https://pixelfed.social/marc.beninca">
|
||||
<img src="img/PixelFed.svg" /><br />PixelFed</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul class="cards">
|
||||
<li class="card"><a href="https://linkedin.com/in/marc-beninca">
|
||||
<img src="img/LinkedIn.png" /><br />LinkedIn</a></li>
|
||||
<li class="card"><a href="https://youtube.com/@marc.beninca">
|
||||
<img src="img/YouTube.png" /><br />YouTube</a></li>
|
||||
<li class="card"><a href="https://instagram.com/marc.beninca">
|
||||
<img src="img/InstaGram.png" /><br />InstaGram</a></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'lsgm': f'''\
|
||||
<h1>Live Scan Grub Menu</h1>
|
||||
Setup a whole EFI System Partition:
|
||||
<ul>
|
||||
<li>generate customized GRUB EFI & BIOS images</li>
|
||||
<li>scan data partition(s) for SquashFS image files</li>
|
||||
<li>display generated boot menu</li>
|
||||
<li>live boot selected kernel, initial ramdisk and file system image</li>
|
||||
</ul>
|
||||
BASH experimenting:
|
||||
<ul>
|
||||
<li><a href="https://youtu.be/mx2lhm7qClc">2023/05/04: 1st boot into QCOW storage with encrypted data partition</a></li>
|
||||
</ul>
|
||||
''',
|
||||
'ofsp': f'''\
|
||||
<h1>Operating File System Profile</h1>
|
||||
Build from mirror a full operating system bootable file image:
|
||||
<ul>
|
||||
<li>bootstrap base file system</li>
|
||||
<li>configure common core basics</li>
|
||||
<li>install TUI packages</li>
|
||||
<li>install GUI packages</li>
|
||||
<li>copy kernel and initial ramdisk for bootloader</li>
|
||||
<li>archive final file system as SquashFS file</li>
|
||||
</ul>
|
||||
BASH experimenting:
|
||||
<ul>
|
||||
<li><a href="https://youtu.be/phArr81weUw">2023/07/27: 3rd party repos, repoless .deb, tarball archives</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://youtu.be/5Isf02MKFgM">2023/07/20: both TUI and GUI images</a></li>
|
||||
<li><a href="https://youtu.be/YhoY2gisXg4">2023/06/20: Graphical User Interface too</a></li>
|
||||
<li><a href="https://youtu.be/PSHswxc9oU8">2023/06/13: Textual User Interface only</a></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'social': f'''\
|
||||
<ul>
|
||||
<li><a href="https://calckey.org">Calckey</a></li>
|
||||
<li><a href="https://joinmastodon.org">Mastodon</a></li>
|
||||
<li><a href="https://pixelfed.org">Pixelfed</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://bsky.app">Bluesky</a></li>
|
||||
<li><a href="https://revolt.chat">Revolt</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://discord.com">Discord</a></li>
|
||||
<li><a href="https://www.facebook.com">FaceBook</a></li>
|
||||
<li><a href="https://www.instagram.com">InstaGram</a></li>
|
||||
<li><a href="https://www.linkedin.com">LinkedIn</a></li>
|
||||
<li><a href="https://www.reddit.com">Reddit</a></li>
|
||||
<li><a href="https://www.tiktok.com">TikTok</a></li>
|
||||
<li><a href="https://www.twitch.tv">Twitch</a></li>
|
||||
<li><a href="https://twitter.com">Twitter</a></li>
|
||||
<li><a href="https://www.youtube.com">YouTube</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://nextdoor.com">NextDoor</a></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'software': f'''\
|
||||
<ul>
|
||||
<li><a href="https://developer.puri.sm/Librem5">Librem 5</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://docs.zfsbootmenu.org">ZFS Boot Menu</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://carbon.sh">CarbonOS</a></li>
|
||||
<li><a href="https://fedoraproject.org/silverblue">Fedora Silverblue</a></li>
|
||||
<li><a href="https://www.flatcar.org">Flatcar Container Linux</a></li>
|
||||
<li><a href="https://nixos.org">NixOS</a></li>
|
||||
<li><a href="https://guix.gnu.org">Guix</a></li>
|
||||
<li><a href="https://microos.opensuse.org">OpenSUSE MicroOS</a></li>
|
||||
<li><a href="https://vanillaos.org">Vanilla OS</a></li>
|
||||
<li><a href="https://github.com/bottlerocket-os/bottlerocket">Bottlerocket OS</a></li>
|
||||
<li><a href="https://blendos.co">BlendOS</a></li>
|
||||
<li><a href="https://www.talos.dev">Talos Linux</a></li>
|
||||
<li><a href="https://www.endlessos.org/os">Endless OS</a></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'style': f'''\
|
||||
<ul>
|
||||
<li><input type="checkbox" id="dark" onclick="swap()">Dark</input></li>
|
||||
<li><input type="checkbox" id="debug" onclick="debug()">Debug</input></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'tasks': f'''\
|
||||
<ul>
|
||||
<li>categorize music</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>fix dark switch</li>
|
||||
<li>style list items</li>
|
||||
<li>switch fonts</li>
|
||||
<li>use CSS variables</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>implement search</li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'trips': f'''\
|
||||
<ul>
|
||||
<li>Belgium<ul>
|
||||
<li>Brussels</li>
|
||||
</ul></li>
|
||||
<li>Estonia<ul>
|
||||
<li>Lahemaa</li>
|
||||
<li>Narva</li>
|
||||
<li>Pärnu</li>
|
||||
<li>Saaremaa</li>
|
||||
<li>Tallinn</li>
|
||||
<li>Tartu</li>
|
||||
</ul></li>
|
||||
<li>Germany<ul>
|
||||
<li>Berlin</li>
|
||||
</ul></li>
|
||||
<li>Japan<ul>
|
||||
<li>Hiroshima</li>
|
||||
<li>Kyoto</li>
|
||||
<li>Okinawa</li>
|
||||
<li>Osaka</li>
|
||||
<li>Tokyo</li>
|
||||
</ul></li>
|
||||
<li>Netherlands<ul>
|
||||
<li>Amsterdam</li>
|
||||
<li>Rotterdam</li>
|
||||
</ul></li>
|
||||
<li>Switzerland</li>
|
||||
<li>United States of America<ul>
|
||||
<li>California<ul>
|
||||
<li>Los Angeles</li>
|
||||
<li>San Francisco</li>
|
||||
</ul></li>
|
||||
<li>Georgia</li>
|
||||
<li>Hawaii</li>
|
||||
<li>Indiana</li>
|
||||
<li>Kentucky</li>
|
||||
<li>New York</li>
|
||||
<li>Ohio</li>
|
||||
<li>Tennessee</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'vegan': f'''\
|
||||
<ul>
|
||||
<li><a href="https://www.youtube.com/@CheapLazyVegan/videos">Cheap Lazy Vegan</a></li>
|
||||
<li><a href="https://www.youtube.com/@gazoakleychef/videos">Gaz Oakley</a></li>
|
||||
<li><a href="https://www.youtube.com/@MerleONeal/videos">Merle O'Neal</a></li>
|
||||
<li><a href="https://www.youtube.com/@peacefulcuisine/videos">Peaceful Cuisine</a></li>
|
||||
<li><a href="https://www.youtube.com/@PickUpLimes/videos">Pick Up Limes</a></li>
|
||||
<li><a href="https://www.youtube.com/@RainbowPlantLife/videos">Rainbow Plant Life</a></li>
|
||||
<li><a href="https://www.youtube.com/@TheKoreanVegan/videos">The Korean Vegan</a></li>
|
||||
<li><a href="https://www.youtube.com/@Thevietvegan/videos">The Viet Vegan</a></li>
|
||||
<li><a href="https://www.youtube.com/@YEUNGMANCOOKING/videos">Yeung Man Cooking</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><a href="https://www.youtube.com/@SauceStache/videos">Sauce Stache</a></li>
|
||||
<li><a href="https://www.youtube.com/@TheeBurgerDude/videos">Thee Burger Dude</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://www.youtube.com/@doucefrugalite/videos">Douce frugalité</a></li>
|
||||
<li><a href="https://www.youtube.com/@Evalespetitsplats/videos">Eva les petits plats</a></li>
|
||||
<li><a href="https://www.youtube.com/@LapetiteOkara/videos">La petite Okara</a></li>
|
||||
<li><a href="https://www.youtube.com/@MarieSweetandSour/videos">Marie Sweet and Sour</a></li>
|
||||
<li><a href="https://www.youtube.com/@SebastienKardinal/videos">Sébastien Kardinal</a></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'others': f'''\
|
||||
<ul>
|
||||
<li><a href="https://bsky.app/profile/marc-beninca.bsky.social">Blue Sky</a></li>
|
||||
<li><a href="https://buymeacoffee.com/marc.beninca">Buy Me A Coffee</a></li>
|
||||
<li><a href="https://cohost.org/marc-beninca">CoHost</a></li>
|
||||
<li><a href="https://dev.to/marc_beninca">Dev</a></li>
|
||||
<li><a href="https://diaspora-fr.org/people/00f4f8e04b11013b46b20025900e4586">Diaspora</a></li>
|
||||
<li><a href="https://hashnode.com/@marc-beninca">HashNode</a></li>
|
||||
<li><a href="https://medium.com/@marc-beninca">Medium</a></li>
|
||||
<li><a href="https://marc-beninca.micro.blog/about">MicroBlog</a></li>
|
||||
<li><a href="https://minds.com/marc_beninca">Minds</a></li>
|
||||
<li><a href="https://odysee.com/@marc.beninca">Odysee</a></li>
|
||||
<li><a href="https://paypal.me/MarcBeninca">PayPal</a></li>
|
||||
<li><a href="https://pinterest.com/marc_beninca">Pinterest</a></li>
|
||||
<li><a href="https://marcbeninca.podia.com">Podia</a></li>
|
||||
<li><a href="https://app.revolt.chat/invite/01FREKCG3P2P0YMAHQSCPSW4GD">Revolt</a></li>
|
||||
<li><a href="https://tiktok.com/@marc.beninca">TikTok</a></li>
|
||||
<li><a href="https://twtxt.net/user/marc_beninca">YarnSocial</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="https://dlive.tv/marc.beninca">Dlive</a></li>
|
||||
<li><a href="https://kick.com/marc_beninca">Kick</a></li>
|
||||
</ul>
|
||||
<hr />
|
||||
<ul>
|
||||
<li><a href="">KissBank</a></li>
|
||||
</ul>
|
||||
''',
|
||||
#⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
|
||||
'unsorted': f'''\
|
||||
<ul>
|
||||
<li><a href="https://foss.events">FOSS Events</a></li>
|
||||
</ul>
|
||||
''',
|
||||
}
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
35
cc.html
|
@ -1,35 +0,0 @@
|
|||
<ul>
|
||||
<li><a href="cc/ont">Ontology</a></li>
|
||||
<li><a href="cc/atom">Cosmos</a></li>
|
||||
<li><a href="cc/algo">Algorand</a></li>
|
||||
<li><a href="cc/xtz">Tezos</a></li>
|
||||
<li><a href="cc/sol">Solana</a></li>
|
||||
<li><a href="cc/ada">Cardano</a></li>
|
||||
<li><a href="cc/eth">Dai</a></li>
|
||||
<li><a href="cc/vet">VeChain</a></li>
|
||||
</ul><ul>
|
||||
<li><a href="cc/btc">BitCoin</a></li>
|
||||
<li><a href="cc/eth">Ethereum</a></li>
|
||||
<li><a href="cc/bnb">Binance</a></li>
|
||||
<li><a href="cc/xrp">XRP</a></li>
|
||||
<li><a href="cc/dot">PolkaDot</a></li>
|
||||
<li><a href="cc/eth">Polygon</a></li>
|
||||
<li><a href="cc/trx">Tron</a></li>
|
||||
<li><a href="cc/ltc">LiteCoin</a></li>
|
||||
<li><a href="cc/bch">BitcoinCash</a></li>
|
||||
<li><a href="cc/xlm">StellarLumens</a></li>
|
||||
<li><a href="cc/hbar">Hedera</a></li>
|
||||
<li><a href="cc/fil">FileCoin</a></li>
|
||||
<li><a href="cc/egld">ElrondGold</a></li>
|
||||
<li><a href="cc/zec">Zcash</a></li>
|
||||
<li><a href="cc/theta">Theta</a></li>
|
||||
<!--BitTorrent-->
|
||||
<!--Neo-->
|
||||
<li><a href="cc/dash">Dash</a></li>
|
||||
<li><a href="cc/zil">Zilliqa</a></li>
|
||||
<li><a href="cc/qtum">Qtum</a></li>
|
||||
<li><a href="cc/icx">Icon</a></li>
|
||||
<li><a href="cc/dgb">DigiByte</a></li>
|
||||
<li><a href="cc/xno">Nano</a></li>
|
||||
<li><a href="cc/ark">Ark</a></li>
|
||||
</ul>
|
1
cc/ada
|
@ -1 +0,0 @@
|
|||
addr1q8xzhlhssfx0fwd57ha4khf7wtwdmr8rc4lkwnge6xjnskxv90l0pqjv7jumfa0mtdwnuukumkxw83tlvax3n5d98pvqgu558s
|
1
cc/algo
|
@ -1 +0,0 @@
|
|||
7GHLYCLQKIET5XT2OWMAXU6NQKIRFJOWMKUOFON4RABVAA2PUZ2DLCDRLQ
|
1
cc/ark
|
@ -1 +0,0 @@
|
|||
AHHRwwELYb2KUjhcnZ4dknHuerdpRLfD4N
|
1
cc/atom
|
@ -1 +0,0 @@
|
|||
cosmos132qm6ymwft9ck0xaaa9qamyaqq5ckwku98sak2
|
1
cc/bch
|
@ -1 +0,0 @@
|
|||
qrqs9yxvnknvma6n8yy79xvlpd4l6kktmv28j35rwj
|
1
cc/bnb
|
@ -1 +0,0 @@
|
|||
bnb1dezkkkg23fesfaz7jrt6xguuqsan20wz9jgt3d
|
1
cc/btc
|
@ -1 +0,0 @@
|
|||
bc1qu2qa6m3lkf3cvr5220k4npa77g6endlaf45c3j
|
1
cc/dash
|
@ -1 +0,0 @@
|
|||
Xx6DuquvMtZHZAuEjPSt175Kmmx3r36Pg3
|
1
cc/dgb
|
@ -1 +0,0 @@
|
|||
DBHEv2ChbeQc7RJGaobMpwejK9tpgmi9FA
|
1
cc/dot
|
@ -1 +0,0 @@
|
|||
13Mfiye1NW43JZKmr1MM2GxgJfbVvQFu9Rh3L83UMxYFUmRY
|
1
cc/egld
|
@ -1 +0,0 @@
|
|||
erd1lz5tmvdvspyemykl05u34qqjj3tvkvze5n3hyac38dk37v2ymwasc6gyyg
|
1
cc/eth
|
@ -1 +0,0 @@
|
|||
0xF9ef31EEea5956Cd193147E7D19b04f45cd9a38D
|
1
cc/fil
|
@ -1 +0,0 @@
|
|||
f1unsj2vjm35jxvrctbvi2wxp2shsbvnvcaurszyq
|
1
cc/hbar
|
@ -1 +0,0 @@
|
|||
0.0.892596
|
1
cc/icx
|
@ -1 +0,0 @@
|
|||
hx02b19ad56ff68d3a0a725b04ef27dbf8996684a8
|
1
cc/ltc
|
@ -1 +0,0 @@
|
|||
LVZGzfx6uPqJeTXPDUrCviBiyxveqvK2WK
|
1
cc/luna
|
@ -1 +0,0 @@
|
|||
terra1rw6d6qkwqtlf38ncllt38axgwyu24ezlgx54wr
|
1
cc/ont
|
@ -1 +0,0 @@
|
|||
AWEjJtRPkwL3VPwvp6G3wd96Z2oqAJ8s6s
|
1
cc/qtum
|
@ -1 +0,0 @@
|
|||
QWDBhWadR1Xe2frRAZJ58LjzbMMff7udfH
|
1
cc/sol
|
@ -1 +0,0 @@
|
|||
FbDhn6rkT4x1uW6p9XufYwBrHeS53y56Q8vdo2eKb2Zc
|
1
cc/theta
|
@ -1 +0,0 @@
|
|||
0x27d77039F7E852c72b15F824842E44A1295cC53A
|
1
cc/trx
|
@ -1 +0,0 @@
|
|||
TAFW2JVYXPfskGaoz4vu1oMwo6B72J2fEE
|
1
cc/vet
|
@ -1 +0,0 @@
|
|||
0x877996962b331c032955fdb80B2AA7D6E78cb0d7
|
1
cc/xlm
|
@ -1 +0,0 @@
|
|||
GAYZAZU7BZ3PLSBLHMBIARS2NXC77R5TZBHLWX7PZV474FWYOTIXCYTK
|
1
cc/xmr
|
@ -1 +0,0 @@
|
|||
43NTvQEtdgTHfvm9vtj3tQDYJL9R3aja1QR98YkY2DgDi8gcWnfCYBJe9qgBerGiu6eE9JM65o8rhHxbNHySUcLf4yxyYpr
|
1
cc/xno
|
@ -1 +0,0 @@
|
|||
nano_1ade4pu7t6t46xj7ufw99itgxzu873r6exhazz5mddbiz3hje8j614qipw3f
|
1
cc/xrp
|
@ -1 +0,0 @@
|
|||
rKyjesfPonKVordBMoiFj3UztMWxCLQ6CV
|
1
cc/xtz
|
@ -1 +0,0 @@
|
|||
tz1iLTaChtfT3ZH45DoxrWxyjhRLnFzuLRwu
|
1
cc/zec
|
@ -1 +0,0 @@
|
|||
t1ceshuxTbpEf6XqCXPbaL1LSazyJUvgVFE
|
1
cc/zil
|
@ -1 +0,0 @@
|
|||
zil13yagsjncsd0xxk8jte43gu9ll8s2ezwes258fl
|
|
@ -1 +0,0 @@
|
|||
social
|
|
@ -1 +0,0 @@
|
|||
git
|
|
@ -1 +0,0 @@
|
|||
marc
|
|
@ -1 +0,0 @@
|
|||
marc
|
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 212 212" width="32" height="32"><style>circle,path{fill:none;stroke:#000;stroke-width:15}path{stroke-width:25}.orange{stroke:#f60}.red{stroke:#d40000}</style><g transform="translate(6 6)"><path d="M58 168V70a50 50 0 0 1 50-50h20" class="orange"/><path d="M58 168v-30a50 50 0 0 1 50-50h20" class="red"/><circle cx="142" cy="20" r="18" class="orange"/><circle cx="142" cy="88" r="18" class="red"/><circle cx="58" cy="180" r="18" class="red"/></g></svg>
|
Before Width: | Height: | Size: 503 B |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 1.6 KiB |
|
@ -1,101 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="50px" height="50px" viewBox="0 0 50 50" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 51.3 (57544) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>icon/color/svg/pixelfed-icon-color</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs>
|
||||
<rect id="path-1" x="0" y="0.112107623" width="50" height="49.7757848"></rect>
|
||||
<linearGradient x1="100%" y1="55.8067876%" x2="0%" y2="60.1177402%" id="linearGradient-3">
|
||||
<stop stop-color="#FF5C34" offset="0%"></stop>
|
||||
<stop stop-color="#EB0256" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient x1="33.0892153%" y1="100%" x2="68.9900955%" y2="15.3101693%" id="linearGradient-4">
|
||||
<stop stop-color="#A63FDB" offset="0%"></stop>
|
||||
<stop stop-color="#FF257E" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient x1="14.7223019%" y1="50%" x2="94.315299%" y2="67.5256558%" id="linearGradient-5">
|
||||
<stop stop-color="#00FFF0" offset="0%"></stop>
|
||||
<stop stop-color="#0087FF" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient x1="81.2260936%" y1="10.0128769%" x2="20.8151903%" y2="74.4920673%" id="linearGradient-6">
|
||||
<stop stop-color="#17C934" offset="0%"></stop>
|
||||
<stop stop-color="#03FF6E" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient x1="50%" y1="111.913008%" x2="30.5601577%" y2="0%" id="linearGradient-7">
|
||||
<stop stop-color="#FFB000" offset="0%"></stop>
|
||||
<stop stop-color="#FF7725" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<path d="M25.8796198,24.6636771 C25.5187511,17.8623246 19.644178,12.6376937 12.7583935,12.9941375 C5.87260905,13.3505813 0.583119676,19.1531217 0.94398835,25.9544743 L0.954359402,26.1499392 C0.924772259,25.6582574 0.909768036,25.162698 0.909768036,24.6636771 C0.909768036,14.5077362 7.12441451,5.78550566 16.0023658,2.00478143 L16.5257487,1.7959139 C22.9188985,-0.755414121 30.1955057,2.29544903 32.7785059,8.61020748 C35.3615061,14.9249659 32.2727696,22.1123491 25.8796198,24.6636771 Z" id="path-8"></path>
|
||||
<path d="M16.3387661,1.87053346 L16.5257487,1.7959139 C22.9188985,-0.755414121 30.1955057,2.29544903 32.7785059,8.61020748 C35.3615061,14.9249659 32.2727696,22.1123491 25.8796198,24.6636771 C25.8261894,23.6566658 25.6518881,22.6842191 25.3713301,21.7593344 C28.8012958,19.9026454 31.1268503,16.3032843 31.1268503,12.167421 C31.1268503,6.13067623 26.1723508,1.23692769 20.060666,1.23692769 C18.7548626,1.23692769 17.5018839,1.46032366 16.3387661,1.87053346 Z" id="path-9"></path>
|
||||
<linearGradient x1="-81.3646199%" y1="59.6233723%" x2="121.418067%" y2="72.057922%" id="linearGradient-10">
|
||||
<stop stop-color="#9EE85D" offset="0%"></stop>
|
||||
<stop stop-color="#0ED061" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<path d="M28.3794511,9.27014825 L28.5664337,9.1955287 C34.9595835,6.64420067 42.2361907,9.69506383 44.8191909,16.0098223 C47.4021911,22.3245807 44.3134546,29.5119639 37.9203048,32.0632919 C37.8668744,31.0562806 37.6925731,30.0838339 37.4120151,29.1589492 C40.8419808,27.3022602 43.1675353,23.7028991 43.1675353,19.5670358 C43.1675353,13.530291 38.2130358,8.63654249 32.101351,8.63654249 C30.7955476,8.63654249 29.5425689,8.85993845 28.3794511,9.27014825 Z" id="path-11"></path>
|
||||
<linearGradient x1="45.510285%" y1="116.818646%" x2="0%" y2="-4.0376427%" id="linearGradient-12">
|
||||
<stop stop-color="#21EFE3" offset="0%"></stop>
|
||||
<stop stop-color="#2598FF" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<path d="M25.1352415,22.7323503 L25.3222242,22.6577307 C31.7153739,20.1064027 38.9919812,23.1572658 41.5749814,29.4720243 C44.1579816,35.7867827 41.069245,42.9741659 34.6760953,45.5254939 C34.6226649,44.5184826 34.4483636,43.5460359 34.1678055,42.6211512 C37.5977712,40.7644622 39.9233257,37.1651011 39.9233257,33.0292378 C39.9233257,26.992493 34.9688263,22.0987445 28.8571415,22.0987445 C27.5513381,22.0987445 26.2983594,22.3221405 25.1352415,22.7323503 Z" id="path-13"></path>
|
||||
<linearGradient x1="100%" y1="58.2065614%" x2="-89.649052%" y2="74.3165445%" id="linearGradient-14">
|
||||
<stop stop-color="#A63FDB" offset="0%"></stop>
|
||||
<stop stop-color="#FF257E" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<path d="M10.6540931,23.7648224 L10.8410757,23.6902028 C17.2342255,21.1388748 24.5108328,24.1897379 27.093833,30.5044964 C29.6768331,36.8192548 26.5880966,44.006638 20.1949468,46.557966 C20.1415164,45.5509547 19.9672152,44.578508 19.6866571,43.6536233 C23.1166228,41.7969343 25.4421773,38.1975732 25.4421773,34.0617099 C25.4421773,28.0249651 20.4876778,23.1312166 14.375993,23.1312166 C13.0701896,23.1312166 11.8172109,23.3546126 10.6540931,23.7648224 Z" id="path-15"></path>
|
||||
<path d="M5.54585436,10.6972047 L5.73283698,10.6225852 C12.1259868,8.07125717 19.402594,11.1221203 21.9855942,17.4368788 C24.5685944,23.7516372 21.4798579,30.9390204 15.0867081,33.4903484 C15.0332777,32.483337 14.8589764,31.5108904 14.5784184,30.5860057 C18.0083841,28.7293167 20.3339386,25.1299556 20.3339386,20.9940923 C20.3339386,14.9573475 15.3794391,10.063599 9.26775427,10.063599 C7.9619509,10.063599 6.70897218,10.2869949 5.54585436,10.6972047 Z" id="path-16"></path>
|
||||
<path d="M35.631732,42.3730981 L40.1765635,42.3730981 C44.4579764,42.3730981 47.9287473,39.0094481 47.9287473,34.8601757 C47.9287473,30.7109033 44.4579764,27.3472534 40.1765635,27.3472534 L33.6170234,27.3472534 C31.1469775,27.3472534 29.1446097,29.2878206 29.1446097,31.6816316 L29.1446097,48.5516086 L35.631732,42.3730981 Z" id="path-17"></path>
|
||||
<filter x="-26.6%" y="-18.9%" width="153.2%" height="147.2%" filterUnits="objectBoundingBox" id="filter-18">
|
||||
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.298686594 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="icon-copy-9">
|
||||
<g id="Group">
|
||||
<mask id="mask-2" fill="white">
|
||||
<use xlink:href="#path-1"></use>
|
||||
</mask>
|
||||
<g id="Rectangle"></g>
|
||||
<g id="Group-12" mask="url(#mask-2)">
|
||||
<g transform="translate(-12.598536, -12.100617)">
|
||||
<g id="Group-5" stroke-width="1" fill-rule="evenodd" transform="translate(37.298810, 37.253293) rotate(40.000000) translate(-37.298810, -37.253293) translate(11.517560, 12.253293)">
|
||||
<path d="M25.8796198,24.6636771 C19.1892035,23.016023 12.4132807,27.0374857 10.7451726,33.6458656 C9.07706451,40.2542455 13.1484497,46.9470835 19.8388659,48.5947376 L20.3450373,48.7193929 C9.69088103,46.3380067 1.6209996,37.2282295 0.954359365,26.1499385 L0.94398835,25.9544743 C0.583119676,19.1531217 5.87260905,13.3505813 12.7583935,12.9941375 C19.644178,12.6376937 25.5187511,17.8623246 25.8796198,24.6636771 Z" id="Combined-Shape" fill="url(#linearGradient-3)"></path>
|
||||
<path d="M25.8796198,24.6636771 C22.3283116,30.5015748 24.2407085,38.0777295 30.1510778,41.5854923 C36.0614471,45.0932551 43.7316521,43.2043076 47.2829602,37.3664099 L47.5182297,36.9796568 C43.2031146,44.3603916 35.1286161,49.3273543 25.8796198,49.3273543 C23.9775953,49.3273543 22.125241,49.1172988 20.3450373,48.7193929 L19.8388659,48.5947376 C13.1484497,46.9470835 9.07706451,40.2542455 10.7451726,33.6458656 C12.4132807,27.0374857 19.1892035,23.016023 25.8796198,24.6636771 Z" id="Combined-Shape-Copy-6" fill="url(#linearGradient-4)"></path>
|
||||
<path d="M25.8796198,24.6636771 C30.3117909,29.8809656 38.1867277,30.5614853 43.4687835,26.1836605 C48.7508393,21.8058357 49.439807,14.0274595 45.0076359,8.81017106 L44.9061506,8.69070851 C48.612765,12.9940954 50.8494715,18.5708837 50.8494715,24.6636771 C50.8494715,29.1494627 49.6370515,33.3555446 47.5182297,36.9796568 L47.2829602,37.3664099 C43.7316521,43.2043076 36.0614471,45.0932551 30.1510778,41.5854923 C24.2407085,38.0777295 22.3283116,30.5015748 25.8796198,24.6636771 Z" id="Combined-Shape-Copy-5" fill="url(#linearGradient-5)"></path>
|
||||
<path d="M25.8796198,24.6636771 C32.2727696,22.1123491 35.3615061,14.9249659 32.7785059,8.61020748 C30.1955057,2.29544903 22.9188985,-0.755414121 16.5257487,1.7959139 L16.0023658,2.00478143 C19.0317193,0.714714639 22.3711681,0 25.8796198,0 C33.5016588,0 40.3260608,3.37321498 44.9061506,8.69070851 L45.0076359,8.81017106 C49.439807,14.0274595 48.7508393,21.8058357 43.4687835,26.1836605 C38.1867277,30.5614853 30.3117909,29.8809656 25.8796198,24.6636771 Z" id="Combined-Shape-Copy-4" fill="url(#linearGradient-6)"></path>
|
||||
<g id="Combined-Shape-Copy-3" fill="url(#linearGradient-7)">
|
||||
<use xlink:href="#path-8"></use>
|
||||
<use fill-opacity="0.1" style="mix-blend-mode: multiply;" xlink:href="#path-8"></use>
|
||||
</g>
|
||||
<g id="Combined-Shape" opacity="0.504910714">
|
||||
<use fill="url(#linearGradient-7)" xlink:href="#path-9"></use>
|
||||
<use fill-opacity="0.496178668" fill="#000000" style="mix-blend-mode: overlay;" xlink:href="#path-9"></use>
|
||||
</g>
|
||||
<g id="Combined-Shape-Copy-7" opacity="0.544252232" transform="translate(37.055527, 20.178799) rotate(72.000000) translate(-37.055527, -20.178799) ">
|
||||
<use fill="url(#linearGradient-10)" xlink:href="#path-11"></use>
|
||||
<use fill-opacity="0.499886775" fill="#000000" style="mix-blend-mode: overlay;" xlink:href="#path-11"></use>
|
||||
</g>
|
||||
<g id="Combined-Shape-Copy-8" opacity="0.562220982" transform="translate(33.811317, 33.641001) rotate(143.000000) translate(-33.811317, -33.641001) ">
|
||||
<use fill="url(#linearGradient-12)" xlink:href="#path-13"></use>
|
||||
<use fill="#000000" style="mix-blend-mode: overlay;" xlink:href="#path-13"></use>
|
||||
</g>
|
||||
<g id="Combined-Shape-Copy-9" opacity="0.584151786" transform="translate(19.330169, 34.673473) rotate(217.000000) translate(-19.330169, -34.673473) ">
|
||||
<use fill="url(#linearGradient-14)" xlink:href="#path-15"></use>
|
||||
<use fill-opacity="0.503085371" fill="#000000" style="mix-blend-mode: overlay;" xlink:href="#path-15"></use>
|
||||
</g>
|
||||
<g id="Combined-Shape-Copy-10" opacity="0.180133929" transform="translate(14.221930, 21.605855) rotate(-71.000000) translate(-14.221930, -21.605855) ">
|
||||
<use fill="url(#linearGradient-3)" xlink:href="#path-16"></use>
|
||||
<use fill-opacity="0.772843071" fill="#000000" style="mix-blend-mode: multiply;" xlink:href="#path-16"></use>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Path-6-Copy-2" fill-rule="nonzero">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-18)" xlink:href="#path-17"></use>
|
||||
<use fill="#FFFFFF" xlink:href="#path-17"></use>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 49 KiB |
1119
in/img/en.svg
Before Width: | Height: | Size: 44 KiB |
|
@ -1,2 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="600"><rect width="900" height="600" fill="#ED2939"/><rect width="600" height="600" fill="#fff"/><rect width="300" height="600" fill="#002395"/></svg>
|
Before Width: | Height: | Size: 248 B |
BIN
in/img/marc.jpeg
Before Width: | Height: | Size: 154 KiB |
|
@ -1,75 +0,0 @@
|
|||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mDMEXTefmxYJKwYBBAHaRw8BAQdA+H8/RzqjvpB7+mnypomWrxRe2zoUO0htbwP7
|
||||
xC/Mxei0IE1hcmMgQmVuaW5jYSA8bWFyY0BiZW5pbmNhLmxpbms+iQGOBBMWCgE2
|
||||
AhsBAgsJAhUKAhYDAh4BAheAAhkBMBSAAAAAABAAF3Byb29mQGFyaWFkbmUuaWRk
|
||||
bnM6dGlsZGUubGluaz90eXBlPVRYVDUUgAAAAAAQABxwcm9vZkBhcmlhZG5lLmlk
|
||||
ZG5zOm1hcmMtYmVuaW5jYS5mcj90eXBlPVRYVDIUgAAAAAAQABlwcm9vZkBhcmlh
|
||||
ZG5lLmlkZG5zOmJlbmluY2EubGluaz90eXBlPVRYVDQUgAAAAAAQABtwcm9vZkBh
|
||||
cmlhZG5lLmlkZG5zOmNvbXB1dGluZy5sYW5kP3R5cGU9VFhULhSAAAAAABAAFXBy
|
||||
b29mQGFyaWFkbmUuaWRkbnM6cnd4Lndvcms/dHlwZT1UWFQWIQQI7acAYjSg6ymj
|
||||
qEcdvV7EutpVeQUCZld4FwUJCwEL/AAKCRAdvV7EutpVeStiAQC5mlCjnqk4FU26
|
||||
bdDJyx69ghq+bxnTsvs6GkOfwByxNwEAn1ekf7ZvnN2i/xLKbjw3tw1XlZzBiqzg
|
||||
CgECjNiu4gG0JE1hcmMgQmVuaW5jYSA8Z2l0QG1hcmMuYmVuaW5jYS5saW5rPojT
|
||||
BBMWCgB7AhsBAgsJAhUKAhYDAh4BAheARRSAAAAAABAALHByb29mQGFyaWFkbmUu
|
||||
aWRodHRwczovL2ZvcmdlLnJ3eC53b3JrL21hcmMuYmVuaW5jYS8ucHJvZmlsZRYh
|
||||
BAjtpwBiNKDrKaOoRx29XsS62lV5BQJmV3gXBQkLAQv8AAoJEB29XsS62lV5ceoB
|
||||
ANCsDlwxQO75SVnvt11RNShnSqZl4S8wNDfJpOJyybTZAP4wTHDw8g82BYHgRPl/
|
||||
SpXBMSyK3bfii4qVqyGmHXWIC7QnTWFyYyBCZW5pbmNhIDxzb2NpYWxAbWFyYy5i
|
||||
ZW5pbmNhLmxpbms+iQLSBBMWCgJ6AhsBAgsJAhUKAhYDAh4BAheAShSAAAAAABAA
|
||||
MXByb29mQGFyaWFkbmUuaWRodHRwczovL25ld3MueWNvbWJpbmF0b3IuY29tL3Vz
|
||||
ZXI/aWQ9bWFyY19iZW5pbmNhPxSAAAAAABAAJnByb29mQGFyaWFkbmUuaWRodHRw
|
||||
czovL3Byb2dyYW1taW5nLmRldi91L21hcmNfYmVuaW5jYUMUgAAAAAAQACpwcm9v
|
||||
ZkBhcmlhZG5lLmlkaHR0cHM6Ly9waXhlbGZlZC5zb2NpYWwvdXNlcnMvbWFyYy5i
|
||||
ZW5pbmNhOxSAAAAAABAAInByb29mQGFyaWFkbmUuaWRodHRwczovL2xpYmVyYXBh
|
||||
eS5jb20vbWFyYy5iZW5pbmNhPRSAAAAAABAAJHByb29mQGFyaWFkbmUuaWRodHRw
|
||||
czovL21hc3RvZG9uLmNsb3VkL0BtYXJjX2JlbmluY2E9FIAAAAAAEAAkcHJvb2ZA
|
||||
YXJpYWRuZS5pZGh0dHBzOi8vZGV2cy5saXZlL3VzZXJzL21hcmNfYmVuaW5jYUQU
|
||||
gAAAAAAQACtwcm9vZkBhcmlhZG5lLmlkaHR0cHM6Ly9wZWVydHViZS5pcmlzZWRl
|
||||
bi5ldS9hL21hcmNfYmVuaW5jYT4UgAAAAAAQACVwcm9vZkBhcmlhZG5lLmlkaHR0
|
||||
cHM6Ly9yYW50LmxpL21hcmMtYmVuaW5jYS9rZXlveGlkZTkUgAAAAAAQACBwcm9v
|
||||
ZkBhcmlhZG5lLmlkaHR0cHM6Ly9sb2JzdGUucnMvdS9tYXJjX2JlbmluY2EWIQQI
|
||||
7acAYjSg6ymjqEcdvV7EutpVeQUCZld4GAUJCwEL/AAKCRAdvV7EutpVeYD4AP4v
|
||||
2JGU1fRKrjJef93q0+SRq+cPDDvQsPZewaokig3m8AD/UHc6qnBD8uJvZIkkgNQ0
|
||||
ej7DQhKeMxq0OLqfvMTXaQ+4MwRkBLE2FgkrBgEEAdpHDwEBB0AsYIYac0mKd7Ui
|
||||
WhnkXlDo2hidqKEDneaCGfRV9UhR4Yh+BBgWCgAmAhsgFiEECO2nAGI0oOspo6hH
|
||||
Hb1exLraVXkFAmZXeBkFCQQz+mMACgkQHb1exLraVXmcewD/S0zIWpVmEJikiijA
|
||||
Kd97fjcYGuAWdcYnkhARFU7cihgBAIarS+OWe5ZkvOVZAJDCCTxLrdpN8tQXgf4K
|
||||
xP9RxVMKuDMEZASx7RYJKwYBBAHaRw8BAQdAwJl98sJxO1aJ/6ucVHDMxjpjNuI+
|
||||
l7/M5I6Z8GdNHzCI9QQYFgoAJgIbAhYhBAjtpwBiNKDrKaOoRx29XsS62lV5BQJm
|
||||
V3gZBQkEM/msAIF2IAQZFgoAHRYhBEZFD76ABdKwQwlIa70nrOrleYioBQJkBLHt
|
||||
AAoJEL0nrOrleYio6MwA/Rrcqz5tol3l3fuADm0PWk3MzeaClfYC9ICaxS994mDQ
|
||||
AP9etGedvYD4evXdJ1aQ41a0cLi+vbctUaeKmVmjUZNXBgkQHb1exLraVXlzrQEA
|
||||
1myZeH/H1cF+61cKsi6fEsAgXJXuF7IykX8/Rp3b1+YBAO70LDuaIAw4JozIAWVX
|
||||
aUt2q9cu8ihSBAzI5mM7hc0AuDgEZASzfBIKKwYBBAGXVQEFAQEHQOL7FEfVtSrh
|
||||
I36LfH8Suxvcb6t9z40yTvDgNaDbCtFMAwEIB4h+BBgWCgAmAhsMFiEECO2nAGI0
|
||||
oOspo6hHHb1exLraVXkFAmZXeBkFCQQz+B0ACgkQHb1exLraVXkF6gEAry1FxYoP
|
||||
0Bw7a8TR7bo3/MlOYfOYvcW7J7B35P3l6HMBAMjd2Qo5QklwLlSCLZ2S74mptlj0
|
||||
GdQ1w1trFHvZoiEHuQINBGVJ9IYBEACmuAQeyc3N/xXxX5PR8KeXLR7yeEhzzSCH
|
||||
Eppc2GId+TTK6kHU65Cc20deXjjHjqSeghGZ585soCV1l38e3dYJ13puPjRqnQ2g
|
||||
bu6kRPHR1vEFYnDHCAGV+Tv8orKJ505Xo5sRxtETtEeK6KpwmgwO7kWJprmD8oDa
|
||||
MkDMSGNwF3ogEtrkYc1g5S8gtiHS5jcg7GUHp3jMtyrPoyWj1YPzxWe7/EG8tYEo
|
||||
wy6FPwrLNEFFIF2oRlq6/bXyr0bb3tuyYYWTeHMhQ3YZJ8AUhXfVeiJQ28JxMjFX
|
||||
+wmNwE9IvDMWRdb/PYNPE/hfni1eCSlNgIYGXMa8xZL00k7W2DNbSXReB98bw6YH
|
||||
2CaXutE+zy7R9+GPhWCy+nQiYRCZMIO40H0nTED9ZgztrIByDxjxJD6Q6KhFnwAl
|
||||
z8HQ8oPyq8HFwGX7zElRVC+fka9znhqqSYm4WrX7OuXbTsFT03/wKnLLaS9lgb0X
|
||||
MIz0fvOjzl1HZBeFV+1+oRT94f+cp7iJgIN3G2ALcpBI97yE10dWPuO/WOgFbPh7
|
||||
3y+olH8ujxPI5xMNg5pS40sjqCW1vwM4zBzPs5RPioX+9EtEQCAAyoq6TBYHMJxv
|
||||
tzwAogoCOo5sAQcIR8Sg7EpwhSjJrbVt4rjqq82EKzhqZj4nrS9ycrrlTHGqs7NA
|
||||
ZsCuoCj7bQARAQABiQK0BBgWCgAmAhsCFiEECO2nAGI0oOspo6hHHb1exLraVXkF
|
||||
AmZXeBkFCQLutxMCQMF0IAQZAQoAHRYhBDEqzfm7A8ga3pW5wJx2E0UMgMJPBQJl
|
||||
SfSGAAoJEJx2E0UMgMJP+2kP/0f/azRfWgHd4ce1COKv/u9XLqNOmEpBYMgi86GU
|
||||
Z8natRGk4TPFvfjo3qY6LSDrA3PgzYR/T3NSw4+rDuSpRr1U9nWFQ34CIj5phC5t
|
||||
IPwQeLUk4699wi0BsLBdYeiOEBJ3km6O1FdsNdOrB6Xuvom20ymx3eDAEf1xwFo6
|
||||
PJLITQVK6cz/iC7VCN68cBd/NE/8mTT7caWRxhFjZ7/7vcuu0DpwJG9wShCnEcqs
|
||||
IfKQGssztC9sH4usYfcQHSba+wAeRLVBbLqN7SmG7EFhdRCf5Kxw/nfXa3NEWIEg
|
||||
+OEmsBHaerMMJ/sQ8++LTbL//xFtJCyVj21qlybAmzavjEj21c3JHvMX+qpX3Afp
|
||||
nHsT/7suUhYiuZWpZa+ornEBXfJKTj+9Mn9apjwGQMEulJ+b+y8DcjgIBpEjZAyt
|
||||
h0mFr0cLm43OY/ujZY+W755PivJJTBUaQVL0XQEM5KkDWfxUzCrfipGIQla+h5Al
|
||||
JQti13UY/Nd3PGoBao35B/7AiWHhxtFx4TSNDA08pLuhHVqimcgtdRMkmgDdAws2
|
||||
EnNGz0Bv/Q5OY7La1Uo/9uIIvIyOXZ0O069NyrhnV9RUSfC/ACvAI0q07wABPQWo
|
||||
YzFxBs9RL/Anm2q+QVWVq1Rn1HyvUjRPLDNWgVMcDQQ/nanSMRLvLbGw5fzOaY2f
|
||||
opOeCRAdvV7EutpVeSA8AQDvn67nBs1ci9OlaqMHjRYObQkQUJOIdjqXlgMEHjBX
|
||||
4QEAom3cNIGGbP8AupzSa+8PeRgvYD6VW6mJfbqjQz8q1A4=
|
||||
=jG40
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
71
link.gv
|
@ -1,71 +0,0 @@
|
|||
digraph {
|
||||
|
||||
graph [
|
||||
rankdir="LR"
|
||||
]
|
||||
node [
|
||||
#shape="record"
|
||||
]
|
||||
|
||||
subgraph cluster_git {
|
||||
"bitbucket" [label="Bit\nBucket",href="https://bitbucket.org/marc_beninca"]
|
||||
"github" [label="Git\nHub",href="https://github.com/marc-beninca"]
|
||||
"gitlab" [label="Git\nLab",href="https://gitlab.com/marc.beninca"]
|
||||
}
|
||||
|
||||
"facebook" [label="Face\nBook",href="https://facebook.com/marc.beninca.page"]
|
||||
"hackernews" [label="Hacker\nNews",href="https://news.ycombinator.com/user?id=marc_beninca"]
|
||||
"instagram" [label="Insta\nGram",href="https://instagram.com/marc.beninca"]
|
||||
"linuxfr" [label="Linux\nFR",href="https://linuxfr.org/users/marc-beninca"]
|
||||
"lobsters" [label="Lobsters",href="https://lobste.rs/u/marc_beninca"]
|
||||
"mastodon" [label="Mastodon",href="https://social.tchncs.de/@marc_beninca"]
|
||||
"omglol" [label="OMG\nLOL",href="https://omg.lol/marc-beninca"]
|
||||
"openstreetmap" [label="Open\nStreet\nMap",href="https://openstreetmap.org/user/Marc Beninca"]
|
||||
"pleroma" [label="Pleroma",href="https://poa.st/@marc_beninca"]
|
||||
"reddit" [label="Reddit",href="https://reddit.com/user/marc_beninca"]
|
||||
"twitch" [label="Twitch",href="https://twitch.tv/marc_beninca"]
|
||||
"twitter" [label="Twitter",href="https://twitter.com/marc_beninca"]
|
||||
"youtube" [label="You\nTube",href="https://youtube.com/channel/UC4uk_6OKRke2soVah-Tf2Lw"]
|
||||
|
||||
"keybase" [label="Key\nBase",href="https://keybase.io/marc_beninca"]
|
||||
"liberapay" [label="Libera\nPay",href="https://liberapay.com/marc.beninca"]
|
||||
"patreon" [label="Patreon",href="https://patreon.com/marc_beninca"]
|
||||
"utip" [label="U\ntip",href="https://utip.io/marc_beninca"]
|
||||
|
||||
|
||||
"instagram" -> "facebook"
|
||||
|
||||
"keybase" -> {
|
||||
"github"
|
||||
"hackernews"
|
||||
"lobsters"
|
||||
"omglol"
|
||||
"reddit"
|
||||
"twitter"
|
||||
}
|
||||
"liberapay" -> {
|
||||
"bitbucket"
|
||||
"github"
|
||||
"gitlab"
|
||||
"linuxfr"
|
||||
"mastodon"
|
||||
"openstreetmap"
|
||||
"pleroma"
|
||||
"twitch"
|
||||
"twitter"
|
||||
}
|
||||
"patreon" -> {
|
||||
"facebook"
|
||||
"instagram"
|
||||
"twitter"
|
||||
"youtube"
|
||||
}
|
||||
"utip" -> {
|
||||
"facebook"
|
||||
"instagram"
|
||||
"twitch"
|
||||
"twitter"
|
||||
"youtube"
|
||||
}
|
||||
|
||||
}
|
61
pubnix.py
|
@ -1,61 +0,0 @@
|
|||
import os
|
||||
import subprocess
|
||||
|
||||
PORT = 22
|
||||
USER = 'mspe'
|
||||
ROOT = 'public_html'
|
||||
PROTOCOL = 'https'
|
||||
DIR = False
|
||||
|
||||
|
||||
class PubNix:
|
||||
|
||||
def __init__(self, dn,
|
||||
ssh=None, port=PORT, user=USER,
|
||||
root=ROOT, dir=DIR, web=None, sub=None):
|
||||
self.dn = dn
|
||||
self.ssh = f'{ssh}.{self.dn}' if ssh else self.dn
|
||||
self.port = port
|
||||
self.user = user
|
||||
self.root = root
|
||||
self.web = f'{web}.{self.dn}' if web else self.dn
|
||||
if sub:
|
||||
self.fqdn = f'{self.user}.{self.web}'
|
||||
self.context = None
|
||||
else:
|
||||
self.fqdn = self.web
|
||||
self.context = f'~{self.user}'
|
||||
self.path = os.path.join(self.root, self.fqdn) if dir else self.root
|
||||
self.target = f'{self.user}@{self.ssh}:{self.path}'
|
||||
self.url = [f'{PROTOCOL}:', str(), self.fqdn]
|
||||
if self.context:
|
||||
self.url.append(self.context)
|
||||
self.url = '/'.join(self.url)
|
||||
|
||||
def capturun(self, *args):
|
||||
return self.run(*args, capture_output=True)
|
||||
|
||||
def run(self, *args, **kwargs):
|
||||
return subprocess.run(['ssh',
|
||||
'-o', 'LogLevel Error',
|
||||
'-p', str(self.port),
|
||||
f'{self.user}@{self.ssh}',
|
||||
'--',
|
||||
*args,
|
||||
], **kwargs)
|
||||
|
||||
def disk_free(self):
|
||||
process = self.capturun('df', '-h', os.curdir)
|
||||
return process.stdout.decode('UTF-8').strip()
|
||||
|
||||
def os(self):
|
||||
ps = self.capturun('cat', '/etc/os-release')
|
||||
if ps.returncode == 0:
|
||||
for line in ps.stdout.decode('UTF-8').strip().split(os.linesep):
|
||||
if 'PRETTY_NAME' in line:
|
||||
return line.split('=')[1].split('"')[1]
|
||||
else:
|
||||
return self.capturun('uname', '-sr').stdout.decode('UTF-8').strip()
|
||||
|
||||
def __str__(self):
|
||||
return os.linesep.join([self.target, self.url])
|
13
readme.md
|
@ -1,13 +0,0 @@
|
|||
# Marc Beninca
|
||||
|
||||
## ToDo
|
||||
|
||||
## Nope
|
||||
|
||||
### Email
|
||||
|
||||
* biolink.me
|
||||
|
||||
### GAFAM
|
||||
|
||||
* about.me
|
79
sync.py
|
@ -1,79 +0,0 @@
|
|||
#! /usr/bin/env python3
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
import pubnix
|
||||
|
||||
ARGS = [
|
||||
{'dn':'blinkenshell.org',
|
||||
'ssh': 'ssh', 'port': 2222, 'web': 'u', 'sub': True},
|
||||
{'dn':'ctrl-c.club', 'sub': False},
|
||||
{'dn':'dimension.sh', 'sub': True},
|
||||
{'dn':'envs.net', 'sub': True},
|
||||
{'dn':'freeshell.de', 'sub': False},
|
||||
# {'dn':'hextilde.xyz', 'sub': True},
|
||||
{'dn':'insomnia247.nl', 'dir': True, 'sub': True},
|
||||
{'dn':'p.projectsegfau.lt', 'sub': True},
|
||||
# {'dn':'pubnix.pink', 'web': 'sites', 'sub': False},
|
||||
{'dn':'rawtext.club', 'sub': False},
|
||||
{'dn':'rw.rs', 'sub': False},
|
||||
{'dn':'thunix.net', 'sub': False},
|
||||
{'dn':'tilde.32bit.cafe', 'root': 'www', 'sub': False},
|
||||
{'dn':'tilde.cafe', 'sub': True},
|
||||
{'dn':'tilde.club', 'sub': False},
|
||||
{'dn':'tilde.fun', 'root': 'html', 'sub': False},
|
||||
{'dn':'tilde.green', 'sub': False},
|
||||
{'dn':'tilde.guru', 'sub': False},
|
||||
{'dn':'tilde.institute', 'sub': True},
|
||||
{'dn':'tilde.pink', 'sub': False},
|
||||
{'dn':'tilde.team', 'sub': True},
|
||||
{'dn':'tilde.town', 'sub': False},
|
||||
# {'dn':'trash.town', 'sub': False},
|
||||
# permissions
|
||||
# {'dn':'sdf.org', 'root': 'html', 'sub': True},
|
||||
# old
|
||||
{'dn':'fr.tild3.org', 'sub': True},
|
||||
{'dn':'remotes.club', 'port': 9022, 'root': 'web', 'sub': True},
|
||||
{'dn':'squiggle.city', 'sub': False},
|
||||
# down
|
||||
# {'dn':'aussies.space', 'sub': False},
|
||||
# {'dn':'heathens.club', 'root': 'www', 'sub': False},
|
||||
# {'dn':'vern.cc', 'sub': True},
|
||||
]
|
||||
PUBNIXES = [pubnix.PubNix(**args) for args in ARGS]
|
||||
|
||||
|
||||
def sync(root, pubnix, exclude=None):
|
||||
args = [
|
||||
'rsync',
|
||||
'--archive',
|
||||
'--checksum',
|
||||
'--delete-before',
|
||||
'--rsh', f"ssh -o 'LogLevel Error' -p {pubnix.port}",
|
||||
'--partial',
|
||||
'--progress',
|
||||
'--verbose',
|
||||
os.path.join(root, str()),
|
||||
]
|
||||
for item in exclude:
|
||||
args.extend(['--exclude', os.path.join(str(), item)])
|
||||
args.append(os.path.join(pubnix.target, str()))
|
||||
subprocess.call(args, stdout=subprocess.DEVNULL)
|
||||
|
||||
|
||||
def main():
|
||||
root = os.path.dirname(os.path.realpath(__file__))
|
||||
root = os.path.join(root, 'out', 'web')
|
||||
dns_length = max([len(pubnix.dn) for pubnix in PUBNIXES])
|
||||
for pubnix in PUBNIXES:
|
||||
print()
|
||||
print(pubnix)
|
||||
# print(f'{pubnix.dn.rjust(dns_length)} → ', end=str(), flush=True)
|
||||
sync(root, pubnix, exclude=['__pycache__', 'pgp.asc'])
|
||||
# print(pubnix.disk_free())
|
||||
# print(pubnix.os())
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
40
test.css
|
@ -1,40 +0,0 @@
|
|||
.tabs {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.tabs > input {
|
||||
display: none;
|
||||
}
|
||||
.tabs > input:checked + label + div {
|
||||
display: block;
|
||||
}
|
||||
.tabs > label {
|
||||
order: 1;
|
||||
}
|
||||
.tabs > div {
|
||||
display: none;
|
||||
flex-basis: 100%;
|
||||
order: 2;
|
||||
}
|
||||
|
||||
.tabs {
|
||||
border: 1px solid;
|
||||
}
|
||||
.tabs > input:checked + label {
|
||||
background-color: gray;
|
||||
}
|
||||
.tabs > label {
|
||||
padding: 10px;
|
||||
}
|
||||
.tabs > div {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: white;
|
||||
color: black;
|
||||
}
|
||||
body.dark {
|
||||
background-color: black;
|
||||
color: white;
|
||||
}
|
59
test.html
|
@ -1,59 +0,0 @@
|
|||
<!DOCTYPE html><html><head>
|
||||
<!----------------------------------------------------------------------------->
|
||||
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="initial-scale=1,width=device-width" />
|
||||
<link rel="stylesheet" href="test.css" />
|
||||
<script src="test.js"></script>
|
||||
|
||||
<!----------------------------------------------------------------------------->
|
||||
</head>
|
||||
<body onload="main()"><header>
|
||||
<!----------------------------------------------------------------------------->
|
||||
|
||||
<h1>Tabs</h1>
|
||||
<input type="checkbox" id="theme" onclick="swap()">Dark</input>
|
||||
<ul>
|
||||
<li><a href="test.html">test.html</a></li>
|
||||
<li><a href="test.html?tab=2/3">test.html?tab=2/3</a></li>
|
||||
</ul>
|
||||
|
||||
<!----------------------------------------------------------------------------->
|
||||
</header><main>
|
||||
<!----------------------------------------------------------------------------->
|
||||
|
||||
<div class="tabs">
|
||||
<input type="radio" id="tab/1" name="tab" onclick="update(id)">
|
||||
<label for="tab/1">Tab: 1</label>
|
||||
<div>
|
||||
<div class="tabs">
|
||||
<input type="radio" id="tab/1/1" name="tab/1" onclick="update(id)">
|
||||
<label for="tab/1/1">Tab: 1 / 1</label>
|
||||
<div>Tab: One / One</div>
|
||||
<input type="radio" id="tab/1/2" name="tab/1" onclick="update(id)">
|
||||
<label for="tab/1/2">Tab: 1 / 2</label>
|
||||
<div>Tab: One / Two</div>
|
||||
<input type="radio" id="tab/1/3" name="tab/1" onclick="update(id)">
|
||||
<label for="tab/1/3">Tab: 1 / 3</label>
|
||||
<div>Tab: One / Three</div>
|
||||
</div>
|
||||
</div>
|
||||
<input type="radio" id="tab/2" name="tab" onclick="update(id)">
|
||||
<label for="tab/2">Tab: 2</label>
|
||||
<div>
|
||||
<div class="tabs">
|
||||
<input type="radio" id="tab/2/1" name="tab/2" onclick="update(id)">
|
||||
<label for="tab/2/1">Tab: 2 / 1</label>
|
||||
<div>Tab: Two / One</div>
|
||||
<input type="radio" id="tab/2/2" name="tab/2" onclick="update(id)">
|
||||
<label for="tab/2/2">Tab: 2 / 2</label>
|
||||
<div>Tab: Two / Two</div>
|
||||
<input type="radio" id="tab/2/3" name="tab/2" onclick="update(id)">
|
||||
<label for="tab/2/3">Tab: 2 / 3</label>
|
||||
<div>Tab: Two / Three</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!----------------------------------------------------------------------------->
|
||||
</main></body></html>
|
29
test.js
|
@ -1,29 +0,0 @@
|
|||
function check(tab) {
|
||||
const tabs = tab.split('/')
|
||||
let path = 'tab'
|
||||
for (tab of tabs) {
|
||||
path = `${path}/${tab}`
|
||||
document.getElementById(path).checked = true
|
||||
}
|
||||
}
|
||||
function push(tab) {
|
||||
window.history.pushState(null, null, `?tab=${tab}`)
|
||||
}
|
||||
function update(id) {
|
||||
const tab = id.split('/').slice(1).join('/')
|
||||
push(tab)
|
||||
}
|
||||
function main() {
|
||||
let tab = (new URL(document.location)).searchParams.get('tab')
|
||||
if (tab) {
|
||||
check(tab)
|
||||
} else {
|
||||
tab = '1/1'
|
||||
check(tab)
|
||||
push(tab)
|
||||
}
|
||||
}
|
||||
|
||||
function swap() {
|
||||
document.body.classList.toggle('dark')
|
||||
}
|