Skip to content

Commit 70fc805

Browse files
committed
Attempt to support vscode extensions.
1 parent dbf49b2 commit 70fc805

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

lib/schema.ncl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
let nix = import "./nix-interop/nix.ncl" in
22
let filegen = import "files.ncl" in
3+
let vscode = import "vscode.ncl" in
34
{
45
OrganistShells = {
56
dev
@@ -64,4 +65,5 @@ let filegen = import "files.ncl" in
6465
= {},
6566
}
6667
& filegen.Schema
68+
& vscode.Schema
6769
}

lib/vscode.ncl

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
let nix = import "./nix-interop/nix.ncl" in
2+
let ExtensionFromMarketplace = {
3+
publisher | String,
4+
name | String,
5+
version | String,
6+
sha256 | String
7+
} in
8+
let VSCodeSchema = {
9+
extensions
10+
| doc "Extensions to install locally in the workspace"
11+
| { _ : ExtensionFromMarketplace }
12+
| default = {}
13+
} in
14+
let BuiltExtensionDetails = {
15+
name | String,
16+
path | Dyn
17+
} in
18+
let buildExtension : String -> ExtensionFromMarketplace -> BuiltExtensionDetails = fun extName efm =>
19+
{ name = extName,
20+
path = nix.derivation.CallNix & { function = m%"
21+
vscode-utils.buildVscodeMarketplaceExtension
22+
{ mktplcRef =
23+
{ publisher = "{publisher}";
24+
name = "{name}";
25+
version = "{version}";
26+
sha256="{sha256}";
27+
};
28+
}
29+
"%,
30+
args = {
31+
publisher = efm.publisher,
32+
name = efm.name,
33+
version = efm.version,
34+
sha256 = efm.sha256
35+
}
36+
}} | BuiltExtensionDetails in
37+
let regenerate-vscode | { _ : ExtensionFromMarketplace} -> nix.derivation.Derivation = fun exts =>
38+
{ name = "regenerate-vscode-exts",
39+
content.text = exts
40+
|> std.record.to_array
41+
|> std.array.map (fun {field = extName, value = ext} => buildExtension extName ext)
42+
|> std.array.fold_left
43+
( fun acc elt =>
44+
nix-s%"
45+
%{acc}
46+
ln -s ".vscode/extensions/%{elt.name}" %{elt.path}
47+
"%)
48+
"",
49+
} | nix.builders.ShellApplication
50+
in {
51+
Schema = {
52+
vscode | doc m%"
53+
VSCode configuration
54+
"% | VSCodeSchema | default
55+
= {},
56+
flake.apps.regenerate-vscode.program = nix-s%"%{regenerate-vscode vscode.extensions}/bin/regenerate-vscode"%,
57+
},
58+
}

0 commit comments

Comments
 (0)