refactoring and typing in progress
diff --git a/wally/main.py b/wally/main.py
index 11d6fc1..bfb9af7 100644
--- a/wally/main.py
+++ b/wally/main.py
@@ -5,7 +5,7 @@
 import logging
 import argparse
 import functools
-from typing import List, Tuple, Any, Callable, IO, cast, TYPE_CHECKING
+from typing import List, Tuple, Any, Callable, IO, cast, Optional
 from yaml import load as _yaml_load
 
 
@@ -29,7 +29,7 @@
 
 
 from . import utils, run_test, pretty_yaml
-from .storage import make_storage, IStorage
+from .storage import make_storage, Storage
 from .config import Config
 from .logger import setup_loggers
 from .stage import log_stage, StageType
@@ -72,6 +72,8 @@
     descr = "Disk io performance test suite"
     parser = argparse.ArgumentParser(prog='wally', description=descr)
     parser.add_argument("-l", '--log-level', help="print some extra log info")
+    parser.add_argument("-s", '--settings-dir', default=None,
+                        help="Folder to store key/settings/history files")
 
     subparsers = parser.add_subparsers(dest='subparser_name')
 
@@ -112,6 +114,17 @@
     return parser.parse_args(argv[1:])
 
 
+def get_config_path(config: Config, opts_value: Optional[str]) -> str:
+    if opts_value is None and 'settings_dir' not in config:
+        val = "~/.wally"
+    elif opts_value is not None:
+        val = opts_value
+    else:
+        val = config.settings_dir
+
+    return os.path.abspath(os.path.expanduser(val))
+
+
 def main(argv: List[str]) -> int:
     if faulthandler is not None:
         faulthandler.register(signal.SIGUSR1, all_threads=True)
@@ -123,7 +136,7 @@
 
     # stop mypy from telling that config & storage might be undeclared
     config = None  # type: Config
-    storage = None  # type: IStorage
+    storage = None  # type: Storage
 
     if opts.subparser_name == 'test':
         if opts.resume:
@@ -143,6 +156,7 @@
             config.build_id = opts.build_id
             config.build_description = opts.build_description
             config.build_type = opts.build_type
+            config.settings_dir = get_config_path(config, opts.settings_dir)
 
             storage = make_storage(config.storage_url)
 
@@ -174,7 +188,7 @@
 
     elif opts.subparser_name == 'report':
         storage = make_storage(opts.data_dir, existing=True)
-        config = storage.load('config', Config)
+        config.settings_dir = get_config_path(config, opts.settings_dir)
 
     elif opts.subparser_name == 'compare':
         x = run_test.load_data_from_path(opts.data_path1)