From 71de5479bc625aa101f72a24b056b687b0630a9a Mon Sep 17 00:00:00 2001
From: Alan Pearce
Date: Sun, 5 May 2024 21:31:40 +0200
Subject: feat: link to nixpkgs on github for declarations
---
frontend/templates/blocks/options.gotmpl | 2 +-
importers/nixos-options.nix | 32 ++++++++++++++++++++++++++++++--
internal/options/option.go | 7 ++++++-
3 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/frontend/templates/blocks/options.gotmpl b/frontend/templates/blocks/options.gotmpl
index 7c98450..89c6f33 100644
--- a/frontend/templates/blocks/options.gotmpl
+++ b/frontend/templates/blocks/options.gotmpl
@@ -34,7 +34,7 @@
Declared
{{- range . }}
- {{ . }}
+ {{ .Name }}
{{- end }}
{{- end }}
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 ?
+, 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
diff --git a/internal/options/option.go b/internal/options/option.go
index d714ad2..b8b838a 100644
--- a/internal/options/option.go
+++ b/internal/options/option.go
@@ -47,9 +47,14 @@ func (html *HTML) UnmarshalJSON(raw []byte) error {
return nil
}
+type Link struct {
+ Name string
+ URL string `json:"url"`
+}
+
type NixOption struct {
Option string
- Declarations []string
+ Declarations []Link
Default NixValue
Description HTML
Example NixValue
--
cgit 1.4.1