main
1{
2 flake.modules.homeManager.dev-vscode = {
3 config,
4 lib, # Use inner lib to pass lib in args
5 # NOTE: this args not used in this file CAN NOT be removed!
6 pkgs,
7 ...
8 } @ args: let
9 scanModules = path:
10 builtins.map (f: (path + "/${f}")) (
11 builtins.attrNames (
12 lib.attrsets.filterAttrs (
13 path: _type:
14 (_type == "directory") || ((path != "default.nix") && (lib.strings.hasSuffix ".nix" path))
15 ) (builtins.readDir path)
16 )
17 );
18
19 baseExtensions = config.programs.vscode.baseExtensions;
20 profilesList =
21 (map (path: import path args) (scanModules ./.))
22 ++ [
23 {
24 default = {
25 enableUpdateCheck = false;
26 enableExtensionUpdateCheck = false;
27 userSettings = {
28 # --- Editor Settings --- #
29 "editor.fontLigatures" = true;
30 "editor.guides.bracketPairs" = true;
31 "editor.formatOnSave" = true;
32 "editor.unicodeHighlight.allowedLocales"."zh-hans" = true;
33 "editor.lineNumbers" = "relative";
34 # --- Terminal Settings --- #
35 "terminal.integrated.defaultProfile.linux" = "fish";
36 # --- Workbench Settings --- #
37 "workbench.colorTheme" = "Stylix"; # Use Stylix theme
38 "workbench.iconTheme" = "material-icon-theme";
39 "workbench.startupEditor" = "none";
40 # --- Extension Settings --- #
41 "git.enabled" = false; # Disable git because I use jujutsu instead
42 # "GitCommitPlugin.ShowEmoji" = false;
43 # "GitCommitPlugin.MaxSubjectCharacters" = 25;
44 "github.copilot.advanced".useLanguageServer = true;
45 "nix.enableLanguageServer" = true;
46 "nix.serverPath" = "nixd";
47 "nix.serverSettings".nixd.formatting.command = ["alejandra"];
48 "evenBetterToml.formatter.alignEntries" = true;
49 "evenBetterToml.formatter.alignComments" = true;
50 "evenBetterToml.formatter.allowedBlankLines" = 1;
51 # --- Update Settings --- #
52 "extensions.autoCheckUpdates" = false;
53 "extensions.autoUpdate" = false;
54 "update.mode" = "none";
55 # --- Other Settings --- #
56 # Settings apply to all profiles
57 "telemetry.telemetryLevel" = "off";
58 "security.workspace.trust.untrustedFiles" = "open";
59 "window.newWindowProfile" = "Default";
60 "workbench.settings.applyToAllProfiles" = [
61 # -- Normal -- #
62 "editor.fontLigatures"
63 "editor.guides.bracketPairs"
64 "editor.formatOnSave"
65 "editor.lineNumbers"
66 "terminal.integrated.defaultProfile.linux"
67 "workbench.colorTheme"
68 "workbench.iconTheme"
69 "workbench.startupEditor"
70 # -- Extension -- #
71 "git.enabled"
72 # "GitCommitPlugin.ShowEmoji"
73 # "GitCommitPlugin.MaxSubjectCharacters"
74 "github.copilot.advanced"
75 "nix.enableLanguageServer"
76 "nix.serverPath"
77 "nix.serverSettings"
78 "evenBetterToml.formatter.alignEntries"
79 "evenBetterToml.formatter.alignComments"
80 "evenBetterToml.formatter.allowedBlankLines"
81 ];
82 };
83 };
84 }
85 ];
86 profiles =
87 lib.mapAttrs
88 (_: v: (v // {extensions = v.extensions or [] ++ baseExtensions;}))
89 (lib.mergeAttrsList profilesList);
90 profileNames = lib.attrNames profiles;
91 in {
92 stylix.targets.vscode.profileNames = profileNames;
93
94 programs.vscode.profiles = profiles;
95 };
96}