From 9bf865cfd82a55104851414084e1980f1ba18d6e Mon Sep 17 00:00:00 2001 From: Rikki Date: Fri, 7 Mar 2025 16:46:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20nix=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .envrc | 1 + .gitignore | 5 ++++- flake.nix | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 .envrc create mode 100644 flake.nix diff --git a/.envrc b/.envrc new file mode 100644 index 000000000..8392d159f --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake \ No newline at end of file diff --git a/.gitignore b/.gitignore index deec90be9..38deb3666 100644 --- a/.gitignore +++ b/.gitignore @@ -191,4 +191,7 @@ jieba.cache # vscode -/.vscode \ No newline at end of file +/.vscode + +# direnv +/.direnv \ No newline at end of file diff --git a/flake.nix b/flake.nix new file mode 100644 index 000000000..df885fd83 --- /dev/null +++ b/flake.nix @@ -0,0 +1,52 @@ +{ + description = "MaiMBot Nix Dev Env"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { + inherit system; + }; + + # 读取 requirements.txt 文件 + requirementsFile = builtins.readFile ./requirements.txt; + + # 解析 requirements.txt 文件,提取包名 + parseRequirements = content: + let + lines = builtins.split "\n" content; + # 过滤掉空行和注释 + filteredLines = builtins.filter (line: + line != "" && !(builtins.match "^ *#.*" line) + ) lines; + # 提取包名(去掉版本号) + packageNames = builtins.map (line: + builtins.head (builtins.split "[=<>]" line) + ) filteredLines; + in + packageNames; + + # 获取 requirements.txt 中的包名列表 + requirements = parseRequirements requirementsFile; + + # 动态生成 Python 环境 + pythonEnv = pkgs.python3.withPackages (ps: + builtins.map (pkg: ps.${pkg}) requirements + ); + in + { + devShell = pkgs.mkShell { + buildInputs = [ pythonEnv ]; + + shellHook = '' + echo "Python environment is ready!" + ''; + }; + } + ); +} \ No newline at end of file