Merge pull request #329823 from ExpidusOS/fix/pkgsllvm/elfutils
[NixPkgs.git] / nixos / modules / misc / wordlist.nix
blob988b522d74314070fdcaea7a17f8d85fbaa3d85f
1 { config, lib, pkgs, ... }:
2 with lib;
3 let
4   concatAndSort = name: files: pkgs.runCommand name {} ''
5     awk 1 ${lib.escapeShellArgs files} | sed '{ /^\s*$/d; s/^\s\+//; s/\s\+$// }' | sort | uniq > $out
6   '';
7 in
9   options = {
10     environment.wordlist = {
11       enable = mkEnableOption "environment variables for lists of words";
13       lists = mkOption {
14         type = types.attrsOf (types.nonEmptyListOf types.path);
16         default = {
17           WORDLIST = [ "${pkgs.scowl}/share/dict/words.txt" ];
18         };
20         defaultText = literalExpression ''
21           {
22             WORDLIST = [ "''${pkgs.scowl}/share/dict/words.txt" ];
23           }
24         '';
26         description = ''
27           A set with the key names being the environment variable you'd like to
28           set and the values being a list of paths to text documents containing
29           lists of words. The various files will be merged, sorted, duplicates
30           removed, and extraneous spacing removed.
32           If you have a handful of words that you want to add to an already
33           existing wordlist, you may find `builtins.toFile` useful for this
34           task.
35         '';
37         example = literalExpression ''
38           {
39             WORDLIST = [ "''${pkgs.scowl}/share/dict/words.txt" ];
40             AUGMENTED_WORDLIST = [
41               "''${pkgs.scowl}/share/dict/words.txt"
42               "''${pkgs.scowl}/share/dict/words.variants.txt"
43               (builtins.toFile "extra-words" '''
44                 desynchonization
45                 oobleck''')
46             ];
47           }
48         '';
49       };
50     };
51   };
53   config = mkIf config.environment.wordlist.enable {
54     environment.variables =
55       lib.mapAttrs
56         (name: value: "${concatAndSort "wordlist-${name}" value}")
57         config.environment.wordlist.lists;
58   };