{
  pkgs,
  lib,
  ...
}: let
  plugins = (import ./extensions.lock) {
    pkgs = pkgs;
    lib = lib;
  };
in {
  imports = [
    ./javascript.nix
    ./markdown.nix
    ./nix.nix
  ];

  programs.vscode = {
    enable = true;
    package = pkgs.symlinkJoin {
      name = pkgs.vscodium.name;
      paths = [pkgs.vscodium];
      buildInputs = [pkgs.vscodium pkgs.makeWrapper];

      postBuild = ''
        wrapProgram $out/bin/codium \
          --add-flags "--enable-features=UseOzonePlatform" \
          --add-flags "--enable-features=WaylandWindowDecorations" \
          --add-flags "--ozone-platform=wayland"
      '';

      pname = pkgs.vscodium.pname;
      version = pkgs.vscodium.version;
      meta = pkgs.vscodium.meta;
    };

    enableUpdateCheck = false;
    enableExtensionUpdateCheck = false;
    extensions = with plugins;
      [
        # General extensions

        ## Code Completion
        #      github.copilot
        #      github.copilot-chat
        continue.continue

        ## Development Environment
        ms-toolsai.jupyter
        ms-vscode-remote.remote-containers

        ## Error Checking
        usernamehw.errorlens

        ## Export and Visualisation
        ibm.output-colorizer
        nobuhito.printcode
        pnp.polacode

        ## Git
        lamartire.git-indicators
        mhutchie.git-graph

        ## Miscelaneous
        britesnow.vscode-toggle-quotes
        mrmlnc.vscode-duplicate
        qcz.text-power-tools

        # Language extensions

        ## CSV
        mechatroner.rainbow-csv

        ## Python
        ms-python.python

        ## Rust language extensions
        serayuzgur.crates
        tamasfe.even-better-toml
        vadimcn.vscode-lldb

        ## SVG
        jock.svg

        ## Tex
        james-yu.latex-workshop
      ]
      ++ [
        pkgs.vscode-extensions.rust-lang.rust-analyzer
      ];
    userSettings = {
      "editor.linkedEditing" = true;
      "window.menuBarVisibility" = "toggle";
      "github.copilot.editor.enableAutoCompletions" = true;
    };
  };
}
