nix-configs/hm-modules/vscode/default.nix
2024-03-17 10:27:57 +01:00

236 lines
8.6 KiB
Nix

{ pkgs, config, lib, inputs, ... }:
let
cfg = config.ragon.vscode;
#marketplace = inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace;
#marketplace-release = inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace-release;
marketplace = (import ./vscode-extensions.nix { inherit pkgs lib; });
in
{
options.ragon.vscode.enable = lib.mkOption { default = false; };
config = lib.mkIf cfg.enable {
home.packages = with pkgs; [
nixd
nixpkgs-fmt
(unstable.quarto.overrideAttrs (curr: { meta.platforms = [ pkgs.system ]; }))
];
programs.vscode = {
enable = true;
package = pkgs.unstable.vscode;
#mutableExtensionsDir = false;
extensions = with marketplace; [
vscodevim.vim # vim mode (hopefully good)
fathulfahmy.lunarkeymap
vspacecode.whichkey
jdinhlife.gruvbox # theme
mkhl.direnv # direnv
marketplace.eamodio.gitlens
marketplace.ms-vscode-remote.remote-containers
marketplace.sonarsource.sonarlint-vscode
# tomoki1207.pdf # reenable when latex workshop goes
marketplace.johnpapa.vscode-peacock # colors per workspace
# Language Support
## markdown/latex
marketplace.james-yu.latex-workshop # latex, also provides pdf preview
marketplace.quarto.quarto
# marketplace.pokey.cursorless # too much xe exposure
marketplace.valentjn.vscode-ltex # languagetool
#valentjn.vscode-ltex
#marketplace.gpoore.codebraid-preview
marketplace.ms-vscode.hexeditor # a hex editor
#ms-vscode-remote.remote-containers # container envs for stuff
marketplace.ms-vscode-remote.remote-ssh
## others
marketplace.vscjava.vscode-java-pack # java schmava
marketplace.vscjava.vscode-java-debug
marketplace.vscjava.vscode-java-test
marketplace.vscjava.vscode-java-dependency
marketplace.vscjava.vscode-maven
marketplace.redhat.java
marketplace.ms-vscode.cpptools-extension-pack # cpp
# marketplace.ms-vscode.cmake-tools # broken rn
marketplace.ms-vscode.cpptools
marketplace.ms-azuretools.vscode-docker # docker
jnoortheen.nix-ide # nix
golang.go # go
marketplace.ms-python.python # python
marketplace.ms-python.vscode-pylance # python
#marketplace.ms-python.debugpy # python
marketplace.donjayamanne.python-environment-manager # python
marketplace.denoland.vscode-deno # deno
marketplace.bradlc.vscode-tailwindcss
#ms-dotnettools.csharp # c# und so
#marketplace.ms-dotnettools.csdevkit
# marketplace.ms-dotnettools.csharp
# marketplace.ms-dotnettools.vscode-dotnet-runtime
# (marketplace.ms-dotnettools.csdevkit.overrideAttrs (super: a: { sourceRoot = "."; }))
rust-lang.rust-analyzer # rust
marketplace.sswg.swift-lang # swift
#marketplace.vadimcn.vscode-lldb # swift
#marketplace.ms-toolsai.jupyter # jupiter notebooks, broken on 2023-12-19
marketplace.ms-toolsai.jupyter-renderers
#ms-toolsai.jupyter
#marketplace.jakebecker.elixir-ls # elixir
marketplace.dart-code.flutter # dart/flutter
marketplace.dart-code.dart-code # dart/flutter
marketplace.alexisvt.flutter-snippets # flutter snippets
marketplace.tauri-apps.tauri-vscode # tauri
marketplace.dbaeumer.vscode-eslint # js
marketplace.firefox-devtools.vscode-firefox-debug # js debugging
marketplace.arcanis.vscode-zipfs # yarn
marketplace.foam.foam-vscode
marketplace."vsls-contrib"."gitdoc"
yzhang.markdown-all-in-one # markdown
marketplace.davidanson.vscode-markdownlint
marketplace.bierner.markdown-mermaid
marketplace.bpruitt-goddard.mermaid-markdown-syntax-highlighting
marketplace.bierner.markdown-footnotes
marketplace.hediet.vscode-drawio
] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
];
userSettings =
let
fontFamily = "'JetBrainsMono Nerd Font', monospace";
in
{
"editor.fontFamily" = fontFamily;
"terminal.integrated.fontFamily" = fontFamily;
"terminal.integrated.scrollback" = 20000;
"workbench.colorTheme" = "Gruvbox Dark Soft";
"editor.autoClosingBrackets" = "never";
"editor.autoClosingQuotes" = "never";
"editor.minimap.autohide" = true;
"editor.tabCompletion" = "onlySnippets";
#"editor.snippetSuggestions" = "top";
# Addon Configuration
## Vim
"vim.leader" = "<space>";
# "vim.normalModeKeyBindings" = [
# { before = [ "<C-h>" ]; after = [ "<C-w>" "h" ]; }
# { before = [ "<C-j>" ]; after = [ "<C-w>" "j" ]; }
# { before = [ "<C-k>" ]; after = [ "<C-w>" "k" ]; }
# { before = [ "<C-l>" ]; after = [ "<C-w>" "l" ]; }
# ];
"vim.normalModeKeyBindingsNonRecursive" = [
# {
# before = [ "<leader>" "s" ];
# "commands" = [ "workbench.action.splitEditor" ];
# quiet = true;
# }
# {
# before = [ "<leader>" "a" "s" ];
# "commands" = [ "workbench.action.splitEditorDown" ];
# quiet = true;
# }
{
before = [ "<leader>" "q" ];
"commands" = [ "workbench.action.closeActiveEditor" ];
quiet = true;
}
{
before = [ "<leader>" "c" "a" ];
"commands" = [ "editor.action.sourceAction" ];
quiet = true;
}
{
before = [ "<leader>" "r" "n" ];
"commands" = [ "editor.action.rename" ];
quiet = true;
}
{
before = [ "<leader>" "c" "f" ];
"commands" = [ "editor.action.quickFix" ];
quiet = true;
}
{
before = [ "<leader>" "f" ];
"commands" = [ "editor.action.formatDocument" ];
quiet = true;
}
{
before = [ "]" "g" ];
"commands" = [ "editor.action.marker.next" ];
quiet = true;
}
{
before = [ "[" "g" ];
"commands" = [ "editor.action.marker.prev" ];
quiet = true;
}
{
before = [ "<leader>" "g" "r" ];
"commands" = [ "editor.action.goToReferences" ];
quiet = true;
}
];
"vim.useSystemClipboard" = false;
"vim.handleKeys" = {
"<C-w>" = false;
};
"vim.camelCaseMotion.enable" = true;
## git
"git.verboseCommit" = true;
"git.allowForcePush" = true;
"git.confirmSync" = false;
"git.confirmForcePush" = true; # is default but it feels safer to also specify it here
"git.useForcePushWithLease" = true; # is default but it feels safer to also specify it here
## Nix
"nix.serverPath" = "nixd";
"nix.enableLanguageServer" = true;
"nix.serverSettings" = {
"nixd" = {
"formatting" = {
"command" = "nixpkgs-fmt";
};
};
};
## dart/flutter
"[dart]" = {
"editor.formatOnSave" = true;
"editor.formatOnType" = true;
"editor.rulers" = [ 80 ];
"editor.selectionHighlight" = false;
"editor.suggestSelection" = "first";
"editor.tabCompletion" = "onlySnippets";
"editor.wordBasedSuggestions" = "off";
};
## md preview
#"codebraid.preview.pandoc.build" = {
# "*.md" = {
# "reader" = "markdown"; # use pandoc markdown and not commonmark
# "preview" = { "html" = { defaults = {}; options = []; }; };
# };
#};
# swift
"lldb.library" = "/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A/LLDB";
"lldb.launch.expressions" = "native";
# ltex-ls
#"ltex.language" = "de";
#"ltex.ltex-ls.path" = "${pkgs.ltex-ls}";
#"ltex.ltex-ls.logLevel" = "finest";
#"ltex.trace.server" = "verbose";
# idk
"hediet.vscode-drawio.resizeImages" = "null";
};
keybindings = [
{ "key" = "ctrl+w"; "command" = "whichkey.show"; }
];
};
};
}