Compare commits
24 commits
Author | SHA1 | Date | |
---|---|---|---|
nek0 | a16e573bc5 | ||
nek0 | 671cf45504 | ||
nek0 | c255808595 | ||
nek0 | 2c8f4cd4b1 | ||
nek0 | df8b17ec36 | ||
nek0 | 169a76bd9c | ||
nek0 | 111ea2e3f1 | ||
nek0 | d40b04a5e3 | ||
nek0 | 0286301fc2 | ||
nek0 | 432f3c8d0b | ||
nek0 | 4c15b72375 | ||
nek0 | 3f2f910349 | ||
nek0 | 782311c832 | ||
nek0 | 3c4c254bd7 | ||
nek0 | f3ceffb970 | ||
nek0 | 567a95d3d9 | ||
nek0 | c5e92b2cc7 | ||
nek0 | 639a6d21d5 | ||
nek0 | 8a90913f2a | ||
nek0 | efd7036bc9 | ||
nek0 | 5a5eb31342 | ||
nek0 | 1377f83e52 | ||
nek0 | 94051a2ebd | ||
nek0 | 80d972c5ad |
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -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/
|
||||
|
|
|
@ -26,3 +26,4 @@ executable chaoszone
|
|||
, aeson
|
||||
hs-source-dirs: src
|
||||
default-language: Haskell2010
|
||||
ghc-options: -Wall -threaded
|
||||
|
|
7
default.nix
Normal file
7
default.nix
Normal 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
60
flake.lock
Normal 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
28
flake.nix
Normal 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;};
|
||||
});
|
||||
}
|
||||
|
45
shell.nix
45
shell.nix
|
@ -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
|
||||
];
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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>.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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
BIN
site/images/teaser.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 200 KiB |
|
@ -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")$
|
||||
|
||||
|
|
|
@ -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).
|
93
src/Main.hs
93
src/Main.hs
|
@ -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
|
||||
|
|
|
@ -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$ |
|
||||
|
|
Loading…
Reference in a new issue