Compare commits
2 Commits
299ac49b40
...
541a876307
| Author | SHA1 | Date | |
|---|---|---|---|
| 541a876307 | |||
| 5126e0373f |
@@ -0,0 +1,28 @@
|
|||||||
|
# Maintainer: Janis Hutz <development@janishutz.com>
|
||||||
|
|
||||||
|
pkgname=archmgr-git
|
||||||
|
pkgver=0.0.0
|
||||||
|
pkgrel=1
|
||||||
|
pkgdesc='A nixos-like declarative config and package manager for Arch Linux'
|
||||||
|
arch=('any')
|
||||||
|
url="https://github.com/janishutz/archmgr"
|
||||||
|
license=('GPL3')
|
||||||
|
depends=('python', 'python-pyaml')
|
||||||
|
makedepends=('git')
|
||||||
|
provides=('archmgr')
|
||||||
|
conflicts=('archmgr')
|
||||||
|
source=("$pkgname"::git+${url}.git)
|
||||||
|
sha256sums=('SKIP') # TODO: Add?
|
||||||
|
|
||||||
|
pkgver() {
|
||||||
|
cd "${pkgname}"
|
||||||
|
|
||||||
|
# TODO: For the non-git pkgbuild, need to use different output
|
||||||
|
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
cd "${pkgname}"
|
||||||
|
|
||||||
|
# TODO: Need to finish
|
||||||
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import commands.init as init
|
|||||||
import commands.pull as pull
|
import commands.pull as pull
|
||||||
import commands.push as push
|
import commands.push as push
|
||||||
import commands.prepare as setup
|
import commands.prepare as setup
|
||||||
|
from config import load_config
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
args, ap = cliargs.add_cli_args()
|
args, ap = cliargs.add_cli_args()
|
||||||
@@ -29,6 +30,7 @@ if __name__ == "__main__":
|
|||||||
\\___/
|
\\___/
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
print(load_config("config.yml"))
|
||||||
try:
|
try:
|
||||||
if args.cmd == "commit":
|
if args.cmd == "commit":
|
||||||
commit.commit(args.force, args.no_render)
|
commit.commit(args.force, args.no_render)
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
},
|
},
|
||||||
"maxItems": 5,
|
"maxItems": 5,
|
||||||
"minItems": 1
|
"minItems": 1
|
||||||
|
},
|
||||||
|
"count": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "The number of mirrors to add to the list",
|
||||||
|
"maximum": 20,
|
||||||
|
"minimum": 3
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": [
|
"required": [
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
from typing import Any, cast
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
from config import validator
|
||||||
|
from config.merger import merge_configs
|
||||||
|
|
||||||
|
|
||||||
|
def _load_config_file(file: str):
|
||||||
|
with open(file, "r") as f:
|
||||||
|
parsed = yaml.load(f, Loader=yaml.FullLoader)
|
||||||
|
return parsed
|
||||||
|
|
||||||
|
|
||||||
|
def load_config(file: str):
|
||||||
|
# Load and validate initial config
|
||||||
|
try:
|
||||||
|
loaded_conf = _load_config_file(file)
|
||||||
|
except Exception:
|
||||||
|
return {}
|
||||||
|
if not validator.validate(loaded_conf):
|
||||||
|
return {}
|
||||||
|
|
||||||
|
conf = cast(dict[str, Any], loaded_conf)
|
||||||
|
requires = cast(list[str], conf["requires"])
|
||||||
|
conf.pop("requires")
|
||||||
|
|
||||||
|
# Recursively load files
|
||||||
|
for conf_file in requires:
|
||||||
|
conf = merge_configs(conf, load_config(conf_file))
|
||||||
|
|
||||||
|
return conf
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
def merge_configs(config: dict, new_config: dict):
|
||||||
|
if len(new_config) == 0 or len(config) == 0:
|
||||||
|
return config
|
||||||
|
|
||||||
|
# Merge configs
|
||||||
|
return config
|
||||||
+18
-2
@@ -1,2 +1,18 @@
|
|||||||
def validate():
|
import json
|
||||||
pass
|
import jsonschema
|
||||||
|
|
||||||
|
with open("config.schema.json") as file:
|
||||||
|
schema = json.load(file)
|
||||||
|
|
||||||
|
|
||||||
|
def validate(config):
|
||||||
|
try:
|
||||||
|
jsonschema.validate(config, schema)
|
||||||
|
except jsonschema.SchemaError:
|
||||||
|
print("Schema invalid")
|
||||||
|
return False
|
||||||
|
except jsonschema.ValidationError:
|
||||||
|
print("Config invalid")
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
pyyaml
|
||||||
pylette
|
pylette
|
||||||
argcomplete
|
argcomplete
|
||||||
inquirer
|
inquirer
|
||||||
|
|||||||
Reference in New Issue
Block a user