diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7aedc7935..c5ee21086 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -221,6 +221,8 @@ /modules/programs/texlive.nix @rycee +/modules/programs/timidity.nix @amesgen + /modules/programs/topgrade.nix @msfjarvis /tests/modules/programs/topgrade @msfjarvis diff --git a/modules/lib/maintainers.nix b/modules/lib/maintainers.nix index 2ed3a8462..5a3e7c272 100644 --- a/modules/lib/maintainers.nix +++ b/modules/lib/maintainers.nix @@ -7,6 +7,12 @@ # [1] https://github.com/NixOS/nixpkgs/blob/fca0d6e093c82b31103dc0dacc48da2a9b06e24b/maintainers/maintainer-list.nix#LC1 { + amesgen = { + name = "amesgen"; + email = "amesgen@amesgen.de"; + github = "amesgen"; + githubId = 15369874; + }; justinlovinger = { name = "Justin Lovinger"; email = "git@justinlovinger.com"; diff --git a/modules/misc/news.nix b/modules/misc/news.nix index 5840a2743..51151607d 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -2365,6 +2365,13 @@ in A new module is available: 'programs.watson'. ''; } + + { + time = "2022-01-22T15:33:42+00:00"; + message = '' + A new module is available: 'programs.timidity'. + ''; + } ]; }; } diff --git a/modules/modules.nix b/modules/modules.nix index 3b6fda0f1..2f7d241b2 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -142,6 +142,7 @@ let ./programs/terminator.nix ./programs/termite.nix ./programs/texlive.nix + ./programs/timidity.nix ./programs/tmux.nix ./programs/topgrade.nix ./programs/urxvt.nix diff --git a/modules/programs/timidity.nix b/modules/programs/timidity.nix new file mode 100644 index 000000000..26b9de982 --- /dev/null +++ b/modules/programs/timidity.nix @@ -0,0 +1,51 @@ +{ config, lib, pkgs, ... }: + +let + + cfg = config.programs.timidity; + +in { + meta.maintainers = [ lib.hm.maintainers.amesgen ]; + + options.programs.timidity = { + enable = lib.mkEnableOption "timidity, a software MIDI renderer"; + + package = lib.mkOption { + type = lib.types.package; + default = pkgs.timidity; + defaultText = lib.literalExpression "pkgs.timidity"; + description = "The timidity package to use."; + }; + + finalPackage = lib.mkOption { + readOnly = true; + type = lib.types.package; + description = "Resulting package."; + }; + + extraConfig = lib.mkOption { + type = lib.types.lines; + default = ""; + example = lib.literalExpression '' + ''' + soundfont ''${pkgs.soundfont-fluid}/share/soundfonts/FluidR3_GM2-2.sf2 + ''' + ''; + description = "Extra configuration."; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = [ cfg.finalPackage ]; + + programs.timidity.finalPackage = pkgs.symlinkJoin { + name = "timidity-with-config"; + paths = [ cfg.package ]; + nativeBuildInputs = [ pkgs.makeWrapper ]; + postBuild = '' + wrapProgram $out/bin/timidity \ + --add-flags '-c ${pkgs.writeText "timidity.cfg" cfg.extraConfig}' + ''; + }; + }; +}