     @objc func sync(sender: AnyObject) {
         if isSyncing { return }
         
-        self.startingToSync()
-        let url = URL(string: "\(githubAPIUrl)/pulls")!
-        let engine = SniPositoryCore(githubAPIPullUrl: url, githubToken: self.githubToken, snippetPath: self.snippetPath())
-        DispatchQueue.global().async {
-            engine.initGit(with: self.repo)
-            engine.sync(with: self.environment, verbose: true)
-            self.completedSyncing()
-        }
-    }
-    
-    @objc
-    func showRepoConfig(sender: AnyObject) {
-        if let repo = self.showConfig(with: "Enter repo:", and: "git@github.com:ivanfoong/xcode-swift-snippets.git") {
-            self.repo = repo
-        }
-    }
-    
-    @objc
-    func showGithubAPIUrlConfig(sender: AnyObject) {
-        if let githubAPIUrl = self.showConfig(with: "Enter Github API Url:", and: "https://api.github.com/repos/ivanfoong/xcode-swift-snippets") {
-            self.githubAPIUrl = githubAPIUrl
-        }
-    }
-    
-    @objc
-    func showGithubTokenConfig(sender: AnyObject) {
-        if let githubToken = self.showConfig(with: "Enter Github Token:", and: "Token") {
-            self.githubToken = githubToken
-        }
-    }
-    
-    @objc
-    func resetConfig(sender: AnyObject) {
-        self.resetConfig()
-    }
-    
-    @objc
-    func showCurrentConfig(sender: AnyObject) {
-        self.showCurrentConfig()
+        if let repo = self.repo, let githubAPIUrl = self.githubAPIUrl, let githubToken = self.githubToken {
+            self.startingToSync()
+            let url = URL(string: "\(githubAPIUrl)/pulls")!
+            let engine = SniPositoryCore(githubAPIPullUrl: url, githubToken: githubToken, snippetPath: self.snippetPath())
+            DispatchQueue.global().async {
+                engine.initGit(with: repo)
+                engine.sync(with: self.environment, verbose: true)
+                self.completedSyncing()
+            }
+        } else {
+            showConfigPrompt()
+        }
     }
     
     private func showConfig(with message: String, and placeholder: String) -> String? {

        if let button = statusItem.button {
            button.image = NSImage(named: NSImage.Name(rawValue: "StatusBarButtonImage"))
        }
        menu.addItem(syncMenuItem)
        menu.addItem(NSMenuItem.separator())
        menu.addItem(configRepoMenuItem)
        menu.addItem(configGithubAPIUrlMenuItem)
        menu.addItem(configGithubTokenMenuItem)
        menu.addItem(configShowMenuItem)
        menu.addItem(configResetMenuItem)
        menu.addItem(quitMenuItem)
        menu.delegate = self
        statusItem.menu = menu
        
        if self.githubToken == "" {
            showConfigWizard()
        }
    }



extension AppDelegate: NSMenuDelegate {
    func menuWillOpen(_ menu: NSMenu) {
        syncMenuItem.isEnabled = !isSyncing
        var syncMenuItemTitle: String
        if isSyncing {
            syncMenuItemTitle = "Sync (Syncing)"
