From 5a49fe448e81ee05ab48ed3189109b322237ddbf Mon Sep 17 00:00:00 2001 From: Thierry Delafontaine Date: Sat, 5 Jul 2025 23:02:49 +0200 Subject: [PATCH] opencode: init (#7320) --- modules/programs/opencode.nix | 53 ++++++++++++++++++++ tests/modules/programs/opencode/config.json | 6 +++ tests/modules/programs/opencode/default.nix | 3 ++ tests/modules/programs/opencode/settings.nix | 16 ++++++ 4 files changed, 78 insertions(+) create mode 100644 modules/programs/opencode.nix create mode 100644 tests/modules/programs/opencode/config.json create mode 100644 tests/modules/programs/opencode/default.nix create mode 100644 tests/modules/programs/opencode/settings.nix diff --git a/modules/programs/opencode.nix b/modules/programs/opencode.nix new file mode 100644 index 00000000..c8cc63e5 --- /dev/null +++ b/modules/programs/opencode.nix @@ -0,0 +1,53 @@ +{ + lib, + pkgs, + config, + ... +}: +let + inherit (lib) + literalExpression + mkEnableOption + mkIf + mkOption + mkPackageOption + ; + + cfg = config.programs.opencode; + + jsonFormat = pkgs.formats.json { }; +in +{ + meta.maintainers = with lib.hm.maintainers; [ delafthi ]; + + options.programs.opencode = { + enable = mkEnableOption "opencode"; + + package = mkPackageOption pkgs "opencode" { nullable = true; }; + + settings = mkOption { + inherit (jsonFormat) type; + default = { }; + example = literalExpression '' + { + theme = "opencode"; + model = "anthropic/claude-sonnet-4-20250514"; + autoshare = false; + autoupdate = true; + } + ''; + description = '' + Configuration written to {file}`$XDG_CONFIG_HOME/opencode/config.json`. + See for the documentation. + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = mkIf (cfg.package != null) [ cfg.package ]; + + xdg.configFile."opencode/config.json" = mkIf (cfg.settings != { }) { + source = jsonFormat.generate "config.json" cfg.settings; + }; + }; +} diff --git a/tests/modules/programs/opencode/config.json b/tests/modules/programs/opencode/config.json new file mode 100644 index 00000000..5e8f692c --- /dev/null +++ b/tests/modules/programs/opencode/config.json @@ -0,0 +1,6 @@ +{ + "autoshare": false, + "autoupdate": true, + "model": "anthropic/claude-sonnet-4-20250514", + "theme": "opencode" +} diff --git a/tests/modules/programs/opencode/default.nix b/tests/modules/programs/opencode/default.nix new file mode 100644 index 00000000..6dd7a268 --- /dev/null +++ b/tests/modules/programs/opencode/default.nix @@ -0,0 +1,3 @@ +{ + opencode-settings = ./settings.nix; +} diff --git a/tests/modules/programs/opencode/settings.nix b/tests/modules/programs/opencode/settings.nix new file mode 100644 index 00000000..64e4d60f --- /dev/null +++ b/tests/modules/programs/opencode/settings.nix @@ -0,0 +1,16 @@ +{ + programs.opencode = { + enable = true; + settings = { + theme = "opencode"; + model = "anthropic/claude-sonnet-4-20250514"; + autoshare = false; + autoupdate = true; + }; + }; + nmt.script = '' + assertFileExists home-files/.config/opencode/config.json + assertFileContent home-files/.config/opencode/config.json \ + ${./config.json} + ''; +}