diff --git a/.gitignore b/.gitignore
index a48cf0d..5286546 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
public
+resources
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e12e075..041cd31 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -4,7 +4,20 @@ variables:
S3_BUCKET_NAME: thomas.inf3.ch
AWS_BUCKET_REGION: us-east-1
-gohugo-build:
+gohugo-build-branch:
+ script:
+ - git submodule sync --recursive
+ - git submodule update --init --recursive
+ - go get github.com/gohugoio/hugo
+ - hugo -b http://${S3_BUCKET_NAME}.s3-website-${AWS_BUCKET_REGION}.amazonaws.com/${CI_COMMIT_REF_SLUG}
+ artifacts:
+ expire_in: 1 week
+ paths:
+ - public
+ except:
+ - /^master$/
+
+gohugo-build-master:
script:
- git submodule sync --recursive
- git submodule update --init --recursive
@@ -14,6 +27,8 @@ gohugo-build:
expire_in: 1 week
paths:
- public
+ only:
+ - /^master$/
deploys3-branch:
image: "python:latest"
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index 409358c..0000000
--- a/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "themes/hugo-zen"]
- path = themes/hugo-zen
- url = https://github.com/rakuishi/hugo-zen.git
diff --git a/articles/2019-09-10-kicad-docker.md b/articles/2019-09-10-kicad-docker.md
new file mode 100644
index 0000000..f53c705
--- /dev/null
+++ b/articles/2019-09-10-kicad-docker.md
@@ -0,0 +1,276 @@
+---
+title: KiCad compilation through Docker
+date: 2019-09-10 18:30:00
+---
+
+While trying to compile [KiCad](http://kicad-pcb.org/download/debian/) from
+the latest sources, I had problems installing the large number of required
+dependencies with the correct versions on my two computers.
+
+I already know of a tool that allows building a system image that is in
+a known state and can be executed independently of the host system : Docker.
+
+In this article, I will summarize the different steps I took to compile KiCad
+from the sources into an AppImage that can then be copied onto the different
+systems that I use for my keyboard project.
+
+## Packaging the dependencies
+The first step is to package the dependencies needed for the compilation into a
+Docker image that can then be used. The KiCad website lists the required
+packages for Debian, we will thus start from this list to build our image.
+
+Some of the dependencies required have been updated. The final list I obtained
+through trial and error was the following.
+
+```
+FROM debian:10
+
+# Install kicad deps
+RUN apt-get update -q && \
+ apt-get install --no-upgrade -qqy \
+ git cmake build-essential curl ccache \
+ libcurl4 libcurl4-gnutls-dev \
+ libboost-dev libboost-test-dev libboost-filesystem-dev libboost-regex-dev \
+ liboce-foundation-dev liboce-ocaf-dev \
+ ca-certificates libssl-dev \
+ libngspice0-dev \
+ libglew-dev libglm-dev swig \
+ libcairo2-dev doxygen graphviz \
+ python3-wxgtk4.0 \
+ libwxgtk3.0-dev libwxgtk3.0-gtk3-dev python3 python3-dev \
+ && \
+ apt-get clean && \
+ apt-get purge && \
+ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+```
+
+This Dockerfile will allow us to build a base system that allows us to
+then manually compile the sources through Docker. The following command
+can be executed from a clone KiCad repository on your computed containing
+the sources. We will create a build directory from inside the container,
+configure the build and compile the sources to check that everything needed
+has been packaged.
+
+```none
+host $ docker run --rm -ti -v $(pwd):/kicad 196c68cf5e05 /bin/bash
+ctnr $ cd kicad/
+ctnr $ mkdir build
+ctnr $ cmake \
+ -DCMAKE_C_COMPILER_LAUNCHER=ccache \
+ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DKICAD_SCRIPTING_PYTHON3=on \
+ -DKICAD_SCRIPTING_WXPYTHON_PHOENIX=on \
+ ../
+ctnr $ make -j16
+```
+
+You should get no error during the compilation, otherwise it means that
+some dependency must be updated or installed. I followed the different errors
+to build the list of dependencies given above.
+
+## Generating an AppImage
+
+[AppImage](https://appimage.org/) builds everything needed for the execution into one executable,
+allowing me to copy a single file to a new computer and not having to
+worry about installing any dependency and thus testing the generated
+executable quickly.
+
+I extended the Docker image to also include the necessary tools for building
+a basic AppImage :
+
+```
+FROM debian:10
+
+# Install kicad deps
+RUN apt-get update -q && \
+ apt-get install --no-upgrade -qqy \
+ git cmake build-essential curl ccache \
+ libcurl4 libcurl4-gnutls-dev \
+ libboost-dev libboost-test-dev libboost-filesystem-dev libboost-regex-dev \
+ liboce-foundation-dev liboce-ocaf-dev \
+ ca-certificates libssl-dev \
+ libngspice0-dev \
+ libglew-dev libglm-dev swig \
+ libcairo2-dev doxygen graphviz \
+ python3-wxgtk4.0 \
+ libwxgtk3.0-dev libwxgtk3.0-gtk3-dev python3 python3-dev \
+ && \
+ apt-get clean && \
+ apt-get purge && \
+ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+
+# Download and install linuxdeploy tool
+RUN curl -O -J -L https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage && \
+ chmod +x linuxdeploy-x86_64.AppImage && \
+ mv linuxdeploy-x86_64.AppImage /usr/bin/linuxdeploy && \
+ curl -O -J -L https://raw.githubusercontent.com/TheAssassin/linuxdeploy-plugin-conda/master/linuxdeploy-plugin-conda.sh && \
+ mv linuxdeploy-plugin-conda.sh /usr/bin/linuxdeploy-plugin-conda && \
+ chmod +x /usr/bin/linuxdeploy-plugin-conda
+```
+
+The first `linuxdeploy` tools allows us to easily build an AppImage. The
+second `linuxdeploy-plugin-conda` eases working with packaging applications
+that needs Python.
+
+We can build the new Docker image and execute it again on the folder used
+previously. As we used a volume, our previous build will still be available
+allowing us to continue directly with the packaging.
+
+```
+host $ docker run --rm -ti -v $(pwd):/kicad cae4d304d730 /bin/bash
+ctnr $ cd /kicad/build
+ctrn $ make install DESTDIR=AppDir
+```
+
+This will install our compiled sources into an AppDir directory. We will now
+need to also copy some Python dependencies that will be required and not
+automatically handled :
+
+```
+ctnr $ mkdir -p AppDir/usr/lib/python3/dist-packages/
+ctnr $ cp -r /usr/lib/python3/dist-packages/wx \
+ /usr/lib/python3/dist-packages/wxPython-4.0.4.egg-info \
+ AppDir/usr/lib/python3/dist-packages/
+```
+
+Then, we also need to update our KiCad binary so that the packaged Python
+will be used and not the system one. For that, we will replace the KiCad
+binary with a script that will simply extract the path at which the AppImage
+will be mounted and export the `PYTHON_PATH` variable accordingly.
+
+```
+ctnr $ mv AppDir/usr/bin/kicad AppDir/usr/bin/kicad_bin
+ctnr $ cat << "EOF" > AppDir/usr/bin/kicad
+#!/bin/sh
+HERE="$(dirname "$(readlink -f "${0}")")/../../"
+export PYTHON_PATH="${HERE}"/usr/lib/python3:${PYTHON_PATH}
+exec "${HERE}/usr/bin/kicad_bin" "$@"
+EOF
+ctnr $ chmod +x AppDir/usr/bin/kicad
+```
+
+Now that everything is ready, we can package the AppDir into an AppImage
+using `linuxdeploy`.
+
+```
+ctnr $ LD_LIBRARY_PATH=$(pwd)/AppDir/usr/lib/x86_64-linux-gnu/ linuxdeploy \
+ --appimage-extract-and-run \
+ --appdir AppDir \
+ -d $(pwd)/AppDir/usr/share/applications/kicad.desktop \
+ --output appimage
+```
+
+This will generate a `KiCad-*-x86_64.AppImage` file in your build folder
+that can be executed on your host OS without having to install any
+dependency. It will not be possible to execute the AppImage from inside
+the container for multiple reasons, first of which that FUSE is needed to
+mount the AppImage content and is not available in a container. Second,
+an X Server will be needed to start the application and is also not available
+in the container.
+
+## Build script
+Building manually without having to worry about dependencies is great but
+we can do better by simply scripting the different steps so that everything
+happens in one command line.
+
+Once the steps have been verified, we can put them in a build script
+`build-docker.sh` that we include in the Docker image that will be called
+when starting the container.
+
+```
+#!/bin/bash
+
+cd "$1"
+
+BUILD_TYPE="$2"
+if [ -z "$BUILD_TYPE" ]; then
+ BUILD_TYPE="Debug"
+fi
+
+mkdir build
+cd build
+rm -rf AppDir
+
+cmake \
+ -DCMAKE_C_COMPILER_LAUNCHER=ccache \
+ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
+ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DKICAD_SCRIPTING_PYTHON3=on \
+ -DKICAD_SCRIPTING_WXPYTHON_PHOENIX=on \
+ ../
+
+make -j$(nproc) --output-sync
+
+if [ $? -ne 0 ]; then
+ exit 10
+fi
+
+make install DESTDIR=AppDir
+
+mkdir -p AppDir/usr/lib/python3/dist-packages/
+
+cp -r /usr/lib/python3/dist-packages/wx \
+ /usr/lib/python3/dist-packages/wxPython-4.0.4.egg-info \
+ AppDir/usr/lib/python3/dist-packages/
+
+mv AppDir/usr/bin/kicad AppDir/usr/bin/kicad_bin
+
+cat << "EOF" > AppDir/usr/bin/kicad
+#!/bin/sh
+HERE="$(dirname "$(readlink -f "${0}")")/../../"
+export PYTHON_PATH="${HERE}"/usr/lib/python3:${PYTHON_PATH}
+exec "${HERE}/usr/bin/kicad_bin" "$@"
+EOF
+
+chmod +x AppDir/usr/bin/kicad
+
+LD_LIBRARY_PATH=$(pwd)/AppDir/usr/lib/x86_64-linux-gnu/ linuxdeploy \
+ --appimage-extract-and-run \
+ --appdir AppDir \
+ -d $(pwd)/AppDir/usr/share/applications/kicad.desktop \
+ --output appimage
+
+mv KiCad*.AppImage ../KiCad-$(git describe).AppImage
+```
+
+```
+FROM debian:10
+
+# Install kicad deps
+RUN apt-get update -q && \
+ apt-get install --no-upgrade -qqy \
+ git cmake build-essential curl ccache \
+ libcurl4 libcurl4-gnutls-dev \
+ libboost-dev libboost-test-dev libboost-filesystem-dev libboost-regex-dev \
+ liboce-foundation-dev liboce-ocaf-dev \
+ ca-certificates libssl-dev \
+ libngspice0-dev \
+ libglew-dev libglm-dev swig \
+ libcairo2-dev doxygen graphviz \
+ python3-wxgtk4.0 \
+ libwxgtk3.0-dev libwxgtk3.0-gtk3-dev python3 python3-dev \
+ && \
+ apt-get clean && \
+ apt-get purge && \
+ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+
+# Download and install linuxdeploy tool
+RUN curl -O -J -L https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage && \
+ chmod +x linuxdeploy-x86_64.AppImage && \
+ mv linuxdeploy-x86_64.AppImage /usr/bin/linuxdeploy && \
+ curl -O -J -L https://raw.githubusercontent.com/TheAssassin/linuxdeploy-plugin-conda/master/linuxdeploy-plugin-conda.sh && \
+ mv linuxdeploy-plugin-conda.sh /usr/bin/linuxdeploy-plugin-conda && \
+ chmod +x /usr/bin/linuxdeploy-plugin-conda
+
+COPY build-docker.sh /build-docker.sh
+
+ENTRYPOINT ["/bin/bash", "/build-docker.sh"]
+CMD ["/kicad"]
+```
+
+We can then simply build an AppImage from the latest sources with just one
+command line, without having to worry about updating our host system with
+the latest dependencies : `docker run --rm -it -v $(pwd):/kicad kicad-builder-docker kicad Release`
diff --git a/config.toml b/config.toml
index 1cca07c..5fd91d7 100644
--- a/config.toml
+++ b/config.toml
@@ -4,7 +4,7 @@ publishDir = "public"
buildDrafts = false
baseURL = "https://thomas.inf3.ch"
canonifyURLs = true
-theme = "hugo-zen"
+theme = "hugo-tschwery"
languageCode = "en"
diff --git a/themes/hugo-tschwery/LICENSE b/themes/hugo-tschwery/LICENSE
new file mode 100644
index 0000000..169da73
--- /dev/null
+++ b/themes/hugo-tschwery/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2016 OCHIISHI Koichiro
+Copyright (c) 2019 SCHWERY Thomas
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/themes/hugo-tschwery/archetypes/.gitkeep b/themes/hugo-tschwery/archetypes/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/themes/hugo-tschwery/archetypes/default.md b/themes/hugo-tschwery/archetypes/default.md
new file mode 100644
index 0000000..9bcee2e
--- /dev/null
+++ b/themes/hugo-tschwery/archetypes/default.md
@@ -0,0 +1,7 @@
++++
+date = "now()"
+slug = ""
+tags = ["", ""]
+title = ""
+
++++
\ No newline at end of file
diff --git a/static/css/custom.css b/themes/hugo-tschwery/assets/css/custom.css
similarity index 100%
rename from static/css/custom.css
rename to themes/hugo-tschwery/assets/css/custom.css
diff --git a/themes/hugo-tschwery/assets/css/normalize.css b/themes/hugo-tschwery/assets/css/normalize.css
new file mode 100644
index 0000000..81c6f31
--- /dev/null
+++ b/themes/hugo-tschwery/assets/css/normalize.css
@@ -0,0 +1,427 @@
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ * user zoom.
+ */
+
+html {
+ font-family: sans-serif; /* 1 */
+ -ms-text-size-adjust: 100%; /* 2 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+ margin: 0;
+}
+
+/* HTML5 display definitions
+ ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
+ * and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block; /* 1 */
+ vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+ display: none;
+}
+
+/* Links
+ ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+ font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+ font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+ border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+ margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+ overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ * Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit; /* 1 */
+ font: inherit; /* 2 */
+ margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+ overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+ text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ * and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ * `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; /* 2 */
+ cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+ line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ * (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box; /* 2 */
+ box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+ border: 0; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+ font-weight: bold;
+}
+
+/* Tables
+ ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
\ No newline at end of file
diff --git a/themes/hugo-tschwery/assets/css/skeleton.css b/themes/hugo-tschwery/assets/css/skeleton.css
new file mode 100644
index 0000000..f28bf6c
--- /dev/null
+++ b/themes/hugo-tschwery/assets/css/skeleton.css
@@ -0,0 +1,418 @@
+/*
+* Skeleton V2.0.4
+* Copyright 2014, Dave Gamache
+* www.getskeleton.com
+* Free to use under the MIT license.
+* http://www.opensource.org/licenses/mit-license.php
+* 12/29/2014
+*/
+
+
+/* Table of contents
+––––––––––––––––––––––––––––––––––––––––––––––––––
+- Grid
+- Base Styles
+- Typography
+- Links
+- Buttons
+- Forms
+- Lists
+- Code
+- Tables
+- Spacing
+- Utilities
+- Clearing
+- Media Queries
+*/
+
+
+/* Grid
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+.container {
+ position: relative;
+ width: 100%;
+ max-width: 960px;
+ margin: 0 auto;
+ padding: 0 20px;
+ box-sizing: border-box; }
+.column,
+.columns {
+ width: 100%;
+ float: left;
+ box-sizing: border-box; }
+
+/* For devices larger than 400px */
+@media (min-width: 400px) {
+ .container {
+ width: 85%;
+ padding: 0; }
+}
+
+/* For devices larger than 550px */
+@media (min-width: 550px) {
+ .container {
+ width: 80%; }
+ .column,
+ .columns {
+ margin-left: 4%; }
+ .column:first-child,
+ .columns:first-child {
+ margin-left: 0; }
+
+ .one.column,
+ .one.columns { width: 4.66666666667%; }
+ .two.columns { width: 13.3333333333%; }
+ .three.columns { width: 22%; }
+ .four.columns { width: 30.6666666667%; }
+ .five.columns { width: 39.3333333333%; }
+ .six.columns { width: 48%; }
+ .seven.columns { width: 56.6666666667%; }
+ .eight.columns { width: 65.3333333333%; }
+ .nine.columns { width: 74.0%; }
+ .ten.columns { width: 82.6666666667%; }
+ .eleven.columns { width: 91.3333333333%; }
+ .twelve.columns { width: 100%; margin-left: 0; }
+
+ .one-third.column { width: 30.6666666667%; }
+ .two-thirds.column { width: 65.3333333333%; }
+
+ .one-half.column { width: 48%; }
+
+ /* Offsets */
+ .offset-by-one.column,
+ .offset-by-one.columns { margin-left: 8.66666666667%; }
+ .offset-by-two.column,
+ .offset-by-two.columns { margin-left: 17.3333333333%; }
+ .offset-by-three.column,
+ .offset-by-three.columns { margin-left: 26%; }
+ .offset-by-four.column,
+ .offset-by-four.columns { margin-left: 34.6666666667%; }
+ .offset-by-five.column,
+ .offset-by-five.columns { margin-left: 43.3333333333%; }
+ .offset-by-six.column,
+ .offset-by-six.columns { margin-left: 52%; }
+ .offset-by-seven.column,
+ .offset-by-seven.columns { margin-left: 60.6666666667%; }
+ .offset-by-eight.column,
+ .offset-by-eight.columns { margin-left: 69.3333333333%; }
+ .offset-by-nine.column,
+ .offset-by-nine.columns { margin-left: 78.0%; }
+ .offset-by-ten.column,
+ .offset-by-ten.columns { margin-left: 86.6666666667%; }
+ .offset-by-eleven.column,
+ .offset-by-eleven.columns { margin-left: 95.3333333333%; }
+
+ .offset-by-one-third.column,
+ .offset-by-one-third.columns { margin-left: 34.6666666667%; }
+ .offset-by-two-thirds.column,
+ .offset-by-two-thirds.columns { margin-left: 69.3333333333%; }
+
+ .offset-by-one-half.column,
+ .offset-by-one-half.columns { margin-left: 52%; }
+
+}
+
+
+/* Base Styles
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+/* NOTE
+html is set to 62.5% so that all the REM measurements throughout Skeleton
+are based on 10px sizing. So basically 1.5rem = 15px :) */
+html {
+ font-size: 62.5%; }
+body {
+ font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */
+ line-height: 1.6;
+ font-weight: 400;
+ font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
+ color: #222; }
+
+
+/* Typography
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+h1, h2, h3, h4, h5, h6 {
+ margin-top: 0;
+ margin-bottom: 2rem;
+ font-weight: 300; }
+h1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;}
+h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; }
+h3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; }
+h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; }
+h5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; }
+h6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; }
+
+/* Larger than phablet */
+@media (min-width: 550px) {
+ h1 { font-size: 5.0rem; }
+ h2 { font-size: 4.2rem; }
+ h3 { font-size: 3.6rem; }
+ h4 { font-size: 3.0rem; }
+ h5 { font-size: 2.4rem; }
+ h6 { font-size: 1.5rem; }
+}
+
+p {
+ margin-top: 0; }
+
+
+/* Links
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+a {
+ color: #1EAEDB; }
+a:hover {
+ color: #0FA0CE; }
+
+
+/* Buttons
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+.button,
+button,
+input[type="submit"],
+input[type="reset"],
+input[type="button"] {
+ display: inline-block;
+ height: 38px;
+ padding: 0 30px;
+ color: #555;
+ text-align: center;
+ font-size: 11px;
+ font-weight: 600;
+ line-height: 38px;
+ letter-spacing: .1rem;
+ text-transform: uppercase;
+ text-decoration: none;
+ white-space: nowrap;
+ background-color: transparent;
+ border-radius: 4px;
+ border: 1px solid #bbb;
+ cursor: pointer;
+ box-sizing: border-box; }
+.button:hover,
+button:hover,
+input[type="submit"]:hover,
+input[type="reset"]:hover,
+input[type="button"]:hover,
+.button:focus,
+button:focus,
+input[type="submit"]:focus,
+input[type="reset"]:focus,
+input[type="button"]:focus {
+ color: #333;
+ border-color: #888;
+ outline: 0; }
+.button.button-primary,
+button.button-primary,
+input[type="submit"].button-primary,
+input[type="reset"].button-primary,
+input[type="button"].button-primary {
+ color: #FFF;
+ background-color: #33C3F0;
+ border-color: #33C3F0; }
+.button.button-primary:hover,
+button.button-primary:hover,
+input[type="submit"].button-primary:hover,
+input[type="reset"].button-primary:hover,
+input[type="button"].button-primary:hover,
+.button.button-primary:focus,
+button.button-primary:focus,
+input[type="submit"].button-primary:focus,
+input[type="reset"].button-primary:focus,
+input[type="button"].button-primary:focus {
+ color: #FFF;
+ background-color: #1EAEDB;
+ border-color: #1EAEDB; }
+
+
+/* Forms
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+input[type="email"],
+input[type="number"],
+input[type="search"],
+input[type="text"],
+input[type="tel"],
+input[type="url"],
+input[type="password"],
+textarea,
+select {
+ height: 38px;
+ padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */
+ background-color: #fff;
+ border: 1px solid #D1D1D1;
+ border-radius: 4px;
+ box-shadow: none;
+ box-sizing: border-box; }
+/* Removes awkward default styles on some inputs for iOS */
+input[type="email"],
+input[type="number"],
+input[type="search"],
+input[type="text"],
+input[type="tel"],
+input[type="url"],
+input[type="password"],
+textarea {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none; }
+textarea {
+ min-height: 65px;
+ padding-top: 6px;
+ padding-bottom: 6px; }
+input[type="email"]:focus,
+input[type="number"]:focus,
+input[type="search"]:focus,
+input[type="text"]:focus,
+input[type="tel"]:focus,
+input[type="url"]:focus,
+input[type="password"]:focus,
+textarea:focus,
+select:focus {
+ border: 1px solid #33C3F0;
+ outline: 0; }
+label,
+legend {
+ display: block;
+ margin-bottom: .5rem;
+ font-weight: 600; }
+fieldset {
+ padding: 0;
+ border-width: 0; }
+input[type="checkbox"],
+input[type="radio"] {
+ display: inline; }
+label > .label-body {
+ display: inline-block;
+ margin-left: .5rem;
+ font-weight: normal; }
+
+
+/* Lists
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+ul {
+ list-style: circle inside; }
+ol {
+ list-style: decimal inside; }
+ol, ul {
+ padding-left: 0;
+ margin-top: 0; }
+ul ul,
+ul ol,
+ol ol,
+ol ul {
+ margin: 1.5rem 0 1.5rem 3rem;
+ font-size: 90%; }
+li {
+ margin-bottom: 1rem; }
+
+
+/* Code
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+code {
+ padding: .2rem .5rem;
+ margin: 0 .2rem;
+ font-size: 90%;
+ white-space: nowrap;
+ background: #F1F1F1;
+ border: 1px solid #E1E1E1;
+ border-radius: 4px; }
+pre > code {
+ display: block;
+ padding: 1rem 1.5rem;
+ white-space: pre; }
+
+
+/* Tables
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+th,
+td {
+ padding: 12px 15px;
+ text-align: left;
+ border-bottom: 1px solid #E1E1E1; }
+th:first-child,
+td:first-child {
+ padding-left: 0; }
+th:last-child,
+td:last-child {
+ padding-right: 0; }
+
+
+/* Spacing
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+button,
+.button {
+ margin-bottom: 1rem; }
+input,
+textarea,
+select,
+fieldset {
+ margin-bottom: 1.5rem; }
+pre,
+blockquote,
+dl,
+figure,
+table,
+p,
+ul,
+ol,
+form {
+ margin-bottom: 2.5rem; }
+
+
+/* Utilities
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+.u-full-width {
+ width: 100%;
+ box-sizing: border-box; }
+.u-max-full-width {
+ max-width: 100%;
+ box-sizing: border-box; }
+.u-pull-right {
+ float: right; }
+.u-pull-left {
+ float: left; }
+
+
+/* Misc
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+hr {
+ margin-top: 3rem;
+ margin-bottom: 3.5rem;
+ border-width: 0;
+ border-top: 1px solid #E1E1E1; }
+
+
+/* Clearing
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+
+/* Self Clearing Goodness */
+.container:after,
+.row:after,
+.u-cf {
+ content: "";
+ display: table;
+ clear: both; }
+
+
+/* Media Queries
+–––––––––––––––––––––––––––––––––––––––––––––––––– */
+/*
+Note: The best way to structure the use of media queries is to create the queries
+near the relevant code. For example, if you wanted to change the styles for buttons
+on small devices, paste the mobile query code up in the buttons section and style it
+there.
+*/
+
+
+/* Larger than mobile */
+@media (min-width: 400px) {}
+
+/* Larger than phablet (also point when grid becomes active) */
+@media (min-width: 550px) {}
+
+/* Larger than tablet */
+@media (min-width: 750px) {}
+
+/* Larger than desktop */
+@media (min-width: 1000px) {}
+
+/* Larger than Desktop HD */
+@media (min-width: 1200px) {}
diff --git a/static/js/init.js b/themes/hugo-tschwery/assets/js/init.js
similarity index 100%
rename from static/js/init.js
rename to themes/hugo-tschwery/assets/js/init.js
diff --git a/layouts/404.html b/themes/hugo-tschwery/layouts/404.html
similarity index 100%
rename from layouts/404.html
rename to themes/hugo-tschwery/layouts/404.html
diff --git a/layouts/_default/list.html b/themes/hugo-tschwery/layouts/_default/list.html
similarity index 100%
rename from layouts/_default/list.html
rename to themes/hugo-tschwery/layouts/_default/list.html
diff --git a/layouts/_default/single.html b/themes/hugo-tschwery/layouts/_default/single.html
similarity index 100%
rename from layouts/_default/single.html
rename to themes/hugo-tschwery/layouts/_default/single.html
diff --git a/layouts/index.html b/themes/hugo-tschwery/layouts/index.html
similarity index 100%
rename from layouts/index.html
rename to themes/hugo-tschwery/layouts/index.html
diff --git a/layouts/partials/footer.html b/themes/hugo-tschwery/layouts/partials/footer.html
similarity index 78%
rename from layouts/partials/footer.html
rename to themes/hugo-tschwery/layouts/partials/footer.html
index 27ab647..81c0269 100644
--- a/layouts/partials/footer.html
+++ b/themes/hugo-tschwery/layouts/partials/footer.html
@@ -14,7 +14,8 @@
-
+{{ $highlightInitJs := resources.Get "js/init.js" | resources.Minify | resources.Fingerprint }}
+