From b0e8a1569ed289ae1c644277b720882baba9304e Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Sat, 13 Jun 2020 13:34:16 +0200 Subject: [PATCH] fluidsynth: add module Fluidsynth is a real-time MIDI synthesizer based on the SoundFont 2 format. PR #1326 --- .github/CODEOWNERS | 2 + modules/misc/news.nix | 8 +++ modules/modules.nix | 1 + modules/services/fluidsynth.nix | 57 +++++++++++++++++++ tests/default.nix | 1 + tests/modules/services/fluidsynth/default.nix | 1 + tests/modules/services/fluidsynth/service.nix | 24 ++++++++ 7 files changed, 94 insertions(+) create mode 100644 modules/services/fluidsynth.nix create mode 100644 tests/modules/services/fluidsynth/default.nix create mode 100644 tests/modules/services/fluidsynth/service.nix diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f4efb5e3e..3d27c5185 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -113,6 +113,8 @@ /modules/services/flameshot.nix @moredhel +/modules/services/fluidsynth.nix @Valodim + /modules/services/gnome-keyring.nix @rycee /modules/services/gpg-agent.nix @rycee diff --git a/modules/misc/news.nix b/modules/misc/news.nix index b0cdb0bdc..e56057982 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -1568,6 +1568,14 @@ in A new module is available: 'programs.powerline-go' ''; } + + { + time = "2020-06-14T13:30:19+00:00"; + condition = hostPlatform.isLinux; + message = '' + A new module is available: 'service.fluidsynth' + ''; + } ]; }; } diff --git a/modules/modules.nix b/modules/modules.nix index 16ce233e0..14628c767 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -129,6 +129,7 @@ let (loadModule ./services/dwm-status.nix { condition = hostPlatform.isLinux; }) (loadModule ./services/emacs.nix { condition = hostPlatform.isLinux; }) (loadModule ./services/flameshot.nix { }) + (loadModule ./services/fluidsynth.nix { condition = hostPlatform.isLinux; }) (loadModule ./services/getmail.nix { condition = hostPlatform.isLinux; }) (loadModule ./services/gnome-keyring.nix { }) (loadModule ./services/gpg-agent.nix { }) diff --git a/modules/services/fluidsynth.nix b/modules/services/fluidsynth.nix new file mode 100644 index 000000000..350961152 --- /dev/null +++ b/modules/services/fluidsynth.nix @@ -0,0 +1,57 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.services.fluidsynth; + +in { + meta.maintainers = [ maintainers.valodim ]; + + options = { + services.fluidsynth = { + enable = mkEnableOption "fluidsynth, the music player daemon"; + + soundFont = mkOption { + type = types.path; + default = "${pkgs.soundfont-fluid}/share/soundfonts/FluidR3_GM2-2.sf2"; + description = '' + The soundfont file to use, in SoundFont 2 format. + ''; + }; + + extraOptions = mkOption { + type = types.listOf types.str; + default = [ ]; + example = [ "--sample-rate 96000" ]; + description = '' + Extra arguments, added verbatim to the fluidsynth command. See + + fluidsynth.conf + 1 + . + ''; + }; + }; + }; + + config = mkIf cfg.enable { + systemd.user.services.fluidsynth = { + Unit = { + Description = "FluidSynth Daemon"; + Documentation = "man:fluidsynth(1)"; + BindsTo = [ "pulseaudio.service" ]; + After = [ "pulseaudio.service" ]; + }; + + Install = { WantedBy = [ "default.target" ]; }; + + Service = { + ExecStart = "${pkgs.fluidsynth}/bin/fluidsynth -a pulseaudio -si ${ + lib.concatStringsSep " " cfg.extraOptions + } ${cfg.soundFont}"; + }; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 53cb7367e..f8bcc159e 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -80,6 +80,7 @@ import nmt { ./modules/programs/rofi ./modules/services/polybar ./modules/services/sxhkd + ./modules/services/fluidsynth ./modules/services/window-managers/i3 ./modules/systemd ./modules/targets diff --git a/tests/modules/services/fluidsynth/default.nix b/tests/modules/services/fluidsynth/default.nix new file mode 100644 index 000000000..58e9c5dcc --- /dev/null +++ b/tests/modules/services/fluidsynth/default.nix @@ -0,0 +1 @@ +{ fluidsynth = import ./service.nix; } diff --git a/tests/modules/services/fluidsynth/service.nix b/tests/modules/services/fluidsynth/service.nix new file mode 100644 index 000000000..8d53e75c0 --- /dev/null +++ b/tests/modules/services/fluidsynth/service.nix @@ -0,0 +1,24 @@ +{ config, pkgs, ... }: { + config = { + services.fluidsynth.enable = true; + services.fluidsynth.soundFont = "/path/to/soundFont"; + services.fluidsynth.extraOptions = [ "--sample-rate 96000" ]; + + nixpkgs.overlays = [ + (self: super: { + fluidsynth = pkgs.writeScriptBin "dummy-fluidsynth" "" // { + outPath = "@fluidsynth@"; + }; + }) + ]; + + nmt.script = '' + serviceFile=home-files/.config/systemd/user/fluidsynth.service + + assertFileExists $serviceFile + + assertFileContains $serviceFile \ + 'ExecStart=@fluidsynth@/bin/fluidsynth -a pulseaudio -si --sample-rate 96000 /path/to/soundFont' + ''; + }; +}