diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000000000000000000000000000000000000..750eb53483ac64520645f6b210935fb0c0ebd0ca
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,43 @@
+{
+  "nodes": {
+    "flake-utils": {
+      "locked": {
+        "lastModified": 1678901627,
+        "narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "type": "github"
+      }
+    },
+    "nixpkgs": {
+      "locked": {
+        "lastModified": 1679734080,
+        "narHash": "sha256-z846xfGLlon6t9lqUzlNtBOmsgQLQIZvR6Lt2dImk1M=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "dbf5322e93bcc6cfc52268367a8ad21c09d76fea",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "nixpkgs-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "root": {
+      "inputs": {
+        "flake-utils": "flake-utils",
+        "nixpkgs": "nixpkgs"
+      }
+    }
+  },
+  "root": "root",
+  "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000000000000000000000000000000000000..c9a04b5217b93f5a0e1ad4fdfcb664ab1f38a6b9
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,61 @@
+{
+  description = "C++ Functional Terminal User Interface library";
+
+  inputs = {
+    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
+    flake-utils.url = "github:numtide/flake-utils";
+  };
+
+  outputs = {self, nixpkgs, flake-utils}:
+    flake-utils.lib.eachDefaultSystem (system:
+      let pkgs = import nixpkgs { inherit system; }; in
+      {
+        packages.ftxui = pkgs.stdenv.mkDerivation rec {
+          pname = "ftxui";
+          version = "v4.0.0";
+          src = pkgs.fetchFromGitHub {
+            owner = "ArthurSonzogni";
+            repo = "FTXUI";
+            rev = version;
+            sha256 = "sha256-3kAhHDUwzwdvHc8JZAcA14tGqa6w69qrN1JXhSxNBQY=";
+          };
+
+          nativeBuildInputs = [
+            pkgs.cmake
+          ];
+
+          cmakeFlags = [
+            "-DFTXUI_ENABLE_INSTALL=ON"
+            "-DFTXUI_BUILD_EXAMPLES=OFF"
+            "-DFTXUI_BUILD_TESTS=OFF"
+            "-DFTXUI_BUILD_DOCS=OFF"
+            "-DCMAKE_BUILD_TYPE=Release"
+          ];
+
+          meta = {
+            homepage = "https://arthursonzogni.github.io/FTXUI/";
+            description = "C++ Functional Terminal User Interface.";
+            longDescription = ''
+              Functional Terminal (X) User interface
+              
+              A simple C++ library for terminal based user interfaces!
+              Feature
+              - Functional style. Inspired by [1] and React
+              - Simple and elegant syntax (in my opinion)
+              - Keyboard & mouse navigation.
+              - Support for UTF8 and fullwidth chars (→ 测试)
+              - Support for animations. Demo 1, Demo 2
+              - Support for drawing. Demo
+              - No dependencies
+              - Cross platform: Linux/MacOS (main target), WebAssembly, Windows (Thanks to contributors!).
+              - Learn by examples, and tutorials
+              - Multiple packages: CMake FetchContent (preferred), vcpkg, pkgbuild, conan, nix, etc...
+              - Good practises: documentation, tests, fuzzers, performance tests, automated CI, automated packaging, etc...
+            '';
+            license = pkgs.lib.licenses.mit;
+            platforms = pkgs.lib.platforms.all;
+          };
+        };
+      }
+    );
+}