summaryrefslogtreecommitdiff
path: root/src/assets/markov
diff options
context:
space:
mode:
authorBrian Picciano <mediocregopher@gmail.com>2021-04-22 11:07:31 -0600
committerBrian Picciano <mediocregopher@gmail.com>2021-04-22 11:21:13 -0600
commit9ef363410f21bc5e93e7693e1f2baa4d95ed214f (patch)
tree17bdcb1a081b1bd0d74792e9ec42b08024d47382 /src/assets/markov
parent6ecd78dc625850683f8388ea9ae653838d71ae94 (diff)
nix process composition
Diffstat (limited to 'src/assets/markov')
-rw-r--r--src/assets/markov/Makefile3
-rw-r--r--src/assets/markov/Makefile.md6
-rw-r--r--src/assets/markov/markov.nix63
-rw-r--r--src/assets/markov/markov.nix.md6
4 files changed, 78 insertions, 0 deletions
diff --git a/src/assets/markov/Makefile b/src/assets/markov/Makefile
new file mode 100644
index 0000000..4195baf
--- /dev/null
+++ b/src/assets/markov/Makefile
@@ -0,0 +1,3 @@
+bundle:
+ nix-build markov.nix -A nixBundle
+ ./result/bin/nix-bundle '((import ./markov.nix) {}).entrypoint' '/bin/markov'
diff --git a/src/assets/markov/Makefile.md b/src/assets/markov/Makefile.md
new file mode 100644
index 0000000..a680113
--- /dev/null
+++ b/src/assets/markov/Makefile.md
@@ -0,0 +1,6 @@
+---
+layout: code
+include: Makefile
+lang: make
+---
+
diff --git a/src/assets/markov/markov.nix b/src/assets/markov/markov.nix
new file mode 100644
index 0000000..042ab8d
--- /dev/null
+++ b/src/assets/markov/markov.nix
@@ -0,0 +1,63 @@
+{
+ pkgs ? import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/d50923ab2d308a1ddb21594ba6ae064cab65d8ae.tar.gz") {}
+}:
+
+rec {
+
+ markov = pkgs.buildGoModule {
+ pname = "markov";
+ version = "618b666484566de71f2d59114d011ff4621cf375";
+ src = pkgs.fetchFromGitHub {
+ owner = "mediocregopher";
+ repo = "markov";
+ rev = "618b666484566de71f2d59114d011ff4621cf375";
+ sha256 = "1sx9dr1q3vr3q8nyx3965x6259iyl85591vx815g1xacygv4i4fg";
+ };
+ vendorSha256 = "048wygrmv26fsnypsp6vxf89z3j0gs9f1w4i63khx7h134yxhbc6";
+ };
+
+ entrypoint = pkgs.writeScriptBin "markov" ''
+ #!${pkgs.stdenv.shell}
+
+ # On every run we create new, temporary, configuration files for redis and
+ # circus. To do this we create a new config directory.
+ markovCfgDir=$(${pkgs.coreutils}/bin/mktemp -d)
+ echo "generating configuration to $markovCfgDir"
+
+ ${pkgs.coreutils}/bin/cat >$markovCfgDir/redis.conf <<EOF
+ save ""
+ dir "''${MARKOV_DATA_DIR:-$(pwd)}"
+ appendonly yes
+ appendfilename "markov.data"
+ EOF
+
+ ${pkgs.coreutils}/bin/cat >$markovCfgDir/circus.ini <<EOF
+
+ [circus]
+
+ [watcher:markov]
+ cmd = ${markov}/bin/markov \
+ -listenAddr ''${MARKOV_LISTEN_ADDR:-localhost:8000} \
+ -timeout ''${MARKOV_TIMEOUT:-720}
+ numprocesses = 1
+
+ [watcher:redis]
+ cmd = ${pkgs.redis}/bin/redis-server $markovCfgDir/redis.conf
+ numprocesses = 1
+ EOF
+
+ exec ${pkgs.circus}/bin/circusd $markovCfgDir/circus.ini
+ '';
+
+ nixBundleSrc = pkgs.fetchFromGitHub {
+ owner = "matthewbauer";
+ repo = "nix-bundle";
+ rev = "8e396533ef8f3e8a769037476824d668409b4a74";
+ sha256 = "1lrq0990p07av42xz203w64abv2rz9xd8jrzxyvzzwj7vjj7qwyw";
+ };
+
+ nixBundle = (import "${nixBundleSrc}/release.nix") {
+ nixpkgs' = pkgs;
+ };
+}
+
diff --git a/src/assets/markov/markov.nix.md b/src/assets/markov/markov.nix.md
new file mode 100644
index 0000000..57802b4
--- /dev/null
+++ b/src/assets/markov/markov.nix.md
@@ -0,0 +1,6 @@
+---
+layout: code
+include: markov.nix
+lang: plain
+---
+