Make nix-modules available when defining user environments.

A new user specific configuration file is introduced.
It is located in "~/.nixuser/configuration.nix".
The idea is to have a declarative approach for defining the user environment
at some point. The configuration file acts as the input of a module evaluation
system, similar to "/etc/nixos/configuration.nix" for the NixOS configuration.

A new file "nixos/modules/nixuser-module-list.nix" is added.
The file lists modules that are made available both for system configuration
and for user configuration.
The file is imported by "nixos/modules/module-list.nix" and is used in
"pkgs/top-level/all-packages.nix".
To purpose of makeProfile is to generate the options definitions of the vimProfile module.
Therefore, makeProfile takes the options attribute of each file imported in line 6, creates mkOptions for each attribute of the options attribute (line 79-99), adds some default options (line 54-71), and then uses that set of generated options to either define the default profile configuration or the vim profiles configuration.
Depending on whether an option is generated for the default profile or for a vim profile, the default value and the option type has to be different. Options in the default profile can not be null, and options in the vim profiles default to null. That combination is used to have the options in the vim profiles to fall back to the corresponding default option, if an option is not explicitly set in a vim profile.

If the options would be declared directly in the files imported in line 6, so to make the imported files look more like a regular nix-module, then I would need a way to extract the attribute set that was passed into mkOptions as parameter. Then, I could change the options type and the default value depending on whether the option is generated for the default profile or for a vim profile, and get the same result as now.

The other attribute sets in each imported file, that is vimrc, plugins and paths, are not used in makeProfile. That attributes are used for generating the wrapper packages that result for each vim profile configuration. For each vim profile, duplicate paths and plugins form different vim-module files are removed automatically.

So I could try to make the imported files look like normal nix-modules as good as possible, but they will always need some magic to happen around them. I don't know if that's a real advantage, though. What do you think?