{
  lib,
  pkgs,
  inputs,
  config,
  osConfig,
  ...
}: let
  nix-development-enabled = osConfig.host.nix-development.enable;
  ai-tooling-enabled = config.user.continue.enable && osConfig.host.ai.enable;
in {
  nixpkgs = {
    overlays = [
      inputs.nix-vscode-extensions.overlays.default
    ];
  };

  programs = {
    bash.shellAliases = {
      code = "codium";
    };

    vscode = let
      extensions = inputs.nix-vscode-extensions.extensions.${pkgs.system};
      open-vsx = extensions.open-vsx;
      vscode-marketplace = extensions.vscode-marketplace;
    in {
      enable = true;

      package = pkgs.vscodium;

      mutableExtensionsDir = false;

      profiles.default = {
        enableUpdateCheck = false;
        enableExtensionUpdateCheck = false;

        userSettings = lib.mkMerge [
          {
            "workbench.colorTheme" = "Atom One Dark";
            "cSpell.userWords" = import ./user-words.nix;
            "javascript.updateImportsOnFileMove.enabled" = "always";
            "editor.tabSize" = 2;
            "editor.insertSpaces" = false;
          }
          (lib.mkIf nix-development-enabled {
            "nix.enableLanguageServer" = true;
            "nix.serverPath" = "nil";
            "[nix]" = {
              "editor.defaultFormatter" = "kamadorueda.alejandra";
              "editor.formatOnPaste" = true;
              "editor.formatOnSave" = true;
              "editor.formatOnType" = true;
            };
            "alejandra.program" = "alejandra";
            "nixpkgs" = {
              "expr" = "import <nixpkgs> {}";
            };
          })
          (lib.mkIf ai-tooling-enabled {
            "continue.telemetryEnabled" = false;
          })
        ];

        extensions = (
          with open-vsx;
            [
              # vs code feel extensions
              ms-vscode.atom-keybindings
              akamud.vscode-theme-onedark
              streetsidesoftware.code-spell-checker
              streetsidesoftware.code-spell-checker-german
              streetsidesoftware.code-spell-checker-italian
              jeanp413.open-remote-ssh

              # html extensions
              formulahendry.auto-rename-tag
              ms-vscode.live-server

              # js extensions
              dsznajder.es7-react-js-snippets
              dbaeumer.vscode-eslint
              standard.vscode-standard
              firsttris.vscode-jest-runner
              stylelint.vscode-stylelint
              tauri-apps.tauri-vscode

              # go extensions
              golang.go

              # astro blog extensions
              astro-build.astro-vscode
              unifiedjs.vscode-mdx

              # misc extensions
              tamasfe.even-better-toml
            ]
            ++ (lib.lists.optionals nix-development-enabled [
              # nix extensions
              pinage404.nix-extension-pack
              jnoortheen.nix-ide
              kamadorueda.alejandra
            ])
            ++ (
              with vscode-marketplace;
                [
                  # js extensions
                  karyfoundation.nearley
                ]
                ++ (lib.lists.optionals ai-tooling-enabled [
                  continue.continue
                ])
            )
        );
      };
    };
  };
}