436 lines
14 KiB
Nix
436 lines
14 KiB
Nix
/*
|
||
VS Codium
|
||
*/
|
||
|
||
{ pkgs, inputs, system, config, ... }:
|
||
|
||
{
|
||
programs.vscodium = {
|
||
enable = true;
|
||
package = pkgs.unstable.vscodium;
|
||
enableExtensionUpdateCheck = true;
|
||
enableUpdateCheck = true;
|
||
|
||
extensions = let
|
||
t = inputs.nix-vscode-extensions.extensions.${system}.forVSCodeVersion
|
||
config.programs.vscode.package.version;
|
||
p = t.vscode-marketplace;
|
||
in [
|
||
# general
|
||
p.bierner.emojisense
|
||
p.bierner.markdown-checkbox
|
||
p.bierner.markdown-emoji
|
||
p.davidlday.languagetool-linter
|
||
p.dracula-theme.theme-dracula
|
||
p.eamodio.gitlens
|
||
p.gruntfuggly.todo-tree
|
||
p.mkhl.direnv
|
||
p.robole.marky-stats
|
||
p.stkb.rewrap
|
||
p.tomoki1207.pdf
|
||
p.tyriar.sort-lines
|
||
|
||
# haskell
|
||
p.haskell.haskell # language server
|
||
p.justusadam.language-haskell # syntax highlighting
|
||
p.s0kil.vscode-hsx # HSX is HTML templating for IHP
|
||
|
||
# other languages
|
||
p.banacorn.agda-mode
|
||
p.denoland.vscode-deno
|
||
p.jnoortheen.nix-ide
|
||
p.kokakiwi.vscode-just
|
||
p.mark-hansen.hledger-vscode
|
||
p.samuelcolvin.jinjahtml
|
||
p.scala-lang.scala
|
||
p.scalameta.metals
|
||
p.tamasfe.even-better-toml
|
||
|
||
# C#
|
||
# the nixpkgs version of this has a patch for a problem where uname isn't found
|
||
pkgs.unstable.vscode-extensions.ms-dotnettools.csharp
|
||
p.ms-dotnettools.vscode-dotnet-runtime
|
||
p.csharpier.csharpier-vscode
|
||
];
|
||
|
||
{
|
||
"extensionsGallery": {
|
||
"serviceUrl": "https://open-vsx.org/vscode/gallery",
|
||
"itemUrl": "https://open-vsx.org/vscode/item"
|
||
"cacheUrl": "",
|
||
"controlUrl": ""
|
||
}
|
||
}
|
||
keybindings = [
|
||
{
|
||
key = "ctrl+shift+t";
|
||
command = "workbench.action.terminal.focus";
|
||
when = "!terminalFocus";
|
||
}
|
||
{
|
||
key = "ctrl+shift+t";
|
||
command = "workbench.action.focusActiveEditorGroup";
|
||
when = "terminalFocus";
|
||
}
|
||
|
||
# use ctrl+c in the terminal for copying if there's a selection
|
||
# (passed through to the shell otherwise)
|
||
# thanks to https://stackoverflow.com/a/69928270/7659481
|
||
{
|
||
key = "ctrl+c";
|
||
command = "workbench.action.terminal.copySelection";
|
||
when = "terminalFocus && terminalProcessSupported && terminalTextSelected";
|
||
}
|
||
|
||
# use ctrl+v in the terminal for pasting
|
||
{
|
||
key = "ctrl+v";
|
||
command = "workbench.action.terminal.paste";
|
||
when = "terminalFocus && terminalProcessSupported";
|
||
}
|
||
|
||
# workaround to use Neo2 backslash for Agda Unicode input
|
||
# neither `[Backslash]` nor `capslock+u` work
|
||
# taken from the record keys function from the shortcut editor
|
||
{
|
||
key = "[Backslash]";
|
||
command = "-agda-mode.input-symbol[Activate]";
|
||
}
|
||
{
|
||
key = "["; # this is what Neo2 ß registers as
|
||
command = "agda-mode.input-symbol[Activate]";
|
||
when = "editorTextFocus && !editorHasSelection && editorLangId == 'agda'";
|
||
}
|
||
|
||
{
|
||
key = "ctrl+x ctrl+=";
|
||
command = "-agda-mode.lookup-symbol";
|
||
}
|
||
{
|
||
key = "ctrl+c ctrl+s";
|
||
command = "agda-mode.lookup-symbol";
|
||
when = "editorTextFocus && !editorHasSelection && editorLangId == 'agda'";
|
||
}
|
||
];
|
||
|
||
userSettings = {
|
||
# ======== General ========
|
||
"workbench.commandPalette.experimental.suggestCommands" = true;
|
||
"security.workspace.trust.enabled" = false;
|
||
"update.showReleaseNotes" = false;
|
||
"extensions.autoUpdate" = false;
|
||
# Themes
|
||
"workbench.colorTheme": "Kimbie Dark"
|
||
"workbench.iconTheme" = "material-icon-theme";
|
||
"workbench.productIconTheme" = "material-product-icons";
|
||
|
||
"workbench.cloudChanges.continueOn" = "off";
|
||
"workbench.cloudChanges.autoResume" = "off";
|
||
"workbench.startupEditor" = "none";
|
||
"update.mode" = "start";
|
||
"window.menuBarVisibility": "compact",
|
||
|
||
# ======== Telemetry ========
|
||
"continue.telemetryEnabled" = false;
|
||
|
||
"allowAnonymousTelemetry" = false;
|
||
"telemetry.telemetryLevel" = "off";
|
||
"aws.telemetry" = false;
|
||
"redhat.telemetry.enabled" = false;
|
||
"aws.codeWhisperer.shareCodeWhispererContentWithAWS" = false;
|
||
"code-runner.enableAppInsights" = false;
|
||
"workbench.enableExperiments" = false;
|
||
"typescript.tsserver.experimental.enableProjectDiagnostics" = false;
|
||
|
||
"keyboard.dispatch" = "keyCode";
|
||
|
||
# ======== Terminal ========
|
||
"terminal.integrated.splitCwd" = "workspaceRoot";
|
||
"terminal.integrated.confirmOnKill" = "always";
|
||
"terminal.integrated.copyOnSelection" = true;
|
||
"terminal.integrated.tabs.hideCondition" = "never";
|
||
"terminal.integrated.scrollback" = 5000;
|
||
"terminal.integrated.cursorStyle" = "line";
|
||
"terminal.integrated.cursorBlinking" = "solid";
|
||
"terminal.integrated.cursorWidth" = 1;
|
||
"terminal.integrated.fontFamily" = "Geist";
|
||
"terminal.integrated.fontSize" = 14;
|
||
"terminal.integrated.lineHeight" = 1.2;
|
||
"terminal.integrated.rightClickBehavior" = "default";
|
||
"terminal.integrated.minimumContrastRatio" = 1;
|
||
|
||
# ===== Linux =====
|
||
/*
|
||
vscode fixes colors in the termial to meet certain contrast ratios
|
||
I just want the original colors
|
||
*/
|
||
|
||
# "terminal.integrated.shell.linux" = "${pkgs.fish}/bin/fish";
|
||
# "terminal.integrated.shellArgs.linux" = [
|
||
# "--login"
|
||
# "-c"
|
||
# "set -x EDITOR vim"
|
||
# ];
|
||
"terminal.integrated.defaultProfile.linux" = "zsh";
|
||
"terminal.integrated.profiles.linux" = {
|
||
"zsh" = {
|
||
"path" = "${pkgs.zsh}/bin/zsh";
|
||
};
|
||
};
|
||
"terminal.external.linuxExec" = "#!/bin/bash";
|
||
|
||
# ===== Win =====
|
||
"terminal.integrated.defaultProfile.windows" = "Git Bash";
|
||
"terminal.integrated.profiles.windows" = {
|
||
"Custom Init" = {
|
||
"path" = "pwsh.exe";
|
||
"args" = [
|
||
"-noexit";
|
||
"-file";
|
||
"${env:APPDATA}\\PowerShell\\custom-init.ps1"
|
||
]
|
||
}
|
||
};
|
||
"terminal.integrated.env.windows" = {
|
||
"CHERE_INVOKING" = "1"
|
||
};
|
||
# "terminal.integrated.defaultProfile.windows" = "PowerShell";
|
||
# "terminal.integrated.shell.windows" = "${pkgs.pwsh}/bin/pwsh.exe";
|
||
# "terminal.integrated.shellArgs.windows" = [
|
||
# "-NoLogo"
|
||
# "-NoProfile"
|
||
# "-Command"
|
||
# "set-location ${pkgs.pwsh}"
|
||
# "-Command"
|
||
# "set-location ${pkgs.pwsh}"
|
||
# "-Command"
|
||
# "set EDITOR vim"
|
||
# ];
|
||
|
||
|
||
# ===== Explorer =====
|
||
"explorer.confirmDelete" = false;
|
||
"explorer.confirmDragAndDrop" = false;
|
||
|
||
# ===== Files =====
|
||
"files.defaultLanguage" = "javascript";
|
||
"files.enableTrash" = true;
|
||
"files.insertFinalNewline" = true;
|
||
"files.trimTrailingWhitespace" = false;
|
||
|
||
# ===== Git =====
|
||
"git.autofetch" = "all"; # regularly fetch from all remotes of the repo
|
||
"git.autofetchPeriod" = 120;
|
||
"git.closeDiffOnOperation" = true; # close diff editors on commits etc.
|
||
"git.confirmForcePush" = false;
|
||
"git.confirmSync" = false;
|
||
"git.allowForcePush" = true;
|
||
"git.path" = "";
|
||
"git.enableSmartCommit" = false; # commit all if nothing staged
|
||
|
||
|
||
# ===== Editor =====
|
||
"editor.inlineSuggest.enabled" = true;
|
||
"editor.links" = true;
|
||
"editor.codeLens" = true;
|
||
"editor.autoIndent" = "advanced";
|
||
"editor.detectIndentation" = true;
|
||
"editor.hover.enabled" = true;
|
||
|
||
# allow various mathematical symbols for use in stuff like TeX and Agda
|
||
"editor.unicodeHighlight.allowedCharacters" = builtins.listToAttrs (map (x: { name = x; value = true; }) [
|
||
"ℕ" "ℚ" "ℝ" "ℤ" "α" "γ" "ρ" "σ" "ι" "∨" "ℓ" "‘"
|
||
]);
|
||
|
||
"editor.hover.delay" = 150;
|
||
"editor.suggest.preview" = true;
|
||
"editor.suggestFontSize" = 12;
|
||
"editor.fontFamily" = "Geist";
|
||
"editor.fontSize" = 15;
|
||
"editor.fontLigatures" = true;
|
||
"editor.rulers" = [ 100 ];
|
||
"editor.wordWrapColumn" = 100; # column to wrap at; ignored by default due to wordWrap, relevant e.g. for markdown
|
||
"editor.wordWrap" = "on"; # by default, wrap at the viewport
|
||
"rewrap.wrappingColumn" = 100; # rewrap text with rewrap extension at column 100
|
||
"editor.renderWhitespace" = "boundary";
|
||
"editor.guides.bracketPairs" = true;
|
||
"editor.language.brackets" = [
|
||
[ "[" "]" ]
|
||
[ "{" "}" ]
|
||
[ "(" ")" ]
|
||
[ "⟨" "⟩" ]
|
||
];
|
||
# by default, I use tabs for indentation for accessibility reasons
|
||
"editor.insertSpaces" = false;
|
||
"editor.tabSize" = 4;
|
||
"editor.detectIndentation" = true;
|
||
|
||
"editor.scrollbar.vertical" = "visible";
|
||
"editor.minimap.showSlider" = "always";
|
||
"editor.minimap.size" = "fill";
|
||
"editor.minimap.maxColumn" = 100;
|
||
|
||
# DiffEditor
|
||
"diffEditor.experimental.showMoves" = true;
|
||
"diffEditor.ignoreTrimWhitespace" = false;
|
||
"diffEditor.diffAlgorithm" = "advanced";
|
||
|
||
# Files
|
||
"files.trimFinalNewlines" = true;
|
||
"files.trimTrailingWhitespace" = true;
|
||
"files.insertFinalNewline" = true;
|
||
"files.watcherExclude" = {
|
||
"**/.bloop" = true;
|
||
"**/.metals" = true;
|
||
"**/.ammonite" = true;
|
||
};
|
||
|
||
# === JS/TS ===
|
||
"[javascript]" = {
|
||
"editor.defaultFormatter" = "esbenp.prettier-vscode"
|
||
};
|
||
"[typescript]" = {
|
||
"editor.defaultFormatter" = "esbenp.prettier-vscode"
|
||
};
|
||
"javascript.format.enable" = true;
|
||
"javascript.format.semicolons" = "insert";
|
||
"debug.javascript.codelens.npmScripts" = "all";
|
||
"javascript.suggestionActions.enabled" = true;
|
||
# "debug.javascript.autoAttachSmartPattern" = [
|
||
# "${workspaceFolder}/**";
|
||
# "!**/node_modules/**";
|
||
# "**/$KNOWN_TOOLS$/**"
|
||
# ];
|
||
"typescript.updateImportsOnFileMove.enabled" = "always";
|
||
"typescript.implementationsCodeLens.enabled" = true;
|
||
"typescript.tsserver.log" = "off";
|
||
"typescript.tsserver.enableTracing" = false;
|
||
"typescript.format.placeOpenBraceOnNewLineForFunctions" = true;
|
||
"typescript.implementationsCodeLens.showOnInterfaceMethods" = true;
|
||
"typescript.tsserver.useSyntaxServer" = "always";
|
||
"typescript.tsserver.maxTsServerMemory" = 2048;
|
||
"typescript.tsserver.web.projectWideIntellisense.enabled" = true;
|
||
"typescript.format.enable" = true;
|
||
"javascript.referencesCodeLens.enabled" = false;
|
||
"javascript.referencesCodeLens.showOnAllFunctions" = true;
|
||
"javascript.inlayHints.parameterNames.enabled" = "all";
|
||
"javascript.inlayHints.parameterTypes.enabled" = true;
|
||
"javascript.updateImportsOnFileMove.enabled" = "always";
|
||
"npm.fetchOnlinePackageInfo" = true;
|
||
|
||
# Svelte + Web dev
|
||
|
||
"svelte.plugin.typescript.hover.enable" = true;
|
||
"svelte.plugin.typescript.enable" = true;
|
||
"svelte.enable-ts-plugin" = true;
|
||
"css.hover.documentation" = true;
|
||
"html.hover.documentation" = true;
|
||
|
||
# === Rust ===
|
||
"rust.show_hover_context" = true;
|
||
|
||
|
||
# === Golang ===
|
||
"go.useLanguageServer" = true;
|
||
"go.lintTool" = "golangci-lint";
|
||
|
||
|
||
# === Py ===
|
||
"[python]" = {
|
||
"editor.formatOnType" = true
|
||
};
|
||
"python.missingPackage.severity" = "Warning";
|
||
"python.languageServer" = "Jedi";
|
||
"python.experiments.enabled" = false;
|
||
"python.experiments.optOutFrom" = [
|
||
"All"
|
||
];
|
||
|
||
# Haskell
|
||
"haskell.manageHLS"= "PATH";
|
||
|
||
# TODO Tree
|
||
#"todo-tree.general.showActivityBarBadge" = true;
|
||
#"todo-tree.general.tags" = [ "TODO" "FIXME" ];
|
||
|
||
# Marky Markdown
|
||
"markyMarkdown.statsShowReadingTime" = false;
|
||
"markyMarkdown.statsShowWords" = true;
|
||
"markyMarkdown.statsShowCharacters" = true;
|
||
"markyMarkdown.statsItemSeparator" = " / ";
|
||
|
||
"languageToolLinter.lintOnOpen" = true;
|
||
# https://github.com/davidlday/vscode-languagetool-linter/issues/603
|
||
# "languageToolLinter.languageTool.ignoredWordHint" = false;
|
||
|
||
"languageToolLinter.languageTool.preferredVariants" = "en-US,de-DE,nl-NL";
|
||
"languageToolLinter.languageTool.ignoredWordsGlobal" = [
|
||
"iirc" "eisfunke" "eisfunkelab" "kb" "nebelhorn" "agda" "dir"
|
||
];
|
||
|
||
# === IaC, Devops ===
|
||
"terraform.experimentalFeatures.prefillRequiredFields" = true;
|
||
"terraform.experimentalFeatures.validateOnSave" = true;
|
||
"[ansible]" = {
|
||
"editor.detectIndentation" = true;
|
||
"editor.insertSpaces" = true;
|
||
"editor.tabSize" = 2;
|
||
"editor.quickSuggestions" = {
|
||
"comments" = true;
|
||
"other" = true;
|
||
"strings" = true
|
||
};
|
||
"editor.autoIndent" = "advanced"
|
||
};
|
||
"ansible.lightspeed.enabled" = false;
|
||
"yaml.hover" = true;
|
||
"yaml.completion" = true;
|
||
|
||
# === Nix ===
|
||
"nix.enableLanguageServer" = true; // Enable LSP.
|
||
"nix.serverPath" = "nil"; // The path to the LSP server executable.
|
||
# === advanced
|
||
"nix.serverSettings" = {
|
||
"nil" = {
|
||
"formatting" = { "command" = ["nixpkgs-fmt"] }
|
||
}
|
||
};
|
||
|
||
|
||
#"agdaMode.inputMethod.activationKey" = "ß";
|
||
|
||
# language specific indentation settings
|
||
"[html]" = {
|
||
"editor.defaultFormatter" = "esbenp.prettier-vscode"
|
||
};
|
||
"[jsonc]" = {
|
||
"editor.defaultFormatter" = "esbenp.prettier-vscode"
|
||
};
|
||
"[json]" = {
|
||
"editor.defaultFormatter" = "esbenp.prettier-vscode"
|
||
};
|
||
"[latex]" = {
|
||
"editor.defaultFormatter" = "esbenp.prettier-vscode";
|
||
"editor.formatOnPaste" = false;
|
||
"editor.suggestSelection" = "recentlyUsedByPrefix"
|
||
};
|
||
"[svelte]" = {
|
||
"editor.acceptSuggestionOnCommitCharacter" = true;
|
||
"editor.acceptSuggestionOnEnter" = "off"
|
||
};
|
||
"[scala]" = { # follow Scala style guide
|
||
"editor.insertSpaces" = true;
|
||
"editor.tabSize" = 2;
|
||
};
|
||
"[markdown]" = { # indent markdown with spaces so YAML frontmatter doesn't break
|
||
"editor.wordWrap" = "bounded"; # wrap markdown files at line width
|
||
"editor.insertSpaces" = true;
|
||
"editor.tabSize" = 2;
|
||
};
|
||
"[haskell]"."editor.insertSpaces" = true; # GHC warns when using tabs
|
||
"[python]"."editor.insertSpaces" = true; # black forces spaces
|
||
"[agda]"."editor.insertSpaces" = true; # agda forces spaces
|
||
};
|
||
};
|
||
}
|