Merge branch 'vscode-utils/vscodeEnv' of https://github.com/countoren/nixpkgs-1 into vscode-utils/vscodeEnv

* 'vscode-utils/vscodeEnv' of https://github.com/countoren/nixpkgs-1: (178391 commits)
  Use a different vscode user-data-dir for every project. Treat workspace setting files as global for that user-data-dir with symlink. Add updateLaunchCmd to update .vscode/launch.json.
  fix permission problem of mutableExtensions
  vscodeEnv updateSettings for keybindings change keybindings file name parameter type from path to string
  change vscodeSettingsFile parameter type from path to string
  add missing jq to vscodeEnv
  use updateSettings in vscodeEnv in order to create and/or update settings.json, keybindings.json
  add updateSettings drv which will union nix settings configurations into the a vscode settings file
  vscode-utils/vscodeEnv: fix typo and grammer in the description comment
  vscode-utils/vscodeEnv: split to 2 functions vscodeWithConfiguration, vscodeExts2nix, vscodeEnv
  vsode-utils: extracting attributes to limit input range
  vscode-utils/vscodeEnv: add vscodeWithConfiguration, vscodeExts2nix and vscodeEnv
  xfce.xfce4-icon-theme: update gtk dependency and add license
  xfce.xfce4-hardware-monitor-plugin: update meta
  xfce.xfce4-embed-plugin: update meta and buildInputs
  xfce.xfce4-mailwatch-plugin: remove broken status
  xfce.exo: add support for gtk2, besides gtk3
  xfce.xfdesktop: 4.14.1 -> 4.14.2
  xfce.xfce4-weather-plugin: 0.8.10 -> 0.10.1
  xfce.xfdashboard: 0.7.5 -> 0.7.7
  xfce.xfce4-timer-plugin: 1.6.0 -> 1.7.0
  ...
This commit is contained in:
Moises Nessim
2020-05-26 13:16:13 -05:00
14531 changed files with 262925 additions and 151254 deletions
@@ -83,8 +83,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "cpptools";
publisher = "ms-vscode";
version = "0.26.1";
sha256 = "09khm0byxa9mv8qbqrikd7akz3p816ra5z8l86xqkmbm6j1k4wpc";
version = "0.27.0";
sha256 = "06l25fjlcj0m7f7883afbh0x2ikgkqi768kv8y4qi1jc1gxndpm0";
};
buildInputs = [
+27
View File
@@ -122,6 +122,8 @@ in
ms-vscode.cpptools = callPackage ./cpptools {};
ms-vscode-remote.remote-ssh = callPackage ./remote-ssh {};
ms-python.python = callPackage ./python {
extractNuGet = callPackage ./python/extract-nuget.nix { };
};
@@ -138,6 +140,31 @@ in
};
};
matklad.rust-analyzer = callPackage ./rust-analyzer {};
scala-lang.scala = buildVscodeMarketplaceExtension {
mktplcRef = {
name = "scala";
publisher = "scala-lang";
version = "0.3.8";
sha256 = "17dl10m3ayf57sqgil4mr9fjdm7i8gb5clrs227b768pp2d39ll9";
};
meta = {
license = stdenv.lib.licenses.mit;
};
};
scalameta.metals = buildVscodeMarketplaceExtension {
mktplcRef = {
name = "metals";
publisher = "scalameta";
version = "1.6.3";
sha256 = "1mc3awybzd2ql1b86inirhsw3j2c7cs0b0nvbjp38jjpq674bmj7";
};
meta = {
license = stdenv.lib.licenses.asl20;
};
};
skyapps.fish-vscode = buildVscodeMarketplaceExtension {
mktplcRef = {
+20 -13
View File
@@ -1,18 +1,18 @@
{ lib, stdenv, fetchurl, vscode-utils, extractNuGet
, icu, curl, openssl, lttng-ust, autoPatchelfHook
, pythonUseFixed ? false, python # When `true`, the python default setting will be fixed to specified.
# Use version from `PATH` for default setting otherwise.
# Defaults to `false` as we expect it to be project specific most of the time.
, ctagsUseFixed ? true, ctags # When `true`, the ctags default setting will be fixed to specified.
# Use version from `PATH` for default setting otherwise.
# Defaults to `true` as usually not defined on a per projet basis.
, python3
, pythonUseFixed ? false # When `true`, the python default setting will be fixed to specified.
# Use version from `PATH` for default setting otherwise.
# Defaults to `false` as we expect it to be project specific most of the time.
, ctagsUseFixed ? true, ctags # When `true`, the ctags default setting will be fixed to specified.
# Use version from `PATH` for default setting otherwise.
# Defaults to `true` as usually not defined on a per projet basis.
}:
assert pythonUseFixed -> null != python;
assert ctagsUseFixed -> null != ctags;
let
pythonDefaultsTo = if pythonUseFixed then "${python}/bin/python" else "python";
pythonDefaultsTo = if pythonUseFixed then "${python3}/bin/python" else "python";
ctagsDefaultsTo = if ctagsUseFixed then "${ctags}/bin/ctags" else "ctags";
# The arch tag comes from 'PlatformName' defined here:
@@ -23,14 +23,14 @@ let
else throw "Only x86_64 Linux and Darwin are supported.";
languageServerSha256 = {
linux-x64 = "1w3y0sn6ijk1vspi4lailg1q1iy9lwslhx92c7jbrrkiaszvaqwn";
osx-x64 = "11l4fic8cvgh1l3dq6qxi51pwhcic79zf13rhyajl5w5g13caafp";
linux-x64 = "1pmj5pb4xylx4gdx4zgmisn0si59qx51n2m1bh7clv29q6biw05n";
osx-x64 = "0ishiy1z9dghj4ryh95vy8rw0v7q4birdga2zdb4a8am31wmp94b";
}.${arch};
# version is languageServerVersion in the package.json
languageServer = extractNuGet rec {
name = "Python-Language-Server";
version = "0.4.24";
version = "0.5.30";
src = fetchurl {
url = "https://pvsc.azureedge.net/python-language-server-stable/${name}-${arch}.${version}.nupkg";
@@ -41,8 +41,8 @@ in vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "python";
publisher = "ms-python";
version = "2019.10.44104";
sha256 = "1k0wws430psrl8zp9ky5mifbg02qmh2brjyqk5k9pn3y1dks5gns";
version = "2020.3.71659";
sha256 = "1smhnhkfchmljz8aj1br70023ysgd2hj6pm1ncn1jxphf89qi1ja";
};
buildInputs = [
@@ -54,6 +54,11 @@ in vscode-utils.buildVscodeMarketplaceExtension {
nativeBuildInputs = [
autoPatchelfHook
python3.pkgs.wrapPython
];
pythonPath = with python3.pkgs; [
setuptools
];
postPatch = ''
@@ -70,6 +75,8 @@ in vscode-utils.buildVscodeMarketplaceExtension {
mkdir -p "$out/$installPrefix/languageServer.${languageServer.version}"
cp -R --no-preserve=ownership ${languageServer}/* "$out/$installPrefix/languageServer.${languageServer.version}"
chmod -R +wx "$out/$installPrefix/languageServer.${languageServer.version}"
patchPythonScript "$out/$installPrefix/pythonFiles/lib/python/isort/main.py"
'';
meta = with lib; {
@@ -0,0 +1,55 @@
{ stdenv
, vscode-utils
, useLocalExtensions ? false}:
# Note that useLocalExtensions requires that vscode-server is not running
# on host. If it is, you'll need to remove ~/.vscode-server,
# and redo the install by running "Connect to host" on client
let
inherit (vscode-utils) buildVscodeMarketplaceExtension;
# patch runs on remote machine hence use of which
# links to local node if version is 12
patch = ''
f="/home/''$USER/.vscode-server/bin/''$COMMIT_ID/node"
localNodePath=''$(which node)
if [ -x "''$localNodePath" ]; then
localNodeVersion=''$(node -v)
if [ "\''${localNodeVersion:1:2}" = "12" ]; then
echo PATCH: replacing ''$f with ''$localNodePath
rm ''$f
ln -s ''$localNodePath ''$f
fi
fi
${stdenv.lib.optionalString useLocalExtensions ''
# Use local extensions
if [ -d ~/.vscode/extensions ]; then
if ! test -L "~/.vscode-server/extensions"; then
mkdir -p ~/.vscode-server
ln -s ~/.vscode/extensions ~/.vscode-server/
fi
fi
''}
'';
in
buildVscodeMarketplaceExtension {
mktplcRef = {
name = "remote-ssh";
publisher = "ms-vscode-remote";
version = "0.50.0";
sha256 = "01pyd6759p5nkjhjy3iplrl748xblr54l1jphk2g02s1n5ds2qb9";
};
postPatch = ''
substituteInPlace "out/extension.js" \
--replace "# install extensions" '${patch}'
'';
meta = with stdenv.lib; {
description ="Use any remote machine with a SSH server as your development environment.";
license = licenses.unfree;
maintainers = with maintainers; [
tbenst
];
};
}
@@ -0,0 +1,22 @@
{
"name": "rust-analyzer",
"version": "0.4.0-dev",
"dependencies": {
"jsonc-parser": "^2.2.1",
"node-fetch": "^2.6.0",
"vscode-languageclient": "6.1.3",
"@rollup/plugin-commonjs": "^11.0.2",
"@rollup/plugin-node-resolve": "^7.1.1",
"@types/node": "^12.12.34",
"@types/node-fetch": "^2.5.5",
"@types/vscode": "1.43.0",
"@typescript-eslint/eslint-plugin": "^2.26.0",
"@typescript-eslint/parser": "^2.26.0",
"eslint": "^6.8.0",
"rollup": "^2.3.2",
"tslib": "^1.11.1",
"typescript": "^3.8.3",
"typescript-formatter": "^7.2.2",
"vsce": "^1.75.0"
}
}
@@ -0,0 +1,50 @@
# Update script: pkgs/development/tools/rust/rust-analyzer/update.sh
{ lib, stdenv, vscode-utils, jq, rust-analyzer, nodePackages_10_x
, setDefaultServerPath ? true
}:
let
pname = "rust-analyzer";
publisher = "matklad";
# Follow the unstable version of rust-analyzer, since the extension is not stable yet.
inherit (rust-analyzer) version;
build-deps = nodePackages_10_x."rust-analyzer-build-deps-../../misc/vscode-extensions/rust-analyzer/build-deps";
# FIXME: Making a new derivation to link `node_modules` and run `npm run package`
# will cause a build failure.
vsix = build-deps.override {
src = "${rust-analyzer.src}/editors/code";
outputs = [ "vsix" "out" ];
postInstall = ''
npm run package
mkdir $vsix
cp ${pname}.vsix $vsix/${pname}.zip
'';
};
in vscode-utils.buildVscodeExtension {
inherit version vsix;
name = "${pname}-${version}";
src = "${vsix}/${pname}.zip";
vscodeExtUniqueId = "${publisher}.${pname}";
nativeBuildInputs = lib.optional setDefaultServerPath jq;
postFixup = lib.optionalString setDefaultServerPath ''
package_json="$out/${publisher}.${pname}/package.json"
jq '.contributes.configuration.properties."rust-analyzer.serverPath".default = $s' \
--arg s "${rust-analyzer}/bin/rust-analyzer" \
$package_json >$package_json.new
mv $package_json.new $package_json
'';
meta = with lib; {
description = "An alternative rust language server to the RLS";
homepage = "https://github.com/rust-analyzer/rust-analyzer";
license = with licenses; [ mit asl20 ];
maintainers = with maintainers; [ oxalica ];
platforms = platforms.all;
};
}
@@ -0,0 +1,39 @@
# Updates the vscode setting file base on a nix expression
# should run from the workspace root.
{ writeShellScriptBin
, lib
, jq
}:
##User Input
{ settings ? {}
# if marked as true will create an empty json file if does not exists
, createIfDoesNotExists ? true
, vscodeSettingsFile ? ".vscode/settings.json"
, userSettingsFolder ? ""
, symlinkFromUserSetting ? false
}:
let
updateVSCodeSettingsCmd = ''
(
echo 'updateSettings.nix: Updating ${vscodeSettingsFile}...'
oldSettings=$(cat ${vscodeSettingsFile})
echo $oldSettings' ${builtins.toJSON settings}' | ${jq}/bin/jq -s add > ${vscodeSettingsFile}
)'';
createEmptySettingsCmd = ''mkdir -p .vscode && echo "{}" > ${vscodeSettingsFile}'';
fileName = builtins.baseNameOf vscodeSettingsFile;
symlinkFromUserSettingCmd = lib.optionalString symlinkFromUserSetting
'' && mkdir -p "${userSettingsFolder}" && ln -sfv "$(pwd)/${vscodeSettingsFile}" "${userSettingsFolder}/" '';
in
writeShellScriptBin ''vscodeNixUpdate-${lib.removeSuffix ".json" (fileName)}''
(lib.optionalString (settings != {})
(if createIfDoesNotExists then ''
[ ! -f "${vscodeSettingsFile}" ] && ${createEmptySettingsCmd}
${updateVSCodeSettingsCmd} ${symlinkFromUserSettingCmd}
''
else ''[ -f "${vscodeSettingsFile}" ] && ${updateVSCodeSettingsCmd} ${symlinkFromUserSettingCmd}
''
)
)
@@ -0,0 +1,6 @@
with import <nixpkgs>{};
callPackage (import ./updateSettings.nix) {} {
settings = {
a = "fdsdf";
};
}
+7 -5
View File
@@ -1,5 +1,4 @@
{ stdenv, lib, buildEnv, writeShellScriptBin, fetchurl, vscode, unzip }:
{ stdenv, lib, buildEnv, writeShellScriptBin, fetchurl, vscode, unzip, jq }:
let
extendedPkgVersion = lib.getVersion vscode;
extendedPkgName = lib.removeSuffix "-${extendedPkgVersion}" vscode.name;
@@ -48,12 +47,15 @@ let
buildVscodeMarketplaceExtension = a@{
name ? "",
src ? null,
vsix ? null,
mktplcRef,
...
}: assert "" == name; assert null == src;
buildVscodeExtension ((removeAttrs a [ "mktplcRef" ]) // {
buildVscodeExtension ((removeAttrs a [ "mktplcRef" "vsix" ]) // {
name = "${mktplcRef.publisher}-${mktplcRef.name}-${mktplcRef.version}";
src = fetchVsixFromVscodeMarketplace mktplcRef;
src = if (vsix != null)
then vsix
else fetchVsixFromVscodeMarketplace mktplcRef;
vscodeExtUniqueId = "${mktplcRef.publisher}.${mktplcRef.name}";
});
@@ -85,7 +87,7 @@ let
};
vscodeEnv = import ./vscodeEnv.nix {
inherit lib buildEnv writeShellScriptBin extensionsFromVscodeMarketplace;
inherit lib buildEnv writeShellScriptBin extensionsFromVscodeMarketplace jq;
vscodeDefault = vscode;
};
in
+46 -5
View File
@@ -4,11 +4,21 @@
, writeShellScriptBin
, extensionsFromVscodeMarketplace
, vscodeDefault
, jq
}:
##User input
{ vscode ? vscodeDefault
, nixExtensions ? []
, vscodeExtsFolderName ? ".vscode-exts"
{ vscode ? vscodeDefault
, nixExtensions ? []
, vscodeExtsFolderName ? ".vscode-exts"
# will add to the command updateSettings (which will run on executing vscode) settings to override in settings.json file
, settings ? {}
, createSettingsIfDoesNotExists ? true
, launch ? {}
, createLaunchIfDoesNotExists ? true
# will add to the command updateKeybindings(which will run on executing vscode) keybindings to override in keybinding.json file
, keybindings ? {}
, createKeybindingsIfDoesNotExists ? true
, user-data-dir ? ''"''${TMP}''${name}"/vscode-data-dir''
# 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
@@ -22,7 +32,35 @@ let
vscodeDefault = vscode;
}
{
inherit nixExtensions mutableExtensions vscodeExtsFolderName;
inherit nixExtensions mutableExtensions vscodeExtsFolderName user-data-dir;
};
updateSettings = import ./updateSettings.nix { inherit lib writeShellScriptBin jq; };
userSettingsFolder = "${ user-data-dir }/User";
updateSettingsCmd = updateSettings {
settings = {
"extensions.autoCheckUpdates" = false;
"extensions.autoUpdate" = false;
"update.mode" = "none";
} // settings;
inherit userSettingsFolder;
createIfDoesNotExists = createSettingsIfDoesNotExists;
symlinkFromUserSetting = (user-data-dir != "");
};
updateLaunchCmd = updateSettings {
settings = launch;
createIfDoesNotExists = createLaunchIfDoesNotExists;
vscodeSettingsFile = ".vscode/launch.json";
};
updateKeybindingsCmd = updateSettings {
settings = keybindings;
createIfDoesNotExists = createKeybindingsIfDoesNotExists;
vscodeSettingsFile = ".vscode/keybindings.json";
inherit userSettingsFolder;
symlinkFromUserSetting = (user-data-dir != "");
};
vscodeExts2nix = import ./vscodeExts2nix.nix {
@@ -34,6 +72,9 @@ let
extensions = mutableExtensions;
};
code = writeShellScriptBin "code" ''
${updateSettingsCmd}/bin/vscodeNixUpdate-settings
${updateLaunchCmd}/bin/vscodeNixUpdate-launch
${updateKeybindingsCmd}/bin/vscodeNixUpdate-keybindings
${vscodeWithConfiguration}/bin/code --wait "$@"
echo 'running vscodeExts2nix to update ${mutableExtensionsFilePath}...'
${vscodeExts2nix}/bin/vscodeExts2nix > ${mutableExtensionsFilePath}
@@ -41,5 +82,5 @@ let
in
buildEnv {
name = "vscodeEnv";
paths = [ code vscodeExts2nix ];
paths = [ code vscodeExts2nix updateSettingsCmd updateLaunchCmd updateKeybindingsCmd ];
}
@@ -0,0 +1,12 @@
with import <nixpkgs>{};
callPackage (import ./vscodeEnv.nix) {
extensionsFromVscodeMarketplace = vscode-utils.extensionsFromVscodeMarketplace;
vscodeDefault = vscode;
} {
mutableExtensionsFile = ./extensions.nix;
settings = {
a = "fdsdf";
t = "test";
};
}
@@ -11,10 +11,17 @@
# extensions to be copied into the project's extensions folder
, mutableExtensions ? []
, vscodeExtsFolderName ? ".vscode-exts"
, user-data-dir ? ''"''${TMP}vscodeWithConfiguration/vscode-data-dir"''
}:
let
nixExtsDrvs = extensionsFromVscodeMarketplace nixExtensions;
mutExtsDrvs = extensionsFromVscodeMarketplace mutableExtensions;
mutableExtsPaths = lib.forEach mutExtsDrvs ( e:
{
origin = ''${e}/share/vscode/extensions/${e.vscodeExtUniqueId}'';
target = ''${vscodeExtsFolderName}/${e.vscodeExtUniqueId}-${(lib.findSingle (ext: ''${ext.publisher}.${ext.name}'' == e.vscodeExtUniqueId) "" "m" mutableExtensions ).version}'';
}
);
#removed not defined extensions
rmExtensions = lib.optionalString (nixExtensions++mutableExtensions != []) ''
@@ -27,16 +34,21 @@ let
#copy mutable extension out of the nix store
cpExtensions = ''
${lib.concatMapStringsSep "\n" (e : ''ln -sfn ${e}/share/vscode/extensions/* ${vscodeExtsFolderName}/'') nixExtsDrvs}
${lib.concatMapStringsSep "\n" (e : ''
cp -a ${e}/share/vscode/extensions/${e.vscodeExtUniqueId} ${vscodeExtsFolderName}/${e.vscodeExtUniqueId}-${(lib.findSingle (ext: ''${ext.publisher}.${ext.name}'' == e.vscodeExtUniqueId) "" "m" mutableExtensions ).version}
'') mutExtsDrvs}
${lib.concatMapStringsSep "\n" (ePath : ''
if [ ! -d ${ePath.target} ]; then
cp -a ${ePath.origin} ${ePath.target}
chmod -R u+rwx ${ePath.target}
fi
'') mutableExtsPaths}
'';
in
writeShellScriptBin "code" ''
if ! [[ "$@" =~ "--list-extension" ]]; then
mkdir -p ${vscodeExtsFolderName}
mkdir -p "${vscodeExtsFolderName}"
${rmExtensions}
${cpExtensions}
fi
${vscode}/bin/code --extensions-dir ${vscodeExtsFolderName} "$@"
${vscode}/bin/code --extensions-dir "${vscodeExtsFolderName}" ${
lib.optionalString (user-data-dir != "") ''--user-data-dir ${user-data-dir }''
} "$@"
''
@@ -8,8 +8,8 @@ in
mktplcRef = {
name = "vscode-wakatime";
publisher = "WakaTime";
version = "2.2.1";
sha256 = "18hdmx993wvhcv13z9p8ylp3lf480axv4lyl0qx52pw2y2jgj1z8";
version = "4.0.0";
sha256 = "0bwxz8dg00k8frnvkvcngll5yaf9k7z13dg309vmw8xbdgkiyid4";
};
postPatch = ''