Skip to content

caprilesport/gedent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

88 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gedent

gedent is an input generator for computational chemistry workflows. It combines a cascading configuration system with Tera templates to generate input files for quantum chemistry software such as ORCA, Gaussian, XTB, ADF, NWChem, and others.

gedent stands for gerador de entradas — Portuguese for "input generator".


Installation

Requirements

  • Rust 1.70 or later
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
cargo install gedent

From source

git clone https://github.com/caprilesport/gedent.git
cd gedent
cargo build --release
# binary at target/release/gedent

Configuration

gedent uses a cascading config system. When you run gedent gen, it walks up from the current directory looking for gedent.toml files, then merges them with the global ~/.config/gedent/gedent.toml. Deeper files win key-by-key — the global config sets defaults, project configs override them.

Config file structure

[gedent]
default_extension = "inp"   # output file extension
software = "orca"           # default software (used for template disambiguation)

[model]
method = "pbe0"
basis_set = "def2-tzvp"
charge = 0
mult = 1
dispersion = "d3bj"
solvent = "water"
solvation_model = "smd"     # smd | cpcm | alpb | cosmo | ...

[resources]
nprocs = 8
mem = 3000                  # MB per core in case of orca

[parameters]
# Arbitrary key-value pairs available in templates as Tera variables.
# Useful for software-specific or job-specific settings.
maxiter = 500
frozen_atoms = [1, 2, 3]

Useful config commands

gedent config print                # show merged config
gedent config print --location     # show per-file contributions + merged result
gedent config edit                 # open nearest local gedent.toml in $EDITOR
gedent config edit --global        # open ~/.config/gedent/gedent.toml
gedent init                        # create a gedent.toml in the current directory

One-off overrides with --var

Any context variable can be overridden for a single run without editing config:

gedent gen scan --var frozen_atoms="[20, 28]" --var nsteps=20 mol.xyz
gedent gen sp --method b3lyp --basis-set def2-svp mol.xyz

Values after --var are parsed as TOML literals, so integers, booleans, and arrays work naturally.


Templates

Templates live in ~/.config/gedent/templates/<software>/<jobtype> and are rendered with Tera, a Jinja2-like engine.

Frontmatter

Each template starts with a Tera comment block that declares its metadata:

{#
software = "orca"
jobtype = "sp"
requires = ["method", "basis_set", "charge", "mult", "nprocs", "mem", "Molecule"]
description = "Single point energy"
#}
  • requires — variables that must be present in context before rendering. gedent reports a clear error listing what is missing.
  • software and jobtype — used by the template picker and the workflow layer.

Available context variables

All keys from [model], [resources], and [parameters] are injected into the Tera context. Key names match the TOML keys exactly:

Variable Source Notes
method [model]
basis_set [model]
charge [model]
mult [model]
dispersion [model]
solvent [model] also sets solvation = true
solvation derived true when solvent is set
solvation_model [model]
nprocs [resources]
mem [resources]
name molecule stem file stem of the input xyz file
Molecule xyz file parsed molecule object (see below)
anything else [parameters]

Variables are only present if they were set — use {% if x is defined %} before referencing optional ones.

The Molecule object

When an xyz file is provided, a Molecule is injected into context with:

  • Molecule.description — comment line from the xyz file
  • Molecule.atoms — list of { element, x, y, z } atom objects

Built-in Tera functions

gedent registers these functions in addition to Tera's built-ins:

Function Arguments Returns
print_coords(molecule) Molecule atom block (element x y z per line)
natoms(molecule) Molecule total atom count
count_element(molecule, symbol) Molecule, string count of atoms of that element
element_list(molecule) Molecule sorted unique element symbols
atom_symbol(molecule, i) Molecule, 1-based index element symbol of atom i
atom_coords(molecule, i) Molecule, 1-based index [x, y, z] array for atom i
measure(molecule, atoms) Molecule, index array distance (2), angle (3), or dihedral (4) in Å/°

All index arguments are 1-based.

Template example

{#
software = "orca"
jobtype = "sp"
requires = ["method", "basis_set", "charge", "mult", "nprocs", "mem", "Molecule"]
description = "Single point energy"
#}
! {{ method }} {{ basis_set }}{% if dispersion is defined %} {{ dispersion }}{% endif %}{% if solvation %} SMD({{ solvent }}){% endif %}

%pal
 nprocs {{ nprocs }}
end

%maxcore {{ mem }}

*xyz {{ charge }} {{ mult }}
{{ print_coords(molecule = Molecule) }}
*

Template commands

gedent template list               # list all available templates
gedent template print sp           # print template source
gedent template edit orca/opt      # open template in $EDITOR
gedent template new mytemplate     # create a new template from a preset

Generating inputs

gedent gen sp mol.xyz              # generate sp.inp (or sp.<default_extension>)
gedent gen orca/sp *.xyz           # generate one file per xyz
gedent gen sp mol.xyz --print      # print to stdout instead of writing a file
gedent gen sp mol.xyz --dry-run    # validate and show what would be written, no output
gedent gen sp mol.xyz --show-context  # dump the full Tera context as JSON
gedent gen sp mol.xyz --ext gjf    # override output extension
gedent gen sp --software gaussian mol.xyz  # override software for template lookup

Validation

Before rendering, gedent runs a validation pipeline and reports all issues at once. Errors abort generation; warnings proceed with output.

Checks performed:

  • Charge and multiplicity — electron count parity, physically impossible combinations
  • Superposed atoms — error if any two atoms are closer than 0.5 Å; warning if closer than half the sum of their covalent radii
  • Missing template variables — clear list of what requires but is absent from context
  • Solvation compatibility — e.g. XTB in ORCA requires ALPB solvation
  • Composite method variables — warning when basis_set or dispersion are set but the method (e.g. pbeh-3c) carries its own

Shell completion

gedent --generate fish   # or bash, zsh

Pipe the output to the appropriate completion file for your shell. Template names are completable in gedent gen and gedent template subcommands.


Contributing

Contributions are welcome — bug reports, feature requests, and pull requests at github.com/caprilesport/gedent.

Acknowledgments

Built on top of:

License

MIT

Releases

No releases published

Contributors