Compare commits

..

No commits in common. "main" and "36C3" have entirely different histories.
main ... 36C3

18 changed files with 410 additions and 266 deletions

6
.gitignore vendored
View file

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

View file

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

View file

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

View file

@ -1,60 +0,0 @@
{
"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
}

View file

@ -1,28 +0,0 @@
{
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,14 +1,33 @@
{ pkgs ? import <nixpkgs> {}
, chaoszone ? import ./default.nix { inherit pkgs; packageName = "chaoszone"; }
}:
{ nixpkgs ? import <nixpkgs> {}, compiler ? "default", doBenchmark ? false }:
pkgs.haskellPackages.shellFor {
packages = p: [ chaoszone ];
withHoogle = true;
buildInputs = with pkgs.haskellPackages; with pkgs; [
haskell-language-server
ghcid
cabal-install
vim
];
}
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

View file

@ -2,11 +2,11 @@
title: About
---
ChaosZone is the project to setting up an collaborative Assembly at the 37th
ChaosZone is the project to setting up an collaborative Assembly at the 35th
Chaos Communication Congress.
ChaosZone wants to become a place - a platform - to unite hackspaces from
eastern germany and farther east
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.
We are focused on hacking (software, hardware and other stuff). We are
providing a friendly environment for learning from each other.

View file

@ -2,4 +2,7 @@
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,20 +1,14 @@
body {
color: black;
font-family: 'CMUTypewriter';
font-size: 23pt;
font-size: 23px;
font-weight: normal;
font-style: normal;
padding: 0 2rem 0;
margin: 0;
display: grid;
display: flex;
min-height: 100vh;
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;
flex-direction: column;
}
body::before {
@ -25,24 +19,21 @@ body::before {
bottom: 0;
left: 0;
right: 0;
background-image: url(/images/Chaoszone.black.svg);
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-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: 23pt;
font-size: 30px;
margin-left: 25rem;
}
h1, h2, h3, h4, h5 {
@ -59,10 +50,6 @@ a:hover {
text-decoration: underline
}
#logo {
grid-area: logo;
}
#logo, #logo img {
max-width: 23rem;
}
@ -96,6 +83,7 @@ nav li {
nav li a {
color: white;
font-size: 18px;
font-weight: bold;
margin-left: 12px;
text-decoration: none;
@ -107,7 +95,7 @@ nav li a:first-child {
}
article {
grid-area: main;
margin-left: 25rem;
}
article img {
@ -115,22 +103,19 @@ 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: 24pt;
font-size: 24px;
}
h2 {
font-size: 20pt;
font-size: 20px;
}
*/
div.info {
font-size: 14px;
@ -185,15 +170,6 @@ 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;
}
@ -201,4 +177,8 @@ div.info {
#logo img {
max-width: 100%;
}
article, header {
margin: 0;
}
}

View file

@ -25,10 +25,3 @@
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;
}

56
site/css/hover.scss Normal file
View file

@ -0,0 +1,56 @@
.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;
}
}

58
site/css/math.scss Normal file
View file

@ -0,0 +1,58 @@
@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;
}

183
site/css/menu.scss Normal file
View file

@ -0,0 +1,183 @@
@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);
}
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 KiB

View file

@ -1,12 +1,16 @@
---
title: ChaosZone
title: Home
---
Hello there!
## Welcome, Comrades!
Here you will find more information on ChaosZone and its member hackerspaces.
Our recent Posts:
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:
$partial("templates/post-list.html")$

View file

@ -1,36 +0,0 @@
---
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,42 +41,50 @@ 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) <>
@ -96,6 +104,8 @@ 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
@ -110,19 +120,15 @@ main = do
defaultCtx full
>>= 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
-- 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
--------------------------------------------------------------------------------
@ -149,25 +155,6 @@ 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,20 +10,14 @@
<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 id="logo">
<a href="/">
<img src="/images/Chaoszone_crest.36c3.svg" alt="ChaosZone">
</a>
</div>
<div class="wrapper">
<div id="logo">
<a href="/">
<img src="/images/Chaoszone_crest.36c3.svg" alt="ChaosZone">
</a>
</div>
<header id="header">
<nav class="menu">
@ -36,10 +30,11 @@
</nav>
</header>
<article id="content">
<h1>$title$</h1>
<article id="content">
<h1>$title$</h1>
$body$
</article>
</article>
</div>
<footer id="footer">
last updated on: $curtime$ |