Files
py-onebot/flake.nix
2026-03-07 18:54:40 +00:00

140 lines
3.8 KiB
Nix

{
description = "Python OneBot11";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
deploy-rs.url = "github:serokell/deploy-rs";
pyproject-nix = {
url = "github:pyproject-nix/pyproject.nix";
inputs.nixpkgs.follows = "nixpkgs";
};
uv2nix = {
url = "github:pyproject-nix/uv2nix";
inputs.pyproject-nix.follows = "pyproject-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
pyproject-build-systems = {
url = "github:pyproject-nix/build-system-pkgs";
inputs.pyproject-nix.follows = "pyproject-nix";
inputs.uv2nix.follows = "uv2nix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
deploy-rs,
pyproject-nix,
uv2nix,
pyproject-build-systems,
...
}:
let
system = "x86_64-linux";
pkgs = import nixpkgs { inherit system; };
inherit (nixpkgs) lib;
forAllSystems = lib.genAttrs lib.systems.flakeExposed;
workspace = uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./.; };
overlay = workspace.mkPyprojectOverlay {
sourcePreference = "wheel";
};
editableOverlay = workspace.mkEditablePyprojectOverlay {
root = "$REPO_ROOT";
};
pythonSets = forAllSystems (
system:
let
pkgs = nixpkgs.legacyPackages.${system};
python = pkgs.python3;
in
(pkgs.callPackage pyproject-nix.build.packages {
inherit python;
}).overrideScope
(
lib.composeManyExtensions [
pyproject-build-systems.overlays.wheel
overlay
]
)
);
pyonebot-service = (pkgs.formats.ini { }).generate "pyonebot.service" {
Unit = {
Description = "PyOneBot Service";
};
Service = {
ExecStart = "${self.packages.${system}.default}/bin/pyonebot";
WorkingDirectory = "${self.packages.${system}.default}/share/pyonebot/";
Restart = "always";
};
Install = {
WantedBy = "default.target";
};
};
in
{
packages = forAllSystems (system: {
default =
let pyonebot = pythonSets.${system}.mkVirtualEnv "pyonebot" workspace.deps.default;
in
pkgs.runCommand "pyonebot" { } ''
# 西
mkdir -p $out
ln -s ${pyonebot}/* $out/
# $out/share/pyonebot
mkdir -p $out/share/pyonebot
cp -r ${./.}/* $out/share/pyonebot/
'';
});
# 远程部署
deploy.nodes.macmini = {
hostname = "ssh.colorsky.fun";
profiles.pyonebot = {
user = "sky";
path =
deploy-rs.lib.${system}.activate.custom
(pkgs.runCommand "pyonebot-service" { } ''
mkdir -p $out/lib/systemd/user
cp ${pyonebot-service} $out/lib/systemd/user/pyonebot.service
'')
''
mkdir -p ~/.config/systemd/user/
ln -sf $PROFILE/lib/systemd/user/pyonebot.service ~/.config/systemd/user/pyonebot.service
systemctl --user daemon-reload
systemctl --user enable pyonebot.service
systemctl --user restart pyonebot.service
'';
};
};
checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib;
devShells."${system}".default =
let
pkgs = import nixpkgs { inherit system; };
in
pkgs.mkShell {
packages = with pkgs; [
python312
pyright
];
shellHook = ''
# run some script here.
'';
};
};
}