diff options
-rw-r--r-- | .build.yml | 16 | ||||
-rw-r--r-- | Biz/App.hs | 29 | ||||
-rw-r--r-- | Biz/Bild.hs | 97 | ||||
-rw-r--r-- | Biz/Bild/Rules.nix | 34 | ||||
-rw-r--r-- | Biz/Bild/ShellHook.sh | 2 | ||||
-rw-r--r-- | Biz/Cloud.nix | 27 | ||||
-rw-r--r-- | Biz/Dev.nix | 16 | ||||
-rw-r--r-- | Biz/Ibb/Client.hs | 2 | ||||
-rw-r--r-- | Biz/Ibb/Server.hs | 2 | ||||
-rw-r--r-- | Biz/Pie.hs | 9 | ||||
-rw-r--r-- | Biz/Pie.nix | 1 | ||||
-rw-r--r-- | Hero/Core.hs | 178 | ||||
-rw-r--r-- | Hero/Host.hs | 66 | ||||
-rw-r--r-- | Hero/Look/Typography.hs | 6 | ||||
-rw-r--r-- | Hero/Node.hs | 2 | ||||
-rw-r--r-- | Hero/Prod.nix | 31 | ||||
-rw-r--r-- | Que/Apidocs.md (renamed from Que/apidocs.md) | 0 | ||||
-rwxr-xr-x | Que/Client.py (renamed from Que/client.py) | 0 | ||||
-rw-r--r-- | Que/Host.hs | 2 | ||||
-rw-r--r-- | Que/Index.md (renamed from Que/index.md) | 0 | ||||
-rw-r--r-- | Que/Prod.nix | 35 | ||||
-rw-r--r-- | Que/Quescripts.md (renamed from Que/quescripts.md) | 0 | ||||
-rw-r--r-- | Que/Site.hs | 2 | ||||
-rw-r--r-- | Que/Site.nix | 2 | ||||
-rw-r--r-- | Que/Style.css (renamed from Que/style.css) | 0 | ||||
-rw-r--r-- | Que/Tutorial.md (renamed from Que/tutorial.md) | 0 | ||||
-rw-r--r-- | default.nix | 97 | ||||
-rw-r--r-- | shell.nix | 4 |
28 files changed, 347 insertions, 313 deletions
@@ -6,7 +6,15 @@ secrets: tasks: - build: | cd biz - nix-build ./default.nix -A Biz.Cloud -A Biz.Dev - - nix-shell: | - cd biz - nix-shell --run "echo okay" + nix-shell --run "bild Biz/Pie.hs" + nix-shell --run "bild Biz/Pie.nix" + nix-shell --run "bild Biz/Cloud.nix" + nix-shell --run "bild Biz/Dev.nix" + + nix-shell --run "bild Que/Site.hs" + nix-shell --run "bild Que/Host.hs" + nix-shell --run "bild Que/Prod.nix" + + nix-shell --run "bild Hero/Host.hs" + nix-shell --run "bild Hero/Node.hs" + nix-shell --run "bild Hero/Prod.nix" @@ -1,9 +1,10 @@ {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE NoImplicitPrelude #-} -- | General utils for apps -module Biz.App (CSS(..), Manifest(..)) where +module Biz.App (CSS (..), Manifest (..)) where import Alpha import Data.Aeson (ToJSON) @@ -15,10 +16,9 @@ import Network.HTTP.Media ) import Servant -newtype CSS - = CSS - { unCSS :: Text - } +newtype CSS = CSS + { unCSS :: Text + } instance Accept CSS where contentType _ = "text" // "css" /: ("charset", "utf-8") @@ -27,17 +27,14 @@ instance MimeRender CSS Text where mimeRender _ = Lazy.encodeUtf8 . Lazy.fromStrict -- | The manifest describes your app for web app thumbnails, iPhone tiles, etc. -data Manifest - = Manifest - { name :: Text, - short_name :: Text, - start_url :: Text, - display :: Text, - theme_color :: Text, - description :: Text - } +data Manifest = Manifest + { name :: Text, + short_name :: Text, + start_url :: Text, + display :: Text, + theme_color :: Text, + description :: Text + } deriving (Show, Eq, Generic) instance ToJSON Manifest - - diff --git a/Biz/Bild.hs b/Biz/Bild.hs index 92054f9..169fd6f 100644 --- a/Biz/Bild.hs +++ b/Biz/Bild.hs @@ -64,7 +64,7 @@ -- -- > bild A/B.hs -- --- This will build the file at ./A/B.hs, this will translate to something like +-- This will build the file at ./A/B.hs, which translates to something like -- `ghc --make A.B`. -- -- > bild -s <target> @@ -94,16 +94,16 @@ -- -- The output executable is named with: -- --- > -- : exe my-program +-- > -- : out my-program -- -- or -- --- > -- : exe my-ap.js +-- > -- : out my-ap.js -- -- When multiple compilers are possible (e.g. ghc vs ghcjs) we chose ghcjs when --- the target exe ends in .js. +-- the target @out@ ends in .js. -- --- This method of setting metadata in the module comments works pretty well, +-- This method of setting metadata in the module comments works pretty well, -- and really only needs to be done in the entrypoint module anyway. -- -- Local module deps are included by just giving the repo root to the compiler @@ -143,14 +143,14 @@ type Namespace = String type Dep = String -type Exe = String +type Out = String data Compiler = Ghc | Ghcjs | Nix deriving (Show) data Target = Target - { -- | Output executable name - exe :: Exe, + { -- | Output name + out :: Out, -- | Fully qualified namespace partitioned by '.' namespace :: Namespace, -- | Absolute path to file @@ -170,24 +170,30 @@ analyze s = do case File.takeExtension path of ".hs" -> do content <- String.lines </ Prelude.readFile path - let exe = content /> Regex.match metaExe |> catMaybes |> head |> require "exe" - let compiler = if ".js" `List.isSuffixOf` exe then Ghcjs else Ghc - return Target { - namespace = require "namespace" - <| path - |> reps root "" - |> File.dropExtension - |> reps "/" "." - |> List.stripPrefix "." - >>= Regex.match metaNamespace, - deps = content /> Regex.match metaDep |> catMaybes, - .. - } - - ".nix" -> return Target { - namespace = s, path = path, deps = [], compiler = Nix, exe = "" - } - + let out = content /> Regex.match metaOut |> catMaybes |> head |> require "out" + let compiler = if ".js" `List.isSuffixOf` out then Ghcjs else Ghc + return + Target + { namespace = + require "namespace" + <| path + |> reps root "" + |> File.dropExtension + |> reps "/" "." + |> List.stripPrefix "." + >>= Regex.match metaNamespace, + deps = content /> Regex.match metaDep |> catMaybes, + .. + } + ".nix" -> + return + Target + { namespace = s, + path = path, + deps = [], + compiler = Nix, + out = "" + } e -> panic <| "bild does not know this extension: " <> Text.pack e build :: Target -> IO () @@ -196,8 +202,8 @@ build Target {..} = do case compiler of Ghc -> do putText <| "bild: ghc: " <> Text.pack namespace - let out = root </> "_/bild/dev/bin" - Dir.createDirectoryIfMissing True out + let devOut = root </> "_/bild/dev/bin" + Dir.createDirectoryIfMissing True devOut Process.callProcess "ghc" [ "-Werror", @@ -211,12 +217,12 @@ build Target {..} = do "-main-is", namespace, "-o", - out </> exe + devOut </> out ] Ghcjs -> do putText <| "bild: ghcjs: " <> Text.pack namespace - let out = root </> "_/bild/dev/static" - Dir.createDirectoryIfMissing True out + let devOut = root </> "_/bild/dev/static" + Dir.createDirectoryIfMissing True devOut Process.callProcess "ghcjs" [ "-Werror", @@ -230,19 +236,30 @@ build Target {..} = do "-main-is", namespace, "-o", - out </> exe + devOut </> out ] Nix -> do putText <| "bild: nix: " <> Text.pack namespace cwd <- Dir.getCurrentDirectory - let qualifiedTarget = reps root "" cwd <> namespace + let nixOut = root </> "_/bild/nix" + Dir.createDirectoryIfMissing True nixOut + let qualifiedTarget = reps root "" cwd </> namespace Process.callProcess "nix-build" - [ "-o", - root </> "_/bild/nix" </> qualifiedTarget, - root </> "default.nix", - "--attr", - qualifiedTarget + [ path, + "-o", + nixOut </> qualifiedTarget, + "--arg", + "bild", + "import " <> root + </> "Biz/Bild/Rules.nix" + <> " { nixpkgs = import " + <> root + </> "Biz/Bild/Nixpkgs.nix" + <> "; }", + "--arg", + "lib", + "(import " <> root </> "Biz/Bild/Nixpkgs.nix).lib" ] metaNamespace :: Regex.RE Char Namespace @@ -253,8 +270,8 @@ metaNamespace = name <> Regex.many (Regex.sym '.') <> name metaDep :: Regex.RE Char Dep metaDep = Regex.string "-- : dep " *> Regex.many (Regex.psym Char.isAlpha) -metaExe :: Regex.RE Char Exe -metaExe = Regex.string "-- : exe " *> Regex.many (Regex.psym (/= ' ')) +metaOut :: Regex.RE Char Out +metaOut = Regex.string "-- : out " *> Regex.many (Regex.psym (/= ' ')) require :: Text -> Maybe a -> a require _ (Just x) = x diff --git a/Biz/Bild/Rules.nix b/Biz/Bild/Rules.nix index e76d7a2..2a1a4d1 100644 --- a/Biz/Bild/Rules.nix +++ b/Biz/Bild/Rules.nix @@ -28,9 +28,9 @@ let module = builtins.replaceStrings ["/" ".hs"] ["." ""] relpath; # file contents content = builtins.readFile main; - # search for the ': exe' declaration - exe = builtins.head (lib.lists.flatten (removeNull - (map (builtins.match "^-- : exe ([[:alnum:]._-]*)$") + # search for the ': out' declaration + out = builtins.head (lib.lists.flatten (removeNull + (map (builtins.match "^-- : out ([[:alnum:]._-]*)$") (lines content)))); # collect all of the ': dep' declarations deps = lib.lists.flatten (removeNull @@ -38,7 +38,7 @@ let (lines content))); sysdeps = lib.lists.flatten (removeNull - (map (builtins.match "^-- : sys ([[:alum:]._-]*)$") + (map (builtins.match "^-- : sys ([[:alnum:]._-]*)$") (lines content))); }; @@ -59,16 +59,18 @@ in { ghc = ghc_ data.deps; in stdenv.mkDerivation { name = data.module; - src = ../.; + src = ../../.; nativeBuildInputs = [ ghc ] ++ depsToPackageSet nixpkgs data.sysdeps; strictDeps = true; buildPhase = '' mkdir -p $out/bin # compile with ghc - ${ghc}/bin/ghc -Werror -Weverything -i. \ - --make ${main} \ - -main-is ${data.module} \ - -o $out/bin/${data.exe} + ${ghc}/bin/ghc \ + -Werror \ + -i. \ + --make ${main} \ + -main-is ${data.module} \ + -o $out/bin/${data.out} ''; # the install process was handled above installPhase = "exit 0"; @@ -80,19 +82,21 @@ in { ghcjs = ghcjs_ data.deps; in stdenv.mkDerivation { name = data.module; - src = ../.; + src = ../../.; nativeBuildInputs = [ ghcjs ]; strictDeps = true; buildPhase = '' mkdir -p $out/static # compile with ghcjs - ${ghcjs}/bin/ghcjs -Werror -Weverything -i. \ - --make ${main} \ - -main-is ${data.module} \ - -o ${data.exe} + ${ghcjs}/bin/ghcjs \ + -Werror \ + -i. \ + --make ${main} \ + -main-is ${data.module} \ + -o ${data.out} # optimize js output ${pkgs.closurecompiler}/bin/closure-compiler \ - ${data.exe}/all.js > $out/static/${data.exe} + ${data.out}/all.js > $out/static/${data.out} ''; installPhase = "exit 0"; } // { env = ghcjs; }; diff --git a/Biz/Bild/ShellHook.sh b/Biz/Bild/ShellHook.sh index 89751d3..0fc1781 100644 --- a/Biz/Bild/ShellHook.sh +++ b/Biz/Bild/ShellHook.sh @@ -13,6 +13,8 @@ function help() { echo " ship lint, bild, and push one (or all) namespace(s)" } +alias runghc="runghc --ghc-arg=-i$BIZ_ROOT" + function bild() { runghc Biz.Bild $@ } diff --git a/Biz/Cloud.nix b/Biz/Cloud.nix new file mode 100644 index 0000000..edf8a85 --- /dev/null +++ b/Biz/Cloud.nix @@ -0,0 +1,27 @@ +{ bild }: + +# Cloud infrastructure, always online. Mostly for messaging-related stuff. + +let + nixos-mailserver = let ver = "v2.3.0"; in builtins.fetchTarball { + url = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver/-/archive/${ver}/nixos-mailserver-${ver}.tar.gz"; + sha256 = "0lpz08qviccvpfws2nm83n7m2r8add2wvfg9bljx9yxx8107r919"; + }; +in +bild.os { + imports = [ + ./OsBase.nix + ./Packages.nix + ./Users.nix + ./Cloud/Chat.nix + ./Cloud/Git.nix + ./Cloud/Hardware.nix + ./Cloud/Mail.nix + ./Cloud/Networking.nix + ./Cloud/Web.nix + ./Cloud/Znc.nix + nixos-mailserver + ]; + networking.hostName = "simatime"; + networking.domain = "simatime.com"; +} diff --git a/Biz/Dev.nix b/Biz/Dev.nix new file mode 100644 index 0000000..a08a8f7 --- /dev/null +++ b/Biz/Dev.nix @@ -0,0 +1,16 @@ +{ bild }: + +# Dev machine for work and building stuff. + +bild.os { + imports = [ + ./OsBase.nix + ./Packages.nix + ./Users.nix + ./Dev/Configuration.nix + ./Dev/Hardware.nix + ]; + networking.hostName = "lithium"; + networking.domain = "dev.simatime.com"; +} + diff --git a/Biz/Ibb/Client.hs b/Biz/Ibb/Client.hs index c3dae4b..d0ed3e3 100644 --- a/Biz/Ibb/Client.hs +++ b/Biz/Ibb/Client.hs @@ -3,7 +3,7 @@ -- | Front-end -- --- : exe ibb.js +-- : out ibb.js -- -- : dep clay -- : dep miso diff --git a/Biz/Ibb/Server.hs b/Biz/Ibb/Server.hs index d7b4969..058bbdc 100644 --- a/Biz/Ibb/Server.hs +++ b/Biz/Ibb/Server.hs @@ -7,7 +7,7 @@ -- | Server -- --- : exe ibb +-- : out ibb -- -- : dep clay -- : dep miso @@ -29,6 +29,15 @@ -- - Sean Ellis' question: "How would you feel if you could no longer use this -- product? (a) Very disappointed, (b) somewhat disappointed, (c) not -- disappointed" and then measure the percentage who answer (a). +-- +-- Bild Metadata: +-- +-- : out pie +-- : dep aeson +-- : dep protolude +-- : dep optparse-simple +-- : dep parsec +-- : dep haskeline module Biz.Pie ( main, ) diff --git a/Biz/Pie.nix b/Biz/Pie.nix new file mode 100644 index 0000000..70e2f23 --- /dev/null +++ b/Biz/Pie.nix @@ -0,0 +1 @@ +{ bild }: bild.ghc ./Pie.hs diff --git a/Hero/Core.hs b/Hero/Core.hs index bc53503..8f865da 100644 --- a/Hero/Core.hs +++ b/Hero/Core.hs @@ -129,14 +129,14 @@ data Button class Elemental v where el :: v -> View Move -- TODO: what if I just did this on all actions? --- then I could e.g. `el $ ToggleAudio audioId audioState` +-- then I could e.g. `el <| ToggleAudio audioId audioState` instance Elemental Button where el (PlayPause id form) = button_ [ class_ "button is-large icon", - onClick $ ToggleAudio id + onClick <| ToggleAudio id ] - [i_ [class_ $ "fa " <> icon] []] + [i_ [class_ <| "fa " <> icon] []] where icon = case form of Paused -> "fa-play-circle" @@ -144,7 +144,7 @@ instance Elemental Button where el (Arrow act) = button_ [class_ "button is-large turn-page", onClick act] - [img_ [src_ $ ms $ Pack.demo <> image <> ".png"]] + [img_ [src_ <| ms <| Pack.demo <> image <> ".png"]] where image = case act of PrevPage -> "prev-page" @@ -154,15 +154,15 @@ instance Elemental Button where if c `elem` userLibrary u -- in library then a_ - [class_ "wrs-button saved", onClick $ ToggleInLibrary c] - [ img_ [src_ $ ms $ Pack.icon <> "save.svg"], + [class_ "wrs-button saved", onClick <| ToggleInLibrary c] + [ img_ [src_ <| ms <| Pack.icon <> "save.svg"], span_ [] [text "saved"] ] else-- not in library a_ - [class_ "wrs-button", onClick $ ToggleInLibrary c] - [ img_ [src_ $ ms $ Pack.icon <> "save.svg"], + [class_ "wrs-button", onClick <| ToggleInLibrary c] + [ img_ [src_ <| ms <| Pack.icon <> "save.svg"], span_ [] [text "save"] ] el (SaveIcon c u) = @@ -170,46 +170,46 @@ instance Elemental Button where then button_ [ class_ "button is-large has-background-black", - onClick $ ToggleInLibrary c + onClick <| ToggleInLibrary c ] - [img_ [src_ $ ms $ Pack.demo <> "library-add.png"]] + [img_ [src_ <| ms <| Pack.demo <> "library-add.png"]] else-- not in library button_ [ class_ "button is-large has-background-black-bis", - onClick $ ToggleInLibrary c + onClick <| ToggleInLibrary c ] - [img_ [src_ $ ms $ Pack.demo <> "library-add.png"]] + [img_ [src_ <| ms <| Pack.demo <> "library-add.png"]] el (ZoomIcon zform comic page) = button_ [ id_ "zoom-button", class_ "button is-large", - onClick $ ToggleZoom comic page + onClick <| ToggleZoom comic page ] - [ img_ [src_ $ ms $ Pack.demo <> "zoom.png"], + [ img_ [src_ <| ms <| Pack.demo <> "zoom.png"], input_ [ type_ "range", min_ "0", max_ "100", disabled_ True, - value_ $ ms (show zform :: String), + value_ <| ms (show zform :: String), class_ "ctrl", id_ "zoom" ], label_ [class_ "ctrl", Miso.for_ "zoom"] - [text $ ms $ (show zform :: String) ++ "%"] + [text <| ms <| (show zform :: String) ++ "%"] ] el (Read c) = a_ - [class_ "wrs-button", onClick $ SelectExperience c] - [ img_ [src_ $ ms $ Pack.icon <> "read.svg"], + [class_ "wrs-button", onClick <| SelectExperience c] + [ img_ [src_ <| ms <| Pack.icon <> "read.svg"], span_ [] [text "read"] ] el (Watch c) = a_ - [class_ "wrs-button", onClick $ StartWatching c] - [ img_ [src_ $ ms $ Pack.icon <> "watch.svg"], + [class_ "wrs-button", onClick <| StartWatching c] + [ img_ [src_ <| ms <| Pack.icon <> "watch.svg"], span_ [] [text "watch"] ] @@ -257,12 +257,12 @@ initForm uri_ = -- | Hacky way to initialize the 'ComicReaderState' from the Api.URI. detectPlayerState :: Api.URI -> ComicReaderState -detectPlayerState u = case List.splitOn "/" $ Api.uriPath u of +detectPlayerState u = case List.splitOn "/" <| Api.uriPath u of ["", "comic", id, pg, "experience"] -> ChooseExperience (ComicId id) (toPage pg) - ["", "comic", id, _, "video"] -> Watching $ ComicId id + ["", "comic", id, _, "video"] -> Watching <| ComicId id ["", "comic", id, pg, "full"] -> Reading Full (ComicId id) (toPage pg) ["", "comic", id, pg] -> Reading Spread (ComicId id) (toPage pg) - ["", "comic", id] -> Cover $ ComicId id + ["", "comic", id] -> Cover <| ComicId id _ -> NotReading where toPage pg = fromMaybe 1 (readMaybe pg :: Maybe PageNumber) @@ -344,7 +344,7 @@ homeProxy :: Proxy Home homeProxy = Proxy homeLink :: Api.URI -homeLink = linkURI $ Api.safeLink front homeProxy +homeLink = linkURI <| Api.safeLink front homeProxy where front = Proxy :: Proxy Home @@ -367,7 +367,7 @@ loginProxy :: Proxy Login loginProxy = Proxy loginLink :: Api.URI -loginLink = linkURI $ Api.safeLink pubRoutes loginProxy +loginLink = linkURI <| Api.safeLink pubRoutes loginProxy login :: form -> View Move login _ = @@ -377,7 +377,7 @@ login _ = [id_ "login-inner"] [ img_ [ class_ fadeIn, - src_ $ ms $ Pack.cdnEdge <> "/old-assets/images/icons/hero-large.png" + src_ <| ms <| Pack.cdnEdge <> "/old-assets/images/icons/hero-large.png" ], hr_ [class_ fadeIn], form_ @@ -398,14 +398,14 @@ login _ = ], hr_ [class_ fadeIn], p_ - [class_ $ "help " <> fadeIn] + [class_ <| "help " <> fadeIn] [ a_ [href_ "#"] [text "Forgot your username or password?"], a_ [href_ "#"] [text "Don't have an account? Sign Up"] ], img_ [ id_ "hero-logo", class_ "blur-out", - src_ $ ms $ Pack.cdnEdge <> "/old-assets/images/icons/success-her-image.png" + src_ <| ms <| Pack.cdnEdge <> "/old-assets/images/icons/success-her-image.png" ] ] ] @@ -418,7 +418,7 @@ login _ = type Discover = "discover" :> View Move discoverLink :: Api.URI -discoverLink = linkURI $ Api.safeLink routes discoverProxy +discoverLink = linkURI <| Api.safeLink routes discoverProxy discoverProxy :: Proxy Discover discoverProxy = Proxy @@ -428,7 +428,7 @@ discover form@Form {user = u} = template "discover" [ topbar, - main_ [id_ "app-body"] $ case appComics form of + main_ [id_ "app-body"] <| case appComics form of NotAsked -> [loading] Loading -> [loading] Failure _ -> [nocomics] @@ -436,7 +436,7 @@ discover form@Form {user = u} = Success (comic : rest) -> [ feature comic u, shelf "Recent Releases" (comic : rest), - maybeView (`info` u) $ dMediaInfo form + maybeView (`info` u) <| dMediaInfo form ], appmenu, discoverFooter @@ -452,11 +452,11 @@ discoverFooter = [id_ "app-foot-social", css euro] [ div_ [class_ "row is-marginless"] - [ smallImg "facebook.png" $ Just "https://www.facebook.com/musicmeetscomics", - smallImg "twitter.png" $ Just "https://twitter.com/musicmeetscomic", - smallImg "instagram.png" $ Just "https://www.instagram.com/musicmeetscomics/", - smallImg "spotify.png" $ Just "https://open.spotify.com/user/i4ntfg6ganjgxdsylinigcjlq?si=ymWsSkwsT9iaLw2LeAJNNg", - smallImg "youtube.png" $ Just "https://www.youtube.com/channel/UCnNPLiuJ1ueo1KTPgHDE7lA/" + [ smallImg "facebook.png" <| Just "https://www.facebook.com/musicmeetscomics", + smallImg "twitter.png" <| Just "https://twitter.com/musicmeetscomic", + smallImg "instagram.png" <| Just "https://www.instagram.com/musicmeetscomics/", + smallImg "spotify.png" <| Just "https://open.spotify.com/user/i4ntfg6ganjgxdsylinigcjlq?si=ymWsSkwsT9iaLw2LeAJNNg", + smallImg "youtube.png" <| Just "https://www.youtube.com/channel/UCnNPLiuJ1ueo1KTPgHDE7lA/" ], div_ [class_ "row"] [text "Team | Contact Us | Privacy Policy"] ], @@ -467,7 +467,7 @@ discoverFooter = ], div_ [css euro, id_ "app-foot-logo", onClick Dumpform] - [ a_ [class_ "social-icon", href_ "#"] [img_ [src_ $ ms $ Pack.icon <> "hero-logo.svg"]], + [ a_ [class_ "social-icon", href_ "#"] [img_ [src_ <| ms <| Pack.icon <> "hero-logo.svg"]], span_ [] [text "© Hero Records, Inc. All Rights Reserved"] ] ] @@ -477,7 +477,7 @@ discoverFooter = smallImg x lnk = a_ (attrs lnk) - [img_ [src_ $ ms $ Pack.cdnEdge <> "/old-assets/images/icons/" <> x]] + [img_ [src_ <| ms <| Pack.cdnEdge <> "/old-assets/images/icons/" <> x]] -- ** comic @@ -504,12 +504,12 @@ instance IsMediaObject Comic where [] [ a_ [ class_ "comic grow clickable", - id_ $ "comic-" <> ms comicId, - onClick $ SetMediaInfo $ Just c + id_ <| "comic-" <> ms comicId, + onClick <| SetMediaInfo <| Just c ] - [ img_ [src_ $ ms $ Pack.demo <> comicSlug c <> ".png"], - span_ [] [text $ "Issue #" <> ms comicIssue], - span_ [] [text $ ms comicName] + [ img_ [src_ <| ms <| Pack.demo <> comicSlug c <> ".png"], + span_ [] [text <| "Issue #" <> ms comicIssue], + span_ [] [text <| ms comicName] ] ] feature comic lib = @@ -517,7 +517,7 @@ instance IsMediaObject Comic where [id_ "featured-comic"] [ img_ [ id_ "featured-banner", - src_ $ ms $ Pack.demo <> "feature-banner.png" + src_ <| ms <| Pack.demo <> "feature-banner.png" ], div_ [id_ "featured-content"] @@ -530,15 +530,15 @@ instance IsMediaObject Comic where [class_ "comic-logo"] [ img_ [ src_ - $ ms - $ Pack.demo <> comicSlug comic <> "-logo.png" + <| ms + <| Pack.demo <> comicSlug comic <> "-logo.png" ] ], - div_ [class_ "comic-action-menu"] $ - el <$> [Watch comic, Read comic, Save comic lib], + div_ [class_ "comic-action-menu"] <| + el </ [Watch comic, Read comic, Save comic lib], p_ [class_ "description"] - [ text . ms $ comicDescription comic + [ text . ms <| comicDescription comic ] ] ] @@ -547,22 +547,22 @@ instance IsMediaObject Comic where [class_ "media-info", css euro] [ div_ [class_ "media-info-meta"] - [ column [img_ [src_ $ ms $ Pack.demo <> "dmc-widethumb.png"]], + [ column [img_ [src_ <| ms <| Pack.demo <> "dmc-widethumb.png"]], column - [ span_ [style_ title] [text $ ms comicName], - span_ [style_ subtitle] [text $ "Issue #" <> ms comicIssue], + [ span_ [style_ title] [text <| ms comicName], + span_ [style_ subtitle] [text <| "Issue #" <> ms comicIssue], span_ [] [text "Released: "], - span_ [] [text $ "Pages: " <> ms (show comicPages :: String)] + span_ [] [text <| "Pages: " <> ms (show comicPages :: String)] ] ], div_ [class_ "media-info-summary"] [ p_ - [style_ $ uppercase <> bold <> Look.expanded <> "font-size" =: ".8rem"] + [style_ <| uppercase <> bold <> Look.expanded <> "font-size" =: ".8rem"] [text "Summary"], - p_ [] [text $ ms comicDescription] + p_ [] [text <| ms comicDescription] ], - div_ [class_ "media-info-actions"] $ el <$> [Save c lib, Read c, Watch c] + div_ [class_ "media-info-actions"] <| el </ [Save c lib, Read c, Watch c] -- , row [ text "credits" ] ] where @@ -586,7 +586,7 @@ comicCover :: ComicId -> Form -> View Move comicCover comicId_ = comicReader comicId_ 1 comicLink :: ComicId -> Api.URI -comicLink comicId_ = linkURI $ Api.safeLink routes comicProxy comicId_ +comicLink comicId_ = linkURI <| Api.safeLink routes comicProxy comicId_ -- ** chooseExperience @@ -602,7 +602,7 @@ chooseExperienceProxy = Proxy chooseExperienceLink :: ComicId -> PageNumber -> Api.URI chooseExperienceLink id page = - linkURI $ Api.safeLink routes chooseExperienceProxy id page + linkURI <| Api.safeLink routes chooseExperienceProxy id page chooseExperiencePage :: Comic -> PageNumber -> Form -> View Move chooseExperiencePage comic page form = @@ -613,7 +613,7 @@ chooseExperiencePage comic page form = [id_ "app-body"] [ h2_ [] [text "Choose Your Musical Experience"], p_ [] [text experienceBlurb], - ul_ [] $ li comic </ experiences + ul_ [] <| li comic </ experiences ], appmenu, comicControls comic page form @@ -621,14 +621,14 @@ chooseExperiencePage comic page form = where li c (name, artist, track) = li_ - [onClick $ StartReading c] + [onClick <| StartReading c] [ div_ [] - [ img_ [src_ $ ms $ Pack.demo <> name <> ".png"], - span_ [] [text $ ms name] + [ img_ [src_ <| ms <| Pack.demo <> name <> ".png"], + span_ [] [text <| ms name] ], - span_ [css thicc] [text $ ms artist], - span_ [] [text $ ms track] + span_ [css thicc] [text <| ms artist], + span_ [] [text <| ms track] ] experiences :: [(Text, Text, Text)] experiences = @@ -703,7 +703,7 @@ comicReaderSpreadProxy = Proxy comicReaderSpreadLink :: ComicId -> PageNumber -> Api.URI comicReaderSpreadLink id page = - linkURI $ Api.safeLink routes comicReaderSpreadProxy id page + linkURI <| Api.safeLink routes comicReaderSpreadProxy id page comicSpread :: Comic -> PageNumber -> Form -> View Move comicSpread comic page form = @@ -740,7 +740,7 @@ comicSpread comic page form = closeButton :: View Move closeButton = a_ - [id_ "close-button", onClick $ ChangeURI discoverLink] + [id_ "close-button", onClick <| ChangeURI discoverLink] [text "x"] -- * comicReaderFull @@ -757,7 +757,7 @@ comicReaderFullProxy = Proxy comicReaderFullLink :: ComicId -> PageNumber -> Api.URI comicReaderFullLink id page = - linkURI $ Api.safeLink routes comicReaderFullProxy id page + linkURI <| Api.safeLink routes comicReaderFullProxy id page -- * comicVideo @@ -773,7 +773,7 @@ comicVideoProxy = Proxy comicVideoLink :: ComicId -> PageNumber -> Api.URI comicVideoLink id page = - linkURI $ Api.safeLink routes comicVideoProxy id page + linkURI <| Api.safeLink routes comicVideoProxy id page frameborder_ :: MisoString -> Attribute action frameborder_ = textProp "frameborder" @@ -812,7 +812,7 @@ mediaInfo (Just comic) user = div_ [class_ "media-info"] [info comic user] appmenu :: View Move -appmenu = aside_ [id_ "appmenu"] $ btn </ links +appmenu = aside_ [id_ "appmenu"] <| btn </ links where links = -- these extra 'discoverLink's are just dummies @@ -825,9 +825,9 @@ appmenu = aside_ [id_ "appmenu"] $ btn </ links btn (lnk, img, label) = a_ [ class_ "button", - onPreventClick $ ChangeURI lnk + onPreventClick <| ChangeURI lnk ] - [ img_ [src_ $ ms $ Pack.icon <> img], + [ img_ [src_ <| ms <| Pack.icon <> img], span_ [] [text label] ] @@ -844,7 +844,7 @@ shelf title comics = div_ [class_ "shelf"] [ div_ [class_ "shelf-head"] [text title], - ul_ [class_ "shelf-body"] $ thumbnail </ comics + ul_ [class_ "shelf-body"] <| thumbnail </ comics ] viewOr404 :: @@ -865,7 +865,7 @@ template id = div_ [id_ id, class_ "app is-black"] padLeft :: Int -> MisoString padLeft n | n < 10 = ms ("0" <> Legacy.show n) - | otherwise = ms $ Legacy.show n + | otherwise = ms <| Legacy.show n comicControls :: Comic -> PageNumber -> Form -> View Move comicControls comic page form = @@ -877,31 +877,31 @@ comicControls comic page form = ] [ audio_ [id_ audioId, loop_ True, crossorigin_ "anonymous"] - [source_ [src_ $ ms $ Pack.demo <> "stars-instrumental.mp3"]], - el $ PlayPause audioId $ cpAudioState form, + [source_ [src_ <| ms <| Pack.demo <> "stars-instrumental.mp3"]], + el <| PlayPause audioId <| cpAudioState form, span_ - [css $ euro <> thicc <> smol <> wide] + [css <| euro <> thicc <> smol <> wide] [text "Experiencing: Original"] ], div_ [class_ "comic-controls-pages", css euro] - [ el $ Arrow PrevPage, - span_ [] [text $ leftPage <> "-" <> rightPage <> " of " <> totalpages], - el $ Arrow NextPage + [ el <| Arrow PrevPage, + span_ [] [text <| leftPage <> "-" <> rightPage <> " of " <> totalpages], + el <| Arrow NextPage ], div_ [class_ "comic-controls-share"] - [ el $ SaveIcon comic $ user form, - el $ ZoomIcon (magnification form) comic page, + [ el <| SaveIcon comic <| user form, + el <| ZoomIcon (magnification form) comic page, button_ [class_ "button icon is-large", onClick ToggleFullscreen] [i_ [class_ "fa fa-expand"] []] ] ] where - leftPage = ms . Legacy.show $ page - rightPage = ms . Legacy.show $ 1 + page - totalpages = ms . Legacy.show $ comicPages comic + leftPage = ms . Legacy.show <| page + rightPage = ms . Legacy.show <| 1 + page + totalpages = ms . Legacy.show <| comicPages comic topbar :: View Move topbar = @@ -909,9 +909,9 @@ topbar = [id_ "app-head", class_ "is-black", css euro] [ a_ [ class_ "button is-medium is-black", - onClick $ ChangeURI discoverLink + onClick <| ChangeURI discoverLink ] - [img_ [src_ $ ms $ Pack.icon <> "hero-logo.svg"]], + [img_ [src_ <| ms <| Pack.icon <> "hero-logo.svg"]], div_ [id_ "app-head-right"] [ button_ @@ -919,7 +919,7 @@ topbar = [i_ [class_ "fas fa-search"] []], button_ [ class_ "button is-medium is-black is-size-7", - css $ euro <> wide <> thicc + css <| euro <> wide <> thicc ] [text "News"], span_ @@ -930,10 +930,10 @@ topbar = ] row :: [View Move] -> View Move -row = div_ [css $ Clay.display Clay.flex <> Clay.flexDirection Clay.row] +row = div_ [css <| Clay.display Clay.flex <> Clay.flexDirection Clay.row] column :: [View Move] -> View Move -column = div_ [css $ Clay.display Clay.flex <> Clay.flexDirection Clay.column] +column = div_ [css <| Clay.display Clay.flex <> Clay.flexDirection Clay.column] -- | Links the404 :: form -> View Move diff --git a/Hero/Host.hs b/Hero/Host.hs index 326738b..d547fa5 100644 --- a/Hero/Host.hs +++ b/Hero/Host.hs @@ -14,7 +14,7 @@ -- | Hero web app -- --- : exe mmc +-- : out mmc -- -- : dep acid-state -- : dep aeson @@ -90,10 +90,10 @@ main = bracket startup shutdown run keep <- Keep.open (heroKeep cfg) skey <- upsertKey (heroSkey cfg) say "hero" - prn $ "port: " ++ show (heroPort cfg) - prn $ "keep: " ++ heroKeep cfg - prn $ "node: " ++ heroNode cfg - prn $ "skey: " ++ heroSkey cfg + prn <| "port: " ++ show (heroPort cfg) + prn <| "keep: " ++ heroKeep cfg + prn <| "node: " ++ heroNode cfg + prn <| "skey: " ++ heroSkey cfg let jwts = Auth.defaultJWTSettings skey cs = Auth.defaultCookieSettings @@ -103,7 +103,7 @@ main = bracket startup shutdown run } ctx = cs :. jwts :. EmptyContext proxy = Proxy @(AllRoutes '[Auth.JWT, Auth.Cookie]) - static = serveDirectoryWith $ defaultWebAppSettings $ heroNode cfg + static = serveDirectoryWith <| defaultWebAppSettings <| heroNode cfg server = -- assets, auth, and the homepage is public static @@ -200,13 +200,13 @@ wrapAuth f authResult = case authResult of Auth.Indefinite -> Auth.throwAll err422 jsonHandlers :: AcidState Keep.HeroKeep -> User -> Server JsonApi -jsonHandlers keep _ = Acid.query' keep $ Keep.GetComics 10 +jsonHandlers keep _ = Acid.query' keep <| Keep.GetComics 10 type CssRoute = "css" :> "main.css" :> Get '[CSS] Text cssHandlers :: Server CssRoute cssHandlers = - return . Lazy.toStrict . Clay.render $ Typography.main <> Look.main + return . Lazy.toStrict . Clay.render <| Typography.main <> Look.main type AuthRoute = "auth" @@ -241,16 +241,16 @@ authHandler :: authHandler cookieSettings jwtSettings loginForm = case loginForm of (LoginForm "ben@bsima.me" "test") -> - applyCreds $ User "ben@bsima.me" "ben" [] + applyCreds <| User "ben@bsima.me" "ben" [] (LoginForm "mcovino@heroprojects.io" "test") -> - applyCreds $ User "mcovino@heroprojects.io" "mike" [] + applyCreds <| User "mcovino@heroprojects.io" "mike" [] _ -> throwError err401 where applyCreds usr = do - mApplyCookies <- liftIO $ Auth.acceptLogin cookieSettings jwtSettings usr + mApplyCookies <- liftIO <| Auth.acceptLogin cookieSettings jwtSettings usr case mApplyCookies of Nothing -> throwError err401 - Just applyCookies -> return $ applyCookies usr + Just applyCookies -> return <| applyCookies usr -- | See also 'server' above type AllRoutes auths = @@ -282,8 +282,8 @@ instance L.ToHtml a => L.ToHtml (Templated a) where toHtmlRaw = L.toHtml toHtml (Templated x) = do L.doctype_ - L.html_ [L.lang_ "en"] $ do - L.head_ $ do + L.html_ [L.lang_ "en"] <| do + L.head_ <| do L.title_ "Hero [alpha]" L.link_ [L.rel_ "manifest", L.href_ "/manifest.json"] L.link_ [L.rel_ "icon", L.type_ ""] @@ -291,7 +291,7 @@ instance L.ToHtml a => L.ToHtml (Templated a) where L.link_ [ L.rel_ "apple-touch-icon", L.sizes_ "180x180", - L.href_ $ + L.href_ <| Pack.cdnEdge <> "/old-assets/images/favicons/apple-touch-icon.png" ] @@ -299,7 +299,7 @@ instance L.ToHtml a => L.ToHtml (Templated a) where [ L.rel_ "icon", L.type_ "image/png", L.sizes_ "32x32", - L.href_ $ + L.href_ <| Pack.cdnEdge <> "/old-assets/images/favicons/favicon-32x32.png" ] @@ -307,19 +307,19 @@ instance L.ToHtml a => L.ToHtml (Templated a) where [ L.rel_ "icon", L.type_ "image/png", L.sizes_ "16x16", - L.href_ $ + L.href_ <| Pack.cdnEdge <> "/old-assets/images/favicons/favicon-16x16.png" ] L.link_ [ L.rel_ "manifest", - L.href_ $ + L.href_ <| Pack.cdnEdge <> "/old-assets/images/favicons/manifest.json" ] L.link_ [ L.rel_ "mask-icon", - L.href_ $ + L.href_ <| Pack.cdnEdge <> "/old-assets/images/favicons/safari-pinned-tab.svg" ] @@ -351,12 +351,12 @@ instance L.ToHtml a => L.ToHtml (Templated a) where handle404 :: Application handle404 _ respond = respond - $ responseLBS status404 [("Content-Type", "text/html")] - $ renderBS - $ toHtml - $ Templated - $ the404 - $ initForm homeLink + <| responseLBS status404 [("Content-Type", "text/html")] + <| renderBS + <| toHtml + <| Templated + <| the404 + <| initForm homeLink fontAwesomeRef :: MisoString fontAwesomeRef = "https://use.fontawesome.com/releases/v5.7.2/css/all.css" @@ -373,30 +373,30 @@ bulmaRef = "https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css" homeHandler :: Handler (Templated (View Move)) -homeHandler = pure . Templated . home $ initForm homeLink +homeHandler = pure . Templated . home <| initForm homeLink comicCoverHandler :: ComicId -> Handler (Templated (View Move)) comicCoverHandler id = - pure . Templated . comicCover id . initForm $ comicLink id + pure . Templated . comicCover id . initForm <| comicLink id comicPageHandler :: ComicId -> PageNumber -> Handler (Templated (View Move)) comicPageHandler id n = - pure . Templated . comicReader id n . initForm $ comicReaderSpreadLink id n + pure . Templated . comicReader id n . initForm <| comicReaderSpreadLink id n comicPageFullHandler :: ComicId -> PageNumber -> Handler (Templated (View Move)) comicPageFullHandler id n = - pure . Templated . comicReader id n . initForm $ comicReaderFullLink id n + pure . Templated . comicReader id n . initForm <| comicReaderFullLink id n comicVideoHandler :: ComicId -> PageNumber -> Handler (Templated (View Move)) comicVideoHandler id n = - pure . Templated . comicReader id n . initForm $ comicVideoLink id n + pure . Templated . comicReader id n . initForm <| comicVideoLink id n discoverHandler :: Handler (Templated (View Move)) -discoverHandler = pure . Templated . discover $ initForm discoverLink +discoverHandler = pure . Templated . discover <| initForm discoverLink chooseExperienceHandler :: ComicId -> PageNumber -> Handler (Templated (View Move)) chooseExperienceHandler id n = - pure . Templated . comicReader id n . initForm $ chooseExperienceLink id n + pure . Templated . comicReader id n . initForm <| chooseExperienceLink id n loginHandler :: Handler (Templated (View Move)) -loginHandler = pure . Templated . login $ initForm loginLink +loginHandler = pure . Templated . login <| initForm loginLink diff --git a/Hero/Look/Typography.hs b/Hero/Look/Typography.hs index d51cdbc..9e35ef5 100644 --- a/Hero/Look/Typography.hs +++ b/Hero/Look/Typography.hs @@ -52,7 +52,7 @@ fontRoot = Pack.cdnEdge <> "/old-assets/fonts/eurostile/Eurostile" -- | font faces fonts :: Css fonts = - mconcat $ + mconcat <| mkEuro </ [ ("-Reg.otf", OpenType, fontWeight normal <> fontStyle normal), ("LTStd-Bold.otf", OpenType, thicc <> norm), @@ -63,9 +63,9 @@ fonts = ] where mkEuro :: (Text, FontFaceFormat, Css) -> Css - mkEuro (sufx, fmt, extra) = fontFace $ do + mkEuro (sufx, fmt, extra) = fontFace <| do fontFamily ["Eurostile"] [] - fontFaceSrc [FontFaceSrcUrl (fontRoot <> sufx) $ Just fmt] + fontFaceSrc [FontFaceSrcUrl (fontRoot <> sufx) <| Just fmt] extra -- TODO: add the below to Clay.Font upstream diff --git a/Hero/Node.hs b/Hero/Node.hs index 9934fd3..70b8217 100644 --- a/Hero/Node.hs +++ b/Hero/Node.hs @@ -5,7 +5,7 @@ -- | Hero app frontend -- --- : exe mmc.js +-- : out mmc.js -- -- : dep aeson -- : dep clay diff --git a/Hero/Prod.nix b/Hero/Prod.nix index d7ab1fe..cc54f95 100644 --- a/Hero/Prod.nix +++ b/Hero/Prod.nix @@ -1,5 +1,16 @@ -{ config, pkgs, lib, ... }: -{ +{ bild, lib }: + +# Production server for herocomics.app + +bild.os { + imports = [ + ../Biz/OsBase.nix + ../Biz/Packages.nix + ../Biz/Users.nix + ./Service.nix + ]; + networking.hostName = "prod-herocomics"; + networking.domain = "herocomics.app"; boot.loader.grub.device = "/dev/vda"; fileSystems."/" = { device = "/dev/vda1"; fsType = "ext4"; }; networking = { @@ -27,8 +38,18 @@ }; }; - services.udev.extraRules = '' - ATTR{address}=="b2:63:c4:e5:d6:36", NAME="eth0" - ''; + services = { + herocomics = { + enable = true; + port = 3000; + host = bild.ghc ./Host.hs; + node = bild.ghcjs ./Node.hs; + keep = "/var/lib/hero"; + }; + + udev.extraRules = '' + ATTR{address}=="b2:63:c4:e5:d6:36", NAME="eth0" + ''; + }; } diff --git a/Que/apidocs.md b/Que/Apidocs.md index f400889..f400889 100644 --- a/Que/apidocs.md +++ b/Que/Apidocs.md diff --git a/Que/client.py b/Que/Client.py index 1063eb8..1063eb8 100755 --- a/Que/client.py +++ b/Que/Client.py diff --git a/Que/Host.hs b/Que/Host.hs index 3303709..b8e7a1a 100644 --- a/Que/Host.hs +++ b/Que/Host.hs @@ -11,7 +11,7 @@ -- - <https://github.com/hargettp/courier> -- - sorta: <https://ngrok.com/> and <https://localtunnel.github.io/www/> -- --- : exe que-server +-- : out que-server -- -- : dep async -- : dep envy diff --git a/Que/index.md b/Que/Index.md index a9db12e..a9db12e 100644 --- a/Que/index.md +++ b/Que/Index.md diff --git a/Que/Prod.nix b/Que/Prod.nix index 23c6f0a..b755d7c 100644 --- a/Que/Prod.nix +++ b/Que/Prod.nix @@ -1,5 +1,22 @@ -{ config, pkgs, lib, ... }: -{ +{ bild, lib }: + +# The production server for que.run + +bild.os { + imports = [ + ../Biz/OsBase.nix + ../Biz/Packages.nix + ../Biz/Users.nix + ./Host.nix + ./Site.nix + ]; + networking.hostName = "prod-que"; + networking.domain = "que.run"; + services.que-server = { + enable = true; + port = 80; + package = bild.ghc ./Host.hs; + }; boot.loader.grub.device = "/dev/vda"; fileSystems."/" = { device = "/dev/vda1"; fsType = "ext4"; }; swapDevices = [ @@ -30,7 +47,15 @@ }; }; }; - services.udev.extraRules = '' - ATTR{address}=="7a:92:a5:c6:db:c3", NAME="eth0" - ''; + services = { + que-website = { + enable = true; + namespace = "_"; + package = bild.ghc ./Site.hs; + }; + + udev.extraRules = '' + ATTR{address}=="7a:92:a5:c6:db:c3", NAME="eth0" + ''; + }; } diff --git a/Que/quescripts.md b/Que/Quescripts.md index 77e7004..77e7004 100644 --- a/Que/quescripts.md +++ b/Que/Quescripts.md diff --git a/Que/Site.hs b/Que/Site.hs index 794dd04..5d2dbb8 100644 --- a/Que/Site.hs +++ b/Que/Site.hs @@ -5,7 +5,7 @@ -- | spawns a few processes that serve the que.run website -- --- : exe que-website +-- : out que-website -- -- : dep async -- : dep config-ini diff --git a/Que/Site.nix b/Que/Site.nix index 685b3a6..ba2eeb2 100644 --- a/Que/Site.nix +++ b/Que/Site.nix @@ -5,6 +5,8 @@ , modulesPath }: + + let cfg = config.services.que-website; static = pkgs.stdenv.mkDerivation { diff --git a/Que/style.css b/Que/Style.css index f8d1ca4..f8d1ca4 100644 --- a/Que/style.css +++ b/Que/Style.css diff --git a/Que/tutorial.md b/Que/Tutorial.md index 6542ad3..6542ad3 100644 --- a/Que/tutorial.md +++ b/Que/Tutorial.md diff --git a/default.nix b/default.nix deleted file mode 100644 index 882ffa5..0000000 --- a/default.nix +++ /dev/null @@ -1,97 +0,0 @@ -let - nixpkgs = import ./Biz/Bild/Nixpkgs.nix; - build = import ./Biz/Bild/Rules.nix { inherit nixpkgs; }; - nixos-mailserver = let ver = "v2.3.0"; in builtins.fetchTarball { - url = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver/-/archive/${ver}/nixos-mailserver-${ver}.tar.gz"; - sha256 = "0lpz08qviccvpfws2nm83n7m2r8add2wvfg9bljx9yxx8107r919"; - }; -in rec { - # Cloud infrastructure, always online. Mostly for messaging-related - # stuff. - # - Biz.Cloud = build.os { - imports = [ - ./Biz/OsBase.nix - ./Biz/Packages.nix - ./Biz/Users.nix - ./Biz/Cloud/Chat.nix - ./Biz/Cloud/Git.nix - ./Biz/Cloud/Hardware.nix - ./Biz/Cloud/Mail.nix - ./Biz/Cloud/Networking.nix - ./Biz/Cloud/Web.nix - ./Biz/Cloud/Znc.nix - nixos-mailserver - ]; - networking.hostName = "simatime"; - networking.domain = "simatime.com"; - }; - # Dev machine for work and building stuff. - # - Biz.Dev = build.os { - imports = [ - ./Biz/OsBase.nix - ./Biz/Packages.nix - ./Biz/Users.nix - ./Biz/Dev/Configuration.nix - ./Biz/Dev/Hardware.nix - ]; - networking.hostName = "lithium"; - networking.domain = "dev.simatime.com"; - }; - # The production server for que.run - # - Que.Prod = build.os { - imports = [ - ./Biz/OsBase.nix - ./Biz/Packages.nix - ./Biz/Users.nix - ./Que/Host.nix - ./Que/Site.nix - ./Que/Prod.nix - ]; - networking.hostName = "prod-que"; - networking.domain = "que.run"; - services.que-server = { - enable = true; - port = 80; - package = Que.Host; - }; - services.que-website = { - enable = true; - namespace = "_"; - package = Que.Site; - }; - }; - # Production server for herocomics.app - Hero.Prod = build.os { - imports = [ - ./Biz/OsBase.nix - ./Biz/Packages.nix - ./Biz/Users.nix - ./Hero/Service.nix - ./Hero/Prod.nix - ]; - networking.hostName = "prod-herocomics"; - networking.domain = "herocomics.app"; - services.herocomics = { - enable = true; - port = 3000; - host = Hero.Host; - node = Hero.Node; - keep = "/var/lib/hero"; - }; - }; - # Haskell targets - # - Biz.Ibb.Server = build.ghc Biz/Ibb/Server.hs; - Biz.Ibb.Client = build.ghcjs Biz/Ibb/Client.hs; - Hero.Host = build.ghc Hero/Host.hs; - Hero.Node = build.ghcjs Hero/Node.hs; - Que.Host = build.ghc ./Que/Host.hs; - Que.Site = build.ghc ./Que/Site.hs; - # Development environment - env = build.env; - # Fall through to any of our overlay packages - inherit nixpkgs; -} @@ -1 +1,3 @@ -(import ./default.nix).env +(import ./Biz/Bild/Rules.nix { + nixpkgs = import ./Biz/Bild/Nixpkgs.nix; +}).env |