at 24.11-pre 1.8 kB view raw
1{ config, lib, pkgs, ... }: 2with lib; 3let 4 concatAndSort = name: files: pkgs.runCommand name {} '' 5 awk 1 ${lib.escapeShellArgs files} | sed '{ /^\s*$/d; s/^\s\+//; s/\s\+$// }' | sort | uniq > $out 6 ''; 7in 8{ 9 options = { 10 environment.wordlist = { 11 enable = mkEnableOption "environment variables for lists of words"; 12 13 lists = mkOption { 14 type = types.attrsOf (types.nonEmptyListOf types.path); 15 16 default = { 17 WORDLIST = [ "${pkgs.scowl}/share/dict/words.txt" ]; 18 }; 19 20 defaultText = literalExpression '' 21 { 22 WORDLIST = [ "''${pkgs.scowl}/share/dict/words.txt" ]; 23 } 24 ''; 25 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. 31 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 ''; 36 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 }; 52 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 }; 59}