{ config, lib, pkgs, ... }: # Pi, a terminal coding agent, for the primary user, configured through # home-manager, which ships the package and manages global settings. # The login credential is left unmanaged, so it survives rebuilds. let cfg = config.modules.shell.pi; user = config.user.name; piDir = "${config.users.users.${user}.home}/.pi/agent"; vendoredPi = pkgs.pi-coding-agent.overrideAttrs { src = ../../../../../third_party/pi; patches = [ ]; }; in { options.modules.shell.pi = { enable = lib.mkEnableOption "Pi, a terminal coding agent, configured through home-manager"; }; config = lib.mkIf cfg.enable { home-manager.users.${user} = { programs.pi-coding-agent = { enable = true; package = vendoredPi; settings = { defaultProvider = "openai-codex"; defaultModel = "gpt-5.5"; defaultThinkingLevel = "medium"; theme = "dark"; enableInstallTelemetry = false; enableAnalytics = false; terminal.clearOnShrink = true; }; }; home.file = { # The first declarative rollout replaces the interactive settings file. # Login state stays in auth.json, which this module does not manage. "${piDir}/settings.json".force = true; }; }; }; }