get nixed

This commit is contained in:
Peder Bergebakken Sundt 2023-08-17 21:45:27 +02:00
parent 63de4be667
commit 70a5d1047e
6 changed files with 786 additions and 482 deletions

15
.envrc
View File

@ -2,7 +2,20 @@
# This file is loaded with `direnv`. # This file is loaded with `direnv`.
# It enters you into the poetry venv, removing the need for `poetry run`. # It enters you into the poetry venv, removing the need for `poetry run`.
poetry run true # create venv if it doesn't exist if command -v nix >/dev/null; then
use nix -p poetry
fi
# Instead of using the flake, we use poetry to manage a development venv
# We only use poetry2nix for deployment
# create venv if it doesn't exist
poetry run true
# enter venv
export VIRTUAL_ENV=$(poetry env info --path) export VIRTUAL_ENV=$(poetry env info --path)
export POETRY_ACTIVE=1 export POETRY_ACTIVE=1
PATH_add "$VIRTUAL_ENV/bin" PATH_add "$VIRTUAL_ENV/bin"
if ! command -v sanic >/dev/null; then
poetry install
fi

2
.gitignore vendored
View File

@ -1,2 +1,4 @@
__pycache__/ __pycache__/
*.pyc *.pyc
result
result-*

27
flake.lock Normal file
View File

@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1692174805,
"narHash": "sha256-xmNPFDi/AUMIxwgOH/IVom55Dks34u1g7sFKKebxUm0=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "caac0eb6bdcad0b32cb2522e03e4002c8975c62e",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

130
flake.nix Normal file
View File

@ -0,0 +1,130 @@
{
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
outputs = {
self,
nixpkgs,
...
} @ inputs:
let
flake = inputs: system: nixpkgs.lib.mapAttrs (name: flake: {
# TODO filter non-flake inputs
nixos = flake.nixosModules
or null;
pkgs = flake.packages.${system}
or flake.legacyPackages.${system}
or null;
lib = flake.lib.${system}
or flake.lib
or null;
}) inputs;
forSystems = systems: f: nixpkgs.lib.genAttrs systems (system: f rec {
inherit system;
pkgs = nixpkgs.legacyPackages.${system};
lib = nixpkgs.legacyPackages.${system}.lib;
flakes = flake inputs system;
});
forAllSystems = forSystems [
"x86_64-linux"
"aarch64-linux"
#"riscv64-linux"
];
in {
packages = forAllSystems ({ pkgs, flakes, ...}: {
remi = with pkgs.python3.pkgs; buildPythonPackage rec {
pname = "remi";
version = "1.0";
src = fetchPypi {
inherit pname version;
hash = "sha256-65qc+td/mk/RSUcRWbPGVbS9S0F1o1S9zIkJb0Ek2eQ=";
extension = "zip";
};
# https://github.com/rawpython/remi/issues/216
postPatch = ''
substituteInPlace remi/server.py \
--replace \
"WebSocket('ws://%s:%s/');" \
"WebSocket('wss://%s/websocket'); // %s"
'';
};
grzegorz-clients = with pkgs.python3.pkgs; buildPythonPackage {
pname = "grzegorz-clients";
version = (builtins.fromTOML (builtins.readFile ./pyproject.toml)).tool.poetry.version;
format = "pyproject";
src = ./.;
nativeBuildInputs = [ poetry-core ];
propagatedBuildInputs = [ setuptools youtube-dl flakes.self.pkgs.remi requests typer urllib3 ];
};
default = flakes.self.pkgs.grzegorz-clients;
});
apps = forAllSystems ({ system, ...}: rec {
grzegorz-webui.type = "app";
grzegorz-webui.program = "${self.packages.${system}.grzegorz-clients}/bin/grzegorz-webui";
default = grzegorz-webui;
});
nixosModules.grzegorz-webui = { config, pkgs, ... }: let
inherit (pkgs) lib;
cfg = config.services.grzegorz-webui;
in {
options.services.grzegorz-webui = {
enable = lib.mkEnableOption (lib.mdDoc "grzegorz");
package = lib.mkPackageOption self.packages.${config.nixpkgs.system} "grzegorz-clients" { };
listenAddr = lib.mkOption {
type = lib.types.str;
default = "::";
};
listenPort = lib.mkOption {
type = lib.types.port;
default = 8080;
};
listenWebsocketPort = lib.mkOption {
type = lib.types.port;
default = 0;
};
multipleInstance = lib.mkOption {
type = lib.types.bool;
default = false;
};
hostName = lib.mkOption {
type = lib.types.str;
default = "brzeczyszczykiewicz.pvv.ntnu.no";
};
apiBase = lib.mkOption {
type = lib.types.str;
default = "https://brzeczyszczykiewicz.pvv.ntnu.no/api";
};
};
config = {
systemd.services.grzegorz-webui = lib.mkIf cfg.enable {
description = "grzegorz-webui";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
User = "grzegorz-webui";
Group = "grzegorz-webui";
DynamicUser = true;
#StateDirectory = "grzegorz-webui";
#CacheDirectory = "grzegorz-webui";
ExecStart = lib.escapeShellArgs [
"${cfg.package}/bin/grzegorz-webui"
"--address" cfg.listenAddr
"--port" cfg.listenPort
"--host-name" cfg.hostName
"--api-base" cfg.apiBase
"--websocket-port" cfg.listenWebsocketPort
(if cfg.multipleInstance
then "--multiple-instance"
else "--no-multiple-instance")
];
Restart = "on-failure";
};
};
};
};
};
}

1088
poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -8,13 +8,13 @@ license = "MIT"
[tool.poetry.dependencies] [tool.poetry.dependencies]
python = ">=3.7,<4.0" python = ">=3.7,<4.0"
youtube_dl = ">=2021.12.17" youtube_dl = ">=2021.12.17"
remi = {url = "https://github.com/dddomodossola/remi/archive/v1.0.tar.gz"} remi = "1.0"
requests = ">=2.27.1,<3" requests = ">=2.27.1,<3"
typer = "^0.4.0" typer = ">=0.4.0"
urllib3 = "^1.26.8" urllib3 = "^1.26.8"
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]
python-lsp-server = {extras = ["all"], version = "^1.3.3"} python-lsp-server = {extras = ["all"], version = "^1.5.0"}
[tool.poetry.scripts] [tool.poetry.scripts]
grzegorz-webui = "grzegorz_clients.__main__:cli" grzegorz-webui = "grzegorz_clients.__main__:cli"