{ pkgs, user, ... }:
{
  home-manager.users.${user} = {
    programs.vscode = {
      enable = false;
      package = pkgs.vscodium;
      #package = pkgs.vscode;
      extensions =
        with pkgs.vscode-extensions;
        [

          # language suports
          pkgs.unstable.vscode-extensions.rust-lang.rust-analyzer
          pkgs.vscode-extensions.jnoortheen.nix-ide
          pkgs.vscode-extensions.redhat.java
          pkgs.vscode-extensions.zxh404.vscode-proto3
          pkgs.vscode-extensions.redhat.vscode-yaml
          pkgs.vscode-extensions.ms-azuretools.vscode-docker
          pkgs.vscode-extensions.octref.vetur
          pkgs.vscode-extensions.bungcip.better-toml
          pkgs.vscode-extensions.mikestead.dotenv

          # linters
          pkgs.vscode-extensions.esbenp.prettier-vscode
          pkgs.vscode-extensions.naumovs.color-highlight

          # essentials, other
          pkgs.vscode-extensions.streetsidesoftware.code-spell-checker
          pkgs.vscode-extensions.vscodevim.vim
          pkgs.vscode-extensions.oderwat.indent-rainbow
          pkgs.vscode-extensions.usernamehw.errorlens
          pkgs.vscode-extensions.christian-kohler.path-intellisense
          pkgs.vscode-extensions.vscjava.vscode-spring-initializr
          pkgs.vscode-extensions.gruntfuggly.todo-tree
          pkgs.vscode-extensions.eamodio.gitlens

          #themes, icons
          pkgs.vscode-extensions.vscode-icons-team.vscode-icons
          pkgs.vscode-extensions.mechatroner.rainbow-csv

          # local ai
          pkgs.vscode-extensions.continue.continue
        ]
        ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
          {
            name = "shades-of-purple";
            publisher = "ahmadawais";
            version = "7.3.2";
            sha256 = "10q5w9g7ghn2qvdc7h2b79x1vy8nzpnwz8dbg1h03074ikhvjx4v";

          }
          {
            name = "aw-watcher-vscode";
            publisher = "activitywatch";
            version = "0.5.0";
            sha256 = "0nvw8pp6xaqs6w2zz3dr0vlrrpd6wcgh6jc5bp5ld92p0f34idrs";
          }
        ];
      userSettings = {
        "terminal.integrated.defaultProfile.linux" = "zsh";
        "editor.formatOnSave" = true;
        "editor.lineNumbers" = "relative";
        "workbench.colorTheme" = "Shades of Purple (Super Dark)";
        "editor.minimap.enabled" = false;
        "workbench.iconTheme" = "vscode-icons";
        "vim.smartRelativeLine" = true;
        "redhat.telemetry.enabled" = false;
        "rust-analyzer.cargo.sysroot" = "discover";
        "[typescriptreact]" = {
          "editor.defaultFormatter" = "esbenp.prettier-vscode";
        };
        # load build.rs from checks
        "rust-analyzer.cargo.loadOutDirsFromCheck" = true;
        "rust-analyzer.experimental.procAttrMacros" = false;
        "rust-analyzer.cargo.buildScripts.enable" = true;

      };
      languageSnippets = {

        nix = {
          "Include RustSrc for vscode" = {
            body = [
              "LIBCLANG_PATH = \"\${pkgs.llvmPackages_17.libclang.lib}/lib\";"
              "RUST_SRC_PATH = \"\${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}\";"
            ];
            description = "Include RUST_SRC_PATH and LIBCLANG_PATH for devshells";
            prefix = [
              "rust-src"
            ];
            scope = "nix";
          };
          "Crane.dev workspace package into container" = {
            body = [
              "$1-container = pkgs.dockerTools.buildLayeredImage"
              "{"
              "  name = \"$1\";"
              "  tag = \"latest\";"
              "  contents = with pkgs; ["
              "    cacert"
              "    openssl"
              "    pkg-config"
              "    libiconv"
              "  ];"
              ""
              "  config = {"
              "    WorkingDir = \"/app\";"
              "    Volumes = {"
              "      \"/app\" = { };"
              "    };"
              "    Entrypoint = [ \"\${$1}/bin/$2\" ];"
              "  };"
              "}; "
            ];
            prefix = [
              "nix container"
            ];
            scope = "nix";
          };

          pkginit = {
            body = [
              "{pkgs, ...}: {"
              "$1"
              "}"
            ];
            description = "Insert a nix pkg config";
            prefix = [
              "nix"
            ];
          };
        };
      };
    };
  };
}