diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000000000000000000000000000000000000..b8e6a6874e05864bee999600171b96eb1e17bfd0
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,13 @@
+---
+BasedOnStyle: LLVM
+ColumnLimit: 120
+IndentWidth: 4
+TabWidth: 4
+UseTab: ForIndentation
+AlignEscapedNewlines: DontAlign
+AllowShortFunctionsOnASingleLine: Inline
+AlwaysBreakTemplateDeclarations: Yes
+BreakBeforeBinaryOperators: NonAssignment
+BreakBeforeBraces: Custom
+BraceWrapping:
+  AfterFunction: true
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000000000000000000000000000000000000..3078fdfc801a3c8aa103dde92adbed240b65de44
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,5 @@
+{
+  // See http://go.microsoft.com/fwlink/?LinkId=827846
+  // for the documentation about the extensions.json format
+  "recommendations": ["platformio.platformio-ide", "xaver.clang-format"]
+}
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 0000000000000000000000000000000000000000..2e9982bce84aced5e2093c41f9d1f1cd75f16a3e
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,12 @@
+{
+  "version": "0.1.0",
+  "tasks": [
+    {
+      "taskName": "clang-format-everything",
+      "command": "clang-format",
+      "args": ["-i", "*"],
+      "isShellCommand": true,
+      "isBackground": true
+    }
+  ]
+}