268 lines
8.7 KiB
Nix
268 lines
8.7 KiB
Nix
{
|
|
pkgs,
|
|
pkgs-stable,
|
|
lib,
|
|
config,
|
|
userSettings,
|
|
...
|
|
}: {
|
|
options = {
|
|
program.vscode.enable = lib.mkEnableOption "enable vscode";
|
|
|
|
program.vscode.ide.python.enable = lib.mkEnableOption "enable python for vscode";
|
|
program.vscode.ide.go.enable = lib.mkEnableOption "enable go for vscode";
|
|
program.vscode.ide.csharp.enable = lib.mkEnableOption "enable c# for vscode";
|
|
program.vscode.ide.web.enable = lib.mkEnableOption "enable html and css for vscode";
|
|
program.vscode.ide.cpp.enable = lib.mkEnableOption "enable cpp for vscode";
|
|
|
|
program.vscode.nix.enable = lib.mkEnableOption "enable nix support for vscode";
|
|
program.vscode.ai.enable = lib.mkEnableOption "enable ai copilot for vscode";
|
|
program.vscode.git.enable = lib.mkEnableOption "enable git features for vscode";
|
|
program.vscode.themes.enable = lib.mkEnableOption "enable themes for vscode";
|
|
program.vscode.markdown.enable = lib.mkEnableOption "enable markdown for vscode";
|
|
};
|
|
|
|
config = lib.mkMerge [
|
|
(lib.mkIf config.program.vscode.enable {
|
|
home.packages = with pkgs-stable; [
|
|
vscode
|
|
];
|
|
|
|
nixpkgs.config.allowUnfreePredicate = pkg:
|
|
builtins.elem (lib.getName pkg) [
|
|
# VSCODE
|
|
"vscode"
|
|
"vscode-extension-github-codespaces"
|
|
"vscode-extension-ms-vscode-remote-remote-ssh"
|
|
"vscode-extension-ms-vscode-remote-remote-ssh-edit"
|
|
"vscode-extension-github-copilot"
|
|
"vscode-extension-github-copilot-chat"
|
|
"vscode-extension-MS-python-vscode-pylance"
|
|
"vscode-extension-ms-dotnettools-csdevkit"
|
|
"vscode-extension-ms-dotnettools-vscodeintellicode-csharp"
|
|
];
|
|
|
|
programs.vscode = {
|
|
enable = true;
|
|
package = pkgs-stable.vscode;
|
|
profiles.${userSettings.username} = {
|
|
userSettings = {
|
|
"files.autoSave" = "afterDelay";
|
|
"explorer.confirmDragAndDrop" = false;
|
|
#"editor.fontSize" = 16;
|
|
"editor.minimap.side" = "right";
|
|
"editor.scrollbar.vertical" = "hidden";
|
|
"editor.scrollbar.verticalScrollbarSize" = 0;
|
|
"editor.fontLigatures" = "'calt', 'ss01', 'ss02', 'ss03', 'ss04', 'ss05', 'ss06', 'ss07', 'ss08', 'ss09', 'liga'";
|
|
"editor.stickyScroll.enabled" = false;
|
|
"security.workspace.trust.untrustedFiles" = "newWindow";
|
|
"security.workspace.trust.startupPrompt" = "never";
|
|
"security.workspace.trust.enabled" = false;
|
|
"terminal.external.linuxExec" = "${pkgs.kitty}/bin/kitty";
|
|
"terminal.integrated.stickyScroll.enabled" = true;
|
|
"terminal.integrated.inheritEnv" = false;
|
|
"telemetry.telemetryLevel" = "off";
|
|
"workbench.activityBar.location" = "hidden"; # bottom
|
|
"workbench.navigationControl.enabled" = false;
|
|
"window.commandCenter"= false;
|
|
"workbench.iconTheme" = "material-icon-theme";
|
|
"workbench.productIconTheme" = "material-product-icons";
|
|
"window.menuBarVisibility" = "toggle";
|
|
"scm.inputFontFamily" = "JetBrainsMono NF";
|
|
"scm.inputFontSize" = 14.857142857142858;
|
|
"screencastMode.fontSize" = 64.0;
|
|
};
|
|
|
|
extensions = with pkgs-stable.vscode-extensions; [
|
|
ms-azuretools.vscode-docker
|
|
|
|
foxundermoon.shell-format
|
|
tamasfe.even-better-toml
|
|
aaron-bond.better-comments
|
|
christian-kohler.path-intellisense
|
|
|
|
github.codespaces
|
|
|
|
nefrob.vscode-just-syntax
|
|
|
|
# Remote
|
|
ms-vscode-remote.remote-ssh
|
|
ms-vscode-remote.remote-ssh-edit
|
|
|
|
pkief.material-product-icons
|
|
pkief.material-icon-theme
|
|
];
|
|
};
|
|
};
|
|
})
|
|
(lib.mkIf config.program.vscode.ide.python.enable {
|
|
programs.vscode.profiles.${userSettings.username} = {
|
|
userSettings = {
|
|
"[python]" = {
|
|
"editor.defaultFormatter" = "ms-python.black-formatter";
|
|
"python.defaultInterpreterPath" = "${pkgs.python3}/bin/python";
|
|
};
|
|
};
|
|
|
|
extensions = with pkgs-stable.vscode-extensions; [
|
|
ms-python.python
|
|
ms-python.vscode-pylance
|
|
ms-python.black-formatter
|
|
ms-python.debugpy
|
|
njpwerner.autodocstring
|
|
ms-toolsai.jupyter
|
|
ms-toolsai.jupyter-keymap
|
|
ms-toolsai.jupyter-renderers
|
|
];
|
|
};
|
|
})
|
|
|
|
(lib.mkIf config.program.vscode.ide.go.enable {
|
|
programs.vscode.profiles.${userSettings.username} = {
|
|
userSettings = {
|
|
"go.alternateTools" = {
|
|
"go-langserver" = "${pkgs.gopls}/bin/gopls";
|
|
};
|
|
"gopls" = {"ui.diagnostic.staticcheck" = true;};
|
|
};
|
|
|
|
extensions = with pkgs-stable.vscode-extensions; [
|
|
golang.go
|
|
];
|
|
};
|
|
home.sessionVariables = {
|
|
GOOS = "linux";
|
|
GOARCH = "amd64";
|
|
GOPATH = "$HOME/.local/share/go";
|
|
};
|
|
})
|
|
|
|
(lib.mkIf config.program.vscode.ide.csharp.enable {
|
|
programs.vscode.profiles.${userSettings.username}.extensions = with pkgs-stable.vscode-extensions; [
|
|
ms-dotnettools.csharp
|
|
ms-dotnettools.csdevkit
|
|
ms-dotnettools.vscodeintellicode-csharp
|
|
ms-dotnettools.vscode-dotnet-runtime
|
|
];
|
|
})
|
|
|
|
(lib.mkIf config.program.vscode.nix.enable {
|
|
programs.vscode.profiles.${userSettings.username} = {
|
|
userSettings = {
|
|
"nix.serverPath" = "nixd";
|
|
"nix.enableLanguageServer" = true;
|
|
"nix.serverSettings" = {
|
|
"nixd" = {
|
|
"formatting" = {
|
|
"command" = ["alejandra"]; # or nixfmt or nixpkgs-fmt
|
|
};
|
|
"options" = {
|
|
"nixos" = {
|
|
"expr" = "(builtins.getFlake \"~/.dotfiles/\").nixosConfigurations.${userSettings.hostname}.options";
|
|
};
|
|
};
|
|
# "home_manager": {
|
|
# "expr": "(builtins.getFlake \"/PATH/TO/FLAKE\").homeConfigurations..options"
|
|
# },
|
|
# },
|
|
};
|
|
};
|
|
};
|
|
|
|
extensions = with pkgs-stable.vscode-extensions; [
|
|
jnoortheen.nix-ide
|
|
];
|
|
};
|
|
home.packages = with pkgs-stable; [
|
|
alejandra
|
|
nixd
|
|
];
|
|
})
|
|
|
|
(lib.mkIf config.program.vscode.ide.web.enable {
|
|
programs.vscode.profiles.${userSettings.username} = {
|
|
userSettings = {
|
|
"[json]" = {
|
|
"editor.defaultFormatter" = "esbenp.prettier-vscode";
|
|
};
|
|
"[html]" = {
|
|
"editor.defaultFormatter" = "esbenp.prettier-vscode";
|
|
};
|
|
"[css]" = {
|
|
"editor.defaultFormatter" = "esbenp.prettier-vscode";
|
|
};
|
|
};
|
|
|
|
extensions = with pkgs-stable.vscode-extensions; [
|
|
ritwickdey.liveserver
|
|
esbenp.prettier-vscode
|
|
ecmel.vscode-html-css
|
|
ms-vscode.live-server
|
|
formulahendry.auto-rename-tag
|
|
];
|
|
};
|
|
})
|
|
|
|
(lib.mkIf config.program.vscode.git.enable {
|
|
programs.vscode.profiles.${userSettings.username} = {
|
|
userSettings = {
|
|
"git.autofetch" = true;
|
|
};
|
|
|
|
extensions = with pkgs-stable.vscode-extensions; [
|
|
donjayamanne.githistory
|
|
eamodio.gitlens
|
|
github.vscode-pull-request-github
|
|
github.vscode-github-actions
|
|
];
|
|
};
|
|
})
|
|
|
|
(lib.mkIf config.program.vscode.markdown.enable {
|
|
programs.vscode.profiles.${userSettings.username} = {
|
|
userSettings = {
|
|
"[markdown]" = {
|
|
"editor.defaultFormatter" = "yzhang.markdown-all-in-one";
|
|
};
|
|
};
|
|
|
|
extensions = with pkgs-stable.vscode-extensions; [
|
|
yzhang.markdown-all-in-one
|
|
davidanson.vscode-markdownlint
|
|
marp-team.marp-vscode
|
|
];
|
|
};
|
|
})
|
|
|
|
(lib.mkIf config.program.vscode.themes.enable {
|
|
programs.vscode.profiles.${userSettings.username}.extensions = with pkgs-stable.vscode-extensions; [
|
|
catppuccin.catppuccin-vsc
|
|
catppuccin.catppuccin-vsc-icons
|
|
zhuangtongfa.material-theme
|
|
oderwat.indent-rainbow
|
|
enkia.tokyo-night
|
|
];
|
|
})
|
|
|
|
(lib.mkIf config.program.vscode.ai.enable {
|
|
programs.vscode.profiles.${userSettings.username} = {
|
|
userSettings = {
|
|
"github.copilot.editor.enableAutoCompletions" = true;
|
|
};
|
|
|
|
extensions = with pkgs-stable.vscode-extensions; [
|
|
github.copilot
|
|
github.copilot-chat
|
|
];
|
|
};
|
|
})
|
|
|
|
(lib.mkIf config.program.vscode.ide.cpp.enable {
|
|
programs.vscode.profiles.${userSettings.username}.extensions = with pkgs-stable.vscode-extensions; [
|
|
twxs.cmake
|
|
ms-vscode.cmake-tools
|
|
];
|
|
})
|
|
];
|
|
}
|