Skip to content

Commit

Permalink
Add FAQ example
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcelCoding committed Jan 25, 2025
1 parent 570cc17 commit bff7d4a
Showing 1 changed file with 45 additions and 17 deletions.
62 changes: 45 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,15 @@ There are two functions exposeed to build the directory containing the static se

### Explanation of options

- `baseHref` - The directory to where the search is going to be deployed relative to the domain. Defaults to `/`.
- `title` - The title on the top left. Defaults to `NüschtOS Search`.
- `modules` - A list of NixOS modules as an attrset or file similar to the `nixosSystem` function. Exclusive with `optionsJSON`.
- `optionsJSON` - Path to a pre-generated `options.json` file. Exclusive with `modules`.
- `optionsPrefix` - A static prefix to append to all options. An extra `dot` is always appended. Defaults to being empty.
- `urlPrefix` - The prefix which is prepended to the declaration link. This is usually a link to a git.

- `scopes` is a list of attributes which each takes `name`, `modules`, `optionsJSON`, `optionsPrefix` or `urlPrefix` option.
| Name | Description |
|---|---|
| `baseHref` | The directory to where the search is going to be deployed relative to the domain. Defaults to `/`. |
| `title` | The title on the top left. Defaults to `NüschtOS Search`. |
| `modules` | A list of NixOS modules as an attrset or file similar to the `nixosSystem` function. Exclusive with `optionsJSON`. |
| `optionsJSON` | Path to a pre-generated `options.json` file. Exclusive with `modules`. |
| `optionsPrefix` | A static prefix to append to all options. An extra `dot` is always appended. Defaults to being empty. |
| `urlPrefix` | The prefix which is prepended to the declaration link. This is usually a link to a git. |
| `scopes` | is a list of attributes which each takes `name`, `modules`, `optionsJSON`, `optionsPrefix` or `urlPrefix` option. |

### Examples

Expand All @@ -49,12 +50,35 @@ mkMultiSearch {
```

```nix
mkSearch { modules = [ self.inputs.nixos-modules.nixosModule ]; urlPrefix = "https://github.com/NuschtOS/nixos-modules/blob/main/"; }
mkSearch { optionsJSON = ./path/to/options.json; optionsPrefix = "programs.example"; urlPrefix = "https://git.example.com/blob/main/"; }
mkSearch { optionsJSON = ./path/to/options.json; urlPrefix = "https://git.example.com/blob/main/"; baseHref = "/search/"; title = "Custom Search"; }
mkSearch {
modules = [ self.inputs.nixos-modules.nixosModule ];
urlPrefix = "https://github.com/NuschtOS/nixos-modules/blob/main/";
}
```

```nix
mkSearch {
optionsJSON = ./path/to/options.json;
optionsPrefix = "programs.example";
urlPrefix = "https://git.example.com/blob/main/";
}
```
- Static page with GitHub Actions and Cloudflare/GitHub Pages https://github.com/NuschtOS/search.nuschtos.de/blob/main/.github/workflows/gh-pages.yaml https://github.com/NuschtOS/search.nuschtos.de/blob/main/flake.nix
- Deployed with NixOS https://gitea.c3d2.de/c3d2/nix-config/src/branch/master/hosts/nixos-misc/default.nix#L48-L103

```nix
mkSearch {
optionsJSON = ./path/to/options.json;
urlPrefix = "https://git.example.com/blob/main/";
baseHref = "/search/";
title = "Custom Search";
}
```

- Static page with GitHub Actions and Cloudflare/GitHub Pages
<https://github.com/NuschtOS/search.nuschtos.de/blob/main/.github/workflows/gh-pages.yaml>
<https://github.com/NuschtOS/search.nuschtos.de/blob/main/flake.nix>

- Deployed with NixOS
<https://gitea.c3d2.de/c3d2/nix-config/src/branch/master/hosts/nixos-misc/default.nix#L48-L103>

## Motivation

Expand All @@ -68,19 +92,23 @@ but without the need to deploy an Elasticsearch. Ideally it should be just a sta
This is most often caused by using nix' `import` keyword to load a module in the flake instead of referencing it via the path type.
This causes the module system to no longer be aware of the origin of the module and the missing declaration.

If no arguments are being hand over, this can be easily fixed by removing the `import` keyword. (e.g. [change in sops-nix](https://github.com/Mic92/sops-nix/pull/645))
If arguments are being hand over, the module needs to be slightly refactored.
It is often the easiest to move everything depending on the arguments into the `flake.nix` and loading the module via the module systems `imports` variable. (e.g. [change in ifstate.nix](https://codeberg.org/m4rc3l/ifstate.nix/pulls/9))
- If no arguments are being hand over, this can be easily fixed by removing the `import` keyword. (e.g. [change in sops-nix](https://github.com/Mic92/sops-nix/pull/645))
- If arguments are being hand over, the module needs to be slightly refactored.
- It is often the easiest to move everything depending on the arguments into the `flake.nix` and loading the module via the module systems `imports` variable. (e.g. [change in ifstate.nix](https://codeberg.org/m4rc3l/ifstate.nix/pulls/9))

### default/example is a string/has extra surrounding quotes

This is caused by a missing `lib.literalExpression` in default/example. Please open a pull request against the source of that option to fix this.

### Eval Errors

Sometimes default values are computed. As the required input data is typically not available, `defaultText` should be used. (e.g. [change in nixos-hardware](https://github.com/NixOS/nixos-hardware/pull/1343))

## Debugging `options.json`

Generating a `options.json` in a `nix repl` can be done with the following snippet:

```
```nix
:b (pkgs.nixosOptionsDoc { inherit ((lib.evalModules { modules = [ { config._module.check = false; } outputs.nixosModules.default ]; })) options; warningsAreErrors = false; }).optionsJSON
```

Expand Down

0 comments on commit bff7d4a

Please sign in to comment.