https://noogle.dev - nix function exploring.
Go to file
Johannes Kirschbauer 1a9dddb549
Update README.md
2022-12-19 21:41:22 +01:00
.github/workflows add nix-unstable 2022-12-03 15:36:54 +01:00
components fix: remove spourious brackets 2022-12-19 09:28:29 +01:00
models add: social actions 2022-12-18 17:31:42 +01:00
pages fix: mismatched type signatures 2022-12-18 17:58:53 +01:00
public ux: improve lists and mobile 2022-12-03 17:38:50 +01:00
scripts add builtins & markdown highlighting 2022-12-09 16:41:59 +01:00
styles improve: mobile & dark theme 2022-12-12 14:24:16 +01:00
types improve preview & responsive ness 2022-12-11 21:22:45 +01:00
.envrc INIT: first prototype of frontend 2022-11-26 10:36:08 +01:00
.eslintrc.json INIT: first prototype of frontend 2022-11-26 10:36:08 +01:00
.gitignore INIT: first prototype of frontend 2022-11-26 10:36:08 +01:00
createEmotionCache.ts INIT: first prototype of frontend 2022-11-26 10:36:08 +01:00
flake.lock add: social actions 2022-12-18 17:31:42 +01:00
flake.nix add: social actions 2022-12-18 17:31:42 +01:00
next.config.js add real nixpkgs metadata from enhanced nixdoc 2022-12-03 15:25:32 +01:00
nix_systems INIT: first prototype of frontend 2022-11-26 10:36:08 +01:00
package-lock.json replace: useLocalStorage as it causes problems with absence of router-dom 2022-12-18 18:14:28 +01:00
package.json replace: useLocalStorage as it causes problems with absence of router-dom 2022-12-18 18:14:28 +01:00
README.md Update README.md 2022-12-19 21:41:22 +01:00
tsconfig.json INIT: first prototype of frontend 2022-11-26 10:36:08 +01:00

🚧 under construction 🚧

Any contributions are welcome

Noogle

Noogle is a Nix API search engine. It allows you to search functions based on their types and other attributes in nix projects. In nixpkgs especially the builtins and lib attributes.

  • Beginners-friendly search for nix and nix-related functions
  • Expert search with directly typing type signatures
  • Search functions based on:
    • type
    • signature
    • name
  • tree-search from one type to another

How it works

Indexers:

Data collections need to be up-to-date Those collections are then combined and dumped somewhere (db / json)

For the indexing i currently use:

  • Nixdoc (a fork) to collect nixpkgs.lib informations
  • nix __dump-builtins + builtins-types.json for the nix builtins

As some parts of nix already have nixos modules their input/output can be discovered. I still lack some tool to integrate that into noogle.

  • haskell-like types are parsed and splitted between input and ouput
  • text search, looks in all metadata fields for an exact matching word or character sequence. I dont have elastic search yet.

View the prototype here

We need your help / what is missing

  • Parsing Types: into a real type signature tree
  • Upstream missing type informations (like in /lib/attrsets.nix)
  • Write type signatures for the builtins in json
  • Add path, where each function can be imported from. e.g. lib.makeOverridable or lib.customisation.makeOverridable (it is available in both sets)
  • Website
    • improve share / social interactions
    • Add filter by tags e.g. lib.lists
    • Prepare for scaling up: Either use api or use indexedDB with WebAssembly for complete offline usage?
    • Mobile optimization for reading on the go
  • Clean up / enhance my nixdoc fork.
    • Make the sloppy parser more error resistant
    • Some valueable information can be used from the rnix AST ?

Contribute

Contributions are very welcome just file a PR or issue

Build this page

nix build .#

Develop

nix develop

This command creates the node_modules folder with all needed dependencies based on dream2nix.