Compare commits
5 commits
main
...
pretix-tes
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
37d4428fda | ||
|
|
83a30d6bae | ||
|
|
e08237c633 | ||
|
|
0573e301fb | ||
|
|
337c2598b6 |
22 changed files with 4737 additions and 1 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -1,4 +1,5 @@
|
||||||
result*
|
result*
|
||||||
|
*.qcow2
|
||||||
.pre-commit-config.yaml
|
.pre-commit-config.yaml
|
||||||
/.direnv
|
.direnv
|
||||||
__pycache__
|
__pycache__
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ keys:
|
||||||
- &admin_jalr_tb FE170812543DF81393EA56BA5042B8317A10617E
|
- &admin_jalr_tb FE170812543DF81393EA56BA5042B8317A10617E
|
||||||
- &host_hafnium age1ahnfjspcpwxxk7getcxkj3fypwt37rr6p3xsmp8n2tqqqz8jtg7q2am0et
|
- &host_hafnium age1ahnfjspcpwxxk7getcxkj3fypwt37rr6p3xsmp8n2tqqqz8jtg7q2am0et
|
||||||
- &host_aluminium age1ne08hny30vrkejqhh7dcx4ql6dmkx6jw9dqkf3cz7mzvt53njy0qh59w44
|
- &host_aluminium age1ne08hny30vrkejqhh7dcx4ql6dmkx6jw9dqkf3cz7mzvt53njy0qh59w44
|
||||||
|
- &host_pretix age139r3v2yy7ea205pauchgnggq6qqdpgc5fy7mv49wc5cw58p6hpdqltpkzn
|
||||||
creation_rules:
|
creation_rules:
|
||||||
- path_regex: hosts/hafnium/secrets\.yaml$
|
- path_regex: hosts/hafnium/secrets\.yaml$
|
||||||
key_groups:
|
key_groups:
|
||||||
|
|
@ -16,6 +17,12 @@ creation_rules:
|
||||||
- *admin_jalr
|
- *admin_jalr
|
||||||
age:
|
age:
|
||||||
- *host_aluminium
|
- *host_aluminium
|
||||||
|
- path_regex: hosts/pretix/secrets\.yaml$
|
||||||
|
key_groups:
|
||||||
|
- pgp:
|
||||||
|
- *admin_jalr
|
||||||
|
age:
|
||||||
|
- *host_pretix
|
||||||
- path_regex: secrets\.yaml$
|
- path_regex: secrets\.yaml$
|
||||||
key_groups:
|
key_groups:
|
||||||
- pgp:
|
- pgp:
|
||||||
|
|
|
||||||
13
README.md
13
README.md
|
|
@ -13,6 +13,19 @@ This installs nixos on host `somehost`:
|
||||||
nix-shell -p nixUnstable --run 'nixos-install --flake https://gitlab.jalr.de/jalr/nixos-configuration#somehost --no-channel-copy'
|
nix-shell -p nixUnstable --run 'nixos-install --flake https://gitlab.jalr.de/jalr/nixos-configuration#somehost --no-channel-copy'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### setting up sops
|
||||||
|
Get the host key and convert it.
|
||||||
|
```bash
|
||||||
|
ssh-keyscan -t ed25519 $host | ssh-to-age
|
||||||
|
```
|
||||||
|
|
||||||
|
Then add the key to `.sops.yaml`
|
||||||
|
|
||||||
|
If the key changed, you might want to run
|
||||||
|
```bash
|
||||||
|
sops updatekeys hosts/$host/secrets.yaml
|
||||||
|
```
|
||||||
|
|
||||||
## nix repl
|
## nix repl
|
||||||
start an interactive environment for evaluating Nix expressions
|
start an interactive environment for evaluating Nix expressions
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,4 +13,7 @@
|
||||||
hafnium = {
|
hafnium = {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
};
|
};
|
||||||
|
pretix = {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
32
hosts/pretix/configuration.nix
Normal file
32
hosts/pretix/configuration.nix
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./services
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [ 8000 ];
|
||||||
|
|
||||||
|
networking.hostName = "pretix";
|
||||||
|
services.getty.autologinUser = "root";
|
||||||
|
|
||||||
|
# This value determines the NixOS release from which the default
|
||||||
|
# settings for stateful data, like file locations and database versions
|
||||||
|
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||||
|
# this value at the release version of the first install of this system.
|
||||||
|
# Before changing this value read the documentation for this option
|
||||||
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
|
system.stateVersion = "22.05"; # Did you read the comment?
|
||||||
|
|
||||||
|
services.openssh.enable = true;
|
||||||
|
boot.loader.grub.devices = [
|
||||||
|
"/dev/fd0"
|
||||||
|
];
|
||||||
|
fileSystems."/" =
|
||||||
|
{
|
||||||
|
device = "/dev/vda";
|
||||||
|
fsType = "ext4";
|
||||||
|
options = [ "rw,relatime" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
32
hosts/pretix/secrets.yaml
Normal file
32
hosts/pretix/secrets.yaml
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
pretix-cfg: ENC[AES256_GCM,data:G3anJGQ/f441EllA7aZxcKF/ts8yxJrMGhJDMBnJQcLk4jNT5ODOs3Ws01vmxEvBuHtsBSwXhA/8viFJ/5dsv7KkRZ20telFlVsZhfJDkHi3HhQkKX8M8lsZ3lLEPBezIA==,iv:EWlnqkzNrYMwKQMykfKHWgQ96v1T+ZBOUkxzEH5rm60=,tag:nXFOC3U3N0X3DlavC7CpMg==,type:str]
|
||||||
|
sops:
|
||||||
|
kms: []
|
||||||
|
gcp_kms: []
|
||||||
|
azure_kv: []
|
||||||
|
hc_vault: []
|
||||||
|
age:
|
||||||
|
- recipient: age139r3v2yy7ea205pauchgnggq6qqdpgc5fy7mv49wc5cw58p6hpdqltpkzn
|
||||||
|
enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6cVdPci9DSis1RVJ4c2k3
|
||||||
|
RnFRMU85UDRJS09laGdsUVhzQ1RmNVNWdUc4CjRZY1NEVnJCeUl1OEY5cGFOL1V4
|
||||||
|
eUR0amp4QjV6NW1QVW4vc1cyd0s4ZmsKLS0tIDBhYXZEcUFXaEk1dGU0WFhuRGds
|
||||||
|
MzVFWnVFd2RteTlPTlU3cVh1dzREemMKBRUgxNfgivCZxvF7SzeSfDBMjiDLoK2E
|
||||||
|
rBrg/Pf+nb8eW2+iKEQOr92W6qDclmpyW7kyPhrpKd2XH6Wv8bYNlw==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
lastmodified: "2023-02-22T23:04:36Z"
|
||||||
|
mac: ENC[AES256_GCM,data:1TKPZtRDJ1GDZPsraYfkjQ2se45Cf3cBK+oY7UZ+Gxc8jyasLMO16e+In94vWej0FAnmIOjvIxB7e5wU6IKBf6mJi6gfAXByxyoljwRBH0YKyVRFG2ZQ6cIGkqf2tGwyasQqeRxsjDqaAqlAh82a1idhoLs6gNrzZiua+F0jLeM=,iv:q2jEezVKJ2+EA6tI1lvDdBMH5XhM7uLd03F5Nec9Fb0=,tag:zEp7r6UBiRkHFyUdJkL5+Q==,type:str]
|
||||||
|
pgp:
|
||||||
|
- created_at: "2023-02-22T22:45:23Z"
|
||||||
|
enc: |
|
||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
hF4D3ylLYNOsO+0SAQdA1GDmHtEufAAPHfV63IdRTToPc9k5g6icNG8Of12ChGgw
|
||||||
|
5SSsWckNxb8Pb/M4AeUlXhVdjE2NruZJWDjsiCyvTC0W8VciaHiX/1r+O6OPT+dW
|
||||||
|
0l4BoXqtH3Q64tpVDpwOglUuXPYadNZ2BYGCef4tRPbBSbD2KegV4fvrEFpj8HOj
|
||||||
|
jEWtgvD5M2M+0r9BOVHM+B4rF4JOgWVJuMXH7wIUKj77d862TbwVE+z9nREICvC0
|
||||||
|
=GoJv
|
||||||
|
-----END PGP MESSAGE-----
|
||||||
|
fp: 66FB54F6081375106EEBF651A222365EB448F934
|
||||||
|
unencrypted_suffix: _unencrypted
|
||||||
|
version: 3.7.3
|
||||||
5
hosts/pretix/services/default.nix
Normal file
5
hosts/pretix/services/default.nix
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./pretix.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
14
hosts/pretix/services/pretix.nix
Normal file
14
hosts/pretix/services/pretix.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
services.pretix = {
|
||||||
|
enable = true;
|
||||||
|
instanceName = "Pretix test installation";
|
||||||
|
domain = "pretix.example.com";
|
||||||
|
enableTls = false;
|
||||||
|
enableRegistration = true;
|
||||||
|
passwordReset = true;
|
||||||
|
locale = "de";
|
||||||
|
timezone = "Europe/Berlin";
|
||||||
|
secretsFile = ../secrets.yaml;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
../pkgs/modules.nix
|
||||||
./autologin.nix
|
./autologin.nix
|
||||||
./aws.nix
|
./aws.nix
|
||||||
./bootloader
|
./bootloader
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@ let
|
||||||
inherit (prev) callPackage;
|
inherit (prev) callPackage;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
pretix = callPackage ./pretix/pretix.nix { };
|
||||||
|
pretix-static = callPackage ./pretix/pretix-static.nix { };
|
||||||
fpvout = callPackage ./fpvout { };
|
fpvout = callPackage ./fpvout { };
|
||||||
mute-indicator = callPackage ./mute-indicator { };
|
mute-indicator = callPackage ./mute-indicator { };
|
||||||
tabbed-box-maker = callPackage ./tabbed-box-maker { };
|
tabbed-box-maker = callPackage ./tabbed-box-maker { };
|
||||||
|
|
|
||||||
7
pkgs/modules.nix
Normal file
7
pkgs/modules.nix
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./pretix/module.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
1
pkgs/pretix/.envrc
Normal file
1
pkgs/pretix/.envrc
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
use nix
|
||||||
211
pkgs/pretix/module.nix
Normal file
211
pkgs/pretix/module.nix
Normal file
|
|
@ -0,0 +1,211 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.pretix;
|
||||||
|
name = "pretix";
|
||||||
|
user = "pretix";
|
||||||
|
group = "pretix";
|
||||||
|
bind = {
|
||||||
|
host = "127.0.0.1";
|
||||||
|
port = 8000;
|
||||||
|
};
|
||||||
|
postgresql = {
|
||||||
|
database = "pretix";
|
||||||
|
user = "pretix";
|
||||||
|
password = "pretix";
|
||||||
|
};
|
||||||
|
redisPort = 6379;
|
||||||
|
urlScheme = if cfg.enableTls then "https" else "http";
|
||||||
|
url = "${urlScheme}://${cfg.domain}";
|
||||||
|
toBool = x: if x then "on" else "off";
|
||||||
|
pythonPackages = pkgs.pretix.passthru.pythonModule.passthru.pkgs;
|
||||||
|
python = pkgs.pretix.passthru.python;
|
||||||
|
runCommandArgs = {
|
||||||
|
# Sets PYTHONPATH in derivation
|
||||||
|
buildInputs = [
|
||||||
|
pkgs.pretix
|
||||||
|
pythonPackages.gunicorn
|
||||||
|
pythonPackages.celery
|
||||||
|
];
|
||||||
|
};
|
||||||
|
staticRoot = pkgs.pretix-static;
|
||||||
|
environmentFile = pkgs.runCommand "pretix-environ" runCommandArgs ''
|
||||||
|
cat > $out <<EOF
|
||||||
|
DATA_DIR = /var/pretix
|
||||||
|
DJANGO_SETTINGS_MODULE=pretix_wrapper.settings
|
||||||
|
PRETIX_CELERY_BACKEND=redis://127.0.0.1:${toString redisPort}/2
|
||||||
|
PRETIX_CELERY_BROKER=redis://127.0.0.1:${toString redisPort}/1
|
||||||
|
PRETIX_DATABASE_BACKEND=postgresql
|
||||||
|
PRETIX_DATABASE_HOST=localhost
|
||||||
|
PRETIX_DATABASE_NAME=${postgresql.database}
|
||||||
|
PRETIX_DATABASE_PASSWORD=${postgresql.password}
|
||||||
|
PRETIX_DATABASE_USER=${postgresql.user}
|
||||||
|
PRETIX_LOCALE_DEFAULT=${cfg.locale}
|
||||||
|
PRETIX_LOCALE_TIMEZONE=${cfg.timezone}
|
||||||
|
PRETIX_PRETIX_INSTANCE_NAME=${cfg.instanceName}
|
||||||
|
PRETIX_PRETIX_PASSWORD_RESET=${toBool cfg.passwordReset}
|
||||||
|
PRETIX_PRETIX_REGISTRATION=${toBool cfg.enableRegistration}
|
||||||
|
PRETIX_PRETIX_URL=${url}
|
||||||
|
PRETIX_REDIS_LOCATION=redis://127.0.0.1:${toString redisPort}/0
|
||||||
|
PRETIX_REDIS_SESSIONS=true
|
||||||
|
PRETIX_STATIC_ROOT=${staticRoot}
|
||||||
|
PYTHONPATH=$PYTHONPATH
|
||||||
|
EOF
|
||||||
|
'';
|
||||||
|
mkTimer = { description, unit, onCalendar }: {
|
||||||
|
inherit description;
|
||||||
|
requires = [ "pretix-migrate.service" ];
|
||||||
|
after = [ "network.target" ];
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
timerConfig = {
|
||||||
|
Persistent = true;
|
||||||
|
OnCalendar = onCalendar;
|
||||||
|
Unit = unit;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.services.pretix = with lib; {
|
||||||
|
enable = mkEnableOption "Enable pretix ticket shop application";
|
||||||
|
instanceName = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = "The name of this installation.";
|
||||||
|
};
|
||||||
|
domain = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = "The installation’s domain";
|
||||||
|
};
|
||||||
|
enableTls = mkEnableOption "Whether to use TLS or not";
|
||||||
|
enableRegistration = mkEnableOption "Enables or disables the registration of new admin users.";
|
||||||
|
passwordReset = mkEnableOption "Enables or disables password reset.";
|
||||||
|
locale = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = "The system’s default locale.";
|
||||||
|
};
|
||||||
|
timezone = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = "The system’s default timezone as a pytz name.";
|
||||||
|
};
|
||||||
|
secretsFile = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
description = "Path to the sops secrets file which stores pretix.cfg settings.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
sops.secrets.pretix-cfg = {
|
||||||
|
sopsFile = cfg.secretsFile;
|
||||||
|
};
|
||||||
|
|
||||||
|
users.users."${user}" = {
|
||||||
|
createHome = true;
|
||||||
|
description = "Pretix user";
|
||||||
|
home = "/var/pretix";
|
||||||
|
isNormalUser = false;
|
||||||
|
isSystemUser = true;
|
||||||
|
group = group;
|
||||||
|
};
|
||||||
|
users.groups."${group}" = { };
|
||||||
|
|
||||||
|
services.nginx = {
|
||||||
|
enable = true;
|
||||||
|
recommendedGzipSettings = true;
|
||||||
|
recommendedOptimisation = true;
|
||||||
|
recommendedProxySettings = true;
|
||||||
|
recommendedTlsSettings = true;
|
||||||
|
virtualHosts."${cfg.domain}" = {
|
||||||
|
enableACME = cfg.enableTls;
|
||||||
|
forceSSL = cfg.enableTls;
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://${bind.host}:${toString bind.port}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.postgresql = {
|
||||||
|
enable = true;
|
||||||
|
enableTCPIP = true;
|
||||||
|
authentication = pkgs.lib.mkOverride 10 ''
|
||||||
|
local all all trust
|
||||||
|
host all all ::1/128 trust
|
||||||
|
'';
|
||||||
|
initialScript = pkgs.writeText "backend-initScript" ''
|
||||||
|
CREATE ROLE ${postgresql.user} WITH LOGIN PASSWORD '${postgresql.password}' CREATEDB;
|
||||||
|
CREATE DATABASE ${postgresql.database};
|
||||||
|
GRANT ALL PRIVILEGES ON DATABASE ${postgresql.database} TO ${postgresql.user};
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
services.redis.servers.pretix = {
|
||||||
|
enable = true;
|
||||||
|
port = redisPort;
|
||||||
|
databases = 3;
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [ 80 443 ];
|
||||||
|
|
||||||
|
environment.etc."pretix/pretix.cfg".source = config.sops.secrets.pretix-cfg.path;
|
||||||
|
|
||||||
|
systemd.services.pretix-migrate = {
|
||||||
|
description = "Pretix DB Migrations";
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
EnvironmentFile = environmentFile;
|
||||||
|
User = user;
|
||||||
|
};
|
||||||
|
script = "${pkgs.pretix}/bin/pretix migrate";
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.pretix-web = {
|
||||||
|
description = "Pretix Web Service";
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "simple";
|
||||||
|
Restart = "on-failure";
|
||||||
|
EnvironmentFile = environmentFile;
|
||||||
|
User = user;
|
||||||
|
ExecStart = pkgs.writeScript "webserver" ''
|
||||||
|
#!${pkgs.runtimeShell}
|
||||||
|
set -euo pipefail
|
||||||
|
exec ${pythonPackages.gunicorn}/bin/gunicorn pretix.wsgi --name ${name} \
|
||||||
|
--workers 3 \
|
||||||
|
--log-level=info \
|
||||||
|
--bind=${bind.host}:${toString bind.port}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
requires = [ "pretix-migrate.service" ];
|
||||||
|
after = [ "network.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.pretix-worker = {
|
||||||
|
description = "Pretix Celery (Worker) Service";
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "simple";
|
||||||
|
Restart = "on-failure";
|
||||||
|
EnvironmentFile = environmentFile;
|
||||||
|
User = user;
|
||||||
|
ExecStart = "${pythonPackages.celery}/bin/celery -A pretix.celery_app worker -l info";
|
||||||
|
};
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
requires = [ "pretix-migrate.service" ];
|
||||||
|
after = [ "network.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.pretix-runperiodic = {
|
||||||
|
description = "Pretix periodic tasks";
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
EnvironmentFile = environmentFile;
|
||||||
|
User = user;
|
||||||
|
};
|
||||||
|
script = "${pkgs.pretix}/bin/pretix runperiodic";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Once every 5 minutes
|
||||||
|
systemd.timers.pretix-runperiodic = mkTimer {
|
||||||
|
description = "Run pretix tasks";
|
||||||
|
unit = "pretix-runperiodic.service";
|
||||||
|
onCalendar = "*:0/5";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
2749
pkgs/pretix/poetry.lock
generated
Normal file
2749
pkgs/pretix/poetry.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
48
pkgs/pretix/pretix-static.nix
Normal file
48
pkgs/pretix/pretix-static.nix
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
{ stdenvNoCC
|
||||||
|
, pretix
|
||||||
|
, buildNpmPackage
|
||||||
|
, makeWrapper
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
nodeEnv = buildNpmPackage rec {
|
||||||
|
name = "pretix-nodejs";
|
||||||
|
src = "${pretix.passthru.pythonModule.pkgs.pretix}/lib/python3.10/site-packages/pretix/static/npm_dir";
|
||||||
|
npmDepsHash = "sha256-bRy3Elof7daxv0dD93SnPcJ0fT19Mkq81gZPJduMCC4=";
|
||||||
|
dontNpmBuild = true;
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out
|
||||||
|
cp -r node_modules $out/
|
||||||
|
mkdir -p $out/bin
|
||||||
|
ln -s $out/node_modules/rollup/dist/bin/rollup $out/bin/rollup
|
||||||
|
'';
|
||||||
|
postFixup = ''
|
||||||
|
wrapProgram $out/bin/rollup --prefix NODE_PATH : $out
|
||||||
|
'';
|
||||||
|
nativeBuildInputs = [
|
||||||
|
makeWrapper
|
||||||
|
];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
stdenvNoCC.mkDerivation {
|
||||||
|
name = "pretix-static";
|
||||||
|
src = ./.;
|
||||||
|
buildPhase = ''
|
||||||
|
mkdir $out
|
||||||
|
export PRETIX_STATIC_ROOT=$out
|
||||||
|
export DJANGO_SETTINGS_MODULE=pretix_wrapper.settings
|
||||||
|
${pretix}/bin/pretix collectstatic --noinput
|
||||||
|
mkdir -p $PRETIX_STATIC_ROOT/node_prefix
|
||||||
|
ln -s ${nodeEnv}/node_modules $PRETIX_STATIC_ROOT/node_prefix/node_modules
|
||||||
|
echo ${nodeEnv}/bin/rollup
|
||||||
|
${pretix}/bin/pretix compress
|
||||||
|
'';
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
nativeBuildInputs = [
|
||||||
|
nodeEnv
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
52
pkgs/pretix/pretix.nix
Normal file
52
pkgs/pretix/pretix.nix
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
{ lib
|
||||||
|
, poetry2nix
|
||||||
|
, pkgs
|
||||||
|
, tlds-alpha-by-domain ? ./tlds-alpha-by-domain.txt
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
tlds = pkgs.fetchurl {
|
||||||
|
url = "https://data.iana.org/TLD/tlds-alpha-by-domain.txt";
|
||||||
|
sha256 = "0153py77ll759jacq41dp2z2ksr08pdcfic0rwjd6pr84dk89y9v";
|
||||||
|
};
|
||||||
|
pkgsRequiringSetuptools = [
|
||||||
|
"dj-static"
|
||||||
|
"django-jquery-js"
|
||||||
|
"paypal-checkout-serversdk"
|
||||||
|
"python-u2flib-server"
|
||||||
|
"slimit"
|
||||||
|
"static3"
|
||||||
|
];
|
||||||
|
in
|
||||||
|
poetry2nix.mkPoetryApplication rec {
|
||||||
|
projectDir = ./.;
|
||||||
|
#python = pkgs.python310;
|
||||||
|
preferWheels = true;
|
||||||
|
overrides = poetry2nix.defaultPoetryOverrides.extend
|
||||||
|
(
|
||||||
|
self: super: lib.attrsets.genAttrs pkgsRequiringSetuptools
|
||||||
|
(
|
||||||
|
pythonPackage:
|
||||||
|
super."${pythonPackage}".overridePythonAttrs (
|
||||||
|
old: {
|
||||||
|
buildInputs = (old.buildInputs or [ ]) ++ [ super.setuptools ];
|
||||||
|
}
|
||||||
|
)
|
||||||
|
) // {
|
||||||
|
tlds = super.tlds.overridePythonAttrs (
|
||||||
|
old: {
|
||||||
|
buildInputs = (old.buildInputs or [ ]) ++ [ super.setuptools ];
|
||||||
|
patches = [
|
||||||
|
./tlds-read-domains-from-file.patch
|
||||||
|
];
|
||||||
|
|
||||||
|
# https://data.iana.org/TLD/tlds-alpha-by-domain.txt
|
||||||
|
preBuild = "cp ${tlds-alpha-by-domain} ./tlds-alpha-by-domain.txt";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
# .overrideAttrs(old: {
|
||||||
|
# inherit (old.passthru.pythonPackages.pretix) pname name version;
|
||||||
|
# })
|
||||||
9
pkgs/pretix/pretix_wrapper/__main__.py
Normal file
9
pkgs/pretix/pretix_wrapper/__main__.py
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
module_name = "pretix"
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
os.environ["PYTHONPATH"] = ":".join(sys.path)
|
||||||
|
os.execv(sys.executable, [sys.executable, "-m", module_name, *sys.argv[1:]])
|
||||||
4
pkgs/pretix/pretix_wrapper/settings.py
Normal file
4
pkgs/pretix/pretix_wrapper/settings.py
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
import os
|
||||||
|
from pretix.settings import *
|
||||||
|
|
||||||
|
STATIC_ROOT = os.getenv("PRETIX_STATIC_ROOT")
|
||||||
19
pkgs/pretix/pyproject.toml
Normal file
19
pkgs/pretix/pyproject.toml
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
[tool.poetry]
|
||||||
|
name = "pretix_wrapper"
|
||||||
|
version = "1.0.0"
|
||||||
|
description = ""
|
||||||
|
authors = ["Jakob Lechner <mail@jalr.de>"]
|
||||||
|
license = "MIT"
|
||||||
|
|
||||||
|
[tool.poetry.dependencies]
|
||||||
|
python = "^3.10"
|
||||||
|
pretix = "^4.16"
|
||||||
|
|
||||||
|
[tool.poetry.dev-dependencies]
|
||||||
|
|
||||||
|
[tool.poetry.scripts]
|
||||||
|
pretix = "pretix_wrapper.__main__:main"
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["poetry>=0.12"]
|
||||||
|
build-backend = "poetry.masonry.api"
|
||||||
8
pkgs/pretix/shell.nix
Normal file
8
pkgs/pretix/shell.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
with import <nixpkgs> { };
|
||||||
|
|
||||||
|
mkShell {
|
||||||
|
buildInputs = [
|
||||||
|
poetry
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
1482
pkgs/pretix/tlds-alpha-by-domain.txt
Normal file
1482
pkgs/pretix/tlds-alpha-by-domain.txt
Normal file
File diff suppressed because it is too large
Load diff
36
pkgs/pretix/tlds-read-domains-from-file.patch
Normal file
36
pkgs/pretix/tlds-read-domains-from-file.patch
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
From 40544e83b5920c84a4565c2bf8dc29fc381d5796 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jakob Lechner <mail@jalr.de>
|
||||||
|
Date: Tue, 21 Feb 2023 21:25:06 +0000
|
||||||
|
Subject: [PATCH] read static file
|
||||||
|
|
||||||
|
---
|
||||||
|
setup.py | 13 +++----------
|
||||||
|
1 file changed, 3 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/setup.py b/setup.py
|
||||||
|
index 6b4653c..13b6ad4 100644
|
||||||
|
--- a/setup.py
|
||||||
|
+++ b/setup.py
|
||||||
|
@@ -8,16 +8,9 @@ from setuptools import setup, find_packages
|
||||||
|
if sys.version_info.major >= 3:
|
||||||
|
import urllib.request
|
||||||
|
|
||||||
|
- r = urllib.request.urlopen('https://data.iana.org/TLD/tlds-alpha-by-domain.txt')
|
||||||
|
- assert r.status == 200
|
||||||
|
- data = r.read().decode('utf-8').split('\n')
|
||||||
|
-else:
|
||||||
|
- import urllib
|
||||||
|
-
|
||||||
|
- r = urllib.urlopen('https://data.iana.org/TLD/tlds-alpha-by-domain.txt')
|
||||||
|
- assert r.getcode() == 200
|
||||||
|
- data = r.read().split('\n')
|
||||||
|
-
|
||||||
|
+ with open("tlds-alpha-by-domain.txt", 'r') as f:
|
||||||
|
+ data = f.read().split('\n')
|
||||||
|
+
|
||||||
|
version = re.match('^# Version (?P<version>[0-9]+).*$', data[0]).group('version')
|
||||||
|
tlds = [i.lower() for i in data[1:] if i and not i.startswith('#')]
|
||||||
|
|
||||||
|
--
|
||||||
|
2.38.3
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue