diff --git a/bar/config.go b/bar/config.go
index 606a8d59374929c396f4fd83415c2cea526f4ed3..722412f0f700a097ce65dbcf76be534a6b3738be 100644
--- a/bar/config.go
+++ b/bar/config.go
@@ -3,15 +3,13 @@
 package bar
 
 import (
-	"github.com/spf13/cobra"
 	"gitlab.ie.suberic.net/kevin/i3going-on/config"
 )
 
-func readConfig(configFile string) (*config.Config, error) {
-	cfg, err := config.ReadConfig(configFile)
-	cobra.CheckErr(err)
+func readConfig(configFile string) *config.Config {
+	cfg := config.ReadConfig(configFile)
 	if cfg.Refresh < 1 {
 		cfg.Refresh = 5
 	}
-	return cfg, err
+	return cfg
 }
diff --git a/bar/run.go b/bar/run.go
index 6d653fa4250d1c026a5d2923fa51e52dc0c88aa0..6c457c2a032a0aff44bb795f922aab932bebbee2 100644
--- a/bar/run.go
+++ b/bar/run.go
@@ -16,8 +16,7 @@ import (
 // Run is essentially the main program.
 func Run(cmd *cobra.Command, args []string) {
 	viper.BindPFlags(cmd.Flags())
-	cfg, err := readConfig(viper.GetString("config"))
-	cobra.CheckErr(err)
+	cfg := readConfig(viper.GetString("config"))
 
 	clicks := make(chan modules.Click, 1)
 
diff --git a/cmd/root.go b/cmd/root.go
index cd19a3ade34d1485b63c682bd21d9c2080a445be..fd562abf56c9079c95e4db32bc228bf45ae02e86 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -33,7 +33,9 @@ func Execute() {
 func init() {
 	cobra.OnInitialize(initConfig)
 	home, err := os.UserHomeDir()
-	cobra.CheckErr(err)
+	if err != nil {
+		home = "/"
+	}
 	defaultConfig := path.Join(home, ".config", "i3going-on", "config.yaml")
 	rootCmd.Flags().StringP("config", "c", defaultConfig, "config file")
 }
diff --git a/config/config.go b/config/config.go
index 1ba94b7912e1172bfc6e6047dc9f0d461278edc2..bb06e38e3e3c02b993d5a7173bd6abcfc638b41d 100644
--- a/config/config.go
+++ b/config/config.go
@@ -2,7 +2,6 @@ package config
 
 import (
 	"os"
-	"strings"
 
 	"gitlab.ie.suberic.net/kevin/i3going-on/modules"
 	"gopkg.in/yaml.v3"
@@ -14,23 +13,30 @@ type Config struct {
 	Modules []modules.Module `yaml:"modules"`
 }
 
-// ReadConfigStr reads in the config.
-func ReadConfigStr(configStr string) (*Config, error) {
-	configParser := yaml.NewDecoder(strings.NewReader(configStr))
-	cfg := &Config{}
-	err := configParser.Decode(&cfg)
-	return cfg, err
-}
-
 // ReadConfig reads in the config.
-func ReadConfig(configFile string) (*Config, error) {
+func ReadConfig(configFile string) *Config {
 	config, err := os.Open(configFile)
 	if err != nil {
-		return nil, err
+		return &Config{
+			Refresh: 5,
+			Modules: []modules.Module{
+				modules.NewErrorModule("open", err),
+			},
+		}
 	}
+
 	defer config.Close()
 	configParser := yaml.NewDecoder(config)
 	cfg := &Config{}
 	err = configParser.Decode(&cfg)
-	return cfg, err
+	if err != nil {
+		return &Config{
+			Refresh: 5,
+			Modules: []modules.Module{
+				modules.NewErrorModule("decode", err),
+			},
+		}
+	}
+
+	return cfg
 }
diff --git a/modules/error.go b/modules/error.go
new file mode 100644
index 0000000000000000000000000000000000000000..22138637ba80e9a4182a5f02de42b2ce7ddf8a8e
--- /dev/null
+++ b/modules/error.go
@@ -0,0 +1,55 @@
+// Package module implements all the modules.
+// Copyright (C) 2022 Kevin Lyda <kevin@lyda.ie>
+package modules
+
+import (
+	"fmt"
+)
+
+// ErrorMod module parameters for the text module.
+type ErrorMod struct {
+	name    string
+	onclick string
+	Error   string
+}
+
+// NewError creates a ErrorMod instance.
+func NewError(m *Module) *ErrorMod {
+	e := &ErrorMod{
+		name:    m.Name,
+		onclick: m.OnClick,
+	}
+	if e.name == "" {
+		e.name = "error"
+	}
+	return e
+}
+
+// Name returns the name setting for the module.
+func (e *ErrorMod) Name() string {
+	return e.name
+}
+
+// OnClick returns the on-click setting for the module.
+func (e *ErrorMod) OnClick() string {
+	return e.onclick
+}
+
+// Render renders the module.
+func (e *ErrorMod) Render() string {
+	// TODO: Make color and name optional.
+	return fmt.Sprintf(`{"name": "%s", "full_text": "%s", "color": "#ff1111"}`, e.name, e.Error)
+}
+
+// NewErrorModule creates a Module instance.
+func NewErrorModule(name string, errtxt error) Module {
+	return Module{
+		Module:  "error",
+		Name:    "decode",
+		OnClick: "",
+		Params: &ErrorMod{
+			name:  "open",
+			Error: errtxt.Error(),
+		},
+	}
+}
diff --git a/modules/modules.go b/modules/modules.go
index aa9cdd61c4de4fb7bcbdc6b1d7f8df9a5beb6c44..e66bdcbb7c3f79759777ad7d29caeb260d7efb69 100644
--- a/modules/modules.go
+++ b/modules/modules.go
@@ -41,7 +41,7 @@ func (m *Module) UnmarshalYAML(node *yaml.Node) error {
 	}
 
 	if strings.ContainsAny(m.Name, "{}") {
-		return fmt.Errorf("module name field can't contain '{' or '}'.")
+		return fmt.Errorf("module name field can't contain '{' or '}' characters")
 	}
 	switch params.Module {
 	case "date":