about summary refs log tree commit diff stats
path: root/importers/nixos-options.nix
diff options
context:
space:
mode:
Diffstat (limited to 'importers/nixos-options.nix')
-rw-r--r--importers/nixos-options.nix32
1 files changed, 30 insertions, 2 deletions
diff --git a/importers/nixos-options.nix b/importers/nixos-options.nix
index 894f05e..3c0a18e 100644
--- a/importers/nixos-options.nix
+++ b/importers/nixos-options.nix
@@ -1,17 +1,45 @@
-{ pkgs ? import <nixpkgs> { }
+{ nixpkgs ? <nixpkgs>
+, pkgs ? import nixpkgs { }
 , system ? builtins.currentSystem
 , stateVersion ? pkgs.lib.version
 , ...
 }:
 let
   inherit (pkgs) lib;
-  nixos = pkgs.nixos ({ lib, pkgs, config, ... }: {
+  inherit (lib) hasPrefix removePrefix;
+
+  nixos = pkgs.nixos ({ lib, ... }: {
     nixpkgs.hostPlatform = system;
     system.stateVersion = lib.versions.majorMinor stateVersion;
   });
 
+  inherit (nixos.config.system.nixos) revision;
+
+  gitHubDeclaration = user: repo: ref: subpath:
+    # Default to `master` if we don't know what revision the system
+    # configuration is using (custom nixpkgs, etc.).
+    let urlRef = if ref != null then ref else "master";
+    in {
+      url = "https://github.com/${user}/${repo}/blob/${urlRef}/${subpath}";
+      name = "<${repo}/${subpath}>";
+    };
+
   doc = pkgs.nixosOptionsDoc {
     inherit (nixos) options;
+    transformOptions = opt: opt // {
+      declarations =
+        map
+          (decl:
+            if hasPrefix (toString nixpkgs) (toString decl)
+            then
+              gitHubDeclaration "NixOS" "nixpkgs" revision
+                (removePrefix "/"
+                  (removePrefix (toString nixpkgs) (toString decl)))
+            else if decl == "lib/modules.nix" then
+              gitHubDeclaration "NixOS" "nixpkgs" revision decl
+            else decl)
+          opt.declarations;
+    };
   };
 in
 doc.optionsJSON