summaryrefslogtreecommitdiff
path: root/Omni/Dev/Beryllium/Ava.nix
diff options
context:
space:
mode:
Diffstat (limited to 'Omni/Dev/Beryllium/Ava.nix')
-rw-r--r--Omni/Dev/Beryllium/Ava.nix81
1 files changed, 81 insertions, 0 deletions
diff --git a/Omni/Dev/Beryllium/Ava.nix b/Omni/Dev/Beryllium/Ava.nix
new file mode 100644
index 0000000..f0765cd
--- /dev/null
+++ b/Omni/Dev/Beryllium/Ava.nix
@@ -0,0 +1,81 @@
+{...}: let
+ bild = import ../../Bild.nix {};
+ avaPkg = bild.run ../../Ava.hs;
+
+ # Python environment for Ava's python_exec tool
+ avaPython = bild.python.pythonWith (p: [
+ p.requests # HTTP requests
+ p.beautifulsoup4 # HTML/XML parsing
+ p.lxml # Fast XML/HTML parser
+ p.pandas # Data analysis
+ p.numpy # Numerical computing
+ p.pyyaml # YAML parsing
+ p.python-dateutil # Date utilities
+ ]);
+
+ # Wrap ava binary with tools in PATH
+ avaWithTools = bild.stdenv.mkDerivation {
+ name = "ava-wrapped";
+ buildInputs = [bild.makeWrapper];
+ phases = ["installPhase"];
+ installPhase = ''
+ mkdir -p $out/bin
+ makeWrapper ${avaPkg}/bin/ava $out/bin/ava \
+ --prefix PATH : ${bild.lib.makeBinPath [
+ avaPython
+ bild.pkgs.jq
+ bild.pkgs.ripgrep
+ bild.pkgs.coreutils
+ bild.pkgs.git
+ bild.pkgs.sqlite
+ ]}
+ '';
+ };
+in {
+ systemd.services.ava = {
+ description = "Ava Telegram assistant";
+ after = ["network-online.target" "ollama.service"];
+ wants = ["network-online.target" "ollama.service"];
+ wantedBy = ["multi-user.target"];
+
+ serviceConfig = {
+ Type = "simple";
+ User = "ava";
+ Group = "users";
+ WorkingDirectory = "/home/ava/omni";
+
+ Environment = [
+ "AVA_DATA_ROOT=/home/ava"
+ "HOME=/home/ava"
+ "OLLAMA_URL=http://localhost:11434"
+ ];
+
+ EnvironmentFile = "/run/secrets/ava.env";
+
+ ExecStart = "${avaWithTools}/bin/ava";
+
+ StandardOutput = "journal";
+ StandardError = "journal";
+
+ Restart = "on-failure";
+ RestartSec = 5;
+
+ TimeoutStopSec = 90;
+ KillMode = "mixed";
+ KillSignal = "SIGTERM";
+ };
+ };
+
+ systemd.tmpfiles.rules = [
+ "d /home/ava 0755 ava users -"
+ "d /home/ava/omni 0755 ava users -"
+ "d /home/ava/skills 0755 ava users -"
+ "d /home/ava/outreach 0755 ava users -"
+ "d /home/ava/outreach/pending 0755 ava users -"
+ "d /home/ava/outreach/approved 0755 ava users -"
+ "d /home/ava/outreach/rejected 0755 ava users -"
+ "d /home/ava/outreach/sent 0755 ava users -"
+ "d /home/ava/users 0755 ava users -"
+ "d /home/ava/.local/share/omni 0755 ava users -"
+ ];
+}