title: ralfj.de
url: "https://www.ralfj.de"
-struct:
+structure:
- url: "/"
title: "ralfj.de"
- - url: "/blog"
- title: "test"
+ structure:
+ - url: "projects/"
+ title: "Projects"
+ structure:
+ - url: "lilass/"
+ title: LiLaSS
+ - url: "schsh/"
+ title: schsh
+ - url: "cs/"
+ title: "Research"
defaults:
- scope:
--- /dev/null
+<ul>{% for item in include.menu %}<!--
+ {% comment %} We compute the full URL of this item, and truncate canonicalurl so that length so we can test whether it starts with it {% endcomment %}
+ {% assign cururl = item.url | prepend: include.base %}
+ {% assign isparent_search = canonicalurl | truncate: cururl.size, '' %}
+ {% capture class %}{% if cururl == canonicalurl %}current{% elsif include.above != true %}child{% elsif isparent_search == cururl %}parent{% else %}sibling{% endif %}{% endcapture %}
+ {% comment %} Now we can output the item and it substructure {% endcomment %}
+ --><li class="{{ class }}"><a href="{{ item.url | prepend: include.base }}">{{ item.title }}</a></li><!--
+ {% if item.structure and (class == "current" or class == "parent") %}
+ {% if cururl == canonicalurl %}{% assign above = false %}{% else %}{% assign above = true %}{% endif %}
+ -->{% include menu-level.html menu=item.structure base=cururl above=above %}<!--
+ {% endif %}
+-->{% endfor %}</ul>
+++ /dev/null
-<div id="navi"><ul>
- <li class="current"><a href="/">ralfj.de</a></li>
- {% for item in site.struct %}
- {{ item.url }}{{ item.title }}
- {% endfor %}
-</ul></div>
{% if page.excerpt %}<meta name="description" content="{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}">{% endif %}
<link rel="stylesheet" href="/style.css">
- <link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.url }}">
+ {% capture canonicalurl %}{{ page.url | replace:'index.html','' }}{% endcapture %}
+ <link rel="canonical" href="{{ canonicalurl | prepend: site.url }}">
{% if page.rss or page.layout == 'post' %}<link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | prepend: site.url }}" />{% endif %}
</head>
<body><div id="frame">
+
+ <div id="title">
+ <h1>{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}</h1>
+ </div>
- {% include menu.html %}
+ <div id="navi">
+ {% include menu-level.html menu=site.structure base="" above=true %}
+ </div>
- <div id="page">
- <h1>{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}</h1>
- <div id="content">
- {{ content }}
- </div>
+ <div id="content">
+ {{ content }}
</div>
</div></body>
--- /dev/null
+---
+ttle: Projects
+---
+
+This page lists some of the tools I wrote, mostly for my own purposes:
+To solve some issue I was having, or to facilitate my daily computer usage.
+The tools were usually not written with general reusability in mind.
+But maybe you are having just the same problem as I did, in which case I hope they can be helpful.
+
+* `LiLaSS <lilass/>`_: A simple xrandr-based application to configure laptop screens on Linux. If you are using a
+ Laptop, frequently work both with and without an external screen, and you are not happy with
+ the configuration options your desktop provides, this may be for you.
+* `dyn-nsupdate <dyn-nsupdate/>`_: A tool to dynamically and securely update DNS zones via CGI.
+ This provides self-hosted DynDNS services.
+* `zonemaker <zonemaker/>`_: A small script to generate DNS zone files from Python.
+* `schsh <schsh/>`_: A collection of scripts and configuration files which can be used to grant
+ someone secure (SSH-based) access to a machine, without giving them a shell or read access
+ to the entire file system.
+* `Rust-101 <rust-101/>`_: A small tutorial for the `Rust language <http://www.rust-lang.org>`_.
+* `git-mirror <git-mirror/>`_: This can keep multiple git repositories of the same project in sync automatically.
+
+For some more of my projects, check out the `public git repositories`_ hosted on my server and the
+`Debian packages`_ I am maintaining as DM.
+
+.. _public git repositories: https://www.ralfj.de/git/
+.. _Debian packages: http://qa.debian.org/developer.php?login=post%40ralfj.de
margin: 0 auto;
max-width: calc(50em + 2*11em); /* content width plus 2*navi width */
}
-#page {
+
+/* The inner box */
+#title, #content {
border: solid #121212 1px;
background-color: #252525;
margin: 0 11.0em; /* navi width */
- border-radius: 10px;
padding: 0;
}
-#page h1 {
+#title {
+ border-bottom: none;
+ border-radius: 10px 10px 0px 0px;
+}
+#title h1 {
border-bottom: solid #08f 2px;
text-align: center;
padding: 0 0.7em;
+ margin-bottom: 0;
}
#content {
+ border-top: none;
+ border-radius: 0px 0px 10px 10px;
display: block;
- margin: 0.7em;
+ padding: 0.7em;
+ padding-top: 1px; /* If we use 0 here, things get ugly. What?!? */
}
+
/* Navigation menu */
#navi {
/* No border, no padding, so all the width computations become easy. */
width: 11.0em; /* navi width */
padding: 0;
margin: 0;
- margin-top:2.7em;
}
#navi ul {
margin: 0px;
}
#navi li {
/* Border around the links */
- margin-top:0.1em;
+ margin-bottom:0.1em;
background-color: #252525;
border-left: solid #36ff00 2px;
border-right: solid #36ff00 2px;
#navi li:hover a {
color: #DDD;
}
+
/* Small screens */
@media screen and (max-width:60em) {
- #frame, #page, #navi {
+ #frame, #title, #content, #navi {
margin: 0;
width: auto;
max-width: none;
clear: both;
}
- #page {
- /* the navi will be added above this */
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- }
#navi {
/* Place navi above the title */
float: none;
- border-top-left-radius: 10px;
- border-top-right-radius: 10px;
- border-bottom: solid #36ff00 2px;
+ border: solid #121212 1px;
+ border-bottom: none;
background-color: #252525;
- padding: 0.7em;
+ padding: 0;
}
#navi ul, #navi ul ul, #navi li, #navi li a {
margin: 0;
padding: 0;
display: inline;
}
+ #navi > ul {
+ padding: 0.3em;
+ display: block;
+ border-bottom: solid #36ff00 2px;
+ }
/* Display only parent and children, and deocare them appropriately */
#navi li {
display:inline-block;
text-decoration: underline;
}
}
+
/* Printing */
@media print {
- #frame, #page {
+ #frame, #title, #content {
margin: 0;
+ padding: 0;
width: auto;
max-width: none;
border: none;
}
- #page h1 {
+ #title h1 {
border: none;
}
#navi {