Finish template engine
This commit is contained in:
parent
258dd8ae75
commit
8c71086242
4 changed files with 50 additions and 4 deletions
1
Pipfile
1
Pipfile
|
@ -8,6 +8,7 @@ name = "pypi"
|
||||||
[packages]
|
[packages]
|
||||||
|
|
||||||
mako = "*"
|
mako = "*"
|
||||||
|
toml = "*"
|
||||||
|
|
||||||
|
|
||||||
[dev-packages]
|
[dev-packages]
|
||||||
|
|
10
Pipfile.lock
generated
10
Pipfile.lock
generated
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"_meta": {
|
"_meta": {
|
||||||
"hash": {
|
"hash": {
|
||||||
"sha256": "5f2a777077fa545ffa7e39a4b62c35aae42497d7e4786940f3e4b79fac2c5737"
|
"sha256": "aa3152fd503bd5d4cad9dccb32c96b17ad9ba583118340e3a8c4d7ef86a5acf0"
|
||||||
},
|
},
|
||||||
"host-environment-markers": {
|
"host-environment-markers": {
|
||||||
"implementation_name": "cpython",
|
"implementation_name": "cpython",
|
||||||
|
@ -67,6 +67,14 @@
|
||||||
"sha256:4e97332c9ce444b0c2c38dd22ddc61c743eb208d916e4265a2a3b575bdccb1d3"
|
"sha256:4e97332c9ce444b0c2c38dd22ddc61c743eb208d916e4265a2a3b575bdccb1d3"
|
||||||
],
|
],
|
||||||
"version": "==1.1.0"
|
"version": "==1.1.0"
|
||||||
|
},
|
||||||
|
"toml": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:f1db651f9657708513243e61e6cc67d101a39bad662eaa9b5546f789338e07a3",
|
||||||
|
"sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e",
|
||||||
|
"sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c"
|
||||||
|
],
|
||||||
|
"version": "==0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"develop": {}
|
"develop": {}
|
||||||
|
|
4
hosts.toml
Normal file
4
hosts.toml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[ayypad.i3status]
|
||||||
|
wireless = ["wlp4s0"]
|
||||||
|
ethernet = ["enp2s0"]
|
||||||
|
disks = ["/", "/home"]
|
39
install.py
39
install.py
|
@ -2,10 +2,14 @@
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import os
|
import os
|
||||||
|
import socket
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from mako.lookup import TemplateLookup
|
import mako.lookup
|
||||||
|
import mako.template
|
||||||
|
import toml
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
|
@ -20,16 +24,45 @@ def main():
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'-n', '--hostname',
|
'-n', '--hostname',
|
||||||
help='The hostname or other identifying name of this system.',
|
help='The hostname or other identifying name of this system that will'
|
||||||
default=os.environ.get('HOSTNAME'),
|
' be used to retrieve the host-specific configuration.',
|
||||||
|
default=os.environ.get('HOSTNAME') or socket.gethostname(),
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'-o', '--home',
|
'-o', '--home',
|
||||||
help='The home directory where generated dotfiles will be installed.',
|
help='The home directory where generated dotfiles will be installed.',
|
||||||
|
type=Path,
|
||||||
default=os.environ.get('HOME') or Path.home(),
|
default=os.environ.get('HOME') or Path.home(),
|
||||||
)
|
)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
templates_dir = args.dotfiles / 'templates'
|
||||||
|
include_dir = args.dotfiles / 'include'
|
||||||
|
|
||||||
|
with open(args.dotfiles / 'hosts.toml') as hosts_file:
|
||||||
|
hosts_config = toml.load(hosts_file)
|
||||||
|
|
||||||
|
lookup = mako.lookup.TemplateLookup(
|
||||||
|
directories=[
|
||||||
|
str(templates_dir),
|
||||||
|
str(include_dir),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
for template_path in templates_dir.glob('**/*'):
|
||||||
|
if not template_path.is_file():
|
||||||
|
continue
|
||||||
|
template = mako.template.Template(
|
||||||
|
filename=str(template_path),
|
||||||
|
strict_undefined=True,
|
||||||
|
lookup=lookup,
|
||||||
|
)
|
||||||
|
output = template.render(
|
||||||
|
host=hosts_config[args.hostname]
|
||||||
|
)
|
||||||
|
output_path = args.home / template_path.relative_to(templates_dir)
|
||||||
|
with open(output_path, 'w+') as output_file:
|
||||||
|
output_file.write(output)
|
||||||
|
|
||||||
|
|
||||||
main()
|
main()
|
||||||
|
|
Loading…
Add table
Reference in a new issue