From d57b9ccd03020c7fb751822b9a37786b3b0a20e4 Mon Sep 17 00:00:00 2001
From: Joseph Walton-Rivers <joseph@walton-rivers.uk>
Date: Sat, 26 Nov 2022 16:29:53 +0000
Subject: [PATCH] fix more auto clang-tidy errors

---
 fggl/app.cpp                                  |  2 +-
 fggl/assets/module.cpp                        |  6 +--
 fggl/assets/packed/module.cpp                 |  2 +-
 fggl/assets/types.cpp                         |  4 +-
 fggl/audio/fallback/audio.cpp                 |  2 +-
 fggl/audio/openal/audio.cpp                   | 12 ++---
 fggl/audio/openal/module.cpp                  |  2 +-
 fggl/data/assimp/module.cpp                   | 34 ++++++------
 fggl/data/heightmap.cpp                       | 10 ++--
 fggl/data/model.cpp                           |  4 +-
 fggl/data/module.cpp                          |  2 +-
 fggl/data/procedural.cpp                      | 16 +++---
 fggl/debug/imgui/include/imgui_impl_glfw.h    |  6 +--
 fggl/debug/imgui/include/imgui_impl_opengl3.h |  6 +--
 fggl/debug/logging.cpp                        |  2 +-
 fggl/entity/loader/loader.cpp                 |  8 +--
 fggl/entity/module.cpp                        |  6 +--
 fggl/gfx/atlas.cpp                            |  6 +--
 fggl/gfx/input.cpp                            | 32 ++++++------
 fggl/gfx/ogl/renderer.cpp                     |  2 +-
 fggl/gfx/ogl/shader.cpp                       | 24 ++++-----
 fggl/gfx/ogl/types.cpp                        |  2 +-
 fggl/gfx/ogl4/canvas.cpp                      |  2 +-
 fggl/gfx/ogl4/meshes.cpp                      | 36 ++++++-------
 fggl/gfx/ogl4/models.cpp                      | 16 +++---
 fggl/gfx/ogl4/module.cpp                      |  6 +--
 fggl/gfx/ogl4/setup.cpp                       |  2 +-
 fggl/gfx/window.cpp                           |  4 +-
 fggl/gui/containers.cpp                       | 10 ++--
 fggl/gui/fonts.cpp                            |  2 +-
 fggl/gui/widget.cpp                           | 22 ++++----
 fggl/gui/widgets.cpp                          |  2 +-
 fggl/input/camera_input.cpp                   | 52 +++++++++----------
 fggl/math/shapes.cpp                          | 26 +++++-----
 fggl/math/triangulation.cpp                   |  2 +-
 fggl/phys/null.cpp                            |  2 +-
 fggl/platform/linux/paths.cpp                 | 12 ++---
 fggl/util/guid.cpp                            |  8 +--
 include/fggl/app.hpp                          | 20 +++----
 include/fggl/audio/openal/audio.hpp           |  2 +-
 40 files changed, 206 insertions(+), 210 deletions(-)

diff --git a/fggl/app.cpp b/fggl/app.cpp
index 12811d4..603d8e0 100644
--- a/fggl/app.cpp
+++ b/fggl/app.cpp
@@ -28,7 +28,7 @@ namespace fggl {
 		m_states(),
 		m_subsystems(services) {}
 
-	int App::run(int /*argc*/, const char **/*argv*/) {
+	auto App::run(int /*argc*/, const char **/*argv*/) -> int {
 		auto *windowing = m_subsystems->get<display::WindowService>();
 
 		{
diff --git a/fggl/assets/module.cpp b/fggl/assets/module.cpp
index e56972a..5532515 100644
--- a/fggl/assets/module.cpp
+++ b/fggl/assets/module.cpp
@@ -20,10 +20,10 @@
 
 namespace fggl::assets {
 
-	bool AssetFolders::factory(modules::ModuleService service, modules::Services &services) {
+	auto AssetFolders::factory(modules::ModuleService service, modules::Services &services) -> bool {
 		if (service == Loader::service) {
-			auto storage = services.get<data::Storage>();
-			auto checkin = services.get<CheckinAdapted>();
+			auto *storage = services.get<data::Storage>();
+			auto *checkin = services.get<CheckinAdapted>();
 			services.create<Loader>(storage, checkin);
 			return true;
 		}
diff --git a/fggl/assets/packed/module.cpp b/fggl/assets/packed/module.cpp
index 3a56469..44e9e56 100644
--- a/fggl/assets/packed/module.cpp
+++ b/fggl/assets/packed/module.cpp
@@ -20,7 +20,7 @@
 
 namespace fggl::assets {
 
-	bool PackedAssets::factory(modules::ModuleService service, modules::Services &services) {
+	auto PackedAssets::factory(modules::ModuleService service, modules::Services &services) -> bool {
 		if (service == RawCheckin::service) {
 			services.create<RawCheckin>();
 			return true;
diff --git a/fggl/assets/types.cpp b/fggl/assets/types.cpp
index a1c4418..b65a652 100644
--- a/fggl/assets/types.cpp
+++ b/fggl/assets/types.cpp
@@ -19,7 +19,7 @@
 #include "fggl/assets/types.hpp"
 
 namespace fggl::assets {
-	AssetID make_asset_id_rt(const std::string &pack, const std::string &path, const std::string &view) {
+	auto make_asset_id_rt(const std::string &pack, const std::string &path, const std::string &view) -> AssetID {
 		auto fullPath = pack + ":" + path;
 		if (!view.empty()) {
 			fullPath += "[" + view + "]";
@@ -33,7 +33,7 @@ namespace fggl::assets {
 		return AssetID::make(hash);
 	}
 
-	AssetID asset_from_user(const std::string &input, const std::string &pack) {
+	auto asset_from_user(const std::string &input, const std::string &pack) -> AssetID {
 
 		if (input.find(':') != std::string::npos ) {
 			// probably fully qualified
diff --git a/fggl/audio/fallback/audio.cpp b/fggl/audio/fallback/audio.cpp
index a8544c2..50edca4 100644
--- a/fggl/audio/fallback/audio.cpp
+++ b/fggl/audio/fallback/audio.cpp
@@ -26,7 +26,7 @@ namespace fggl::audio {
 	void NullAudioService::play(const fggl::audio::AudioClipShort &, bool) {
 	}
 
-	bool NullAudio::factory(modules::ModuleService service, modules::Services &services){
+	auto NullAudio::factory(modules::ModuleService service, modules::Services &services) -> bool{
 		if (service == SERVICE_AUDIO_PLAYBACK) {
 			services.bind<audio::AudioService, audio::NullAudioService>();
 			return true;
diff --git a/fggl/audio/openal/audio.cpp b/fggl/audio/openal/audio.cpp
index f9a3d24..d118f01 100644
--- a/fggl/audio/openal/audio.cpp
+++ b/fggl/audio/openal/audio.cpp
@@ -34,7 +34,7 @@
 
 namespace fggl::audio::openal {
 
-	assets::AssetRefRaw load_vorbis(assets::Loader* /*loader*/, const assets::AssetID &guid, const assets::LoaderContext &data, void* userPtr) {
+	auto load_vorbis(assets::Loader* /*loader*/, const assets::AssetID &guid, const assets::LoaderContext &data, void* userPtr) -> assets::AssetRefRaw {
 		auto *manager = static_cast<assets::AssetManager*>(userPtr);
 		auto filePath = data.assetPath;
 
@@ -51,20 +51,16 @@ namespace fggl::audio::openal {
 		return nullptr;
 	}
 
-	bool load_vorbis_short(std::filesystem::path path, assets::MemoryBlock& block) {
+	auto load_vorbis_short(std::filesystem::path path, assets::MemoryBlock& block) -> bool {
 		// vorbis
 		auto* clip = new AudioClipShort();
 		clip->sampleCount = stb_vorbis_decode_filename( path.c_str(), &clip->channels, &clip->sampleRate, &clip->data);
 		debug::info("clip loaded: channels={}, sampleRate={}, sampleCount={}", clip->channels, clip->sampleRate, clip->sampleCount);
 
-		if ( clip->sampleCount == -1 ) {
-			return false;
-		}
-
-		return true;
+		return clip->sampleCount != 1;
 	}
 
-	assets::AssetTypeID check_vorbis(std::filesystem::path path ) {
+	auto check_vorbis(const std::filesystem::path& path ) -> assets::AssetTypeID {
 		if ( path.extension() != ".ogg" ) {
 			return assets::INVALID_ASSET_TYPE;
 		}
diff --git a/fggl/audio/openal/module.cpp b/fggl/audio/openal/module.cpp
index 964d5c1..909dc63 100644
--- a/fggl/audio/openal/module.cpp
+++ b/fggl/audio/openal/module.cpp
@@ -20,7 +20,7 @@
 
 namespace fggl::audio {
 
-	bool OpenAL::factory(modules::ModuleService service, modules::Services &services) {
+	auto OpenAL::factory(modules::ModuleService service, modules::Services &services) -> bool {
 		if (service == SERVICE_AUDIO_PLAYBACK) {
 			auto* assets = services.get<assets::AssetManager>();
 
diff --git a/fggl/data/assimp/module.cpp b/fggl/data/assimp/module.cpp
index 0530bff..0b07016 100644
--- a/fggl/data/assimp/module.cpp
+++ b/fggl/data/assimp/module.cpp
@@ -31,19 +31,19 @@
 
 namespace fggl::data::models {
 
-	constexpr math::vec3 convert(aiVector3D& vec) {
+	constexpr auto convert(aiVector3D& vec) -> math::vec3 {
 		return {vec.x, vec.y, vec.z};
 	}
 
-	constexpr math::vec2 convert2(aiVector2D& vec) {
+	constexpr auto convert2(aiVector2D& vec) -> math::vec2 {
 		return {vec.x, vec.y};
 	}
 
-	constexpr math::vec2 convert2(aiVector3D& vec) {
+	constexpr auto convert2(aiVector3D& vec) -> math::vec2 {
 		return {vec.x, vec.y};
 	}
 
-	constexpr math::vec3 convert(aiColor3D& col) {
+	constexpr auto convert(aiColor3D& col) -> math::vec3 {
 		return {col.r, col.g, col.b};
 	}
 
@@ -108,7 +108,7 @@ namespace fggl::data::models {
 			}
 		}
 
-		inline bool isLoaded(assets::AssetID asset) const {
+		inline auto isLoaded(assets::AssetID asset) const -> bool {
 			return manager->has(asset);
 		}
 
@@ -119,7 +119,7 @@ namespace fggl::data::models {
 
 	};
 
-	static std::vector<assets::AssetID> process_texture( const aiTextureType type, const aiMaterial* assimpMat, AssetStuff& stuff, const assets::LoaderContext& config) {
+	static auto process_texture( const aiTextureType type, const aiMaterial* assimpMat, AssetStuff& stuff, const assets::LoaderContext& config) -> std::vector<assets::AssetID> {
 		std::vector<assets::AssetID> matRefs;
 		matRefs.reserve( assimpMat->GetTextureCount(type) );
 
@@ -138,7 +138,7 @@ namespace fggl::data::models {
 		return matRefs;
 	}
 
-	static math::vec3 process_mat_colour(const aiMaterial* mat, const char* name, int a1, int a2) {
+	static auto process_mat_colour(const aiMaterial* mat, const char* name, int a1, int a2) -> math::vec3 {
 		aiColor3D col{0.0F, 0.0F, 0.0F};
 		mat->Get( name, a1, a2, col );
 		debug::info("read colour: {}, {}, {}, {}", name, col.r, col.g, col.b);
@@ -147,7 +147,7 @@ namespace fggl::data::models {
 	}
 
 	static void process_material(const assets::AssetID& guid, aiMaterial* assimpMat, AssetStuff stuff, const assets::LoaderContext& config) {
-		mesh::Material* material = new mesh::Material();
+		auto* material = new mesh::Material();
 
 		debug::info("processing: {}", guid);
 
@@ -163,7 +163,7 @@ namespace fggl::data::models {
 		stuff.set( guid, material );
 	}
 
-	assets::AssetRefRaw load_assimp_model(assets::Loader* loader, const assets::AssetID& guid, const assets::LoaderContext& data, void* userPtr) {
+	auto load_assimp_model(assets::Loader* loader, const assets::AssetID& guid, const assets::LoaderContext& data, void* userPtr) -> assets::AssetRefRaw {
 //		auto *filePath = std::get<assets::AssetPath *>(data);
 		auto filePath = data.assetPath;
 
@@ -199,7 +199,7 @@ namespace fggl::data::models {
 		}
 
 		// now we can try importing the mesh data
-		mesh::MultiMesh3D* packedMesh = new mesh::MultiMesh3D();
+		auto* packedMesh = new mesh::MultiMesh3D();
 		process_node( *packedMesh, scene->mRootNode, scene, matAssets);
 
 		// now we try importing the materials
@@ -212,8 +212,8 @@ namespace fggl::data::models {
 		return nullptr;
 	}
 
-	assets::AssetRefRaw load_assimp_texture(assets::Loader* loader, const assets::AssetID& guid, const assets::LoaderContext& data, void* userPtr) {
-		assets::AssetManager* manager = (assets::AssetManager*)userPtr;
+	auto load_assimp_texture(assets::Loader* loader, const assets::AssetID& guid, const assets::LoaderContext& data, void* userPtr) -> assets::AssetRefRaw {
+		auto* manager = (assets::AssetManager*)userPtr;
 
 		if ( manager->has(guid) ) {
 			// already loaded.
@@ -238,7 +238,7 @@ namespace fggl::data::models {
 		return nullptr;
 	}
 
-	bool load_tex_stb(const std::filesystem::path& filePath, assets::MemoryBlock& block) {
+	auto load_tex_stb(const std::filesystem::path& filePath, assets::MemoryBlock& block) -> bool {
 		stbi_set_flip_vertically_on_load(1);
 
 		//load the texture data into memory
@@ -258,7 +258,7 @@ namespace fggl::data::models {
 		}
 	}
 
-	assets::AssetTypeID is_tex_stb(const std::filesystem::path& filePath) {
+	auto is_tex_stb(const std::filesystem::path& filePath) -> assets::AssetTypeID {
 		// detect jpgs
 		if ( filePath.extension() == ".jpg" || filePath.extension() == ".jpeg" ) {
 			return TEXTURE_RGBA;
@@ -272,7 +272,7 @@ namespace fggl::data::models {
 		return assets::INVALID_ASSET_TYPE;
 	}
 
-	assets::AssetTypeID is_model_assimp(const std::filesystem::path& filePath) {
+	auto is_model_assimp(const std::filesystem::path& filePath) -> assets::AssetTypeID {
 		auto ext = filePath.extension().string();
 		std::transform(ext.begin(), ext.end(), ext.begin(), ::tolower);
 
@@ -283,7 +283,7 @@ namespace fggl::data::models {
 		return assets::INVALID_ASSET_TYPE;
 	}
 
-	bool extract_requirements(const std::string& packName, const std::filesystem::path& packRoot, assets::ResourceRecord& rr) {
+	auto extract_requirements(const std::string& packName, const std::filesystem::path& packRoot, assets::ResourceRecord& rr) -> bool {
 		Assimp::Importer importer;
 		const aiScene *scene = importer.ReadFile( rr.m_path, aiProcess_Triangulate | aiProcess_FlipUVs);
 		if ( !scene || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode ) {
@@ -314,7 +314,7 @@ namespace fggl::data::models {
 		return true;
 	}
 
-	bool AssimpModule::factory(modules::ModuleService service, modules::Services &serviceManager) {
+	auto AssimpModule::factory(modules::ModuleService service, modules::Services &serviceManager) -> bool {
 		if ( service == MODEL_PROVIDER ) {
 			auto* assetLoader = serviceManager.get<assets::Loader>();
 			assetLoader->setFactory( MODEL_MULTI3D, load_assimp_model, assets::LoadType::PATH );
diff --git a/fggl/data/heightmap.cpp b/fggl/data/heightmap.cpp
index 04735b4..ed2f1ae 100644
--- a/fggl/data/heightmap.cpp
+++ b/fggl/data/heightmap.cpp
@@ -29,7 +29,7 @@ namespace fggl::data {
 		const int gridOffset = sizeX * sizeY;
 
 		// calculate normals for each triangle
-		math::vec3 *triNormals = new math::vec3[sizeX * sizeY * 2];
+		auto *triNormals = new math::vec3[sizeX * sizeY * 2];
 		for (int i = 0; i < sizeX - 1; i++) {
 			for (int j = 0; j < sizeY - 1; j++) {
 				// calculate vertex
@@ -57,7 +57,7 @@ namespace fggl::data {
 				const auto lastRow = (i == sizeX - 1);
 				const auto lastCol = (i == sizeY - 1);
 
-				auto finalNormal = glm::vec3(0.0f, 0.0f, 0.0f);
+				auto finalNormal = glm::vec3(0.0F, 0.0F, 0.0F);
 
 				if (!firstRow && !firstCol) {
 					finalNormal += triNormals[idx(i - 1, j - 1, sizeY)];
@@ -78,7 +78,7 @@ namespace fggl::data {
 				}
 
 				locations[idx(i, j, sizeY)].normal =
-					glm::normalize(finalNormal) * -1.0f; //FIXME the normals seem wrong.
+					glm::normalize(finalNormal) * -1.0F; //FIXME the normals seem wrong.
 			}
 		}
 		delete[] triNormals;
@@ -98,8 +98,8 @@ namespace fggl::data {
 				auto zPos = float(z);
 
 				std::size_t idx1 = idx(x, z, data::heightMaxZ);
-				locations[idx1].colour = fggl::math::vec3(1.0f, 1.0f, 1.0f);
-				locations[idx1].posititon = math::vec3(-0.5f + xPos, level, -0.5f - zPos);
+				locations[idx1].colour = fggl::math::vec3(1.0F, 1.0F, 1.0F);
+				locations[idx1].posititon = math::vec3(-0.5F + xPos, level, -0.5F - zPos);
 			}
 		}
 		gridVertexNormals(locations.data());
diff --git a/fggl/data/model.cpp b/fggl/data/model.cpp
index c3c843f..7451ed3 100644
--- a/fggl/data/model.cpp
+++ b/fggl/data/model.cpp
@@ -28,13 +28,13 @@ void Mesh::pushIndex(unsigned int idx) {
 	m_index.push_back(idx);
 }
 
-Mesh::IndexType Mesh::pushVertex(Vertex vert) {
+auto Mesh::pushVertex(Vertex vert) -> Mesh::IndexType {
 	auto idx = m_verts.size();
 	m_verts.push_back(vert);
 	return idx;
 }
 
-Mesh::IndexType Mesh::indexOf(Vertex term) {
+auto Mesh::indexOf(Vertex term) -> Mesh::IndexType {
 	auto itr = std::find(m_verts.begin(), m_verts.end(), term);
 	if (itr == m_verts.end()) {
 		return INVALID_IDX;
diff --git a/fggl/data/module.cpp b/fggl/data/module.cpp
index 883e1d9..1872b5f 100644
--- a/fggl/data/module.cpp
+++ b/fggl/data/module.cpp
@@ -20,7 +20,7 @@
 
 namespace fggl::data {
 
-	bool LocalStorage::factory(modules::ModuleService service, modules::Services &data) {
+	auto LocalStorage::factory(modules::ModuleService service, modules::Services &data) -> bool {
 		if (service == SERVICE_STORAGE) {
 			// FIXME: no easy way to set the application name
 			auto pathConfig = fggl::platform::calc_engine_paths("fggl-demo");
diff --git a/fggl/data/procedural.cpp b/fggl/data/procedural.cpp
index 6770d0e..27e4a96 100644
--- a/fggl/data/procedural.cpp
+++ b/fggl/data/procedural.cpp
@@ -26,7 +26,7 @@
 using namespace fggl::data;
 
 // from https://www.khronos.org/opengl/wiki/Calculating_a_Surface_Normal
-static glm::vec3 calcSurfaceNormal(glm::vec3 vert1, glm::vec3 vert2, glm::vec3 vert3) {
+static auto calcSurfaceNormal(glm::vec3 vert1, glm::vec3 vert2, glm::vec3 vert3) -> glm::vec3 {
 	const glm::vec3 edge1 = vert2 - vert1;
 	const glm::vec3 edge2 = vert3 - vert1;
 	return glm::normalize(glm::cross(edge1, edge2));
@@ -183,7 +183,7 @@ namespace fggl::data {
 } // namespace fggl::data
 
 
-fggl::data::Mesh fggl::data::make_triangle() {
+auto fggl::data::make_triangle() -> fggl::data::Mesh {
 	constexpr fggl::math::vec3 pos[]{
 		{-0.5F, -0.5F, 0.0F},
 		{0.5F, -0.5F, 0.0F},
@@ -204,7 +204,7 @@ fggl::data::Mesh fggl::data::make_triangle() {
 	return mesh;
 }
 
-fggl::data::Mesh fggl::data::make_quad_xy() {
+auto fggl::data::make_quad_xy() -> fggl::data::Mesh {
 	constexpr fggl::math::vec3 pos[]{
 		{-0.5F, -0.5F, 0.0F},
 		{0.5F, -0.5F, 0.0F},
@@ -229,7 +229,7 @@ fggl::data::Mesh fggl::data::make_quad_xy() {
 	return mesh;
 }
 
-fggl::data::Mesh fggl::data::make_quad_xz() {
+auto fggl::data::make_quad_xz() -> fggl::data::Mesh {
 	constexpr std::array<fggl::math::vec3, 4> pos{{
 													  {-0.5F, 0.0F, -0.5F},
 													  {0.5F, 0.0F, -0.5F},
@@ -254,7 +254,7 @@ fggl::data::Mesh fggl::data::make_quad_xz() {
 	return mesh;
 }
 
-fggl::mesh::Mesh3D fggl::data::make_cube(fggl::mesh::Mesh3D &mesh, const fggl::math::mat4 &transform) {
+auto fggl::data::make_cube(fggl::mesh::Mesh3D &mesh, const fggl::math::mat4 &transform) -> fggl::mesh::Mesh3D {
 	// done as two loops, top loop is 0,1,2,3, bottom loop is 4,5,6,7
 	constexpr std::array<fggl::math::vec3, 8> pos{{
 													  {-0.5, 0.5, -0.5}, // 0 TOP LOOP
@@ -285,7 +285,7 @@ fggl::mesh::Mesh3D fggl::data::make_cube(fggl::mesh::Mesh3D &mesh, const fggl::m
 	return mesh;
 }
 
-fggl::mesh::Mesh3D fggl::data::make_slope(fggl::mesh::Mesh3D &mesh, const fggl::math::mat4 &transform) {
+auto fggl::data::make_slope(fggl::mesh::Mesh3D &mesh, const fggl::math::mat4 &transform) -> fggl::mesh::Mesh3D {
 
 	// done as two loops, top loop is 0,1,2,3, bottom loop is 4,5,6,7
 	// FIXME remove 2 and 3 and renumber the index list accordingly
@@ -316,7 +316,7 @@ fggl::mesh::Mesh3D fggl::data::make_slope(fggl::mesh::Mesh3D &mesh, const fggl::
 	return mesh;
 }
 
-fggl::mesh::Mesh3D fggl::data::make_ditch(fggl::mesh::Mesh3D &mesh, const fggl::math::mat4 &transform) {
+auto fggl::data::make_ditch(fggl::mesh::Mesh3D &mesh, const fggl::math::mat4 &transform) -> fggl::mesh::Mesh3D {
 
 	// done as two loops, top loop is 0,1,2,3, bottom loop is 4,5,6,7
 	// FIXME remove 2 and renumber the index list accordingly
@@ -349,7 +349,7 @@ fggl::mesh::Mesh3D fggl::data::make_ditch(fggl::mesh::Mesh3D &mesh, const fggl::
 	return mesh;
 }
 
-fggl::mesh::Mesh3D fggl::data::make_point(fggl::mesh::Mesh3D &mesh, const fggl::math::mat4 &transform) {
+auto fggl::data::make_point(fggl::mesh::Mesh3D &mesh, const fggl::math::mat4 &transform) -> fggl::mesh::Mesh3D {
 
 	// done as two loops, top loop is 0,1,2,3, bottom loop is 4,5,6,7
 	constexpr fggl::math::vec3 pos[]{
diff --git a/fggl/debug/imgui/include/imgui_impl_glfw.h b/fggl/debug/imgui/include/imgui_impl_glfw.h
index 20348cc..470148b 100644
--- a/fggl/debug/imgui/include/imgui_impl_glfw.h
+++ b/fggl/debug/imgui/include/imgui_impl_glfw.h
@@ -21,9 +21,9 @@
 
 struct GLFWwindow;
 
-IMGUI_IMPL_API bool ImGui_ImplGlfw_InitForOpenGL(GLFWwindow *window, bool install_callbacks);
-IMGUI_IMPL_API bool ImGui_ImplGlfw_InitForVulkan(GLFWwindow *window, bool install_callbacks);
-IMGUI_IMPL_API bool ImGui_ImplGlfw_InitForOther(GLFWwindow *window, bool install_callbacks);
+IMGUI_IMPL_API auto ImGui_ImplGlfw_InitForOpenGL(GLFWwindow *window, bool install_callbacks) -> bool;
+IMGUI_IMPL_API auto ImGui_ImplGlfw_InitForVulkan(GLFWwindow *window, bool install_callbacks) -> bool;
+IMGUI_IMPL_API auto ImGui_ImplGlfw_InitForOther(GLFWwindow *window, bool install_callbacks) -> bool;
 IMGUI_IMPL_API void ImGui_ImplGlfw_Shutdown();
 IMGUI_IMPL_API void ImGui_ImplGlfw_NewFrame();
 
diff --git a/fggl/debug/imgui/include/imgui_impl_opengl3.h b/fggl/debug/imgui/include/imgui_impl_opengl3.h
index 90fa1ad..1ada73d 100644
--- a/fggl/debug/imgui/include/imgui_impl_opengl3.h
+++ b/fggl/debug/imgui/include/imgui_impl_opengl3.h
@@ -25,15 +25,15 @@
 #include "imgui.h"      // IMGUI_IMPL_API
 
 // Backend API
-IMGUI_IMPL_API bool ImGui_ImplOpenGL3_Init(const char *glsl_version = NULL);
+IMGUI_IMPL_API auto ImGui_ImplOpenGL3_Init(const char *glsl_version = NULL) -> bool;
 IMGUI_IMPL_API void ImGui_ImplOpenGL3_Shutdown();
 IMGUI_IMPL_API void ImGui_ImplOpenGL3_NewFrame();
 IMGUI_IMPL_API void ImGui_ImplOpenGL3_RenderDrawData(ImDrawData *draw_data);
 
 // (Optional) Called by Init/NewFrame/Shutdown
-IMGUI_IMPL_API bool ImGui_ImplOpenGL3_CreateFontsTexture();
+IMGUI_IMPL_API auto ImGui_ImplOpenGL3_CreateFontsTexture() -> bool;
 IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyFontsTexture();
-IMGUI_IMPL_API bool ImGui_ImplOpenGL3_CreateDeviceObjects();
+IMGUI_IMPL_API auto ImGui_ImplOpenGL3_CreateDeviceObjects() -> bool;
 IMGUI_IMPL_API void ImGui_ImplOpenGL3_DestroyDeviceObjects();
 
 // Specific OpenGL ES versions
diff --git a/fggl/debug/logging.cpp b/fggl/debug/logging.cpp
index 3c726c5..47918b4 100644
--- a/fggl/debug/logging.cpp
+++ b/fggl/debug/logging.cpp
@@ -23,7 +23,7 @@
 	#include <cxxabi.h>
 
 	namespace fggl::debug {
-		std::string demangle(const char *name) {
+		auto demangle(const char *name) -> std::string {
 			int status = -4;
 
 			std::unique_ptr<char, decltype(&std::free)> res{
diff --git a/fggl/entity/loader/loader.cpp b/fggl/entity/loader/loader.cpp
index 076aa57..f75f363 100644
--- a/fggl/entity/loader/loader.cpp
+++ b/fggl/entity/loader/loader.cpp
@@ -22,8 +22,8 @@
 
 namespace fggl::entity {
 
-	assets::AssetRefRaw load_scene(assets::Loader* loader, const assets::AssetID& asset, const assets::LoaderContext& data, void* ptr) {
-		scenes::Game* gamePtr = (scenes::Game*)ptr;
+	auto load_scene(assets::Loader* loader, const assets::AssetID& asset, const assets::LoaderContext& data, void* ptr) -> assets::AssetRefRaw {
+		auto* gamePtr = (scenes::Game*)ptr;
 		auto filePath = data.assetPath;
 
 		// load assets
@@ -77,7 +77,7 @@ namespace fggl::entity {
 		return nullptr;
 	}
 
-	assets::AssetRefRaw load_prototype(assets::Loader* loader, const assets::AssetID &guid, const assets::LoaderContext& data, EntityFactory* factory) {
+	auto load_prototype(assets::Loader* loader, const assets::AssetID &guid, const assets::LoaderContext& data, EntityFactory* factory) -> assets::AssetRefRaw {
 		auto filePath = data.assetPath;
 
 		// We need to process the prototypes, and load them into the asset system.
@@ -105,7 +105,7 @@ namespace fggl::entity {
 				}
 
 				if ( prefab["tags"].IsDefined() ) {
-					for ( auto& tagNode : prefab["tags"] ) {
+					for ( const auto& tagNode : prefab["tags"] ) {
 						entity.tags.push_back( tagNode.as< util::GUID >() );
 					}
 				}
diff --git a/fggl/entity/module.cpp b/fggl/entity/module.cpp
index 3d70df9..29256f5 100644
--- a/fggl/entity/module.cpp
+++ b/fggl/entity/module.cpp
@@ -37,7 +37,7 @@ namespace fggl::entity {
 		factory->bind(math::Transform::guid, make_transform);
 	}
 
-	static assets::AssetTypeID is_scene(std::filesystem::path path) {
+	static auto is_scene(std::filesystem::path path) -> assets::AssetTypeID {
 		if ( path.extension() == ".yml" ) {
 			return ENTITY_SCENE;
 		}
@@ -45,7 +45,7 @@ namespace fggl::entity {
 		return assets::INVALID_ASSET_TYPE;
 	}
 
-	bool get_scene_deps(const std::string& packName, std::filesystem::path packRoot, assets::ResourceRecord& rr) {
+	auto get_scene_deps(const std::string& packName, std::filesystem::path packRoot, assets::ResourceRecord& rr) -> bool {
 
 		auto nodes = YAML::LoadAllFromFile( rr.m_path );
 		for ( auto& node : nodes ) {
@@ -65,7 +65,7 @@ namespace fggl::entity {
 	}
 
 
-	bool ECS::factory(modules::ModuleService service, modules::Services &services) {
+	auto ECS::factory(modules::ModuleService service, modules::Services &services) -> bool {
 		if (service == EntityFactory::service) {
 			auto *factory = services.create<EntityFactory>(services);
 			install_component_factories(factory);
diff --git a/fggl/gfx/atlas.cpp b/fggl/gfx/atlas.cpp
index 680d1f4..d3b502b 100644
--- a/fggl/gfx/atlas.cpp
+++ b/fggl/gfx/atlas.cpp
@@ -42,8 +42,8 @@ static void unpack_stbrp_query(Query &query, std::vector<stbrp_rect> &data) {
 	}
 }
 
-bool pack_iter(int width, int height, std::vector<stbrp_rect> &query) {
-	stbrp_node *tmp = new stbrp_node[width];
+auto pack_iter(int width, int height, std::vector<stbrp_rect> &query) -> bool {
+	auto *tmp = new stbrp_node[width];
 
 	// setup context
 	stbrp_context context;
@@ -56,7 +56,7 @@ bool pack_iter(int width, int height, std::vector<stbrp_rect> &query) {
 
 namespace fggl::gfx {
 
-	bool pack(std::vector<Bounds2D> &pack) {
+	auto pack(std::vector<Bounds2D> &pack) -> bool {
 		// setup query structure
 		std::vector<stbrp_rect> query;
 		query.reserve(pack.size());
diff --git a/fggl/gfx/input.cpp b/fggl/gfx/input.cpp
index 5d104e2..800760c 100644
--- a/fggl/gfx/input.cpp
+++ b/fggl/gfx/input.cpp
@@ -53,15 +53,15 @@ void Input::mousePos(double x, double y) {
 	m_mouse_curr.cursor[1] = y;
 }
 
-double Input::cursorDeltaX() const {
+auto Input::cursorDeltaX() const -> double {
 	return m_mouse_last.cursor[0] - m_mouse_curr.cursor[0];
 }
 
-double Input::cursorDeltaY() const {
+auto Input::cursorDeltaY() const -> double {
 	return m_mouse_last.cursor[1] - m_mouse_curr.cursor[1];
 }
 
-const double *Input::mousePos() const {
+auto Input::mousePos() const -> const double * {
 	return m_mouse_curr.scroll.data();
 }
 
@@ -70,15 +70,15 @@ void Input::mouseScroll(double deltaX, double deltaY) {
 	m_mouse_curr.scroll[1] = deltaY;
 }
 
-const double *Input::mouseScroll() const {
+auto Input::mouseScroll() const -> const double * {
 	return m_mouse_curr.scroll.data();
 }
 
-double Input::scrollDeltaX() const {
+auto Input::scrollDeltaX() const -> double {
 	return m_mouse_curr.scroll[0];
 }
 
-double Input::scrollDeltaY() const {
+auto Input::scrollDeltaY() const -> double {
 	return m_mouse_curr.scroll[1];
 }
 
@@ -90,15 +90,15 @@ void Input::mouseBtn(const MouseButton btn, bool state) {
 	}
 }
 
-bool Input::mouseDown(const MouseButton btn) const {
+auto Input::mouseDown(const MouseButton btn) const -> bool {
 	return m_mouse_curr.buttons & btn;
 }
 
-bool Input::mousePressed(const MouseButton btn) const {
+auto Input::mousePressed(const MouseButton btn) const -> bool {
 	return (m_mouse_curr.buttons & btn) && !(m_mouse_last.buttons & btn);
 }
 
-bool Input::mouseReleased(const MouseButton btn) const {
+auto Input::mouseReleased(const MouseButton btn) const -> bool {
 	return !(m_mouse_curr.buttons & btn) && (m_mouse_last.buttons & btn);
 }
 
@@ -114,11 +114,11 @@ void Input::joystickDisconnect(int id) {
 	m_joydata[id] = Joystick();
 }
 
-bool Input::hasJoystick(int id) const {
+auto Input::hasJoystick(int id) const -> bool {
 	return m_joysticks[id];
 }
 
-const fggl::gfx::Joystick &Input::joystick(int id) const {
+auto Input::joystick(int id) const -> const fggl::gfx::Joystick & {
 	return m_joydata[id];
 }
 
@@ -126,22 +126,22 @@ void Input::padState(int id, const PadState &state) {
 	m_pad_curr[id] = state;
 }
 
-bool Input::padDown(int id, PadButton btn) {
+auto Input::padDown(int id, PadButton btn) -> bool {
 	return m_pad_curr[id].buttons[(int) btn];
 }
 
-bool Input::padPressed(int id, PadButton btn) {
+auto Input::padPressed(int id, PadButton btn) -> bool {
 	return m_pad_curr[id].buttons[(int) btn] && !m_pad_last[id].buttons[(int) btn];
 }
 
-bool Input::padReleased(int id, PadButton btn) {
+auto Input::padReleased(int id, PadButton btn) -> bool {
 	return !m_pad_curr[id].buttons[(int) btn] && m_pad_last[id].buttons[(int) btn];
 }
 
-float Input::padAxis(int id, PadAxis axis) {
+auto Input::padAxis(int id, PadAxis axis) -> float {
 	return m_pad_curr[id].axes[(int) axis];
 }
 
-float Input::padAxisDelta(int id, PadAxis axis) {
+auto Input::padAxisDelta(int id, PadAxis axis) -> float {
 	return m_pad_last[id].axes[(int) axis] - m_pad_curr[id].axes[(int) axis];
 }
diff --git a/fggl/gfx/ogl/renderer.cpp b/fggl/gfx/ogl/renderer.cpp
index 772920c..f35642c 100644
--- a/fggl/gfx/ogl/renderer.cpp
+++ b/fggl/gfx/ogl/renderer.cpp
@@ -151,7 +151,7 @@ namespace fggl::gfx {
 		}
 	}
 
-	static ogl::Image make_solid(uint8_t width, uint8_t height, GLuint colour) {
+	static auto make_solid(uint8_t width, uint8_t height, GLuint colour) -> ogl::Image {
 
 		auto *texData = new GLuint[width * height];
 		for (int i = 0; i < width * height; ++i) {
diff --git a/fggl/gfx/ogl/shader.cpp b/fggl/gfx/ogl/shader.cpp
index 6ba49c4..31d96b6 100644
--- a/fggl/gfx/ogl/shader.cpp
+++ b/fggl/gfx/ogl/shader.cpp
@@ -23,7 +23,7 @@
 
 namespace fggl::gfx {
 
-	bool ShaderCache::compileShaderFromSource(const std::string &source, GLuint sid) {
+	auto ShaderCache::compileShaderFromSource(const std::string &source, GLuint sid) -> bool {
 		// upload and compile shader
 		const char *src = source.c_str();
 		glShaderSource(sid, 1, &src, nullptr);
@@ -47,7 +47,7 @@ namespace fggl::gfx {
 		return true;
 	}
 
-	bool ShaderCache::readAndCompileShader(const std::string &filename, GLuint shader) {
+	auto ShaderCache::readAndCompileShader(const std::string &filename, GLuint shader) -> bool {
 		std::string source;
 		bool result = m_storage->load(fggl::data::Data, filename, &source);
 		if (!result) {
@@ -89,7 +89,7 @@ namespace fggl::gfx {
 
 	}
 
-	bool ShaderCache::loadFromDisk(GLuint pid, const std::string &pipelineName) {
+	auto ShaderCache::loadFromDisk(GLuint pid, const std::string &pipelineName) -> bool {
 
 		BinaryCache cache;
 		auto fname = "shader_" + pipelineName + ".bin";
@@ -113,7 +113,7 @@ namespace fggl::gfx {
 		m_storage->save(fggl::data::Cache, fname, &cache);
 	}
 
-	ShaderCache::ShaderPtr ShaderCache::getOrLoad(const ShaderConfig &config) {
+	auto ShaderCache::getOrLoad(const ShaderConfig &config) -> ShaderCache::ShaderPtr {
 		try {
 			return m_shaders.at(config.name);
 		} catch (std::out_of_range &e) {
@@ -121,7 +121,7 @@ namespace fggl::gfx {
 		}
 	}
 
-	ShaderCache::ShaderPtr ShaderCache::get(const std::string &name) {
+	auto ShaderCache::get(const std::string &name) -> ShaderCache::ShaderPtr {
 		auto itr = m_shaders.find(name);
 		if ( itr != m_shaders.end() ){
 			return itr->second;
@@ -129,7 +129,7 @@ namespace fggl::gfx {
 		return nullptr;
 	}
 
-	ShaderCache::ShaderPtr ShaderCache::load(const ShaderConfig &config) {
+	auto ShaderCache::load(const ShaderConfig &config) -> ShaderCache::ShaderPtr {
 		spdlog::debug("starting shader program generation for {}", config.name);
 
 		GLuint pid = glCreateProgram();
@@ -200,7 +200,7 @@ namespace fggl::gfx {
 		return shaderPtr;
 	}
 
-	ShaderCache::ShaderPtr ShaderCache::load(const ShaderSources &sources, bool allowBinaryCache) {
+	auto ShaderCache::load(const ShaderSources &sources, bool allowBinaryCache) -> ShaderCache::ShaderPtr {
 
 		spdlog::debug("starting shader program generation for {}", sources.name);
 
@@ -281,7 +281,7 @@ namespace fggl::gfx {
 		glGetProgramBinary(pid, length, &cache->size, &cache->format, cache->data);
 	}
 
-	bool ShaderCache::cacheLoad(GLuint pid, const BinaryCache *cache) {
+	auto ShaderCache::cacheLoad(GLuint pid, const BinaryCache *cache) -> bool {
 		if (!m_binary) {
 			return false;
 		}
@@ -306,7 +306,7 @@ namespace fggl::gfx {
 }
 
 	template<>
-	bool fggl::data::fggl_deserialize(std::filesystem::path &data, fggl::gfx::BinaryCache *out) {
+	auto fggl::data::fggl_deserialize(std::filesystem::path &data, fggl::gfx::BinaryCache *out) -> bool {
 		auto* f =
 			#ifdef _MSC_VER
 			_wfopen(data.c_str(), L"r");
@@ -350,7 +350,7 @@ namespace fggl::gfx {
 
 
 template<>
-bool fggl::data::fggl_deserialize(std::filesystem::path &data, std::string *out) {
+auto fggl::data::fggl_deserialize(std::filesystem::path &data, std::string *out) -> bool {
 	std::ifstream ifs(data);
 	out->assign((std::istreambuf_iterator<char>(ifs)),
 				(std::istreambuf_iterator<char>()));
@@ -358,10 +358,10 @@ bool fggl::data::fggl_deserialize(std::filesystem::path &data, std::string *out)
 }
 
 template<>
-bool fggl::data::fggl_serialize(std::filesystem::path &data, const fggl::gfx::BinaryCache *out) {
+auto fggl::data::fggl_serialize(std::filesystem::path &data, const fggl::gfx::BinaryCache *out) -> bool {
 
 	// try and write
-	auto f =
+	auto *f =
 		#ifdef _MSC_VER
 		_wfopen( data.c_str(), L"w");
 		#else
diff --git a/fggl/gfx/ogl/types.cpp b/fggl/gfx/ogl/types.cpp
index 2753c28..a72dde8 100644
--- a/fggl/gfx/ogl/types.cpp
+++ b/fggl/gfx/ogl/types.cpp
@@ -44,7 +44,7 @@ namespace fggl::gfx::ogl {
 		other.m_obj = 0;
 	}
 
-	VertexArray &VertexArray::operator=(VertexArray &&other) {
+	auto VertexArray::operator=(VertexArray &&other) -> VertexArray & {
 		if (this != &other) {
 			release();
 			std::swap(m_obj, other.m_obj);
diff --git a/fggl/gfx/ogl4/canvas.cpp b/fggl/gfx/ogl4/canvas.cpp
index 95aa89a..00da747 100644
--- a/fggl/gfx/ogl4/canvas.cpp
+++ b/fggl/gfx/ogl4/canvas.cpp
@@ -161,7 +161,7 @@ namespace fggl::gfx::ogl4 {
 
 		// setup the shader
 		shader.use();
-		auto projMat = glm::ortho(0.0f, 1920.0f, 1080.0f, 0.f);
+		auto projMat = glm::ortho(0.0F, 1920.0F, 1080.0F, 0.F);
 		shader.setUniformMtx(shader.uniform("projection"), projMat);
 
 		// bind the vbo we'll use for writing
diff --git a/fggl/gfx/ogl4/meshes.cpp b/fggl/gfx/ogl4/meshes.cpp
index c0f0c2f..7ccae92 100644
--- a/fggl/gfx/ogl4/meshes.cpp
+++ b/fggl/gfx/ogl4/meshes.cpp
@@ -23,8 +23,8 @@
 
 namespace fggl::gfx::ogl4 {
 
-	static std::shared_ptr<ogl::ArrayBuffer> setup_array_buffer(std::shared_ptr<ogl::VertexArray> &vao,
-															  const std::vector<mesh::Vertex3D> &data) {
+	static auto setup_array_buffer(std::shared_ptr<ogl::VertexArray> &vao,
+															  const std::vector<mesh::Vertex3D> &data) -> std::shared_ptr<ogl::ArrayBuffer> {
 		// upload the data to the GPU
 		auto buff = std::make_shared<ogl::ArrayBuffer>();
 		buff->write(data.size() * sizeof(mesh::Vertex3D), data.data(), ogl::BufUsage::STATIC_DRAW);
@@ -43,7 +43,7 @@ namespace fggl::gfx::ogl4 {
 		return buff;
 	}
 
-	static std::shared_ptr<ogl::ElementBuffer> setup_index_buffer(const std::vector<uint32_t>& data) {
+	static auto setup_index_buffer(const std::vector<uint32_t>& data) -> std::shared_ptr<ogl::ElementBuffer> {
 		auto elementBuffer = std::make_shared<ogl::ElementBuffer>();
 		elementBuffer->write(data.size() * sizeof(uint32_t),
 							 data.data(), ogl::BufUsage::STATIC_DRAW);
@@ -148,9 +148,9 @@ namespace fggl::gfx::ogl4 {
 		shader->setUniformI(shader->uniform("lights[0].isLocal"), local);
 		shader->setUniformI(shader->uniform("lights[0].isSpot"), 0);
 
-		shader->setUniformF(shader->uniform("lights[0].constantAttenuation"), 5.0f);
-		shader->setUniformF(shader->uniform("lights[0].linearAttenuation"), 0.0f);
-		shader->setUniformF(shader->uniform("lights[0].quadraticAttenuation"), 0.0f);
+		shader->setUniformF(shader->uniform("lights[0].constantAttenuation"), 5.0F);
+		shader->setUniformF(shader->uniform("lights[0].linearAttenuation"), 0.0F);
+		shader->setUniformF(shader->uniform("lights[0].quadraticAttenuation"), 0.0F);
 
 		shader->setUniformF(shader->uniform("Strength"), 0.6F);
 
@@ -162,20 +162,20 @@ namespace fggl::gfx::ogl4 {
 			shader->setUniformF(shader->uniform("EyeDirection"), viewDir);
 			shader->setUniformF(shader->uniform("lights[0].position"), lightPos);
 		} else {
-			auto camModelView = (viewMatrix * camTransform.model() * math::vec4(0.0f, 0.0f, 0.0f, 1.0f));
-			auto modelModelView = (viewMatrix * transform.model() * math::vec4(0.0f, 0.0f, 0.0f, 1.0f));
+			auto camModelView = (viewMatrix * camTransform.model() * math::vec4(0.0F, 0.0F, 0.0F, 1.0F));
+			auto modelModelView = (viewMatrix * transform.model() * math::vec4(0.0F, 0.0F, 0.0F, 1.0F));
 			math::vec3 viewDir = glm::normalize(camModelView - modelModelView);
 			shader->setUniformF(shader->uniform("EyeDirection"), viewDir);
 
 			shader->setUniformF(shader->uniform("lights[0].position"),
-								math::vec3(viewMatrix * math::vec4(lightPos, 1.0f)));
+								math::vec3(viewMatrix * math::vec4(lightPos, 1.0F)));
 		}
 
-		shader->setUniformF(shader->uniform("lights[0].ambient"), {0.0f, 0.5f, 0.0f});
-		shader->setUniformF(shader->uniform("lights[0].colour"), {0.5f, 0.5f, 0.5f});
+		shader->setUniformF(shader->uniform("lights[0].ambient"), {0.0F, 0.5F, 0.0F});
+		shader->setUniformF(shader->uniform("lights[0].colour"), {0.5F, 0.5F, 0.5F});
 	}
 
-	static ogl::Texture* upload_texture( assets::AssetID name, assets::AssetManager* manager ) {
+	static auto upload_texture( assets::AssetID name, assets::AssetManager* manager ) -> ogl::Texture* {
 		debug::info("loading texture: {}", name.get());
 
 		auto uploadedTex = assets::make_asset_id_rt("ogl", std::to_string(name.get()) );
@@ -184,7 +184,7 @@ namespace fggl::gfx::ogl4 {
 			return texture;
 		}
 
-		auto textureData = manager->get<data::Texture2D>(name);
+		auto *textureData = manager->get<data::Texture2D>(name);
 		ogl::Image image{
 			.type = ogl::PixelFormat::UNSIGNED_BYTE,
 			.format = ogl::ImageFormat::RGB,
@@ -198,13 +198,13 @@ namespace fggl::gfx::ogl4 {
 		return manager->set(uploadedTex, texture);
 	}
 
-	static Material* get_fallback_material(assets::AssetManager* manager) {
+	static auto get_fallback_material(assets::AssetManager* manager) -> Material* {
 		auto* fallback = manager->get<Material>(FALLBACK_MAT);
 		if ( fallback != nullptr ) {
 			return fallback;
 		}
 
-		Material* mat = new Material();
+		auto* mat = new Material();
 		mat->m_diffCol = FALLBACK_COLOUR;
 		mat->m_specCol= FALLBACK_COLOUR;
 
@@ -214,7 +214,7 @@ namespace fggl::gfx::ogl4 {
 		return manager->set(FALLBACK_MAT, mat);
 	}
 
-	static Material* upload_material( assets::AssetID name, assets::AssetManager* manager ) {
+	static auto upload_material( assets::AssetID name, assets::AssetManager* manager ) -> Material* {
 		auto* meshMaterial = manager->get<mesh::Material>(name);
 		if ( meshMaterial == nullptr ){
 			debug::error("attempted to load material {}, but did not exist!", name.get());
@@ -255,7 +255,7 @@ namespace fggl::gfx::ogl4 {
 		return manager->set( uploadedMat, material);
 	}
 
-	MeshData upload_mesh(const mesh::Mesh3D& rawMesh, assets::AssetManager* manager) {
+	auto upload_mesh(const mesh::Mesh3D& rawMesh, assets::AssetManager* manager) -> MeshData {
 		auto vao = std::make_shared<ogl::VertexArray>();
 		return {
 			.vao = vao,
@@ -267,7 +267,7 @@ namespace fggl::gfx::ogl4 {
 		};
 	}
 
-	std::vector<MeshData> upload_multi_mesh(const mesh::MultiMesh3D& rawMesh, assets::AssetManager* manager) {
+	auto upload_multi_mesh(const mesh::MultiMesh3D& rawMesh, assets::AssetManager* manager) -> std::vector<MeshData> {
 		std::vector<MeshData> gpuMeshes;
 		for (const auto& mesh : rawMesh.meshes) {
 			gpuMeshes.push_back( upload_mesh(mesh, manager) );
diff --git a/fggl/gfx/ogl4/models.cpp b/fggl/gfx/ogl4/models.cpp
index 831b3a2..c063618 100644
--- a/fggl/gfx/ogl4/models.cpp
+++ b/fggl/gfx/ogl4/models.cpp
@@ -28,8 +28,8 @@
 
 namespace fggl::gfx::ogl4 {
 
-	static std::shared_ptr<ogl::ArrayBuffer> setup_array_buffer(std::shared_ptr<ogl::VertexArray> &vao,
-															  const std::vector<data::Vertex> &data) {
+	static auto setup_array_buffer(std::shared_ptr<ogl::VertexArray> &vao,
+															  const std::vector<data::Vertex> &data) -> std::shared_ptr<ogl::ArrayBuffer> {
 		auto buff = std::make_shared<ogl::ArrayBuffer>();
 		buff->write(data.size() * sizeof(data::Vertex), data.data(), ogl::BufUsage::STATIC_DRAW);
 
@@ -45,8 +45,8 @@ namespace fggl::gfx::ogl4 {
 	}
 
 
-	static std::shared_ptr<ogl::ElementBuffer> setup_index_buffer(std::shared_ptr<ogl::VertexArray> &vao,
-																const std::vector<uint32_t> &data) {
+	static auto setup_index_buffer(std::shared_ptr<ogl::VertexArray> &vao,
+																const std::vector<uint32_t> &data) -> std::shared_ptr<ogl::ElementBuffer> {
 		auto elementBuffer = std::make_shared<ogl::ElementBuffer>();
 		elementBuffer->write(data.size() * sizeof(uint32_t),
 							 data.data(), ogl::BufUsage::STATIC_DRAW);
@@ -67,7 +67,7 @@ namespace fggl::gfx::ogl4 {
 		modelComp.drawType = ogl::Primitive::TRIANGLE;
 	}
 
-	StaticModel* StaticModelRenderer::uploadMesh(assets::AssetID guid, const data::Mesh &mesh, bool allowCache) {
+	auto StaticModelRenderer::uploadMesh(assets::AssetID guid, const data::Mesh &mesh, bool allowCache) -> StaticModel* {
 		assert( m_assets != nullptr );
 
 		// if the asset has already been uploaded, we don't need to do anything
@@ -117,7 +117,7 @@ namespace fggl::gfx::ogl4 {
 		return modelAsset;
 	}*/
 
-	StaticModelGPU* StaticModelRenderer::uploadMesh2(const assets::AssetID& meshName, const data::Mesh &mesh) {
+	auto StaticModelRenderer::uploadMesh2(const assets::AssetID& meshName, const data::Mesh &mesh) -> StaticModelGPU* {
 		assert( m_assets != nullptr );
 
 		if ( m_assets->has(meshName) ) {
@@ -191,8 +191,8 @@ namespace fggl::gfx::ogl4 {
 
 			// terrain
 			auto terrain = world.find<data::HeightMap>();
-			for (auto &renderable : terrain) {
-				auto currModel = world.tryGet<StaticModel>(renderable);
+			for (const auto &renderable : terrain) {
+				auto *currModel = world.tryGet<StaticModel>(renderable);
 				if (currModel != nullptr) {
 					continue;
 				}
diff --git a/fggl/gfx/ogl4/module.cpp b/fggl/gfx/ogl4/module.cpp
index 534b016..8757be7 100644
--- a/fggl/gfx/ogl4/module.cpp
+++ b/fggl/gfx/ogl4/module.cpp
@@ -82,7 +82,7 @@ namespace fggl::gfx {
 					mesh::MultiMesh3D* multiMesh;
 
 					for (const auto &node : spec.config["shape"]) {
-						mesh::Mesh3D* meshAsset = new mesh::Mesh3D();
+						auto* meshAsset = new mesh::Mesh3D();
 						process_shape(node, *meshAsset);
 						multiMesh->meshes.push_back(*meshAsset);
 						delete meshAsset;
@@ -99,7 +99,7 @@ namespace fggl::gfx {
 					#endif
 
 				} else {
-					mesh::Mesh3D* meshAsset = new mesh::Mesh3D();
+					auto* meshAsset = new mesh::Mesh3D();
 					process_shape(spec.config["shape"], *meshAsset);
 
 					#ifdef FGGL_ALLOW_DEFERRED_UPLOAD
@@ -169,7 +169,7 @@ namespace fggl::gfx {
 		light.quadratic = spec.get<float>("quadratic", 0.000007F);
 	}
 
-	bool OpenGL4::factory(modules::ModuleService service, modules::Services &services) {
+	auto OpenGL4::factory(modules::ModuleService service, modules::Services &services) -> bool {
 		if (service == WindowGraphics::service) {
 			// setup the thing responsible for graphics
 			auto *storage = services.get<data::Storage>();
diff --git a/fggl/gfx/ogl4/setup.cpp b/fggl/gfx/ogl4/setup.cpp
index 85fbde7..7668b21 100644
--- a/fggl/gfx/ogl4/setup.cpp
+++ b/fggl/gfx/ogl4/setup.cpp
@@ -20,7 +20,7 @@
 
 namespace fggl::gfx::ogl4 {
 
-	Graphics *WindowGraphics::create(display::Window &window) {
+	auto WindowGraphics::create(display::Window &window) -> Graphics * {
 		return new OpenGL4Backend(m_storage, m_fonts, m_assets, (GlFunctionLoader)glfwGetProcAddress);
 	}
 
diff --git a/fggl/gfx/window.cpp b/fggl/gfx/window.cpp
index 43ddacd..cf1da9c 100644
--- a/fggl/gfx/window.cpp
+++ b/fggl/gfx/window.cpp
@@ -218,14 +218,14 @@ namespace fggl::display::glfw {
 		glfwMakeContextCurrent(m_window);
 	}
 
-	fggl::math::vec2i Window::frameSize() const {
+	auto Window::frameSize() const -> fggl::math::vec2i {
 		assert(m_window != nullptr);
 		math::vec2i size;
 		glfwGetFramebufferSize(m_window, &size.x, &size.y);
 		return size;
 	}
 
-	bool Window::wantClose() const {
+	auto Window::wantClose() const -> bool {
 		assert(m_window != nullptr);
 		return glfwWindowShouldClose(m_window) == GLFW_TRUE;
 	}
diff --git a/fggl/gui/containers.cpp b/fggl/gui/containers.cpp
index 9626b7d..15da806 100644
--- a/fggl/gui/containers.cpp
+++ b/fggl/gui/containers.cpp
@@ -17,7 +17,7 @@
 
 namespace fggl::gui {
 
-	Widget *Container::getChildAt(const math::vec2 &point) {
+	auto Container::getChildAt(const math::vec2 &point) -> Widget * {
 		for (auto &child : m_children) {
 			if (child->contains(point)) {
 				return child->getChildAt(point);
@@ -27,7 +27,7 @@ namespace fggl::gui {
 		return nullptr;
 	}
 
-	bool Container::contains(const math::vec2 &point) {
+	auto Container::contains(const math::vec2 &point) -> bool {
 		return true;
 	}
 
@@ -82,8 +82,8 @@ namespace fggl::gui {
 			int rows = m_children.size() / m_cols;
 
 			// figure out the width and heights
-			float* widths = new float[m_cols]{0.0F};
-			float* heights = new float[rows]{0.0F};
+			auto* widths = new float[m_cols]{0.0F};
+			auto* heights = new float[rows]{0.0F};
 			for ( auto idx = 0U; idx < m_children.size(); ++idx) {
 				auto& child = m_children[idx];
 				int col = idx % m_cols;
@@ -145,7 +145,7 @@ namespace fggl::gui {
 	void Panel::render(gfx::Paint &paint) {
 		// background painting time
 		gfx::Path2D background(topLeft());
-		background.colour(math::vec3(32.0f / 255.0f, 74.0F / 255.0F, 135.0F / 255.0F));
+		background.colour(math::vec3(32.0F / 255.0F, 74.0F / 255.0F, 135.0F / 255.0F));
 		draw_box(background, topLeft(), bottomRight());
 		paint.fill(background);
 
diff --git a/fggl/gui/fonts.cpp b/fggl/gui/fonts.cpp
index a8d91a9..172cc47 100644
--- a/fggl/gui/fonts.cpp
+++ b/fggl/gui/fonts.cpp
@@ -37,7 +37,7 @@ namespace fggl::gui {
 		FT_Done_FreeType(m_context);
 	}
 
-	GlyphMetrics &FontFace::populateMetrics(char letter) {
+	auto FontFace::populateMetrics(char letter) -> GlyphMetrics & {
 		if (FT_Load_Char(m_face, letter, FT_LOAD_RENDER)) {
 			// something bad happened
 			return m_metrics['?'];
diff --git a/fggl/gui/widget.cpp b/fggl/gui/widget.cpp
index 08b92d4..94809b4 100644
--- a/fggl/gui/widget.cpp
+++ b/fggl/gui/widget.cpp
@@ -22,7 +22,7 @@ namespace fggl::gui {
 
 	void button_border(gfx::Path2D &path, glm::vec2 pos, glm::vec2 size) {
 		// outer box
-		path.colour({1.0f, 0.0f, 0.0f});
+		path.colour({1.0F, 0.0F, 0.0F});
 		path.pathTo({pos.x + size.x, pos.y});
 		path.pathTo({pos.x + size.x, pos.y + size.y});
 		path.pathTo({pos.x, pos.y + size.y});
@@ -32,7 +32,7 @@ namespace fggl::gui {
 		math::vec2 innerTop{pos.x + 5, pos.y + 5};
 		math::vec2 innerBottom{pos.x + size.x - 5, pos.y + size.y - 5};
 
-		path.colour({1.0f, 1.0f, 0.0f});
+		path.colour({1.0F, 1.0F, 0.0F});
 		path.moveTo({innerTop.x, innerTop.y});
 		path.pathTo({innerBottom.x, innerTop.y});
 		path.pathTo({innerBottom.x, innerBottom.y});
@@ -52,7 +52,7 @@ namespace fggl::gui {
 		const auto bottomRight{topLeft + size};
 
 		// background
-		path.colour({0.5f, 0.5f, 0.5f});
+		path.colour({0.5F, 0.5F, 0.5F});
 		draw_box(path, topLeft, bottomRight);
 
 		// fill
@@ -65,13 +65,13 @@ namespace fggl::gui {
 		innerBottom.x = innerTop.x + barWidth;
 
 		// draw the bar
-		path.colour({0.8f, 0.0f, 0.0f});
+		path.colour({0.8F, 0.0F, 0.0F});
 		draw_box(path, innerTop, innerBottom);
 
 		// part of the bar that's not filled in
 		math::vec2 emptyTop{innerBottom.x, innerTop.y};
 		math::vec2 emptyBottom{trueBottom, innerBottom.y};
-		path.colour({0.4f, 0.0f, 0.0f});
+		path.colour({0.4F, 0.0F, 0.0F});
 		draw_box(path, emptyTop, emptyBottom);
 	}
 
@@ -90,7 +90,7 @@ namespace fggl::gui {
 
 		math::vec2 selectorTop{innerTop.x + selectorValue - (selectorWidth / 2), topLeft.y};
 		math::vec2 selectorBottom{selectorTop.x + selectorWidth, bottomRight.y};
-		path.colour({1.0f, 1.0f, 1.0f});
+		path.colour({1.0F, 1.0F, 1.0F});
 		draw_box(path, selectorTop, selectorBottom);
 	}
 
@@ -101,18 +101,18 @@ namespace fggl::gui {
 		math::vec2 innerTop{pos.x + 5, pos.y + 5};
 		math::vec2 innerBottom{pos.x + size.x - 5, pos.y + size.y - 5};
 
-		math::vec3 baseColour{0.5f, 0.5f, 0.5f};
+		math::vec3 baseColour{0.5F, 0.5F, 0.5F};
 
 		if (active) {
-			baseColour *= 1.2f;
+			baseColour *= 1.2F;
 		}
 
 		if (pressed) {
-			baseColour *= 0.8f;
+			baseColour *= 0.8F;
 		}
 
-		math::vec3 lightColour{baseColour * 1.2f};
-		math::vec3 darkColour{baseColour * 0.8f};
+		math::vec3 lightColour{baseColour * 1.2F};
+		math::vec3 darkColour{baseColour * 0.8F};
 		if (pressed) {
 			// flip light and dark for selected buttons
 			auto tmp = darkColour;
diff --git a/fggl/gui/widgets.cpp b/fggl/gui/widgets.cpp
index 967e857..829288e 100644
--- a/fggl/gui/widgets.cpp
+++ b/fggl/gui/widgets.cpp
@@ -55,7 +55,7 @@ namespace fggl::gui {
 		m_label.size(topLeft(), size());
 	}
 
-	std::string Button::label() const {
+	auto Button::label() const -> std::string {
 		return m_label.text();
 	}
 
diff --git a/fggl/input/camera_input.cpp b/fggl/input/camera_input.cpp
index 8313492..17eb212 100644
--- a/fggl/input/camera_input.cpp
+++ b/fggl/input/camera_input.cpp
@@ -27,10 +27,10 @@ namespace fggl::input {
 		// see https://asliceofrendering.com/camera/2019/11/30/ArcballCamera/
 		auto &camTransform = ecs.get<fggl::math::Transform>(cam);
 		auto &camComp = ecs.get<fggl::gfx::Camera>(cam);
-		auto &mouse = input.mouse;
+		const auto &mouse = input.mouse;
 
-		glm::vec4 position(camTransform.origin(), 1.0f);
-		glm::vec4 pivot(camComp.target, 1.0f);
+		glm::vec4 position(camTransform.origin(), 1.0F);
+		glm::vec4 pivot(camComp.target, 1.0F);
 		glm::mat4 view = glm::lookAt(camTransform.origin(), camComp.target, camTransform.up());
 		glm::vec3 viewDir = -glm::transpose(view)[2];
 		glm::vec3 rightDir = glm::transpose(view)[0];
@@ -41,12 +41,12 @@ namespace fggl::input {
 		float yAngle = (-mouse.axisDelta(fggl::input::MouseAxis::Y)) * deltaAngleY;
 
 		// rotate the camera around the pivot on the first axis
-		glm::mat4x4 rotationMatrixX(1.0f);
+		glm::mat4x4 rotationMatrixX(1.0F);
 		rotationMatrixX = glm::rotate(rotationMatrixX, xAngle, fggl::math::UP);
 		position = (rotationMatrixX * (position - pivot)) + pivot;
 
 		// rotate the camera around the pivot on the second axis
-		glm::mat4x4 rotationMatrixY(1.0f);
+		glm::mat4x4 rotationMatrixY(1.0F);
 		rotationMatrixY = glm::rotate(rotationMatrixY, yAngle, rightDir);
 		glm::vec3 finalPos = (rotationMatrixY * (position - pivot)) + pivot;
 
@@ -66,17 +66,17 @@ namespace fggl::input {
 
 		glm::vec3 motion(0.0F);
 		float delta = input.mouse.axis(fggl::input::MouseAxis::SCROLL_Y);
-		if ((glm::length(dir) < maxZoom && delta < 0.0f) || (glm::length(dir) > minZoom && delta > 0.0f)) {
+		if ((glm::length(dir) < maxZoom && delta < 0.0F) || (glm::length(dir) > minZoom && delta > 0.0F)) {
 			motion -= (forward * delta);
 			camTransform.origin(camTransform.origin() + motion);
 		}
 	}
 
 	void process_freecam(entity::EntityManager &ecs, const Input &input, entity::EntityID cam) {
-		float rotationValue = 0.0f;
-		glm::vec3 translation(0.0f);
+		float rotationValue = 0.0F;
+		glm::vec3 translation(0.0F);
 
-		auto &keyboard = input.keyboard;
+		const auto &keyboard = input.keyboard;
 		auto &settings = ecs.get<FreeCamKeys>(cam);
 
 		// calculate rotation (user input)
@@ -107,24 +107,24 @@ namespace fggl::input {
 		auto camTransform = ecs.get<fggl::math::Transform>(cam);
 		auto camComp = ecs.get<fggl::gfx::Camera>(cam);
 
-		glm::vec4 position(camTransform.origin(), 1.0f);
-		glm::vec4 pivot(camComp.target, 1.0f);
+		glm::vec4 position(camTransform.origin(), 1.0F);
+		glm::vec4 pivot(camComp.target, 1.0F);
 
 		// apply movement
-		if (translation != glm::vec3(0.0f)) {
+		if (translation != glm::vec3(0.0F)) {
 			const auto rotation = (position - pivot);
 			const float angle = atan2f(rotation.x, rotation.z);
 			const auto rotationMat = glm::rotate(MAT_IDENTITY, angle, fggl::math::UP);
 
-			auto deltaMove = (rotationMat * glm::vec4(translation, 1.0f)) * PAN_SPEED;
-			deltaMove.w = 0.0f;
+			auto deltaMove = (rotationMat * glm::vec4(translation, 1.0F)) * PAN_SPEED;
+			deltaMove.w = 0.0F;
 
 			position += deltaMove;
 			pivot += deltaMove;
 		}
 
 		// apply rotation
-		if (rotationValue != 0.0f) {
+		if (rotationValue != 0.0F) {
 			glm::mat4 rotation = glm::rotate(MAT_IDENTITY, rotationValue, fggl::math::UP);
 			position = (rotation * (position - pivot)) + pivot;
 		}
@@ -134,24 +134,24 @@ namespace fggl::input {
 	}
 
 	void process_edgescroll(entity::EntityManager &ecs, const Input &input, entity::EntityID cam) {
-		glm::vec3 translation(0.0f);
+		glm::vec3 translation(0.0F);
 
-		auto &mouse = input.mouse;
+		const auto &mouse = input.mouse;
 
 		// calculate movement (user input)
-		if (mouse.axis(MouseAxis::Y) < 0.9f) {
+		if (mouse.axis(MouseAxis::Y) < 0.9F) {
 			translation -= fggl::math::RIGHT;
 		}
 
-		if (mouse.axis(MouseAxis::Y) > -0.9f) {
+		if (mouse.axis(MouseAxis::Y) > -0.9F) {
 			translation += fggl::math::RIGHT;
 		}
 
-		if (mouse.axis(MouseAxis::X) > -0.9f) {
+		if (mouse.axis(MouseAxis::X) > -0.9F) {
 			translation += fggl::math::FORWARD;
 		}
 
-		if (mouse.axis(MouseAxis::X) < 0.9f) {
+		if (mouse.axis(MouseAxis::X) < 0.9F) {
 			translation -= fggl::math::FORWARD;
 		}
 
@@ -159,17 +159,17 @@ namespace fggl::input {
 		auto &camTransform = ecs.get<fggl::math::Transform>(cam);
 		auto &camComp = ecs.get<fggl::gfx::Camera>(cam);
 
-		glm::vec4 position(camTransform.origin(), 1.0f);
-		glm::vec4 pivot(camComp.target, 1.0f);
+		glm::vec4 position(camTransform.origin(), 1.0F);
+		glm::vec4 pivot(camComp.target, 1.0F);
 
 		// apply movement
-		if (translation != glm::vec3(0.0f)) {
+		if (translation != glm::vec3(0.0F)) {
 			const auto rotation = (position - pivot);
 			const float angle = atan2f(rotation.x, rotation.z);
 			const auto rotationMat = glm::rotate(MAT_IDENTITY, angle, fggl::math::UP);
 
-			auto deltaMove = (rotationMat * glm::vec4(translation, 1.0f)) * PAN_SPEED;
-			deltaMove.w = 0.0f;
+			auto deltaMove = (rotationMat * glm::vec4(translation, 1.0F)) * PAN_SPEED;
+			deltaMove.w = 0.0F;
 
 			position += deltaMove;
 			pivot += deltaMove;
diff --git a/fggl/math/shapes.cpp b/fggl/math/shapes.cpp
index 4d093db..333caba 100644
--- a/fggl/math/shapes.cpp
+++ b/fggl/math/shapes.cpp
@@ -27,7 +27,7 @@ namespace fggl::math::phs3d {
 		max = maxElm(max, point);
 	}
 
-	AABB AABB::fromPoints(const std::vector<math::vec3> &points) {
+	auto AABB::fromPoints(const std::vector<math::vec3> &points) -> AABB {
 		AABB box;
 		for (const auto &point : points) {
 			box.add(point);
@@ -42,7 +42,7 @@ namespace fggl::math::phs3d {
 		// this feels like something that should be vectorizable...
 		for (int i = 0; i < 3; i++) {
 			for (int j = 0; j < 3; j++) {
-				if (m[i][j] > 0.0f) {
+				if (m[i][j] > 0.0F) {
 					min[j] += m[i][j] * other.min[j];
 					max[j] += m[i][j] * other.max[j];
 				} else {
@@ -53,7 +53,7 @@ namespace fggl::math::phs3d {
 		}
 	}
 
-	Plane Plane::fromPoints(const math::vec3 p1, const math::vec3 p2, const math::vec3 p3) {
+	auto Plane::fromPoints(const math::vec3 p1, const math::vec3 p2, const math::vec3 p3) -> Plane {
 		const auto e3 = p2 - p1;
 		const auto e1 = p3 - p2;
 		auto normal = glm::normalize(glm::cross(e3, e1));
@@ -61,7 +61,7 @@ namespace fggl::math::phs3d {
 		return {normal, d};
 	}
 
-	static math::vec3 bestFitNormal(const std::vector<math::vec3> &points) {
+	static auto bestFitNormal(const std::vector<math::vec3> &points) -> math::vec3 {
 		assert(!points.empty());
 
 		math::vec3 result;
@@ -80,9 +80,9 @@ namespace fggl::math::phs3d {
 		return glm::normalize(result);
 	};
 
-	static float bestFitD(const std::vector<math::vec3> &points, glm::vec3 normal) {
+	static auto bestFitD(const std::vector<math::vec3> &points, glm::vec3 normal) -> float {
 		math::vec3 sum;
-		for (auto &point : points) {
+		for (const auto &point : points) {
 			sum += point;
 		}
 		sum *= 1.0F / points.size();
@@ -98,7 +98,7 @@ namespace fggl::math::phs3d {
 		const char b;
 	};
 
-	static bary_axis baryCalcAxis(const math::vec3 &normal) {
+	static auto baryCalcAxis(const math::vec3 &normal) -> bary_axis {
 		if ((fabs(normal.x) >= fabs(normal.y)) && (fabs(normal.x) >= fabs(normal.z))) {
 			// discard x
 			return {Y, Z};
@@ -111,7 +111,7 @@ namespace fggl::math::phs3d {
 		}
 	}
 
-	bool Triangle::CartToBarycentric(const math::vec3 &cart, Barycentric &outVal) {
+	auto Triangle::CartToBarycentric(const math::vec3 &cart, Barycentric &outVal) -> bool {
 		// everything is const because I'm paying the compiler is smarter than me...
 
 		const auto d1 = v[1] - v[0];
@@ -134,19 +134,19 @@ namespace fggl::math::phs3d {
 		const float v4 = cart[ax.b] - v[2][ax.b];
 
 		const float denom = v1 * u2 - v2 * u1;
-		if (denom == 0.0f) {
+		if (denom == 0.0F) {
 			return false;
 		}
 
 		// finally, we can work it out
-		const float oneOverDenom = 1.0f / denom;
+		const float oneOverDenom = 1.0F / denom;
 		outVal.b[0] = (v4 * u2 - v2 * u4) * oneOverDenom;
 		outVal.b[1] = (v1 * u3 - v3 * u1) * oneOverDenom;
-		outVal.b[2] = 1.0f - outVal.b[0] - outVal.b[1];
+		outVal.b[2] = 1.0F - outVal.b[0] - outVal.b[1];
 		return true;
 	}
 
-	bool Triangle::CartToBarycentric2(const math::vec3 &cart, Barycentric &outVal) {
+	auto Triangle::CartToBarycentric2(const math::vec3 &cart, Barycentric &outVal) -> bool {
 		const auto e1 = v[2] - v[1];
 		const auto e2 = v[0] - v[2];
 		const auto e3 = v[1] - v[0];
@@ -157,7 +157,7 @@ namespace fggl::math::phs3d {
 
 		const auto normal = glm::normalize(glm::cross(e1, e2));
 		const auto denom = glm::dot(glm::cross(e1, e2), normal);
-		assert(denom != 0.0f);
+		assert(denom != 0.0F);
 
 		outVal.b[0] = glm::dot(glm::cross(e1, d3), normal) / denom;
 		outVal.b[1] = glm::dot(glm::cross(e2, d1), normal) / denom;
diff --git a/fggl/math/triangulation.cpp b/fggl/math/triangulation.cpp
index b72b2a5..9a9aefa 100644
--- a/fggl/math/triangulation.cpp
+++ b/fggl/math/triangulation.cpp
@@ -28,7 +28,7 @@ namespace fggl::math {
 
 		// deal with the indices
 		const auto nTris = polygon.size() - 2;
-		for (auto i = 0u; i < nTris; i++) {
+		for (auto i = 0U; i < nTris; i++) {
 			mesh.add_index(firstIdx);
 			mesh.add_index(prevIdx);
 
diff --git a/fggl/phys/null.cpp b/fggl/phys/null.cpp
index dc46b38..e993987 100644
--- a/fggl/phys/null.cpp
+++ b/fggl/phys/null.cpp
@@ -20,7 +20,7 @@
 
 namespace fggl::phys {
 
-	bool NullPhysics::factory(modules::ModuleService serviceName, modules::Services &serviceManager) {
+	auto NullPhysics::factory(modules::ModuleService serviceName, modules::Services &serviceManager) -> bool {
 		if (serviceName == phys::PhysicsProvider::service) {
 			serviceManager.bind<phys::PhysicsProvider, NullPhysicsProvider>();
 			return true;
diff --git a/fggl/platform/linux/paths.cpp b/fggl/platform/linux/paths.cpp
index df68782..39a2e1e 100644
--- a/fggl/platform/linux/paths.cpp
+++ b/fggl/platform/linux/paths.cpp
@@ -25,7 +25,7 @@
 
 namespace fggl::platform {
 
-	inline static std::filesystem::path get_user_path(const char *env, const char *fallback) {
+	inline static auto get_user_path(const char *env, const char *fallback) -> std::filesystem::path {
 		const char *path = std::getenv(env);
 		if (path != nullptr) {
 			return {path};
@@ -33,7 +33,7 @@ namespace fggl::platform {
 		return {fallback};
 	}
 
-	static std::vector<std::filesystem::path> get_path_list(const char *env, const char *folderName) {
+	static auto get_path_list(const char *env, const char *folderName) -> std::vector<std::filesystem::path> {
 		const char *pathList = std::getenv(env);
 		std::vector<std::filesystem::path> paths;
 		if (pathList) {
@@ -52,7 +52,7 @@ namespace fggl::platform {
 		return paths;
 	}
 
-	EnginePaths calc_engine_paths(const char *base) {
+	auto calc_engine_paths(const char *base) -> EnginePaths {
 		auto dataDirs = get_path_list(ENV_DATA_DIRS, base);
 		if (dataDirs.empty()) {
 			for (const auto &defaultDir : DEFAULT_DATA_DIRS) {
@@ -76,7 +76,7 @@ namespace fggl::platform {
 		};
 	}
 
-	std::filesystem::path locate_data(const EnginePaths &paths, const std::filesystem::path &relPath) {
+	auto locate_data(const EnginePaths &paths, const std::filesystem::path &relPath) -> std::filesystem::path {
 		auto userPath = paths.userData / relPath;
 		if (std::filesystem::exists(userPath)) {
 			return userPath;
@@ -102,7 +102,7 @@ namespace fggl::platform {
 		return userPath;
 	}
 
-	std::filesystem::path locate_config(const EnginePaths &paths, const std::filesystem::path &relPath) {
+	auto locate_config(const EnginePaths &paths, const std::filesystem::path &relPath) -> std::filesystem::path {
 		auto userPath = paths.userConfig / relPath;
 		if (std::filesystem::exists(userPath)) {
 			return userPath;
@@ -120,7 +120,7 @@ namespace fggl::platform {
 		return userPath;
 	}
 
-	std::filesystem::path locate_cache(const EnginePaths &paths, const std::filesystem::path &relPath) {
+	auto locate_cache(const EnginePaths &paths, const std::filesystem::path &relPath) -> std::filesystem::path {
 		auto userPath = paths.userCache / relPath;
 		if (std::filesystem::exists(userPath)) {
 			return userPath;
diff --git a/fggl/util/guid.cpp b/fggl/util/guid.cpp
index 5823c9a..bf63bfa 100644
--- a/fggl/util/guid.cpp
+++ b/fggl/util/guid.cpp
@@ -27,7 +27,7 @@ namespace fggl::util {
 		std::map<GUID, std::string> guidTable;
 	}
 
-	GUID intern_string(const char *str) {
+	auto intern_string(const char *str) -> GUID {
 		assert(str != nullptr);
 
 		GUID guid = make_guid(str);
@@ -40,7 +40,7 @@ namespace fggl::util {
 		return guid;
 	}
 
-	std::string guid_to_string(GUID guid) {
+	auto guid_to_string(GUID guid) -> std::string {
 		auto tableValue = guidTable.find(guid);
 		if (tableValue != guidTable.end()) {
 			return tableValue->second;
@@ -51,12 +51,12 @@ namespace fggl::util {
 
 }
 
-fggl::util::GUID operator "" _fid(const char *str) {
+auto operator "" _fid(const char *str) -> fggl::util::GUID {
 	fggl::util::intern_string(str);
 	return fggl::util::make_guid(str);
 }
 
-fggl::util::GUID operator "" _fid(const char *str, std::size_t) {
+auto operator "" _fid(const char *str, std::size_t) -> fggl::util::GUID {
 	fggl::util::intern_string(str);
 	return fggl::util::make_guid(str);
 }
diff --git a/include/fggl/app.hpp b/include/fggl/app.hpp
index f0a4be5..3da371b 100644
--- a/include/fggl/app.hpp
+++ b/include/fggl/app.hpp
@@ -15,7 +15,7 @@
 #ifndef FGGL_INCLUDE_FGGL_APP_HPP
 #define FGGL_INCLUDE_FGGL_APP_HPP
 
-#define assertm(exp, msg) assert(((void)msg, exp))
+#define assertm(exp, msg) assert(((void)(msg), exp))
 
 #include <cassert>
 #include <string>
@@ -76,7 +76,7 @@ namespace fggl {
 
 			virtual void deactivate() {}
 
-			inline App& owner() const {
+			[[nodiscard]] inline auto owner() const -> App& {
 				return m_owner;
 			}
 
@@ -93,8 +93,8 @@ namespace fggl {
 			App(const App &app) = delete;
 			App(const App &&app) = delete;
 
-			App &operator=(const App &other) = delete;
-			App &operator=(App &&other) = delete;
+			auto operator=(const App &other) -> App & = delete;
+			auto operator=(App &&other) -> App & = delete;
 
 			inline void setWindow(display::Window *window) {
 				m_window = window;
@@ -103,10 +103,10 @@ namespace fggl {
 			/**
 			 * Perform main game loop functions.
 			 */
-			int run(int argc, const char **argv);
+			auto run(int argc, const char **argv) -> int;
 
 			template<typename T>
-			T *addState(const Identifer &name) {
+			auto addState(const Identifer &name) -> T * {
 				static_assert(std::is_base_of<AppState, T>::value, "States must be AppStates");
 				return m_states.put<T>(name, *this);
 			}
@@ -118,12 +118,12 @@ namespace fggl {
 				m_states.active().activate();*/
 			}
 
-			inline AppState &active_state() const {
+			inline auto active_state() const -> AppState & {
 				return m_states.active();
 			}
 
 			template<typename T>
-			inline T *service() {
+			inline auto service() -> T * {
 				try {
 					return m_subsystems->template get<T>();
 				} catch (std::out_of_range &e) {
@@ -132,11 +132,11 @@ namespace fggl {
 				}
 			}
 
-			inline modules::Services& services() {
+			inline auto services() -> modules::Services& {
 				return m_subsystems->services();
 			}
 
-			inline bool running() const {
+			inline auto running() const -> bool {
 				return m_running;
 			}
 
diff --git a/include/fggl/audio/openal/audio.hpp b/include/fggl/audio/openal/audio.hpp
index ee74dcc..b82e26e 100644
--- a/include/fggl/audio/openal/audio.hpp
+++ b/include/fggl/audio/openal/audio.hpp
@@ -39,7 +39,7 @@ namespace fggl::audio::openal {
 	assets::AssetRefRaw load_vorbis(assets::Loader* loader, const assets::AssetID &, const assets::LoaderContext &, void* userPtr);
 
 	bool load_vorbis_short(std::filesystem::path path, assets::MemoryBlock& block);
-	assets::AssetTypeID check_vorbis( std::filesystem::path path );
+	assets::AssetTypeID check_vorbis( const std::filesystem::path& path );
 
 	enum class AudioType {
 		MONO_8 = AL_FORMAT_MONO8,
-- 
GitLab