From 2d7b64e32f9fcdf1046efd243da4659a6459d7ff Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Sat, 10 Jan 2026 10:43:56 +0100 Subject: [PATCH] fresh-editor: init module --- .../misc/news/2026/01/2026-01-10_10-44-00.nix | 14 ++++++ modules/programs/fresh-editor.nix | 47 +++++++++++++++++++ .../modules/programs/fresh-editor/config.json | 3 ++ .../modules/programs/fresh-editor/default.nix | 3 ++ .../fresh-editor/fresh-editor-settings.nix | 10 ++++ 5 files changed, 77 insertions(+) create mode 100644 modules/misc/news/2026/01/2026-01-10_10-44-00.nix create mode 100644 modules/programs/fresh-editor.nix create mode 100644 tests/modules/programs/fresh-editor/config.json create mode 100644 tests/modules/programs/fresh-editor/default.nix create mode 100644 tests/modules/programs/fresh-editor/fresh-editor-settings.nix diff --git a/modules/misc/news/2026/01/2026-01-10_10-44-00.nix b/modules/misc/news/2026/01/2026-01-10_10-44-00.nix new file mode 100644 index 00000000..a2418e0a --- /dev/null +++ b/modules/misc/news/2026/01/2026-01-10_10-44-00.nix @@ -0,0 +1,14 @@ +{ config, ... }: +{ + time = "2026-01-10T10:44:00+00:00"; + condition = config.programs.fresh-editor.enable; + message = '' + + A new module is available: 'programs.fresh-editor' + + Fresh is a terminal-based text editor: easy, powerful and fast. It is + engineered for speed. It delivers a low-latency experience, with text + appearing instantly. The editor is designed to be light and fast, reliably + opening and editing huge files up to multi-gigabyte sizes without slowdown. + ''; +} diff --git a/modules/programs/fresh-editor.nix b/modules/programs/fresh-editor.nix new file mode 100644 index 00000000..873c3d03 --- /dev/null +++ b/modules/programs/fresh-editor.nix @@ -0,0 +1,47 @@ +{ + lib, + pkgs, + config, + ... +}: +let + inherit (lib) + mkIf + mkEnableOption + mkPackageOption + mkOption + ; + + cfg = config.programs.fresh-editor; + jsonFormat = pkgs.formats.json { }; +in +{ + meta.maintainers = with lib.maintainers; [ drupol ]; + options.programs.fresh-editor = { + enable = mkEnableOption "fresh-editor"; + package = mkPackageOption pkgs "fresh-editor" { nullable = true; }; + settings = mkOption { + inherit (jsonFormat) type; + default = { }; + example = { + version = 1; + theme = "dark"; + editor = { + tab_size = 4; + line_numbers = true; + }; + }; + description = '' + Configuration settings for fresh-editor. Find more configuration options in the user guide at: + + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = mkIf (cfg.package != null) [ cfg.package ]; + xdg.configFile."fresh/config.json" = mkIf (cfg.settings != { }) { + source = jsonFormat.generate "config.json" cfg.settings; + }; + }; +} diff --git a/tests/modules/programs/fresh-editor/config.json b/tests/modules/programs/fresh-editor/config.json new file mode 100644 index 00000000..c8c4105e --- /dev/null +++ b/tests/modules/programs/fresh-editor/config.json @@ -0,0 +1,3 @@ +{ + "foo": "bar" +} diff --git a/tests/modules/programs/fresh-editor/default.nix b/tests/modules/programs/fresh-editor/default.nix new file mode 100644 index 00000000..7bb239a3 --- /dev/null +++ b/tests/modules/programs/fresh-editor/default.nix @@ -0,0 +1,3 @@ +{ + fresh-editor = ./fresh-editor-settings.nix; +} diff --git a/tests/modules/programs/fresh-editor/fresh-editor-settings.nix b/tests/modules/programs/fresh-editor/fresh-editor-settings.nix new file mode 100644 index 00000000..be2dfb22 --- /dev/null +++ b/tests/modules/programs/fresh-editor/fresh-editor-settings.nix @@ -0,0 +1,10 @@ +{ + programs.fresh-editor = { + enable = true; + settings = builtins.fromJSON (builtins.readFile ./config.json); + }; + + nmt.script = '' + assertFileContent home-files/.config/fresh/config.json ${./config.json} + ''; +}