From 436b27742c996b75e2baf8e835e3b3eae0c9fbd4 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Tue, 17 Feb 2026 15:42:44 +0100 Subject: [PATCH] mistral-vibe: add module --- .../misc/news/2026/02/2026-02-17_15-42-25.nix | 10 +++ modules/programs/mistral-vibe.nix | 64 +++++++++++++++++++ tests/darwinScrublist.nix | 1 + .../modules/programs/mistral-vibe/default.nix | 1 + .../programs/mistral-vibe/expected.toml | 16 +++++ .../programs/mistral-vibe/mistral-vibe.nix | 34 ++++++++++ 6 files changed, 126 insertions(+) create mode 100644 modules/misc/news/2026/02/2026-02-17_15-42-25.nix create mode 100644 modules/programs/mistral-vibe.nix create mode 100644 tests/modules/programs/mistral-vibe/default.nix create mode 100644 tests/modules/programs/mistral-vibe/expected.toml create mode 100644 tests/modules/programs/mistral-vibe/mistral-vibe.nix diff --git a/modules/misc/news/2026/02/2026-02-17_15-42-25.nix b/modules/misc/news/2026/02/2026-02-17_15-42-25.nix new file mode 100644 index 00000000..e7fae04c --- /dev/null +++ b/modules/misc/news/2026/02/2026-02-17_15-42-25.nix @@ -0,0 +1,10 @@ +{ + time = "2026-02-17T14:42:25+00:00"; + condition = true; + message = '' + + A new module is available: 'programs.mistral-vibe'. + + mistral-vibe is Mistral's open-source CLI coding assistant. + ''; +} diff --git a/modules/programs/mistral-vibe.nix b/modules/programs/mistral-vibe.nix new file mode 100644 index 00000000..35053d3c --- /dev/null +++ b/modules/programs/mistral-vibe.nix @@ -0,0 +1,64 @@ +{ + config, + lib, + pkgs, + ... +}: +let + + cfg = config.programs.mistral-vibe; + + settingsFormat = pkgs.formats.toml { }; + +in +{ + meta.maintainers = [ lib.maintainers.GaetanLepage ]; + + options.programs.mistral-vibe = { + enable = lib.mkEnableOption "Mistral Vibe, Mistral's open-source CLI coding assistant"; + + package = lib.mkPackageOption pkgs "mistral-vibe" { nullable = true; }; + + settings = lib.mkOption { + type = settingsFormat.type; + example = lib.literalExpression '' + { + active_model = "devstral-latest"; + vim_keybindings = false; + tool_paths = []; + + providers = [ + { + name = "mistral"; + backend = "mistral"; + api_base = "https://api.mistral.ai/v1"; + api_key_env_var = "MISTRAL_API_KEY"; + api_style = "openai"; + } + ]; + + models = [ + { + name = "devstral-latest"; + provider = "mistral"; + alias = "devstral-latest"; + temperature = 0.1; + input_price = 0.4; + output_price = 2.0; + } + ]; + } + ''; + description = '' + Mistral Vibe configuration. + For available settings see . + ''; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = lib.mkIf (cfg.package != null) [ cfg.package ]; + + home.file.".vibe/config.toml".source = settingsFormat.generate "config.toml" cfg.settings; + }; +} diff --git a/tests/darwinScrublist.nix b/tests/darwinScrublist.nix index a3a1fcf4..5f9771f9 100644 --- a/tests/darwinScrublist.nix +++ b/tests/darwinScrublist.nix @@ -104,6 +104,7 @@ let "mergiraf" "micro" "mise" + "mistral-vibe" "mpv" "msmtp" "mu" diff --git a/tests/modules/programs/mistral-vibe/default.nix b/tests/modules/programs/mistral-vibe/default.nix new file mode 100644 index 00000000..c75706cc --- /dev/null +++ b/tests/modules/programs/mistral-vibe/default.nix @@ -0,0 +1 @@ +{ mistral-vibe-program = ./mistral-vibe.nix; } diff --git a/tests/modules/programs/mistral-vibe/expected.toml b/tests/modules/programs/mistral-vibe/expected.toml new file mode 100644 index 00000000..52a87a91 --- /dev/null +++ b/tests/modules/programs/mistral-vibe/expected.toml @@ -0,0 +1,16 @@ +active_model = "tracer-vibe" + +[[models]] +alias = "tracer-vibe" +input_price = 0.0 +name = "mistralai/devstral-2512:free" +output_price = 0.0 +provider = "tracer-proxy" +temperature = 0.1 + +[[providers]] +api_base = "http://tracer:8081/proxy" +api_key_env_var = "OPENROUTER_API_KEY" +api_style = "openai" +backend = "generic" +name = "tracer-proxy" diff --git a/tests/modules/programs/mistral-vibe/mistral-vibe.nix b/tests/modules/programs/mistral-vibe/mistral-vibe.nix new file mode 100644 index 00000000..0f77eec8 --- /dev/null +++ b/tests/modules/programs/mistral-vibe/mistral-vibe.nix @@ -0,0 +1,34 @@ +{ + programs.mistral-vibe = { + enable = true; + + settings = { + active_model = "tracer-vibe"; + + providers = [ + { + name = "tracer-proxy"; + api_base = "http://tracer:8081/proxy"; + api_key_env_var = "OPENROUTER_API_KEY"; + api_style = "openai"; + backend = "generic"; + } + ]; + models = [ + { + name = "mistralai/devstral-2512:free"; + provider = "tracer-proxy"; + alias = "tracer-vibe"; + temperature = 0.1; + input_price = 0.0; + output_price = 0.0; + } + ]; + }; + }; + + nmt.script = '' + assertFileExists home-files/.vibe/config.toml + assertFileContent home-files/.vibe/config.toml ${./expected.toml} + ''; +}