Visual Studio Code: Difference between revisions
imported>Nix add Home Manager install |
imported>Nix →Managing extensions: more on updating extensions, clean up section |
||
Line 84: | Line 84: | ||
</syntaxHighlight> | </syntaxHighlight> | ||
Some useful examples here: [https://github.com/search?q=extensionFromVscodeMarketplace&type=code GitHub search for "extensionFromVscodeMarketplace"] | |||
=== Updating extension versions === | |||
Nixpkgs contains a script which will run <code>code --list-extensions</code>, then look for the latest available versions of those extensions, and output a list which you can add to your Nix config in a format similar to the above. To use it, clone the [https://github.com/NixOS/nixpkgs nixpkgs repo from github], and run: [https://github.com/NixOS/nixpkgs/blob/master/pkgs/misc/vscode-extensions/update_installed_exts.sh nixpkgs/pkgs/misc/vscode-extensions/update_installed_exts.sh] | |||
Example output: | |||
<syntaxHighlight lang=nix> | |||
❯ ./nixpkgs/pkgs/misc/vscode-extensions/update_installed_exts.sh | |||
... # it does some fetching and then outputs the list... | |||
{ extensions = [ | |||
{ | |||
name = "project-manager"; | |||
publisher = "alefragnani"; | |||
version = "12.4.0"; | |||
sha256 = "0q6zkz7pqz2prmr01h17h9a5q6cn6bjgcxggy69c84j8h2w905wy"; | |||
} | |||
{ | |||
name = "githistory"; | |||
publisher = "donjayamanne"; | |||
version = "0.6.18"; | |||
sha256 = "01lc9gpqdjy6himn7jsfjrfz8xrk728c20903lxkxy5fliv232gz"; | |||
} | |||
... # the output for the rest of your extensions | |||
]; | |||
}% | |||
</syntaxHighlight> | |||
== Remote SSH == | == Remote SSH == |
Revision as of 12:32, 10 October 2021
For the free distribution of the vscode codebase (without MS branding/telemetry) see VSCodium.
Installing Microsoft's Visual Studio Code
With Home Manager
If you are using Home Manager, you will want to modify your home.nix
(or a file inherited by it). Example:
~/home.nix
{ config, pkgs, ... }:
{
programs.home-manager.enable = true;
... # More of your home-manager config
programs = {
... # Start of your programs config
vscode = {
enable = true;
package = pkgs.vscodium; # You can skip this if you want to use the unfree version
extensions = with pkgs.vscode-extensions; [
# Some example extensions...
dracula-theme.theme-dracula
vscodevim.vim
yzhang.markdown-all-in-one
];
}
... # Rest of your programs config
}
... # Rest of your home-manager config
}
- See for more options: Home Manager Manual: Options - programs.vscode
- Search for extensions with configurations: NixOS Search: vscode-extensions
With nix-env
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
Managing extensions
Extensions can be managed using the 'vscode-with-extensions' package:
{ pkgs, ... }:
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 {
config = {
environment.systemPackages = [
vscode-with-extensions
];
};
}
Some useful examples here: GitHub search for "extensionFromVscodeMarketplace"
Updating extension versions
Nixpkgs contains a script which will run code --list-extensions
, then look for the latest available versions of those extensions, and output a list which you can add to your Nix config in a format similar to the above. To use it, clone the nixpkgs repo from github, and run: nixpkgs/pkgs/misc/vscode-extensions/update_installed_exts.sh
Example output:
❯ ./nixpkgs/pkgs/misc/vscode-extensions/update_installed_exts.sh
... # it does some fetching and then outputs the list...
{ extensions = [
{
name = "project-manager";
publisher = "alefragnani";
version = "12.4.0";
sha256 = "0q6zkz7pqz2prmr01h17h9a5q6cn6bjgcxggy69c84j8h2w905wy";
}
{
name = "githistory";
publisher = "donjayamanne";
version = "0.6.18";
sha256 = "01lc9gpqdjy6himn7jsfjrfz8xrk728c20903lxkxy5fliv232gz";
}
... # the output for the rest of your extensions
];
}%
Remote SSH
The remote-ssh extension works by connecting to a remote host and downloading scripts and pre-built binaries to $HOME/.vscode-server
. When first launching remote-ssh for a NixOS host the connection will fail due to the provided node.js not having been built for a NixOS system (the dynamic libraries aren't in the same place).
Any client to NixOS host
tl;dr Use nix-vscode-server on host machines.
Note that nix-vscode-server works as of 8/21/21 but is occasionally broken (See https://github.com/msteen/nixos-vscode-server/pull/3, https://github.com/msteen/nixos-vscode-server/pull/4, https://github.com/msteen/nixos-vscode-server/pull/5). Here's a workaround: Install the nodejs-14_x
package on the NixOS host, and then run the following nix-shell script:
#! /usr/bin/env nix-shell
#! nix-shell --pure -i runghc -p "haskellPackages.ghcWithPackages (pkgs: [ pkgs.turtle ])"
{-# LANGUAGE OverloadedStrings #-}
import Turtle
main = sh $ do
homedir <- home
subdir <- ls $ homedir </> ".vscode-server/bin/"
let nodepath = subdir </> "node"
badnode <- isNotSymbolicLink nodepath
if badnode
then do
mv nodepath (subdir </> "node_backup")
symlink "/run/current-system/sw/bin/node" nodepath
echo ("Fixed " <> repr subdir)
else do
echo ("Already fixed " <> repr subdir)
If instead you'd prefer to fix the binaries manually and have to do so every time that you upgrade your VSCode version, then you can install the nodejs-14_x
package on the NixOS host and replace the VSCode provided version. This workaround is described here: https://github.com/microsoft/vscode-remote-release/issues/648#issuecomment-503148523. Note that nodejs needs to be updated according to VSCode upstream requirements (nodejs 14 is needed as of 5/14/2021).
Nix-sourced VSCode to NixOS host
If vscode-remote is installed from nix (vscode-extensions.ms-vscode-remote as above) on the client machine, everything should "just work".
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, vscode-fhs and vscodium-fhs packages were added in which the editors launch 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 ]);