summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2017-08-07 22:05:24 +0300
committerYuval Adam <_@yuv.al>2017-08-07 22:05:24 +0300
commit0c1370b5f1b3e8abc934ea913a4377f05f32e4a9 (patch)
tree64822a223696279b0869417a59a8112a7de5ad66 /docs
parent91d00222d692b80a8eb22f0f193479545846ac89 (diff)
Initial static build
Diffstat (limited to 'docs')
-rw-r--r--docs/blog/2017/05/26/intro/index.html177
-rw-r--r--docs/blog/index.html47
-rw-r--r--docs/index.html56
-rw-r--r--docs/static/css/main.css34
-rw-r--r--docs/static/css/tachyons.min.css3
-rw-r--r--docs/static/img/banner.jpgbin0 -> 129992 bytes
-rw-r--r--docs/static/img/favicon.pngbin0 -> 295 bytes
-rw-r--r--docs/static/img/recycle.pngbin0 -> 3502 bytes
-rw-r--r--docs/wiki/Battery-replacement/index.html52
-rw-r--r--docs/wiki/BlackBerry-Bold-Touch-9900-(Dakota)/index.html73
-rw-r--r--docs/wiki/Boot-process/index.html106
-rw-r--r--docs/wiki/Build-internals/index.html69
-rw-r--r--docs/wiki/Coolpad-Sky-3-E502-(Modena-2)/index.html71
-rw-r--r--docs/wiki/Creating-a-package/index.html65
-rw-r--r--docs/wiki/Development-guide/index.html77
-rw-r--r--docs/wiki/Device-Wishlist/index.html58
-rw-r--r--docs/wiki/Devices/index.html248
-rw-r--r--docs/wiki/External-resources/index.html63
-rw-r--r--docs/wiki/Fairphone-2/index.html64
-rw-r--r--docs/wiki/Firmware/index.html59
-rw-r--r--docs/wiki/Glossary/index.html71
-rw-r--r--docs/wiki/HTC-Ace-(HTC-Desire-HD)/index.html67
-rw-r--r--docs/wiki/HTC-Bravo-(HTC-Desire)/index.html89
-rw-r--r--docs/wiki/Home/index.html73
-rw-r--r--docs/wiki/How-to-find-device-specific-information/index.html129
-rw-r--r--docs/wiki/Initramfs-development/index.html86
-rw-r--r--docs/wiki/Inspecting-the-initramfs/index.html52
-rw-r--r--docs/wiki/Installation-Guide/index.html82
-rw-r--r--docs/wiki/Installing-packages-on-a-running-phone/index.html62
-rw-r--r--docs/wiki/LG-G3-Global/index.html133
-rw-r--r--docs/wiki/Matrix-and-IRC/index.html53
-rw-r--r--docs/wiki/Migration-to-aports-subfolders/index.html87
-rw-r--r--docs/wiki/Milestones/index.html144
-rw-r--r--docs/wiki/Mozilla-Flame/index.html181
-rw-r--r--docs/wiki/Package-naming-convention/index.html54
-rw-r--r--docs/wiki/Packaging-Plasma-Mobile/index.html1193
-rw-r--r--docs/wiki/Partition-layout/index.html74
-rw-r--r--docs/wiki/Plasma-Mobile/index.html120
-rw-r--r--docs/wiki/Porting-to-a-new-device/index.html146
-rw-r--r--docs/wiki/Related-Projects/index.html50
-rw-r--r--docs/wiki/Samsung-N7100-(Galaxy-Note-II-GSM)/index.html96
-rw-r--r--docs/wiki/Samsung-i9070-(Samsung-Galaxy-S-Advance)/index.html116
-rw-r--r--docs/wiki/Samsung-n7100-(Samsung-Galaxy-Note-2)/index.html63
-rw-r--r--docs/wiki/Screen-Calibration/index.html60
-rw-r--r--docs/wiki/Serial-debugging/index.html72
-rw-r--r--docs/wiki/The-mainline-kernel/index.html68
-rw-r--r--docs/wiki/Tips-and-tricks/index.html47
-rw-r--r--docs/wiki/Troubleshooting/index.html179
-rw-r--r--docs/wiki/Troubleshooting:grsec/index.html59
-rw-r--r--docs/wiki/Troubleshooting:kernel/index.html144
-rw-r--r--docs/wiki/Tuning-sysfs/index.html99
-rw-r--r--docs/wiki/Upstreaming/index.html59
-rw-r--r--docs/wiki/Using-prebuilt-kernels/index.html79
-rw-r--r--docs/wiki/Wifi/index.html55
-rw-r--r--docs/wiki/Xperia-E-Dual/index.html82
-rw-r--r--docs/wiki/Xperia-Z2-Tablet/index.html63
-rw-r--r--docs/wiki/Xperia-Z2/index.html64
-rw-r--r--docs/wiki/_Sidebar/index.html85
-rw-r--r--docs/wiki/asus-grouper-(Google-Nexus-7-2012)/index.html83
-rw-r--r--docs/wiki/deviceinfo-reference/index.html243
-rw-r--r--docs/wiki/deviceinfo_flash_methods/index.html89
-rw-r--r--docs/wiki/htc-monarudo-(HTC-Droid-DNA)/index.html131
-rw-r--r--docs/wiki/index.html181
-rw-r--r--docs/wiki/jolla-sbj-(Jolla-phone)/index.html64
-rw-r--r--docs/wiki/landrover-a9/index.html88
-rw-r--r--docs/wiki/lg-hammerhead-(Google-Nexus-5)/index.html154
-rw-r--r--docs/wiki/lg-mako-(Google-Nexus-4)/index.html78
-rw-r--r--docs/wiki/motorola-titan-(Moto-G-2014)/index.html188
-rw-r--r--docs/wiki/nokia-rx51-(Nokia-N900)/index.html146
-rw-r--r--docs/wiki/qemu-amd64-(QEMU-for-x86_64)/index.html66
-rw-r--r--docs/wiki/qemu-vexpress-(Qemu-with-vexpress-soc)/index.html83
-rw-r--r--docs/wiki/samsung-S7562/index.html65
-rw-r--r--docs/wiki/samsung-g800f-(Samsung-Galaxy-S5-mini)/index.html76
-rw-r--r--docs/wiki/samsung-i9100-(Samsung-Galaxy-SII)/index.html86
-rw-r--r--docs/wiki/samsung-maguro-(Google-Galaxy-Nexus-GSM)/index.html69
-rw-r--r--docs/wiki/sony-amami-(Xperia-Z1-Compact)/index.html95
76 files changed, 7743 insertions, 0 deletions
diff --git a/docs/blog/2017/05/26/intro/index.html b/docs/blog/2017/05/26/intro/index.html
new file mode 100644
index 0000000..c0b8a6d
--- /dev/null
+++ b/docs/blog/2017/05/26/intro/index.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/blog/2017/05/26/intro/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h2>postmarketOS: Aiming for a 10 year life-cycle for smartphones</h2>
+<p><em>Introduction post to <a href="https://github.com/postmarketOS/">postmarketOS</a>, a touch-optimized, pre-configured <a href="https://alpinelinux.org/">Alpine Linux</a> with own packages, that can be installed on smartphones. (Not usable for most people yet!)</em></p>
+<p><small></p>
+<p><em>Update: Alpine Linux developers do not see their distribution as "GNU/Linux", so I won't be using this term for Alpine or pmOS anymore. One of these developers, ^7heo, <a href="https://github.com/ollieparanoid/ollieparanoid.github.io/pull/1">helped me</a> to reword this article and other pages on this blog accordingly, thank you!</em></p>
+<p></small><a href="#index">Index</a></p>
+<ul>
+<li><a href="#10-year-old-pcs">Minimalistic Linux distributions run fine on ten year old PCs.</a></li>
+<li><a href="#why-is-android-different">Why are Android/Linux phones different?</a></li>
+<li><a href="#we-can-fix-this">We can fix this as a community.</a></li>
+<li><a href="#architecture">postmarketOS architecture</a></li>
+<li><a href="#prototype">Prototype</a></li>
+<li><a href="#pmbootstrap">pmbootstrap</a></li>
+<li><a href="#future">Future goals and where you could help</a></li>
+<li><a href="#more">There is so much more...</a></li>
+</ul>
+<p><a href="#10-year-old-pcs">Minimalistic Linux distributions run fine on ten year old PCs.</a></p>
+<p>It is 2017. Pick an average PC from 2007 and install a minimal Linux based operating system. You will be able to do basic computing tasks (eg. surfing the web, reading E-Mails, listening to music, chatting) just like on an <em>expensive</em> modern PC. You will even get security updates, so your old computer is protected, just like as a new one.</p>
+<p><a href="#why-is-android-different">Why are Android/Linux phones different?</a></p>
+<p>Androids architecture is based on <strong>forking</strong> (one might as well say <em>copy-pasting</em>) <strong>the entire code-base for each and every device <em>and</em> Android version.</strong> And then working on that independent, basically instantly incompatible version. Especially adding device-specific drivers plays an important role.</p>
+<p>This workflow makes it next to impossible to patch all Android devices with security updates in time or at all (<em>Stagefright</em> vulnerabilities for example rendered <a href="https://threatpost.com/stagefright-2-0-vulnerabilities-affect-1-billion-android-devices/114863/">one billion devices</a> vulnerable). And even if the vendor provides updates, it will only be for a limited time and then you must buy a new device to get security updates or the latest Android version. How convenient!</p>
+<p>Alright, so there is the <a href="https://lineageos.org/">LineageOS</a> community, which provides weekly updates for an impressive number of smartphones. They provide a practical solution today, and I am very grateful for that. However, such Android based projects will always run behind Google and the phone industry, fixing only symptoms but never the root-cause.</p>
+<p><em>This is just the tip of the iceberg. Android has way more problems, read Cascardo's <a href="https://cascardo.eti.br/blog/GNU_on_Smartphones_part_II/">GNU on Smartphones (part II)</a> for more nightmares.</em></p>
+<p><a href="#we-can-fix-this">We can fix this as a community.</a></p>
+<p>Here is the solution: Bend an existing Linux distribution to run on smartphones. Apply all necessary changes as small patches and upstream them, where it makes sense.</p>
+<p>Of course I am not the only one, that came to this conclusion - especially in the last few weeks with the <a href="https://halium.org/">Halium</a> project rising <em>(greetings!)</em>. I am all-in for working together — sharing udev rules, merging Android kernels together, whatever makes sense!</p>
+<p><a href="https://ollieparanoid.github.io/img/2017-05-26/i9100/telnet.jpg"><img alt="Unlocking encrypted rootfs via telnet" src="https://ollieparanoid.github.io/img/2017-05-26/i9100/telnet-thumb.jpg" title="Unlocking encrypted rootfs via telnet" /></a> </p>
+<p><a href="#architecture">postmarketOS architecture</a></p>
+<p>I'm working on an Alpine Linux based distribution called postmarketOS where each phone will have <strong>only one <a href="https://github.com/postmarketOS/pmbootstrap/tree/master/aports/device-samsung-i9100/">unique</a> <a href="https://github.com/postmarketOS/pmbootstrap/tree/master/aports/device-lg-mako">package</a></strong> — all other packages are shared among all devices.</p>
+<p>These <code>device-$vendor-$name</code> packages contain a so-called <code>/etc/deviceinfo</code> file, which <a href="https://github.com/postmarketOS/pmbootstrap/blob/master/aports/device-samsung-i9100/deviceinfo">describes</a> <a href="https://github.com/postmarketOS/pmbootstrap/blob/master/aports/device-lg-mako/deviceinfo">what</a> makes the device special: SD card availability, which flash software to use and other information. The file format is not stable yet, and once we have common kernels for multiple devices, I'd like to include the required modules and <code>dtb</code> name.</p>
+<p>And just to make it clear, postmarketOS does not fit the Halium model, as it avoids the Android build system entirely and does <em>not</em> run any part of the Android userspace next to its more or less typical Linux userspace. <em>(At least not in the regular install, but it could come at some point in the future as optional compatibility layer for Android applications if someone wants to work on it. Personally, I'd rather have native Linux applications (in the case of Alpine: linked against <a href="https://www.musl-libc.org/">musl</a>, dynamically or statically) than Android apps on my phone.)</em></p>
+<p><a href="#prototype">Prototype</a></p>
+<p>So much for the theory. Practically I can show you a sophisticated chroot/build/flash tool called <strong>pmbootstrap</strong> which should allow <strong>fast and clean development progress</strong>, both in porting to new phones and in implementing hardware support for the existing ports <em>(more on pmbootstrap below)</em>. That is also where most of the time went during development so far, so don't expect too much of postmarketOS. Most drivers don't work so you can't make phone calls or use the WiFi. Nevertheless, here is the current state of postmarketOS.</p>
+<p>Devices:</p>
+<ul>
+<li>Samsung Galaxy SII (samsung-i9100)</li>
+<li>Google Nexus 4 (lg-mako)</li>
+</ul>
+<p>Features:</p>
+<ul>
+<li>Encrypted root file system (password needs to be typed in via USB telnet right now)</li>
+<li>Installation on SD card or internal memory</li>
+<li>Weston with working touchscreen</li>
+<li>Weston demos work performantly (<em>without</em> proprietary 3D acceleration!)</li>
+<li>SSH access via USB</li>
+<li>Kernels compiled from LineageOS source</li>
+<li>Clean package manager based installation</li>
+</ul>
+<p><a href="https://ollieparanoid.github.io/img/2017-05-26/i9100/demos.jpg"><img alt="postmarketOS demos menu" src="https://ollieparanoid.github.io/img/2017-05-26/i9100/demos-thumb.jpg" title="postmarketOS demos menu" /> </a> <a href="https://ollieparanoid.github.io/img/2017-05-26/i9100/firefox.jpg"> <img alt="Firefox running in XWayland" src="https://ollieparanoid.github.io/img/2017-05-26/i9100/firefox-thumb.jpg" title="Firefox running in XWayland" /> </a> <a href="https://ollieparanoid.github.io/img/2017-05-26/i9100/htop.jpg"> <img alt="htop in two weston-terminals" src="https://ollieparanoid.github.io/img/2017-05-26/i9100/htop-thumb.jpg" title="htop in two weston-terminals" /> </a> <a href="https://ollieparanoid.github.io/img/2017-05-26/i9100/smoke.jpg"> <img alt="Weston smoke demo" src="https://ollieparanoid.github.io/img/2017-05-26/i9100/smoke-thumb.jpg" title="Weston smoke demo" /> </a> <a href="https://ollieparanoid.github.io/img/2017-05-26/mako/editor.jpg"><img alt="lg-mako: colors all red, but weston-editor works due to the bigger screen size" src="https://ollieparanoid.github.io/img/2017-05-26/mako/editor-thumb.jpg" title="lg-mako: colors all red, but weston-editor works due to the bigger screen size" /></a> </p>
+<p>Generally speaking, the samsung-i9100 port works better than the lg-mako port. The latter has some strange driver bugs. The boot splash images only appear for a second, XWayland does not work there and the colors in Weston are all red. I even <a href="https://patchwork.freedesktop.org/patch/150943/">had to patch Weston</a> before it worked at all. Without the patch it assumes it should draw with 0 Hz — in other words: Never ;)</p>
+<p>It should be noted, that the <a href="https://www.replicant.us/">Replicant</a>, the free software clone of Android, also targets the <a href="https://redmine.replicant.us/projects/replicant/wiki/GalaxyS2I9100">samsung-i9100</a> and has <a href="https://redmine.replicant.us/projects/replicant/wiki/Samsung-RIL">open source user-space drivers for the modem</a>, which I plan to package for postmarketOS/Alpine Linux.</p>
+<p><a href="#pmbootstrap">pmbootstrap</a></p>
+<p><em>Technical details incoming! If you're not into that, skip this section.</em></p>
+<p>Alpine Linux is <em>really small</em>. A base installation is only about 6 MB in size and takes not more than a few seconds to extract! Thanks to this characteristic, I was able to write a bootstrap program that abstracts everything in <a href="https://en.wikipedia.org/wiki/chroot">chroots</a> and therefore basically runs on top of any Linux distribution (GNU-based or not), which has Python 3 and the <code>openssl</code> command line program available.</p>
+<p>Consequently, the host system does not get touched when installing the required programs (<a href="https://en.wikipedia.org/wiki/Android_software_development#Fastboot"><code>fastboot</code></a> etc.) and your distribution doesn't even need to have them packaged.</p>
+<p>Quick feature rundown:</p>
+<ul>
+<li>Chroot setup (with distro-independent <a href="https://wiki.debian.org/QemuUserEmulation">QEMU user emulation</a>):<ul>
+<li><code>x86_64</code>* (building, flashing, ...)</li>
+<li><code>armhf</code>* (building)</li>
+<li><code>armhf</code>* (target rootfs)</li>
+</ul>
+</li>
+<li>Clean chroot shutdown (<code>umount</code>) and zapping</li>
+<li>Build software as packages:<ul>
+<li>Wraps <code>abuild</code>, the <a href="https://github.com/alpinelinux/abuild/blob/master/abuild.in#L3">"light version of <code>makepkg</code>"</a></li>
+<li>Alpine Linux' <a href="https://wiki.alpinelinux.org/wiki/APKBUILD_Reference"><code>APKBUILD</code>s</a> are very similar to Arch Linux' <code>PKGBUILD</code>s</li>
+</ul>
+</li>
+<li><a href="https://en.wikipedia.org/wiki/Cross_compiler">Cross-compile</a> <strong>all</strong> <code>armhf</code>-packages:<ul>
+<li>Linux Kernel: build with cross-compiler in <code>x86_64</code> chroot</li>
+<li>Other: build in <code>armhf</code> chroot, use cross-compiler with <a href="https://en.wikipedia.org/wiki/distcc"><code>distcc</code></a> from <code>x86_64</code> chroot (<a href="https://archlinuxarm.org/wiki/Distcc_Cross-Compiling">alarm-style</a>)</li>
+<li>Use Alpine Linux' shipped modern <code>gcc</code>, no pre-built Android toolchain</li>
+</ul>
+</li>
+<li>Effective caching out of the box (survives chroot zaps):<ul>
+<li><a href="https://ccache.samba.org/"><code>ccache</code></a> (also works with <code>distcc</code>/cross-compiler)</li>
+<li>Alpine Linux package cache</li>
+</ul>
+</li>
+<li>Installation targets:<ul>
+<li>Raw image file (flash as "system" partition)</li>
+<li>SD card</li>
+</ul>
+</li>
+<li>Flasher abstraction:<ul>
+<li><a href="https://en.wikipedia.org/wiki/Android_software_development#Fastboot"><code>fastboot</code></a></li>
+<li><a href="http://glassechidna.com.au/heimdall/"><code>heimdall</code></a></li>
+<li>... really easy to add more!</li>
+</ul>
+</li>
+<li>Logging:<ul>
+<li>all shell commands executed are logged in an extra file</li>
+<li>readable overview is displayed on the screen</li>
+</ul>
+</li>
+<li>Security:<ul>
+<li>Initial package manager download<ul>
+<li>Signature verification with <code>openssl</code> against keys shipped with pmbootstrap</li>
+<li>Minimum installed version check (for downloaded package and version reported by the extracted binary)</li>
+</ul>
+</li>
+<li>All executed shell commands get properly escaped with Python's built-in <a href="https://docs.python.org/3/library/shlex.html">shlex</a></li>
+<li>Working testcases for the above two points</li>
+<li>Only using root rights where necessary (through sudo)</li>
+<li>No default passwords in the installation: The <code>install</code> action asks for the <em>user's</em> and for the <em>root partition</em> password.</li>
+</ul>
+</li>
+</ul>
+<p><small>* <code>x86_64</code>/<code>armhf</code>: Example architectures for host/target. The code is generic, so it should work with any architectures supported by Alpine Linux.</small></p>
+<p><a href="#future">Future goals and where <em>you</em> could help</a></p>
+<p>Rough direction of where I'd like postmarketOS to head to. In case you're a hacker who wants to help, feel free to do so. But please write into the <a href="https://github.com/postmarketOS/pmbootstrap/issues">tracker</a> before starting serious work. This way we can make sure, that we do not have redundant work.</p>
+<h3>Devices</h3>
+<p>Pick an old Android device, that you don't need anymore and start porting postmarketOS for it. It should be pretty straight forward. One <code>device-*</code> package, one for the kernel, calibrate the touchscreen, and the demos should more or less work already!</p>
+<p>If you're feeling adventurous, try a non-Android device. <a href="https://en.wikipedia.org/wiki/OpeniBoot">How about iPhones</a>? I'll probably be working on a port for at least one non-Android device myself for demonstration purposes.</p>
+<h3>Drivers</h3>
+<p>Fix the lg-mako screen colors and/or make the following peripherals work:</p>
+<ul>
+<li>WiFi</li>
+<li>Audio</li>
+<li>Modem (Phone calls, mobile internet)</li>
+<li>Hardware buttons (Volume keys, home button)</li>
+<li>Camera</li>
+<li>...</li>
+</ul>
+<p>In most cases, the drivers are already provided by the Android/LineageOS kernels, that we currently use and only need to be configured in the userspace (for example with <a href="https://en.wikipedia.org/wiki/Udev">udev rules</a>).</p>
+<p>The long time goal is using the <a href="https://lwn.net/Articles/680109/">mainline kernel</a>.</p>
+<h3>Phone interface</h3>
+<p>Package a Linux-based phone interface. <a href="https://plasma-mobile.org/">Plasma mobile</a> <em>seems</em> to be the most complete one right now (although still not stable). But I'd also be interested in <a href="https://ubports.com/">ubports</a> (fork of the discontinued <a href="https://en.wikipedia.org/wiki/Ubuntu_Touch">Ubuntu Touch</a>) once it matures. Or maybe writing a minimal Android-like interface based on <a href="https://github.com/wayland-project/weston">libweston</a>.</p>
+<p>From what I understand, the <a href="https://together.jolla.com/question/20488/which-parts-of-sailfish-are-closed-source-why-and-will-that-change/">SailfishOS interface is closed source</a>, so that will not be an option.</p>
+<p><em>postmarketOS is developed in the spirit of regular Linux distributions, so there's no problem in having multiple phone interfaces (just like KDE/Gnome/XFCE/...) and let the user choose.</em></p>
+<h3>Security</h3>
+<p>Great care has been taken to make pmbootstrap safe, as it will run on productive systems of postmarketOS developers. This is not the case for postmarketOS in its current proof-of-concept state (Weston runs as root, ...) so we must work on that before it can be used in real life. Even better would be <a href="https://en.wikipedia.org/wiki/Privilege_separation">privilege separation</a> throughout the entire OS.</p>
+<p><a href="#more">There is so much more...</a></p>
+<p>...but the blog post is long enough as it is, so I'll wrap it up. Thanks for reading, thanks to my friends who reviewed earlier versions of this blog post. Thanks to Replicant, LineageOS, Halium. Together, we can make the vision of long-lasting, open source smartphone operating systems a reality!</p>
+<p><strong>Tell your friends!</strong></p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/blog/index.html b/docs/blog/index.html
new file mode 100644
index 0000000..e005bbd
--- /dev/null
+++ b/docs/blog/index.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/blog/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<ul>
+
+ <li><a href="/blog/2017/05/26/intro/">intro</a></li>
+
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 0000000..40bd2d6
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<div class="fl w-100 w-50-ns pa2">
+ <img src="/static/img/banner.jpg"></img>
+</div>
+<div class="fl w-100 w-50-ns pa2">
+ <p class="intro">postmarketOS (<i>pmOS</i>), is a touch-optimized, pre-configured <a href="https://alpinelinux.org">Alpine Linux</a> that can be installed on smartphones and other mobile devices. The project is at very early stages of development and is not yet usable for most users.</p>
+ <p class="intro">For further details read our <a href="/blog/2017/05/26/intro/">introductory blog post</a>.</p>
+ <p>Find us on:</p>
+ <ul>
+ <li><a href="https://github.com/postmarketOS">GitHub</a></li>
+ <li><a href="https://reddit.com/r/postmarketOS">/r/postmarketOS</a></li>
+ <li><a href="https://chat.disroot.org/#/room/#postmarketos:disroot.org">#postmarketos:disroot.org</a></li>
+ <li>#postmarketos on Freenode IRC</li>
+ </ul>
+</div>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/static/css/main.css b/docs/static/css/main.css
new file mode 100644
index 0000000..4560790
--- /dev/null
+++ b/docs/static/css/main.css
@@ -0,0 +1,34 @@
+a.title {
+ text-decoration: none;
+ color: black;
+}
+
+a.title h1 img {
+ height: 1.4em;
+}
+
+a.title h1 span {
+ vertical-align: top;
+}
+
+div.menu ul {
+ list-style: none;
+ padding-left: 7px;
+}
+
+div.menu ul li {
+ display: inline-block;
+ padding-right: 1.3em;
+}
+
+div.menu ul li a {
+ font-size: 1.2em;
+ color: #444;
+ text-decoration: none;
+}
+
+p.intro {
+ font-size: 1.3em;
+ line-height: 1.3em;
+ margin-top: 0px;
+}
diff --git a/docs/static/css/tachyons.min.css b/docs/static/css/tachyons.min.css
new file mode 100644
index 0000000..ead9028
--- /dev/null
+++ b/docs/static/css/tachyons.min.css
@@ -0,0 +1,3 @@
+/*! TACHYONS v4.6.1 | http://tachyons.io */
+/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}/* 1 */ [type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}/* 1 */ menu,details{display:block}summary{display:list-item}canvas{display:inline-block}[hidden],template{display:none}.border-box,a,article,body,code,dd,div,dl,dt,fieldset,footer,form,h1,h2,h3,h4,h5,h6,header,html,input[type=email],input[type=number],input[type=password],input[type=tel],input[type=text],input[type=url],legend,li,main,ol,p,pre,section,table,td,textarea,th,tr,ul{box-sizing:border-box}.aspect-ratio{height:0;position:relative}.aspect-ratio--16x9{padding-bottom:56.25%}.aspect-ratio--9x16{padding-bottom:177.77%}.aspect-ratio--4x3{padding-bottom:75%}.aspect-ratio--3x4{padding-bottom:133.33%}.aspect-ratio--6x4{padding-bottom:66.6%}.aspect-ratio--4x6{padding-bottom:150%}.aspect-ratio--8x5{padding-bottom:62.5%}.aspect-ratio--5x8{padding-bottom:160%}.aspect-ratio--7x5{padding-bottom:71.42%}.aspect-ratio--5x7{padding-bottom:140%}.aspect-ratio--1x1{padding-bottom:100%}.aspect-ratio--object{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}img{max-width:100%}.cover{background-size:cover!important}.contain{background-size:contain!important}.bg-center{background-position:50%}.bg-center,.bg-top{background-repeat:no-repeat}.bg-top{background-position:top}.bg-right{background-position:100%}.bg-bottom,.bg-right{background-repeat:no-repeat}.bg-bottom{background-position:bottom}.bg-left{background-repeat:no-repeat;background-position:0}.outline{outline:1px solid}.outline-transparent{outline:1px solid transparent}.outline-0{outline:0}.ba{border-style:solid;border-width:1px}.bt{border-top-style:solid;border-top-width:1px}.br{border-right-style:solid;border-right-width:1px}.bb{border-bottom-style:solid;border-bottom-width:1px}.bl{border-left-style:solid;border-left-width:1px}.bn{border-style:none;border-width:0}.b--black{border-color:#000}.b--near-black{border-color:#111}.b--dark-gray{border-color:#333}.b--mid-gray{border-color:#555}.b--gray{border-color:#777}.b--silver{border-color:#999}.b--light-silver{border-color:#aaa}.b--moon-gray{border-color:#ccc}.b--light-gray{border-color:#eee}.b--near-white{border-color:#f4f4f4}.b--white{border-color:#fff}.b--white-90{border-color:hsla(0,0%,100%,.9)}.b--white-80{border-color:hsla(0,0%,100%,.8)}.b--white-70{border-color:hsla(0,0%,100%,.7)}.b--white-60{border-color:hsla(0,0%,100%,.6)}.b--white-50{border-color:hsla(0,0%,100%,.5)}.b--white-40{border-color:hsla(0,0%,100%,.4)}.b--white-30{border-color:hsla(0,0%,100%,.3)}.b--white-20{border-color:hsla(0,0%,100%,.2)}.b--white-10{border-color:hsla(0,0%,100%,.1)}.b--white-05{border-color:hsla(0,0%,100%,.05)}.b--white-025{border-color:hsla(0,0%,100%,.025)}.b--white-0125{border-color:hsla(0,0%,100%,.0125)}.b--black-90{border-color:rgba(0,0,0,.9)}.b--black-80{border-color:rgba(0,0,0,.8)}.b--black-70{border-color:rgba(0,0,0,.7)}.b--black-60{border-color:rgba(0,0,0,.6)}.b--black-50{border-color:rgba(0,0,0,.5)}.b--black-40{border-color:rgba(0,0,0,.4)}.b--black-30{border-color:rgba(0,0,0,.3)}.b--black-20{border-color:rgba(0,0,0,.2)}.b--black-10{border-color:rgba(0,0,0,.1)}.b--black-05{border-color:rgba(0,0,0,.05)}.b--black-025{border-color:rgba(0,0,0,.025)}.b--black-0125{border-color:rgba(0,0,0,.0125)}.b--dark-red{border-color:#e7040f}.b--red{border-color:#ff4136}.b--light-red{border-color:#ff725c}.b--orange{border-color:#ff6300}.b--gold{border-color:#ffb700}.b--yellow{border-color:gold}.b--light-yellow{border-color:#fbf1a9}.b--purple{border-color:#5e2ca5}.b--light-purple{border-color:#a463f2}.b--dark-pink{border-color:#d5008f}.b--hot-pink{border-color:#ff41b4}.b--pink{border-color:#ff80cc}.b--light-pink{border-color:#ffa3d7}.b--dark-green{border-color:#137752}.b--green{border-color:#19a974}.b--light-green{border-color:#9eebcf}.b--navy{border-color:#001b44}.b--dark-blue{border-color:#00449e}.b--blue{border-color:#357edd}.b--light-blue{border-color:#96ccff}.b--lightest-blue{border-color:#cdecff}.b--washed-blue{border-color:#f6fffe}.b--washed-green{border-color:#e8fdf5}.b--washed-yellow{border-color:#fffceb}.b--washed-red{border-color:#ffdfdf}.b--transparent{border-color:transparent}.b--inherit{border-color:inherit}.br0{border-radius:0}.br1{border-radius:.125rem}.br2{border-radius:.25rem}.br3{border-radius:.5rem}.br4{border-radius:1rem}.br-100{border-radius:100%}.br-pill{border-radius:9999px}.br--bottom{border-top-left-radius:0;border-top-right-radius:0}.br--top{border-bottom-right-radius:0}.br--right,.br--top{border-bottom-left-radius:0}.br--right{border-top-left-radius:0}.br--left{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted{border-style:dotted}.b--dashed{border-style:dashed}.b--solid{border-style:solid}.b--none{border-style:none}.bw0{border-width:0}.bw1{border-width:.125rem}.bw2{border-width:.25rem}.bw3{border-width:.5rem}.bw4{border-width:1rem}.bw5{border-width:2rem}.bt-0{border-top-width:0}.br-0{border-right-width:0}.bb-0{border-bottom-width:0}.bl-0{border-left-width:0}.shadow-1{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.pre{overflow-x:auto;overflow-y:hidden;overflow:scroll}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.top-1{top:1rem}.right-1{right:1rem}.bottom-1{bottom:1rem}.left-1{left:1rem}.top-2{top:2rem}.right-2{right:2rem}.bottom-2{bottom:2rem}.left-2{left:2rem}.top--1{top:-1rem}.right--1{right:-1rem}.bottom--1{bottom:-1rem}.left--1{left:-1rem}.top--2{top:-2rem}.right--2{right:-2rem}.bottom--2{bottom:-2rem}.left--2{left:-2rem}.absolute--fill{top:0;right:0;bottom:0;left:0}.cf:after,.cf:before{content:" ";display:table}.cf:after{clear:both}.cf{*zoom:1}.cl{clear:left}.cr{clear:right}.cb{clear:both}.cn{clear:none}.dn{display:none}.di{display:inline}.db{display:block}.dib{display:inline-block}.dit{display:inline-table}.dt{display:table}.dtc{display:table-cell}.dt-row{display:table-row}.dt-row-group{display:table-row-group}.dt-column{display:table-column}.dt-column-group{display:table-column-group}.dt--fixed{table-layout:fixed;width:100%}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0;min-height:0}.flex-none{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-column{-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column}.flex-column,.flex-row{-webkit-box-direction:normal}.flex-row{-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row}.flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.items-end{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.items-baseline{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.items-stretch{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.self-start{-ms-flex-item-align:start;align-self:flex-start}.self-end{-ms-flex-item-align:end;align-self:flex-end}.self-center{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center}.self-baseline{-ms-flex-item-align:baseline;align-self:baseline}.self-stretch{-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch}.justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.justify-around{-ms-flex-pack:distribute;justify-content:space-around}.content-start{-ms-flex-line-pack:start;align-content:flex-start}.content-end{-ms-flex-line-pack:end;align-content:flex-end}.content-center{-ms-flex-line-pack:center;align-content:center}.content-between{-ms-flex-line-pack:justify;align-content:space-between}.content-around{-ms-flex-line-pack:distribute;align-content:space-around}.content-stretch{-ms-flex-line-pack:stretch;align-content:stretch}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-last{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.fl{float:left}.fl,.fr{_display:inline}.fr{float:right}.fn{float:none}.sans-serif{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.serif{font-family:georgia,times,serif}.system-sans-serif{font-family:sans-serif}.system-serif{font-family:serif}.code,code{font-family:Consolas,monaco,monospace}.courier{font-family:Courier Next,courier,monospace}.helvetica{font-family:helvetica neue,helvetica,sans-serif}.avenir{font-family:avenir next,avenir,sans-serif}.athelas{font-family:athelas,georgia,serif}.georgia{font-family:georgia,serif}.times{font-family:times,serif}.bodoni{font-family:Bodoni MT,serif}.calisto{font-family:Calisto MT,serif}.garamond{font-family:garamond,serif}.baskerville{font-family:baskerville,serif}.i{font-style:italic}.fs-normal{font-style:normal}.normal{font-weight:400}.b{font-weight:700}.fw1{font-weight:100}.fw2{font-weight:200}.fw3{font-weight:300}.fw4{font-weight:400}.fw5{font-weight:500}.fw6{font-weight:600}.fw7{font-weight:700}.fw8{font-weight:800}.fw9{font-weight:900}.input-reset{-webkit-appearance:none;-moz-appearance:none}.button-reset::-moz-focus-inner,.input-reset::-moz-focus-inner{border:0;padding:0}.h1{height:1rem}.h2{height:2rem}.h3{height:4rem}.h4{height:8rem}.h5{height:16rem}.h-25{height:25%}.h-50{height:50%}.h-75{height:75%}.h-100{height:100%}.min-h-100{min-height:100%}.vh-25{height:25vh}.vh-50{height:50vh}.vh-75{height:75vh}.vh-100{height:100vh}.min-vh-100{min-height:100vh}.h-auto{height:auto}.h-inherit{height:inherit}.tracked{letter-spacing:.1em}.tracked-tight{letter-spacing:-.05em}.tracked-mega{letter-spacing:.25em}.lh-solid{line-height:1}.lh-title{line-height:1.25}.lh-copy{line-height:1.5}.link{text-decoration:none}.link,.link:active,.link:focus,.link:hover,.link:link,.link:visited{-webkit-transition:color .15s ease-in;transition:color .15s ease-in}.link:focus{outline:1px dotted currentColor}.list{list-style-type:none}.mw-100{max-width:100%}.mw1{max-width:1rem}.mw2{max-width:2rem}.mw3{max-width:4rem}.mw4{max-width:8rem}.mw5{max-width:16rem}.mw6{max-width:32rem}.mw7{max-width:48rem}.mw8{max-width:64rem}.mw9{max-width:96rem}.mw-none{max-width:none}.w1{width:1rem}.w2{width:2rem}.w3{width:4rem}.w4{width:8rem}.w5{width:16rem}.w-10{width:10%}.w-20{width:20%}.w-25{width:25%}.w-30{width:30%}.w-33{width:33%}.w-34{width:34%}.w-40{width:40%}.w-50{width:50%}.w-60{width:60%}.w-70{width:70%}.w-75{width:75%}.w-80{width:80%}.w-90{width:90%}.w-100{width:100%}.w-third{width:33.33333%}.w-two-thirds{width:66.66667%}.w-auto{width:auto}.overflow-visible{overflow:visible}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-auto{overflow:auto}.overflow-x-visible{overflow-x:visible}.overflow-x-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-visible{overflow-y:visible}.overflow-y-hidden{overflow-y:hidden}.overflow-y-scroll{overflow-y:scroll}.overflow-y-auto{overflow-y:auto}.static{position:static}.relative{position:relative}.absolute{position:absolute}.fixed{position:fixed}.o-100{opacity:1}.o-90{opacity:.9}.o-80{opacity:.8}.o-70{opacity:.7}.o-60{opacity:.6}.o-50{opacity:.5}.o-40{opacity:.4}.o-30{opacity:.3}.o-20{opacity:.2}.o-10{opacity:.1}.o-05{opacity:.05}.o-025{opacity:.025}.o-0{opacity:0}.rotate-45{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.black-90{color:rgba(0,0,0,.9)}.black-80{color:rgba(0,0,0,.8)}.black-70{color:rgba(0,0,0,.7)}.black-60{color:rgba(0,0,0,.6)}.black-50{color:rgba(0,0,0,.5)}.black-40{color:rgba(0,0,0,.4)}.black-30{color:rgba(0,0,0,.3)}.black-20{color:rgba(0,0,0,.2)}.black-10{color:rgba(0,0,0,.1)}.black-05{color:rgba(0,0,0,.05)}.white-90{color:hsla(0,0%,100%,.9)}.white-80{color:hsla(0,0%,100%,.8)}.white-70{color:hsla(0,0%,100%,.7)}.white-60{color:hsla(0,0%,100%,.6)}.white-50{color:hsla(0,0%,100%,.5)}.white-40{color:hsla(0,0%,100%,.4)}.white-30{color:hsla(0,0%,100%,.3)}.white-20{color:hsla(0,0%,100%,.2)}.white-10{color:hsla(0,0%,100%,.1)}.black{color:#000}.near-black{color:#111}.dark-gray{color:#333}.mid-gray{color:#555}.gray{color:#777}.silver{color:#999}.light-silver{color:#aaa}.moon-gray{color:#ccc}.light-gray{color:#eee}.near-white{color:#f4f4f4}.white{color:#fff}.dark-red{color:#e7040f}.red{color:#ff4136}.light-red{color:#ff725c}.orange{color:#ff6300}.gold{color:#ffb700}.yellow{color:gold}.light-yellow{color:#fbf1a9}.purple{color:#5e2ca5}.light-purple{color:#a463f2}.dark-pink{color:#d5008f}.hot-pink{color:#ff41b4}.pink{color:#ff80cc}.light-pink{color:#ffa3d7}.dark-green{color:#137752}.green{color:#19a974}.light-green{color:#9eebcf}.navy{color:#001b44}.dark-blue{color:#00449e}.blue{color:#357edd}.light-blue{color:#96ccff}.lightest-blue{color:#cdecff}.washed-blue{color:#f6fffe}.washed-green{color:#e8fdf5}.washed-yellow{color:#fffceb}.washed-red{color:#ffdfdf}.color-inherit{color:inherit}.bg-black-90{background-color:rgba(0,0,0,.9)}.bg-black-80{background-color:rgba(0,0,0,.8)}.bg-black-70{background-color:rgba(0,0,0,.7)}.bg-black-60{background-color:rgba(0,0,0,.6)}.bg-black-50{background-color:rgba(0,0,0,.5)}.bg-black-40{background-color:rgba(0,0,0,.4)}.bg-black-30{background-color:rgba(0,0,0,.3)}.bg-black-20{background-color:rgba(0,0,0,.2)}.bg-black-10{background-color:rgba(0,0,0,.1)}.bg-black-05{background-color:rgba(0,0,0,.05)}.bg-white-90{background-color:hsla(0,0%,100%,.9)}.bg-white-80{background-color:hsla(0,0%,100%,.8)}.bg-white-70{background-color:hsla(0,0%,100%,.7)}.bg-white-60{background-color:hsla(0,0%,100%,.6)}.bg-white-50{background-color:hsla(0,0%,100%,.5)}.bg-white-40{background-color:hsla(0,0%,100%,.4)}.bg-white-30{background-color:hsla(0,0%,100%,.3)}.bg-white-20{background-color:hsla(0,0%,100%,.2)}.bg-white-10{background-color:hsla(0,0%,100%,.1)}.bg-black{background-color:#000}.bg-near-black{background-color:#111}.bg-dark-gray{background-color:#333}.bg-mid-gray{background-color:#555}.bg-gray{background-color:#777}.bg-silver{background-color:#999}.bg-light-silver{background-color:#aaa}.bg-moon-gray{background-color:#ccc}.bg-light-gray{background-color:#eee}.bg-near-white{background-color:#f4f4f4}.bg-white{background-color:#fff}.bg-transparent{background-color:transparent}.bg-dark-red{background-color:#e7040f}.bg-red{background-color:#ff4136}.bg-light-red{background-color:#ff725c}.bg-orange{background-color:#ff6300}.bg-gold{background-color:#ffb700}.bg-yellow{background-color:gold}.bg-light-yellow{background-color:#fbf1a9}.bg-purple{background-color:#5e2ca5}.bg-light-purple{background-color:#a463f2}.bg-dark-pink{background-color:#d5008f}.bg-hot-pink{background-color:#ff41b4}.bg-pink{background-color:#ff80cc}.bg-light-pink{background-color:#ffa3d7}.bg-dark-green{background-color:#137752}.bg-green{background-color:#19a974}.bg-light-green{background-color:#9eebcf}.bg-navy{background-color:#001b44}.bg-dark-blue{background-color:#00449e}.bg-blue{background-color:#357edd}.bg-light-blue{background-color:#96ccff}.bg-lightest-blue{background-color:#cdecff}.bg-washed-blue{background-color:#f6fffe}.bg-washed-green{background-color:#e8fdf5}.bg-washed-yellow{background-color:#fffceb}.bg-washed-red{background-color:#ffdfdf}.bg-inherit{background-color:inherit}.hover-black:focus,.hover-black:hover{color:#000}.hover-near-black:focus,.hover-near-black:hover{color:#111}.hover-dark-gray:focus,.hover-dark-gray:hover{color:#333}.hover-mid-gray:focus,.hover-mid-gray:hover{color:#555}.hover-gray:focus,.hover-gray:hover{color:#777}.hover-silver:focus,.hover-silver:hover{color:#999}.hover-light-silver:focus,.hover-light-silver:hover{color:#aaa}.hover-moon-gray:focus,.hover-moon-gray:hover{color:#ccc}.hover-light-gray:focus,.hover-light-gray:hover{color:#eee}.hover-near-white:focus,.hover-near-white:hover{color:#f4f4f4}.hover-white:focus,.hover-white:hover{color:#fff}.hover-black-90:focus,.hover-black-90:hover{color:rgba(0,0,0,.9)}.hover-black-80:focus,.hover-black-80:hover{color:rgba(0,0,0,.8)}.hover-black-70:focus,.hover-black-70:hover{color:rgba(0,0,0,.7)}.hover-black-60:focus,.hover-black-60:hover{color:rgba(0,0,0,.6)}.hover-black-50:focus,.hover-black-50:hover{color:rgba(0,0,0,.5)}.hover-black-40:focus,.hover-black-40:hover{color:rgba(0,0,0,.4)}.hover-black-30:focus,.hover-black-30:hover{color:rgba(0,0,0,.3)}.hover-black-20:focus,.hover-black-20:hover{color:rgba(0,0,0,.2)}.hover-black-10:focus,.hover-black-10:hover{color:rgba(0,0,0,.1)}.hover-white-90:focus,.hover-white-90:hover{color:hsla(0,0%,100%,.9)}.hover-white-80:focus,.hover-white-80:hover{color:hsla(0,0%,100%,.8)}.hover-white-70:focus,.hover-white-70:hover{color:hsla(0,0%,100%,.7)}.hover-white-60:focus,.hover-white-60:hover{color:hsla(0,0%,100%,.6)}.hover-white-50:focus,.hover-white-50:hover{color:hsla(0,0%,100%,.5)}.hover-white-40:focus,.hover-white-40:hover{color:hsla(0,0%,100%,.4)}.hover-white-30:focus,.hover-white-30:hover{color:hsla(0,0%,100%,.3)}.hover-white-20:focus,.hover-white-20:hover{color:hsla(0,0%,100%,.2)}.hover-white-10:focus,.hover-white-10:hover{color:hsla(0,0%,100%,.1)}.hover-inherit:focus,.hover-inherit:hover{color:inherit}.hover-bg-black:focus,.hover-bg-black:hover{background-color:#000}.hover-bg-near-black:focus,.hover-bg-near-black:hover{background-color:#111}.hover-bg-dark-gray:focus,.hover-bg-dark-gray:hover{background-color:#333}.hover-bg-dark-gray:focus,.hover-bg-mid-gray:hover{background-color:#555}.hover-bg-gray:focus,.hover-bg-gray:hover{background-color:#777}.hover-bg-silver:focus,.hover-bg-silver:hover{background-color:#999}.hover-bg-light-silver:focus,.hover-bg-light-silver:hover{background-color:#aaa}.hover-bg-moon-gray:focus,.hover-bg-moon-gray:hover{background-color:#ccc}.hover-bg-light-gray:focus,.hover-bg-light-gray:hover{background-color:#eee}.hover-bg-near-white:focus,.hover-bg-near-white:hover{background-color:#f4f4f4}.hover-bg-white:focus,.hover-bg-white:hover{background-color:#fff}.hover-bg-transparent:focus,.hover-bg-transparent:hover{background-color:transparent}.hover-bg-black-90:focus,.hover-bg-black-90:hover{background-color:rgba(0,0,0,.9)}.hover-bg-black-80:focus,.hover-bg-black-80:hover{background-color:rgba(0,0,0,.8)}.hover-bg-black-70:focus,.hover-bg-black-70:hover{background-color:rgba(0,0,0,.7)}.hover-bg-black-60:focus,.hover-bg-black-60:hover{background-color:rgba(0,0,0,.6)}.hover-bg-black-50:focus,.hover-bg-black-50:hover{background-color:rgba(0,0,0,.5)}.hover-bg-black-40:focus,.hover-bg-black-40:hover{background-color:rgba(0,0,0,.4)}.hover-bg-black-30:focus,.hover-bg-black-30:hover{background-color:rgba(0,0,0,.3)}.hover-bg-black-20:focus,.hover-bg-black-20:hover{background-color:rgba(0,0,0,.2)}.hover-bg-black-10:focus,.hover-bg-black-10:hover{background-color:rgba(0,0,0,.1)}.hover-bg-white-90:focus,.hover-bg-white-90:hover{background-color:hsla(0,0%,100%,.9)}.hover-bg-white-80:focus,.hover-bg-white-80:hover{background-color:hsla(0,0%,100%,.8)}.hover-bg-white-70:focus,.hover-bg-white-70:hover{background-color:hsla(0,0%,100%,.7)}.hover-bg-white-60:focus,.hover-bg-white-60:hover{background-color:hsla(0,0%,100%,.6)}.hover-bg-white-50:focus,.hover-bg-white-50:hover{background-color:hsla(0,0%,100%,.5)}.hover-bg-white-40:focus,.hover-bg-white-40:hover{background-color:hsla(0,0%,100%,.4)}.hover-bg-white-30:focus,.hover-bg-white-30:hover{background-color:hsla(0,0%,100%,.3)}.hover-bg-white-20:focus,.hover-bg-white-20:hover{background-color:hsla(0,0%,100%,.2)}.hover-bg-white-10:focus,.hover-bg-white-10:hover{background-color:hsla(0,0%,100%,.1)}.hover-dark-red:focus,.hover-dark-red:hover{color:#e7040f}.hover-red:focus,.hover-red:hover{color:#ff4136}.hover-light-red:focus,.hover-light-red:hover{color:#ff725c}.hover-orange:focus,.hover-orange:hover{color:#ff6300}.hover-gold:focus,.hover-gold:hover{color:#ffb700}.hover-yellow:focus,.hover-yellow:hover{color:gold}.hover-light-yellow:focus,.hover-light-yellow:hover{color:#fbf1a9}.hover-purple:focus,.hover-purple:hover{color:#5e2ca5}.hover-light-purple:focus,.hover-light-purple:hover{color:#a463f2}.hover-dark-pink:focus,.hover-dark-pink:hover{color:#d5008f}.hover-hot-pink:focus,.hover-hot-pink:hover{color:#ff41b4}.hover-pink:focus,.hover-pink:hover{color:#ff80cc}.hover-light-pink:focus,.hover-light-pink:hover{color:#ffa3d7}.hover-dark-green:focus,.hover-dark-green:hover{color:#137752}.hover-green:focus,.hover-green:hover{color:#19a974}.hover-light-green:focus,.hover-light-green:hover{color:#9eebcf}.hover-navy:focus,.hover-navy:hover{color:#001b44}.hover-dark-blue:focus,.hover-dark-blue:hover{color:#00449e}.hover-blue:focus,.hover-blue:hover{color:#357edd}.hover-light-blue:focus,.hover-light-blue:hover{color:#96ccff}.hover-lightest-blue:focus,.hover-lightest-blue:hover{color:#cdecff}.hover-washed-blue:focus,.hover-washed-blue:hover{color:#f6fffe}.hover-washed-green:focus,.hover-washed-green:hover{color:#e8fdf5}.hover-washed-yellow:focus,.hover-washed-yellow:hover{color:#fffceb}.hover-washed-red:focus,.hover-washed-red:hover{color:#ffdfdf}.hover-bg-dark-red:focus,.hover-bg-dark-red:hover{background-color:#e7040f}.hover-bg-red:focus,.hover-bg-red:hover{background-color:#ff4136}.hover-bg-light-red:focus,.hover-bg-light-red:hover{background-color:#ff725c}.hover-bg-orange:focus,.hover-bg-orange:hover{background-color:#ff6300}.hover-bg-gold:focus,.hover-bg-gold:hover{background-color:#ffb700}.hover-bg-yellow:focus,.hover-bg-yellow:hover{background-color:gold}.hover-bg-light-yellow:focus,.hover-bg-light-yellow:hover{background-color:#fbf1a9}.hover-bg-purple:focus,.hover-bg-purple:hover{background-color:#5e2ca5}.hover-bg-light-purple:focus,.hover-bg-light-purple:hover{background-color:#a463f2}.hover-bg-dark-pink:focus,.hover-bg-dark-pink:hover{background-color:#d5008f}.hover-bg-hot-pink:focus,.hover-bg-hot-pink:hover{background-color:#ff41b4}.hover-bg-pink:focus,.hover-bg-pink:hover{background-color:#ff80cc}.hover-bg-light-pink:focus,.hover-bg-light-pink:hover{background-color:#ffa3d7}.hover-bg-dark-green:focus,.hover-bg-dark-green:hover{background-color:#137752}.hover-bg-green:focus,.hover-bg-green:hover{background-color:#19a974}.hover-bg-light-green:focus,.hover-bg-light-green:hover{background-color:#9eebcf}.hover-bg-navy:focus,.hover-bg-navy:hover{background-color:#001b44}.hover-bg-dark-blue:focus,.hover-bg-dark-blue:hover{background-color:#00449e}.hover-bg-blue:focus,.hover-bg-blue:hover{background-color:#357edd}.hover-bg-light-blue:focus,.hover-bg-light-blue:hover{background-color:#96ccff}.hover-bg-lightest-blue:focus,.hover-bg-lightest-blue:hover{background-color:#cdecff}.hover-bg-washed-blue:focus,.hover-bg-washed-blue:hover{background-color:#f6fffe}.hover-bg-washed-green:focus,.hover-bg-washed-green:hover{background-color:#e8fdf5}.hover-bg-washed-yellow:focus,.hover-bg-washed-yellow:hover{background-color:#fffceb}.hover-bg-washed-red:focus,.hover-bg-washed-red:hover{background-color:#ffdfdf}.hover-bg-inherit:focus,.hover-bg-inherit:hover{background-color:inherit}.pa0{padding:0}.pa1{padding:.25rem}.pa2{padding:.5rem}.pa3{padding:1rem}.pa4{padding:2rem}.pa5{padding:4rem}.pa6{padding:8rem}.pa7{padding:16rem}.pl0{padding-left:0}.pl1{padding-left:.25rem}.pl2{padding-left:.5rem}.pl3{padding-left:1rem}.pl4{padding-left:2rem}.pl5{padding-left:4rem}.pl6{padding-left:8rem}.pl7{padding-left:16rem}.pr0{padding-right:0}.pr1{padding-right:.25rem}.pr2{padding-right:.5rem}.pr3{padding-right:1rem}.pr4{padding-right:2rem}.pr5{padding-right:4rem}.pr6{padding-right:8rem}.pr7{padding-right:16rem}.pb0{padding-bottom:0}.pb1{padding-bottom:.25rem}.pb2{padding-bottom:.5rem}.pb3{padding-bottom:1rem}.pb4{padding-bottom:2rem}.pb5{padding-bottom:4rem}.pb6{padding-bottom:8rem}.pb7{padding-bottom:16rem}.pt0{padding-top:0}.pt1{padding-top:.25rem}.pt2{padding-top:.5rem}.pt3{padding-top:1rem}.pt4{padding-top:2rem}.pt5{padding-top:4rem}.pt6{padding-top:8rem}.pt7{padding-top:16rem}.pv0{padding-top:0;padding-bottom:0}.pv1{padding-top:.25rem;padding-bottom:.25rem}.pv2{padding-top:.5rem;padding-bottom:.5rem}.pv3{padding-top:1rem;padding-bottom:1rem}.pv4{padding-top:2rem;padding-bottom:2rem}.pv5{padding-top:4rem;padding-bottom:4rem}.pv6{padding-top:8rem;padding-bottom:8rem}.pv7{padding-top:16rem;padding-bottom:16rem}.ph0{padding-left:0;padding-right:0}.ph1{padding-left:.25rem;padding-right:.25rem}.ph2{padding-left:.5rem;padding-right:.5rem}.ph3{padding-left:1rem;padding-right:1rem}.ph4{padding-left:2rem;padding-right:2rem}.ph5{padding-left:4rem;padding-right:4rem}.ph6{padding-left:8rem;padding-right:8rem}.ph7{padding-left:16rem;padding-right:16rem}.ma0{margin:0}.ma1{margin:.25rem}.ma2{margin:.5rem}.ma3{margin:1rem}.ma4{margin:2rem}.ma5{margin:4rem}.ma6{margin:8rem}.ma7{margin:16rem}.ml0{margin-left:0}.ml1{margin-left:.25rem}.ml2{margin-left:.5rem}.ml3{margin-left:1rem}.ml4{margin-left:2rem}.ml5{margin-left:4rem}.ml6{margin-left:8rem}.ml7{margin-left:16rem}.mr0{margin-right:0}.mr1{margin-right:.25rem}.mr2{margin-right:.5rem}.mr3{margin-right:1rem}.mr4{margin-right:2rem}.mr5{margin-right:4rem}.mr6{margin-right:8rem}.mr7{margin-right:16rem}.mb0{margin-bottom:0}.mb1{margin-bottom:.25rem}.mb2{margin-bottom:.5rem}.mb3{margin-bottom:1rem}.mb4{margin-bottom:2rem}.mb5{margin-bottom:4rem}.mb6{margin-bottom:8rem}.mb7{margin-bottom:16rem}.mt0{margin-top:0}.mt1{margin-top:.25rem}.mt2{margin-top:.5rem}.mt3{margin-top:1rem}.mt4{margin-top:2rem}.mt5{margin-top:4rem}.mt6{margin-top:8rem}.mt7{margin-top:16rem}.mv0{margin-top:0;margin-bottom:0}.mv1{margin-top:.25rem;margin-bottom:.25rem}.mv2{margin-top:.5rem;margin-bottom:.5rem}.mv3{margin-top:1rem;margin-bottom:1rem}.mv4{margin-top:2rem;margin-bottom:2rem}.mv5{margin-top:4rem;margin-bottom:4rem}.mv6{margin-top:8rem;margin-bottom:8rem}.mv7{margin-top:16rem;margin-bottom:16rem}.mh0{margin-left:0;margin-right:0}.mh1{margin-left:.25rem;margin-right:.25rem}.mh2{margin-left:.5rem;margin-right:.5rem}.mh3{margin-left:1rem;margin-right:1rem}.mh4{margin-left:2rem;margin-right:2rem}.mh5{margin-left:4rem;margin-right:4rem}.mh6{margin-left:8rem;margin-right:8rem}.mh7{margin-left:16rem;margin-right:16rem}.na1{margin:-.25rem}.na2{margin:-.5rem}.na3{margin:-1rem}.na4{margin:-2rem}.na5{margin:-4rem}.na6{margin:-8rem}.na7{margin:-16rem}.nl1{margin-left:-.25rem}.nl2{margin-left:-.5rem}.nl3{margin-left:-1rem}.nl4{margin-left:-2rem}.nl5{margin-left:-4rem}.nl6{margin-left:-8rem}.nl7{margin-left:-16rem}.nr1{margin-right:-.25rem}.nr2{margin-right:-.5rem}.nr3{margin-right:-1rem}.nr4{margin-right:-2rem}.nr5{margin-right:-4rem}.nr6{margin-right:-8rem}.nr7{margin-right:-16rem}.nb1{margin-bottom:-.25rem}.nb2{margin-bottom:-.5rem}.nb3{margin-bottom:-1rem}.nb4{margin-bottom:-2rem}.nb5{margin-bottom:-4rem}.nb6{margin-bottom:-8rem}.nb7{margin-bottom:-16rem}.nt1{margin-top:-.25rem}.nt2{margin-top:-.5rem}.nt3{margin-top:-1rem}.nt4{margin-top:-2rem}.nt5{margin-top:-4rem}.nt6{margin-top:-8rem}.nt7{margin-top:-16rem}.collapse{border-collapse:collapse;border-spacing:0}.striped--light-silver:nth-child(odd){background-color:#aaa}.striped--moon-gray:nth-child(odd){background-color:#ccc}.striped--light-gray:nth-child(odd){background-color:#eee}.striped--near-white:nth-child(odd){background-color:#f4f4f4}.stripe-light:nth-child(odd){background-color:hsla(0,0%,100%,.1)}.stripe-dark:nth-child(odd){background-color:rgba(0,0,0,.1)}.strike{text-decoration:line-through}.underline{text-decoration:underline}.no-underline{text-decoration:none}.tl{text-align:left}.tr{text-align:right}.tc{text-align:center}.ttc{text-transform:capitalize}.ttl{text-transform:lowercase}.ttu{text-transform:uppercase}.ttn{text-transform:none}.f-6,.f-headline{font-size:6rem}.f-5,.f-subheadline{font-size:5rem}.f1{font-size:3rem}.f2{font-size:2.25rem}.f3{font-size:1.5rem}.f4{font-size:1.25rem}.f5{font-size:1rem}.f6{font-size:.875rem}.f7{font-size:.75rem}.measure{max-width:30em}.measure-wide{max-width:34em}.measure-narrow{max-width:20em}.indent{text-indent:1em;margin-top:0;margin-bottom:0}.small-caps{font-variant:small-caps}.truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.overflow-container{overflow-y:scroll}.center{margin-right:auto;margin-left:auto}.clip{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal{white-space:normal}.nowrap{white-space:nowrap}.pre{white-space:pre}.v-base{vertical-align:baseline}.v-mid{vertical-align:middle}.v-top{vertical-align:top}.v-btm{vertical-align:bottom}.dim{opacity:1}.dim,.dim:focus,.dim:hover{-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.dim:focus,.dim:hover{opacity:.5}.dim:active,.dim:focus,.dim:hover{-webkit-backface-visibility:hidden;backface-visibility:hidden}.dim:active{opacity:.8;-webkit-transition:opacity .15s ease-out;transition:opacity .15s ease-out}.glow,.glow:focus,.glow:hover{-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.glow:focus,.glow:hover{opacity:1}.hide-child .child{opacity:0;-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.hide-child:active .child,.hide-child:focus .child,.hide-child:hover .child{opacity:1;-webkit-transition:opacity .15s ease-in;transition:opacity .15s ease-in}.underline-hover:focus,.underline-hover:hover{text-decoration:underline}.grow{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:-webkit-transform .25s ease-out;transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.grow:focus,.grow:hover{-webkit-transform:scale(1.05);transform:scale(1.05)}.grow:active{-webkit-transform:scale(.9);transform:scale(.9)}.grow-large{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:-webkit-transform .25s ease-in-out;transition:-webkit-transform .25s ease-in-out;transition:transform .25s ease-in-out;transition:transform .25s ease-in-out,-webkit-transform .25s ease-in-out}.grow-large:focus,.grow-large:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.grow-large:active{-webkit-transform:scale(.95);transform:scale(.95)}.pointer:hover,.shadow-hover{cursor:pointer}.shadow-hover{position:relative;-webkit-transition:all .5s cubic-bezier(.165,.84,.44,1);transition:all .5s cubic-bezier(.165,.84,.44,1)}.shadow-hover:after{content:"";box-shadow:0 0 16px 2px rgba(0,0,0,.2);opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1;-webkit-transition:opacity .5s cubic-bezier(.165,.84,.44,1);transition:opacity .5s cubic-bezier(.165,.84,.44,1)}.shadow-hover:focus:after,.shadow-hover:hover:after{opacity:1}.bg-animate,.bg-animate:focus,.bg-animate:hover{-webkit-transition:background-color .15s ease-in-out;transition:background-color .15s ease-in-out}.z-0{z-index:0}.z-1{z-index:1}.z-2{z-index:2}.z-3{z-index:3}.z-4{z-index:4}.z-5{z-index:5}.z-999{z-index:999}.z-9999{z-index:9999}.z-max{z-index:2147483647}.z-inherit{z-index:inherit}.z-initial{z-index:auto}.z-unset{z-index:unset}.nested-copy-line-height ol,.nested-copy-line-height p,.nested-copy-line-height ul{line-height:1.5}.nested-headline-line-height h1,.nested-headline-line-height h2,.nested-headline-line-height h3,.nested-headline-line-height h4,.nested-headline-line-height h5,.nested-headline-line-height h6{line-height:1.25}.nested-list-reset ol,.nested-list-reset ul{padding-left:0;margin-left:0;list-style-type:none}.nested-copy-indent p+p{text-indent:1em;margin-top:0;margin-bottom:0}.nested-copy-seperator p+p{margin-top:1.5em}.nested-img img{width:100%;max-width:100%;display:block}.nested-links a{color:#357edd;-webkit-transition:color .15s ease-in;transition:color .15s ease-in}.nested-links a:focus,.nested-links a:hover{color:#96ccff;-webkit-transition:color .15s ease-in;transition:color .15s ease-in}.debug *{outline:1px solid gold}.debug-white *{outline:1px solid #fff}.debug-black *{outline:1px solid #000}.debug-grid{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTRDOTY4N0U2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTRDOTY4N0Q2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3NjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3NzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsBS+GMAAAAjSURBVHjaYvz//z8DLsD4gcGXiYEAGBIKGBne//fFpwAgwAB98AaF2pjlUQAAAABJRU5ErkJggg==) repeat 0 0}.debug-grid-16{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODYyRjhERDU2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODYyRjhERDQ2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QTY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3QjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvCS01IAAABMSURBVHjaYmR4/5+BFPBfAMFm/MBgx8RAGWCn1AAmSg34Q6kBDKMGMDCwICeMIemF/5QawEipAWwUhwEjMDvbAWlWkvVBwu8vQIABAEwBCph8U6c0AAAAAElFTkSuQmCC) repeat 0 0}.debug-grid-8-solid{background:#fff url(data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAAAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzExMSA3OS4xNTgzMjUsIDIwMTUvMDkvMTAtMDE6MTA6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIxMjI0OTczNjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIxMjI0OTc0NjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjEyMjQ5NzE2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjEyMjQ5NzI2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAbGhopHSlBJiZBQi8vL0JHPz4+P0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHAR0pKTQmND8oKD9HPzU/R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0f/wAARCAAIAAgDASIAAhEBAxEB/8QAWQABAQAAAAAAAAAAAAAAAAAAAAYBAQEAAAAAAAAAAAAAAAAAAAIEEAEBAAMBAAAAAAAAAAAAAAABADECA0ERAAEDBQAAAAAAAAAAAAAAAAARITFBUWESIv/aAAwDAQACEQMRAD8AoOnTV1QTD7JJshP3vSM3P//Z) repeat 0 0}.debug-grid-16-solid{background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzY3MkJEN0U2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzY3MkJEN0Y2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3RDY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pve6J3kAAAAzSURBVHjaYvz//z8D0UDsMwMjSRoYP5Gq4SPNbRjVMEQ1fCRDg+in/6+J1AJUxsgAEGAA31BAJMS0GYEAAAAASUVORK5CYII=) repeat 0 0}@media screen and (min-width:30em){.aspect-ratio-ns{height:0;position:relative}.aspect-ratio--16x9-ns{padding-bottom:56.25%}.aspect-ratio--9x16-ns{padding-bottom:177.77%}.aspect-ratio--4x3-ns{padding-bottom:75%}.aspect-ratio--3x4-ns{padding-bottom:133.33%}.aspect-ratio--6x4-ns{padding-bottom:66.6%}.aspect-ratio--4x6-ns{padding-bottom:150%}.aspect-ratio--8x5-ns{padding-bottom:62.5%}.aspect-ratio--5x8-ns{padding-bottom:160%}.aspect-ratio--7x5-ns{padding-bottom:71.42%}.aspect-ratio--5x7-ns{padding-bottom:140%}.aspect-ratio--1x1-ns{padding-bottom:100%}.aspect-ratio--object-ns{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover-ns{background-size:cover!important}.contain-ns{background-size:contain!important}.bg-center-ns{background-position:50%}.bg-center-ns,.bg-top-ns{background-repeat:no-repeat}.bg-top-ns{background-position:top}.bg-right-ns{background-position:100%}.bg-bottom-ns,.bg-right-ns{background-repeat:no-repeat}.bg-bottom-ns{background-position:bottom}.bg-left-ns{background-repeat:no-repeat;background-position:0}.outline-ns{outline:1px solid}.outline-transparent-ns{outline:1px solid transparent}.outline-0-ns{outline:0}.ba-ns{border-style:solid;border-width:1px}.bt-ns{border-top-style:solid;border-top-width:1px}.br-ns{border-right-style:solid;border-right-width:1px}.bb-ns{border-bottom-style:solid;border-bottom-width:1px}.bl-ns{border-left-style:solid;border-left-width:1px}.bn-ns{border-style:none;border-width:0}.br0-ns{border-radius:0}.br1-ns{border-radius:.125rem}.br2-ns{border-radius:.25rem}.br3-ns{border-radius:.5rem}.br4-ns{border-radius:1rem}.br-100-ns{border-radius:100%}.br-pill-ns{border-radius:9999px}.br--bottom-ns{border-top-left-radius:0;border-top-right-radius:0}.br--top-ns{border-bottom-right-radius:0}.br--right-ns,.br--top-ns{border-bottom-left-radius:0}.br--right-ns{border-top-left-radius:0}.br--left-ns{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted-ns{border-style:dotted}.b--dashed-ns{border-style:dashed}.b--solid-ns{border-style:solid}.b--none-ns{border-style:none}.bw0-ns{border-width:0}.bw1-ns{border-width:.125rem}.bw2-ns{border-width:.25rem}.bw3-ns{border-width:.5rem}.bw4-ns{border-width:1rem}.bw5-ns{border-width:2rem}.bt-0-ns{border-top-width:0}.br-0-ns{border-right-width:0}.bb-0-ns{border-bottom-width:0}.bl-0-ns{border-left-width:0}.shadow-1-ns{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-ns{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-ns{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-ns{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-ns{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.top-0-ns{top:0}.left-0-ns{left:0}.right-0-ns{right:0}.bottom-0-ns{bottom:0}.top-1-ns{top:1rem}.left-1-ns{left:1rem}.right-1-ns{right:1rem}.bottom-1-ns{bottom:1rem}.top-2-ns{top:2rem}.left-2-ns{left:2rem}.right-2-ns{right:2rem}.bottom-2-ns{bottom:2rem}.top--1-ns{top:-1rem}.right--1-ns{right:-1rem}.bottom--1-ns{bottom:-1rem}.left--1-ns{left:-1rem}.top--2-ns{top:-2rem}.right--2-ns{right:-2rem}.bottom--2-ns{bottom:-2rem}.left--2-ns{left:-2rem}.absolute--fill-ns{top:0;right:0;bottom:0;left:0}.cl-ns{clear:left}.cr-ns{clear:right}.cb-ns{clear:both}.cn-ns{clear:none}.dn-ns{display:none}.di-ns{display:inline}.db-ns{display:block}.dib-ns{display:inline-block}.dit-ns{display:inline-table}.dt-ns{display:table}.dtc-ns{display:table-cell}.dt-row-ns{display:table-row}.dt-row-group-ns{display:table-row-group}.dt-column-ns{display:table-column}.dt-column-group-ns{display:table-column-group}.dt--fixed-ns{table-layout:fixed;width:100%}.flex-ns{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex-ns{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.flex-auto-ns{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0;min-height:0}.flex-none-ns{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-column-ns{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.flex-row-ns{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.flex-wrap-ns{-ms-flex-wrap:wrap;flex-wrap:wrap}.items-start-ns{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.items-end-ns{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.items-center-ns{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.items-baseline-ns{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.items-stretch-ns{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.self-start-ns{-ms-flex-item-align:start;align-self:flex-start}.self-end-ns{-ms-flex-item-align:end;align-self:flex-end}.self-center-ns{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center}.self-baseline-ns{-ms-flex-item-align:baseline;align-self:baseline}.self-stretch-ns{-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch}.justify-start-ns{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.justify-end-ns{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.justify-center-ns{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-between-ns{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.justify-around-ns{-ms-flex-pack:distribute;justify-content:space-around}.content-start-ns{-ms-flex-line-pack:start;align-content:flex-start}.content-end-ns{-ms-flex-line-pack:end;align-content:flex-end}.content-center-ns{-ms-flex-line-pack:center;align-content:center}.content-between-ns{-ms-flex-line-pack:justify;align-content:space-between}.content-around-ns{-ms-flex-line-pack:distribute;align-content:space-around}.content-stretch-ns{-ms-flex-line-pack:stretch;align-content:stretch}.order-0-ns{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1-ns{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2-ns{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3-ns{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4-ns{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5-ns{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6-ns{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7-ns{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8-ns{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-last-ns{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.fl-ns{float:left}.fl-ns,.fr-ns{display:inline}.fr-ns{float:right}.fn-ns{float:none}.i-ns{font-style:italic}.fs-normal-ns{font-style:normal}.normal-ns{font-weight:400}.b-ns{font-weight:700}.fw1-ns{font-weight:100}.fw2-ns{font-weight:200}.fw3-ns{font-weight:300}.fw4-ns{font-weight:400}.fw5-ns{font-weight:500}.fw6-ns{font-weight:600}.fw7-ns{font-weight:700}.fw8-ns{font-weight:800}.fw9-ns{font-weight:900}.h1-ns{height:1rem}.h2-ns{height:2rem}.h3-ns{height:4rem}.h4-ns{height:8rem}.h5-ns{height:16rem}.h-25-ns{height:25%}.h-50-ns{height:50%}.h-75-ns{height:75%}.h-100-ns{height:100%}.min-h-100-ns{min-height:100%}.vh-25-ns{height:25vh}.vh-50-ns{height:50vh}.vh-75-ns{height:75vh}.vh-100-ns{height:100vh}.min-vh-100-ns{min-height:100vh}.h-auto-ns{height:auto}.h-inherit-ns{height:inherit}.tracked-ns{letter-spacing:.1em}.tracked-tight-ns{letter-spacing:-.05em}.tracked-mega-ns{letter-spacing:.25em}.lh-solid-ns{line-height:1}.lh-title-ns{line-height:1.25}.lh-copy-ns{line-height:1.5}.mw-100-ns{max-width:100%}.mw1-ns{max-width:1rem}.mw2-ns{max-width:2rem}.mw3-ns{max-width:4rem}.mw4-ns{max-width:8rem}.mw5-ns{max-width:16rem}.mw6-ns{max-width:32rem}.mw7-ns{max-width:48rem}.mw8-ns{max-width:64rem}.mw9-ns{max-width:96rem}.mw-none-ns{max-width:none}.w1-ns{width:1rem}.w2-ns{width:2rem}.w3-ns{width:4rem}.w4-ns{width:8rem}.w5-ns{width:16rem}.w-10-ns{width:10%}.w-20-ns{width:20%}.w-25-ns{width:25%}.w-30-ns{width:30%}.w-33-ns{width:33%}.w-34-ns{width:34%}.w-40-ns{width:40%}.w-50-ns{width:50%}.w-60-ns{width:60%}.w-70-ns{width:70%}.w-75-ns{width:75%}.w-80-ns{width:80%}.w-90-ns{width:90%}.w-100-ns{width:100%}.w-third-ns{width:33.33333%}.w-two-thirds-ns{width:66.66667%}.w-auto-ns{width:auto}.overflow-visible-ns{overflow:visible}.overflow-hidden-ns{overflow:hidden}.overflow-scroll-ns{overflow:scroll}.overflow-auto-ns{overflow:auto}.overflow-x-visible-ns{overflow-x:visible}.overflow-x-hidden-ns{overflow-x:hidden}.overflow-x-scroll-ns{overflow-x:scroll}.overflow-x-auto-ns{overflow-x:auto}.overflow-y-visible-ns{overflow-y:visible}.overflow-y-hidden-ns{overflow-y:hidden}.overflow-y-scroll-ns{overflow-y:scroll}.overflow-y-auto-ns{overflow-y:auto}.static-ns{position:static}.relative-ns{position:relative}.absolute-ns{position:absolute}.fixed-ns{position:fixed}.rotate-45-ns{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90-ns{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135-ns{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180-ns{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225-ns{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270-ns{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315-ns{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.pa0-ns{padding:0}.pa1-ns{padding:.25rem}.pa2-ns{padding:.5rem}.pa3-ns{padding:1rem}.pa4-ns{padding:2rem}.pa5-ns{padding:4rem}.pa6-ns{padding:8rem}.pa7-ns{padding:16rem}.pl0-ns{padding-left:0}.pl1-ns{padding-left:.25rem}.pl2-ns{padding-left:.5rem}.pl3-ns{padding-left:1rem}.pl4-ns{padding-left:2rem}.pl5-ns{padding-left:4rem}.pl6-ns{padding-left:8rem}.pl7-ns{padding-left:16rem}.pr0-ns{padding-right:0}.pr1-ns{padding-right:.25rem}.pr2-ns{padding-right:.5rem}.pr3-ns{padding-right:1rem}.pr4-ns{padding-right:2rem}.pr5-ns{padding-right:4rem}.pr6-ns{padding-right:8rem}.pr7-ns{padding-right:16rem}.pb0-ns{padding-bottom:0}.pb1-ns{padding-bottom:.25rem}.pb2-ns{padding-bottom:.5rem}.pb3-ns{padding-bottom:1rem}.pb4-ns{padding-bottom:2rem}.pb5-ns{padding-bottom:4rem}.pb6-ns{padding-bottom:8rem}.pb7-ns{padding-bottom:16rem}.pt0-ns{padding-top:0}.pt1-ns{padding-top:.25rem}.pt2-ns{padding-top:.5rem}.pt3-ns{padding-top:1rem}.pt4-ns{padding-top:2rem}.pt5-ns{padding-top:4rem}.pt6-ns{padding-top:8rem}.pt7-ns{padding-top:16rem}.pv0-ns{padding-top:0;padding-bottom:0}.pv1-ns{padding-top:.25rem;padding-bottom:.25rem}.pv2-ns{padding-top:.5rem;padding-bottom:.5rem}.pv3-ns{padding-top:1rem;padding-bottom:1rem}.pv4-ns{padding-top:2rem;padding-bottom:2rem}.pv5-ns{padding-top:4rem;padding-bottom:4rem}.pv6-ns{padding-top:8rem;padding-bottom:8rem}.pv7-ns{padding-top:16rem;padding-bottom:16rem}.ph0-ns{padding-left:0;padding-right:0}.ph1-ns{padding-left:.25rem;padding-right:.25rem}.ph2-ns{padding-left:.5rem;padding-right:.5rem}.ph3-ns{padding-left:1rem;padding-right:1rem}.ph4-ns{padding-left:2rem;padding-right:2rem}.ph5-ns{padding-left:4rem;padding-right:4rem}.ph6-ns{padding-left:8rem;padding-right:8rem}.ph7-ns{padding-left:16rem;padding-right:16rem}.ma0-ns{margin:0}.ma1-ns{margin:.25rem}.ma2-ns{margin:.5rem}.ma3-ns{margin:1rem}.ma4-ns{margin:2rem}.ma5-ns{margin:4rem}.ma6-ns{margin:8rem}.ma7-ns{margin:16rem}.ml0-ns{margin-left:0}.ml1-ns{margin-left:.25rem}.ml2-ns{margin-left:.5rem}.ml3-ns{margin-left:1rem}.ml4-ns{margin-left:2rem}.ml5-ns{margin-left:4rem}.ml6-ns{margin-left:8rem}.ml7-ns{margin-left:16rem}.mr0-ns{margin-right:0}.mr1-ns{margin-right:.25rem}.mr2-ns{margin-right:.5rem}.mr3-ns{margin-right:1rem}.mr4-ns{margin-right:2rem}.mr5-ns{margin-right:4rem}.mr6-ns{margin-right:8rem}.mr7-ns{margin-right:16rem}.mb0-ns{margin-bottom:0}.mb1-ns{margin-bottom:.25rem}.mb2-ns{margin-bottom:.5rem}.mb3-ns{margin-bottom:1rem}.mb4-ns{margin-bottom:2rem}.mb5-ns{margin-bottom:4rem}.mb6-ns{margin-bottom:8rem}.mb7-ns{margin-bottom:16rem}.mt0-ns{margin-top:0}.mt1-ns{margin-top:.25rem}.mt2-ns{margin-top:.5rem}.mt3-ns{margin-top:1rem}.mt4-ns{margin-top:2rem}.mt5-ns{margin-top:4rem}.mt6-ns{margin-top:8rem}.mt7-ns{margin-top:16rem}.mv0-ns{margin-top:0;margin-bottom:0}.mv1-ns{margin-top:.25rem;margin-bottom:.25rem}.mv2-ns{margin-top:.5rem;margin-bottom:.5rem}.mv3-ns{margin-top:1rem;margin-bottom:1rem}.mv4-ns{margin-top:2rem;margin-bottom:2rem}.mv5-ns{margin-top:4rem;margin-bottom:4rem}.mv6-ns{margin-top:8rem;margin-bottom:8rem}.mv7-ns{margin-top:16rem;margin-bottom:16rem}.mh0-ns{margin-left:0;margin-right:0}.mh1-ns{margin-left:.25rem;margin-right:.25rem}.mh2-ns{margin-left:.5rem;margin-right:.5rem}.mh3-ns{margin-left:1rem;margin-right:1rem}.mh4-ns{margin-left:2rem;margin-right:2rem}.mh5-ns{margin-left:4rem;margin-right:4rem}.mh6-ns{margin-left:8rem;margin-right:8rem}.mh7-ns{margin-left:16rem;margin-right:16rem}.na1-ns{margin:-.25rem}.na2-ns{margin:-.5rem}.na3-ns{margin:-1rem}.na4-ns{margin:-2rem}.na5-ns{margin:-4rem}.na6-ns{margin:-8rem}.na7-ns{margin:-16rem}.nl1-ns{margin-left:-.25rem}.nl2-ns{margin-left:-.5rem}.nl3-ns{margin-left:-1rem}.nl4-ns{margin-left:-2rem}.nl5-ns{margin-left:-4rem}.nl6-ns{margin-left:-8rem}.nl7-ns{margin-left:-16rem}.nr1-ns{margin-right:-.25rem}.nr2-ns{margin-right:-.5rem}.nr3-ns{margin-right:-1rem}.nr4-ns{margin-right:-2rem}.nr5-ns{margin-right:-4rem}.nr6-ns{margin-right:-8rem}.nr7-ns{margin-right:-16rem}.nb1-ns{margin-bottom:-.25rem}.nb2-ns{margin-bottom:-.5rem}.nb3-ns{margin-bottom:-1rem}.nb4-ns{margin-bottom:-2rem}.nb5-ns{margin-bottom:-4rem}.nb6-ns{margin-bottom:-8rem}.nb7-ns{margin-bottom:-16rem}.nt1-ns{margin-top:-.25rem}.nt2-ns{margin-top:-.5rem}.nt3-ns{margin-top:-1rem}.nt4-ns{margin-top:-2rem}.nt5-ns{margin-top:-4rem}.nt6-ns{margin-top:-8rem}.nt7-ns{margin-top:-16rem}.strike-ns{text-decoration:line-through}.underline-ns{text-decoration:underline}.no-underline-ns{text-decoration:none}.tl-ns{text-align:left}.tr-ns{text-align:right}.tc-ns{text-align:center}.ttc-ns{text-transform:capitalize}.ttl-ns{text-transform:lowercase}.ttu-ns{text-transform:uppercase}.ttn-ns{text-transform:none}.f-6-ns,.f-headline-ns{font-size:6rem}.f-5-ns,.f-subheadline-ns{font-size:5rem}.f1-ns{font-size:3rem}.f2-ns{font-size:2.25rem}.f3-ns{font-size:1.5rem}.f4-ns{font-size:1.25rem}.f5-ns{font-size:1rem}.f6-ns{font-size:.875rem}.f7-ns{font-size:.75rem}.measure-ns{max-width:30em}.measure-wide-ns{max-width:34em}.measure-narrow-ns{max-width:20em}.indent-ns{text-indent:1em;margin-top:0;margin-bottom:0}.small-caps-ns{font-variant:small-caps}.truncate-ns{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.center-ns{margin-right:auto;margin-left:auto}.clip-ns{position:fixed!important;position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal-ns{white-space:normal}.nowrap-ns{white-space:nowrap}.pre-ns{white-space:pre}.v-base-ns{vertical-align:baseline}.v-mid-ns{vertical-align:middle}.v-top-ns{vertical-align:top}.v-btm-ns{vertical-align:bottom}}@media screen and (min-width:30em) and (max-width:60em){.aspect-ratio-m{height:0;position:relative}.aspect-ratio--16x9-m{padding-bottom:56.25%}.aspect-ratio--9x16-m{padding-bottom:177.77%}.aspect-ratio--4x3-m{padding-bottom:75%}.aspect-ratio--3x4-m{padding-bottom:133.33%}.aspect-ratio--6x4-m{padding-bottom:66.6%}.aspect-ratio--4x6-m{padding-bottom:150%}.aspect-ratio--8x5-m{padding-bottom:62.5%}.aspect-ratio--5x8-m{padding-bottom:160%}.aspect-ratio--7x5-m{padding-bottom:71.42%}.aspect-ratio--5x7-m{padding-bottom:140%}.aspect-ratio--1x1-m{padding-bottom:100%}.aspect-ratio--object-m{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover-m{background-size:cover!important}.contain-m{background-size:contain!important}.bg-center-m{background-position:50%}.bg-center-m,.bg-top-m{background-repeat:no-repeat}.bg-top-m{background-position:top}.bg-right-m{background-position:100%}.bg-bottom-m,.bg-right-m{background-repeat:no-repeat}.bg-bottom-m{background-position:bottom}.bg-left-m{background-repeat:no-repeat;background-position:0}.outline-m{outline:1px solid}.outline-transparent-m{outline:1px solid transparent}.outline-0-m{outline:0}.ba-m{border-style:solid;border-width:1px}.bt-m{border-top-style:solid;border-top-width:1px}.br-m{border-right-style:solid;border-right-width:1px}.bb-m{border-bottom-style:solid;border-bottom-width:1px}.bl-m{border-left-style:solid;border-left-width:1px}.bn-m{border-style:none;border-width:0}.br0-m{border-radius:0}.br1-m{border-radius:.125rem}.br2-m{border-radius:.25rem}.br3-m{border-radius:.5rem}.br4-m{border-radius:1rem}.br-100-m{border-radius:100%}.br-pill-m{border-radius:9999px}.br--bottom-m{border-top-left-radius:0;border-top-right-radius:0}.br--top-m{border-bottom-right-radius:0}.br--right-m,.br--top-m{border-bottom-left-radius:0}.br--right-m{border-top-left-radius:0}.br--left-m{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted-m{border-style:dotted}.b--dashed-m{border-style:dashed}.b--solid-m{border-style:solid}.b--none-m{border-style:none}.bw0-m{border-width:0}.bw1-m{border-width:.125rem}.bw2-m{border-width:.25rem}.bw3-m{border-width:.5rem}.bw4-m{border-width:1rem}.bw5-m{border-width:2rem}.bt-0-m{border-top-width:0}.br-0-m{border-right-width:0}.bb-0-m{border-bottom-width:0}.bl-0-m{border-left-width:0}.shadow-1-m{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-m{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-m{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-m{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-m{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.top-0-m{top:0}.left-0-m{left:0}.right-0-m{right:0}.bottom-0-m{bottom:0}.top-1-m{top:1rem}.left-1-m{left:1rem}.right-1-m{right:1rem}.bottom-1-m{bottom:1rem}.top-2-m{top:2rem}.left-2-m{left:2rem}.right-2-m{right:2rem}.bottom-2-m{bottom:2rem}.top--1-m{top:-1rem}.right--1-m{right:-1rem}.bottom--1-m{bottom:-1rem}.left--1-m{left:-1rem}.top--2-m{top:-2rem}.right--2-m{right:-2rem}.bottom--2-m{bottom:-2rem}.left--2-m{left:-2rem}.absolute--fill-m{top:0;right:0;bottom:0;left:0}.cl-m{clear:left}.cr-m{clear:right}.cb-m{clear:both}.cn-m{clear:none}.dn-m{display:none}.di-m{display:inline}.db-m{display:block}.dib-m{display:inline-block}.dit-m{display:inline-table}.dt-m{display:table}.dtc-m{display:table-cell}.dt-row-m{display:table-row}.dt-row-group-m{display:table-row-group}.dt-column-m{display:table-column}.dt-column-group-m{display:table-column-group}.dt--fixed-m{table-layout:fixed;width:100%}.flex-m{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex-m{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.flex-auto-m{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0;min-height:0}.flex-none-m{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-column-m{-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column}.flex-column-m,.flex-row-m{-webkit-box-direction:normal}.flex-row-m{-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row}.flex-wrap-m{-ms-flex-wrap:wrap;flex-wrap:wrap}.items-start-m{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.items-end-m{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.items-center-m{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.items-baseline-m{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.items-stretch-m{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.self-start-m{-ms-flex-item-align:start;align-self:flex-start}.self-end-m{-ms-flex-item-align:end;align-self:flex-end}.self-center-m{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center}.self-baseline-m{-ms-flex-item-align:baseline;align-self:baseline}.self-stretch-m{-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch}.justify-start-m{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.justify-end-m{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.justify-center-m{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-between-m{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.justify-around-m{-ms-flex-pack:distribute;justify-content:space-around}.content-start-m{-ms-flex-line-pack:start;align-content:flex-start}.content-end-m{-ms-flex-line-pack:end;align-content:flex-end}.content-center-m{-ms-flex-line-pack:center;align-content:center}.content-between-m{-ms-flex-line-pack:justify;align-content:space-between}.content-around-m{-ms-flex-line-pack:distribute;align-content:space-around}.content-stretch-m{-ms-flex-line-pack:stretch;align-content:stretch}.order-0-m{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1-m{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2-m{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3-m{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4-m{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5-m{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6-m{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7-m{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8-m{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-last-m{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.fl-m{float:left}.fl-m,.fr-m{display:inline}.fr-m{float:right}.fn-m{float:none}.i-m{font-style:italic}.fs-normal-m{font-style:normal}.normal-m{font-weight:400}.b-m{font-weight:700}.fw1-m{font-weight:100}.fw2-m{font-weight:200}.fw3-m{font-weight:300}.fw4-m{font-weight:400}.fw5-m{font-weight:500}.fw6-m{font-weight:600}.fw7-m{font-weight:700}.fw8-m{font-weight:800}.fw9-m{font-weight:900}.h1-m{height:1rem}.h2-m{height:2rem}.h3-m{height:4rem}.h4-m{height:8rem}.h5-m{height:16rem}.h-25-m{height:25%}.h-50-m{height:50%}.h-75-m{height:75%}.h-100-m{height:100%}.min-h-100-m{min-height:100%}.vh-25-m{height:25vh}.vh-50-m{height:50vh}.vh-75-m{height:75vh}.vh-100-m{height:100vh}.min-vh-100-m{min-height:100vh}.h-auto-m{height:auto}.h-inherit-m{height:inherit}.tracked-m{letter-spacing:.1em}.tracked-tight-m{letter-spacing:-.05em}.tracked-mega-m{letter-spacing:.25em}.lh-solid-m{line-height:1}.lh-title-m{line-height:1.25}.lh-copy-m{line-height:1.5}.mw-100-m{max-width:100%}.mw1-m{max-width:1rem}.mw2-m{max-width:2rem}.mw3-m{max-width:4rem}.mw4-m{max-width:8rem}.mw5-m{max-width:16rem}.mw6-m{max-width:32rem}.mw7-m{max-width:48rem}.mw8-m{max-width:64rem}.mw9-m{max-width:96rem}.mw-none-m{max-width:none}.w1-m{width:1rem}.w2-m{width:2rem}.w3-m{width:4rem}.w4-m{width:8rem}.w5-m{width:16rem}.w-10-m{width:10%}.w-20-m{width:20%}.w-25-m{width:25%}.w-30-m{width:30%}.w-33-m{width:33%}.w-34-m{width:34%}.w-40-m{width:40%}.w-50-m{width:50%}.w-60-m{width:60%}.w-70-m{width:70%}.w-75-m{width:75%}.w-80-m{width:80%}.w-90-m{width:90%}.w-100-m{width:100%}.w-third-m{width:33.33333%}.w-two-thirds-m{width:66.66667%}.w-auto-m{width:auto}.overflow-visible-m{overflow:visible}.overflow-hidden-m{overflow:hidden}.overflow-scroll-m{overflow:scroll}.overflow-auto-m{overflow:auto}.overflow-x-visible-m{overflow-x:visible}.overflow-x-hidden-m{overflow-x:hidden}.overflow-x-scroll-m{overflow-x:scroll}.overflow-x-auto-m{overflow-x:auto}.overflow-y-visible-m{overflow-y:visible}.overflow-y-hidden-m{overflow-y:hidden}.overflow-y-scroll-m{overflow-y:scroll}.overflow-y-auto-m{overflow-y:auto}.static-m{position:static}.relative-m{position:relative}.absolute-m{position:absolute}.fixed-m{position:fixed}.rotate-45-m{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90-m{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135-m{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180-m{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225-m{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270-m{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315-m{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.pa0-m{padding:0}.pa1-m{padding:.25rem}.pa2-m{padding:.5rem}.pa3-m{padding:1rem}.pa4-m{padding:2rem}.pa5-m{padding:4rem}.pa6-m{padding:8rem}.pa7-m{padding:16rem}.pl0-m{padding-left:0}.pl1-m{padding-left:.25rem}.pl2-m{padding-left:.5rem}.pl3-m{padding-left:1rem}.pl4-m{padding-left:2rem}.pl5-m{padding-left:4rem}.pl6-m{padding-left:8rem}.pl7-m{padding-left:16rem}.pr0-m{padding-right:0}.pr1-m{padding-right:.25rem}.pr2-m{padding-right:.5rem}.pr3-m{padding-right:1rem}.pr4-m{padding-right:2rem}.pr5-m{padding-right:4rem}.pr6-m{padding-right:8rem}.pr7-m{padding-right:16rem}.pb0-m{padding-bottom:0}.pb1-m{padding-bottom:.25rem}.pb2-m{padding-bottom:.5rem}.pb3-m{padding-bottom:1rem}.pb4-m{padding-bottom:2rem}.pb5-m{padding-bottom:4rem}.pb6-m{padding-bottom:8rem}.pb7-m{padding-bottom:16rem}.pt0-m{padding-top:0}.pt1-m{padding-top:.25rem}.pt2-m{padding-top:.5rem}.pt3-m{padding-top:1rem}.pt4-m{padding-top:2rem}.pt5-m{padding-top:4rem}.pt6-m{padding-top:8rem}.pt7-m{padding-top:16rem}.pv0-m{padding-top:0;padding-bottom:0}.pv1-m{padding-top:.25rem;padding-bottom:.25rem}.pv2-m{padding-top:.5rem;padding-bottom:.5rem}.pv3-m{padding-top:1rem;padding-bottom:1rem}.pv4-m{padding-top:2rem;padding-bottom:2rem}.pv5-m{padding-top:4rem;padding-bottom:4rem}.pv6-m{padding-top:8rem;padding-bottom:8rem}.pv7-m{padding-top:16rem;padding-bottom:16rem}.ph0-m{padding-left:0;padding-right:0}.ph1-m{padding-left:.25rem;padding-right:.25rem}.ph2-m{padding-left:.5rem;padding-right:.5rem}.ph3-m{padding-left:1rem;padding-right:1rem}.ph4-m{padding-left:2rem;padding-right:2rem}.ph5-m{padding-left:4rem;padding-right:4rem}.ph6-m{padding-left:8rem;padding-right:8rem}.ph7-m{padding-left:16rem;padding-right:16rem}.ma0-m{margin:0}.ma1-m{margin:.25rem}.ma2-m{margin:.5rem}.ma3-m{margin:1rem}.ma4-m{margin:2rem}.ma5-m{margin:4rem}.ma6-m{margin:8rem}.ma7-m{margin:16rem}.ml0-m{margin-left:0}.ml1-m{margin-left:.25rem}.ml2-m{margin-left:.5rem}.ml3-m{margin-left:1rem}.ml4-m{margin-left:2rem}.ml5-m{margin-left:4rem}.ml6-m{margin-left:8rem}.ml7-m{margin-left:16rem}.mr0-m{margin-right:0}.mr1-m{margin-right:.25rem}.mr2-m{margin-right:.5rem}.mr3-m{margin-right:1rem}.mr4-m{margin-right:2rem}.mr5-m{margin-right:4rem}.mr6-m{margin-right:8rem}.mr7-m{margin-right:16rem}.mb0-m{margin-bottom:0}.mb1-m{margin-bottom:.25rem}.mb2-m{margin-bottom:.5rem}.mb3-m{margin-bottom:1rem}.mb4-m{margin-bottom:2rem}.mb5-m{margin-bottom:4rem}.mb6-m{margin-bottom:8rem}.mb7-m{margin-bottom:16rem}.mt0-m{margin-top:0}.mt1-m{margin-top:.25rem}.mt2-m{margin-top:.5rem}.mt3-m{margin-top:1rem}.mt4-m{margin-top:2rem}.mt5-m{margin-top:4rem}.mt6-m{margin-top:8rem}.mt7-m{margin-top:16rem}.mv0-m{margin-top:0;margin-bottom:0}.mv1-m{margin-top:.25rem;margin-bottom:.25rem}.mv2-m{margin-top:.5rem;margin-bottom:.5rem}.mv3-m{margin-top:1rem;margin-bottom:1rem}.mv4-m{margin-top:2rem;margin-bottom:2rem}.mv5-m{margin-top:4rem;margin-bottom:4rem}.mv6-m{margin-top:8rem;margin-bottom:8rem}.mv7-m{margin-top:16rem;margin-bottom:16rem}.mh0-m{margin-left:0;margin-right:0}.mh1-m{margin-left:.25rem;margin-right:.25rem}.mh2-m{margin-left:.5rem;margin-right:.5rem}.mh3-m{margin-left:1rem;margin-right:1rem}.mh4-m{margin-left:2rem;margin-right:2rem}.mh5-m{margin-left:4rem;margin-right:4rem}.mh6-m{margin-left:8rem;margin-right:8rem}.mh7-m{margin-left:16rem;margin-right:16rem}.na1-m{margin:-.25rem}.na2-m{margin:-.5rem}.na3-m{margin:-1rem}.na4-m{margin:-2rem}.na5-m{margin:-4rem}.na6-m{margin:-8rem}.na7-m{margin:-16rem}.nl1-m{margin-left:-.25rem}.nl2-m{margin-left:-.5rem}.nl3-m{margin-left:-1rem}.nl4-m{margin-left:-2rem}.nl5-m{margin-left:-4rem}.nl6-m{margin-left:-8rem}.nl7-m{margin-left:-16rem}.nr1-m{margin-right:-.25rem}.nr2-m{margin-right:-.5rem}.nr3-m{margin-right:-1rem}.nr4-m{margin-right:-2rem}.nr5-m{margin-right:-4rem}.nr6-m{margin-right:-8rem}.nr7-m{margin-right:-16rem}.nb1-m{margin-bottom:-.25rem}.nb2-m{margin-bottom:-.5rem}.nb3-m{margin-bottom:-1rem}.nb4-m{margin-bottom:-2rem}.nb5-m{margin-bottom:-4rem}.nb6-m{margin-bottom:-8rem}.nb7-m{margin-bottom:-16rem}.nt1-m{margin-top:-.25rem}.nt2-m{margin-top:-.5rem}.nt3-m{margin-top:-1rem}.nt4-m{margin-top:-2rem}.nt5-m{margin-top:-4rem}.nt6-m{margin-top:-8rem}.nt7-m{margin-top:-16rem}.strike-m{text-decoration:line-through}.underline-m{text-decoration:underline}.no-underline-m{text-decoration:none}.tl-m{text-align:left}.tr-m{text-align:right}.tc-m{text-align:center}.ttc-m{text-transform:capitalize}.ttl-m{text-transform:lowercase}.ttu-m{text-transform:uppercase}.ttn-m{text-transform:none}.f-6-m,.f-headline-m{font-size:6rem}.f-5-m,.f-subheadline-m{font-size:5rem}.f1-m{font-size:3rem}.f2-m{font-size:2.25rem}.f3-m{font-size:1.5rem}.f4-m{font-size:1.25rem}.f5-m{font-size:1rem}.f6-m{font-size:.875rem}.f7-m{font-size:.75rem}.measure-m{max-width:30em}.measure-wide-m{max-width:34em}.measure-narrow-m{max-width:20em}.indent-m{text-indent:1em;margin-top:0;margin-bottom:0}.small-caps-m{font-variant:small-caps}.truncate-m{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.center-m{margin-right:auto;margin-left:auto}.clip-m{position:fixed!important;position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal-m{white-space:normal}.nowrap-m{white-space:nowrap}.pre-m{white-space:pre}.v-base-m{vertical-align:baseline}.v-mid-m{vertical-align:middle}.v-top-m{vertical-align:top}.v-btm-m{vertical-align:bottom}}@media screen and (min-width:60em){.aspect-ratio-l{height:0;position:relative}.aspect-ratio--16x9-l{padding-bottom:56.25%}.aspect-ratio--9x16-l{padding-bottom:177.77%}.aspect-ratio--4x3-l{padding-bottom:75%}.aspect-ratio--3x4-l{padding-bottom:133.33%}.aspect-ratio--6x4-l{padding-bottom:66.6%}.aspect-ratio--4x6-l{padding-bottom:150%}.aspect-ratio--8x5-l{padding-bottom:62.5%}.aspect-ratio--5x8-l{padding-bottom:160%}.aspect-ratio--7x5-l{padding-bottom:71.42%}.aspect-ratio--5x7-l{padding-bottom:140%}.aspect-ratio--1x1-l{padding-bottom:100%}.aspect-ratio--object-l{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover-l{background-size:cover!important}.contain-l{background-size:contain!important}.bg-center-l{background-position:50%}.bg-center-l,.bg-top-l{background-repeat:no-repeat}.bg-top-l{background-position:top}.bg-right-l{background-position:100%}.bg-bottom-l,.bg-right-l{background-repeat:no-repeat}.bg-bottom-l{background-position:bottom}.bg-left-l{background-repeat:no-repeat;background-position:0}.outline-l{outline:1px solid}.outline-transparent-l{outline:1px solid transparent}.outline-0-l{outline:0}.ba-l{border-style:solid;border-width:1px}.bt-l{border-top-style:solid;border-top-width:1px}.br-l{border-right-style:solid;border-right-width:1px}.bb-l{border-bottom-style:solid;border-bottom-width:1px}.bl-l{border-left-style:solid;border-left-width:1px}.bn-l{border-style:none;border-width:0}.br0-l{border-radius:0}.br1-l{border-radius:.125rem}.br2-l{border-radius:.25rem}.br3-l{border-radius:.5rem}.br4-l{border-radius:1rem}.br-100-l{border-radius:100%}.br-pill-l{border-radius:9999px}.br--bottom-l{border-top-left-radius:0;border-top-right-radius:0}.br--top-l{border-bottom-right-radius:0}.br--right-l,.br--top-l{border-bottom-left-radius:0}.br--right-l{border-top-left-radius:0}.br--left-l{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted-l{border-style:dotted}.b--dashed-l{border-style:dashed}.b--solid-l{border-style:solid}.b--none-l{border-style:none}.bw0-l{border-width:0}.bw1-l{border-width:.125rem}.bw2-l{border-width:.25rem}.bw3-l{border-width:.5rem}.bw4-l{border-width:1rem}.bw5-l{border-width:2rem}.bt-0-l{border-top-width:0}.br-0-l{border-right-width:0}.bb-0-l{border-bottom-width:0}.bl-0-l{border-left-width:0}.shadow-1-l{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-l{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-l{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-l{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-l{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.top-0-l{top:0}.left-0-l{left:0}.right-0-l{right:0}.bottom-0-l{bottom:0}.top-1-l{top:1rem}.left-1-l{left:1rem}.right-1-l{right:1rem}.bottom-1-l{bottom:1rem}.top-2-l{top:2rem}.left-2-l{left:2rem}.right-2-l{right:2rem}.bottom-2-l{bottom:2rem}.top--1-l{top:-1rem}.right--1-l{right:-1rem}.bottom--1-l{bottom:-1rem}.left--1-l{left:-1rem}.top--2-l{top:-2rem}.right--2-l{right:-2rem}.bottom--2-l{bottom:-2rem}.left--2-l{left:-2rem}.absolute--fill-l{top:0;right:0;bottom:0;left:0}.cl-l{clear:left}.cr-l{clear:right}.cb-l{clear:both}.cn-l{clear:none}.dn-l{display:none}.di-l{display:inline}.db-l{display:block}.dib-l{display:inline-block}.dit-l{display:inline-table}.dt-l{display:table}.dtc-l{display:table-cell}.dt-row-l{display:table-row}.dt-row-group-l{display:table-row-group}.dt-column-l{display:table-column}.dt-column-group-l{display:table-column-group}.dt--fixed-l{table-layout:fixed;width:100%}.flex-l{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex-l{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.flex-auto-l{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0;min-height:0}.flex-none-l{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-column-l{-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column}.flex-column-l,.flex-row-l{-webkit-box-direction:normal}.flex-row-l{-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row}.flex-wrap-l{-ms-flex-wrap:wrap;flex-wrap:wrap}.items-start-l{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.items-end-l{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.items-center-l{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.items-baseline-l{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.items-stretch-l{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.self-start-l{-ms-flex-item-align:start;align-self:flex-start}.self-end-l{-ms-flex-item-align:end;align-self:flex-end}.self-center-l{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center}.self-baseline-l{-ms-flex-item-align:baseline;align-self:baseline}.self-stretch-l{-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch}.justify-start-l{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.justify-end-l{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.justify-center-l{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-between-l{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.justify-around-l{-ms-flex-pack:distribute;justify-content:space-around}.content-start-l{-ms-flex-line-pack:start;align-content:flex-start}.content-end-l{-ms-flex-line-pack:end;align-content:flex-end}.content-center-l{-ms-flex-line-pack:center;align-content:center}.content-between-l{-ms-flex-line-pack:justify;align-content:space-between}.content-around-l{-ms-flex-line-pack:distribute;align-content:space-around}.content-stretch-l{-ms-flex-line-pack:stretch;align-content:stretch}.order-0-l{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1-l{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2-l{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3-l{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4-l{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5-l{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6-l{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7-l{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8-l{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-last-l{-webkit-box-ordinal-group:100000;-ms-flex-order:99999;order:99999}.fl-l{float:left}.fl-l,.fr-l{display:inline}.fr-l{float:right}.fn-l{float:none}.i-l{font-style:italic}.fs-normal-l{font-style:normal}.normal-l{font-weight:400}.b-l{font-weight:700}.fw1-l{font-weight:100}.fw2-l{font-weight:200}.fw3-l{font-weight:300}.fw4-l{font-weight:400}.fw5-l{font-weight:500}.fw6-l{font-weight:600}.fw7-l{font-weight:700}.fw8-l{font-weight:800}.fw9-l{font-weight:900}.h1-l{height:1rem}.h2-l{height:2rem}.h3-l{height:4rem}.h4-l{height:8rem}.h5-l{height:16rem}.h-25-l{height:25%}.h-50-l{height:50%}.h-75-l{height:75%}.h-100-l{height:100%}.min-h-100-l{min-height:100%}.vh-25-l{height:25vh}.vh-50-l{height:50vh}.vh-75-l{height:75vh}.vh-100-l{height:100vh}.min-vh-100-l{min-height:100vh}.h-auto-l{height:auto}.h-inherit-l{height:inherit}.tracked-l{letter-spacing:.1em}.tracked-tight-l{letter-spacing:-.05em}.tracked-mega-l{letter-spacing:.25em}.lh-solid-l{line-height:1}.lh-title-l{line-height:1.25}.lh-copy-l{line-height:1.5}.mw-100-l{max-width:100%}.mw1-l{max-width:1rem}.mw2-l{max-width:2rem}.mw3-l{max-width:4rem}.mw4-l{max-width:8rem}.mw5-l{max-width:16rem}.mw6-l{max-width:32rem}.mw7-l{max-width:48rem}.mw8-l{max-width:64rem}.mw9-l{max-width:96rem}.mw-none-l{max-width:none}.w1-l{width:1rem}.w2-l{width:2rem}.w3-l{width:4rem}.w4-l{width:8rem}.w5-l{width:16rem}.w-10-l{width:10%}.w-20-l{width:20%}.w-25-l{width:25%}.w-30-l{width:30%}.w-33-l{width:33%}.w-34-l{width:34%}.w-40-l{width:40%}.w-50-l{width:50%}.w-60-l{width:60%}.w-70-l{width:70%}.w-75-l{width:75%}.w-80-l{width:80%}.w-90-l{width:90%}.w-100-l{width:100%}.w-third-l{width:33.33333%}.w-two-thirds-l{width:66.66667%}.w-auto-l{width:auto}.overflow-visible-l{overflow:visible}.overflow-hidden-l{overflow:hidden}.overflow-scroll-l{overflow:scroll}.overflow-auto-l{overflow:auto}.overflow-x-visible-l{overflow-x:visible}.overflow-x-hidden-l{overflow-x:hidden}.overflow-x-scroll-l{overflow-x:scroll}.overflow-x-auto-l{overflow-x:auto}.overflow-y-visible-l{overflow-y:visible}.overflow-y-hidden-l{overflow-y:hidden}.overflow-y-scroll-l{overflow-y:scroll}.overflow-y-auto-l{overflow-y:auto}.static-l{position:static}.relative-l{position:relative}.absolute-l{position:absolute}.fixed-l{position:fixed}.rotate-45-l{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90-l{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135-l{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180-l{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225-l{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270-l{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315-l{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.pa0-l{padding:0}.pa1-l{padding:.25rem}.pa2-l{padding:.5rem}.pa3-l{padding:1rem}.pa4-l{padding:2rem}.pa5-l{padding:4rem}.pa6-l{padding:8rem}.pa7-l{padding:16rem}.pl0-l{padding-left:0}.pl1-l{padding-left:.25rem}.pl2-l{padding-left:.5rem}.pl3-l{padding-left:1rem}.pl4-l{padding-left:2rem}.pl5-l{padding-left:4rem}.pl6-l{padding-left:8rem}.pl7-l{padding-left:16rem}.pr0-l{padding-right:0}.pr1-l{padding-right:.25rem}.pr2-l{padding-right:.5rem}.pr3-l{padding-right:1rem}.pr4-l{padding-right:2rem}.pr5-l{padding-right:4rem}.pr6-l{padding-right:8rem}.pr7-l{padding-right:16rem}.pb0-l{padding-bottom:0}.pb1-l{padding-bottom:.25rem}.pb2-l{padding-bottom:.5rem}.pb3-l{padding-bottom:1rem}.pb4-l{padding-bottom:2rem}.pb5-l{padding-bottom:4rem}.pb6-l{padding-bottom:8rem}.pb7-l{padding-bottom:16rem}.pt0-l{padding-top:0}.pt1-l{padding-top:.25rem}.pt2-l{padding-top:.5rem}.pt3-l{padding-top:1rem}.pt4-l{padding-top:2rem}.pt5-l{padding-top:4rem}.pt6-l{padding-top:8rem}.pt7-l{padding-top:16rem}.pv0-l{padding-top:0;padding-bottom:0}.pv1-l{padding-top:.25rem;padding-bottom:.25rem}.pv2-l{padding-top:.5rem;padding-bottom:.5rem}.pv3-l{padding-top:1rem;padding-bottom:1rem}.pv4-l{padding-top:2rem;padding-bottom:2rem}.pv5-l{padding-top:4rem;padding-bottom:4rem}.pv6-l{padding-top:8rem;padding-bottom:8rem}.pv7-l{padding-top:16rem;padding-bottom:16rem}.ph0-l{padding-left:0;padding-right:0}.ph1-l{padding-left:.25rem;padding-right:.25rem}.ph2-l{padding-left:.5rem;padding-right:.5rem}.ph3-l{padding-left:1rem;padding-right:1rem}.ph4-l{padding-left:2rem;padding-right:2rem}.ph5-l{padding-left:4rem;padding-right:4rem}.ph6-l{padding-left:8rem;padding-right:8rem}.ph7-l{padding-left:16rem;padding-right:16rem}.ma0-l{margin:0}.ma1-l{margin:.25rem}.ma2-l{margin:.5rem}.ma3-l{margin:1rem}.ma4-l{margin:2rem}.ma5-l{margin:4rem}.ma6-l{margin:8rem}.ma7-l{margin:16rem}.ml0-l{margin-left:0}.ml1-l{margin-left:.25rem}.ml2-l{margin-left:.5rem}.ml3-l{margin-left:1rem}.ml4-l{margin-left:2rem}.ml5-l{margin-left:4rem}.ml6-l{margin-left:8rem}.ml7-l{margin-left:16rem}.mr0-l{margin-right:0}.mr1-l{margin-right:.25rem}.mr2-l{margin-right:.5rem}.mr3-l{margin-right:1rem}.mr4-l{margin-right:2rem}.mr5-l{margin-right:4rem}.mr6-l{margin-right:8rem}.mr7-l{margin-right:16rem}.mb0-l{margin-bottom:0}.mb1-l{margin-bottom:.25rem}.mb2-l{margin-bottom:.5rem}.mb3-l{margin-bottom:1rem}.mb4-l{margin-bottom:2rem}.mb5-l{margin-bottom:4rem}.mb6-l{margin-bottom:8rem}.mb7-l{margin-bottom:16rem}.mt0-l{margin-top:0}.mt1-l{margin-top:.25rem}.mt2-l{margin-top:.5rem}.mt3-l{margin-top:1rem}.mt4-l{margin-top:2rem}.mt5-l{margin-top:4rem}.mt6-l{margin-top:8rem}.mt7-l{margin-top:16rem}.mv0-l{margin-top:0;margin-bottom:0}.mv1-l{margin-top:.25rem;margin-bottom:.25rem}.mv2-l{margin-top:.5rem;margin-bottom:.5rem}.mv3-l{margin-top:1rem;margin-bottom:1rem}.mv4-l{margin-top:2rem;margin-bottom:2rem}.mv5-l{margin-top:4rem;margin-bottom:4rem}.mv6-l{margin-top:8rem;margin-bottom:8rem}.mv7-l{margin-top:16rem;margin-bottom:16rem}.mh0-l{margin-left:0;margin-right:0}.mh1-l{margin-left:.25rem;margin-right:.25rem}.mh2-l{margin-left:.5rem;margin-right:.5rem}.mh3-l{margin-left:1rem;margin-right:1rem}.mh4-l{margin-left:2rem;margin-right:2rem}.mh5-l{margin-left:4rem;margin-right:4rem}.mh6-l{margin-left:8rem;margin-right:8rem}.mh7-l{margin-left:16rem;margin-right:16rem}.na1-l{margin:-.25rem}.na2-l{margin:-.5rem}.na3-l{margin:-1rem}.na4-l{margin:-2rem}.na5-l{margin:-4rem}.na6-l{margin:-8rem}.na7-l{margin:-16rem}.nl1-l{margin-left:-.25rem}.nl2-l{margin-left:-.5rem}.nl3-l{margin-left:-1rem}.nl4-l{margin-left:-2rem}.nl5-l{margin-left:-4rem}.nl6-l{margin-left:-8rem}.nl7-l{margin-left:-16rem}.nr1-l{margin-right:-.25rem}.nr2-l{margin-right:-.5rem}.nr3-l{margin-right:-1rem}.nr4-l{margin-right:-2rem}.nr5-l{margin-right:-4rem}.nr6-l{margin-right:-8rem}.nr7-l{margin-right:-16rem}.nb1-l{margin-bottom:-.25rem}.nb2-l{margin-bottom:-.5rem}.nb3-l{margin-bottom:-1rem}.nb4-l{margin-bottom:-2rem}.nb5-l{margin-bottom:-4rem}.nb6-l{margin-bottom:-8rem}.nb7-l{margin-bottom:-16rem}.nt1-l{margin-top:-.25rem}.nt2-l{margin-top:-.5rem}.nt3-l{margin-top:-1rem}.nt4-l{margin-top:-2rem}.nt5-l{margin-top:-4rem}.nt6-l{margin-top:-8rem}.nt7-l{margin-top:-16rem}.strike-l{text-decoration:line-through}.underline-l{text-decoration:underline}.no-underline-l{text-decoration:none}.tl-l{text-align:left}.tr-l{text-align:right}.tc-l{text-align:center}.ttc-l{text-transform:capitalize}.ttl-l{text-transform:lowercase}.ttu-l{text-transform:uppercase}.ttn-l{text-transform:none}.f-6-l,.f-headline-l{font-size:6rem}.f-5-l,.f-subheadline-l{font-size:5rem}.f1-l{font-size:3rem}.f2-l{font-size:2.25rem}.f3-l{font-size:1.5rem}.f4-l{font-size:1.25rem}.f5-l{font-size:1rem}.f6-l{font-size:.875rem}.f7-l{font-size:.75rem}.measure-l{max-width:30em}.measure-wide-l{max-width:34em}.measure-narrow-l{max-width:20em}.indent-l{text-indent:1em;margin-top:0;margin-bottom:0}.small-caps-l{font-variant:small-caps}.truncate-l{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.center-l{margin-right:auto;margin-left:auto}.clip-l{position:fixed!important;position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal-l{white-space:normal}.nowrap-l{white-space:nowrap}.pre-l{white-space:pre}.v-base-l{vertical-align:baseline}.v-mid-l{vertical-align:middle}.v-top-l{vertical-align:top}.v-btm-l{vertical-align:bottom}}
+
diff --git a/docs/static/img/banner.jpg b/docs/static/img/banner.jpg
new file mode 100644
index 0000000..62653e8
--- /dev/null
+++ b/docs/static/img/banner.jpg
Binary files differ
diff --git a/docs/static/img/favicon.png b/docs/static/img/favicon.png
new file mode 100644
index 0000000..d03b0e0
--- /dev/null
+++ b/docs/static/img/favicon.png
Binary files differ
diff --git a/docs/static/img/recycle.png b/docs/static/img/recycle.png
new file mode 100644
index 0000000..7e4aa88
--- /dev/null
+++ b/docs/static/img/recycle.png
Binary files differ
diff --git a/docs/wiki/Battery-replacement/index.html b/docs/wiki/Battery-replacement/index.html
new file mode 100644
index 0000000..d1badea
--- /dev/null
+++ b/docs/wiki/Battery-replacement/index.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Battery-replacement/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Battery replacement</h1>
+<p><em>Add replacement guides and experiences you've made with with batteries bought online here. Be careful, some batteries do not work as good as advertised or might even explode. Do your research on the vendor, before buying.</em></p>
+<h3>Guides</h3>
+<p><em>TODO</em></p>
+<h3>Bad vendors</h3>
+<h4>UltraFire</h4>
+<ul>
+<li><a href="https://www.s-config.com/bad-batteries-china-ultrafire-3500mah/">source</a></li>
+<li><a href="http://www.candlepowerforums.com/vb/showthread.php?316888-Fake-Ultrafire-18650-battery-warning">source</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/BlackBerry-Bold-Touch-9900-(Dakota)/index.html b/docs/wiki/BlackBerry-Bold-Touch-9900-(Dakota)/index.html
new file mode 100644
index 0000000..965ec63
--- /dev/null
+++ b/docs/wiki/BlackBerry-Bold-Touch-9900-(Dakota)/index.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/BlackBerry-Bold-Touch-9900-(Dakota)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>BlackBerry Bold Touch 9900 (Dakota)</h1>
+<h3>Contributors</h3>
+<ul>
+<li>drebrez</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Nothing yet</li>
+</ul>
+<h3>What does not work</h3>
+<ul>
+<li>Everything else</li>
+</ul>
+<h3>Device info</h3>
+<ul>
+<li>Firmware v7.1.0.1033 (Bundle 2807)</li>
+<li>Platform 5.1.0.692</li>
+<li>Cryptographic Kernel v3.8.7.6</li>
+</ul>
+<h3>RIM Wireless Device Command-Line Programmer</h3>
+<ul>
+<li><code>CFP INFO</code> =&gt; <a href="https://pastebin.com/aQNrCdhD">output</a></li>
+<li><code>CFP FLASHINFO</code> =&gt; <a href="https://pastebin.com/mKEsFiTA">output</a></li>
+</ul>
+<h3>Useful Links</h3>
+<ul>
+<li><a href="http://www.gsmarena.com/blackberry_bold_touch_9900-3116.php">Full phone specifications</a> </li>
+<li><a href="http://bbsak.org/">BlackBerry Swiss Army Knife</a> </li>
+<li><a href="https://forums.crackberry.com/hybrid-os-f224/hybrid-os7-1-babyluv-barracuda-series-5-9220-93x0-9790-98x0-99xx-727201/">Hybrid OS7.1 Babyluv by Barracuda Series 5</a></li>
+<li><a href="http://dsync.blogspot.ch/2014/10/tutorial-custom-upgrade-blackberry-os.html">Custom Upgrade BlackBerry OS 7.1 Walkthrough</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Boot-process/index.html b/docs/wiki/Boot-process/index.html
new file mode 100644
index 0000000..b6320df
--- /dev/null
+++ b/docs/wiki/Boot-process/index.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Boot-process/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Boot process</h1>
+<p>Have you already flashed your device with pmOS? Now it's time to run it.</p>
+<p>Power on your device and connect it to your USB port. pmOS uses the USB interface as a network interface and runs a DHCP server on it and <code>dmesg</code> will show something like</p>
+<pre class="codehilite"><code>[ 6284.442088] usb 1-1: new high-speed USB device number 36 using xhci_hcd
+[ 6284.627106] usb 1-1: New USB device found, idVendor=18d1, idProduct=d001
+[ 6284.627123] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
+[ 6284.627134] usb 1-1: Product: Android
+[ 6284.627143] usb 1-1: Manufacturer: Android
+[ 6284.627151] usb 1-1: SerialNumber: 0123456789ABCDEF
+[ 6284.632322] rndis_host 1-1:1.0 usb0: register 'rndis_host' at usb-0000:00:14.0-1, RNDIS device, b2:c4:1e:03:64:b9
+[ 6285.239048] rndis_host 1-1:1.0 enp0s20f0u1: renamed from usb0
+[ 6285.287058] IPv6: ADDRCONF(NETDEV_UP): enp0s20f0u1: link is not ready</code></pre>
+
+
+<p>And you'll have a new interface with IP in the range 172.16.42.0/24</p>
+<pre class="codehilite"><code>$ ifconfig enp0s20f0u1
+enp0s20f0u1 Link encap:Ethernet HWaddr b2:c4:1e:03:64:b9
+ inet addr:172.16.42.107 Bcast:172.16.42.255 Mask:255.255.255.0
+ inet6 addr: fe80::dbd2:4531:89f2:d2/64 Scope:Link
+ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
+ RX packets:12 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:47 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:1000
+ RX bytes:1226 (1.2 KB) TX bytes:8375 (8.3 KB)</code></pre>
+
+
+<p>It the interface doesn't automatically get an IP address on your system (for example on systems without NetworkManager) you need to start a dhcp client to get one.</p>
+<pre class="codehilite"><code class="language-bash"># Replace the interface name with the one on your machine
+$ dhclient -v enp0s20f0u1</code></pre>
+
+
+<p>If this fails, you may need to first assign an ethernet address to it:</p>
+<pre class="codehilite"><code># ip l set enp0s20f0u1 address 12:12:12:12:12:12</code></pre>
+
+
+<p>Then you can try the above dhclient command.</p>
+<p>At this point, your device will show a logo and will be waiting for you to connect using telnet and enter the password to decrypt the filesystem (Make sure the last segment of the IP address is a "1" and not what is shown in the output of <code>ifconfig</code>!).</p>
+<pre class="codehilite"><code>telnet 172.16.42.1
+Trying 172.16.42.1...
+Connected to 172.16.42.1.
+Escape character is '^]'.
+
+Enter passphrase for /dev/mapper/mmcblk0p25p2:
+Connection closed by foreign host.</code></pre>
+
+
+<p>After entering the password, you'll get disconnected and the graphic interface will show up in your device.</p>
+<p>Congratulations, you are now running postmarketOS!</p>
+<p>From now on you can also login to your device using <code>ssh</code> and the password you set during the install phase</p>
+<pre class="codehilite"><code>$ ssh user@172.16.42.1
+user@172.16.42.1's password:
+Welcome to postmarketOS!
+
+This distribution is based on Alpine Linux.
+Read both our wikis to find a large amount of how-to guides and
+general information about administrating and development.
+See &lt;https://postmarketos.org/wiki&gt; and &lt;https://wiki.alpinelinux.org&gt;.
+
+You may change this message by editing /etc/motd.
+
+localhost:~$</code></pre>
+
+
+<p>Use <code>sudo</code> to run commands as <code>root</code>, it is configured.</p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Build-internals/index.html b/docs/wiki/Build-internals/index.html
new file mode 100644
index 0000000..ac64cda
--- /dev/null
+++ b/docs/wiki/Build-internals/index.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Build-internals/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Build internals</h1>
+<p>To build a package with <code>pmbootstrap</code>, you will only need the command <code>pmbootstrap build hello-world</code>. Optionally with <code>--force</code> to build even if the package was already built, and with <code>--arch=armhf</code> to build for another architecture, replace <code>armhf</code> accordingly. This wiki page lists some more information about what is going on in the background.</p>
+<h3>initramfs</h3>
+<p>The <a href="https://en.wikipedia.org/wiki/Initramfs">initramfs</a> shows the boot splash images, and allows the root partition to be unlocked (currently via telnet). You can add a hook to inspect the initramfs running on the device, as described in [[Inspecting the initramfs]].</p>
+<p>To rebuild the initramfs, run <code>mkinitfs</code> inside the chroot with the right parameters (or - much easier - <code>pmbootstrap initfs build</code>). This gets done automatically, whenever a new kernel gets installed, or when the <code>postmarketos-mkinitfs</code> package gets installed the first time.</p>
+<h3>pmbootstrap vs. abuild</h3>
+<p><code>pmbootstrap</code> wraps around <code>abuild</code> (Alpine's official program to build [[apks|Glossary#apk]]), but it does a few things different than <code>abuild</code> (which internally often calls <code>apk</code>):
+<em> <code>pmbootstrap</code> can cross-compile out of the box, utilizing different chroots as needed (see below for details)
+</em> <code>pmbootstrap</code> does dependency parsing on its own (so it works across the <code>aports</code> folder <em>and</em> the binary repository, also with <a href="https://ollieparanoid.github.io/post/50-days-of-postmarketOS/#timestamp-based-rebuilds">timestamp based rebuilds</a> and can detect across chroots when a package is outdated and explicitly install them).
+<em> <code>pmbootstrap</code> does </em>not<em> honor operators in dependencies, such as: <code>&lt;</code>, <code>&gt;</code>, <code>=</code>, <code>!</code>. These simply get ignored (<code>!</code> packages don't count as dependencies). This may lead to errors, if it does please report them. However, since we're calling <code>apk</code> to install the packages, it does the real dependency checking and so far it's working well enough.
+</em> <code>pmbootstrap</code> parses <code>APKINDEX</code> and <code>APKBUILD</code> files on its own.
+<em> <code>APKINDEX</code> parsing is considered to be pretty good (because the format is dead simple!)
+</em> <code>APKBUILD</code> parsing would require a shell to be done perfectly (which would in turn kill performance). The way it is implemented right now, is that the variables we care about are hardcoded inside the <code>pbm/config/__config.py</code> or if not possible otherwise directly in <code>pmb/parse/apkbuild.py</code>. That is really fast and works for all packages we care about. If it breaks somewhere, it should be easy to patch.
+<em> <code>pmbootstrap</code> does not remove build dependencies after a build is done. This is for performance reasons - if you want a clean stat, run <code>pmbootstrap zap</code>.
+</em> <code>pmbootstrap</code> has a hack right now, that <code>gzip</code> always uses weak compression (also for speed)</p>
+<h3>Cross-compile types</h3>
+<p>There are two cross-compile types supported. <a href="https://github.com/postmarketOS/pmbootstrap/blob/master/pmb/build/autodetect.py"><code>pmb.build.autodetect.crosscompile()</code></a> figures out, which one is the right one for each build.
+<em> <code>None</code>: The package does not have any binaries (<a href="https://wiki.alpinelinux.org/wiki/APKBUILD#arch"><code>noarch</code></a>), it ends in <code>-repack</code> (such as <a href="https://github.com/postmarketOS/pmbootstrap/tree/master/aports/qemu-user-static-repack">qemu-user-static-repack</a>) or the target architecture is the same as the "native" architecture (e.g. compiling <code>heimdall</code> for <code>x86_64</code> on an <code>x86_64</code> system).
+</em> <code>"native"</code>: the build system of the package understands cross-compiling, like all kernel packages. We can use the native chroot with the cross-compiler inside that chroot for maximum speed.
+<em> <code>"distcc"</code>: the build system of the package does </em>not* understand cross-compiling, so we run the whole compiling process inside a chroot with the target architecture (with qemu user mode emulation, this is slow). We avoid using qemu emulation for the compiler though, because we use the cross-compiler inside the native chroot through distcc (which was originally meant to share compiling efforts across the network, but it works for this case. <a href="https://archlinuxarm.org/wiki/Distcc_Cross-Compiling">Arch Linux ARM also does this</a> and has a detailed description of how to set this up manually.)</p>
+<h3>Caches</h3>
+<p><code>pmbootstrap</code> uses various caches. They can all be found inside the <code>work</code> folder, and start with <code>cache_</code>. All cache folders get mounted to the appropriate chroots, depending on $ARCH. They are shared among the chroots, when it makes sense (e.g. <code>cache_distfiles</code>).
+<em> <code>cache_apk_$ARCH</code>: APK files from binary repositories (see also: <a href="https://wiki.alpinelinux.org/wiki/Local_APK_cache#To_manually_enable_Local_Cache_on_HDD_install">Local APK cache</a>)
+</em> <code>cache_ccache_$ARCH</code>: ccache: Whenever you compile something with <code>pmbootstrap</code>, the output gets cached in this folder (depending on the architecture). When you compile the same code for the second time, the cached output gets used, thus saving you a lot of time (think of re-compiling kernels, because you want to test another kernel config option etc.)
+<em> <code>cache_distfiles</code>: Whenever you build a package, <code>abuild</code> (which pmbootstrap wraps) will download the source files to the <code>distfiles</code> cache (and skip these downloads, when they already exist). The exact file name can be controlled inside the APKBUILD (<a href="https://wiki.alpinelinux.org/wiki/APKBUILD_Reference#source">more info</a>).
+</em> <code>cache_git</code>: <code>pmbootstrap</code> can download git repositories. This gets used in <code>pmbootstrap aportgen</code>, which copies a package (aka. aport) from Alpine Linux and customizes it (for example: <code>gcc-armhf</code>), so we inherit all patches and changes automatically, without much maintenance work. The git repos get stored inside this folder.
+* <code>cache_http</code>: This stores files, that get downloaded with <a href="https://github.com/postmarketOS/pmbootstrap/blob/master/pmb/helpers/http.py"><code>pmb.helpers.http.download()</code></a>, so they don't need to be downloaded again every time. Currently, this gets used for the initial download of Alpine Linux' main repositories <code>APKINDEX.tar.gz</code> and <a href="https://pkgs.alpinelinux.org/package/edge/main/armhf/apk-tools-static">apk-tools-static</a> (which is a static build of the <code>apk</code> package manager, used to set up the chroot).</p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Coolpad-Sky-3-E502-(Modena-2)/index.html b/docs/wiki/Coolpad-Sky-3-E502-(Modena-2)/index.html
new file mode 100644
index 0000000..ef1111e
--- /dev/null
+++ b/docs/wiki/Coolpad-Sky-3-E502-(Modena-2)/index.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Coolpad-Sky-3-E502-(Modena-2)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Coolpad Sky 3 E502 (Modena 2)</h1>
+<h3>Contributor</h3>
+<ul>
+<li><a href="https://github.com/McBitter">McBitter</a></li>
+</ul>
+<h3>Status</h3>
+<p>Flashing a custom kernel is not possible yet, but McBitter is working on replacing the bootloader with a custom fork of <a href="https://github.com/littlekernel/lk">LK</a> (a proprietary fork of LK is already present on the device, but it does not allow flashing a custom kernel). When that works, porting pmOS can begin.</p>
+<h4>List of LCM's (the LCD control module) in original firmware</h4>
+<ul>
+<li>hx8394f_dsi_ld_cpt_vdo</li>
+<li>ili9881c_dsi_ys_cmi_vdo</li>
+<li>otm1287a_dsi_by_auo</li>
+<li>ili9881c_dsi_ld_auo_vdo</li>
+</ul>
+<h4>Digitizer that is present on the model I have</h4>
+<ul>
+<li>TBD</li>
+</ul>
+<h3>Links</h3>
+<ul>
+<li><a href="https://forum.xda-developers.com/u/repair/coolpad-sky-3-e502-modena-2-unbrick-t3610163">Unbrick tutorial</a></li>
+<li><a href="https://androidmtk.com/smart-phone-flash-tool">Proprietary flashing software SP Flash Tool</a></li>
+<li><a href="https://gitgud.io/mcbitter/coolpad_sky_3_E502">Original firmware with Android 6.0</a></li>
+</ul>
+<h3>Links to useful reverse engineering hints</h3>
+<ul>
+<li>http://www.stevenhoneyman.co.uk/2015/02/reconstructing-mtk-lcm-drivers.html</li>
+<li>https://forum.xda-developers.com/showpost.php?p=70395172&amp;postcount=5882</li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Creating-a-package/index.html b/docs/wiki/Creating-a-package/index.html
new file mode 100644
index 0000000..aab62dd
--- /dev/null
+++ b/docs/wiki/Creating-a-package/index.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Creating-a-package/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Creating a package</h1>
+<p>Here is a practical approach on how to port packages from other Linux distributions to pmOS (because that is usually the fastest way). Feel free to extend this information, and to add other distributions.</p>
+<h3>General information</h3>
+<ul>
+<li>Please read <a href="https://wiki.alpinelinux.org/wiki/Creating_an_Alpine_package#APKBUILD_variables.2Ffunctions">this section</a> from our upstream friends wiki (<em>which we should also extend and improve</em>)</li>
+<li>Please always package the latest version of a software (unless it is impossible because of software that depends on it, but try to avoid that!)</li>
+<li>Please do not copy maintainers/contributors from the other packages to your new ports (so they won't get annoyed by questions for pmOS/Alpine packages!). Instead please credit them in the commit messages (maybe with a link to the original build recipe)</li>
+<li>Alpine Linux uses <code>musl</code> as libc, not <code>glibc</code>. Never add <code>glibc</code> as dependency.</li>
+<li>Alpine uses busybox' <code>sh</code> for building packages. Do not use bash specific features.</li>
+<li>Manpages and other documentation goes into an extra -doc package in Alpine, and abuild will complain if the main package contains them. The solution is to add this: <code>subpackages="$pkgname-doc"</code> (<a href="https://wiki.alpinelinux.org/wiki/APKBUILD_Reference#doc.28.29">more info</a>)</li>
+<li>You can look up the exact meaning of every variable and function in the <a href="https://wiki.alpinelinux.org/wiki/APKBUILD_Reference">APKBUILD Reference</a></li>
+<li>Set up the git hook from the [[development guide]] article to automatically verify checksums in your APKBUILDs and therefore making your life easier</li>
+</ul>
+<h3>Porting packages from Arch Linux</h3>
+<h4>Find the package</h4>
+<p><a href="https://www.archlinux.org/packages/">Search here</a>, click the package name, click on "Source Files" on the top right. A git repo with the <code>PKGBUILD</code> and all other files (such as patches appears).</p>
+<h4>Differences between APKBUILDs and PKGBUILDs</h4>
+<ul>
+<li><code>APKBUILD</code>s do not have the arrays from bash, use flat strings instead</li>
+<li>There's no <code>optdepends</code></li>
+<li><code>-doc</code> subpackages (see above)</li>
+<li><code>APKBUILD</code> has different options (!makeflags won't work, but it has !strip and !check)</li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Development-guide/index.html b/docs/wiki/Development-guide/index.html
new file mode 100644
index 0000000..ecb29d2
--- /dev/null
+++ b/docs/wiki/Development-guide/index.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Development-guide/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Development guide</h1>
+<h2>Tips</h2>
+<p>If happens often that we commit changes and then we realize that we forgot to regenerate APKBUILD checksums. This is noticed by Travis (<a href="https://travis-ci.org/postmarketOS/pmbootstrap/builds/261056579">example</a>) but you might want to avoid it. </p>
+<p>You can install the following git hook that is run every time before you commit. </p>
+<p>Copy the following code to <code>.git/hooks/pre-commit</code> inside your <code>pmbootstrap</code> repository:</p>
+<pre class="codehilite"><code class="language-bash">#!/bin/bash
+#
+# PostmarketOS pre-commit hook
+# Checks for bad checksums
+
+./test/check_checksums.py</code></pre>
+
+
+<p>Now this is what happens when you forgot to regenerate checksums for some aport and try to commit</p>
+<pre class="codehilite"><code class="language-bash">$ git commit -a
+Checking device-qemu-aarch64 for correct checksums
+[13:45:23] (native) generate checksums for device-qemu-aarch64
+[13:45:23] Done
+MM aports/device/device-qemu-aarch64/APKBUILD
+
+diff --git a/aports/device/device-qemu-aarch64/APKBUILD b/aports/device/device-qemu-aarch64/APKBUILD
+index 99b811b..c4cee6c 100644
+--- a/aports/device/device-qemu-aarch64/APKBUILD
++++ b/aports/device/device-qemu-aarch64/APKBUILD
+@@ -21,4 +21,4 @@ package() {
+ &quot;$pkgdir&quot;/etc/deviceinfo
+ }
+
+-sha512sums=&quot;a18ab789c19d8802be6a9e9c842f4c304f267bd78f46b096b4ba6609430d1544e0a9eca9bc22db67a0728efae3aad6c2def9f7e64157d31aeb31b4bb839076d5 deviceinfo&quot;
++sha512sums=&quot;8df46383685a40a96b7c604c29d413ecdd4b4a9b92cb61f452283042f189b1ca01cb70632fec0711dd67229e0501729762c6841359ac7ea455f516b512abce9c deviceinfo&quot;
+
+** The checksums are not correct</code></pre>
+
+
+<p>After that, simply do <code>git commit -a --amend -n</code> (<code>-n</code> is necessary so that this time the hook is not triggered).</p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Device-Wishlist/index.html b/docs/wiki/Device-Wishlist/index.html
new file mode 100644
index 0000000..e431210
--- /dev/null
+++ b/docs/wiki/Device-Wishlist/index.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Device-Wishlist/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Device Wishlist</h1>
+<p>We have been asked, which devices we would like to see pmOS running on - by people who might specifically buy them (with broken screens etc, to get them cheaper) to help the project. Please list devices here, that you would like to see pmOS running on. Do not list devices, that we already have a port for, or specify a reason why you do.</p>
+<ul>
+<li>Fairphone 1 &amp; 2</li>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/issues/57">Old iPhones</a> (must be <a href="https://en.wikipedia.org/wiki/OpeniBoot">OpeniBoot</a> compatible to make it feasible)</li>
+<li>Openmoko (they come with open source baseband firmware!)</li>
+<li>Samsung Galaxy S Relay 4G (apexqtmo) (<a href="https://cascardo.eti.br/blog/News_on_Debian_on_apexqtmo/">WIP mainline support</a>)</li>
+<li>Intex Aqua Fish and Other Sailfish running devices</li>
+<li>Oneplus One</li>
+<li>The ubuntu phones (BQ Aquaris E4.5, BQ Aquaris E5, BQ Aquaris M10, Meizu MX4, Meizu PRO 5)</li>
+</ul>
+<p>Devices that might have working mainline linux support:</p>
+<ul>
+<li>Sony Xperia Z3 (https://plus.google.com/102276447148493441479/posts/amRvpE8piSw)</li>
+<li>motorola droid 4 (http://elektranox.org/droid4/)</li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Devices/index.html b/docs/wiki/Devices/index.html
new file mode 100644
index 0000000..ab75dc7
--- /dev/null
+++ b/docs/wiki/Devices/index.html
@@ -0,0 +1,248 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Devices/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Devices</h1>
+<p>Please add devices you're porting here, and write your porting progress in the wiki page. Devices are sorted alphabetically.</p>
+<h3>Officially supported</h3>
+<p>Devices will be officially supported in <code>pmbootstrap</code> when the encrypted root partition can be unlocked and graphical output works.</p>
+<table>
+<thead>
+<tr>
+<th>Device</th>
+<th>Code</th>
+<th>Status</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>[[Google Galaxy Nexus (GSM)</td>
+<td>samsung-maguro (Google Galaxy Nexus GSM)]]</td>
+<td>samsung-maguro</td>
+</tr>
+<tr>
+<td>[[Google Nexus 4</td>
+<td>lg-mako (Google Nexus 4)]]</td>
+<td>lg-mako</td>
+</tr>
+<tr>
+<td>[[Google Nexus 5 (GSM)</td>
+<td>lg-hammerhead (Google Nexus 5)]]</td>
+<td>lg-hammerhead</td>
+</tr>
+<tr>
+<td>[[Google Nexus 7 (2012)</td>
+<td>asus-grouper (Google Nexus 7 2012)]]</td>
+<td>asus-grouper</td>
+</tr>
+<tr>
+<td>[[HTC Desire</td>
+<td>HTC-Bravo-(HTC-Desire)]]</td>
+<td>htc-bravo</td>
+</tr>
+<tr>
+<td>[[HTC Desire HD</td>
+<td>HTC-Ace-(HTC-Desire-HD)]]</td>
+<td>htc-ace</td>
+</tr>
+<tr>
+<td>[[LG G3 Global]]</td>
+<td>lg-d855</td>
+<td>fSTU</td>
+</tr>
+<tr>
+<td>[[Moto G 2014</td>
+<td>motorola-titan (Moto G 2014)]]</td>
+<td>motorola-titan</td>
+</tr>
+<tr>
+<td>[[Nokia N900</td>
+<td>nokia-rx51 (Nokia N900)]]</td>
+<td>nokia-rx51</td>
+</tr>
+<tr>
+<td>[[QEMU (arm)</td>
+<td>qemu-vexpress (Qemu with vexpress soc)]]</td>
+<td>qemu-vexpress</td>
+</tr>
+<tr>
+<td>[[QEMU (x86_64)</td>
+<td>qemu-amd64 (QEMU for x86_64)]]</td>
+<td>qemu-amd64</td>
+</tr>
+<tr>
+<td>[[Samsung Galaxy Note 2</td>
+<td>Samsung-N7100-(Galaxy-Note-II-GSM)]]</td>
+<td>samsung-n7100</td>
+</tr>
+<tr>
+<td>[[Samsung Galaxy S Advance</td>
+<td>Samsung-i9070-(Samsung-Galaxy-S-Advance)]]</td>
+<td>samsung-i9070</td>
+</tr>
+<tr>
+<td>[[Samsung Galaxy SII</td>
+<td>samsung-i9100 (Samsung Galaxy SII)]]</td>
+<td>samsung-i9100</td>
+</tr>
+</tbody>
+</table>
+<h3>Work in progress</h3>
+<table>
+<thead>
+<tr>
+<th>Device</th>
+<th>Code</th>
+<th>Status</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>[[BlackBerry Bold Touch 9900</td>
+<td>BlackBerry-Bold-Touch-9900-(Dakota)]]</td>
+<td>blackberry-dakota</td>
+</tr>
+<tr>
+<td>[[Coolpad Sky 3 E502 (Modena 2)]]</td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<td>[[Fairphone 2</td>
+<td>fairphone-2]]</td>
+<td>fairphone-fp2</td>
+</tr>
+<tr>
+<td>[[HTC Droid DNA</td>
+<td>htc-monarudo-(HTC-Droid-DNA)]]</td>
+<td>htc-monarudo</td>
+</tr>
+<tr>
+<td>[[Jolla phone</td>
+<td>jolla-sbj (Jolla phone)]]</td>
+<td>jolla-sbj</td>
+</tr>
+<tr>
+<td>[[Landrover A9</td>
+<td>landrover-a9]]</td>
+<td>landrover-a9</td>
+</tr>
+<tr>
+<td>[[Mozilla Flame</td>
+<td>mozilla-flame]]</td>
+<td>mozilla-flame</td>
+</tr>
+<tr>
+<td>[[Samsung Galaxy S5 mini</td>
+<td>samsung-g800f (Samsung Galaxy S5 mini)]]</td>
+<td>samsung-g800f</td>
+</tr>
+<tr>
+<td>[[Samsung Galaxy S Duos S7562</td>
+<td>samsung-S7562]]</td>
+<td>samsung-s7562</td>
+</tr>
+<tr>
+<td>[[Xperia Z1 Compact</td>
+<td>sony-amami-(Xperia-Z1-Compact)]]</td>
+<td>sony-amami</td>
+</tr>
+<tr>
+<td>[[Xperia Z2 Tablet</td>
+<td>Xperia Z2 Tablet]]</td>
+<td>sony-castor-windy</td>
+</tr>
+<tr>
+<td>[[Xperia Z2</td>
+<td>Xperia Z2]]</td>
+<td>sony-sirius</td>
+</tr>
+<tr>
+<td>[[Xperia E Dual</td>
+<td>Xperia E Dual]]</td>
+<td>sony-nanhu</td>
+</tr>
+</tbody>
+</table>
+<h3>Status Legend</h3>
+<table>
+<thead>
+<tr>
+<th>Letter</th>
+<th>Meaning</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>A</td>
+<td>Audio</td>
+</tr>
+<tr>
+<td>F</td>
+<td>Flash to device</td>
+</tr>
+<tr>
+<td>M</td>
+<td>Mainline kernel</td>
+</tr>
+<tr>
+<td>S</td>
+<td>Screen</td>
+</tr>
+<tr>
+<td>T</td>
+<td>Touch</td>
+</tr>
+<tr>
+<td>U</td>
+<td>USB Networking</td>
+</tr>
+<tr>
+<td>W</td>
+<td>Wifi</td>
+</tr>
+<tr>
+<td>X</td>
+<td>XWayland</td>
+</tr>
+</tbody>
+</table>
+<p><em>A lowercase letter indicates partial or incomplete progress in a category.</em></p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/External-resources/index.html b/docs/wiki/External-resources/index.html
new file mode 100644
index 0000000..9ae1296
--- /dev/null
+++ b/docs/wiki/External-resources/index.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/External-resources/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>External resources</h1>
+<p>This list is a collection of presentations, talks and other resources that are somehow related to postmarketOS and can help you to dive in some specific topics.</p>
+<h1>Topics</h1>
+<h3>Apps</h3>
+<ul>
+<li><a href="https://dot.kde.org/2016/08/10/kdes-kirigami-ui-framework-gets-its-first-public-release">Kirigami UI</a>: A framework for building cross-platform programs, that work on phones (Linux, Android, iOS?) as well as on the desktop (Linux, Windows).</li>
+</ul>
+<h3>U-Boot</h3>
+<ul>
+<li><a href="https://www.youtube.com/watch?v=dKBUSMa6oZI">State of the U-Boot</a> (ELC, 2017)</li>
+<li><a href="https://www.youtube.com/watch?v=zWjt6ZYxAfQ">Enabling New Hardware in U-Boot</a> (ELC, 2017)</li>
+</ul>
+<h3>Kernel</h3>
+<ul>
+<li><a href="https://www.youtube.com/watch?v=2l3699AkfuU">Unifying Android and Mainline Kernel Graphics Stack</a>, (<a href="http://elinux.org/images/4/41/ELC_2017-Unifying-Android_and_Mainline_gfx_0.pdf">PDF</a>) (ELC, 2017)</li>
+<li><a href="https://www.youtube.com/watch?v=77tuFtM4gjA">Forward Porting Google Nexus 5X / 6P - Lessons from the Trenches and What's Next</a> (ELC, 2017)</li>
+</ul>
+<h1>Conferences</h1>
+<ul>
+<li><a href="http://elinux.org/ELC_2017_Presentations">Embedded Linux Conference 2017</a>, (<a href="https://www.youtube.com/playlist?list=PLbzoR-pLrL6pSlkQDW7RpnNLuxPq6WVUR">YouTube playlist</a>)</li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Fairphone-2/index.html b/docs/wiki/Fairphone-2/index.html
new file mode 100644
index 0000000..272c304
--- /dev/null
+++ b/docs/wiki/Fairphone-2/index.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Fairphone-2/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Fairphone 2</h1>
+<h2>Contributors</h2>
+<ul>
+<li>z3ntu</li>
+</ul>
+<h2>What works</h2>
+<ul>
+<li>The building process</li>
+</ul>
+<h3>Current Boot Process</h3>
+<p>This is what I did:
+Use the efidroid lk.img (have to compile yourself right now) for working around an fastboot/lk issue in the stock Fairphone bootloader.</p>
+<pre class="codehilite"><code>fastboot boot lk.img
+fastboot flash system pmOS_system.img</code></pre>
+
+
+<p>Booting the boot.img doesn't work currently because of dt problems. Probably a similar issue as on the <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Mozilla-Flame#current-boot-process">Mozilla Flame</a>.</p>
+<p>pmOS branch: https://github.com/postmarketOS/pmbootstrap/tree/device-fairphone-fp2
+z3ntu's branch (maybe more up-to-date): https://github.com/z3ntu/pmbootstrap</p>
+<h2>Abbreviations</h2>
+<p><strong>lk</strong> = Little Kernel (that's what the bootloader which includes fastboot is based on for most newer devices)</p>
+<p><strong>dt</strong> = Device Tree (method of describing hardware, see https://www.devicetree.org/)</p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Firmware/index.html b/docs/wiki/Firmware/index.html
new file mode 100644
index 0000000..7a5a7a1
--- /dev/null
+++ b/docs/wiki/Firmware/index.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Firmware/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Firmware</h1>
+<p>There are closed source firmware components in every phone, and <a href="https://ollieparanoid.github.io/post/security-warning/">they are dangerous</a>. It seems next to impossible to replace them with open source components, and it won't be feasible any time soon for postmarketOS. Yet, this is an interesting topic, so this page provides links for deeper insight into the topic.</p>
+<h3>Bootloaders</h3>
+<h4>hboot (HTC)</h4>
+<ul>
+<li><a href="http://archive.hack.lu/2013/hacklu2013_hbootdbg.pdf">hbootdbg</a> <em>pdf presentation slides</em></li>
+<li><a href="https://github.com/unrevoked/hboot-tools">hboot-tools</a></li>
+<li><a href="https://github.com/andreiw/nexus9_demo">Nexus 9: Low level boot process analysis and demo</a> <em>nvtboot -&gt; tos -&gt; hboot -&gt; demo code</em></li>
+</ul>
+<h3>Cellular modems</h3>
+<ul>
+<li><a href="https://osmocom.org/projects/quectel-modems/wiki">Qualcomm based cellular data modems with Linux</a></li>
+</ul>
+<h3>Wi-Fi modems</h3>
+<ul>
+<li><a href="https://www.blackhat.com/us-17/briefings.html#broadpwn-remotely-compromising-android-and-ios-via-a-bug-in-broadcoms-wi-fi-chipsets">Broadpwn: Remotely Compromising Android and iOS via a Bug in Broadcom's Wi-Fi Chipsets</a> (Upcoming talk)</li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Glossary/index.html b/docs/wiki/Glossary/index.html
new file mode 100644
index 0000000..e26c515
--- /dev/null
+++ b/docs/wiki/Glossary/index.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Glossary/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Glossary</h1>
+<p>If you found a technical term related to this project, that you had to research to understand, please add it here (alphabetically sorted).</p>
+<p>See also:
+* <a href="https://wiki.alpinelinux.org/wiki/Alpine_Linux:Glossary">Alpine Linux:Glossary</a></p>
+<hr />
+<h3><a href="https://alpinelinux.org/">Alpine Linux</a></h3>
+<p>The minimal Linux distribution, that postmarketOS is based on. Actually, pmOS only adds a few packages on top of it, and provides the installer and development environment - that is the plan, to keep following upstream as close as possible. Alpine developers do not see their distribution as "GNU/Linux". That being said, it works a lot like a typical Desktop Linux distribution. You have your package manager, the typical shell commands, you can install typical Linux software, and so on.</p>
+<h3>android-msm</h3>
+<p>The Google provided 3.4 kernel as base for all Qualcomm devices.</p>
+<h3>apk</h3>
+<p>One of the following:
+<em> Android app format
+</em> Alpine Linux package (also ends in <code>.apk</code>, but totally incompatible!), which are actually gzipped tar files
+* Alpine Linux package manager (apk)</p>
+<h3>dtb</h3>
+<p>The binary device tree, this is a file containing a description of the hardware in the device since phones don't have discoverable busses like x86 platforms. These are created from dts files in the kernel repository and produce a file called <code>zImage-dtb</code> for some Android kernels (older Android kernels do not generate a <code>dtb</code> file at all and have hardcoded the information directly in the kernel source). In mainline kernels, <code>dtb</code> files for all supported boards are created at once.</p>
+<h3>dri</h3>
+<p><a href="https://en.wikipedia.org/wiki/Direct_Rendering_Infrastructure">Direct Rendering Infrastructure</a>, the modern Linux kernel API for drawing to the screen.</p>
+<h3>fbdev / framebuffer</h3>
+<p><a href="https://en.wikipedia.org/wiki/Linux_framebuffer">Linux framebuffer</a> a (more or less?) deprecated API from the Linux kernel, that allows drawing to the screen. Newer drivers use the DRI API instead (see above). Android devices usually have drivers for framebuffer, instead of DRI.</p>
+<h3>lk (little kernel)</h3>
+<p><em><a href="https://github.com/littlekernel/lk"><code>lk</code></a> is the kernel where fastboot runs on - at least all new-ish qualcomm devices is using <code>lk</code> and new-ish mediatek devices too</em></p>
+<h3>OpenRC</h3>
+<p><a href="https://en.wikipedia.org/wiki/OpenRC">OpenRC</a> is a dependency-based init for Unix-like systems. It is the default init system of Alpine Linux.</p>
+<h3>Weston</h3>
+<p><a href="https://github.com/wayland-project/weston">Weston</a> is the reference implementation of a Wayland compositor. It has various backends that lets it run on Linux kernel modesetting and evdev input as well as under X11.</p>
+<p>We have chosen Weston as demo because we didn't want to use X11, as this is slowly dying. Also there's libweston, which might come in handy later (you can write your own desktop environment and inherit the hardware compatibility from weston). Weston is nice as demo useful at this moment of the development, but not usable as phone interface, so we'll need different desktop environments packaged sooner or later. See <a href="https://github.com/postmarketOS/pmbootstrap/issues/62">issue #62</a></p>
+<h3>FDE</h3>
+<p>Full Disk Encryption, by default the rootfs created by pmbootstrap is fully encrypted with luks, preventing the phone data to be retrieved without password if the device is turned off. This can optionally be disabled with <code>--no-fde</code> for debugging purposes.</p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/HTC-Ace-(HTC-Desire-HD)/index.html b/docs/wiki/HTC-Ace-(HTC-Desire-HD)/index.html
new file mode 100644
index 0000000..8da4bb5
--- /dev/null
+++ b/docs/wiki/HTC-Ace-(HTC-Desire-HD)/index.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/HTC-Ace-(HTC-Desire-HD)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>HTC Ace (HTC Desire HD)</h1>
+<h3>Contributors</h3>
+<ul>
+<li>Victor9</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Compiling the kernel</li>
+<li>Booting with fastboot</li>
+<li>Framebuffer works</li>
+<li>Network through USB</li>
+<li>SSH</li>
+<li>Touchscreen (broken see <a href="https://github.com/postmarketOS/pmbootstrap/issues/322">#322</a>)</li>
+<li>Weston with demo menu (broken see <a href="https://github.com/postmarketOS/pmbootstrap/issues/322">#322</a>)</li>
+<li>Wifi</li>
+</ul>
+<h3>What does not work</h3>
+<ul>
+<li>Probably everything else</li>
+</ul>
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/VictorNine/pmbootstrap/tree/device-htc-ace">Device branch</a></li>
+<li><a href="https://github.com/OpenDesireProject/android_kernel_htc_msm7x30">OpenDesireProject Kernel</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/HTC-Bravo-(HTC-Desire)/index.html b/docs/wiki/HTC-Bravo-(HTC-Desire)/index.html
new file mode 100644
index 0000000..0bd6468
--- /dev/null
+++ b/docs/wiki/HTC-Bravo-(HTC-Desire)/index.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/HTC-Bravo-(HTC-Desire)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>HTC Bravo (HTC Desire)</h1>
+<h3>Contributors</h3>
+<ul>
+<li>drebrez</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Compiling the kernel</li>
+<li>Booting (see below)</li>
+<li>Framebuffer works (see photos below)</li>
+<li>Network through USB</li>
+<li>SSH</li>
+<li>Touchscreen</li>
+<li>Weston with demo menu</li>
+</ul>
+<h3>What does not work</h3>
+<ul>
+<li>Flashing (requires smaller boot.img <a href="https://github.com/postmarketOS/pmbootstrap/issues/126">#126</a>)</li>
+<li>Wifi (requires firmware)</li>
+<li>Unknown, but probably everything else</li>
+</ul>
+<h3>Device partitions</h3>
+<pre class="codehilite"><code>dev: size erasesize name
+mtd0: 000a0000 00020000 &quot;misc&quot;
+mtd1: 00480000 00020000 &quot;recovery&quot;
+mtd2: 00300000 00020000 &quot;boot&quot;
+mtd3: 0fa00000 00020000 &quot;system&quot;
+mtd4: 02800000 00020000 &quot;cache&quot;
+mtd5: 093a0000 00020000 &quot;userdata&quot;</code></pre>
+
+
+<h3>Booting</h3>
+<ul>
+<li>Build everything <code>pmbootstrap install</code></li>
+<li>Boot using <code>pmbootstrap flasher boot</code></li>
+</ul>
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/tree/master/aports/device-htc-bravo">Device package</a></li>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/tree/master/aports/linux-htc-bravo">Kernel package</a></li>
+<li><a href="https://github.com/spezi77/android_kernel_htc_qsd8k_3.0/tree/n-7.1">spezi77's Kernel</a></li>
+</ul>
+<h3>Photos</h3>
+<ul>
+<li><a href="http://imgur.com/a/8ODj5">Initramfs asking for the password via telnet</a></li>
+<li><a href="http://imgur.com/a/1OgGZ">PostmarketOS demo menu (XWayland)</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Home/index.html b/docs/wiki/Home/index.html
new file mode 100644
index 0000000..3ebd488
--- /dev/null
+++ b/docs/wiki/Home/index.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Home/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Home</h1>
+<p><a href="https://postmarketos.org"><strong>postmarketOS</strong></a> is a touch-optimized and pre-configured <a href="https://alpinelinux.org">Alpine Linux</a>. It can be installed on smartphones and other devices. It is in a very early, experimental state and not usable for most people yet. <strong>pmbootstrap</strong> allows installation and development of pmOS. As of now, its repository contains all of the projects code, pmbootstrap itself and all package build recipes (<a href="https://github.com/postmarketOS/pmbootstrap/tree/master/aports">aports</a>). Therefore this wiki contains all information about pmOS, not only about pmbootstrap. Here are the most important links:</p>
+<h3>General information</h3>
+<ul>
+<li><a href="https://ollieparanoid.github.io/post/postmarketOS/">Introduction post</a> <em>the utopic vision and goals</em></li>
+<li><a href="https://ollieparanoid.github.io/post/security-warning/">Security warning</a> <em>about running unfixable outdated firmware software</em></li>
+<li>[[Supported devices|Devices]] <em>quite a few Android devices, and the N900</em></li>
+<li>[[Milestones]] <em>where individuals want to take the project</em></li>
+<li>[[Installation guide]] <em>for devices, which are already working</em></li>
+</ul>
+<h3>Development</h3>
+<ul>
+<li>[[Porting to a new device]] <em>and general installation guide</em></li>
+<li>[[Troubleshooting]] <em>the page to read when something isn't working</em></li>
+<li>[[Deviceinfo reference]] <em>our work-in-progress device-specific file format</em></li>
+<li>[[Creating a package]] <em>and how to recycle package recipes from other distributions</em></li>
+<li>[[Migration to aports subfolders]] <em>how to migrate old checkouts to the new folder structure</em></li>
+<li>[[Mainline kernel|The mainline kernel]] <em>early work on getting device kernels into mainline Linux</em></li>
+<li>[[Development guide]] <em>currently has a git hook for working on packages</em></li>
+</ul>
+<h3>Communication channels</h3>
+<ul>
+<li>[[Matrix and IRC]] <em>live chat makes development easier</em></li>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/issues">Issues</a> <em>besides bugs, lots feature ideas and questions, <a href="https://github.com/postmarketOS/pmbootstrap/issues/62">mobile UI</a> for example</em></li>
+<li><a href="https://reddit.com/r/postmarketOS">Reddit</a> <em>photos of devices running pmOS, blog posts, questions, official announcements</em></li>
+</ul>
+<h3>Contributing to the wiki</h3>
+<ul>
+<li><a href="https://guides.github.com/features/mastering-markdown/">Mastering markdown</a> <em>guide on how to properly format text in the wiki</em></li>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/wiki/_Sidebar/_edit">Edit the sidebar</a> <em>we put all pages there, except for the device specific pages</em></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/How-to-find-device-specific-information/index.html b/docs/wiki/How-to-find-device-specific-information/index.html
new file mode 100644
index 0000000..8ffb7cf
--- /dev/null
+++ b/docs/wiki/How-to-find-device-specific-information/index.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/How-to-find-device-specific-information/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>How to find device specific information</h1>
+<h1>Android</h1>
+<h2>Generic device information</h2>
+<ul>
+<li><a href="https://github.com/LineageOS/lineage_wiki/blob/master/_data/devices/">LineageOS devices database</a> (hardware specs: architecture, screen resolution, ... and key combinations for flash/recovery mode)</li>
+</ul>
+<h2>Fastboot (boot.img) flash offsets</h2>
+<p><em>If you can't find a full ROM image for your device, consider extracting the boot.img file directly from your device <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Using-prebuilt-kernels">with adb</a>.</em>
+1. Find the download link for a full image on https://download.lineageos.org/
+2. Run the following commands (replace the download link accordingly)</p>
+<pre class="codehilite"><code class="language-shell">pmbootstrap build unpackbootimg
+pmbootstrap chroot
+apk add unpackbootimg
+su - user
+mkdir /tmp/bootimg_info
+cd /tmp/bootimg_info
+wget &quot;https://mirrorbits.lineageos.org/full/hammerhead/20170530/lineage-14.1-20170530-nightly-hammerhead-signed.zip&quot;
+unzip *.zip
+unpackbootimg -i boot.img</code></pre>
+
+
+<ol>
+<li>Example output:</li>
+</ol>
+<pre class="codehilite"><code>Android magic found at: 0
+BOARD_KERNEL_CMDLINE console=ttyHSL0,115200,n8 androidboot.hardware=hammerhead
+user_debug=31 maxcpus=2 msm_watchdog_v2.enable=1
+androidboot.bootdevice=msm_sdcc.1 buildvariant=userdebug
+BOARD_KERNEL_BASE 00008000
+BOARD_RAMDISK_OFFSET 02900000
+BOARD_SECOND_OFFSET 00f00000
+BOARD_TAGS_OFFSET 02700000
+BOARD_PAGE_SIZE 2048
+BOARD_SECOND_SIZE 0
+BOARD_DT_SIZE 0</code></pre>
+
+
+<p>Translate the variables as follows into your deviceinfo:
+<em> <code>BOARD_KERNEL_BASE</code> -&gt; <code>deviceinfo_flash_offset_kernel</code>
+</em> <code>BOARD_RAMDISK_OFFSET</code> -&gt; <code>deviceinfo_flash_offset_ramdisk</code>
+<em> <code>BOARD_SECOND_OFFSET</code> -&gt; <code>deviceinfo_flash_offset_second</code>
+</em> <code>BOARD_TAGS_OFFSET</code> -&gt; <code>deviceinfo_flash_offset_tags</code>
+<em> <code>BOARD_PAGE_SIZE</code> -&gt; <code>deviceinfo_flash_pagesize</code>
+</em> <code>BOARD_SECOND_SIZE</code> -&gt; <code>deviceinfo_flash_offset_second</code>
+* (contents of the extracted <code>boot.img-base</code> file) -&gt; <code>deviceinfo_flash_offset_base</code> (defaults to <code>0x10000000</code>)</p>
+<hr />
+<p><em>NOTE: Some useful info can be pulled via fastboot too (in case you have the device at hand) by executing <code>fastboot getvar all</code></em></p>
+<h2>Kernel version</h2>
+<ul>
+<li><a href="https://stackoverflow.com/a/12151781">Look at the Makefile inside the kernel repository</a></li>
+</ul>
+<h2>Device Architecture</h2>
+<ul>
+<li>You can find the architecture while the device is running another kernel (e.g. original Android or TWRP). Run <code>adb shell</code> to gain access to the console on the device, and type <code>uname -m</code>.</li>
+<li>pmOS supports the <code>armhf</code> and <code>aarch64</code> architectures. If the output is <code>armv7l</code>, for example, you should use <code>armhf</code> as your device architecture.</li>
+</ul>
+<h2>Device code name</h2>
+<ul>
+<li><a href="http://wiki.lineageos.org/devices.html">LineageOS List</a></li>
+<li><a href="http://www.droidviews.com/codenames-of-samsung-galaxy-devices/">List for Samsung Galaxy Devices</a></li>
+</ul>
+<h2>LineageOS kernel source repository</h2>
+<ul>
+<li>Find out the code name of your device (see above)</li>
+<li>Usually, you can find the <em>kernel</em> source repository by typing in the code name of your device into the <a href="https://github.com/LineageOS?utf8=%E2%9C%93&amp;q=&amp;type=&amp;language=">LineageOS GitHub page</a></li>
+<li>If you can't find it, but you found a repository starting with <code>android_device_</code>, open that repository and look into the <code>lineage.dependencies</code> file. It lists other LineageOS repositories there - open these repositories, until you finally find the repository with "kernel" in the name. Example: <a href="https://github.com/LineageOS/android_device_htc_evita/blob/cm-14.1/lineage.dependencies#L3">First</a>, <a href="https://github.com/LineageOS/android_device_htc_s4-common/blob/630a97ee53f1b6a43f02f9fb3841db026967f5ed/lineage.dependencies#L11">Second</a>, <a href="https://github.com/LineageOS/android_kernel_htc_msm8960">Third: Kernel repo!</a></li>
+</ul>
+<h2>Other locations for kernel repositories</h2>
+<ul>
+<li><a href="https://legacyxperia.github.io/">legacyxperia project</a></li>
+<li><a href="http://opensource.samsung.com/reception.do">Samsung Opensource Release Center</a></li>
+</ul>
+<h2>Kernel defconfig (default config)</h2>
+<ul>
+<li><code>DEFCONFIG=</code> line inside the <code>build.config</code> inside the kernel repository (if available) (<a href="https://github.com/LineageOS/android_kernel_lge_hammerhead/blob/cm-14.1/build.config#L4">example</a>)</li>
+<li><a href="https://source.android.com/source/building-kernels">Official listing</a></li>
+<li>If you found the <code>android_device_</code> repository (as shown in <em>LineageOS kernel source repository</em> above), look for a <code>TARGET_KERNEL_CONFIG</code> line in the <a href="https://github.com/LineageOS/android_device_htc_evita/blob/25b93bf95fac520fa1952a8b756b536d4fd4fcab/BoardConfig.mk#L42">BoardConfig.mk</a>.</li>
+</ul>
+<p>In the case where you have located the kernel source for your device but there is no <code>build.config</code>, have a look at the <code>arch/arm/configs/</code> directory. E.g. for Moto G 2014 "titan" that uses android_kernel_motorola_msm8226 you have a <a href="https://github.com/LineageOS/android_kernel_motorola_msm8226/blob/cm-14.1/arch/arm/configs/titan_defconfig">titan_defconfig</a> file there.</p>
+<h2>Misc info from BoardConfig.mk</h2>
+<p><a href="https://github.com/LineageOS/android_device_lge_hammerhead/blob/4bacb98a5dc736a6c832fe1e03d3bbe7320cd7f5/BoardConfig.mk#L25-L30">Example</a>, contains the following information:
+<em> kernel commandline
+</em> ramdisk offset, tags offset, pagesize, base
+* boot partition size</p>
+<h2>Firmware files</h2>
+<p>Find the LineageOS repository for your device by using the repository filter function <a href="https://github.com/LineageOS/">here</a> and typing in your device's code name. You need the repository starting with <code>android_device_</code>. Inside that repository, there should be a <code>proprietary_components.txt</code> or <code>proprietary-files.txt</code>, which has among lots of files, that we do not need, the paths to the firmware files - starting with <code>/vendor/firmware</code>. Combined with some additional research, you should be able to find the files needed for the hardware, that you want to get running (e.g. wifi). Now you have the names of the firmware files. First look if they are provided by <a href="https://pkgs.alpinelinux.org/contents?file=&amp;path=&amp;name=linux-firmware&amp;branch=&amp;repo=&amp;arch="><code>linux-firmware</code></a>, and if not, find them elsewhere and package them yourself (as in <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Samsung-i9070-%28Samsung-Galaxy-S-Advance%29">samsung-i9070</a>).</p>
+<p>See also: <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Wifi">Wifi</a></p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Initramfs-development/index.html b/docs/wiki/Initramfs-development/index.html
new file mode 100644
index 0000000..7e36025
--- /dev/null
+++ b/docs/wiki/Initramfs-development/index.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Initramfs-development/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Initramfs development</h1>
+<h3>We have two initramfs files</h3>
+<p>After the installation, you will have <strong>two</strong> initramfs files in your device's <code>/boot</code> folder.</p>
+<pre class="codehilite"><code>% ls ~/.local/var/pmbootstrap/chroot_rootfs_samsung-i9100/boot
+initramfs-samsung-i9100 initramfs-samsung-i9100-extra vmlinuz-samsung-i9100</code></pre>
+
+
+<p>Regular Linux distributions only have <strong>one</strong> initramfs file. <strong>We have split it</strong> into two to work around the <a href="https://github.com/postmarketOS/pmbootstrap/issues/126">size limitations</a>, that some devices have. The regular initramfs is relatively small (<em>~1.5 mb, and we could make it smaller if necessary!</em>) and loads the contents of the initramfs-extra from the pmOS boot partition during the boot process.</p>
+<p>The pmOS boot partition is a <strong>sub</strong>partition of the system partition (<em>SD cards: simply a real partition on the SD card</em>), so we can make it almost as big as we want.</p>
+<h3>Recommended development workflow</h3>
+<ul>
+<li>Only do one small change at a time</li>
+<li>Rebuild and test on device (<code>pmbootstrap initfs</code>, <code>pmbootstrap flasher flash_kernel</code>)</li>
+<li>When it works, version your change with git</li>
+<li>Repeat</li>
+</ul>
+<p>When you change too much, it will simply not work and you most likely will have no idea why it does not work. Go back to the last working version and do smaller changes at a time.</p>
+<h3>Tips and tricks</h3>
+<ul>
+<li>Familiarize with [[inspecting the initramfs]]</li>
+<li><code>pmbootstrap initfs</code> can do more than rebuilding the initramfs:</li>
+</ul>
+<pre class="codehilite"><code>% pmbootstrap initfs --help
+usage: pmbootstrap initfs [-h]
+ {hook_ls,hook_add,hook_del,ls,build,extract} ...
+
+positional arguments:
+ {hook_ls,hook_add,hook_del,ls,build,extract}
+ hook_ls list available and installed hook packages
+ hook_add add a hook package
+ hook_del uninstall a hook package
+ ls list initramfs contents
+ build (re)build the initramfs
+ extract extract the initramfs to a temporary folder
+
+optional arguments:
+ -h, --help show this help message and exit</code></pre>
+
+
+<h3>Troubleshooting</h3>
+<h4>My device reboots with my customized init script</h4>
+<p>This is probably caused by a syntax error. Use <code>shellcheck</code> to check your scripts for syntax errors. You could also loop forever or spawn a shell (if you have a hardware keyboard or serial cable connected) at some point for debugging (<code>while true; do sleep 1; done</code>) and use the telnet shell to test the commands, that are failing, interactively.</p>
+<h4>No log output on serial!</h4>
+<p>By default, all output from the initramfs get redirected to <code>/pmOS_init.log</code>. If you want the output through the debug cable you need to add <code>PMOS_NO_OUTPUT_REDIRECT</code> to your <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Troubleshooting:kernel#how-can-i-boot-the-kernel-with-some-specific-arguments">kernel command line</a>.</p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Inspecting-the-initramfs/index.html b/docs/wiki/Inspecting-the-initramfs/index.html
new file mode 100644
index 0000000..45b2307
--- /dev/null
+++ b/docs/wiki/Inspecting-the-initramfs/index.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Inspecting-the-initramfs/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Inspecting the initramfs</h1>
+<p>This page explains how to connect to your device when it has booted to the [[initramfs|Initramfs-development]] by installing the so-called <a href="https://github.com/postmarketOS/pmbootstrap/blob/master/aports/postmarketos-mkinitfs-hook-usb-shell/20-usb-shell.sh">usb-shell hook</a>. This is useful if you want to know more about the [[boot process]], simply inspect the initramfs or you want to debug why something doesn't work.</p>
+<p><strong>NOTE: This is considered a security hole. Only use it for debugging, and uninstall the usb-shell hook afterwards</strong></p>
+<p>By default, initramfs launchs a telnet daemon listening on <code>:23</code> waiting for your partition password.</p>
+<p>It is possible to enable a second telnet daemon on <code>:24</code> that gives you a shell this way:</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py initfs hook_add usb-shell
+./pmbootstrap.py install</code></pre>
+
+
+<p>After reflashing the kernel or booting with the new initramfs image, you should be able to connect to the new telnet instance.</p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Installation-Guide/index.html b/docs/wiki/Installation-Guide/index.html
new file mode 100644
index 0000000..bf47019
--- /dev/null
+++ b/docs/wiki/Installation-Guide/index.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Installation-Guide/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Installation Guide</h1>
+<h2>Important Note</h2>
+<p>This page is a work in progress, and is not complete enough at this point to be useful.</p>
+<h3>Introduction</h3>
+<p>If you own a device which has been ported to postmarketOS, then this page will help you to obtain, build, and install postmarketOS to this device.</p>
+<p>Any commands that are expected to be entered into a terminal are prefixed with <code>$</code>. You should not enter the <code>$</code> character, it is merely to designate that the following commands are intented to be input/executed within a termina. For example, the following command to list contents of the current working directory, <code>ls</code>, will be mentioned on this page as:</p>
+<p><code>$ ls</code></p>
+<h3>Requirements</h3>
+<p>The following applications should be installed:</p>
+<ul>
+<li>
+<p>python 3</p>
+</li>
+<li>
+<p>git</p>
+</li>
+</ul>
+<h3>Obtaining postmarketOS</h3>
+<p>At this point in the project, it is recommended to build postmarketOS from the latest available source code. It can be obtained by running the following:</p>
+<p><code>$ git pull https://github.com/postmarketOS/pmbootstrap.git</code></p>
+<h3>Building postmarketOS</h3>
+<p>First, initialize the work directory. Replace <code>$WORKDIR</code> with the desired location for placing the output from the build process. It is recommended to have at least 10GB of available space in this location. </p>
+<p>When initializing pmbootstrap, you'll need to select the device you are building for, the location for the work directory, the number of parallel jobs to run when compiling, and whether or not file timestamps should be accounted for when determining if a rebuild is necessary. User input is <strong>bolded</strong> below, replace with your desired options.</p>
+<pre>
+$ cd pmbootstrap
+$ ./pmbootstrap.py init
+[20:20:33] Target device (either an existing one, or a new one for porting).
+[20:20:33] Available (9): lg-d855, lg-hammerhead, lg-mako, motorola-titan, nokia-rx51, samsung-i9070, samsung-i9100, samsung-maguro, sony-amami
+[20:20:33] Device []: <b>nokia-rx51</b>
+[20:20:45] Location of the 'work' path. Multiple chroots (native, device arch, device rootfs) will be created in there.
+[20:20:45] Work path []: <b>~/work</b>
+[20:20:47] How many jobs should run parallel on this machine, when compiling?
+[20:20:47] Jobs []: <b>4</b>
+[20:20:48] Rebuild packages, when the last modified timestamp changed, even if the version did not change? This makes pmbootstrap behave more like 'make'.
+[20:20:48] Timestamp based rebuilds (y/n) [y]: <b>y</b>
+[20:20:49] WARNING: The applications in the chroots do not get updated automatically.
+[20:20:49] Run 'pmbootstrap zap' to delete all chroots once a day before working with pmbootstrap!
+[20:20:49] It only takes a few seconds, and all packages are cached.
+[20:20:49] Done!
+</pre>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Installing-packages-on-a-running-phone/index.html b/docs/wiki/Installing-packages-on-a-running-phone/index.html
new file mode 100644
index 0000000..8a358e4
--- /dev/null
+++ b/docs/wiki/Installing-packages-on-a-running-phone/index.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Installing-packages-on-a-running-phone/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Installing packages on a running phone</h1>
+<ol>
+<li>Go to the pmbootstrap packages dir (by default it's <code>~/.local/var/pmbootstrap/packages</code>)</li>
+<li>Start a webserver <code>python3 -m http.server</code></li>
+<li>Change repository on the phone to point to your dev machine in <code>/etc/apk/repositories</code>:</li>
+</ol>
+<pre class="codehilite"><code># You can remove this line
+/home/user/packages/user
+
+# Add your dev machine, change the ip-address for your network
+http://192.168.2.42:8000
+
+https://nl.alpinelinux.org/alpine/edge/main
+https://nl.alpinelinux.org/alpine/edge/community
+https://nl.alpinelinux.org/alpine/edge/testing</code></pre>
+
+
+<ol>
+<li>Upgrade the package you built with <code>apk upgrade [package name]</code></li>
+</ol>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/LG-G3-Global/index.html b/docs/wiki/LG-G3-Global/index.html
new file mode 100644
index 0000000..111d4a6
--- /dev/null
+++ b/docs/wiki/LG-G3-Global/index.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/LG-G3-Global/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>LG G3 Global</h1>
+<h3>Contributors</h3>
+<ul>
+<li>Nutcake</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Compiling the LineageOS kernel</li>
+<li>SSH</li>
+<li>Booting (see "Signing the boot image" to boot without pmbootstrap command)</li>
+<li>Flash light <ul>
+<li>Use led:flash_torch in /sys/class/leds. led:flash_0 and led:flash_1 can be used to individually address the dual-tone flash LEDs but they turn off again after a second.</li>
+</ul>
+</li>
+<li>RGB front LED</li>
+<li>Backlight control</li>
+<li>Battery</li>
+<li>Weston + Touchscreen</li>
+</ul>
+<h3>What does not work</h3>
+<ul>
+<li>WiFi, Bluetooth, etc...</li>
+<li>USB OTG</li>
+<li>Graphical terminal in weston crashes instantly </li>
+</ul>
+<p>There is also a bug where the screen is not updated. Workaround: login using ssh and run the following command:</p>
+<pre class="codehilite"><code>ssh user@172.16.42.1
+sudo su
+while [ ! ]; do cat /sys/class/graphics/fb0/modes &gt; /sys/class/graphics/fb0/mode; done</code></pre>
+
+
+<p>As this devices' screen is 1440x2560px, small elements in weston are extremely hard to click and the on-screen keyboard is pretty much unusable, so DPI scaling is needed in weston. However, right now the fbdev backend doesn't support scaling. </p>
+<h3>Fastboot</h3>
+<p>Before you can use fastboot on this device you need to remove LGs Download mode, which hides the standard fastboot mode. You can do this by zeroing out a partition called 'laf':</p>
+<pre class="codehilite"><code class="language-bash">adb shell
+su
+dd if=/dev/block/platform/msm_sdcc.1/by-name/laf of=/sdcard/laf.img #backup LGs Download mode to the internal SD just in case
+dd if=/dev/zero of=/dev/block/platform/msm_sdcc.1/by-name/laf #Overwrite laf with zeroes, enabling fastboot
+exit
+adb reboot bootloader #reboot directly to fastboot</code></pre>
+
+
+<p>More detailed instructions for this can be found <a href="https://forum.xda-developers.com/tmobile-lg-g3/general/how-to-boot-lg-g3-fastboot-mode-t3087445">here</a></p>
+<p>Afterwards, you can boot into fastboot by following these steps:</p>
+<pre class="codehilite"><code>1. Turn of phone completely
+2. Hold Volume Up.
+3. Plug in USB-cable while still holding Vol. Up until fastboot pops up</code></pre>
+
+
+<h3>Signing the boot image</h3>
+<p>pmbootstrap will successfully flash system and kernel, however the device will only boot if you use the
+<code>pmbootstrap flasher boot</code> command, as it will otherwise show this error:</p>
+<pre class="codehilite"><code>ERROR : boot certification verify
+[630]_________________________________________
+[640]
+[640] Secure booting Error!
+[640] Cause : boot certification verify
+[640]
+[640]_________________________________________</code></pre>
+
+
+<p>The message is shown for 3 seconds, then the screen blacks out and the LED will blink red and blue indefinitely.<br />
+This happens because the bootloader on the d855 variant of the LG G3 can not be unlocked and you have to trick the bootloader into thinking your boot image is legitimate.<br />
+To do this, you need to first export your boot.img-lg-d855:</p>
+<pre class="codehilite"><code>mkdir -p /tmp/pmOS_export
+pmbootstrap flasher export /tmp/pmOS_export</code></pre>
+
+
+<p>Then we need a tool called <a href="https://github.com/CyboLabs/Open_Bump">Open_Bump</a>, which can sign boot images for our device. (Requires Python 2. Also works for older LG devices?):</p>
+<pre class="codehilite"><code>git clone https://github.com/CyboLabs/Open_Bump
+cd Open_Bump
+python2 open_bump.py &quot;/tmp/pmOS_export/boot.img-lg-d855&quot;</code></pre>
+
+
+<p>This will create a signed image called <code>boot_bumped.img-lg-d855</code> in <code>/tmp/pmOS_export/</code>.
+Now first flash System and kernel images using pmbootstrap and then manually flash the signed image over these:</p>
+<pre class="codehilite"><code>pmbootstrap flasher flash_system
+pmbootstrap flasher flash_kernel
+fastboot flash boot /tmp/pmOS_export/boot_bumped.img-lg-d855</code></pre>
+
+
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/LineageOS/android_kernel_lge_g3">Original Kernel Source</a></li>
+</ul>
+<h2>Photos</h2>
+<ul>
+<li><a href="http://i.imgur.com/2bpw0Bo.jpg">Weston running with demos</a></li>
+<li><a href="http://i.imgur.com/XYhmjwQ.png">Secure booting error when using unsigned image</a></li>
+<li><a href="https://www.reddit.com/r/postmarketOS/comments/6jvb2i/postmarketos_on_the_lg_g3_global_d855/">/r/postmarketOS post</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Matrix-and-IRC/index.html b/docs/wiki/Matrix-and-IRC/index.html
new file mode 100644
index 0000000..1dfe304
--- /dev/null
+++ b/docs/wiki/Matrix-and-IRC/index.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Matrix-and-IRC/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Matrix and IRC</h1>
+<p>If you want to talk to other people working on/with postmarketOS you can do so either:</p>
+<p>Join Matrix group </p>
+<p><a href="https://chat.disroot.org/#/room/#postmarketos:disroot.org"><strong>#postmarketos:disroot.org</strong></a></p>
+<p>Or IRC:</p>
+<p><strong>#postmarketos on freenode</strong></p>
+<p>Matrix &amp; IRC are bridged.</p>
+<p><em>If you don't know which one to use, use the Matrix group, because it doesn't require a bouncer to receive all messages all the time.</em></p>
+<blockquote>
+<p>Please use the <a href="https://reddit.com/r/postmarketos">reddit page</a> for general discussions, as the matrix &amp; IRC are primarily focused on porting / development help &amp; discussions.</p>
+</blockquote>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Migration-to-aports-subfolders/index.html b/docs/wiki/Migration-to-aports-subfolders/index.html
new file mode 100644
index 0000000..338664d
--- /dev/null
+++ b/docs/wiki/Migration-to-aports-subfolders/index.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Migration-to-aports-subfolders/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Migration to aports subfolders</h1>
+<p>In <a href="https://github.com/postmarketOS/pmbootstrap/issues/194">#194</a> we decided to split up the <code>aports</code> folder (the one that holds all package build recipes) into subfolders. Here are the instructions to migrate your locally checked out code, on which you possibly have worked on already. As always, you can ask in <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Matrix-and-IRC">the channel</a> or create an issue in the tracker, if you need any help.</p>
+<p>Please extend these instructions, if you need additinal steps to migrate your <code>aports</code> folder or something is unclear!</p>
+<p>Instructions:
+<em> Make a backup of your pmbootstrap folder, just to be sure
+</em> Run <code>git pull</code> to get the latest source
+* move the aports, that you have created in the appropriate folders
+ * <code>cross</code>: everything cross-compiler related
+ * <code>device</code>: device specific packages and kernels
+ * <code>kde</code>: everything plasma-mobile related
+ * <code>main</code>: the rest
+ * <code>unmaintained</code>: packages, that we don't really need anymore, but we don't want to remove them yet</p>
+<p>In case you need it, here is a migration script. It will convert the old folder structure to the new one.</p>
+<pre class="codehilite"><code class="language-shell">#!/bin/sh -e
+if [ ! -d &quot;aports&quot; ]; then
+ echo &quot;Please execute this script in your pmbootstrap folder.&quot;
+ exit 1
+fi
+
+for i in cross device kde main unmaintained; do
+ mkdir -p aports_new/&quot;$i&quot;
+done
+
+cd aports
+mv *-armhf *-aarch64 qemu-user-static-repack ../aports_new/cross
+mv device-* linux-* ../aports_new/device
+mv acpid ../aports_new/unmaintained
+mv * ../aports_new/main
+
+cd ..
+rm -d aports
+mv aports_new aports</code></pre>
+
+
+<p>And here is a revert script, that converts the new folder structure into the old one (usually you should <em>not</em> need this!):</p>
+<pre class="codehilite"><code class="language-shell">#!/bin/sh -e
+if [ ! -d &quot;aports&quot; ]; then
+ echo &quot;Please execute this script in your pmbootstrap folder.&quot;
+ exit 1
+fi
+
+mkdir aports_new
+mv aports/*/* aports_new/
+rm -r aports
+mv aports_new aports</code></pre>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Milestones/index.html b/docs/wiki/Milestones/index.html
new file mode 100644
index 0000000..347ec8f
--- /dev/null
+++ b/docs/wiki/Milestones/index.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Milestones/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Milestones</h1>
+<p>postmarketOS aims to be like a typical Linux distribution - with lots of possibilities to choose from. And with a default selection of components, that are most useful to casual users.
+This means, that there is no concrete plan, that everyone must follow for it to succeed. Instead, <strong>everyone is encouraged to work on what they enjoy most!</strong></p>
+<p>In consequence, pmOS does not use a regular milestone plan with versions (at least right now). Here is a list with what individuals are working on. <strong>Feel free to add yourself here and what you are interested in</strong> (optionally with priorities and estimated finish date), but you don't have to! If you do, please keep your section of this list updated, and remove finished tasks.</p>
+<p><strong>These are all estimations</strong> and the community is expected to understand when something does not work out as planned here. This is a free time project after all, so be grateful, that the individuals step up and share their plans at all.</p>
+<hr />
+<h3>ollieparanoid</h3>
+<p><em>Right now, my primary focus is recruiting more developers by keeping the development enjoyable. Apart from fixing bugs as highest priority, I focus on the following list. Feel free to discuss the importance of these items with me in <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Matrix-and-IRC">Matrix/IRC</a> or on <a href="https://reddit.com/r/postmarketOS">/r/postmarketOS</a> (for longer discussions).</em></p>
+<ol>
+<li>Binary package repository (<a href="https://github.com/postmarketOS/pmbootstrap/issues/64">#64</a>, expecting to have a working version at: <code>2017-08-14</code> - but expect delays due to how fast everything is moving, as said above: helping the others is a higher priority!)</li>
+<li>Extend initramfs hooks: allow adding files, multiple hook points (e.g. before and after initramfs-extra was loaded) <a href="https://github.com/postmarketOS/pmbootstrap/issues/165">#165</a></li>
+<li>Run the <a href="https://github.com/postmarketOS/pmbootstrap/tree/master/test">full testsuite</a> with Travis CI for each commit/PR</li>
+<li>Show code coverage in the <code>README.md</code> (with a link to details: which files are not covered by testcases etc.)</li>
+<li>Use <a href="https://www.shellcheck.net/"><code>shellcheck</code></a> for more shell scripts in the repo (maybe for all <code>APKBUILD</code>s?), <a href="https://github.com/postmarketOS/pmbootstrap/issues/110">automatically format shell scripts</a></li>
+<li>Update the deviceinfo format:</li>
+<li>Add more information: <a href="https://github.com/postmarketOS/pmbootstrap/issues/58">system partition size</a>, ~~<a href="https://github.com/postmarketOS/pmbootstrap/issues/50">kernel commandline</a>~~</li>
+<li>~~Create a reference page in the Wiki~~ pablog <a href="https://github.com/postmarketOS/pmbootstrap/wiki/deviceinfo-reference">beat me to it</a>, thanks! :D</li>
+<li>Write a <a href="https://en.wikipedia.org/wiki/Lint_(software)">linter</a> for deviceinfo files as part of <code>pmbootstrap</code></li>
+<li>Add that linting to the static code analysis script for CI</li>
+<li>Various device improvements. I'd like to <em>try out</em> (with no expectations, that this will work anytime soon!) mainline for <code>lg-mako</code> (<a href="https://github.com/postmarketOS/pmbootstrap/issues/91">#91</a>, <a href="https://github.com/postmarketOS/pmbootstrap/issues/12">#12</a>)</li>
+</ol>
+<h3>MartijnBraam</h3>
+<ol>
+<li>Try to post as much different devices as portable to find edgecases in the build process</li>
+</ol>
+<h3>AndrewMcSwain</h3>
+<ol>
+<li>Evangelization </li>
+<li>project-specific (devs)</li>
+<li>Means: current: word of mouth in Sao Paulo ; future: meetups, talks, panels, presentations</li>
+<li>philosophy and anthropology of tool-making (gateway for layperson to the hacking community)</li>
+<li>Means: writings and discussions with intellectuals, the urban youth, the homeless, and the elite of Sao Paulo society</li>
+<li>On-boarding and new dev integration</li>
+<li>Documentation
+-(<em>more details to come</em>)-</li>
+</ol>
+<h3>ata2001</h3>
+<ol>
+<li>Implement a feature in pmbootstrap, what will allow users to create recovery flashable zips for android devices. (<a href="https://github.com/postmarketOS/pmbootstrap/issues/109">#109</a>)</li>
+<li>Make postmarketOS work on the following devices:<ul>
+<li>Sony Xperia Z1 Compact (amami)</li>
+<li>Motorola Moto G 3rd gen. (osprey)</li>
+<li>Motorola Defy+ (jordanplus)</li>
+</ul>
+</li>
+</ol>
+<h3>Pablo Castellano</h3>
+<ol>
+<li>Add support for new devices (actually focused on <a href="https://github.com/postmarketOS/pmbootstrap/wiki/motorola-titan-%28Moto-G-2014%29">Moto G 2014</a>). If you want, you can send me your device by mail and I will try to add pmOS support to it. After that I will return the device back to you.</li>
+<li>Make pmOS debugging easier for new developers</li>
+<li>Improve documentation &amp; usability of <code>pmboostrap</code>/<code>pmOS</code></li>
+</ol>
+<h3><a href="https://github.com/craftyguy">craftyguy</a></h3>
+<ol>
+<li>
+<p>Make the greatest device ever, a Nokia N900, the best device to use with postmarketOS.</p>
+</li>
+<li>
+<p>Assist with documentation.</p>
+</li>
+<li>
+<p>Do what I can to help with packaging a GUI.</p>
+</li>
+</ol>
+<h3><a href="https://github.com/drebrez">drebrez</a></h3>
+<ul>
+<li>[x] Optimizing the pmOS system image size by creating the partitions as small as possible and resize them during the first boot (<a href="https://github.com/postmarketOS/pmbootstrap/pull/127">#127</a>)</li>
+<li>[x] Add possibility to export an Odin flashable file for samsung devices (<code>pmbootstrap flasher export --odin</code>)</li>
+<li>[ ] Add support for <a href="https://en.wikipedia.org/wiki/Memory_Technology_Device">MTD</a> devices (generate yaffs2 image, adapt initramfs script)</li>
+<li>[ ] Add support for new devices</li>
+</ul>
+<h3>PureTryOut</h3>
+<p>In general, get postmarketOS to a ready for daily usage state, in my case getting packages and UI packaged for the end user to install. Right now focus is on:</p>
+<ol>
+<li>
+<p>Packaging Phone UI: Plasma Mobile</p>
+</li>
+<li>
+<p>Packaging Phone UI: UBports/Yunit</p>
+</li>
+</ol>
+<h3>bshah</h3>
+<ol>
+<li>
+<p>Getting postmarketOS working on my device locally</p>
+</li>
+<li>
+<p>Helping to make Plasma Mobile working on postmarketOS</p>
+</li>
+</ol>
+<h3><a href="https://github.com/mcbitter">McBitter</a></h3>
+<ol>
+<li>
+<p>Get bootloader for Coolpad Modena 2 opensourced and unlocked. Requires lots of reverse engineering work.</p>
+</li>
+<li>
+<p>Eventually start porting device to pmOS.</p>
+</li>
+<li>
+<p>Write open source replacement for SP flashtool (very low priority).</p>
+</li>
+</ol>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Mozilla-Flame/index.html b/docs/wiki/Mozilla-Flame/index.html
new file mode 100644
index 0000000..31be027
--- /dev/null
+++ b/docs/wiki/Mozilla-Flame/index.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Mozilla-Flame/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Mozilla Flame</h1>
+<h3>Contributors</h3>
+<ul>
+<li>kskarthik</li>
+<li>MartijnBraam</li>
+<li>ata2001</li>
+<li>ollieparanoid</li>
+<li>dzervas</li>
+<li>lawl</li>
+<li>yuvadm</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Compiling the kernel</li>
+<li>Building a base image</li>
+<li>Fastboot flash</li>
+<li>SD card install</li>
+</ul>
+<h4>Current Build / Boot Process</h4>
+<p>Build and install to SD card:</p>
+<pre class="codehilite"><code>$ ./pmbootstrap.py build device-mozilla-flame
+$ ./pmbootstrap.py build linux-mozilla-flame --arch=armhf
+$ ./pmbootstrap.py install --sdcard /dev/mmcblkX
+$ ./pmbootstrap.py flasher export $SOMEDIR</code></pre>
+
+
+<p>Now we can one-time flash the boot image:</p>
+<pre class="codehilite"><code>$ flashboot boot $SOMEDIR/boot.img</code></pre>
+
+
+<h3>Known Issues</h3>
+<h4>Unknown chunk type</h4>
+<p><code>mozilla-flame.img</code> cannot be flashed to either the <code>system</code>/<code>userdata</code> partitions due to bootloader limitations (probably because the system image is larger than the max download size and it forces the download into sparse mode, which is handled badly.)</p>
+<pre class="codehilite"><code>$ fastboot flash userdata flame/mozilla-flame.img
+target reported max download size of 301989888 bytes
+erasing 'userdata'...
+OKAY [ 1.254s]
+sending sparse 'userdata' 1/2 (288781 KB)...
+OKAY [ 10.018s]
+writing 'userdata' 1/2...
+FAILED (remote: Unknown chunk type)
+finished. total time: 11.275s</code></pre>
+
+
+<p>Workaround is to install to SD card.</p>
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/mozilla-b2g/codeaurora_kernel_msm/tree/t2m-flame-3.4-kk">Kernel Source</a></li>
+<li>Updated and rebased <a href="https://github.com/yuvadm/pmbootstrap/tree/device-mozilla-flame"><code>device-mozilla-flame</code></a> branch</li>
+<li><a href="https://gist.github.com/yuvadm/238db856f1a81a572b0cd2a02a51ae8a">UART/serial debug logs</a></li>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/wiki/Serial-debugging#mozilla-flame">Serial debugging</a></li>
+<li><a href="https://yuv.al/flame/">Mozilla Flame B2G build artifacts mirror</a></li>
+</ul>
+<h3>Internal Data</h3>
+<p>Taken off a clean <code>v18D_nightly_v5.zip</code> B2G base image</p>
+<h4>Partitions</h4>
+<pre class="codehilite"><code class="language-bash">shell@flame:/ $ df
+Filesystem Size Used Free Blksize
+/dev 451.7M 132.0K 451.6M 4096
+/sys/fs/cgroup 451.7M 0.0K 451.7M 4096
+/sys/fs/cgroup/memory: Permission denied
+/mnt/asec 451.7M 0.0K 451.7M 4096
+/mnt/obb 451.7M 0.0K 451.7M 4096
+/system 412.5M 283.5M 129.0M 4096
+/data 2.0G 40.4M 2.0G 4096
+/cache 70.8M 4.1M 66.8M 4096
+/persist 4.9M 4.0M 852.0K 4096
+/firmware 64.0M 31.7M 32.2M 16384
+/storage/sdcard 3.8G 8.0K 3.8G 4096
+/mnt/media_rw/sdcard: Permission denied
+
+shell@flame:/ $ cat /proc/partitions
+major minor #blocks name
+
+ 253 0 196608 zram0
+ 179 0 7634944 mmcblk0
+ 179 1 65536 mmcblk0p1
+ 179 2 512 mmcblk0p2
+ 179 3 128 mmcblk0p3
+ 179 4 32 mmcblk0p4
+ 179 5 512 mmcblk0p5
+ 179 6 500 mmcblk0p6
+ 179 7 15360 mmcblk0p7
+ 179 8 500 mmcblk0p8
+ 179 9 1024 mmcblk0p9
+ 179 10 1536 mmcblk0p10
+ 179 11 1536 mmcblk0p11
+ 179 12 429580 mmcblk0p12
+ 179 13 32768 mmcblk0p13
+ 179 14 73728 mmcblk0p14
+ 179 15 15360 mmcblk0p15
+ 179 16 1024 mmcblk0p16
+ 179 17 1536 mmcblk0p17
+ 179 18 1 mmcblk0p18
+ 179 19 8 mmcblk0p19
+ 179 20 10240 mmcblk0p20
+ 179 21 1024 mmcblk0p21
+ 179 22 1024 mmcblk0p22
+ 179 23 256 mmcblk0p23
+ 179 24 10 mmcblk0p24
+ 179 25 512 mmcblk0p25
+ 179 26 500 mmcblk0p26
+ 179 27 500 mmcblk0p27
+ 179 28 204800 mmcblk0p28
+ 179 29 2162688 mmcblk0p29
+ 179 30 4095983 mmcblk0p30
+ 179 32 512 mmcblk0rpmb
+
+shell@flame:/ $ ls -la /dev/block/platform/msm_sdcc.1/by-name/
+lrwxrwxrwx root root 1969-12-31 19:10 DDR -&gt; /dev/block/mmcblk0p4
+lrwxrwxrwx root root 1969-12-31 19:10 aboot -&gt; /dev/block/mmcblk0p5
+lrwxrwxrwx root root 1969-12-31 19:10 abootbk -&gt; /dev/block/mmcblk0p25
+lrwxrwxrwx root root 1969-12-31 19:10 boot -&gt; /dev/block/mmcblk0p7
+lrwxrwxrwx root root 1969-12-31 19:10 cache -&gt; /dev/block/mmcblk0p14
+lrwxrwxrwx root root 1969-12-31 19:10 custpack -&gt; /dev/block/mmcblk0p28
+lrwxrwxrwx root root 1969-12-31 19:10 fota -&gt; /dev/block/mmcblk0p24
+lrwxrwxrwx root root 1969-12-31 19:10 fsc -&gt; /dev/block/mmcblk0p18
+lrwxrwxrwx root root 1969-12-31 19:10 fsg -&gt; /dev/block/mmcblk0p17
+lrwxrwxrwx root root 1969-12-31 19:10 misc -&gt; /dev/block/mmcblk0p16
+lrwxrwxrwx root root 1969-12-31 19:10 modem -&gt; /dev/block/mmcblk0p1
+lrwxrwxrwx root root 1969-12-31 19:10 modemst1 -&gt; /dev/block/mmcblk0p10
+lrwxrwxrwx root root 1969-12-31 19:10 modemst2 -&gt; /dev/block/mmcblk0p11
+lrwxrwxrwx root root 1969-12-31 19:10 pad -&gt; /dev/block/mmcblk0p9
+lrwxrwxrwx root root 1969-12-31 19:10 persist -&gt; /dev/block/mmcblk0p13
+lrwxrwxrwx root root 1969-12-31 19:10 recovery -&gt; /dev/block/mmcblk0p15
+lrwxrwxrwx root root 1969-12-31 19:10 rpm -&gt; /dev/block/mmcblk0p6
+lrwxrwxrwx root root 1969-12-31 19:10 rpmbk -&gt; /dev/block/mmcblk0p26
+lrwxrwxrwx root root 1969-12-31 19:10 sbl1 -&gt; /dev/block/mmcblk0p2
+lrwxrwxrwx root root 1969-12-31 19:10 sdi -&gt; /dev/block/mmcblk0p3
+lrwxrwxrwx root root 1969-12-31 19:10 secro -&gt; /dev/block/mmcblk0p23
+lrwxrwxrwx root root 1969-12-31 19:10 splash -&gt; /dev/block/mmcblk0p20
+lrwxrwxrwx root root 1969-12-31 19:10 ssd -&gt; /dev/block/mmcblk0p19
+lrwxrwxrwx root root 1969-12-31 19:10 system -&gt; /dev/block/mmcblk0p12
+lrwxrwxrwx root root 1969-12-31 19:10 traceability -&gt; /dev/block/mmcblk0p21
+lrwxrwxrwx root root 1969-12-31 19:10 tuningpara -&gt; /dev/block/mmcblk0p22
+lrwxrwxrwx root root 1969-12-31 19:10 tz -&gt; /dev/block/mmcblk0p8
+lrwxrwxrwx root root 1969-12-31 19:10 tzbk -&gt; /dev/block/mmcblk0p27
+lrwxrwxrwx root root 1969-12-31 19:10 usbmsc -&gt; /dev/block/mmcblk0p30
+lrwxrwxrwx root root 1969-12-31 19:10 userdata -&gt; /dev/block/mmcblk0p29</code></pre>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Package-naming-convention/index.html b/docs/wiki/Package-naming-convention/index.html
new file mode 100644
index 0000000..7ba1229
--- /dev/null
+++ b/docs/wiki/Package-naming-convention/index.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Package-naming-convention/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Package naming convention</h1>
+<h3>General convention</h3>
+<ul>
+<li>All package names should be lowercase.</li>
+<li>Wherever possible, device code name is preferred over the model number.</li>
+<li>Please use dashes (<code>-</code>) only, no underscores (<code>_</code>).</li>
+<li>If something is unclear or you would like to extend the naming convention, please open a ticket in the tracker.</li>
+</ul>
+<h3>device-* packages</h3>
+<p><code>device-{vendor}-{device code name/model number}</code></p>
+<h3>linux-* kernels</h3>
+<p><code>linux-{vendor}-{device code name/model number}</code></p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Packaging-Plasma-Mobile/index.html b/docs/wiki/Packaging-Plasma-Mobile/index.html
new file mode 100644
index 0000000..15c333e
--- /dev/null
+++ b/docs/wiki/Packaging-Plasma-Mobile/index.html
@@ -0,0 +1,1193 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Packaging-Plasma-Mobile/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Packaging Plasma Mobile</h1>
+<p>This page keeps track of what needs to be packaged to get Plasma Mobile working (<a href="https://github.com/postmarketOS/pmbootstrap/issues/161">#161</a>). The minimal set of programs is already packaged (thanks to PureTryOut!). See [[Plasma Mobile]] for further documentation on getting it running.</p>
+<p>The dependencies listed are dependencies of packages not packaged by Alpine. This list is subject to change. The list is based on <a href="https://github.com/blue-systems/pm-arch/tree/master/packages">this Arch repository</a>.</p>
+<h3>Packages already in the Alpine repositories</h3>
+<table>
+<thead>
+<tr>
+<th>Required packages</th>
+<th>Dependency of</th>
+<th>Packaged by Alpine</th>
+<th>Status</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>qt5-qttools-dev</td>
+<td>baloo, kfilemetadata, ki18n, karchive, kpty, kdelibs4support, threadweaver, plasma-framework, kwayland, plasma-workspace, kpeople, kcoreaddons, kunitconversion, kitemmodels, kemoticons, kparts, kdesignerplugin, kactivities, kdeclarative, kjsembed, knotifyconfig, ktexteditor, kholidays, kwin, krunner, kxmlrpcclient, networkmanager-qt, kdesignerplugin, kservice, kwidgetsaddons, kitemviews, kplotting, kconfig, kwindowsystem, kpackage, kdesu, kcmutils, kcrash, kdbusaddons, kcodecs, kauth, kguiaddons, knewstuff, ki18n, kdoctools, kjsembed, kservice, kcontacts, kpackage</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>lmdb-dev</td>
+<td>baloo</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>docbook-xsl</td>
+<td>kdoctools, appstream-qt, libaccounts-glib</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>taglib-dev</td>
+<td>kfilemetadata</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>qt5-qtdeclarative</td>
+<td>kpeople, kactivities, qt5-qtwebchannel, qt5-qtlocation</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>qt5-qtdeclarative-dev</td>
+<td>ki18n, plasma-maliit-framework, plasma-maliit-plugin</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>py3-qt5</td>
+<td>ki18n, kcoreaddons, kitemmodels, kwidgetsaddons, kitemviews, kconfig, kdbusaddons, kcodecs, kauth, kguiaddons, kconfigwidgets</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>qt5-qtbase</td>
+<td>karchive, threadweaver, kwayland, kcoreaddons, kitemmodels, kjs, kholidays, appstream-qt, networkmanager-qt, kwidgetsaddons, kitemviews, kplotting, kconfig, kcodecs, kdecoration, qt5-qtpolkit, qt5-qtpackagekit</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>qt5-qtsvg</td>
+<td>kjsembed</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>qt5-qtgraphicaleffects</td>
+<td>plasma-phone-components</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>networkmanager</td>
+<td>networkmanager-qt, packagekit</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>networkmanager-dev</td>
+<td>kdelibs4support</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>mesa-dev</td>
+<td>threadweaver, kservice, kplotting, kcrash, kguiaddons, kconfigwidgets</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>giflib</td>
+<td>khtml</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>gperf-dev</td>
+<td>khtml, kcodecs</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>qt5-qtquickcontrols</td>
+<td>plasma-framework</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libgit2</td>
+<td>ktexteditor</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libxml2</td>
+<td>libqalculate, appstream-qt, libaccounts-glib</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>wayland</td>
+<td>kwayland</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>gpsd-dev</td>
+<td>plasma-workspace</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libepoxy</td>
+<td>kdeclarative</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>gconf-dev</td>
+<td>qt5-qtlocation</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>util-macros</td>
+<td>xmessage</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>glib</td>
+<td>libqalculate, appstream-qt</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>perl-xml-parser</td>
+<td>libqalculate</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>intltool</td>
+<td>libqalculate, packagekit</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libxaw</td>
+<td>xmessage</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>font-noto</td>
+<td>plasma-integration</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>gobject-introspection</td>
+<td>appstream-qt, packagekit</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>itstool</td>
+<td>appstream-qt</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>vala</td>
+<td>appstream-qt, packagekit</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>gtk-doc</td>
+<td>libaccounts-glib, packagekit</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libical</td>
+<td>kcalcore</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>dbus-glib</td>
+<td>libaccounts-glib, packagekit</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>sqlite</td>
+<td>libaccounts-glib, packagekit</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>py-gobject</td>
+<td>libaccounts-glib</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libxfixes</td>
+<td>kwindowsystem</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>automoc4</td>
+<td>breeze, kdelibs. qt5-qtpolkit</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>polkit</td>
+<td>packagekit</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>polkit-dev</td>
+<td>qt5-qtpolkit</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>shared-mime-info</td>
+<td>packagekit</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>snowball</td>
+<td>appstream-qt</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>dbus-glib</td>
+<td>telepathy-glib</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>gtk-doc</td>
+<td>telepathy-farstream</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>glib-doc</td>
+<td>telepathy-farstream</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>vala</td>
+<td>telepathy-glib</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>gobject-introspection</td>
+<td>telepathy-farstream, telepathy-glib</td>
+<td>yes</td>
+<td></td>
+</tr>
+</tbody>
+</table>
+<h3>Packages yet to be packaged</h3>
+<table>
+<thead>
+<tr>
+<th>Required packages</th>
+<th>Dependency of</th>
+<th>Packaged by Alpine</th>
+<th>Status</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>extra-cmake-modules</td>
+<td>all KDE packages</td>
+<td>no, only an outdated version (5.31.x rather than 5.36.x)</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>karchive</td>
+<td>kdoctools, kfilemetadata, kemoticons, kpackage</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>qt5-qtscript-dev</td>
+<td>ki18n</td>
+<td>yes for all architectures, except armhf due to a build failure. It however compiles fine now</td>
+<td>upstreamed</td>
+</tr>
+<tr>
+<td>kdecoration</td>
+<td>breeze</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>autoconf-archive</td>
+<td>packagekit</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>libyaml</td>
+<td>appstream-qt</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kwindowsystem</td>
+<td>kactivities, kcrash</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kwidgetsaddons</td>
+<td>kpeople, kconfigwidgets</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kitemviews</td>
+<td>kpeople</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kcoreaddons</td>
+<td>kpty, kactivities, kcontacts, kpackage, kcrash, kauth</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kunitconversion</td>
+<td>kdelibs4support</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kitemmodels</td>
+<td>kdelibs4support</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>libutempter</td>
+<td>kpty</td>
+<td>no</td>
+<td>doesn't compile, glibc is required</td>
+</tr>
+<tr>
+<td>kwayland</td>
+<td>plasma-maliit-framework, plasma-framework, plasma-integration, kscreenlocker</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>poppler-qt5</td>
+<td>kfilemetadata</td>
+<td>no, only a qt4 version</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kdoctools</td>
+<td>plasma-mobile, kdelibs4support, plasma-framework, plasma-workspace, kded, kdesignerplugin, kjs, kjsembed, kde-cli-tools, milou, kwin, krunner, kdesignerplugin, kservice, kcalcore, kinit, kpackage, kscreenlocker</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kfilemetadata</td>
+<td>baloo</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kidletime</td>
+<td>baloo, kscreenlocker</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>polkit-qt5</td>
+<td>kauth</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kcrash</td>
+<td>kservice</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kdbusaddons</td>
+<td>kservice, kio</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kcodecs</td>
+<td>kcontacts, kconfigwidgets</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kconfig</td>
+<td>kactivities, kservice, kcontacts, kio, kconfigwidgets</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kpackage</td>
+<td>kdeclarative, frameworkintegration</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>networkmanager-qt</td>
+<td>plasma-workspace</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kservice</td>
+<td>kpeople, kemoticons, kdesu, kinit, kio</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>solid</td>
+<td>kio</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>media-player-info</td>
+<td>kio</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kauth</td>
+<td>kconfigwidgets</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kguiaddons</td>
+<td>kconfigwidgets</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kconfigwidgets</td>
+<td>libksysguard, kbookmarks</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kiconthemes</td>
+<td>kbookmarks</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kcompletion</td>
+<td>ktextwidgets</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>sonnet</td>
+<td>ktextwidgets</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>ktextwidgets</td>
+<td>kxmlgui</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kglobalaccel</td>
+<td>kxmlgui</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kxmlgui</td>
+<td>kbookmarks</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kbookmarks</td>
+<td>kio</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kjobwidgets</td>
+<td>kio</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kio</td>
+<td>baloo, kparts, kdesignerplugin, kdeclarative, knotifyconfig, kactivitymanagerd, plasma-integration, kxmlrpcclient, kdesignerplugin, kinit, knewstuff</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kactivitymanagerd</td>
+<td>plasma-workspace</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>knotifyconfig</td>
+<td>plasma-workspace</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kjs</td>
+<td>khtml, kjsembed</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kactivities</td>
+<td>plasma-framework</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kdeclarative</td>
+<td>plasma-framework, kcmutils, kscreenlocker</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>knotifications</td>
+<td>plasma-framework</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>plasma-framework</td>
+<td>plasma-samegame, plasma-settings, kwin</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>cln</td>
+<td>libqalculate</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kemoticons</td>
+<td>kdelibs4support</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kinit</td>
+<td>kded</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kded</td>
+<td>kdelibs4support</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kparts</td>
+<td>kdelibs4support, khtml, ktexteditor</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kpeople</td>
+<td>plasma-phone-components</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kjsembed</td>
+<td>plasma-workspace</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kdesignerplugin</td>
+<td>plasma-workspace, kdelibs4support, kcalcore</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kdelibs4support</td>
+<td>plasma-settings, plasma-workspace, kcalcore</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>frameworkintegration</td>
+<td>breeze</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kpty</td>
+<td>kdesu</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kdesu</td>
+<td>kde-cli-tools</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kcmutils</td>
+<td>kde-cli-tools, kwin, kscreenlocker, breeze</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>ktexteditor</td>
+<td>plasma-workspace</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>threadweaver</td>
+<td>krunner</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>krunner</td>
+<td>breeze, plasma-workspace, milou</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kscreenlocker</td>
+<td>kwin</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>breeze</td>
+<td>kwin, plasma-integration</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kwin</td>
+<td>plasma-workspace</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>milou</td>
+<td>plasma-workspace</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>baloo</td>
+<td>plasma-mobile, plasma-workspace</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>plasma-workspace</td>
+<td>plasma-phone-components, plasma-mobile</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>plasma-mobile</td>
+<td></td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>farstream</td>
+<td>telepathy-farstream</td>
+<td>yes, but upstream APKBUILD has wrong dependency and fails</td>
+<td>upstreamed</td>
+</tr>
+<tr>
+<td>telepathy-glib</td>
+<td>telepathy-farstream</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>telepathy-farstream</td>
+<td>telepathy-qt5</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>telepathy-qt5</td>
+<td>plasma-phone-components</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>plasma-phone-components</td>
+<td></td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+</tbody>
+</table>
+<h3>Optional (extra apps and functionality, but not required to get the base working)</h3>
+<table>
+<thead>
+<tr>
+<th>Required packages</th>
+<th>(Optional) Dependency of</th>
+<th>Packaged by Alpine</th>
+<th>Status</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>qt5-qtdeclarative-dev</td>
+<td>libqofono-qt5</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libqofono-qt5</td>
+<td></td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>bluez</td>
+<td>gypsy</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>bluez-libs</td>
+<td>gypsy</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libgudev</td>
+<td>gypsy</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>dbus-glib</td>
+<td>gypsy</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libxslt</td>
+<td>gypsy</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libxslt</td>
+<td>qt5-qtwebengine</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libxdamage</td>
+<td>qt5-qtwebengine</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>minizip</td>
+<td>qt5-qtwebengine</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>ffmpeg</td>
+<td>qt5-qtwebengine</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>jsoncpp-dev</td>
+<td>qt5-qtwebengine</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>ninja</td>
+<td>qt5-qtwebengine</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libvpx</td>
+<td>qt5-qtwebengine</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libevent</td>
+<td>qt5-qtwebengine</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libsrtp</td>
+<td>qt5-qtwebengine</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>snappy</td>
+<td>qt5-qtwebengine</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>nss</td>
+<td>qt5-qtwebengine</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>protobuf</td>
+<td>qt5-qtwebengine</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libxcomposite</td>
+<td>qt5-qtwebengine</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>libxrandr</td>
+<td>qt5-qtwebengine</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>pciutils</td>
+<td>qt5-qtwebengine</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>gperf-dev</td>
+<td>khtml, qt5-qtwebengine, kcodecs</td>
+<td>yes</td>
+<td></td>
+</tr>
+<tr>
+<td>gypsy</td>
+<td>qt5-qtlocation</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>qt5-qtwebchannel</td>
+<td>qt5-qtwebengine</td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>qt5-qtlocation</td>
+<td>qt5-qtwebengine</td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>kdoctools</td>
+<td>kconfigwidgets</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>qt5-qtwebengine</td>
+<td>plasma-angelfish</td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>knewstuff</td>
+<td>frameworkintegration</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kcontacts</td>
+<td>libkgapi</td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>kcalcore</td>
+<td>libkgapi</td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>libkgapi</td>
+<td>plasma-settings</td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>kplotting</td>
+<td>kdesignerplugin</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>plasma-integration</td>
+<td>plasma-workspace</td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>plasma-maliit-framework</td>
+<td>plasma-maliit-plugin</td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>plasma-maliit-plugin</td>
+<td></td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>plasma-settings</td>
+<td></td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>libqalculate</td>
+<td>plasma-workspace</td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>kde-cli-tools</td>
+<td>plasma-workspace</td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>plasma-samegame</td>
+<td></td>
+<td>no</td>
+<td>?</td>
+</tr>
+</tbody>
+</table>
+<h3>Plasma Mobile Browser</h3>
+<table>
+<thead>
+<tr>
+<th>Required packages</th>
+<th>Dependency of</th>
+<th>Packaged by Alpine</th>
+<th>Status</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>plasma-angelfish</td>
+<td></td>
+<td>no</td>
+<td>?</td>
+</tr>
+</tbody>
+</table>
+<h3>Plasma Calendar</h3>
+<table>
+<thead>
+<tr>
+<th>Required packages</th>
+<th>Dependency of</th>
+<th>Packaged by Alpine</th>
+<th>Status</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>kholidays</td>
+<td>plasma-workspace</td>
+<td>no</td>
+<td>?</td>
+</tr>
+</tbody>
+</table>
+<h3>Plasma Camera</h3>
+<table>
+<thead>
+<tr>
+<th>Required packages</th>
+<th>Dependency of</th>
+<th>Packaged by Alpine</th>
+<th>Status</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>plasma-framework</td>
+<td>plasma-camera</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>plasma-camera</td>
+<td></td>
+<td>no</td>
+<td>?</td>
+</tr>
+</tbody>
+</table>
+<h3>Okular Universal Document Viewer</h3>
+<table>
+<thead>
+<tr>
+<th>Required packages</th>
+<th>Dependency of</th>
+<th>Packaged by Alpine</th>
+<th>Status</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>kdelibs4support</td>
+<td>okular-frameworks</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>khtml</td>
+<td>okular-frameworks</td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>chmlib</td>
+<td>okular-frameworks</td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>threadweaver</td>
+<td>okular-frameworks</td>
+<td>no</td>
+<td>compiles</td>
+</tr>
+<tr>
+<td>kactivities-frameworks</td>
+<td>okular-frameworks</td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>kpty</td>
+<td>okular-frameworks</td>
+<td>no</td>
+<td>?</td>
+</tr>
+<tr>
+<td>okular-frameworks</td>
+<td></td>
+<td>no</td>
+<td>?</td>
+</tr>
+</tbody>
+</table>
+<h3>Koko Image Gallery</h3>
+<table>
+<thead>
+<tr>
+<th>Required packages</th>
+<th>Dependency of</th>
+<th>Packaged by Alpine</th>
+<th>Status</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>koko</td>
+<td></td>
+<td>no</td>
+<td>?</td>
+</tr>
+</tbody>
+</table>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Partition-layout/index.html b/docs/wiki/Partition-layout/index.html
new file mode 100644
index 0000000..6bfb2d5
--- /dev/null
+++ b/docs/wiki/Partition-layout/index.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Partition-layout/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Partition layout</h1>
+<h3>General partition layout (installation image)</h3>
+<pre class="codehilite"><code class="language-shell">/dev/installp1 # pmOS boot (contains kernel, initramfs, initramfs-extra)
+/dev/installp2 # pmOS root (encrypted, unless --no-fde is specified)</code></pre>
+
+
+<h3>SD card</h3>
+<p>This is the least awkward layout - both partitions from above get directly created on the SD card. If your device has a sdcard slot, it is recommended to use it. Because then you don't wear down the internal flash storage of the device and don't need to worry about the phone's internal storage partition layout.</p>
+<p>Usage:</p>
+<pre class="codehilite"><code class="language-shell">$ ./pmbootstrap.py install --sdcard /dev/mmcblkX</code></pre>
+
+
+<h3>Android internal storage</h3>
+<p>We don't want to modify the partition layout on the internal storage of Android systems. Because this seems somewhat risky, and then users couldn't simply install another ROM such as LineageOS anymore. So we came up with the following:</p>
+<p>The Android internal storage is already partitioned - the layout seems to be different for every device, as well as the numbers they have assigned. But most notably the devices have the following partitions:</p>
+<pre class="codehilite"><code>boot
+system
+userdata</code></pre>
+
+
+<p>We usually flash a <code>boot.img</code> file (which is the kernel + initramfs) to Android's <code>boot</code> partition (see also: [[deviceinfo_flash_methods]]) - because that is what works and what all other ROMs do.</p>
+<p>Now the interesting part is the system partition, where we flash our installation image. But the installation image already has a partition layout and own partitions! So you will have <em>subpartitions</em>. In the end, it will look like this:</p>
+<pre class="codehilite"><code class="language-shell">systemp1 # pmOS boot partition, only initramfs-extra gets used from there
+systemp2 # pmOS (un)encrypted root filesystem</code></pre>
+
+
+<p>The initramfs (in the <code>boot.img</code> file!) will automatically find and mound the pmOS boot and root partition, load the <code>initramfs-extra</code> (which contains additional files, it was split to save space) and take care of booting through until OpenRC takes over.</p>
+<p>The <code>userdata</code> partition is not used yet (proposal to do that is in <a href="https://github.com/postmarketOS/pmbootstrap/issues/60">#60</a>). But as we are pretty flexible, you can also flash pmOS to the <code>userdata</code> partition, if it has more space and you can't fit it on the <code>system</code> partition. The initramfs will detect it anyway. Just make sure, that you don't have it flashed to <em>both</em> partitions!
+To flash to the <code>userdata</code> partition instead of the <code>system</code> partition, you currently need to change the config <a href="https://github.com/postmarketOS/pmbootstrap/blob/6a129669a389446bdbbb2bf6e8576043bc80bf29/pmb/config/__init__.py#L250">here</a>.</p>
+<h3>Future ideas</h3>
+<p>There might be scenarios, in which the partition type of the <code>system</code> partition can not be changed through the flasher, because it only allows <a href="https://en.wikipedia.org/wiki/YAFFS2">yaffs2</a> or simg with ext4 support (during research for the mozilla flame, we found that to be the case - however, it also has an SD slot, so we did not continue this way).</p>
+<p>A proposal we have for that case, is to have one big ext4/yaffs partition, and include the whole system image file inside that. Then we would adjust the initramfs code to find the boot and root partitions inside that, and teach it how to resize the whole thing to the maximum partition size. We already did some experiments, and so far everything worked (talk to drebrez or ollieparanoid).</p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Plasma-Mobile/index.html b/docs/wiki/Plasma-Mobile/index.html
new file mode 100644
index 0000000..6704c97
--- /dev/null
+++ b/docs/wiki/Plasma-Mobile/index.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Plasma-Mobile/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Plasma Mobile</h1>
+<h2>Overview</h2>
+<p>The basic minimum shell has been ported to postmarketOS, and can now be tested. So far no one has gotten it working yet, so don't expect anything but errors.</p>
+<p>To install it on your device run <code>./pmbootstrap.py install --add plasma-mobile,plasma-phone-components,dbus-x11</code>. You can also tell pmbootstrap to <em>always</em> add Plasma Mobile by adding <code>plasma-mobile</code>, <code>plasma-phone-components</code> and <code>dbus-x11</code> to the list of "Extra packages" when running <code>./pmbootstrap.py init</code>.</p>
+<p>For instructions on running Plasma Mobile you can use the KDE website: https://community.kde.org/Plasma/Mobile/RunningApps</p>
+<p><em>Packaging efforts have been documented [[here|Packaging Plasma Mobile]].</em></p>
+<h2>Debugging</h2>
+<p>Create <code>~/.config/QtProject/qtlogging.ini</code> with the following content:</p>
+<pre class="codehilite"><code>[Rules]
+org.kde.kwindowsystem.info=true
+org.kde.kwindowsystem.warning=true
+org.kde.kwindowsystem.critical=true
+org.kde.kwindowsystem.debug=true
+kwin_core.info=true
+kwin_core.warning=true
+kwin_core.critical=true
+kwin_core.debug=true
+kwineffects.info=true
+kwineffects.warning=true
+kwineffects.critical=true
+kwineffects.debug=true
+libkwineffects.info=true
+libkwineffects.warning=true
+libkwineffects.critical=true
+libkwineffects.debug=true
+libkwinglutils.info=true
+libkwinglutils.warning=true
+libkwinglutils.critical=true
+libkwinglutils.debug=true
+libkwinxrenderutils.info=true
+libkwinxrenderutils.warning=true
+libkwinxrenderutils.critical=true
+libkwinxrenderutils.debug=true
+kwin_wayland_drm.info=true
+kwin_wayland_drm.warning=true
+kwin_wayland_drm.critical=true
+kwin_wayland_drm.debug=true
+kwin_wayland_framebuffer.info=true
+kwin_wayland_framebuffer.warning=true
+kwin_wayland_framebuffer.critical=true
+kwin_wayland_framebuffer.debug=true
+kwin_wayland_hwcomposer.debug=true
+kwin_wayland_backend.info=true
+kwin_wayland_backend.warning=true
+kwin_wayland_backend.critical=true
+kwin_wayland_backend.debug=true
+kwin_wayland_x11windowed.info=true
+kwin_wayland_x11windowed.warning=true
+kwin_wayland_x11windowed.critical=true
+kwin_wayland_x11windowed.debug=true
+kwin_platform_x11_standalone.info=true
+kwin_platform_x11_standalone.warning=true
+kwin_platform_x11_standalone.critical=true
+kwin_platform_x11_standalone.debug=true
+kwin_libinput.info=true
+kwin_libinput.warning=true
+kwin_libinput.critical=true
+kwin_libinput.debug=true
+kwin_tabbox.info=true
+kwin_tabbox.warning=true
+kwin_tabbox.critical=true
+kwin_tabbox.debug=true
+kwin_decorations.info=true
+kwin_decorations.warning=true
+kwin_decorations.critical=true
+kwin_decorations.debug=true
+kwin_scripting.info=true
+kwin_scripting.warning=true
+kwin_scripting.critical=true
+kwin_scripting.debug=true
+kwin_xkbcommon.info=true
+kwin_xkbcommon.warning=true
+kwin_xkbcommon.critical=true
+kwin_xkbcommon.debug=true
+kwin_qpa_plugin.info=true
+kwin_qpa_plugin.warning=true
+kwin_qpa_plugin.critical=true
+kwin_qpa_plugin.debug=true</code></pre>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Porting-to-a-new-device/index.html b/docs/wiki/Porting-to-a-new-device/index.html
new file mode 100644
index 0000000..003e52d
--- /dev/null
+++ b/docs/wiki/Porting-to-a-new-device/index.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Porting-to-a-new-device/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Porting to a new device</h1>
+<p>If you have <em>any</em> questions, feel free to ask in the <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Matrix-and-IRC">matrix/irc channel</a> or <a href="https://github.com/postmarketOS/pmbootstrap/issues">bug tracker</a>! This is a wiki, so please adjust everything that isn't detailed enough or would have helped you with porting.</p>
+<p>Please write your porting progress to the <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Devices">devices</a> page, even if you didn't get very far. This helps to determine what can be improved to make porting easier.</p>
+<p><strong>Please use a spare device for experimenting with postmarketOS! You won't be able to use typical phone features right now, such as making calls, writing SMS, using Wi-Fi, using Bluetooth. Although everything has been tested, there is no guarantee that you won't break your device.</strong></p>
+<h3>Initialization</h3>
+<ul>
+<li>Clone the repository: <code>git clone https://github.com/postmarketOS/pmbootstrap</code></li>
+<li>Run <code>./pmbootstrap.py init</code> and configure for a new device</li>
+<li>Open a second terminal and run <code>./pmbootstrap.py log</code> to get detailed output from the following pmbootstrap commands</li>
+</ul>
+<h3>Device-specific package</h3>
+<p>Create an appropriate <code>device-$vendor-$name</code> package in the <code>aports/device</code> folder:</p>
+<pre class="codehilite"><code class="language-shell">cp -r aports/device/device-samsung-i9100 aports/device/device-vendor-name</code></pre>
+
+
+<p>The important files are <code>APKBUILD</code> (<em>build recipe, [[apk is an Alpine Linux term|Glossary#apk]]</em>) and [[deviceinfo|deviceinfo reference]]. Please adjust them as necessary. Note that if your device uses <strong>fastboot</strong>, you will need to add <code>mkbootimg</code> to the <code>depends=</code> list in the <code>APKBUILD</code>, and the following variables at the end of <code>deviceinfo</code> (<a href="https://github.com/postmarketOS/pmbootstrap/wiki/How-to-find-device-specific-information#fastboot-bootimg-flash-offsets">guide</a>, <a href="https://github.com/postmarketOS/pmbootstrap/blob/2670c3a031e7204cb638a6947ea4e867e66d033b/aports/device-lg-mako/deviceinfo#L18-L24">example</a>):</p>
+<pre class="codehilite"><code class="language-shell"># Fastboot related
+deviceinfo_generate_bootimg=&quot;true&quot;
+deviceinfo_flash_offset_kernel=&quot;&quot;
+deviceinfo_flash_offset_ramdisk=&quot;&quot;
+deviceinfo_flash_offset_second=&quot;&quot;
+deviceinfo_flash_offset_tags=&quot;&quot;
+deviceinfo_flash_pagesize=&quot;&quot;</code></pre>
+
+
+<p>A post-install script can be created to append device-specific partitions to <code>/etc/fstab</code>. See <a href="https://github.com/postmarketOS/pmbootstrap/blob/ed8fba54c31c3ccd1f1f59c7194fffecc63ca7c4/aports/device/device-nokia-rx51/device-nokia-rx51.post-install#L12">the post-install script</a> for <code>device-nokia-rx51</code> for an example.</p>
+<p>Once the device package is configured, you will need to update checksums in the APKBUILD to match the new configuration files. You can do that by running:</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py checksum device-$vendor-$name</code></pre>
+
+
+<p>Now, you can build your device package with:</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py build device-$vendor-$name</code></pre>
+
+
+<h3>Kernel package</h3>
+<p>While the goal is to use a mainline kernel for all devices in the long run, this certainly can not be done in one step when porting to a new device. Create a new package for the kernel by copying the kernel package of the most similar device with an existing port. For example:</p>
+<pre class="codehilite"><code class="language-shell">cp -r aports/device/linux-lg-mako aports/device/linux-vendor-name</code></pre>
+
+
+<p>Now edit the <code>APKBUILD</code>. Replace the kernel source with a kernel suitable for your device. For Android devices we usually use the <a href="https://github.com/postmarketOS/pmbootstrap/wiki/How-to-find-device-specific-information#lineageos-kernel-source-repository">kernels from LineageOS</a>. Copy the right <a href="https://github.com/postmarketOS/pmbootstrap/wiki/How-to-find-device-specific-information#kernel-defconfig-default-config">defconfig</a> from your kernel's source folder into your new <code>linux-...</code> folder and adjust its file name. Please adjust the comments in the <code>APKBUILD</code> file about which defconfig you have used, and which modifications you have made. Please also adjust the <code>pkgver</code>/<code>pkgrel</code> to match the <a href="https://stackoverflow.com/a/12151781">kernel version</a>.</p>
+<p>Next, generate the checksum for the kernel package files using:</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py checksum linux-$vendor-$name</code></pre>
+
+
+<p>Now, before building the kernel itself, it is required to run the kernel's <a href="https://en.wikipedia.org/wiki/Menuconfig">menuconfig</a> with:</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py menuconfig linux-$vendor-$name</code></pre>
+
+
+<p>The first time, you run the menuconfig command, you will get prompted about new config options, that the default config does not address (in Android's build process, these options get ignored, but in pmOS they must be specified). Please accept the defaults it presents. After that, you will be shown a menu, in which the <code>DEVTMPFS</code> kconfig flag should be enabled, to get udev working, which is needed for touchscreen support in Weston. It should be located under <code>Device Drivers ---&gt; Generic Driver Options</code>.</p>
+<p>Once you have configured the kernel, build it (the arch specification is necessary here, because we're really compiling code - the device package just contains text/scripts and no native code, therefore it is architecture independent):</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py build linux-$vendor-$name --arch=armhf</code></pre>
+
+
+<p><em>NOTE</em>: The <code>linux-lg-mako</code> package has a patch called <code>gpu-msm-fix-gcc5-compile.patch</code>, to fix compiler errors with GCC6. If your kernel doesn't need that specific patch (if it does not apply correctly, as in <a href="https://github.com/postmarketOS/pmbootstrap/issues/14#issuecomment-305083767">this</a> report), just remove the file, and remove it from the <code>source=</code> line in the <code>APKBUILD</code>.</p>
+<p>If your manufacturer has not released the source code of your kernel and you don't want to give up on porting your device, you can try the <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Using-prebuilt-kernels">prebuilt kernels</a> approach.</p>
+<h4>Appended device trees</h4>
+<p>Some devices need an appended device tree to boot. In LineageOS kernels this will mean that beside the generated <code>zImage</code> there is also a <code>zImage-dtb</code> file. To use this you have to enable in your kernel appending the <code>dtb</code> as in <a href="https://github.com/postmarketOS/pmbootstrap/blob/51af907534a1518c22f78c006ae880d495ec3985/aports/linux-lg-hammerhead/config-lg-hammerhead.armhf#L674">lg-hammerhead</a> and change the package step in the build script to use the <code>dtb</code> file:</p>
+<pre class="codehilite"><code class="language-shell"># Change zImage to zImage-dtb on this command:
+install -Dm644 &quot;$srcdir/build/arch/arm/boot/zImage-dtb&quot; \
+ &quot;$pkgdir/boot/vmlinuz-$_flavor&quot;</code></pre>
+
+
+<p>In Android kernels, you usually enable <code>BUILD_ARM_APPENDED_DTB_IMAGE</code> and get an image with <code>dtb</code> appended and the filename will be <code>zImage-dtb</code>.</p>
+<p>In the mainline kernel instead, you enable <a href="https://github.com/postmarketOS/pmbootstrap/blob/51af907534a1518c22f78c006ae880d495ec3985/aports/linux-nokia-rx51/config-nokia-rx51.armhf#L555"><code>ARM_APPENDED_DTB</code></a> (without trialing <strong>_IMAGE</strong>) and will get a bunch of <code>.dtb</code> files for the boards that are selected in the kernel config. In this case you need to manually append the correct <code>.dtb</code> file to the compiled kernel image <code>zImage</code>. An example of this is in the kernel package for the <a href="https://github.com/postmarketOS/pmbootstrap/blob/51af907534a1518c22f78c006ae880d495ec3985/aports/linux-nokia-rx51/APKBUILD#L94-L96">nokia n900</a>:</p>
+<pre class="codehilite"><code class="language-shell">cd &quot;$srcdir/build/arch/arm/boot&quot;
+cat zImage dts/omap3-n900.dtb &gt; zImage-dtb</code></pre>
+
+
+<p><em>If you are unsure, whether your device has an appended dtb file, use <a href="https://github.com/PabloCastellano/extract-dtb">extract-dtb</a> on an existing kernel image (e.g. from LineageOS). <code>extract-dtb</code> is packaged for postmarketOS, you can build it with <code>pmbootstrap build extract-dtb</code>.</em></p>
+<h3>Installation</h3>
+<p>If you want to install to the system partition of an image file, run the following:</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py install</code></pre>
+
+
+<p>If you want to install to a SD card, insert it and run the following. Replace mmcblk0 with the actual device name (<code>lsblk</code> is handy to find out the correct device name).</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py install --sdcard=/dev/mmcblk0</code></pre>
+
+
+<h3>Flashing</h3>
+<p>Before you can run any flash command, you must put your device in the flashing mode. It is usually done holding Volume Down &amp; Power simultaneously when the device is switched off but it may vary depending on the device. For more information see the specific page for your device in the <a href="https://wiki.lineageos.org/devices">LineageOS Wiki</a>.</p>
+<p>If you want to install to the system partition, run the following (not for the SD card installation!):</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py flasher flash_system</code></pre>
+
+
+<p>If the system partition for your device is less than 850MB, you should find the size and change the value of <code>install_size_system</code> in the file <code>pmb/config/__init__.py</code></p>
+<p>If you have a device, that works with fastboot, you can boot the kernel now without flashing it:</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py flasher boot</code></pre>
+
+
+<p>Otherwise, you will need to flash the kernel to the device boot partition:</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py flasher flash_kernel</code></pre>
+
+
+<h3>Alternative to flashing: export</h3>
+<p>If the flashing method does not work, it is also possible to export all generated image files to a specific directory (with symlinks), so you can flash it manually with your host Linux system (or even on Windows with proprietary flashers such as Odin, if this is the only way it works for you):</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap flasher export</code></pre>
+
+
+<h3>After flashing</h3>
+<p>If you are lucky, your screen may give some clues that you are booted into pmOS. If not, do not get discouraged, the graphics on your device may not yet be setup correctly. The next steps are to see if you can connect to the device through telnet over USB. See the [[Inspecting the initramfs]] page for more details.</p>
+<p>Don't forget to create a specific wiki page for your device, and add it to the [[devices]] page. If you noticed anything that was unclear or discovered something useful, please help to improve the wiki!</p>
+<blockquote>
+<p>Feel free to ask / help on <a href="Matrix-and-IRC">IRC or Matrix group</a></p>
+</blockquote>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Related-Projects/index.html b/docs/wiki/Related-Projects/index.html
new file mode 100644
index 0000000..e32ed77
--- /dev/null
+++ b/docs/wiki/Related-Projects/index.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Related-Projects/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Related Projects</h1>
+<p><em>This is a stub, please expand with more projects, links and descriptions, and a nice intro - then remove this message.</em></p>
+<ul>
+<li><a href="https://halium.org">Halium</a></li>
+<li><a href="https://github.com/MediaDeb/MediaDeb">MediaDeb</a></li>
+<li><a href="http://plasma-mobile.org/">Plasma Mobile</a></li>
+<li><a href="https://ubports.com">ubports</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Samsung-N7100-(Galaxy-Note-II-GSM)/index.html b/docs/wiki/Samsung-N7100-(Galaxy-Note-II-GSM)/index.html
new file mode 100644
index 0000000..8c83614
--- /dev/null
+++ b/docs/wiki/Samsung-N7100-(Galaxy-Note-II-GSM)/index.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Samsung-N7100-(Galaxy-Note-II-GSM)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Samsung N7100 (Galaxy Note II GSM)</h1>
+<h2>Basic info</h2>
+<p>Device: Samsung Galaxy Note II (N7100 GSM)</p>
+<p>ARM Cortex A9 Samsung Exynos 4 Quad 4412 (32bit), quad core 1.6GHz; 2GB RAM, 16GB storage.</p>
+<ul>
+<li><a href="http://www.gsmarena.com/samsung_galaxy_note_ii_n7100-4854.php">more specs</a></li>
+<li><a href="https://github.com/bigbiff/android_kernel_samsung_smdk4412">Unofficial TWRP kernel repo</a></li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Compiling the kernel</li>
+<li>Flashing with Heimdall</li>
+<li>Booting initramfs</li>
+<li>SSH</li>
+<li>Weston</li>
+<li>Touch screen fully calibrated</li>
+</ul>
+<h3>What does not work</h3>
+<ul>
+<li>N/A</li>
+</ul>
+<h3>Not tested</h3>
+<ul>
+<li>Sound</li>
+<li>WiFi (needs kernel modules compiling first)</li>
+</ul>
+<h3>How to enter flash mode</h3>
+<p>Press and hold "volume down + home + power" simultaneously. Then click volume up to confirm.</p>
+<h3>Installing system</h3>
+<p>First build the device package:</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py build device-samsung-n7100</code></pre>
+
+
+<p>Then you need to configure the kernel before building with <code>menuconfig</code> like so:</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py menuconfig linux-samsung-n7100</code></pre>
+
+
+<p>You can hold down the enter key while it asks you the y/n questions until you get to the menu, then you want to enable the <code>DEVTMPFS</code> kconfig flag located in <code>Device Drivers ---&gt; Generic Driver Options</code>.</p>
+<p>Now you want to compile the kernel itself:</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py build linux-samsung-n7100 --arch=armhf</code></pre>
+
+
+<p>Once you've successfully compiled the kernel you can install the OS to an SD card or your system partition. I've only tried an SD card:</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py install --sdcard=/dev/sdb</code></pre>
+
+
+<p>You will need a 1GB SD card in order for this to work, also keep in mind that this will format the sd card.</p>
+<p>Next you want to put your phone in download mode by holding <code>power + vol down + home</code> all together until you enter download mode, press volume up again to continue past the warning.</p>
+<p>Now you can flash the boot image:</p>
+<pre class="codehilite"><code class="language-shell">./pmbootstrap.py flasher flash_kernel</code></pre>
+
+
+<p>We're using <code>flash_kernel</code> because the N7100 packages its kernel and initfs file into one boot image, where as some other phones have separate partitions for each <strong>unlike</strong> the N7100.</p>
+<p>If everything checks out OK, your N7100 should reboot and you should see the Samsung logo. Dont worry if the screen is flashing on and off and its taking a while, after a minute or 2 it should show up the pmOS splash!</p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Samsung-i9070-(Samsung-Galaxy-S-Advance)/index.html b/docs/wiki/Samsung-i9070-(Samsung-Galaxy-S-Advance)/index.html
new file mode 100644
index 0000000..8265566
--- /dev/null
+++ b/docs/wiki/Samsung-i9070-(Samsung-Galaxy-S-Advance)/index.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Samsung-i9070-(Samsung-Galaxy-S-Advance)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Samsung i9070 (Samsung Galaxy S Advance)</h1>
+<h3>Contributors</h3>
+<ul>
+<li>drebrez</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Compiling the kernel</li>
+<li>Flashing with heimdall (see below)</li>
+<li>Booting initramfs</li>
+<li>Network through USB</li>
+<li>SSH</li>
+<li>Weston with touchscreen</li>
+<li>Wifi (Details below and in <a href="https://github.com/postmarketOS/pmbootstrap/pull/138">#138</a>)</li>
+</ul>
+<h3>What does not work</h3>
+<ul>
+<li>Unknown, but probably everything else</li>
+</ul>
+<h3>Boot process</h3>
+<p>Unlike most other Android devices, the i9070 can not boot a <code>boot.img</code> (which consists of <code>kernel</code> + <code>initramfs</code>). Instead, the <code>boot.img</code> file is just a regular kernel.</p>
+<p>However, it is possible to directly integrate a <code>initramfs</code> into the kernel at kernel compile time (this is totally different from the boot.img approach, if this is unclear to you, please ask in the channel), and this is what the Android ROMs do on the i9070. While it is not a big deal in the Android compilation process, it is a problem for postmarketOS, because we want to be able to build the <code>initramfs</code> independently from the kernel.</p>
+<p>The following workaround is currently implemented:
+<em> We flash the </em>real<em> initramfs to the kernel2 partition (this partition usually contains a backup of the stock kernel)
+</em> The initramfs <a href="https://github.com/postmarketOS/pmbootstrap/blob/master/aports/linux-samsung-i9070/init">init script built into the kernel</a> checks if the kernel2 partition contains a compressed initramfs, and if it does, it extracts it and passes execution to the real initramfs init script.
+* This idea is based on something called <a href="https://forum.xda-developers.com/galaxy-s2/orig-development/isorec-isolated-recovery-galaxy-s2-t3291176">"isorec"</a>.</p>
+<h3>Device partitions</h3>
+<p>The following partitions are used for the postmarketOS:</p>
+<ul>
+<li>Kernel =&gt; /dev/mmcblk0p15 (16MB)</li>
+<li>Kernel2 =&gt; /dev/mmcblk0p17 (16MB)</li>
+</ul>
+<p>Possible partitions for the postmarketOS system image:
+<em> SYSTEM =&gt; /dev/mmcblk0p3 (600MB)
+</em> DATAFS =&gt; /dev/mmcblk0p5 (2GB)</p>
+<h3>Flashing with heimdall</h3>
+<p>In order to flash the kernel and the initramfs using <code>heimdall</code> you simply have to call <code>pmbootstrap flasher flash_kernel</code></p>
+<p>This will write in the partitions specified in the <a href="https://github.com/postmarketOS/pmbootstrap/blob/master/aports/device-samsung-i9070/deviceinfo#L18-L19">deviceinfo</a> file.</p>
+<p>At the moment is not possible to write the system image file (samsung-i9070.img) using heimdall. A temporary solution is to use the TWRP shell to perform a command like this:
+<code>dd if=samsung-i9070.img of=/dev/mmcblk0p5</code></p>
+<h3>How drebrez made wifi work</h3>
+<ul>
+<li>build the kernel module (dhd.ko for the i9070)</li>
+<li>get the vendor files for the <a href="https://github.com/Epirex/android_vendor_samsung_u8500">Samsung U8500 devices</a></li>
+<li>load the module using insmod with the firmware_path and nvram_path parameters</li>
+</ul>
+<p><code>insmod dhd.ko firmware_path=/etc/wifi/bcmdhd_sta.bin nvram_path=/etc/wifi/nvram_net.txt</code>
+* set a mac address </p>
+<p><code>ifconfig wlan0 hw ether 01:02:03:04:05:06</code>
+* bring the interface up </p>
+<p><code>ifconfig wlan0 up</code>
+* scan to find out what WiFi networks are detected </p>
+<p><code>iw dev wlan0 scan</code>
+* connect to WPA/WPA2 WiFi network </p>
+<p><code>wpa_passphrase wifi_ssid wifi_key &gt;&gt; /etc/wpa_supplicant.conf</code>
+* start wpa_supplicant to connect to the network </p>
+<p><code>wpa_supplicant -B -D wext -i wlan0 -c /etc/wpa_supplicant.conf</code>
+* verify that you are indeed connected to the SSID </p>
+<p><code>iw wlan0 link</code>
+* start udhcpc to get an ip address </p>
+<p><code>udhcpc -b -i wlan0</code></p>
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/tree/master/aports/device-samsung-i9070">Device package</a></li>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/tree/master/aports/linux-samsung-i9070">Kernel package</a></li>
+<li><a href="https://github.com/Epirex/Samsung_STE_Kernel/tree/marshmallow">Epirex's Kernel</a></li>
+</ul>
+<h3>Photos</h3>
+<ul>
+<li><a href="https://www.reddit.com/r/postmarketOS/comments/6j269y/postmarketos_on_the_samsung_galaxy_s_advance_i9070/">Initramfs asking for the password via telnet</a></li>
+<li><a href="http://imgur.com/a/tJUAq">postmarketOS demo menu (XWayland)</a></li>
+<li><a href="http://imgur.com/9c66GAs">Weston with various programs running</a></li>
+<li><a href="http://imgur.com/a/x17Br">Weston-terminal running in fullscreen mode</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Samsung-n7100-(Samsung-Galaxy-Note-2)/index.html b/docs/wiki/Samsung-n7100-(Samsung-Galaxy-Note-2)/index.html
new file mode 100644
index 0000000..275a323
--- /dev/null
+++ b/docs/wiki/Samsung-n7100-(Samsung-Galaxy-Note-2)/index.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Samsung-n7100-(Samsung-Galaxy-Note-2)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Samsung n7100 (Samsung Galaxy Note 2)</h1>
+<h3>Contributors</h3>
+<ul>
+<li>JamesHealdUK</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>TODO</li>
+</ul>
+<h3>What does not work</h3>
+<ul>
+<li>TODO</li>
+</ul>
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/tree/device-samsung-n7100">Device package</a></li>
+</ul>
+<h3>Photos</h3>
+<ul>
+<li></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Screen-Calibration/index.html b/docs/wiki/Screen-Calibration/index.html
new file mode 100644
index 0000000..4a201dc
--- /dev/null
+++ b/docs/wiki/Screen-Calibration/index.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Screen-Calibration/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Screen Calibration</h1>
+<h2>Framebuffer</h2>
+<p>On most Android devices, a somewhat working framebuffer is required to get Weston and other Wayland compositors running. The alternative to framebuffer would be [[DRI|Glossary#dri]].</p>
+<p>If your framebuffer does not work out of the box, try the following:
+<em> Run this to set the framebuffer resolution: <code>cat /sys/class/graphics/fb0/modes &gt; /sys/class/graphics/fb0/mode</code>
+</em> Boot TWRP/Android and read out the correct framebuffer configurations from the /sys... paths and try to set them in pmOS
+* If you made it work, create an initfs hook, that instantly sets the framebuffer right. <a href="https://github.com/postmarketOS/pmbootstrap/blob/master/aports/device-lg-mako/initfs-hook.sh">Example</a></p>
+<h2>Weston</h2>
+<ul>
+<li>Make sure, that Weston runs on the device</li>
+<li>Look in <code>/tmp/weston.log</code> (via SSH) for the touch device name. For <code>lg-mako</code>, the name is <code>touch_dev</code>, but it may be different for your device.</li>
+<li>Copy <a href="https://github.com/postmarketOS/pmbootstrap/blob/master/aports/device/device-lg-mako/90-android-touch-dev.rules">90-android-touch-dev.rules</a> from <code>device-lg-mako</code> to your device's aport. Replace <code>touch_dev</code> with your touch device name. Adjust the <code>APKBUILD</code>, so it gets installed properly (<a href="https://github.com/postmarketOS/pmbootstrap/blob/master/aports/device-lg-mako/APKBUILD">Example</a>)</li>
+<li>This calibration may just work fine (it has been reported, that it works on <code>hammerhead</code>). If it does, you are done here. Otherwise continue for the calibration.</li>
+<li>Connect to your phone via SSH</li>
+<li>Get a root shell: <code>sudo su -</code> (Because right now, Weston runs as root)</li>
+<li>Run <code>weston-calibrator</code> as root</li>
+<li>Adjust your udev rules-file to the output from <code>weston-calibrator</code></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Serial-debugging/index.html b/docs/wiki/Serial-debugging/index.html
new file mode 100644
index 0000000..8762c08
--- /dev/null
+++ b/docs/wiki/Serial-debugging/index.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Serial-debugging/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Serial debugging</h1>
+<p>Some phones have a serial port accessible from the outside, this makes debugging boot problems way easier since you can see the boot messages from the bootloader and the early kernel stuff. For example the whole nexus range has serial debugging through the headphone jack.</p>
+<h2>Nexus debug cable</h2>
+<p>The nexus phones multiplexed the serial debug lines with the headphone audio lines. To switch it into serial mode you have to supply -3V to the mic port. The uart lines themselves are 1.8V. If you use a 3.3V usb-to-uart adapter the signal from the phone will probably work, for the TX side you have to add a resistor divider to lover the voltage for the phone. Here's the schematic for a nexus debug cable:</p>
+<p><img alt="" src="http://i.imgur.com/cAjWu2a.png" /></p>
+<p>This cable has been tested with:</p>
+<ul>
+<li>Nexus 5 hammerhead</li>
+</ul>
+<p>It should work fine with:</p>
+<ul>
+<li>Nexus 7 flo</li>
+</ul>
+<p>The Nexus 7 grouper might also work but that one has another pinout for the headset connection, it has the sleeve as mic and ring 2 as ground (This is the difference between the OMTP and the CTIA pinout). It might work with the sleeve and ring 2 reversed but <strong>this has not been tested by us, so do it under your own responsibility</strong>.</p>
+<h2>Nexus USB debug cable</h2>
+<p>The nexus S and galaxy nexus have the serial port multiplexed with the USB connector instead of the headphone connector. This is the schematic for those devices, For this cable too it's important to have a 3.3V usb-to-uart adapter.</p>
+<p><img alt="" src="http://i.imgur.com/jE3iFeO.png" /></p>
+<p>It should work with:</p>
+<ul>
+<li>Nexus S</li>
+<li>Galaxy Nexus</li>
+</ul>
+<h2>Mozilla Flame</h2>
+<p>The Flame has open UART pads that are accessible underneath the outer and inner covers.</p>
+<ul>
+<li><strong>TX</strong> - red</li>
+<li><strong>GND</strong> - green</li>
+</ul>
+<p>Pull-ups/downs are unneccesary, hook straight up to any FTDI/USB-to-serial.</p>
+<p><img alt="" src="https://gist.githubusercontent.com/yuvadm/238db856f1a81a572b0cd2a02a51ae8a/raw/69b1a7f6d7217ef618cf43c728fe10920f496cdf/01-pcb.jpg" /></p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/The-mainline-kernel/index.html b/docs/wiki/The-mainline-kernel/index.html
new file mode 100644
index 0000000..ed40385
--- /dev/null
+++ b/docs/wiki/The-mainline-kernel/index.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/The-mainline-kernel/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>The mainline kernel</h1>
+<p>One of the major goals of the postmarketOS project is getting as many devices as possible working on the mainline upstream Linux kernel. The majority of the current devices run some form of Android kernel tree like AOSP, LineageOS or CyanogenMOD.</p>
+<p>The current progress of the mainlining effort is in the <code>linux-postmarketos</code> package, which can be used by multiple devices. The only pmOS-supported device that is usable with Linux 4.12 is the [[Nokia N900|nokia-rx51-(Nokia-N900)]]. The [[Qemu|qemu-vexpress-(Qemu-with-vexpress-soc)]] packages also use the <code>linux-postmarketos</code> package.</p>
+<p>To make the kernel work with multiple devices, it no longer appends the dtb file to the kernel image. It generate a <code>vmlinuz-postmarketos</code> file in the boot partition and puts all dtb files for the current architecture in <code>/usr/share/dtb</code>. The <code>postmarketos-mkinitfs</code> package appends the dtb file defined in the [[deviceinfo|deviceinfo-reference]] to the linux image in the boot partition.</p>
+<h2>Enable the mainline kernel for a new device</h2>
+<p><em>Before proceeding, make sure that you know that your device is supported by the mainline kernel. Otherwise use the source code of a vendor's fork of the kernel, which is known to work as described in the [[porting guide|Porting-to-a-new-device]].</em></p>
+<ol>
+<li>run <code>pmbootstrap.py menuconfig linux-postmarketos</code> and adjust the kernel config to add the drivers for the device if they are not enabled yet. Set as much drivers to build as external module as possible so the main vmlinuz filesize doesn't increase too much.</li>
+<li>Set the kernel dependency to <code>linux-postmarketos</code> in the APKBUILD for the device package if you want to make it the default kernel (<a href="https://github.com/postmarketOS/pmbootstrap/issues/91#issuecomment-318825285">more information</a>).</li>
+<li>Add the name of the generated dtb file (without path or extension) to the <code>deviceinfo_dtb</code> file in the deviceinfo file.</li>
+</ol>
+<p>A good example of a device using a mainline kernel is the <code>device-nokia-rx51</code> package.</p>
+<h2>Porting drivers from a Linux fork to the mainline kernel</h2>
+<p><em>This is a massive amount of work, and you will need C knowledge, as well as knowledge about <a href="https://kernelnewbies.org/KernelHacking">how to contribute to the kernel</a>. It is probably a very frustrating path, so make sure that you are either up to that or consider contributing in pmOS in another, from a developers point of view, more enjoyable way. Documentation from our side is also pretty thin on this, so if you actually work on this, please expand it. Thanks!</em></p>
+<h3>Preparation</h3>
+<ul>
+<li>Get a working [[serial cable|Serial-debugging]]</li>
+<li>Find out hardware details about your device, such as CPU, GPU, display, ...</li>
+</ul>
+<h3>Boot with serial output and shell</h3>
+<p>You probably need to copy over the device tree source, from which the <code>dtb</code> file gets generated, to the mainline kernel. <em>Please expand this.</em></p>
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/freedreno/freedreno/wiki/DSI-Panel-Driver-Porting">Freedreno wiki: Display driver porting</a></li>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/issues/91">#91: "The Mainline Kernel"</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Tips-and-tricks/index.html b/docs/wiki/Tips-and-tricks/index.html
new file mode 100644
index 0000000..4ede772
--- /dev/null
+++ b/docs/wiki/Tips-and-tricks/index.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Tips-and-tricks/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Tips and tricks</h1>
+<ul>
+<li>The splash screen is <a href="https://github.com/postmarketOS/pmbootstrap/pull/206#issuecomment-316791430">highly configurable</a> (scroll down for an example)!</li>
+<li>Browse the Linux source with links to all references <a href="http://elixir.free-electrons.com">here</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Troubleshooting/index.html b/docs/wiki/Troubleshooting/index.html
new file mode 100644
index 0000000..0c8129a
--- /dev/null
+++ b/docs/wiki/Troubleshooting/index.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Troubleshooting/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Troubleshooting</h1>
+<h3>General information</h3>
+<ul>
+<li>Always look at the log file for a detailed error message: <code>~/.local/var/pmbootstrap/log.txt</code></li>
+<li>Make sure, that you have the latest version. Your bug may already be fixed</li>
+<li>Please report the bugs you have found in the <a href="https://github.com/postmarketOS/pmbootstrap/issues">issues</a>, so we can fix them :)</li>
+<li>Syslog is enabled, and will log to shared memory once the OS has booted. It can be read with the <code>logread</code> tool in BusyBox. The syslog is currently not preserved across reboots.</li>
+</ul>
+<h3><code>musl-*</code>/<code>busybox-static-*</code> fails to build with a 404 error</h3>
+<p>Run <code>pmbootstrap aportgen musl-armhf musl-aarch64</code>. The reason why this fails from time to time is, that we use Alpine's binary <code>musl</code> lib c package for <code>armhf</code>/<code>aarch64</code> in the native chroot, to get the cross-compiler working. So the download URL inside the <code>aports/cross/musl-*/APKBUILD</code> file must be in sync with the upstream version. This pmbootstrap command safely gets the new version, uses <code>apk</code> to verify the signature of the package, generates the hash, and updates the <code>APKBUILD</code> file. To make sure, that <code>pmbootstrap aportgen</code> receives the latest <code>musl</code> version, delete your HTTP cache right before executing this command: <code>pmbootstrap zap -hc</code>. Don't bother making a pull-request for this, as the fix is really trivial (see <a href="https://github.com/postmarketOS/pmbootstrap/commit/0f3b2ea4277679056079000eac581d1b9d05afc8">this commit</a>). Just report it as issue, if it happens.</p>
+<h3>pmbootstrap is broken! But it worked yesterday!</h3>
+<p>Sorry! Revert to the last commit, that was known to work (git checkout $commit) and report an issue, if there is not already one. Consult with others in the IRC/matrix channel to find out, which commit was the last one that worked.</p>
+<h3>Figuring out booting problems</h3>
+<p>Add <code>rc_logging=YES</code> to <code>/etc/rc.conf</code> to have openrc log all its steps to <code>/var/log/rc.log</code>. If you managed to get the system to boot far enough to have telnet access, add [[the port 24 telnet listener|Inspecting-the-initramfs]] and you can mount the root device to view said log.</p>
+<h3>SSH / udev / touch screen do not work</h3>
+<ul>
+<li>Make sure, that <code>DEVTMPFS</code> is enabled in your kernel config. Do not enable <code>DEVTMPFS_MOUNT</code>.</li>
+</ul>
+<h3>I can't access the framebuffer device</h3>
+<ul>
+<li><code>cat /dev/random &gt; /dev/fb0</code> returns: <code>cat: write error: No such device</code></li>
+<li>This could be caused by a proprietary 3d driver enabled in the kernel config. <a href="https://github.com/postmarketOS/pmbootstrap/pull/66/">Try to disable it (the actual config options may be different).</a></li>
+</ul>
+<h3>BusyBox does something different than the standard tool for the job, and this breaks building my package!</h3>
+<p><strong>Example:</strong> unzip in BusyBox doesn't extract symlinks like the normal unzip implementation (<a href="https://github.com/postmarketOS/pmbootstrap/issues/82">#82</a>).</p>
+<p><strong>Solution:</strong> Simply add <code>unzip</code> to the makedepends in the APKBUILD, and the "real" unzip will be used (or in that case, try to get the sources in another archive format, such as <code>.tar.bz2</code>, <code>.tar.xz</code>, <code>.tar.gz</code>).</p>
+<h3>Errors with ecryptfs</h3>
+<p>When your "work" folder is inside an ecryptfs mounted folder, <a href="https://github.com/postmarketOS/pmbootstrap/issues/53"><code>/dev/random</code> may not work inside the chroot</a> and you may have other issues. Try to move your <em>work</em> folder to another location, you can use <code>/tmp</code> to test if this resolves the issue. You can change the location in <code>pmbootstrap init</code>. See also: <a href="https://github.com/postmarketOS/pmbootstrap/issues/61">#61</a>. (This doesn't seem to be an issue with newer versions of ecryptfs anymore.)</p>
+<h3>ERROR: unsatisfiable constraints</h3>
+<p>postmarketOS is based on Alpine Linux <em>testing</em>. Maybe they have triggered a rebuild and it failed, so now the package is not available. You <em>could</em> try to install the latest stable package, as a workaround (although that may introduce other bugs!). <a href="https://github.com/postmarketOS/pmbootstrap/issues/4#issuecomment-304508729">Here's an example.</a></p>
+<h3>Serial Console Debug Cable (early boot debugging)</h3>
+<p>For some devices it's possible to get early boot output using a debug cable that provides access to the UART. Unfortunately manufacturers don't use to publish the details and it is endusers who in some cases have figured it out:</p>
+<ul>
+<li>Here's one such cable for <a href="https://www.optiv.com/blog/building-a-nexus-4-uart-debug-cable">Nexus 4</a> and another for <a href="https://www.abclinuxu.cz/blog/Lorris/2013/12/serial-console-on-google-nexus-5">Nexus 5</a>.</li>
+<li><a href="http://www.pabr.org/consolejack/consolejack.en.html">This article</a> goes a step further with Google Nexus devices.</li>
+<li>Sony has published information about how to access the UART port on their <a href="https://developer.sonymobile.com/open-devices/how-to-access-uart-ports-on-xperia-devices/">Xperia series</a></li>
+<li>The <a href="https://redmine.replicant.us/projects/replicant/wiki/SamsungSerial">Replicant wiki</a> has useful information on this as well.</li>
+</ul>
+<p>On fastboot devices, you may have to enable UART debugging with <code>fastboot oem uart-on</code>.</p>
+<p>By default, all output from the initramfs get redirected to <code>/pmOS_init.log</code>. If you want the output through the debug cable you need to add <code>PMOS_NO_OUTPUT_REDIRECT</code> to your <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Troubleshooting:kernel#how-can-i-boot-the-kernel-with-some-specific-arguments">kernel command line</a>.</p>
+<p>See <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Serial-debugging">Serial debugging</a>.</p>
+<h3>Proprietary Blobs</h3>
+<p>Many devices require proprietary blobs for enabling certain peripherals (wifi/bluetooth/cellular/GPS). <a href="https://github.com/TheMuppets">These repositories</a> appear to contain blobs for a large percentage of devices out there.</p>
+<h3>Force reboot</h3>
+<p>On some phones, you can hold down the power button for ten seconds to force a reboot. If that does not work: On other phones, you have to hold the power button down for a full minute (or hold it together with volume down). On some phones, it might take even longer (3 minutes or so).</p>
+<h3>Phone shows the telnet message, a black screen, or doesn't leave the bootloader or Samsung/Google/... splash screen</h3>
+<h4>The graphics may not be working. Try connecting via telnet as usual:</h4>
+<ul>
+<li>Connect a USB cable</li>
+<li>You should get an IP (if not, try to unplug and re-plug the cable)</li>
+<li>If your PC is not configured to get IPs automatically via DHCP, run a dhcp client like <code>dhcpcd</code> on the usb network device (check with <code>ip a</code>)</li>
+<li>Try to connect to your device with <code>telnet 172.16.42.1</code> (yes, the IP <a href="https://github.com/postmarketOS/pmbootstrap/pull/72">has changed</a>!)</li>
+<li>If you can't get it to work, consider using a serial cable (see <a href="#serial-console-debug-cable-early-boot-debugging">above</a>)</li>
+</ul>
+<h4>If that doesn't work:</h4>
+<ul>
+<li>Fastboot based devices: check whether your flasher offset variables are right in your deviceconfig</li>
+<li>If nothing else works, you <em>could</em> try to get the pre-built kernel from LineageOS working (combined with postmarketOS' initramfs). Theoretically, these would be the steps (please correct/extend):</li>
+</ul>
+<pre class="codehilite"><code>pmbootstrap build mkbootimg
+pmbootstrap build unpackbootimg
+pmbootstrap chroot
+apk add mkbootimg unpackbootimg
+# 1. download a full LineageOS image
+# 2. extract it
+# 3. extract the kernel with unpackbootimg
+# 4. there's the kernel image!
+# 5. either try to overwrite the image generated by postmarketOS in /boot and use 'pmbootstrap flasher....'
+# Or: create a bootimg with &quot;mkbootimg&quot; inside &quot;pmbootstrap chroot&quot; and try to flash the image on your host GNU/Linux system with fastboot/heimdall</code></pre>
+
+
+<ul>
+<li>Diffoscope may also be useful to list differences between your self-compiled kernel, and the binary version from LineageOS (or whichever binary kernel is working).</li>
+</ul>
+<p>See <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Using-prebuilt-kernels">Using prebuilt kernels</a>.</p>
+<h3>My device runs the Linux kernel (e.g. Android), but the vendor does not provide the source</h3>
+<ol>
+<li>Ask kindly via e-mail.</li>
+<li>If they don't provide the source, team up with <a href="http://gpl-violations.org/faq/violation-faq/">gpl-violations.org</a>. You have the legal right to get the source, because the Linux kernel is under the GPLv2!</li>
+<li>Another option is [[using prebuilt kernels]]</li>
+</ol>
+<h3>I have ported postmarketOS to my device and the screen doesn't get updated</h3>
+<p>There is a <a href="https://github.com/postmarketOS/pmbootstrap/pull/66#issuecomment-306343779">known bug</a> where if you execute <code>cat /sys/class/graphics/fb0/modes &gt; /sys/class/graphics/fb0/mode</code> exactly one frame is drawn, and the screen isn't updated otherwise.</p>
+<h3>"if running weston from ssh, use --tty to specify a tty"</h3>
+<p>Specify a tty in weston's commandline. The correct syntax is: <code>weston --tty=1</code>.</p>
+<h3>Weston and fbsplash -s <image> do not work</h3>
+<p>If Weston returns an error because it could not access <code>/dev/tty1</code>, even when you specify it on the command line as above, you may need to enable Virtual Terminals in the kernel config.
+You can enable <code>CONFIG_VT</code> using <code>pmbootstrap menuconfig</code> and checking under Device Drivers -&gt; Character devices -&gt; Virtual terminal</p>
+<h3>My screen is red!</h3>
+<p>There are some buggy framebuffer drivers (e.g. in LG Nexus 5) that report incorrect data. You can override it with:</p>
+<pre class="codehilite"><code>weston --pixman-type=2</code></pre>
+
+
+<p>More information on <a href="https://github.com/postmarketOS/pmbootstrap/issues/54">issue #54</a></p>
+<h3>Errors with grsec-based kernel on the host system</h3>
+<p>See: [[Troubleshooting:grsec]]</p>
+<h3>WARNING: No provider for dependency...</h3>
+<p><strong>Normal behavior.</strong> it means, that your "user" repository (the repository with all custom compiled packaged from pmOS, such as your device package and kernel) does not have the dependencies from the official Alpine Linux repositories (such as <code>cryptsetup</code>, <code>iw</code>, <code>htop</code>, ...) when indexing it. But these dependencies <em>are</em> in the official repositories, so they will be found when you try to install something. Usually the package indexing is done on all repositories at once in Alpine (then you wouldn't get the error), but pmOS does it only on the "user" repository.</p>
+<h3>ERROR: busybox-1.27.0-r1.post-install: script exited with error 127</h3>
+<p><strong>Normal behavior.</strong> We use a x86_64 version of <code>apk</code> to set up the chroots. When setting up the armhf chroot, the armhf post-installation code can't be executed, and that's where the errors come from. But we run "apk fix" right afterwards - with the armhf architecture, because we have an armhf version of apk installed inside the chroot now - and this runs the installation scripts again.</p>
+<h3>sh: can't create /proc/sys/fs/binfmt_misc/register: nonexistent directory</h3>
+<p>This issue is known to happen in Alpine Virthardened. These commands should fix it:</p>
+<pre class="codehilite"><code class="language-shell">sudo modprobe binfmt_misc
+sudo mount -t binfmt_misc none /proc/sys/fs/binfmt_misc</code></pre>
+
+
+<p>If it still does not work, it is probably not supported by your host Linux distribution's kernel (<code>CONFIG_BINFMT_MISC</code>). Try to use another kernel.</p>
+<h3>ERROR: /home/user/packages/user/x86_64/qemu-user-static-repack-2.8-r6.apk: UNTRUSTED signature</h3>
+<p>The reason is somewhat unknown but looks like the following workaround solves it</p>
+<pre class="codehilite"><code>./pmbootstrap zap -p -hc
+./pmbootstrap shutdown</code></pre>
+
+
+<p>See issue <a href="https://github.com/postmarketOS/pmbootstrap/issues/270">#270</a> for more information and don't hesitate to reopen if this didn't work for you.</p>
+<h3>Fastboot does not detect my device!</h3>
+<p>Maybe you need to install udev rules on your host Linux distribution. Arch has the <a href="https://www.archlinux.org/packages/community/any/android-udev/">android-udev</a> package for example, which uses the rules from <a href="https://github.com/M0Rf30/android-udev-rules">here</a>.</p>
+<h3>Invalid sparse file format at header magi</h3>
+<p>In some devices (e.g.: bullhead, titan), when flashing the system (<code>pmbootstrap flasher flash_system</code>), it works but fastboot complains of <code>Invalid sparse file format at header magi</code>.</p>
+<pre class="codehilite"><code>$ ./pmbootstrap.py flasher flash_system
+[23:02:58] (native) install android-tools
+[23:02:58] (native) flash system image
+target reported max download size of 536870912 bytes
+Invalid sparse file format at header magi
+sending sparse 'system' 1/1 (274101 KB)...
+OKAY [ 9.452s]
+writing 'system' 1/1...
+OKAY [ 12.584s]
+finished. total time: 22.036s
+[23:03:20] Done</code></pre>
+
+
+<p>It happens when your device expects a sparse system image. The workaround is as follows:</p>
+<ul>
+<li>Set <code>deviceinfo_flash_sparse=true</code> in deviceinfo</li>
+<li>Add <code>libsparse</code> to <code>depends=</code>.</li>
+</ul>
+<p>For more information, see issue <a href="https://github.com/postmarketOS/pmbootstrap/issues/299">#299</a></p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Troubleshooting:grsec/index.html b/docs/wiki/Troubleshooting:grsec/index.html
new file mode 100644
index 0000000..37924ec
--- /dev/null
+++ b/docs/wiki/Troubleshooting:grsec/index.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Troubleshooting:grsec/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Troubleshooting:grsec</h1>
+<h3>TLDR: Grsec based kernels are not supported, because <a href="https://wiki.debian.org/QemuUserEmulation">qemu user emulation</a> appears to be broken and we couldn't fix this right away. But if you want to add support for a kernel based on the grsec patchset, please go ahead. See also: <a href="https://github.com/postmarketOS/pmbootstrap/issues/107">#107</a></h3>
+<hr />
+<p><a href="https://en.wikipedia.org/wiki/Grsec">Grsec</a> is the name of a patchset, that used to be freely available to harden the Linux kernel. Alpine has a <code>linux-hardened</code> kernel for example, which uses a fork of that patchset. When you run a kernel based on that patchset on your host Linux system, you will probably run into problems with pmbootstrap because it does some things inside chroots, that is blocked by default in that patchset. One example is setting file permissions (<a href="https://github.com/postmarketOS/pmbootstrap/issues/107">#107</a>).</p>
+<p>You have two options now. Either run pmbootstrap with a regular kernel, or disable the grsec specific features with sysctl while running pmbootstrap (you will probably run into other issues though, which have not been resolved - <strong>the quick solution is really using the regular kernel</strong>).</p>
+<h3>Disable some grsec-specific features while running pmbootstrap</h3>
+<p>We don't really know all options, that need to be disabled. Please extend this wiki page, if you are interested in this and figure it out. However, user cmdr2 <a href="https://github.com/postmarketOS/pmbootstrap/issues/107#issuecomment-312506089">reported</a>, that you can do the following to disable <em>all</em> grsec features, and pmbootstrap will work then:</p>
+<blockquote>
+<p>To comprehensively disable grsec until the next reboot, I suggest:
+<code>ls -1 /proc/sys/kernel/grsecurity | xargs -I '___' sudo sysctl -w kernel.grsecurity.___=0</code></p>
+</blockquote>
+<h3>Commands to non-native chroots hang</h3>
+<p>This can only be partially resolved as of now, see <a href="https://github.com/postmarketOS/pmbootstrap/issues/140">#140</a>.
+For starters, disable the <code>RANDMMAP</code> PaX flag:</p>
+<pre class="codehilite"><code class="language-shell">sudo apk add paxctl
+sudo paxctl -C ~/.local/var/pmbootstrap/chroot_rootfs_samsung-s7562/usr/bin/qemu-arm-static
+sudo paxctl -r ~/.local/var/pmbootstrap/chroot_rootfs_samsung-s7562/usr/bin/qemu-arm-static</code></pre>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Troubleshooting:kernel/index.html b/docs/wiki/Troubleshooting:kernel/index.html
new file mode 100644
index 0000000..ca5a808
--- /dev/null
+++ b/docs/wiki/Troubleshooting:kernel/index.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Troubleshooting:kernel/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Troubleshooting:kernel</h1>
+<p>While <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Porting-to-a-new-device">porting pmOS to a new device</a> you probably will find common pitfalls that others have already solved. Here is a set of them:</p>
+<p>Patching a kernel is as simple as putting a <code>.patch</code> file in your <code>aports/device/linux-vendor-flavor</code> folder and adding the patch name to the <code>source</code> variable in your <code>APKBUILD</code> file.</p>
+<h4>Common configurations</h4>
+<p>First of all, make sure the following options are configured as you'll probably need them</p>
+<pre class="codehilite"><code>CONFIG_DEVTMPFS=y
+CONFIG_VT=y
+CONFIG_DM_CRYPT=y</code></pre>
+
+
+<p>Note: <code>CONFIG_DEVTMPFS_MOUNT</code> is <strong>not</strong> needed but it doesn't hurt.</p>
+<p>Also, we are compiling kernels using gcc6, which probably didn't exist when your manufacturers released the kernel sources for your device. You need the file <a href="https://github.com/postmarketOS/pmbootstrap/blob/master/aports/linux-lg-hammerhead/compiler-gcc6.h">compiler-gcc6.h</a>. In your APKBUILD <a href="https://github.com/postmarketOS/pmbootstrap/blob/master/aports/linux-motorola-titan/APKBUILD#L37">add it to source</a> and <a href="https://github.com/postmarketOS/pmbootstrap/blob/master/aports/linux-motorola-titan/APKBUILD#L75-L76">copy it to the right location</a>.</p>
+<h4>undefined reference to kgsl_iommu_sync_lock</h4>
+<pre class="codehilite"><code>drivers/built-in.o:(.data.rel+0x68c): undefined reference to kgsl_iommu_sync_lock'
+drivers/built-in.o:(.data.rel+0x690): undefined reference to kgsl_iommu_sync_unlock'</code></pre>
+
+
+<p>You need to apply the <a href="https://github.com/postmarketOS/pmbootstrap/blob/master/aports/linux-lg-mako/gpu-msm-fix-gcc5-compile.patch">gpu-msm-fix-gcc5-compile.patch</a> patch.</p>
+<h4>How can I boot the kernel with some specific arguments?</h4>
+<p>You can configure <code>CONFIG_CMDLINE</code> so that the arguments are permanent or change it in boot time using fastboot or pmbootstrap, for example:</p>
+<pre class="codehilite"><code>fastboot boot -c &quot;console=ttyHSL0,115200,n8&quot; ...
+
+pmbootstrap flasher boot --cmdline &quot;PMOS_NO_OUTPUT_REDIRECT&quot;</code></pre>
+
+
+<h4>MSM framebuffer doesn't work</h4>
+<p>We found out that removing the 3D driver support makes the MSM framebuffer. See <a href="https://github.com/postmarketOS/pmbootstrap/pull/66">#66</a>.</p>
+<pre class="codehilite"><code>CONFIG_MSM_KGSL=n</code></pre>
+
+
+<h4>PTY allocation request failed</h4>
+<pre class="codehilite"><code>PTY allocation request failed on channel 0
+-ash: a: unknown operand</code></pre>
+
+
+<p>Go to <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Troubleshooting%3Akernel#common-configurations">Common configurations</a>, you have probably missed <code>CONFIG_DEVTMPFS</code>!</p>
+<h4>Kernel compilation: (some header file): No such file or directory</h4>
+<p>Busybox' <code>zip</code> implementation does not extract symlinks. There are two workarounds. One is to use another archive type (typically kernel sources are downloaded from GitHub, where you can also get the source as <code>.tar.gz</code> - simply by changing the extension in the URL).</p>
+<p>The other workaround is to add <code>unzip</code> to the makedepends, so it uses the original unzip instead of the busybox version.</p>
+<h4>Kernel compilation: BusyBox lzma compression fails</h4>
+<p>In case you get the following output:</p>
+<pre class="codehilite"><code>LZMA arch/arm/boot/compressed/piggy.lzma
+lzma: unrecognized option: 9
+BusyBox v1.26.2 (2017-06-11 06:37:13 GMT) multi-call binary.
+
+Usage: lzma -d [-cf] [FILE]...
+
+Decompress FILE (or stdin)
+
+ -d Decompress
+ -c Write to stdout
+ -f Force</code></pre>
+
+
+<p>In the BusyBox version shipped with Alpine Linux, only lower compression levels are enabled (to reduce the binary size). The kernel you're building is configured to compress with LZMA at the highest compression level. Pick one
+of the following solutions:
+<em> Add <code>xz</code> to the <code>makedepends=</code> line. Then the "real" lzma binary will be used instead of the Busybox version. This is <strong>recommended</strong>, because then your kernel will get built most similar to how it is built elsewhere, so you have the
+lowest risk of introducing a reason for the kernel not to boot (because the kernel is too big in size or something like that)
+</em> Reduce the compression ratio by adding <a href="https://github.com/postmarketOS/pmbootstrap/blob/b4c9f93f0d7be1272f6a67de2128558ce58e1077/aports/linux-samsung-i9070/02_reduce_lzo_compression.patch">this patch</a>. This will not introduce any dependency, but increase the kernel size.
+* Use another compression algorithm (run <code>pmbootstrap menuconfig linux-...</code> and change it there). Gzip should work, but will produce a big kernel, because pmbootstrap currently installs a workaround to always use the fastest compression method (<code>-1</code>), when the most compressing one (<code>-9</code>) is chosen. This will increase the kernel size the most.</p>
+<h4>Android Kernel compilation fails on warnings (not on errors) (-Werror)</h4>
+<p>Don't even bother fixing all those warnings, there are too many of them and we don't want the outdated Android kernels in the long run anyway! Write a patch, that removes <code>-Werror</code> from all <code>Makefiles</code> recursively instead <em>(please expand on how to do that step by step, ask in the channel if you need help)</em>.</p>
+<p>See <a href="https://github.com/postmarketOS/pmbootstrap/blob/0ae6a150e8ea2de77ebc7fc423f1159bdad5f7dc/aports/linux-motorola-titan/Wno-error.patch">this patch</a> as example.</p>
+<h4>Building the kernel with Android's build system</h4>
+<p>It might be useful for debugging to build Android's kernel with Android's build system.</p>
+<p>You can follow the LineageOS building guide for your device (see <a href="https://wiki.lineageos.org/devices/titan/build">this</a> for titan device as example).</p>
+<p>The process should be similar for other devices:</p>
+<pre class="codehilite"><code class="language-bash"># make some directories
+mkdir -p ~/bin
+mkdir -p ~/android/lineage
+
+# download the 'repo' tool
+curl https://storage.googleapis.com/git-repo-downloads/repo &gt; ~/bin/repo
+chmod a+x ~/bin/repo
+
+# clone LineageOS
+cd ~/android/lineage
+~/bin/repo init -u https://github.com/LineageOS/android.git -b cm-14.1
+
+# Download the rest of dependencies (this will take a while and about *TODO* GB of disk space)
+~/bin/repo sync
+
+# now prepare the build for your device (replace 'titan' with the device you want to for the kernel for)
+source build/envsetup.sh
+breakfast titan
+
+# Now instead of following the rest of the guide (which will compile both Android and the kernel
+# for your device), simply compile the kernel:
+mka kernel
+
+# This command will also generate the device tree, initramfs and boot.img images
+mka bootimage</code></pre>
+
+
+<p>You can check the <code>$OUT</code> environment variable and cd into it. In the case of titan the interesting generated files are:</p>
+<ul>
+<li><code>~/android/lineage/out/target/product/titan/boot.img</code> (boot image ready to be flashed: kernel + initramfs)</li>
+<li><code>~/android/lineage/out/target/product/titan/dt.img</code> (device trees)</li>
+<li><code>~/android/lineage/out/target/product/titan/kernel</code> (linux image)</li>
+<li><code>~/android/lineage/out/target/product/titan/ramdisk.img</code> (compressed initramfs)</li>
+</ul>
+<p>The defconfig used is available at <code>~/android/lineage/kernel/motorola/msm8226/arch/arm/configs/titan_defconfig</code></p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Tuning-sysfs/index.html b/docs/wiki/Tuning-sysfs/index.html
new file mode 100644
index 0000000..3b2115a
--- /dev/null
+++ b/docs/wiki/Tuning-sysfs/index.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Tuning-sysfs/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Tuning sysfs</h1>
+<p>After porting postmarketOS to your device, you might find that still some features don't work. You may need to adjust some values inside the /sys directory.</p>
+<p>sysfs is a pseudo file system provided by the Linux kernel that exports information about various kernel subsystems, hardware devices, and associated device drivers from the kernel's device model to user space through virtual files. In addition to providing information about various devices and kernel subsystems, exported virtual files are also used for their configuring.</p>
+<p>One approach is comparing the contents of these files when TWRP or LineageOS is running and the same for pmOS.</p>
+<p>The following script dumps the content of /sys/devices. Copy it as <code>dumpsys.sh</code></p>
+<pre class="codehilite"><code class="language-shell">#!/bin/sh
+# dumpsys.sh
+DIR=&quot;/sys/devices&quot;
+
+walk() {
+ for file in $(ls $1); do
+ path=&quot;$1/$file&quot;
+ if test -L &quot;$path&quot;; then
+ continue
+ fi
+ if test -f &quot;$path&quot;; then
+ echo &quot;$path&quot;
+ cat &quot;$path&quot;
+ fi
+ if test -d &quot;$path&quot;; then
+ walk &quot;$path&quot;
+ fi
+ done
+}
+
+others() {
+ cat /proc/cpuinfo
+ cat /proc/cmdline
+}
+
+walk &quot;$DIR&quot;
+others</code></pre>
+
+
+<p>Upload it to your device when running TWRP (use <code>adb push</code>) and when running postmarketOS (use <code>scp</code>). Run it and then compare the output.</p>
+<p>For TWRP/LineageOS:</p>
+<pre class="codehilite"><code class="language-shell">adb push dumpsys.sh /
+adb shell &quot;sh /dumpsys.sh &gt; /devices-twrp.dump&quot;
+adb pull /devices-twrp.dump .</code></pre>
+
+
+<p>For pmOS:</p>
+<pre class="codehilite"><code class="language-shell">scp dumpsys.sh user@172.16.42.1:~
+# sh dumpsys.sh &gt; devices-pmos.dump
+scp user@172.16.42.1:~/devices-pmos.dump .</code></pre>
+
+
+<p>Then get the differences:</p>
+<pre class="codehilite"><code class="language-shell">diff -u devices-pmos.dump devices-twrp.dump &gt; devices.diff</code></pre>
+
+
+<p>You could also run it in even in the stock ROM but it is important that you run the same kernel version in postmarketOS then.</p>
+<h2>Examples</h2>
+<h3>i9070 port</h3>
+<p>This way, user <code>drebrez</code> figured out two values needed for the framebuffer configuration for the i9070 port.</p>
+<pre class="codehilite"><code class="language-shell">echo 16 &gt; /sys/devices/platform/mcde_fb/graphics/fb0/bits_per_pixel
+echo 960,1600 &gt; /sys/devices/platform/mcde_fb/graphics/fb0/virtual_size</code></pre>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Upstreaming/index.html b/docs/wiki/Upstreaming/index.html
new file mode 100644
index 0000000..b0b8a03
--- /dev/null
+++ b/docs/wiki/Upstreaming/index.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Upstreaming/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Upstreaming</h1>
+<p>It is important for us to contribute the patches and improvements we made to various software back to the original project. So everyone can benefit from the improvements and we don't need to maintain and carry around patches.</p>
+<h3>Successful</h3>
+<ul>
+<li><code>2017-08-03</code> Alpine Linux: <a href="https://github.com/alpinelinux/aports/pull/2057">add consolekit2</a></li>
+<li><code>2017-07-21</code> abuild: <a href="https://github.com/alpinelinux/abuild/pull/21"><code>-D</code> parameter for alternative description</a></li>
+<li><code>2017-07-07</code> Alpine Linux: <a href="https://github.com/alpinelinux/aports/pull/1092">busybox-extras with telnetd enabled</a></li>
+<li><code>2017-05-23</code> weston: <a href="https://patchwork.freedesktop.org/patch/150943/">instead of less than 1 Hz use default refresh rate</a></li>
+</ul>
+<h3>Work in progress</h3>
+<ul>
+<li>weston: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=101472">add parameter --pixman-type</a>, see also: <a href="https://github.com/postmarketOS/pmbootstrap/issues/141">#141</a></li>
+</ul>
+<h3>Not started, but should be done in the future</h3>
+<ul>
+<li>abuild: Add a compression flag to override the default of highest compression (right now we install a <a href="https://github.com/postmarketOS/pmbootstrap/blob/34e2f8093c6cf6571815a82865309b02d31b5d0c/pmb/build/init.py#L61">wrapper</a> that converts <code>-9</code> to <code>-1</code> to improve performance)</li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Using-prebuilt-kernels/index.html b/docs/wiki/Using-prebuilt-kernels/index.html
new file mode 100644
index 0000000..811a139
--- /dev/null
+++ b/docs/wiki/Using-prebuilt-kernels/index.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Using-prebuilt-kernels/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Using prebuilt kernels</h1>
+<p>Some vendors do not release the kernel source code, which is very bad for freedom and goes against the Linux kernel license (see <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Troubleshooting#my-device-runs-the-linux-kernel-eg-android-but-the-vendor-does-not-provide-the-source">My device runs the Linux kernel (e.g. Android), but the vendor does not provide the source</a> in the Troubleshooting page.</p>
+<p>But you can still extract the kernel image from a device that is running Android and use it to run postmarketOS. Of course this is <em>totally discouraged</em> because we want to make sure that we know the code our devices are running but you might find it useful in order to start hacking on postmarketOS without having the kernel source code.</p>
+<h2>Extracting boot.img from an Android device</h2>
+<p>You can extract the kernel that is running your Android device, it doesn't matter if it's the stock ROM, LineageOS or any custom ROM. For this approach you need the <code>adb</code> tool and root permissions.</p>
+<p>NOTE: in this example the boot partition is named msm_sdcc.1 but it might have a different name in your device</p>
+<pre class="codehilite"><code class="language-bash"># Connect to your Android device
+adb shell
+
+# Find the partition name
+ls -l /dev/block/platform/
+ls -l /dev/block/platform/msm_sdcc.1/by-name
+
+# From there we know that the boot partition is /dev/block/mmcblk0p14
+# Now we just dump the partition to a file (we need to root permissions)
+su
+cat /dev/block/mmcblk0p14 &gt; /sdcard/boot.img
+chmod 0666 /sdcard/boot.img
+
+# Exit from adb and copy boot.img to your computer
+adb pull /sdcard/boot.img .</code></pre>
+
+
+<h2>Running postmarketOS with a pre-built kernel</h2>
+<p>You can use <code>unpackbootimg</code> (usage is described in [[here|How to find device specific information]]) to extract the kernel from your recently extracted boot.img or from a LineageOS release and run it together with postmarketOS initramfs.</p>
+<p>If you extracted the kernel from you Stock ROM, it might not have encryption support enabled and in this case you would not be able to boot from an encrypted partition which is how postmarketOS works by default. To disable encryption in postmarketOS use <code>pmbootstrap install --no-fde</code>. You might need other modules as well for pmOS to work properly.</p>
+<pre class="codehilite"><code class="language-bash"># fastboot boot &lt;kernel&gt; [ &lt;ramdisk&gt; ]
+fastboot boot \
+uncompressed_boot/boot.img-zImage \
+~/.local/var/pmboostrap/chroot_rootfs-XXX-XXXX/boot/initramfs-lg-hammerhead</code></pre>
+
+
+<h3>Useful links</h3>
+<ul>
+<li>https://github.com/lygstate/lygstate.github.com/blob/master/_posts/2014-03-10-Extract-boot.img-from-an-android-device.md</li>
+<li>http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images</li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Wifi/index.html b/docs/wiki/Wifi/index.html
new file mode 100644
index 0000000..3696781
--- /dev/null
+++ b/docs/wiki/Wifi/index.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Wifi/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Wifi</h1>
+<p><em>This is heavily work in progress - if you're working on this, make sure to join the <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Matrix-and-IRC">IRC/matrix</a> channel and to extend this wiki page with everything you find out.</em></p>
+<h3>General information</h3>
+<p>To get wireless LAN working, most WiFi chips need a proprietary firmware blob. While it would be more secure to replace that with open source software in the long term, it isn't feasible right now, so we try to get it working with that closed source firmware.
+A great place to start looking for information about many available WiFi chips is <a href="https://wireless.wiki.kernel.org/en/users/drivers">this kernel.org page</a>. It often provides driver sources and the required firmware blobs as well.</p>
+<h3>Android</h3>
+<p>We haven't quite figured it out yet, but for starters you need to [[find the WiFi firmware|How-to-find-device-specific-information#firmware-files]], make sure it gets installed and adjust the path in your kernel config (see <a href="https://github.com/postmarketOS/pmbootstrap/pull/122">#122</a>). Some firmwares need additional config files with calibration data, these can usually be found in the LineageOS or Google repositories.</p>
+<p><strong>Wifi <em>is working</em> for the [[i9070|Samsung-i9070-(Samsung-Galaxy-S-Advance)]], all steps are listed on the device's wiki page!</strong> (see <a href="https://github.com/postmarketOS/pmbootstrap/pull/138">PR #138</a>) (Feel free to put them here in a more generic way)</p>
+<h3>Debugging</h3>
+<p>First find the wifi device name with <code>ip link</code>. This is <code>wlan0</code> on most phones.
+Try to start the wlan interface with <code>ip link set wlan0 up</code>. This will most likely end with an error. Now to get the detailed error from the driver/firmware start <code>dmesg</code> and search for the relevant log lines. Here you will find errors about possible missing firmware and the filename that it wants.</p>
+<h3>Path to firmware</h3>
+<p>Usually your Android kernel expects the firmware files to be in a folder like <code>/system/vendor/firmware</code> and you need to patch the kernel and change the path to <code>/lib/firmware/postmarketos</code> (see <a href="https://github.com/postmarketOS/pmbootstrap/blob/2fe8eb0fdfa37381d521844b6137c03593279002/aports/linux-samsung-i9070/04_change_dhd_firmware_dir.patch">this patch</a>. Sometimes there is no need to patch, but simply change a kernel option that defines this path.</p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Xperia-E-Dual/index.html b/docs/wiki/Xperia-E-Dual/index.html
new file mode 100644
index 0000000..44b7521
--- /dev/null
+++ b/docs/wiki/Xperia-E-Dual/index.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Xperia-E-Dual/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Xperia E Dual</h1>
+<h3>Contributors</h3>
+<ul>
+<li>Nicknack</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Compiling the kernel </li>
+</ul>
+<h3>What does not work</h3>
+<ul>
+<li>Flashing, there are problems with Sony's boot image format</li>
+</ul>
+<p>The built kernel boots with a black screen and no further sign of acitivity. Fastboot flashes without errors but flash offsets are probably wrong. Only known working kernels have a different ELF file format.</p>
+<h3>Boot image format</h3>
+<p>There is one tool avaiable for unpacking Sony's ELF boot format into the normal ANDROID format:
+<a href="https://github.com/Tasssadar/libbootimg">libbootimg</a></p>
+<p>Sadly, even unpacking and repacking a working prebuilt kernel doesn't seem to work.</p>
+<p>I had more luck with mkelf.py script from Sony. You can loosely follow the tutorial <a href="https://www.netzgewitter.com/2013/10/compiling-android-linux-kernel-for-xperia/">here</a>. This time unpacking a working kernel elf image and repacking it with mkefl.py worked. Needed to change only a few bits with vbindiff. Now we only need to find a working set of offsets and image parts to do the same with a custom kernel!</p>
+<p>Here are some links describing the problem with Sony's boot format:
+<em> https://github.com/chenxiaolong/DualBootPatcher/issues/181
+</em> https://github.com/Tasssadar/libbootimg/pull/2/commits/8986984b5d618be0b753e55d6b9d9d1744bc4094
+* https://books.google.de/books?id=2qo6AwAAQBAJ&amp;pg=PA313&amp;lpg=PA313&amp;dq=sony+boot.img+format&amp;source=bl&amp;ots=0mtMMle9eZ&amp;sig=adCVtfarXK9cticvd5qqYA6g39Y&amp;hl=de&amp;sa=X&amp;ved=0ahUKEwjgp5mfx5XVAhUHWRQKHWSeDZcQ6AEIQzAB#v=onepage&amp;q&amp;f=false</p>
+<h3>Next possible steps</h3>
+<ul>
+<li>Try booting pmOS with a prebuilt kernel.</li>
+<li>Try repacking built kernel into ELF format</li>
+<li>UART debugging?</li>
+</ul>
+<h3>Links</h3>
+<ul>
+<li>
+<p><a href="https://github.com/Nicknack/pmOs_device_sony_nanhu">Device package</a></p>
+</li>
+<li>
+<p><a href="https://github.com/Klozz/android_kernel_sony_msm7x27a-nanhu">Kernel Source</a></p>
+</li>
+<li><a href="https://github.com/LineageOS/android_kernel_sony_msm7x27a/">Kernel Source LineageOS</a></li>
+<li><a href="https://github.com/der-koenig/android_kernel_sony_msm7x27a/tree/c5738aa4dbfa5f4b36331f07396e5eeaa12c9782">Kernel Source FreeXperia</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Xperia-Z2-Tablet/index.html b/docs/wiki/Xperia-Z2-Tablet/index.html
new file mode 100644
index 0000000..05eea26
--- /dev/null
+++ b/docs/wiki/Xperia-Z2-Tablet/index.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Xperia-Z2-Tablet/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Xperia Z2 Tablet</h1>
+<h3>Contributors</h3>
+<ul>
+<li>rcstar6696</li>
+<li>opendata26</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Compiling the kernel</li>
+<li>Fastboot flash</li>
+<li>SSH</li>
+<li>Setting Brightness</li>
+<li>Framebuffer</li>
+</ul>
+<p><strong>Current status</strong>:
+With andersson kernel most things work</p>
+<h3>Links</h3>
+<ul>
+<li><a href="https://ptpb.pw/QjZu">diff of the sysfs with what pmOS has and what it is in Android/TWRP</a> </li>
+<li><a href="https://github.com/rcstar6696/android_kernel_sony_msm8974">Kernel Source</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/Xperia-Z2/index.html b/docs/wiki/Xperia-Z2/index.html
new file mode 100644
index 0000000..3115d3e
--- /dev/null
+++ b/docs/wiki/Xperia-Z2/index.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/Xperia-Z2/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>Xperia Z2</h1>
+<h3>Contributors</h3>
+<ul>
+<li>rcstar6696</li>
+<li>opendata26</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Compiling the kernel</li>
+<li>Fastboot flash</li>
+<li>SSH</li>
+<li>Setting Brightness</li>
+</ul>
+<p><strong>Current status</strong>: The framebuffer doesent seem to work correctly (it just sits on boot logo) running cat <code>/dev/urandom &gt; /dev/fb0</code> does nothing and running <code>cat /dev/urandom &gt; /dev/fb2</code> makes the screen go black
+the same happens with <code>cat /sys/devices/virtual/graphics/fb0/mode &gt; /sys/devices/virtual/graphics/fb0/modes</code></p>
+<p><strong>What i've tried</strong>:
+<em> Using 3.10 instead of 3.4 (Gives same isue as anami)
+</em> Setting fb settings same as twrp (does nothing)</p>
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/rcstar6696/android_kernel_sony_msm8974">Kernel Source</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/_Sidebar/index.html b/docs/wiki/_Sidebar/index.html
new file mode 100644
index 0000000..e624ae6
--- /dev/null
+++ b/docs/wiki/_Sidebar/index.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/_Sidebar/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>_Sidebar</h1>
+<p><strong>[[postmarketOS|Home]]</strong>
+<em> [[Battery replacement]]
+</em> [[Boot process]]
+<em> [[Build internals]]
+</em> [[Device wishlist]]
+<em> [[Deviceinfo reference]]
+ * [[Flash methods|deviceinfo_flash_methods]]
+</em> [[Devices]]
+<em> [[External resources]]
+</em> [[Firmware]]
+<em> [[Glossary]]
+</em> [[Matrix and IRC]]
+<em> [[Milestones]]
+</em> [[Package naming convention]]
+<em> [[Partition layout]]
+</em> [[Plasma Mobile]]
+ * [[Packaging|Packaging Plasma Mobile]]
+<em> [[Related Projects]]
+</em> [[Tips and tricks]]
+<em> [[Troubleshooting]]
+ * [[Grsec|Troubleshooting:grsec]]
+ * [[Kernel|Troubleshooting:kernel]]
+</em> [[Upstreaming]]</p>
+<p><strong>Howto</strong>
+<em> [[Create a package|Creating a package]]
+</em> [[Development guide]]
+<em> [[Find device specific information|How to find device specific information]]
+</em> [[Initramfs development]]
+<em> [[Inspecting the initramfs]]
+</em> [[Installation guide]]
+<em> [[Mainline Kernel|The Mainline Kernel]]
+</em> [[Migration to aports subfolders]]
+<em> [[Provide packages with a local webserver|Installing-packages-on-a-running-phone]]
+</em> [[Porting to a new device]]
+<em> [[Screen calibration]]
+</em> [[Serial debugging]]
+<em> [[Tuning sysfs]]
+</em> [[Using prebuilt kernels]]
+* [[Wifi]]</p>
+<p><strong><a href="https://alpinelinux.org/">Alpine Linux</a></strong>
+<em> <a href="https://wiki.alpinelinux.org/wiki/APKBUILD_Reference">APKBUILD reference</a>
+</em> <a href="http://pkgs.alpinelinux.org/">Package search</a></p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/asus-grouper-(Google-Nexus-7-2012)/index.html b/docs/wiki/asus-grouper-(Google-Nexus-7-2012)/index.html
new file mode 100644
index 0000000..bbace16
--- /dev/null
+++ b/docs/wiki/asus-grouper-(Google-Nexus-7-2012)/index.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/asus-grouper-(Google-Nexus-7-2012)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>asus grouper (Google Nexus 7 2012)</h1>
+<h2>Contributors</h2>
+<ul>
+<li>antonok</li>
+</ul>
+<h2>What works</h2>
+<ul>
+<li>Boot process</li>
+<li>Telnet/SSH over USB</li>
+<li>Screen</li>
+<li>USB keyboard, mouse</li>
+<li>Touchscreen</li>
+</ul>
+<h2>What does not work</h2>
+<ul>
+<li>weston-keyboard</li>
+<li>Wifi + other untested parts</li>
+</ul>
+<h2>How to enter flash mode</h2>
+<ul>
+<li>Connect a USB cable</li>
+<li>Power the device off</li>
+<li>Hold power + volume down</li>
+<li><code>fastboot</code> should work when the green android appears on the screen</li>
+</ul>
+<h2>Notes</h2>
+<ul>
+<li>I am using the LineageOS kernel found <a href="https://github.com/LineageOS/android_kernel_asus_grouper">here</a></li>
+<li>The kernel cannot be compiled on versions of gcc newer than 4.9 without a patch, found <a href="https://lists.yoctoproject.org/pipermail/meta-xilinx/2015-September/001181.html">here</a></li>
+<li>I could not get UART debugging through the headphone jack to work - as far as I can tell, the 2012 version of the Nexus 7 does not have this feature.</li>
+<li>CONFIG_VT had to be enabled for graphics to work. In menuconfig this is located under Device Drivers -&gt; Character devices -&gt; Virtual terminal.</li>
+<li>/sys/class/graphics/fb0/mode is empty on boot, it must have U:800x1280p-0. This uses the same initfs hook as many other devices.</li>
+<li>xwayland does not work.</li>
+<li>weston with fbdev-backend.so uses pixman-type=3 (PIXMAN_TYPE_ABGR), which now does not require configuration.</li>
+<li>The touchscreen input device is named <code>elan-touchscreen</code>.</li>
+<li>The wifi chip is the Broadcom 4330.</li>
+<li>This device was once officially supported on Ubuntu, so it has a firmware package in the <a href="https://packages.ubuntu.com/trusty/linux-firmware-nexus7">Ubuntu repositories</a>.</li>
+</ul>
+<h2>Image</h2>
+<p><img alt="" src="http://i.imgur.com/P2QlXCR.jpg" /></p>
+<p><em>Fun fact: <code>grouper</code> is the first tablet to run pmOS!</em></p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/deviceinfo-reference/index.html b/docs/wiki/deviceinfo-reference/index.html
new file mode 100644
index 0000000..6953072
--- /dev/null
+++ b/docs/wiki/deviceinfo-reference/index.html
@@ -0,0 +1,243 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/deviceinfo-reference/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>deviceinfo reference</h1>
+<p>Most of the variables in <code>deviceinfo</code> have self-explanatory names and are used both when you are building postmarketOS and during runtime (it is available at <code>/etc/deviceinfo</code>).</p>
+<p>All variables start with <code>deviceinfo_</code> in the file - this is omitted here to save space.</p>
+<h2>device</h2>
+<table>
+<thead>
+<tr>
+<th>Variable</th>
+<th>Description</th>
+<th>Possibles values</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><code>format_version</code></td>
+<td>Used to distinguish between different versions of this file. It is usually "0"</td>
+<td></td>
+</tr>
+<tr>
+<td><code>name</code></td>
+<td>Device model (e.g. "Google Nexus 5")</td>
+<td></td>
+</tr>
+<tr>
+<td><code>manufacturer</code></td>
+<td>Device manufacturer (e.g. "LG")</td>
+<td></td>
+</tr>
+<tr>
+<td><code>date</code></td>
+<td>Release date of the device</td>
+<td></td>
+</tr>
+<tr>
+<td><code>keyboard</code></td>
+<td>The device has a hardware keyboard.</td>
+<td><code>true</code>, <code>false</code></td>
+</tr>
+<tr>
+<td><code>nonfree</code></td>
+<td>Components of the device, that only run with closed source firmware. We have to do more research on this topic and specify a list of possible values, for now all devices have <code>????</code> here.</td>
+<td><code>????</code></td>
+</tr>
+<tr>
+<td><code>dtb</code></td>
+<td>Name of the <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Glossary#dtb">device tree blob</a> file. This will be necessary for the <a href="https://github.com/postmarketOS/pmbootstrap/issues/91">mainline kernel</a>.</td>
+<td></td>
+</tr>
+<tr>
+<td><code>modules_initfs</code></td>
+<td>Kernel modules to include in the initramfs image. Note: modules to be loaded <em>after</em> the initramfs can be specified like in a <code>modules-load.conf</code> (<a href="https://github.com/postmarketOS/pmbootstrap/tree/master/aports/device-samsung-i9070">example</a>).</td>
+<td></td>
+</tr>
+<tr>
+<td><code>external_disk</code></td>
+<td>Does the device have an sdcard or other external storage medium?</td>
+<td><code>true</code>, <code>false</code></td>
+</tr>
+<tr>
+<td><code>external_disk_install</code></td>
+<td>Allow installing to sdcard</td>
+<td><code>true</code>, <code>false</code></td>
+</tr>
+<tr>
+<td><code>flash_methods</code></td>
+<td>Method used to flash the device ([[more info</td>
+<td>deviceinfo_flash_methods]])</td>
+</tr>
+<tr>
+<td><code>arch</code></td>
+<td>Device architecture, must be supported by Alpine Linux</td>
+<td><code>armhf</code>, <code>aarch64</code></td>
+</tr>
+</tbody>
+</table>
+<h3>flash</h3>
+<p>These are used for flashing and booting the device, and most of them are fastboot specific. <strong><a href="https://github.com/postmarketOS/pmbootstrap/wiki/How-to-find-device-specific-information#fastboot-bootimg-flash-offsets">Here is a guide on how to get these values for a specific Android device (by extracting the <code>boot.img</code>)</a></strong></p>
+<table>
+<thead>
+<tr>
+<th>Variable</th>
+<th>Description</th>
+<th>Possible values</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><code>flash_offset_kernel</code></td>
+<td>Kernel offset used for flashing</td>
+<td></td>
+</tr>
+<tr>
+<td><code>flash_offset_ramdisk</code></td>
+<td>Ramdisk offset used for flashing</td>
+<td></td>
+</tr>
+<tr>
+<td><code>flash_offset_second</code></td>
+<td>Used for flashing</td>
+<td></td>
+</tr>
+<tr>
+<td><code>flash_offset_tags</code></td>
+<td>Used for flashing</td>
+<td></td>
+</tr>
+<tr>
+<td><code>flash_offset_base</code></td>
+<td>Used for flashing</td>
+<td>Default: <code>0x10000000</code></td>
+</tr>
+<tr>
+<td><code>flash_pagesize</code></td>
+<td>Page size</td>
+<td>Usually "2048"</td>
+</tr>
+<tr>
+<td><code>flash_sparse</code></td>
+<td>Set this to true if your device expects a <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Troubleshooting#invalid-sparse-file-format-at-header-magi">sparse system image</a> flashed</td>
+<td></td>
+</tr>
+<tr>
+<td><code>kernel_cmdline</code></td>
+<td>Kernel command line</td>
+<td></td>
+</tr>
+<tr>
+<td><code>generate_bootimg</code></td>
+<td>Set this to true for fastboot device, so the <code>mkinitfs</code> command will generate a <code>boot.img</code> file after creating the <code>initfs</code>. Add <code>mkbootimg</code> as dependency to your device's APKBUILD!</td>
+<td><code>true, false</code></td>
+</tr>
+<tr>
+<td><code>generate_legacy_uboot_initfs</code></td>
+<td>For the <a href="https://github.com/postmarketOS/pmbootstrap/wiki/nokia-rx51-%28Nokia-N900%29">N900</a>, we use a legacy version of the <a href="https://en.wikipedia.org/wiki/Das_U-Boot">uboot</a> bootloader right now. When setting this variable to true, the initramfs will generate an uboot legacy compatible initramfs file. Modern versions of uboot can load regular initramfs files.</td>
+<td><code>true, false</code></td>
+</tr>
+<tr>
+<td>## weston</td>
+<td></td>
+<td></td>
+</tr>
+</tbody>
+</table>
+<table>
+<thead>
+<tr>
+<th>Variable</th>
+<th>Description</th>
+<th>Possibles values</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><code>weston_pixman_type</code></td>
+<td>(optional) Use it as a workaround for <a href="https://github.com/postmarketOS/pmbootstrap/issues/54">issue #54</a>.</td>
+<td>mostly <code>"2"</code> for ARGB, <a href="https://github.com/postmarketOS/pmbootstrap/issues/141#issuecomment-314211363">all values</a></td>
+</tr>
+<tr>
+<td><code>weston_core_modules</code></td>
+<td>Module(s) to load on device when using Weston</td>
+<td>See the <a href="http://manpages.ubuntu.com/manpages/wily/man5/weston.ini.5.html#contenttoc3">weston.ini manpage</a> for a list of valid modules</td>
+</tr>
+<tr>
+<td><code>weston_core_backend</code></td>
+<td>Weston backend to use</td>
+<td>See the <a href="http://manpages.ubuntu.com/manpages/wily/man5/weston.ini.5.html#contenttoc3">weston.ini manpage</a> for a list of valid backends. Note that not all of these may be compiled into Weston for Alpine Linux. If not set, this defaults to 'fbdev-backend.so'</td>
+</tr>
+<tr>
+<td><code>weston_keymap_rules</code></td>
+<td>Keyboard keymap rule to use.</td>
+<td>Valid rules are listed in <code>/usr/share/X11/xkb/rules/</code>.</td>
+</tr>
+<tr>
+<td><code>weston_keymap_model</code></td>
+<td>Keyboard keymap model to use.</td>
+<td>Valid models are listed in <code>/usr/share/X11/xkb/rules/symbols</code>, typically buried in a particular symbol file. For example, the model for the Nokia N900 is found in the file <code>/usr/share/X11/xkb/symbols/nokia_vndr/rx-51</code>, with a line that specifies <code>-model nokiarx51</code>. To set the keymap model for the N900, you would set <code>weston_keymap_model=nokiarx51</code> in the appropriate <code>deviceinfo</code> file</td>
+</tr>
+</tbody>
+</table>
+<h2>splash</h2>
+<table>
+<thead>
+<tr>
+<th>Variable</th>
+<th>Description</th>
+<th>Possibles values</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><code>screen_width</code></td>
+<td>The width of the display</td>
+<td>800, 720, 1440... anything really</td>
+</tr>
+<tr>
+<td><code>screen_height</code></td>
+<td>The height of the display</td>
+<td>1280, 2560... other</td>
+</tr>
+</tbody>
+</table>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/deviceinfo_flash_methods/index.html b/docs/wiki/deviceinfo_flash_methods/index.html
new file mode 100644
index 0000000..3d7e8c4
--- /dev/null
+++ b/docs/wiki/deviceinfo_flash_methods/index.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/deviceinfo_flash_methods/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>deviceinfo_flash_methods</h1>
+<h2>Introduction</h2>
+<p>Here is a guide on how to find the correct value for <code>deviceinfo_flash_methods</code>, and some pitfalls you need to look out for depending on your flasher application. Please note, that all flasher mode implementations on the phones
+listed here are proprietary (even if the flashing software is open source). But they are hard to <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Firmware">replace</a> (if we can do that at all), so we will use them for now to flash pmOS on the devices.</p>
+<h2>Android</h2>
+<p>Boot your phone into the bootloader menu. Usually this can be done by holding <code>Volume Down</code> and the <code>Power</code> button, until something changes on the screen, then only holding the <code>Volume Down</code> button until the menu appears. It should say either "Fastboot mode" or "Odin mode", read the appropriate section below. If
+you don't know the combination for your device, please search the Internet. (It is also a good idea to write this combination to your device's pmOS wiki page, so we can look it up quickly.)</p>
+<h3>Fastboot mode</h3>
+<p>Most Android devices are compatible with the open source fastboot protocol. That is good, because we simply can use the fastboot application to flash them, and no one needs to reverse engineer the protocol. You are done here, if you have a <code>fastboot</code> compatible device.</p>
+<h3>Odin mode</h3>
+<p>This uses a proprietary flashing protocol from Samsung. There has been great effort put into Heimdall, an open source program that tries to be compatible to the odin protocol. But it does not work perfectly yet, and some devices are not
+supported at all.</p>
+<p>So first check if your device also supports fastboot - some Samsung devices (such as the Galaxy Nexus) actually have both protocols (you would need to press another key combination to enter fastboot mode - search the Internet for the
+supported flash modes of your device). If you can use fastboot, please do so.</p>
+<p>For postmarketOS we're going to use Heimdall, but we use it in two different configurations - <code>heimdall-isorec</code> and <code>heimdall-bootimg</code>. You will need to find out the correct one for your device.</p>
+<h4>Isorec or bootimg?</h4>
+<p>A <code>boot.img</code> file contains a Linux kernel and an initramfs, along with some other configuration, such as the kernel command line. Some Samsung devices support these <code>boot.img</code> files, while others only support flashing a kernel with
+a baked-in initramfs. To find out what your device has, download a known working image for your device
+(e.g. from the vendor, or a LineageOS ROM, ...). Usually they come in zip files. Extract the zip file, and you will find a <code>boot.img</code> inside. Run the command <code>file</code> on that to find out, whether it is a real <code>boot.img</code> file, or just a
+<code>vmlinuz</code> file:</p>
+<pre class="codehilite"><code class="language-shell">file boot.img # real boot.img file -&gt; use heimdall-bootimg
+Android bootimg, kernel, ramdisk, page size: 2048</code></pre>
+
+
+<pre class="codehilite"><code class="language-shell">file boot.img # actually a vmlinuz file -&gt; use heimdall-isorec
+boot.img: Linux kernel ARM boot executable zImage (little-endian)</code></pre>
+
+
+<h5><code>heimdall-bootimg</code></h5>
+<p>When using that flasher, make sure that you also add <code>mkbootimg</code> to your <code>depends</code> line in the <code>APKBUILD</code>, and that you set <code>deviceinfo_generate_bootimg</code> in your <code>deviceinfo</code> file to <code>"true"</code>.
+To generate a working boot.img, in the <code>deviceinfo</code> you also need to specify the variables for the various offset, follow this <a href="https://github.com/postmarketOS/pmbootstrap/wiki/How-to-find-device-specific-information#fastboot-bootimg-flash-offsets">guide</a> to find the correct values for your device.</p>
+<h5><code>heimdall-isorec</code></h5>
+<p>Usually the initramfs would get packed into the vmlinuz file, when it has no support for the <code>boot.img</code> format. But this is a problem for postmarketOS, because we want to generate the initramfs explicitly <em>after</em> compiling the
+kernel, like it is done in typical Linux distributions.</p>
+<p>So what we do instead, is putting the real initramfs on the recovery partition (or any other free partition, such as "kernel2", but the name comes from "isolated recovery" and was coined by <a href="https://forum.xda-developers.com/galaxy-s2/orig-development/isorec-isolated-recovery-galaxy-s2-t3291176">Lanchon</a>). The initramfs baked into the kernel only extracts the real initramfs, and executes its init script.</p>
+<p>You will need to adjust the <code>init</code> script of your kernel's built in initramfs to point to the right partition. Use the <code>linux-samsung-i9100</code> package for reference.</p>
+<h4>Odin</h4>
+<p>In case you can't get it working with Heimdall, you could use the proprietary Odin program for Windows (e.g. in a VM) and flash from there. To do that, run the following commands to export all generated files from <code>pmbootstrap</code> and create an Odin-compatible tar file:</p>
+<pre class="codehilite"><code class="language-shell">pmbootstrap install
+pmbootstrap flasher export --odin</code></pre>
+
+
+<p>It would be great if you could record your flashing session with a USB sniffer and send it to the Heimdall developers (as ticket) or even implement support for your device in Heimdall yourself (C++ knowledge required). Please expand this wiki page on how to actually sniff the USB traffic, if you do that.</p>
+<h2>Maemo</h2>
+<p>The correct flasher is <code>0xffff</code> (which reverse engineered Nokia's proprietary flashing protocol). Right now we do not have abstracted it in the pmbootstrap config (so <code>pmbootstrap flasher flash_kernel</code> etc. will not work). That is
+because the Maemo devices have an SD card slot, and it is possible to install uboot on them - so flashing was not really required yet. But it is easy to extend the config to implement that abstraction when it is needed.
+Simply edit the <code>0xffff</code> part in <code>pmb/config/__init__.py</code> (and please make a pull-request after you have tested it).</p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/htc-monarudo-(HTC-Droid-DNA)/index.html b/docs/wiki/htc-monarudo-(HTC-Droid-DNA)/index.html
new file mode 100644
index 0000000..4a99810
--- /dev/null
+++ b/docs/wiki/htc-monarudo-(HTC-Droid-DNA)/index.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/htc-monarudo-(HTC-Droid-DNA)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>htc monarudo (HTC Droid DNA)</h1>
+<h3>Contributors</h3>
+<ul>
+<li>Ross Schulman</li>
+</ul>
+<h3>Current Status</h3>
+<ul>
+<li>Kernel builds</li>
+<li>Trying to boot the kernel with <code>fastboot boot ...</code> freezes the phone, as does using <code>pmbootstrap.py flasher boot</code></li>
+<li>Trying to flash the kernel with <code>pmboostrap.py flasher flash_system</code> or <code>flash_kernel</code> results in a <code>remote:not allowed</code> error, although this may be related to a corrupted partition table on my particular device.</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Nothing yet</li>
+</ul>
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/tree/device-htc-dlx">Working branch</a></li>
+<li><a href="https://github.com/rschulman/pmbootstrap/tree/dlx">Working branch</a></li>
+<li><a href="https://github.com/rschulman/pmbootstrap-htc-dlx-debug">Working CM boot.img and non-working pmOS kernel binaries</a></li>
+</ul>
+<h3>Partition layout</h3>
+<table>
+<thead>
+<tr>
+<th>device</th>
+<th>size</th>
+<th>filesystem</th>
+<th>description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>mmcblk0p16</td>
+<td>25 MiB</td>
+<td>vfat</td>
+<td>~</td>
+</tr>
+<tr>
+<td>mmcblk0p17</td>
+<td>5 MiB</td>
+<td>vfat</td>
+<td>~</td>
+</tr>
+<tr>
+<td>mmcblk0p24</td>
+<td>10 MiB</td>
+<td>ext4</td>
+<td>~</td>
+</tr>
+<tr>
+<td>mmcblk0p31</td>
+<td>48 MiB</td>
+<td>vfat</td>
+<td>~</td>
+</tr>
+<tr>
+<td>mmcblk0p32</td>
+<td>928 MiB</td>
+<td>ext4</td>
+<td>android system</td>
+</tr>
+<tr>
+<td>mmcblk0p33</td>
+<td>320 MiB</td>
+<td>ext4</td>
+<td>android cache</td>
+</tr>
+<tr>
+<td>mmcblk0p34</td>
+<td>5.8 GiB</td>
+<td>ext4</td>
+<td>android userdata</td>
+</tr>
+</tbody>
+</table>
+<h3>What have I tried so far</h3>
+<ul>
+<li>Pulling flash offsets from two different dlx ROMS. Both match each other and what we're using.</li>
+<li><code>adb push</code>ing the .img file and attempting to use <code>dd</code> to write into the system partition. Only succeeded in mangling the partition.</li>
+<li>Reflashing CM-12 just to be sure that the phone isn't totally bricked, but CM installs just fine and boots properly.</li>
+</ul>
+<h3>Some theories</h3>
+<ul>
+<li>Ross Schulman's particular HTC Droid DNA is individually broken and/or not unlocked properly (but see the ability to flash and boot multiple different CyanogenMod versions) </li>
+<li>Somehow the offsets are incorrect (haunting feeling this is it, but numbers were taken from previously mentioned CyanogenMod boot.img)</li>
+<li>The dlx doesn't actually use the m7's kernel at all (this doesn't seem plausible given the number of places that have indicated it is true)</li>
+<li>Ross is just mis-executing commands in some fundamental ways (the most likely of the bunch)</li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/index.html b/docs/wiki/index.html
new file mode 100644
index 0000000..7953aa7
--- /dev/null
+++ b/docs/wiki/index.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<ul>
+
+ <li><a href="/wiki/sony-amami-(Xperia-Z1-Compact)/">sony amami (Xperia Z1 Compact)</a></li>
+
+ <li><a href="/wiki/samsung-maguro-(Google-Galaxy-Nexus-GSM)/">samsung maguro (Google Galaxy Nexus GSM)</a></li>
+
+ <li><a href="/wiki/samsung-i9100-(Samsung-Galaxy-SII)/">samsung i9100 (Samsung Galaxy SII)</a></li>
+
+ <li><a href="/wiki/samsung-g800f-(Samsung-Galaxy-S5-mini)/">samsung g800f (Samsung Galaxy S5 mini)</a></li>
+
+ <li><a href="/wiki/samsung-S7562/">samsung S7562</a></li>
+
+ <li><a href="/wiki/qemu-vexpress-(Qemu-with-vexpress-soc)/">qemu vexpress (Qemu with vexpress soc)</a></li>
+
+ <li><a href="/wiki/qemu-amd64-(QEMU-for-x86_64)/">qemu amd64 (QEMU for x86_64)</a></li>
+
+ <li><a href="/wiki/nokia-rx51-(Nokia-N900)/">nokia rx51 (Nokia N900)</a></li>
+
+ <li><a href="/wiki/motorola-titan-(Moto-G-2014)/">motorola titan (Moto G 2014)</a></li>
+
+ <li><a href="/wiki/lg-mako-(Google-Nexus-4)/">lg mako (Google Nexus 4)</a></li>
+
+ <li><a href="/wiki/lg-hammerhead-(Google-Nexus-5)/">lg hammerhead (Google Nexus 5)</a></li>
+
+ <li><a href="/wiki/landrover-a9/">landrover a9</a></li>
+
+ <li><a href="/wiki/jolla-sbj-(Jolla-phone)/">jolla sbj (Jolla phone)</a></li>
+
+ <li><a href="/wiki/htc-monarudo-(HTC-Droid-DNA)/">htc monarudo (HTC Droid DNA)</a></li>
+
+ <li><a href="/wiki/deviceinfo_flash_methods/">deviceinfo_flash_methods</a></li>
+
+ <li><a href="/wiki/deviceinfo-reference/">deviceinfo reference</a></li>
+
+ <li><a href="/wiki/asus-grouper-(Google-Nexus-7-2012)/">asus grouper (Google Nexus 7 2012)</a></li>
+
+ <li><a href="/wiki/_Sidebar/">_Sidebar</a></li>
+
+ <li><a href="/wiki/Xperia-Z2/">Xperia Z2</a></li>
+
+ <li><a href="/wiki/Xperia-Z2-Tablet/">Xperia Z2 Tablet</a></li>
+
+ <li><a href="/wiki/Xperia-E-Dual/">Xperia E Dual</a></li>
+
+ <li><a href="/wiki/Wifi/">Wifi</a></li>
+
+ <li><a href="/wiki/Using-prebuilt-kernels/">Using prebuilt kernels</a></li>
+
+ <li><a href="/wiki/Upstreaming/">Upstreaming</a></li>
+
+ <li><a href="/wiki/Tuning-sysfs/">Tuning sysfs</a></li>
+
+ <li><a href="/wiki/Troubleshooting:kernel/">Troubleshooting:kernel</a></li>
+
+ <li><a href="/wiki/Troubleshooting:grsec/">Troubleshooting:grsec</a></li>
+
+ <li><a href="/wiki/Troubleshooting/">Troubleshooting</a></li>
+
+ <li><a href="/wiki/Tips-and-tricks/">Tips and tricks</a></li>
+
+ <li><a href="/wiki/The-mainline-kernel/">The mainline kernel</a></li>
+
+ <li><a href="/wiki/Serial-debugging/">Serial debugging</a></li>
+
+ <li><a href="/wiki/Screen-Calibration/">Screen Calibration</a></li>
+
+ <li><a href="/wiki/Samsung-n7100-(Samsung-Galaxy-Note-2)/">Samsung n7100 (Samsung Galaxy Note 2)</a></li>
+
+ <li><a href="/wiki/Samsung-i9070-(Samsung-Galaxy-S-Advance)/">Samsung i9070 (Samsung Galaxy S Advance)</a></li>
+
+ <li><a href="/wiki/Samsung-N7100-(Galaxy-Note-II-GSM)/">Samsung N7100 (Galaxy Note II GSM)</a></li>
+
+ <li><a href="/wiki/Related-Projects/">Related Projects</a></li>
+
+ <li><a href="/wiki/Porting-to-a-new-device/">Porting to a new device</a></li>
+
+ <li><a href="/wiki/Plasma-Mobile/">Plasma Mobile</a></li>
+
+ <li><a href="/wiki/Partition-layout/">Partition layout</a></li>
+
+ <li><a href="/wiki/Packaging-Plasma-Mobile/">Packaging Plasma Mobile</a></li>
+
+ <li><a href="/wiki/Package-naming-convention/">Package naming convention</a></li>
+
+ <li><a href="/wiki/Mozilla-Flame/">Mozilla Flame</a></li>
+
+ <li><a href="/wiki/Milestones/">Milestones</a></li>
+
+ <li><a href="/wiki/Migration-to-aports-subfolders/">Migration to aports subfolders</a></li>
+
+ <li><a href="/wiki/Matrix-and-IRC/">Matrix and IRC</a></li>
+
+ <li><a href="/wiki/LG-G3-Global/">LG G3 Global</a></li>
+
+ <li><a href="/wiki/Installing-packages-on-a-running-phone/">Installing packages on a running phone</a></li>
+
+ <li><a href="/wiki/Installation-Guide/">Installation Guide</a></li>
+
+ <li><a href="/wiki/Inspecting-the-initramfs/">Inspecting the initramfs</a></li>
+
+ <li><a href="/wiki/Initramfs-development/">Initramfs development</a></li>
+
+ <li><a href="/wiki/How-to-find-device-specific-information/">How to find device specific information</a></li>
+
+ <li><a href="/wiki/Home/">Home</a></li>
+
+ <li><a href="/wiki/HTC-Bravo-(HTC-Desire)/">HTC Bravo (HTC Desire)</a></li>
+
+ <li><a href="/wiki/HTC-Ace-(HTC-Desire-HD)/">HTC Ace (HTC Desire HD)</a></li>
+
+ <li><a href="/wiki/Glossary/">Glossary</a></li>
+
+ <li><a href="/wiki/Firmware/">Firmware</a></li>
+
+ <li><a href="/wiki/Fairphone-2/">Fairphone 2</a></li>
+
+ <li><a href="/wiki/External-resources/">External resources</a></li>
+
+ <li><a href="/wiki/Devices/">Devices</a></li>
+
+ <li><a href="/wiki/Device-Wishlist/">Device Wishlist</a></li>
+
+ <li><a href="/wiki/Development-guide/">Development guide</a></li>
+
+ <li><a href="/wiki/Creating-a-package/">Creating a package</a></li>
+
+ <li><a href="/wiki/Coolpad-Sky-3-E502-(Modena-2)/">Coolpad Sky 3 E502 (Modena 2)</a></li>
+
+ <li><a href="/wiki/Build-internals/">Build internals</a></li>
+
+ <li><a href="/wiki/Boot-process/">Boot process</a></li>
+
+ <li><a href="/wiki/BlackBerry-Bold-Touch-9900-(Dakota)/">BlackBerry Bold Touch 9900 (Dakota)</a></li>
+
+ <li><a href="/wiki/Battery-replacement/">Battery replacement</a></li>
+
+ <li><a href="/wiki/./">.</a></li>
+
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/jolla-sbj-(Jolla-phone)/index.html b/docs/wiki/jolla-sbj-(Jolla-phone)/index.html
new file mode 100644
index 0000000..9cf5403
--- /dev/null
+++ b/docs/wiki/jolla-sbj-(Jolla-phone)/index.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/jolla-sbj-(Jolla-phone)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>jolla sbj (Jolla phone)</h1>
+<h3>Contributors</h3>
+<ul>
+<li>MartijnBraam</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Compiling the kernel from the jolla sources which should provide everything to run wayland since that's what sailfish uses</li>
+</ul>
+<h3>What does not work</h3>
+<ul>
+<li>Flashing, still need to find the correct offsets</li>
+</ul>
+<h3>Flashing mode</h3>
+<p>The jolla does use fastboot from the mer project instead of android. To enter fastboot shut down the device, then plug in the USB lead while holding down volume down.</p>
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/tree/device-jolla-sbj/aports/device-jolla-sbj">Device package</a></li>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/tree/device-jolla-sbj/aports/linux-jolla-sbj">Kernel package</a></li>
+<li><a href="http://releases.sailfishos.org/sources/2.0.5.6/">Jolla sources</a></li>
+<li><a href="https://wiki.merproject.org/wiki/Compiling_Jolla_kernel">Mer project page</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/landrover-a9/index.html b/docs/wiki/landrover-a9/index.html
new file mode 100644
index 0000000..af136de
--- /dev/null
+++ b/docs/wiki/landrover-a9/index.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/landrover-a9/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>landrover a9</h1>
+<h3>Contributors</h3>
+<ul>
+<li>alexlep</li>
+</ul>
+<h3>Random information</h3>
+<ul>
+<li>Obscure phone:<blockquote>
+<p>This is just another clone from millions of devices from Chinese manufacturers.</p>
+</blockquote>
+</li>
+<li>MT6582 CPU</li>
+<li>Product code F090_GPS_KK</li>
+</ul>
+<h3>Status</h3>
+<ul>
+<li>a boot.img file with kernel, initramfs and dtb file from pmOS does <em>not</em> work.</li>
+<li>alexlep has a boot.img file from the vendor somewhere (extracted from the device?), that works when flashed via <code>fastboot boot</code>. It can not be extracted like a normal boot.img file, as reported on IRC. Probably the extraction tool can't handle the files.</li>
+<li>according to alexlep, there is a 512b header in front of the kernel and initramfs:<blockquote>
+<p>ramdisk and kernel has 512 bytes added in the beginning of the files</p>
+<p>custom header with file description</p>
+</blockquote>
+</li>
+<li>...and simply prepending that header in front of a custom initramfs/kernel does not work, as he reports.</li>
+</ul>
+<p>extracted boot.img, first bytes of pmOS initramfs (not working):</p>
+<pre class="codehilite"><code>sp@sppc:~/else/pmbs_work/chroot_native/pmos/extracted$ xxd -l 50 ramdisk
+00000000: 1f8b 0800 0000 0000 0203 949a 0d70 1ce5 .............p..
+00000010: 79c7 5fb0 09b2 621b 411d ac16 0317 c7a1 y._...b.A.......
+00000020: 0ed8 d6d9 96b1 2026 11b5 70d4 5814 4344 ...... &amp;..p.X.CD
+00000030: ea49 .I</code></pre>
+
+
+<p>extracted boot.img, first bytes of the vendor's initramfs (working):</p>
+<pre class="codehilite"><code>sp@sppc:~/else/pmbs_work/chroot_native/olololo/extracted$ xxd -l 50 ramdisk
+00000000: 8816 8858 f5a7 0c00 524f 4f54 4653 0000 ...X....ROOTFS..
+00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+00000020: 0000 0000 0000 0000 ffff ffff ffff ffff ................
+00000030: ffff</code></pre>
+
+
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/issues/73">#73</a> lists lots of issues with the device, and additional information, such as fastboot's partitions output</li>
+<li><a href="http://ruggedphoneco.com/smartphones/8-alps-a9-smartphone.html">This might be the same phone?</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/lg-hammerhead-(Google-Nexus-5)/index.html b/docs/wiki/lg-hammerhead-(Google-Nexus-5)/index.html
new file mode 100644
index 0000000..aae14df
--- /dev/null
+++ b/docs/wiki/lg-hammerhead-(Google-Nexus-5)/index.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/lg-hammerhead-(Google-Nexus-5)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>lg hammerhead (Google Nexus 5)</h1>
+<h3>Contributors</h3>
+<ul>
+<li>MartijnBraam</li>
+<li>dzervas</li>
+<li>lawl</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Compiling the LineageOS kernel</li>
+<li>SSH</li>
+<li>Booting</li>
+<li>Flash light</li>
+<li>Battery</li>
+<li>Weston + Touchscreen (with <a href="https://github.com/postmarketOS/pmbootstrap/pull/66">ugly hacks</a> and the <a href="https://github.com/postmarketOS/pmbootstrap/issues/54">red screen bug</a>)</li>
+</ul>
+<pre class="codehilite"><code class="language-bash">fastboot boot /mnt/rootfs_lg-hammerhead/boot/vmlinuz-lg-hammerhead /mnt/rootfs_lg-hammerhead/boot/initramfs-lg-hammerhead</code></pre>
+
+
+<h3>What does not work</h3>
+<ul>
+<li>Proprietary video driver (<a href="https://github.com/postmarketOS/pmbootstrap/issues/29">#29</a>)</li>
+<li>Flashing the compiled LineageOS kernel via pmbootstrap (<a href="https://github.com/postmarketOS/pmbootstrap/issues/35">#35</a>)</li>
+<li>WiFi (firmware needed)</li>
+<li>Front led</li>
+</ul>
+<pre class="codehilite"><code>[00:33:38] (native) flash kernel 'lg-hammerhead'
+creating boot image...
+creating boot image - 3600384 bytes
+sending 'SHLVL=1' (3516 KB)...
+OKAY [ 0.331s]
+writing 'SHLVL=1'...
+FAILED (remote: partition table doesn't exist)
+finished. total time: 0.511s
+[00:33:38] ERROR: Command failed: (native) % fastboot --base 0 --kernel-offset 0x00008000 --ramdisk-offset 0x02900000 --tags-offset 0x02700000 --page-size 2048 flash:raw /mnt/rootfs_lg-hammerhead/boot/vmlinuz-lg-hammerhead /mnt/rootfs_lg-hammerhead/boot/initramfs-lg-hammerhead</code></pre>
+
+
+<p>Workaround (on host, not inside chroot):</p>
+<pre class="codehilite"><code>mkbootimg --base 0 --pagesize 2048 --kernel_offset 0x00008000 --ramdisk_offset 0x2900000 --second_offset 0x00f00000 --tags_offset 0x02700000 --cmdline 'console=ttyHSL0,115200,n8 androidboot.hardware=hammerhead user_debug=31 maxcpus=2 msm_watchdog_v2.enable=1' --kernel ~/.local/var/pmbootstrap/chroot_native/mnt/rootfs_lg-hammerhead/boot/vmlinuz-lg-hammerhead --ramdisk ~/.local/var/pmbootstrap/chroot_native/mnt/rootfs_lg-hammerhead/boot/initramfs-lg-hammerhead -o pmos.img
+fastboot boot pmos.img</code></pre>
+
+
+<p>There is also a bug and the screen is not updated. Workaround: login using ssh and run the following command:</p>
+<pre class="codehilite"><code>ssh user@172.16.42.1
+sudo su
+while [ ! ]; do cat /sys/class/graphics/fb0/modes &gt; /sys/class/graphics/fb0/mode; done</code></pre>
+
+
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/tree/master/aports/linux-lg-hammerhead">Kernel package</a></li>
+<li>
+<p><a href="https://github.com/postmarketOS/pmbootstrap/tree/master/aports/device-lg-hammerhead">Device package</a></p>
+</li>
+<li>
+<p><a href="https://gist.github.com/MartijnBraam/57ec370985af341ceb17521183695a3d">dmesg from mainline linux with the missing block devices</a></p>
+</li>
+</ul>
+<h2>Photos</h2>
+<ul>
+<li><a href="https://user-images.githubusercontent.com/6033024/26851053-3f5512fe-4af9-11e7-93da-cf9dd94b6b75.jpg">Weston running (with the red screen bug)</a></li>
+<li><a href="https://www.reddit.com/r/postmarketOS/comments/6fovjp/postmarketos_running_on_the_the_nexus_5/">/r/postmarketOS post</a></li>
+</ul>
+<h2>Component support table</h2>
+<table>
+<thead>
+<tr>
+<th>Component</th>
+<th>Module</th>
+<th>LineageOS Kernel</th>
+<th>Mainline kernel</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Storage</td>
+<td>sdhci</td>
+<td>Working</td>
+<td>Working</td>
+</tr>
+<tr>
+<td>WiFi</td>
+<td>bcmdhd</td>
+<td>Missing firmware</td>
+<td>No</td>
+</tr>
+<tr>
+<td>USB Networking</td>
+<td></td>
+<td>Yes</td>
+<td>No</td>
+</tr>
+<tr>
+<td>2D Video</td>
+<td>mdss_fb</td>
+<td>Screen not refreshing automatically</td>
+<td>No</td>
+</tr>
+<tr>
+<td>3D Video</td>
+<td></td>
+<td>Not in kernel</td>
+<td>No</td>
+</tr>
+<tr>
+<td>Debug serial</td>
+<td></td>
+<td>Yes, /dev/ttyHSL0</td>
+<td>Yes, /dev/ttyMSM0</td>
+</tr>
+</tbody>
+</table>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/lg-mako-(Google-Nexus-4)/index.html b/docs/wiki/lg-mako-(Google-Nexus-4)/index.html
new file mode 100644
index 0000000..8e4c6d8
--- /dev/null
+++ b/docs/wiki/lg-mako-(Google-Nexus-4)/index.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/lg-mako-(Google-Nexus-4)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>lg mako (Google Nexus 4)</h1>
+<h3>Contributors</h3>
+<ul>
+<li>ollieparanoid</li>
+<li>PabloCastellano and robb4 on IRC: Workaround for red screen bug <a href="https://github.com/postmarketOS/pmbootstrap/issues/54">#54</a></li>
+</ul>
+<h3>Entering "Fastboot mode"</h3>
+<p>Hold <code>Volume Down</code> + <code>Power</code>, let go of <code>Power</code> once the device display does something (e.g. turns from battery icon to black screen).</p>
+<h3>What works</h3>
+<ul>
+<li>Touchscreen</li>
+<li>Weston (has the red screen bug, but we have a workaround for that now 👍 )</li>
+</ul>
+<h3>What does not work</h3>
+<ul>
+<li>XWayland</li>
+<li>The rest (Wifi, bluetooth, making calls, ...)</li>
+<li>fbsplash only displays splash images very shortly, then goes to black screen</li>
+</ul>
+<h3>Wifi</h3>
+<p>Looks like, we need to package the <a href="https://github.com/LineageOS/android_device_lge_mako/blob/12ac6e9aeb32d5ac9fc832f2214ede2c7690d0a6/proprietary-blobs.txt#L152-L157">wcnss.* files</a> for wifi. A version from 2015 can be found <a href="https://github.com/TheMuppets/proprietary_vendor_lge/tree/cm-14.1/mako/proprietary/vendor/firmware">here</a>. It's a Qualcomm chip.</p>
+<h3>Alternative kernels</h3>
+<p>These are not packaged yet in postmarketOS, feel free to package them.
+<em> <a href="https://github.com/postmarketOS/pmbootstrap/issues/12">"Almost mainline" from John Stultz</a> &lt;- maybe this also resolves the wrong-color-bug
+</em> <a href="https://github.com/postmarketOS/pmbootstrap/pull/38">Freedreno</a></p>
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/tree/master/aports/device-lg-mako">Device package</a></li>
+<li><a href="https://www.optiv.com/blog/building-a-nexus-4-uart-debug-cable">Tutorial: UART debug cable</a></li>
+<li><a href="https://developers.google.com/android/drivers#mako">Official proprietary drivers</a></li>
+</ul>
+<h3>Photos</h3>
+<ul>
+<li><a href="https://ollieparanoid.github.io/img/2017-05-26/mako/editor.jpg">Weston running with framebuffer issues</a></li>
+<li><a href="https://cloud.githubusercontent.com/assets/6033024/26761940/2e3273e0-4928-11e7-8800-0b4ddb14e239.jpg">robb4 patched Weston to display the right colors</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/motorola-titan-(Moto-G-2014)/index.html b/docs/wiki/motorola-titan-(Moto-G-2014)/index.html
new file mode 100644
index 0000000..87088ab
--- /dev/null
+++ b/docs/wiki/motorola-titan-(Moto-G-2014)/index.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/motorola-titan-(Moto-G-2014)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>motorola titan (Moto G 2014)</h1>
+<p>Motorola Moto G 2014 (2nd generation), aka "titan".</p>
+<h3>Contributors</h3>
+<ul>
+<li><a href="https://github.com/PabloCastellano/">PabloCastellano</a></li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>[x] Kernel compiles (LineageOS)</li>
+<li>[x] Booting the system</li>
+<li>[ ] Splash screens</li>
+<li>[x] Unlock the root encrypted partition</li>
+<li>[x] Framebuffer graphics</li>
+<li>[x] Weston</li>
+<li>[x] Touchscreen</li>
+<li>[ ] XWayland</li>
+<li>[ ] Battery</li>
+<li>[ ] Flash light</li>
+<li>[ ] RGB front LED</li>
+<li>[ ] Backlight control</li>
+<li>[x] flash_system</li>
+<li>[x] boot</li>
+<li>[ ] flash_kernel</li>
+<li>[ ] wifi</li>
+</ul>
+<h3>What doesn't work well</h3>
+<ul>
+<li>I had to disable -Werror in order to compile the kernel</li>
+<li>Screen is laggy</li>
+<li>
+<p>initfs hook</p>
+</li>
+<li>
+<p>Splash screens don't work and I cannot get framebuffer working in initramfs</p>
+</li>
+<li>Screen is black after I've entered the password. Workaround:</li>
+</ul>
+<pre class="codehilite"><code class="language-bash">sh /etc/postmarketos-mkinitfs/hooks/00-device-motorola-titan.sh`</code></pre>
+
+
+<ul>
+<li>Cannot boot if kernel is XZ-compressed (it boots if you build it using <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Troubleshooting%3Akernel#building-the-kernel-with-androids-build-system">Android's build system</a>)</li>
+<li>flash_kernel: <a href="https://github.com/postmarketOS/pmbootstrap/issues/126">boot image is too big</a></li>
+<li>flash_system: <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Troubleshooting#invalid-sparse-file-format-at-header-magi">Invalid sparse file format at header magi</a></li>
+<li>
+<p>wifi: requires wcnss-service (some work already begun in <a href="https://github.com/PabloCastellano/pmbootstrap/commits/titan-wifi">titan-wifi</a> branch)</p>
+</li>
+<li>
+<p>show_splash</p>
+</li>
+</ul>
+<pre class="codehilite"><code># From initramfs
+/tmp # show_splash splash1.ppm.gz
+fbsplash: short read</code></pre>
+
+
+<p>This is written to dmesg everytime you type the previous command:</p>
+<pre class="codehilite"><code>[ 74.192213,0] mdss_fb_alloc_fb_ion_memory: alloc 0x398000B vaddr = e9b99000 (0x00200000 iova) for fb0
+[ 74.192374,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.192685,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.192846,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.193004,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.193106,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.193263,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.193366,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.193522,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.193624,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.193780,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.193882,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.194037,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.194138,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.194292,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.194446,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.194547,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.194702,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.194804,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.194960,0] vm_start=b6ad2000 vm_end=b6e6a000 vm_page_prot=1799
+[ 74.196516,0] lm3630a_bl 0-0038: wake up and re-init chip</code></pre>
+
+
+<h3>Useful stuff</h3>
+<p>White LED:</p>
+<pre class="codehilite"><code class="language-bash">echo 255 &gt; /sys/devices/leds-qpnp-rgb-e1d8be00/leds/white/brightness</code></pre>
+
+
+<p><a href="https://github.com/LineageOS/android_kernel_motorola_msm8226/blob/cm-14.1/drivers/leds/leds-qpnp.c#L187-L189">RGB LED documentation</a></p>
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/LineageOS/android_kernel_motorola_msm8226">android_kernel_motorola_msm8226</a></li>
+<li><a href="https://github.com/LineageOS/lineage_wiki/blob/master/_data/devices/titan.yml">titan.yml</a></li>
+<li><a href="https://github.com/LineageOS/android_kernel_motorola_msm8226/blob/cm-14.1/arch/arm/configs/titan_defconfig">defconfig</a></li>
+<li><a href="https://github.com/LineageOS/android_device_motorola_titan/blob/cm-14.1/proprietary-files.txt">proprietary-files.txt</a></li>
+<li>
+<p><a href="https://cve.lineageos.org/android_kernel_motorola_msm8226">CVE security status</a></p>
+</li>
+<li>
+<p><a href="http://termbin.com/84rz">dmesg.txt</a></p>
+</li>
+</ul>
+<h3>Photos</h3>
+<ul>
+<li><a href="https://imgur.com/y1NLmcF">PostmarketOS running on Motorola Moto G 2014 (titan)</a></li>
+</ul>
+<h3>Drivers table</h3>
+<table>
+<thead>
+<tr>
+<th>Component</th>
+<th>Brand</th>
+<th>Module</th>
+<th>Works?</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Accelerometer</td>
+<td>Bosch Sensortec MEMS accelerometer sensor driver</td>
+<td>bma2x2</td>
+<td></td>
+</tr>
+<tr>
+<td>Framebuffer</td>
+<td></td>
+<td>mdss</td>
+<td>Yes</td>
+</tr>
+<tr>
+<td>WiFi</td>
+<td></td>
+<td><a href="https://github.com/LineageOS/android_kernel_motorola_msm8226/blob/cm-14.1/Documentation/devicetree/bindings/wcnss/wcnss-wlan.txt">wcnss</a></td>
+<td></td>
+</tr>
+<tr>
+<td>Storage</td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<td>USB networking</td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+</tbody>
+</table>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/nokia-rx51-(Nokia-N900)/index.html b/docs/wiki/nokia-rx51-(Nokia-N900)/index.html
new file mode 100644
index 0000000..479e094
--- /dev/null
+++ b/docs/wiki/nokia-rx51-(Nokia-N900)/index.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/nokia-rx51-(Nokia-N900)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>nokia rx51 (Nokia N900)</h1>
+<h3>Contributors</h3>
+<ul>
+<li>MartijnBraam</li>
+<li>craftyguy</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Booting the system</li>
+<li>Kernel log to the display</li>
+<li>Framebuffer graphics</li>
+<li>Unlocking the root partition using the keyboard</li>
+<li>Display Backlight control</li>
+<li>Wayland on framebuffer</li>
+<li>Module loading</li>
+<li>Wifi (see Additional Info below)</li>
+<li>Notification led</li>
+<li>Audio playback</li>
+<li>Keyboard backlight (see Additional Info below)</li>
+<li>Battery capacity reporting (see Additional Info below)</li>
+</ul>
+<h3>What does not work</h3>
+<ul>
+<li>Virtual terminal keymap is incorrect, the shift key doesn't allow entering numbers</li>
+<li>Both cameras</li>
+</ul>
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/tree/master/aports/device-nokia-rx51">Device package</a></li>
+<li><a href="https://kernel.org">Kernel source</a></li>
+</ul>
+<h3>Additional info</h3>
+<ul>
+<li>Martijn's N900 has uboot installed a long time ago, I'm using sdcard boot from the bootmenu shell using <code>run sdboot</code></li>
+<li>The <a href="https://neo900.org/">Neo900</a> (still in development) will upgrade the hardware inside of the N900, and has some nice features such as hardware sandboxing the modem.</li>
+</ul>
+<h4>Wifi</h4>
+<p>The <code>linux-firmware</code> package is required to provide the wl1251 firmware necessary for initializing the wifi device. (<a href="https://github.com/postmarketOS/pmbootstrap/pull/158">#158</a>)</p>
+<p>Once the device has been successfully initialized, enable it:</p>
+<pre class="codehilite"><code>$ sudo ip link set wlan0 up
+$ sudo iw wlan0 set type managed</code></pre>
+
+
+<p>Configure wpa_supplicant (only necessary on encrypted networks):</p>
+<pre class="codehilite"><code>$ sudo su -
+# wpa_passphrase $YOUR_SSID &gt; /etc/wpa_supplicant/wlan0.conf
+&lt;enter passphrase here and press Enter&gt;
+# exit</code></pre>
+
+
+<p>Connect to network using wpa_supplicant:</p>
+<pre class="codehilite"><code>$ sudo wpa_supplicant -Dwext -i wlan0 -c /etc/wpa_supplicant/wlan0.conf</code></pre>
+
+
+<p>If your network uses DHCP, start the DHCP client:</p>
+<pre class="codehilite"><code>$ sudo udhcpc -i wlan0</code></pre>
+
+
+<h4>Keyboard Backlight</h4>
+<p>There are 6 keyboard backlight LEDs that can be adjusted, they are found under <code>/sys/class/leds/lp5523:kb{1-6}</code>. To adjust brightness, write a value, $VAL between 0 and 255, to the <code>brightness</code> parameter as the root user:</p>
+<pre class="codehilite"><code>for i in $(seq 1 6);
+ do echo $VAL &gt; /sys/class/leds/lp5523\:kb$i/brightness
+done</code></pre>
+
+
+<h4>Boot partition within postmarketos</h4>
+<p>The boot partition can be accessed within postmarketos by mounting <code>/dev/dm-0</code>. This allows performing kernel updates by installing the <code>linux-nokia-rx51</code> apk after mounting <code>/dev/dm-0</code> to <code>/boot</code>.</p>
+<h4>Display</h4>
+<p>With DRM enabled (<a href="https://github.com/postmarketOS/pmbootstrap/pull/197">#197</a>), the display can be managed at this location: <code>/sys/devices/platform/omapdrm.0/graphics/fb0/</code></p>
+<h4>Keyboard layout in console</h4>
+<p>In order to set the keyboard layout for the virtual console (e.g. to take advantage of number keys on the N900 keyboard), obtain your desired language keymap file for the RX-51, <a href="https://raw.githubusercontent.com/archlinuxarm-n900/n900-keymaps/master/rx51_us.map">such as this one.</a>. (TODO: Need to pull 'official' vconsole keymaps from Maemo5 if they exist..).</p>
+<p>On the N900, install <code>kbd-bkeymaps</code>, either by using <code>pmbootstrap install --add kbd-bkeysmaps</code> on the host system or by running <code>apk add kbd-bkeysmaps</code> on the device itself.</p>
+<p>The keymap must be in binary format, bmap. This can be accomplished using the <code>loadkeys</code> tool:</p>
+<pre class="codehilite"><code class="language-bash">$ apk add kbd kbd-bkeymaps
+$ loadkeys -b rx51_us.map &gt; rx51_us.bmap
+$ gzip rx51_us.bmap</code></pre>
+
+
+<p>Compress it and copy it to <code>/usr/share/bkeymaps/us/</code> on the N900.</p>
+<p>Log into the N900, and run <code>sudo setup-keymap</code>, then select <code>us</code> and finally <code>rx51_us</code>.</p>
+<h4>Battery Capacity Reporting</h4>
+<p>The current battery capacity can be found under <code>/sys/class/power_supply/bq27200-0/capacity</code>, and is represented as a percentage. For example, a value of <code>11</code> equates to <code>11%</code>. If <code>capacity</code> does not exist or contains erroneous information, then your battery needs to be calibrated first. To calibrate the battery:</p>
+<p>1) Charge it up fully, using a wall power adapter.</p>
+<p>2) Once it is charged up, power on the device</p>
+<p>3) Unplug the device and allow the battery to run all the way down until it powers off. This may take quite a while to happen (&gt;24hrs, but can be made shorter by running a CPU intensive workload)</p>
+<p>4) When device powers off, plug it back into wall adapter and allow to charge up fully again. The battery and charging chip should now be calibrated.</p>
+<h3>Helpful Links for Porting</h3>
+<ul>
+<li>
+<p><a href="https://neo900.org/stuff/block-diagrams/n900/n900.html">Device schematic</a></p>
+</li>
+<li>
+<p><a href="http://plan9.stanleylieber.com/hardware/n900/n900.schematics.pdf">Very detailed schematic</a></p>
+</li>
+<li>
+<p><a href="https://github.com/archlinuxarm-n900/alarm-n900/wiki/Hardware-support">Arch Linux ARM - N900 hardware components list</a></p>
+</li>
+<li>
+<p><a href="http://mlab.taik.fi/paja/?p=1263">N900 sensor access in Maemo</a></p>
+</li>
+<li>
+<p><a href="http://natisbad.org/N900/n900-commented-hardware-specs.html">Hardware component specs / list</a></p>
+</li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/qemu-amd64-(QEMU-for-x86_64)/index.html b/docs/wiki/qemu-amd64-(QEMU-for-x86_64)/index.html
new file mode 100644
index 0000000..fa291d8
--- /dev/null
+++ b/docs/wiki/qemu-amd64-(QEMU-for-x86_64)/index.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/qemu-amd64-(QEMU-for-x86_64)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>qemu amd64 (QEMU for x86_64)</h1>
+<p>This device is used for testing purposes. It is possible to run postmarketOS in a x86_64 Virtual Machine. Note that only 64bits CPUs work.</p>
+<p>QEMU will emulate the default x86_64 architecture (see <code>qemu-system-x86_64 -machine help</code> for more choices).</p>
+<h3>Contributors</h3>
+<ul>
+<li>ollieparanoid</li>
+<li>MartijnBraam</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Compilation of kernel, system and initramfs</li>
+<li>Storage</li>
+<li>Network</li>
+<li>Keyboard and mouse</li>
+</ul>
+<h3>Starting qemu</h3>
+<pre class="codehilite"><code class="language-bash">$ ./pmbootstrap.py init # Choose qemu-amd64 as device
+$ ./pmbootstrap.py install
+$ ./pmbootstrap.py qemu</code></pre>
+
+
+<h3>Links</h3>
+<h3>Screenshot</h3>
+<p><img alt="screenshot_2017-08-03_16-43-26" src="https://user-images.githubusercontent.com/1565836/28927507-087fb78a-786b-11e7-8dea-96e8afe2acd9.png" /></p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/qemu-vexpress-(Qemu-with-vexpress-soc)/index.html b/docs/wiki/qemu-vexpress-(Qemu-with-vexpress-soc)/index.html
new file mode 100644
index 0000000..00bc132
--- /dev/null
+++ b/docs/wiki/qemu-vexpress-(Qemu-with-vexpress-soc)/index.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/qemu-vexpress-(Qemu-with-vexpress-soc)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>qemu vexpress (Qemu with vexpress soc)</h1>
+<p>This device is used to emulate an ARM Versatile Express for Cortex-A9.</p>
+<p>Vexpress (Versatile Express) is the reference architecture from the ARM Foundation. It simulates the armv7 architecture and a lot of other hardware (like graphics hardware).</p>
+<p>QEMU supports many other ARM architectures (see <code>qemu-system-arm -machine help</code>).</p>
+<h3>Contributors</h3>
+<ul>
+<li>MartijnBraam</li>
+<li>mmaret</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Compilation of kernel, system and initramfs</li>
+<li>It boots but only if you specify a seperate <code>-dtb</code> flag, it doesn't use the embedded dtb</li>
+<li>Storage</li>
+<li>Network</li>
+</ul>
+<h3>What does not work</h3>
+<ul>
+<li>Keyboard and mouse</li>
+</ul>
+<h3>Starting qemu</h3>
+<pre class="codehilite"><code class="language-bash">$ ./pmbootstrap.py install
+$ ./pmbootstrap.py flasher export
+$ cp ~/.local/var/pmbootstrap/chroot_rootfs_qemu-vexpress/usr/share/dtb/vexpress-v2p-ca9.dtb .
+$ qemu-system-arm \
+ -kernel vmlinuz-postmarketos \
+ -initrd initramfs-postmarketos \
+ -M vexpress-a9 \
+ -m 1024 \
+ -sd qemu-vexpress.img \
+ -append &quot;console=ttyAMA0,38400n8 console=tty1 PMOS_NO_OUTPUT_REDIRECT&quot; \
+ -dtb vexpress-v2p-ca9.dtb</code></pre>
+
+
+<h3>Links</h3>
+<ul>
+<li>https://wiki.linaro.org/PeterMaydell/QemuVersatileExpress</li>
+</ul>
+<h3>Screenshot</h3>
+<p><img alt="Qemu unlock screen" src="http://i.imgur.com/Hwq0ryI.png" />
+<img alt="Weston" src="http://i.imgur.com/AWRDDQ1.png" /></p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/samsung-S7562/index.html b/docs/wiki/samsung-S7562/index.html
new file mode 100644
index 0000000..7600be9
--- /dev/null
+++ b/docs/wiki/samsung-S7562/index.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/samsung-S7562/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>samsung S7562</h1>
+<p>This device is not supported by LineageOS but the kernel is apparently in GitHub.</p>
+<h3>Contributors</h3>
+<ul>
+<li>cmdr2 on IRC</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Compilation of kernel, system and initramfs</li>
+<li>pmOS starts up if a pre-compiled kernel (from the original boot.img) is used, along with the newly built initramfs and system image. Telnet, decrypt filesystem, and ssh (partially) works</li>
+</ul>
+<h3>What does not work</h3>
+<ul>
+<li>pmOS does not boot with the newly built kernel. it only works if a pre-built factory kernel is used</li>
+<li>ssh fails with a 'cannot create channel 0' error, which can be bypassed with <code>ssh user@&lt;ip&gt; '/bin/sh'</code>. With this, no prompt is shown (i.e. no "$" or "%"), but commands can be typed and executed and the results are displayed</li>
+<li>No graphics are displayed on the screen, weston fails with <code>Failed to open frame buffer device ‘/dev/fb0’: No such file or directory</code></li>
+</ul>
+<h3>Links</h3>
+<ul>
+<li>https://github.com/KlinkOnE/android_kernel_ba2x_2.0-1</li>
+<li>https://forum.xda-developers.com/s7562/development/cm11-samsung-galaxy-s-duos-kitkat-4-4-4-t3024762</li>
+</ul>
+<h3>Photos</h3>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/samsung-g800f-(Samsung-Galaxy-S5-mini)/index.html b/docs/wiki/samsung-g800f-(Samsung-Galaxy-S5-mini)/index.html
new file mode 100644
index 0000000..6cb3b39
--- /dev/null
+++ b/docs/wiki/samsung-g800f-(Samsung-Galaxy-S5-mini)/index.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/samsung-g800f-(Samsung-Galaxy-S5-mini)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>samsung g800f (Samsung Galaxy S5 mini)</h1>
+<h2>Basic info</h2>
+<p>Device: Samsung Galaxy S5 mini (SM-G800F; European version)</p>
+<p>Cortex A7 (32 bit ARM), quad core 1.4GHz; 1.5GB RAM, 16GB storage.</p>
+<ul>
+<li><a href="http://www.gsmarena.com/samsung_galaxy_s5_mini-6252.php">more specs</a></li>
+<li><a href="https://github.com/cm-3470/android_device_samsung_kminilte">Unofficial LineageOS repo</a></li>
+<li><a href="https://github.com/cm-3470/android_kernel_samsung_kminilte">Unofficial LineageOS kernel repo</a></li>
+</ul>
+<h3>How to enter flash mode</h3>
+<p>Press and hold "volume down + home + power" simultaneously. Then click volume up to confirm.</p>
+<h3>Problems</h3>
+<ul>
+<li>Currently, Heimdall seems to be unable to flash the device's <code>SYSTEM</code> partition, so we can't do the entire install using just <code>pmbootstrap flasher</code>.</li>
+<li><code>udevadm trigger</code> causes a complete system freeze and eventual reboot. If you comment out that line in <code>start_weston.sh</code> and replace it by <code>udevadm trigger --attr-match=name=sec_touchscreen</code>, the touch screen should work.</li>
+</ul>
+<h3>Preparing for install</h3>
+<p>First, <a href="https://eu.dl.twrp.me/kminilte/">download the TWRP recovery ROM</a>. You'll need both the <code>.img.tar</code> and the <code>.img</code> file. First, extract the tar file to obtain <code>recovery.img</code>. Then, put your phone in flash mode and flash using Heimdall:</p>
+<pre class="codehilite"><code>$ heimdall flash --RECOVERY recovery.img --BOOT twrp-3.1.1-1-kminilte.img</code></pre>
+
+
+<p>Now you should be able to connect to the device using <code>adb</code>.</p>
+<h3>Installing system</h3>
+<p>Follow <a href="https://github.com/ata2001/android-recovery-zip">the android-recovery-zip steps</a>, substituting <code>samsung-g800f</code> for <code>your-device</code> in all the commands. If you get an error <code>lddtree not found</code>, simply run <code>apk add lddtree</code> in the chroot environment and try again.</p>
+<p>If you get the following errors:</p>
+<pre class="codehilite"><code>device-mapper: reload ioctl on failed: No such file or directory
+Failed to setup dm-crypt key mapping for device /dev/block/mmcblk0p18.
+Check that kernel supports aes-xts-plain64 cipher (check syslog for more info).</code></pre>
+
+
+<p>You can try to reinstall with a different cipher, by editing <code>install_options</code> and changing the <code>CIPHER</code> line to <code>CIPHER="aes-cbc-plain64"</code>, re-zipping and using <code>adb sideload</code> again.</p>
+<h3>Installing kernel</h3>
+<p>This can be done via <code>./pmbootstrap.py flasher flash_kernel</code></p>
+<p>It should boot, and show the Samsung splash screen. After that you should be able to <a href="https://github.com/postmarketOS/pmbootstrap/wiki/Boot-process">connect via telnet</a></p>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/samsung-i9100-(Samsung-Galaxy-SII)/index.html b/docs/wiki/samsung-i9100-(Samsung-Galaxy-SII)/index.html
new file mode 100644
index 0000000..347f47b
--- /dev/null
+++ b/docs/wiki/samsung-i9100-(Samsung-Galaxy-SII)/index.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/samsung-i9100-(Samsung-Galaxy-SII)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>samsung i9100 (Samsung Galaxy SII)</h1>
+<h3>Contributors</h3>
+<ul>
+<li>ollieparanoid</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Touchscreen, Weston, XWayland</li>
+</ul>
+<h3>What does not work</h3>
+<ul>
+<li>The rest (Wifi, bluetooth, making calls, ...)</li>
+</ul>
+<h3>How to enter flash mode</h3>
+<ul>
+<li>Connect an USB cable</li>
+<li>Make sure, the device is powered off</li>
+<li>Hold power + volume down</li>
+<li>As soon, as the samsung logo appears on the screen, only press volume down</li>
+</ul>
+<h3>Boot process</h3>
+<p>Unlike most other Android devices, the i9100 can not boot a <code>boot.img</code> (which consists of <code>kernel</code> + <code>initramfs</code>). Instead, the <code>boot.img</code> file is just a regular kernel. Here's an example from a LineageOS <code>boot.img</code> for the i9100 (for "real" boot.img files, <code>file</code> says something like <code>boot.img: Android bootimg, kernel, ramdisk, page size: 2048</code> ):</p>
+<pre class="codehilite"><code>/tmp/test # file boot.img
+boot.img: Linux kernel ARM boot executable zImage (little-endian)</code></pre>
+
+
+<p>However, it is possible to directly integrate a <code>initramfs</code> into the kernel at kernel compile time (this is totally different from the boot.img approach, if this is unclear to you, please ask in the channel), and this is what the Android ROMs do on the i9100. While it is not a big deal in the Android compilation process, it is a problem for postmarketOS, because we want to be able to build the <code>initramfs</code> independently from the kernel.</p>
+<p>The following workaround is currently implemented:
+<em> We flash the </em>real<em> initramfs to the recovery partition (<a href="https://github.com/postmarketOS/pmbootstrap/blob/master/aports/heimdall/heimdall_flash_kernel.sh">source</a>)
+</em> The initramfs <a href="https://github.com/postmarketOS/pmbootstrap/blob/master/aports/linux-samsung-i9100/init">init script built into the kernel</a> checks if the recovery partition contains a compressed initramfs, and if it does, it extracts it and passes execution to the real initramfs' init script.
+* This idea is based on something called <a href="https://forum.xda-developers.com/galaxy-s2/orig-development/isorec-isolated-recovery-galaxy-s2-t3291176">"isorec"</a>.</p>
+<p>While this works for the i9100, this approach needs to be improved to also work on other Samsung devices, that need to be flashed with heimdall, like the i9070 (see <a href="https://github.com/postmarketOS/pmbootstrap/issues/22">#22</a>).</p>
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/tree/master/aports/device-samsung-i9100">Device package</a></li>
+</ul>
+<h3>Photos</h3>
+<ul>
+<li><a href="https://ollieparanoid.github.io/img/2017-05-26/i9100/telnet.jpg">Initramfs asking for the password via telnet</a></li>
+<li><a href="https://ollieparanoid.github.io/img/2017-05-26/i9100/filled.jpg">Weston with various programs opened</a></li>
+<li><a href="https://ollieparanoid.github.io/img/2017-05-26/i9100/demos.jpg">postmarketOS demo menu (XWayland)</a></li>
+<li><a href="https://ollieparanoid.github.io/img/2017-05-26/i9100/firefox.jpg">Firefox (XWayland)</a></li>
+<li><a href="https://ollieparanoid.github.io/img/2017-05-26/i9100/smoke.jpg">Weston-smoke demo</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/samsung-maguro-(Google-Galaxy-Nexus-GSM)/index.html b/docs/wiki/samsung-maguro-(Google-Galaxy-Nexus-GSM)/index.html
new file mode 100644
index 0000000..60f7187
--- /dev/null
+++ b/docs/wiki/samsung-maguro-(Google-Galaxy-Nexus-GSM)/index.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/samsung-maguro-(Google-Galaxy-Nexus-GSM)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>samsung maguro (Google Galaxy Nexus GSM)</h1>
+<h3>Contributors</h3>
+<ul>
+<li>lawl</li>
+</ul>
+<h3>What works</h3>
+<ul>
+<li>Booting the system, SSH</li>
+<li>Weston with touchscreen</li>
+<li>Xwayland</li>
+</ul>
+<h3>What does not work</h3>
+<ul>
+<li>Unknown, but probably everything else</li>
+</ul>
+<h3>Links</h3>
+<ul>
+<li><a href="https://github.com/postmarketOS/pmbootstrap/tree/master/aports/device-samsung-maguro">Device package</a></li>
+<li><a href="https://github.com/lawl/pmbootstrap">lawl's development branch</a></li>
+</ul>
+<h3>Additional info</h3>
+<p>The volume buttons of my device are broken, so if I softbrick it, there is no way for me to get back into fastboot, because of that I didn't flash the kernel yet, and likely never will, all of this is tested by booting the kernel directly (<code>pmbootstrap flasher boot</code>).</p>
+<p>The system image is a bit too large for the default <code>system</code> parition. You can either repartition or, use the easy way out. Simply flash the system image to your <code>userdata</code> partition, which is big enough. pmOS doesn't care, it just looks for a partition with a LUKS header, so this requires no changes at all to pmOS.</p>
+<h3>Photos</h3>
+<ul>
+<li><a href="https://www.reddit.com/r/postmarketOS/comments/6f7iky/postmarketos_running_on_the_galaxy_nexus_feat/">Galaxy Nexus feat. Weston and a working touch-screen</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/docs/wiki/sony-amami-(Xperia-Z1-Compact)/index.html b/docs/wiki/sony-amami-(Xperia-Z1-Compact)/index.html
new file mode 100644
index 0000000..3c61c3c
--- /dev/null
+++ b/docs/wiki/sony-amami-(Xperia-Z1-Compact)/index.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+ <title>postmarketOS</title>
+
+ <meta name="description" content="Aiming for a 10 year life-cycle for smartphones">
+ <meta name="keywords" content="postmarketOS">
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="all">
+
+ <link rel="canonical" href="https://postmarketos.org/wiki/sony-amami-(Xperia-Z1-Compact)/">
+
+ <link href="/static/css/tachyons.min.css" rel="stylesheet">
+ <link href="/static/css/main.css" rel="stylesheet">
+ </head>
+
+ <body>
+ <div class="mw7 center">
+ <div class="cf ph2-ns">
+ <a class="title" href="/">
+ <h1 class="f2 lh-title">
+ <img src="/static/img/recycle.png"></img>
+ <span>postmarketOS</span>
+ </h1>
+ </a>
+ <div class="menu">
+ <ul>
+ <li><a href="/">Home</a></li>
+ <li><a href="/wiki/">Wiki</a></li>
+ <li><a href="/blog/">Blog</a></li>
+ </ul>
+ </div>
+
+<h1>sony amami (Xperia Z1 Compact)</h1>
+<h1>Contributors</h1>
+<ul>
+<li>ata2001 (porting and testing)</li>
+<li>ollieparanoid (help on IRC)</li>
+<li>MartijnBraam (help on IRC)</li>
+<li>robb4 (help on IRC)</li>
+<li>lawl (help on IRC)</li>
+<li>bshah (help on IRC)</li>
+<li>mmaret (help on IRC)</li>
+</ul>
+<h1>What works</h1>
+<ul>
+<li>charging</li>
+<li>network through USB</li>
+<li>telnet in initramfs</li>
+<li>ssh</li>
+<li>adjusting the led, torch and the lcd backlight</li>
+</ul>
+<h1>What does not work</h1>
+<ul>
+<li>framebuffer</li>
+<li>Wifi</li>
+</ul>
+<h1>What have not been tested</h1>
+<ul>
+<li>Bluetooth</li>
+<li>3G</li>
+<li>Sound</li>
+<li>Phone calls</li>
+<li>SD card</li>
+<li>Hardware buttons</li>
+</ul>
+<h1>Kernels</h1>
+<h2><a href="https://github.com/sonyxperiadev/kernel">sonyxperiadev kernel</a></h2>
+<p>It's the most stable one, works everything listed above.</p>
+<h2><a href="https://github.com/LineageOS/android_kernel_sony_msm">LineageOS kernel</a></h2>
+<p>Works everything listed above, has heating issues.</p>
+<h2><a href="https://kernel.org/">Mainline</a></h2>
+<p>Compilation and flashing is successfull, haven't tried UART.</p>
+<h1>Issues</h1>
+<h2>framebuffer</h2>
+<p>Weston does not show up by default.</p>
+<p>Workaround:</p>
+<pre class="codehilite"><code>for i in 1 2; do echo &quot;0,0&quot; &gt; /sys/class/graphics/fb0/pan; done</code></pre>
+
+
+<p>Run it when weston is already started.</p>
+<h1>Links</h1>
+<ul>
+<li><a href="https://github.com/ata2001/pmbootstrap/tree/device-sony-amami">Source</a></li>
+<li><a href="https://web.archive.org/web/20161225005457/https://wiki.cyanogenmod.org/w/Amami_Info">CM wiki archive</a></li>
+</ul>
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file