diff --git a/.clangd b/.clangd
new file mode 100644
index 0000000000000000000000000000000000000000..2a20863a3630c0439b3d9229e8b00ec8b47c24a0
--- /dev/null
+++ b/.clangd
@@ -0,0 +1,4 @@
+If:                               # Apply this config conditionally
+  PathMatch: .*\.h                # to all headers...
+  CompileFlags:                     # Tweak the parse settings
+    Add: [-xc++, -Wall]             # treat all files as C++, enable more warnings
diff --git a/.gitignore b/.gitignore
index acf09d2b0104c7981c29d4b4fc7e0eb5b20348c4..bcc2a83a216ed48b82bfb7b934a79e7e7c26d48c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,18 @@
+# CMake stuff
+Violet
+Violet_autogen/*
+Vivy
+Vivy_autogen/*
+compile_commands.json
 CMakeCache.txt
 CMakeFiles/*
 Makefile
-Violet
-Violet_autogen/*
 cmake_install.cmake
 .cache/*
 Debug/*
-compile_commands.json
+
+# Build folder
 build/*
+
+# Local configurations
+.vim/*
diff --git a/utils/samples/dot-ccls b/utils/samples/dot-ccls
new file mode 100644
index 0000000000000000000000000000000000000000..8c27fe14488add28ed31d64a08c522024aa1bffc
--- /dev/null
+++ b/utils/samples/dot-ccls
@@ -0,0 +1,16 @@
+-isystem
+/usr/local/include
+-isystem
+/usr/include/x86_64-linux-gnu
+-isystem
+/usr/include/x86_64-linux-gnu/qt5/QtCore
+-isystem
+/usr/include/x86_64-linux-gnu/qt5/QtWidgets
+-isystem
+/usr/include
+-I
+./inc
+./build/Vivy_autogen/include
+-std=c++20
+-fPIC
+-D__linux__
diff --git a/utils/samples/dot-vim-slash-coc-settings.json b/utils/samples/dot-vim-slash-coc-settings.json
new file mode 100644
index 0000000000000000000000000000000000000000..6cd13edc1831670ab24274d8b8b6ad828fccb999
--- /dev/null
+++ b/utils/samples/dot-vim-slash-coc-settings.json
@@ -0,0 +1,10 @@
+{
+    "languageserver": {
+        "clangd": {
+            "command": "clangd",
+            "rootPatterns": ["compile_commands.json"],
+            "filetypes": ["c", "cpp", "objc", "objcpp"]
+        }
+    },
+    "clangd.semanticHighlighting": true
+}