Visual Studio Code: Difference between revisions
imported>Mic92 remote-ssh is now available upstream |
imported>Jonringer Add information on using fhs variant of vscode |
||
Line 67: | Line 67: | ||
== Using nix-shell == | == Using nix-shell == | ||
Some features of VSCode, like the Python package, require linters or other dependencies. The package [https://marketplace.visualstudio.com/items?itemName=arrterian.nix-env-selector nix-env-selector] makes this easy and does not require overrides on vscode itself to add dependencies. | Some features of VSCode, like the Python package, require linters or other dependencies. The package [https://marketplace.visualstudio.com/items?itemName=arrterian.nix-env-selector nix-env-selector] makes this easy and does not require overrides on vscode itself to add dependencies. | ||
== Use VSCode extensions without additional configuration == | |||
{{note| Only available in nixpkgs-unstable or 21.05 and after }} | |||
In [https://github.com/NixOS/nixpkgs/pull/99968 #99968], a vscode-fhs and vscodium-fhs package were added in which vscode launches inside of a [https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard FHS] compliant chroot environment using buildFHSUserEnv. This reintroduces directories such as /bin, /lib/, and /usr, which allows for extensions which ship pre-compiled binaries to work with little to no additional nixification. | |||
{{note| From a philosophical view, use of buildFHSUserEnv allows for ease-of-use at the cost of some impurity and non-reproducibility. If you prioritize purely-declarative configurations, please stay with the above guidance.}} | |||
Example usage: | |||
<syntaxHighlight lang=console> | |||
$ nix-shell -p vscode-fhs --run code | |||
</syntaxHighlight> | |||
Home-manager: | |||
<syntaxHighlight lang=nix> | |||
programs.vscode.enable = true; | |||
programs.vscode.package = pkgs.vscode-fhs; | |||
</syntaxHighlight> | |||
Adding extension-specific dependencies, these will be added to the FHS environment: | |||
<syntaxHighlight lang=nix> | |||
# needed for rust lang server extension | |||
programs.vscode.package = pkgs.vscode-fhsWithPackages (ps: with ps; [ rustup zlib ]); | |||
</syntaxHighlight> |
Revision as of 00:18, 3 May 2021
For the free distribution of the vscode codebase (without MS branding/telemetry) see VSCodium.
Installing Microsoft's Visual Studio Code
Because it is NixOS, you don't have to be root in order to be able to install stuff. As a normal user, do:
$ nix-env -iA nixos.vscode
And to open or launch the IDE, do:
$ code
As a normal user, you might be curious what stuff you have installed. To find out, do:
$ nix-env -q
Also, if you want to uninstall stuff that you installed there as a normal user, do:
$ nix-env --uninstall package-name-here
Replace the package-name-here with whatever package returned by 'nix-env -q'.
Managing extensions
Extensions can be managed using the 'vscode-with-extensions' package:
let
extensions = (with pkgs.vscode-extensions; [
bbenoist.Nix
ms-python.python
ms-azuretools.vscode-docker
ms-vscode-remote.remote-ssh
]) ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [{
name = "remote-ssh-edit";
publisher = "ms-vscode-remote";
version = "0.47.2";
sha256 = "1hp6gjh4xp2m1xlm1jsdzxw9d8frkiidhph6nvl24d0h8z34w49g";
}];
vscode-with-extensions = pkgs.vscode-with-extensions.override {
vscodeExtensions = extensions;
};
in
environment.systemPackages = [
vscode-with-extensions
];
We can retrieve an updated set for manually installed / specified packages by cloning the 'nixpkgs' repo from github, and running: 'nixpkgs/pkgs/misc/vscode-extensions/update_installed_exts.sh'
Remote ssh
When first launching remote-ssh for a NixOS host, the connection will fail due to a missing glibc dependency in the shipped node.js.
This can be resolved by installing the nodejs-12_x
package on the NixOS host. If the extension was installed from the store itself follow the instructions in https://github.com/microsoft/vscode-remote-release/issues/648#issuecomment-503148523. Note that nodejs needs to be updated according to VS Code upstream requirements (node 12 is needed as of 12/6/2019)
If vscode-remote is installed from nix (vscode-extensions.ms-vscode-remote) this will automatically replace the node.js shipped by the extension.
Using nix-shell
Some features of VSCode, like the Python package, require linters or other dependencies. The package nix-env-selector makes this easy and does not require overrides on vscode itself to add dependencies.
Use VSCode extensions without additional configuration
In #99968, a vscode-fhs and vscodium-fhs package were added in which vscode launches inside of a FHS compliant chroot environment using buildFHSUserEnv. This reintroduces directories such as /bin, /lib/, and /usr, which allows for extensions which ship pre-compiled binaries to work with little to no additional nixification.
Example usage:
$ nix-shell -p vscode-fhs --run code
Home-manager:
programs.vscode.enable = true;
programs.vscode.package = pkgs.vscode-fhs;
Adding extension-specific dependencies, these will be added to the FHS environment:
# needed for rust lang server extension
programs.vscode.package = pkgs.vscode-fhsWithPackages (ps: with ps; [ rustup zlib ]);