Jump to content

Godot-Mono

From 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 as such:

programs.vscode = {
  enable = true;
  # `pkgs.vscodium` is unsupported by "C# Dev Kit" VSCode extension which demands Microsoft license compliance.
  package = pkgs.vscode;
  profiles.default = {
    "csharp.toolsDotnetPath" = "${pkgs.dotnet-sdk_9}/bin/dotnet";
    "dotnetAcquisitionExtension.sharedExistingDotnetPath" = "${pkgs.dotnet-sdk_9}/bin/dotnet";
    "dotnetAcquisitionExtension.existingDotnetPath" = [
      {
        "extensionId" = "ms-dotnettools.csharp";
        "path" = "${pkgs.dotnet-sdk_9}/bin/dotnet";
      }
      {
        "extensionId" = "ms-dotnettools.csdevkit";
        "path" = "${pkgs.dotnet-sdk_9}/bin/dotnet";
      }
      {
        "extensionId" = "woberg.godot-dotnet-tools";
        "path" = "${pkgs.dotnet-sdk_8}/bin/dotnet"; # Godot-Mono uses DotNet8 version.
      }
    ];
    "godotTools.lsp.serverPort" = 6005; # port should match your Godot configuration
    "omnisharp" = { # OminiSharp is a custom LSP for C#
      "path" = "${pkgs.omnisharp-roslyn}/bin/OmniSharp";
      "sdkPath" = "${pkgs.dotnet-sdk_9}";
      "dotnetPath" = "${pkgs.dotnet-sdk_9}/bin/dotnet";
    };
  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
  ];
};

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.)

Configure Godot's Editor → Editor Settings menu:

  • Set Dotnet -> Editor -> External Editor to Visual Studio Code.
Configure VSCode as External Editor in Godot 4

Click Editor [top menu] -> Editor Settings [menu item] -> General [Tab] -> Text Editor [Category] -> External [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}
  • Use External Editor -> On