🕌

nixosのwslで vscode remote-wsl を起動する

2025/01/13に公開

皆さんnixは使っていますか。

NixOSとは

Nixは他のディストリビューションと異なった特徴を持っているOSです。
まずパッケージをインストールするには、コードを書いて実行する必要があります。
Linuxを作るうえで大切な home directoryの内容やsystemdの管理もコードから定義できます。

コードとして管理されるOSのメリットとして

  • どの環境でも同じ環境を再現することができます。
  • nixosを理解している前提になりますが他の人にも共有しやすい。見た人が同じ環境を作れる。
  • OSで障害が起きた際にもコードを戻すことで元の状態に戻すことができます。
  • flake.nixを使用することで、flake.lockによりパッケージのバージョンをロックできます。

WSL remoteとは

Windows上にLinux環境を作成することをWSLと呼びます。
Windows上のVScodeからこのWSL環境にアクセスすることをWSL-remoteといいます。
これを使うことでEmacsや、vimを知らない人でも簡単にLinuxのソースコードの変更ができるようになります。

最終結果

手順

windows側の手順

Remote Developmentのvscodeの拡張機能からパッケージをインストールします。
すると画面上にモニターのようなアイコンが追加されます。
最終結果の画面でいうと上から5番目のアイコンですね。
この項目が出ていれば完了となります。
最終的にはWSL TargetListにnixosが追加され選択できるようになります。

nixos側の手順

大まかな手順としては、

  1. NixOSをWSLに入れる。説明が長くなるので省略します。
  2. NixOSにwget,nix-ld-rsをインストールする。
    nix-ldは24.11以降には不要
  3. NixOSにVSCode-serverを手動でインストールする。他のOS(ubuntu)の場合はリモートサーバーをつなげた瞬間にvscode-serverが自動的にインストールしてくれるらしい。→詳細は知らない。

NixOS-WSLから使用するので
wgetとnix-ld-rsをインストールして有効化する。

configure.nix
{ config, lib, pkgs, ... }:

{
  environment.systemPackages = with pkgs; [
    wget
    nix-ld-rs
  ...
  ];

  programs = {
    nix-ld.enable = true;
  };
}

nix-community/nixos-vscode-serverに従ってvscodeを入れる

flake.nix
{
  inputs.vscode-server.url = "github:nix-community/nixos-vscode-server";

  outputs = { self, nixpkgs, vscode-server }: {
    nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
      modules = [
        #home-manager
        home-manager.nixosModules.home-manager
        {
         ...関係ないので省略
        }
        vscode-server.nixosModules.default
        ({ config, pkgs, ... }: {
          services.vscode-server.enable = true;
        })
      ];
    };
  };
}

systemdで起動

systemctl --user enable auto-fix-vscode-server.service
systemctl --user start auto-fix-vscode-server.service

ここまでくればwindowsでvscodeを開いたり。

nixos側でvscodeを開いてみたりしたら動くと思います。
code .

最後に

自分でgoogle検査してもまったく nixosのwsl でvscodeを開いたという記事は見当たらなかった。
唯一 youtubeのjeezy codesさんが見つかった。
このビデオも、1年前のものですぐに使えるかと言うと微妙でした。
youtubeのビデオを現在の状況に合わせて記事にしましました。
今年はnixos元年としたいです。

記事作成時点のcommitの自分のリポジトリ

https://github.com/tositada17/nixos-wsl/tree/0223c2177dba5144853cc1da1a9cfbcca9aa8f61

参考

https://github.com/nix-community/nixos-vscode-server
https://github.com/nix-community/NixOS-WSL

Discussion