summaryrefslogtreecommitdiff
path: root/nix/package
diff options
context:
space:
mode:
author·𐑑𐑴𐑕𐑑𐑩𐑀2025-12-10 13:00:26 +0000
committer·𐑑𐑴𐑕𐑑𐑩𐑀2025-12-10 13:00:26 +0000
commit254b567412a50576d95f5b7c99ce128991e76357 (patch)
treec5642012ef75cf204308d869a94d701349a86031 /nix/package
parentbcb2ef2eb63031df54e4916b11063b1f22a57a84 (diff)
downloadnixtaml-254b567412a50576d95f5b7c99ce128991e76357.tar
nixtaml-254b567412a50576d95f5b7c99ce128991e76357.tar.gz
nixtaml-254b567412a50576d95f5b7c99ce128991e76357.tar.bz2
nixtaml-254b567412a50576d95f5b7c99ce128991e76357.tar.lz
nixtaml-254b567412a50576d95f5b7c99ce128991e76357.tar.xz
nixtaml-254b567412a50576d95f5b7c99ce128991e76357.tar.zst
nixtaml-254b567412a50576d95f5b7c99ce128991e76357.zip
nix onset
Diffstat (limited to 'nix/package')
-rw-r--r--nix/package/dev-shell.nix32
-rw-r--r--nix/package/nixfmt-3-space.nix30
-rw-r--r--nix/package/nixtamal.nix95
-rw-r--r--nix/package/ocamlformat-rpc-bin.nix16
4 files changed, 173 insertions, 0 deletions
diff --git a/nix/package/dev-shell.nix b/nix/package/dev-shell.nix
new file mode 100644
index 0000000..4ace75c
--- /dev/null
+++ b/nix/package/dev-shell.nix
@@ -0,0 +1,32 @@
+#──────────────────────────────────────────────────────────────────────────────┐
+# SPDX-FileCopyrightText: 2025 toastal <https://toast.al/contact/> β”‚
+# SPDX-License-Identifier: LGPL-2.1-or-later β”‚
+#β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
+{
+ mkShell,
+ kdlfmt,
+ topiary,
+ ocamlPackages,
+ nixtamal,
+ nixfmt-3-space,
+ ocamlformat-rpc-bin,
+}:
+
+mkShell {
+ name = "nixtamal";
+ inputsFrom = [
+ nixtamal
+ ];
+ packages = [
+ kdlfmt
+ nixfmt-3-space
+ topiary
+
+ ocamlPackages.alcotest
+ ocamlPackages.ocaml-lsp
+ ocamlformat-rpc-bin # πŸ’’ why does the LSP depend on ocamlformatβ€½
+ ];
+ env = {
+ TOPIARY_CONFIG_FILE = "${../../.topiary.ncl}";
+ };
+}
diff --git a/nix/package/nixfmt-3-space.nix b/nix/package/nixfmt-3-space.nix
new file mode 100644
index 0000000..fe2b003
--- /dev/null
+++ b/nix/package/nixfmt-3-space.nix
@@ -0,0 +1,30 @@
+#──────────────────────────────────────────────────────────────────────────────┐
+# SPDX-FileCopyrightText: 2025 toastal <https://toast.al/contact/> β”‚
+# SPDX-License-Identifier: LGPL-2.1-or-later β”‚
+#β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
+# I don’t like *this* formatter, but it is *a* formatter. Tweaking it to expand
+# to 3 spaces, helps the maker actually read the code since 2 spaces is not
+# enough contrast (& Nix magic strings don’t support tabs).
+{
+ lib,
+ writeTextFile,
+ dash,
+ nixfmt-rfc-style,
+ stdenvNoCC,
+}:
+
+writeTextFile {
+ name = "nixfmt-3-space";
+ executable = true;
+ destination = "/bin/nixfmt";
+ text = /* sh */ ''
+ #!${lib.getExe dash}
+ exec ${lib.getExe nixfmt-rfc-style} --indent=3 "$@"
+ '';
+ checkPhase = ''
+ runHook preCheck
+ ${stdenvNoCC.shellDryRun} "$target"
+ runHook postCheck
+ '';
+ meta.mainProgram = "nixfmt";
+}
diff --git a/nix/package/nixtamal.nix b/nix/package/nixtamal.nix
new file mode 100644
index 0000000..40806e2
--- /dev/null
+++ b/nix/package/nixtamal.nix
@@ -0,0 +1,95 @@
+#──────────────────────────────────────────────────────────────────────────────┐
+# SPDX-FileCopyrightText: 2025 toastal <https://toast.al/contact/> β”‚
+# SPDX-License-Identifier: LGPL-2.1-or-later β”‚
+#β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
+{
+ lib,
+ coreutils,
+ python3Packages,
+ nix-prefetch-darcs,
+ nix-prefetch-git,
+ nix-prefetch-pijul,
+ ocamlPackages,
+}:
+
+ocamlPackages.buildDunePackage {
+ pname = "nixtamal";
+ version = "0.0.1-alpha.1";
+
+ src =
+ let
+ fs = lib.fileset;
+
+ ocaml_project =
+ file:
+ lib.lists.elem file.name [
+ "dune"
+ "dune-project"
+ "dune-workspace"
+ ]
+ || file.hasExt "opam";
+
+ ocaml_src =
+ file:
+ lib.lists.any file.hasExt [
+ "ml"
+ "mld"
+ "mli"
+ "mly"
+ ];
+ in
+ fs.toSource {
+ root = ../..;
+ fileset = fs.unions [
+ ../../LICENSE.txt
+ (fs.fileFilter (file: file.hasExt "txt") ../../license)
+ (fs.fileFilter ocaml_project ../..)
+ (fs.fileFilter ocaml_src ../../bin)
+ (fs.fileFilter ocaml_src ../../lib)
+ (fs.fileFilter ocaml_src ../../test)
+ ];
+ };
+
+ nativeBuildInputs = [
+ python3Packages.docutils
+ # NOTE: no KDL support
+ python3Packages.pygments
+ ];
+
+ buildInputs = [
+ # required since the prefetcher scripts presently don’t specify all of
+ # their inputs
+ coreutils
+ nix-prefetch-darcs
+ nix-prefetch-git
+ nix-prefetch-pijul
+ ]
+ ++ (with ocamlPackages; [
+ cmdliner
+ eio
+ eio_main
+ fmt
+ jingoo
+ (jsont.override {
+ withBrr = false;
+ withBytesrw = true;
+ })
+ kdl
+ logs
+ ppx_deriving
+ saturn
+ uri
+ ]);
+
+ doCheck = false; # TODO
+
+ checkInputs = with ocamlPackages; [
+ alcotest
+ ];
+
+ meta = {
+ license = with lib.licenses; [ gpl3Plus ];
+ platforms = lib.platforms.unix;
+ mainProgram = "nixtamal";
+ };
+}
diff --git a/nix/package/ocamlformat-rpc-bin.nix b/nix/package/ocamlformat-rpc-bin.nix
new file mode 100644
index 0000000..935c314
--- /dev/null
+++ b/nix/package/ocamlformat-rpc-bin.nix
@@ -0,0 +1,16 @@
+#──────────────────────────────────────────────────────────────────────────────┐
+# SPDX-FileCopyrightText: 2025 toastal <https://toast.al/contact/> β”‚
+# SPDX-License-Identifier: LGPL-2.1-or-later β”‚
+#β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
+# I don’t like ocamlformat as it doesn’t have tab support despite OCaml fully
+# supporting tabsβ€Šβ€”β€Šso I use Topiary. However, the OCaml LSP requires
+{
+ lib,
+ runCommand,
+ ocamlformat,
+}:
+
+runCommand "extract-ocamlformat-rpc-bin" { } ''
+ mkdir -p $out/bin
+ cp ${lib.getBin ocamlformat}/bin/ocamlformat-rpc $out/bin/
+''