Add script for updating which dotnet sdk rider uses
This commit is contained in:
38
.envrc
38
.envrc
@@ -1,4 +1,8 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
export NPINS_DIRECTORY="nix"
|
||||||
|
export APP_ENV=$USER
|
||||||
|
|
||||||
# the shebang is ignored, but nice for editors
|
# the shebang is ignored, but nice for editors
|
||||||
watch_file nix/sources.json
|
watch_file nix/sources.json
|
||||||
|
|
||||||
@@ -9,36 +13,4 @@ dotenv_if_exists
|
|||||||
use nix
|
use nix
|
||||||
|
|
||||||
# HACK: Workaround for direnv bug
|
# HACK: Workaround for direnv bug
|
||||||
unset TMP TMPDIR TEMP TEMPDIR
|
unset TMP TMPDIR TEMP TEMPDIR
|
||||||
|
|
||||||
export NPINS_DIRECTORY="nix"
|
|
||||||
export APP_ENV=$USER
|
|
||||||
|
|
||||||
# HACK: Configure Rider to use the correct .NET paths from an ambient .NET
|
|
||||||
use_rider_dotnet() {
|
|
||||||
# Get paths
|
|
||||||
DOTNET_PATH=$(readlink "$(which dotnet)")
|
|
||||||
SETTINGS_FILE=$(find . -maxdepth 1 -type f -name '*.sln.DotSettings.user')
|
|
||||||
MSBUILD=$(realpath "$(find "$(dirname "$DOTNET_PATH")/../share/dotnet/sdk" -maxdepth 2 -type f -name MSBuild.dll)")
|
|
||||||
|
|
||||||
# Update Rider settings if they exist
|
|
||||||
if [ -f "$SETTINGS_FILE" ] ; then
|
|
||||||
xmlstarlet ed --inplace \
|
|
||||||
-N wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation" \
|
|
||||||
-N x="http://schemas.microsoft.com/winfx/2006/xaml" \
|
|
||||||
-N s="clr-namespace:System;assembly=mscorlib" \
|
|
||||||
-N ss="urn:shemas-jetbrains-com:settings-storage-xaml" \
|
|
||||||
--update "//s:String[@x:Key='/Default/Environment/Hierarchy/Build/BuildTool/DotNetCliExePath/@EntryValue']" \
|
|
||||||
--value "$(realpath "$(dirname "$DOTNET_PATH")/../share/dotnet/dotnet")" \
|
|
||||||
"$SETTINGS_FILE"
|
|
||||||
|
|
||||||
xmlstarlet ed --inplace \
|
|
||||||
-N wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation" \
|
|
||||||
-N x="http://schemas.microsoft.com/winfx/2006/xaml" \
|
|
||||||
-N s="clr-namespace:System;assembly=mscorlib" \
|
|
||||||
-N ss="urn:shemas-jetbrains-com:settings-storage-xaml" \
|
|
||||||
--update "//s:String[@x:Key='/Default/Environment/Hierarchy/Build/BuildTool/CustomBuildToolPath/@EntryValue']" \
|
|
||||||
--value "$MSBUILD" \
|
|
||||||
"$SETTINGS_FILE"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
101
scripts/update-rider.sh
Executable file
101
scripts/update-rider.sh
Executable file
@@ -0,0 +1,101 @@
|
|||||||
|
#!/usr/bin/env nix-shell
|
||||||
|
#! nix-shell -i bash --pure
|
||||||
|
#! nix-shell -p bash which xmlstarlet
|
||||||
|
|
||||||
|
if [[ ! $# -eq 1 ]]; then
|
||||||
|
echo "Usage: $0 <dotnet-path>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
dotnet_path=$1
|
||||||
|
|
||||||
|
function stderr() {
|
||||||
|
echo "$@" 1>&2;
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_settings_file() {
|
||||||
|
cat << EOF
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<wpf:ResourceDictionary
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:s="clr-namespace:System;assembly=mscorlib"
|
||||||
|
xmlns:ss="urn:schemas-jetbrains-com:settings-storage-xaml"
|
||||||
|
xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xml:space="preserve"
|
||||||
|
>
|
||||||
|
<s:String x:Key="/Default/Environment/Hierarchy/Build/BuildTool/DotNetCliExePath/@EntryValue">${1}</s:String>
|
||||||
|
<s:String x:Key="/Default/Environment/Hierarchy/Build/BuildTool/CustomBuildToolPath/@EntryValue">${2}</s:String>
|
||||||
|
</wpf:ResourceDictionary>
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# HACK: Configure Rider to use the correct .NET paths from an ambient .NET
|
||||||
|
function use_rider_dotnet() {
|
||||||
|
local solution_file=$(find . -maxdepth 1 -type f -name '*.slnx' | cut -d'.' -f2 | cut -d'/' -f2)
|
||||||
|
local settings_file=$(find . -maxdepth 1 -type f -name '*.sln.DotSettings.user')
|
||||||
|
# Get paths
|
||||||
|
local cli_path=$(realpath "$dotnet_path")
|
||||||
|
local dir=$(dirname $cli_path)
|
||||||
|
local msbuild_path=$(find "$dir" -maxdepth 3 -type f -name MSBuild.dll)
|
||||||
|
|
||||||
|
# stderr "dotnet path is $dir"
|
||||||
|
# stderr "Found msbuild: $msbuild_path"
|
||||||
|
|
||||||
|
if [ -f "$settings_file" ] ; then
|
||||||
|
# stderr "Updating rider settings file: $settings_file"
|
||||||
|
# stderr "Setting DotNetCliExePath to $cli_path"
|
||||||
|
|
||||||
|
# NOTE: check if dotnet binary in share folder settings exists
|
||||||
|
xml sel -t -v "wpf:ResourceDictionary/s:String[@x:Key='/Default/Environment/Hierarchy/Build/BuildTool/DotNetCliExePath/@EntryValue']" "$settings_file"
|
||||||
|
if [[ $? -eq 0 ]]; then
|
||||||
|
xml ed --inplace \
|
||||||
|
-N wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation" \
|
||||||
|
-N x="http://schemas.microsoft.com/winfx/2006/xaml" \
|
||||||
|
-N s="clr-namespace:System;assembly=mscorlib" \
|
||||||
|
-N ss="urn:schemas-jetbrains-com:settings-storage-xaml" \
|
||||||
|
--update "//s:String[@x:Key='/Default/Environment/Hierarchy/Build/BuildTool/DotNetCliExePath/@EntryValue']" \
|
||||||
|
--value "$cli_path" \
|
||||||
|
"$settings_file"
|
||||||
|
else
|
||||||
|
xml ed --inplace \
|
||||||
|
-N wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation" \
|
||||||
|
-N x="http://schemas.microsoft.com/winfx/2006/xaml" \
|
||||||
|
-N s="clr-namespace:System;assembly=mscorlib" \
|
||||||
|
-N ss="urn:schemas-jetbrains-com:settings-storage-xaml" \
|
||||||
|
-s /wpf:ResourceDictionary -t elem -n s:String -v "$cli_path" \
|
||||||
|
--var new_node '$prev' \
|
||||||
|
-i '$new_node' -t attr -n "x:Key" -v "/Default/Environment/Hierarchy/Build/BuildTool/DotNetCliExePath/@EntryValue" \
|
||||||
|
"$settings_file"
|
||||||
|
fi
|
||||||
|
|
||||||
|
xml sel -t -v "wpf:ResourceDictionary/s:String[@x:Key='/Default/Environment/Hierarchy/Build/BuildTool/CustomBuildToolPath/@EntryValue']" "$settings_file"
|
||||||
|
if [[ $? -eq 0 ]]; then
|
||||||
|
xmlstarlet ed --inplace \
|
||||||
|
-N wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation" \
|
||||||
|
-N x="http://schemas.microsoft.com/winfx/2006/xaml" \
|
||||||
|
-N s="clr-namespace:System;assembly=mscorlib" \
|
||||||
|
-N ss="urn:schemas-jetbrains-com:settings-storage-xaml" \
|
||||||
|
--update "//s:String[@x:Key='/Default/Environment/Hierarchy/Build/BuildTool/CustomBuildToolPath/@EntryValue']" \
|
||||||
|
--value "$msbuild_path" \
|
||||||
|
"$settings_file"
|
||||||
|
else
|
||||||
|
xml ed --inplace \
|
||||||
|
-N wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation" \
|
||||||
|
-N x="http://schemas.microsoft.com/winfx/2006/xaml" \
|
||||||
|
-N s="clr-namespace:System;assembly=mscorlib" \
|
||||||
|
-N ss="urn:schemas-jetbrains-com:settings-storage-xaml" \
|
||||||
|
-s /wpf:ResourceDictionary -t elem -n s:String -v "$cli_path" \
|
||||||
|
--var new_node '$prev' \
|
||||||
|
-i '$new_node' -t attr -n "x:Key" -v "/Default/Environment/Hierarchy/Build/BuildTool/CustomBuildToolPath/@EntryValue" \
|
||||||
|
"$settings_file"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
create_settings_file $cli_path $msbuild_path > "$solution_file.sln.DotSettings.user"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
use_rider_dotnet
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
||||||
@@ -47,6 +47,10 @@ pkgs.mkShellNoCC {
|
|||||||
DOTNET_ROOT = "${dotnet-sdk}/share/dotnet";
|
DOTNET_ROOT = "${dotnet-sdk}/share/dotnet";
|
||||||
LOG_LEVEL = "verbose";
|
LOG_LEVEL = "verbose";
|
||||||
|
|
||||||
|
shellHook = ''
|
||||||
|
scripts/update-rider.sh ${dotnet-sdk}/bin/dotnet
|
||||||
|
'';
|
||||||
|
|
||||||
# Alternative shells
|
# Alternative shells
|
||||||
passthru = pkgs.lib.mapAttrs (name: value: pkgs.mkShellNoCC (value // { inherit name; })) {
|
passthru = pkgs.lib.mapAttrs (name: value: pkgs.mkShellNoCC (value // { inherit name; })) {
|
||||||
pre-commit.shellHook = pre-commit.shellHook;
|
pre-commit.shellHook = pre-commit.shellHook;
|
||||||
|
|||||||
Reference in New Issue
Block a user