diff --git a/modules/services/ollama.nix b/modules/services/ollama.nix index 66e1e8377..0cb1b2eee 100644 --- a/modules/services/ollama.nix +++ b/modules/services/ollama.nix @@ -76,7 +76,7 @@ in { }; config = mkIf cfg.enable { - systemd.user.services.ollama = { + systemd.user.services.ollama = mkIf pkgs.stdenv.isLinux { Unit = { Description = "Server for local large language models"; After = [ "network.target" ]; @@ -92,6 +92,21 @@ in { Install = { WantedBy = [ "default.target" ]; }; }; + launchd.agents.ollama = mkIf pkgs.stdenv.isDarwin { + enable = true; + config = { + ProgramArguments = [ "${getExe ollamaPackage}" "serve" ]; + EnvironmentVariables = cfg.environmentVariables // { + OLLAMA_HOST = "${cfg.host}:${toString cfg.port}"; + }; + KeepAlive = { + Crashed = true; + SuccessfulExit = false; + }; + ProcessType = "Background"; + }; + }; + home.packages = [ ollamaPackage ]; }; } diff --git a/tests/default.nix b/tests/default.nix index b77c354c5..f7778e445 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -185,6 +185,7 @@ in import nmtSrc { ./modules/services/git-sync-darwin ./modules/services/imapnotify-darwin ./modules/services/nix-gc-darwin + ./modules/services/ollama/darwin ./modules/targets-darwin ] ++ lib.optionals isLinux [ ./modules/config/i18n @@ -270,7 +271,7 @@ in import nmtSrc { ./modules/services/mpd-mpris ./modules/services/mpdris2 ./modules/services/nix-gc - ./modules/services/ollama + ./modules/services/ollama/linux ./modules/services/osmscout-server ./modules/services/pantalaimon ./modules/services/parcellite diff --git a/tests/modules/services/ollama/darwin/basic.nix b/tests/modules/services/ollama/darwin/basic.nix new file mode 100644 index 000000000..b9203cc7e --- /dev/null +++ b/tests/modules/services/ollama/darwin/basic.nix @@ -0,0 +1,24 @@ +{ lib, pkgs, ... }: + +lib.mkMerge [ + { + services.ollama = { + enable = true; + host = "localhost"; + port = 11111; + environmentVariables = { + OLLAMA_LLM_LIBRARY = "cpu"; + HIP_VISIBLE_DEVICES = "0,1"; + }; + }; + + test.stubs.ollama = { }; + } + (lib.mkIf pkgs.stdenv.isDarwin { + nmt.script = '' + serviceFile=LaunchAgents/org.nix-community.home.ollama.plist + assertFileExists "$serviceFile" + assertFileContent "$serviceFile" ${./expected-agent.plist} + ''; + }) +] diff --git a/tests/modules/services/ollama/darwin/default.nix b/tests/modules/services/ollama/darwin/default.nix new file mode 100644 index 000000000..418446cd6 --- /dev/null +++ b/tests/modules/services/ollama/darwin/default.nix @@ -0,0 +1 @@ +{ ollama-darwin = ./basic.nix; } diff --git a/tests/modules/services/ollama/darwin/expected-agent.plist b/tests/modules/services/ollama/darwin/expected-agent.plist new file mode 100644 index 000000000..a159fd980 --- /dev/null +++ b/tests/modules/services/ollama/darwin/expected-agent.plist @@ -0,0 +1,31 @@ + + + + + EnvironmentVariables + + HIP_VISIBLE_DEVICES + 0,1 + OLLAMA_HOST + localhost:11111 + OLLAMA_LLM_LIBRARY + cpu + + KeepAlive + + Crashed + + SuccessfulExit + + + Label + org.nix-community.home.ollama + ProcessType + Background + ProgramArguments + + @ollama@/bin/ollama + serve + + + diff --git a/tests/modules/services/ollama/basic.nix b/tests/modules/services/ollama/linux/basic.nix similarity index 100% rename from tests/modules/services/ollama/basic.nix rename to tests/modules/services/ollama/linux/basic.nix diff --git a/tests/modules/services/ollama/default.nix b/tests/modules/services/ollama/linux/default.nix similarity index 71% rename from tests/modules/services/ollama/default.nix rename to tests/modules/services/ollama/linux/default.nix index 84ad2c99e..a0c82ae86 100644 --- a/tests/modules/services/ollama/default.nix +++ b/tests/modules/services/ollama/linux/default.nix @@ -1,4 +1,4 @@ { - ollama-basic = ./basic.nix; + ollama-linux = ./basic.nix; ollama-set-environment-variables = ./set-environment-variables.nix; } diff --git a/tests/modules/services/ollama/set-environment-variables.nix b/tests/modules/services/ollama/linux/set-environment-variables.nix similarity index 100% rename from tests/modules/services/ollama/set-environment-variables.nix rename to tests/modules/services/ollama/linux/set-environment-variables.nix