{lib}: let
  mkTemplate = name: welcomeText: {
    inherit welcomeText;
    path = ./templates/${name};
    description = let
      first_char_of_name =
        builtins.elemAt (lib.strings.stringToCharacters name) 0;
      a_or_an =
        if builtins.elem first_char_of_name ["a" "e" "i" "o" "u"]
        then "An"
        else "A";
    in "${a_or_an} ${name} project";
  };
in {
  # a b c d e f g h i j k l m n o p q r s t u v w x y z
  awk = mkTemplate "awk" ''
    **Grep** for the TODO marks and change them accordingly!
    Also run `git init`.
  '';

  c = mkTemplate "c" ''
    **Grep** for the TODO marks and change them accordingly!
    Also run `git init`.
  '';

  latex = mkTemplate "latex" ''
    **Grep** for the TODO marks and change them accordingly!
    Also run `git init`.
    Please take a look at `lpm`.
  '';

  # Currently unmaintained
  # markdown = mkTemplate "markdown" ''
  #   **Grep** for the TODO marks and change them accordingly!
  #   Also run `git init`.
  # '';
  #
  # python = mkTemplate "python" ''
  #   **Grep** for the TODO marks and change them accordingly!
  #   Also run `git init`.
  # '';

  rust = mkTemplate "rust" ''
    **Grep** for the TODO marks and change them accordingly!
    Also run `git init`.
  '';

  shell = mkTemplate "shell" ''
    **Grep** for the TODO marks and change them accordingly!
    Also run `git init`.
  '';
}