diff --git a/modules/lib/maintainers.nix b/modules/lib/maintainers.nix
index 9fe03dcf2..f45068430 100644
--- a/modules/lib/maintainers.nix
+++ b/modules/lib/maintainers.nix
@@ -159,6 +159,12 @@
github = "loicreynier";
githubId = 88983487;
};
+ LucasWagler = {
+ name = "Lucas Wagler";
+ email = "lucas@wagler.dev";
+ github = "LucasWagler";
+ githubId = 32136449;
+ };
matrss = {
name = "Matthias Riße";
email = "matrss@users.noreply.github.com";
diff --git a/modules/programs/k9s.nix b/modules/programs/k9s.nix
index 43de8f79c..900e129e1 100644
--- a/modules/programs/k9s.nix
+++ b/modules/programs/k9s.nix
@@ -8,7 +8,20 @@ let
yamlFormat = pkgs.formats.yaml { };
in {
- meta.maintainers = with maintainers; [ katexochen liyangau ];
+ meta.maintainers = with maintainers; [
+ katexochen
+ liyangau
+ hm.maintainers.LucasWagler
+ ];
+
+ imports = [
+ (mkRenamedOptionModule [ "programs" "k9s" "skin" ] [
+ "programs"
+ "k9s"
+ "skins"
+ "skin"
+ ])
+ ];
options.programs.k9s = {
enable =
@@ -20,7 +33,7 @@ in {
type = yamlFormat.type;
default = { };
description = ''
- Configuration written to {file}`$XDG_CONFIG_HOME/k9s/config.yml`. See
+ Configuration written to {file}`$XDG_CONFIG_HOME/k9s/config.yaml`. See
for supported values.
'';
example = literalExpression ''
@@ -30,17 +43,19 @@ in {
'';
};
- skin = mkOption {
- type = yamlFormat.type;
+ skins = mkOption {
+ type = types.attrsOf yamlFormat.type;
default = { };
description = ''
- Skin written to {file}`$XDG_CONFIG_HOME/k9s/skin.yml`. See
+ Skin files written to {file}`$XDG_CONFIG_HOME/k9s/skins/`. See
for supported values.
'';
example = literalExpression ''
- k9s = {
- body = {
- fgColor = "dodgerblue";
+ my_blue_skin = {
+ k9s = {
+ body = {
+ fgColor = "dodgerblue";
+ };
};
};
'';
@@ -50,7 +65,7 @@ in {
type = yamlFormat.type;
default = { };
description = ''
- Aliases written to {file}`$XDG_CONFIG_HOME/k9s/aliases.yml`. See
+ Aliases written to {file}`$XDG_CONFIG_HOME/k9s/aliases.yaml`. See
for supported values.
'';
example = literalExpression ''
@@ -65,7 +80,7 @@ in {
type = yamlFormat.type;
default = { };
description = ''
- Hotkeys written to {file}`$XDG_CONFIG_HOME/k9s/hotkey.yml`. See
+ Hotkeys written to {file}`$XDG_CONFIG_HOME/k9s/hotkey.yaml`. See
for supported values.
'';
example = literalExpression ''
@@ -86,7 +101,7 @@ in {
type = yamlFormat.type;
default = { };
description = ''
- Plugins written to {file}`$XDG_CONFIG_HOME/k9s/plugin.yml`. See
+ Plugins written to {file}`$XDG_CONFIG_HOME/k9s/plugin.yaml`. See
for supported values.
'';
example = literalExpression ''
@@ -117,7 +132,7 @@ in {
type = yamlFormat.type;
default = { };
description = ''
- Resource column views written to {file}`$XDG_CONFIG_HOME/k9s/views.yml`.
+ Resource column views written to {file}`$XDG_CONFIG_HOME/k9s/views.yaml`.
See for supported values.
'';
example = literalExpression ''
@@ -140,31 +155,40 @@ in {
};
};
- config = mkIf cfg.enable {
+ config = let
+ skinSetting = if (!(cfg.settings ? k9s.ui.skin) && cfg.skins != { }) then {
+ k9s.ui.skin = "${builtins.elemAt (builtins.attrNames cfg.skins) 0}";
+ } else
+ { };
+
+ skinFiles = mapAttrs' (name: value:
+ nameValuePair "k9s/skins/${name}.yaml" {
+ source = yamlFormat.generate "k9s-skin-${name}.yaml" value;
+ }) cfg.skins;
+ in mkIf cfg.enable {
home.packages = [ cfg.package ];
- xdg.configFile."k9s/config.yml" = mkIf (cfg.settings != { }) {
- source = yamlFormat.generate "k9s-config" cfg.settings;
- };
+ xdg.configFile = {
+ "k9s/config.yaml" = mkIf (cfg.settings != { }) {
+ source = yamlFormat.generate "k9s-config"
+ (lib.recursiveUpdate skinSetting cfg.settings);
+ };
- xdg.configFile."k9s/skin.yml" = mkIf (cfg.skin != { }) {
- source = yamlFormat.generate "k9s-skin" cfg.skin;
- };
+ "k9s/aliases.yaml" = mkIf (cfg.aliases != { }) {
+ source = yamlFormat.generate "k9s-aliases" cfg.aliases;
+ };
- xdg.configFile."k9s/aliases.yml" = mkIf (cfg.aliases != { }) {
- source = yamlFormat.generate "k9s-aliases" cfg.aliases;
- };
+ "k9s/hotkey.yaml" = mkIf (cfg.hotkey != { }) {
+ source = yamlFormat.generate "k9s-hotkey" cfg.hotkey;
+ };
- xdg.configFile."k9s/hotkey.yml" = mkIf (cfg.hotkey != { }) {
- source = yamlFormat.generate "k9s-hotkey" cfg.hotkey;
- };
+ "k9s/plugin.yaml" = mkIf (cfg.plugin != { }) {
+ source = yamlFormat.generate "k9s-plugin" cfg.plugin;
+ };
- xdg.configFile."k9s/plugin.yml" = mkIf (cfg.plugin != { }) {
- source = yamlFormat.generate "k9s-plugin" cfg.plugin;
- };
-
- xdg.configFile."k9s/views.yml" = mkIf (cfg.views != { }) {
- source = yamlFormat.generate "k9s-views" cfg.views;
- };
+ "k9s/views.yaml" = mkIf (cfg.views != { }) {
+ source = yamlFormat.generate "k9s-views" cfg.views;
+ };
+ } // skinFiles;
};
}
diff --git a/tests/modules/programs/k9s/default.nix b/tests/modules/programs/k9s/default.nix
index 58d9f32f3..6f5b1ba2a 100644
--- a/tests/modules/programs/k9s/default.nix
+++ b/tests/modules/programs/k9s/default.nix
@@ -1,4 +1,6 @@
{
k9s-example-settings = ./example-settings.nix;
k9s-empty-settings = ./empty-settings.nix;
+ k9s-deprecated-options = ./deprecated-options.nix;
+ k9s-partial-skin-settings = ./partial-skin-settings.nix;
}
diff --git a/tests/modules/programs/k9s/deprecated-options.nix b/tests/modules/programs/k9s/deprecated-options.nix
new file mode 100644
index 000000000..575272522
--- /dev/null
+++ b/tests/modules/programs/k9s/deprecated-options.nix
@@ -0,0 +1,31 @@
+{ config, lib, options, ... }: {
+ programs.k9s = {
+ enable = true;
+ skin = {
+ k9s = {
+ body = {
+ fgColor = "dodgerblue";
+ bgColor = "#ffffff";
+ logoColor = "#0000ff";
+ };
+ info = {
+ fgColor = "lightskyblue";
+ sectionColor = "steelblue";
+ };
+ };
+ };
+ };
+
+ test.asserts.warnings.enable = true;
+ test.asserts.warnings.expected = [
+ "The option `programs.k9s.skin' defined in ${
+ lib.showFiles options.programs.k9s.skin.files
+ } has been renamed to `programs.k9s.skins.skin'."
+ ];
+ nmt.script = ''
+ assertFileExists home-files/.config/k9s/skins/skin.yaml
+ assertFileContent \
+ home-files/.config/k9s/skins/skin.yaml \
+ ${./example-skin-expected.yaml}
+ '';
+}
diff --git a/tests/modules/programs/k9s/example-aliases-expected.yml b/tests/modules/programs/k9s/example-aliases-expected.yaml
similarity index 100%
rename from tests/modules/programs/k9s/example-aliases-expected.yml
rename to tests/modules/programs/k9s/example-aliases-expected.yaml
diff --git a/tests/modules/programs/k9s/example-config-expected.yml b/tests/modules/programs/k9s/example-config-expected.yaml
similarity index 76%
rename from tests/modules/programs/k9s/example-config-expected.yml
rename to tests/modules/programs/k9s/example-config-expected.yaml
index 019ee7a72..5f4c43ffa 100644
--- a/tests/modules/programs/k9s/example-config-expected.yml
+++ b/tests/modules/programs/k9s/example-config-expected.yaml
@@ -3,3 +3,5 @@ k9s:
headless: false
maxConnRetry: 5
refreshRate: 2
+ ui:
+ skin: default
diff --git a/tests/modules/programs/k9s/example-hotkey-expected.yml b/tests/modules/programs/k9s/example-hotkey-expected.yaml
similarity index 100%
rename from tests/modules/programs/k9s/example-hotkey-expected.yml
rename to tests/modules/programs/k9s/example-hotkey-expected.yaml
diff --git a/tests/modules/programs/k9s/example-plugin-expected.yml b/tests/modules/programs/k9s/example-plugin-expected.yaml
similarity index 100%
rename from tests/modules/programs/k9s/example-plugin-expected.yml
rename to tests/modules/programs/k9s/example-plugin-expected.yaml
diff --git a/tests/modules/programs/k9s/example-settings.nix b/tests/modules/programs/k9s/example-settings.nix
index 3c935aa6f..7816a050f 100644
--- a/tests/modules/programs/k9s/example-settings.nix
+++ b/tests/modules/programs/k9s/example-settings.nix
@@ -11,6 +11,7 @@
maxConnRetry = 5;
enableMouse = true;
headless = false;
+ ui.skin = "default";
};
};
hotkey = {
@@ -22,16 +23,31 @@
};
};
};
- skin = {
- k9s = {
- body = {
- fgColor = "dodgerblue";
- bgColor = "#ffffff";
- logoColor = "#0000ff";
+ skins = {
+ "default" = {
+ k9s = {
+ body = {
+ fgColor = "dodgerblue";
+ bgColor = "#ffffff";
+ logoColor = "#0000ff";
+ };
+ info = {
+ fgColor = "lightskyblue";
+ sectionColor = "steelblue";
+ };
};
- info = {
- fgColor = "lightskyblue";
- sectionColor = "steelblue";
+ };
+ "alt-skin" = {
+ k9s = {
+ body = {
+ fgColor = "orangered";
+ bgColor = "#ffffff";
+ logoColor = "#0000ff";
+ };
+ info = {
+ fgColor = "red";
+ sectionColor = "mediumvioletred";
+ };
};
};
};
@@ -61,29 +77,33 @@
};
nmt.script = ''
- assertFileExists home-files/.config/k9s/config.yml
+ assertFileExists home-files/.config/k9s/config.yaml
assertFileContent \
- home-files/.config/k9s/config.yml \
- ${./example-config-expected.yml}
- assertFileExists home-files/.config/k9s/skin.yml
+ home-files/.config/k9s/config.yaml \
+ ${./example-config-expected.yaml}
+ assertFileExists home-files/.config/k9s/skins/default.yaml
assertFileContent \
- home-files/.config/k9s/skin.yml \
- ${./example-skin-expected.yml}
- assertFileExists home-files/.config/k9s/hotkey.yml
+ home-files/.config/k9s/skins/default.yaml \
+ ${./example-skin-expected.yaml}
+ assertFileExists home-files/.config/k9s/skins/alt-skin.yaml
assertFileContent \
- home-files/.config/k9s/hotkey.yml \
- ${./example-hotkey-expected.yml}
- assertFileExists home-files/.config/k9s/aliases.yml
+ home-files/.config/k9s/skins/alt-skin.yaml \
+ ${./example-skin-expected-alt.yaml}
+ assertFileExists home-files/.config/k9s/hotkey.yaml
assertFileContent \
- home-files/.config/k9s/aliases.yml \
- ${./example-aliases-expected.yml}
- assertFileExists home-files/.config/k9s/plugin.yml
+ home-files/.config/k9s/hotkey.yaml \
+ ${./example-hotkey-expected.yaml}
+ assertFileExists home-files/.config/k9s/aliases.yaml
assertFileContent \
- home-files/.config/k9s/plugin.yml \
- ${./example-plugin-expected.yml}
- assertFileExists home-files/.config/k9s/views.yml
+ home-files/.config/k9s/aliases.yaml \
+ ${./example-aliases-expected.yaml}
+ assertFileExists home-files/.config/k9s/plugin.yaml
assertFileContent \
- home-files/.config/k9s/views.yml \
- ${./example-views-expected.yml}
+ home-files/.config/k9s/plugin.yaml \
+ ${./example-plugin-expected.yaml}
+ assertFileExists home-files/.config/k9s/views.yaml
+ assertFileContent \
+ home-files/.config/k9s/views.yaml \
+ ${./example-views-expected.yaml}
'';
}
diff --git a/tests/modules/programs/k9s/example-skin-expected-alt.yaml b/tests/modules/programs/k9s/example-skin-expected-alt.yaml
new file mode 100644
index 000000000..e78242ab0
--- /dev/null
+++ b/tests/modules/programs/k9s/example-skin-expected-alt.yaml
@@ -0,0 +1,8 @@
+k9s:
+ body:
+ bgColor: '#ffffff'
+ fgColor: orangered
+ logoColor: '#0000ff'
+ info:
+ fgColor: red
+ sectionColor: mediumvioletred
diff --git a/tests/modules/programs/k9s/example-skin-expected.yml b/tests/modules/programs/k9s/example-skin-expected.yaml
similarity index 100%
rename from tests/modules/programs/k9s/example-skin-expected.yml
rename to tests/modules/programs/k9s/example-skin-expected.yaml
diff --git a/tests/modules/programs/k9s/example-views-expected.yml b/tests/modules/programs/k9s/example-views-expected.yaml
similarity index 100%
rename from tests/modules/programs/k9s/example-views-expected.yml
rename to tests/modules/programs/k9s/example-views-expected.yaml
diff --git a/tests/modules/programs/k9s/partial-skin-settings-expected.yaml b/tests/modules/programs/k9s/partial-skin-settings-expected.yaml
new file mode 100644
index 000000000..8d8b0ef7d
--- /dev/null
+++ b/tests/modules/programs/k9s/partial-skin-settings-expected.yaml
@@ -0,0 +1,7 @@
+k9s:
+ enableMouse: true
+ headless: false
+ maxConnRetry: 5
+ refreshRate: 2
+ ui:
+ skin: alt-skin
diff --git a/tests/modules/programs/k9s/partial-skin-settings.nix b/tests/modules/programs/k9s/partial-skin-settings.nix
new file mode 100644
index 000000000..ff296461c
--- /dev/null
+++ b/tests/modules/programs/k9s/partial-skin-settings.nix
@@ -0,0 +1,53 @@
+{ config, ... }:
+
+# When not specified in `programs.k9s.settings.ui.skin`,
+# test that the first skin name (alphabetically) is used in the config file
+
+{
+ programs.k9s = {
+ enable = true;
+ settings = {
+ k9s = {
+ refreshRate = 2;
+ maxConnRetry = 5;
+ enableMouse = true;
+ headless = false;
+ };
+ };
+ skins = {
+ "default" = {
+ k9s = {
+ body = {
+ fgColor = "dodgerblue";
+ bgColor = "#ffffff";
+ logoColor = "#0000ff";
+ };
+ info = {
+ fgColor = "lightskyblue";
+ sectionColor = "steelblue";
+ };
+ };
+ };
+ "alt-skin" = {
+ k9s = {
+ body = {
+ fgColor = "orangered";
+ bgColor = "#ffffff";
+ logoColor = "#0000ff";
+ };
+ info = {
+ fgColor = "red";
+ sectionColor = "mediumvioletred";
+ };
+ };
+ };
+ };
+ };
+
+ nmt.script = ''
+ assertFileExists home-files/.config/k9s/config.yaml
+ assertFileContent \
+ home-files/.config/k9s/config.yaml \
+ ${./partial-skin-settings-expected.yaml}
+ '';
+}