summary refs log blame commit diff
path: root/pkgs/misc/vscode-extensions/vscodeEnv.nix
blob: b2f717ccc3ebf43141a794f58053c6285909509c (plain) (tree)
1
2
3
4
5
6
7
8
                                                                                                                                                                                               





                                 
            


                                        

                                                                                                                    
                        

     
                                                             


                                                                    




                                                                    



                                                 


                                            

                                       






                                                                           
          


                                  
#Use vscodeWithConfiguration and vscodeExts2nix to create a vscode executable. When the executable exits, it updates the mutable extension file, which is imported when evaluated by Nix later.
{ lib
, buildEnv
, writeShellScriptBin
, extensionsFromVscodeMarketplace
, vscodeDefault
}:
##User input
{ vscode                ? vscodeDefault
, nixExtensions         ? []
, vscodeExtsFolderName  ? ".vscode-exts"
# if file exists will use it and import the extensions in it into this dervation else will use empty extensions list
# this file will be created/updated by vscodeExts2nix when vscode exists
, mutableExtensionsFile 
}:
let  
  mutableExtensionsFilePath = toString mutableExtensionsFile;
  mutableExtensions = if builtins.pathExists mutableExtensionsFile 
                      then import mutableExtensionsFilePath else [];
  vscodeWithConfiguration = import ./vscodeWithConfiguration.nix { 
    inherit lib writeShellScriptBin extensionsFromVscodeMarketplace;
    vscodeDefault = vscode;
  }
  {
    inherit nixExtensions mutableExtensions vscodeExtsFolderName;
  };

  vscodeExts2nix = import ./vscodeExts2nix.nix { 
    inherit lib writeShellScriptBin;
    vscodeDefault = vscodeWithConfiguration;
  }
  {
    extensionsToIgnore = nixExtensions;
    extensions = mutableExtensions; 
  };
  code = writeShellScriptBin "code" ''
    ${vscodeWithConfiguration}/bin/code --wait "$@" 
    echo 'running vscodeExts2nix to update ${mutableExtensionsFilePath}...'
    ${vscodeExts2nix}/bin/vscodeExts2nix > ${mutableExtensionsFilePath}
  '';
in
buildEnv {
  name = "vscodeEnv";
  paths = [ code vscodeExts2nix ];
}