diff --git a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
index 42db2d060be6..a86df76a9d6f 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
@@ -790,6 +790,14 @@
renamed to linux-firmware.
+
+
+ It is now possible to specify wordlists to include as handy to
+ access environment variables using the
+ config.environment.wordlist configuration
+ options.
+
+
The services.mbpfan module was converted to
diff --git a/nixos/doc/manual/release-notes/rl-2205.section.md b/nixos/doc/manual/release-notes/rl-2205.section.md
index 7bb7b1c33b16..b8a91195f743 100644
--- a/nixos/doc/manual/release-notes/rl-2205.section.md
+++ b/nixos/doc/manual/release-notes/rl-2205.section.md
@@ -269,6 +269,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- The `firmwareLinuxNonfree` package has been renamed to `linux-firmware`.
+- It is now possible to specify wordlists to include as handy to access environment variables using the `config.environment.wordlist` configuration options.
+
- The `services.mbpfan` module was converted to a [RFC 0042](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md) configuration.
- The default value for `programs.spacefm.settings.graphical_su` got unset. It previously pointed to `gksu` which has been removed.
diff --git a/nixos/modules/misc/wordlist.nix b/nixos/modules/misc/wordlist.nix
new file mode 100644
index 000000000000..988b522d7431
--- /dev/null
+++ b/nixos/modules/misc/wordlist.nix
@@ -0,0 +1,59 @@
+{ config, lib, pkgs, ... }:
+with lib;
+let
+ concatAndSort = name: files: pkgs.runCommand name {} ''
+ awk 1 ${lib.escapeShellArgs files} | sed '{ /^\s*$/d; s/^\s\+//; s/\s\+$// }' | sort | uniq > $out
+ '';
+in
+{
+ options = {
+ environment.wordlist = {
+ enable = mkEnableOption "environment variables for lists of words";
+
+ lists = mkOption {
+ type = types.attrsOf (types.nonEmptyListOf types.path);
+
+ default = {
+ WORDLIST = [ "${pkgs.scowl}/share/dict/words.txt" ];
+ };
+
+ defaultText = literalExpression ''
+ {
+ WORDLIST = [ "''${pkgs.scowl}/share/dict/words.txt" ];
+ }
+ '';
+
+ description = ''
+ A set with the key names being the environment variable you'd like to
+ set and the values being a list of paths to text documents containing
+ lists of words. The various files will be merged, sorted, duplicates
+ removed, and extraneous spacing removed.
+
+ If you have a handful of words that you want to add to an already
+ existing wordlist, you may find `builtins.toFile` useful for this
+ task.
+ '';
+
+ example = literalExpression ''
+ {
+ WORDLIST = [ "''${pkgs.scowl}/share/dict/words.txt" ];
+ AUGMENTED_WORDLIST = [
+ "''${pkgs.scowl}/share/dict/words.txt"
+ "''${pkgs.scowl}/share/dict/words.variants.txt"
+ (builtins.toFile "extra-words" '''
+ desynchonization
+ oobleck''')
+ ];
+ }
+ '';
+ };
+ };
+ };
+
+ config = mkIf config.environment.wordlist.enable {
+ environment.variables =
+ lib.mapAttrs
+ (name: value: "${concatAndSort "wordlist-${name}" value}")
+ config.environment.wordlist.lists;
+ };
+}
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index c8b45724b3c1..b2e8661ac505 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -115,6 +115,7 @@
./misc/nixpkgs.nix
./misc/passthru.nix
./misc/version.nix
+ ./misc/wordlist.nix
./misc/nixops-autoluks.nix
./programs/adb.nix
./programs/appgate-sdp.nix