diff options
author | stuebinm | 2024-01-13 00:35:13 +0100 |
---|---|---|
committer | stuebinm | 2024-01-13 00:35:13 +0100 |
commit | b2fc20fe8080e4c083b08354afdce287a91de0b7 (patch) | |
tree | 9cd539dd9b2f11515d8bc36ff86fb81256ba9d92 /pkgs | |
parent | 3c752004c4a49319aa93eb586e77b563811a1217 (diff) |
nomsable webring
(just messing around for now)
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/nomsring/.gitignore | 1 | ||||
-rw-r--r-- | pkgs/nomsring/Main.hs | 32 | ||||
-rw-r--r-- | pkgs/nomsring/default.nix | 12 | ||||
-rw-r--r-- | pkgs/nomsring/nomsring.cabal | 19 | ||||
-rw-r--r-- | pkgs/overlay.nix | 2 |
5 files changed, 65 insertions, 1 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 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 #### |