diff --git a/modules/home-manager/vscode.nix b/modules/home-manager/vscode.nix index f164de4..ef5f45a 100644 --- a/modules/home-manager/vscode.nix +++ b/modules/home-manager/vscode.nix @@ -3,62 +3,139 @@ with lib; let cfg = config.custom-hm.vscode; + + packages = { + nixPackages = { + systemPackages = with pkgs; [ nixd nixpkgs-fmt ]; + extension = with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [ + jnoortheen.nix-ide + ]; + settings = { + "nix.enableLanguageServer" = true; + "nix.formatterPath" = "nixpkgs-fmt"; + "nix.serverPath" = "nixd"; + }; + }; + cxxPackages = { + systemPackages = with pkgs; [ clang-tools ]; + extension = with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [ + llvm-vs-code-extensions.vscode-clangd + (ms-vscode.cmake-tools.overrideAttrs (_: { sourceRoot = "extension"; })) + twxs.cmake + ]; + settings = { + "cmake.configureOnEdit" = false; + "cmake.showOptionsMovedNotification" = false; + "cmake.showNotAllDocumentsSavedQuestion" = false; + }; + }; + pythonPackages = { + systemPackages = with pkgs; [ ]; + extension = with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [ + ms-python.python + ]; + settings = { }; + }; + scalaPackages = { + systemPackages = with pkgs; [ ]; + extension = with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [ + scala-lang.scala + scalameta.metals + ]; + settings = { }; + }; + latexPackages = { + systemPackages = with pkgs; [ texliveSmall ]; + extension = with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [ + james-yu.latex-workshop + ]; + settings = { + "latex-workshop.latex.autoBuild.run" = "never"; + "latex-workshop.latex.tools" = [ + { "name" = "xelatex"; + "command" = "xelatex"; + "args" = [ "-synctex=1" "-interaction=nonstopmode" "-file-line-error" "-pdf" "%DOCFILE%" ]; + } + { "name" = "pdflatex"; + "command" = "pdflatex"; + "args" = [ "-synctex=1" "-interaction=nonstopmode" "-file-line-error" "%DOCFILE%" ]; + } + { "name" = "bibtex"; "command" = "bibtex"; "args" = [ "%DOCFILE%" ]; } + ]; + "latex-workshop.latex.recipes" = [ + { "name" = "xelatex"; "tools" = [ "xelatex" ]; } + { "name" = "pdflatex"; "tools" = [ "pdflatex" ]; } + { "name" = "xe->bib->xe->xe"; "tools" = [ "xelatex" "bibtex" "xelatex" "xelatex" ]; } + { "name" = "pdf->bib->pdf->pdf"; "tools" = [ "pdflatex" "bibtex" "pdflatex" "pdflatex" ]; } + ]; + "[latex]" = { + "editor.formatOnPaste" = false; + "editor.suggestSelection" = "recentlyusedbyprefix"; + "editor.wordWrap" = "bounded"; + "editor.wordWrapColumn" = 80; + "editor.unicodeHighlight.ambiguousCharacters" = false; + }; + }; + }; + }; + + languages = [ "nix" "cxx" "python" "scala" "latex" ]; + zipAttrsWithLanguageOption = (attr: + (map (l: (lib.mkIf cfg.languages.${l} packages."${l}Packages".${attr})) languages) + ); in { options.custom-hm.vscode = { enable = mkEnableOption "Vscode config"; + languages = { + nix = mkOption { + type = lib.types.bool; + default = true; + }; + cxx = mkEnableOption "C++"; + python = mkEnableOption "Python"; + scala = mkEnableOption "Scala"; + latex = mkEnableOption "Latex"; + }; }; config = mkIf cfg.enable { - home.packages = with pkgs; [ - pkgs.wl-clipboard-x11 - ]; + home.packages = lib.mkMerge ([ + [ pkgs.clang-tools ] + ] ++ zipAttrsWithLanguageOption "systemPackages"); programs.vscode = { enable = true; enableUpdateCheck = false; enableExtensionUpdateCheck = false; mutableExtensionsDir = false; - extensions = (with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [ - mkhl.direnv + extensions = lib.mkMerge ([ + (with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [ + mkhl.direnv - bbenoist.nix - ms-azuretools.vscode-docker - ms-vscode-remote.remote-ssh - vscodevim.vim - github.vscode-pull-request-github - gruntfuggly.todo-tree # todo highlight + ms-azuretools.vscode-docker + ms-vscode-remote.remote-ssh + vscodevim.vim + github.vscode-pull-request-github + gruntfuggly.todo-tree # todo highlight - # Language support - # Python - ms-python.python - # Markdown - davidanson.vscode-markdownlint - # C/C++ - llvm-vs-code-extensions.vscode-clangd - # Nix - jnoortheen.nix-ide - # Latex - james-yu.latex-workshop - # Vue - vue.volar - # Scale / chisel - scala-lang.scala - scalameta.metals + # Markdown + davidanson.vscode-markdownlint + # Latex + # Scale / chisel + sterben.fpga-support - (ms-vscode.cmake-tools.overrideAttrs (_: { sourceRoot = "extension"; })) - twxs.cmake - - sterben.fpga-support - - ms-vscode-remote.remote-ssh-edit - mushan.vscode-paste-image - ]) ++ (with pkgs.vscode-extensions; [ - waderyan.gitblame - catppuccin.catppuccin-vsc - # Rust - rust-lang.rust-analyzer - ]); - userSettings = { - "workbench.colorTheme" = "Catppuccin Macchiato"; + ms-vscode-remote.remote-ssh-edit + mushan.vscode-paste-image + ]) + (with pkgs.vscode-extensions; [ + waderyan.gitblame + catppuccin.catppuccin-vsc + # Rust + rust-lang.rust-analyzer + # ]) ++ ; + ]) + ] ++ zipAttrsWithLanguageOption "extension"); + userSettings = lib.mkMerge ([ + {"workbench.colorTheme" = "Catppuccin Macchiato"; "terminal.integrated.sendKeybindingsToShell" = true; "extensions.ignoreRecommendations" = true; "files.autoSave" = "afterDelay"; @@ -70,80 +147,10 @@ in "git.autofetch" = false; "window.zoomLevel" = -1; - "nix.enableLanguageServer" = true; - - "latex-workshop.latex.autoBuild.run" = "never"; - "latex-workshop.latex.tools" = [ - { - "name" = "xelatex"; - "command" = "xelatex"; - "args" = [ - "-synctex=1" - "-interaction=nonstopmode" - "-file-line-error" - "-pdf" - "%DOCFILE%" - ]; - } - { - "name" = "pdflatex"; - "command" = "pdflatex"; - "args" = [ - "-synctex=1" - "-interaction=nonstopmode" - "-file-line-error" - "%DOCFILE%" - ]; - } - { - "name" = "bibtex"; - "command" = "bibtex"; - "args" = [ - "%DOCFILE%" - ]; - } - ]; - "latex-workshop.latex.recipes" = [ - { - "name" = "xelatex"; - "tools" = [ - "xelatex" - ]; - } - { - "name" = "pdflatex"; - "tools" = [ - "pdflatex" - ]; - } - { - "name" = "xe->bib->xe->xe"; - "tools" = [ - "xelatex" - "bibtex" - "xelatex" - "xelatex" - ]; - } - { - "name" = "pdf->bib->pdf->pdf"; - "tools" = [ - "pdflatex" - "bibtex" - "pdflatex" - "pdflatex" - ]; - } - ]; - "[latex]" = { - "editor.formatOnPaste" = false; - "editor.suggestSelection" = "recentlyusedbyprefix"; - "editor.wordWrap" = "bounded"; - "editor.wordWrapColumn" = 80; - "editor.unicodeHighlight.ambiguousCharacters" = false; + "extensions.experimental.affinity" = { + "vscodevim.vim" = 1; }; - "cmake.configureOnEdit" = false; - }; + }] ++ zipAttrsWithLanguageOption "settings"); }; }; }