diff --git a/.gitignore b/.gitignore
index bf4cdc32..3524c3f3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
 *~
 bin
 build
+*.build
 .cache
 .classpath
 cover
@@ -10,6 +11,7 @@ debian
 dist
 dist-beta
 .DS_Store
+*.dist
 *.dylib
 *.egg-info
 ENV
diff --git a/nuikta.bat b/nuikta.bat
new file mode 100644
index 00000000..eaf931f6
--- /dev/null
+++ b/nuikta.bat
@@ -0,0 +1,18 @@
+@echo off
+
+set PATH=C:\mingw64\mingw32\bin;%PATH%
+
+set options=--standalone --follow-imports --warn-implicit-exceptions --warn-unusual-code
+set options=%options% --python-flag=nosite,noasserts
+set options=%options% --plugin-enable=qt-plugins=imageformats,platforms,qml,styles,platformthemes,iconengines
+set options=%options% --assume-yes-for-downloads --mingw64
+set options=%options% --windows-icon="tools\windows\app_icon.ico"
+%python% -X utf8 -m nuitka %options% nxdrive > %WORKSPACE%\nuitka.log 2>&1
+
+rem ###
+rem # Ideas
+rem #   - Disable unused Qt modules
+rem #   - UPX
+rem # TODO
+rem #   - VersionInfo for the final executable
+rem ###
diff --git a/nxdrive/options.py b/nxdrive/options.py
index 57653dab..afe8f1aa 100644
--- a/nxdrive/options.py
+++ b/nxdrive/options.py
@@ -48,13 +48,39 @@ import sys
 from contextlib import suppress
 from copy import deepcopy
 from pathlib import Path
-from typing import Any, Callable, Dict, Set, Tuple
+from typing import Any, Callable, Dict, Set, Optional, Tuple
 
 __all__ = ("Options",)
 
 log = logging.getLogger(__name__)
 
 
+def _get_freezer() -> Optional[str]:
+    """Name of the actual module used to freeze the application."""
+    if "__compiled__" in globals():
+        return "nuitka"
+    elif hasattr(sys, "frozen"):
+        return "pyinstaller"
+    return None
+
+
+def _get_frozen_state() -> bool:
+    """Find the current state of the application."""
+    return _get_freezer() is not None
+
+
+def _get_resources_dir(*_) -> str:
+    """Find the resources directory."""
+    freezer = _get_freezer()
+    if freezer == "nuitka":
+        path = Path(__file__).parent
+    elif freezer == "pyinstaller":
+        path = Path(sys._MEIPASS)
+    else:
+        path = Path(__file__)
+    return path.parent / "data"
+
+
 class MetaOptions(type):
     """
     All configurable options are used by this lone object.
@@ -135,6 +161,13 @@ class MetaOptions(type):
     # Cache the home directory for later use
     __home: Path = __get_home()
 
+    def __is_system_wide(*_) -> bool:
+        # TODO: check OK with Nuitka
+        return (
+            sys.platform == "win32"
+            and Path(sys.executable).with_name("system-wide.txt").is_file()
+        )
+
     # Options that should not trigger an error
     __ignored_options: Set[str] = {
         # From the CLI parser
@@ -163,7 +196,7 @@ class MetaOptions(type):
         "ignored_files": (__files, "default"),
         "ignored_prefixes": (__prefixes, "default"),
         "ignored_suffixes": (__suffixes, "default"),
-        "is_frozen": (getattr(sys, "frozen", False), "default"),
+        "is_frozen": (_get_frozen_state(), "default"),
         "locale": ("en", "default"),
         "log_level_console": ("WARNING", "default"),
         "log_level_file": ("INFO", "default"),
@@ -174,17 +207,10 @@ class MetaOptions(type):
         "protocol_url": (None, "default"),
         "proxy_server": (None, "default"),
         "remote_repo": ("default", "default"),
-        "res_dir": (
-            Path(getattr(sys, "_MEIPASS", Path(__file__).parent)) / "data",
-            "default",
-        ),
+        "res_dir": (_get_resources_dir(), "default"),
         "ssl_no_verify": (False, "default"),
         "startup_page": ("drive_login.jsp", "default"),
-        "system_wide": (
-            sys.platform == "win32"
-            and Path(sys.executable).with_name("system-wide.txt").is_file(),
-            "default",
-        ),
+        "system_wide": (__is_system_wide(), "default"),
         "theme": ("ui5", "default"),
         "timeout": (30, "default"),
         "update_check_delay": (3600, "default"),
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 8aa5f43c..3ea12551 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1 +1,2 @@
-pyinstaller==3.4.0
+nuitka==0.6.2; sys_platform == 'win32'
+pyinstaller==3.4.0; sys_platform == 'darwin'
