99 lines
2.4 KiB
Nix
99 lines
2.4 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
with lib; let
|
|
cfg = config.services.ollama;
|
|
in {
|
|
options = {
|
|
services.ollama = {
|
|
enable = mkEnableOption "Ollama AI model runner";
|
|
|
|
package = mkOption {
|
|
type = types.package;
|
|
default = pkgs.ollama;
|
|
defaultText = literalExpression "pkgs.ollama";
|
|
description = "The ollama package to use.";
|
|
};
|
|
|
|
host = mkOption {
|
|
type = types.str;
|
|
default = "127.0.0.1";
|
|
description = "The host address to listen on.";
|
|
};
|
|
|
|
port = mkOption {
|
|
type = types.port;
|
|
default = 11434;
|
|
description = "The port to listen on.";
|
|
};
|
|
|
|
environmentVariables = mkOption {
|
|
type = types.attrs;
|
|
default = {};
|
|
description = "Environment variables to set for the Ollama service.";
|
|
};
|
|
|
|
loadModels = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [];
|
|
description = "List of models to load on startup.";
|
|
};
|
|
|
|
dataDir = mkOption {
|
|
type = types.path;
|
|
default = "/var/lib/ollama";
|
|
description = "Directory to store Ollama data.";
|
|
};
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
# users.users.ollama = {
|
|
# name = "ollama";
|
|
# uid = 601;
|
|
# gid = config.users.groups.ollama.gid;
|
|
# home = cfg.dataDir;
|
|
# createHome = true;
|
|
# description = "Ollama service user";
|
|
# };
|
|
#
|
|
# users.groups.ollama = {
|
|
# name = "ollama";
|
|
# gid = 602;
|
|
# };
|
|
|
|
launchd.daemons.ollama = {
|
|
path = [cfg.package];
|
|
command = "${cfg.package}/bin/ollama serve";
|
|
serviceConfig = {
|
|
Label = "com.ollama.service";
|
|
# ProgramArguments = ["serve"];
|
|
# WorkingDirectory = cfg.dataDir;
|
|
EnvironmentVariables =
|
|
{
|
|
OLLAMA_HOST = cfg.host;
|
|
OLLAMA_PORT = toString cfg.port;
|
|
}
|
|
// cfg.environmentVariables;
|
|
RunAtLoad = true;
|
|
KeepAlive = true;
|
|
# StandardOutPath = "/var/log/ollama.log";
|
|
# StandardErrorPath = "/var/log/ollama.error.log";
|
|
# UserName = "ollama";
|
|
# GroupName = "ollama";
|
|
};
|
|
};
|
|
|
|
# system.activationScripts.preActivation.text = mkIf (cfg.loadModels != []) ''
|
|
# # Load Ollama models
|
|
# ${concatMapStrings (model: ''
|
|
# ${cfg.package}/bin/ollama pull ${model}
|
|
# '')
|
|
# cfg.loadModels}
|
|
# '';
|
|
};
|
|
}
|