This repository has no description
2.6 kB
91 lines
1{ self, config, pkgs, ... }:
2let
3 opencrow = self.inputs.opencrow.packages.${pkgs.system}.opencrow;
4 pi = self.inputs.llm-agents.packages.${pkgs.system}.pi;
5in
6{
7 users.users.bot = {
8 isNormalUser = true;
9 home = "/home/bot";
10 createHome = true;
11 group = "users";
12 useDefaultShell = true;
13 openssh.authorizedKeys.keys = [
14 self.keys.ssh.barnacle.public
15 self.keys.ssh.yubi_pgp.public
16 self.keys.ssh.yubi1.public
17 self.keys.ssh.yubi2.public
18 self.keys.ssh.solo2.public
19 self.keys.ssh.xerxes.public
20 self.keys.ssh.massulus.public
21 ];
22 packages = [
23 opencrow
24 pi
25 pkgs.curl
26 pkgs.jq
27 pkgs.lynx
28 ];
29 };
30
31 clan.core.vars.generators.opencrow = {
32 prompts.matrix-access-token = {
33 description = "Matrix access token for @opencrow:lassul.us - register via synapse admin API using the registration_shared_secret";
34 type = "hidden";
35 };
36 files."opencrow.env" = { };
37 script = ''
38 cat > "$out/opencrow.env" << EOF
39 OPENCROW_MATRIX_ACCESS_TOKEN=$(cat $prompts/matrix-access-token)
40 EOF
41 '';
42 };
43
44 systemd.services.opencrow = {
45 description = "OpenCrow Matrix Bot";
46 wantedBy = [ "multi-user.target" ];
47 after = [ "network-online.target" ];
48 wants = [ "network-online.target" ];
49
50 path = [
51 opencrow
52 pi
53 pkgs.bash
54 pkgs.coreutils
55 pkgs.curl
56 pkgs.jq
57 pkgs.lynx
58 ];
59
60 environment = {
61 OPENCROW_MATRIX_HOMESERVER = "https://matrix.lassul.us";
62 OPENCROW_ALLOWED_USERS = "@lassulus:lassul.us";
63 OPENCROW_MATRIX_USER_ID = "@opencrow:lassul.us";
64 OPENCROW_MATRIX_DEVICE_ID = "AYBPKDHIDV";
65 OPENCROW_PI_SESSION_DIR = "/home/bot/opencrow/sessions";
66 OPENCROW_PI_WORKING_DIR = "/home/bot/opencrow";
67 OPENCROW_PI_SKILLS = "${opencrow}/share/opencrow/skills/web";
68 OPENCROW_PI_SKILLS_DIR = "/home/bot/skills";
69 OPENCROW_HEARTBEAT_INTERVAL = "10m";
70 OPENCROW_SOUL_FILE = "${opencrow}/share/opencrow/SOUL.md";
71 PI_CODING_AGENT_DIR = "/home/bot/opencrow/pi-agent";
72 };
73
74 serviceConfig = {
75 EnvironmentFile = config.clan.core.vars.generators.opencrow.files."opencrow.env".path;
76 ExecStart = "${opencrow}/bin/opencrow";
77 Restart = "on-failure";
78 RestartSec = 10;
79 User = "bot";
80 Group = "users";
81 WorkingDirectory = "/home/bot/opencrow";
82 };
83 };
84
85 # ensure working directory exists
86 systemd.tmpfiles.rules = [
87 "d /home/bot/opencrow 0750 bot users -"
88 "d /home/bot/opencrow/sessions 0750 bot users -"
89 "d /home/bot/opencrow/pi-agent 0750 bot users -"
90 ];
91}