Initial Pile Of Files

This commit is contained in:
2026-07-12 11:56:23 -05:00
parent 491aa6ec34
commit 914996cb6d
19 changed files with 515 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
# EditorConfig for .NET template
root = true
[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
trim_trailing_whitespace = true
indent_style = space
indent_size = 4
+2
View File
@@ -0,0 +1,2 @@
# Direnv configuration for Nix flakes
use flake
+14
View File
@@ -0,0 +1,14 @@
# .NET build artifacts
bin/
obj/
*.user
*.suo
.vs/
# IDE
.vscode/
.idea/
# Nix
result
.direnv/
+8
View File
@@ -0,0 +1,8 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
+9
View File
@@ -0,0 +1,9 @@
# Contributing
Thank you for considering contributing!
- Please follow the project coding style and directory structure.
- Submit issues or pull requests for bugs, features, or improvements.
- Add tests for new features where possible.
- Ensure your code builds and passes tests before submitting.
- Contributions are licensed under CC BY-SA 4.0.
+12
View File
@@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<None Include="flake.nix" />
<None Include=".envrc" />
</ItemGroup>
</Project>
+17
View File
@@ -0,0 +1,17 @@
Creative Commons Attribution-ShareAlike 4.0 International
<https://creativecommons.org/licenses/by-sa/4.0/>
You are free to:
- Share — copy and redistribute the material in any medium or format
- Adapt — remix, transform, and build upon the material for any purpose, even commercially.
Under the following terms:
- Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made.
- ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
See the full license at the link above.
+17
View File
@@ -0,0 +1,17 @@
# Makefile for .NET template
.PHONY: build run clean
build:
dotnet build
run:
dotnet run
clean:
dotnet clean
# Flatpak build target
.PHONY: flatpak-build
flatpak-build:
flatpak-builder --force-clean build-flatpak flatpak/app.flatpak.json
+9
View File
@@ -0,0 +1,9 @@
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello from .NET skeletal app. Edit Program.cs to get started!");
}
}
+16
View File
@@ -0,0 +1,16 @@
# Coding Agent Instructions
This project is intended for educational purposes. To support this, please adhere to the following guidelines:
## Allowed Actions
- **Environment Maintenance:** Feel free to update Nix flakes, shell configurations, or other environment-related setup.
- **Project Housekeeping:** Maintain a standard project layout, keep `README.md` up-to-date, and clean up temporary or build-related files.
- **Documentation:** Add comments, manage project documentation, and add links to relevant external resources.
## Restricted Actions
- **Source Code Editing:** You are NOT allowed to edit the executable source code (project root) except to improve documentation..
- **Code Generation:** Do not provide example code unless explicitly asked by the user.
## Communication Guidelines
- **Educational Focus:** When asked about code, prioritize explaining the concepts and providing advice over writing code.
- **Documentation Links:** Always include links to official language or library documentation for references.
+29
View File
@@ -0,0 +1,29 @@
{ pkgs }:
let
lib = pkgs.lib;
templateName = builtins.baseNameOf (toString ./.);
in
{
${templateName} = pkgs.stdenvNoCC.mkDerivation {
pname = templateName;
version = "0.1.0";
src = ./.;
dontBuild = true;
installPhase = ''
mkdir -p $out/share/${templateName}
if [ -d src ]; then
cp -r src $out/share/${templateName}/
fi
for f in README.md project.toml flake.nix default.nix shell.nix Makefile .editorconfig .gitignore; do
if [ -f "$f" ]; then
cp "$f" $out/share/${templateName}/
fi
done
'';
meta = with lib; {
description = "Template project: ${templateName}";
license = licenses.unfreeRedistributable;
platforms = platforms.all;
};
};
}
+2
View File
@@ -0,0 +1,2 @@
# Generated by nuget-to-nix (empty template for projects without external NuGet dependencies)
[]
Generated
+27
View File
@@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1783776592,
"narHash": "sha256-UgCQzxeWI75XM8G+hPrPh+MKzEPjG3SpAj7dtqSbksA=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e7a3ca8092b61ff85b6a45bf863ea2b2d6a661b3",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}
+138
View File
@@ -0,0 +1,138 @@
# flake.nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};
outputs = {
self,
nixpkgs,
}: {
templates = {
default = {
description = ".NET dev environment (FHS) with SDK, EF Core, and optional Rider support";
welcomeText = ''
.NET skeletal project created.
- Build: dotnet build
- Run: dotnet run
- Rider: rider . (inside nix develop)
'';
path = ./.;
};
};
devShells = let
supportedSystems = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
in
nixpkgs.lib.genAttrs supportedSystems (
system: let
pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
};
fhs = pkgs.buildFHSEnv {
name = "dotnet-fhs-shell";
targetPkgs = pkgs: [
pkgs.dotnet-sdk
pkgs.dotnet-ef
pkgs.dotnet-aspnetcore
pkgs.csharpier
pkgs.icu
pkgs.openssl
pkgs.krb5
pkgs.zlib
pkgs.git
pkgs.gnumake
];
runScript = "bash";
profile = ''
export DOTNET_ROOT=${pkgs.dotnet-sdk}
export DOTNET_CLI_HOME=$HOME/.dotnet
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
export DOTNET_CLI_TELEMETRY_OPTOUT=1
export PATH=${pkgs.dotnet-sdk}/bin:$PATH
'';
};
in {
default = fhs.env.overrideAttrs (_: {
shellHook = ''
# Initialize git repository if not already present
if [ ! -d .git ]; then
git init
echo " Initialized git repository"
fi
export DOTNET_ROOT=${pkgs.dotnet-sdk}
export DOTNET_CLI_HOME=$HOME/.dotnet
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
export DOTNET_CLI_TELEMETRY_OPTOUT=1
export PATH=${pkgs.dotnet-sdk}/bin:$PATH
echo "FHS shell for .NET development"
echo "DOTNET_ROOT=$DOTNET_ROOT"
'';
});
}
);
packages = let
supportedSystems = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
in
nixpkgs.lib.genAttrs supportedSystems (
system: let
pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
};
in {
default = pkgs.buildDotnetModule {
pname = "sample-dotnet-app";
version = "0.1.0";
src = ./.;
projectFile = "SampleApp.csproj";
nugetDeps = ./deps.nix;
selfContainedBuild = false;
meta.mainProgram = "SampleApp";
};
devHelper = pkgs.writeShellScriptBin "dev-helper" ''
echo ".NET dev environment"
command -v dotnet >/dev/null 2>&1 && dotnet --version || true
echo "This binary is built by Nix (packages.devHelper)."
'';
}
);
apps = let
supportedSystems = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
in
nixpkgs.lib.genAttrs supportedSystems (
system: let
pkgs = nixpkgs.legacyPackages.${system};
in {
default = {
type = "app";
program = pkgs.lib.getExe self.packages.${system}.default;
};
dev-helper = {
type = "app";
program = pkgs.lib.getExe self.packages.${system}.devHelper;
};
}
);
};
}
+22
View File
@@ -0,0 +1,22 @@
{
"app-id": "org.example.dotnetdevshell",
"runtime": "org.freedesktop.Platform",
"runtime-version": "23.08",
"sdk": "org.freedesktop.Sdk",
"command": "dotnetdevshell-app",
"modules": [
{
"name": "dotnetdevshell-app",
"buildsystem": "simple",
"build-commands": [
"dotnet publish -c Release -o out"
],
"sources": [
{
"type": "dir",
"path": ".."
}
]
}
]
}
+155
View File
@@ -0,0 +1,155 @@
#!/usr/bin/env bash
# Helper script to install popular .NET templates from NuGet
set -e
echo "🔧 .NET Template Installer"
echo "=========================="
echo ""
# Function to install a template
install_template() {
local name="$1"
local package="$2"
echo "📦 Installing $name..."
dotnet new install "$package" || echo "⚠️ Failed to install $name"
echo ""
}
# Parse arguments
if [ "$#" -eq 0 ]; then
echo "Usage: $0 [all|web|cloud|testing|mobile|list]"
echo ""
echo "Categories:"
echo " all - Install all popular templates"
echo " web - Web development templates"
echo " cloud - Cloud & AWS templates"
echo " testing - Testing frameworks"
echo " mobile - Mobile development"
echo " list - Show available categories"
echo ""
echo "Individual templates:"
echo " aws - AWS Lambda templates"
echo " blazor - Blazor templates"
echo " nunit - NUnit 3 test templates"
echo " xunit - xUnit test templates"
echo " reqnroll - Reqnroll BDD templates"
echo " avalonia - Avalonia UI (cross-platform)"
echo " boxed - ASP.NET Core Boxed templates"
echo " clean - Clean Architecture templates"
echo " giraffe - Giraffe F# web framework"
echo " safe - SAFE Stack (F#)"
exit 0
fi
case "$1" in
all)
echo "Installing all popular templates..."
install_template "AWS Lambda" "Amazon.Lambda.Templates"
install_template "NUnit 3" "NUnit3.DotNetNew.Template"
install_template "Reqnroll" "Reqnroll.Templates.DotNet"
install_template ".NET Boxed" "Boxed.Templates"
install_template "Avalonia UI" "Avalonia.Templates"
install_template "Clean Architecture (Manga)" "Paulovich.Manga"
;;
web)
echo "Installing web development templates..."
install_template ".NET Boxed" "Boxed.Templates"
install_template "Carter" "CarterTemplate"
install_template "Giraffe (F#)" "giraffe-template"
;;
cloud)
echo "Installing cloud templates..."
install_template "AWS Lambda" "Amazon.Lambda.Templates"
install_template "Azure Functions" "Microsoft.Azure.Functions.Templates"
;;
testing)
echo "Installing testing templates..."
install_template "NUnit 3" "NUnit3.DotNetNew.Template"
install_template "Reqnroll" "Reqnroll.Templates.DotNet"
install_template "NSpec" "dotnet-new-nspec"
install_template "Expecto (F#)" "Expecto.Template"
;;
mobile)
echo "Installing mobile development templates..."
install_template "Avalonia UI" "Avalonia.Templates"
install_template "Fabulous Xamarin.Forms" "Fabulous.XamarinForms.Templates"
;;
aws)
install_template "AWS Lambda" "Amazon.Lambda.Templates"
;;
blazor)
install_template "Blazor" "Microsoft.AspNetCore.Blazor.Templates::3.0.0-*"
;;
nunit)
install_template "NUnit 3" "NUnit3.DotNetNew.Template"
;;
xunit)
install_template "xUnit Test File" "GatewayProgrammingSchool.xUnit.CSharp"
;;
reqnroll)
install_template "Reqnroll" "Reqnroll.Templates.DotNet"
;;
avalonia)
install_template "Avalonia UI" "Avalonia.Templates"
;;
boxed)
install_template ".NET Boxed" "Boxed.Templates"
;;
clean)
install_template "Clean Architecture (Manga)" "Paulovich.Manga"
install_template "Clean Architecture (Caju)" "Paulovich.Caju"
;;
giraffe)
install_template "Giraffe (F#)" "giraffe-template"
;;
safe)
install_template "SAFE Stack (F#)" "SAFE.Template"
;;
list)
echo "Available categories and templates:"
echo ""
echo "Categories:"
echo " all - Install all popular templates"
echo " web - Web development (Boxed, Carter, Giraffe)"
echo " cloud - Cloud platforms (AWS Lambda, Azure Functions)"
echo " testing - Testing frameworks (NUnit, Reqnroll, NSpec)"
echo " mobile - Mobile development (Avalonia, Fabulous)"
echo ""
echo "Individual templates:"
echo " aws - AWS Lambda templates"
echo " blazor - Blazor templates"
echo " nunit - NUnit 3 test templates"
echo " xunit - xUnit test templates"
echo " reqnroll - Reqnroll BDD templates"
echo " avalonia - Avalonia UI (cross-platform)"
echo " boxed - ASP.NET Core Boxed templates"
echo " clean - Clean Architecture templates"
echo " giraffe - Giraffe F# web framework"
echo " safe - SAFE Stack (F#)"
;;
*)
echo "❌ Unknown option: $1"
echo "Run '$0' without arguments to see usage."
exit 1
;;
esac
echo ""
echo "✅ Done! List installed templates with: dotnet new list"
+7
View File
@@ -0,0 +1,7 @@
# Project metadata for .NET template
[project]
name = "dotnet-template"
description = "Nix flake template for .NET projects"
authors = ["Your Name <you@example.com>"]
version = "0.1.0"
license = "MIT"
+13
View File
@@ -0,0 +1,13 @@
# Legacy shell.nix for .NET template
{
pkgs ? import <nixpkgs> { },
}:
pkgs.mkShell {
buildInputs = [
pkgs.dotnet-sdk
pkgs.git
];
shellHook = "" "
echo 'Welcome to the .NET devShell!'
" "";
}
+9
View File
@@ -0,0 +1,9 @@
using Xunit;
public class SampleTest
{
[Fact]
public void TestSample()
{
Assert.Equal(1, 1);
}
}