Modified og_gui_manager.py to make it accessible on devices not on the efabless platform. Changed the create project script to make the proper config directories so that the editors can be used. Modified profile.py to make the settings properly reflect the user preferences.
diff --git a/common/listboxchoice.py b/common/listboxchoice.py
new file mode 100755
index 0000000..df6b895
--- /dev/null
+++ b/common/listboxchoice.py
@@ -0,0 +1,58 @@
+#!/ef/efabless/opengalaxy/venv/bin/python3
+#
+# Simple listbox with scrollbar and select button
+
+import re
+import tkinter
+from tkinter import ttk
+
+class ListBoxChoice(ttk.Frame):
+    def __init__(self, parent, fontsize=11, *args, **kwargs):
+        ttk.Frame.__init__(self, parent, *args, **kwargs)
+        s = ttk.Style()
+        s.configure('normal.TButton', font=('Helvetica', fontsize), border = 3, relief = 'raised')
+
+    def populate(self, title, list=[]):
+        self.value = None
+        self.list = list[:]
+        
+        ttk.Label(self, text=title).pack(padx=5, pady=5)
+
+        listFrame = ttk.Frame(self)
+        listFrame.pack(side='top', padx=5, pady=5, fill='both', expand='true')
+        
+        scrollBar = ttk.Scrollbar(listFrame)
+        scrollBar.pack(side='right', fill='y')
+        self.listBox = tkinter.Listbox(listFrame, selectmode='single')
+        self.listBox.pack(side='left', fill='x', expand='true')
+        scrollBar.config(command=self.listBox.yview)
+        self.listBox.config(yscrollcommand=scrollBar.set)
+        self.list.sort(key=natsort_key)
+        for item in self.list:
+            self.listBox.insert('end', item)
+
+        if len(self.list) == 0:
+            self.listBox.insert('end', '(no items)')
+        else:
+            buttonFrame = ttk.Frame(self)
+            buttonFrame.pack(side='bottom')
+
+            selectButton = ttk.Button(buttonFrame, text="Select", command=self._select,
+			style='normal.TButton')
+            selectButton.pack(side='left', padx = 5)
+            listFrame.bind("<Return>", self._select)
+
+    def natsort_key(s, _nsre=re.compile('([0-9]+)')):
+        # 'natural' sort function.  To make this alphabetical independently of
+        # capitalization, use "else text.lower()" instead of "else text" below.
+        return [int(text) if text.isdigit() else text for text in _nsre.split(s)]
+
+    def _select(self, event=None):
+        try:
+            firstIndex = self.listBox.curselection()[0]
+            self.value = self.list[int(firstIndex)]
+        except IndexError:
+            self.value = None
+
+    def value(self):
+        return self.value