-
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathdefault.nix
More file actions
73 lines (62 loc) · 2.08 KB
/
default.nix
File metadata and controls
73 lines (62 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
{
config,
pkgs,
...
}: let
inherit (pkgs.lib.lists) concatLists;
inherit (pkgs.lib.meta) getExe;
extensionsDir = "/data/editor/extensions";
userDataDir = "/data/editor/data";
pkg = pkgs.alias "editor" pkgs.vscode (concatLists [
["--extensions-dir" extensionsDir]
["--user-data-dir" userDataDir]
]);
bin = getExe pkg;
extensions = import ./extensions.nix {inherit pkgs;};
settings = import ./settings.nix {inherit config pkgs;};
settingsJson = (pkgs.formats.json {}).generate "settings.json" settings;
in {
environment.variables.EDITOR = "${bin} --wait";
environment.systemPackages = [pkg];
home-manager.users.${config.wellKnown.username} = {
home.file.".config/rustfmt/rustfmt.toml".source = ./rustfmt.toml;
};
programs.git.config = {
diff.tool = "editor";
difftool.editor.cmd = "${bin} --diff $LOCAL $REMOTE --wait";
merge.tool = "editor";
mergetool.editor.cmd = "${bin} --wait $MERGED";
};
systemd.services."machine-editor-setup" = {
script = toString (pkgs.substitute {
src = pkgs.writeShellScript "machine-editor-setup.sh" ''
set -eux
rm -rf "@userDataDir@"
rm -rf "@extensionsDir@"
mkdir -p "@userDataDir@/User"
mkdir -p "@extensionsDir@"
cp --dereference --no-preserve=mode,ownership \
"@settings@" "@userDataDir@/User/settings.json"
cp --dereference --no-preserve=mode,ownership -rT \
"@extensions@/share/vscode/extensions/" "@extensionsDir@"
'';
substitutions = concatLists [
["--replace-fail" "@extensions@" extensions]
["--replace-fail" "@extensionsDir@" extensionsDir]
["--replace-fail" "@settings@" settingsJson]
["--replace-fail" "@userDataDir@" userDataDir]
];
isExecutable = true;
});
serviceConfig = {
Group = config.users.users.${config.wellKnown.username}.group;
RemainAfterExit = true;
Type = "oneshot";
User = config.wellKnown.username;
};
unitConfig = {
After = ["multi-user.target"];
};
requiredBy = ["graphical.target"];
};
}