diff --git a/docs/book.toml b/docs/book.toml
index d31b799..77ec9d4 100644
--- a/docs/book.toml
+++ b/docs/book.toml
@@ -3,7 +3,7 @@ authors = ["Jalil David Salamé Messina"]
 language = "en"
 multilingual = false
 src = "src"
-title = "Jalil's NixOS configuration module"
+title = "Jalil's NixOS configuration modules"
 
 [preprocessor.toc]
 command = "mdbook-toc"
diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md
index 16ff37a..48707f4 100644
--- a/docs/src/SUMMARY.md
+++ b/docs/src/SUMMARY.md
@@ -1,6 +1,9 @@
 # Summary
 
-- [Nix Based Configuration](./configuration-overview.md)
-    - [NixOS Module Options](./nixos-options.md)
-    - [Neovim Module Options](./nvim-options.md)
-    - [Home Manager Module Options](./home-options.md)
+[Nix Based Configuration](./configuration-overview.md)
+
+- [NixOS Module Options](./nixos-options.md)
+- [Neovim Module Options](./nvim-options.md)
+- [Home Manager Module Options](./home-options.md)
+
+[Search](./search/index.html)
diff --git a/flake-modules/docs.nix b/flake-modules/docs.nix
index 8e6402a..8f45d14 100644
--- a/flake-modules/docs.nix
+++ b/flake-modules/docs.nix
@@ -1,46 +1,50 @@
-{ lib, inputs, ... }:
+{ lib, ... }:
 {
   perSystem =
-    { pkgs, ... }:
+    { inputs', pkgs, ... }:
     {
       packages =
         let
-          modules = ../modules;
           filterVisible =
             toplevelOption: option:
             option // { visible = option.visible && builtins.elemAt option.loc 0 == toplevelOption; };
-          home-eval = lib.evalModules {
-            modules = [ "${modules}/hm/options.nix" ];
-            specialArgs = {
-              inherit pkgs;
+          genOptionsDoc =
+            toplevelOption: module:
+            pkgs.nixosOptionsDoc {
+              inherit (lib.evalModules { modules = [ module ]; }) options;
+              transformOptions = filterVisible toplevelOption;
             };
+          mkScope = name: options: {
+            inherit name;
+            optionsJSON = "${options.optionsJSON}/share/doc/nixos/options.json";
+            urlPrefix = "https://github.com/jalil-salame/configuration.nix/blob/main/";
           };
-          nvim-eval = lib.evalModules { modules = [ "${modules}/nixvim/options.nix" ]; };
-          nixos-eval = lib.evalModules { modules = [ "${modules}/nixos/options.nix" ]; };
-          home-markdown =
-            (pkgs.nixosOptionsDoc {
-              inherit (home-eval) options;
-              transformOptions = filterVisible "jhome";
-            }).optionsCommonMark;
-          nvim-markdown =
-            (pkgs.nixosOptionsDoc {
-              inherit (nvim-eval) options;
-              transformOptions = filterVisible "jhome";
-            }).optionsCommonMark;
-          nixos-markdown =
-            (pkgs.nixosOptionsDoc {
-              inherit (nixos-eval) options;
-              transformOptions = filterVisible "jconfig";
-            }).optionsCommonMark;
+          search = inputs'.nuschtosSearch.packages.mkMultiSearch {
+            title = "Search Jalil'\"'\"'s configuration.nix";
+            baseHref = "/";
+
+            scopes = [
+              (mkScope "NixOS" nixos)
+              (mkScope "Home-Manager" home)
+              (mkScope "NixVIM" nvim)
+            ];
+          };
+          home = genOptionsDoc "jhome" ../modules/hm/options.nix;
+          nvim = genOptionsDoc "jhome" ../modules/nixvim/options.nix;
+          nixos = genOptionsDoc "jconfig" ../modules/nixos/options.nix;
+          nixos-markdown = nixos.optionsCommonMark;
+          home-markdown = home.optionsCommonMark;
+          nvim-markdown = nvim.optionsCommonMark;
         in
         {
+          inherit search;
           docs-home-markdown = home-markdown;
           docs-nixos-markdown = nixos-markdown;
           docs-nvim-markdown = nvim-markdown;
           # Documentation
           docs = pkgs.stdenvNoCC.mkDerivation {
             name = "nixos-configuration-book";
-            src = inputs.self + "/docs";
+            src = ../docs;
 
             patchPhase = ''
               cleanup_md() {
@@ -53,7 +57,9 @@
               cleanup_md ${home-markdown} >> ./src/home-options.md
               cleanup_md ${nvim-markdown} >> ./src/nvim-options.md
               cleanup_md ${nixos-markdown} >> ./src/nixos-options.md
-            '';
+              # link search site
+              ln -s "${search.override { baseHref = "/configuration.nix/search/"; }}" ./src/search
+            ''; # FIXME: only add the `/configuration.nix/` part for GH CI
 
             nativeBuildInputs = [ pkgs.mdbook-toc ];
             buildPhase = "${pkgs.mdbook}/bin/mdbook build --dest-dir \"$out\"";
diff --git a/flake.lock b/flake.lock
index a6c9d81..4724875 100644
--- a/flake.lock
+++ b/flake.lock
@@ -240,6 +240,32 @@
         "type": "github"
       }
     },
+    "ixx": {
+      "inputs": {
+        "flake-utils": [
+          "nuschtosSearch",
+          "flake-utils"
+        ],
+        "nixpkgs": [
+          "nuschtosSearch",
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1729958008,
+        "narHash": "sha256-EiOq8jF4Z/zQe0QYVc3+qSKxRK//CFHMB84aYrYGwEs=",
+        "owner": "NuschtOS",
+        "repo": "ixx",
+        "rev": "9fd01aad037f345350eab2cd45e1946cc66da4eb",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NuschtOS",
+        "ref": "v0.0.6",
+        "repo": "ixx",
+        "type": "github"
+      }
+    },
     "lix": {
       "flake": false,
       "locked": {
@@ -329,6 +355,31 @@
         "type": "github"
       }
     },
+    "nuschtosSearch": {
+      "inputs": {
+        "flake-utils": [
+          "lix-module",
+          "flake-utils"
+        ],
+        "ixx": "ixx",
+        "nixpkgs": [
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1741886583,
+        "narHash": "sha256-sScfYKtxp3CYv5fJcHQDvQjqBL+tPNQqS9yf9Putd+s=",
+        "owner": "NuschtOS",
+        "repo": "search",
+        "rev": "2974bc5fa3441a319fba943f3ca41f7dcd1a1467",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NuschtOS",
+        "repo": "search",
+        "type": "github"
+      }
+    },
     "root": {
       "inputs": {
         "flake-parts": "flake-parts",
@@ -336,6 +387,7 @@
         "lix-module": "lix-module",
         "nixpkgs": "nixpkgs",
         "nixvim": "nixvim",
+        "nuschtosSearch": "nuschtosSearch",
         "stylix": "stylix",
         "systems": "systems",
         "treefmt-nix": "treefmt-nix",
diff --git a/flake.nix b/flake.nix
index 8c9a20b..70fa1ee 100644
--- a/flake.nix
+++ b/flake.nix
@@ -47,10 +47,19 @@
       url = "github:hercules-ci/flake-parts";
       inputs.nixpkgs-lib.follows = "nixpkgs";
     };
+    # For the formatter (can be set to null)
     treefmt-nix = {
       url = "github:numtide/treefmt-nix";
       inputs.nixpkgs.follows = "nixpkgs";
     };
+    # For generating the docs (can be set to null)
+    nuschtosSearch = {
+      url = "github:NuschtOS/search";
+      inputs = {
+        nixpkgs.follows = "nixpkgs";
+        flake-utils.follows = "lix-module/flake-utils";
+      };
+    };
     # For deduplication
     systems.url = "github:nix-systems/default";
   };