diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ffd9b0a8435eda5d75efa7b6457e0ab35e286808
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,49 @@
+# Copyright (c) 2022 Skyward Experimental Rocketry
+# Authors: Alberto Nidasio
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+variables:
+  GIT_SUBMODULE_STRATEGY: recursive
+
+stages:
+  - lint
+
+# Stage lint
+
+cppcheck:
+  stage: lint
+  tags:
+    - miosix
+  script:
+    - ./scripts/linter.py --cppcheck src
+
+format:
+  stage: lint
+  tags:
+    - miosix
+  script:
+    - ./scripts/linter.py --format src
+
+find:
+  stage: lint
+  tags:
+    - miosix
+  script:
+    - ./scripts/linter.py --find src
diff --git a/.vscode/settings.json b/.vscode/settings.json
index b978d1da29128b7dfdc07e84e2dc3e9c5b6ff8be..8d85298b755bc7e2bcb260a16c882140a4805d8e 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -162,6 +162,7 @@
         "cppcheck",
         "entrypoints",
         "Mavlink",
+        "Nidasio",
         "Plottables",
         "qobject",
         "qresource",
diff --git a/sbs b/sbs
index b19ef3951c271b6325b75c8efb70e6a82d5ee1c6..d88d8602e504c456c73b2527e38b153834c1d6d8 100755
--- a/sbs
+++ b/sbs
@@ -192,12 +192,6 @@ list() {
     | grep -Po '^.*/\K\w*(?=_autogen)' | uniq
 }
 
-lint_copyright() {
-    ohai "Lint (Copyright)"
-    
-    "$sbs_base/scripts/linter.py" --copyright "$source_dir/src"
-}
-
 lint_find() {
     ohai "Lint (Find)"
     
@@ -255,7 +249,6 @@ lint() {
     declare to_edit="$1"
     
     if [ "$found_python" = true ]; then
-        lint_copyright
         lint_find
     fi
     
diff --git a/src/shared/Core/QCustomPlot/QCustomPlot.cpp b/src/shared/Core/QCustomPlot/QCustomPlot.cpp
index 44e767d1df2afdfa04559bdb6c9e715c0c88fb1a..d96e14f5f5ad7a52cbdc0e1a722c736d1df1698c 100644
--- a/src/shared/Core/QCustomPlot/QCustomPlot.cpp
+++ b/src/shared/Core/QCustomPlot/QCustomPlot.cpp
@@ -5795,8 +5795,8 @@ void QCPLineEnding::draw(QCPPainter *painter, const QCPVector2D &pos,
         {
             QCPVector2D widthVecPerp = widthVec.perpendicular();
             QPointF points[4]        = {
-                       (pos - widthVecPerp).toPointF(), (pos - widthVec).toPointF(),
-                       (pos + widthVecPerp).toPointF(), (pos + widthVec).toPointF()};
+                (pos - widthVecPerp).toPointF(), (pos - widthVec).toPointF(),
+                (pos + widthVecPerp).toPointF(), (pos + widthVec).toPointF()};
             painter->setPen(miterPen);
             painter->setBrush(brush);
             painter->drawConvexPolygon(points, 4);