summaryrefslogtreecommitdiff
path: root/Omni/Dev/Beryllium/Ollama.nix
blob: 3f2398e4b1826e6388c47b86cb0f6903c815bb7c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{pkgs, ...}:
/*
Ollama API service

Don't put too much work into this, there's a much better and more complete
ollama service (with webui!) being built here:
https://github.com/NixOS/nixpkgs/pull/275448

If you want to spend time on it, spend time over there.
*/
let
  pkg = pkgs.unstable.ollama;
  ports = import ../../Cloud/Ports.nix;
in {
  systemd.services.ollama = {
    description = "ollama";
    after = ["network.target"];
    wantedBy = ["multi-user.target"];

    environment = {
      OLLAMA_HOST = "0.0.0.0:${toString ports.ollama}";
      # Where to store LLM model files.
      HOME = "%S/ollama";
      OLLAMA_MODELS = "%S/ollama/models";
      OLLAMA_DEBUG = "1";
    };

    serviceConfig = {
      ExecStart = "${pkg}/bin/ollama serve";
      User = "ollama";
      Group = "ollama";
      Type = "simple";
      Restart = "on-failure";
      RestartSec = 3;
      # Persistent storage for model files, i.e. /var/lib/<StateDirectory>
      StateDirectory = ["ollama"];
    };
  };

  # for administration, make this available to users' PATH
  environment.systemPackages = [pkg];

  users.groups.ollama = {};

  users.users.ollama = {
    group = "ollama";
    isSystemUser = true;
    extraGroups = ["render" "video"];
  };
}