Steal from elsewhere; initial commit and content
This commit is contained in:
commit
edb4710cd2
28 changed files with 3225 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
.hugo_build.lock
|
||||
public
|
17
LICENCE
Normal file
17
LICENCE
Normal file
|
@ -0,0 +1,17 @@
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
5
archetypes/default.md
Normal file
5
archetypes/default.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
+++
|
||||
date = '{{ .Date }}'
|
||||
draft = true
|
||||
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
|
||||
+++
|
27
config.yaml
Normal file
27
config.yaml
Normal file
|
@ -0,0 +1,27 @@
|
|||
---
|
||||
baseURL: "https://tobast.dn42/"
|
||||
languageCode: "en-en"
|
||||
title: "tobast — dn42"
|
||||
disableHugoGeneratorInject: true
|
||||
|
||||
params:
|
||||
sourceURL: "https://git.tobast.fr/tobast/dn42-web"
|
||||
siteLicenseName: "MIT"
|
||||
|
||||
taxonomies:
|
||||
category: categories
|
||||
tag: tags
|
||||
|
||||
privacy:
|
||||
disqus:
|
||||
disable: true
|
||||
googleAnalytics:
|
||||
disable: true
|
||||
instagram:
|
||||
disable: true
|
||||
twitter:
|
||||
disable: true
|
||||
vimeo:
|
||||
disable: true
|
||||
youtube:
|
||||
disable: true
|
57
content/_index.md
Normal file
57
content/_index.md
Normal file
|
@ -0,0 +1,57 @@
|
|||
---
|
||||
draft: false
|
||||
|
||||
nodes:
|
||||
- name: fr-gnb1
|
||||
country: fr
|
||||
flag: 🇫🇷
|
||||
city: Grenoble
|
||||
clearnet: fr-gnb1.dn42.tobast.fr
|
||||
dn42: fr-gnb1.rtr.tobast.dn42
|
||||
ipv6: 'fd73:ea37:6131:1100::1'
|
||||
wg_pub: natl1dIaazvoyJvOUP6AxvnMyxtrwfjF0PBaADnQjgI=
|
||||
- name: pl-waw1
|
||||
country: pl
|
||||
flag: 🇵🇱
|
||||
city: Warsaw
|
||||
clearnet: pl-waw1.dn42.tobast.fr
|
||||
dn42: pl-waw1.rtr.tobast.dn42
|
||||
ipv6: 'fd73:ea37:6131:1000::1'
|
||||
wg_pub: EU58pAvjXFttC1ogkP3ai0p/JcnuEwaFuXUXfekzlAg=
|
||||
---
|
||||
|
||||
# AS4242422112
|
||||
|
||||
I participate in [dn42](https://dn42.dev/) as AS4242422112.
|
||||
|
||||
* IPv6-only network: `fd73:ea37:6131::/48`
|
||||
* Mostly IPv6 clearnet addresses
|
||||
* The [Ansible Playbook](https://git.tobast.fr/tobast/dn42-ansible) behind this network
|
||||
|
||||
## Contact me
|
||||
|
||||
Personal email
|
||||
: {{< antispam "rf.tsabot@tcatnoc" >}}
|
||||
|
||||
IRC
|
||||
: {{< antispam "tnikcah@tsabot" >}}
|
||||
|
||||
## Peering
|
||||
|
||||
Peering is always welcome, given that you follow best practices (ROA, etc.) and
|
||||
that your peering latency is reasonable. I peer through Wireguard tunnels using
|
||||
link-local IPv6 addresses. The endpoint port is `2` followed by the last 4
|
||||
digits of your ASN.
|
||||
|
||||
Reach for me either through IRC or by email, providing the following:
|
||||
* your AS number;
|
||||
* the node(s) you're wishing to peer with;
|
||||
* your clearnet endpoint (IP/hostname + port);
|
||||
* your Wireguard public key;
|
||||
* your peering link-local IPv6 address.
|
||||
|
||||
If you're unsure about one of those things, ask anyway and we'll sort it out!
|
||||
|
||||
## Nodes
|
||||
|
||||
{{< nodelist >}}
|
30
layouts/_default/baseof.html
Normal file
30
layouts/_default/baseof.html
Normal file
|
@ -0,0 +1,30 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<link rel="stylesheet" href="/css/style.css">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{ block "title" . }}
|
||||
{{- .Site.Title -}}
|
||||
{{ end }}</title>
|
||||
</head>
|
||||
<body>
|
||||
{{ block "header" . }}
|
||||
<div id="head">
|
||||
<div class="title"><a href="/">AS4242422112 @ DN42</a></div>
|
||||
<div class="whoami">tobast</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
<div id="main-container">
|
||||
<div id="content">
|
||||
{{ block "pagename" . }}
|
||||
{{ end }}
|
||||
|
||||
<div id="main">
|
||||
{{ block "main" . }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
17
layouts/_default/list.html
Normal file
17
layouts/_default/list.html
Normal file
|
@ -0,0 +1,17 @@
|
|||
{{ define "pagename" }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ end }}
|
||||
|
||||
{{ define "main" }}
|
||||
<div class="descr">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
|
||||
<div class="list">
|
||||
<ul>
|
||||
{{ range .Pages }}
|
||||
<li><a href="{{ .Permalink }}">{{ .Title }}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
{{ end }}
|
6
layouts/_default/single.html
Normal file
6
layouts/_default/single.html
Normal file
|
@ -0,0 +1,6 @@
|
|||
{{ define "pagename" }}
|
||||
{{ end }}
|
||||
|
||||
{{ define "main" }}
|
||||
{{ .Content }}
|
||||
{{ end }}
|
6
layouts/index.html
Normal file
6
layouts/index.html
Normal file
|
@ -0,0 +1,6 @@
|
|||
{{ define "pagename" }}
|
||||
{{ end }}
|
||||
|
||||
{{ define "main" }}
|
||||
{{ .Content }}
|
||||
{{ end }}
|
1
layouts/shortcodes/antispam.html
Normal file
1
layouts/shortcodes/antispam.html
Normal file
|
@ -0,0 +1 @@
|
|||
<span class="antispam">{{ .Get 0 }}</span>
|
1
layouts/shortcodes/fontawesome.html
Normal file
1
layouts/shortcodes/fontawesome.html
Normal file
|
@ -0,0 +1 @@
|
|||
<i class="fa fa-{{ .Get 0 }}" aria-hidden="true"></i>
|
19
layouts/shortcodes/nodelist.html
Normal file
19
layouts/shortcodes/nodelist.html
Normal file
|
@ -0,0 +1,19 @@
|
|||
<div class="nodes">
|
||||
{{ range .Page.Params.nodes }}
|
||||
<div class="node">
|
||||
<div class="name">{{ .name }}</div>
|
||||
<div class="geo"> {{ .flag }} {{ upper .country }} – {{ .city }}</div>
|
||||
|
||||
<dl>
|
||||
<dt>Clearnet</dt>
|
||||
<dd><code>{{ .clearnet }}</code></dd>
|
||||
<dt>DN42</dt>
|
||||
<dd><code>{{ .dn42 }}</code></dd>
|
||||
<dt>IPv6</dt>
|
||||
<dd><code>{{ .ipv6 }}</code></dd>
|
||||
<dt>Pubkey</dt>
|
||||
<dd><code>{{ .wg_pub }}</code></dd>
|
||||
</dl>
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
1
layouts/shortcodes/rawhtml.html
Normal file
1
layouts/shortcodes/rawhtml.html
Normal file
|
@ -0,0 +1 @@
|
|||
{{ .Inner }}
|
10
scss/Makefile
Normal file
10
scss/Makefile
Normal file
|
@ -0,0 +1,10 @@
|
|||
STYLES=style.scss
|
||||
IMPORTS=$(shell ls -1 _*.scss)
|
||||
OUTDIR=../static/css
|
||||
|
||||
SASS=sassc
|
||||
|
||||
all: $(addprefix $(OUTDIR)/,$(STYLES:.scss=.css))
|
||||
|
||||
$(OUTDIR)/%.css: %.scss $(IMPORTS)
|
||||
$(SASS) "$<" "$@"
|
9
scss/_params.scss
Normal file
9
scss/_params.scss
Normal file
|
@ -0,0 +1,9 @@
|
|||
// vim: tabstop=2 shiftwidth=2 expandtab
|
||||
|
||||
$bg_color: #010018;
|
||||
$link_color: #6ec1e1;
|
||||
$fg_color: #e4e4e4;
|
||||
$head_bg_color: #178ca7;
|
||||
|
||||
$resp_small: 1350px;
|
||||
$resp_vsmall: 1000px;
|
156
scss/style.scss
Normal file
156
scss/style.scss
Normal file
|
@ -0,0 +1,156 @@
|
|||
// vim: tabstop=2 shiftwidth=2 expandtab
|
||||
|
||||
@import url('fonts.css');
|
||||
@import 'params';
|
||||
|
||||
html {
|
||||
background-color: $bg_color;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family:Open Sans,Arial;
|
||||
color: $fg_color;
|
||||
font-size:16px;
|
||||
line-height:1.4;
|
||||
text-align:justify;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#head {
|
||||
background-color: $head_bg_color;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin: 0;
|
||||
padding: 30px 60px;
|
||||
color: $bg_color;
|
||||
|
||||
@media (max-width: $resp_vsmall) {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
div {
|
||||
font-size: 1.4em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
a, a:visited {
|
||||
color: $bg_color;
|
||||
}
|
||||
}
|
||||
|
||||
#main-container {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
@media (max-width: $resp_vsmall) {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
#content {
|
||||
margin:2em auto;
|
||||
max-width:800px;
|
||||
padding:1em;
|
||||
flex-basis: 800px;
|
||||
}
|
||||
}
|
||||
|
||||
a, a:visited {
|
||||
color: $link_color;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
.fa {
|
||||
color: $fg_color;
|
||||
}
|
||||
|
||||
:not(pre) > code {
|
||||
border-radius: 4px;
|
||||
background-color: black;
|
||||
color: #f8f8f2;
|
||||
padding: 3px;
|
||||
font-family:DejaVu Sans Mono;
|
||||
}
|
||||
.highlight>pre {
|
||||
border-radius: 8px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin-left:-10px;
|
||||
}
|
||||
h2 {
|
||||
margin-top: 30px;
|
||||
margin-left:20px;
|
||||
|
||||
.fa {
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
dl {
|
||||
list-style: none;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 3fr;
|
||||
|
||||
dt {
|
||||
grid-column: 1 / span 1;
|
||||
justify-self: end;
|
||||
text-align: right;
|
||||
margin-right: 20px;
|
||||
font-weight: bold;
|
||||
}
|
||||
dd {
|
||||
margin-left: 20px;
|
||||
justify-self: start;
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
|
||||
.antispam {
|
||||
unicode-bidi: bidi-override;
|
||||
direction: rtl;
|
||||
}
|
||||
|
||||
.nodes {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-evenly;
|
||||
align-items: stretch;
|
||||
|
||||
.node {
|
||||
border: 2px solid $head_bg_color;
|
||||
background: #02002b;
|
||||
border-radius: 15px;
|
||||
padding: 15px;
|
||||
padding-top: 5px;
|
||||
margin: 10px;
|
||||
min-width: 300px;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
div {
|
||||
margin: 5px 0;
|
||||
}
|
||||
.name {
|
||||
font-size: 1.2em;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
.geo {
|
||||
text-align: center;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
dl {
|
||||
row-gap: 5px;
|
||||
grid-template-columns: 1fr 5fr;
|
||||
dl {
|
||||
align-self: stretch;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
4
static/css/font-awesome.min.css
vendored
Normal file
4
static/css/font-awesome.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
58
static/css/font-opensans.css
Normal file
58
static/css/font-opensans.css
Normal file
|
@ -0,0 +1,58 @@
|
|||
/**** OPEN SANS **************************************************************/
|
||||
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/OpenSans-Regular.woff') format('woff');
|
||||
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/OpenSans-Regular.woff') format('woff');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/OpenSans-Regular.woff') format('woff');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/OpenSans-Regular.woff') format('woff');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/OpenSans-Regular.woff') format('woff');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/OpenSans-Regular.woff') format('woff');
|
||||
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Open Sans Regular'), local('OpenSans-Regular'), url('../fonts/OpenSans-Regular.woff') format('woff');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
10
static/css/fonts.css
Normal file
10
static/css/fonts.css
Normal file
|
@ -0,0 +1,10 @@
|
|||
@import url('font-opensans.css');
|
||||
@import url('font-awesome.min.css');
|
||||
|
||||
@font-face {
|
||||
font-family: "DejaVu Sans Mono";
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
src: local('DejaVu Sans Mono'), local('DejaVuSansMono'),
|
||||
url('../fonts/DejaVuSansMono.woff') format('woff');
|
||||
}
|
118
static/css/style.css
Normal file
118
static/css/style.css
Normal file
|
@ -0,0 +1,118 @@
|
|||
@import url("fonts.css");
|
||||
html {
|
||||
background-color: #010018; }
|
||||
|
||||
body {
|
||||
font-family: Open Sans,Arial;
|
||||
color: #e4e4e4;
|
||||
font-size: 16px;
|
||||
line-height: 1.4;
|
||||
text-align: justify;
|
||||
margin: 0;
|
||||
padding: 0; }
|
||||
|
||||
#head {
|
||||
background-color: #178ca7;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin: 0;
|
||||
padding: 30px 60px;
|
||||
color: #010018; }
|
||||
@media (max-width: 1000px) {
|
||||
#head {
|
||||
padding: 20px; } }
|
||||
#head div {
|
||||
font-size: 1.4em;
|
||||
font-weight: bold; }
|
||||
#head a, #head a:visited {
|
||||
color: #010018; }
|
||||
|
||||
#main-container {
|
||||
display: flex;
|
||||
justify-content: space-between; }
|
||||
@media (max-width: 1000px) {
|
||||
#main-container {
|
||||
flex-wrap: wrap; } }
|
||||
#main-container #content {
|
||||
margin: 2em auto;
|
||||
max-width: 800px;
|
||||
padding: 1em;
|
||||
flex-basis: 800px; }
|
||||
|
||||
a, a:visited {
|
||||
color: #6ec1e1;
|
||||
text-decoration: none; }
|
||||
|
||||
.fa {
|
||||
color: #e4e4e4; }
|
||||
|
||||
:not(pre) > code {
|
||||
border-radius: 4px;
|
||||
background-color: black;
|
||||
color: #f8f8f2;
|
||||
padding: 3px;
|
||||
font-family: DejaVu Sans Mono; }
|
||||
|
||||
.highlight > pre {
|
||||
border-radius: 8px;
|
||||
padding: 8px; }
|
||||
|
||||
h1 {
|
||||
margin-left: -10px; }
|
||||
|
||||
h2 {
|
||||
margin-top: 30px;
|
||||
margin-left: 20px; }
|
||||
h2 .fa {
|
||||
margin-right: 10px; }
|
||||
|
||||
dl {
|
||||
list-style: none;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 3fr; }
|
||||
dl dt {
|
||||
grid-column: 1 / span 1;
|
||||
justify-self: end;
|
||||
text-align: right;
|
||||
margin-right: 20px;
|
||||
font-weight: bold; }
|
||||
dl dd {
|
||||
margin-left: 20px;
|
||||
justify-self: start;
|
||||
text-align: left; }
|
||||
|
||||
.antispam {
|
||||
unicode-bidi: bidi-override;
|
||||
direction: rtl; }
|
||||
|
||||
.nodes {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-evenly;
|
||||
align-items: stretch; }
|
||||
.nodes .node {
|
||||
border: 2px solid #178ca7;
|
||||
background: #02002b;
|
||||
border-radius: 15px;
|
||||
padding: 15px;
|
||||
padding-top: 5px;
|
||||
margin: 10px;
|
||||
min-width: 300px;
|
||||
display: flex;
|
||||
flex-direction: column; }
|
||||
.nodes .node div {
|
||||
margin: 5px 0; }
|
||||
.nodes .node .name {
|
||||
font-size: 1.2em;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
margin-bottom: 6px; }
|
||||
.nodes .node .geo {
|
||||
text-align: center;
|
||||
margin-bottom: 10px; }
|
||||
.nodes .node dl {
|
||||
row-gap: 5px;
|
||||
grid-template-columns: 1fr 5fr; }
|
||||
.nodes .node dl dl {
|
||||
align-self: stretch; }
|
BIN
static/fonts/DejaVuSansMono.woff
Normal file
BIN
static/fonts/DejaVuSansMono.woff
Normal file
Binary file not shown.
BIN
static/fonts/FontAwesome.otf
Normal file
BIN
static/fonts/FontAwesome.otf
Normal file
Binary file not shown.
BIN
static/fonts/OpenSans-Regular.woff
Normal file
BIN
static/fonts/OpenSans-Regular.woff
Normal file
Binary file not shown.
BIN
static/fonts/fontawesome-webfont.eot
Normal file
BIN
static/fonts/fontawesome-webfont.eot
Normal file
Binary file not shown.
2671
static/fonts/fontawesome-webfont.svg
Normal file
2671
static/fonts/fontawesome-webfont.svg
Normal file
File diff suppressed because it is too large
Load diff
After (image error) Size: 434 KiB |
BIN
static/fonts/fontawesome-webfont.ttf
Normal file
BIN
static/fonts/fontawesome-webfont.ttf
Normal file
Binary file not shown.
BIN
static/fonts/fontawesome-webfont.woff
Normal file
BIN
static/fonts/fontawesome-webfont.woff
Normal file
Binary file not shown.
BIN
static/fonts/fontawesome-webfont.woff2
Normal file
BIN
static/fonts/fontawesome-webfont.woff2
Normal file
Binary file not shown.
Loading…
Add table
Reference in a new issue