Merge branch 'master' of github.com:hectic-lab/util.nix
This commit is contained in:
@@ -26,16 +26,15 @@
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
{ lib
|
||||
, cargo-pgrx
|
||||
, pkg-config
|
||||
, rustPlatform
|
||||
, stdenv
|
||||
, Security
|
||||
, writeShellScriptBin
|
||||
{
|
||||
lib,
|
||||
cargo-pgrx,
|
||||
pkg-config,
|
||||
rustPlatform,
|
||||
stdenv,
|
||||
Security,
|
||||
writeShellScriptBin,
|
||||
}:
|
||||
|
||||
# The idea behind: Use it mostly like rustPlatform.buildRustPackage and so
|
||||
# we hand most of the arguments down.
|
||||
#
|
||||
@@ -46,23 +45,21 @@
|
||||
# If the generated rust bindings aren't needed to use the extension, its a
|
||||
# unnecessary and heavy dependency. If you set this to true, you also
|
||||
# have to add `rustfmt` to `nativeBuildInputs`.
|
||||
|
||||
{ buildAndTestSubdir ? null
|
||||
, buildType ? "release"
|
||||
, buildFeatures ? [ ]
|
||||
, cargoBuildFlags ? [ ]
|
||||
, postgresql
|
||||
{
|
||||
buildAndTestSubdir ? null,
|
||||
buildType ? "release",
|
||||
buildFeatures ? [],
|
||||
cargoBuildFlags ? [],
|
||||
postgresql,
|
||||
# cargo-pgrx calls rustfmt on generated bindings, this is not strictly necessary, so we avoid the
|
||||
# dependency here. Set to false and provide rustfmt in nativeBuildInputs, if you need it, e.g.
|
||||
# if you include the generated code in the output via postInstall.
|
||||
, useFakeRustfmt ? true
|
||||
, usePgTestCheckFeature ? true
|
||||
, ...
|
||||
} @ args:
|
||||
let
|
||||
useFakeRustfmt ? true,
|
||||
usePgTestCheckFeature ? true,
|
||||
...
|
||||
} @ args: let
|
||||
rustfmtInNativeBuildInputs = lib.lists.any (dep: lib.getName dep == "rustfmt") (args.nativeBuildInputs or []);
|
||||
in
|
||||
|
||||
assert lib.asserts.assertMsg ((args.installPhase or "") == "")
|
||||
"buildPgrxExtensions overwrites the installPhase, so providing one does nothing";
|
||||
assert lib.asserts.assertMsg ((args.buildPhase or "") == "")
|
||||
@@ -70,9 +67,7 @@ assert lib.asserts.assertMsg ((args.buildPhase or "") == "")
|
||||
assert lib.asserts.assertMsg (useFakeRustfmt -> !rustfmtInNativeBuildInputs)
|
||||
"The parameter useFakeRustfmt is set to true, but rustfmt is included in nativeBuildInputs. Either set useFakeRustfmt to false or remove rustfmt from nativeBuildInputs.";
|
||||
assert lib.asserts.assertMsg (!useFakeRustfmt -> rustfmtInNativeBuildInputs)
|
||||
"The parameter useFakeRustfmt is set to false, but rustfmt is not included in nativeBuildInputs. Either set useFakeRustfmt to true or add rustfmt from nativeBuildInputs.";
|
||||
|
||||
let
|
||||
"The parameter useFakeRustfmt is set to false, but rustfmt is not included in nativeBuildInputs. Either set useFakeRustfmt to true or add rustfmt from nativeBuildInputs."; let
|
||||
fakeRustfmt = writeShellScriptBin "rustfmt" ''
|
||||
exit 0
|
||||
'';
|
||||
@@ -101,15 +96,20 @@ let
|
||||
|
||||
# so we don't accidentally `(rustPlatform.buildRustPackage argsForBuildRustPackage) // { ... }` because
|
||||
# we forgot parentheses
|
||||
finalArgs = argsForBuildRustPackage // {
|
||||
finalArgs =
|
||||
argsForBuildRustPackage
|
||||
// {
|
||||
buildInputs = (args.buildInputs or []) ++ lib.optionals stdenv.hostPlatform.isDarwin [Security];
|
||||
|
||||
nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [
|
||||
nativeBuildInputs =
|
||||
(args.nativeBuildInputs or [])
|
||||
++ [
|
||||
cargo-pgrx
|
||||
postgresql
|
||||
pkg-config
|
||||
rustPlatform.bindgenHook
|
||||
] ++ lib.optionals useFakeRustfmt [ fakeRustfmt ];
|
||||
]
|
||||
++ lib.optionals useFakeRustfmt [fakeRustfmt];
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
28
flake.nix
28
flake.nix
@@ -247,6 +247,7 @@
|
||||
pg-15-ext-plsh = buildPlShExt pkgs "15";
|
||||
c-hectic = pkgs.callPackage ./package/c/hectic/default.nix {};
|
||||
watch = pkgs.callPackage ./package/c/watch/default.nix {};
|
||||
support-bot = pkgs.callPackage ./package/support-bot {};
|
||||
};
|
||||
|
||||
devShells.${system} = let
|
||||
@@ -271,6 +272,7 @@
|
||||
|
||||
shellHook = ''
|
||||
export PATH=${pkgs.gcc}/bin:$PATH
|
||||
|
||||
export PAGER="${self.packages.${system}.nvim-pager}/bin/pager"
|
||||
'';
|
||||
};
|
||||
@@ -440,7 +442,7 @@
|
||||
'';
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
environment.systemPackags = with pkgs; [
|
||||
gdb
|
||||
hectic.nvim-pager
|
||||
(writeScriptBin "check" ''
|
||||
@@ -569,7 +571,6 @@
|
||||
overlays.default = final: prev: (
|
||||
let
|
||||
hectic-packages = self.packages.${prev.system};
|
||||
|
||||
in {
|
||||
hectic = hectic-packages;
|
||||
postgresql_17 = prev.postgresql_17 // {pkgs = prev.postgresql_17.pkgs // {
|
||||
@@ -594,11 +595,12 @@
|
||||
hemar = hectic-packages.pg-15-ext-hemar;
|
||||
};};
|
||||
writers = let
|
||||
writeC =
|
||||
name: argsOrScript:
|
||||
if lib.isAttrs argsOrScript && !lib.isDerivation argsOrScript then
|
||||
writeC = name: argsOrScript:
|
||||
if lib.isAttrs argsOrScript && !lib.isDerivation argsOrScript
|
||||
then
|
||||
prev.writers.makeBinWriter (
|
||||
argsOrScript // {
|
||||
argsOrScript
|
||||
// {
|
||||
compileScript = ''
|
||||
# Force gcc to treat the input file as C code
|
||||
${prev.gcc}/bin/gcc -fsyntax-only -xc $contentPath
|
||||
@@ -609,7 +611,8 @@
|
||||
${prev.gcc}/bin/gcc -xc -o $out $contentPath
|
||||
'';
|
||||
}
|
||||
) name
|
||||
)
|
||||
name
|
||||
else
|
||||
prev.writers.makeBinWriter {
|
||||
compileScript = ''
|
||||
@@ -621,9 +624,10 @@
|
||||
fi
|
||||
${prev.gcc}/bin/gcc -xc -o $out $contentPath
|
||||
'';
|
||||
} name argsOrScript;
|
||||
writeMinC =
|
||||
name: includes: body:
|
||||
}
|
||||
name
|
||||
argsOrScript;
|
||||
writeMinC = name: includes: body:
|
||||
writeC name ''
|
||||
${builtins.concatStringsSep "\n" (map (h: "#include " + h) includes)}
|
||||
|
||||
@@ -631,7 +635,9 @@
|
||||
${body}
|
||||
}
|
||||
'';
|
||||
in prev.writers // {
|
||||
in
|
||||
prev.writers
|
||||
// {
|
||||
writeCBin = name: writeC "/bin/${name}";
|
||||
writeC = writeC;
|
||||
writeMinCBin = name: includes: body: writeMinC "/bin/${name}" includes body;
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
{ stdenv, patchelf, gcc, lib, bash, inotify-tools }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "hectic";
|
||||
version = "1.0";
|
||||
|
||||
6
package/c/hemar/.gitignore
vendored
6
package/c/hemar/.gitignore
vendored
@@ -1,2 +1,8 @@
|
||||
<<<<<<< HEAD:package/c/hemar/.gitignore
|
||||
hemar.o
|
||||
hemar.so
|
||||
=======
|
||||
package/c/postgreact/postgreact.control
|
||||
package/c/postgreact/postgreact.o
|
||||
package/c/postgreact/postgreact.so
|
||||
>>>>>>> 016db3d06ae814e0f0cc8f39cd4e5af729bb39ac:package/c/postgreact/.gitignore
|
||||
|
||||
@@ -12,4 +12,5 @@ PG_LDFLAGS += -Wl,-rpath,$(shell $(HECTIC_CONFIG) --libdir)
|
||||
SHLIB_LINK += $(shell $(HECTIC_CONFIG) --libs)
|
||||
|
||||
PGXS := $(shell $(PG_CONFIG) --pgxs)
|
||||
|
||||
include $(PGXS)
|
||||
@@ -7,6 +7,8 @@
|
||||
# --color Pass -fdiagnostics-color=always to compiler.
|
||||
# help, --help Show this help message.
|
||||
|
||||
set -u
|
||||
|
||||
check_dependencies() {
|
||||
for dep in gcc pg_config; do
|
||||
if ! command -v "$dep" >/dev/null 2>&1; then
|
||||
|
||||
12
package/c/hemar/postgreact--1.0.sql
Normal file
12
package/c/hemar/postgreact--1.0.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
|
||||
\echo Use "CREATE EXTENSION postgreact" to load this file. \quit
|
||||
|
||||
-- Define the hello function that uses our C implementation
|
||||
CREATE FUNCTION hello()
|
||||
RETURNS
|
||||
TEXT
|
||||
STRICT VOLATILE
|
||||
LANGUAGE C
|
||||
AS
|
||||
'MODULE_PATHNAME', 'hello'
|
||||
;
|
||||
4
package/c/hemar/postgreact.control.in
Normal file
4
package/c/hemar/postgreact.control.in
Normal file
@@ -0,0 +1,4 @@
|
||||
comment = '@EXTENSION_COMMENT@'
|
||||
default_version = '@EXTENSION_VERSION@'
|
||||
module_pathname = '$libdir/@EXTENSION@'
|
||||
relocatable = false
|
||||
16
package/c/hemar/postgreact.h
Normal file
16
package/c/hemar/postgreact.h
Normal file
@@ -0,0 +1,16 @@
|
||||
#ifndef POSTGREACT_H
|
||||
#define POSTGREACT_H
|
||||
|
||||
#include "postgres.h"
|
||||
|
||||
#ifdef PG_MODULE_MAGIC
|
||||
PG_MODULE_MAGIC;
|
||||
#endif
|
||||
|
||||
void _PG_init(void);
|
||||
void _PG_fini(void);
|
||||
|
||||
Datum hello(PG_FUNCTION_ARGS);
|
||||
PG_FUNCTION_INFO_V1(hello);
|
||||
|
||||
#endif // POSTGREACT_H
|
||||
@@ -1,5 +1,10 @@
|
||||
{ stdenv, gcc, lib, bash, c-hectic }:
|
||||
|
||||
{
|
||||
stdenv,
|
||||
gcc,
|
||||
lib,
|
||||
bash,
|
||||
c-hectic,
|
||||
}:
|
||||
stdenv.mkDerivation {
|
||||
pname = "prettify";
|
||||
version = "1.0";
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
{ stdenv, gcc, lib, bash, gdb }:
|
||||
|
||||
{
|
||||
stdenv,
|
||||
gcc,
|
||||
lib,
|
||||
bash,
|
||||
gdb,
|
||||
}:
|
||||
stdenv.mkDerivation {
|
||||
pname = "watch";
|
||||
version = "1.0";
|
||||
|
||||
78
package/support-bot/default.nix
Normal file
78
package/support-bot/default.nix
Normal file
@@ -0,0 +1,78 @@
|
||||
{
|
||||
fetchFromGitHub,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
aiogram-newsletter = pkgs.python3Packages.buildPythonPackage {
|
||||
pname = "example-package";
|
||||
version = "0.0.10";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "nessshon";
|
||||
repo = "aiogram-newsletter";
|
||||
rev = "bb8a42e4bcff66a9a606fc92ccc27b1d094b20fc";
|
||||
sha256 = "sha256-atKhccp8Pr8anJUo+M9hnYkYrcgnB9SxrpmsiVusJZs=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [ ];
|
||||
|
||||
meta = {
|
||||
description = "";
|
||||
};
|
||||
};
|
||||
in pkgs.python3Packages.buildPythonPackage {
|
||||
pname = "support-bot";
|
||||
version = "1.0.0";
|
||||
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "nessshon";
|
||||
repo = "support-bot";
|
||||
rev = "9191d9a9ba6bfd81e267b6ca41836db037555976";
|
||||
sha256 = "sha256-94/cGN0OMytrQB66B2WA44bRaz+qXI627C/oE9iFgNU=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
cat > setup.py <<'EOF1'
|
||||
from setuptools import setup
|
||||
|
||||
setup(
|
||||
name="support-bot",
|
||||
version="1.0.0",
|
||||
install_requires=[
|
||||
"aiogram==3.7.0",
|
||||
"aiogram-newsletter>=0.0.10",
|
||||
"cachetools==5.3.2",
|
||||
"environs==10.3.0",
|
||||
"pydantic==2.5.3",
|
||||
"redis==5.0.1",
|
||||
"apscheduler",
|
||||
],
|
||||
entry_points={
|
||||
"console_scripts": [
|
||||
"support-bot=app.entry_point:main",
|
||||
],
|
||||
},
|
||||
)
|
||||
EOF1
|
||||
cat > app/entry_point.py <<'EOF2'
|
||||
def main():
|
||||
import asyncio
|
||||
from .__main__ import main
|
||||
asyncio.run(main())
|
||||
EOF2
|
||||
'';
|
||||
|
||||
propagatedBuildInputs = (with pkgs.python3Packages; [
|
||||
aiogram
|
||||
apscheduler
|
||||
cachetools
|
||||
environs
|
||||
pydantic
|
||||
redis
|
||||
]) ++ [ aiogram-newsletter ];
|
||||
|
||||
meta = {
|
||||
description = "A support bot for GitHub";
|
||||
homepage = "https://github.com/nessshon/support-bot";
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user