aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRomain Gonçalves <me@rgoncalves.se>2021-08-07 18:24:32 +0200
committerRomain Gonçalves <me@rgoncalves.se>2021-08-07 18:24:32 +0200
commit8b533032927840d35d31b124ec46ab2803f3fcf2 (patch)
treeb72261ae2ef0765d7b3cc49d1437a2c47c9a71be /src
parent66d48a7a4c98383e5baef20d352a3d2e4e681a6a (diff)
downloadrgoncalves.se-8b533032927840d35d31b124ec46ab2803f3fcf2.tar.gz
src: Content scaffold
Diffstat (limited to 'src')
-rw-r--r--src/a/index.md1
-rw-r--r--src/b/archlinux-installation.md163
-rw-r--r--src/b/wireguard-ipv6.md43
-rw-r--r--src/img/grafana-01.jpgbin0 -> 127464 bytes
-rw-r--r--src/img/homelab-front-01.jpgbin0 -> 255450 bytes
-rw-r--r--src/img/homelab-old-01.jpgbin0 -> 255662 bytes
-rw-r--r--src/img/homelab-wip-01.jpgbin0 -> 256994 bytes
-rw-r--r--src/img/homelab-wip-02.jpgbin0 -> 254156 bytes
-rw-r--r--src/img/openbsd-drawing-01.jpgbin0 -> 256838 bytes
-rw-r--r--src/img/r710-and-switch.jpgbin0 -> 255880 bytes
-rw-r--r--src/index.md2
-rw-r--r--src/s/index.md23
-rw-r--r--src/style/cgit.css929
-rw-r--r--src/style/style.css108
-rw-r--r--src/w/dell-r710.md0
-rw-r--r--src/w/index.md2
-rw-r--r--src/w/sun-x4170.md0
-rw-r--r--src/w/thinkpad-x220.md0
18 files changed, 1271 insertions, 0 deletions
diff --git a/src/a/index.md b/src/a/index.md
new file mode 100644
index 0000000..5c16da4
--- /dev/null
+++ b/src/a/index.md
@@ -0,0 +1 @@
+Software developer, devops, hacker
diff --git a/src/b/archlinux-installation.md b/src/b/archlinux-installation.md
new file mode 100644
index 0000000..86a6c45
--- /dev/null
+++ b/src/b/archlinux-installation.md
@@ -0,0 +1,163 @@
+date: 2020-07-01
+title: Archlinux Bulletproof Installation
+
+Through my 5 years with different Archlinux installations, I made up my mind to
+document the one that fullfills my needs. The main goal is a minimal arch install
+(like any other), including systemd and refind, without using any crappy ncurses
+interface, and of course powered by btrfs (zfs an other day).
+
+Installation process is heavily inspired by :
+
+- [https://wiki.archlinux.org/index.php/User:Altercation/Bullet_Proof_Arch_Install](Bullet proof arch install)
+
+## partitions
+
+```
+$ sgdisk --clear \
+ --new=1:0:+550MiB --typecode=1:ef00 --change-name=1:EFI \
+ --new=2:0:+8GiB --typecode=2:8200 --change-name=2:cryptswap \
+ --new=3:0:0 --typecode=3:8300 --change-name=3:cryptsystem \
+ /dev/nvme0n1
+$ sgdisk --clear \
+ --new=1:0:1025GiB --typecode=1:8300 --change-name=1:wsd \
+/dev/sda
+```
+
+## encryption
+
+```
+$ cryptsetup luksFormat --align-payload=8192 -s 256 -c aes-xts-plain64 /dev/disk/by-partlabel/cryptsystem
+$ cryptsetup open /dev/disk/by-partlabel/cryptsystem system
+$ cryptsetup open --type plain --key-file /dev/urandom /dev/disk/by-partlabel/cryptswap swap
+$ mkswap -L swap /dev/mapper/swap
+$ swapon -L swap
+```
+
+## file format
+
+```
+$ mkfs.fat -F32 -n EFI /dev/disk/by-partlabel/EFI
+$ mkfs.ext4 -n wsd /dev/disk/by-partlabel/wsd
+$ mkfs.btrfs --force --label system /dev/mapper/system
+$ o=defaults,x-mount.mkdir
+$ o_btrfs=$o,compress=lzo,ssd,noatime
+$ mount -t btrfs LABEL=system /mnt
+$ mount -t btrfs LABEL=system /mnt
+$ btrfs subvolume create /mnt/root
+$ btrfs subvolume create /mnt/home
+$ btrfs subvolume create /mnt/snapshots
+$ umount -R /mnt
+$ mount -t btrfs -o subvol=root,$o_btrfs LABEL=system /mnt
+$ mount -t btrfs -o subvol=home,$o_btrfs LABEL=system /mnt/home
+$ mount -t btrfs -o subvol=snapshots,$o_btrfs LABEL=system /mnt/.snapshots
+$ mkdir /mnt/wsd
+$ mount LABEL=wsd /mnt/wsd
+$ mkdir /mnt/boot
+$ mount LABEL=EFI /mnt/boot
+```
+
+## base install
+
+```
+$ pacstrap /mnt basenvim
+$ genfstab -L -p /mnt >> /mnt/etc/fstab
+```
+
+Open up /mnt/etc/fstab (old, new):
+
+```
+LABEL=swap none swap defaults 0 0
+```
+
+```
+/dev/mapper/cryptswap none swap sw 0 0
+```
+
+Open up /mnt/etc/crypttab, append at the end:
+
+```
+swap /dev/disk/by-partlabel/cryptswap /dev/urandom swap,offset=2048,cipher=aes-xts-plain64,size=256
+```
+
+## base systemd
+
+The only way to have a non-biased opinion about systemd is to mix it yourself in your base install.
+
+```
+$ systemd-nspawn -bD /mnt
+$ localectl set-locale LANG=en_US.UTF-8
+$ timedatectl set-ntp 1
+$ timedatectl set-timezone Europe/Paris
+$ hostnamectl set-hostname WS-workstationname
+```
+
+## base packages
+
+After spending more than one day on some archlinux shenanigans, you need linux-firmware package for a propper booting install, since 2019 :questionmark:
+
+```
+$ pacman -Syu base-devel linux linux-firmware refind-efi btrfs-prog gptfdisk zsh wget curl git zip unzip ntfs-3g
+```
+</pre>
+
+## intramfs
+
+```
+$ mv /etc/mkinitcpio.conf /etc/mkinitcpio.conf.orig
+```
+
+Open up /etc/mkinitcpio.conf :
+
+```
+MODULES=""
+BINARIES=""
+FILES=""
+HOOKS="base systemd sd-vconsole modconf keyboard block filesystems btrfs sd-encrypt fsck"
+```
+
+```
+$ mkinicpio -p linux
+```
+
+## refind
+
+```
+$ refind-install
+```
+
+We now reached the trickiest part for installing rEFind.
+Hit Ctrl+Alt+F2, exec this last code block, and then reach back TTy1 (nspawn doesn't allow deep disk modification / access).
+
+```
+$ arch-chroot /mnt
+$ refind-install
+```
+
+Open up /boot/EFI/refind/refind.conf, or somewhere like that in the EFI dir :
+
+```
+timeout 5
+use_graphics_for windows
+also_scan_dirs +,@/
+```
+
+```
+$ btrfs filesystem show system
+$ lsblk -fs
+```
+
+Open up /boot/EFI/refind/refind.conf, or somewhere like that in the EFI dir :
+
+```
+Add the following value if you are using an intel cpu : initrd=/intel-ucode.img
+"Boot with standard options" "rd.luks.name=*FILL IN UUID FROM PARTITION*=cryptsystem root=UUID=*UUID FROM encrypted root subvolume* rootflags=subvol=root initrd=/initramfs-linux.img"
+```
+
+## reboot
+
+```
+$ passwd
+$ poweroff
+$ reboot
+#finger crossed !!
+```
diff --git a/src/b/wireguard-ipv6.md b/src/b/wireguard-ipv6.md
new file mode 100644
index 0000000..9a91dc8
--- /dev/null
+++ b/src/b/wireguard-ipv6.md
@@ -0,0 +1,43 @@
+date: 2020-08-26
+title: Wireguard and IPV6
+
+> I decided to connect all my services and servers behind my domain controller,
+> which has a dedicated IPv4 and IPv6 address, and which basically host that
+> website. This would allow me to remotely manage and enjoy my infrastructure
+> when I'm away from my homelab.
+
+## IPv6 journey
+When I first used WireGuard with my new OpenBSD vm on all my devices, i noticed
+that my some of my requests towards specific services were not working anymore.
+For instance, I spent some time trying to reach :
+
+- gitlab.com
+- github.com
+- ungleich.ch
+
+In fact, I had hard times accessing these services only when I was connected to
+my WireGuard server (which has IPv4 and IPv6, with some default wireguard
+settings I carried with me for six months), and only through my system dns.
+
+In fact I figured out that it happened only when I was under an IPv6 capable
+router.
+
+## Solution
+
+Adding IPv6 subnet to server and clients configuration files.
+
+## Next
+
+Enable IPv6 routing in the domain controller, for a single-ip usage.
+
+## BSD routing
+
+The default routing configuration does not allow my domain controller to reach
+the **ungleich's infrastructure and services**.
+
+```
+echo "\!/sbin/route add -inet 185.203.112/24 185.203.114.1" >> /etc/hostname.vio1
+```
+
+Then I want to be able to access IPv6 only services when I'm using my wireguard
+server (right now it only allows to force IPv4 to the client).
diff --git a/src/img/grafana-01.jpg b/src/img/grafana-01.jpg
new file mode 100644
index 0000000..77dec3f
--- /dev/null
+++ b/src/img/grafana-01.jpg
Binary files differ
diff --git a/src/img/homelab-front-01.jpg b/src/img/homelab-front-01.jpg
new file mode 100644
index 0000000..aed5c63
--- /dev/null
+++ b/src/img/homelab-front-01.jpg
Binary files differ
diff --git a/src/img/homelab-old-01.jpg b/src/img/homelab-old-01.jpg
new file mode 100644
index 0000000..ba7733f
--- /dev/null
+++ b/src/img/homelab-old-01.jpg
Binary files differ
diff --git a/src/img/homelab-wip-01.jpg b/src/img/homelab-wip-01.jpg
new file mode 100644
index 0000000..d572dec
--- /dev/null
+++ b/src/img/homelab-wip-01.jpg
Binary files differ
diff --git a/src/img/homelab-wip-02.jpg b/src/img/homelab-wip-02.jpg
new file mode 100644
index 0000000..9fd3ce2
--- /dev/null
+++ b/src/img/homelab-wip-02.jpg
Binary files differ
diff --git a/src/img/openbsd-drawing-01.jpg b/src/img/openbsd-drawing-01.jpg
new file mode 100644
index 0000000..2af524c
--- /dev/null
+++ b/src/img/openbsd-drawing-01.jpg
Binary files differ
diff --git a/src/img/r710-and-switch.jpg b/src/img/r710-and-switch.jpg
new file mode 100644
index 0000000..73b2beb
--- /dev/null
+++ b/src/img/r710-and-switch.jpg
Binary files differ
diff --git a/src/index.md b/src/index.md
new file mode 100644
index 0000000..265470a
--- /dev/null
+++ b/src/index.md
@@ -0,0 +1,2 @@
+toc: true
+index: b
diff --git a/src/s/index.md b/src/s/index.md
new file mode 100644
index 0000000..3284ddd
--- /dev/null
+++ b/src/s/index.md
@@ -0,0 +1,23 @@
+All the services are hosted from my personal homelab.
+New writeups are available [here](/w),
+while this page is kept up-to date with general informations.
+
+## technologies
+
+- network: relayd, httpd, pf, nfsd, wireguard
+- operating system: openbsd, freebsd, alpine linux
+- database: postgresql, sqlite, redis
+
+
+## services
+
+service | domain | available | public (1)
+--------| ------ | --------- | ----------
+minecraft | rgoncalves.se[:5565] | no | yes
+factorio | rgoncalves.se[:34197] | no | yes
+cgit | git.rgoncalves.se[:443] | yes | yes
+nextcloud | cloud.rgoncalves.se[:443] | no | no
+miniflux | miniflux.rgoncalves.se[:443] | yes | no
+grafana | status.rgoncalves.se[:443] | yes | no
+
+> (1) : scream at support[at]rgoncalves+se
diff --git a/src/style/cgit.css b/src/style/cgit.css
new file mode 100644
index 0000000..1d4755a
--- /dev/null
+++ b/src/style/cgit.css
@@ -0,0 +1,929 @@
+* {
+ font-family: monospace, monospace;
+}
+
+div#cgit {
+ padding: 0em;
+ margin: 0em;
+ font-family: monospace, monospace;
+ font-size: 10pt;
+ color: #333;
+ background: white;
+ padding: 4px;
+}
+
+a {
+ color: blue;
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+table {
+ border-collapse: collapse;
+}
+
+table#header {
+ width: 100%;
+ margin-bottom: 1em;
+}
+
+table#header td.logo {
+ width: 6em;
+ vertical-align: top;
+}
+
+table#header td.main {
+ padding-left: 2em;
+ white-space: nowrap;
+}
+
+table#header td.main a {
+ color: #000;
+}
+
+table#header td.form {
+ text-align: right;
+ vertical-align: bottom;
+ padding-right: 1em;
+ padding-bottom: 2px;
+ white-space: nowrap;
+}
+
+table#header td.form form,
+table#header td.form input,
+table#header td.form select {
+ font-size: 90%;
+}
+
+table#header td.sub {
+ color: #777;
+ border-top: solid 1px #ccc;
+ padding-left: 2em;
+}
+
+table.tabs {
+ border-bottom: solid 3px #ccc;
+ border-collapse: collapse;
+ margin-top: 2em;
+ margin-bottom: 0px;
+ width: 100%;
+}
+
+table.tabs td {
+ padding: 0px 1em;
+ vertical-align: bottom;
+}
+
+table.tabs td a {
+ padding: 2px 0.75em;
+ color: #777;
+ font-size: 110%;
+}
+
+table.tabs td a.active {
+ color: #000;
+ background-color: #ccc;
+}
+
+table.tabs a[href^="http://"]:after, div#cgit table.tabs a[href^="https://"]:after {
+ content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAQAAAAnOwc2AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfgAhcJDQY+gm2TAAAAHWlUWHRDb21tZW50AAAAAABDcmVhdGVkIHdpdGggR0lNUGQuZQcAAABbSURBVAhbY2BABs4MU4CwhYHBh2Erww4wrGFQZHjI8B8IgUIscJWyDHcggltQhI4zGDCcRwhChPggHIggP1QoAVmQkSETrGoHsiAEsACtBYN0oDAMbgU6EBcAAL2eHUt4XUU4AAAAAElFTkSuQmCC);
+ opacity: 0.5;
+ margin: 0 0 0 5px;
+}
+
+table.tabs td.form {
+ text-align: right;
+}
+
+table.tabs td.form form {
+ padding-bottom: 2px;
+ font-size: 90%;
+ white-space: nowrap;
+}
+
+table.tabs td.form input,
+table.tabs td.form select {
+ font-size: 90%;
+}
+
+div.path {
+ margin: 0px;
+ padding: 5px 2em 2px 2em;
+ color: #000;
+ background-color: #eee;
+}
+
+div.content {
+ margin: 0px;
+ padding: 2em;
+ border-bottom: solid 3px #ccc;
+}
+
+
+table.list {
+ width: 100%;
+ border: none;
+ border-collapse: collapse;
+}
+
+table.list tr {
+ background: white;
+}
+
+table.list tr.logheader {
+ background: #eee;
+}
+
+table.list tr:nth-child(even) {
+ background: #f7f7f7;
+}
+
+table.list tr:nth-child(odd) {
+ background: white;
+}
+
+table.list tr:hover {
+ background: #eee;
+}
+
+table.list tr.nohover {
+ background: white;
+}
+
+table.list tr.nohover:hover {
+ background: white;
+}
+
+table.list tr.nohover-highlight:hover:nth-child(even) {
+ background: #f7f7f7;
+}
+
+table.list tr.nohover-highlight:hover:nth-child(odd) {
+ background: white;
+}
+
+table.list th {
+ font-weight: bold;
+ /* color: #888;
+ border-top: dashed 1px #888;
+ border-bottom: dashed 1px #888;
+ */
+ padding: 0.1em 0.5em 0.05em 0.5em;
+ vertical-align: baseline;
+}
+
+table.list td {
+ border: none;
+ padding: 0.1em 0.5em 0.1em 0.5em;
+}
+
+table.list td.commitgraph {
+ font-family: "Source Code Pro", "Courier New", monospace;
+ white-space: pre;
+}
+pre {
+ font-family: "Source Code Pro", "Courier New", monospace;
+}
+
+table.list td.commitgraph .column1 {
+ color: #a00;
+}
+
+table.list td.commitgraph .column2 {
+ color: #0a0;
+}
+
+table.list td.commitgraph .column3 {
+ color: #aa0;
+}
+
+table.list td.commitgraph .column4 {
+ color: #00a;
+}
+
+table.list td.commitgraph .column5 {
+ color: #a0a;
+}
+
+table.list td.commitgraph .column6 {
+ color: #0aa;
+}
+
+table.list td.logsubject {
+ font-family: "Source Code Pro", "Courier New", monospace;
+ font-weight: bold;
+}
+
+table.list td.logmsg {
+ font-family: "Source Code Pro", "Courier New", monospace;
+ white-space: pre;
+ padding: 0 0.5em;
+}
+
+table.list td a {
+ color: black;
+}
+
+table.list td a.ls-dir {
+ font-weight: bold;
+ color: #00f;
+}
+
+table.list td a:hover {
+ color: #00f;
+}
+
+img {
+ border: none;
+}
+
+input#switch-btn {
+ margin: 2px 0px 0px 0px;
+}
+
+td#sidebar input.txt {
+ width: 100%;
+ margin: 2px 0px 0px 0px;
+}
+
+table#grid {
+ margin: 0px;
+}
+
+td#content {
+ vertical-align: top;
+ padding: 1em 2em 1em 1em;
+ border: none;
+}
+
+div#summary {
+ vertical-align: top;
+ margin-bottom: 1em;
+}
+
+table#downloads {
+ float: right;
+ border-collapse: collapse;
+ border: solid 1px #777;
+ margin-left: 0.5em;
+ margin-bottom: 0.5em;
+}
+
+table#downloads th {
+ background-color: #ccc;
+}
+
+div#blob {
+ border: solid 1px black;
+}
+
+div.error {
+ color: red;
+ font-weight: bold;
+ margin: 1em 2em;
+}
+
+a.ls-blob, div#cgit a.ls-dir, div#cgit .ls-mod {
+ font-family: "Source Code Pro", "Courier New", monospace;
+}
+
+td.ls-size {
+ text-align: right;
+ font-family: "Source Code Pro", "Courier New", monospace;
+ width: 10em;
+}
+
+td.ls-mode {
+ font-family: "Source Code Pro", "Courier New", monospace;
+ width: 10em;
+}
+
+table.blob {
+ margin-top: 0.5em;
+ border-top: solid 1px black;
+}
+
+table.blob td.hashes,
+table.blob td.lines {
+ margin: 0; padding: 0 0 0 0.5em;
+ vertical-align: top;
+ color: black;
+}
+
+table.blob td.linenumbers {
+ margin: 0; padding: 0 0.5em 0 0.5em;
+ vertical-align: top;
+ text-align: right;
+ border-right: 1px solid gray;
+}
+
+table.blob pre {
+ padding: 0; margin: 0;
+}
+
+table.blob td.linenumbers a,
+table.ssdiff td.lineno a {
+ color: gray;
+ text-align: right;
+ text-decoration: none;
+}
+
+table.blob td.linenumbers a:hover,
+table.ssdiff td.lineno a:hover {
+ color: black;
+}
+
+table.blame td.hashes,
+table.blame td.lines,
+table.blame td.linenumbers {
+ padding: 0;
+}
+
+table.blame td.hashes div.alt,
+table.blame td.lines div.alt {
+ padding: 0 0.5em 0 0.5em;
+}
+
+table.blame td.linenumbers div.alt {
+ padding: 0 0.5em 0 0;
+}
+
+table.blame div.alt:nth-child(even) {
+ background: #eee;
+}
+
+table.blame div.alt:nth-child(odd) {
+ background: white;
+}
+
+table.blame td.lines > div {
+ position: relative;
+}
+
+table.blame td.lines > div > pre {
+ padding: 0 0 0 0.5em;
+ position: absolute;
+ top: 0;
+}
+
+table.bin-blob {
+ margin-top: 0.5em;
+ border: solid 1px black;
+}
+
+table.bin-blob th {
+ font-family: "Source Code Pro", "Courier New", monospace;
+ white-space: pre;
+ border: solid 1px #777;
+ padding: 0.5em 1em;
+}
+
+table.bin-blob td {
+ font-family: "Source Code Pro", "Courier New", monospace;
+ white-space: pre;
+ border-left: solid 1px #777;
+ padding: 0em 1em;
+}
+
+table.nowrap td {
+ white-space: nowrap;
+}
+
+table.commit-info {
+ border-collapse: collapse;
+ margin-top: 1.5em;
+}
+
+div.cgit-panel {
+ float: right;
+ margin-top: 1.5em;
+}
+
+div.cgit-panel table {
+ border-collapse: collapse;
+ border: solid 1px #aaa;
+ background-color: #eee;
+}
+
+div.cgit-panel th {
+ text-align: center;
+}
+
+div.cgit-panel td {
+ padding: 0.25em 0.5em;
+}
+
+div.cgit-panel td.label {
+ padding-right: 0.5em;
+}
+
+div.cgit-panel td.ctrl {
+ padding-left: 0.5em;
+}
+
+table.commit-info th {
+ text-align: left;
+ font-weight: normal;
+ padding: 0.1em 1em 0.1em 0.1em;
+ vertical-align: top;
+}
+
+table.commit-info td {
+ font-weight: normal;
+ padding: 0.1em 1em 0.1em 0.1em;
+}
+
+div.commit-subject {
+ font-weight: bold;
+ font-size: 125%;
+ margin: 1.5em 0em 0.5em 0em;
+ padding: 0em;
+}
+
+div.commit-msg {
+ white-space: pre;
+ font-family: "Source Code Pro", "Courier New", monospace;
+}
+
+div.notes-header {
+ font-weight: bold;
+ padding-top: 1.5em;
+}
+
+div.notes {
+ white-space: pre;
+ font-family: "Source Code Pro", "Courier New", monospace;
+ border: solid 1px #ee9;
+ background-color: #ffd;
+ padding: 0.3em 2em 0.3em 1em;
+ float: left;
+}
+
+div.notes-footer {
+ clear: left;
+}
+
+div.diffstat-header {
+ font-weight: bold;
+ padding-top: 1.5em;
+}
+
+table.diffstat {
+ border-collapse: collapse;
+ border: solid 1px #aaa;
+ background-color: #eee;
+}
+
+table.diffstat th {
+ font-weight: normal;
+ text-align: left;
+ text-decoration: underline;
+ padding: 0.1em 1em 0.1em 0.1em;
+ font-size: 100%;
+}
+
+table.diffstat td {
+ padding: 0.2em 0.2em 0.1em 0.1em;
+ font-size: 100%;
+ border: none;
+}
+
+table.diffstat td.mode {
+ white-space: nowrap;
+}
+
+table.diffstat td span.modechange {
+ padding-left: 1em;
+ color: red;
+}
+
+table.diffstat td.add a {
+ color: green;
+}
+
+table.diffstat td.del a {
+ color: red;
+}
+
+table.diffstat td.upd a {
+ color: blue;
+}
+
+table.diffstat td.graph {
+ width: 500px;
+ vertical-align: middle;
+}
+
+table.diffstat td.graph table {
+ border: none;
+}
+
+table.diffstat td.graph td {
+ padding: 0px;
+ border: 0px;
+ height: 7pt;
+}
+
+table.diffstat td.graph td.add {
+ background-color: #5c5;
+}
+
+table.diffstat td.graph td.rem {
+ background-color: #c55;
+}
+
+div.diffstat-summary {
+ color: #888;
+ padding-top: 0.5em;
+}
+
+table.diff {
+ width: 100%;
+}
+
+table.diff td {
+ font-family: "Source Code Pro", "Courier New", monospace;
+ white-space: pre;
+}
+
+table.diff td div.head {
+ font-weight: bold;
+ margin-top: 1em;
+ color: black;
+}
+
+table.diff td div.hunk {
+ color: #009;
+}
+
+table.diff td div.add {
+ color: green;
+}
+
+table.diff td div.del {
+ color: red;
+}
+
+.oid {
+ font-family: "Source Code Pro", "Courier New", monospace;
+ font-size: 90%;
+}
+
+.left {
+ text-align: left;
+}
+
+.right {
+ text-align: right;
+}
+
+table.list td.reposection {
+ font-style: italic;
+ color: #888;
+}
+
+a.button {
+ font-size: 80%;
+ padding: 0em 0.5em;
+}
+
+a.primary {
+ font-size: 100%;
+}
+
+a.secondary {
+ font-size: 90%;
+}
+
+td.toplevel-repo {
+
+}
+
+table.list td.sublevel-repo {
+ padding-left: 1.5em;
+}
+
+ul.pager {
+ list-style-type: none;
+ text-align: center;
+ margin: 1em 0em 0em 0em;
+ padding: 0;
+}
+
+ul.pager li {
+ display: inline-block;
+ margin: 0.25em 0.5em;
+}
+
+ul.pager a {
+ color: #777;
+}
+
+ul.pager .current {
+ font-weight: bold;
+}
+
+span.age-mins {
+ font-weight: bold;
+ color: #080;
+}
+
+span.age-hours {
+ color: #080;
+}
+
+span.age-days {
+ color: #040;
+}
+
+span.age-weeks {
+ color: #444;
+}
+
+span.age-months {
+ color: #888;
+}
+
+span.age-years {
+ color: #bbb;
+}
+
+span.insertions {
+ color: #080;
+}
+
+span.deletions {
+ color: #800;
+}
+
+div.footer {
+ margin-top: 0.5em;
+ text-align: center;
+ font-size: 80%;
+ color: #ccc;
+}
+
+div.footer a {
+ color: #ccc;
+ text-decoration: none;
+}
+
+div.footer a:hover {
+ text-decoration: underline;
+}
+
+a.branch-deco {
+ color: #000;
+ margin: 0px 0.5em;
+ padding: 0px 0.25em;
+ background-color: #88ff88;
+ border: solid 1px #007700;
+}
+
+a.tag-deco {
+ color: #000;
+ margin: 0px 0.5em;
+ padding: 0px 0.25em;
+ background-color: #ffff88;
+ border: solid 1px #777700;
+}
+
+a.tag-annotated-deco {
+ color: #000;
+ margin: 0px 0.5em;
+ padding: 0px 0.25em;
+ background-color: #ffcc88;
+ border: solid 1px #777700;
+}
+
+a.remote-deco {
+ color: #000;
+ margin: 0px 0.5em;
+ padding: 0px 0.25em;
+ background-color: #ccccff;
+ border: solid 1px #000077;
+}
+
+a.deco {
+ color: #000;
+ margin: 0px 0.5em;
+ padding: 0px 0.25em;
+ background-color: #ff8888;
+ border: solid 1px #770000;
+}
+
+div.commit-subject a.branch-deco,
+div.commit-subject a.tag-deco,
+div.commit-subject a.tag-annotated-deco,
+div.commit-subject a.remote-deco,
+div.commit-subject a.deco {
+ margin-left: 1em;
+ font-size: 75%;
+}
+
+table.stats {
+ border: solid 1px black;
+ border-collapse: collapse;
+}
+
+table.stats th {
+ text-align: left;
+ padding: 1px 0.5em;
+ background-color: #eee;
+ border: solid 1px black;
+}
+
+table.stats td {
+ text-align: right;
+ padding: 1px 0.5em;
+ border: solid 1px black;
+}
+
+table.stats td.total {
+ font-weight: bold;
+ text-align: left;
+}
+
+table.stats td.sum {
+ color: #c00;
+ font-weight: bold;
+/* background-color: #eee; */
+}
+
+table.stats td.left {
+ text-align: left;
+}
+
+table.vgraph {
+ border-collapse: separate;
+ border: solid 1px black;
+ height: 200px;
+}
+
+table.vgraph th {
+ background-color: #eee;
+ font-weight: bold;
+ border: solid 1px white;
+ padding: 1px 0.5em;
+}
+
+table.vgraph td {
+ vertical-align: bottom;
+ padding: 0px 10px;
+}
+
+table.vgraph div.bar {
+ background-color: #eee;
+}
+
+table.hgraph {
+ border: solid 1px black;
+ width: 800px;
+}
+
+table.hgraph th {
+ background-color: #eee;
+ font-weight: bold;
+ border: solid 1px black;
+ padding: 1px 0.5em;
+}
+
+table.hgraph td {
+ vertical-align: middle;
+ padding: 2px 2px;
+}
+
+table.hgraph div.bar {
+ background-color: #eee;
+ height: 1em;
+}
+
+table.ssdiff {
+ width: 100%;
+}
+
+table.ssdiff td {
+ font-size: 75%;
+ font-family: "Source Code Pro", "Courier New", monospace;
+ white-space: pre;
+ padding: 1px 4px 1px 4px;
+ border-left: solid 1px #aaa;
+ border-right: solid 1px #aaa;
+}
+
+table.ssdiff td.add {
+ color: black;
+ background: #cfc;
+ min-width: 50%;
+}
+
+table.ssdiff td.add_dark {
+ color: black;
+ background: #aca;
+ min-width: 50%;
+}
+
+table.ssdiff span.add {
+ background: #cfc;
+ font-weight: bold;
+}
+
+table.ssdiff td.del {
+ color: black;
+ background: #fcc;
+ min-width: 50%;
+}
+
+table.ssdiff td.del_dark {
+ color: black;
+ background: #caa;
+ min-width: 50%;
+}
+
+table.ssdiff span.del {
+ background: #fcc;
+ font-weight: bold;
+}
+
+table.ssdiff td.changed {
+ color: black;
+ background: #ffc;
+ min-width: 50%;
+}
+
+table.ssdiff td.changed_dark {
+ color: black;
+ background: #cca;
+ min-width: 50%;
+}
+
+table.ssdiff td.lineno {
+ color: black;
+ background: #eee;
+ text-align: right;
+ width: 3em;
+ min-width: 3em;
+}
+
+table.ssdiff td.hunk {
+ color: black;
+ background: #ccf;
+ border-top: solid 1px #aaa;
+ border-bottom: solid 1px #aaa;
+}
+
+table.ssdiff td.head {
+ border-top: solid 1px #aaa;
+ border-bottom: solid 1px #aaa;
+}
+
+table.ssdiff td.head div.head {
+ font-weight: bold;
+ color: black;
+}
+
+table.ssdiff td.foot {
+ border-top: solid 1px #aaa;
+ border-left: none;
+ border-right: none;
+ border-bottom: none;
+}
+
+table.ssdiff td.space {
+ border: none;
+}
+
+table.ssdiff td.space div {
+ min-height: 3em;
+}
+span.libravatar img.onhover {
+ display: none;
+ border: 1px solid gray;
+ padding: 0px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ width: 128px;
+ height: 128px;
+}
+
+span.libravatar img.inline {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ width: 13px;
+ height: 13px;
+ margin-right: 0.2em;
+ opacity: 0.6;
+}
+
+span.libravatar:hover > img.onhover {
+ display: block;
+ position: absolute;
+ margin-left: 1.5em;
+ background-color: #eeeeee;
+ box-shadow: 2px 2px 7px rgba(100,100,100,0.75);
+}
diff --git a/src/style/style.css b/src/style/style.css
new file mode 100644
index 0000000..8d60214
--- /dev/null
+++ b/src/style/style.css
@@ -0,0 +1,108 @@
+
+/*
+ * rgoncalves.se
+ * /do whatever you want with that shit/
+ */
+
+* {
+ font-family: monospace, monospace;
+ text-align: justify;
+}
+
+html {
+ margin-left: auto;
+ margin-right: auto;
+ max-width: 80ch;
+
+ margin-top: 3em;
+}
+
+header {
+ margin-bottom: 1em;
+}
+header ul {
+ padding-left: 0;
+}
+header ul li {
+ display: inline-block;
+}
+header ul li:last-child {
+ float: right;
+}
+
+header img {
+ padding-right: 1em;
+ max-width: 2em;
+ float: left;
+}
+
+a, a:hover, a:visited {
+ color: blue;
+}
+a:hover {
+ background-color: #eeeeee;
+}
+
+ul.index {
+ padding-inline-start: 0;
+}
+ul.index li {
+ margin: .4em 0 .4em 0;
+ display: block;
+ background-color: #eeeeee;
+}
+ul.index li span {
+ float: right;
+}
+
+span.date {
+ display: block;
+}
+
+table {
+ border-collapse: collapse;
+ min-width: 100%;
+ display: table;
+ font-size: .8em;
+}
+table th, table td {
+ padding: .4em 1em .4em 1em;
+ margin: 0;
+ overflow: hidden;
+}
+table td.boolean {
+ text-justify: right;
+}
+table tr:hover {
+ background-color: #eeeeee;
+}
+
+pre {
+ background-color: #eeeeee;
+ overflow: auto;
+}
+
+blockquote {
+ margin-inline-end: 0;
+ margin-inline-start: 20%;
+}
+blockquote * {
+ background-color: yellow;
+ font-style: italic;
+}
+
+footer {
+ margin-top: 16em;
+}
+
+@media only screen and (max-width: 100ch) {
+ body {
+ width: 90%;
+ }
+ header nav li {
+ display: block;
+ }
+ .float-right {
+ float: none;
+ }
+}
diff --git a/src/w/dell-r710.md b/src/w/dell-r710.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/w/dell-r710.md
diff --git a/src/w/index.md b/src/w/index.md
new file mode 100644
index 0000000..1c32de5
--- /dev/null
+++ b/src/w/index.md
@@ -0,0 +1,2 @@
+title: wiki
+index: w
diff --git a/src/w/sun-x4170.md b/src/w/sun-x4170.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/w/sun-x4170.md
diff --git a/src/w/thinkpad-x220.md b/src/w/thinkpad-x220.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/w/thinkpad-x220.md
remember that computers suck.