97 lines
2.4 KiB
Nix
97 lines
2.4 KiB
Nix
{
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
pyproject-nix = {
|
|
url = "github:nix-community/pyproject.nix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
};
|
|
outputs = {
|
|
self,
|
|
nixpkgs,
|
|
...
|
|
} @ inputs: let
|
|
system = "x86_64-linux";
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
config.allowUnfree = true;
|
|
};
|
|
python = pkgs.python3;
|
|
serverProject = inputs.pyproject-nix.lib.project.loadPyproject {
|
|
projectRoot = ./.;
|
|
};
|
|
|
|
# Packages
|
|
script = pkgs.writeShellApplication {
|
|
name = "scanbuddy";
|
|
|
|
runtimeInputs = with pkgs; [sane-backends brscan5 ghostscript];
|
|
|
|
text = builtins.readFile ./scanbuddy.sh;
|
|
};
|
|
|
|
# Returns an attribute set that can be passed to `buildPythonPackage`.
|
|
attrs = serverProject.renderers.buildPythonPackage {inherit python;};
|
|
server = python.pkgs.buildPythonPackage (attrs
|
|
// {
|
|
env.CUSTOM_ENVVAR = "foobar";
|
|
});
|
|
|
|
scanbuddy-pkg = pkgs.symlinkJoin {
|
|
name = "scanbuddy";
|
|
paths = [script server];
|
|
};
|
|
in {
|
|
# devShells.${system}.default = pkgs.mkShell {
|
|
# packages = with pkgs; [
|
|
# python313
|
|
# python313Packages.flask
|
|
# python313Packages.waitress
|
|
# ];
|
|
#
|
|
# shellHook = ''
|
|
# python --version
|
|
# exec zsh
|
|
# '';
|
|
# };
|
|
packages.${system} = {
|
|
default = scanbuddy-pkg;
|
|
inherit script;
|
|
inherit server;
|
|
};
|
|
|
|
nixosModules.default = {
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
...
|
|
}: {
|
|
options = let
|
|
inherit (lib) mkOption mkEnableOption types;
|
|
in {
|
|
services.scanbuddy = {
|
|
enable = mkEnableOption "Enable the scanbuddy server";
|
|
environment = mkOption {
|
|
type = types.attrsOf (types.nullOr (types.oneOf [types.str types.path types.package]));
|
|
default = {};
|
|
};
|
|
};
|
|
};
|
|
config = let
|
|
cfg = config.services.scanbuddy;
|
|
in {
|
|
systemd.services.scanbuddy = lib.mkIf config.service.scanbuddy {
|
|
description = "The scanbuddy webservice";
|
|
wantedBy = ["multi-user.target"];
|
|
serviceConfig = {
|
|
ExecStart = "${scanbuddy-pkg}/bin/scanbuddy-server";
|
|
Path = ["${scanbuddy-pkg}/bin"];
|
|
WorkingDirectory = "/var/lib/scanbuddy";
|
|
Type = "simple";
|
|
};
|
|
environment = cfg.environment;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|