From 3dfe3d61f6df57d47d6bc8c167bf81da3468f309 Mon Sep 17 00:00:00 2001 From: zerosummed Date: Thu, 17 Apr 2025 03:46:53 +0300 Subject: [PATCH 1/7] refactor: `postgreact`: ~file modes, control file --- package/c/postgreact/default.nix | 0 package/c/postgreact/postgreact--0.1.sql | 0 package/c/postgreact/postgreact.c | 0 package/c/postgreact/postgreact.control | 5 +++-- 4 files changed, 3 insertions(+), 2 deletions(-) mode change 100755 => 100644 package/c/postgreact/default.nix mode change 100755 => 100644 package/c/postgreact/postgreact--0.1.sql mode change 100755 => 100644 package/c/postgreact/postgreact.c mode change 100755 => 100644 package/c/postgreact/postgreact.control diff --git a/package/c/postgreact/default.nix b/package/c/postgreact/default.nix old mode 100755 new mode 100644 diff --git a/package/c/postgreact/postgreact--0.1.sql b/package/c/postgreact/postgreact--0.1.sql old mode 100755 new mode 100644 diff --git a/package/c/postgreact/postgreact.c b/package/c/postgreact/postgreact.c old mode 100755 new mode 100644 diff --git a/package/c/postgreact/postgreact.control b/package/c/postgreact/postgreact.control old mode 100755 new mode 100644 index aab9bfd..6843cfe --- a/package/c/postgreact/postgreact.control +++ b/package/c/postgreact/postgreact.control @@ -1,3 +1,4 @@ comment = 'My first extension' -default_version = '0.1' -module_pathname = '$libdir/postgreact' \ No newline at end of file +default_version = '1.0' +module_pathname = $libdir/postgreact +relocatable = true From 29ff6989e5bb6f28887d8ed088fa6567b0bb967f Mon Sep 17 00:00:00 2001 From: zerosummed Date: Thu, 17 Apr 2025 03:57:54 +0300 Subject: [PATCH 2/7] style: ~apply `alejandra` --- buildPgrxExtension.nix | 206 ++++++++-------- flake.nix | 277 +++++++++++++--------- package/c/hectic/default.nix | 11 +- package/c/postgreact/default.nix | 13 +- package/c/prettify/default.nix | 11 +- package/c/watch/default.nix | 13 +- package/postgres/pg-migration/default.nix | 2 +- 7 files changed, 299 insertions(+), 234 deletions(-) diff --git a/buildPgrxExtension.nix b/buildPgrxExtension.nix index 89293ab..eb45f69 100644 --- a/buildPgrxExtension.nix +++ b/buildPgrxExtension.nix @@ -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,116 +45,117 @@ # 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 -# 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 +{ + 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 rustfmtInNativeBuildInputs = lib.lists.any (dep: lib.getName dep == "rustfmt") (args.nativeBuildInputs or []); in - -assert lib.asserts.assertMsg ((args.installPhase or "") == "") + assert lib.asserts.assertMsg ((args.installPhase or "") == "") "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"; -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."; -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 - fakeRustfmt = writeShellScriptBin "rustfmt" '' - exit 0 + 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 + fakeRustfmt = writeShellScriptBin "rustfmt" '' + exit 0 ''; - maybeDebugFlag = lib.optionalString (buildType != "release") "--debug"; - maybeEnterBuildAndTestSubdir = lib.optionalString (buildAndTestSubdir != null) '' - export CARGO_TARGET_DIR="$(pwd)/target" - pushd "${buildAndTestSubdir}" - ''; - maybeLeaveBuildAndTestSubdir = lib.optionalString (buildAndTestSubdir != null) "popd"; + maybeDebugFlag = lib.optionalString (buildType != "release") "--debug"; + maybeEnterBuildAndTestSubdir = lib.optionalString (buildAndTestSubdir != null) '' + export CARGO_TARGET_DIR="$(pwd)/target" + pushd "${buildAndTestSubdir}" + ''; + maybeLeaveBuildAndTestSubdir = lib.optionalString (buildAndTestSubdir != null) "popd"; - pgrxPostgresMajor = lib.versions.major postgresql.version; - preBuildAndTest = '' - export PGRX_HOME=$(mktemp -d) - export PGDATA="$PGRX_HOME/data-${pgrxPostgresMajor}/" - cargo-pgrx pgrx init "--pg${pgrxPostgresMajor}" ${lib.getDev postgresql}/bin/pg_config - echo "unix_socket_directories = '$(mktemp -d)'" > "$PGDATA/postgresql.conf" + pgrxPostgresMajor = lib.versions.major postgresql.version; + preBuildAndTest = '' + export PGRX_HOME=$(mktemp -d) + export PGDATA="$PGRX_HOME/data-${pgrxPostgresMajor}/" + cargo-pgrx pgrx init "--pg${pgrxPostgresMajor}" ${lib.getDev postgresql}/bin/pg_config + 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. - export USER="$(whoami)" - pg_ctl start - createuser -h localhost --superuser --createdb "$USER" || true - 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 + # This is primarily for Mac or other Nix systems that don't use the nixbld user. + export USER="$(whoami)" + pg_ctl start + createuser -h localhost --superuser --createdb "$USER" || true + pg_ctl stop ''; - preCheck = preBuildAndTest + args.preCheck or ""; + argsForBuildRustPackage = builtins.removeAttrs args ["postgresql" "useFakeRustfmt" "usePgTestCheckFeature"]; - installPhase = '' - runHook preInstall + # so we don't accidentally `(rustPlatform.buildRustPackage argsForBuildRustPackage) // { ... }` because + # 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 - rm -rf $out/nix + 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} + ${maybeLeaveBuildAndTestSubdir} - runHook postInstall - ''; + runHook postBuild + ''; - PGRX_PG_SYS_SKIP_BINDING_REWRITE = "1"; - CARGO_BUILD_INCREMENTAL = "false"; - RUST_BACKTRACE = "full"; + preCheck = preBuildAndTest + args.preCheck or ""; - checkNoDefaultFeatures = true; - checkFeatures = (args.checkFeatures or [ ]) ++ (lib.optionals usePgTestCheckFeature [ "pg_test" ]) ++ [ "pg${pgrxPostgresMajor}" ]; - }; -in -rustPlatform.buildRustPackage finalArgs + installPhase = '' + runHook preInstall + + echo "Executing buildPgrxExtension install" + + ${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 diff --git a/flake.nix b/flake.nix index 9386da6..35e5b92 100644 --- a/flake.nix +++ b/flake.nix @@ -60,7 +60,7 @@ system, pkgs, }: let - pkgs-unstable = import nixpkgs-unstable { inherit system; }; + pkgs-unstable = import nixpkgs-unstable {inherit system;}; in { packages.${system} = let rust = { @@ -79,7 +79,7 @@ version = "3.4.3"; src = pkgs.python3Packages.fetchPypi { inherit pname version; - sha256 = "sha256-gzYP+LyXmA5P8lyWTHvTkj0zPRd6pPf7c2sBnybHy0E="; + sha256 = "sha256-gzYP+LyXmA5P8lyWTHvTkj0zPRd6pPf7c2sBnybHy0E="; }; }; py3-cryptomus = pkgs.python3Packages.buildPythonPackage rec { @@ -87,7 +87,7 @@ version = "1.1"; src = pkgs.python3Packages.fetchPypi { inherit pname version; - sha256 = "sha256-f0BBGfemKxMdz+LMvawWqqRfmF+TrCpMwgtJEYt+fgU="; + sha256 = "sha256-f0BBGfemKxMdz+LMvawWqqRfmF+TrCpMwgtJEYt+fgU="; }; }; py3-modulegraph = pkgs.python3Packages.buildPythonPackage rec { @@ -95,7 +95,7 @@ version = "0.19.6"; src = pkgs.python3Packages.fetchPypi { inherit pname version; - sha256 = "sha256-yRTIyVoOEP6IUF1OnCKEtOPbxwlD4wbMZWfjbMVBv0s="; + sha256 = "sha256-yRTIyVoOEP6IUF1OnCKEtOPbxwlD4wbMZWfjbMVBv0s="; }; }; py3-swifter = pkgs.python3Packages.buildPythonPackage rec { @@ -103,15 +103,15 @@ version = "1.4.0"; src = pkgs.python3Packages.fetchPypi { inherit pname version; - sha256 = "sha256-4bt0R2ohs/B6F6oYyX/cuoWZcmvRfacy8J2rzFDia6A="; + sha256 = "sha256-4bt0R2ohs/B6F6oYyX/cuoWZcmvRfacy8J2rzFDia6A="; }; }; py3-aiogram-newsletter = pkgs.python3Packages.buildPythonPackage rec { pname = "aiogram-newsletter"; version = "0.0.10"; - + src = pkgs.fetchFromGitHub { - inherit pname version; + inherit pname version; owner = "nessshon"; repo = "aiogram-newsletter"; rev = "bb8a42e4bcff66a9a606fc92ccc27b1d094b20fc"; @@ -133,7 +133,7 @@ pg-migration = pkgs.callPackage ./package/postgres/pg-migration/default.nix rust.commonArgs; c-hectic = pkgs.callPackage ./package/c/hectic/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; }; }; @@ -142,23 +142,23 @@ shells = self.devShells.${system}; in { 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"; }; - postgres-c = pkgs.mkShell { - buildInputs = (with pkgs; [ inotify-tools postgresql_15 ]) ++ (with self.packages.${system}; [ nvim-pager ]) ++ (with pkgs-unstable; [ gdb gcc ]); + postgres-c = pkgs.mkShell { + 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"; - shellHook = '' + shellHook = '' export PATH=${pkgs-unstable.gcc}/bin:$PATH export PAGER="${self.packages.${system}.nvim-pager}/bin/pager" ''; }; - pure-c = pkgs.mkShell { - buildInputs = (with pkgs; [ inotify-tools ]) ++ (with self.packages.${system}; [ nvim-pager ]) ++ (with pkgs-unstable; [ gdb gcc ]); + pure-c = pkgs.mkShell { + buildInputs = (with pkgs; [inotify-tools]) ++ (with self.packages.${system}; [nvim-pager]) ++ (with pkgs-unstable; [gdb gcc]); PAGER = "${self.packages.${system}.nvim-pager}/bin/pager"; - shellHook = '' + shellHook = '' export PATH=${pkgs-unstable.gcc}/bin:$PATH export PAGER="${self.packages.${system}.nvim-pager}/bin/pager" ''; @@ -204,47 +204,63 @@ modules = [ self.nixosModules."preset.default" self.nixosModules."hardware.hetzner" - ({modulesPath, pkgs, ...}: { + ({ + modulesPath, + pkgs, + ... + }: { imports = [ (modulesPath + "/profiles/qemu-guest.nix") ]; - users.users.root.openssh.authorizedKeys.keys = [ ]; + users.users.root.openssh.authorizedKeys.keys = []; environment.systemPackages = with pkgs; [ - (pkgs.writers.writeMinCBin "minc-hello-world" [""] /*c*/ '' - printf("hello world\n"); - '') - (pkgs.writers.writeMinCBin "minc-env" ["" ""] /*c*/ '' - char *env_name; - if (argc > 1) { - env_name = argv[1]; - } else { - env_name = "HOME"; - } - char *value = getenv(env_name); - if (value) { - printf("%s: %s\n", env_name, value); - } else { - printf("Environment variable %s not found.\n", env_name); - } - '') - (pkgs.writers.writeMinCBin "minc-env-check" ["" ""] /*c*/ '' - char *env_name; - if (argc > 1) { - env_name = argv[1]; - } else { - env_name = "HOME"; - } + (pkgs.writers.writeMinCBin "minc-hello-world" [""] + /* + c + */ + '' + printf("hello world\n"); + '') + (pkgs.writers.writeMinCBin "minc-env" ["" ""] + /* + c + */ + '' + char *env_name; + if (argc > 1) { + env_name = argv[1]; + } else { + env_name = "HOME"; + } + char *value = getenv(env_name); + if (value) { + printf("%s: %s\n", env_name, value); + } else { + printf("Environment variable %s not found.\n", env_name); + } + '') + (pkgs.writers.writeMinCBin "minc-env-check" ["" ""] + /* + c + */ + '' + char *env_name; + if (argc > 1) { + env_name = argv[1]; + } else { + env_name = "HOME"; + } - char *value = getenv(env_name); - if (value) { - char buffer[128]; - sprintf(buffer, "echo $%s\n", env_name); - system(buffer); - } else { - printf("Environment variable %s not found.\n", env_name); - } - '') + char *value = getenv(env_name); + if (value) { + char buffer[128]; + sprintf(buffer, "echo $%s\n", env_name); + system(buffer); + } else { + printf("Environment variable %s not found.\n", env_name); + } + '') ]; programs.zsh.shellAliases = { jc = ''journalctl''; @@ -257,17 +273,17 @@ vmVariant = { systemd.services.fix-root-perms = { description = "Fix root directory permissions"; - after = [ "local-fs.target" ]; - wantedBy = [ "multi-user.target" ]; + after = ["local-fs.target"]; + wantedBy = ["multi-user.target"]; serviceConfig = { Type = "oneshot"; ExecStart = "${pkgs.coreutils}/bin/chmod 755 /"; }; }; virtualisation = { - diskSize = 1024*6; + diskSize = 1024 * 6; 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: ( let version = "1.6.1"; - pkgs-unstable = import nixpkgs-unstable { inherit (prev) system; }; + pkgs-unstable = import nixpkgs-unstable {inherit (prev) system;}; buildPgrxExtension = prev.callPackage (import (builtins.path { name = "extension-builder"; path = ./buildPgrxExtension.nix; - })) { + })) { cargo-pgrx = pkgs-unstable.cargo-pgrx_0_12_6; inherit (pkgs-unstable.darwin.apple_sdk.frameworks) Security; }; - buildPostgresqlExtension = - prev.callPackage (import (builtins.path { - name = "extension-builder"; - path = ./buildPostgresqlExtension.nix; - })); + buildPostgresqlExtension = prev.callPackage (import (builtins.path { + name = "extension-builder"; + path = ./buildPostgresqlExtension.nix; + })); buildSmtpExt = versionSuffix: let postgresql = prev."postgresql_${versionSuffix}"; @@ -399,18 +417,19 @@ buildPgrxExtension { pname = cargo.package.name; version = cargo.package.version; - + inherit src postgresql; - - buildInputs = with prev; [ openssl ]; + + buildInputs = with prev; [openssl]; cargoHash = "sha256-AbLT7vcFV89zwZIaTC1ELat9l4UeNP8Bn9QMMOms1Co="; - + doCheck = false; }; buildPlHaskellExt = versionSuffix: let - version = "4.0"; - in buildPostgresqlExtension { + version = "4.0"; + in + buildPostgresqlExtension { postgresql = prev."postgresql_${versionSuffix}"; } { pname = "plhaskell"; @@ -439,36 +458,61 @@ }; in { hectic = self.packages.${prev.system}; - postgresql_17 = prev.postgresql_17 // {pkgs = prev.postgresql_17.pkgs // { - http = buildHttpExt "17"; - pg_smtp_client = buildSmtpExt "17"; - plhaskell = buildPlHaskellExt "15"; - postgreact = prev.callPackage ./package/c/postgreact/default.nix { postgresql = prev.postgresql_17; }; - };}; - postgresql_16 = prev.postgresql_16 // {pkgs = prev.postgresql_16.pkgs // { - http = buildHttpExt "16"; - pg_smtp_client = buildSmtpExt "16"; - plhaskell = buildPlHaskellExt "15"; - postgreact = prev.callPackage ./package/c/postgreact/default.nix { postgresql = prev.postgresql_16; }; - };}; - 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; }; - };}; + postgresql_17 = + prev.postgresql_17 + // { + pkgs = + prev.postgresql_17.pkgs + // { + http = buildHttpExt "17"; + pg_smtp_client = buildSmtpExt "17"; + plhaskell = buildPlHaskellExt "15"; + postgreact = prev.callPackage ./package/c/postgreact/default.nix {postgresql = prev.postgresql_17;}; + }; + }; + postgresql_16 = + prev.postgresql_16 + // { + pkgs = + prev.postgresql_16.pkgs + // { + http = buildHttpExt "16"; + pg_smtp_client = buildSmtpExt "16"; + plhaskell = buildPlHaskellExt "15"; + postgreact = prev.callPackage ./package/c/postgreact/default.nix {postgresql = prev.postgresql_16;}; + }; + }; + 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 - 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 @@ -479,7 +523,8 @@ ${prev.gcc}/bin/gcc -xc -o $out $contentPath ''; } - ) name + ) + name else prev.writers.makeBinWriter { compileScript = '' @@ -491,29 +536,35 @@ fi ${prev.gcc}/bin/gcc -xc -o $out $contentPath ''; - } name argsOrScript; - writeMinC = - name: includes: body: - writeC name '' - ${builtins.concatStringsSep "\n" (map (h: "#include " + h) includes)} + } + name + argsOrScript; + writeMinC = name: includes: body: + writeC name '' + ${builtins.concatStringsSep "\n" (map (h: "#include " + h) includes)} - int main(int argc, char *argv[]) { - ${body} - } - ''; - in prev.writers // { - writeCBin = name: writeC "/bin/${name}"; - writeC = writeC; - writeMinCBin = name: includes: body: writeMinC "/bin/${name}" includes body; - writeMinC = writeMinC; - }; + int main(int argc, char *argv[]) { + ${body} + } + ''; + in + prev.writers + // { + writeCBin = name: writeC "/bin/${name}"; + writeC = writeC; + writeMinCBin = name: includes: body: writeMinC "/bin/${name}" includes body; + writeMinC = writeMinC; + }; } ); lib = { # -- For all systems -- inherit dotEnv minorEnvironment parseEnv forAllSystemsWithPkgs forSpecSystemsWithPkgs; - readEnvironment = { envVarsToRead, prefix ? "" }: + readEnvironment = { + envVarsToRead, + prefix ? "", + }: builtins.listToAttrs (map (name: { inherit name; diff --git a/package/c/hectic/default.nix b/package/c/hectic/default.nix index 58941ad..33679d0 100644 --- a/package/c/hectic/default.nix +++ b/package/c/hectic/default.nix @@ -1,12 +1,17 @@ -{ stdenv, gcc, lib, bash, inotify-tools }: - +{ + stdenv, + gcc, + lib, + bash, + inotify-tools, +}: stdenv.mkDerivation { pname = "hectic"; version = "1.0"; src = ./.; doCheck = true; - nativeBuildInputs = [ gcc inotify-tools ]; + nativeBuildInputs = [gcc inotify-tools]; buildPhase = '' ls diff --git a/package/c/postgreact/default.nix b/package/c/postgreact/default.nix index 4dd43ee..76066bc 100644 --- a/package/c/postgreact/default.nix +++ b/package/c/postgreact/default.nix @@ -3,12 +3,11 @@ stdenv, postgresql, ... -}: - +}: stdenv.mkDerivation { pname = "postgreact"; version = "0.1"; - + src = ./.; buildInputs = [ @@ -22,10 +21,10 @@ stdenv.mkDerivation { installPhase = '' mkdir -p $out/lib/postgresql $out/share/postgresql/extension - + # Install compiled library install -m 755 -D target/postgreact.so $out/lib/postgresql/postgreact.so - + # Install control and SQL files 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 @@ -36,6 +35,6 @@ stdenv.mkDerivation { homepage = "https://github.com/yukkop/util.nix"; license = licenses.mit; platforms = postgresql.meta.platforms; - maintainers = with maintainers; [ ]; + maintainers = with maintainers; []; }; -} +} diff --git a/package/c/prettify/default.nix b/package/c/prettify/default.nix index 725a702..90c22de 100644 --- a/package/c/prettify/default.nix +++ b/package/c/prettify/default.nix @@ -1,12 +1,17 @@ -{ stdenv, gcc, lib, bash, c-hectic }: - +{ + stdenv, + gcc, + lib, + bash, + c-hectic, +}: stdenv.mkDerivation { pname = "prettify"; version = "1.0"; src = ./.; doCheck = false; - nativeBuildInputs = [ gcc c-hectic ]; + nativeBuildInputs = [gcc c-hectic]; buildPhase = '' ls diff --git a/package/c/watch/default.nix b/package/c/watch/default.nix index 6b1937f..2313bc9 100644 --- a/package/c/watch/default.nix +++ b/package/c/watch/default.nix @@ -1,12 +1,17 @@ -{ stdenv, gcc, lib, bash, gdb }: - +{ + stdenv, + gcc, + lib, + bash, + gdb, +}: stdenv.mkDerivation { pname = "watch"; version = "1.0"; src = ./.; doCheck = false; - nativeBuildInputs = [ gcc gdb ]; + nativeBuildInputs = [gcc gdb]; buildPhase = '' ${bash}/bin/sh ./make.sh build @@ -25,4 +30,4 @@ stdenv.mkDerivation { description = "watch"; license = lib.licenses.mit; }; -} \ No newline at end of file +} diff --git a/package/postgres/pg-migration/default.nix b/package/postgres/pg-migration/default.nix index 098a3d9..f69c04e 100644 --- a/package/postgres/pg-migration/default.nix +++ b/package/postgres/pg-migration/default.nix @@ -16,7 +16,7 @@ in cargoLock.lockFile = ./Cargo.lock; - buildInputs = [ postgresql_15 ]; + buildInputs = [postgresql_15]; doCheck = true; } From fb8fa34ff268ea665c40b3c19f5f30414a5940d3 Mon Sep 17 00:00:00 2001 From: zerosummed Date: Thu, 17 Apr 2025 05:20:41 +0300 Subject: [PATCH 3/7] fix?(package): `postgreact` --- .envrc | 1 + flake.nix | 15 +++---- package/c/postgreact/Makefile | 16 ++++++++ package/c/postgreact/default.nix | 40 +++++++------------ package/c/postgreact/make.sh | 6 ++- ...ostgreact--0.1.sql => postgreact--1.0.sql} | 10 +++-- package/c/postgreact/postgreact.c | 16 +++++--- package/c/postgreact/postgreact.control | 4 -- package/c/postgreact/postgreact.control.in | 4 ++ package/c/postgreact/postgreact.h | 11 +++++ 10 files changed, 76 insertions(+), 47 deletions(-) create mode 100644 .envrc create mode 100644 package/c/postgreact/Makefile rename package/c/postgreact/{postgreact--0.1.sql => postgreact--1.0.sql} (71%) delete mode 100644 package/c/postgreact/postgreact.control create mode 100644 package/c/postgreact/postgreact.control.in create mode 100644 package/c/postgreact/postgreact.h diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..f12653d --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake .#postgres-c diff --git a/flake.nix b/flake.nix index 35e5b92..7d2e45f 100644 --- a/flake.nix +++ b/flake.nix @@ -133,9 +133,10 @@ pg-migration = pkgs.callPackage ./package/postgres/pg-migration/default.nix rust.commonArgs; c-hectic = pkgs.callPackage ./package/c/hectic/default.nix {}; watch = pkgs.callPackage ./package/c/watch/default.nix {}; - hmpl = pkgs.callPackage ./package/c/hmpl/default.nix { - hectic = self.packages.${system}.hectic; - }; + #hmpl = pkgs.callPackage ./package/c/hmpl/default.nix { + # hectic = self.packages.${system}.hectic; + #}; + postgreact = pkgs.callPackage ./package/c/postgreact {}; }; devShells.${system} = let @@ -467,7 +468,7 @@ http = buildHttpExt "17"; pg_smtp_client = buildSmtpExt "17"; plhaskell = buildPlHaskellExt "15"; - postgreact = prev.callPackage ./package/c/postgreact/default.nix {postgresql = prev.postgresql_17;}; + postgreact = self.packages.${prev.system}.postgreact.override {postgresql = prev.postgresql_17;}; }; }; postgresql_16 = @@ -479,7 +480,7 @@ http = buildHttpExt "16"; pg_smtp_client = buildSmtpExt "16"; plhaskell = buildPlHaskellExt "15"; - postgreact = prev.callPackage ./package/c/postgreact/default.nix {postgresql = prev.postgresql_16;}; + postgreact = self.packages.${prev.system}.postgreact.override {postgresql = prev.postgresql_17;}; }; }; postgresql_15 = @@ -491,7 +492,7 @@ http = buildHttpExt "15"; pg_smtp_client = buildSmtpExt "15"; plhaskell = buildPlHaskellExt "15"; - postgreact = prev.callPackage ./package/c/postgreact/default.nix {postgresql = prev.postgresql_15;}; + postgreact = self.packages.${prev.system}.postgreact.override {postgresql = prev.postgresql_17;}; }; }; postgresql_14 = @@ -503,7 +504,7 @@ http = buildHttpExt "14"; pg_smtp_client = buildSmtpExt "14"; plhaskell = buildPlHaskellExt "15"; - postgreact = prev.callPackage ./package/c/postgreact/default.nix {postgresql = prev.postgresql_14;}; + postgreact = self.packages.${prev.system}.postgreact.override {postgresql = prev.postgresql_17;}; }; }; writers = let diff --git a/package/c/postgreact/Makefile b/package/c/postgreact/Makefile new file mode 100644 index 0000000..170068a --- /dev/null +++ b/package/c/postgreact/Makefile @@ -0,0 +1,16 @@ +EXTENSION ?= postgreact +EXTENSION_VERSION ?= 1.0 + +# INFO(nrv): just in case idk how pgxs Makefile and shit all work +EXTVERSION = $(EXTENSION_VERSION) + +MODULE_big = $(EXTENSION) +DATA = $(EXTENSION)--$(EXTENSION_VERSION).sql +OBJS = $(EXTENSION).o +PG_CONFIG = pg_config + +$(BUILD_DIR)/$(EXTENSION).control: + sed "s/@EXTENSION_VERSION@/$(EXTVERSION)/g" $(EXTENSION).control.in > $@ + +PGXS := $(shell $(PG_CONFIG) --pgxs) +include $(PGXS) diff --git a/package/c/postgreact/default.nix b/package/c/postgreact/default.nix index 76066bc..d985bb8 100644 --- a/package/c/postgreact/default.nix +++ b/package/c/postgreact/default.nix @@ -1,39 +1,29 @@ { lib, stdenv, + fetchFromGitHub, + curl, postgresql, - ... + buildPostgresqlExtension, }: -stdenv.mkDerivation { +buildPostgresqlExtension rec { pname = "postgreact"; - version = "0.1"; + version = "1.0"; + + buildInputs = [ + ]; + + EXTENSION = pname; + EXTENSION_VERSION = version; src = ./.; - buildInputs = [ - postgresql - ]; - - buildPhase = '' - mkdir -p target - sh ./make.sh build - ''; - - installPhase = '' - mkdir -p $out/lib/postgresql $out/share/postgresql/extension - - # Install compiled library - install -m 755 -D target/postgreact.so $out/lib/postgresql/postgreact.so - - # Install control and SQL files - 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 - ''; + env.NIX_CFLAGS_COMPILE = "-Wno-error"; meta = with lib; { - description = "PostgreSQL extension for reactive functions"; - homepage = "https://github.com/yukkop/util.nix"; - license = licenses.mit; + description = "PostgreSQL extension for simple templating."; + homepage = "https://github.com/hectic-lab/util.nix"; + license = licenses.asl20; platforms = postgresql.meta.platforms; maintainers = with maintainers; []; }; diff --git a/package/c/postgreact/make.sh b/package/c/postgreact/make.sh index 3f8e91c..09b816f 100755 --- a/package/c/postgreact/make.sh +++ b/package/c/postgreact/make.sh @@ -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 @@ -91,7 +93,7 @@ case "$MODE" in # Copy extension files to target directory cp postgreact.control target/ - cp postgreact--0.1.sql target/ + cp postgreact--${EXTENSION_VERSION}.sql target/ echo "Build complete. Files available in target/ directory." ;; @@ -99,4 +101,4 @@ case "$MODE" in print_help exit 1 ;; -esac \ No newline at end of file +esac diff --git a/package/c/postgreact/postgreact--0.1.sql b/package/c/postgreact/postgreact--1.0.sql similarity index 71% rename from package/c/postgreact/postgreact--0.1.sql rename to package/c/postgreact/postgreact--1.0.sql index 73c7685..bca1d87 100644 --- a/package/c/postgreact/postgreact--0.1.sql +++ b/package/c/postgreact/postgreact--1.0.sql @@ -3,6 +3,10 @@ -- Define the hello function that uses our C implementation CREATE FUNCTION hello() -RETURNS text -AS 'postgreact', 'hello' -LANGUAGE C STRICT; +RETURNS + TEXT +STRICT VOLATILE +LANGUAGE C +AS + 'MODULE_PATHNAME', 'hello' +; diff --git a/package/c/postgreact/postgreact.c b/package/c/postgreact/postgreact.c index 98b34ec..efc0cb1 100644 --- a/package/c/postgreact/postgreact.c +++ b/package/c/postgreact/postgreact.c @@ -6,11 +6,15 @@ PG_MODULE_MAGIC; #endif -/* Define the function hello */ -PG_FUNCTION_INFO_V1(hello); - -/* Implement the function */ Datum hello(PG_FUNCTION_ARGS) { - PG_RETURN_TEXT_P(cstring_to_text("Hello, world!")); -} \ No newline at end of file + PG_RETURN_TEXT_P(cstring_to_text("Eblan!")); +} + +void _PG_init(void) { + +} +void _PG_fini(void) { + +} + diff --git a/package/c/postgreact/postgreact.control b/package/c/postgreact/postgreact.control deleted file mode 100644 index 6843cfe..0000000 --- a/package/c/postgreact/postgreact.control +++ /dev/null @@ -1,4 +0,0 @@ -comment = 'My first extension' -default_version = '1.0' -module_pathname = $libdir/postgreact -relocatable = true diff --git a/package/c/postgreact/postgreact.control.in b/package/c/postgreact/postgreact.control.in new file mode 100644 index 0000000..a7bc821 --- /dev/null +++ b/package/c/postgreact/postgreact.control.in @@ -0,0 +1,4 @@ +comment = 'My first extension' +default_version = '@EXTENSION_VERSION@' +module_pathname = '$libdir/postgreact' +relocatable = false diff --git a/package/c/postgreact/postgreact.h b/package/c/postgreact/postgreact.h new file mode 100644 index 0000000..348c5ea --- /dev/null +++ b/package/c/postgreact/postgreact.h @@ -0,0 +1,11 @@ +#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); From 90f588843acac52d4f9f18060af8bf59c2ffe9ad Mon Sep 17 00:00:00 2001 From: zerosummed Date: Thu, 17 Apr 2025 07:01:23 +0300 Subject: [PATCH 4/7] fix?(package): `postgreact`: ~stir the stupid shit till it works [1] --- flake.nix | 20 ++++++++++++++++++-- package/c/postgreact/default.nix | 24 +++--------------------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/flake.nix b/flake.nix index 7d2e45f..036a170 100644 --- a/flake.nix +++ b/flake.nix @@ -428,7 +428,7 @@ doCheck = false; }; buildPlHaskellExt = versionSuffix: let - version = "4.0"; + version = "4.0"; # XXX(nrv): What the hell is this? What the hell are all the `version` mentions below? Is it that? in buildPostgresqlExtension { postgresql = prev."postgresql_${versionSuffix}"; @@ -457,6 +457,22 @@ }; nativeBuildInputs = with prev; [pkg-config curl]; }; + buildPostgreactExt = versionSuffix: + buildPostgresqlExtension { + postgresql = prev."postgresql_${versionSuffix}"; + } (rec { + pname = "postgreact"; + version = "1.0"; + src = ./package/c/${pname}; + nativeBuildInputs = with prev; [pkg-config]; # ??? + meta = with lib; { + description = "PostgreSQL extension for simple templating."; + homepage = "https://github.com/hectic-lab/util.nix"; + license = licenses.asl20; + platforms = postgresql.meta.platforms; + maintainers = with maintainers; []; + }; + }); in { hectic = self.packages.${prev.system}; postgresql_17 = @@ -490,9 +506,9 @@ prev.postgresql_15.pkgs // { http = buildHttpExt "15"; + postgreact = buildPostgreactExt "15"; pg_smtp_client = buildSmtpExt "15"; plhaskell = buildPlHaskellExt "15"; - postgreact = self.packages.${prev.system}.postgreact.override {postgresql = prev.postgresql_17;}; }; }; postgresql_14 = diff --git a/package/c/postgreact/default.nix b/package/c/postgreact/default.nix index d985bb8..b6eb38a 100644 --- a/package/c/postgreact/default.nix +++ b/package/c/postgreact/default.nix @@ -1,30 +1,12 @@ { lib, - stdenv, - fetchFromGitHub, - curl, - postgresql, - buildPostgresqlExtension, -}: -buildPostgresqlExtension rec { +}: { pname = "postgreact"; version = "1.0"; + src = ./.; + buildInputs = [ ]; - EXTENSION = pname; - EXTENSION_VERSION = version; - - src = ./.; - - env.NIX_CFLAGS_COMPILE = "-Wno-error"; - - meta = with lib; { - description = "PostgreSQL extension for simple templating."; - homepage = "https://github.com/hectic-lab/util.nix"; - license = licenses.asl20; - platforms = postgresql.meta.platforms; - maintainers = with maintainers; []; - }; } From aec4876832aa4daee9abd71a78b19bb8cd1c42e9 Mon Sep 17 00:00:00 2001 From: zerosummed Date: Thu, 17 Apr 2025 07:06:21 +0300 Subject: [PATCH 5/7] fix?(package): `postgreact`: ~stir the stupid shit till it works [2] --- flake.nix | 10 +++++----- package/c/postgreact/default.nix | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/flake.nix b/flake.nix index 036a170..a1023bc 100644 --- a/flake.nix +++ b/flake.nix @@ -136,7 +136,7 @@ #hmpl = pkgs.callPackage ./package/c/hmpl/default.nix { # hectic = self.packages.${system}.hectic; #}; - postgreact = pkgs.callPackage ./package/c/postgreact {}; + #postgreact = pkgs.callPackage ./package/c/postgreact {}; }; devShells.${system} = let @@ -484,7 +484,7 @@ http = buildHttpExt "17"; pg_smtp_client = buildSmtpExt "17"; plhaskell = buildPlHaskellExt "15"; - postgreact = self.packages.${prev.system}.postgreact.override {postgresql = prev.postgresql_17;}; + postgreact = buildPostgreactExt "17"; }; }; postgresql_16 = @@ -496,7 +496,7 @@ http = buildHttpExt "16"; pg_smtp_client = buildSmtpExt "16"; plhaskell = buildPlHaskellExt "15"; - postgreact = self.packages.${prev.system}.postgreact.override {postgresql = prev.postgresql_17;}; + postgreact = buildPostgreactExt "16"; }; }; postgresql_15 = @@ -506,9 +506,9 @@ prev.postgresql_15.pkgs // { http = buildHttpExt "15"; - postgreact = buildPostgreactExt "15"; pg_smtp_client = buildSmtpExt "15"; plhaskell = buildPlHaskellExt "15"; + postgreact = buildPostgreactExt "15"; }; }; postgresql_14 = @@ -520,7 +520,7 @@ http = buildHttpExt "14"; pg_smtp_client = buildSmtpExt "14"; plhaskell = buildPlHaskellExt "15"; - postgreact = self.packages.${prev.system}.postgreact.override {postgresql = prev.postgresql_17;}; + postgreact = buildPostgreactExt "15"; }; }; writers = let diff --git a/package/c/postgreact/default.nix b/package/c/postgreact/default.nix index b6eb38a..a2d4075 100644 --- a/package/c/postgreact/default.nix +++ b/package/c/postgreact/default.nix @@ -8,5 +8,4 @@ buildInputs = [ ]; - } From 60d977110c7facac76dbb14e88396c5c3f552e3f Mon Sep 17 00:00:00 2001 From: zerosummed Date: Fri, 18 Apr 2025 21:37:23 +0300 Subject: [PATCH 6/7] fix?(package): `postgreact`: ~stir the stupid shit till it works [3] --- flake.nix | 32 ++++++--------------- package/c/postgreact/.gitignore | 3 ++ package/c/postgreact/Makefile | 18 ++++++------ package/c/postgreact/default.nix | 33 +++++++++++++++++++++- package/c/postgreact/postgreact.c | 10 ++----- package/c/postgreact/postgreact.control.in | 4 +-- package/c/postgreact/postgreact.h | 5 ++++ 7 files changed, 63 insertions(+), 42 deletions(-) create mode 100644 package/c/postgreact/.gitignore diff --git a/flake.nix b/flake.nix index a1023bc..a2e2140 100644 --- a/flake.nix +++ b/flake.nix @@ -133,10 +133,10 @@ pg-migration = pkgs.callPackage ./package/postgres/pg-migration/default.nix rust.commonArgs; c-hectic = pkgs.callPackage ./package/c/hectic/default.nix {}; watch = pkgs.callPackage ./package/c/watch/default.nix {}; - #hmpl = pkgs.callPackage ./package/c/hmpl/default.nix { - # hectic = self.packages.${system}.hectic; - #}; - #postgreact = pkgs.callPackage ./package/c/postgreact {}; + #hmpl = pkgs.callPackage ./package/c/hmpl/default.nix { + # hectic = self.packages.${system}.hectic; + #}; + postgreact = pkgs.callPackage ./package/c/postgreact {}; }; devShells.${system} = let @@ -457,22 +457,6 @@ }; nativeBuildInputs = with prev; [pkg-config curl]; }; - buildPostgreactExt = versionSuffix: - buildPostgresqlExtension { - postgresql = prev."postgresql_${versionSuffix}"; - } (rec { - pname = "postgreact"; - version = "1.0"; - src = ./package/c/${pname}; - nativeBuildInputs = with prev; [pkg-config]; # ??? - meta = with lib; { - description = "PostgreSQL extension for simple templating."; - homepage = "https://github.com/hectic-lab/util.nix"; - license = licenses.asl20; - platforms = postgresql.meta.platforms; - maintainers = with maintainers; []; - }; - }); in { hectic = self.packages.${prev.system}; postgresql_17 = @@ -484,7 +468,7 @@ http = buildHttpExt "17"; pg_smtp_client = buildSmtpExt "17"; plhaskell = buildPlHaskellExt "15"; - postgreact = buildPostgreactExt "17"; + postgreact = self.packages.${prev.system}.postgreact.override {postgresql = prev.postgresql_17;}; }; }; postgresql_16 = @@ -496,7 +480,7 @@ http = buildHttpExt "16"; pg_smtp_client = buildSmtpExt "16"; plhaskell = buildPlHaskellExt "15"; - postgreact = buildPostgreactExt "16"; + postgreact = self.packages.${prev.system}.postgreact.override {postgresql = prev.postgresql_17;}; }; }; postgresql_15 = @@ -508,7 +492,7 @@ http = buildHttpExt "15"; pg_smtp_client = buildSmtpExt "15"; plhaskell = buildPlHaskellExt "15"; - postgreact = buildPostgreactExt "15"; + postgreact = self.packages.${prev.system}.postgreact.override {postgresql = prev.postgresql_17;}; }; }; postgresql_14 = @@ -520,7 +504,7 @@ http = buildHttpExt "14"; pg_smtp_client = buildSmtpExt "14"; plhaskell = buildPlHaskellExt "15"; - postgreact = buildPostgreactExt "15"; + postgreact = self.packages.${prev.system}.postgreact.override {postgresql = prev.postgresql_17;}; }; }; writers = let diff --git a/package/c/postgreact/.gitignore b/package/c/postgreact/.gitignore new file mode 100644 index 0000000..cde82a3 --- /dev/null +++ b/package/c/postgreact/.gitignore @@ -0,0 +1,3 @@ +package/c/postgreact/postgreact.control +package/c/postgreact/postgreact.o +package/c/postgreact/postgreact.so diff --git a/package/c/postgreact/Makefile b/package/c/postgreact/Makefile index 170068a..629dd01 100644 --- a/package/c/postgreact/Makefile +++ b/package/c/postgreact/Makefile @@ -1,16 +1,18 @@ EXTENSION ?= postgreact EXTENSION_VERSION ?= 1.0 - -# INFO(nrv): just in case idk how pgxs Makefile and shit all work -EXTVERSION = $(EXTENSION_VERSION) +EXTENSION_COMMENT ?= My first extension MODULE_big = $(EXTENSION) -DATA = $(EXTENSION)--$(EXTENSION_VERSION).sql +DATA = $(EXTENSION)--$(EXTENSION_VERSION).sql $(EXTENSION).control OBJS = $(EXTENSION).o PG_CONFIG = pg_config - -$(BUILD_DIR)/$(EXTENSION).control: - sed "s/@EXTENSION_VERSION@/$(EXTVERSION)/g" $(EXTENSION).control.in > $@ - PGXS := $(shell $(PG_CONFIG) --pgxs) + +.PHONY: $(EXTENSION).control + +$(EXTENSION).control: + sed "s/@EXTENSION_VERSION@/$(EXTENSION_VERSION)/g; s/@EXTENSION_COMMENT@/$(EXTENSION_COMMENT)/g; s/@EXTENSION@/$(EXTENSION)/g" $(EXTENSION).control.in > $@ + include $(PGXS) + +# vim:wrap diff --git a/package/c/postgreact/default.nix b/package/c/postgreact/default.nix index a2d4075..acc3a40 100644 --- a/package/c/postgreact/default.nix +++ b/package/c/postgreact/default.nix @@ -1,11 +1,42 @@ { lib, -}: { + stdenv, + postgresql, + ... +}: +stdenv.mkDerivation rec { pname = "postgreact"; version = "1.0"; src = ./.; + USE_PGXS = 1; + EXTENSION = pname; + EXTENSION_VERSION = version; + EXTENSION_COMMENT = meta.description; + buildInputs = [ + postgresql ]; + + buildPhase = ''make all''; + + installPhase = '' + mkdir -p $out/lib/postgresql $out/share/postgresql/extension + + # Install compiled library + install -m 755 -D postgreact.so $out/lib/postgresql/postgreact.so + + # Install control and SQL files + install -m 644 -D postgreact.control $out/share/postgresql/extension/postgreact.control + install -m 644 -D postgreact--${EXTENSION_VERSION}.sql $out/share/postgresql/extension/postgreact--${EXTENSION_VERSION}.sql + ''; + + meta = with lib; { + description = "PostgreSQL extension for simple templating."; + homepage = "https://github.com/yukkop/util.nix"; + license = licenses.asl20; + platforms = postgresql.meta.platforms; + maintainers = with maintainers; []; + }; } diff --git a/package/c/postgreact/postgreact.c b/package/c/postgreact/postgreact.c index efc0cb1..852fc96 100644 --- a/package/c/postgreact/postgreact.c +++ b/package/c/postgreact/postgreact.c @@ -1,14 +1,10 @@ #include "postgres.h" #include "fmgr.h" #include "utils/builtins.h" /* for text_to_cstring and cstring_to_text */ +#include "postgreact.h" -#ifdef PG_MODULE_MAGIC -PG_MODULE_MAGIC; -#endif - -Datum hello(PG_FUNCTION_ARGS) -{ - PG_RETURN_TEXT_P(cstring_to_text("Eblan!")); +Datum hello(PG_FUNCTION_ARGS) { + PG_RETURN_TEXT_P(cstring_to_text("Eblan!")); } void _PG_init(void) { diff --git a/package/c/postgreact/postgreact.control.in b/package/c/postgreact/postgreact.control.in index a7bc821..51233d2 100644 --- a/package/c/postgreact/postgreact.control.in +++ b/package/c/postgreact/postgreact.control.in @@ -1,4 +1,4 @@ -comment = 'My first extension' +comment = '@EXTENSION_COMMENT@' default_version = '@EXTENSION_VERSION@' -module_pathname = '$libdir/postgreact' +module_pathname = '$libdir/@EXTENSION@' relocatable = false diff --git a/package/c/postgreact/postgreact.h b/package/c/postgreact/postgreact.h index 348c5ea..74a5226 100644 --- a/package/c/postgreact/postgreact.h +++ b/package/c/postgreact/postgreact.h @@ -1,3 +1,6 @@ +#ifndef POSTGREACT_H +#define POSTGREACT_H + #include "postgres.h" #ifdef PG_MODULE_MAGIC @@ -9,3 +12,5 @@ void _PG_fini(void); Datum hello(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(hello); + +#endif // POSTGREACT_H From 016db3d06ae814e0f0cc8f39cd4e5af729bb39ac Mon Sep 17 00:00:00 2001 From: zerosummed Date: Tue, 22 Apr 2025 10:00:33 +0300 Subject: [PATCH 7/7] feat(package): +`support-bot` --- flake.nix | 1 + package/support-bot/default.nix | 78 +++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 package/support-bot/default.nix diff --git a/flake.nix b/flake.nix index a2e2140..02bae9e 100644 --- a/flake.nix +++ b/flake.nix @@ -137,6 +137,7 @@ # hectic = self.packages.${system}.hectic; #}; postgreact = pkgs.callPackage ./package/c/postgreact {}; + support-bot = pkgs.callPackage ./package/support-bot {}; }; devShells.${system} = let diff --git a/package/support-bot/default.nix b/package/support-bot/default.nix new file mode 100644 index 0000000..1a5b400 --- /dev/null +++ b/package/support-bot/default.nix @@ -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"; + }; +}