{ config, lib, pkgs, ... }: let userCfg = config.users.foo-dogsquared; cfg = userCfg.programs.vs-code; in { options.users.foo-dogsquared.programs.vs-code.enable = lib.mkEnableOption "foo-dogsquared's Visual Studio Code setup"; config = lib.mkIf cfg.enable { suites.editors.vscode.enable = true; programs.vscode = { extensions = with pkgs.vscode-extensions; [ # Additional language support. bbenoist.nix graphql.vscode-graphql ms-vscode.cmake-tools ms-vscode.cpptools ms-vscode.powershell # Extra editor niceties. eamodio.gitlens mkhl.direnv usernamehw.errorlens vadimcn.vscode-lldb # The other niceties. editorconfig.editorconfig ]; userSettings = { "extensions.ignoreRecommendations" = true; }; }; # We're using Visual Studio Code as a git difftool and mergetool which is # surprisingly good compared to the competition (which is not much). programs.git.extraConfig = { diff.tool = lib.mkDefault "vscode"; difftool.vscode.cmd = "code --wait --diff $LOCAL $REMOTE"; # It has a three-way merge. merge.tool = lib.mkDefault "vscode"; mergetool.vscode.cmd = "code --wait --merge $REMOTE $LOCAL $BASE $MERGED"; }; }; }