{
  pkgs,
  lib,
  ...
}: let
  plugins = (import ./extensions.lock) {
    pkgs = pkgs;
    lib = lib;
  };
in {
  imports = [
    ./javascript.nix
    ./latex.nix
    ./markdown.nix
    ./nix.nix
    ./rust.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" \
          --add-flags "--disable-features=WaylandFractionalScaleV1"
      '';

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

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

      ## Code Completion
      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

      ## SVG
      jock.svg
    ];
    userSettings = {
      "editor.linkedEditing" = true;
      "window.menuBarVisibility" = "toggle";
      "github.copilot.editor.enableAutoCompletions" = true;
      "redhat.telemetry.enabled" = false;
    };
  };
}
