From 01b89f0473c94d5c44e4931b9beea6f6524a90b1 Mon Sep 17 00:00:00 2001 From: Tobias Berger Date: Wed, 16 Oct 2024 14:11:05 +0200 Subject: [PATCH] update template --- .config/dotnet-tools.json | 6 +- .envrc | 4 +- .gitignore | 3 +- .vscode/about.xml.xslt | 9 +-- .vscode/build.sh | 12 ++-- .vscode/fmt.sh | 7 +- .vscode/launch.sh | 8 ++- .vscode/mod.csproj | 58 ++++++++++------- .vscode/roslynator.sh | 4 +- .vscode/settings.json | 38 +++++------ .vscode/setup.sh | 11 ++-- 1.4/Assemblies/Template.dll | Bin 7680 -> 0 bytes 1.4/Defs/LetterDef.xml | 12 ---- 1.4/Languages/English/Data.xml | 4 -- 1.5/Assemblies/Template.dll | Bin 0 -> 9216 bytes 1.5/Defs/LetterDef.xml | 12 ++++ 1.5/Languages/English/Data.xml | 4 ++ {1.4 => 1.5}/Patches/Patches.xml | 2 +- About/About.xml | 24 ++++--- Source/Extensions/TranslateExtension.cs | 21 ++++++ Source/Mod.cs | 81 ++++++++++++------------ Source/Settings/SettingsWindow.cs | 2 +- Source/Settings/TemplateSettings.cs | 50 ++++++++++++--- Source/TemplateDefOf.cs | 2 +- Source/TemplateMapComponent.cs | 5 +- flake.lock | 62 ++++++------------ flake.nix | 64 +++++++++++++++---- package-lock.json | 64 +++++++++++++++++++ package.json | 5 ++ 29 files changed, 367 insertions(+), 207 deletions(-) delete mode 100644 1.4/Assemblies/Template.dll delete mode 100644 1.4/Defs/LetterDef.xml delete mode 100644 1.4/Languages/English/Data.xml create mode 100644 1.5/Assemblies/Template.dll create mode 100644 1.5/Defs/LetterDef.xml create mode 100644 1.5/Languages/English/Data.xml rename {1.4 => 1.5}/Patches/Patches.xml (80%) mode change 100644 => 100755 About/About.xml create mode 100644 Source/Extensions/TranslateExtension.cs create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index e666e8b..a161070 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -4,9 +4,7 @@ "tools": { "roslynator.dotnet.cli": { "version": "0.8.4", - "commands": [ - "roslynator" - ] + "commands": ["roslynator"] } } -} \ No newline at end of file +} diff --git a/.envrc b/.envrc index 8392d15..2d1d9c0 100644 --- a/.envrc +++ b/.envrc @@ -1 +1,3 @@ -use flake \ No newline at end of file +use flake + +npm i diff --git a/.gitignore b/.gitignore index 13b192f..2d63743 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /.vscode/obj /.direnv/ -/log/rimworld.log \ No newline at end of file +/log/rimworld.log +/node_modules/ diff --git a/.vscode/about.xml.xslt b/.vscode/about.xml.xslt index fda5365..c2cd92f 100644 --- a/.vscode/about.xml.xslt +++ b/.vscode/about.xml.xslt @@ -1,8 +1,5 @@ - - + + @@ -21,4 +18,4 @@ - \ No newline at end of file + diff --git a/.vscode/build.sh b/.vscode/build.sh index 7c13278..4a6c2e9 100755 --- a/.vscode/build.sh +++ b/.vscode/build.sh @@ -1,4 +1,5 @@ set -e +set -x script_dir=$(dirname $(readlink -f $0)) mod_dir=$(dirname $script_dir) @@ -7,11 +8,12 @@ pushd $script_dir configuration=${1:-Debug} # build dll -rm -f ../1.4/Assemblies/* -dotnet build mod.csproj -c ${configuration} +echo "Building for RimWorld 1.5" +rm -f $mod_dir/1.5/Assemblies/BetterAutocastVPE.dll +dotnet build $script_dir/mod.csproj -c ${configuration} -p:GAME_VERSION=v1.5 # generate About.xml -rm -f ../About/About.xml -xsltproc -o ../About/About.xml ./about.xml.xslt ./mod.csproj +rm -f $mod_dir/About/About.xml +xsltproc -o $mod_dir/About/About.xml $script_dir/about.xml.xslt $script_dir/mod.csproj -popd \ No newline at end of file +popd diff --git a/.vscode/fmt.sh b/.vscode/fmt.sh index c6ff51c..35763b9 100755 --- a/.vscode/fmt.sh +++ b/.vscode/fmt.sh @@ -1,9 +1,12 @@ set -e +set -x script_dir=$(dirname $(readlink -f $0)) mod_dir=$(dirname $script_dir) pushd $mod_dir -nix fmt +treefmt +dotnet tool restore +dotnet roslynator format $script_dir/mod.csproj -popd \ No newline at end of file +popd diff --git a/.vscode/launch.sh b/.vscode/launch.sh index 5e5c6d9..b046057 100755 --- a/.vscode/launch.sh +++ b/.vscode/launch.sh @@ -1,9 +1,11 @@ set -e +set -x script_dir=$(dirname $(readlink -f $0)) mod_dir=$(dirname $script_dir) -pushd $script_dir +game_dir=$(realpath ~/.local/share/Steam/steamapps/common/RimWorld/) +pushd $mod_dir -SDL_VIDEODRIVER=X11 LC_ALL=C steam-run ~/.local/share/Steam/steamapps/common/RimWorld/RimWorldLinux -logfile $mod_dir/log/rimworld.log -popupwindow $@ +SDL_VIDEODRIVER=X11 LC_ALL=C steam-run $game_dir/RimWorldLinux -logfile $mod_dir/log/rimworld.log -popupwindow $@ -popd \ No newline at end of file +popd diff --git a/.vscode/mod.csproj b/.vscode/mod.csproj index 8aca5ea..1080444 100644 --- a/.vscode/mod.csproj +++ b/.vscode/mod.csproj @@ -1,4 +1,12 @@ + + v1_5 + ../1.5/Assemblies + + + v1_5 + ../1.5/Assemblies + Library net480 @@ -6,25 +14,25 @@ Template Template - ../1.4/Assemblies latest - 0.1.0.0 + 0.0.0.0 none false false enable + True - dev.tobot.mod-template - Mod Template + dev.tobot.rimworld.template + Toby's Mod Template
  • Toby
  • - A mod template.\nReady to build on NixOS. + Template mod for nix and VS Code -
  • 1.4
  • +
  • 1.5
  • @@ -32,17 +40,21 @@ https://git.tobot.dev/toby/rimworld-mod-template - + - + + +
  • brrainz.harmony
  • +
    +
    @@ -51,22 +63,20 @@
    + + + + + + + + + + - - - - - - + + +
    diff --git a/.vscode/roslynator.sh b/.vscode/roslynator.sh index bcf9d04..933c756 100755 --- a/.vscode/roslynator.sh +++ b/.vscode/roslynator.sh @@ -1,9 +1,11 @@ set -e +set -x script_dir=$(dirname $(readlink -f $0)) mod_dir=$(dirname $script_dir) pushd $mod_dir +dotnet tool restore dotnet roslynator analyze $script_dir/mod.csproj -popd \ No newline at end of file +popd diff --git a/.vscode/settings.json b/.vscode/settings.json index 4a9a2b2..f2c6fac 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,29 +3,13 @@ "files.exclude": { ".direnv": true, ".vscode/obj": true, - "*/Assemblies/": true + "*/Assemblies/": true, + "1.4": true }, "files.readonlyInclude": { "log/rimworld.log": true, "About/About.xml": true }, - "omnisharp.organizeImportsOnFormat": true, - "dotnet.inlayHints.enableInlayHintsForParameters": true, - "dotnet.inlayHints.enableInlayHintsForLiteralParameters": true, - "dotnet.inlayHints.enableInlayHintsForIndexerParameters": true, - "dotnet.inlayHints.enableInlayHintsForObjectCreationParameters": true, - "dotnet.inlayHints.enableInlayHintsForOtherParameters": true, - "dotnet.inlayHints.suppressInlayHintsForParametersThatDifferOnlyBySuffix": true, - "dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": true, - "dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": true, - "csharp.inlayHints.enableInlayHintsForTypes": true, - "csharp.inlayHints.enableInlayHintsForImplicitVariableTypes": true, - "csharp.inlayHints.enableInlayHintsForLambdaParameterTypes": true, - "csharp.inlayHints.enableInlayHintsForImplicitObjectCreation": true, - "csharp.suppressDotnetInstallWarning": true, - "csharp.suppressDotnetRestoreNotification": true, - "dotnet.server.useOmnisharp": true, - "omnisharp.enableLspDriver": false, "[xml]": { "editor.quickSuggestions": { "other": "on", @@ -36,8 +20,18 @@ "[jsonc]": { "editor.quickSuggestions": { "strings": true - }, - "editor.suggest.insertMode": "replace", - "editor.defaultFormatter": "esbenp.prettier-vscode" - } + } + }, + "csharp.inlayHints.enableInlayHintsForImplicitObjectCreation": true, + "csharp.inlayHints.enableInlayHintsForImplicitVariableTypes": true, + "csharp.inlayHints.enableInlayHintsForLambdaParameterTypes": true, + "csharp.inlayHints.enableInlayHintsForTypes": true, + "dotnet.inlayHints.enableInlayHintsForIndexerParameters": true, + "dotnet.inlayHints.enableInlayHintsForLiteralParameters": true, + "dotnet.inlayHints.enableInlayHintsForObjectCreationParameters": true, + "dotnet.inlayHints.enableInlayHintsForOtherParameters": true, + "dotnet.inlayHints.enableInlayHintsForParameters": true, + "dotnet.inlayHints.suppressInlayHintsForParametersThatDifferOnlyBySuffix": true, + "dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": true, + "dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": true } diff --git a/.vscode/setup.sh b/.vscode/setup.sh index 7912a92..e73ba9c 100755 --- a/.vscode/setup.sh +++ b/.vscode/setup.sh @@ -6,16 +6,13 @@ mod_dir=$(dirname $script_dir) pushd $script_dir mod_name="${mod_dir##*/}" -target_dir=$(readlink -f ~/.local/share/Steam/steamapps/common/RimWorld/Mods/)/$mod_name - -dotnet tool restore +target_dir=${1:-$(realpath ~/.local/share/Steam/steamapps/common/RimWorld/Mods/)/$mod_name} if [ "$target_dir" = "$mod_dir" ]; then - echo "Target directory is the same as the mod directory. Cloned in RimWorld/Mods. Skipping setup" + echo "Target directory is the same as the mod directory. Cloned in RimWorld/Mods. Skipping setup" else - mkdir -p $target_dir - rsync -av --exclude '$mod_dir/*' --delete $mod_dir/1.4 $mod_dir/About $mod_dir/README $mod_dir/LICENSE $target_dir + mkdir -p $target_dir + rsync -av --exclude '$mod_dir/*' --delete $mod_dir/1.4 $mod_dir/1.5 $mod_dir/About $mod_dir/README $mod_dir/LICENSE $mod_dir/Changelog.md $target_dir fi popd - \ No newline at end of file diff --git a/1.4/Assemblies/Template.dll b/1.4/Assemblies/Template.dll deleted file mode 100644 index 318d5189b4330299bea37ec577eff4699d4d158f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 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 - - - success_letter - (65, 200, 65) - (85, 255, 85) - 6 - false - LetterArrive_Good - If you can see this letter, then mod template is set up correctly. - - \ No newline at end of file diff --git a/1.4/Languages/English/Data.xml b/1.4/Languages/English/Data.xml deleted file mode 100644 index dc58f25..0000000 --- a/1.4/Languages/English/Data.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - Template Mod - \ No newline at end of file diff --git a/1.5/Assemblies/Template.dll b/1.5/Assemblies/Template.dll new file mode 100644 index 0000000000000000000000000000000000000000..965c69652b2dcd9b0c9911062044866800b2d35a GIT binary patch literal 9216 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 + + + success_letter + (65, 200, 65) + (85, 255, 85) + 6 + false + LetterArrive_Good + If you can see this letter, then mod template is set up correctly. + + diff --git a/1.5/Languages/English/Data.xml b/1.5/Languages/English/Data.xml new file mode 100644 index 0000000..3c71d0c --- /dev/null +++ b/1.5/Languages/English/Data.xml @@ -0,0 +1,4 @@ + + + Template Mod + diff --git a/1.4/Patches/Patches.xml b/1.5/Patches/Patches.xml similarity index 80% rename from 1.4/Patches/Patches.xml rename to 1.5/Patches/Patches.xml index b7a1ae5..bc3792a 100644 --- a/1.4/Patches/Patches.xml +++ b/1.5/Patches/Patches.xml @@ -1,2 +1,2 @@ - \ No newline at end of file + diff --git a/About/About.xml b/About/About.xml old mode 100644 new mode 100755 index 85d892c..d060cf4 --- a/About/About.xml +++ b/About/About.xml @@ -1,33 +1,39 @@ - dev.tobot.mod-template - Mod Template + dev.tobot.rimworld.template + Toby's Mod Template
  • Toby
  • - A mod template.\nReady to build on NixOS. + Template mod for nix and VS Code -
  • 1.4
  • +
  • 1.5
  • - 0.1.0.0 + 0.0.0.0 https://git.tobot.dev/toby/rimworld-mod-template - + - + + +
  • brrainz.harmony
  • +
    +
    - + + +
    diff --git a/Source/Extensions/TranslateExtension.cs b/Source/Extensions/TranslateExtension.cs new file mode 100644 index 0000000..09d6680 --- /dev/null +++ b/Source/Extensions/TranslateExtension.cs @@ -0,0 +1,21 @@ +global using static Template.Extensions.TranslateExtension; + +namespace Template.Extensions; + +static class TranslateExtension +{ + public static Verse.TaggedString TranslateSafe( + this string self, + params Verse.NamedArgument[] args + ) + { + if (!Verse.Translator.CanTranslate(self)) + { + TemplateMod.DebugError( + $"Untranslated key: {self}", + Verse.GenString.GetHashCodeSafe(self) + ); + } + return Verse.TranslatorFormattedStringExtensions.Translate(self, args); + } +} diff --git a/Source/Mod.cs b/Source/Mod.cs index fcf9208..5fc13b5 100644 --- a/Source/Mod.cs +++ b/Source/Mod.cs @@ -7,28 +7,33 @@ namespace Template; using Settings; using UnityEngine; +#if DEBUG +#warning Compiling in Debug mode +#endif + public class TemplateMod : Mod { - internal static string Translate(string key) - { - const string TranslationKey = nameof(TemplateMod); - return (TranslationKey + "." + key).Translate(); - } - public TemplateMod(ModContentPack content) : base(content) { +#if v1_5 + const string GAME_VERSION = "v1.5"; +#else +#error No version defined + const string GAME_VERSION = "UNDEFINED"; +#endif + #if DEBUG const string build = "Debug"; #else const string build = "Release"; #endif - Log.Message( - $"Running Version {Assembly.GetAssembly(typeof(TemplateMod)).GetName().Version} " + Log( + $"Running Version {Assembly.GetAssembly(typeof(TemplateMod)).GetName().Version} {build} compiled for RimWorld version {GAME_VERSION}" + build ); - Log.Message(content.ModMetaData.packageIdLowerCase); + Log(content.ModMetaData.packageIdLowerCase); Settings = GetSettings(); WriteSettings(); @@ -42,54 +47,52 @@ public class TemplateMod : Mod #nullable enable - public void ResetSettings() - { - Settings = new(); - } - public override void DoSettingsWindowContents(Rect inRect) => SettingsWindow.DoSettingsWindowContents(inRect); public override string SettingsCategory() => SettingsWindow.SettingsCategory(); - public static class Log + const string LogPrefix = "Toby's Template Mod - "; + + public static void DebugError(string message, int? key = null) { - const string LogPrefix = "Toby's Template Mod - "; - - public static void DebugError(string message) - { #if DEBUG - Error(message); + Error(message, key); #endif - } + } - public static void Error(string message) - { + public static void Error(string message, int? key = null) + { + if (key is int keyNotNull) + Verse.Log.ErrorOnce(LogPrefix + message, keyNotNull); + else Verse.Log.Error(LogPrefix + message); - } + } - public static void DebugWarn(string message) - { + public static void DebugWarn(string message, int? key = null) + { #if DEBUG - Warn(message); + Warn(message, key); #endif - } + } - public static void Warn(string message) - { + public static void Warn(string message, int? key = null) + { + if (key is int keyNotNull) + Verse.Log.WarningOnce(LogPrefix + message, keyNotNull); + else Verse.Log.Warning(LogPrefix + message); - } + } - public static void DebugLog(string message) - { + public static void DebugLog(string message) + { #if DEBUG - Message(message); + Log(message); #endif - } + } - public static void Message(string message) - { - Verse.Log.Message(LogPrefix + message); - } + public static void Log(string message) + { + Verse.Log.Message(LogPrefix + message); } } diff --git a/Source/Settings/SettingsWindow.cs b/Source/Settings/SettingsWindow.cs index 23a0a35..5e441d5 100644 --- a/Source/Settings/SettingsWindow.cs +++ b/Source/Settings/SettingsWindow.cs @@ -25,6 +25,6 @@ public static class SettingsWindow public static string SettingsCategory() { - return TemplateMod.Translate("SettingsCategory"); + return "TemplateMod.SettingsCategory".TranslateSafe(); } } diff --git a/Source/Settings/TemplateSettings.cs b/Source/Settings/TemplateSettings.cs index edcaad1..29b9e1d 100644 --- a/Source/Settings/TemplateSettings.cs +++ b/Source/Settings/TemplateSettings.cs @@ -1,15 +1,37 @@ +using System; using System.Collections.Generic; +using System.Linq.Expressions; +using System.Reflection; using Verse; namespace Template.Settings; public class TemplateSettings : ModSettings { + private static TemplateSettings DefaultValues() => new(); + #region Scribe Helpers - private static void LookField(ref T value, string label, T defaultValue) - where T : struct + private void LookStruct(Expression> expression) { - Scribe_Values.Look(ref value, label, defaultValue); + if ( + expression.Body + is not MemberExpression + { + Member: MemberInfo { MemberType: MemberTypes.Field, Name: string memberName } + } + ) + { + throw new ArgumentException( + "Invalid expression passed to LookField", + nameof(expression) + ); + } + + FieldInfo fieldInfo = typeof(TemplateSettings).GetField(memberName); + T? value = fieldInfo.GetValue(this).ChangeType(); + T defaultValue = fieldInfo.GetValue(DefaultValues()).ChangeType(); + Scribe_Values.Look(ref value, memberName, defaultValue); + fieldInfo.SetValue(this, value); } private static void LookHashSet( @@ -21,24 +43,34 @@ public class TemplateSettings : ModSettings { if (Scribe.mode == LoadSaveMode.Saving && valueHashSet is null) { - TemplateMod.Log.Warn( - label + " is null before saving. Reinitializing with default values." - ); + TemplateMod.Warn(label + " is null before saving. Reinitializing with default values."); valueHashSet = defaultValues; } Scribe_Collections.Look(ref valueHashSet, label, lookMode: LookMode.Value); if (Scribe.mode == LoadSaveMode.LoadingVars && valueHashSet is null) { - TemplateMod.Log.Warn( - label + " is null after loading. Reinitializing with default values." - ); + TemplateMod.Warn(label + " is null after loading. Reinitializing with default values."); valueHashSet = defaultValues; } } #endregion + public bool TemplateEnabled; + + public TemplateSettings() + { + Reset(); + } + + public void Reset() + { + TemplateEnabled = true; + } + public override void ExposeData() { base.ExposeData(); + + LookStruct(() => TemplateEnabled); } } diff --git a/Source/TemplateDefOf.cs b/Source/TemplateDefOf.cs index 0611801..a4f2cf2 100644 --- a/Source/TemplateDefOf.cs +++ b/Source/TemplateDefOf.cs @@ -6,7 +6,7 @@ using Verse; namespace Template; [DefOf] -public static class StinkyTweaksDefOf +public static class TemplateDefOf { public static LetterDef success_letter; } diff --git a/Source/TemplateMapComponent.cs b/Source/TemplateMapComponent.cs index b8af6c6..18f9051 100644 --- a/Source/TemplateMapComponent.cs +++ b/Source/TemplateMapComponent.cs @@ -12,9 +12,8 @@ public class TemplateMapComponent(Map map) : MapComponent(map) Messages.Message("Success", null, MessageTypeDefOf.PositiveEvent); Find.LetterStack.ReceiveLetter( "Success", - StinkyTweaksDefOf.success_letter.description, - StinkyTweaksDefOf.success_letter, - null + TemplateDefOf.success_letter.description, + TemplateDefOf.success_letter ); } } diff --git a/flake.lock b/flake.lock index 523e62c..448a19e 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1712014858, - "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "lastModified": 1727826117, + "narHash": "sha256-K5ZLCyfO/Zj9mPFldf3iwS6oZStJcU4tSpiXTMYaaL0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "rev": "3d04084d54bedc3d6b8b736c70ef449225c361b1", "type": "github" }, "original": { @@ -20,52 +20,30 @@ }, "nixpkgs": { "locked": { - "lastModified": 1712963716, - "narHash": "sha256-WKm9CvgCldeIVvRz87iOMi8CFVB1apJlkUT4GGvA0iM=", - "owner": "nixos", + "lastModified": 1728538411, + "narHash": "sha256-f0SBJz1eZ2yOuKUr5CA9BHULGXVSn6miBuUWdTyhUhU=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "cfd6b5fc90b15709b780a5a1619695a88505a176", + "rev": "b69de56fac8c2b6f8fd27f2eca01dcda8e0a4221", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", + "owner": "NixOS", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } }, "nixpkgs-lib": { "locked": { - "dir": "lib", - "lastModified": 1711703276, - "narHash": "sha256-iMUFArF0WCatKK6RzfUJknjem0H9m4KgorO/p3Dopkk=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "d8fe5e6c92d0d190646fb9f1056741a229980089", - "type": "github" + "lastModified": 1727825735, + "narHash": "sha256-0xHYkMkeLVQAMa7gvkddbPqpxph+hDzdu1XdGPJR+Os=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/fb192fec7cc7a4c26d51779e9bab07ce6fa5597a.tar.gz" }, "original": { - "dir": "lib", - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1708475490, - "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "0e74ca98a74bc7270d28838369593635a5db3260", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/fb192fec7cc7a4c26d51779e9bab07ce6fa5597a.tar.gz" } }, "root": { @@ -93,14 +71,16 @@ }, "treefmt-nix": { "inputs": { - "nixpkgs": "nixpkgs_2" + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1711963903, - "narHash": "sha256-N3QDhoaX+paWXHbEXZapqd1r95mdshxToGowtjtYkGI=", + "lastModified": 1729077719, + "narHash": "sha256-zayHqZO9gA1U85c4CPvVSnLV8/cBgc2yVrSKWaKeBUs=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "49dc4a92b02b8e68798abd99184f228243b6e3ac", + "rev": "5307ba60125bb024d7e52d71d582eafd511f3fee", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 353fe0b..063d896 100644 --- a/flake.nix +++ b/flake.nix @@ -1,10 +1,13 @@ { inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; flake-parts.url = "github:hercules-ci/flake-parts"; systems.url = "github:nix-systems/default"; # Dev tools - treefmt-nix.url = "github:numtide/treefmt-nix"; + treefmt-nix = { + url = "github:numtide/treefmt-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = @@ -22,16 +25,17 @@ ... }: { - # Rust dev environment devShells.default = pkgs.mkShell { inputsFrom = [ config.treefmt.build.devShell ]; nativeBuildInputs = with pkgs; [ - dotnet-sdk_8 - libxslt + dotnetCorePackages.dotnet_8.sdk + nixfmt-rfc-style + omnisharp-roslyn + libxslt.bin + nodePackages.npm ]; - shellHook = '' - DOTNET_ROOT="${pkgs.dotnet-sdk_8}"; - ''; + + DOTNET_ROOT = "${pkgs.dotnet-sdk_8}"; }; # Add your auto-formatters here. @@ -39,10 +43,48 @@ treefmt.config = { projectRootFile = "flake.nix"; programs = { - nixpkgs-fmt.enable = true; - csharpier.enable = true; - nixfmt-rfc-style.enable = true; + csharpier = { + enable = true; + dotnet-sdk = pkgs.dotnet-sdk_6; + package = pkgs.csharpier; + }; + nixfmt.enable = true; + shfmt.enable = true; + prettier = { + enable = true; + includes = [ + "**/*.xml" + "**/*.xslt" + "**/*.json" + "**/*.csproj" + ".github/workflows/*" + ]; + settings = { + plugins = [ "@prettier/plugin-xml" ]; + bracketSameLine = true; + printWidth = 1000; + overrides = [ + { + files = "*.xml"; + options = { + xmlQuoteAttributes = "double"; + xmlSortAttributesByKey = true; + xmlWhitespaceSensitivity = "preserve"; + }; + } + ]; + }; + }; }; + settings.global.excludes = [ + ".direnv" + "node_modules" + "1.4/**/*" + "*.ase" + "*.dll" + "*.png" + "About/About.xml" + ]; }; }; }; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..cad46de --- /dev/null +++ b/package-lock.json @@ -0,0 +1,64 @@ +{ + "name": "no-nutrient-ingredients", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@prettier/plugin-xml": "^3.4.1" + } + }, + "node_modules/@prettier/plugin-xml": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-3.4.1.tgz", + "integrity": "sha512-Uf/6/+9ez6z/IvZErgobZ2G9n1ybxF5BhCd7eMcKqfoWuOzzNUxBipNo3QAP8kRC1VD18TIo84no7LhqtyDcTg==", + "license": "MIT", + "dependencies": { + "@xml-tools/parser": "^1.0.11" + }, + "peerDependencies": { + "prettier": "^3.0.0" + } + }, + "node_modules/@xml-tools/parser": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@xml-tools/parser/-/parser-1.0.11.tgz", + "integrity": "sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==", + "license": "Apache-2.0", + "dependencies": { + "chevrotain": "7.1.1" + } + }, + "node_modules/chevrotain": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-7.1.1.tgz", + "integrity": "sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==", + "license": "Apache-2.0", + "dependencies": { + "regexp-to-ast": "0.5.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "license": "MIT", + "peer": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/regexp-to-ast": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz", + "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==", + "license": "MIT" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..a47d596 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "@prettier/plugin-xml": "^3.4.1" + } +}