diff --git a/.direnv/flake-profile b/.direnv/flake-profile
new file mode 120000
index 0000000..0c05709
--- /dev/null
+++ b/.direnv/flake-profile
@@ -0,0 +1 @@
+flake-profile-1-link
\ No newline at end of file
diff --git a/.direnv/flake-profile-1-link b/.direnv/flake-profile-1-link
new file mode 120000
index 0000000..ae87770
--- /dev/null
+++ b/.direnv/flake-profile-1-link
@@ -0,0 +1 @@
+/nix/store/vzln48bkbr09fm9rzgqm8jcqdyyr4lzg-dotnet-fhs-shell-shell-env-env
\ No newline at end of file
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..3fbd696
--- /dev/null
+++ b/.editorconfig
@@ -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
diff --git a/.envrc b/.envrc
new file mode 100644
index 0000000..ea35353
--- /dev/null
+++ b/.envrc
@@ -0,0 +1,2 @@
+# Direnv configuration for Nix flakes
+use flake
\ No newline at end of file
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000..93d696f
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -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
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..a94fcb9
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -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.
diff --git a/DBProject/.idea/DBProject.iml b/DBProject/.idea/DBProject.iml
new file mode 100644
index 0000000..0399c4b
--- /dev/null
+++ b/DBProject/.idea/DBProject.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DBProject/.idea/dataSources.xml b/DBProject/.idea/dataSources.xml
new file mode 100644
index 0000000..4932691
--- /dev/null
+++ b/DBProject/.idea/dataSources.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ sqlite.xerial
+ true
+ org.sqlite.JDBC
+ jdbc:sqlite:$PROJECT_DIR$/app.db
+ $ProjectFileDir$
+
+
+
\ No newline at end of file
diff --git a/DBProject/.idea/inspectionProfiles/Project_Default.xml b/DBProject/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..9213c29
--- /dev/null
+++ b/DBProject/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DBProject/.idea/modules.xml b/DBProject/.idea/modules.xml
new file mode 100644
index 0000000..db899dc
--- /dev/null
+++ b/DBProject/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DBProject/.idea/vcs.xml b/DBProject/.idea/vcs.xml
new file mode 100644
index 0000000..b2bdec2
--- /dev/null
+++ b/DBProject/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..eae17d3
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,17 @@
+Creative Commons Attribution-ShareAlike 4.0 International
+
+
+
+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.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..c4d0342
--- /dev/null
+++ b/Makefile
@@ -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
diff --git a/PolyComm/PolyComm.Client/Dockerfile b/PolyComm.Client/Dockerfile
similarity index 100%
rename from PolyComm/PolyComm.Client/Dockerfile
rename to PolyComm.Client/Dockerfile
diff --git a/PolyComm/PolyComm.Client/Pages/Auth.razor b/PolyComm.Client/Pages/Auth.razor
similarity index 100%
rename from PolyComm/PolyComm.Client/Pages/Auth.razor
rename to PolyComm.Client/Pages/Auth.razor
diff --git a/PolyComm/PolyComm.Client/Pages/Counter.razor b/PolyComm.Client/Pages/Counter.razor
similarity index 100%
rename from PolyComm/PolyComm.Client/Pages/Counter.razor
rename to PolyComm.Client/Pages/Counter.razor
diff --git a/PolyComm/PolyComm.Client/PersistentAuthenticationStateProvider.cs b/PolyComm.Client/PersistentAuthenticationStateProvider.cs
similarity index 100%
rename from PolyComm/PolyComm.Client/PersistentAuthenticationStateProvider.cs
rename to PolyComm.Client/PersistentAuthenticationStateProvider.cs
diff --git a/PolyComm/PolyComm.Client/PolyComm.Client.csproj b/PolyComm.Client/PolyComm.Client.csproj
similarity index 100%
rename from PolyComm/PolyComm.Client/PolyComm.Client.csproj
rename to PolyComm.Client/PolyComm.Client.csproj
diff --git a/PolyComm/PolyComm.Client/Program.cs b/PolyComm.Client/Program.cs
similarity index 100%
rename from PolyComm/PolyComm.Client/Program.cs
rename to PolyComm.Client/Program.cs
diff --git a/PolyComm/PolyComm.Client/RedirectToLogin.razor b/PolyComm.Client/RedirectToLogin.razor
similarity index 100%
rename from PolyComm/PolyComm.Client/RedirectToLogin.razor
rename to PolyComm.Client/RedirectToLogin.razor
diff --git a/PolyComm/PolyComm.Client/UserInfo.cs b/PolyComm.Client/UserInfo.cs
similarity index 100%
rename from PolyComm/PolyComm.Client/UserInfo.cs
rename to PolyComm.Client/UserInfo.cs
diff --git a/PolyComm/PolyComm.Client/_Imports.razor b/PolyComm.Client/_Imports.razor
similarity index 100%
rename from PolyComm/PolyComm.Client/_Imports.razor
rename to PolyComm.Client/_Imports.razor
diff --git a/PolyComm/PolyComm.Client/wwwroot/appsettings.Development.json b/PolyComm.Client/wwwroot/appsettings.Development.json
similarity index 100%
rename from PolyComm/PolyComm.Client/wwwroot/appsettings.Development.json
rename to PolyComm.Client/wwwroot/appsettings.Development.json
diff --git a/PolyComm/PolyComm.Client/wwwroot/appsettings.json b/PolyComm.Client/wwwroot/appsettings.json
similarity index 100%
rename from PolyComm/PolyComm.Client/wwwroot/appsettings.json
rename to PolyComm.Client/wwwroot/appsettings.json
diff --git a/PolyComm.slnx b/PolyComm.slnx
index e706936..6f0c40d 100644
--- a/PolyComm.slnx
+++ b/PolyComm.slnx
@@ -2,6 +2,8 @@
-
-
+
+
+
+
diff --git a/PolyComm/PolyComm/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs b/PolyComm/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs
rename to PolyComm/Components/Account/IdentityComponentsEndpointRouteBuilderExtensions.cs
diff --git a/PolyComm/PolyComm/Components/Account/IdentityNoOpEmailSender.cs b/PolyComm/Components/Account/IdentityNoOpEmailSender.cs
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/IdentityNoOpEmailSender.cs
rename to PolyComm/Components/Account/IdentityNoOpEmailSender.cs
diff --git a/PolyComm/PolyComm/Components/Account/IdentityRedirectManager.cs b/PolyComm/Components/Account/IdentityRedirectManager.cs
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/IdentityRedirectManager.cs
rename to PolyComm/Components/Account/IdentityRedirectManager.cs
diff --git a/PolyComm/PolyComm/Components/Account/IdentityUserAccessor.cs b/PolyComm/Components/Account/IdentityUserAccessor.cs
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/IdentityUserAccessor.cs
rename to PolyComm/Components/Account/IdentityUserAccessor.cs
diff --git a/PolyComm/PolyComm/Components/Account/Pages/AccessDenied.razor b/PolyComm/Components/Account/Pages/AccessDenied.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/AccessDenied.razor
rename to PolyComm/Components/Account/Pages/AccessDenied.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/ConfirmEmail.razor b/PolyComm/Components/Account/Pages/ConfirmEmail.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/ConfirmEmail.razor
rename to PolyComm/Components/Account/Pages/ConfirmEmail.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/ConfirmEmailChange.razor b/PolyComm/Components/Account/Pages/ConfirmEmailChange.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/ConfirmEmailChange.razor
rename to PolyComm/Components/Account/Pages/ConfirmEmailChange.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/ExternalLogin.razor b/PolyComm/Components/Account/Pages/ExternalLogin.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/ExternalLogin.razor
rename to PolyComm/Components/Account/Pages/ExternalLogin.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/ForgotPassword.razor b/PolyComm/Components/Account/Pages/ForgotPassword.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/ForgotPassword.razor
rename to PolyComm/Components/Account/Pages/ForgotPassword.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/ForgotPasswordConfirmation.razor b/PolyComm/Components/Account/Pages/ForgotPasswordConfirmation.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/ForgotPasswordConfirmation.razor
rename to PolyComm/Components/Account/Pages/ForgotPasswordConfirmation.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/InvalidPasswordReset.razor b/PolyComm/Components/Account/Pages/InvalidPasswordReset.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/InvalidPasswordReset.razor
rename to PolyComm/Components/Account/Pages/InvalidPasswordReset.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/InvalidUser.razor b/PolyComm/Components/Account/Pages/InvalidUser.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/InvalidUser.razor
rename to PolyComm/Components/Account/Pages/InvalidUser.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Lockout.razor b/PolyComm/Components/Account/Pages/Lockout.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Lockout.razor
rename to PolyComm/Components/Account/Pages/Lockout.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Login.razor b/PolyComm/Components/Account/Pages/Login.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Login.razor
rename to PolyComm/Components/Account/Pages/Login.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/LoginWith2fa.razor b/PolyComm/Components/Account/Pages/LoginWith2fa.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/LoginWith2fa.razor
rename to PolyComm/Components/Account/Pages/LoginWith2fa.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/LoginWithRecoveryCode.razor b/PolyComm/Components/Account/Pages/LoginWithRecoveryCode.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/LoginWithRecoveryCode.razor
rename to PolyComm/Components/Account/Pages/LoginWithRecoveryCode.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Manage/ChangePassword.razor b/PolyComm/Components/Account/Pages/Manage/ChangePassword.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Manage/ChangePassword.razor
rename to PolyComm/Components/Account/Pages/Manage/ChangePassword.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Manage/DeletePersonalData.razor b/PolyComm/Components/Account/Pages/Manage/DeletePersonalData.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Manage/DeletePersonalData.razor
rename to PolyComm/Components/Account/Pages/Manage/DeletePersonalData.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Manage/Disable2fa.razor b/PolyComm/Components/Account/Pages/Manage/Disable2fa.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Manage/Disable2fa.razor
rename to PolyComm/Components/Account/Pages/Manage/Disable2fa.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Manage/Email.razor b/PolyComm/Components/Account/Pages/Manage/Email.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Manage/Email.razor
rename to PolyComm/Components/Account/Pages/Manage/Email.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Manage/EnableAuthenticator.razor b/PolyComm/Components/Account/Pages/Manage/EnableAuthenticator.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Manage/EnableAuthenticator.razor
rename to PolyComm/Components/Account/Pages/Manage/EnableAuthenticator.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Manage/ExternalLogins.razor b/PolyComm/Components/Account/Pages/Manage/ExternalLogins.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Manage/ExternalLogins.razor
rename to PolyComm/Components/Account/Pages/Manage/ExternalLogins.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Manage/GenerateRecoveryCodes.razor b/PolyComm/Components/Account/Pages/Manage/GenerateRecoveryCodes.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Manage/GenerateRecoveryCodes.razor
rename to PolyComm/Components/Account/Pages/Manage/GenerateRecoveryCodes.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Manage/Index.razor b/PolyComm/Components/Account/Pages/Manage/Index.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Manage/Index.razor
rename to PolyComm/Components/Account/Pages/Manage/Index.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Manage/PersonalData.razor b/PolyComm/Components/Account/Pages/Manage/PersonalData.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Manage/PersonalData.razor
rename to PolyComm/Components/Account/Pages/Manage/PersonalData.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Manage/ResetAuthenticator.razor b/PolyComm/Components/Account/Pages/Manage/ResetAuthenticator.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Manage/ResetAuthenticator.razor
rename to PolyComm/Components/Account/Pages/Manage/ResetAuthenticator.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Manage/SetPassword.razor b/PolyComm/Components/Account/Pages/Manage/SetPassword.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Manage/SetPassword.razor
rename to PolyComm/Components/Account/Pages/Manage/SetPassword.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Manage/TwoFactorAuthentication.razor b/PolyComm/Components/Account/Pages/Manage/TwoFactorAuthentication.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Manage/TwoFactorAuthentication.razor
rename to PolyComm/Components/Account/Pages/Manage/TwoFactorAuthentication.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Manage/_Imports.razor b/PolyComm/Components/Account/Pages/Manage/_Imports.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Manage/_Imports.razor
rename to PolyComm/Components/Account/Pages/Manage/_Imports.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/Register.razor b/PolyComm/Components/Account/Pages/Register.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/Register.razor
rename to PolyComm/Components/Account/Pages/Register.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/RegisterConfirmation.razor b/PolyComm/Components/Account/Pages/RegisterConfirmation.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/RegisterConfirmation.razor
rename to PolyComm/Components/Account/Pages/RegisterConfirmation.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/ResendEmailConfirmation.razor b/PolyComm/Components/Account/Pages/ResendEmailConfirmation.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/ResendEmailConfirmation.razor
rename to PolyComm/Components/Account/Pages/ResendEmailConfirmation.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/ResetPassword.razor b/PolyComm/Components/Account/Pages/ResetPassword.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/ResetPassword.razor
rename to PolyComm/Components/Account/Pages/ResetPassword.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/ResetPasswordConfirmation.razor b/PolyComm/Components/Account/Pages/ResetPasswordConfirmation.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/ResetPasswordConfirmation.razor
rename to PolyComm/Components/Account/Pages/ResetPasswordConfirmation.razor
diff --git a/PolyComm/PolyComm/Components/Account/Pages/_Imports.razor b/PolyComm/Components/Account/Pages/_Imports.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Pages/_Imports.razor
rename to PolyComm/Components/Account/Pages/_Imports.razor
diff --git a/PolyComm/PolyComm/Components/Account/PersistingRevalidatingAuthenticationStateProvider.cs b/PolyComm/Components/Account/PersistingRevalidatingAuthenticationStateProvider.cs
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/PersistingRevalidatingAuthenticationStateProvider.cs
rename to PolyComm/Components/Account/PersistingRevalidatingAuthenticationStateProvider.cs
diff --git a/PolyComm/PolyComm/Components/Account/Shared/AccountLayout.razor b/PolyComm/Components/Account/Shared/AccountLayout.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Shared/AccountLayout.razor
rename to PolyComm/Components/Account/Shared/AccountLayout.razor
diff --git a/PolyComm/PolyComm/Components/Account/Shared/ExternalLoginPicker.razor b/PolyComm/Components/Account/Shared/ExternalLoginPicker.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Shared/ExternalLoginPicker.razor
rename to PolyComm/Components/Account/Shared/ExternalLoginPicker.razor
diff --git a/PolyComm/PolyComm/Components/Account/Shared/ManageLayout.razor b/PolyComm/Components/Account/Shared/ManageLayout.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Shared/ManageLayout.razor
rename to PolyComm/Components/Account/Shared/ManageLayout.razor
diff --git a/PolyComm/PolyComm/Components/Account/Shared/ManageNavMenu.razor b/PolyComm/Components/Account/Shared/ManageNavMenu.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Shared/ManageNavMenu.razor
rename to PolyComm/Components/Account/Shared/ManageNavMenu.razor
diff --git a/PolyComm/PolyComm/Components/Account/Shared/ShowRecoveryCodes.razor b/PolyComm/Components/Account/Shared/ShowRecoveryCodes.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Shared/ShowRecoveryCodes.razor
rename to PolyComm/Components/Account/Shared/ShowRecoveryCodes.razor
diff --git a/PolyComm/PolyComm/Components/Account/Shared/StatusMessage.razor b/PolyComm/Components/Account/Shared/StatusMessage.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Account/Shared/StatusMessage.razor
rename to PolyComm/Components/Account/Shared/StatusMessage.razor
diff --git a/PolyComm/PolyComm/Components/App.razor b/PolyComm/Components/App.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/App.razor
rename to PolyComm/Components/App.razor
diff --git a/PolyComm/PolyComm/Components/Layout/MainLayout.razor b/PolyComm/Components/Layout/MainLayout.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Layout/MainLayout.razor
rename to PolyComm/Components/Layout/MainLayout.razor
diff --git a/PolyComm/PolyComm/Components/Layout/MainLayout.razor.css b/PolyComm/Components/Layout/MainLayout.razor.css
similarity index 100%
rename from PolyComm/PolyComm/Components/Layout/MainLayout.razor.css
rename to PolyComm/Components/Layout/MainLayout.razor.css
diff --git a/PolyComm/PolyComm/Components/Layout/NavMenu.razor b/PolyComm/Components/Layout/NavMenu.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Layout/NavMenu.razor
rename to PolyComm/Components/Layout/NavMenu.razor
diff --git a/PolyComm/PolyComm/Components/Layout/NavMenu.razor.css b/PolyComm/Components/Layout/NavMenu.razor.css
similarity index 100%
rename from PolyComm/PolyComm/Components/Layout/NavMenu.razor.css
rename to PolyComm/Components/Layout/NavMenu.razor.css
diff --git a/PolyComm/PolyComm/Components/Pages/Error.razor b/PolyComm/Components/Pages/Error.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Pages/Error.razor
rename to PolyComm/Components/Pages/Error.razor
diff --git a/PolyComm/PolyComm/Components/Pages/Home.razor b/PolyComm/Components/Pages/Home.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Pages/Home.razor
rename to PolyComm/Components/Pages/Home.razor
diff --git a/PolyComm/PolyComm/Components/Pages/Weather.razor b/PolyComm/Components/Pages/Weather.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Pages/Weather.razor
rename to PolyComm/Components/Pages/Weather.razor
diff --git a/PolyComm/PolyComm/Components/Routes.razor b/PolyComm/Components/Routes.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/Routes.razor
rename to PolyComm/Components/Routes.razor
diff --git a/PolyComm/PolyComm/Components/_Imports.razor b/PolyComm/Components/_Imports.razor
similarity index 100%
rename from PolyComm/PolyComm/Components/_Imports.razor
rename to PolyComm/Components/_Imports.razor
diff --git a/PolyComm/PolyComm/Data/ApplicationDbContext.cs b/PolyComm/Data/ApplicationDbContext.cs
similarity index 100%
rename from PolyComm/PolyComm/Data/ApplicationDbContext.cs
rename to PolyComm/Data/ApplicationDbContext.cs
diff --git a/PolyComm/PolyComm/Data/ApplicationUser.cs b/PolyComm/Data/ApplicationUser.cs
similarity index 100%
rename from PolyComm/PolyComm/Data/ApplicationUser.cs
rename to PolyComm/Data/ApplicationUser.cs
diff --git a/PolyComm/PolyComm/Data/Migrations/00000000000000_CreateIdentitySchema.Designer.cs b/PolyComm/Data/Migrations/00000000000000_CreateIdentitySchema.Designer.cs
similarity index 100%
rename from PolyComm/PolyComm/Data/Migrations/00000000000000_CreateIdentitySchema.Designer.cs
rename to PolyComm/Data/Migrations/00000000000000_CreateIdentitySchema.Designer.cs
diff --git a/PolyComm/PolyComm/Data/Migrations/00000000000000_CreateIdentitySchema.cs b/PolyComm/Data/Migrations/00000000000000_CreateIdentitySchema.cs
similarity index 100%
rename from PolyComm/PolyComm/Data/Migrations/00000000000000_CreateIdentitySchema.cs
rename to PolyComm/Data/Migrations/00000000000000_CreateIdentitySchema.cs
diff --git a/PolyComm/PolyComm/Data/Migrations/ApplicationDbContextModelSnapshot.cs b/PolyComm/Data/Migrations/ApplicationDbContextModelSnapshot.cs
similarity index 100%
rename from PolyComm/PolyComm/Data/Migrations/ApplicationDbContextModelSnapshot.cs
rename to PolyComm/Data/Migrations/ApplicationDbContextModelSnapshot.cs
diff --git a/PolyComm/PolyComm/Dockerfile b/PolyComm/Dockerfile
similarity index 100%
rename from PolyComm/PolyComm/Dockerfile
rename to PolyComm/Dockerfile
diff --git a/PolyComm/PolyComm/PolyComm.csproj b/PolyComm/PolyComm.csproj
similarity index 100%
rename from PolyComm/PolyComm/PolyComm.csproj
rename to PolyComm/PolyComm.csproj
diff --git a/PolyComm/PolyComm/.gitignore b/PolyComm/PolyComm/.gitignore
deleted file mode 100644
index 499f83e..0000000
--- a/PolyComm/PolyComm/.gitignore
+++ /dev/null
@@ -1,477 +0,0 @@
-### JetBrains template
-# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
-# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
-
-# User-specific stuff
-.idea/**/workspace.xml
-.idea/**/tasks.xml
-.idea/**/usage.statistics.xml
-.idea/**/dictionaries
-.idea/**/shelf
-
-# AWS User-specific
-.idea/**/aws.xml
-
-# Generated files
-.idea/**/contentModel.xml
-
-# Sensitive or high-churn files
-.idea/**/dataSources/
-.idea/**/dataSources.ids
-.idea/**/dataSources.local.xml
-.idea/**/sqlDataSources.xml
-.idea/**/dynamic.xml
-.idea/**/uiDesigner.xml
-.idea/**/dbnavigator.xml
-
-# Gradle
-.idea/**/gradle.xml
-.idea/**/libraries
-
-# Gradle and Maven with auto-import
-# When using Gradle or Maven with auto-import, you should exclude module files,
-# since they will be recreated, and may cause churn. Uncomment if using
-# auto-import.
-# .idea/artifacts
-# .idea/compiler.xml
-# .idea/jarRepositories.xml
-# .idea/modules.xml
-# .idea/*.iml
-# .idea/modules
-# *.iml
-# *.ipr
-
-# CMake
-cmake-build-*/
-
-# Mongo Explorer plugin
-.idea/**/mongoSettings.xml
-
-# File-based project format
-*.iws
-
-# IntelliJ
-out/
-
-# mpeltonen/sbt-idea plugin
-.idea_modules/
-
-# JIRA plugin
-atlassian-ide-plugin.xml
-
-# Cursive Clojure plugin
-.idea/replstate.xml
-
-# SonarLint plugin
-.idea/sonarlint/
-
-# Crashlytics plugin (for Android Studio and IntelliJ)
-com_crashlytics_export_strings.xml
-crashlytics.properties
-crashlytics-build.properties
-fabric.properties
-
-# Editor-based Rest Client
-.idea/httpRequests
-
-# Android studio 3.1+ serialized cache file
-.idea/caches/build_file_checksums.ser
-
-### VisualStudio template
-## Ignore Visual Studio temporary files, build results, and
-## files generated by popular Visual Studio add-ons.
-##
-## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
-
-# User-specific files
-*.rsuser
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# User-specific files (MonoDevelop/Xamarin Studio)
-*.userprefs
-
-# Mono auto generated files
-mono_crash.*
-
-# Build results
-[Dd]ebug/
-[Dd]ebugPublic/
-[Rr]elease/
-[Rr]eleases/
-x64/
-x86/
-[Ww][Ii][Nn]32/
-[Aa][Rr][Mm]/
-[Aa][Rr][Mm]64/
-bld/
-[Bb]in/
-[Oo]bj/
-[Ll]og/
-[Ll]ogs/
-
-# Visual Studio 2015/2017 cache/options directory
-.vs/
-# Uncomment if you have tasks that create the project's static files in wwwroot
-#wwwroot/
-
-# Visual Studio 2017 auto generated files
-Generated\ Files/
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-# NUnit
-*.VisualState.xml
-TestResult.xml
-nunit-*.xml
-
-# Build Results of an ATL Project
-[Dd]ebugPS/
-[Rr]eleasePS/
-dlldata.c
-
-# Benchmark Results
-BenchmarkDotNet.Artifacts/
-
-# .NET Core
-project.lock.json
-project.fragment.lock.json
-artifacts/
-
-# ASP.NET Scaffolding
-ScaffoldingReadMe.txt
-
-# StyleCop
-StyleCopReport.xml
-
-# Files built by Visual Studio
-*_i.c
-*_p.c
-*_h.h
-*.ilk
-*.meta
-*.obj
-*.iobj
-*.pch
-*.pdb
-*.ipdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp
-*.tmp_proj
-*_wpftmp.csproj
-*.log
-*.tlog
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.svclog
-*.scc
-
-# Chutzpah Test files
-_Chutzpah*
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opendb
-*.opensdf
-*.sdf
-*.cachefile
-*.VC.db
-*.VC.VC.opendb
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-*.sap
-
-# Visual Studio Trace Files
-*.e2e
-
-# TFS 2012 Local Workspace
-$tf/
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-*.DotSettings.user
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# AxoCover is a Code Coverage Tool
-.axoCover/*
-!.axoCover/settings.json
-
-# Coverlet is a free, cross platform Code Coverage Tool
-coverage*.json
-coverage*.xml
-coverage*.info
-
-# Visual Studio code coverage results
-*.coverage
-*.coveragexml
-
-# NCrunch
-_NCrunch_*
-.*crunch*.local.xml
-nCrunchTemp_*
-
-# MightyMoose
-*.mm.*
-AutoTest.Net/
-
-# Web workbench (sass)
-.sass-cache/
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.[Pp]ublish.xml
-*.azurePubxml
-# Note: Comment the next line if you want to checkin your web deploy settings,
-# but database connection strings (with potential passwords) will be unencrypted
-*.pubxml
-*.publishproj
-
-# Microsoft Azure Web App publish settings. Comment the next line if you want to
-# checkin your Azure Web App publish settings, but sensitive information contained
-# in these scripts will be unencrypted
-PublishScripts/
-
-# NuGet Packages
-*.nupkg
-# NuGet Symbol Packages
-*.snupkg
-# The packages folder can be ignored because of Package Restore
-**/[Pp]ackages/*
-# except build/, which is used as an MSBuild target.
-!**/[Pp]ackages/build/
-# Uncomment if necessary however generally it will be regenerated when needed
-#!**/[Pp]ackages/repositories.config
-# NuGet v3's project.json files produces more ignorable files
-*.nuget.props
-*.nuget.targets
-
-# Microsoft Azure Build Output
-csx/
-*.build.csdef
-
-# Microsoft Azure Emulator
-ecf/
-rcf/
-
-# Windows Store app package directories and files
-AppPackages/
-BundleArtifacts/
-Package.StoreAssociation.xml
-_pkginfo.txt
-*.appx
-*.appxbundle
-*.appxupload
-
-# Visual Studio cache files
-# files ending in .cache can be ignored
-*.[Cc]ache
-# but keep track of directories ending in .cache
-!?*.[Cc]ache/
-
-# Others
-ClientBin/
-~$*
-*~
-*.dbmdl
-*.dbproj.schemaview
-*.jfm
-*.pfx
-*.publishsettings
-orleans.codegen.cs
-
-# Including strong name files can present a security risk
-# (https://github.com/github/gitignore/pull/2483#issue-259490424)
-#*.snk
-
-# Since there are multiple workflows, uncomment next line to ignore bower_components
-# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
-#bower_components/
-
-# RIA/Silverlight projects
-Generated_Code/
-
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-ServiceFabricBackup/
-*.rptproj.bak
-
-# SQL Server files
-*.mdf
-*.ldf
-*.ndf
-
-# Business Intelligence projects
-*.rdl.data
-*.bim.layout
-*.bim_*.settings
-*.rptproj.rsuser
-*- [Bb]ackup.rdl
-*- [Bb]ackup ([0-9]).rdl
-*- [Bb]ackup ([0-9][0-9]).rdl
-
-# Microsoft Fakes
-FakesAssemblies/
-
-# GhostDoc plugin setting file
-*.GhostDoc.xml
-
-# Node.js Tools for Visual Studio
-.ntvs_analysis.dat
-node_modules/
-
-# Visual Studio 6 build log
-*.plg
-
-# Visual Studio 6 workspace options file
-*.opt
-
-# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
-*.vbw
-
-# Visual Studio 6 auto-generated project file (contains which files were open etc.)
-*.vbp
-
-# Visual Studio 6 workspace and project file (working project files containing files to include in project)
-*.dsw
-*.dsp
-
-# Visual Studio 6 technical files
-
-# Visual Studio LightSwitch build output
-**/*.HTMLClient/GeneratedArtifacts
-**/*.DesktopClient/GeneratedArtifacts
-**/*.DesktopClient/ModelManifest.xml
-**/*.Server/GeneratedArtifacts
-**/*.Server/ModelManifest.xml
-_Pvt_Extensions
-
-# Paket dependency manager
-.paket/paket.exe
-paket-files/
-
-# FAKE - F# Make
-.fake/
-
-# CodeRush personal settings
-.cr/personal
-
-# Python Tools for Visual Studio (PTVS)
-__pycache__/
-*.pyc
-
-# Cake - Uncomment if you are using it
-# tools/**
-# !tools/packages.config
-
-# Tabs Studio
-*.tss
-
-# Telerik's JustMock configuration file
-*.jmconfig
-
-# BizTalk build output
-*.btp.cs
-*.btm.cs
-*.odx.cs
-*.xsd.cs
-
-# OpenCover UI analysis results
-OpenCover/
-
-# Azure Stream Analytics local run output
-ASALocalRun/
-
-# MSBuild Binary and Structured Log
-*.binlog
-
-# NVidia Nsight GPU debugger configuration file
-*.nvuser
-
-# MFractors (Xamarin productivity tool) working folder
-.mfractor/
-
-# Local History for Visual Studio
-.localhistory/
-
-# Visual Studio History (VSHistory) files
-.vshistory/
-
-# BeatPulse healthcheck temp database
-healthchecksdb
-
-# Backup folder for Package Reference Convert tool in Visual Studio 2017
-MigrationBackup/
-
-# Ionide (cross platform F# VS Code tools) working folder
-.ionide/
-
-# Fody - auto-generated XML schema
-FodyWeavers.xsd
-
-# VS Code files for those working on multiple tools
-.vscode/*
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-*.code-workspace
-
-# Local History for Visual Studio Code
-.history/
-
-# Windows Installer files from build outputs
-*.cab
-*.msi
-*.msix
-*.msm
-*.msp
-
-# JetBrains Rider
-*.sln.iml
-
diff --git a/PolyComm/PolyComm/Program.cs b/PolyComm/Program.cs
similarity index 100%
rename from PolyComm/PolyComm/Program.cs
rename to PolyComm/Program.cs
diff --git a/PolyComm/PolyComm/Properties/launchSettings.json b/PolyComm/Properties/launchSettings.json
similarity index 100%
rename from PolyComm/PolyComm/Properties/launchSettings.json
rename to PolyComm/Properties/launchSettings.json
diff --git a/PolyComm/PolyComm/appsettings.Development.json b/PolyComm/appsettings.Development.json
similarity index 100%
rename from PolyComm/PolyComm/appsettings.Development.json
rename to PolyComm/appsettings.Development.json
diff --git a/PolyComm/PolyComm/appsettings.json b/PolyComm/appsettings.json
similarity index 100%
rename from PolyComm/PolyComm/appsettings.json
rename to PolyComm/appsettings.json
diff --git a/PolyComm/PolyComm/wwwroot/app.css b/PolyComm/wwwroot/app.css
similarity index 100%
rename from PolyComm/PolyComm/wwwroot/app.css
rename to PolyComm/wwwroot/app.css
diff --git a/PolyComm/PolyComm/wwwroot/bootstrap/bootstrap.min.css b/PolyComm/wwwroot/bootstrap/bootstrap.min.css
similarity index 100%
rename from PolyComm/PolyComm/wwwroot/bootstrap/bootstrap.min.css
rename to PolyComm/wwwroot/bootstrap/bootstrap.min.css
diff --git a/PolyComm/PolyComm/wwwroot/bootstrap/bootstrap.min.css.map b/PolyComm/wwwroot/bootstrap/bootstrap.min.css.map
similarity index 100%
rename from PolyComm/PolyComm/wwwroot/bootstrap/bootstrap.min.css.map
rename to PolyComm/wwwroot/bootstrap/bootstrap.min.css.map
diff --git a/PolyComm/PolyComm/wwwroot/favicon.png b/PolyComm/wwwroot/favicon.png
similarity index 100%
rename from PolyComm/PolyComm/wwwroot/favicon.png
rename to PolyComm/wwwroot/favicon.png
diff --git a/Program.cs b/Program.cs
new file mode 100644
index 0000000..69b3e52
--- /dev/null
+++ b/Program.cs
@@ -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!");
+ }
+}
diff --git a/SampleApp.csproj b/SampleApp.csproj
new file mode 100644
index 0000000..35f1b43
--- /dev/null
+++ b/SampleApp.csproj
@@ -0,0 +1,12 @@
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
diff --git a/agents.md b/agents.md
new file mode 100644
index 0000000..6dbad2a
--- /dev/null
+++ b/agents.md
@@ -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.
diff --git a/default.nix b/default.nix
new file mode 100644
index 0000000..9bfc4d3
--- /dev/null
+++ b/default.nix
@@ -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;
+ };
+ };
+}
diff --git a/deps.nix b/deps.nix
new file mode 100644
index 0000000..2d56c10
--- /dev/null
+++ b/deps.nix
@@ -0,0 +1,2 @@
+# Generated by nuget-to-nix (empty template for projects without external NuGet dependencies)
+[]
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..fb043dc
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,27 @@
+{
+ "nodes": {
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1784007870,
+ "narHash": "sha256-djcLt/JJphyNt4eDY9XTly+/WbCK5lqWq9lSgCmJkkQ=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "18b9261cb3294b6d2a06d03f96872827b8fe2698",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "nixpkgs": "nixpkgs"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..5f58570
--- /dev/null
+++ b/flake.nix
@@ -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;
+ };
+ }
+ );
+ };
+}
diff --git a/flatpak/app.flatpak.json b/flatpak/app.flatpak.json
new file mode 100644
index 0000000..f86f76d
--- /dev/null
+++ b/flatpak/app.flatpak.json
@@ -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": ".."
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/install-templates.sh b/install-templates.sh
new file mode 100644
index 0000000..cbf32a7
--- /dev/null
+++ b/install-templates.sh
@@ -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"
diff --git a/project.toml b/project.toml
new file mode 100644
index 0000000..8d08708
--- /dev/null
+++ b/project.toml
@@ -0,0 +1,7 @@
+# Project metadata for .NET template
+[project]
+name = "dotnet-template"
+description = "Nix flake template for .NET projects"
+authors = ["Your Name "]
+version = "0.1.0"
+license = "MIT"
diff --git a/shell.nix b/shell.nix
new file mode 100644
index 0000000..fdef55b
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,13 @@
+# Legacy shell.nix for .NET template
+{
+ pkgs ? import { },
+}:
+pkgs.mkShell {
+ buildInputs = [
+ pkgs.dotnet-sdk
+ pkgs.git
+ ];
+ shellHook = "" "
+echo 'Welcome to the .NET devShell!'
+" "";
+}
diff --git a/tests/SampleTest.cs b/tests/SampleTest.cs
new file mode 100644
index 0000000..58b0163
--- /dev/null
+++ b/tests/SampleTest.cs
@@ -0,0 +1,9 @@
+using Xunit;
+public class SampleTest
+{
+ [Fact]
+ public void TestSample()
+ {
+ Assert.Equal(1, 1);
+ }
+}