dotfiles/modules/nixos/services/ollama/default.nix
2025-06-10 15:54:00 -05:00

117 lines
2.5 KiB
Nix
Executable file

{
flake,
config,
pkgs,
...
}:
let
inherit (flake.config.machines.devices)
mars
ceres
;
inherit (flake.config.services.instances)
ollama
web
;
service = ollama;
localhost1 = web.localhost.address0;
localhost2 = web.localhost.address1;
hostname = config.networking.hostName;
host = service.domains.url0;
localhostLogic = if hostname == mars.name then localhost2 else localhost1;
caddyLogic =
if hostname == ceres.name then
{
caddy = {
virtualHosts = {
${host} = {
extraConfig = ''
reverse_proxy ${localhostLogic}:${toString service.ports.port0}
tls ${service.ssl.cert} ${service.ssl.key}
'';
};
};
};
}
else
{ };
mountLogic =
if hostname == ceres.name then
{
"/var/lib/${service.name}" = {
device = service.paths.path0;
fsType = "none";
options = [
"bind"
];
depends = [
ceres.storage0.mount
];
};
}
else
{ };
in
{
services = {
ollama =
{
enable = true;
group = service.name;
host = "http://${localhostLogic}";
user = service.name;
}
// (
if hostname == mars.name then
{
# models = service.paths.path1;
acceleration = "rocm";
# package = pkgs.ollama.override {
# acceleration = "rocm";
# };
}
else
{
port = service.ports.port1;
acceleration = false;
models = service.paths.path0;
}
);
open-webui = {
enable = true;
host = localhostLogic;
port = service.ports.port0;
environment = {
ENABLE_OLLAMA_API = "True";
ANONYMIZED_TELEMETRY = "False";
DO_NOT_TRACK = "True";
SCARF_NO_ANALYTICS = "True";
OLLAMA_BASE_URL = "http://${localhostLogic}:${toString service.ports.port1}";
WEBUI_AUTH = "True";
};
};
} // caddyLogic;
systemd.tmpfiles.rules = [
(
if hostname == mars.name then
"Z ${service.paths.path1} 0777 ${service.name} ${service.name} -"
else
"Z ${service.paths.path0} 0755 ${service.name} ${service.name} -"
)
];
networking = {
firewall = {
allowedTCPPorts = [
# 8080
service.ports.port0
service.ports.port1
];
};
};
fileSystems = mountLogic;
}