aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Garrelou <simon.garrelou@airbus.com>2023-12-13 13:42:05 +0100
committerSimon Garrelou <simon.garrelou@airbus.com>2023-12-13 13:42:05 +0100
commit922700371c7ebb831ad711ed4dde534cdffd4f7b (patch)
tree4c6609537de9d5d57040f9feb86e7345330d84c5
parent9e6a87b8c756ef12856970ecd39c2c2246df5a56 (diff)
downloadnix-tools-922700371c7ebb831ad711ed4dde534cdffd4f7b.tar.gz
nix-tools-922700371c7ebb831ad711ed4dde534cdffd4f7b.zip
realize optionsJSON derivation for nixos-search
-rw-r--r--cmd/nixos-search/options.go28
1 files changed, 24 insertions, 4 deletions
diff --git a/cmd/nixos-search/options.go b/cmd/nixos-search/options.go
index a03c585..e5de32d 100644
--- a/cmd/nixos-search/options.go
+++ b/cmd/nixos-search/options.go
@@ -2,7 +2,9 @@ package main
2 2
3import ( 3import (
4 _ "embed" 4 _ "embed"
5 "encoding/json"
5 "fmt" 6 "fmt"
7 "os"
6 "strings" 8 "strings"
7 9
8 nix "git.sixfoisneuf.fr/nix-tools/nix" 10 nix "git.sixfoisneuf.fr/nix-tools/nix"
@@ -34,7 +36,7 @@ let
34 36
35 optionsDoc = pkgs.pkgs.buildPackages.nixosOptionsDoc { inherit options; }; 37 optionsDoc = pkgs.pkgs.buildPackages.nixosOptionsDoc { inherit options; };
36in 38in
37optionsDoc 39optionsDoc.optionsJSON.drvPath
38` 40`
39 41
40func LoadOptions(nixpkgs string) ([]Option, error) { 42func LoadOptions(nixpkgs string) ([]Option, error) {
@@ -43,14 +45,32 @@ func LoadOptions(nixpkgs string) ([]Option, error) {
43 return nil, fmt.Errorf("loading '%s': %v", nixpkgs, err) 45 return nil, fmt.Errorf("loading '%s': %v", nixpkgs, err)
44 } 46 }
45 47
46 res, err := pkgs.EvalSet(optionsExpr) 48 drv, err := pkgs.EvalString(optionsExpr)
47 if err != nil { 49 if err != nil {
48 return nil, fmt.Errorf("running Nix query: %v", err) 50 return nil, fmt.Errorf("running Nix query: %v", err)
49 } 51 }
50 52
53 path, err := nix.BuildDerivation(drv)
54 if err != nil {
55 return nil, fmt.Errorf("building options.json: %v", err)
56 }
57
58 path = strings.TrimSpace(path)
59 path = path + "/share/doc/nixos/options.json"
60
61 var res map[string]map[string]interface{}
62 data, err := os.ReadFile(path)
63 if err != nil {
64 return nil, fmt.Errorf("reading %s: %v", path, err)
65 }
66
67 err = json.Unmarshal(data, &res)
68 if err != nil {
69 return nil, fmt.Errorf("parsing JSON in %s: %v", path, err)
70 }
71
51 var options []Option 72 var options []Option
52 for option, paramsTmp := range res["optionsNix"].(map[string]interface{}) { 73 for option, params := range res {
53 params := paramsTmp.(map[string]interface{})
54 o := Option{ 74 o := Option{
55 Name: option, 75 Name: option,
56 } 76 }