1_: {
2 perSystem = {
3 lib,
4 pkgs,
5 ...
6 }: let
7 prettier = {
8 external = {
9 command = pkgs.writeScript "prettier-bun" ''
10 #! ${pkgs.bash}/bin/bash -e
11 exec ${lib.getExe pkgs.bun} ${pkgs.prettier}/bin/prettier.cjs "$@"
12 '';
13 arguments = ["--stdin-filepath" "{buffer_path}"];
14 };
15 };
16 biome = {
17 format_on_save = "on";
18
19 formatter = {language_server = {name = "biome";};};
20 code_actions_on_format = {
21 "source.fixAll.biome" = true;
22 "source.organizeImports.biome" = true;
23 };
24 };
25 in {
26 files.files = [
27 {
28 checkFile = false;
29 path_ = ".zed/settings.json";
30
31 drv = (pkgs.formats.json {}).generate "zed-setting.json" {
32 auto_install_extensions = {
33 basher = true;
34 nix = true;
35 marksman = true;
36 };
37
38 languages = {
39 JSON = biome // {language_servers = ["json-language-server" "biome"];};
40
41 JSONC = biome // {language_servers = ["json-language-server" "biome"];};
42
43 Markdown = {
44 format_on_save = "on";
45 formatter = prettier;
46 language_servers = ["marksman"];
47 };
48
49 Nix = {
50 format_on_save = "on";
51 formatter = "language_server";
52 language_servers = [
53 "nixd"
54 "nil"
55 ];
56 };
57
58 "Shell Script" = {
59 format_on_save = "on";
60
61 formatter = {
62 external = {
63 command = lib.getExe pkgs.shfmt;
64 arguments = ["--filename" "{buffer_path}" "-i" "2"];
65 };
66 };
67
68 tab_size = 2;
69 hard_tabs = false;
70 };
71
72 YAML = {
73 format_on_save = "on";
74 formatter = prettier;
75 };
76 };
77
78 lsp = {
79 nixd = {
80 binary.path = lib.getExe pkgs.nixd;
81 settings.formatting.command = [(lib.getExe pkgs.alejandra) "--quiet" "--"];
82 };
83 nil = {
84 binary = {
85 path = lib.getExe pkgs.nil;
86 arguments = ["--stdio"];
87 };
88 };
89 json-language-server = {
90 binary = {
91 path = pkgs.writeScript "vscode-json-languageserver-bun" ''
92 #! ${pkgs.bash}/bin/bash -e
93 exec ${lib.getExe pkgs.bun} ${pkgs.vscode-json-languageserver}/lib/node_modules/vscode-json-languageserver/./bin/vscode-json-languageserver "$@"
94 '';
95 arguments = ["--stdio"];
96 };
97 };
98 marksman = {
99 binary = {
100 path = lib.getExe pkgs.marksman;
101 arguments = ["server"];
102 };
103 };
104 };
105 };
106 }
107 ];
108 };
109}