mirror of
https://github.com/hsjobeki/noogle.git
synced 2024-12-24 22:42:58 +03:00
add real nixpkgs metadata from enhanced nixdoc
This commit is contained in:
parent
f1dfe18b0a
commit
334a8271aa
@ -1,28 +1,19 @@
|
||||
import {
|
||||
Box,
|
||||
Card,
|
||||
ListItemText,
|
||||
Paper,
|
||||
Stack,
|
||||
Typography,
|
||||
} from "@mui/material";
|
||||
import { ListItemText, Paper, Stack, Typography } from "@mui/material";
|
||||
import { DocItem } from "../../types/nix";
|
||||
|
||||
interface FunctionItemProps {
|
||||
selected: boolean;
|
||||
name: String;
|
||||
info: {
|
||||
"attr-path": String;
|
||||
source: String;
|
||||
from: String;
|
||||
to: String;
|
||||
};
|
||||
docItem: DocItem;
|
||||
}
|
||||
export default function FunctionItem(props: FunctionItemProps) {
|
||||
const { name, info, selected } = props;
|
||||
const { name, docItem, selected } = props;
|
||||
const { fn_type, category } = docItem;
|
||||
return (
|
||||
<Paper
|
||||
elevation={0}
|
||||
sx={{
|
||||
cursor: "pointer",
|
||||
display: "flex",
|
||||
justifyContent: "left",
|
||||
px: 2,
|
||||
@ -31,11 +22,14 @@ export default function FunctionItem(props: FunctionItemProps) {
|
||||
borderColor: selected ? "action.selected" : "none",
|
||||
borderWidth: 1,
|
||||
borderStyle: selected ? "solid" : "none",
|
||||
"&:hover": {
|
||||
backgroundColor: "action.hover",
|
||||
},
|
||||
}}
|
||||
>
|
||||
<Stack>
|
||||
<ListItemText primary={name} secondary={info["attr-path"]} />
|
||||
<Typography>{`${info.from} -> ${info.to} `}</Typography>
|
||||
<ListItemText primary={name} secondary={category} />
|
||||
<Typography>{`${fn_type} `}</Typography>
|
||||
</Stack>
|
||||
</Paper>
|
||||
);
|
||||
|
@ -1,8 +1,15 @@
|
||||
import { Box, Typography, Container, Link, useTheme } from "@mui/material";
|
||||
import {
|
||||
Box,
|
||||
Typography,
|
||||
Container,
|
||||
Link,
|
||||
useTheme,
|
||||
IconButton,
|
||||
} from "@mui/material";
|
||||
import { Image } from "../image";
|
||||
import nixSnowflake from "../../public/nix-snowflake.svg";
|
||||
import GitHubIcon from "@mui/icons-material/GitHub";
|
||||
// import Link from "next/link";
|
||||
|
||||
export interface LayoutProps {
|
||||
children: React.ReactNode;
|
||||
}
|
||||
@ -20,7 +27,9 @@ export function Layout(props: LayoutProps) {
|
||||
: "rgb(23, 17, 22)",
|
||||
}}
|
||||
>
|
||||
<header>
|
||||
<header
|
||||
// style={{ position: "sticky", top: 0, width: "100%", zIndex: 100 }}
|
||||
>
|
||||
<Box
|
||||
sx={{
|
||||
position: "fixed",
|
||||
@ -51,15 +60,35 @@ export function Layout(props: LayoutProps) {
|
||||
color: "#fff",
|
||||
}}
|
||||
>
|
||||
<Image
|
||||
src={nixSnowflake}
|
||||
alt="nix-logo"
|
||||
height={90}
|
||||
style={{
|
||||
marginBottom: "-1rem",
|
||||
<Box
|
||||
sx={{
|
||||
display: {
|
||||
xs: "none",
|
||||
md: "block",
|
||||
},
|
||||
}}
|
||||
/>
|
||||
>
|
||||
<Image
|
||||
src={nixSnowflake}
|
||||
alt="nix-logo"
|
||||
height={90}
|
||||
style={{
|
||||
marginBottom: "-1rem",
|
||||
}}
|
||||
/>
|
||||
</Box>
|
||||
<Box sx={{ ml: 1 }} component="span">{`noog\u03BBe`}</Box>
|
||||
<IconButton sx={{ float: "right", top: "1em", right: "1em" }}>
|
||||
<GitHubIcon
|
||||
fontSize="large"
|
||||
sx={{
|
||||
display: {
|
||||
xs: "none",
|
||||
md: "block",
|
||||
},
|
||||
}}
|
||||
/>
|
||||
</IconButton>
|
||||
</Typography>
|
||||
</Box>
|
||||
</header>
|
||||
|
@ -8,46 +8,77 @@ import {
|
||||
ListItemText,
|
||||
Typography,
|
||||
} from "@mui/material";
|
||||
import Highlight from "react-highlight";
|
||||
import LocalLibraryIcon from "@mui/icons-material/LocalLibrary";
|
||||
import InputIcon from "@mui/icons-material/Input";
|
||||
import OutputIcon from "@mui/icons-material/Output";
|
||||
import { FuncData } from "../../types/nix";
|
||||
|
||||
import { DocItem } from "../../types/nix";
|
||||
import CodeIcon from "@mui/icons-material/Code";
|
||||
interface PreviewProps {
|
||||
func: FuncData;
|
||||
docItem: DocItem;
|
||||
}
|
||||
|
||||
export const Preview = (props: PreviewProps) => {
|
||||
const { func } = props;
|
||||
const { docItem } = props;
|
||||
const { name, description, category, example, fn_type } = docItem;
|
||||
|
||||
const prefix = category.split(/([\/.])/gm).at(4);
|
||||
return (
|
||||
<Box sx={{ p: 1, width: "100%" }}>
|
||||
<Typography variant="h2">{func.name}</Typography>
|
||||
<Typography variant="h2">{`${prefix}.${name}`}</Typography>
|
||||
<List sx={{ width: "100%" }}>
|
||||
<ListItem>
|
||||
<ListItemIcon>
|
||||
<LocalLibraryIcon />
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={func.info["attr-path"]}
|
||||
secondary={func.info["doc-url"]}
|
||||
sx={{
|
||||
overflow: "hidden",
|
||||
textOverflow: "ellipsis",
|
||||
}}
|
||||
primary={category.replace("./", "nixpkgs/")}
|
||||
secondary={description}
|
||||
/>
|
||||
<ListItemSecondaryAction>
|
||||
<Link href={func.info["doc-url"]}>View Docs</Link>
|
||||
<Link href={"#"}>View Docs</Link>
|
||||
</ListItemSecondaryAction>
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<ListItemIcon>
|
||||
<InputIcon />
|
||||
</ListItemIcon>
|
||||
<ListItemText primary={func.info.from} secondary="argument type" />
|
||||
<ListItemText
|
||||
sx={{
|
||||
overflow: "hidden",
|
||||
textOverflow: "ellipsis",
|
||||
}}
|
||||
primary={fn_type}
|
||||
secondary="function signature"
|
||||
/>
|
||||
</ListItem>
|
||||
<ListItem>
|
||||
<ListItem
|
||||
sx={{
|
||||
backgroundColor: "background.paper",
|
||||
}}
|
||||
>
|
||||
<ListItemIcon>
|
||||
<OutputIcon />
|
||||
<CodeIcon />
|
||||
</ListItemIcon>
|
||||
<ListItemText primary={func.info.to} secondary="return type" />
|
||||
<ListItemText
|
||||
sx={{
|
||||
overflow: "hidden",
|
||||
textOverflow: "ellipsis",
|
||||
}}
|
||||
disableTypography
|
||||
primary={
|
||||
<Typography sx={{ color: "text.secondary" }}>Example</Typography>
|
||||
}
|
||||
secondary={
|
||||
<Box sx={{ mt: -2, pl: 1.5 }}>
|
||||
<Highlight className="nix">{example}</Highlight>
|
||||
</Box>
|
||||
}
|
||||
/>
|
||||
</ListItem>
|
||||
<ListItem></ListItem>
|
||||
</List>
|
||||
</Box>
|
||||
);
|
||||
|
93
flake.lock
93
flake.lock
@ -123,6 +123,21 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"locked": {
|
||||
"lastModified": 1659877975,
|
||||
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils-pre-commit": {
|
||||
"locked": {
|
||||
"lastModified": 1644229661,
|
||||
@ -201,6 +216,30 @@
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixdoc-fork": {
|
||||
"inputs": {
|
||||
"flake-utils": [
|
||||
"nixdoc-fork",
|
||||
"rust-overlay",
|
||||
"flake-utils"
|
||||
],
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"rust-overlay": "rust-overlay"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1670069861,
|
||||
"narHash": "sha256-K+uqDkNkw5W3Rv6kIfJ43htAkhZwqNrVXg+pW6lNez4=",
|
||||
"owner": "hsjobeki",
|
||||
"repo": "nixdoc",
|
||||
"rev": "29813f73b02d85c57856afe8bc09d3ab308bfe55",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hsjobeki",
|
||||
"repo": "nixdoc",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1665580254,
|
||||
@ -216,6 +255,38 @@
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1669919498,
|
||||
"narHash": "sha256-cndPLdFj2V0OchIgz1sOVKZXOi+ETgSq/OqCCbWsRoo=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "14c7bd44711b04c05cb78412451005415310b6bd",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-22.11",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1665296151,
|
||||
"narHash": "sha256-uOB0oxqxN9K7XGF1hcnY+PQnlQJ+3bP2vCn/+Ru/bbc=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "14ccaaedd95a488dd7ae142757884d8e125b3363",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"poetry2nix": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
@ -260,7 +331,8 @@
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"dream2nix": "dream2nix"
|
||||
"dream2nix": "dream2nix",
|
||||
"nixdoc-fork": "nixdoc-fork"
|
||||
}
|
||||
},
|
||||
"rust-analyzer-src": {
|
||||
@ -279,6 +351,25 @@
|
||||
"repo": "rust-analyzer",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"rust-overlay": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1670034122,
|
||||
"narHash": "sha256-EqmuOKucPWtMvCZtHraHr3Q3bgVszq1x2PoZtQkUuEk=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "a0d5773275ecd4f141d792d3a0376277c0fc0b65",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
|
13
flake.nix
13
flake.nix
@ -1,10 +1,12 @@
|
||||
{
|
||||
inputs.dream2nix.url = "github:nix-community/dream2nix";
|
||||
inputs.nixdoc-fork.url = "github:hsjobeki/nixdoc";
|
||||
outputs = inp:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
inherit (builtins.fromJSON (builtins.readFile ./package.json)) name;
|
||||
in
|
||||
inp.dream2nix.lib.makeFlakeOutputs {
|
||||
(inp.dream2nix.lib.makeFlakeOutputs {
|
||||
systemsFromFile = ./nix_systems;
|
||||
config.projectRoot = ./.;
|
||||
source = ./.;
|
||||
@ -15,6 +17,9 @@
|
||||
];
|
||||
packageOverrides = {
|
||||
${name}.staticPage = {
|
||||
preBuild = ''
|
||||
cp ${inp.nixdoc-fork.packages.${system}.data} ./models/data.json
|
||||
'';
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
@ -26,5 +31,9 @@
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
});
|
||||
# // {
|
||||
# packages.${system}.nixi = inp.nixdoc-fork.packages.${system}.data;
|
||||
# };
|
||||
|
||||
}
|
||||
|
2553
models/data.json
Normal file
2553
models/data.json
Normal file
File diff suppressed because it is too large
Load Diff
341
models/nix.ts
341
models/nix.ts
@ -1,341 +0,0 @@
|
||||
import { NixFunctionSet, NixType } from "../types/nix";
|
||||
|
||||
export const nixFuns: NixFunctionSet = {
|
||||
mapAttrs: {
|
||||
"attr-path": "builtins.mapAttrs",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nix/stable/language/builtins.html#builtins-mapAttrs",
|
||||
source: "builtin",
|
||||
from: "attrset",
|
||||
to: "attrset",
|
||||
},
|
||||
"mapAttrs'": {
|
||||
"attr-path": "lib.mapAttrs'",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-attrset",
|
||||
source: "nixpkgs",
|
||||
from: "attrset",
|
||||
to: "attrset",
|
||||
},
|
||||
genAttrs: {
|
||||
"attr-path": "lib.genAttrs",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-attrset",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "attrset",
|
||||
},
|
||||
forEach: {
|
||||
"attr-path": "lib.forEach",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
foldr: {
|
||||
"attr-path": "lib.foldr",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "any",
|
||||
},
|
||||
foldl: {
|
||||
"attr-path": "lib.foldl",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "any",
|
||||
},
|
||||
"foldl'": {
|
||||
"attr-path": "lib.foldl'",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "any",
|
||||
},
|
||||
imap0: {
|
||||
"attr-path": "lib.imap0",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
imap1: {
|
||||
"attr-path": "lib.imap1",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
concatMap: {
|
||||
"attr-path": "lib.concatMap",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
flatten: {
|
||||
"attr-path": "lib.flatten",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
remove: {
|
||||
"attr-path": "lib.remove",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
findSingle: {
|
||||
"attr-path": "lib.findSingle",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "any",
|
||||
},
|
||||
findFirst: {
|
||||
"attr-path": "lib.findFirst",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "any",
|
||||
},
|
||||
any: {
|
||||
"attr-path": "lib.any",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "bool",
|
||||
},
|
||||
all: {
|
||||
"attr-path": "lib.all",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "bool",
|
||||
},
|
||||
count: {
|
||||
"attr-path": "lib.count",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "int",
|
||||
},
|
||||
optional: {
|
||||
"attr-path": "lib.optional",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "bool",
|
||||
to: "list",
|
||||
},
|
||||
optionals: {
|
||||
"attr-path": "lib.optionals",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "bool",
|
||||
to: "list",
|
||||
},
|
||||
toList: {
|
||||
"attr-path": "lib.toList",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "any",
|
||||
to: "list",
|
||||
},
|
||||
toString: {
|
||||
"attr-path": "builtins.toString'",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nix/stable/language/builtins.html#builtins-toString",
|
||||
source: "builtin",
|
||||
from: "any" as NixType,
|
||||
to: "string" as NixType,
|
||||
},
|
||||
range: {
|
||||
"attr-path": "lib.range",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "int",
|
||||
to: "list",
|
||||
},
|
||||
partition: {
|
||||
"attr-path": "lib.partition",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
"groupBy'": {
|
||||
"attr-path": "lib.groupBy'",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
groupBy: {
|
||||
"attr-path": "lib.groupBy",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
zipListsWith: {
|
||||
"attr-path": "lib.zipListsWith",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
zipLists: {
|
||||
"attr-path": "lib.zipLists",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
reverseList: {
|
||||
"attr-path": "lib.reverseList",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
listDfs: {
|
||||
"attr-path": "lib.listDfs",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "attrset",
|
||||
},
|
||||
toposort: {
|
||||
"attr-path": "lib.toposort",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
sort: {
|
||||
"attr-path": "lib.sort",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
compareLists: {
|
||||
"attr-path": "lib.compareLists",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "int",
|
||||
},
|
||||
naturalSort: {
|
||||
"attr-path": "lib.naturalSort",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
take: {
|
||||
"attr-path": "lib.take",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
sublist: {
|
||||
"attr-path": "lib.sublist",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
last: {
|
||||
"attr-path": "lib.last",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "any",
|
||||
},
|
||||
init: {
|
||||
"attr-path": "lib.init",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
crossLists: {
|
||||
"attr-path": "lib.crossLists",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
unique: {
|
||||
"attr-path": "lib.unique",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
intersectLists: {
|
||||
"attr-path": "lib.intersectLists",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
subtractLists: {
|
||||
"attr-path": "lib.subtractLists",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "list",
|
||||
},
|
||||
mutuallyExclusive: {
|
||||
"attr-path": "lib.mutuallyExclusive",
|
||||
"doc-url":
|
||||
"https://nixos.org/manual/nixpkgs/stable/#sec-functions-library-lists",
|
||||
source: "nixpkgs",
|
||||
from: "list",
|
||||
to: "bool",
|
||||
},
|
||||
};
|
||||
|
@ -1,7 +1,3 @@
|
||||
// const
|
||||
|
||||
const { PHASE_DEVELOPMENT_SERVER } = require("next/dist/shared/lib/constants");
|
||||
|
||||
/** @type {import('next').NextConfig} */
|
||||
|
||||
const nextConfig = (phase, { defaultConfig }) => {
|
||||
@ -12,9 +8,6 @@ const nextConfig = (phase, { defaultConfig }) => {
|
||||
loader: "custom",
|
||||
},
|
||||
};
|
||||
if (phase !== PHASE_DEVELOPMENT_SERVER) {
|
||||
return { ...config, basePath: "", assetPrefix: "" };
|
||||
}
|
||||
return config;
|
||||
};
|
||||
|
||||
|
812
package-lock.json
generated
812
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -20,9 +20,14 @@
|
||||
"@types/react-dom": "18.0.8",
|
||||
"eslint": "8.27.0",
|
||||
"eslint-config-next": "13.0.2",
|
||||
"highlight.js": "^11.7.0",
|
||||
"next": "13.0.2",
|
||||
"react": "18.2.0",
|
||||
"react-dom": "18.2.0",
|
||||
"react-highlight": "^0.15.0",
|
||||
"typescript": "4.8.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react-highlight": "^0.12.5"
|
||||
}
|
||||
}
|
||||
|
@ -2,23 +2,23 @@ import { BasicList, BasicListItem } from "../components/basicList";
|
||||
import { useState, useMemo } from "react";
|
||||
import { Box } from "@mui/material";
|
||||
import FunctionItem from "../components/functionItem/functionItem";
|
||||
import { NixType, nixTypes, FuncData } from "../types/nix";
|
||||
import { nixFuns } from "../models/nix";
|
||||
import { NixType, nixTypes, MetaData, DocItem } from "../types/nix";
|
||||
import { Preview } from "../components/preview/preview";
|
||||
import metadata from "../models/data.json";
|
||||
// const mockData: FuncData[] = Object.entries(nixFuns).map(([key, value]) => ({
|
||||
// name: key,
|
||||
// info: value,
|
||||
// }));
|
||||
|
||||
const mockData: FuncData[] = Object.entries(nixFuns).map(([key, value]) => ({
|
||||
name: key,
|
||||
info: value,
|
||||
}));
|
||||
const data: MetaData = metadata as MetaData;
|
||||
|
||||
const pipe =
|
||||
(...fns: ((arr: FuncData[]) => FuncData[])[]) =>
|
||||
(x: FuncData[]) =>
|
||||
fns.reduce((v, f) => f(v), x);
|
||||
function pipe<T>(...fns: ((arr: T) => T)[]) {
|
||||
return (x: T) => fns.reduce((v, f) => f(v), x);
|
||||
}
|
||||
|
||||
const search =
|
||||
(term: string) =>
|
||||
(data: FuncData[]): FuncData[] => {
|
||||
(data: MetaData): MetaData => {
|
||||
return data.filter((item) => {
|
||||
return Object.values(item).some((value) => {
|
||||
const valueAsString = value.toString();
|
||||
@ -26,11 +26,44 @@ const search =
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const preProcess = (a: string | undefined) => {
|
||||
if (a?.match(/\[(.*)\]/)) {
|
||||
return "list";
|
||||
}
|
||||
if (a?.toLowerCase()?.includes("attrset")) {
|
||||
return "attrset";
|
||||
}
|
||||
return a;
|
||||
};
|
||||
const filter =
|
||||
(to: NixType[], from: NixType[]) =>
|
||||
(data: FuncData[]): FuncData[] => {
|
||||
(data: MetaData): MetaData => {
|
||||
return data.filter(
|
||||
({ info }) => from.includes(info.from) && to.includes(info.to)
|
||||
// TODO: Implement proper type matching
|
||||
({ name, fn_type }) => {
|
||||
if (fn_type) {
|
||||
const args = fn_type.split("->");
|
||||
const front = args.slice(0, -1);
|
||||
let firstTerm = front.at(0);
|
||||
if (firstTerm?.includes("::")) {
|
||||
firstTerm = firstTerm.split("::").at(1);
|
||||
}
|
||||
const inpArgs = [firstTerm, ...front.slice(1, -1)];
|
||||
const parsedInpTypes = inpArgs.map(preProcess);
|
||||
// const fn_from =
|
||||
const fn_to = args.at(-1);
|
||||
const parsedOutType = preProcess(fn_to);
|
||||
if (name.includes("escapeShellArgs")) {
|
||||
console.log({ args, inp_args: inpArgs, fn_to });
|
||||
}
|
||||
return (
|
||||
from.some((f) => parsedInpTypes.join(" ").includes(f)) &&
|
||||
to.some((t) => parsedOutType?.includes(t))
|
||||
);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
@ -52,7 +85,7 @@ export default function FunctionsPage() {
|
||||
};
|
||||
|
||||
const filteredData = useMemo(
|
||||
() => pipe(filter(to, from), search(term))(mockData),
|
||||
() => pipe(filter(to, from), search(term))(data),
|
||||
[to, from, term]
|
||||
);
|
||||
|
||||
@ -76,23 +109,27 @@ export default function FunctionsPage() {
|
||||
};
|
||||
|
||||
const preRenderedItems: BasicListItem[] = filteredData.map(
|
||||
({ name, info }) => ({
|
||||
(docItem: DocItem) => ({
|
||||
item: (
|
||||
<Box
|
||||
sx={{
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
}}
|
||||
onClick={() => handleSelect(name)}
|
||||
onClick={() => handleSelect(docItem.name)}
|
||||
>
|
||||
<FunctionItem name={name} info={info} selected={selected === name} />
|
||||
<FunctionItem
|
||||
name={docItem.name}
|
||||
docItem={docItem}
|
||||
selected={selected === docItem.name}
|
||||
/>
|
||||
</Box>
|
||||
),
|
||||
key: name,
|
||||
key: docItem.name,
|
||||
})
|
||||
);
|
||||
const preview = (
|
||||
<Preview func={mockData.find((f) => f.name === selected) || mockData[0]} />
|
||||
<Preview docItem={data.find((f) => f.name === selected) || data[0]} />
|
||||
);
|
||||
|
||||
return (
|
||||
|
45
types/nix.ts
45
types/nix.ts
@ -1,3 +1,15 @@
|
||||
// {
|
||||
// "category": "./lib/customisation.nix",
|
||||
// "name": "overrideDerivation",
|
||||
// "fn_type": null,
|
||||
// "description": [
|
||||
// "`overrideDerivation drv f' takes a derivation (i.e., the result\nof a call to the builtin function `derivation') and returns a new\nderivation in which the attributes of the original are overridden\naccording to the function `f'. The function `f' is called with\nthe original derivation attributes.",
|
||||
// "`overrideDerivation' allows certain \"ad-hoc\" customisation\nscenarios (e.g. in ~/.config/nixpkgs/config.nix). For instance,\nif you want to \"patch\" the derivation returned by a package\nfunction in Nixpkgs to build another version than what the\nfunction itself provides, you can do something like this:",
|
||||
// "mySed = overrideDerivation pkgs.gnused (oldAttrs: {\nname = \"sed-4.2.2-pre\";\nsrc = fetchurl {\nurl = ftp://alpha.gnu.org/gnu/sed/sed-4.2.2-pre.tar.bz2;\nsha256 = \"11nq06d131y4wmf3drm0yk502d2xc6n5qy82cg88rb9nqd2lj41k\";\n};\npatches = [];\n});",
|
||||
// "For another application, see build-support/vm, where this\nfunction is used to build arbitrary derivations inside a QEMU\nvirtual machine."
|
||||
// ],
|
||||
// "example": null
|
||||
// },
|
||||
export type NixType = "attrset" | "list" | "string" | "int" | "bool" | "any";
|
||||
export const nixTypes: NixType[] = [
|
||||
"any",
|
||||
@ -6,19 +18,30 @@ export const nixTypes: NixType[] = [
|
||||
"string",
|
||||
"bool",
|
||||
"int",
|
||||
];
|
||||
];
|
||||
|
||||
export type FuncData = {
|
||||
export type DocItem = {
|
||||
category: string;
|
||||
name: string;
|
||||
info: NixFunctionMeta;
|
||||
fn_type?: string;
|
||||
description?: string | string[];
|
||||
example?: string | string[];
|
||||
};
|
||||
|
||||
export type NixFunctionMeta = {
|
||||
"attr-path": string;
|
||||
"doc-url": string;
|
||||
source: string;
|
||||
from: NixType;
|
||||
to: NixType;
|
||||
}
|
||||
export type MetaData = DocItem[];
|
||||
|
||||
export type NixFunctionSet = {[name:string]: NixFunctionMeta}
|
||||
|
||||
// export type FuncData = {
|
||||
// name: string;
|
||||
// info: NixFunctionMeta;
|
||||
// };
|
||||
|
||||
// export type NixFunctionMeta = {
|
||||
// "attr-path": string;
|
||||
// "doc-url": string;
|
||||
// source: string;
|
||||
// from: NixType;
|
||||
// to: NixType;
|
||||
// }
|
||||
|
||||
// export type NixFunctionSet = {[name:string]: NixFunctionMeta}
|
Loading…
Reference in New Issue
Block a user