From b2fc20fe8080e4c083b08354afdce287a91de0b7 Mon Sep 17 00:00:00 2001 From: stuebinm Date: Sat, 13 Jan 2024 00:35:13 +0100 Subject: nomsable webring (just messing around for now) --- pkgs/nomsring/.gitignore | 1 + pkgs/nomsring/Main.hs | 32 ++++++++++++++++++++++++++++++++ pkgs/nomsring/default.nix | 12 ++++++++++++ pkgs/nomsring/nomsring.cabal | 19 +++++++++++++++++++ pkgs/overlay.nix | 2 +- 5 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 pkgs/nomsring/.gitignore create mode 100644 pkgs/nomsring/Main.hs create mode 100644 pkgs/nomsring/default.nix create mode 100644 pkgs/nomsring/nomsring.cabal (limited to 'pkgs') diff --git a/pkgs/nomsring/.gitignore b/pkgs/nomsring/.gitignore new file mode 100644 index 0000000..b5e3679 --- /dev/null +++ b/pkgs/nomsring/.gitignore @@ -0,0 +1 @@ +dist-newstyle/* diff --git a/pkgs/nomsring/Main.hs b/pkgs/nomsring/Main.hs new file mode 100644 index 0000000..5c70491 --- /dev/null +++ b/pkgs/nomsring/Main.hs @@ -0,0 +1,32 @@ +module Main where + +import Network.CGI (CGIResult, runCGI, getInput, output, redirect, pathInfo, CGI, outputNotFound, liftIO) +import Data.CircularList (CList, fromList, rotR, rotateTo, focus, rotL) +import Data.Maybe(fromJust, fromMaybe) +import Data.Functor ((<&>)) + +webring :: CList String +webring = fromList + [ "stuebinm.eu" + , "nwex.de" + ] + +main :: IO () +main = runCGI $ do + path <- pathInfo + case path of + "/" -> output "nomsable websites" + "/next" -> rotate True + "/previous" -> rotate False + _ -> outputNotFound path + +rotate :: Bool -> CGI CGIResult +rotate backwards = do + from <- getInput "from" <&> fromMaybe (focus' webring) + case rotateTo from webring of + Nothing -> redirect ("https://" <> focus' webring) + Just ring -> redirect ("https://" <> focus' (step ring)) + where step = if backwards then rotL else rotR + +focus' :: CList c -> c +focus' = fromJust . focus diff --git a/pkgs/nomsring/default.nix b/pkgs/nomsring/default.nix new file mode 100644 index 0000000..c7ad358 --- /dev/null +++ b/pkgs/nomsring/default.nix @@ -0,0 +1,12 @@ +{ mkDerivation, base, cgi, data-clist, lib }: +mkDerivation { + pname = "nomsring"; + version = "0.1.0.0"; + src = ./.; + isLibrary = false; + isExecutable = true; + executableHaskellDepends = [ base cgi data-clist ]; + description = "noms noms"; + license = lib.licenses.bsd3; + mainProgram = "nomsring"; +} diff --git a/pkgs/nomsring/nomsring.cabal b/pkgs/nomsring/nomsring.cabal new file mode 100644 index 0000000..0ee04a3 --- /dev/null +++ b/pkgs/nomsring/nomsring.cabal @@ -0,0 +1,19 @@ +cabal-version: 3.0 +name: nomsring +version: 0.1.0.0 +synopsis: noms noms +description: a webring for nomsable websites +license: BSD-3-Clause +author: stuebinm +maintainer: stuebinm@disroot.org + +common warnings + ghc-options: -Wall + +executable nomsring + import: warnings + main-is: Main.hs + build-depends: base ^>=4.17.2.1 + , cgi ^>=3001.5 + , data-clist ^>= 0.2 + default-language: GHC2021 diff --git a/pkgs/overlay.nix b/pkgs/overlay.nix index 5da88f1..671a7c2 100644 --- a/pkgs/overlay.nix +++ b/pkgs/overlay.nix @@ -116,7 +116,7 @@ in in haskellPkgs.callPackage pkg {}; - + nomsring = super.haskellPackages.callPackage ./nomsring {}; #### sporadically maintained / updated #### -- cgit v1.2.3