From 9d6e28fd32bf855d3f734ce5f2e4e2e2fc32212e Mon Sep 17 00:00:00 2001 From: Hoang Nguyen Date: Mon, 3 Nov 2025 00:35:27 +0700 Subject: [PATCH] rio: add support for custom themes --- modules/programs/rio.nix | 29 ++++++++++++++++++ tests/modules/programs/rio/default.nix | 1 + tests/modules/programs/rio/example-themes.nix | 30 +++++++++++++++++++ tests/modules/programs/rio/foobar.toml | 4 +++ 4 files changed, 64 insertions(+) create mode 100644 tests/modules/programs/rio/example-themes.nix create mode 100644 tests/modules/programs/rio/foobar.toml diff --git a/modules/programs/rio.nix b/modules/programs/rio.nix index 491727f85..b4da2345f 100644 --- a/modules/programs/rio.nix +++ b/modules/programs/rio.nix @@ -28,6 +28,25 @@ in for options. ''; }; + + themes = lib.mkOption { + type = with lib.types; attrsOf (either settingsFormat.type path); + default = { }; + description = '' + Theme files written to {file}`$XDG_CONFIG_HOME/rio/themes/`. See + for + supported values. + ''; + example = lib.literalExpression '' + { + foobar.colors = { + background = "#282a36"; + green = "#50fa7b"; + dim-green = "#06572f"; + }; + } + ''; + }; }; meta.maintainers = [ lib.maintainers.otavio ]; @@ -42,6 +61,16 @@ in xdg.configFile."rio/config.toml".source = if lib.isPath cfg.settings then cfg.settings else settingsFormat.generate "rio.toml" cfg.settings; }) + + (lib.mkIf (cfg.themes != { }) { + xdg.configFile = lib.mapAttrs' ( + name: value: + lib.nameValuePair "rio/themes/${name}.toml" { + source = + if builtins.isPath value then value else settingsFormat.generate "rio-theme-${name}.toml" value; + } + ) cfg.themes; + }) ] ); } diff --git a/tests/modules/programs/rio/default.nix b/tests/modules/programs/rio/default.nix index a6aba7fe1..461c51605 100644 --- a/tests/modules/programs/rio/default.nix +++ b/tests/modules/programs/rio/default.nix @@ -1,4 +1,5 @@ { rio-example-settings = ./example-settings.nix; rio-empty-settings = ./empty-settings.nix; + rio-themes = ./example-themes.nix; } diff --git a/tests/modules/programs/rio/example-themes.nix b/tests/modules/programs/rio/example-themes.nix new file mode 100644 index 000000000..28a25d199 --- /dev/null +++ b/tests/modules/programs/rio/example-themes.nix @@ -0,0 +1,30 @@ +{ config, ... }: +{ + programs.rio = { + enable = true; + + package = config.lib.test.mkStubPackage { }; + + themes = { + foobar.colors = { + cyan = "#8be9fd"; + green = "#50fa7b"; + background = "#282a36"; + }; + + foobar2 = ./foobar.toml; + }; + }; + + nmt.script = '' + assertFileExists home-files/.config/rio/themes/foobar.toml + assertFileExists home-files/.config/rio/themes/foobar2.toml + + assertFileContent \ + home-files/.config/rio/themes/foobar.toml \ + ${./foobar.toml} + assertFileContent \ + home-files/.config/rio/themes/foobar2.toml \ + ${./foobar.toml} + ''; +} diff --git a/tests/modules/programs/rio/foobar.toml b/tests/modules/programs/rio/foobar.toml new file mode 100644 index 000000000..ab93034f8 --- /dev/null +++ b/tests/modules/programs/rio/foobar.toml @@ -0,0 +1,4 @@ +[colors] +background = "#282a36" +cyan = "#8be9fd" +green = "#50fa7b"