Jump to content

Godot-Mono

From Official NixOS Wiki
☶︎
This article or section needs to be expanded. Further information may be found in the related discussion page. Please consult the pedia article metapage for guidelines on contributing.

Godot-Mono is Godot's game engine supporting C# language for creating both 2D and 3D games.

Installation

Add pkgs.godot-mono (GDScript + C#) to environment.systemPackages.

Export Templates

On Godot upgrade, the new export template version can be automatically provisioned this way:

home.file.".local/share/godot/export_templates/${builtins.replaceStrings [ "-" ] [ "." ] pkgs.godot-mono_4-export-templates.version}".source = pkgs.godot-mono_4-export-templates;

Note: `pkgs.godot-mono_4-export-templates` package is still pending in nixpkgs.

Configuring VSCode Editor for Godot-Mono (C#)

As Godot editor has poor support for C#, VSCode editor is recommended.

You can install and configure VSCode using Home Manager as such:

Minimal/Small Example

programs.vscode = {
	enable = true;
	package = pkgs.vscodium;
	profiles.default = {
		userSettings = {
			"dotnetAcquisitionExtension.sharedExistingDotnetPath" = "${pkgs.dotnet-sdk_9}/bin";
			"godotTools.lsp.serverPort" = 6005; # port should match your Godot configuration
		};
		extensions = with pkgs.vscode-extensions; [
			geequlim.godot-tools # For Godot GDScript support
			ms-dotnettools.csharp
			ms-dotnettools.vscode-dotnet-runtime
		];
	};
};

home.packages = [
	dotnetCorePackages.dotnet_9.sdk # For Godot-Mono VSCode-Extension CSharp
];

# The proposed solution above requires .Net SDK to be broadly available in the host.
# Code is ugly but works. Ideally we should find a better solution to this.
# If you wonder why solution got so complex, test VSCode extensions as immutable,
# using flag "programs.vscode.mutableExtensionsDir = false". (No external downloads.)


More elaborate Example

programs.vscode = {
	enable = true;
	package = pkgs.vscode; # `pkgs.vscodium` is unsupported by "C# Dev Kit" VSCode extension.
	profiles.default = {
		userSettings = {
			"dotnetAcquisitionExtension.existingDotnetPath" = [
				{
					"extensionId" = "ms-dotnettools.csharp";
					"path" = "${pkgs.dotnet-sdk_9}/bin";
				}
				{
					"extensionId" = "ms-dotnettools.csdevkit";
					"path" = "${pkgs.dotnet-sdk_9}/bin";
				}
				{
					"extensionId" = "woberg.godot-dotnet-tools";
					"path" = "${pkgs.dotnet-sdk_8}/bin"; # Godot-Mono uses DotNet8 version.
				}
			];
			"godotTools.lsp.serverPort" = 6005; # port should match your Godot configuration
		};
		extensions = with pkgs.vscode-extensions; [
			geequlim.godot-tools # For Godot GDScript support
			woberg.godot-dotnet-tools # For Godot C# support
			ms-dotnettools.csdevkit
			ms-dotnettools.csharp
			ms-dotnettools.vscode-dotnet-runtime
		] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
			{ name = "godot-files";
				publisher = "alfish";
				version = "0.1.6";
				sha256 = "sha256-FFtl1QXSa4nGKFUJh5f3R7AV7hZg59Qs5vBZHgSUCUw=";
			}
		];
	};
};

home.packages = [
	dotnetCorePackages.dotnet_9.sdk # For Godot-Mono VSCode-Extension CSharp
];

Configure VSCode as External Editor in Godot 4

Click Editor [top menu] -> Editor Settings [menu item] -> General [Tab] -> Search for "dotnet" -> Dotnet [Category] -> Editor [Sub-Category]:

  • Exec Path -> Add the output of which code, on my case would be: /etc/profiles/per-user/REPLACE-USERNAME/bin/code
  • Exec Flags -> {project} --goto {file}:{line}:{col}
  • External Editor -> Visual Studio Code and VSCodium