guixsd-config

GuixSD configs for my systems
Log | Files | Refs

commit 2f4bd55297cb690237e16ddd92b2a5fb79b1b867
parent e08570af1f8e2e21e0d22319ba113c1a8ba1de18
Author: Vineet Kumar <git@vineetk.net>
Date:   Wed, 15 Apr 2026 10:56:17 -0400

emacs: add gptel-agent

Diffstat:
Mepistemia/files/emacs/.config/emacs/init.el | 47+++++++++++++++++++++++------------------------
Mepistemia/home/config.scm | 6++----
Mepistemia/packages/emacs.scm | 160+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 185 insertions(+), 28 deletions(-)

diff --git a/epistemia/files/emacs/.config/emacs/init.el b/epistemia/files/emacs/.config/emacs/init.el @@ -547,31 +547,30 @@ :host "llm.demiurge.epistemia" :endpoint "/v1/chat/completions" :stream t - :models '(Qwen3.5-0.8B - Qwen3.5-2B - Qwen3.5-4B - Qwen3.5-9B - Qwen3.5-27B - Qwen3.5-35B-A3B_128K - Qwen3.5-35B-A3B_256K - Qwen3.5-122B-A10B - Qwen3.5-397B-A17B + :models '(Qwen3.5-27B + Qwen3.5-35B-A3B Rocinante-X-12B-v1 - Ministral-3-14B-Instruct-2512 - Ministral-3-14B-Reasoning-2512 - Nanbeige4.1-3B)) - (gptel-make-openai "OpenRouter" - :host "openrouter.ai" - :endpoint "/api/v1/chat/completions" - :stream t - :key (auth-source-pick-first-password :host "openrouter.ai") - :models '(minimax/minimax-m2.7 - minimax/minimax-m2.5:free - anthropic/claude-haiku-4.5 - anthropic/claude-sonnet-4.6)) - :custom - (gptel-model "llama-swap:Qwen3.5-35B-A3B_128K") - (gptel-temperature nil)) + Ministral-3-14B-Instruct-2512)) + (gptel-make-openai "OpenRouter" + :host "openrouter.ai" + :endpoint "/api/v1/chat/completions" + :stream t + :key (auth-source-pick-first-password :host "openrouter.ai") + :models '(minimax/minimax-m2.7 + minimax/minimax-m2.5:free + anthropic/claude-sonnet-4.6)) + :custom + (gptel-model "llama-swap:Qwen3.5-35B-A3B") + (gptel-temperature nil) + (gptel-directives + '((default . "You are a large language model living in Emacs and a helpful assistant. Respond concisely.") + (programming . "You are a large language model and a careful programmer. Provide code and only code as output without any additional text, prompt or note.") + (writing . "You are a large language model and a writing assistant. Respond concisely.")))) + +(use-package gptel-agent + :after gptel + :config (gptel-agent-update) + :custom (gptel-agent-dirs '("~/.config/emacs/agents/"))) ;;;;;;;;; ;; RSS ;; diff --git a/epistemia/home/config.scm b/epistemia/home/config.scm @@ -82,10 +82,8 @@ emacs-exwm emacs-geiser emacs-geiser-guile - ((options->transformation - '((with-commit . "emacs-gptel=ad619463d1a9cb466b8dd575cc905f2554886cd7") - (without-tests . "emacs-gptel"))) - emacs-gptel) + emacs-gptel-new + emacs-gptel-agent emacs-guix emacs-hl-todo emacs-kaolin-themes diff --git a/epistemia/packages/emacs.scm b/epistemia/packages/emacs.scm @@ -65,3 +65,163 @@ underline style instead of regular underline. (setq kaolin-themes-underline-wave t) ;; When t, will display colored hl-line style (setq kaolin-themes-hl-line-colored t).") (license license:gpl3))) + +(define-public emacs-gptel-new + (package + (name "emacs-gptel-new") + (version "20260410.711") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/karthink/gptel") + (commit "8d6411b5f89d796c817ff79324973b8910e164fe"))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0zl5qdp9qqh8chadsp2m3jpbpsxlywdlfkax8p97y73q1yias0q6")))) + (build-system emacs-build-system) + (propagated-inputs (list emacs-transient emacs-compat)) + (home-page "https://github.com/karthink/gptel") + (synopsis "Interact with ChatGPT or other LLMs") + (description + "gptel is a simple Large Language Model chat client, with support for multiple +models and backends. It works in the spirit of Emacs, available at any time and +in any buffer. gptel supports: - The services @code{ChatGPT}, Azure, Gemini, +Anthropic AI, Together.ai, Perplexity, AI/ML API, Anyscale, @code{OpenRouter}, +Groq, @code{PrivateGPT}, @code{DeepSeek}, Cerebras, Github Models, @code{GitHub} +Copilot chat, AWS Bedrock, Novita AI, @code{xAI}, Sambanova, Mistral Le Chat and +Kagi (@code{FastGPT} & Summarizer). - Local models via Ollama, Llama.cpp, +Llamafiles or GPT4All Additionally, any LLM service (local or remote) that +provides an @code{OpenAI-compatible} API is supported. Features: - Interact +with LLMs from anywhere in Emacs (any buffer, shell, minibuffer, wherever). - +LLM responses are in Markdown or Org markup. - Supports conversations and +multiple independent sessions. - Supports tool-use to equip LLMs with agentic +capabilities. - Supports Model Context Protocol (MCP) integration using the +mcp.el package. - Supports multi-modal models (send images, documents). - +Supports \"reasoning\" content in LLM responses. - Save chats as regular +Markdown/Org/Text files and resume them later. - You can go back and edit your +previous prompts or LLM responses when continuing a conversation. These will be +fed back to the model. - Redirect prompts and responses easily - Rewrite, +refactor or fill in regions in buffers. - Write your own commands for custom +tasks with a simple API. Requirements for @code{ChatGPT}, Azure, Gemini or Kagi: +- You need an appropriate API key. Set the variable `gptel-api-key to the key +or to a function of no arguments that returns the key. (It tries to use +`auth-source by default) @code{ChatGPT} is configured out of the box. For the +other sources: - For Azure: define a gptel-backend with `gptel-make-azure'. - +For Gemini: define a gptel-backend with `gptel-make-gemini'. - For Anthropic +(Claude): define a gptel-backend with `gptel-make-anthropic'. - For AI/ML API, +Together.ai, Anyscale, Groq, @code{OpenRouter}, @code{DeepSeek}, Cerebras or +Github Models: define a gptel-backend with `gptel-make-openai'. - For +@code{PrivateGPT}: define a backend with `gptel-make-privategpt'. - For +Perplexity: define a backend with `gptel-make-perplexity'. - For Deepseek: +define a backend with `gptel-make-deepseek'. - For Kagi: define a gptel-backend +with `gptel-make-kagi'. For local models using Ollama, Llama.cpp or GPT4All: - +The model has to be running on an accessible address (or localhost) - Define a +gptel-backend with `gptel-make-ollama or `gptel-make-gpt4all'. - Llama.cpp or +Llamafiles: Define a gptel-backend with `gptel-make-openai'. Consult the +package README for examples and more help with configuring backends. Usage: +gptel can be used in any buffer or in a dedicated chat buffer. The interaction +model is simple: Type in a query and the response will be inserted below. You +can continue the conversation by typing below the response. To use this in any +buffer: - Call `gptel-send to send the buffer's text up to the cursor. Select a +region to send only the region. - You can select previous prompts and responses +to continue the conversation. - Call `gptel-send with a prefix argument to +access a menu where you can set your backend, model and other parameters, or to +redirect the prompt/response. To use this in a dedicated buffer: - M-x gptel: +Start a chat session. - In the chat session: Press `C-c RET (`gptel-send') to +send your prompt. Use a prefix argument (`C-u C-c RET') to access a menu. In +this menu you can set chat parameters like the system directives, active backend +or model, or choose to redirect the input or output elsewhere (such as to the +kill ring or the echo area). - You can save this buffer to a file. When opening +this file, turn on `gptel-mode before editing it to restore the conversation +state and continue chatting. - To include media files with your request, you can +add them to the context (described next), or include them as links in Org or +Markdown mode chat buffers. Sending media is disabled by default, you can turn +it on globally via `gptel-track-media', or locally in a chat buffer via the +header line. Include more context with requests: If you want to provide the LLM +with more context, you can add arbitrary regions, buffers, files or directories +to the query with `gptel-add'. To add text or media files, call `gptel-add in +Dired or use the dedicated `gptel-add-file'. You can also add context from +gptel's menu instead (`gptel-send with a prefix arg), as well as examine or +modify context. When context is available, gptel will include it with each LLM +query. LLM Tool use: gptel supports \"tool calling\" behavior, where LLMs can +specify arguments with which to call provided \"tools\" (elisp functions). The +results of running the tools are fed back to the LLM, giving it capabilities and +knowledge beyond what is available out of the box. For example, tools can +perform web searches or API lookups, modify files and directories, and so on. +Tools can be specified via `gptel-make-tool', or obtained from other +repositories, or from Model Context Protocol (MCP) servers using the mcp.el +package. See the README for details. Tools can be included with LLM queries +using gptel's menu, or from `gptel-tools'. Rewrite interface In any buffer: +with a region selected, you can rewrite prose, refactor code or fill in the +region. This is accessible via `gptel-rewrite', and also from the `gptel-send +menu. Presets Define a bundle of configuration (model, backend, system message, +tools etc) as a \"preset\" that can be applied together, making it easy to switch +between tasks in gptel. Presets can be saved and applied from gptel's transient +menu. You can also include a cookie of the form \"@@preset-name\" in the prompt +to send a request with a preset applied. This feature works everywhere, but +preset cookies are also fontified in chat buffers. gptel in Org mode: gptel +offers a few extra conveniences in Org mode: - You can limit the conversation +context to an Org heading with `gptel-org-set-topic'. - You can have branching +conversations in Org mode, where each hierarchical outline path through the +document is a separate conversation branch. See the variable +`gptel-org-branching-context'. - You can declare the gptel model, backend, +temperature, system message and other parameters as Org properties with the +command `gptel-org-set-properties'. gptel queries under the corresponding +heading will always use these settings, allowing you to create mostly +reproducible LLM chat notebooks. Finally, gptel offers a general purpose API +for writing LLM ineractions that suit your workflow. See `gptel-request', and +`gptel-fsm for more advanced usage.") + (license license:gpl3))) + +(define-public emacs-gptel-agent + (package + (name "emacs-gptel-agent") + (version "20260412.716") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/karthink/gptel-agent") + (commit "bef06bccdbf847e0c4a94d1b57dd96d979437430"))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1g33w8db2g33l3qf4f9vnafkdpilaxh4s9cy76yv79rphg92ipaw")))) + (build-system emacs-build-system) + (propagated-inputs (list emacs-compat emacs-gptel-new emacs-yaml + emacs-orderless)) + (arguments + '(#:include '("^[^/]*.el$" "^[^/]*.el.in$" + "^dir$" + "^[^/]*.info$" + "^[^/]*.texi$" + "^[^/]*.texinfo$" + "^doc/dir$" + "^doc/[^/]*.info$" + "^doc/[^/]*.texi$" + "^doc/[^/]*.texinfo$" + "^agents$") + #:exclude '("^.dir-locals.el$" "^test.el$" "^tests.el$" + "^[^/]*-test.el$" "^[^/]*-tests.el$"))) + (home-page "https://github.com/karthink/gptel-agent") + (synopsis "Agentic LLM use for gptel") + (description + "This is a collection of tools and prompts to use gptel \"agentically\" with any +LLM, to autonomously perform tasks. It has access to - the web (via basic web +search, URL fetching and @code{YouTube} video metadata), - local files +(read/write/edit), - the state of Emacs (documentation and Elisp evaluation), - +and Bash, if you are in a POSIX-y environment. To use gptel-agent in a +dedicated buffer: - Set `gptel-model and `gptel-backend to use your preferred +LLM. - Run M-x `gptel-agent'. This will open a buffer with the agent preset +loaded. - Use gptel as usual, calling `gptel-send etc. - If you change the +system prompt, tools or other settings in this buffer, you can reset the agent +state by (re)applying the \"gptel-agent\" preset from gptel's menu. To use +gptel-agent anywhere in Emacs: - As with gptel, you can use gptel-agent in any +buffer. Just apply the \"gptel-agent\" preset in the buffer, or include +\"@@gptel-agent\" in a prompt. gptel-agent can delegate tasks to \"sub-agents\". +Sub-agents can be specified in Markdown or Org files in a directory. To see how +to specify agents, examine the \"agents\" directory in this package. You can add +your directory of agents to `gptel-agent-dirs', which see. Please note: +gptel-agent uses significantly more tokens than the average gptel LLM +interaction.") + (license license:gpl3)))