diff --git a/src/Makefile b/src/Makefile
index 1d1bc0e0..3c791120 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -80,6 +80,9 @@ else ifeq ($(os),OpenBSD)
 else ifneq (,$(findstring CYGWIN,$(os)))
     CPPFLAGS += -D_XOPEN_SOURCE=700
     LIBS += -lncursesw -ldbghelp
+else ifeq ($(os),SunOS)
+    LIBS += -lncursesw 
+    LDFLAGS += -lsocket -rdynamic
 else
     ifeq ($(PKG_CONFIG),)
     	$(error "pkg-config not found in PATH")
diff --git a/src/event_manager.cc b/src/event_manager.cc
index 37fac95a..c4cf5e76 100644
--- a/src/event_manager.cc
+++ b/src/event_manager.cc
@@ -3,6 +3,10 @@
 #include "flags.hh"
 #include "ranges.hh"
 
+#if defined(__sun__)
+#include <cstring>
+#endif
+
 #include <unistd.h>
 
 namespace Kakoune
diff --git a/src/file.cc b/src/file.cc
index 88c502d1..ce6f8405 100644
--- a/src/file.cc
+++ b/src/file.cc
@@ -654,6 +654,11 @@ String get_kak_binary_path()
     return buffer;
 #elif defined(__OpenBSD__)
     return KAK_BIN_PATH;
+#elif defined(__sun__)
+    ssize_t res = readlink("/proc/self/path/a.out", buffer, 2048);
+    kak_assert(res != -1);
+    buffer[res] = '\0';
+    return buffer;
 #else
 # error "finding executable path is not implemented on this platform"
 #endif