void OnGUI()
        {
            var config = Config.Load();

            // Start scroll view
            scrollPos = EditorGUILayout.BeginScrollView(scrollPos);

            // Repository path is invalid error message
            if (State.InvalidRepository)
            {
                EditorGUILayout.HelpBox(
                    "Cannot find repository; invalid Yggdrasil config!",
                    MessageType.Error);

                if (GUILayout.Button("Edit Config"))
                {
                    ConfigWindow.Open();
                }
            }
            // Check if user info is set
            else if (string.IsNullOrEmpty(config.Name) ||
                     string.IsNullOrEmpty(config.Email))
            {
                EditorGUILayout.HelpBox(
                    "Please set your name and email!",
                    MessageType.Error);

                if (GUILayout.Button("Edit Config"))
                {
                    ConfigWindow.Open();
                }
            }
            // No changes info message
            else if (State.Files.Count == 0)
            {
                DrawServerChanges();

                EditorGUILayout.HelpBox(
                    "No changes detected.",
                    MessageType.Info);
            }
            // Show changes
            else
            {
                DrawServerChanges();
                DrawFileChanges();

                EditorGUILayout.Space();

                // Change Summary
                EditorGUILayout.PrefixLabel("Change Summary");
                summary = EditorGUILayout.TextField(summary);

                // Change Message
                var oldWrap = EditorStyles.textField.wordWrap;
                EditorStyles.textField.wordWrap = true;
                var size = EditorGUIUtility.singleLineHeight;
                EditorGUILayout.PrefixLabel("Change Message");
                message = GUILayout.TextArea(
                    message, GUILayout.MinHeight(size * 3));
                EditorStyles.textField.wordWrap = oldWrap;

                // Push button
                GUI.enabled = IsAnyToggled() && HasCommitMessage();
                if (GUILayout.Button("Push"))
                {
                    CommitAndPushToggled();
                }
                GUI.enabled = true;

                // No changes message
                if (!IsAnyToggled())
                {
                    EditorGUILayout.HelpBox(
                        "Cannot push; no changes selected",
                        MessageType.Error);
                }
                // No summary message
                else if (!HasCommitMessage())
                {
                    EditorGUILayout.HelpBox(
                        "Cannot push; missing change summary",
                        MessageType.Error);
                }
                // Long summary message
                else if (summary.Length > 50)
                {
                    EditorGUILayout.HelpBox(
                        "Summary is too long",
                        MessageType.Warning);
                }
            }

            // End scroll view
            EditorGUILayout.EndScrollView();
        }