From 50bb714a8259b0c29b6c3429099a3b837771dab4 Mon Sep 17 00:00:00 2001 From: Aguirre Matteo <158215792+aguirre-matteo@users.noreply.github.com> Date: Sun, 27 Apr 2025 14:32:40 +0000 Subject: [PATCH] rmpc: add module (#6910) --- modules/modules.nix | 1 + modules/programs/rmpc.nix | 59 +++++++++++++++++++ tests/default.nix | 1 + tests/modules/programs/rmpc/default.nix | 1 + .../modules/programs/rmpc/example-config.nix | 29 +++++++++ .../modules/programs/rmpc/example-config.ron | 16 +++++ 6 files changed, 107 insertions(+) create mode 100644 modules/programs/rmpc.nix create mode 100644 tests/modules/programs/rmpc/default.nix create mode 100644 tests/modules/programs/rmpc/example-config.nix create mode 100644 tests/modules/programs/rmpc/example-config.ron diff --git a/modules/modules.nix b/modules/modules.nix index 0cf60ac1d..2b77cdb7f 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -237,6 +237,7 @@ let ./programs/rio.nix ./programs/ripgrep.nix ./programs/ripgrep-all.nix + ./programs/rmpc.nix ./programs/rofi-pass.nix ./programs/rofi.nix ./programs/rtorrent.nix diff --git a/modules/programs/rmpc.nix b/modules/programs/rmpc.nix new file mode 100644 index 000000000..acba56a76 --- /dev/null +++ b/modules/programs/rmpc.nix @@ -0,0 +1,59 @@ +{ + lib, + pkgs, + config, + ... +}: +let + inherit (lib) + mkIf + mkEnableOption + mkPackageOption + mkOption + types + ; + + cfg = config.programs.rmpc; +in +{ + meta.maintainers = with lib.hm.maintainers; [ aguirre-matteo ]; + + options.programs.rmpc = { + enable = mkEnableOption "rmpc"; + package = mkPackageOption pkgs "rmpc" { nullable = true; }; + config = mkOption { + type = types.lines; + default = ""; + example = '' + ( + address: "127.0.0.1:6600", + password: None, + theme: None, + cache_dir: None, + on_song_change: None, + volume_step: 5, + max_fps: 30, + scrolloff: 0, + wrap_navigation: false, + enable_mouse: true, + enable_config_hot_reload: true, + status_update_interval_ms: 1000, + select_current_song_on_change: false, + browser_song_sort: [Disc, Track, Artist, Title], + ) + ''; + description = '' + Configuration settings for rmpc in the Rusty Object Notation + format. All available options can be found in the official + documentation at . + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = mkIf (cfg.package != null) [ cfg.package ]; + xdg.configFile = mkIf (cfg.config != "") { + "rmpc/config.ron".text = cfg.config; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index cda01b525..b1cd577a7 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -277,6 +277,7 @@ import nmtSrc { ./modules/programs/rio ./modules/programs/ripgrep ./modules/programs/ripgrep-all + ./modules/programs/rmpc ./modules/programs/ruff ./modules/programs/sagemath ./modules/programs/sapling diff --git a/tests/modules/programs/rmpc/default.nix b/tests/modules/programs/rmpc/default.nix new file mode 100644 index 000000000..a8e7745ec --- /dev/null +++ b/tests/modules/programs/rmpc/default.nix @@ -0,0 +1 @@ +{ rmpc-example-config = ./example-config.nix; } diff --git a/tests/modules/programs/rmpc/example-config.nix b/tests/modules/programs/rmpc/example-config.nix new file mode 100644 index 000000000..2041f7dde --- /dev/null +++ b/tests/modules/programs/rmpc/example-config.nix @@ -0,0 +1,29 @@ +{ + programs.rmpc = { + enable = true; + config = '' + ( + address: "127.0.0.1:6600", + password: None, + theme: None, + cache_dir: None, + on_song_change: None, + volume_step: 5, + max_fps: 30, + scrolloff: 0, + wrap_navigation: false, + enable_mouse: true, + enable_config_hot_reload: true, + status_update_interval_ms: 1000, + select_current_song_on_change: false, + browser_song_sort: [Disc, Track, Artist, Title], + ) + ''; + }; + + nmt.script = '' + assertFileExists home-files/.config/rmpc/config.ron + assertFileContent home-files/.config/rmpc/config.ron \ + ${./example-config.ron} + ''; +} diff --git a/tests/modules/programs/rmpc/example-config.ron b/tests/modules/programs/rmpc/example-config.ron new file mode 100644 index 000000000..bedef23fb --- /dev/null +++ b/tests/modules/programs/rmpc/example-config.ron @@ -0,0 +1,16 @@ +( + address: "127.0.0.1:6600", + password: None, + theme: None, + cache_dir: None, + on_song_change: None, + volume_step: 5, + max_fps: 30, + scrolloff: 0, + wrap_navigation: false, + enable_mouse: true, + enable_config_hot_reload: true, + status_update_interval_ms: 1000, + select_current_song_on_change: false, + browser_song_sort: [Disc, Track, Artist, Title], +)