diff options
| author | Β·ππ΄πππ©π€ | 2025-12-10 13:00:26 +0000 |
|---|---|---|
| committer | Β·ππ΄πππ©π€ | 2025-12-10 13:00:26 +0000 |
| commit | 254b567412a50576d95f5b7c99ce128991e76357 (patch) | |
| tree | c5642012ef75cf204308d869a94d701349a86031 /nix/package | |
| parent | bcb2ef2eb63031df54e4916b11063b1f22a57a84 (diff) | |
| download | nixtaml-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.nix | 32 | ||||
| -rw-r--r-- | nix/package/nixfmt-3-space.nix | 30 | ||||
| -rw-r--r-- | nix/package/nixtamal.nix | 95 | ||||
| -rw-r--r-- | nix/package/ocamlformat-rpc-bin.nix | 16 |
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/ +'' |
