diff --git a/.config/template/src/utils.typ b/.config/template/src/utils.typ index 7e1ba9b..abf292b 100644 --- a/.config/template/src/utils.typ +++ b/.config/template/src/utils.typ @@ -1,7 +1,44 @@ +/// captioned image with label derived from path: +/// - "image.png" = @image +/// - "img/image.png" = @image +/// - "img/foo/image.png" = @foo_image +/// - "img/foo/foo_image.png" = @foo_image +/// the caption will be modified based on a conditional positional value: +/// - `none`: no change +/// - some value: "`caption` (за даними `value`)" +/// - no value: "`caption` (рисунок виконано самостійно)" +/// additional named arguments will be passed to original `image` function +#let img(path, caption, ..sink) = { + let parts = path.split(".").first().split("/") + + let label_string = if ( + parts.len() <= 2 or parts.at(-1).starts-with(parts.at(-2)) + ) { + // ("image",), (_, "image") and (.., "img", "img_image") + parts.last() + } else { + // (.., "img", "image") = "img_image" + parts.at(-2) + "_" + parts.at(-1) + }.replace(" ", "_") + + let caption = if sink.pos().len() == 0 { + caption + } else if sink.pos().first() == none { + caption + " (рисунок виконано самостійно)" + } else { + [#caption (за даними #sink.pos().first())] + } + + [#figure( + image(path, ..sink.named()), + caption: caption, + ) #label(label_string)] +} + /// takes in a string of code, e.g. #code(read("foo.c")) #let code(content) = raw(block: true, theme: none, content) -/// read file as bytes +/// read path as bytes #let p(path) = bytes(read(path, encoding: none)) /// include chapters by file names from /chapters diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..9ebf43c --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake path:$(pwd) diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..ce228ff --- /dev/null +++ b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1769018530, + "narHash": "sha256-MJ27Cy2NtBEV5tsK+YraYr2g851f3Fl1LpNHDzDX15c=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "88d3861acdd3d2f0e361767018218e51810df8a1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..1db0c23 --- /dev/null +++ b/flake.nix @@ -0,0 +1,20 @@ +{ + description = "Top-level Nix flake for script dependencies"; + + inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + inputs.flake-utils.url = "github:numtide/flake-utils"; + + outputs = { + nixpkgs, + flake-utils, + ... + }: + flake-utils.lib.eachDefaultSystem (system: let + pkgs = nixpkgs.legacyPackages.${system}; + # inherit (pkgs) lib; + in { + devShells.default = pkgs.mkShellNoCC { + packages = with pkgs; [nushell just]; + }; + }); +}