mirror of
https://github.com/daylinmorgan/oizys.git
synced 2024-12-22 14:20:44 -06:00
new and improved hwylterm
This commit is contained in:
parent
7518c884c1
commit
d4d76d4a3d
4 changed files with 109 additions and 120 deletions
|
@ -8,7 +8,7 @@ buildNimblePackage {
|
||||||
verions = "unstable";
|
verions = "unstable";
|
||||||
src = lib.cleanSource ./.;
|
src = lib.cleanSource ./.;
|
||||||
nativeBuildInputs = [ openssl ];
|
nativeBuildInputs = [ openssl ];
|
||||||
nimbleDepsHash = "sha256-0F/rKcLUH95vW3ODB2mgMQ2klbN9rjMeP+LUK0Ucj2w=";
|
nimbleDepsHash = "sha256-YCHyMyy6cvNZgsmxPgskbAMETHs4/bP2Cp6XbjfWm1k=";
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
description = "nix begat oizys";
|
description = "nix begat oizys";
|
||||||
|
|
|
@ -1,24 +1,14 @@
|
||||||
{
|
{
|
||||||
"version": 2,
|
"version": 2,
|
||||||
"packages": {
|
"packages": {
|
||||||
"cligen": {
|
|
||||||
"version": "1.7.7",
|
|
||||||
"vcsRevision": "f50f887eacfe33866e22f8a0d322e29a1c830cf9",
|
|
||||||
"url": "https://github.com/c-blake/cligen.git",
|
|
||||||
"downloadMethod": "git",
|
|
||||||
"dependencies": [],
|
|
||||||
"checksums": {
|
|
||||||
"sha1": "237596b6be88dcf9ee0bd9732a7baaac526f0c07"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hwylterm": {
|
"hwylterm": {
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"vcsRevision": "56bb2bb7c1da402c2c52fb3f7f10620c7c2fca7e",
|
"vcsRevision": "a4e0f3fc7b34bac8e448dd35f58012d07dd4a0d0",
|
||||||
"url": "https://github.com/daylinmorgan/hwylterm",
|
"url": "https://github.com/daylinmorgan/hwylterm",
|
||||||
"downloadMethod": "git",
|
"downloadMethod": "git",
|
||||||
"dependencies": [],
|
"dependencies": [],
|
||||||
"checksums": {
|
"checksums": {
|
||||||
"sha1": "8810cf69a74de580e1ab08f0c153afbf33c8a98e"
|
"sha1": "848f75dc1bc910560e5e0038bf0a9ebf8d096385"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"jsony": {
|
"jsony": {
|
||||||
|
|
|
@ -11,8 +11,7 @@ bin = @["oizys"]
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
|
||||||
requires "nim >= 2.0.8"
|
requires "nim >= 2.0.8"
|
||||||
requires "cligen"
|
|
||||||
requires "jsony"
|
requires "jsony"
|
||||||
requires "zippy"
|
requires "zippy"
|
||||||
requires "https://github.com/daylinmorgan/hwylterm#HEAD"
|
requires "https://github.com/daylinmorgan/hwylterm#a4e0f3f"
|
||||||
|
|
||||||
|
|
|
@ -1,115 +1,115 @@
|
||||||
## nix begat oizys
|
## nix begat oizys
|
||||||
import std/[os, osproc, tables, sequtils, strformat, strutils]
|
import std/[os, osproc, sequtils, strformat, strutils]
|
||||||
import hwylterm, hwylterm/[cligen, logging]
|
import hwylterm, hwylterm/[hwylcli, logging]
|
||||||
import oizys/[context, github, nix, overlay, logging]
|
import oizys/[context, github, nix, logging]
|
||||||
|
|
||||||
|
|
||||||
proc confirm(q: string): bool =
|
|
||||||
stderr.write $(q & bb"[yellow] (Y/n) ")
|
|
||||||
while true:
|
|
||||||
let ans = readLine(stdin)
|
|
||||||
case ans.strip().toLowerAscii():
|
|
||||||
of "y","yes": return true
|
|
||||||
of "n","no": return false
|
|
||||||
else:
|
|
||||||
stderr.write($bb("[red]Please answer Yes/no\nexpected one of [b]Y,yes,N,no "))
|
|
||||||
stderr.write "\n"
|
|
||||||
|
|
||||||
overlay:
|
|
||||||
proc pre(
|
|
||||||
flake: string = "",
|
|
||||||
host: seq[string] = @[],
|
|
||||||
debug: bool = false,
|
|
||||||
resetCache: bool = false,
|
|
||||||
rest: seq[string],
|
|
||||||
) =
|
|
||||||
setupLoggers(debug)
|
|
||||||
updateContext(host, flake, debug, resetCache)
|
|
||||||
|
|
||||||
proc dry(minimal: bool = false) =
|
|
||||||
## dry run build
|
|
||||||
nixBuildHostDry(minimal, rest)
|
|
||||||
|
|
||||||
proc output(yes: bool = false) =
|
|
||||||
## nixos config attr
|
|
||||||
echo nixosConfigAttrs().join(" ")
|
|
||||||
|
|
||||||
proc update(
|
|
||||||
yes: bool = false,
|
|
||||||
preview: bool = false
|
|
||||||
) =
|
|
||||||
## update and run nixos-rebuild
|
|
||||||
let hosts = getHosts()
|
|
||||||
if hosts.len > 1: fatalQuit "operation only supports one host"
|
|
||||||
let run = getLastUpdateRun()
|
|
||||||
echo fmt"run created at: {run.created_at}"
|
|
||||||
echo "nvd diff:\n", getUpdateSummary(run.id, hosts[0])
|
|
||||||
if preview: quit 0
|
|
||||||
if yes or confirm("Proceed with system update?"):
|
|
||||||
updateRepo()
|
|
||||||
nixosRebuild("switch")
|
|
||||||
|
|
||||||
proc build(minimal: bool = false) =
|
|
||||||
## nix build
|
|
||||||
nixBuild(minimal, rest)
|
|
||||||
|
|
||||||
proc cache(name: string = "oizys", service: string = "attic", jobs: int = countProcessors()) =
|
|
||||||
## build and push store paths
|
|
||||||
nixBuildWithCache(name, rest, service, jobs)
|
|
||||||
|
|
||||||
proc osCmd() =
|
|
||||||
## nixos-rebuild
|
|
||||||
if len(rest) == 0: fatalQuit "please provide subcmd"
|
|
||||||
let subcmd = rest[0]
|
|
||||||
if subcmd notin nixosSubcmds:
|
|
||||||
fatalQuit(
|
|
||||||
&"unknown nixos-rebuild subcmd: {subcmd}\nexpected one of: \n" &
|
|
||||||
nixosSubcmds.mapIt(" " & it).join("\n")
|
|
||||||
)
|
|
||||||
nixosRebuild(subcmd, rest[1..^1])
|
|
||||||
|
|
||||||
proc ci(`ref`: string = "main") =
|
|
||||||
## trigger GHA
|
|
||||||
if rest.len == 0: fatalQuit "expected workflow file name"
|
|
||||||
createDispatch(rest[0], `ref`)
|
|
||||||
|
|
||||||
proc checkExes() =
|
proc checkExes() =
|
||||||
if findExe("nix") == "":
|
if findExe("nix") == "":
|
||||||
fatalQuit "oizys requires nix"
|
fatalQuit "oizys requires nix"
|
||||||
|
|
||||||
|
checkexes()
|
||||||
|
hwylCli:
|
||||||
|
name "oizys"
|
||||||
|
globalFlags:
|
||||||
|
flake "path/to/flake"
|
||||||
|
host:
|
||||||
|
T seq[string]
|
||||||
|
? "host(s) to build"
|
||||||
|
# - h conflicts with autoadded help short flag
|
||||||
|
debug:
|
||||||
|
T bool
|
||||||
|
? "enable debug mode"
|
||||||
|
- d
|
||||||
|
resetCache:
|
||||||
|
T bool
|
||||||
|
? "set cache timeout to 0"
|
||||||
|
- r
|
||||||
|
preSub:
|
||||||
|
setupLoggers(debug)
|
||||||
|
updateContext(host, flake, debug, resetCache)
|
||||||
|
subcommands:
|
||||||
|
|
||||||
when isMainModule:
|
--- build
|
||||||
import cligen
|
... "nix build"
|
||||||
checkExes()
|
flags:
|
||||||
hwylCli(clCfg)
|
minimal:
|
||||||
|
T bool
|
||||||
|
- m
|
||||||
|
run:
|
||||||
|
nixBuild(minimal, args)
|
||||||
|
|
||||||
const
|
--- cache
|
||||||
sharedHelp = //{
|
... "build and push store paths"
|
||||||
"flake" : "path/to/flake",
|
flags:
|
||||||
"host" : "host(s) to build",
|
name:
|
||||||
"debug" : "enable debug mode",
|
* "oizys"
|
||||||
"resetCache" : "set cache timeout to 0"
|
? "name of binary cache"
|
||||||
}
|
service:
|
||||||
updateHelp = //{
|
* "attic"
|
||||||
"yes" : "skip all confirmation prompts"
|
jobs:
|
||||||
} // sharedHelp
|
* countProcessors()
|
||||||
ciHelp = //{
|
? "jobs when pushing paths"
|
||||||
"ref" : "git ref/branch/tag to trigger workflow on"
|
T int
|
||||||
}
|
run:
|
||||||
cacheHelp = //{
|
nixBuildWithCache(name, args, service, jobs)
|
||||||
"name" : "name of cachix binary cache",
|
|
||||||
"jobs" : "jobs when pushing paths"
|
|
||||||
} // sharedHelp
|
|
||||||
let
|
|
||||||
osUsage = $bb("$command [[subcmd] $args\n$doc[bold]Options[/]:\n$options")
|
|
||||||
|
|
||||||
dispatchMulti(
|
--- ci
|
||||||
[build, help = sharedHelp, usage = clCfg.use ],
|
... "trigger GHA"
|
||||||
[cache, help = cacheHelp , usage = clCfg.use ],
|
flags:
|
||||||
[ci, help = ciHelp , usage = clCfg.use ],
|
`ref`:
|
||||||
[dry, help = sharedHelp, usage = clCfg.use ],
|
? "git ref/branch/tag to trigger workflow on"
|
||||||
[osCmd, help = sharedHelp, usage = osUsage, cmdName = "os"],
|
* "main"
|
||||||
[output, help = sharedHelp, usage = clCfg.use],
|
run:
|
||||||
[update, help = updateHelp, usage = clCfg.use],
|
if args.len == 0: fatalQuit "expected workflow file name"
|
||||||
)
|
createDispatch(args[0], `ref`)
|
||||||
|
|
||||||
|
--- dry
|
||||||
|
... "dry run build"
|
||||||
|
flags:
|
||||||
|
minimal:
|
||||||
|
T bool
|
||||||
|
run:
|
||||||
|
nixBuildHostDry(minimal, args)
|
||||||
|
|
||||||
|
--- os
|
||||||
|
? "[b]oizys os[/] [i]subcmd[/] [[[faint]flags[/]]"
|
||||||
|
... "nixos-rebuild [italic]subcmd[/]"
|
||||||
|
run:
|
||||||
|
if args.len == 0: fatalQuit "please provide subcmd"
|
||||||
|
let subcmd = args[0]
|
||||||
|
if subcmd notin nixosSubcmds:
|
||||||
|
fatalQuit(
|
||||||
|
&"unknown nixos-rebuild subcmd: {subcmd}\nexpected one of: \n" &
|
||||||
|
nixosSubcmds.mapIt(" " & it).join("\n")
|
||||||
|
)
|
||||||
|
nixosRebuild(subcmd, args[1..^1])
|
||||||
|
|
||||||
|
--- output
|
||||||
|
... "nixos config attr"
|
||||||
|
flags:
|
||||||
|
yes:
|
||||||
|
T bool
|
||||||
|
? "skip all confirmation prompts"
|
||||||
|
run:
|
||||||
|
echo nixosConfigAttrs().join(" ")
|
||||||
|
|
||||||
|
--- update
|
||||||
|
... "update and run nixos-rebuild"
|
||||||
|
flags:
|
||||||
|
yes:
|
||||||
|
T bool
|
||||||
|
? "skip all confirmation prompts"
|
||||||
|
preview:
|
||||||
|
T bool
|
||||||
|
? "show preview and exit"
|
||||||
|
run:
|
||||||
|
let hosts = getHosts()
|
||||||
|
if hosts.len > 1: fatalQuit "operation only supports one host"
|
||||||
|
let run = getLastUpdateRun()
|
||||||
|
echo fmt"run created at: {run.created_at}"
|
||||||
|
echo "nvd diff:\n", getUpdateSummary(run.id, hosts[0])
|
||||||
|
if preview: quit 0
|
||||||
|
if yes or confirm("Proceed with system update?"):
|
||||||
|
updateRepo()
|
||||||
|
nixosRebuild("switch")
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue