Compare commits

...

24 commits
36C3 ... main

Author SHA1 Message Date
nek0 a16e573bc5 adjust wording 2023-12-20 10:02:48 +01:00
nek0 671cf45504 ready for 37C3 2023-12-19 23:55:50 +01:00
nek0 c255808595 more cleanup 2023-12-16 06:42:53 +01:00
nek0 2c8f4cd4b1 remove obsolete comment 2023-12-16 06:31:21 +01:00
nek0 df8b17ec36 clean nix files a bit 2023-12-16 06:30:30 +01:00
nek0 169a76bd9c add feed references in template 2023-12-16 05:42:53 +01:00
nek0 111ea2e3f1 create RSS and Atom feeds 2023-12-16 05:35:51 +01:00
nek0 d40b04a5e3 flake update 2023-12-10 15:20:29 +01:00
nek0 0286301fc2 make proper dev-shell including vim 2023-12-10 15:20:29 +01:00
nek0 432f3c8d0b make design mobile friendly 2023-11-28 04:13:53 +01:00
nek0 4c15b72375 temporarily disable additional info sites 2023-11-28 02:04:30 +01:00
nek0 3f2f910349 rework website 2023-11-27 23:49:06 +01:00
nek0 782311c832 more cleanup 2023-11-25 05:50:52 +01:00
nek0 3c4c254bd7 cleanup 2023-11-25 05:45:49 +01:00
nek0 f3ceffb970 ignore direnv 2023-11-25 05:31:31 +01:00
nek0 567a95d3d9 unify names 2023-11-25 05:28:53 +01:00
nek0 c5e92b2cc7 flakify 2023-11-25 05:27:03 +01:00
nek0 639a6d21d5 rewrite nix files 2022-01-17 12:12:25 +01:00
nek0 8a90913f2a brighten the background a little 2019-12-22 18:19:26 +01:00
nek0 efd7036bc9 Merge branch 'master' of ssh://gitea.nek0.eu:2200/nek0/chaoszone.cz 2019-12-22 14:21:10 +01:00
nek0 5a5eb31342 mark folders as such 2019-12-22 14:20:56 +01:00
nek0 1377f83e52 switch to haskell.nix build infrastructure 2019-12-22 14:19:30 +01:00
nek0 94051a2ebd ignore cabal-v2 2019-12-19 22:34:46 +01:00
nek0 80d972c5ad switch to haskell.nix build infrastructure 2019-12-19 22:33:17 +01:00
18 changed files with 266 additions and 410 deletions

6
.gitignore vendored
View file

@ -1,5 +1,5 @@
dist
dist-newstyle
dist/
dist-newstyle/
cabal-dev
*.o
*.hi
@ -18,3 +18,5 @@ cabal.sandbox.config
_cache/
_site/
drafts/
.envrc
.direnv/

View file

@ -26,3 +26,4 @@ executable chaoszone
, aeson
hs-source-dirs: src
default-language: Haskell2010
ghc-options: -Wall -threaded

7
default.nix Normal file
View file

@ -0,0 +1,7 @@
{ pkgs ? import <nixpkgs> {}
, self ? ./., packageName ? "chaoszone"
}:
let
gitignore = dir: pkgs.nix-gitignore.gitignoreSource [] dir;
in
pkgs.haskellPackages.callCabal2nix packageName (gitignore self) {}

60
flake.lock Normal file
View file

@ -0,0 +1,60 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1701680307,
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1702216395,
"narHash": "sha256-RgbHAGU2YaSjtkmfsYk+TCoXnAOku+eYxpEOCqZ5Cz0=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "7089845da9775aa1c6f176795aff726734a88317",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

28
flake.nix Normal file
View file

@ -0,0 +1,28 @@
{
description = "Source files for my blog";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
haskellPackages = pkgs.haskellPackages;
jailbreakUnbreak = pkg:
pkgs.haskell.lib.doJailbreak (pkg.overrideAttrs (_: { meta = { }; }));
packageName = "chaoszone";
in rec {
packages.${packageName} = import ./default.nix {inherit pkgs self;};
defaultPackage = self.packages.${system}.${packageName};
devShell = import ./shell.nix {inherit pkgs; chaoszone = defaultPackage;};
});
}

View file

@ -1,33 +1,14 @@
{ nixpkgs ? import <nixpkgs> {}, compiler ? "default", doBenchmark ? false }:
{ pkgs ? import <nixpkgs> {}
, chaoszone ? import ./default.nix { inherit pkgs; packageName = "chaoszone"; }
}:
let
inherit (nixpkgs) pkgs;
f = { mkDerivation, aeson, base, filepath, hakyll, HTTP, stdenv
, time
}:
mkDerivation {
pname = "chaoszone";
version = "0.0.0.0";
src = ./.;
isLibrary = false;
isExecutable = true;
executableHaskellDepends = [
aeson base filepath hakyll HTTP time
];
homepage = "https://chaoszone.cz";
license = stdenv.lib.licenses.publicDomain;
};
haskellPackages = if compiler == "default"
then pkgs.haskellPackages
else pkgs.haskell.packages.${compiler};
variant = if doBenchmark then pkgs.haskell.lib.doBenchmark else pkgs.lib.id;
drv = variant (haskellPackages.callPackage f {});
in
if pkgs.lib.inNixShell then drv.env else drv
pkgs.haskellPackages.shellFor {
packages = p: [ chaoszone ];
withHoogle = true;
buildInputs = with pkgs.haskellPackages; with pkgs; [
haskell-language-server
ghcid
cabal-install
vim
];
}

View file

@ -2,11 +2,11 @@
title: About
---
ChaosZone is the project to setting up an collaborative Assembly at the 35th
ChaosZone is the project to setting up an collaborative Assembly at the 37th
Chaos Communication Congress.
ChaosZone wants to become a place - a platform - to unite hackspaces around
C3D2, the Erfa of the Chaos Computer Club from Dresden in the former GDR.
ChaosZone wants to become a place - a platform - to unite hackspaces from
eastern germany and farther east
We are focused on hacking (software, hardware and other stuff). We are
providing a friendly environment for learning from each other.

View file

@ -2,7 +2,4 @@
title: Contact
---
If you wish to contact the people behind the planned assembly, you may write to
<mail@c3d2.de>.
To contact the administrator of this site, write to <nek0@chaoszone.cz>.

View file

@ -1,14 +1,20 @@
body {
color: black;
font-family: 'CMUTypewriter';
font-size: 23px;
font-size: 23pt;
font-weight: normal;
font-style: normal;
padding: 0 2rem 0;
margin: 0;
display: flex;
display: grid;
min-height: 100vh;
flex-direction: column;
grid-template-columns: [leftcol] 23rem [maincol] auto [rightcol] 1fr;
grid-template-rows: [headerrow] 6rem [mainrow] auto [footerrow] 2rem;
grid-template-areas:
"logo header header"
"logo main main"
"logo footer footer";
background-color: #a21d10;
}
body::before {
@ -19,21 +25,24 @@ body::before {
bottom: 0;
left: 0;
right: 0;
background-color: #d00000;
background-image: linear-gradient(to bottom, rgba(208,0,0,0.9) 0%,rgba(208,0,0,0.9) 100%), url(/images/Chaoszone.black.svg);
background-image: url(/images/Chaoszone.black.svg);
background-size: contain;
background-attachment:fixed;
background-repeat:no-repeat;
background-position: center;
opacity: 0.05;
}
header {
border-bottom: 2px solid white;
margin-bottom: 30px;
padding: 12px 0px 12px 0px;
grid-area: header;
}
header, header a {
font-family: 'CMUTypewriter';
font-size: 30px;
margin-left: 25rem;
font-size: 23pt;
}
h1, h2, h3, h4, h5 {
@ -50,6 +59,10 @@ a:hover {
text-decoration: underline
}
#logo {
grid-area: logo;
}
#logo, #logo img {
max-width: 23rem;
}
@ -83,7 +96,6 @@ nav li {
nav li a {
color: white;
font-size: 18px;
font-weight: bold;
margin-left: 12px;
text-decoration: none;
@ -95,7 +107,7 @@ nav li a:first-child {
}
article {
margin-left: 25rem;
grid-area: main;
}
article img {
@ -103,19 +115,22 @@ article img {
}
footer {
grid-area: footer;
border-top: solid 2px white;
font-size: 12px;
padding: 12px 0px 12px 0px;
text-align: right;
}
/*
h1 {
font-size: 24px;
font-size: 24pt;
}
h2 {
font-size: 20px;
font-size: 20pt;
}
*/
div.info {
font-size: 14px;
@ -170,6 +185,15 @@ div.info {
}
@media screen and (max-width: 750px){
body {
grid-template-columns: [maincol] auto;
grid-template-rows: [logorow] 20rem [headerrow] 6rem [mainrow] auto [footerrow] 2rem;
grid-template-areas:
"logo"
"header"
"main"
"footer";
}
#logo {
position: initial;
}
@ -177,8 +201,4 @@ div.info {
#logo img {
max-width: 100%;
}
article, header {
margin: 0;
}
}

View file

@ -25,3 +25,10 @@
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'LePatinHelvete';
src: url('/fonts/Le-patin-helvete.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}

View file

@ -1,56 +0,0 @@
.tooltip-toggle {
cursor: pointer;
//position: relative;
//Tooltip text container
&::before {
position: absolute;
top: -30px;
//left: -80px;
background-color: #00ff00;
border-radius: 5px;
color: #fff;
content: attr(aria-label); //This pulls in the text from the element with the tooltip
padding: 1ex;
text-transform: none;
font-weight: bold;
transition: all 0.5s ease;
width: 160px;
line-height: 16px;
}
//Tooltip arrow
//&::after {
// position: absolute;
// top: -12px;
// left: 9px;
// border-left: 5px solid transparent;
// border-right: 5px solid transparent;
// border-top: 5px solid #2B222A;
// content: " ";
// font-size: 0;
// line-height: 0;
// margin-left: -5px;
// width: 0;
//}
//Setting up the transition
&::before,
&::after {
color: #efefef;
font-family: monospace;
font-size: 16px;
opacity: 0;
pointer-events: none;
text-align: center;
}
//Triggering the transition
&:focus::before,
&:focus::after,
&:hover::before,
&:hover::after {
opacity: 1;
transition: all 0.75s ease;
}
}

View file

@ -1,58 +0,0 @@
@function fact($number) {
$value: 1;
@if $number > 0 {
@for $i from 1 through $number {
$value: $value * $i;
}
}
@return $value;
}
@function pow($number, $exp) {
$value: 1;
@if $exp > 0 {
@for $i from 1 through $exp {
$value: $value * $number;
}
}
@else if $exp < 0 {
@for $i from 1 through -$exp {
$value: $value / $number;
}
}
@return $value;
}
@function pi() {
@return 3.14159265359;
}
@function rad($angle) {
$unit: unit($angle);
$unitless: $angle / ($angle * 0 + 1);
// If the angle has 'deg' as unit, convert to radians.
@if $unit == deg {
$unitless: $unitless / 180 * pi();
}
@return $unitless;
}
@function sin($angle) {
$sin: 0;
$angle: rad($angle);
// Iterate a bunch of times.
@for $i from 0 through 10 {
$sin: $sin + pow(-1, $i) * pow($angle, (2 * $i + 1)) / fact(2 * $i + 1);
}
@return $sin;
}
@function cos($angle) {
$cos: 0;
$angle: rad($angle);
// Iterate a bunch of times.
@for $i from 0 through 10 {
$cos: $cos + pow(-1, $i) * pow($angle, 2 * $i) / fact(2 * $i);
}
@return $cos;
}

View file

@ -1,183 +0,0 @@
@import "math";
// vars
$fg:#ff0000;
$bg:#00ff00;
// config
$menu-items: 5;
$open-distance: 110px;
$start-angle: (0 - pi()) / 2;
$opening-angle: pi() + 0;
.menu {
//@extend %goo;
$width:300px;
$height:300px;
//$width: 250px + (150px * abs(cos($start-angle)));
//$height: 250px + (150px * abs(sin($start-angle)));
position:fixed;
//left:50%;
display: inline-block;
margin-left:-$width/2;
padding-top:$height/2;
padding-left:$width/2;
padding-bottom:-$height/2;
width:$width;
height:$height;
box-sizing:border-box;
font-size:20px;
text-align:left;
}
%ball {
background: $bg;
border-radius: 50%;
width: 80px;
height: 80px;
margin-left: -40px;
margin-top: -40px;
position: absolute;
top: 50%;
color: white;
text-align:center;
line-height: 80px;
transform: translate3d(0,0,0);
transition:transform ease-out 200ms;
svg {
padding-top: 10px;
width: 60px;
height: 60px;
}
}
.menu-open {
display: none;
}
.menu-item {
@extend %ball;
}
.hamburger {
$width: 25px;
$height: 3px;
width: $width;
height: $height;
background: white;
display: block;
position: absolute;
top: 50%;
left: 50%;
margin-left: -$width/2;
margin-top: -$height/2;
transition: transform 200ms;
}
$hamburger-spacing:8px;
.hamburger-1 {
transform:translate3d(0,-$hamburger-spacing,0);
}
.hamburger-2 {
transform:translate3d(0,0,0);
}
.hamburger-3 {
transform:translate3d(0,$hamburger-spacing,0);
}
.menu-open:checked + .menu-open-button {
.hamburger-1 {
transform:translate3d(0,0,0) rotate(45deg);
}
.hamburger-2 {
transform:translate3d(0,0,0) scale(0.1,1);
}
.hamburger-3 {
transform:translate3d(0,0,0) rotate(-45deg);
}
}
.menu-item {
&:hover {
background:#acffac;
color:$fg;
}
@for $i from 1 through $menu-items {
&:nth-child(#{$i+2}) {
transition-duration:10ms+(60ms*($i));
}
}
}
.menu-open-button {
@extend %ball;
z-index:2;
//transition-timing-function:cubic-bezier(0.175, 0.885, 0.320, 1.275);
transition-timing-function:cubic-bezier(0.175, 0.885, 0.320, 1.0);
transition-duration:400ms;
transform:scale(1.1,1.1) translate3d(0,0,0);
cursor:pointer;
}
.menu-open-button:hover {
transform:scale(1.2,1.2) translate3d(0,0,0);
}
.menu-open:checked + .menu-open-button {
transition-timing-function:linear;
transition-duration:200ms;
transform:scale(0.8,0.8) translate3d(0,0,0);
}
.menu-open:checked ~ .menu-item {
transition-timing-function:cubic-bezier(0.935, 0.000, 0.340, 1.330);
@for $i from 1 through $menu-items {
$angle:((pi() - pi())/2)+((pi()/($menu-items - 1))*($i - 1) + $start-angle);
&:nth-child(#{$i+2}) {
transition-duration:80ms+(80ms*$i);
transform:translate3d(cos($angle)*$open-distance,sin($angle)*$open-distance,0);
}
}
}
@media screen and (max-width: 600px){
.menu {
position: relative;
padding-top: 0;
padding-bottom: 0;
height: 80px;
width: 100%;
}
%ball {
$dim: 1.4cm;
width: $dim;
height: $dim;
line-height: $dim;
svg {
$dim: 1.2cm;
padding-top: 0.1cm;
width: $dim;
height: $dim;
}
}
.menu-open:checked~.menu-item{
transition-timing-function:cubic-bezier(0.165, 0.840, 0.440, 1.000);
@for $i from 1 through $menu-items{
&:nth-child(#{$i+2}){
transition-duration:90ms+(100ms*$i);
transform:translate3d(1.4cm*$i,0,0);
}
}
}
}

BIN
site/images/teaser.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

View file

@ -1,16 +1,12 @@
---
title: Home
title: ChaosZone
---
## Welcome, Comrades!
Hello there!
Here you will find more information on ChaosZone and its member hackerspaces.
Welcome to this blog!
We are ChaosZone, mostly hackers from eastern countries, but all creatures are
welcome. Meet us at our Assembly at 35C3.
The latest posts here are:
Our recent Posts:
$partial("templates/post-list.html")$

View file

@ -0,0 +1,36 @@
---
title: ChaosZone goes 37c3 ~ Kombinate aller Länder vereinigt euch! ~
author: chaoszone
description: KOmmt uns auf dem Kongress besuchen!
---
![](/images/teaser.jpg)
## ostdeutsch
Genossinnen und Genossen!
Wir machen uns auf ins kapitalistische Ausland, um dort an der diesjährigen [Messe](https://events.ccc.de/category/37c3/) für Rechentechnik und Signalverarbeitung teilzunehmen.
Unsere Schwestern und Brüder im elektronischen Geiste aus Hamburg heißen uns Willkommen. Uns soll Platz zugewießen werden, so sagt man, mit Tischen und Stühlen bestückt. Eine Ecke zum Werken und Wirken soll es auch geben.
Desweiteren werden, mit etwas Glück, Eisbowlen gereicht und neumodische Anstecknadeln produziert.
Kommen Sie, schauen Sie und sprechen Sie uns an! Wir werden Sie gerne in die sozialistische Arbeit einführen.
Nach Ankunft werden wir ein Signal über [Sputnik42](https://chaos.social/@chaoszone) absenden, somit Sie uns finden können.
Solidarische Grüße,
Nerdschaft!
## deutsch
Einige Wesen der Chaoszone werden am diesjährigen [Congress](https://events.ccc.de/category/37c3/) des Chaos Computer Clubs in Hamburg teilnehmen.
Wir werden dort eine Assemblyfläche mit ein paar Tischen, Stühlen und einer kleinen Workshopecke haben! :)
Wenn alles klappt werden wir auch eine Slushimaschine und eine Buttonmaschine dahaben und Live Slushis und Buttons machen. ^^
Komm gerne vorbei! Eine genauere Ortsangabe wird später via [Mastodon](https://chaos.social/@chaoszone) bekannt gegeben.
## english
Some Chaoszone creatures will be attending this year's Chaos Computer Club [Congress](https://events.ccc.de/category/37c3/) in Hamburg.
We will have an assembly area with a few tables, chairs and a small workshop corner! :)
If everything works out well we will also have a slushi machine and a button machine there and make live slushis and buttons. ^^
Feel free to come by! A more exact location will be announced later via [Mastodon](https://chaos.social/@chaoszone).
## česky
Některé z bytostí Chaoszone se zúčastní letošního [kongresu](https://events.ccc.de/category/37c3/) Chaos Computer Clubu v Hamburgu.
Budeme tam mít prostor s několika stoly, židlemi a malým workshopovým koutkem! :)
Pokud vše vyjde, budeme tam mít také stroj na slushie, stroj na placky a budeme vyrábět živě slushie a placky. ^^
Neváhejte a přijďte! Přesnější místo oznámíme později prostřednictvím [Mastodonu](https://chaos.social/@chaoszone).

View file

@ -41,50 +41,42 @@ main = do
route myRoute
compile compressCssCompiler
-- match "site/css/*.scss" $ do
-- route $ myRoute `composeRoutes` setExtension "css"
-- compile $ fmap compressCss <$> sassCompiler
match (fromList ["site/about.md", "site/contact.md"]) $ do
route $ myRoute `composeRoutes` setExtension "html"
compile $ do
-- firstUrl <- return . fromMaybe "" =<< getRoute (head is)
-- latestUrl <- return . fromMaybe "" =<< getRoute (last is)
pandocCompiler
>>= loadAndApplyTemplate "templates/default.html"
-- (menuCtx firstUrl latestUrl)
defaultCtx
>>= relativizeUrls
create ["index.html"] $ do
route idRoute
compile $ do
post <- fmap head . recentFirst =<< (loadAll "site/posts/*"
:: Compiler [Item String])
let indexCtx =
constField "date" "%B %e, %Y" <>
defaultCtx
makeItem (itemBody post)
>>= relativizeUrls
-- match "site/index.md" $ do
-- route $ myRoute `composeRoutes` setExtension "html"
-- create ["index.html"] $ do
-- route idRoute
-- compile $ do
-- posts <- fmap (take 5) . recentFirst =<< loadAll "site/posts/*"
-- let indexCtx = listField "posts" postCtx (return posts) <>
-- constField "title" "Home" <>
-- post <- fmap head . recentFirst =<< (loadAll "site/posts/*"
-- :: Compiler [Item String])
-- let indexCtx =
-- constField "date" "%B %e, %Y" <>
-- defaultCtx
-- getResourceBody
-- >>= applyAsTemplate indexCtx
-- >>= renderPandoc
-- >>= loadAndApplyTemplate "templates/default.html" defaultCtx
-- >>= relativizeUrls
-- makeItem (itemBody post)
-- >>= relativizeUrls
match "site/index.md" $ do
route $ myRoute `composeRoutes` setExtension "html"
compile $ do
posts <- fmap (take 5) . recentFirst =<< loadAll "site/posts/*"
let indexCtx = listField "posts" postCtx (return posts) <>
constField "title" "Home" <>
defaultCtx
getResourceBody
>>= applyAsTemplate indexCtx
>>= renderPandoc
>>= loadAndApplyTemplate "templates/default.html" defaultCtx
>>= relativizeUrls
create ["archive.html"] $ do
route idRoute
compile $ do
-- firstUrl <- return . fromMaybe "" =<< getRoute (head is)
-- latestUrl <- return . fromMaybe "" =<< getRoute (last is)
posts <- recentFirst =<< loadAll "site/posts/*"
let archiveCtx =
listField "posts" postCtx (return posts) <>
@ -104,8 +96,6 @@ main = do
paginateRules pages $ \num pat -> do
route $ myRoute `composeRoutes` setExtension "html"
compile $ do
-- firstUrl <- fmap ('/' :) . return . fromMaybe "" =<< getRoute (head is)
-- latestUrl <- fmap ('/' :) . return . fromMaybe "" =<< getRoute (last is)
ident <- getUnderlying
title <- getMetadataField' ident "title"
url <- return . fromMaybe "" =<< getRoute ident
@ -120,15 +110,19 @@ main = do
defaultCtx full
>>= relativizeUrls
-- create ["index.html"] $ do
-- route idRoute
-- compile $ do
-- post <- fmap head . recentFirst =<< (loadAll "site/posts/*" :: Compiler [Item String])
-- let indexCtx =
-- constField "date" "%B %e, %Y" <>
-- defaultCtx
-- makeItem (itemBody post)
-- >>= relativizeUrls
create ["atom.xml"] $ do
route idRoute
compile $ do
loadAllSnapshots "site/posts/*.md" "content"
>>= recentFirst
>>= renderAtom feedConf feedCtx
create ["rss.xml"] $ do
route idRoute
compile $ do
loadAllSnapshots "site/posts/*.md" "content"
>>= recentFirst
>>= renderRss feedConf feedCtx
--------------------------------------------------------------------------------
@ -155,6 +149,25 @@ config = defaultConfiguration
--------------------------------------------------------------------------------
feedCtx :: Context String
feedCtx = mconcat
[ bodyField "description"
, defaultContext
]
--------------------------------------------------------------------------------
feedConf :: FeedConfiguration
feedConf = FeedConfiguration
{ feedTitle = "Chaosone news"
, feedDescription = "News from eastern european hackerspaces"
, feedAuthorName = "Chaoszone members"
, feedAuthorEmail = "nek0@chaoszone.cz"
, feedRoot = "https://chaoszone.cz"
}
--------------------------------------------------------------------------------
sortIdentifiersByDate :: [Identifier] -> [Identifier]
sortIdentifiersByDate =
sortBy byDate

View file

@ -10,14 +10,20 @@
<link rel="stylesheet" href="/css/default.css" />
<link rel="stylesheet" href="/css/font.css" />
<link rel="icon" type="image/svg+xml" href="/images/Chaoszone.svg">
<!-- RSS -->
<link rel="alternate" type="application/rss+xml" title="Chaoszone news" href="/rss.xml">
<!-- ATOM -->
<link rel="alternate" type="application/atom+xml" title="Chaoszone news" href="/atom.xml">
</head>
<body>
<div class="wrapper">
<div id="logo">
<a href="/">
<img src="/images/Chaoszone_crest.36c3.svg" alt="ChaosZone">
</a>
</div>
<div id="logo">
<a href="/">
<img src="/images/Chaoszone_crest.36c3.svg" alt="ChaosZone">
</a>
</div>
<header id="header">
<nav class="menu">
@ -30,11 +36,10 @@
</nav>
</header>
<article id="content">
<h1>$title$</h1>
<article id="content">
<h1>$title$</h1>
$body$
</article>
</div>
</article>
<footer id="footer">
last updated on: $curtime$ |