From 9ab3fb373a711b454b56e857a47be79414625f45 Mon Sep 17 00:00:00 2001 From: "Wyatt J. Miller" Date: Sun, 18 Oct 2026 18:28:30 -0400 Subject: [PATCH] add: ollama waybar integration, modified cloud config to add ollama systemd service --- defaults/waybar/config | 10 +++++++++- defaults/waybar/ollama.sh | 24 ++++++++++++++++++++++++ defaults/waybar/style.css | 3 ++- home/sway.nix | 1 + modules/machine/cloud/configuration.nix | 12 ++++++++++++ 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 defaults/waybar/ollama.sh diff --git a/defaults/waybar/config b/defaults/waybar/config index 9ef75e0..5483db2 100644 --- a/defaults/waybar/config +++ b/defaults/waybar/config @@ -2,7 +2,7 @@ "layer": "top", "modules-left": ["sway/workspaces"], "modules-center": ["clock"], - "modules-right": ["custom/playerctl", "custom/weather", "pulseaudio", "custom/network", "tray"], + "modules-right": ["custom/playerctl", "custom/weather", "pulseaudio", "custom/network", "custom/ollama", "tray"], "sway/workspaces": { "disable-scroll": true, "all-outputs": true, @@ -42,6 +42,14 @@ "interval": 5, "tooltip": false }, + "custom/ollama": { + "format": "{text}", + "return-type": "json", + "exec": "bash $HOME/.config/waybar/ollama.sh", + "on-click": "bash $HOME/.config/waybar/ollama.sh toggle", + "interval": 2, + "tooltip": true + }, "pulseaudio": { "format": "{icon} {volume}%", "format-bluetooth": "{icon} {volume}%", diff --git a/defaults/waybar/ollama.sh b/defaults/waybar/ollama.sh new file mode 100644 index 0000000..b98e561 --- /dev/null +++ b/defaults/waybar/ollama.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -u + +service=ollama.service + +# The shared Waybar config is also used by hosts without Ollama. +if ! systemctl --user cat "$service" >/dev/null 2>&1; then + exit 0 +fi + +if [[ ${1:-} == toggle ]]; then + if systemctl --user is-active --quiet "$service"; then + systemctl --user stop "$service" + else + systemctl --user start "$service" + fi + exit $? +fi + +if systemctl --user is-active --quiet "$service"; then + printf '%s\n' '{"text":"● Local AI","tooltip":"Ollama is running. Click to stop it.","class":"running"}' +else + printf '%s\n' '{"text":"● Local AI","tooltip":"Ollama is stopped. Click to start it.","class":"stopped"}' +fi diff --git a/defaults/waybar/style.css b/defaults/waybar/style.css index 246fd26..173b550 100644 --- a/defaults/waybar/style.css +++ b/defaults/waybar/style.css @@ -32,10 +32,11 @@ window#waybar { #memory, #pulseaudio, #custom-network, +#custom-ollama, #battery, #clock, #custom-playerctl { - padding: 0 10px; + padding: 0 5px; margin: 0 5px; } diff --git a/home/sway.nix b/home/sway.nix index 09acbef..b346650 100644 --- a/home/sway.nix +++ b/home/sway.nix @@ -37,6 +37,7 @@ in { xdg.configFile."waybar/config".source = lib.mkForce (dirs.defaults + /waybar/config); xdg.configFile."waybar/style.css".source = lib.mkForce (dirs.defaults + /waybar/style.css); xdg.configFile."waybar/network.sh".source = dirs.defaults + /waybar/network.sh; + xdg.configFile."waybar/ollama.sh".source = dirs.defaults + /waybar/ollama.sh; home.packages = with pkgs; [ curl iproute2 networkmanager ]; diff --git a/modules/machine/cloud/configuration.nix b/modules/machine/cloud/configuration.nix index f16afb4..b2335eb 100644 --- a/modules/machine/cloud/configuration.nix +++ b/modules/machine/cloud/configuration.nix @@ -86,6 +86,18 @@ in { vlc ]; + systemd.user.services.ollama = { + description = "Ollama local AI server"; + serviceConfig = { + ExecStart = "${pkgs.ollama-rocm}/bin/ollama serve"; + Restart = "on-failure"; + Environment = [ + "OLLAMA_HOST=0.0.0.0:11434" + "OLLAMA_CONTEXT_LENGTH=64000" + ]; + }; + }; + # Enable Polkit security.polkit.enable = true;