diff --git a/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml
index 12e4d490300e..7a056836108a 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml
@@ -60,6 +60,14 @@
programs.fzf.
+
+
+ stevenblack-blocklist,
+ A unified hosts file with base extensions for blocking
+ unwanted websites. Available as
+ networking.stevenblack.
+
+
atuin,
diff --git a/nixos/doc/manual/release-notes/rl-2305.section.md b/nixos/doc/manual/release-notes/rl-2305.section.md
index 07ee346c2c87..94d1802bd27a 100644
--- a/nixos/doc/manual/release-notes/rl-2305.section.md
+++ b/nixos/doc/manual/release-notes/rl-2305.section.md
@@ -24,6 +24,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- [fzf](https://github.com/junegunn/fzf), a command line fuzzyfinder. Available as [programs.fzf](#opt-programs.fzf.fuzzyCompletion).
+- [stevenblack-blocklist](https://github.com/StevenBlack/hosts), A unified hosts file with base extensions for blocking unwanted websites. Available as [networking.stevenblack](options.html#opt-networking.stevenblack.enable).
+
- [atuin](https://github.com/ellie/atuin), a sync server for shell history. Available as [services.atuin](#opt-services.atuin.enable).
- [mmsd](https://gitlab.com/kop316/mmsd), a lower level daemon that transmits and recieves MMSes. Available as [services.mmsd](#opt-services.mmsd.enable).
diff --git a/nixos/modules/config/stevenblack.nix b/nixos/modules/config/stevenblack.nix
new file mode 100644
index 000000000000..ec6868484942
--- /dev/null
+++ b/nixos/modules/config/stevenblack.nix
@@ -0,0 +1,34 @@
+{ config, lib, pkgs, ... }:
+
+let
+ inherit (lib) optionals mkOption mkEnableOption types mkIf elem concatStringsSep maintainers mdDoc;
+ cfg = config.networking.stevenblack;
+
+ # needs to be in a specific order
+ activatedHosts = with cfg; [ ]
+ ++ optionals (elem "fakenews" block) [ "fakenews" ]
+ ++ optionals (elem "gambling" block) [ "gambling" ]
+ ++ optionals (elem "porn" block) [ "porn" ]
+ ++ optionals (elem "social" block) [ "social" ];
+
+ hostsPath = "${pkgs.stevenblack-blocklist}/alternates/" + concatStringsSep "-" activatedHosts + "/hosts";
+in
+{
+ options.networking.stevenblack = {
+ enable = mkEnableOption (mdDoc "Enable the stevenblack hosts file blocklist.");
+
+ block = mkOption {
+ type = types.listOf (types.enum [ "fakenews" "gambling" "porn" "social" ]);
+ default = [ ];
+ description = mdDoc "Additional blocklist extensions.";
+ };
+ };
+
+ config = mkIf cfg.enable {
+ networking.hostFiles = [ ]
+ ++ optionals (activatedHosts != [ ]) [ hostsPath ]
+ ++ optionals (activatedHosts == [ ]) [ "${pkgs.stevenblack-blocklist}/hosts" ];
+ };
+
+ meta.maintainers = [ maintainers.fortuneteller2k maintainers.artturin ];
+}
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 41b953dc3473..583d282be544 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -23,6 +23,7 @@
./config/qt5.nix
./config/resolvconf.nix
./config/shells-environment.nix
+ ./config/stevenblack.nix
./config/swap.nix
./config/sysctl.nix
./config/system-environment.nix