Merge master into haskell-updates
This commit is contained in:
+2
-2
@@ -104,10 +104,10 @@ This also works for PR's that have already been merged, and might take a couple
|
||||
You can also create the backport manually:
|
||||
|
||||
1. Take note of the commits in which the change was introduced into `master` branch.
|
||||
2. Check out the target _release branch_, e.g. `release-21.11`. Do not use a _channel branch_ like `nixos-21.11` or `nixpkgs-21.11-darwin`.
|
||||
2. Check out the target _release branch_, e.g. `release-22.05`. Do not use a _channel branch_ like `nixos-22.05` or `nixpkgs-22.05-darwin`.
|
||||
3. Create a branch for your change, e.g. `git checkout -b backport`.
|
||||
4. When the reason to backport is not obvious from the original commit message, use `git cherry-pick -xe <original commit>` and add a reason. Otherwise use `git cherry-pick -x <original commit>`. That's fine for minor version updates that only include security and bug fixes, commits that fixes an otherwise broken package or similar. Please also ensure the commits exists on the master branch; in the case of squashed or rebased merges, the commit hash will change and the new commits can be found in the merge message at the bottom of the master pull request.
|
||||
5. Push to GitHub and open a backport pull request. Make sure to select the release branch (e.g. `release-21.11`) as the target branch of the pull request, and link to the pull request in which the original change was comitted to `master`. The pull request title should be the commit title with the release version as prefix, e.g. `[21.11]`.
|
||||
5. Push to GitHub and open a backport pull request. Make sure to select the release branch (e.g. `release-22.05`) as the target branch of the pull request, and link to the pull request in which the original change was comitted to `master`. The pull request title should be the commit title with the release version as prefix, e.g. `[22.05]`.
|
||||
6. When the backport pull request is merged and you have the necessary privileges you can also replace the label `9.needs: port to stable` with `8.has: port to stable` on the original pull request. This way maintainers can keep track of missing backports easier.
|
||||
|
||||
## Criteria for Backporting changes
|
||||
|
||||
@@ -306,8 +306,6 @@ rec {
|
||||
|
||||
# BSDs
|
||||
|
||||
amd64-netbsd = lib.warn "The amd64-netbsd system example is deprecated. Use x86_64-netbsd instead." x86_64-netbsd;
|
||||
|
||||
x86_64-netbsd = {
|
||||
config = "x86_64-unknown-netbsd";
|
||||
libc = "nblibc";
|
||||
|
||||
@@ -8799,17 +8799,6 @@
|
||||
githubId = 3073833;
|
||||
name = "Massimo Redaelli";
|
||||
};
|
||||
mrhedgehog = {
|
||||
name = "Mr Hedgehog";
|
||||
email = "hedgehog@mrhedgehog.xyz";
|
||||
matrix = "@mrhedgehog:jupiterbroadcasting.com";
|
||||
github = "ModdedGamers";
|
||||
githubId = 35778371;
|
||||
keys = [{
|
||||
longkeyid = "rsa4096/0x7D5107866B1C6752";
|
||||
fingerprint = "38A0 29B0 4A7E 4C13 A4BB 86C8 7D51 0786 6B1C 6752";
|
||||
}];
|
||||
};
|
||||
mrkkrp = {
|
||||
email = "markkarpov92@gmail.com";
|
||||
github = "mrkkrp";
|
||||
@@ -9104,6 +9093,12 @@
|
||||
githubId = 3747396;
|
||||
name = "Nathan Isom";
|
||||
};
|
||||
necrophcodr = {
|
||||
email = "nc@scalehost.eu";
|
||||
github = "necrophcodr";
|
||||
githubId = 575887;
|
||||
name = "Steffen Rytter Postas";
|
||||
};
|
||||
neilmayhew = {
|
||||
email = "nix@neil.mayhew.name";
|
||||
github = "neilmayhew";
|
||||
@@ -11488,6 +11483,12 @@
|
||||
githubId = 59476;
|
||||
name = "Peter Schuller";
|
||||
};
|
||||
scoder12 = {
|
||||
name = "Spencer Pogorzelski";
|
||||
email = "34356756+Scoder12@users.noreply.github.com";
|
||||
github = "scoder12";
|
||||
githubId = 34356756;
|
||||
};
|
||||
scolobb = {
|
||||
email = "sivanov@colimite.fr";
|
||||
github = "scolobb";
|
||||
@@ -12779,6 +12780,17 @@
|
||||
githubId = 8547242;
|
||||
name = "Stefan Rohrbacher";
|
||||
};
|
||||
thehedgeh0g = {
|
||||
name = "The Hedgehog";
|
||||
email = "hedgehog@mrhedgehog.xyz";
|
||||
matrix = "@mrhedgehog:jupiterbroadcasting.com";
|
||||
github = "ModdedGamers";
|
||||
githubId = 35778371;
|
||||
keys = [{
|
||||
longkeyid = "rsa4096/0x7D5107866B1C6752";
|
||||
fingerprint = "38A0 29B0 4A7E 4C13 A4BB 86C8 7D51 0786 6B1C 6752";
|
||||
}];
|
||||
};
|
||||
thelegy = {
|
||||
email = "mail+nixos@0jb.de";
|
||||
github = "thelegy";
|
||||
|
||||
@@ -67,7 +67,7 @@ in
|
||||
programs.dconf.packages = [ ibusPackage ];
|
||||
|
||||
services.dbus.packages = [
|
||||
ibusAutostart
|
||||
ibusPackage
|
||||
];
|
||||
|
||||
environment.variables = {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
x86_64-linux = "/nix/store/6mjgljq8sm9bsz6k22as5ar3jw78644m-nix-2.8.1";
|
||||
i686-linux = "/nix/store/c4yjv4l8wncdla6ycicvsjrdf40xjkpp-nix-2.8.1";
|
||||
aarch64-linux = "/nix/store/qkgvks80mdibq7m86hqasgr5lpixbnmh-nix-2.8.1";
|
||||
x86_64-darwin = "/nix/store/riz4mzb1xhp36088ffnp40lz52bpxz01-nix-2.8.1";
|
||||
aarch64-darwin = "/nix/store/dirm8hsnmvvzjs21hrx8i84w8k453jzp-nix-2.8.1";
|
||||
x86_64-linux = "/nix/store/6g4fla3vkcxihph282a0v3cd10709y7c-nix-2.9.1";
|
||||
i686-linux = "/nix/store/j143221z44469zx21f5m9a47x7y1jpr5-nix-2.9.1";
|
||||
aarch64-linux = "/nix/store/c4z3vy1sgm49la8bvmdrrpssgk4iw2nk-nix-2.9.1";
|
||||
x86_64-darwin = "/nix/store/cqdwb7khf6zg94bz7lnvfjqx6z775qaw-nix-2.9.1";
|
||||
aarch64-darwin = "/nix/store/1brkxcs287n1px2i4fq39l7h51hjv0f8-nix-2.9.1";
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@ with lib;
|
||||
implementation if you use Gnome.
|
||||
'';
|
||||
package = mkOption {
|
||||
default = pkgs.kdeconnect;
|
||||
defaultText = literalExpression "pkgs.kdeconnect";
|
||||
default = pkgs.plasma5Packages.kdeconnect-kde;
|
||||
defaultText = literalExpression "pkgs.plasma5Packages.kdeconnect-kde";
|
||||
type = types.package;
|
||||
example = literalExpression "pkgs.gnomeExtensions.gsconnect";
|
||||
description = ''
|
||||
|
||||
@@ -734,7 +734,7 @@ in
|
||||
CPUSchedulingPolicy = cfg.daemonCPUSchedPolicy;
|
||||
IOSchedulingClass = cfg.daemonIOSchedClass;
|
||||
IOSchedulingPriority = cfg.daemonIOSchedPriority;
|
||||
LimitNOFILE = 4096;
|
||||
LimitNOFILE = 1048576;
|
||||
};
|
||||
|
||||
restartTriggers = [ nixConf ];
|
||||
|
||||
@@ -1,236 +0,0 @@
|
||||
{ config, lib, options, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.sourcehut;
|
||||
opt = options.services.sourcehut;
|
||||
scfg = cfg.builds;
|
||||
rcfg = config.services.redis;
|
||||
iniKey = "builds.sr.ht";
|
||||
|
||||
drv = pkgs.sourcehut.buildsrht;
|
||||
in
|
||||
{
|
||||
options.services.sourcehut.builds = {
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "buildsrht";
|
||||
description = ''
|
||||
User for builds.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 5002;
|
||||
description = ''
|
||||
Port on which the "builds" module should listen.
|
||||
'';
|
||||
};
|
||||
|
||||
database = mkOption {
|
||||
type = types.str;
|
||||
default = "builds.sr.ht";
|
||||
description = ''
|
||||
PostgreSQL database name for builds.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
statePath = mkOption {
|
||||
type = types.path;
|
||||
default = "${cfg.statePath}/buildsrht";
|
||||
defaultText = literalExpression ''"''${config.${opt.statePath}}/buildsrht"'';
|
||||
description = ''
|
||||
State path for builds.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
enableWorker = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Run workers for builds.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
images = mkOption {
|
||||
type = types.attrsOf (types.attrsOf (types.attrsOf types.package));
|
||||
default = { };
|
||||
example = lib.literalExpression ''(let
|
||||
# Pinning unstable to allow usage with flakes and limit rebuilds.
|
||||
pkgs_unstable = builtins.fetchGit {
|
||||
url = "https://github.com/NixOS/nixpkgs";
|
||||
rev = "ff96a0fa5635770390b184ae74debea75c3fd534";
|
||||
ref = "nixos-unstable";
|
||||
};
|
||||
image_from_nixpkgs = pkgs_unstable: (import ("''${pkgs.sourcehut.buildsrht}/lib/images/nixos/image.nix") {
|
||||
pkgs = (import pkgs_unstable {});
|
||||
});
|
||||
in
|
||||
{
|
||||
nixos.unstable.x86_64 = image_from_nixpkgs pkgs_unstable;
|
||||
}
|
||||
)'';
|
||||
description = ''
|
||||
Images for builds.sr.ht. Each package should be distro.release.arch and point to a /nix/store/package/root.img.qcow2.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
config = with scfg; let
|
||||
image_dirs = lib.lists.flatten (
|
||||
lib.attrsets.mapAttrsToList
|
||||
(distro: revs:
|
||||
lib.attrsets.mapAttrsToList
|
||||
(rev: archs:
|
||||
lib.attrsets.mapAttrsToList
|
||||
(arch: image:
|
||||
pkgs.runCommand "buildsrht-images" { } ''
|
||||
mkdir -p $out/${distro}/${rev}/${arch}
|
||||
ln -s ${image}/*.qcow2 $out/${distro}/${rev}/${arch}/root.img.qcow2
|
||||
'')
|
||||
archs)
|
||||
revs)
|
||||
scfg.images);
|
||||
image_dir_pre = pkgs.symlinkJoin {
|
||||
name = "builds.sr.ht-worker-images-pre";
|
||||
paths = image_dirs ++ [
|
||||
"${pkgs.sourcehut.buildsrht}/lib/images"
|
||||
];
|
||||
};
|
||||
image_dir = pkgs.runCommand "builds.sr.ht-worker-images" { } ''
|
||||
mkdir -p $out/images
|
||||
cp -Lr ${image_dir_pre}/* $out/images
|
||||
'';
|
||||
in
|
||||
lib.mkIf (cfg.enable && elem "builds" cfg.services) {
|
||||
users = {
|
||||
users = {
|
||||
"${user}" = {
|
||||
isSystemUser = true;
|
||||
group = user;
|
||||
extraGroups = lib.optionals cfg.builds.enableWorker [ "docker" ];
|
||||
description = "builds.sr.ht user";
|
||||
};
|
||||
};
|
||||
|
||||
groups = {
|
||||
"${user}" = { };
|
||||
};
|
||||
};
|
||||
|
||||
services.postgresql = {
|
||||
authentication = ''
|
||||
local ${database} ${user} trust
|
||||
'';
|
||||
ensureDatabases = [ database ];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = user;
|
||||
ensurePermissions = { "DATABASE \"${database}\"" = "ALL PRIVILEGES"; };
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
systemd = {
|
||||
tmpfiles.rules = [
|
||||
"d ${statePath} 0755 ${user} ${user} -"
|
||||
] ++ (lib.optionals cfg.builds.enableWorker
|
||||
[ "d ${statePath}/logs 0775 ${user} ${user} - -" ]
|
||||
);
|
||||
|
||||
services = {
|
||||
buildsrht = import ./service.nix { inherit config pkgs lib; } scfg drv iniKey
|
||||
{
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "builds.sr.ht website service";
|
||||
|
||||
serviceConfig.ExecStart = "${cfg.python}/bin/gunicorn ${drv.pname}.app:app -b ${cfg.address}:${toString port}";
|
||||
|
||||
# Hack to bypass this hack: https://git.sr.ht/~sircmpwn/core.sr.ht/tree/master/item/srht-update-profiles#L6
|
||||
} // { preStart = " "; };
|
||||
|
||||
buildsrht-worker = {
|
||||
enable = scfg.enableWorker;
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
partOf = [ "buildsrht.service" ];
|
||||
description = "builds.sr.ht worker service";
|
||||
path = [ pkgs.openssh pkgs.docker ];
|
||||
preStart = let qemuPackage = pkgs.qemu_kvm;
|
||||
in ''
|
||||
if [[ "$(docker images -q qemu:latest 2> /dev/null)" == "" || "$(cat ${statePath}/docker-image-qemu 2> /dev/null || true)" != "${qemuPackage.version}" ]]; then
|
||||
# Create and import qemu:latest image for docker
|
||||
${
|
||||
pkgs.dockerTools.streamLayeredImage {
|
||||
name = "qemu";
|
||||
tag = "latest";
|
||||
contents = [ qemuPackage ];
|
||||
}
|
||||
} | docker load
|
||||
# Mark down current package version
|
||||
printf "%s" "${qemuPackage.version}" > ${statePath}/docker-image-qemu
|
||||
fi
|
||||
'';
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = user;
|
||||
Group = "nginx";
|
||||
Restart = "always";
|
||||
};
|
||||
serviceConfig.ExecStart = "${pkgs.sourcehut.buildsrht}/bin/builds.sr.ht-worker";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.sourcehut.settings = {
|
||||
# URL builds.sr.ht is being served at (protocol://domain)
|
||||
"builds.sr.ht".origin = mkDefault "http://builds.${cfg.originBase}";
|
||||
# Address and port to bind the debug server to
|
||||
"builds.sr.ht".debug-host = mkDefault "0.0.0.0";
|
||||
"builds.sr.ht".debug-port = mkDefault port;
|
||||
# Configures the SQLAlchemy connection string for the database.
|
||||
"builds.sr.ht".connection-string = mkDefault "postgresql:///${database}?user=${user}&host=/var/run/postgresql";
|
||||
# Set to "yes" to automatically run migrations on package upgrade.
|
||||
"builds.sr.ht".migrate-on-upgrade = mkDefault "yes";
|
||||
# builds.sr.ht's OAuth client ID and secret for meta.sr.ht
|
||||
# Register your client at meta.example.org/oauth
|
||||
"builds.sr.ht".oauth-client-id = mkDefault null;
|
||||
"builds.sr.ht".oauth-client-secret = mkDefault null;
|
||||
# The redis connection used for the celery worker
|
||||
"builds.sr.ht".redis = mkDefault "redis://${rcfg.bind}:${toString rcfg.port}/3";
|
||||
# The shell used for ssh
|
||||
"builds.sr.ht".shell = mkDefault "runner-shell";
|
||||
# Register the builds.sr.ht dispatcher
|
||||
"git.sr.ht::dispatch".${builtins.unsafeDiscardStringContext "${pkgs.sourcehut.buildsrht}/bin/buildsrht-keys"} = mkDefault "${user}:${user}";
|
||||
|
||||
# Location for build logs, images, and control command
|
||||
} // lib.attrsets.optionalAttrs scfg.enableWorker {
|
||||
# Default worker stores logs that are accessible via this address:port
|
||||
"builds.sr.ht::worker".name = mkDefault "127.0.0.1:5020";
|
||||
"builds.sr.ht::worker".buildlogs = mkDefault "${scfg.statePath}/logs";
|
||||
"builds.sr.ht::worker".images = mkDefault "${image_dir}/images";
|
||||
"builds.sr.ht::worker".controlcmd = mkDefault "${image_dir}/images/control";
|
||||
"builds.sr.ht::worker".timeout = mkDefault "3m";
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."logs.${cfg.originBase}" =
|
||||
if scfg.enableWorker then {
|
||||
listen = with builtins; let address = split ":" cfg.settings."builds.sr.ht::worker".name;
|
||||
in [{ addr = elemAt address 0; port = lib.toInt (elemAt address 2); }];
|
||||
locations."/logs".root = "${scfg.statePath}";
|
||||
} else { };
|
||||
|
||||
services.nginx.virtualHosts."builds.${cfg.originBase}" = {
|
||||
forceSSL = true;
|
||||
locations."/".proxyPass = "http://${cfg.address}:${toString port}";
|
||||
locations."/query".proxyPass = "http://${cfg.address}:${toString (port + 100)}";
|
||||
locations."/static".root = "${pkgs.sourcehut.buildsrht}/${pkgs.sourcehut.python.sitePackages}/buildsrht";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -83,7 +83,7 @@ let
|
||||
python = pkgs.sourcehut.python.withPackages (ps: with ps; [
|
||||
gunicorn
|
||||
eventlet
|
||||
# For monitoring Celery: sudo -u listssrht celery --app listssrht.process -b redis+socket:///run/redis-sourcehut/redis.sock?virtual_host=5 flower
|
||||
# For monitoring Celery: sudo -u listssrht celery --app listssrht.process -b redis+socket:///run/redis-sourcehut/redis.sock?virtual_host=1 flower
|
||||
flower
|
||||
# Sourcehut services
|
||||
srht
|
||||
@@ -238,20 +238,32 @@ in
|
||||
};
|
||||
smtp-user = mkOptionNullOrStr "Outgoing SMTP user.";
|
||||
smtp-password = mkOptionNullOrStr "Outgoing SMTP password.";
|
||||
smtp-from = mkOptionNullOrStr "Outgoing SMTP FROM.";
|
||||
smtp-from = mkOption {
|
||||
type = types.str;
|
||||
description = "Outgoing SMTP FROM.";
|
||||
};
|
||||
error-to = mkOptionNullOrStr "Address receiving application exceptions";
|
||||
error-from = mkOptionNullOrStr "Address sending application exceptions";
|
||||
pgp-privkey = mkOptionNullOrStr ''
|
||||
An absolute file path (which should be outside the Nix-store)
|
||||
to an OpenPGP private key.
|
||||
pgp-privkey = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
An absolute file path (which should be outside the Nix-store)
|
||||
to an OpenPGP private key.
|
||||
|
||||
Your PGP key information (DO NOT mix up pub and priv here)
|
||||
You must remove the password from your secret key, if present.
|
||||
You can do this with <code>gpg --edit-key [key-id]</code>,
|
||||
then use the <code>passwd</code> command and do not enter a new password.
|
||||
'';
|
||||
pgp-pubkey = mkOptionNullOrStr "OpenPGP public key.";
|
||||
pgp-key-id = mkOptionNullOrStr "OpenPGP key identifier.";
|
||||
Your PGP key information (DO NOT mix up pub and priv here)
|
||||
You must remove the password from your secret key, if present.
|
||||
You can do this with <code>gpg --edit-key [key-id]</code>,
|
||||
then use the <code>passwd</code> command and do not enter a new password.
|
||||
'';
|
||||
};
|
||||
pgp-pubkey = mkOption {
|
||||
type = with types; either path str;
|
||||
description = "OpenPGP public key.";
|
||||
};
|
||||
pgp-key-id = mkOption {
|
||||
type = types.str;
|
||||
description = "OpenPGP key identifier.";
|
||||
};
|
||||
};
|
||||
options.objects = {
|
||||
s3-upstream = mkOption {
|
||||
@@ -905,6 +917,11 @@ in
|
||||
inherit configIniOfService;
|
||||
srvsrht = "buildsrht";
|
||||
port = 5002;
|
||||
extraServices.buildsrht-api = {
|
||||
serviceConfig.Restart = "always";
|
||||
serviceConfig.RestartSec = "5s";
|
||||
serviceConfig.ExecStart = "${pkgs.sourcehut.buildsrht}/bin/buildsrht-api -b ${cfg.listenAddress}:${toString (cfg.builds.port + 100)}";
|
||||
};
|
||||
# TODO: a celery worker on the master and worker are apparently needed
|
||||
extraServices.buildsrht-worker = let
|
||||
qemuPackage = pkgs.qemu_kvm;
|
||||
@@ -928,13 +945,13 @@ in
|
||||
fi
|
||||
'';
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.sourcehut.buildsrht}/bin/builds.sr.ht-worker";
|
||||
ExecStart = "${pkgs.sourcehut.buildsrht}/bin/buildsrht-worker";
|
||||
BindPaths = [ cfg.settings."builds.sr.ht::worker".buildlogs ];
|
||||
LogsDirectory = [ "sourcehut/${serviceName}" ];
|
||||
RuntimeDirectory = [ "sourcehut/${serviceName}/subdir" ];
|
||||
StateDirectory = [ "sourcehut/${serviceName}" ];
|
||||
TimeoutStartSec = "1800s";
|
||||
# builds.sr.ht-worker looks up ../config.ini
|
||||
# buildsrht-worker looks up ../config.ini
|
||||
WorkingDirectory = "-"+"/run/sourcehut/${serviceName}/subdir";
|
||||
};
|
||||
};
|
||||
@@ -952,12 +969,12 @@ in
|
||||
) cfg.builds.images
|
||||
);
|
||||
image_dir_pre = pkgs.symlinkJoin {
|
||||
name = "builds.sr.ht-worker-images-pre";
|
||||
name = "buildsrht-worker-images-pre";
|
||||
paths = image_dirs;
|
||||
# FIXME: not working, apparently because ubuntu/latest is a broken link
|
||||
# ++ [ "${pkgs.sourcehut.buildsrht}/lib/images" ];
|
||||
};
|
||||
image_dir = pkgs.runCommand "builds.sr.ht-worker-images" { } ''
|
||||
image_dir = pkgs.runCommand "buildsrht-worker-images" { } ''
|
||||
mkdir -p $out/images
|
||||
cp -Lr ${image_dir_pre}/* $out/images
|
||||
'';
|
||||
@@ -1081,6 +1098,11 @@ in
|
||||
};
|
||||
})
|
||||
];
|
||||
extraServices.gitsrht-api = {
|
||||
serviceConfig.Restart = "always";
|
||||
serviceConfig.RestartSec = "5s";
|
||||
serviceConfig.ExecStart = "${pkgs.sourcehut.gitsrht}/bin/gitsrht-api -b ${cfg.listenAddress}:${toString (cfg.git.port + 100)}";
|
||||
};
|
||||
extraServices.gitsrht-fcgiwrap = mkIf cfg.nginx.enable {
|
||||
serviceConfig = {
|
||||
# Socket is passed by gitsrht-fcgiwrap.socket
|
||||
@@ -1124,6 +1146,11 @@ in
|
||||
timerConfig.OnCalendar = ["daily"];
|
||||
timerConfig.AccuracySec = "1h";
|
||||
};
|
||||
extraServices.hgsrht-api = {
|
||||
serviceConfig.Restart = "always";
|
||||
serviceConfig.RestartSec = "5s";
|
||||
serviceConfig.ExecStart = "${pkgs.sourcehut.hgsrht}/bin/hgsrht-api -b ${cfg.listenAddress}:${toString (cfg.hg.port + 100)}";
|
||||
};
|
||||
extraConfig = mkMerge [
|
||||
{
|
||||
users.users.${cfg.hg.user}.shell = pkgs.bash;
|
||||
@@ -1184,6 +1211,11 @@ in
|
||||
inherit configIniOfService;
|
||||
port = 5006;
|
||||
webhooks = true;
|
||||
extraServices.listssrht-api = {
|
||||
serviceConfig.Restart = "always";
|
||||
serviceConfig.RestartSec = "5s";
|
||||
serviceConfig.ExecStart = "${pkgs.sourcehut.listssrht}/bin/listssrht-api -b ${cfg.listenAddress}:${toString (cfg.lists.port + 100)}";
|
||||
};
|
||||
# Receive the mail from Postfix and enqueue them into Redis and PostgreSQL
|
||||
extraServices.listssrht-lmtp = {
|
||||
wants = [ "postfix.service" ];
|
||||
@@ -1232,9 +1264,13 @@ in
|
||||
inherit configIniOfService;
|
||||
port = 5000;
|
||||
webhooks = true;
|
||||
extraTimers.metasrht-daily.timerConfig = {
|
||||
OnCalendar = ["daily"];
|
||||
AccuracySec = "1h";
|
||||
};
|
||||
extraServices.metasrht-api = {
|
||||
serviceConfig.Restart = "always";
|
||||
serviceConfig.RestartSec = "2s";
|
||||
serviceConfig.RestartSec = "5s";
|
||||
preStart = "set -x\n" + concatStringsSep "\n\n" (attrValues (mapAttrs (k: s:
|
||||
let srvMatch = builtins.match "^([a-z]*)\\.sr\\.ht$" k;
|
||||
srv = head srvMatch;
|
||||
@@ -1248,10 +1284,6 @@ in
|
||||
) cfg.settings));
|
||||
serviceConfig.ExecStart = "${pkgs.sourcehut.metasrht}/bin/metasrht-api -b ${cfg.listenAddress}:${toString (cfg.meta.port + 100)}";
|
||||
};
|
||||
extraTimers.metasrht-daily.timerConfig = {
|
||||
OnCalendar = ["daily"];
|
||||
AccuracySec = "1h";
|
||||
};
|
||||
extraConfig = mkMerge [
|
||||
{
|
||||
assertions = [
|
||||
@@ -1348,6 +1380,11 @@ in
|
||||
inherit configIniOfService;
|
||||
port = 5003;
|
||||
webhooks = true;
|
||||
extraServices.todosrht-api = {
|
||||
serviceConfig.Restart = "always";
|
||||
serviceConfig.RestartSec = "5s";
|
||||
serviceConfig.ExecStart = "${pkgs.sourcehut.todosrht}/bin/todosrht-api -b ${cfg.listenAddress}:${toString (cfg.todo.port + 100)}";
|
||||
};
|
||||
extraServices.todosrht-lmtp = {
|
||||
wants = [ "postfix.service" ];
|
||||
unitConfig.JoinsNamespaceOf = optional cfg.postfix.enable "postfix.service";
|
||||
|
||||
@@ -1,127 +0,0 @@
|
||||
{ config, lib, options, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.sourcehut;
|
||||
opt = options.services.sourcehut;
|
||||
cfgIni = cfg.settings;
|
||||
scfg = cfg.dispatch;
|
||||
iniKey = "dispatch.sr.ht";
|
||||
|
||||
drv = pkgs.sourcehut.dispatchsrht;
|
||||
in
|
||||
{
|
||||
options.services.sourcehut.dispatch = {
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "dispatchsrht";
|
||||
description = ''
|
||||
User for dispatch.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 5005;
|
||||
description = ''
|
||||
Port on which the "dispatch" module should listen.
|
||||
'';
|
||||
};
|
||||
|
||||
database = mkOption {
|
||||
type = types.str;
|
||||
default = "dispatch.sr.ht";
|
||||
description = ''
|
||||
PostgreSQL database name for dispatch.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
statePath = mkOption {
|
||||
type = types.path;
|
||||
default = "${cfg.statePath}/dispatchsrht";
|
||||
defaultText = literalExpression ''"''${config.${opt.statePath}}/dispatchsrht"'';
|
||||
description = ''
|
||||
State path for dispatch.sr.ht.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = with scfg; lib.mkIf (cfg.enable && elem "dispatch" cfg.services) {
|
||||
|
||||
users = {
|
||||
users = {
|
||||
"${user}" = {
|
||||
isSystemUser = true;
|
||||
group = user;
|
||||
description = "dispatch.sr.ht user";
|
||||
};
|
||||
};
|
||||
|
||||
groups = {
|
||||
"${user}" = { };
|
||||
};
|
||||
};
|
||||
|
||||
services.postgresql = {
|
||||
authentication = ''
|
||||
local ${database} ${user} trust
|
||||
'';
|
||||
ensureDatabases = [ database ];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = user;
|
||||
ensurePermissions = { "DATABASE \"${database}\"" = "ALL PRIVILEGES"; };
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
systemd = {
|
||||
tmpfiles.rules = [
|
||||
"d ${statePath} 0750 ${user} ${user} -"
|
||||
];
|
||||
|
||||
services.dispatchsrht = import ./service.nix { inherit config pkgs lib; } scfg drv iniKey {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "dispatch.sr.ht website service";
|
||||
|
||||
serviceConfig.ExecStart = "${cfg.python}/bin/gunicorn ${drv.pname}.app:app -b ${cfg.address}:${toString port}";
|
||||
};
|
||||
};
|
||||
|
||||
services.sourcehut.settings = {
|
||||
# URL dispatch.sr.ht is being served at (protocol://domain)
|
||||
"dispatch.sr.ht".origin = mkDefault "http://dispatch.${cfg.originBase}";
|
||||
# Address and port to bind the debug server to
|
||||
"dispatch.sr.ht".debug-host = mkDefault "0.0.0.0";
|
||||
"dispatch.sr.ht".debug-port = mkDefault port;
|
||||
# Configures the SQLAlchemy connection string for the database.
|
||||
"dispatch.sr.ht".connection-string = mkDefault "postgresql:///${database}?user=${user}&host=/var/run/postgresql";
|
||||
# Set to "yes" to automatically run migrations on package upgrade.
|
||||
"dispatch.sr.ht".migrate-on-upgrade = mkDefault "yes";
|
||||
# dispatch.sr.ht's OAuth client ID and secret for meta.sr.ht
|
||||
# Register your client at meta.example.org/oauth
|
||||
"dispatch.sr.ht".oauth-client-id = mkDefault null;
|
||||
"dispatch.sr.ht".oauth-client-secret = mkDefault null;
|
||||
|
||||
# Github Integration
|
||||
"dispatch.sr.ht::github".oauth-client-id = mkDefault null;
|
||||
"dispatch.sr.ht::github".oauth-client-secret = mkDefault null;
|
||||
|
||||
# Gitlab Integration
|
||||
"dispatch.sr.ht::gitlab".enabled = mkDefault null;
|
||||
"dispatch.sr.ht::gitlab".canonical-upstream = mkDefault "gitlab.com";
|
||||
"dispatch.sr.ht::gitlab".repo-cache = mkDefault "./repo-cache";
|
||||
# "dispatch.sr.ht::gitlab"."gitlab.com" = mkDefault "GitLab:application id:secret";
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."dispatch.${cfg.originBase}" = {
|
||||
forceSSL = true;
|
||||
locations."/".proxyPass = "http://${cfg.address}:${toString port}";
|
||||
locations."/query".proxyPass = "http://${cfg.address}:${toString (port + 100)}";
|
||||
locations."/static".root = "${pkgs.sourcehut.dispatchsrht}/${pkgs.sourcehut.python.sitePackages}/dispatchsrht";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,217 +0,0 @@
|
||||
{ config, lib, options, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.sourcehut;
|
||||
opt = options.services.sourcehut;
|
||||
scfg = cfg.git;
|
||||
iniKey = "git.sr.ht";
|
||||
|
||||
rcfg = config.services.redis;
|
||||
drv = pkgs.sourcehut.gitsrht;
|
||||
in
|
||||
{
|
||||
options.services.sourcehut.git = {
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
visible = false;
|
||||
internal = true;
|
||||
readOnly = true;
|
||||
default = "git";
|
||||
description = ''
|
||||
User for git.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 5001;
|
||||
description = ''
|
||||
Port on which the "git" module should listen.
|
||||
'';
|
||||
};
|
||||
|
||||
database = mkOption {
|
||||
type = types.str;
|
||||
default = "git.sr.ht";
|
||||
description = ''
|
||||
PostgreSQL database name for git.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
statePath = mkOption {
|
||||
type = types.path;
|
||||
default = "${cfg.statePath}/gitsrht";
|
||||
defaultText = literalExpression ''"''${config.${opt.statePath}}/gitsrht"'';
|
||||
description = ''
|
||||
State path for git.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.git;
|
||||
defaultText = literalExpression "pkgs.git";
|
||||
example = literalExpression "pkgs.gitFull";
|
||||
description = ''
|
||||
Git package for git.sr.ht. This can help silence collisions.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = with scfg; lib.mkIf (cfg.enable && elem "git" cfg.services) {
|
||||
# sshd refuses to run with `Unsafe AuthorizedKeysCommand ... bad ownership or modes for directory /nix/store`
|
||||
environment.etc."ssh/gitsrht-dispatch" = {
|
||||
mode = "0755";
|
||||
text = ''
|
||||
#! ${pkgs.stdenv.shell}
|
||||
${cfg.python}/bin/gitsrht-dispatch "$@"
|
||||
'';
|
||||
};
|
||||
|
||||
# Needs this in the $PATH when sshing into the server
|
||||
environment.systemPackages = [ cfg.git.package ];
|
||||
|
||||
users = {
|
||||
users = {
|
||||
"${user}" = {
|
||||
isSystemUser = true;
|
||||
group = user;
|
||||
# https://stackoverflow.com/questions/22314298/git-push-results-in-fatal-protocol-error-bad-line-length-character-this
|
||||
# Probably could use gitsrht-shell if output is restricted to just parameters...
|
||||
shell = pkgs.bash;
|
||||
description = "git.sr.ht user";
|
||||
};
|
||||
};
|
||||
|
||||
groups = {
|
||||
"${user}" = { };
|
||||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
cron.systemCronJobs = [ "*/20 * * * * ${cfg.python}/bin/gitsrht-periodic" ];
|
||||
fcgiwrap.enable = true;
|
||||
|
||||
openssh.authorizedKeysCommand = ''/etc/ssh/gitsrht-dispatch "%u" "%h" "%t" "%k"'';
|
||||
openssh.authorizedKeysCommandUser = "root";
|
||||
openssh.extraConfig = ''
|
||||
PermitUserEnvironment SRHT_*
|
||||
'';
|
||||
|
||||
postgresql = {
|
||||
authentication = ''
|
||||
local ${database} ${user} trust
|
||||
'';
|
||||
ensureDatabases = [ database ];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = user;
|
||||
ensurePermissions = { "DATABASE \"${database}\"" = "ALL PRIVILEGES"; };
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
systemd = {
|
||||
tmpfiles.rules = [
|
||||
# /var/log is owned by root
|
||||
"f /var/log/git-srht-shell 0644 ${user} ${user} -"
|
||||
|
||||
"d ${statePath} 0750 ${user} ${user} -"
|
||||
"d ${cfg.settings."${iniKey}".repos} 2755 ${user} ${user} -"
|
||||
];
|
||||
|
||||
services = {
|
||||
gitsrht = import ./service.nix { inherit config pkgs lib; } scfg drv iniKey {
|
||||
after = [ "redis.service" "postgresql.service" "network.target" ];
|
||||
requires = [ "redis.service" "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
# Needs internally to create repos at the very least
|
||||
path = [ pkgs.git ];
|
||||
description = "git.sr.ht website service";
|
||||
|
||||
serviceConfig.ExecStart = "${cfg.python}/bin/gunicorn ${drv.pname}.app:app -b ${cfg.address}:${toString port}";
|
||||
};
|
||||
|
||||
gitsrht-webhooks = {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "git.sr.ht webhooks service";
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = user;
|
||||
Restart = "always";
|
||||
};
|
||||
|
||||
serviceConfig.ExecStart = "${cfg.python}/bin/celery -A ${drv.pname}.webhooks worker --loglevel=info";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.sourcehut.settings = {
|
||||
# URL git.sr.ht is being served at (protocol://domain)
|
||||
"git.sr.ht".origin = mkDefault "http://git.${cfg.originBase}";
|
||||
# Address and port to bind the debug server to
|
||||
"git.sr.ht".debug-host = mkDefault "0.0.0.0";
|
||||
"git.sr.ht".debug-port = mkDefault port;
|
||||
# Configures the SQLAlchemy connection string for the database.
|
||||
"git.sr.ht".connection-string = mkDefault "postgresql:///${database}?user=${user}&host=/var/run/postgresql";
|
||||
# Set to "yes" to automatically run migrations on package upgrade.
|
||||
"git.sr.ht".migrate-on-upgrade = mkDefault "yes";
|
||||
# The redis connection used for the webhooks worker
|
||||
"git.sr.ht".webhooks = mkDefault "redis://${rcfg.bind}:${toString rcfg.port}/1";
|
||||
|
||||
# A post-update script which is installed in every git repo.
|
||||
"git.sr.ht".post-update-script = mkDefault "${pkgs.sourcehut.gitsrht}/bin/gitsrht-update-hook";
|
||||
|
||||
# git.sr.ht's OAuth client ID and secret for meta.sr.ht
|
||||
# Register your client at meta.example.org/oauth
|
||||
"git.sr.ht".oauth-client-id = mkDefault null;
|
||||
"git.sr.ht".oauth-client-secret = mkDefault null;
|
||||
# Path to git repositories on disk
|
||||
"git.sr.ht".repos = mkDefault "/var/lib/git";
|
||||
|
||||
"git.sr.ht".outgoing-domain = mkDefault "http://git.${cfg.originBase}";
|
||||
|
||||
# The authorized keys hook uses this to dispatch to various handlers
|
||||
# The format is a program to exec into as the key, and the user to match as the
|
||||
# value. When someone tries to log in as this user, this program is executed
|
||||
# and is expected to omit an AuthorizedKeys file.
|
||||
#
|
||||
# Discard of the string context is in order to allow derivation-derived strings.
|
||||
# This is safe if the relevant package is installed which will be the case if the setting is utilized.
|
||||
"git.sr.ht::dispatch".${builtins.unsafeDiscardStringContext "${pkgs.sourcehut.gitsrht}/bin/gitsrht-keys"} = mkDefault "${user}:${user}";
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."git.${cfg.originBase}" = {
|
||||
forceSSL = true;
|
||||
locations."/".proxyPass = "http://${cfg.address}:${toString port}";
|
||||
locations."/query".proxyPass = "http://${cfg.address}:${toString (port + 100)}";
|
||||
locations."/static".root = "${pkgs.sourcehut.gitsrht}/${pkgs.sourcehut.python.sitePackages}/gitsrht";
|
||||
extraConfig = ''
|
||||
location = /authorize {
|
||||
proxy_pass http://${cfg.address}:${toString port};
|
||||
proxy_pass_request_body off;
|
||||
proxy_set_header Content-Length "";
|
||||
proxy_set_header X-Original-URI $request_uri;
|
||||
}
|
||||
location ~ ^/([^/]+)/([^/]+)/(HEAD|info/refs|objects/info/.*|git-upload-pack).*$ {
|
||||
auth_request /authorize;
|
||||
root /var/lib/git;
|
||||
fastcgi_pass unix:/run/fcgiwrap.sock;
|
||||
fastcgi_param SCRIPT_FILENAME ${pkgs.git}/bin/git-http-backend;
|
||||
fastcgi_param PATH_INFO $uri;
|
||||
fastcgi_param GIT_PROJECT_ROOT $document_root;
|
||||
fastcgi_read_timeout 500s;
|
||||
include ${config.services.nginx.package}/conf/fastcgi_params;
|
||||
gzip off;
|
||||
}
|
||||
'';
|
||||
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,175 +0,0 @@
|
||||
{ config, lib, options, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.sourcehut;
|
||||
opt = options.services.sourcehut;
|
||||
scfg = cfg.hg;
|
||||
iniKey = "hg.sr.ht";
|
||||
|
||||
rcfg = config.services.redis;
|
||||
drv = pkgs.sourcehut.hgsrht;
|
||||
in
|
||||
{
|
||||
options.services.sourcehut.hg = {
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
internal = true;
|
||||
readOnly = true;
|
||||
default = "hg";
|
||||
description = ''
|
||||
User for hg.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 5010;
|
||||
description = ''
|
||||
Port on which the "hg" module should listen.
|
||||
'';
|
||||
};
|
||||
|
||||
database = mkOption {
|
||||
type = types.str;
|
||||
default = "hg.sr.ht";
|
||||
description = ''
|
||||
PostgreSQL database name for hg.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
statePath = mkOption {
|
||||
type = types.path;
|
||||
default = "${cfg.statePath}/hgsrht";
|
||||
defaultText = literalExpression ''"''${config.${opt.statePath}}/hgsrht"'';
|
||||
description = ''
|
||||
State path for hg.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
cloneBundles = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Generate clonebundles (which require more disk space but dramatically speed up cloning large repositories).
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = with scfg; lib.mkIf (cfg.enable && elem "hg" cfg.services) {
|
||||
# In case it ever comes into being
|
||||
environment.etc."ssh/hgsrht-dispatch" = {
|
||||
mode = "0755";
|
||||
text = ''
|
||||
#! ${pkgs.stdenv.shell}
|
||||
${cfg.python}/bin/gitsrht-dispatch $@
|
||||
'';
|
||||
};
|
||||
|
||||
environment.systemPackages = [ pkgs.mercurial ];
|
||||
|
||||
users = {
|
||||
users = {
|
||||
"${user}" = {
|
||||
isSystemUser = true;
|
||||
group = user;
|
||||
# Assuming hg.sr.ht needs this too
|
||||
shell = pkgs.bash;
|
||||
description = "hg.sr.ht user";
|
||||
};
|
||||
};
|
||||
|
||||
groups = {
|
||||
"${user}" = { };
|
||||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
cron.systemCronJobs = [ "*/20 * * * * ${cfg.python}/bin/hgsrht-periodic" ]
|
||||
++ optional cloneBundles "0 * * * * ${cfg.python}/bin/hgsrht-clonebundles";
|
||||
|
||||
openssh.authorizedKeysCommand = ''/etc/ssh/hgsrht-dispatch "%u" "%h" "%t" "%k"'';
|
||||
openssh.authorizedKeysCommandUser = "root";
|
||||
openssh.extraConfig = ''
|
||||
PermitUserEnvironment SRHT_*
|
||||
'';
|
||||
|
||||
postgresql = {
|
||||
authentication = ''
|
||||
local ${database} ${user} trust
|
||||
'';
|
||||
ensureDatabases = [ database ];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = user;
|
||||
ensurePermissions = { "DATABASE \"${database}\"" = "ALL PRIVILEGES"; };
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
systemd = {
|
||||
tmpfiles.rules = [
|
||||
# /var/log is owned by root
|
||||
"f /var/log/hg-srht-shell 0644 ${user} ${user} -"
|
||||
|
||||
"d ${statePath} 0750 ${user} ${user} -"
|
||||
"d ${cfg.settings."${iniKey}".repos} 2755 ${user} ${user} -"
|
||||
];
|
||||
|
||||
services.hgsrht = import ./service.nix { inherit config pkgs lib; } scfg drv iniKey {
|
||||
after = [ "redis.service" "postgresql.service" "network.target" ];
|
||||
requires = [ "redis.service" "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
path = [ pkgs.mercurial ];
|
||||
description = "hg.sr.ht website service";
|
||||
|
||||
serviceConfig.ExecStart = "${cfg.python}/bin/gunicorn ${drv.pname}.app:app -b ${cfg.address}:${toString port}";
|
||||
};
|
||||
};
|
||||
|
||||
services.sourcehut.settings = {
|
||||
# URL hg.sr.ht is being served at (protocol://domain)
|
||||
"hg.sr.ht".origin = mkDefault "http://hg.${cfg.originBase}";
|
||||
# Address and port to bind the debug server to
|
||||
"hg.sr.ht".debug-host = mkDefault "0.0.0.0";
|
||||
"hg.sr.ht".debug-port = mkDefault port;
|
||||
# Configures the SQLAlchemy connection string for the database.
|
||||
"hg.sr.ht".connection-string = mkDefault "postgresql:///${database}?user=${user}&host=/var/run/postgresql";
|
||||
# The redis connection used for the webhooks worker
|
||||
"hg.sr.ht".webhooks = mkDefault "redis://${rcfg.bind}:${toString rcfg.port}/1";
|
||||
# A post-update script which is installed in every mercurial repo.
|
||||
"hg.sr.ht".changegroup-script = mkDefault "${cfg.python}/bin/hgsrht-hook-changegroup";
|
||||
# hg.sr.ht's OAuth client ID and secret for meta.sr.ht
|
||||
# Register your client at meta.example.org/oauth
|
||||
"hg.sr.ht".oauth-client-id = mkDefault null;
|
||||
"hg.sr.ht".oauth-client-secret = mkDefault null;
|
||||
# Path to mercurial repositories on disk
|
||||
"hg.sr.ht".repos = mkDefault "/var/lib/hg";
|
||||
# Path to the srht mercurial extension
|
||||
# (defaults to where the hgsrht code is)
|
||||
# "hg.sr.ht".srhtext = mkDefault null;
|
||||
# .hg/store size (in MB) past which the nightly job generates clone bundles.
|
||||
# "hg.sr.ht".clone_bundle_threshold = mkDefault 50;
|
||||
# Path to hg-ssh (if not in $PATH)
|
||||
# "hg.sr.ht".hg_ssh = mkDefault /path/to/hg-ssh;
|
||||
|
||||
# The authorized keys hook uses this to dispatch to various handlers
|
||||
# The format is a program to exec into as the key, and the user to match as the
|
||||
# value. When someone tries to log in as this user, this program is executed
|
||||
# and is expected to omit an AuthorizedKeys file.
|
||||
#
|
||||
# Uncomment the relevant lines to enable the various sr.ht dispatchers.
|
||||
"hg.sr.ht::dispatch"."/run/current-system/sw/bin/hgsrht-keys" = mkDefault "${user}:${user}";
|
||||
};
|
||||
|
||||
# TODO: requires testing and addition of hg-specific requirements
|
||||
services.nginx.virtualHosts."hg.${cfg.originBase}" = {
|
||||
forceSSL = true;
|
||||
locations."/".proxyPass = "http://${cfg.address}:${toString port}";
|
||||
locations."/query".proxyPass = "http://${cfg.address}:${toString (port + 100)}";
|
||||
locations."/static".root = "${pkgs.sourcehut.hgsrht}/${pkgs.sourcehut.python.sitePackages}/hgsrht";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,120 +0,0 @@
|
||||
{ config, lib, options, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.sourcehut;
|
||||
opt = options.services.sourcehut;
|
||||
cfgIni = cfg.settings;
|
||||
scfg = cfg.hub;
|
||||
iniKey = "hub.sr.ht";
|
||||
|
||||
drv = pkgs.sourcehut.hubsrht;
|
||||
in
|
||||
{
|
||||
options.services.sourcehut.hub = {
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "hubsrht";
|
||||
description = ''
|
||||
User for hub.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 5014;
|
||||
description = ''
|
||||
Port on which the "hub" module should listen.
|
||||
'';
|
||||
};
|
||||
|
||||
database = mkOption {
|
||||
type = types.str;
|
||||
default = "hub.sr.ht";
|
||||
description = ''
|
||||
PostgreSQL database name for hub.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
statePath = mkOption {
|
||||
type = types.path;
|
||||
default = "${cfg.statePath}/hubsrht";
|
||||
defaultText = literalExpression ''"''${config.${opt.statePath}}/hubsrht"'';
|
||||
description = ''
|
||||
State path for hub.sr.ht.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = with scfg; lib.mkIf (cfg.enable && elem "hub" cfg.services) {
|
||||
users = {
|
||||
users = {
|
||||
"${user}" = {
|
||||
isSystemUser = true;
|
||||
group = user;
|
||||
description = "hub.sr.ht user";
|
||||
};
|
||||
};
|
||||
|
||||
groups = {
|
||||
"${user}" = { };
|
||||
};
|
||||
};
|
||||
|
||||
services.postgresql = {
|
||||
authentication = ''
|
||||
local ${database} ${user} trust
|
||||
'';
|
||||
ensureDatabases = [ database ];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = user;
|
||||
ensurePermissions = { "DATABASE \"${database}\"" = "ALL PRIVILEGES"; };
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
systemd = {
|
||||
tmpfiles.rules = [
|
||||
"d ${statePath} 0750 ${user} ${user} -"
|
||||
];
|
||||
|
||||
services.hubsrht = import ./service.nix { inherit config pkgs lib; } scfg drv iniKey {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "hub.sr.ht website service";
|
||||
|
||||
serviceConfig.ExecStart = "${cfg.python}/bin/gunicorn ${drv.pname}.app:app -b ${cfg.address}:${toString port}";
|
||||
};
|
||||
};
|
||||
|
||||
services.sourcehut.settings = {
|
||||
# URL hub.sr.ht is being served at (protocol://domain)
|
||||
"hub.sr.ht".origin = mkDefault "http://hub.${cfg.originBase}";
|
||||
# Address and port to bind the debug server to
|
||||
"hub.sr.ht".debug-host = mkDefault "0.0.0.0";
|
||||
"hub.sr.ht".debug-port = mkDefault port;
|
||||
# Configures the SQLAlchemy connection string for the database.
|
||||
"hub.sr.ht".connection-string = mkDefault "postgresql:///${database}?user=${user}&host=/var/run/postgresql";
|
||||
# Set to "yes" to automatically run migrations on package upgrade.
|
||||
"hub.sr.ht".migrate-on-upgrade = mkDefault "yes";
|
||||
# hub.sr.ht's OAuth client ID and secret for meta.sr.ht
|
||||
# Register your client at meta.example.org/oauth
|
||||
"hub.sr.ht".oauth-client-id = mkDefault null;
|
||||
"hub.sr.ht".oauth-client-secret = mkDefault null;
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."${cfg.originBase}" = {
|
||||
forceSSL = true;
|
||||
locations."/".proxyPass = "http://${cfg.address}:${toString port}";
|
||||
locations."/query".proxyPass = "http://${cfg.address}:${toString (port + 100)}";
|
||||
locations."/static".root = "${pkgs.sourcehut.hubsrht}/${pkgs.sourcehut.python.sitePackages}/hubsrht";
|
||||
};
|
||||
services.nginx.virtualHosts."hub.${cfg.originBase}" = {
|
||||
globalRedirect = "${cfg.originBase}";
|
||||
forceSSL = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,187 +0,0 @@
|
||||
# Email setup is fairly involved, useful references:
|
||||
# https://drewdevault.com/2018/08/05/Local-mail-server.html
|
||||
|
||||
{ config, lib, options, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.sourcehut;
|
||||
opt = options.services.sourcehut;
|
||||
cfgIni = cfg.settings;
|
||||
scfg = cfg.lists;
|
||||
iniKey = "lists.sr.ht";
|
||||
|
||||
rcfg = config.services.redis;
|
||||
drv = pkgs.sourcehut.listssrht;
|
||||
in
|
||||
{
|
||||
options.services.sourcehut.lists = {
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "listssrht";
|
||||
description = ''
|
||||
User for lists.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 5006;
|
||||
description = ''
|
||||
Port on which the "lists" module should listen.
|
||||
'';
|
||||
};
|
||||
|
||||
database = mkOption {
|
||||
type = types.str;
|
||||
default = "lists.sr.ht";
|
||||
description = ''
|
||||
PostgreSQL database name for lists.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
statePath = mkOption {
|
||||
type = types.path;
|
||||
default = "${cfg.statePath}/listssrht";
|
||||
defaultText = literalExpression ''"''${config.${opt.statePath}}/listssrht"'';
|
||||
description = ''
|
||||
State path for lists.sr.ht.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = with scfg; lib.mkIf (cfg.enable && elem "lists" cfg.services) {
|
||||
users = {
|
||||
users = {
|
||||
"${user}" = {
|
||||
isSystemUser = true;
|
||||
group = user;
|
||||
extraGroups = [ "postfix" ];
|
||||
description = "lists.sr.ht user";
|
||||
};
|
||||
};
|
||||
groups = {
|
||||
"${user}" = { };
|
||||
};
|
||||
};
|
||||
|
||||
services.postgresql = {
|
||||
authentication = ''
|
||||
local ${database} ${user} trust
|
||||
'';
|
||||
ensureDatabases = [ database ];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = user;
|
||||
ensurePermissions = { "DATABASE \"${database}\"" = "ALL PRIVILEGES"; };
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
systemd = {
|
||||
tmpfiles.rules = [
|
||||
"d ${statePath} 0750 ${user} ${user} -"
|
||||
];
|
||||
|
||||
services = {
|
||||
listssrht = import ./service.nix { inherit config pkgs lib; } scfg drv iniKey {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "lists.sr.ht website service";
|
||||
|
||||
serviceConfig.ExecStart = "${cfg.python}/bin/gunicorn ${drv.pname}.app:app -b ${cfg.address}:${toString port}";
|
||||
};
|
||||
|
||||
listssrht-process = {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "lists.sr.ht process service";
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = user;
|
||||
Restart = "always";
|
||||
ExecStart = "${cfg.python}/bin/celery -A ${drv.pname}.process worker --loglevel=info";
|
||||
};
|
||||
};
|
||||
|
||||
listssrht-lmtp = {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "lists.sr.ht process service";
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = user;
|
||||
Restart = "always";
|
||||
ExecStart = "${cfg.python}/bin/listssrht-lmtp";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
listssrht-webhooks = {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "lists.sr.ht webhooks service";
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = user;
|
||||
Restart = "always";
|
||||
ExecStart = "${cfg.python}/bin/celery -A ${drv.pname}.webhooks worker --loglevel=info";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.sourcehut.settings = {
|
||||
# URL lists.sr.ht is being served at (protocol://domain)
|
||||
"lists.sr.ht".origin = mkDefault "http://lists.${cfg.originBase}";
|
||||
# Address and port to bind the debug server to
|
||||
"lists.sr.ht".debug-host = mkDefault "0.0.0.0";
|
||||
"lists.sr.ht".debug-port = mkDefault port;
|
||||
# Configures the SQLAlchemy connection string for the database.
|
||||
"lists.sr.ht".connection-string = mkDefault "postgresql:///${database}?user=${user}&host=/var/run/postgresql";
|
||||
# Set to "yes" to automatically run migrations on package upgrade.
|
||||
"lists.sr.ht".migrate-on-upgrade = mkDefault "yes";
|
||||
# lists.sr.ht's OAuth client ID and secret for meta.sr.ht
|
||||
# Register your client at meta.example.org/oauth
|
||||
"lists.sr.ht".oauth-client-id = mkDefault null;
|
||||
"lists.sr.ht".oauth-client-secret = mkDefault null;
|
||||
# Outgoing email for notifications generated by users
|
||||
"lists.sr.ht".notify-from = mkDefault "CHANGEME@example.org";
|
||||
# The redis connection used for the webhooks worker
|
||||
"lists.sr.ht".webhooks = mkDefault "redis://${rcfg.bind}:${toString rcfg.port}/2";
|
||||
# The redis connection used for the celery worker
|
||||
"lists.sr.ht".redis = mkDefault "redis://${rcfg.bind}:${toString rcfg.port}/4";
|
||||
# Network-key
|
||||
"lists.sr.ht".network-key = mkDefault null;
|
||||
# Allow creation
|
||||
"lists.sr.ht".allow-new-lists = mkDefault "no";
|
||||
# Posting Domain
|
||||
"lists.sr.ht".posting-domain = mkDefault "lists.${cfg.originBase}";
|
||||
|
||||
# Path for the lmtp daemon's unix socket. Direct incoming mail to this socket.
|
||||
# Alternatively, specify IP:PORT and an SMTP server will be run instead.
|
||||
"lists.sr.ht::worker".sock = mkDefault "/tmp/lists.sr.ht-lmtp.sock";
|
||||
# The lmtp daemon will make the unix socket group-read/write for users in this
|
||||
# group.
|
||||
"lists.sr.ht::worker".sock-group = mkDefault "postfix";
|
||||
"lists.sr.ht::worker".reject-url = mkDefault "https://man.sr.ht/lists.sr.ht/etiquette.md";
|
||||
"lists.sr.ht::worker".reject-mimetypes = mkDefault "text/html";
|
||||
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."lists.${cfg.originBase}" = {
|
||||
forceSSL = true;
|
||||
locations."/".proxyPass = "http://${cfg.address}:${toString port}";
|
||||
locations."/query".proxyPass = "http://${cfg.address}:${toString (port + 100)}";
|
||||
locations."/static".root = "${pkgs.sourcehut.listssrht}/${pkgs.sourcehut.python.sitePackages}/listssrht";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,124 +0,0 @@
|
||||
{ config, lib, options, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.sourcehut;
|
||||
opt = options.services.sourcehut;
|
||||
cfgIni = cfg.settings;
|
||||
scfg = cfg.man;
|
||||
iniKey = "man.sr.ht";
|
||||
|
||||
drv = pkgs.sourcehut.mansrht;
|
||||
in
|
||||
{
|
||||
options.services.sourcehut.man = {
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "mansrht";
|
||||
description = ''
|
||||
User for man.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 5004;
|
||||
description = ''
|
||||
Port on which the "man" module should listen.
|
||||
'';
|
||||
};
|
||||
|
||||
database = mkOption {
|
||||
type = types.str;
|
||||
default = "man.sr.ht";
|
||||
description = ''
|
||||
PostgreSQL database name for man.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
statePath = mkOption {
|
||||
type = types.path;
|
||||
default = "${cfg.statePath}/mansrht";
|
||||
defaultText = literalExpression ''"''${config.${opt.statePath}}/mansrht"'';
|
||||
description = ''
|
||||
State path for man.sr.ht.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = with scfg; lib.mkIf (cfg.enable && elem "man" cfg.services) {
|
||||
assertions =
|
||||
[
|
||||
{
|
||||
assertion = hasAttrByPath [ "git.sr.ht" "oauth-client-id" ] cfgIni;
|
||||
message = "man.sr.ht needs access to git.sr.ht.";
|
||||
}
|
||||
];
|
||||
|
||||
users = {
|
||||
users = {
|
||||
"${user}" = {
|
||||
isSystemUser = true;
|
||||
group = user;
|
||||
description = "man.sr.ht user";
|
||||
};
|
||||
};
|
||||
|
||||
groups = {
|
||||
"${user}" = { };
|
||||
};
|
||||
};
|
||||
|
||||
services.postgresql = {
|
||||
authentication = ''
|
||||
local ${database} ${user} trust
|
||||
'';
|
||||
ensureDatabases = [ database ];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = user;
|
||||
ensurePermissions = { "DATABASE \"${database}\"" = "ALL PRIVILEGES"; };
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
systemd = {
|
||||
tmpfiles.rules = [
|
||||
"d ${statePath} 0750 ${user} ${user} -"
|
||||
];
|
||||
|
||||
services.mansrht = import ./service.nix { inherit config pkgs lib; } scfg drv iniKey {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "man.sr.ht website service";
|
||||
|
||||
serviceConfig.ExecStart = "${cfg.python}/bin/gunicorn ${drv.pname}.app:app -b ${cfg.address}:${toString port}";
|
||||
};
|
||||
};
|
||||
|
||||
services.sourcehut.settings = {
|
||||
# URL man.sr.ht is being served at (protocol://domain)
|
||||
"man.sr.ht".origin = mkDefault "http://man.${cfg.originBase}";
|
||||
# Address and port to bind the debug server to
|
||||
"man.sr.ht".debug-host = mkDefault "0.0.0.0";
|
||||
"man.sr.ht".debug-port = mkDefault port;
|
||||
# Configures the SQLAlchemy connection string for the database.
|
||||
"man.sr.ht".connection-string = mkDefault "postgresql:///${database}?user=${user}&host=/var/run/postgresql";
|
||||
# Set to "yes" to automatically run migrations on package upgrade.
|
||||
"man.sr.ht".migrate-on-upgrade = mkDefault "yes";
|
||||
# man.sr.ht's OAuth client ID and secret for meta.sr.ht
|
||||
# Register your client at meta.example.org/oauth
|
||||
"man.sr.ht".oauth-client-id = mkDefault null;
|
||||
"man.sr.ht".oauth-client-secret = mkDefault null;
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."man.${cfg.originBase}" = {
|
||||
forceSSL = true;
|
||||
locations."/".proxyPass = "http://${cfg.address}:${toString port}";
|
||||
locations."/query".proxyPass = "http://${cfg.address}:${toString (port + 100)}";
|
||||
locations."/static".root = "${pkgs.sourcehut.mansrht}/${pkgs.sourcehut.python.sitePackages}/mansrht";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,213 +0,0 @@
|
||||
{ config, lib, options, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.sourcehut;
|
||||
opt = options.services.sourcehut;
|
||||
cfgIni = cfg.settings;
|
||||
scfg = cfg.meta;
|
||||
iniKey = "meta.sr.ht";
|
||||
|
||||
rcfg = config.services.redis;
|
||||
drv = pkgs.sourcehut.metasrht;
|
||||
in
|
||||
{
|
||||
options.services.sourcehut.meta = {
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "metasrht";
|
||||
description = ''
|
||||
User for meta.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 5000;
|
||||
description = ''
|
||||
Port on which the "meta" module should listen.
|
||||
'';
|
||||
};
|
||||
|
||||
database = mkOption {
|
||||
type = types.str;
|
||||
default = "meta.sr.ht";
|
||||
description = ''
|
||||
PostgreSQL database name for meta.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
statePath = mkOption {
|
||||
type = types.path;
|
||||
default = "${cfg.statePath}/metasrht";
|
||||
defaultText = literalExpression ''"''${config.${opt.statePath}}/metasrht"'';
|
||||
description = ''
|
||||
State path for meta.sr.ht.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = with scfg; lib.mkIf (cfg.enable && elem "meta" cfg.services) {
|
||||
assertions =
|
||||
[
|
||||
{
|
||||
assertion = with cfgIni."meta.sr.ht::billing"; enabled == "yes" -> (stripe-public-key != null && stripe-secret-key != null);
|
||||
message = "If meta.sr.ht::billing is enabled, the keys should be defined.";
|
||||
}
|
||||
];
|
||||
|
||||
users = {
|
||||
users = {
|
||||
${user} = {
|
||||
isSystemUser = true;
|
||||
group = user;
|
||||
description = "meta.sr.ht user";
|
||||
};
|
||||
};
|
||||
|
||||
groups = {
|
||||
"${user}" = { };
|
||||
};
|
||||
};
|
||||
|
||||
services.cron.systemCronJobs = [ "0 0 * * * ${cfg.python}/bin/metasrht-daily" ];
|
||||
services.postgresql = {
|
||||
authentication = ''
|
||||
local ${database} ${user} trust
|
||||
'';
|
||||
ensureDatabases = [ database ];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = user;
|
||||
ensurePermissions = { "DATABASE \"${database}\"" = "ALL PRIVILEGES"; };
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
systemd = {
|
||||
tmpfiles.rules = [
|
||||
"d ${statePath} 0750 ${user} ${user} -"
|
||||
];
|
||||
|
||||
services = {
|
||||
metasrht = import ./service.nix { inherit config pkgs lib; } scfg drv iniKey {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "meta.sr.ht website service";
|
||||
|
||||
preStart = ''
|
||||
# Configure client(s) as "preauthorized"
|
||||
${concatMapStringsSep "\n\n"
|
||||
(attr: ''
|
||||
if ! test -e "${statePath}/${attr}.oauth" || [ "$(cat ${statePath}/${attr}.oauth)" != "${cfgIni."${attr}".oauth-client-id}" ]; then
|
||||
# Configure ${attr}'s OAuth client as "preauthorized"
|
||||
psql ${database} \
|
||||
-c "UPDATE oauthclient SET preauthorized = true WHERE client_id = '${cfgIni."${attr}".oauth-client-id}'"
|
||||
|
||||
printf "%s" "${cfgIni."${attr}".oauth-client-id}" > "${statePath}/${attr}.oauth"
|
||||
fi
|
||||
'')
|
||||
(builtins.attrNames (filterAttrs
|
||||
(k: v: !(hasInfix "::" k) && builtins.hasAttr "oauth-client-id" v && v.oauth-client-id != null)
|
||||
cfg.settings))}
|
||||
'';
|
||||
|
||||
serviceConfig.ExecStart = "${cfg.python}/bin/gunicorn ${drv.pname}.app:app -b ${cfg.address}:${toString port}";
|
||||
};
|
||||
|
||||
metasrht-api = import ./service.nix { inherit config pkgs lib; } scfg drv iniKey {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "meta.sr.ht api service";
|
||||
|
||||
preStart = ''
|
||||
# Configure client(s) as "preauthorized"
|
||||
${concatMapStringsSep "\n\n"
|
||||
(attr: ''
|
||||
if ! test -e "${statePath}/${attr}.oauth" || [ "$(cat ${statePath}/${attr}.oauth)" != "${cfgIni."${attr}".oauth-client-id}" ]; then
|
||||
# Configure ${attr}'s OAuth client as "preauthorized"
|
||||
psql ${database} \
|
||||
-c "UPDATE oauthclient SET preauthorized = true WHERE client_id = '${cfgIni."${attr}".oauth-client-id}'"
|
||||
|
||||
printf "%s" "${cfgIni."${attr}".oauth-client-id}" > "${statePath}/${attr}.oauth"
|
||||
fi
|
||||
'')
|
||||
(builtins.attrNames (filterAttrs
|
||||
(k: v: !(hasInfix "::" k) && builtins.hasAttr "oauth-client-id" v && v.oauth-client-id != null)
|
||||
cfg.settings))}
|
||||
'';
|
||||
|
||||
serviceConfig.ExecStart = "${pkgs.sourcehut.metasrht}/bin/metasrht-api -b :${toString (port + 100)}";
|
||||
};
|
||||
|
||||
metasrht-webhooks = {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "meta.sr.ht webhooks service";
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = user;
|
||||
Restart = "always";
|
||||
ExecStart = "${cfg.python}/bin/celery -A ${drv.pname}.webhooks worker --loglevel=info";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.sourcehut.settings = {
|
||||
# URL meta.sr.ht is being served at (protocol://domain)
|
||||
"meta.sr.ht".origin = mkDefault "https://meta.${cfg.originBase}";
|
||||
# Address and port to bind the debug server to
|
||||
"meta.sr.ht".debug-host = mkDefault "0.0.0.0";
|
||||
"meta.sr.ht".debug-port = mkDefault port;
|
||||
# Configures the SQLAlchemy connection string for the database.
|
||||
"meta.sr.ht".connection-string = mkDefault "postgresql:///${database}?user=${user}&host=/var/run/postgresql";
|
||||
# Set to "yes" to automatically run migrations on package upgrade.
|
||||
"meta.sr.ht".migrate-on-upgrade = mkDefault "yes";
|
||||
# If "yes", the user will be sent the stock sourcehut welcome emails after
|
||||
# signup (requires cron to be configured properly). These are specific to the
|
||||
# sr.ht instance so you probably want to patch these before enabling this.
|
||||
"meta.sr.ht".welcome-emails = mkDefault "no";
|
||||
|
||||
# The redis connection used for the webhooks worker
|
||||
"meta.sr.ht".webhooks = mkDefault "redis://${rcfg.bind}:${toString rcfg.port}/6";
|
||||
|
||||
# If "no", public registration will not be permitted.
|
||||
"meta.sr.ht::settings".registration = mkDefault "no";
|
||||
# Where to redirect new users upon registration
|
||||
"meta.sr.ht::settings".onboarding-redirect = mkDefault "https://meta.${cfg.originBase}";
|
||||
# How many invites each user is issued upon registration (only applicable if
|
||||
# open registration is disabled)
|
||||
"meta.sr.ht::settings".user-invites = mkDefault 5;
|
||||
|
||||
# Origin URL for API, 100 more than web
|
||||
"meta.sr.ht".api-origin = mkDefault "http://localhost:5100";
|
||||
|
||||
# You can add aliases for the client IDs of commonly used OAuth clients here.
|
||||
#
|
||||
# Example:
|
||||
"meta.sr.ht::aliases" = mkDefault { };
|
||||
# "meta.sr.ht::aliases"."git.sr.ht" = 12345;
|
||||
|
||||
# "yes" to enable the billing system
|
||||
"meta.sr.ht::billing".enabled = mkDefault "no";
|
||||
# Get your keys at https://dashboard.stripe.com/account/apikeys
|
||||
"meta.sr.ht::billing".stripe-public-key = mkDefault null;
|
||||
"meta.sr.ht::billing".stripe-secret-key = mkDefault null;
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."meta.${cfg.originBase}" = {
|
||||
forceSSL = true;
|
||||
locations."/".proxyPass = "http://${cfg.address}:${toString port}";
|
||||
locations."/query".proxyPass = "http://${cfg.address}:${toString (port + 100)}";
|
||||
locations."/static".root = "${pkgs.sourcehut.metasrht}/${pkgs.sourcehut.python.sitePackages}/metasrht";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,135 +0,0 @@
|
||||
{ config, lib, options, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.sourcehut;
|
||||
opt = options.services.sourcehut;
|
||||
cfgIni = cfg.settings;
|
||||
scfg = cfg.paste;
|
||||
iniKey = "paste.sr.ht";
|
||||
|
||||
rcfg = config.services.redis;
|
||||
drv = pkgs.sourcehut.pastesrht;
|
||||
in
|
||||
{
|
||||
options.services.sourcehut.paste = {
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "pastesrht";
|
||||
description = ''
|
||||
User for paste.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 5011;
|
||||
description = ''
|
||||
Port on which the "paste" module should listen.
|
||||
'';
|
||||
};
|
||||
|
||||
database = mkOption {
|
||||
type = types.str;
|
||||
default = "paste.sr.ht";
|
||||
description = ''
|
||||
PostgreSQL database name for paste.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
statePath = mkOption {
|
||||
type = types.path;
|
||||
default = "${cfg.statePath}/pastesrht";
|
||||
defaultText = literalExpression ''"''${config.${opt.statePath}}/pastesrht"'';
|
||||
description = ''
|
||||
State path for pastesrht.sr.ht.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = with scfg; lib.mkIf (cfg.enable && elem "paste" cfg.services) {
|
||||
users = {
|
||||
users = {
|
||||
"${user}" = {
|
||||
isSystemUser = true;
|
||||
group = user;
|
||||
description = "paste.sr.ht user";
|
||||
};
|
||||
};
|
||||
|
||||
groups = {
|
||||
"${user}" = { };
|
||||
};
|
||||
};
|
||||
|
||||
services.postgresql = {
|
||||
authentication = ''
|
||||
local ${database} ${user} trust
|
||||
'';
|
||||
ensureDatabases = [ database ];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = user;
|
||||
ensurePermissions = { "DATABASE \"${database}\"" = "ALL PRIVILEGES"; };
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
systemd = {
|
||||
tmpfiles.rules = [
|
||||
"d ${statePath} 0750 ${user} ${user} -"
|
||||
];
|
||||
|
||||
services = {
|
||||
pastesrht = import ./service.nix { inherit config pkgs lib; } scfg drv iniKey {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "paste.sr.ht website service";
|
||||
|
||||
serviceConfig.ExecStart = "${cfg.python}/bin/gunicorn ${drv.pname}.app:app -b ${cfg.address}:${toString port}";
|
||||
};
|
||||
|
||||
pastesrht-webhooks = {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "paste.sr.ht webhooks service";
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = user;
|
||||
Restart = "always";
|
||||
ExecStart = "${cfg.python}/bin/celery -A ${drv.pname}.webhooks worker --loglevel=info";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.sourcehut.settings = {
|
||||
# URL paste.sr.ht is being served at (protocol://domain)
|
||||
"paste.sr.ht".origin = mkDefault "http://paste.${cfg.originBase}";
|
||||
# Address and port to bind the debug server to
|
||||
"paste.sr.ht".debug-host = mkDefault "0.0.0.0";
|
||||
"paste.sr.ht".debug-port = mkDefault port;
|
||||
# Configures the SQLAlchemy connection string for the database.
|
||||
"paste.sr.ht".connection-string = mkDefault "postgresql:///${database}?user=${user}&host=/var/run/postgresql";
|
||||
# Set to "yes" to automatically run migrations on package upgrade.
|
||||
"paste.sr.ht".migrate-on-upgrade = mkDefault "yes";
|
||||
# paste.sr.ht's OAuth client ID and secret for meta.sr.ht
|
||||
# Register your client at meta.example.org/oauth
|
||||
"paste.sr.ht".oauth-client-id = mkDefault null;
|
||||
"paste.sr.ht".oauth-client-secret = mkDefault null;
|
||||
"paste.sr.ht".webhooks = mkDefault "redis://${rcfg.bind}:${toString rcfg.port}/5";
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."paste.${cfg.originBase}" = {
|
||||
forceSSL = true;
|
||||
locations."/".proxyPass = "http://${cfg.address}:${toString port}";
|
||||
locations."/query".proxyPass = "http://${cfg.address}:${toString (port + 100)}";
|
||||
locations."/static".root = "${pkgs.sourcehut.pastesrht}/${pkgs.sourcehut.python.sitePackages}/pastesrht";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -148,7 +148,7 @@ in
|
||||
redis = {
|
||||
host = mkOption {
|
||||
type = types.str;
|
||||
default = "unix:/run/redis-sourcehut-${srvsrht}/redis.sock?db=0";
|
||||
default = "unix:///run/redis-sourcehut-${srvsrht}/redis.sock?db=0";
|
||||
example = "redis://shared.wireguard:6379/0";
|
||||
description = ''
|
||||
The redis host URL. This is used for caching and temporary storage, and must
|
||||
|
||||
@@ -1,163 +0,0 @@
|
||||
{ config, lib, options, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.sourcehut;
|
||||
opt = options.services.sourcehut;
|
||||
cfgIni = cfg.settings;
|
||||
scfg = cfg.todo;
|
||||
iniKey = "todo.sr.ht";
|
||||
|
||||
rcfg = config.services.redis;
|
||||
drv = pkgs.sourcehut.todosrht;
|
||||
in
|
||||
{
|
||||
options.services.sourcehut.todo = {
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "todosrht";
|
||||
description = ''
|
||||
User for todo.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 5003;
|
||||
description = ''
|
||||
Port on which the "todo" module should listen.
|
||||
'';
|
||||
};
|
||||
|
||||
database = mkOption {
|
||||
type = types.str;
|
||||
default = "todo.sr.ht";
|
||||
description = ''
|
||||
PostgreSQL database name for todo.sr.ht.
|
||||
'';
|
||||
};
|
||||
|
||||
statePath = mkOption {
|
||||
type = types.path;
|
||||
default = "${cfg.statePath}/todosrht";
|
||||
defaultText = literalExpression ''"''${config.${opt.statePath}}/todosrht"'';
|
||||
description = ''
|
||||
State path for todo.sr.ht.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = with scfg; lib.mkIf (cfg.enable && elem "todo" cfg.services) {
|
||||
users = {
|
||||
users = {
|
||||
"${user}" = {
|
||||
isSystemUser = true;
|
||||
group = user;
|
||||
extraGroups = [ "postfix" ];
|
||||
description = "todo.sr.ht user";
|
||||
};
|
||||
};
|
||||
groups = {
|
||||
"${user}" = { };
|
||||
};
|
||||
};
|
||||
|
||||
services.postgresql = {
|
||||
authentication = ''
|
||||
local ${database} ${user} trust
|
||||
'';
|
||||
ensureDatabases = [ database ];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = user;
|
||||
ensurePermissions = { "DATABASE \"${database}\"" = "ALL PRIVILEGES"; };
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
systemd = {
|
||||
tmpfiles.rules = [
|
||||
"d ${statePath} 0750 ${user} ${user} -"
|
||||
];
|
||||
|
||||
services = {
|
||||
todosrht = import ./service.nix { inherit config pkgs lib; } scfg drv iniKey {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "todo.sr.ht website service";
|
||||
|
||||
serviceConfig.ExecStart = "${cfg.python}/bin/gunicorn ${drv.pname}.app:app -b ${cfg.address}:${toString port}";
|
||||
};
|
||||
|
||||
todosrht-lmtp = {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
bindsTo = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "todo.sr.ht process service";
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = user;
|
||||
Restart = "always";
|
||||
ExecStart = "${cfg.python}/bin/todosrht-lmtp";
|
||||
};
|
||||
};
|
||||
|
||||
todosrht-webhooks = {
|
||||
after = [ "postgresql.service" "network.target" ];
|
||||
requires = [ "postgresql.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
description = "todo.sr.ht webhooks service";
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = user;
|
||||
Restart = "always";
|
||||
ExecStart = "${cfg.python}/bin/celery -A ${drv.pname}.webhooks worker --loglevel=info";
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.sourcehut.settings = {
|
||||
# URL todo.sr.ht is being served at (protocol://domain)
|
||||
"todo.sr.ht".origin = mkDefault "http://todo.${cfg.originBase}";
|
||||
# Address and port to bind the debug server to
|
||||
"todo.sr.ht".debug-host = mkDefault "0.0.0.0";
|
||||
"todo.sr.ht".debug-port = mkDefault port;
|
||||
# Configures the SQLAlchemy connection string for the database.
|
||||
"todo.sr.ht".connection-string = mkDefault "postgresql:///${database}?user=${user}&host=/var/run/postgresql";
|
||||
# Set to "yes" to automatically run migrations on package upgrade.
|
||||
"todo.sr.ht".migrate-on-upgrade = mkDefault "yes";
|
||||
# todo.sr.ht's OAuth client ID and secret for meta.sr.ht
|
||||
# Register your client at meta.example.org/oauth
|
||||
"todo.sr.ht".oauth-client-id = mkDefault null;
|
||||
"todo.sr.ht".oauth-client-secret = mkDefault null;
|
||||
# Outgoing email for notifications generated by users
|
||||
"todo.sr.ht".notify-from = mkDefault "CHANGEME@example.org";
|
||||
# The redis connection used for the webhooks worker
|
||||
"todo.sr.ht".webhooks = mkDefault "redis://${rcfg.bind}:${toString rcfg.port}/1";
|
||||
# Network-key
|
||||
"todo.sr.ht".network-key = mkDefault null;
|
||||
|
||||
# Path for the lmtp daemon's unix socket. Direct incoming mail to this socket.
|
||||
# Alternatively, specify IP:PORT and an SMTP server will be run instead.
|
||||
"todo.sr.ht::mail".sock = mkDefault "/tmp/todo.sr.ht-lmtp.sock";
|
||||
# The lmtp daemon will make the unix socket group-read/write for users in this
|
||||
# group.
|
||||
"todo.sr.ht::mail".sock-group = mkDefault "postfix";
|
||||
|
||||
"todo.sr.ht::mail".posting-domain = mkDefault "todo.${cfg.originBase}";
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."todo.${cfg.originBase}" = {
|
||||
forceSSL = true;
|
||||
locations."/".proxyPass = "http://${cfg.address}:${toString port}";
|
||||
locations."/query".proxyPass = "http://${cfg.address}:${toString (port + 100)}";
|
||||
locations."/static".root = "${pkgs.sourcehut.todosrht}/${pkgs.sourcehut.python.sitePackages}/todosrht";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -5,6 +5,8 @@ with lib;
|
||||
let
|
||||
cfg = config.services.localtimed;
|
||||
in {
|
||||
imports = [ (lib.mkRenamedOptionModule [ "services" "localtime" ] [ "services" "localtimed" ]) ];
|
||||
|
||||
options = {
|
||||
services.localtimed = {
|
||||
enable = mkOption {
|
||||
|
||||
@@ -440,5 +440,53 @@ let self = {
|
||||
"21.11".ap-east-1.aarch64-linux.hvm-ebs = "ami-0aa3b50a4f2822a00";
|
||||
"21.11".sa-east-1.aarch64-linux.hvm-ebs = "ami-00f68eff453d3fe69";
|
||||
|
||||
latest = self."21.11";
|
||||
# 22.05.342.a634c8f6c1f
|
||||
|
||||
"22.05".eu-west-1.x86_64-linux.hvm-ebs = "ami-00badba5cfa0a0c0d";
|
||||
"22.05".af-south-1.x86_64-linux.hvm-ebs = "ami-0d3a6166c1ea4d7b4";
|
||||
"22.05".ap-east-1.x86_64-linux.hvm-ebs = "ami-06445325c360470d8";
|
||||
"22.05".ap-northeast-1.x86_64-linux.hvm-ebs = "ami-009c422293bcf3721";
|
||||
"22.05".ap-northeast-2.x86_64-linux.hvm-ebs = "ami-0bfc0397525a67ed8";
|
||||
"22.05".ap-northeast-3.x86_64-linux.hvm-ebs = "ami-0a1fb4d4e08a6065e";
|
||||
"22.05".ap-south-1.x86_64-linux.hvm-ebs = "ami-07ad258dcc69239d2";
|
||||
"22.05".ap-southeast-1.x86_64-linux.hvm-ebs = "ami-0f59f7f33cba8b1a4";
|
||||
"22.05".ap-southeast-2.x86_64-linux.hvm-ebs = "ami-0d1e49fe30aec165d";
|
||||
"22.05".ap-southeast-3.x86_64-linux.hvm-ebs = "ami-0f5cb24a1e3fc62dd";
|
||||
"22.05".ca-central-1.x86_64-linux.hvm-ebs = "ami-0551a595ba7916462";
|
||||
"22.05".eu-central-1.x86_64-linux.hvm-ebs = "ami-0702eee2e75d541d1";
|
||||
"22.05".eu-north-1.x86_64-linux.hvm-ebs = "ami-0fc6838942cb7d9cb";
|
||||
"22.05".eu-south-1.x86_64-linux.hvm-ebs = "ami-0df9463b8965cdb80";
|
||||
"22.05".eu-west-2.x86_64-linux.hvm-ebs = "ami-08f3c1eb533a42ac1";
|
||||
"22.05".eu-west-3.x86_64-linux.hvm-ebs = "ami-04b50c79dc4009c97";
|
||||
"22.05".me-south-1.x86_64-linux.hvm-ebs = "ami-05c52087afab7024d";
|
||||
"22.05".sa-east-1.x86_64-linux.hvm-ebs = "ami-0732aa0f0c28f281b";
|
||||
"22.05".us-east-1.x86_64-linux.hvm-ebs = "ami-0223db08811f6fb2d";
|
||||
"22.05".us-east-2.x86_64-linux.hvm-ebs = "ami-0a743534fa3e51b41";
|
||||
"22.05".us-west-1.x86_64-linux.hvm-ebs = "ami-0d72ab697beab5ea5";
|
||||
"22.05".us-west-2.x86_64-linux.hvm-ebs = "ami-034946f0c47088751";
|
||||
|
||||
"22.05".eu-west-1.aarch64-linux.hvm-ebs = "ami-08114069426233360";
|
||||
"22.05".af-south-1.aarch64-linux.hvm-ebs = "ami-0a9b83913abd61694";
|
||||
"22.05".ap-east-1.aarch64-linux.hvm-ebs = "ami-03966ad4547f532b7";
|
||||
"22.05".ap-northeast-1.aarch64-linux.hvm-ebs = "ami-0eb7e152c8d5aae7d";
|
||||
"22.05".ap-northeast-2.aarch64-linux.hvm-ebs = "ami-08369e00c5528762b";
|
||||
"22.05".ap-northeast-3.aarch64-linux.hvm-ebs = "ami-0fa14b8d48cdd57c3";
|
||||
"22.05".ap-south-1.aarch64-linux.hvm-ebs = "ami-0f2ca3b542ff0913b";
|
||||
"22.05".ap-southeast-1.aarch64-linux.hvm-ebs = "ami-087def0511ef2687d";
|
||||
"22.05".ap-southeast-2.aarch64-linux.hvm-ebs = "ami-0aa90985199011f04";
|
||||
"22.05".ap-southeast-3.aarch64-linux.hvm-ebs = "ami-0c86c52790deefa23";
|
||||
"22.05".ca-central-1.aarch64-linux.hvm-ebs = "ami-06e932cc9c20403e4";
|
||||
"22.05".eu-central-1.aarch64-linux.hvm-ebs = "ami-07680df1026a9b54c";
|
||||
"22.05".eu-north-1.aarch64-linux.hvm-ebs = "ami-0cbe9f2725e4de706";
|
||||
"22.05".eu-south-1.aarch64-linux.hvm-ebs = "ami-01a83c3892925765f";
|
||||
"22.05".eu-west-2.aarch64-linux.hvm-ebs = "ami-049024d086d039b54";
|
||||
"22.05".eu-west-3.aarch64-linux.hvm-ebs = "ami-0c0ebe20ebfc635a1";
|
||||
"22.05".me-south-1.aarch64-linux.hvm-ebs = "ami-0d662fcaac553e945";
|
||||
"22.05".sa-east-1.aarch64-linux.hvm-ebs = "ami-0888c8f703e00fdb8";
|
||||
"22.05".us-east-1.aarch64-linux.hvm-ebs = "ami-03536a13324333073";
|
||||
"22.05".us-east-2.aarch64-linux.hvm-ebs = "ami-067611519fa817aaa";
|
||||
"22.05".us-west-1.aarch64-linux.hvm-ebs = "ami-0f96be48071c13ab2";
|
||||
"22.05".us-west-2.aarch64-linux.hvm-ebs = "ami-084bc5d777585adfb";
|
||||
|
||||
latest = self."22.05";
|
||||
}; in self
|
||||
|
||||
@@ -169,6 +169,45 @@ in
|
||||
oauth-client-id = "d07cb713d920702e";
|
||||
};
|
||||
settings.webhooks.private-key = pkgs.writeText "webhook-key" "Ra3IjxgFiwG9jxgp4WALQIZw/BMYt30xWiOsqD0J7EA=";
|
||||
settings.mail = {
|
||||
smtp-from = "root+hut@${domain}";
|
||||
# WARNING: take care to keep pgp-privkey outside the Nix store in production,
|
||||
# or use LoadCredentialEncrypted=
|
||||
pgp-privkey = toString (pkgs.writeText "sourcehut.pgp-privkey" ''
|
||||
-----BEGIN PGP PRIVATE KEY BLOCK-----
|
||||
|
||||
lFgEYqDRORYJKwYBBAHaRw8BAQdAehGoy36FUx2OesYm07be2rtLyvR5Pb/ltstd
|
||||
Gk7hYQoAAP9X4oPmxxrHN8LewBpWITdBomNqlHoiP7mI0nz/BOPJHxEktDZuaXhv
|
||||
cy90ZXN0cy9zb3VyY2VodXQgPHJvb3QraHV0QHNvdXJjZWh1dC5sb2NhbGRvbWFp
|
||||
bj6IlwQTFgoAPxYhBPqjgjnL8RHN4JnADNicgXaYm0jJBQJioNE5AhsDBQkDwmcA
|
||||
BgsJCAcDCgUVCgkICwUWAwIBAAIeBQIXgAAKCRDYnIF2mJtIySVCAP9e2nHsVHSi
|
||||
2B1YGZpVG7Xf36vxljmMkbroQy+0gBPwRwEAq+jaiQqlbGhQ7R/HMFcAxBIVsq8h
|
||||
Aw1rngsUd0o3dAicXQRioNE5EgorBgEEAZdVAQUBAQdAXZV2Sd5ZNBVTBbTGavMv
|
||||
D6ORrUh8z7TI/3CsxCE7+yADAQgHAAD/c1RU9xH+V/uI1fE7HIn/zL0LUPpsuce2
|
||||
cH++g4u3kBgTOYh+BBgWCgAmFiEE+qOCOcvxEc3gmcAM2JyBdpibSMkFAmKg0TkC
|
||||
GwwFCQPCZwAACgkQ2JyBdpibSMlKagD/cTre6p1m8QuJ7kwmCFRSz5tBzIuYMMgN
|
||||
xtT7dmS91csA/35fWsOykSiFRojQ7ccCSUTHL7ApF2EbL968tP/D2hIG
|
||||
=Hjoc
|
||||
-----END PGP PRIVATE KEY BLOCK-----
|
||||
'');
|
||||
pgp-pubkey = pkgs.writeText "sourcehut.pgp-pubkey" ''
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mDMEYqDRORYJKwYBBAHaRw8BAQdAehGoy36FUx2OesYm07be2rtLyvR5Pb/ltstd
|
||||
Gk7hYQq0Nm5peG9zL3Rlc3RzL3NvdXJjZWh1dCA8cm9vdCtodXRAc291cmNlaHV0
|
||||
LmxvY2FsZG9tYWluPoiXBBMWCgA/FiEE+qOCOcvxEc3gmcAM2JyBdpibSMkFAmKg
|
||||
0TkCGwMFCQPCZwAGCwkIBwMKBRUKCQgLBRYDAgEAAh4FAheAAAoJENicgXaYm0jJ
|
||||
JUIA/17acexUdKLYHVgZmlUbtd/fq/GWOYyRuuhDL7SAE/BHAQCr6NqJCqVsaFDt
|
||||
H8cwVwDEEhWyryEDDWueCxR3Sjd0CLg4BGKg0TkSCisGAQQBl1UBBQEBB0BdlXZJ
|
||||
3lk0FVMFtMZq8y8Po5GtSHzPtMj/cKzEITv7IAMBCAeIfgQYFgoAJhYhBPqjgjnL
|
||||
8RHN4JnADNicgXaYm0jJBQJioNE5AhsMBQkDwmcAAAoJENicgXaYm0jJSmoA/3E6
|
||||
3uqdZvELie5MJghUUs+bQcyLmDDIDcbU+3ZkvdXLAP9+X1rDspEohUaI0O3HAklE
|
||||
xy+wKRdhGy/evLT/w9oSBg==
|
||||
=pJD7
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
'';
|
||||
pgp-key-id = "0xFAA38239CBF111CDE099C00CD89C8176989B48C9";
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ 443 ];
|
||||
@@ -195,6 +234,7 @@ in
|
||||
# Testing metasrht
|
||||
machine.wait_for_unit("metasrht-api.service")
|
||||
machine.wait_for_unit("metasrht.service")
|
||||
machine.wait_for_unit("metasrht-webhooks.service")
|
||||
machine.wait_for_open_port(5000)
|
||||
machine.succeed("curl -sL http://localhost:5000 | grep meta.${domain}")
|
||||
machine.succeed("curl -sL http://meta.${domain} | grep meta.${domain}")
|
||||
@@ -206,7 +246,9 @@ in
|
||||
#machine.wait_for_unit("buildsrht-worker.service")
|
||||
|
||||
# Testing gitsrht
|
||||
machine.wait_for_unit("gitsrht-api.service")
|
||||
machine.wait_for_unit("gitsrht.service")
|
||||
machine.wait_for_unit("gitsrht-webhooks.service")
|
||||
machine.succeed("curl -sL http://git.${domain} | grep git.${domain}")
|
||||
'';
|
||||
})
|
||||
|
||||
@@ -18,13 +18,13 @@ let
|
||||
in
|
||||
pythonPackages.buildPythonApplication rec {
|
||||
pname = "picard";
|
||||
version = "2.8";
|
||||
version = "2.8.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "metabrainz";
|
||||
repo = pname;
|
||||
rev = "refs/tags/release-${version}";
|
||||
sha256 = "sha256-DG5b3mw6AL4HSF3diGXOqIeH/eXGqLOsbcnPbD6kznE=";
|
||||
sha256 = "sha256-KEKOouTNmmZiPyKo8xCQv6Zkreidtz2DaEbHjuwJJvY=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ gettext qt5.wrapQtAppsHook qt5.qtbase ]
|
||||
|
||||
@@ -1,135 +0,0 @@
|
||||
{ stdenv, lib, fetchurl, makeDesktopItem, makeWrapper
|
||||
, # Patchelf dependencies:
|
||||
alsa-lib, atomEnv, boehmgc, flac, libogg, libvorbis, libXScrnSaver, libGLU, libGL
|
||||
, openssl, xorg, zlib
|
||||
}:
|
||||
|
||||
let
|
||||
|
||||
version = "17.1";
|
||||
|
||||
sha256 = if stdenv.hostPlatform.system == "x86_64-linux" then "1kddisnvlk48jip6k59mw3wlkrl7rkck2lxpaghn0gfx02cvms5f"
|
||||
else if stdenv.hostPlatform.system == "i686-cygwin" then "1izp42afrlh4yd322ax9w85ki388gnkqfqbw8dwnn4k3j7r5487z"
|
||||
else throw "Unsupported system: ${stdenv.hostPlatform.system}";
|
||||
|
||||
urlBase = "https://github.com/Kode/KodeStudio/releases/download/v${version}/KodeStudio-";
|
||||
|
||||
urlStr = if stdenv.hostPlatform.system == "x86_64-linux" then urlBase + "linux64.tar.gz"
|
||||
else if stdenv.hostPlatform.system == "i686-cygwin" then urlBase + "win32.zip"
|
||||
else throw "Unsupported system: ${stdenv.hostPlatform.system}";
|
||||
|
||||
in
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "kodestudio";
|
||||
inherit version;
|
||||
|
||||
src = fetchurl {
|
||||
url = urlStr;
|
||||
inherit sha256;
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
buildInputs = [ libXScrnSaver ];
|
||||
|
||||
desktopItem = makeDesktopItem {
|
||||
name = "kodestudio";
|
||||
exec = "kodestudio";
|
||||
icon = "kodestudio";
|
||||
comment = "Kode Studio is an IDE for Kha based on Visual Studio Code";
|
||||
desktopName = "Kode Studio";
|
||||
genericName = "Text Editor";
|
||||
categories = [ "GNOME" "GTK" "Utility" "TextEditor" "Development" ];
|
||||
};
|
||||
|
||||
sourceRoot = ".";
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
cp -r ./* $out
|
||||
'';
|
||||
|
||||
postFixup = lib.optionalString (stdenv.hostPlatform.system == "i686-linux" || stdenv.hostPlatform.system == "x86_64-linux") ''
|
||||
# Patch Binaries
|
||||
patchelf \
|
||||
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
||||
--set-rpath "$out:${atomEnv.libPath}" \
|
||||
$out/kodestudio
|
||||
patchelf \
|
||||
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
||||
--set-rpath ".:${stdenv.cc.libc}/lib:${xorg.libXinerama}/lib:${xorg.libX11}/lib:${alsa-lib}/lib:${libGL}/lib:${libGLU}/lib:${lib.getLib openssl}/lib" \
|
||||
$out/resources/app/extensions/krom/Krom/linux/Krom
|
||||
patchelf \
|
||||
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
||||
--set-rpath ".:${stdenv.cc.libc}/lib" \
|
||||
$out/resources/app/extensions/kha/Kha/Kore/Tools/krafix/krafix-linux64
|
||||
patchelf \
|
||||
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
||||
--set-rpath ".:${stdenv.cc.libc}/lib" \
|
||||
$out/resources/app/extensions/kha/Kha/Kore/Tools/kraffiti/kraffiti-linux64
|
||||
patchelf \
|
||||
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
||||
--set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" \
|
||||
$out/resources/app/extensions/kha/Kha/Tools/kravur/kravur-linux64
|
||||
patchelf \
|
||||
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
||||
--set-rpath ".:${stdenv.cc.libc}/lib:${zlib}/lib" \
|
||||
$out/resources/app/extensions/kha/Kha/Tools/haxe/haxe-linux64
|
||||
patchelf \
|
||||
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
||||
--set-rpath ".:${stdenv.cc.libc}/lib:${libvorbis}/lib:${libogg}/lib:${flac.out}/lib" \
|
||||
$out/resources/app/extensions/kha/Kha/Tools/oggenc/oggenc-linux64
|
||||
|
||||
# Patch Shared Objects
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/libnode.so
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib" $out/libffmpeg.so
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/extensions/krom/Krom/linux/libv8_libplatform.so
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/extensions/krom/Krom/linux/libicuuc.so
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/extensions/krom/Krom/linux/libv8_libbase.so
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/extensions/krom/Krom/linux/libv8.so
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/extensions/krom/Krom/linux/libicui18n.so
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${boehmgc}/lib" $out/resources/app/extensions/kha/Kha/Backends/Kore/khacpp/project/libs/nekoapi/bin/RPi/libneko.so
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${boehmgc}/lib" $out/resources/app/extensions/kha/Kha/Backends/Kore/khacpp/project/libs/nekoapi/bin/Linux64/libneko.so
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${boehmgc}/lib" $out/resources/app/extensions/kha/Kha/Backends/Kore/khacpp/project/libs/nekoapi/bin/Linux/libneko.so
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/node_modules/pty.js/build/Release/pty.node
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/node_modules/gc-signals/build/Release/gcsignals.node
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/node_modules/gc-signals/build/Release/obj.target/gcsignals.node
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/node_modules/oniguruma/build/Release/onig_scanner.node
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib" $out/resources/app/node_modules/oniguruma/build/Release/obj.target/onig_scanner.node
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib:${xorg.libX11}/lib" $out/resources/app/node_modules/native-keymap/build/Release/keymapping.node
|
||||
patchelf --set-rpath ".:${stdenv.cc.libc}/lib:${stdenv.cc.cc.lib}/lib:${xorg.libX11}/lib" $out/resources/app/node_modules/native-keymap/build/Release/obj.target/keymapping.node
|
||||
|
||||
# Rewrite VSCODE_PATH inside bin/kodestudio to $out
|
||||
substituteInPlace $out/bin/kodestudio --replace "/usr/share/kodestudio" $out
|
||||
|
||||
# Patch library calls that expects nix store files to be mode 644:
|
||||
# A stat is made on srcFile (in the nix store), and its mode used
|
||||
# for destFile, but it expects the mode to be read write, whereas
|
||||
# all regular files in the nix store are made read only.
|
||||
# (33188 is 100644 octal, the required mode)
|
||||
substituteInPlace $out/resources/app/extensions/kha/Kha/Tools/khamake/node_modules/fs-extra/lib/copy-sync/copy-file-sync.js --replace "stat.mode" "33188"
|
||||
substituteInPlace $out/resources/app/extensions/kha/Kha/Kore/Tools/koremake/node_modules/fs-extra/lib/copy-sync/copy-file-sync.js --replace "stat.mode" "33188"
|
||||
|
||||
# Wrap preload libXss
|
||||
wrapProgram $out/bin/kodestudio \
|
||||
--prefix LD_PRELOAD : ${lib.makeLibraryPath [ libXScrnSaver ]}/libXss.so.1
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = ''
|
||||
An IDE for Kha based on Visual Studio Code
|
||||
'';
|
||||
longDescription = ''
|
||||
Kode Studio is an IDE for Kha based on Visual Studio Code.
|
||||
|
||||
Kha and Kore are multimedia frameworks for Haxe and C++ respectively
|
||||
(with JavaScript coming soon). Using Kha or Kore you can access all
|
||||
hardware at the lowest possible level in a completely portable way.
|
||||
'';
|
||||
homepage = "http://kode.tech/";
|
||||
downloadPage = "https://github.com/Kode/KodeStudio/releases";
|
||||
license = licenses.mit;
|
||||
maintainers = [ maintainers.patternspandemic ];
|
||||
platforms = [ "x86_64-linux" "i686-cygwin" ];
|
||||
};
|
||||
}
|
||||
@@ -2364,8 +2364,8 @@ let
|
||||
mktplcRef = {
|
||||
name = "vspacecode";
|
||||
publisher = "VSpaceCode";
|
||||
version = "0.10.1";
|
||||
sha256 = "sha256-H7SCC/ZhDswMQjLX+qpQa6A1N83MobJRPC4pyIbZ1kA=";
|
||||
version = "0.10.9";
|
||||
sha256 = "sha256-16oC2BghY7mB/W0niTDtKGMAC9pt6m0utSOJ0lgbpAU=";
|
||||
};
|
||||
meta = {
|
||||
license = lib.licenses.mit;
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
, cairo
|
||||
, cmake
|
||||
, fetchurl
|
||||
, fetchpatch
|
||||
, gettext
|
||||
, ghostscript
|
||||
, glib
|
||||
@@ -44,20 +43,25 @@
|
||||
let
|
||||
python3Env = python3.withPackages
|
||||
(ps: with ps; [
|
||||
appdirs
|
||||
beautifulsoup4
|
||||
cachecontrol
|
||||
numpy
|
||||
lxml
|
||||
pillow
|
||||
scour
|
||||
pyserial
|
||||
]);
|
||||
requests
|
||||
pygobject3
|
||||
] ++ inkex.propagatedBuildInputs);
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "inkscape";
|
||||
version = "1.1.2";
|
||||
version = "1.2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://media.inkscape.org/dl/resources/file/${pname}-${version}.tar.xz";
|
||||
sha256 = "sha256-P/5UoG0LJaTNi260JFNu8e0gW+E0Q6Oc1DfIx7ibltE=";
|
||||
url = "https://media.inkscape.org/dl/resources/file/inkscape-${version}.tar.xz";
|
||||
sha256 = "jZsxFCVUlFZk7f7+LWtVkQpQmXZfcXanEQfDTx3N5q0=";
|
||||
};
|
||||
|
||||
# Inkscape hits the ARGMAX when linking on macOS. It appears to be
|
||||
@@ -73,20 +77,6 @@ stdenv.mkDerivation rec {
|
||||
# e.g., those from the "Effects" menu.
|
||||
python3 = "${python3Env}/bin/python";
|
||||
})
|
||||
|
||||
# Fix build with poppler 22.03
|
||||
# https://gitlab.com/inkscape/inkscape/-/merge_requests/4187
|
||||
(fetchpatch {
|
||||
url = "https://gitlab.com/inkscape/inkscape/-/commit/a18c57ffff313fd08bc8a44f6b6bf0b01d7e9b75.patch";
|
||||
sha256 = "UZb8ZTtfA5667uo5ZlVQ5vPowiSgd4ItAJ9U1BOsRQg=";
|
||||
})
|
||||
|
||||
# Fix build with poppler 22.04
|
||||
# https://gitlab.com/inkscape/inkscape/-/merge_requests/4266
|
||||
(fetchpatch {
|
||||
url = "https://gitlab.com/inkscape/inkscape/-/commit/d989cdf1059c78bc3bb6414330242073768d640b.patch";
|
||||
sha256 = "2cJZdunbRgPIwhJgz1dQoQRw3ZYZ2Fp6c3hpVBV2PbE=";
|
||||
})
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -32,7 +32,9 @@ stdenv.mkDerivation rec {
|
||||
# only a Debian package release that is tagged in the upstream repo
|
||||
version = "0.0.0+git20220520";
|
||||
|
||||
outputs = [ "out" "dev" "devdoc" ];
|
||||
outputs = [ "out" "dev" ]
|
||||
# remove if cross-compiling gobject-introspection works
|
||||
++ lib.optionals (stdenv.buildPlatform == stdenv.hostPlatform) [ "devdoc" ];
|
||||
|
||||
src = fetchFromGitLab {
|
||||
domain = "source.puri.sm";
|
||||
@@ -61,7 +63,13 @@ stdenv.mkDerivation rec {
|
||||
libgudev
|
||||
];
|
||||
|
||||
mesonFlags = [ "-Dgtk_doc=true" "-Dman=true" ];
|
||||
mesonFlags = [
|
||||
"-Dgtk_doc=${lib.boolToString (stdenv.buildPlatform == stdenv.hostPlatform)}"
|
||||
"-Dman=true"
|
||||
# TODO(mindavi): introspection broken due to https://github.com/NixOS/nixpkgs/issues/72868
|
||||
# can be removed if cross-compiling gobject-introspection works.
|
||||
"-Dintrospection=${if (stdenv.buildPlatform == stdenv.hostPlatform) then "enabled" else "disabled"}"
|
||||
];
|
||||
|
||||
checkInputs = [
|
||||
dbus
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
let
|
||||
inherit (stdenv.hostPlatform) system;
|
||||
pname = "obsidian";
|
||||
version = "0.14.6";
|
||||
version = "0.14.15";
|
||||
appname = "Obsidian";
|
||||
meta = with lib; {
|
||||
description = "A powerful knowledge base that works on top of a local folder of plain text Markdown files";
|
||||
@@ -25,7 +25,7 @@ let
|
||||
filename = if stdenv.isDarwin then "Obsidian-${version}-universal.dmg" else "obsidian-${version}.tar.gz";
|
||||
src = fetchurl {
|
||||
url = "https://github.com/obsidianmd/obsidian-releases/releases/download/v${version}/${filename}";
|
||||
sha256 = if stdenv.isDarwin then "1zzccwlim3gi6f5czzyddqjzy1xsk6ayx1hljhw6bmnid72km3q2" else "sha256-KieAE13SIYHDoXTqzk1QY+TPjwF9LRzlfm1yFg9hsTc=";
|
||||
sha256 = if stdenv.isDarwin then "10c5255nbgqiigcwq6kmhzcgafq91k25wnxj3jxabzc0hs7pn4m5" else "sha256-bSLt4EnlCtxZeKIahr618qMuK9ogUhxn+NKO2GPkjOQ=";
|
||||
};
|
||||
|
||||
icon = fetchurl {
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, libX11
|
||||
, fontconfig
|
||||
, libXft
|
||||
, libXrender
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "stw";
|
||||
version = "unstable-2022-02-04";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "sineemore";
|
||||
repo = pname;
|
||||
rev = "c034e04ac912c157f9faa35cb769ba93d92486a0";
|
||||
sha256 = "sha256-YohHF1O0lm6QWJv/wkS4RVJvWaOjcYSZNls6tt4hbqo==";
|
||||
};
|
||||
|
||||
buildInputs = [ libX11 fontconfig libXft libXrender ];
|
||||
|
||||
makeFlags = [ "CC:=$(CC)" "PREFIX=$(out)" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "A simple text widget for X resembling the watch(1) command";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ somasis ];
|
||||
platforms = platforms.unix;
|
||||
broken = stdenv.isDarwin;
|
||||
};
|
||||
}
|
||||
@@ -36,7 +36,7 @@ stdenv.mkDerivation rec {
|
||||
changelog = "https://github.com/Biont/sway-launcher-desktop/releases/tag/v${version}";
|
||||
license = licenses.gpl3;
|
||||
platforms = platforms.linux;
|
||||
maintainers = [ maintainers.mrhedgehog ];
|
||||
maintainers = [ maintainers.thehedgeh0g ];
|
||||
mainProgram = "${pname}";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "ydict";
|
||||
version = "2.2.0";
|
||||
version = "2.2.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "TimothyYe";
|
||||
repo = "ydict";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-zhjsXZsRk0UNijjqjGjZh4TiPxAM5p+ic3JMx2wrPeY=";
|
||||
sha256 = "sha256-qrGOrqI+PXsDNCmgcCPDNn6qUYu2emhYSkYsz4sj27M=";
|
||||
};
|
||||
|
||||
vendorSha256 = "sha256-O6czDfKD18rGVMIZv6II09oQu1w0ijQRuZRGt2gj9Cs=";
|
||||
vendorSha256 = "sha256-c5nQVQd4n978kFAAKcx5mX2Jz16ZOhS8iL/oxS1o5xs=";
|
||||
|
||||
ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
|
||||
let
|
||||
# look for GO_LDFLAGS getting set in the Makefile
|
||||
version = "1.0.5";
|
||||
sha256 = "sha256-xgzIbhgV1AAUa0tooYtzUMqK4Co3PvWQ0YbZuf0JgFE=";
|
||||
vendorSha256 = "sha256-Gp30qCGV+EaJ1lvfleZHRWVL6rdSj0mvpumWsqr9IT0=";
|
||||
pkgsVersion = "v1.0.0-17-g7567bf4";
|
||||
extrasVersion = "v1.0.0-3-g6327c36";
|
||||
version = "1.0.6";
|
||||
sha256 = "sha256-4cUaQWqVndp06eFgqInOMMGITbTdZO5BOqXW2XEpuWU=";
|
||||
vendorSha256 = "sha256-7q35d+jbIDe7fAy6nL5FWdSovBb/f64HYLHGL+zE6bI=";
|
||||
pkgsVersion = "v1.0.0-25-gcf9709e";
|
||||
extrasVersion = "v1.0.0-4-g05b0920";
|
||||
in
|
||||
buildGoModule rec {
|
||||
pname = "talosctl";
|
||||
|
||||
@@ -196,7 +196,10 @@ rec {
|
||||
sha256 = "sha256-LkRCumyNHVBSsXRp1ovNMGCeidK/jVCjh9H1HSE1Lm8=";
|
||||
vendorSha256 = "sha256-CVgAmPM0nt0Wx+N0qs+IO5KwCWnbfif70EHjBi0bIsQ=";
|
||||
patches = [ ./provider-path-0_15.patch ];
|
||||
passthru = { inherit plugins; };
|
||||
passthru = {
|
||||
inherit plugins;
|
||||
tests = { inherit terraform_plugins_test; };
|
||||
};
|
||||
};
|
||||
|
||||
# Tests that the plugins are being used. Terraform looks at the specific
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{ buildGoPackage, lib, fetchFromGitHub }:
|
||||
buildGoPackage rec {
|
||||
{ buildGoModule, lib, fetchFromGitHub }:
|
||||
buildGoModule rec {
|
||||
pname = "tgswitch";
|
||||
version = "0.5.389";
|
||||
|
||||
@@ -10,7 +10,14 @@ buildGoPackage rec {
|
||||
sha256 = "sha256-6hErfI7LEJFgOoJR8IF9jTSBwqbQYeGiwdeJShqxVQ0=";
|
||||
};
|
||||
|
||||
goPackagePath = "github.com/warrensbox/tgswitch";
|
||||
vendorSha256 = null;
|
||||
|
||||
ldflags = [ "-s" "-w" ];
|
||||
|
||||
# There are many modifications need to be done to make tests run. For example:
|
||||
# 1. Network access
|
||||
# 2. Operation on `/var/empty` not permitted on macOS
|
||||
doCheck= false;
|
||||
|
||||
meta = with lib; {
|
||||
description = "A command line tool to switch between different versions of terragrunt";
|
||||
@@ -19,3 +26,4 @@ buildGoPackage rec {
|
||||
maintainers = with maintainers; [ psibi ];
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
let
|
||||
inherit (pkgs) callPackage fetchurl;
|
||||
versions = if stdenv.isLinux then {
|
||||
stable = "0.0.17";
|
||||
stable = "0.0.18";
|
||||
ptb = "0.0.29";
|
||||
canary = "0.0.135";
|
||||
} else {
|
||||
@@ -21,7 +21,7 @@ let
|
||||
stable = fetchurl {
|
||||
url =
|
||||
"https://dl.discordapp.net/apps/linux/${version}/discord-${version}.tar.gz";
|
||||
sha256 = "058k0cmbm4y572jqw83bayb2zzl2fw2aaz0zj1gvg6sxblp76qil";
|
||||
sha256 = "1hl01rf3l6kblx5v7rwnwms30iz8zw6dwlkjsx2f1iipljgkh5q4";
|
||||
};
|
||||
ptb = fetchurl {
|
||||
url =
|
||||
|
||||
@@ -22,11 +22,11 @@
|
||||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "gajim";
|
||||
version = "1.4.2";
|
||||
version = "1.4.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://gajim.org/downloads/${lib.versions.majorMinor version}/gajim-${version}.tar.gz";
|
||||
sha256 = "sha256:151lbz9092z8r2yva5039g867chcid3n804jk7hjawrd9vnw81az";
|
||||
sha256 = "sha256:0n6v96pwgds8655877fjgsphq4rd4gb9mz7cbqp4nkd4m7kvr3xv";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
|
||||
@@ -12,11 +12,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "appflowy";
|
||||
version = "0.0.3";
|
||||
version = "0.0.4";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/AppFlowy-IO/appflowy/releases/download/${version}/AppFlowy-linux-x86.tar.gz";
|
||||
sha256 = "sha256-m9vfgytSKnWLf6hwKjIGcU/7OCmIBiF4hJ/yIRBdSpQ=";
|
||||
sha256 = "sha256-ke3cuRi+ZlBSWawg66cGrV928dOBp0EniNakitmgUso=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{ lib, stdenv, fetchurl, pkg-config, intltool
|
||||
{ lib, stdenv, fetchurl, fetchpatch, pkg-config, intltool
|
||||
, gtk3, glib, curl, goocanvas2, gpsd
|
||||
, hamlib, wrapGAppsHook
|
||||
}:
|
||||
@@ -14,6 +14,16 @@ in stdenv.mkDerivation {
|
||||
sha256 = "0hwf97kng1zy8rxyglw04x89p0bg07zq30hgghm20yxiw2xc8ng7";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# Pull upstream fix for -fno-common toolchains:
|
||||
# https://github.com/csete/gpredict/issues/195
|
||||
(fetchpatch {
|
||||
name = "fno-common.patch";
|
||||
url = "https://github.com/csete/gpredict/commit/c565bb3d48777bfe17114b5d01cd81150521f056.patch";
|
||||
sha256 = "1jhy9hpqlachq32bkij60q3dxkgi1kkr80rm29jjxqpmambf406a";
|
||||
})
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ pkg-config intltool wrapGAppsHook ];
|
||||
buildInputs = [ curl glib gtk3 goocanvas2 gpsd hamlib ];
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@ let
|
||||
"8.15.0".sha256 = "sha256:1ma76wfrpfsl72yh10w1ys2a0vi0mdc2jc79kdc8nrmxkhpw1nxx";
|
||||
"8.15.1".sha256 = "sha256:1dsa04jzkx5pw69pmxn0l55q4w88lg6fvz7clbga0bazzsfnsgd6";
|
||||
"8.15.2".sha256 = "sha256:0gn8dz69scxnxaq6ycb3x34bjfk9wlp1y2xn8w69kg9fm4b6gkc7";
|
||||
"8.16+rc1".sha256 = "sha256-dU+E0Mz7MVntbQIeG9I59ANBaHaXXSrjCRdoqZ5TO60=";
|
||||
};
|
||||
releaseRev = v: "V${v}";
|
||||
fetched = import ../../../../build-support/coq/meta-fetch/default.nix
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "gh";
|
||||
version = "2.11.3";
|
||||
version = "2.12.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cli";
|
||||
repo = "cli";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-b00bP0usTpYr5EShyckmZ+a1Mw48payU/KllSck47fI=";
|
||||
sha256 = "sha256-gJwSnaOJc7W5zA/7D8tmXi3g+or5cNIlJ2J6gS51D6I=";
|
||||
};
|
||||
|
||||
vendorSha256 = "sha256-soNQXtpQ217scP606UA05+r9WIrUAMOCDBsfLKrVD+Q=";
|
||||
vendorSha256 = "sha256-du4IQNQPwM245yr0dSe1C7TU6gaFgvZhxaXi3xsKuWY=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{ lib
|
||||
, fetchFromSourcehut
|
||||
, buildPythonPackage
|
||||
, buildGoModule
|
||||
, buildPythonPackage
|
||||
, srht
|
||||
, redis
|
||||
, celery
|
||||
@@ -9,21 +9,29 @@
|
||||
, markdown
|
||||
, ansi2html
|
||||
, python
|
||||
, unzip
|
||||
}:
|
||||
let
|
||||
version = "0.75.2";
|
||||
version = "0.81.0";
|
||||
|
||||
src = fetchFromSourcehut {
|
||||
owner = "~sircmpwn";
|
||||
repo = "builds.sr.ht";
|
||||
rev = version;
|
||||
sha256 = "sha256-SwyxMzmp9baRQ0vceuEn/OpfIv7z7jwq/l67hdOHXjM=";
|
||||
sha256 = "sha256-oUSzanRFZ2dQTgm/VuNhqUaUAPq7ffxR7OtBKtE61DE=";
|
||||
};
|
||||
|
||||
buildWorker = src: buildGoModule {
|
||||
buildsrht-api = buildGoModule ({
|
||||
inherit src version;
|
||||
pname = "builds-sr-ht-worker";
|
||||
pname = "buildsrht-api";
|
||||
modRoot = "api";
|
||||
vendorSha256 = "sha256-roTwqtg4Y846PNtLdRN/LV3Jd0LVElqjFy3DJcrwoaI=";
|
||||
} // import ./fix-gqlgen-trimpath.nix { inherit unzip; });
|
||||
|
||||
buildsrht-worker = buildGoModule {
|
||||
inherit src version;
|
||||
sourceRoot = "source/worker";
|
||||
pname = "buildsrht-worker";
|
||||
vendorSha256 = "sha256-Pf1M9a43eK4jr6QMi6kRHA8DodXQU0pqq9ua5VC3ER0=";
|
||||
};
|
||||
in
|
||||
@@ -31,10 +39,10 @@ buildPythonPackage rec {
|
||||
inherit src version;
|
||||
pname = "buildsrht";
|
||||
|
||||
patches = [
|
||||
# Revert change breaking Unix socket support for Redis
|
||||
patches/redis-socket/build/0001-Revert-Add-build-submission-and-queue-monitoring.patch
|
||||
];
|
||||
postPatch = ''
|
||||
substituteInPlace Makefile \
|
||||
--replace "all: api worker" ""
|
||||
'';
|
||||
|
||||
nativeBuildInputs = srht.nativeBuildInputs;
|
||||
|
||||
@@ -58,7 +66,8 @@ buildPythonPackage rec {
|
||||
|
||||
cp -r images $out/lib
|
||||
cp contrib/submit_image_build $out/bin/builds.sr.ht
|
||||
cp ${buildWorker "${src}/worker"}/bin/worker $out/bin/builds.sr.ht-worker
|
||||
ln -s ${buildsrht-api}/bin/api $out/bin/buildsrht-api
|
||||
ln -s ${buildsrht-worker}/bin/worker $out/bin/buildsrht-worker
|
||||
'';
|
||||
|
||||
pythonImportsCheck = [ "buildsrht" ];
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{ lib
|
||||
, fetchgit
|
||||
, fetchFromSourcehut
|
||||
, fetchNodeModules
|
||||
, buildPythonPackage
|
||||
, pgpy
|
||||
@@ -29,12 +29,13 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "srht";
|
||||
version = "0.68.14";
|
||||
version = "0.69.0";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://git.sr.ht/~sircmpwn/core.sr.ht";
|
||||
src = fetchFromSourcehut {
|
||||
owner = "~sircmpwn";
|
||||
repo = "core.sr.ht";
|
||||
rev = version;
|
||||
sha256 = "sha256-BY3W2rwrg0mhH3CltgUqg6Xv8Ve5VZNY/lI1cfbAjYM=";
|
||||
sha256 = "sha256-s/I0wxtPggjTkkTZnhm77PxdQjiT0Vq2MIk7JMvdupc=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
@@ -47,6 +48,8 @@ buildPythonPackage rec {
|
||||
patches = [
|
||||
# Disable check for npm
|
||||
./disable-npm-install.patch
|
||||
# Fix Unix socket support in RedisQueueCollector
|
||||
patches/redis-socket/core/0001-Fix-Unix-socket-support-in-RedisQueueCollector.patch
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
, openssl
|
||||
, callPackage
|
||||
, recurseIntoAttrs
|
||||
, nixosTests
|
||||
}:
|
||||
|
||||
# To expose the *srht modules, they have to be a python module so we use `buildPythonModule`
|
||||
@@ -44,4 +45,7 @@ with python.pkgs; recurseIntoAttrs {
|
||||
pagessrht = pagessrht;
|
||||
pastesrht = toPythonApplication pastesrht;
|
||||
todosrht = toPythonApplication todosrht;
|
||||
passthru.tests = {
|
||||
nixos-sourcehut = nixosTests.sourcehut;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
{ unzip
|
||||
, gqlgenVersion ? "0.17.2"
|
||||
}:
|
||||
{
|
||||
overrideModAttrs = (_: {
|
||||
# No need to workaround -trimpath: it's not used in go-modules,
|
||||
# but do download `go generate`'s dependencies nonetheless.
|
||||
preBuild = ''
|
||||
go generate ./loaders
|
||||
go generate ./graph
|
||||
'';
|
||||
});
|
||||
|
||||
# Workaround this error:
|
||||
# go: git.sr.ht/~emersion/go-emailthreads@v0.0.0-20220412093310-4fd792e343ba: module lookup disabled by GOPROXY=off
|
||||
# tidy failed: go mod tidy failed: exit status 1
|
||||
# graph/generate.go:10: running "go": exit status 1
|
||||
proxyVendor = true;
|
||||
|
||||
nativeBuildInputs = [ unzip ];
|
||||
|
||||
# Workaround -trimpath in the package derivation:
|
||||
# https://github.com/99designs/gqlgen/issues/1537
|
||||
# This is to give `go generate ./graph` access to gqlgen's *.gotpl files
|
||||
# If it fails, the gqlgenVersion may have to be updated.
|
||||
preBuild = ''
|
||||
unzip ''${GOPROXY#"file://"}/github.com/99designs/gqlgen/@v/v${gqlgenVersion}.zip
|
||||
go generate ./loaders
|
||||
go generate ./graph
|
||||
rm -rf github.com
|
||||
'';
|
||||
}
|
||||
@@ -1,57 +1,67 @@
|
||||
{ lib
|
||||
, fetchFromSourcehut
|
||||
, buildPythonPackage
|
||||
, buildGoModule
|
||||
, buildPythonPackage
|
||||
, python
|
||||
, srht
|
||||
, pygit2
|
||||
, scmsrht
|
||||
, unzip
|
||||
}:
|
||||
let
|
||||
version = "0.77.3";
|
||||
version = "0.78.20";
|
||||
|
||||
src = fetchFromSourcehut {
|
||||
owner = "~sircmpwn";
|
||||
repo = "git.sr.ht";
|
||||
rev = version;
|
||||
sha256 = "sha256-eJvXCcmdiUzTK0EqNJkLEZsAfr6toD/378HObnMbOWM=";
|
||||
sha256 = "sha256-rZsTtHobsgRVmMOjPa1fiKrPsNyFu/gOsmO0cTl5MqQ=";
|
||||
};
|
||||
|
||||
buildShell = src: buildGoModule {
|
||||
gitApi = buildGoModule ({
|
||||
inherit src version;
|
||||
pname = "gitsrht-shell";
|
||||
vendorSha256 = "sha256-aqUFICp0C2reqb2p6JCPAUIRsxzSv0t9BHoNWrTYfqk=";
|
||||
};
|
||||
pname = "gitsrht-api";
|
||||
modRoot = "api";
|
||||
vendorSha256 = "sha256-cCs9FUBusaAou9w4TDOg8GKxhRcsPbSNcQpxvFH/+so=";
|
||||
} // import ./fix-gqlgen-trimpath.nix { inherit unzip; });
|
||||
|
||||
buildDispatcher = src: buildGoModule {
|
||||
gitDispatch = buildGoModule {
|
||||
inherit src version;
|
||||
pname = "gitsrht-dispatcher";
|
||||
pname = "gitsrht-dispatch";
|
||||
modRoot = "gitsrht-dispatch";
|
||||
vendorSha256 = "sha256-qWXPHo86s6iuRBhRMtmD5jxnAWKdrWHtA/iSUkdw89M=";
|
||||
};
|
||||
|
||||
buildKeys = src: buildGoModule {
|
||||
gitKeys = buildGoModule {
|
||||
inherit src version;
|
||||
pname = "gitsrht-keys";
|
||||
modRoot = "gitsrht-keys";
|
||||
vendorSha256 = "sha256-9pojS69HCKVHUceyOpGtv9ewcxFD4WsOVsEzkmWJkF4=";
|
||||
};
|
||||
|
||||
buildUpdateHook = src: buildGoModule {
|
||||
gitShell = buildGoModule {
|
||||
inherit src version;
|
||||
pname = "gitsrht-update-hook";
|
||||
vendorSha256 = "sha256-sBlG7EFqdDm7CkAHVX50Mf4N3sl1rPNmWExG/bfbfGA=";
|
||||
pname = "gitsrht-shell";
|
||||
modRoot = "gitsrht-shell";
|
||||
vendorSha256 = "sha256-WqfvSPuVsOHA//86u33atMfeA11+DJhjLmWy8Ivq0NI=";
|
||||
};
|
||||
|
||||
updateHook = buildUpdateHook "${src}/gitsrht-update-hook";
|
||||
gitUpdateHook = buildGoModule {
|
||||
inherit src version;
|
||||
pname = "gitsrht-update-hook";
|
||||
modRoot = "gitsrht-update-hook";
|
||||
vendorSha256 = "sha256-Bc3yPabS2S+qiroHFKrtkII/CfzBDYQ6xWxKHAME+Tc=";
|
||||
};
|
||||
|
||||
in
|
||||
buildPythonPackage rec {
|
||||
inherit src version;
|
||||
pname = "gitsrht";
|
||||
|
||||
patches = [
|
||||
# Revert change breaking Unix socket support for Redis
|
||||
patches/redis-socket/git/0001-Revert-Add-webhook-queue-monitoring.patch
|
||||
];
|
||||
postPatch = ''
|
||||
substituteInPlace Makefile \
|
||||
--replace "all: api gitsrht-dispatch gitsrht-keys gitsrht-shell gitsrht-update-hook" ""
|
||||
'';
|
||||
|
||||
nativeBuildInputs = srht.nativeBuildInputs;
|
||||
|
||||
@@ -68,14 +78,12 @@ buildPythonPackage rec {
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $out/bin
|
||||
cp ${buildShell "${src}/gitsrht-shell"}/bin/gitsrht-shell $out/bin/gitsrht-shell
|
||||
cp ${buildDispatcher "${src}/gitsrht-dispatch"}/bin/gitsrht-dispatch $out/bin/gitsrht-dispatch
|
||||
cp ${buildKeys "${src}/gitsrht-keys"}/bin/gitsrht-keys $out/bin/gitsrht-keys
|
||||
cp ${updateHook}/bin/gitsrht-update-hook $out/bin/gitsrht-update-hook
|
||||
ln -s ${gitApi}/bin/api $out/bin/gitsrht-api
|
||||
ln -s ${gitDispatch}/bin/gitsrht-dispatch $out/bin/gitsrht-dispatch
|
||||
ln -s ${gitKeys}/bin/gitsrht-keys $out/bin/gitsrht-keys
|
||||
ln -s ${gitShell}/bin/gitsrht-shell $out/bin/gitsrht-shell
|
||||
ln -s ${gitUpdateHook}/bin/gitsrht-update-hook $out/bin/gitsrht-update-hook
|
||||
'';
|
||||
passthru = {
|
||||
inherit updateHook;
|
||||
};
|
||||
|
||||
pythonImportsCheck = [ "gitsrht" ];
|
||||
|
||||
|
||||
@@ -1,21 +1,44 @@
|
||||
{ lib
|
||||
, fetchhg
|
||||
, fetchFromSourcehut
|
||||
, buildGoModule
|
||||
, buildPythonPackage
|
||||
, srht
|
||||
, hglib
|
||||
, scmsrht
|
||||
, unidiff
|
||||
, python
|
||||
, unzip
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "hgsrht";
|
||||
version = "0.29.4";
|
||||
version = "0.31.3";
|
||||
|
||||
src = fetchhg {
|
||||
url = "https://hg.sr.ht/~sircmpwn/hg.sr.ht";
|
||||
src = fetchFromSourcehut {
|
||||
owner = "~sircmpwn";
|
||||
repo = "hg.sr.ht";
|
||||
rev = version;
|
||||
sha256 = "Jn9M/R5tJK/GeJDWGo3LWCK2nwsfI9zh+/yo2M+X6Sk=";
|
||||
sha256 = "4Qe08gqsSTMQVQBchFPEUXuxM8ZAAQGJT1EOcDjkZa0=";
|
||||
vc = "hg";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace Makefile \
|
||||
--replace "all: api hgsrht-keys" ""
|
||||
'';
|
||||
|
||||
hgsrht-api = buildGoModule ({
|
||||
inherit src version;
|
||||
pname = "hgsrht-api";
|
||||
modRoot = "api";
|
||||
vendorSha256 = "sha256-uIP3W7UJkP68HJUF33kz5xfg/KBiaSwMozFYmQJQkys=";
|
||||
} // import ./fix-gqlgen-trimpath.nix { inherit unzip; });
|
||||
|
||||
hgsrht-keys = buildGoModule {
|
||||
inherit src version;
|
||||
pname = "hgsrht-keys";
|
||||
modRoot = "hgsrht-keys";
|
||||
vendorSha256 = "sha256-7ti8xCjSrxsslF7/1X/GY4FDl+69hPL4UwCDfjxmJLU=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = srht.nativeBuildInputs;
|
||||
@@ -32,6 +55,11 @@ buildPythonPackage rec {
|
||||
export SRHT_PATH=${srht}/${python.sitePackages}/srht
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
ln -s ${hgsrht-api}/bin/api $out/bin/hgsrht-api
|
||||
ln -s ${hgsrht-keys}/bin/hgsrht-keys $out/bin/hgsrht-keys
|
||||
'';
|
||||
|
||||
pythonImportsCheck = [ "hgsrht" ];
|
||||
|
||||
meta = with lib; {
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "hubsrht";
|
||||
version = "0.14.4";
|
||||
version = "0.14.14";
|
||||
|
||||
src = fetchFromSourcehut {
|
||||
owner = "~sircmpwn";
|
||||
repo = "hub.sr.ht";
|
||||
rev = version;
|
||||
sha256 = "sha256-7HF+jykWGqzPWA0YtJZQZU7pnID1yexcqLkEf2HpnSs=";
|
||||
sha256 = "sha256-4n6oQ+AAvdJY/5KflxAp62chjyrlSUkmt319DKZk33w=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = srht.nativeBuildInputs;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{ lib
|
||||
, fetchFromSourcehut
|
||||
, buildGoModule
|
||||
, buildPythonPackage
|
||||
, srht
|
||||
, asyncpg
|
||||
@@ -8,23 +9,31 @@
|
||||
, emailthreads
|
||||
, redis
|
||||
, python
|
||||
, unzip
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "listssrht";
|
||||
version = "0.51.7";
|
||||
version = "0.51.11";
|
||||
|
||||
src = fetchFromSourcehut {
|
||||
owner = "~sircmpwn";
|
||||
repo = "lists.sr.ht";
|
||||
rev = version;
|
||||
sha256 = "sha256-oNY5A98oVoL2JKO0fU/8YVl8u7ywmHb/RHD8A6z9yIM=";
|
||||
sha256 = "sha256-Qb70oOazZfmHpC5r0oMYCFdvfAeKbq3mQA8+M56YYnY=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# Revert change breaking Unix socket support for Redis
|
||||
patches/redis-socket/lists/0001-Revert-Add-webhook-queue-monitoring.patch
|
||||
];
|
||||
listssrht-api = buildGoModule ({
|
||||
inherit src version;
|
||||
pname = "listssrht-api";
|
||||
modRoot = "api";
|
||||
vendorSha256 = "sha256-xnmMkRSokbhWD+kz0XQ9AinYdm6/50FRBISURPvlzD0=";
|
||||
} // import ./fix-gqlgen-trimpath.nix { inherit unzip;});
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace Makefile \
|
||||
--replace "all: api" ""
|
||||
'';
|
||||
|
||||
nativeBuildInputs = srht.nativeBuildInputs;
|
||||
|
||||
@@ -42,6 +51,10 @@ buildPythonPackage rec {
|
||||
export SRHT_PATH=${srht}/${python.sitePackages}/srht
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
ln -s ${listssrht-api}/bin/api $out/bin/listssrht-api
|
||||
'';
|
||||
|
||||
pythonImportsCheck = [ "listssrht" ];
|
||||
|
||||
meta = with lib; {
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "mansrht";
|
||||
version = "0.15.23";
|
||||
version = "0.15.26";
|
||||
|
||||
src = fetchFromSourcehut {
|
||||
owner = "~sircmpwn";
|
||||
repo = "man.sr.ht";
|
||||
rev = version;
|
||||
sha256 = "sha256-xrBptXdwMee+YkPup/BYL/iXBhCzSUQ5htSHIw/1Ncc=";
|
||||
sha256 = "sha256-5xZH6DrTXMdWd26OGICp7lZ/QDjACIa7zNUJHB7jzGo=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = srht.nativeBuildInputs;
|
||||
|
||||
@@ -16,32 +16,34 @@
|
||||
, weasyprint
|
||||
, prometheus-client
|
||||
, python
|
||||
, unzip
|
||||
}:
|
||||
let
|
||||
version = "0.57.5";
|
||||
version = "0.58.18";
|
||||
|
||||
src = fetchFromSourcehut {
|
||||
owner = "~sircmpwn";
|
||||
repo = "meta.sr.ht";
|
||||
rev = version;
|
||||
sha256 = "sha256-qsCwZaCiqvY445U053OCWD98jlIUi9NB2jWVP2oW3Vk=";
|
||||
sha256 = "sha256-OjbQHAzG2nZwpJUIvhKaCJWZbhZDC2R6C+SkbKUpk8o=";
|
||||
};
|
||||
|
||||
buildApi = src: buildGoModule {
|
||||
metasrht-api = buildGoModule ({
|
||||
inherit src version;
|
||||
pname = "metasrht-api";
|
||||
vendorSha256 = "sha256-8Ubrr9qRlgW2wsLHrPHwulSWLz+gp4VPcTvOZpg8TYM=";
|
||||
};
|
||||
modRoot = "api";
|
||||
vendorSha256 = "sha256-kiEuEYZFbwJ6SbKFtxH4SiRaZmqYriRHPoHdTX28+d0=";
|
||||
} // import ./fix-gqlgen-trimpath.nix { inherit unzip; });
|
||||
|
||||
in
|
||||
buildPythonPackage rec {
|
||||
pname = "metasrht";
|
||||
inherit version src;
|
||||
|
||||
patches = [
|
||||
# Revert change breaking Unix socket support for Redis
|
||||
patches/redis-socket/meta/0001-Revert-Add-webhook-queue-monitoring.patch
|
||||
];
|
||||
postPatch = ''
|
||||
substituteInPlace Makefile \
|
||||
--replace "all: api" ""
|
||||
'';
|
||||
|
||||
nativeBuildInputs = srht.nativeBuildInputs;
|
||||
|
||||
@@ -68,7 +70,7 @@ buildPythonPackage rec {
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $out/bin
|
||||
cp ${buildApi "${src}/api/"}/bin/api $out/bin/metasrht-api
|
||||
ln -s ${metasrht-api}/bin/api $out/bin/metasrht-api
|
||||
'';
|
||||
|
||||
pythonImportsCheck = [ "metasrht" ];
|
||||
|
||||
@@ -1,20 +1,26 @@
|
||||
{ lib
|
||||
, fetchFromSourcehut
|
||||
, buildGoModule
|
||||
, unzip
|
||||
}:
|
||||
|
||||
buildGoModule rec {
|
||||
buildGoModule (rec {
|
||||
pname = "pagessrht";
|
||||
version = "0.6.2";
|
||||
version = "0.7.4";
|
||||
|
||||
src = fetchFromSourcehut {
|
||||
owner = "~sircmpwn";
|
||||
repo = "pages.sr.ht";
|
||||
rev = version;
|
||||
sha256 = "sha256-ob0+t9V2o8lhVC6fXbi1rNm0Mnbs+GoyAmhBqVZ13PA=";
|
||||
sha256 = "sha256-WM9T2LS8yIqaR0PQQRgMk/tiMYcw8DZVPMqMWkj/5RY=";
|
||||
};
|
||||
|
||||
vendorSha256 = "sha256-b0sHSH0jkKoIVq045N96wszuLJDegkkj0v50nuDFleU=";
|
||||
postPatch = ''
|
||||
substituteInPlace Makefile \
|
||||
--replace "all: server" ""
|
||||
'';
|
||||
|
||||
vendorSha256 = "sha256-VOqY/nStqGyfWOXnJSZX8UYyp2kzcibQM2NRNysHYEc=";
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $out/share/sql/
|
||||
@@ -27,4 +33,6 @@ buildGoModule rec {
|
||||
license = licenses.agpl3Only;
|
||||
maintainers = with maintainers; [ eadwu ];
|
||||
};
|
||||
}
|
||||
# There is no ./loaders but this does not cause troubles
|
||||
# to go generate
|
||||
} // import ./fix-gqlgen-trimpath.nix { inherit unzip; gqlgenVersion= "0.17.9"; })
|
||||
|
||||
@@ -8,15 +8,20 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pastesrht";
|
||||
version = "0.13.6";
|
||||
version = "0.13.8";
|
||||
|
||||
src = fetchFromSourcehut {
|
||||
owner = "~sircmpwn";
|
||||
repo = "paste.sr.ht";
|
||||
rev = version;
|
||||
sha256 = "sha256-Khcqk86iD9nxiKXN3+8mSLNoDau2qXNFOrLdkVu+rH8=";
|
||||
sha256 = "sha256-Zji9FyYUtsklYz4qyLbtduusteC7WujLCMmvZKcqYis=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace Makefile \
|
||||
--replace "all: api" ""
|
||||
'';
|
||||
|
||||
nativeBuildInputs = srht.nativeBuildInputs;
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
||||
-69
@@ -1,69 +0,0 @@
|
||||
From 069b03f85847ed4a9223183b62ee53f420838911 Mon Sep 17 00:00:00 2001
|
||||
From: Julien Moutinho <julm+srht@sourcephile.fr>
|
||||
Date: Thu, 16 Dec 2021 04:54:24 +0100
|
||||
Subject: [PATCH builds.sr.ht] Revert "Add build submission and queue
|
||||
monitoring"
|
||||
|
||||
This reverts commit 690f1aa16c77e418dc40109cd5e8fdf4a7ed947a.
|
||||
|
||||
This has broken Unix socket support for Redis
|
||||
See https://lists.sr.ht/~sircmpwn/sr.ht-dev/%3C20211208082636.65665-1-me%40ignaskiela.eu%3E#%3C20211216033723.wefibfulfjhqnhem@sourcephile.fr%3E
|
||||
---
|
||||
buildsrht/app.py | 3 ---
|
||||
buildsrht/runner.py | 9 +--------
|
||||
2 files changed, 1 insertion(+), 11 deletions(-)
|
||||
|
||||
diff --git a/buildsrht/app.py b/buildsrht/app.py
|
||||
index e5321a2..7c9977c 100644
|
||||
--- a/buildsrht/app.py
|
||||
+++ b/buildsrht/app.py
|
||||
@@ -36,9 +36,6 @@ class BuildApp(SrhtFlask):
|
||||
self.register_blueprint(secrets)
|
||||
self.register_blueprint(gql_blueprint)
|
||||
|
||||
- from buildsrht.runner import builds_queue_metrics_collector
|
||||
- self.metrics_registry.register(builds_queue_metrics_collector)
|
||||
-
|
||||
@self.context_processor
|
||||
def inject():
|
||||
return {
|
||||
diff --git a/buildsrht/runner.py b/buildsrht/runner.py
|
||||
index 7773452..0389c8e 100644
|
||||
--- a/buildsrht/runner.py
|
||||
+++ b/buildsrht/runner.py
|
||||
@@ -5,13 +5,10 @@ from srht.config import cfg
|
||||
from srht.database import db
|
||||
from srht.email import send_email
|
||||
from srht.oauth import UserType
|
||||
-from srht.metrics import RedisQueueCollector
|
||||
-from prometheus_client import Counter
|
||||
|
||||
allow_free = cfg("builds.sr.ht", "allow-free", default="no") == "yes"
|
||||
|
||||
-builds_broker = cfg("builds.sr.ht", "redis")
|
||||
-runner = Celery('builds', broker=builds_broker, config_source={
|
||||
+runner = Celery('builds', broker=cfg("builds.sr.ht", "redis"), config_source={
|
||||
"CELERY_TASK_SERIALIZER": "json",
|
||||
"CELERY_ACCEPT_CONTENT": ["json"],
|
||||
"CELERY_RESULT_SERIALIZER": "json",
|
||||
@@ -19,9 +16,6 @@ runner = Celery('builds', broker=builds_broker, config_source={
|
||||
"CELERY_TASK_PROTOCOL": 1
|
||||
})
|
||||
|
||||
-builds_queue_metrics_collector = RedisQueueCollector(builds_broker, "buildsrht_builds", "Number of builds currently in queue")
|
||||
-builds_submitted = Counter("buildsrht_builds_submited", "Number of builds submitted")
|
||||
-
|
||||
def queue_build(job, manifest):
|
||||
from buildsrht.types import JobStatus
|
||||
job.status = JobStatus.queued
|
||||
@@ -34,7 +28,6 @@ def queue_build(job, manifest):
|
||||
cfg("sr.ht", "owner-email"),
|
||||
"Cryptocurrency mining attempt on builds.sr.ht")
|
||||
else:
|
||||
- builds_submitted.inc()
|
||||
run_build.delay(job.id, manifest.to_dict())
|
||||
|
||||
def requires_payment(user):
|
||||
--
|
||||
2.34.0
|
||||
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
From 76dd636151735671be74ba9d55f773e190e22827 Mon Sep 17 00:00:00 2001
|
||||
From: Julien Moutinho <julm+srht@sourcephile.fr>
|
||||
Date: Fri, 13 May 2022 22:40:46 +0200
|
||||
Subject: [PATCH core.sr.ht] Fix Unix socket support in RedisQueueCollector
|
||||
|
||||
The broker URL is not necessarily in the format expected by Redis.from_url
|
||||
|
||||
Especially, Redis.from_url supports this format for Unix sockets:
|
||||
unix:///run/redis-sourcehut-metasrht/redis.sock?db=0
|
||||
See https://redis-py.readthedocs.io/en/stable/#redis.ConnectionPool.from_url
|
||||
|
||||
Whereas Celery+Kombu support Redis but also other transports
|
||||
and thus expect another scheme:
|
||||
redis+socket:///run/redis-sourcehut-metasrht/redis.sock?virtual_host=1
|
||||
See https://docs.celeryproject.org/en/stable/userguide/configuration.html#redis-backend-settings
|
||||
and https://github.com/celery/celery/blob/e5d99801e4b56a02af4a2e183879c767228d2817/celery/backends/redis.py#L299-L352
|
||||
and https://github.com/celery/kombu/blob/master/kombu/utils/url.py
|
||||
---
|
||||
srht/metrics.py | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/srht/metrics.py b/srht/metrics.py
|
||||
index 68caf8e..2df5777 100644
|
||||
--- a/srht/metrics.py
|
||||
+++ b/srht/metrics.py
|
||||
@@ -1,11 +1,12 @@
|
||||
import time
|
||||
+from celery import Celery
|
||||
from prometheus_client.metrics_core import GaugeMetricFamily
|
||||
from redis import Redis, ResponseError
|
||||
|
||||
|
||||
class RedisQueueCollector:
|
||||
def __init__(self, broker, name, documentation, queue_name="celery"):
|
||||
- self.redis = Redis.from_url(broker)
|
||||
+ self.redis = Celery("collector", broker=broker).connection_for_read().channel().client
|
||||
self.queue_name = queue_name
|
||||
self.name = name
|
||||
self.documentation = documentation
|
||||
--
|
||||
2.35.1
|
||||
|
||||
-50
@@ -1,50 +0,0 @@
|
||||
From 5ccb5386304c26f25b0a9eb10ce9edb6da32f91a Mon Sep 17 00:00:00 2001
|
||||
From: Julien Moutinho <julm+srht@sourcephile.fr>
|
||||
Date: Sat, 12 Feb 2022 00:11:59 +0100
|
||||
Subject: [PATCH git.sr.ht] Revert "Add webhook queue monitoring"
|
||||
|
||||
This reverts commit 7ea630b776947ab82438d0ffa263b0f9d33ebff3.
|
||||
|
||||
Which has broken Unix socket support for Redis.
|
||||
See https://lists.sr.ht/~sircmpwn/sr.ht-dev/%3C20211208082636.65665-1-me%40ignaskiela.eu%3E#%3C20211216033723.wefibfulfjhqnhem@sourcephile.fr%3E
|
||||
---
|
||||
gitsrht/app.py | 3 ---
|
||||
gitsrht/webhooks.py | 5 +----
|
||||
2 files changed, 1 insertion(+), 7 deletions(-)
|
||||
|
||||
diff --git a/gitsrht/app.py b/gitsrht/app.py
|
||||
index e9ccb56..4928851 100644
|
||||
--- a/gitsrht/app.py
|
||||
+++ b/gitsrht/app.py
|
||||
@@ -48,9 +48,6 @@ class GitApp(ScmSrhtFlask):
|
||||
self.add_template_filter(url_quote)
|
||||
self.add_template_filter(commit_links)
|
||||
|
||||
- from gitsrht.webhooks import webhook_metrics_collector
|
||||
- self.metrics_registry.register(webhook_metrics_collector)
|
||||
-
|
||||
@self.context_processor
|
||||
def inject():
|
||||
notice = session.get("notice")
|
||||
diff --git a/gitsrht/webhooks.py b/gitsrht/webhooks.py
|
||||
index 8a203fe..6240d50 100644
|
||||
--- a/gitsrht/webhooks.py
|
||||
+++ b/gitsrht/webhooks.py
|
||||
@@ -7,13 +7,10 @@ if not hasattr(db, "session"):
|
||||
db.init()
|
||||
from srht.webhook import Event
|
||||
from srht.webhook.celery import CeleryWebhook, make_worker
|
||||
-from srht.metrics import RedisQueueCollector
|
||||
from scmsrht.webhooks import UserWebhook
|
||||
import sqlalchemy as sa
|
||||
|
||||
-webhook_broker = cfg("git.sr.ht", "webhooks")
|
||||
-worker = make_worker(broker=webhook_broker)
|
||||
-webhook_metrics_collector = RedisQueueCollector(webhook_broker, "srht_webhooks", "Webhook queue length")
|
||||
+worker = make_worker(broker=cfg("git.sr.ht", "webhooks"))
|
||||
|
||||
class RepoWebhook(CeleryWebhook):
|
||||
events = [
|
||||
--
|
||||
2.34.1
|
||||
|
||||
-48
@@ -1,48 +0,0 @@
|
||||
From 730e090f31b150d42be4b4722751f8e4610835b0 Mon Sep 17 00:00:00 2001
|
||||
From: Julien Moutinho <julm+srht@sourcephile.fr>
|
||||
Date: Sat, 12 Feb 2022 00:38:12 +0100
|
||||
Subject: [PATCH lists.sr.ht] Revert "Add webhook queue monitoring"
|
||||
|
||||
This reverts commit e74e344808e8d523a9786cefcbf64c9a247d7a0e.
|
||||
|
||||
Which has broken Unix socket support for Redis.
|
||||
See https://lists.sr.ht/~sircmpwn/sr.ht-dev/%3C20211208082636.65665-1-me%40ignaskiela.eu%3E#%3C20211216033723.wefibfulfjhqnhem@sourcephile.fr%3E
|
||||
---
|
||||
listssrht/app.py | 3 ---
|
||||
listssrht/webhooks.py | 5 +----
|
||||
2 files changed, 1 insertion(+), 7 deletions(-)
|
||||
|
||||
diff --git a/listssrht/app.py b/listssrht/app.py
|
||||
index aec59f3..83a355d 100644
|
||||
--- a/listssrht/app.py
|
||||
+++ b/listssrht/app.py
|
||||
@@ -29,9 +29,6 @@ class ListsApp(SrhtFlask):
|
||||
self.register_blueprint(user)
|
||||
self.register_blueprint(gql_blueprint)
|
||||
|
||||
- from listssrht.webhooks import webhook_metrics_collector
|
||||
- self.metrics_registry.register(webhook_metrics_collector)
|
||||
-
|
||||
@self.context_processor
|
||||
def inject():
|
||||
from listssrht.types import ListAccess
|
||||
diff --git a/listssrht/webhooks.py b/listssrht/webhooks.py
|
||||
index ae5b1cb..86421ba 100644
|
||||
--- a/listssrht/webhooks.py
|
||||
+++ b/listssrht/webhooks.py
|
||||
@@ -8,11 +8,8 @@ if not hasattr(db, "session"):
|
||||
db.init()
|
||||
from srht.webhook import Event
|
||||
from srht.webhook.celery import CeleryWebhook, make_worker
|
||||
-from srht.metrics import RedisQueueCollector
|
||||
|
||||
-webhook_broker = cfg("lists.sr.ht", "webhooks")
|
||||
-worker = make_worker(broker=webhook_broker)
|
||||
-webhook_metrics_collector = RedisQueueCollector(webhook_broker, "srht_webhooks", "Webhook queue length")
|
||||
+worker = make_worker(broker=cfg("lists.sr.ht", "webhooks"))
|
||||
|
||||
class ListWebhook(CeleryWebhook):
|
||||
events = [
|
||||
--
|
||||
2.34.1
|
||||
|
||||
-48
@@ -1,48 +0,0 @@
|
||||
From d88bee195797c6c294320617ff14798da94cd0f3 Mon Sep 17 00:00:00 2001
|
||||
From: Julien Moutinho <julm+srht@sourcephile.fr>
|
||||
Date: Thu, 16 Dec 2021 04:52:08 +0100
|
||||
Subject: [PATCH meta.sr.ht] Revert "Add webhook queue monitoring"
|
||||
|
||||
This reverts commit 9931df3c23094af5179df9ef019ca732b8125dac.
|
||||
|
||||
This has broken Unix socket support for Redis.
|
||||
See https://lists.sr.ht/~sircmpwn/sr.ht-dev/%3C20211208082636.65665-1-me%40ignaskiela.eu%3E#%3C20211216033723.wefibfulfjhqnhem@sourcephile.fr%3E
|
||||
---
|
||||
metasrht/app.py | 3 ---
|
||||
metasrht/webhooks.py | 5 +----
|
||||
2 files changed, 1 insertion(+), 7 deletions(-)
|
||||
|
||||
diff --git a/metasrht/app.py b/metasrht/app.py
|
||||
index b190875..89c59bc 100644
|
||||
--- a/metasrht/app.py
|
||||
+++ b/metasrht/app.py
|
||||
@@ -49,9 +49,6 @@ class MetaApp(SrhtFlask):
|
||||
from metasrht.blueprints.billing import billing
|
||||
self.register_blueprint(billing)
|
||||
|
||||
- from metasrht.webhooks import webhook_metrics_collector
|
||||
- self.metrics_registry.register(webhook_metrics_collector)
|
||||
-
|
||||
@self.context_processor
|
||||
def inject():
|
||||
return {
|
||||
diff --git a/metasrht/webhooks.py b/metasrht/webhooks.py
|
||||
index 3e1149e..3f0ba01 100644
|
||||
--- a/metasrht/webhooks.py
|
||||
+++ b/metasrht/webhooks.py
|
||||
@@ -7,11 +7,8 @@ if not hasattr(db, "session"):
|
||||
db.init()
|
||||
from srht.webhook import Event
|
||||
from srht.webhook.celery import CeleryWebhook, make_worker
|
||||
-from srht.metrics import RedisQueueCollector
|
||||
|
||||
-webhook_broker = cfg("meta.sr.ht", "webhooks", "redis://")
|
||||
-worker = make_worker(broker=webhook_broker)
|
||||
-webhook_metrics_collector = RedisQueueCollector(webhook_broker, "srht_webhooks", "Webhook queue length")
|
||||
+worker = make_worker(broker=cfg("meta.sr.ht", "webhooks", "redis://"))
|
||||
|
||||
class UserWebhook(CeleryWebhook):
|
||||
events = [
|
||||
--
|
||||
2.34.0
|
||||
|
||||
-50
@@ -1,50 +0,0 @@
|
||||
From 42a27ea60d8454552d54e1f51f1b976d1067fc32 Mon Sep 17 00:00:00 2001
|
||||
From: Julien Moutinho <julm+srht@sourcephile.fr>
|
||||
Date: Sat, 12 Feb 2022 00:30:29 +0100
|
||||
Subject: [PATCH todo.sr.ht] Revert "Add webhook queue monitoring"
|
||||
|
||||
This reverts commit 320a5e8f7cd16ca43928c36f0320593f84d986fa.
|
||||
|
||||
Which has broken Unix socket support for Redis.
|
||||
See https://lists.sr.ht/~sircmpwn/sr.ht-dev/%3C20211208082636.65665-1-me%40ignaskiela.eu%3E#%3C20211216033723.wefibfulfjhqnhem@sourcephile.fr%3E
|
||||
---
|
||||
todosrht/flask.py | 3 ---
|
||||
todosrht/webhooks.py | 6 +-----
|
||||
2 files changed, 1 insertion(+), 8 deletions(-)
|
||||
|
||||
diff --git a/todosrht/flask.py b/todosrht/flask.py
|
||||
index 5e8ac66..9d0fd27 100644
|
||||
--- a/todosrht/flask.py
|
||||
+++ b/todosrht/flask.py
|
||||
@@ -43,9 +43,6 @@ class TodoApp(SrhtFlask):
|
||||
self.add_template_filter(urls.tracker_url)
|
||||
self.add_template_filter(urls.user_url)
|
||||
|
||||
- from todosrht.webhooks import webhook_metrics_collector
|
||||
- self.metrics_registry.register(webhook_metrics_collector)
|
||||
-
|
||||
@self.context_processor
|
||||
def inject():
|
||||
return {
|
||||
diff --git a/todosrht/webhooks.py b/todosrht/webhooks.py
|
||||
index eb8e08a..950047f 100644
|
||||
--- a/todosrht/webhooks.py
|
||||
+++ b/todosrht/webhooks.py
|
||||
@@ -7,13 +7,9 @@ if not hasattr(db, "session"):
|
||||
db.init()
|
||||
from srht.webhook import Event
|
||||
from srht.webhook.celery import CeleryWebhook, make_worker
|
||||
-from srht.metrics import RedisQueueCollector
|
||||
import sqlalchemy as sa
|
||||
|
||||
-
|
||||
-webhooks_broker = cfg("todo.sr.ht", "webhooks")
|
||||
-worker = make_worker(broker=webhooks_broker)
|
||||
-webhook_metrics_collector = RedisQueueCollector(webhooks_broker, "srht_webhooks", "Webhook queue length")
|
||||
+worker = make_worker(broker=cfg("todo.sr.ht", "webhooks"))
|
||||
|
||||
import todosrht.tracker_import
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "scmsrht";
|
||||
version = "0.22.19"; # Untagged version
|
||||
version = "0.22.22";
|
||||
|
||||
src = fetchFromSourcehut {
|
||||
owner = "~sircmpwn";
|
||||
repo = "scm.sr.ht";
|
||||
rev = version;
|
||||
sha256 = "sha256-/QryPjWJ2S0Ov9DTdrwbM81HYucHiYcLh0oKacflywI=";
|
||||
sha256 = "sha256-iSzzyI8HZOpOb4dyt520MV/wds14fNag2+UOF09KS7w=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = srht.nativeBuildInputs;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{ lib
|
||||
, fetchFromSourcehut
|
||||
, buildGoModule
|
||||
, buildPythonPackage
|
||||
, srht
|
||||
, redis
|
||||
@@ -8,23 +9,31 @@
|
||||
, pytest
|
||||
, factory_boy
|
||||
, python
|
||||
, unzip
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "todosrht";
|
||||
version = "0.67.2";
|
||||
version = "0.72.2";
|
||||
|
||||
src = fetchFromSourcehut {
|
||||
owner = "~sircmpwn";
|
||||
repo = "todo.sr.ht";
|
||||
rev = version;
|
||||
sha256 = "sha256-/QHsMlhzyah85ubZyx8j4GDUoITuWcLDJKosbZGeOZU=";
|
||||
sha256 = "sha256-FLjVO8Y/9s2gFfMXwcY7Rj3WNzPEBYs1AEjiVZFWsT8=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# Revert change breaking Unix socket support for Redis
|
||||
patches/redis-socket/todo/0001-Revert-Add-webhook-queue-monitoring.patch
|
||||
];
|
||||
postPatch = ''
|
||||
substituteInPlace Makefile \
|
||||
--replace "all: api" ""
|
||||
'';
|
||||
|
||||
todosrht-api = buildGoModule ({
|
||||
inherit src version;
|
||||
pname = "todosrht-api";
|
||||
modRoot = "api";
|
||||
vendorSha256 = "sha256-LB1H4jwnvoEyaaYJ09NI/M6IkgZwRet/fkso6b9EPV0=";
|
||||
} // import ./fix-gqlgen-trimpath.nix {inherit unzip;});
|
||||
|
||||
nativeBuildInputs = srht.nativeBuildInputs;
|
||||
|
||||
@@ -40,6 +49,10 @@ buildPythonPackage rec {
|
||||
export SRHT_PATH=${srht}/${python.sitePackages}/srht
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
ln -s ${todosrht-api}/bin/api $out/bin/todosrht-api
|
||||
'';
|
||||
|
||||
# pytest tests fail
|
||||
checkInputs = [
|
||||
pytest
|
||||
|
||||
@@ -16,7 +16,7 @@ version() {
|
||||
}
|
||||
|
||||
src_url() {
|
||||
nix-instantiate --eval --strict --expr " with import $root {}; let src = sourcehut.python.pkgs.$1.drvAttrs.src; in src.url or src.meta.homepage" | tr -d '"'
|
||||
nix-instantiate --eval --strict --expr " with import $root {}; let src = sourcehut.python.pkgs.$1.drvAttrs.src; in src.meta.homepage" | tr -d '"'
|
||||
}
|
||||
|
||||
get_latest_version() {
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
{ mkDerivation, lib, fetchbzr, python3, rtmpdump }:
|
||||
|
||||
let
|
||||
pythonEnv = python3.withPackages (ps: with ps; [ pyqt5_with_qtmultimedia ]);
|
||||
pythonEnv = python3.withPackages (ps: with ps; [ m3u8 pyqt5_with_qtmultimedia ]);
|
||||
in mkDerivation {
|
||||
pname = "qarte";
|
||||
version = "4.15.1";
|
||||
version = "4.17.1";
|
||||
|
||||
src = fetchbzr {
|
||||
url = "http://bazaar.launchpad.net/~vincent-vandevyvre/qarte/qarte-4";
|
||||
rev = "67";
|
||||
sha256 = "sha256:0ajvrvpyqyyxnq9nv69p3sr6c1kplphvrpph75k76yl0av94j2s3";
|
||||
rev = "74";
|
||||
sha256 = "sha256:18ky9qwfvbifd0xrbmnfm3cm2vyy5jgf9rrca2hby46sjf2745h4";
|
||||
};
|
||||
|
||||
buildInputs = [ pythonEnv ];
|
||||
|
||||
@@ -19,6 +19,10 @@ stdenv.mkDerivation rec {
|
||||
--replace "CFLAGSX =" "CFLAGSX = -I${gdk-pixbuf-xlib.dev}/include/gdk-pixbuf-2.0"
|
||||
'';
|
||||
|
||||
# Workaround build failure on -fno-common toolchains like upstream
|
||||
# gcc-10. Otherwise build fails as:
|
||||
# ld: plugin.o:(.bss+0x0): multiple definition of `stam'; panel.o:(.bss+0x20): first defined here
|
||||
NIX_CFLAGS_COMPILE = "-fcommon";
|
||||
NIX_LDFLAGS="-lX11";
|
||||
|
||||
meta = with lib; {
|
||||
|
||||
@@ -40,7 +40,10 @@ stdenv.mkDerivation rec {
|
||||
|
||||
hardeningDisable = [ "pic" "bindnow" ];
|
||||
|
||||
NIX_CFLAGS_COMPILE = "-fgnu89-inline";
|
||||
# -fcommon: workaround build failure on -fno-common toolchains:
|
||||
# ld: ./libgclp.a(user_match.o):(.bss+0x18): multiple definition of
|
||||
# `tf'; ./libpre_gcl.a(main.o):(.bss+0x326d90): first defined here
|
||||
NIX_CFLAGS_COMPILE = "-fgnu89-inline -fcommon";
|
||||
|
||||
meta = with lib; {
|
||||
description = "GNU Common Lisp compiler working via GCC";
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
{ lib
|
||||
, pkgs
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "gmqcc";
|
||||
version = "unstable-2021-07-09";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "graphitemaster";
|
||||
repo = "gmqcc";
|
||||
rev = "297eab9e5e2c9cc4f41201b68821593a5cf9a725";
|
||||
sha256 = "1hl2qn7402ia03kjkblj4q4wfypxkil99sivsyk2vrnwwpdp4nzx";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/bin
|
||||
install -m755 gmqcc $out/bin
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://graphitemaster.github.io/gmqcc/";
|
||||
description = "A modern QuakeC compiler";
|
||||
longDescription = ''
|
||||
For an enduring period of time the options for a decent compiler for
|
||||
the Quake C programming language were confined to a specific compiler
|
||||
known as QCC. Attempts were made to extend and improve upon the design
|
||||
of QCC, but many foreseen the consequences of building on a broken
|
||||
foundation. The solution was obvious, a new compiler; one born from
|
||||
the NIH realm of sarcastic wit.
|
||||
We welcome you. You won't find a better Quake C compiler.
|
||||
'';
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ necrophcodr ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
@@ -8,6 +8,7 @@ with lib; mkCoqDerivation {
|
||||
defaultVersion = if versions.isGe "8.6" coq.coq-version
|
||||
then "${coq.coq-version}.0" else null;
|
||||
|
||||
release."8.16.0".sha256 = "sha256-DH3iWwatPlhhCVYVlgL2WLkvneSVzSXUiKo2e0+1zR4=";
|
||||
release."8.15.0".sha256 = "093klwlhclgyrba1iv18dyz1qp5f0lwiaa7y0qwvgmai8rll5fns";
|
||||
release."8.14.0".sha256 = "0jsgdvj0ddhkls32krprp34r64y1rb5mwxl34fgaxk2k4664yq06";
|
||||
release."8.13.0".sha256 = "1n66i7hd9222b2ks606mak7m4f0dgy02xgygjskmmav6h7g2sx7y";
|
||||
|
||||
@@ -6,20 +6,21 @@ with builtins; with lib; let
|
||||
{ case = "8.12"; out = { version = "1.12.0"; };}
|
||||
{ case = "8.13"; out = { version = "1.13.7"; };}
|
||||
{ case = "8.14"; out = { version = "1.13.7"; };}
|
||||
{ case = "8.15"; out = { version = "1.14.1"; };}
|
||||
] { version = "1.14.1"; } );
|
||||
{ case = "8.15"; out = { version = "1.15.0"; };}
|
||||
] {} );
|
||||
in mkCoqDerivation {
|
||||
pname = "elpi";
|
||||
repo = "coq-elpi";
|
||||
owner = "LPCIC";
|
||||
inherit version;
|
||||
defaultVersion = lib.switch coq.coq-version [
|
||||
{ case = "8.15"; out = "1.13.0"; }
|
||||
{ case = "8.15"; out = "1.14.0"; }
|
||||
{ case = "8.14"; out = "1.11.2"; }
|
||||
{ case = "8.13"; out = "1.11.1"; }
|
||||
{ case = "8.12"; out = "1.8.3_8.12"; }
|
||||
{ case = "8.11"; out = "1.6.3_8.11"; }
|
||||
] null;
|
||||
release."1.14.0".sha256 = "sha256:1v2p5dlpviwzky2i14cj7gcgf8cr0j54bdm9fl5iz1ckx60j6nvp";
|
||||
release."1.13.0".sha256 = "1j7s7dlnjbw222gnbrsjgmjck1yrx7h6hwm8zikcyxi0zys17w7n";
|
||||
release."1.12.1".sha256 = "sha256-4mO6/co7NcIQSGIQJyoO8lNWXr6dqz+bIYPO/G0cPkY=";
|
||||
release."1.11.2".sha256 = "0qk5cfh15y2zrja7267629dybd3irvxk1raz7z8qfir25a81ckd4";
|
||||
|
||||
@@ -41,9 +41,6 @@
|
||||
|
||||
, meta ? {}
|
||||
|
||||
# disabled
|
||||
, runVend ? false
|
||||
|
||||
# Not needed with buildGoModule
|
||||
, goPackagePath ? ""
|
||||
|
||||
@@ -55,8 +52,6 @@
|
||||
|
||||
with builtins;
|
||||
|
||||
assert runVend != false -> throw "`runVend` has been replaced by `proxyVendor`";
|
||||
|
||||
assert goPackagePath != "" -> throw "`goPackagePath` is not needed with `buildGoModule`";
|
||||
|
||||
let
|
||||
|
||||
@@ -11,13 +11,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "hidapi";
|
||||
version = "0.11.2";
|
||||
version = "0.12.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libusb";
|
||||
repo = "hidapi";
|
||||
rev = "${pname}-${version}";
|
||||
sha256 = "sha256-zSAhnvnDI3+q8VwZ8fIx/YmvwTpL87PBJ2C1mTmD7Ko=";
|
||||
sha256 = "sha256-SMhlcB7LcViC6UFVYACjunxsGkvSOKC3mbLBH4XQSzM=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake pkg-config ];
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{ lib, stdenv, fetchurl, pkg-config, libmnl }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "1.2.1";
|
||||
version = "1.2.2";
|
||||
pname = "libnftnl";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://netfilter.org/projects/${pname}/files/${pname}-${version}.tar.bz2";
|
||||
sha256 = "0z4khm2mnys9mcl8ckwf19cw20jgrv8650nfncy3xcgs2k2aa23m";
|
||||
hash = "sha256-nvwAT50VkY1o+emOGU1V4DAWjzO7Z8PnpUW3QMntbQo=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
|
||||
@@ -30,7 +30,8 @@ stdenv.mkDerivation rec {
|
||||
sha256 = "sha256-olLgD8WA3rIdoNqMCqA7jDHoRAuESMi5gUP6tHfTIwU=";
|
||||
};
|
||||
|
||||
outputs = [ "out" "dev" "devdoc" ];
|
||||
outputs = [ "out" "dev" ]
|
||||
++ lib.optional (stdenv.hostPlatform == stdenv.buildPlatform) "devdoc";
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
{ lib, stdenv, fetchFromGitHub, mpfr, libxml2, intltool, pkg-config, doxygen,
|
||||
autoreconfHook, readline, libiconv, icu, curl, gnuplot, gettext }:
|
||||
{ lib, stdenv, fetchFromGitHub
|
||||
, mpfr, gnuplot
|
||||
, readline
|
||||
, libxml2, curl
|
||||
, intltool, libiconv, icu, gettext
|
||||
, pkg-config, doxygen, autoreconfHook, buildPackages
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "libqalculate";
|
||||
@@ -16,6 +21,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
nativeBuildInputs = [ intltool pkg-config autoreconfHook doxygen ];
|
||||
buildInputs = [ curl gettext libiconv readline ];
|
||||
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
||||
propagatedBuildInputs = [ libxml2 mpfr icu ];
|
||||
enableParallelBuilding = true;
|
||||
|
||||
|
||||
@@ -11,13 +11,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "libzim";
|
||||
version = "7.2.0";
|
||||
version = "7.2.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "openzim";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "sha256-H4YUAbH4X6oJIZyhI23LemngtOtKNrHHl3KSU1ilAmo=";
|
||||
sha256 = "sha256-AEhhjinnnMA4NbYL7NVHYeRZX/zfNiidbY/VeFjZuQs=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, cmake
|
||||
, fetchFromGitHub
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "sptk";
|
||||
version = "4.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "sp-nitech";
|
||||
repo = "SPTK";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-Be3Pbg+vt/P3FplZN7yBL+HVq/BmzaBcwKOBsbH7r9g=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
];
|
||||
|
||||
doCheck = true;
|
||||
|
||||
meta = with lib; {
|
||||
changelog = "https://github.com/sp-nitech/SPTK/releases/tag/v${version}";
|
||||
description = "Suite of speech signal processing tools";
|
||||
homepage = "https://github.com/sp-nitech/SPTK";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
};
|
||||
}
|
||||
@@ -1,13 +1,18 @@
|
||||
{ lib
|
||||
, buildDunePackage, camlp5
|
||||
, ocaml
|
||||
, menhir, menhirLib
|
||||
, stdlib-shims
|
||||
, re, perl, ncurses
|
||||
, ppxlib, ppx_deriving
|
||||
, ppxlib_0_15, ppx_deriving_0_15
|
||||
, coqPackages
|
||||
, version ? "1.14.1"
|
||||
, version ? if lib.versionAtLeast ocaml.version "4.07" then "1.15.2" else "1.14.1"
|
||||
}:
|
||||
with lib;
|
||||
let fetched = coqPackages.metaFetch ({
|
||||
release."1.15.2".sha256 = "sha256-XgopNP83POFbMNyl2D+gY1rmqGg03o++Ngv3zJfCn2s=";
|
||||
release."1.15.0".sha256 = "sha256:1ngdc41sgyzyz3i3lkzjhnj66gza5h912virkh077dyv17ysb6ar";
|
||||
release."1.14.1".sha256 = "sha256-BZPVL8ymjrE9kVGyf6bpc+GA2spS5JBpkUtZi04nPis=";
|
||||
release."1.13.7".sha256 = "10fnwz30bsvj7ii1vg4l1li5pd7n0qqmwj18snkdr5j9gk0apc1r";
|
||||
release."1.13.5".sha256 = "02a6r23mximrdvs6kgv6rp0r2dgk7zynbs99nn7lphw2c4189kka";
|
||||
@@ -23,11 +28,16 @@ buildDunePackage rec {
|
||||
pname = "elpi";
|
||||
inherit (fetched) version src;
|
||||
|
||||
minimumOCamlVersion = "4.04";
|
||||
minimalOCamlVersion = "4.04";
|
||||
|
||||
buildInputs = [ perl ncurses ];
|
||||
buildInputs = [ perl ncurses ]
|
||||
++ optional (versionAtLeast version "1.15" || version == "dev") menhir;
|
||||
|
||||
propagatedBuildInputs = [ camlp5 re ]
|
||||
propagatedBuildInputs = [ re stdlib-shims ]
|
||||
++ (if versionAtLeast version "1.15" || version == "dev"
|
||||
then [ menhirLib ]
|
||||
else [ camlp5 ]
|
||||
)
|
||||
++ (if lib.versionAtLeast version "1.13" || version == "dev"
|
||||
then [ ppxlib ppx_deriving ]
|
||||
else [ ppxlib_0_15 ppx_deriving_0_15 ]
|
||||
@@ -43,6 +53,4 @@ buildDunePackage rec {
|
||||
postPatch = ''
|
||||
substituteInPlace elpi_REPL.ml --replace "tput cols" "${ncurses}/bin/tput cols"
|
||||
'';
|
||||
|
||||
useDune2 = true;
|
||||
}
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
{ stdenv, lib, fetchFromGitHub, ocaml, findlib, ocamlbuild }:
|
||||
|
||||
if lib.versionOlder ocaml.version "4.03"
|
||||
|| lib.versionOlder "4.13" ocaml.version
|
||||
if lib.versionOlder ocaml.version "4.08"
|
||||
then throw "wasm is not available for OCaml ${ocaml.version}"
|
||||
else
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "ocaml${ocaml.version}-wasm";
|
||||
version = "1.1.1";
|
||||
version = "2.0.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "WebAssembly";
|
||||
repo = "spec";
|
||||
rev = "opam-${version}";
|
||||
sha256 = "1kp72yv4k176i94np0m09g10cviqp2pnpm7jmiq6ik7fmmbknk7c";
|
||||
sha256 = "sha256:09s0v79x0ymzcp2114zkm3phxavdfnkkq67qz1ndnknbkziwqf3v";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ ocaml findlib ocamlbuild ];
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "canonicaljson";
|
||||
version = "1.6.1";
|
||||
version = "1.6.2";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-qTZk9phVbb1Lq5w/xPs1g0zyU12h6gC2t3WNj+K7uCQ=";
|
||||
hash = "sha256-rwC+jOnFiYV98Xa7lFlPDUOw4CfwJ6jXz4l4/bgZAko=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
||||
@@ -1,22 +1,27 @@
|
||||
{ lib
|
||||
, buildPythonPackage
|
||||
, fetchFromGitHub
|
||||
, plotly
|
||||
, flask
|
||||
, flask-compress
|
||||
, celery
|
||||
, dash-core-components
|
||||
, dash-html-components
|
||||
, dash-table
|
||||
, pytest-mock
|
||||
, diskcache
|
||||
, fetchFromGitHub
|
||||
, flask
|
||||
, flask-compress
|
||||
, mock
|
||||
, pyyaml
|
||||
, multiprocess
|
||||
, plotly
|
||||
, psutil
|
||||
, pytest-mock
|
||||
, pytestCheckHook
|
||||
, pythonOlder
|
||||
, pyyaml
|
||||
, redis
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "dash";
|
||||
version = "2.4.1";
|
||||
version = "2.5.0";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.6";
|
||||
@@ -25,7 +30,7 @@ buildPythonPackage rec {
|
||||
owner = "plotly";
|
||||
repo = pname;
|
||||
rev = "refs/tags/v${version}";
|
||||
sha256 = "sha256-7B1LEcEgUGJ/gDCDD4oURqli8I5YTJo9jl7l4E1aLVQ=";
|
||||
hash = "sha256-Qh5oOkTxEbxXXDX+g9TDa5DiYBlMpnx0yKsn/XMfMF0=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
@@ -37,6 +42,18 @@ buildPythonPackage rec {
|
||||
dash-table
|
||||
];
|
||||
|
||||
passthru.optional-dependencies = {
|
||||
celery = [
|
||||
celery
|
||||
redis
|
||||
];
|
||||
diskcache = [
|
||||
diskcache
|
||||
multiprocess
|
||||
psutil
|
||||
];
|
||||
};
|
||||
|
||||
checkInputs = [
|
||||
pytestCheckHook
|
||||
pytest-mock
|
||||
@@ -50,12 +67,14 @@ buildPythonPackage rec {
|
||||
"tests/integration"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "dash" ];
|
||||
pythonImportsCheck = [
|
||||
"dash"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Python framework for building analytical web applications";
|
||||
homepage = "https://dash.plot.ly/";
|
||||
license = licenses.mit;
|
||||
maintainers = [ maintainers.antoinerg ];
|
||||
maintainers = with maintainers; [ antoinerg ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "databricks-connect";
|
||||
version = "9.1.16";
|
||||
version = "9.1.17";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-agdky7AhRuObU9GT8IpdgB3SWdHDBRnuoaAtYAlCv/4=";
|
||||
sha256 = "sha256-QBGeXZ8zvRRjmKGs0vyBWTvcug3PF/BFV2asYTqsScw=";
|
||||
};
|
||||
|
||||
sourceRoot = ".";
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "docopt-ng";
|
||||
version = "0.7.2";
|
||||
version = "0.8.1";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-hs7qAy8M+lnmB3brDPOKxzZTWBAihyMg9H3IdGeNckQ=";
|
||||
sha256 = "sha256-6mphooj8hk7uayLW/iiqIC1Z/Ib60F8W/145zE6n9uM=";
|
||||
};
|
||||
|
||||
pythonImportsCheck = [ "docopt" ];
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
version = "0.20.42";
|
||||
version = "0.20.43";
|
||||
pname = "dulwich";
|
||||
format = "setuptools";
|
||||
|
||||
@@ -25,7 +25,7 @@ buildPythonPackage rec {
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-cro7YK5qVU0TMrO0CjRf6+FuxGnPYBS7RDtxmQLjPvA=";
|
||||
hash = "sha256-/MIWTgE7OQqe46EJ1+97ldjeKDsueJuwfpSqMRXjKeo=";
|
||||
};
|
||||
|
||||
LC_ALL = "en_US.UTF-8";
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "fastapi-mail";
|
||||
version = "1.0.8";
|
||||
version = "1.0.9";
|
||||
format = "pyproject";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@@ -27,8 +27,8 @@ buildPythonPackage rec {
|
||||
src = fetchFromGitHub {
|
||||
owner = "sabuhish";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
hash = "sha256-PkA7qkdDUd7mrtvb6IbCzFRq6X0M3iKY+FKuNConJ5A=";
|
||||
rev = "refs/tags/${version}";
|
||||
hash = "sha256-2Nb+FzmhsKvauT/yOCLHCEld8r+6niu9kV6EmjhC6S0=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "fido2";
|
||||
version = "0.9.3";
|
||||
version = "1.0.0";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "b45e89a6109cfcb7f1bb513776aa2d6408e95c4822f83a253918b944083466ec";
|
||||
sha256 = "sha256-JQmklYtmbXR/1XVN+pNX2i2BtS7cDs/3W2jOqTkVTAI=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [ six cryptography ];
|
||||
|
||||
@@ -12,14 +12,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "google-cloud-appengine-logging";
|
||||
version = "1.1.1";
|
||||
version = "1.1.2";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.6";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-NhRQ7X17/Y79DvJT4haArrb23zzwV+XoJT9YUfjLvKc=";
|
||||
hash = "sha256-undhXBAPB+3akWVu3ht0ZZBwErhmOq18TnXvloeZQjc=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
{ buildPythonPackage
|
||||
, inkscape
|
||||
, cssselect
|
||||
, lxml
|
||||
, numpy
|
||||
, pygobject3
|
||||
, python
|
||||
}:
|
||||
|
||||
@@ -11,7 +14,10 @@ buildPythonPackage {
|
||||
format = "other";
|
||||
|
||||
propagatedBuildInputs = [
|
||||
cssselect
|
||||
lxml
|
||||
numpy
|
||||
pygobject3
|
||||
];
|
||||
|
||||
# We just copy the files.
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
buildPythonApplication rec {
|
||||
pname = "mkdocs-material";
|
||||
version = "8.3.2";
|
||||
version = "8.3.3";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@@ -22,7 +22,7 @@ buildPythonApplication rec {
|
||||
owner = "squidfunk";
|
||||
repo = pname;
|
||||
rev = "refs/tags/${version}";
|
||||
hash = "sha256-VcyBsIU2PJ2xh365kNAlO3wno3xushlaj43dIh1GkP8=";
|
||||
hash = "sha256-4rJ1fKYIQli4j6x1/xipQeCXMfbILyroxrwbpcPGYiU=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
{ lib
|
||||
{ lib
|
||||
, aiohttp
|
||||
, async-timeout
|
||||
, buildPythonPackage
|
||||
, crcmod
|
||||
, defusedxml
|
||||
, fetchFromGitHub
|
||||
, freezegun
|
||||
, jsonpickle
|
||||
, munch
|
||||
, mypy
|
||||
@@ -20,7 +21,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "plugwise";
|
||||
version = "0.18.5";
|
||||
version = "0.19.0";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@@ -29,7 +30,7 @@ buildPythonPackage rec {
|
||||
owner = pname;
|
||||
repo = "python-plugwise";
|
||||
rev = "refs/tags/v${version}";
|
||||
sha256 = "sha256-J6RwPkObcoXIQ93nD8FNNjwllHoID4nFzqilArBS1C8=";
|
||||
sha256 = "sha256-ST7eC7IXW47b1AlX25ubUPTi6Hkcjd+7L0tzht3fz9s=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
@@ -45,6 +46,7 @@ buildPythonPackage rec {
|
||||
];
|
||||
|
||||
checkInputs = [
|
||||
freezegun
|
||||
jsonpickle
|
||||
mypy
|
||||
pytest-aiohttp
|
||||
|
||||
@@ -11,16 +11,16 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pre-commit-hooks";
|
||||
version = "4.2.0";
|
||||
version = "4.3.0";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.6";
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "pre-commit";
|
||||
repo = pname;
|
||||
rev = "refs/tags/v${version}";
|
||||
sha256 = "sha256-jSu4LutEgpeAbCgSHgk6VXQKLZo00T3TrQVZxsNU1co=";
|
||||
sha256 = "sha256-qdsSM+7ScSfxhmLAqwi1iraGHrhb5NBee/j+TKr2WUA=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
||||
@@ -1,37 +1,64 @@
|
||||
{ lib, buildPythonPackage, fetchPypi
|
||||
, requests, cryptography, pybrowserid, hawkauthlib, six
|
||||
, grequests, mock, responses, pytest, pyjwt }:
|
||||
{ lib
|
||||
, buildPythonPackage
|
||||
, cryptography
|
||||
, fetchPypi
|
||||
, grequests
|
||||
, hawkauthlib
|
||||
, mock
|
||||
, pybrowserid
|
||||
, pyjwt
|
||||
, pytestCheckHook
|
||||
, pythonOlder
|
||||
, requests
|
||||
, responses
|
||||
, setuptools
|
||||
, six
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "PyFxA";
|
||||
pname = "pyfxa";
|
||||
version = "0.7.7";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "6c85cd08cf05f7138dee1cf2a8a1d68fd428b7b5ad488917c70a2a763d651cdb";
|
||||
pname = "PyFxA";
|
||||
inherit version;
|
||||
hash = "sha256-bIXNCM8F9xON7hzyqKHWj9Qot7WtSIkXxwoqdj1lHNs=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
# Requires network access
|
||||
rm fxa/tests/test_core.py
|
||||
'';
|
||||
|
||||
propagatedBuildInputs = [
|
||||
pyjwt requests cryptography pybrowserid hawkauthlib six
|
||||
cryptography
|
||||
hawkauthlib
|
||||
pybrowserid
|
||||
pyjwt
|
||||
requests
|
||||
setuptools # imports pkg_resources
|
||||
six
|
||||
];
|
||||
|
||||
checkInputs = [
|
||||
grequests mock responses pytest
|
||||
grequests
|
||||
mock
|
||||
responses
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
# test_oath is mostly network calls
|
||||
checkPhase = ''
|
||||
pytest --ignore=fxa/tests/test_oauth.py
|
||||
'';
|
||||
pythonImportsCheck = [
|
||||
"fxa"
|
||||
];
|
||||
|
||||
disabledTestPaths = [
|
||||
# Requires network access
|
||||
"fxa/tests/test_core.py"
|
||||
"fxa/tests/test_oauth.py"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Firefox Accounts client library for Python";
|
||||
description = "Firefox Accounts client library";
|
||||
homepage = "https://github.com/mozilla/PyFxA";
|
||||
license = licenses.mpl20;
|
||||
maintainers = with maintainers; [ ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyroute2-core";
|
||||
version = "0.6.10";
|
||||
version = "0.6.11";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@@ -15,7 +15,7 @@ buildPythonPackage rec {
|
||||
src = fetchPypi {
|
||||
pname = "pyroute2.core";
|
||||
inherit version;
|
||||
hash = "sha256-hwI7sSaR0938VeCShzZ39b2CAU5SJLqui8Ri3CGXPwk=";
|
||||
hash = "sha256-9Odxls1lje7pUCu0UkhfQIgbL2dOZQkiV1J/kgfgxGw=";
|
||||
};
|
||||
|
||||
# pyroute2 sub-modules have no tests
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyroute2-ethtool";
|
||||
version = "0.6.10";
|
||||
version = "0.6.11";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@@ -15,7 +15,7 @@ buildPythonPackage rec {
|
||||
src = fetchPypi {
|
||||
pname = "pyroute2.ethtool";
|
||||
inherit version;
|
||||
hash = "sha256-5i1zbKs40RXCQB1cn3jrDOX+Fgl0nknTFLsvI69udxw=";
|
||||
hash = "sha256-3xFsK50WtnRS8ImEWU4Hke9Ndp1Asm4wPEBfQT1rYXU=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyroute2-ipdb";
|
||||
version = "0.6.10";
|
||||
version = "0.6.11";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@@ -15,7 +15,7 @@ buildPythonPackage rec {
|
||||
src = fetchPypi {
|
||||
pname = "pyroute2.ipdb";
|
||||
inherit version;
|
||||
hash = "sha256-emPIh94LqN/QCCLC6Mr+IiVyXtjdsmhduBdPko1V83A=";
|
||||
hash = "sha256-UTP5LuZbBukfDpQPJ+N5ZFtKGFJppZfpsISnsm9eabs=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyroute2-ipset";
|
||||
version = "0.6.10";
|
||||
version = "0.6.11";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@@ -15,7 +15,7 @@ buildPythonPackage rec {
|
||||
src = fetchPypi {
|
||||
pname = "pyroute2.ipset";
|
||||
inherit version;
|
||||
hash = "sha256-1Fk3imqMz9qx1zBcQ/Uyp2eVrTygGIklVF5/QBbuSoI=";
|
||||
hash = "sha256-uIfclrm1tujUickd5R4uyDHvPExyC2M9mpm5NLF1rts=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyroute2-ndb";
|
||||
version = "0.6.10";
|
||||
version = "0.6.11";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@@ -15,7 +15,7 @@ buildPythonPackage rec {
|
||||
src = fetchPypi {
|
||||
pname = "pyroute2.ndb";
|
||||
inherit version;
|
||||
hash = "sha256-kjgeA7PV6JLvCvaZxe4y984wTo8ExU7Yf1Wr+7jNwu4=";
|
||||
hash = "sha256-jz956VgO9Z9ZPlMQobB34wd04Og/XV7IP+J58htdk+Y=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyroute2-nftables";
|
||||
version = "0.6.10";
|
||||
version = "0.6.11";
|
||||
|
||||
src = fetchPypi {
|
||||
pname = "pyroute2.nftables";
|
||||
inherit version;
|
||||
sha256 = "sha256-dUuCTGs7RaEehsAgK7yNw11tE3VGtT5LxDilMVWpCNU=";
|
||||
sha256 = "sha256-2SHAH4HBcXknCa2rdHk1s+ju+IN5ndcLPD8dgSGagqU=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyroute2-nslink";
|
||||
version = "0.6.10";
|
||||
version = "0.6.11";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@@ -15,7 +15,7 @@ buildPythonPackage rec {
|
||||
src = fetchPypi {
|
||||
pname = "pyroute2.nslink";
|
||||
inherit version;
|
||||
hash = "sha256-PynJRg2pXZIeB4Ucz/tvghdEt1iWAr8azjET9hsnUPE=";
|
||||
hash = "sha256-R94n1UEceOMmXXbCCkgq6N2JLnp2eqAW4qweIpNI2CI=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyroute2-protocols";
|
||||
version = "0.6.10";
|
||||
version = "0.6.11";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@@ -15,7 +15,7 @@ buildPythonPackage rec {
|
||||
src = fetchPypi {
|
||||
pname = "pyroute2.protocols";
|
||||
inherit version;
|
||||
hash = "sha256-xMTKAJC++X1zO7rm+cUr0IuEDxkllyje00Omv9tLZ6E=";
|
||||
hash = "sha256-AnmW9ILlcZh2mwO5fbhY4ZazWSAy2wHJgLp5Anlmxk4=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
||||
@@ -15,14 +15,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyroute2";
|
||||
version = "0.6.10";
|
||||
version = "0.6.11";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-Vj7W3/yQPYIUFEdvNv3AS9OqddqtISRbcmWUJxc5JiI=";
|
||||
hash = "sha256-E2NGvmbVUuRUHQZ52/+say4SN9/TnuGpUGL4UCRJF70=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyshark";
|
||||
version = "0.4.5";
|
||||
version = "0.4.6";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@@ -21,8 +21,8 @@ buildPythonPackage rec {
|
||||
repo = pname;
|
||||
# 0.4.5 was the last release which was tagged
|
||||
# https://github.com/KimiNewt/pyshark/issues/541
|
||||
rev = "8f8f13aba6ae716aa0a48175255063fe542fdc3b";
|
||||
hash = "sha256-v9CC9hgTABAiJ0qiFZ/9/zMmHzJXKq3neGtTq/ucnT4=";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-yEpUFihETKta3+Xb8eSyTZ1uSi7ao4OqWzsCgDLLhe8=";
|
||||
};
|
||||
|
||||
sourceRoot = "${src.name}/src";
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pysigma-backend-insightidr";
|
||||
version = "0.1.5";
|
||||
version = "0.1.6";
|
||||
format = "pyproject";
|
||||
|
||||
disabled = pythonOlder "3.8";
|
||||
@@ -18,7 +18,7 @@ buildPythonPackage rec {
|
||||
owner = "SigmaHQ";
|
||||
repo = "pySigma-backend-insightidr";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-RjBRFNMIpjW/x5vShXUgi25oOmvRlD2zP6mNQJ7sG8M=";
|
||||
hash = "sha256-Sg+AYoEbCmcqxw5dl8wmQcI+lFrAfFgDnQjiQh6r9Yc=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user