diff --git a/.editorconfig b/.editorconfig
index 1923d4101aa52161105a6f9d54e29f68ace4b19b..90edf178c082b2486cda6299ce038f95f4a72b61 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -6,3 +6,7 @@ indent_size = 2
 charset = utf-8
 trim_trailing_whitespace = true
 insert_final_newline = true
+
+[Makefile]
+indent_style = tab
+indent_size = 8
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..b5411b11abc28e67373fa34afca7c5a3d8bb3540
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,22 @@
+all:
+	ninja -C build
+
+install:
+	ninja -C build install
+
+uninstall:
+	ninja -C build uninstall
+
+clean:
+	ninja -C build clean
+
+run: all
+	WIREPLUMBER_MODULE_DIR=build/modules \
+	WIREPLUMBER_CONFIG_FILE=src/wireplumber.conf \
+	$(DBG) ./build/src/wireplumber
+
+gdb:
+	$(MAKE) run DBG=gdb
+
+valgrind:
+	$(MAKE) run DBG="DISABLE_RTKIT=1 valgrind"
diff --git a/src/wireplumber.conf b/src/wireplumber.conf
new file mode 100644
index 0000000000000000000000000000000000000000..f32fe61ad503761c18f4e7d2b73aa0278e4ec959
--- /dev/null
+++ b/src/wireplumber.conf
@@ -0,0 +1,3 @@
+load-module C libwireplumber-module-pipewire
+load-module C libwireplumber-module-pw-audio-softdsp-endpoint
+load-module C libwireplumber-module-pw-alsa-udev