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