Title: NixOS optional features in packages
       Author: Solène
       Date: 14 October 2020
       Tags: nixos linux nix
       Description: 
       
       As a claws-mail user, I like to have calendar support in the mail
       client to be able to "accept" invitations. In the default NixOS
       claws-mail package, the vcalendar module isn't installed with the
       package. Still, it is possible to add support for the vcalendar
       module without ugly hack.
       
       It turns out, by default, the claws-mail package in Nixpkg has an
       optional build option for the vcalendar module, we need to tell
       nixpkg we want this module and claws-mail will be compiled.
       
       As stated in the [NixOS
       manual](https://nixos.org/manual/nixos/stable/#sec-customising-packages
       ),
       the optionals features can't be searched yet. So what's possible
       is to search for your package in the [NixOS packages
       search](https://search.nixos.org/packages), click on the package
       name to get to the details and click on the link named "Nix expression"
       that will open a link to the package definition on GitHUB, [claws-mail
       nix
       expression](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/a
       pplications/networking/mailreaders/claws-mail/default.nix#L111)
       
       As you can see on the claws-mail nix expression code, there are lot
       of lines with **optional**, those are features we can enable. Here
       is a sample:
       
           [..]
           ++ optional (!enablePluginArchive) "--disable-archive-plugin"
           ++ optional (!enablePluginLitehtmlViewer)
       "--disable-litehtml_viewer-plugin"
           ++ optional (!enablePluginPdf) "--disable-pdf_viewer-plugin"
           ++ optional (!enablePluginPython) "--disable-python-plugin"
           [..]
       
       In your `configuration.nix` file, where you define the package list
       you want, you can tell you want to enable the plugin vcalendar,
       this is done as in the following example:
       
       
           environment.systemPackages = with pkgs; [
             kakoune git firefox irssi minetest
             (pkgs.claws-mail.override { enablePluginVcalendar = true;})
           ];
       
       When you rebuild your system to match the configuration definition,
       claws-mail will be compiled with the extras options you defined.
       
       Now, I have claws-mail with vCalendar support.