style: ~apply alejandra

This commit is contained in:
zerosummed
2025-04-17 03:57:54 +03:00
parent 3dfe3d61f6
commit 29ff6989e5
7 changed files with 299 additions and 234 deletions

View File

@@ -26,16 +26,15 @@
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # 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 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE. # SOFTWARE.
{
{ lib lib,
, cargo-pgrx cargo-pgrx,
, pkg-config pkg-config,
, rustPlatform rustPlatform,
, stdenv stdenv,
, Security Security,
, writeShellScriptBin writeShellScriptBin,
}: }:
# The idea behind: Use it mostly like rustPlatform.buildRustPackage and so # The idea behind: Use it mostly like rustPlatform.buildRustPackage and so
# we hand most of the arguments down. # we hand most of the arguments down.
# #
@@ -46,116 +45,117 @@
# If the generated rust bindings aren't needed to use the extension, its a # 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 # unnecessary and heavy dependency. If you set this to true, you also
# have to add `rustfmt` to `nativeBuildInputs`. # have to add `rustfmt` to `nativeBuildInputs`.
{
{ buildAndTestSubdir ? null buildAndTestSubdir ? null,
, buildType ? "release" buildType ? "release",
, buildFeatures ? [ ] buildFeatures ? [],
, cargoBuildFlags ? [ ] cargoBuildFlags ? [],
, postgresql postgresql,
# cargo-pgrx calls rustfmt on generated bindings, this is not strictly necessary, so we avoid the # 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. # 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. # if you include the generated code in the output via postInstall.
, useFakeRustfmt ? true useFakeRustfmt ? true,
, usePgTestCheckFeature ? true usePgTestCheckFeature ? true,
, ... ...
} @ args: } @ args: let
let
rustfmtInNativeBuildInputs = lib.lists.any (dep: lib.getName dep == "rustfmt") (args.nativeBuildInputs or []); rustfmtInNativeBuildInputs = lib.lists.any (dep: lib.getName dep == "rustfmt") (args.nativeBuildInputs or []);
in in
assert lib.asserts.assertMsg ((args.installPhase or "") == "")
assert lib.asserts.assertMsg ((args.installPhase or "") == "")
"buildPgrxExtensions overwrites the installPhase, so providing one does nothing"; "buildPgrxExtensions overwrites the installPhase, so providing one does nothing";
assert lib.asserts.assertMsg ((args.buildPhase or "") == "") assert lib.asserts.assertMsg ((args.buildPhase or "") == "")
"buildPgrxExtensions overwrites the buildPhase, so providing one does nothing"; "buildPgrxExtensions overwrites the buildPhase, so providing one does nothing";
assert lib.asserts.assertMsg (useFakeRustfmt -> !rustfmtInNativeBuildInputs) 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."; "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) 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."; "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" ''
let exit 0
fakeRustfmt = writeShellScriptBin "rustfmt" ''
exit 0
''; '';
maybeDebugFlag = lib.optionalString (buildType != "release") "--debug"; maybeDebugFlag = lib.optionalString (buildType != "release") "--debug";
maybeEnterBuildAndTestSubdir = lib.optionalString (buildAndTestSubdir != null) '' maybeEnterBuildAndTestSubdir = lib.optionalString (buildAndTestSubdir != null) ''
export CARGO_TARGET_DIR="$(pwd)/target" export CARGO_TARGET_DIR="$(pwd)/target"
pushd "${buildAndTestSubdir}" pushd "${buildAndTestSubdir}"
''; '';
maybeLeaveBuildAndTestSubdir = lib.optionalString (buildAndTestSubdir != null) "popd"; maybeLeaveBuildAndTestSubdir = lib.optionalString (buildAndTestSubdir != null) "popd";
pgrxPostgresMajor = lib.versions.major postgresql.version; pgrxPostgresMajor = lib.versions.major postgresql.version;
preBuildAndTest = '' preBuildAndTest = ''
export PGRX_HOME=$(mktemp -d) export PGRX_HOME=$(mktemp -d)
export PGDATA="$PGRX_HOME/data-${pgrxPostgresMajor}/" export PGDATA="$PGRX_HOME/data-${pgrxPostgresMajor}/"
cargo-pgrx pgrx init "--pg${pgrxPostgresMajor}" ${lib.getDev postgresql}/bin/pg_config cargo-pgrx pgrx init "--pg${pgrxPostgresMajor}" ${lib.getDev postgresql}/bin/pg_config
echo "unix_socket_directories = '$(mktemp -d)'" > "$PGDATA/postgresql.conf" echo "unix_socket_directories = '$(mktemp -d)'" > "$PGDATA/postgresql.conf"
# This is primarily for Mac or other Nix systems that don't use the nixbld user. # This is primarily for Mac or other Nix systems that don't use the nixbld user.
export USER="$(whoami)" export USER="$(whoami)"
pg_ctl start pg_ctl start
createuser -h localhost --superuser --createdb "$USER" || true createuser -h localhost --superuser --createdb "$USER" || true
pg_ctl stop pg_ctl stop
'';
argsForBuildRustPackage = builtins.removeAttrs args [ "postgresql" "useFakeRustfmt" "usePgTestCheckFeature" ];
# so we don't accidentally `(rustPlatform.buildRustPackage argsForBuildRustPackage) // { ... }` because
# we forgot parentheses
finalArgs = argsForBuildRustPackage // {
buildInputs = (args.buildInputs or [ ]) ++ lib.optionals stdenv.hostPlatform.isDarwin [ Security ];
nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [
cargo-pgrx
postgresql
pkg-config
rustPlatform.bindgenHook
] ++ lib.optionals useFakeRustfmt [ fakeRustfmt ];
buildPhase = ''
runHook preBuild
echo "Executing cargo-pgrx buildPhase"
${preBuildAndTest}
${maybeEnterBuildAndTestSubdir}
PGRX_BUILD_FLAGS="--frozen -j $NIX_BUILD_CORES ${builtins.concatStringsSep " " cargoBuildFlags}" \
${lib.optionalString stdenv.hostPlatform.isDarwin ''RUSTFLAGS="''${RUSTFLAGS:+''${RUSTFLAGS} }-Clink-args=-Wl,-undefined,dynamic_lookup"''} \
cargo pgrx package \
--pg-config ${lib.getDev postgresql}/bin/pg_config \
${maybeDebugFlag} \
--features "${builtins.concatStringsSep " " buildFeatures}" \
--out-dir "$out"
${maybeLeaveBuildAndTestSubdir}
runHook postBuild
''; '';
preCheck = preBuildAndTest + args.preCheck or ""; argsForBuildRustPackage = builtins.removeAttrs args ["postgresql" "useFakeRustfmt" "usePgTestCheckFeature"];
installPhase = '' # so we don't accidentally `(rustPlatform.buildRustPackage argsForBuildRustPackage) // { ... }` because
runHook preInstall # we forgot parentheses
finalArgs =
argsForBuildRustPackage
// {
buildInputs = (args.buildInputs or []) ++ lib.optionals stdenv.hostPlatform.isDarwin [Security];
echo "Executing buildPgrxExtension install" nativeBuildInputs =
(args.nativeBuildInputs or [])
++ [
cargo-pgrx
postgresql
pkg-config
rustPlatform.bindgenHook
]
++ lib.optionals useFakeRustfmt [fakeRustfmt];
${maybeEnterBuildAndTestSubdir} buildPhase = ''
runHook preBuild
cargo-pgrx pgrx stop all echo "Executing cargo-pgrx buildPhase"
${preBuildAndTest}
${maybeEnterBuildAndTestSubdir}
mv $out/${postgresql}/* $out PGRX_BUILD_FLAGS="--frozen -j $NIX_BUILD_CORES ${builtins.concatStringsSep " " cargoBuildFlags}" \
rm -rf $out/nix ${lib.optionalString stdenv.hostPlatform.isDarwin ''RUSTFLAGS="''${RUSTFLAGS:+''${RUSTFLAGS} }-Clink-args=-Wl,-undefined,dynamic_lookup"''} \
cargo pgrx package \
--pg-config ${lib.getDev postgresql}/bin/pg_config \
${maybeDebugFlag} \
--features "${builtins.concatStringsSep " " buildFeatures}" \
--out-dir "$out"
${maybeLeaveBuildAndTestSubdir} ${maybeLeaveBuildAndTestSubdir}
runHook postInstall runHook postBuild
''; '';
PGRX_PG_SYS_SKIP_BINDING_REWRITE = "1"; preCheck = preBuildAndTest + args.preCheck or "";
CARGO_BUILD_INCREMENTAL = "false";
RUST_BACKTRACE = "full";
checkNoDefaultFeatures = true; installPhase = ''
checkFeatures = (args.checkFeatures or [ ]) ++ (lib.optionals usePgTestCheckFeature [ "pg_test" ]) ++ [ "pg${pgrxPostgresMajor}" ]; runHook preInstall
};
in echo "Executing buildPgrxExtension install"
rustPlatform.buildRustPackage finalArgs
${maybeEnterBuildAndTestSubdir}
cargo-pgrx pgrx stop all
mv $out/${postgresql}/* $out
rm -rf $out/nix
${maybeLeaveBuildAndTestSubdir}
runHook postInstall
'';
PGRX_PG_SYS_SKIP_BINDING_REWRITE = "1";
CARGO_BUILD_INCREMENTAL = "false";
RUST_BACKTRACE = "full";
checkNoDefaultFeatures = true;
checkFeatures = (args.checkFeatures or []) ++ (lib.optionals usePgTestCheckFeature ["pg_test"]) ++ ["pg${pgrxPostgresMajor}"];
};
in
rustPlatform.buildRustPackage finalArgs

277
flake.nix
View File

@@ -60,7 +60,7 @@
system, system,
pkgs, pkgs,
}: let }: let
pkgs-unstable = import nixpkgs-unstable { inherit system; }; pkgs-unstable = import nixpkgs-unstable {inherit system;};
in { in {
packages.${system} = let packages.${system} = let
rust = { rust = {
@@ -79,7 +79,7 @@
version = "3.4.3"; version = "3.4.3";
src = pkgs.python3Packages.fetchPypi { src = pkgs.python3Packages.fetchPypi {
inherit pname version; inherit pname version;
sha256 = "sha256-gzYP+LyXmA5P8lyWTHvTkj0zPRd6pPf7c2sBnybHy0E="; sha256 = "sha256-gzYP+LyXmA5P8lyWTHvTkj0zPRd6pPf7c2sBnybHy0E=";
}; };
}; };
py3-cryptomus = pkgs.python3Packages.buildPythonPackage rec { py3-cryptomus = pkgs.python3Packages.buildPythonPackage rec {
@@ -87,7 +87,7 @@
version = "1.1"; version = "1.1";
src = pkgs.python3Packages.fetchPypi { src = pkgs.python3Packages.fetchPypi {
inherit pname version; inherit pname version;
sha256 = "sha256-f0BBGfemKxMdz+LMvawWqqRfmF+TrCpMwgtJEYt+fgU="; sha256 = "sha256-f0BBGfemKxMdz+LMvawWqqRfmF+TrCpMwgtJEYt+fgU=";
}; };
}; };
py3-modulegraph = pkgs.python3Packages.buildPythonPackage rec { py3-modulegraph = pkgs.python3Packages.buildPythonPackage rec {
@@ -95,7 +95,7 @@
version = "0.19.6"; version = "0.19.6";
src = pkgs.python3Packages.fetchPypi { src = pkgs.python3Packages.fetchPypi {
inherit pname version; inherit pname version;
sha256 = "sha256-yRTIyVoOEP6IUF1OnCKEtOPbxwlD4wbMZWfjbMVBv0s="; sha256 = "sha256-yRTIyVoOEP6IUF1OnCKEtOPbxwlD4wbMZWfjbMVBv0s=";
}; };
}; };
py3-swifter = pkgs.python3Packages.buildPythonPackage rec { py3-swifter = pkgs.python3Packages.buildPythonPackage rec {
@@ -103,15 +103,15 @@
version = "1.4.0"; version = "1.4.0";
src = pkgs.python3Packages.fetchPypi { src = pkgs.python3Packages.fetchPypi {
inherit pname version; inherit pname version;
sha256 = "sha256-4bt0R2ohs/B6F6oYyX/cuoWZcmvRfacy8J2rzFDia6A="; sha256 = "sha256-4bt0R2ohs/B6F6oYyX/cuoWZcmvRfacy8J2rzFDia6A=";
}; };
}; };
py3-aiogram-newsletter = pkgs.python3Packages.buildPythonPackage rec { py3-aiogram-newsletter = pkgs.python3Packages.buildPythonPackage rec {
pname = "aiogram-newsletter"; pname = "aiogram-newsletter";
version = "0.0.10"; version = "0.0.10";
src = pkgs.fetchFromGitHub { src = pkgs.fetchFromGitHub {
inherit pname version; inherit pname version;
owner = "nessshon"; owner = "nessshon";
repo = "aiogram-newsletter"; repo = "aiogram-newsletter";
rev = "bb8a42e4bcff66a9a606fc92ccc27b1d094b20fc"; rev = "bb8a42e4bcff66a9a606fc92ccc27b1d094b20fc";
@@ -133,7 +133,7 @@
pg-migration = pkgs.callPackage ./package/postgres/pg-migration/default.nix rust.commonArgs; pg-migration = pkgs.callPackage ./package/postgres/pg-migration/default.nix rust.commonArgs;
c-hectic = pkgs.callPackage ./package/c/hectic/default.nix {}; c-hectic = pkgs.callPackage ./package/c/hectic/default.nix {};
watch = pkgs.callPackage ./package/c/watch/default.nix {}; watch = pkgs.callPackage ./package/c/watch/default.nix {};
hmpl = pkgs.callPackage ./package/c/hmpl/default.nix { hmpl = pkgs.callPackage ./package/c/hmpl/default.nix {
hectic = self.packages.${system}.hectic; hectic = self.packages.${system}.hectic;
}; };
}; };
@@ -142,23 +142,23 @@
shells = self.devShells.${system}; shells = self.devShells.${system};
in { in {
c = pkgs.mkShell { c = pkgs.mkShell {
buildInputs = (with pkgs; [ inotify-tools gdb gcc ]) ++ (with self.packages.${system}; [ c-hectic nvim-pager watch ]); buildInputs = (with pkgs; [inotify-tools gdb gcc]) ++ (with self.packages.${system}; [c-hectic nvim-pager watch]);
PAGER = "${self.packages.${system}.nvim-pager}/bin/pager"; PAGER = "${self.packages.${system}.nvim-pager}/bin/pager";
}; };
postgres-c = pkgs.mkShell { postgres-c = pkgs.mkShell {
buildInputs = (with pkgs; [ inotify-tools postgresql_15 ]) ++ (with self.packages.${system}; [ nvim-pager ]) ++ (with pkgs-unstable; [ gdb gcc ]); buildInputs = (with pkgs; [inotify-tools postgresql_15]) ++ (with self.packages.${system}; [nvim-pager]) ++ (with pkgs-unstable; [gdb gcc]);
PAGER = "${self.packages.${system}.nvim-pager}/bin/pager"; PAGER = "${self.packages.${system}.nvim-pager}/bin/pager";
shellHook = '' shellHook = ''
export PATH=${pkgs-unstable.gcc}/bin:$PATH export PATH=${pkgs-unstable.gcc}/bin:$PATH
export PAGER="${self.packages.${system}.nvim-pager}/bin/pager" export PAGER="${self.packages.${system}.nvim-pager}/bin/pager"
''; '';
}; };
pure-c = pkgs.mkShell { pure-c = pkgs.mkShell {
buildInputs = (with pkgs; [ inotify-tools ]) ++ (with self.packages.${system}; [ nvim-pager ]) ++ (with pkgs-unstable; [ gdb gcc ]); buildInputs = (with pkgs; [inotify-tools]) ++ (with self.packages.${system}; [nvim-pager]) ++ (with pkgs-unstable; [gdb gcc]);
PAGER = "${self.packages.${system}.nvim-pager}/bin/pager"; PAGER = "${self.packages.${system}.nvim-pager}/bin/pager";
shellHook = '' shellHook = ''
export PATH=${pkgs-unstable.gcc}/bin:$PATH export PATH=${pkgs-unstable.gcc}/bin:$PATH
export PAGER="${self.packages.${system}.nvim-pager}/bin/pager" export PAGER="${self.packages.${system}.nvim-pager}/bin/pager"
''; '';
@@ -204,47 +204,63 @@
modules = [ modules = [
self.nixosModules."preset.default" self.nixosModules."preset.default"
self.nixosModules."hardware.hetzner" self.nixosModules."hardware.hetzner"
({modulesPath, pkgs, ...}: { ({
modulesPath,
pkgs,
...
}: {
imports = [ imports = [
(modulesPath + "/profiles/qemu-guest.nix") (modulesPath + "/profiles/qemu-guest.nix")
]; ];
users.users.root.openssh.authorizedKeys.keys = [ ]; users.users.root.openssh.authorizedKeys.keys = [];
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
(pkgs.writers.writeMinCBin "minc-hello-world" ["<stdio.h>"] /*c*/ '' (pkgs.writers.writeMinCBin "minc-hello-world" ["<stdio.h>"]
printf("hello world\n"); /*
'') c
(pkgs.writers.writeMinCBin "minc-env" ["<stdio.h>" "<stdlib.h>"] /*c*/ '' */
char *env_name; ''
if (argc > 1) { printf("hello world\n");
env_name = argv[1]; '')
} else { (pkgs.writers.writeMinCBin "minc-env" ["<stdio.h>" "<stdlib.h>"]
env_name = "HOME"; /*
} c
char *value = getenv(env_name); */
if (value) { ''
printf("%s: %s\n", env_name, value); char *env_name;
} else { if (argc > 1) {
printf("Environment variable %s not found.\n", env_name); env_name = argv[1];
} } else {
'') env_name = "HOME";
(pkgs.writers.writeMinCBin "minc-env-check" ["<stdio.h>" "<stdlib.h>"] /*c*/ '' }
char *env_name; char *value = getenv(env_name);
if (argc > 1) { if (value) {
env_name = argv[1]; printf("%s: %s\n", env_name, value);
} else { } else {
env_name = "HOME"; printf("Environment variable %s not found.\n", env_name);
} }
'')
(pkgs.writers.writeMinCBin "minc-env-check" ["<stdio.h>" "<stdlib.h>"]
/*
c
*/
''
char *env_name;
if (argc > 1) {
env_name = argv[1];
} else {
env_name = "HOME";
}
char *value = getenv(env_name); char *value = getenv(env_name);
if (value) { if (value) {
char buffer[128]; char buffer[128];
sprintf(buffer, "echo $%s\n", env_name); sprintf(buffer, "echo $%s\n", env_name);
system(buffer); system(buffer);
} else { } else {
printf("Environment variable %s not found.\n", env_name); printf("Environment variable %s not found.\n", env_name);
} }
'') '')
]; ];
programs.zsh.shellAliases = { programs.zsh.shellAliases = {
jc = ''journalctl''; jc = ''journalctl'';
@@ -257,17 +273,17 @@
vmVariant = { vmVariant = {
systemd.services.fix-root-perms = { systemd.services.fix-root-perms = {
description = "Fix root directory permissions"; description = "Fix root directory permissions";
after = [ "local-fs.target" ]; after = ["local-fs.target"];
wantedBy = [ "multi-user.target" ]; wantedBy = ["multi-user.target"];
serviceConfig = { serviceConfig = {
Type = "oneshot"; Type = "oneshot";
ExecStart = "${pkgs.coreutils}/bin/chmod 755 /"; ExecStart = "${pkgs.coreutils}/bin/chmod 755 /";
}; };
}; };
virtualisation = { virtualisation = {
diskSize = 1024*6; diskSize = 1024 * 6;
diskImage = null; diskImage = null;
forwardPorts = [ ]; forwardPorts = [];
}; };
}; };
}; };
@@ -279,7 +295,10 @@
}; };
}) })
]; ];
pkgs = import nixpkgs {inherit system; overlays = [ self.overlays.default ];}; pkgs = import nixpkgs {
inherit system;
overlays = [self.overlays.default];
};
}; };
}) })
// { // {
@@ -369,22 +388,21 @@
overlays.default = final: prev: ( overlays.default = final: prev: (
let let
version = "1.6.1"; version = "1.6.1";
pkgs-unstable = import nixpkgs-unstable { inherit (prev) system; }; pkgs-unstable = import nixpkgs-unstable {inherit (prev) system;};
buildPgrxExtension = buildPgrxExtension =
prev.callPackage (import (builtins.path { prev.callPackage (import (builtins.path {
name = "extension-builder"; name = "extension-builder";
path = ./buildPgrxExtension.nix; path = ./buildPgrxExtension.nix;
})) { })) {
cargo-pgrx = pkgs-unstable.cargo-pgrx_0_12_6; cargo-pgrx = pkgs-unstable.cargo-pgrx_0_12_6;
inherit (pkgs-unstable.darwin.apple_sdk.frameworks) Security; inherit (pkgs-unstable.darwin.apple_sdk.frameworks) Security;
}; };
buildPostgresqlExtension = buildPostgresqlExtension = prev.callPackage (import (builtins.path {
prev.callPackage (import (builtins.path { name = "extension-builder";
name = "extension-builder"; path = ./buildPostgresqlExtension.nix;
path = ./buildPostgresqlExtension.nix; }));
}));
buildSmtpExt = versionSuffix: let buildSmtpExt = versionSuffix: let
postgresql = prev."postgresql_${versionSuffix}"; postgresql = prev."postgresql_${versionSuffix}";
@@ -399,18 +417,19 @@
buildPgrxExtension { buildPgrxExtension {
pname = cargo.package.name; pname = cargo.package.name;
version = cargo.package.version; version = cargo.package.version;
inherit src postgresql; inherit src postgresql;
buildInputs = with prev; [ openssl ]; buildInputs = with prev; [openssl];
cargoHash = "sha256-AbLT7vcFV89zwZIaTC1ELat9l4UeNP8Bn9QMMOms1Co="; cargoHash = "sha256-AbLT7vcFV89zwZIaTC1ELat9l4UeNP8Bn9QMMOms1Co=";
doCheck = false; doCheck = false;
}; };
buildPlHaskellExt = versionSuffix: let buildPlHaskellExt = versionSuffix: let
version = "4.0"; version = "4.0";
in buildPostgresqlExtension { in
buildPostgresqlExtension {
postgresql = prev."postgresql_${versionSuffix}"; postgresql = prev."postgresql_${versionSuffix}";
} { } {
pname = "plhaskell"; pname = "plhaskell";
@@ -439,36 +458,61 @@
}; };
in { in {
hectic = self.packages.${prev.system}; hectic = self.packages.${prev.system};
postgresql_17 = prev.postgresql_17 // {pkgs = prev.postgresql_17.pkgs // { postgresql_17 =
http = buildHttpExt "17"; prev.postgresql_17
pg_smtp_client = buildSmtpExt "17"; // {
plhaskell = buildPlHaskellExt "15"; pkgs =
postgreact = prev.callPackage ./package/c/postgreact/default.nix { postgresql = prev.postgresql_17; }; prev.postgresql_17.pkgs
};}; // {
postgresql_16 = prev.postgresql_16 // {pkgs = prev.postgresql_16.pkgs // { http = buildHttpExt "17";
http = buildHttpExt "16"; pg_smtp_client = buildSmtpExt "17";
pg_smtp_client = buildSmtpExt "16"; plhaskell = buildPlHaskellExt "15";
plhaskell = buildPlHaskellExt "15"; postgreact = prev.callPackage ./package/c/postgreact/default.nix {postgresql = prev.postgresql_17;};
postgreact = prev.callPackage ./package/c/postgreact/default.nix { postgresql = prev.postgresql_16; }; };
};}; };
postgresql_15 = prev.postgresql_15 // {pkgs = prev.postgresql_15.pkgs // { postgresql_16 =
http = buildHttpExt "15"; prev.postgresql_16
pg_smtp_client = buildSmtpExt "15"; // {
plhaskell = buildPlHaskellExt "15"; pkgs =
postgreact = prev.callPackage ./package/c/postgreact/default.nix { postgresql = prev.postgresql_15; }; prev.postgresql_16.pkgs
};}; // {
postgresql_14 = prev.postgresql_14 // {pkgs = prev.postgresql_14.pkgs // { http = buildHttpExt "16";
http = buildHttpExt "14"; pg_smtp_client = buildSmtpExt "16";
pg_smtp_client = buildSmtpExt "14"; plhaskell = buildPlHaskellExt "15";
plhaskell = buildPlHaskellExt "15"; postgreact = prev.callPackage ./package/c/postgreact/default.nix {postgresql = prev.postgresql_16;};
postgreact = prev.callPackage ./package/c/postgreact/default.nix { postgresql = prev.postgresql_14; }; };
};}; };
postgresql_15 =
prev.postgresql_15
// {
pkgs =
prev.postgresql_15.pkgs
// {
http = buildHttpExt "15";
pg_smtp_client = buildSmtpExt "15";
plhaskell = buildPlHaskellExt "15";
postgreact = prev.callPackage ./package/c/postgreact/default.nix {postgresql = prev.postgresql_15;};
};
};
postgresql_14 =
prev.postgresql_14
// {
pkgs =
prev.postgresql_14.pkgs
// {
http = buildHttpExt "14";
pg_smtp_client = buildSmtpExt "14";
plhaskell = buildPlHaskellExt "15";
postgreact = prev.callPackage ./package/c/postgreact/default.nix {postgresql = prev.postgresql_14;};
};
};
writers = let writers = let
writeC = writeC = name: argsOrScript:
name: argsOrScript: if lib.isAttrs argsOrScript && !lib.isDerivation argsOrScript
if lib.isAttrs argsOrScript && !lib.isDerivation argsOrScript then then
prev.writers.makeBinWriter ( prev.writers.makeBinWriter (
argsOrScript // { argsOrScript
// {
compileScript = '' compileScript = ''
# Force gcc to treat the input file as C code # Force gcc to treat the input file as C code
${prev.gcc}/bin/gcc -fsyntax-only -xc $contentPath ${prev.gcc}/bin/gcc -fsyntax-only -xc $contentPath
@@ -479,7 +523,8 @@
${prev.gcc}/bin/gcc -xc -o $out $contentPath ${prev.gcc}/bin/gcc -xc -o $out $contentPath
''; '';
} }
) name )
name
else else
prev.writers.makeBinWriter { prev.writers.makeBinWriter {
compileScript = '' compileScript = ''
@@ -491,29 +536,35 @@
fi fi
${prev.gcc}/bin/gcc -xc -o $out $contentPath ${prev.gcc}/bin/gcc -xc -o $out $contentPath
''; '';
} name argsOrScript; }
writeMinC = name
name: includes: body: argsOrScript;
writeC name '' writeMinC = name: includes: body:
${builtins.concatStringsSep "\n" (map (h: "#include " + h) includes)} writeC name ''
${builtins.concatStringsSep "\n" (map (h: "#include " + h) includes)}
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
${body} ${body}
} }
''; '';
in prev.writers // { in
writeCBin = name: writeC "/bin/${name}"; prev.writers
writeC = writeC; // {
writeMinCBin = name: includes: body: writeMinC "/bin/${name}" includes body; writeCBin = name: writeC "/bin/${name}";
writeMinC = writeMinC; writeC = writeC;
}; writeMinCBin = name: includes: body: writeMinC "/bin/${name}" includes body;
writeMinC = writeMinC;
};
} }
); );
lib = { lib = {
# -- For all systems -- # -- For all systems --
inherit dotEnv minorEnvironment parseEnv forAllSystemsWithPkgs forSpecSystemsWithPkgs; inherit dotEnv minorEnvironment parseEnv forAllSystemsWithPkgs forSpecSystemsWithPkgs;
readEnvironment = { envVarsToRead, prefix ? "" }: readEnvironment = {
envVarsToRead,
prefix ? "",
}:
builtins.listToAttrs builtins.listToAttrs
(map (name: { (map (name: {
inherit name; inherit name;

View File

@@ -1,12 +1,17 @@
{ stdenv, gcc, lib, bash, inotify-tools }: {
stdenv,
gcc,
lib,
bash,
inotify-tools,
}:
stdenv.mkDerivation { stdenv.mkDerivation {
pname = "hectic"; pname = "hectic";
version = "1.0"; version = "1.0";
src = ./.; src = ./.;
doCheck = true; doCheck = true;
nativeBuildInputs = [ gcc inotify-tools ]; nativeBuildInputs = [gcc inotify-tools];
buildPhase = '' buildPhase = ''
ls ls

View File

@@ -3,12 +3,11 @@
stdenv, stdenv,
postgresql, postgresql,
... ...
}: }:
stdenv.mkDerivation { stdenv.mkDerivation {
pname = "postgreact"; pname = "postgreact";
version = "0.1"; version = "0.1";
src = ./.; src = ./.;
buildInputs = [ buildInputs = [
@@ -22,10 +21,10 @@ stdenv.mkDerivation {
installPhase = '' installPhase = ''
mkdir -p $out/lib/postgresql $out/share/postgresql/extension mkdir -p $out/lib/postgresql $out/share/postgresql/extension
# Install compiled library # Install compiled library
install -m 755 -D target/postgreact.so $out/lib/postgresql/postgreact.so install -m 755 -D target/postgreact.so $out/lib/postgresql/postgreact.so
# Install control and SQL files # Install control and SQL files
install -m 644 -D postgreact.control $out/share/postgresql/extension/postgreact.control install -m 644 -D postgreact.control $out/share/postgresql/extension/postgreact.control
install -m 644 -D postgreact--0.1.sql $out/share/postgresql/extension/postgreact--0.1.sql install -m 644 -D postgreact--0.1.sql $out/share/postgresql/extension/postgreact--0.1.sql
@@ -36,6 +35,6 @@ stdenv.mkDerivation {
homepage = "https://github.com/yukkop/util.nix"; homepage = "https://github.com/yukkop/util.nix";
license = licenses.mit; license = licenses.mit;
platforms = postgresql.meta.platforms; platforms = postgresql.meta.platforms;
maintainers = with maintainers; [ ]; maintainers = with maintainers; [];
}; };
} }

View File

@@ -1,12 +1,17 @@
{ stdenv, gcc, lib, bash, c-hectic }: {
stdenv,
gcc,
lib,
bash,
c-hectic,
}:
stdenv.mkDerivation { stdenv.mkDerivation {
pname = "prettify"; pname = "prettify";
version = "1.0"; version = "1.0";
src = ./.; src = ./.;
doCheck = false; doCheck = false;
nativeBuildInputs = [ gcc c-hectic ]; nativeBuildInputs = [gcc c-hectic];
buildPhase = '' buildPhase = ''
ls ls

View File

@@ -1,12 +1,17 @@
{ stdenv, gcc, lib, bash, gdb }: {
stdenv,
gcc,
lib,
bash,
gdb,
}:
stdenv.mkDerivation { stdenv.mkDerivation {
pname = "watch"; pname = "watch";
version = "1.0"; version = "1.0";
src = ./.; src = ./.;
doCheck = false; doCheck = false;
nativeBuildInputs = [ gcc gdb ]; nativeBuildInputs = [gcc gdb];
buildPhase = '' buildPhase = ''
${bash}/bin/sh ./make.sh build ${bash}/bin/sh ./make.sh build
@@ -25,4 +30,4 @@ stdenv.mkDerivation {
description = "watch"; description = "watch";
license = lib.licenses.mit; license = lib.licenses.mit;
}; };
} }

View File

@@ -16,7 +16,7 @@ in
cargoLock.lockFile = ./Cargo.lock; cargoLock.lockFile = ./Cargo.lock;
buildInputs = [ postgresql_15 ]; buildInputs = [postgresql_15];
doCheck = true; doCheck = true;
} }