about summary refs log tree commit diff
path: root/docker.nix
diff options
context:
space:
mode:
authorVika <vika@fireburn.ru>2022-05-24 17:18:30 +0300
committerVika <vika@fireburn.ru>2022-05-24 17:18:30 +0300
commit5610a5f0bf1a9df02bd3d5b55e2cdebef2440360 (patch)
tree8394bcf1dcc204043d7adeb8dde2e2746977606e /docker.nix
parent2f93873122b47e42f7ee1c38f1f04d052a63599c (diff)
flake.nix: reorganize
 - Kittybox's source code is moved to a subfolder
   - This improves build caching by Nix since it doesn't take changes
     to other files into account
 - Package and test definitions were spun into separate files
   - This makes my flake.nix much easier to navigate
   - This also makes it somewhat possible to use without flakes (but
     it is still not easy, so use flakes!)
 - Some attributes were moved in compliance with Nix 2.8's changes to
   flake schema
Diffstat (limited to 'docker.nix')
-rw-r--r--docker.nix43
1 files changed, 43 insertions, 0 deletions
diff --git a/docker.nix b/docker.nix
new file mode 100644
index 0000000..2ac09b6
--- /dev/null
+++ b/docker.nix
@@ -0,0 +1,43 @@
+{ kittybox, dockerTools, runtimeShell, rev ? "development", lastModifiedDate }:
+dockerTools.buildImage {
+  name = "kittybox";
+  tag = rev;
+  created = let
+    date = lastModifiedDate;
+  in builtins.concatStringsSep "" [
+    (builtins.substring 0 4 date)
+    "-"
+    (builtins.substring 4 2 date)
+    "-"
+    (builtins.substring 6 2 date)
+    "T"
+    (builtins.substring 8 2 date)
+    ":"
+    (builtins.substring 10 2 date)
+    ":"
+    (builtins.substring 12 2 date)
+    "Z"
+  ];
+
+  runAsRoot = ''
+    #!${runtimeShell}
+    ${dockerTools.shadowSetup}
+    groupadd -r kittybox
+    useradd -r -g kittybox kittybox
+    mkdir -p /data
+    chown kittybox:kittybox /data
+  '';
+
+  config = {
+    Cmd = [ "${kittybox}/bin/kittybox" ];
+    Env = [
+      "SERVE_AT=0.0.0.0:8080"
+      "BACKEND_URI=file:///data"
+      "RUST_LOG=info"
+    ];
+    WorkingDir = "/data";
+    Volumes = { "/data" = {}; };
+    User = "kittybox";
+    ExposedPorts = { "8080" = {}; };
+  };
+}