Modified from patch provided in https://github.com/horgh/irssi-tcl/issues/8

--- a/src/tcl_core.c
+++ b/src/tcl_core.c
@@ -5,6 +5,7 @@
 
 #include <stdbool.h>
 #include <string.h>
+#include <unistd.h>
 
 #include <tcl.h>
 
@@ -14,6 +15,8 @@
 
 #include "tcl_core.h"
 
+#define IRSSI_TCL_SYSTEM_PATH "/usr/share/irssi/tcl/irssi.tcl"
+
 static Tcl_Interp* interp;
 
 /*
@@ -186,6 +189,11 @@
 	Tcl_DString dsPtr;
 	Tcl_DStringInit(&dsPtr);
 	irssi_dir_ds(&dsPtr, "/tcl/irssi.tcl");
+	if (access(Tcl_DStringValue(&dsPtr), R_OK) == -1) {
+		// no user provided irssi.tcl, try the system one
+		Tcl_DStringSetLength(&dsPtr, 0);
+		Tcl_DStringAppend(&dsPtr, IRSSI_TCL_SYSTEM_PATH, -1);
+	}
 	int result = Tcl_EvalFile(interp, Tcl_DStringValue(&dsPtr));
 	Tcl_DStringFree(&dsPtr);
 	return result;
--- a/tcl/irssi.tcl
+++ b/tcl/irssi.tcl
@@ -135,4 +135,9 @@
 	source $script
 }
 
-load_script scripts.conf
+# only source script if it exists to prevent error while running /load tcl
+if {[file exists [irssi_dir]${::SCRIPT_PATH}/scripts.conf]} {
+	load_script scripts.conf
+} else {
+	irssi_print "no [irssi_dir]${::SCRIPT_PATH}/scripts.conf found"
+}
