init
This commit is contained in:
commit
81e0aadf20
5 changed files with 113 additions and 0 deletions
27
flake.lock
generated
Normal file
27
flake.lock
generated
Normal file
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1748026106,
|
||||
"narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "063f43f2dbdef86376cc29ad646c45c46e93234c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
16
flake.nix
Normal file
16
flake.nix
Normal file
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
outputs = { nixpkgs, ... }: let
|
||||
supportedArchitectures = [
|
||||
"aarch64-darwin"
|
||||
"aarch64-linux"
|
||||
"x86_64-darwin"
|
||||
"x86_64-linux"
|
||||
];
|
||||
in {
|
||||
packages = nixpkgs.lib.genAttrs supportedArchitectures (system: {
|
||||
nix_templater = nixpkgs.legacyPackages.${system}.callPackage ./pkgs/nix_templater {};
|
||||
});
|
||||
legacyPackages = nixpkgs.lib.genAttrs supportedArchitectures (system: import ./lib.nix { pkgs = nixpkgs.legacyPackages.${system}; });
|
||||
};
|
||||
}
|
29
lib.nix
Normal file
29
lib.nix
Normal file
|
@ -0,0 +1,29 @@
|
|||
{ pkgs, text_templater }:
|
||||
rec {
|
||||
fileContents = file: {
|
||||
outPath = "<${builtins.placeholder "nix_template"}${toString file}${builtins.placeholder "nix_template"}>";
|
||||
file = file;
|
||||
};
|
||||
|
||||
template_text = { name, text, outPath }:
|
||||
pkgs.runCommand name {
|
||||
textBeforeTemplate = text;
|
||||
script = ''
|
||||
${text_templater}/bin/text_templater ${builtins.placeholder "out"}/template ${builtins.placeholder "nix_template"} "${outPath}"
|
||||
'';
|
||||
passAsFile = [ "script" "textBeforeTemplate" ];
|
||||
} ''
|
||||
mkdir -p $out/bin
|
||||
cp $textBeforeTemplatePath $out/template
|
||||
cp $scriptPath $out/bin/${name}
|
||||
chmod +x $out/bin/${name}
|
||||
'';
|
||||
|
||||
test = template_text {
|
||||
name = "test";
|
||||
text = ''
|
||||
blablabla ${fileContents (pkgs.writeText "lol" "lol")}
|
||||
'';
|
||||
outPath = "./test";
|
||||
};
|
||||
}
|
10
pkgs/nix_templater/default.nix
Normal file
10
pkgs/nix_templater/default.nix
Normal file
|
@ -0,0 +1,10 @@
|
|||
{ writeShellApplication, python3 }:
|
||||
writeShellApplication {
|
||||
name = "text_templater";
|
||||
runtimeInputs = [
|
||||
python3
|
||||
];
|
||||
text = ''
|
||||
python ${./replace.py} "$@"
|
||||
'';
|
||||
}
|
31
pkgs/nix_templater/replace.py
Normal file
31
pkgs/nix_templater/replace.py
Normal file
|
@ -0,0 +1,31 @@
|
|||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
tempalte_file = sys.argv[1]
|
||||
magic_string = sys.argv[2]
|
||||
outfile = sys.argv[3]
|
||||
|
||||
if Path(outfile).exists():
|
||||
print(f"{outfile} already exists, aborting")
|
||||
sys.exit(1)
|
||||
|
||||
template_bytes = Path(tempalte_file).read_bytes()
|
||||
loc = 0
|
||||
output = b""
|
||||
|
||||
|
||||
while True:
|
||||
magic_start = template_bytes[loc:].find(f"<{magic_string}".encode())
|
||||
if magic_start == -1:
|
||||
output += template_bytes[loc:]
|
||||
break
|
||||
magic_end = template_bytes[loc + magic_start :].find(f"{magic_string}>".encode())
|
||||
magic_file = template_bytes[
|
||||
(loc + magic_start + len(magic_string) + 1) : loc + magic_start + magic_end
|
||||
]
|
||||
output += template_bytes[loc : loc + magic_start]
|
||||
# TODO handle errors better here
|
||||
output += Path(magic_file.decode()).read_bytes()
|
||||
loc = loc + magic_start + magic_end + len(magic_string) + 1
|
||||
|
||||
Path(outfile).write_bytes(output)
|
Loading…
Add table
Reference in a new issue