summaryrefslogtreecommitdiff
path: root/pkgs/nomsring
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/nomsring')
-rw-r--r--pkgs/nomsring/.gitignore1
-rw-r--r--pkgs/nomsring/Main.hs32
-rw-r--r--pkgs/nomsring/default.nix12
-rw-r--r--pkgs/nomsring/nomsring.cabal19
4 files changed, 64 insertions, 0 deletions
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