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