diff options
author | Simon Garrelou <simon.garrelou@airbus.com> | 2023-12-13 13:42:05 +0100 |
---|---|---|
committer | Simon Garrelou <simon.garrelou@airbus.com> | 2023-12-13 13:42:05 +0100 |
commit | 922700371c7ebb831ad711ed4dde534cdffd4f7b (patch) | |
tree | 4c6609537de9d5d57040f9feb86e7345330d84c5 | |
parent | 9e6a87b8c756ef12856970ecd39c2c2246df5a56 (diff) | |
download | nix-tools-922700371c7ebb831ad711ed4dde534cdffd4f7b.tar.gz nix-tools-922700371c7ebb831ad711ed4dde534cdffd4f7b.zip |
realize optionsJSON derivation for nixos-search
-rw-r--r-- | cmd/nixos-search/options.go | 28 |
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 | ||
3 | import ( | 3 | import ( |
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; }; |
36 | in | 38 | in |
37 | optionsDoc | 39 | optionsDoc.optionsJSON.drvPath |
38 | ` | 40 | ` |
39 | 41 | ||
40 | func LoadOptions(nixpkgs string) ([]Option, error) { | 42 | func 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 | } |