mirror of
https://github.com/daylinmorgan/oizys.git
synced 2024-12-26 21:50:44 -06:00
Compare commits
No commits in common. "8d77bde4370b01ec92ef1b81bd811ae88cfb89a9" and "c40f5c7f0d95e2ca3ccc376cd2aabdbcc965e793" have entirely different histories.
8d77bde437
...
c40f5c7f0d
36 changed files with 1742 additions and 39 deletions
74
flake.lock
74
flake.lock
|
@ -305,11 +305,11 @@
|
||||||
"xdph": "xdph"
|
"xdph": "xdph"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1719350558,
|
"lastModified": 1719164993,
|
||||||
"narHash": "sha256-oACeKBS762XSJbN/rz5Y2xPYGzWQHhwDqn+CeODuWsM=",
|
"narHash": "sha256-FABhTnL6CBNrvsHVrEXWYoH+zrNfA4yPmgorQupUSZo=",
|
||||||
"ref": "refs/heads/main",
|
"ref": "refs/heads/main",
|
||||||
"rev": "e4d09aa3a9de9a9e71c10bf4b6800585b3db9a4c",
|
"rev": "8a68199a0ceb2894a5d9cc300961c38123ac0312",
|
||||||
"revCount": 4891,
|
"revCount": 4879,
|
||||||
"submodules": true,
|
"submodules": true,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/hyprwm/Hyprland/"
|
"url": "https://github.com/hyprwm/Hyprland/"
|
||||||
|
@ -426,11 +426,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1719316102,
|
"lastModified": 1718804078,
|
||||||
"narHash": "sha256-dmRz128j/lJmMuTYeCYPfSBRHHQO3VeH4PbmoyAhHzw=",
|
"narHash": "sha256-CqRZne63BpYlPd/i8lXV0UInUt59oKogiwdVtBRHt60=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprutils",
|
"repo": "hyprutils",
|
||||||
"rev": "1f6bbec5954f623ff8d68e567bddcce97cd2f085",
|
"rev": "4f1351295c55a8f51219b25aa4a6497a067989d0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -451,11 +451,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1719067853,
|
"lastModified": 1718119275,
|
||||||
"narHash": "sha256-mAnZG/eQy72Fp1ImGtqCgUrDumnR1rMZv2E/zgP4U74=",
|
"narHash": "sha256-nqDYXATNkyGXVmNMkT19fT4sjtSPBDS1LLOxa3Fueo4=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprwayland-scanner",
|
"repo": "hyprwayland-scanner",
|
||||||
"rev": "914f083741e694092ee60a39d31f693d0a6dc734",
|
"rev": "1419520d5f7f38d35e05504da5c1b38212a38525",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -538,11 +538,11 @@
|
||||||
"treefmt-nix": "treefmt-nix"
|
"treefmt-nix": "treefmt-nix"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1719247822,
|
"lastModified": 1719227224,
|
||||||
"narHash": "sha256-qbtex5uSOUQnK4797JztyTQWlnlhEsE8x5g5qs5DgvQ=",
|
"narHash": "sha256-zvi2YfvlOLtui2JFhPs2qybpnJR3/2luMfp8t/eMh54=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nix-eval-jobs",
|
"repo": "nix-eval-jobs",
|
||||||
"rev": "9bed665aa71907dcacc8ae6dba1a3055a9ff2de7",
|
"rev": "32071eb9635dbe0e1e8fc750ea1aac6808272018",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -677,11 +677,11 @@
|
||||||
"nixpkgs": "nixpkgs_7"
|
"nixpkgs": "nixpkgs_7"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1719422118,
|
"lastModified": 1719246077,
|
||||||
"narHash": "sha256-lM5QMm2Ig1eurRIQFVAg7KAcg4H+tMKN+M/eyraze+A=",
|
"narHash": "sha256-ZE+7chVVT/WQ9pfu8qfnR+Y3++LZQ3wUpj5pe1F4rv4=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixpkgs-wayland",
|
"repo": "nixpkgs-wayland",
|
||||||
"rev": "3d5a11c31e5815dcf6a66451e63a2f4631ecbf7a",
|
"rev": "2bdc10495e152111b53643745450116ffae5b0aa",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -692,11 +692,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1719075281,
|
"lastModified": 1718530797,
|
||||||
"narHash": "sha256-CyyxvOwFf12I91PBWz43iGT1kjsf5oi6ax7CrvaMyAo=",
|
"narHash": "sha256-pup6cYwtgvzDpvpSCFh1TEUjw2zkNpk8iolbKnyFmmU=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "a71e967ef3694799d0c418c98332f7ff4cc5f6af",
|
"rev": "b60ebf54c15553b393d144357375ea956f89e9a9",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -740,11 +740,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_5": {
|
"nixpkgs_5": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1719317636,
|
"lastModified": 1719082008,
|
||||||
"narHash": "sha256-bu0xbu2Z6DDzA9LGV81yJunIti6r7tjUImeR8orAL/I=",
|
"narHash": "sha256-jHJSUH619zBQ6WdC21fFAlDxHErKVDJ5fpN0Hgx4sjs=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "9c513fc6fb75142f6aec6b7545cb8af2236b80f5",
|
"rev": "9693852a2070b398ee123a329e68f0dab5526681",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -756,11 +756,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_6": {
|
"nixpkgs_6": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1719082008,
|
"lastModified": 1715037484,
|
||||||
"narHash": "sha256-jHJSUH619zBQ6WdC21fFAlDxHErKVDJ5fpN0Hgx4sjs=",
|
"narHash": "sha256-OUt8xQFmBU96Hmm4T9tOWTu4oCswCzoVl+pxSq/kiFc=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "9693852a2070b398ee123a329e68f0dab5526681",
|
"rev": "ad7efee13e0d216bf29992311536fce1d3eefbef",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -772,11 +772,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_7": {
|
"nixpkgs_7": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1719254875,
|
"lastModified": 1719075281,
|
||||||
"narHash": "sha256-ECni+IkwXjusHsm9Sexdtq8weAq/yUyt1TWIemXt3Ko=",
|
"narHash": "sha256-CyyxvOwFf12I91PBWz43iGT1kjsf5oi6ax7CrvaMyAo=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "2893f56de08021cffd9b6b6dfc70fd9ccd51eb60",
|
"rev": "a71e967ef3694799d0c418c98332f7ff4cc5f6af",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -849,11 +849,11 @@
|
||||||
"rust-overlay": "rust-overlay"
|
"rust-overlay": "rust-overlay"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1719383847,
|
"lastModified": 1719241025,
|
||||||
"narHash": "sha256-MhKnV9IHpeMbiARX5e+6LLXYJenNNx0YNFGCVtmufu8=",
|
"narHash": "sha256-EV39oqCYrE1JXZTCSG20AULpOFqpmuHyGy1u5Nhg6Io=",
|
||||||
"owner": "roc-lang",
|
"owner": "roc-lang",
|
||||||
"repo": "roc",
|
"repo": "roc",
|
||||||
"rev": "f8c6786502bc253ab202a55e2bccdcc693e549c8",
|
"rev": "d47a073634e79d2db69a67fd08a12b714d46b514",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -908,11 +908,11 @@
|
||||||
},
|
},
|
||||||
"stable": {
|
"stable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1719234068,
|
"lastModified": 1719122173,
|
||||||
"narHash": "sha256-1AjSIedDC/aERt24KsCUftLpVppW61S7awfjGe7bMio=",
|
"narHash": "sha256-aEMsNUtqSPwn6l+LIZ/rX++nCgun3E9M3uSZs6Rwb7w=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "90bd1b26e23760742fdcb6152369919098f05417",
|
"rev": "906320ae02f769d13a646eb3605a9821df0d6ea2",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -1147,11 +1147,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1719364424,
|
"lastModified": 1719192015,
|
||||||
"narHash": "sha256-EGpIcuGfpx+NQJGUho8vK5Q3TFHdaHtTLoqV/V+n4oY=",
|
"narHash": "sha256-6hrQt6y+P0qV/VkJQ4n4bZSaZLJNYXrKecS6B1xb9Wk=",
|
||||||
"owner": "Cloudef",
|
"owner": "Cloudef",
|
||||||
"repo": "zig2nix",
|
"repo": "zig2nix",
|
||||||
"rev": "67d44febbeb1fad4c861a5c4d67a8f6719f7f763",
|
"rev": "048bebf58984486cf45c5e4119f4b149f27d7f1f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
@ -54,7 +54,10 @@ in
|
||||||
nixosModules = listToAttrs (findModulesList ../modules);
|
nixosModules = listToAttrs (findModulesList ../modules);
|
||||||
nixosConfigurations = mapAttrs (name: _: mkSystem name) (readDir ../hosts);
|
nixosConfigurations = mapAttrs (name: _: mkSystem name) (readDir ../hosts);
|
||||||
packages = forAllSystems (pkgs: rec {
|
packages = forAllSystems (pkgs: rec {
|
||||||
oizys-go = pkgs.callPackage ../pkgs/oizys {};
|
# oizys-zig = pkgs.callPackage ../pkgs/oizys/oizys-zig { inherit zig2nix; };
|
||||||
|
# oizys-nim = pkgs.callPackage ../pkgs/oizys/oizys-nim { };
|
||||||
|
# oizys-rs = pkgs.callPackage ../pkgs/oizys/oizys-rs { };
|
||||||
|
oizys-go = pkgs.callPackage ../pkgs/oizys/oizys-go { inherit self; };
|
||||||
default = oizys-go;
|
default = oizys-go;
|
||||||
});
|
});
|
||||||
devShells = forAllSystems (pkgs: {
|
devShells = forAllSystems (pkgs: {
|
||||||
|
@ -73,5 +76,7 @@ in
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
formatter = forAllSystems (pkgs: pkgs.nixfmt-rfc-style);
|
formatter = forAllSystems (pkgs: pkgs.nixfmt-rfc-style);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
{
|
{
|
||||||
|
self,
|
||||||
lib,
|
lib,
|
||||||
installShellFiles,
|
installShellFiles,
|
||||||
buildGoModule,
|
buildGoModule,
|
||||||
|
@ -12,7 +13,7 @@ let
|
||||||
in
|
in
|
||||||
buildGoModule {
|
buildGoModule {
|
||||||
pname = "oizys";
|
pname = "oizys";
|
||||||
version = "unstable";
|
version = "${self.shortRev or "dirty"}";
|
||||||
|
|
||||||
src = cleanSource ./.;
|
src = cleanSource ./.;
|
||||||
vendorHash = "sha256-/JVXhXrU2np/ty7AGFy+LPZCo1NaLYl9NAyD9+FJYBI=";
|
vendorHash = "sha256-/JVXhXrU2np/ty7AGFy+LPZCo1NaLYl9NAyD9+FJYBI=";
|
6
pkgs/oizys/oizys-nim/default.nix
Normal file
6
pkgs/oizys/oizys-nim/default.nix
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{ buildNimPackage }:
|
||||||
|
buildNimPackage {
|
||||||
|
pname = "oizys";
|
||||||
|
version = "unstable";
|
||||||
|
src = ./.;
|
||||||
|
}
|
197
pkgs/oizys/oizys-nim/oizys.nim
Normal file
197
pkgs/oizys/oizys-nim/oizys.nim
Normal file
|
@ -0,0 +1,197 @@
|
||||||
|
import std/[macros, os, osproc, parseopt, times, strformat, strutils, terminal]
|
||||||
|
from std/nativesockets import getHostname
|
||||||
|
|
||||||
|
let summaryFile = getEnv("GITHUB_STEP_SUMMARY")
|
||||||
|
|
||||||
|
macro doc(procedure: typed): untyped =
|
||||||
|
## extract documenatation comments from procedure
|
||||||
|
procedure.expectKind(nnkSym)
|
||||||
|
if procedure.symKind != nskProc:
|
||||||
|
error("procedure expected", procedure)
|
||||||
|
let
|
||||||
|
impl = procedure.getImpl
|
||||||
|
docs = impl.body.extractDocCommentsAndRunnables
|
||||||
|
var doc: string
|
||||||
|
for element in docs:
|
||||||
|
if element.kind == nnkCommentStmt:
|
||||||
|
doc.addSep("\n", startLen = 1)
|
||||||
|
doc.add($element)
|
||||||
|
result = newLit(doc)
|
||||||
|
|
||||||
|
proc logInfo(args: varargs[string, `$`]) =
|
||||||
|
stdout.styledWriteLine(
|
||||||
|
fgCyan, "oizys", resetStyle, "|",
|
||||||
|
styleDim, "INFO", resetStyle, "| ",
|
||||||
|
args.join("")
|
||||||
|
)
|
||||||
|
|
||||||
|
proc logErr(args: varargs[string, `$`]) =
|
||||||
|
stdout.styledWriteLine(
|
||||||
|
fgCyan, "oizys", resetStyle, "|",
|
||||||
|
fgRed, "ERROR", resetStyle, "| ",
|
||||||
|
args.join("")
|
||||||
|
)
|
||||||
|
|
||||||
|
proc logWarn(args: varargs[string, `$`]) =
|
||||||
|
stdout.styledWriteLine(
|
||||||
|
fgCyan, "oizys", resetStyle, "|",
|
||||||
|
fgYellow, "WARN", resetStyle, "| ",
|
||||||
|
args.join("")
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
type
|
||||||
|
OizysContext = object
|
||||||
|
flake, host: string
|
||||||
|
extraArgs: seq[string]
|
||||||
|
cache = "daylin"
|
||||||
|
pinix: bool = true
|
||||||
|
|
||||||
|
proc execQuit(c: OizysContext, args: varargs[string]) =
|
||||||
|
let cmd = (@args & c.extraArgs).join(" ")
|
||||||
|
logInfo "exec: ", cmd
|
||||||
|
quit (execCmd cmd)
|
||||||
|
|
||||||
|
proc newCtx(): OizysContext =
|
||||||
|
result = OizysContext()
|
||||||
|
result.flake = getEnv("FLAKE_PATH", getEnv("HOME") / "oizys")
|
||||||
|
result.host = getHostname()
|
||||||
|
|
||||||
|
proc check(c: OizysContext) =
|
||||||
|
if not dirExists c.flake:
|
||||||
|
logErr c.flake, "does not exist"
|
||||||
|
logErr "please use -f/--flake or $FLAKE_PATH"
|
||||||
|
quit 1
|
||||||
|
logInfo "flake:", c.flake
|
||||||
|
logInfo "host:", c.host
|
||||||
|
|
||||||
|
proc cmd(c: OizysContext): string {.inline.} =
|
||||||
|
let pixExists = findExe("pix") != ""
|
||||||
|
if c.pinix:
|
||||||
|
if pixExists:
|
||||||
|
return "pix"
|
||||||
|
else:
|
||||||
|
logWarn "pinix not found, falling back to nix"
|
||||||
|
return "nix"
|
||||||
|
|
||||||
|
proc systemFlakePath(c: OizysContext): string =
|
||||||
|
c.flake & "#nixosConfigurations." & c.host & ".config.system.build.toplevel"
|
||||||
|
|
||||||
|
proc build(c: OizysContext) =
|
||||||
|
## build nixos
|
||||||
|
execQuit c, c.cmd, "build", c.systemFlakePath
|
||||||
|
|
||||||
|
proc dry(c: OizysContext) =
|
||||||
|
## poor man's nix flake check
|
||||||
|
execQuit c, c.cmd, "build", c.systemFlakePath, "--dry-run"
|
||||||
|
|
||||||
|
proc cache(c: OizysContext) =
|
||||||
|
## build and push to cachix
|
||||||
|
let start = now()
|
||||||
|
let code = execCmd """
|
||||||
|
cachix watch-exec """ & c.cache & """ \
|
||||||
|
-- \
|
||||||
|
nix build """ & c.systemFlakePath & """ \
|
||||||
|
--print-build-logs \
|
||||||
|
--accept-flake-config
|
||||||
|
"""
|
||||||
|
|
||||||
|
let duration = (now() - start)
|
||||||
|
if code != 0:
|
||||||
|
logErr "failed to build configuration for: ", c.host
|
||||||
|
quit code
|
||||||
|
|
||||||
|
if summaryFile != "":
|
||||||
|
writeFile(
|
||||||
|
summaryFile,
|
||||||
|
"Built host: " & c.host & " in " & $duration & " seconds"
|
||||||
|
)
|
||||||
|
logInfo "Built host: " & c.host & " in " & $duration & " seconds"
|
||||||
|
|
||||||
|
|
||||||
|
proc nixosRebuild(c: OizysContext, subcmd: string) =
|
||||||
|
let cmd = if c.pinix: "pixos-rebuild" else: "nixos-rebuild"
|
||||||
|
execQuit c, "sudo", cmd, subcmd, "--flake", c.flake
|
||||||
|
|
||||||
|
proc boot(c: OizysContext) =
|
||||||
|
## nixos rebuild boot
|
||||||
|
nixosRebuild c, "build"
|
||||||
|
|
||||||
|
proc switch(c: OizysContext) =
|
||||||
|
## nixos rebuild switch
|
||||||
|
nixosRebuild c, "switch"
|
||||||
|
|
||||||
|
proc path(c: OizysContext) =
|
||||||
|
## print nix flake output
|
||||||
|
echo c.systemFlakePath
|
||||||
|
|
||||||
|
const usage = fmt"""
|
||||||
|
oizys <cmd> [opts]
|
||||||
|
|
||||||
|
commands:
|
||||||
|
dry {dry.doc}
|
||||||
|
boot {boot.doc}
|
||||||
|
switch {switch.doc}
|
||||||
|
cache {cache.doc}
|
||||||
|
build {build.doc}
|
||||||
|
path {path.doc}
|
||||||
|
|
||||||
|
options:
|
||||||
|
-h|--help show this help
|
||||||
|
--host hostname (current host)
|
||||||
|
-f|--flake path to flake ($FLAKE_PATH or $HOME/oizys)
|
||||||
|
-c|--cache name of cachix binary cache (daylin)
|
||||||
|
--no-pinix don't use pinix
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
proc runCmd(c: OizysContext, cmd: string) =
|
||||||
|
case cmd:
|
||||||
|
of "dry": dry c
|
||||||
|
of "switch": switch c
|
||||||
|
of "boot": boot c
|
||||||
|
of "cache": cache c
|
||||||
|
of "build": build c
|
||||||
|
of "path": path c
|
||||||
|
else:
|
||||||
|
logErr "unknown command: ", cmd
|
||||||
|
echo usage
|
||||||
|
quit 1
|
||||||
|
|
||||||
|
|
||||||
|
proc parseFlag(c: var OizysContext, kind: CmdLineKind, key, val: string) =
|
||||||
|
case key:
|
||||||
|
of "h", "help":
|
||||||
|
echo usage; quit 0
|
||||||
|
of "host":
|
||||||
|
c.host = val
|
||||||
|
of "f", "flake":
|
||||||
|
c.flake = val
|
||||||
|
of "no-pinix":
|
||||||
|
c.pinix = false
|
||||||
|
else:
|
||||||
|
c.extraArgs.add (if kind == cmdLongOption: "--" else: "-") & key
|
||||||
|
c.extraArgs.add val
|
||||||
|
|
||||||
|
when isMainModule:
|
||||||
|
var
|
||||||
|
c = newCtx()
|
||||||
|
subcmd: string
|
||||||
|
var p = initOptParser(
|
||||||
|
longNoVal = @["no-pinix", "help", ""], shortNoVal = {'h'}
|
||||||
|
)
|
||||||
|
for kind, key, val in p.getopt():
|
||||||
|
case kind
|
||||||
|
of cmdArgument:
|
||||||
|
subcmd = key
|
||||||
|
of cmdLongOption, cmdShortOption:
|
||||||
|
if key == "": break
|
||||||
|
parseFlag c, kind, key, val
|
||||||
|
of cmdEnd:
|
||||||
|
discard
|
||||||
|
if subcmd == "":
|
||||||
|
echo "please specify a command"
|
||||||
|
echo usage; quit 1
|
||||||
|
c.extraArgs = p.remainingArgs
|
||||||
|
check c
|
||||||
|
runCmd c, subcmd
|
13
pkgs/oizys/oizys-nim/oizys.nimble
Normal file
13
pkgs/oizys/oizys-nim/oizys.nimble
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
# Package
|
||||||
|
|
||||||
|
author = "Daylin Morgan"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = "oizys"
|
||||||
|
license = "MIT"
|
||||||
|
srcDir = "."
|
||||||
|
bin = @["oizys"]
|
||||||
|
|
||||||
|
|
||||||
|
# Dependencies
|
||||||
|
|
||||||
|
requires "nim >= 2.0.0"
|
19
pkgs/oizys/oizys-rs/.gitignore
vendored
Normal file
19
pkgs/oizys/oizys-rs/.gitignore
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# Created by https://www.toptal.com/developers/gitignore/api/rust
|
||||||
|
# Edit at https://www.toptal.com/developers/gitignore?templates=rust
|
||||||
|
|
||||||
|
### Rust ###
|
||||||
|
# Generated by Cargo
|
||||||
|
# will have compiled files and executables
|
||||||
|
debug/
|
||||||
|
target/
|
||||||
|
|
||||||
|
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
|
||||||
|
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
|
||||||
|
|
||||||
|
# These are backup files generated by rustfmt
|
||||||
|
**/*.rs.bk
|
||||||
|
|
||||||
|
# MSVC Windows builds of rustc generate these, which store debugging information
|
||||||
|
*.pdb
|
||||||
|
|
||||||
|
# End of https://www.toptal.com/developers/gitignore/api/rust
|
792
pkgs/oizys/oizys-rs/Cargo.lock
generated
Normal file
792
pkgs/oizys/oizys-rs/Cargo.lock
generated
Normal file
|
@ -0,0 +1,792 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "android-tzdata"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "android_system_properties"
|
||||||
|
version = "0.1.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anstream"
|
||||||
|
version = "0.6.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b"
|
||||||
|
dependencies = [
|
||||||
|
"anstyle",
|
||||||
|
"anstyle-parse",
|
||||||
|
"anstyle-query",
|
||||||
|
"anstyle-wincon",
|
||||||
|
"colorchoice",
|
||||||
|
"is_terminal_polyfill",
|
||||||
|
"utf8parse",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anstyle"
|
||||||
|
version = "1.0.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anstyle-parse"
|
||||||
|
version = "0.2.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4"
|
||||||
|
dependencies = [
|
||||||
|
"utf8parse",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anstyle-query"
|
||||||
|
version = "1.0.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5"
|
||||||
|
dependencies = [
|
||||||
|
"windows-sys 0.52.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anstyle-wincon"
|
||||||
|
version = "3.0.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19"
|
||||||
|
dependencies = [
|
||||||
|
"anstyle",
|
||||||
|
"windows-sys 0.52.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "autocfg"
|
||||||
|
version = "1.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bitflags"
|
||||||
|
version = "1.3.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bumpalo"
|
||||||
|
version = "3.16.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cc"
|
||||||
|
version = "1.0.97"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cfg-if"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "chrono"
|
||||||
|
version = "0.4.38"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
|
||||||
|
dependencies = [
|
||||||
|
"android-tzdata",
|
||||||
|
"iana-time-zone",
|
||||||
|
"num-traits",
|
||||||
|
"serde",
|
||||||
|
"windows-targets 0.52.5",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap"
|
||||||
|
version = "4.5.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0"
|
||||||
|
dependencies = [
|
||||||
|
"clap_builder",
|
||||||
|
"clap_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_builder"
|
||||||
|
version = "4.5.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4"
|
||||||
|
dependencies = [
|
||||||
|
"anstream",
|
||||||
|
"anstyle",
|
||||||
|
"clap_lex",
|
||||||
|
"strsim",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_complete"
|
||||||
|
version = "4.5.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dd79504325bf38b10165b02e89b4347300f855f273c4cb30c4a3209e6583275e"
|
||||||
|
dependencies = [
|
||||||
|
"clap",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_derive"
|
||||||
|
version = "4.5.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64"
|
||||||
|
dependencies = [
|
||||||
|
"heck",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_lex"
|
||||||
|
version = "0.7.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "colorchoice"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "colored"
|
||||||
|
version = "2.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8"
|
||||||
|
dependencies = [
|
||||||
|
"lazy_static",
|
||||||
|
"windows-sys 0.48.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "core-foundation-sys"
|
||||||
|
version = "0.8.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures"
|
||||||
|
version = "0.3.30"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
|
||||||
|
dependencies = [
|
||||||
|
"futures-channel",
|
||||||
|
"futures-core",
|
||||||
|
"futures-executor",
|
||||||
|
"futures-io",
|
||||||
|
"futures-sink",
|
||||||
|
"futures-task",
|
||||||
|
"futures-util",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-channel"
|
||||||
|
version = "0.3.30"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
|
||||||
|
dependencies = [
|
||||||
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-core"
|
||||||
|
version = "0.3.30"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-executor"
|
||||||
|
version = "0.3.30"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
|
||||||
|
dependencies = [
|
||||||
|
"futures-core",
|
||||||
|
"futures-task",
|
||||||
|
"futures-util",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-io"
|
||||||
|
version = "0.3.30"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-macro"
|
||||||
|
version = "0.3.30"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-sink"
|
||||||
|
version = "0.3.30"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-task"
|
||||||
|
version = "0.3.30"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-util"
|
||||||
|
version = "0.3.30"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
|
||||||
|
dependencies = [
|
||||||
|
"futures-channel",
|
||||||
|
"futures-core",
|
||||||
|
"futures-io",
|
||||||
|
"futures-macro",
|
||||||
|
"futures-sink",
|
||||||
|
"futures-task",
|
||||||
|
"memchr",
|
||||||
|
"pin-project-lite",
|
||||||
|
"pin-utils",
|
||||||
|
"slab",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "heck"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "homedir"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "22074da8bba2ef26fc1737ae6c777b5baab5524c2dc403b5c6a76166766ccda5"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"nix",
|
||||||
|
"serde",
|
||||||
|
"widestring",
|
||||||
|
"windows-sys 0.48.0",
|
||||||
|
"wmi",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hostname"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f9c7c7c8ac16c798734b8a24560c1362120597c40d5e1459f09498f8f6c8f2ba"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"libc",
|
||||||
|
"windows",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "iana-time-zone"
|
||||||
|
version = "0.1.60"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
|
||||||
|
dependencies = [
|
||||||
|
"android_system_properties",
|
||||||
|
"core-foundation-sys",
|
||||||
|
"iana-time-zone-haiku",
|
||||||
|
"js-sys",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"windows-core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "iana-time-zone-haiku"
|
||||||
|
version = "0.1.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "is_terminal_polyfill"
|
||||||
|
version = "1.70.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "js-sys"
|
||||||
|
version = "0.3.69"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d"
|
||||||
|
dependencies = [
|
||||||
|
"wasm-bindgen",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lazy_static"
|
||||||
|
version = "1.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libc"
|
||||||
|
version = "0.2.154"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "log"
|
||||||
|
version = "0.4.21"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "memchr"
|
||||||
|
version = "2.7.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "memoffset"
|
||||||
|
version = "0.7.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nix"
|
||||||
|
version = "0.26.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags",
|
||||||
|
"cfg-if",
|
||||||
|
"libc",
|
||||||
|
"memoffset",
|
||||||
|
"pin-utils",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-traits"
|
||||||
|
version = "0.2.19"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "oizys"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"clap",
|
||||||
|
"clap_complete",
|
||||||
|
"homedir",
|
||||||
|
"hostname",
|
||||||
|
"spinoff",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "once_cell"
|
||||||
|
version = "1.19.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "paste"
|
||||||
|
version = "1.0.15"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pin-project-lite"
|
||||||
|
version = "0.2.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pin-utils"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro2"
|
||||||
|
version = "1.0.82"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quote"
|
||||||
|
version = "1.0.36"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde"
|
||||||
|
version = "1.0.201"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c"
|
||||||
|
dependencies = [
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_derive"
|
||||||
|
version = "1.0.201"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "slab"
|
||||||
|
version = "0.4.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "spinoff"
|
||||||
|
version = "0.8.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "20aa2ed67fbb202e7b716ff8bfc6571dd9301617767380197d701c31124e88f6"
|
||||||
|
dependencies = [
|
||||||
|
"colored",
|
||||||
|
"once_cell",
|
||||||
|
"paste",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "strsim"
|
||||||
|
version = "0.11.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "2.0.63"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bf5be731623ca1a1fb7d8be6f261a3be6d3e2337b8a1f97be944d020c8fcb704"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror"
|
||||||
|
version = "1.0.60"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18"
|
||||||
|
dependencies = [
|
||||||
|
"thiserror-impl",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror-impl"
|
||||||
|
version = "1.0.60"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-ident"
|
||||||
|
version = "1.0.12"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "utf8parse"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen"
|
||||||
|
version = "0.2.92"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"wasm-bindgen-macro",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-backend"
|
||||||
|
version = "0.2.92"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
|
||||||
|
dependencies = [
|
||||||
|
"bumpalo",
|
||||||
|
"log",
|
||||||
|
"once_cell",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
"wasm-bindgen-shared",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-macro"
|
||||||
|
version = "0.2.92"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
|
||||||
|
dependencies = [
|
||||||
|
"quote",
|
||||||
|
"wasm-bindgen-macro-support",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-macro-support"
|
||||||
|
version = "0.2.92"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
"wasm-bindgen-backend",
|
||||||
|
"wasm-bindgen-shared",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-shared"
|
||||||
|
version = "0.2.92"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "widestring"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows"
|
||||||
|
version = "0.52.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
|
||||||
|
dependencies = [
|
||||||
|
"windows-core",
|
||||||
|
"windows-implement",
|
||||||
|
"windows-interface",
|
||||||
|
"windows-targets 0.52.5",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-core"
|
||||||
|
version = "0.52.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
|
||||||
|
dependencies = [
|
||||||
|
"windows-targets 0.52.5",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-implement"
|
||||||
|
version = "0.52.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "12168c33176773b86799be25e2a2ba07c7aab9968b37541f1094dbd7a60c8946"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-interface"
|
||||||
|
version = "0.52.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9d8dc32e0095a7eeccebd0e3f09e9509365ecb3fc6ac4d6f5f14a3f6392942d1"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-sys"
|
||||||
|
version = "0.48.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
|
||||||
|
dependencies = [
|
||||||
|
"windows-targets 0.48.5",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-sys"
|
||||||
|
version = "0.52.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
||||||
|
dependencies = [
|
||||||
|
"windows-targets 0.52.5",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-targets"
|
||||||
|
version = "0.48.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
|
||||||
|
dependencies = [
|
||||||
|
"windows_aarch64_gnullvm 0.48.5",
|
||||||
|
"windows_aarch64_msvc 0.48.5",
|
||||||
|
"windows_i686_gnu 0.48.5",
|
||||||
|
"windows_i686_msvc 0.48.5",
|
||||||
|
"windows_x86_64_gnu 0.48.5",
|
||||||
|
"windows_x86_64_gnullvm 0.48.5",
|
||||||
|
"windows_x86_64_msvc 0.48.5",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-targets"
|
||||||
|
version = "0.52.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
|
||||||
|
dependencies = [
|
||||||
|
"windows_aarch64_gnullvm 0.52.5",
|
||||||
|
"windows_aarch64_msvc 0.52.5",
|
||||||
|
"windows_i686_gnu 0.52.5",
|
||||||
|
"windows_i686_gnullvm",
|
||||||
|
"windows_i686_msvc 0.52.5",
|
||||||
|
"windows_x86_64_gnu 0.52.5",
|
||||||
|
"windows_x86_64_gnullvm 0.52.5",
|
||||||
|
"windows_x86_64_msvc 0.52.5",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_aarch64_gnullvm"
|
||||||
|
version = "0.48.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_aarch64_gnullvm"
|
||||||
|
version = "0.52.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_aarch64_msvc"
|
||||||
|
version = "0.48.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_aarch64_msvc"
|
||||||
|
version = "0.52.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_gnu"
|
||||||
|
version = "0.48.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_gnu"
|
||||||
|
version = "0.52.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_gnullvm"
|
||||||
|
version = "0.52.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_msvc"
|
||||||
|
version = "0.48.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_msvc"
|
||||||
|
version = "0.52.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnu"
|
||||||
|
version = "0.48.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnu"
|
||||||
|
version = "0.52.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnullvm"
|
||||||
|
version = "0.48.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnullvm"
|
||||||
|
version = "0.52.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_msvc"
|
||||||
|
version = "0.48.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_msvc"
|
||||||
|
version = "0.52.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wmi"
|
||||||
|
version = "0.13.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fc2f0a4062ca522aad4705a2948fd4061b3857537990202a8ddd5af21607f79a"
|
||||||
|
dependencies = [
|
||||||
|
"chrono",
|
||||||
|
"futures",
|
||||||
|
"log",
|
||||||
|
"serde",
|
||||||
|
"thiserror",
|
||||||
|
"windows",
|
||||||
|
]
|
13
pkgs/oizys/oizys-rs/Cargo.toml
Normal file
13
pkgs/oizys/oizys-rs/Cargo.toml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
[package]
|
||||||
|
name = "oizys"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
clap = { version = "4.5.4", features = ["derive"] }
|
||||||
|
clap_complete = "4.5.1"
|
||||||
|
homedir = "0.2.1"
|
||||||
|
hostname = "0.4.0"
|
||||||
|
spinoff = "0.8.0"
|
21
pkgs/oizys/oizys-rs/default.nix
Normal file
21
pkgs/oizys/oizys-rs/default.nix
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
installShellFiles,
|
||||||
|
rustPlatform,
|
||||||
|
nix-output-monitor,
|
||||||
|
}:
|
||||||
|
rustPlatform.buildRustPackage {
|
||||||
|
pname = "oizys";
|
||||||
|
version = "unstable";
|
||||||
|
src = ./.;
|
||||||
|
cargoLock = {
|
||||||
|
lockFile = ./Cargo.lock;
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [ installShellFiles ];
|
||||||
|
buildInputs = [ nix-output-monitor ];
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
installShellCompletion --cmd oizys \
|
||||||
|
--zsh <($out/bin/oizys --completions zsh)
|
||||||
|
'';
|
||||||
|
}
|
228
pkgs/oizys/oizys-rs/src/main.rs
Normal file
228
pkgs/oizys/oizys-rs/src/main.rs
Normal file
|
@ -0,0 +1,228 @@
|
||||||
|
use clap::{CommandFactory, Parser, Subcommand};
|
||||||
|
use clap_complete::{generate, Generator, Shell};
|
||||||
|
use spinoff::{spinners, Color, Spinner};
|
||||||
|
use std::{env, io, path::PathBuf, process::Command};
|
||||||
|
|
||||||
|
#[derive(Parser)]
|
||||||
|
#[command(version, about, long_about = None)]
|
||||||
|
struct Cli {
|
||||||
|
/// increase verbosity
|
||||||
|
#[arg(short, long,global=true, action = clap::ArgAction::Count)]
|
||||||
|
verbose: u8,
|
||||||
|
|
||||||
|
/// path to flake ($OIZYS_DIR or $HOME/oizys)
|
||||||
|
#[arg(short, long, global = true)]
|
||||||
|
flake: Option<PathBuf>,
|
||||||
|
|
||||||
|
/// host name (current host)
|
||||||
|
#[arg(long, global = true)]
|
||||||
|
host: Option<String>,
|
||||||
|
|
||||||
|
/// generate shell completion
|
||||||
|
#[arg(long, value_enum, hide = true)]
|
||||||
|
completions: Option<Shell>,
|
||||||
|
|
||||||
|
#[command(subcommand)]
|
||||||
|
command: Option<Commands>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Subcommand)]
|
||||||
|
enum Commands {
|
||||||
|
/// poor man's nix flake check
|
||||||
|
Dry {},
|
||||||
|
|
||||||
|
/// nixos rebuild boot
|
||||||
|
Boot {},
|
||||||
|
|
||||||
|
/// nixos rebuild switch
|
||||||
|
Switch {},
|
||||||
|
|
||||||
|
/// build and push to cachix
|
||||||
|
Cache {
|
||||||
|
/// name of cachix binary cache
|
||||||
|
#[arg(short, long, default_value = "daylin")]
|
||||||
|
name: String,
|
||||||
|
},
|
||||||
|
|
||||||
|
///build nixos (w/ nix build)
|
||||||
|
Build {},
|
||||||
|
|
||||||
|
/// print nix flake output
|
||||||
|
Output {},
|
||||||
|
}
|
||||||
|
|
||||||
|
fn print_completions<G: Generator>(gen: G, cmd: &mut clap::Command) {
|
||||||
|
generate(gen, cmd, cmd.get_name().to_string(), &mut io::stdout());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct Oizys {
|
||||||
|
host: String,
|
||||||
|
flake: PathBuf,
|
||||||
|
verbose: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn trim_hashes(buf: &str, trim_drv: bool) -> Vec<String> {
|
||||||
|
buf.lines()
|
||||||
|
.skip(1)
|
||||||
|
.map(|line| {
|
||||||
|
line.split_once('-')
|
||||||
|
.map(|x| {
|
||||||
|
format!(" {}", {
|
||||||
|
if trim_drv {
|
||||||
|
x.1.replace(".drv", "")
|
||||||
|
} else {
|
||||||
|
x.1.to_string()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.expect("failed to trim derivation")
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Oizys {
|
||||||
|
fn from(cli: &Cli) -> Oizys {
|
||||||
|
let host = cli
|
||||||
|
.host
|
||||||
|
.clone()
|
||||||
|
.unwrap_or(hostname::get().unwrap().to_string_lossy().to_string());
|
||||||
|
let flake = cli.flake.clone().unwrap_or(env::var("OIZYS_DIR").map_or(
|
||||||
|
homedir::get_my_home().unwrap().unwrap().join("oizys"),
|
||||||
|
PathBuf::from,
|
||||||
|
));
|
||||||
|
|
||||||
|
Oizys {
|
||||||
|
host,
|
||||||
|
flake,
|
||||||
|
verbose: cli.verbose,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn output(self: &Oizys) -> String {
|
||||||
|
format!(
|
||||||
|
"{}#nixosConfigurations.{}.config.system.build.toplevel",
|
||||||
|
self.flake.to_string_lossy(),
|
||||||
|
self.host
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn show_cmd(self: &Oizys, cmd: &Command) {
|
||||||
|
println!("executing: {}", format!("{:?}", cmd).replace('"', ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_dry_output(self: &Oizys, output: &str) {
|
||||||
|
let parts: Vec<&str> = output.split("\nthese").collect();
|
||||||
|
// TODO: handle more cases of output
|
||||||
|
// currently fails if nothing to fetch
|
||||||
|
if parts.len() != 3 {
|
||||||
|
eprintln!("couldn't parse dry output into three parts");
|
||||||
|
eprintln!("{}", output);
|
||||||
|
std::process::exit(1);
|
||||||
|
}
|
||||||
|
let to_build: Vec<String> = trim_hashes(parts[1], true);
|
||||||
|
let to_fetch: Vec<String> = trim_hashes(parts[2], false);
|
||||||
|
if self.verbose > 0 {
|
||||||
|
println!("TO BUILD: {}\n{}\n", to_build.len(), to_build.join("\n"));
|
||||||
|
println!("TO FETCH: {}\n{}\n", to_fetch.len(), to_fetch.join("\n"));
|
||||||
|
} else {
|
||||||
|
println!("To build: {}", to_build.len());
|
||||||
|
println!("To fetch: {}", to_fetch.len());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn dry(self: &Oizys) {
|
||||||
|
let flake_output = self.output();
|
||||||
|
let mut cmd = Command::new("nix");
|
||||||
|
cmd.args(["build", &flake_output.as_str(), "--dry-run"]);
|
||||||
|
if self.verbose >= 2 {
|
||||||
|
self.show_cmd(&cmd)
|
||||||
|
}
|
||||||
|
let mut spinner = Spinner::new(spinners::Arc, "evaluating...", Color::Cyan);
|
||||||
|
let output = String::from_utf8(cmd.output().expect("failed to run nix build").stderr)
|
||||||
|
.expect("faild to parse nix build --dry-run output");
|
||||||
|
spinner.stop_with_message("evaluating finished");
|
||||||
|
|
||||||
|
if output.contains("derivations will be built") {
|
||||||
|
self.parse_dry_output(&output);
|
||||||
|
} else {
|
||||||
|
println!("{} up to date", self.host)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn build(self: &Oizys) {
|
||||||
|
let flake_output = self.output();
|
||||||
|
let mut cmd = Command::new("nix");
|
||||||
|
cmd.args(["build", &flake_output.as_str()]);
|
||||||
|
if self.verbose >= 2 {
|
||||||
|
self.show_cmd(&cmd);
|
||||||
|
}
|
||||||
|
cmd.status().expect("failed to run nix build");
|
||||||
|
}
|
||||||
|
|
||||||
|
fn nixos_rebuild(self: &Oizys, subcommand: &str) {
|
||||||
|
let flake_output = format!("{}#{}", self.flake.to_string_lossy(), self.host);
|
||||||
|
let mut cmd = Command::new("sudo");
|
||||||
|
cmd.args(["nixos-rebuild", subcommand, "--flake", &flake_output]);
|
||||||
|
if self.verbose >= 2 {
|
||||||
|
self.show_cmd(&cmd);
|
||||||
|
}
|
||||||
|
cmd.status()
|
||||||
|
.unwrap_or_else(|_| panic!("failed to run nixos-rebuild {subcommand}"));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn cache(self: &Oizys, name: &String) {
|
||||||
|
let flake_output = self.output();
|
||||||
|
let mut cmd = Command::new("cachix");
|
||||||
|
cmd.args([
|
||||||
|
"watch-exec",
|
||||||
|
&name,
|
||||||
|
"--",
|
||||||
|
"nix",
|
||||||
|
"build",
|
||||||
|
&flake_output,
|
||||||
|
"--print-build-logs",
|
||||||
|
"--accept-flake-config",
|
||||||
|
]);
|
||||||
|
if self.verbose >= 2 {
|
||||||
|
self.show_cmd(&cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd.status()
|
||||||
|
.unwrap_or_else(|_| panic!("failed to run cachix watch-exec"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let cli = Cli::parse();
|
||||||
|
let oizys = Oizys::from(&cli);
|
||||||
|
|
||||||
|
if let Some(completions) = cli.completions {
|
||||||
|
let mut cmd = Cli::command();
|
||||||
|
eprintln!("Generating completion for {completions:?}");
|
||||||
|
print_completions(completions, &mut cmd);
|
||||||
|
std::process::exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if oizys.verbose > 2 {
|
||||||
|
println!("-vv is max verbosity")
|
||||||
|
}
|
||||||
|
if oizys.verbose >= 1 {
|
||||||
|
println!("{:?}", oizys)
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(command) = &cli.command {
|
||||||
|
match command {
|
||||||
|
Commands::Dry {} => oizys.dry(),
|
||||||
|
Commands::Build {} => oizys.build(),
|
||||||
|
Commands::Output {} => println!("{}", oizys.output()),
|
||||||
|
Commands::Boot {} => oizys.nixos_rebuild("boot"),
|
||||||
|
Commands::Switch {} => oizys.nixos_rebuild("switch"),
|
||||||
|
Commands::Cache { name } => oizys.cache(name),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
eprintln!("No subcommand provided..");
|
||||||
|
let mut cmd = Cli::command();
|
||||||
|
cmd.print_help().unwrap();
|
||||||
|
}
|
||||||
|
}
|
13
pkgs/oizys/oizys-zig/.gitignore
vendored
Normal file
13
pkgs/oizys/oizys-zig/.gitignore
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
# Created by https://www.toptal.com/developers/gitignore/api/zig
|
||||||
|
# Edit at https://www.toptal.com/developers/gitignore?templates=zig
|
||||||
|
|
||||||
|
### zig ###
|
||||||
|
# Zig programming language
|
||||||
|
|
||||||
|
zig-cache/
|
||||||
|
zig-out/
|
||||||
|
build/
|
||||||
|
build-*/
|
||||||
|
docgen_tmp/
|
||||||
|
|
||||||
|
# End of https://www.toptal.com/developers/gitignore/api/zig
|
37
pkgs/oizys/oizys-zig/build.zig
Normal file
37
pkgs/oizys/oizys-zig/build.zig
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
const std = @import("std");
|
||||||
|
|
||||||
|
pub fn build(b: *std.Build) void {
|
||||||
|
// b.release_mode = .safe;
|
||||||
|
const target = b.standardTargetOptions(.{});
|
||||||
|
const optimize = b.standardOptimizeOption(.{});
|
||||||
|
|
||||||
|
const exe = b.addExecutable(.{
|
||||||
|
.name = "oizys",
|
||||||
|
.root_source_file = .{ .path = "src/main.zig" },
|
||||||
|
.target = target,
|
||||||
|
.optimize = optimize,
|
||||||
|
});
|
||||||
|
exe.root_module.addImport("yazap", b.dependency("yazap", .{}).module("yazap"));
|
||||||
|
exe.root_module.addImport("donuts", b.dependency("donuts", .{}).module("donuts"));
|
||||||
|
b.installArtifact(exe);
|
||||||
|
|
||||||
|
const run_cmd = b.addRunArtifact(exe);
|
||||||
|
run_cmd.step.dependOn(b.getInstallStep());
|
||||||
|
if (b.args) |args| {
|
||||||
|
run_cmd.addArgs(args);
|
||||||
|
}
|
||||||
|
const run_step = b.step("run", "Run the app");
|
||||||
|
run_step.dependOn(&run_cmd.step);
|
||||||
|
|
||||||
|
// I haven't written any...
|
||||||
|
// const exe_unit_tests = b.addTest(.{
|
||||||
|
// .root_source_file = .{ .path = "src/main.zig" },
|
||||||
|
// .target = target,
|
||||||
|
// .optimize = optimize,
|
||||||
|
// });
|
||||||
|
//
|
||||||
|
// const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests);
|
||||||
|
// const test_step = b.step("test", "Run unit tests");
|
||||||
|
// test_step.dependOn(&run_exe_unit_tests.step);
|
||||||
|
//
|
||||||
|
}
|
15
pkgs/oizys/oizys-zig/build.zig.zon
Normal file
15
pkgs/oizys/oizys-zig/build.zig.zon
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
.{
|
||||||
|
.name = "oizys-zig",
|
||||||
|
.version = "0.0.0",
|
||||||
|
.dependencies = .{
|
||||||
|
.yazap = .{
|
||||||
|
.url = "git+https://github.com/prajwalch/yazap.git#341750ff62e3102da4a7f8233920aebace1fc337",
|
||||||
|
.hash = "1220fa71798c994044a987cbde6e73af76bfc402117a61971ccf48f4af4b7154e8d3",
|
||||||
|
},
|
||||||
|
.donuts = .{
|
||||||
|
.url = "git+https://github.com/daylinmorgan/donuts.git#b454b9c1fa3084e6d1431f399d133afe31d4235a",
|
||||||
|
.hash = "1220b6bf5f90c96bd9ac86d989aa1afd605522463afa7f8f372cdf24fac65a5eed99",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
.paths = .{""},
|
||||||
|
}
|
12
pkgs/oizys/oizys-zig/build.zig.zon2json-lock
Normal file
12
pkgs/oizys/oizys-zig/build.zig.zon2json-lock
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"1220fa71798c994044a987cbde6e73af76bfc402117a61971ccf48f4af4b7154e8d3": {
|
||||||
|
"name": "yazap",
|
||||||
|
"url": "git+https://github.com/prajwalch/yazap.git#341750ff62e3102da4a7f8233920aebace1fc337",
|
||||||
|
"hash": "sha256-nNhFpay+xk0Ix3GAT1fZ2q/bD9AAx7Xkl4X7QxlzK0M="
|
||||||
|
},
|
||||||
|
"1220b6bf5f90c96bd9ac86d989aa1afd605522463afa7f8f372cdf24fac65a5eed99": {
|
||||||
|
"name": "donuts",
|
||||||
|
"url": "git+https://github.com/daylinmorgan/donuts.git#b454b9c1fa3084e6d1431f399d133afe31d4235a",
|
||||||
|
"hash": "sha256-q3FcUMdhpiyoqlwj5FbIVdUszeAoYzVFzGTgfWzm/pU="
|
||||||
|
}
|
||||||
|
}
|
13
pkgs/oizys/oizys-zig/default.nix
Normal file
13
pkgs/oizys/oizys-zig/default.nix
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
zig2nix,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
(zig2nix.outputs.zig-env.${pkgs.system} {
|
||||||
|
zig = zig2nix.outputs.packages.${pkgs.system}.zig.master.bin;
|
||||||
|
}).package
|
||||||
|
{
|
||||||
|
name = "oizys";
|
||||||
|
src = lib.cleanSource ./.;
|
||||||
|
}
|
74
pkgs/oizys/oizys-zig/src/Cli.zig
Normal file
74
pkgs/oizys/oizys-zig/src/Cli.zig
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
const Cli = @This();
|
||||||
|
const std = @import("std");
|
||||||
|
const yazap = @import("yazap");
|
||||||
|
const App = yazap.App;
|
||||||
|
const Arg = yazap.Arg;
|
||||||
|
const Allocator = std.mem.Allocator;
|
||||||
|
|
||||||
|
allocator: Allocator,
|
||||||
|
app: App,
|
||||||
|
matches: *const yazap.ArgMatches = undefined,
|
||||||
|
forward: ?[][]const u8 = null,
|
||||||
|
process_args: ?[]const [:0]u8 = null,
|
||||||
|
|
||||||
|
pub fn init(allocator: Allocator) !Cli {
|
||||||
|
var app = App.init(allocator, "oizys", "nix begat oizys");
|
||||||
|
|
||||||
|
const oizys = app.rootCommand();
|
||||||
|
var cmd_dry = app.createCommand("dry", "poor man's nix flake check");
|
||||||
|
var cmd_build = app.createCommand("build", "build nixos (w/nix build)");
|
||||||
|
var cmd_cache = app.createCommand("cache", "build and push to cachix");
|
||||||
|
var cmd_output = app.createCommand("output", "show system flake output path");
|
||||||
|
var cmd_boot = app.createCommand("boot", "nixos rebuild boot");
|
||||||
|
var cmd_switch = app.createCommand("switch", "nixos rebuild switch");
|
||||||
|
|
||||||
|
try cmd_cache.addArg(Arg.singleValueOption("name", 'n', "name of cachix cache"));
|
||||||
|
inline for (.{
|
||||||
|
&cmd_dry,
|
||||||
|
&cmd_build,
|
||||||
|
&cmd_cache,
|
||||||
|
&cmd_output,
|
||||||
|
&cmd_switch,
|
||||||
|
&cmd_boot,
|
||||||
|
}) |subcmd| {
|
||||||
|
try subcmd.addArg(Arg.positional("forward", null, null));
|
||||||
|
try subcmd.addArg(Arg.singleValueOption("flake", 'f', "path to flake"));
|
||||||
|
try subcmd.addArg(Arg.singleValueOption("host", null, "hostname (default: current host)"));
|
||||||
|
try oizys.addSubcommand(subcmd.*);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Cli{
|
||||||
|
.allocator = allocator,
|
||||||
|
.app = app,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_forward_args(self: *Cli, args: []const [:0]u8) !usize {
|
||||||
|
var forward = std.ArrayList([]const u8).init(self.allocator);
|
||||||
|
|
||||||
|
const delim_idx: usize = delim_lookup: for (args, 0..) |arg, i| {
|
||||||
|
if (std.mem.eql(u8, "--", arg)) break :delim_lookup i;
|
||||||
|
} else args.len;
|
||||||
|
|
||||||
|
if (args.len > delim_idx)
|
||||||
|
for (args[delim_idx + 1 ..]) |fwd|
|
||||||
|
try forward.append(fwd);
|
||||||
|
|
||||||
|
self.forward = try forward.toOwnedSlice();
|
||||||
|
return delim_idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn parse(self: *Cli) !void {
|
||||||
|
self.process_args = try std.process.argsAlloc(self.allocator);
|
||||||
|
const delim_idx = try self.get_forward_args(self.process_args.?);
|
||||||
|
self.matches = try self.app.parseFrom(self.process_args.?[1..delim_idx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn deinit(self: *Cli) void {
|
||||||
|
std.process.argsFree(self.allocator, self.process_args.?);
|
||||||
|
if (self.forward) |fwd| {
|
||||||
|
for (fwd) |arg| self.allocator.free(arg);
|
||||||
|
self.allocator.free(fwd);
|
||||||
|
}
|
||||||
|
self.app.deinit();
|
||||||
|
}
|
217
pkgs/oizys/oizys-zig/src/Oizys.zig
Normal file
217
pkgs/oizys/oizys-zig/src/Oizys.zig
Normal file
|
@ -0,0 +1,217 @@
|
||||||
|
const Oizys = @This();
|
||||||
|
const std = @import("std");
|
||||||
|
const ArgMatches = @import("yazap").ArgMatches;
|
||||||
|
const Allocator = std.mem.Allocator;
|
||||||
|
const Donuts = @import("donuts").Donuts;
|
||||||
|
|
||||||
|
allocator: Allocator,
|
||||||
|
flake: []const u8,
|
||||||
|
host: []const u8,
|
||||||
|
cache_name: []const u8,
|
||||||
|
output: []const u8,
|
||||||
|
cmd: OizysCmd,
|
||||||
|
debug: bool = false,
|
||||||
|
forward: ?[][]const u8,
|
||||||
|
|
||||||
|
pub const OizysCmd = enum {
|
||||||
|
dry,
|
||||||
|
@"switch",
|
||||||
|
boot,
|
||||||
|
cache,
|
||||||
|
output,
|
||||||
|
build,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub fn init(allocator: std.mem.Allocator, matches: *const ArgMatches, forward: ?[][]const u8) !Oizys {
|
||||||
|
const cmd = matches.subcommand.?.name;
|
||||||
|
const flags = matches.subcommandMatches(cmd).?;
|
||||||
|
var oizys = Oizys{
|
||||||
|
.allocator = allocator,
|
||||||
|
.host = undefined,
|
||||||
|
.flake = undefined,
|
||||||
|
.output = undefined,
|
||||||
|
.cmd = std.meta.stringToEnum(OizysCmd, cmd).?,
|
||||||
|
.cache_name = flags.getSingleValue("cache") orelse "daylin",
|
||||||
|
.forward = forward,
|
||||||
|
};
|
||||||
|
if (flags.getSingleValue("host")) |host| {
|
||||||
|
oizys.host = try allocator.dupe(u8, host);
|
||||||
|
} else {
|
||||||
|
oizys.host = try Oizys.getDefaultHostName(allocator);
|
||||||
|
}
|
||||||
|
if (flags.getSingleValue("flake")) |flake| {
|
||||||
|
oizys.flake = try allocator.dupe(u8, flake);
|
||||||
|
} else {
|
||||||
|
oizys.flake = try Oizys.getDefaultFlake(allocator);
|
||||||
|
}
|
||||||
|
|
||||||
|
oizys.output = try std.fmt.allocPrint(
|
||||||
|
allocator,
|
||||||
|
"{s}#nixosConfigurations.{s}.config.system.build.toplevel",
|
||||||
|
.{ oizys.flake, oizys.host },
|
||||||
|
);
|
||||||
|
|
||||||
|
return oizys;
|
||||||
|
// return Oizys{
|
||||||
|
// .allocator = allocator,
|
||||||
|
// .host = host,
|
||||||
|
// .flake = flake,
|
||||||
|
// .output = try std.fmt.allocPrint(
|
||||||
|
// allocator,
|
||||||
|
// "{s}#nixosConfigurations.{s}.config.system.build.toplevel",
|
||||||
|
// .{ flake, host },
|
||||||
|
// ),
|
||||||
|
// .cmd = std.meta.stringToEnum(OizysCmd, cmd).?,
|
||||||
|
// .cache_name = flags.getSingleValue("cache") orelse "daylin",
|
||||||
|
// .forward = forward,
|
||||||
|
// };
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn deinit(self: *Oizys) void {
|
||||||
|
self.allocator.free(self.flake);
|
||||||
|
self.allocator.free(self.output);
|
||||||
|
self.allocator.free(self.host);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn getDefaultHostName(allocator: Allocator) ![]const u8 {
|
||||||
|
var name_buffer: [std.posix.HOST_NAME_MAX]u8 = undefined;
|
||||||
|
const hostname = try std.posix.gethostname(&name_buffer);
|
||||||
|
return std.fmt.allocPrint(allocator, "{s}", .{hostname});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn getDefaultFlake(allocator: Allocator) ![]const u8 {
|
||||||
|
return std.process.getEnvVarOwned(allocator, "OIZYS_DIR") catch {
|
||||||
|
const homedir = try std.process.getEnvVarOwned(allocator, "HOME");
|
||||||
|
defer allocator.free(homedir);
|
||||||
|
return try std.fmt.allocPrint(allocator, "{s}/oizys", .{homedir});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn getOutputPath(self: *Oizys) ![]const u8 {
|
||||||
|
return std.fmt.allocPrint(
|
||||||
|
self.allocator,
|
||||||
|
"{s}#nixosConfigurations.{s}.config.system.build.toplevel",
|
||||||
|
.{ self.flake, self.host },
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const NixCmd = enum { Nix, NixosRebuild };
|
||||||
|
|
||||||
|
pub fn runNixCmd(self: *Oizys, cmd: NixCmd, argv: []const []const u8) !void {
|
||||||
|
var args = std.ArrayList([]const u8).init(self.allocator);
|
||||||
|
defer args.deinit();
|
||||||
|
|
||||||
|
switch (cmd) {
|
||||||
|
NixCmd.Nix => try args.append("nix"),
|
||||||
|
NixCmd.NixosRebuild => try args.appendSlice(&.{ "sudo", "nixos-rebuild" }),
|
||||||
|
}
|
||||||
|
try args.appendSlice(argv);
|
||||||
|
if (self.forward) |fwd| try args.appendSlice(fwd);
|
||||||
|
var p = std.ChildProcess.init(args.items, self.allocator);
|
||||||
|
_ = try p.spawnAndWait();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn cache(self: *Oizys) !void {
|
||||||
|
var p = std.ChildProcess.init(
|
||||||
|
&.{
|
||||||
|
"cachix",
|
||||||
|
"watch-exec",
|
||||||
|
self.cache_name,
|
||||||
|
"--verbose",
|
||||||
|
"--",
|
||||||
|
"nix",
|
||||||
|
"build",
|
||||||
|
self.output,
|
||||||
|
"--print-build-logs",
|
||||||
|
"--accept-flake-config",
|
||||||
|
},
|
||||||
|
self.allocator,
|
||||||
|
);
|
||||||
|
_ = try p.spawnAndWait();
|
||||||
|
}
|
||||||
|
|
||||||
|
const DryResult = struct {
|
||||||
|
allocator: Allocator,
|
||||||
|
fetch: [][]const u8,
|
||||||
|
build: [][]const u8,
|
||||||
|
|
||||||
|
pub fn parse(allocator: Allocator, output: []const u8) !DryResult {
|
||||||
|
var it = std.mem.splitSequence(u8, output, ":\n");
|
||||||
|
_ = it.next();
|
||||||
|
var fetch = std.ArrayList([]const u8).init(allocator);
|
||||||
|
var build = std.ArrayList([]const u8).init(allocator);
|
||||||
|
|
||||||
|
if (it.next()) |x| {
|
||||||
|
try parseLines(x, &fetch);
|
||||||
|
} else {
|
||||||
|
return error.DryParseError;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (it.next()) |x| {
|
||||||
|
try parseLines(x, &build);
|
||||||
|
} else {
|
||||||
|
return error.DryParseError;
|
||||||
|
}
|
||||||
|
|
||||||
|
return .{
|
||||||
|
.allocator = allocator,
|
||||||
|
.fetch = try fetch.toOwnedSlice(),
|
||||||
|
.build = try build.toOwnedSlice(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn deinit(self: *DryResult) void {
|
||||||
|
self.allocator.free(self.fetch);
|
||||||
|
self.allocator.free(self.build);
|
||||||
|
// for (self.fetch) |item| {
|
||||||
|
// self.allocator.free(item);
|
||||||
|
// }
|
||||||
|
// for (self.build) |item| {
|
||||||
|
// self.allocator.free(item);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
fn parseLines(buffer: []const u8, list: *std.ArrayList([]const u8)) !void {
|
||||||
|
var lines = std.mem.splitSequence(u8, buffer, "\n");
|
||||||
|
while (lines.next()) |line| {
|
||||||
|
try list.append(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
pub fn dry(self: *Oizys) !void {
|
||||||
|
var sp = Donuts(std.io.getStdOut()).init(
|
||||||
|
"evaluating...",
|
||||||
|
.{ .style = .dots },
|
||||||
|
.{},
|
||||||
|
);
|
||||||
|
try sp.start();
|
||||||
|
const cmd_output = try std.ChildProcess.run(.{
|
||||||
|
.allocator = self.allocator,
|
||||||
|
.argv = &.{ "nix", "build", self.output, "--dry-run" },
|
||||||
|
});
|
||||||
|
try sp.stop(.{ .message = "done." });
|
||||||
|
defer self.allocator.free(cmd_output.stdout);
|
||||||
|
defer self.allocator.free(cmd_output.stderr);
|
||||||
|
var result = try DryResult.parse(self.allocator, cmd_output.stderr);
|
||||||
|
defer result.deinit();
|
||||||
|
|
||||||
|
std.debug.print(
|
||||||
|
"to fetch: {d}\nto build: {d}\n",
|
||||||
|
.{ result.fetch.len, result.build.len },
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn run(self: *Oizys) !void {
|
||||||
|
switch (self.cmd) {
|
||||||
|
.@"switch" => try self.runNixCmd(.NixosRebuild, &.{ "switch", "--flake", self.flake }),
|
||||||
|
|
||||||
|
.boot => try self.runNixCmd(.NixosRebuild, &.{ "boot", "--flake", self.flake }),
|
||||||
|
.dry => try self.dry(),
|
||||||
|
.build => try self.runNixCmd(.Nix, &.{ "build", self.output }),
|
||||||
|
.output => {
|
||||||
|
const stdout = std.io.getStdOut().writer();
|
||||||
|
try stdout.print("{s}\n", .{self.output});
|
||||||
|
},
|
||||||
|
.cache => try self.cache(),
|
||||||
|
}
|
||||||
|
}
|
27
pkgs/oizys/oizys-zig/src/main.zig
Normal file
27
pkgs/oizys/oizys-zig/src/main.zig
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
const std = @import("std");
|
||||||
|
const Oizys = @import("Oizys.zig");
|
||||||
|
const Cli = @import("Cli.zig");
|
||||||
|
|
||||||
|
pub fn main() !void {
|
||||||
|
// memory management isn't hard :P
|
||||||
|
// var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
|
||||||
|
// defer arena.deinit();
|
||||||
|
// const allocator = arena.allocator();
|
||||||
|
//
|
||||||
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
const allocator = gpa.allocator();
|
||||||
|
defer _ = gpa.deinit();
|
||||||
|
|
||||||
|
var cli = try Cli.init(allocator);
|
||||||
|
try cli.parse();
|
||||||
|
defer cli.deinit();
|
||||||
|
|
||||||
|
if (!cli.matches.containsArgs()) {
|
||||||
|
try cli.app.displayHelp();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var oizys = try Oizys.init(allocator, cli.matches, cli.forward);
|
||||||
|
defer oizys.deinit();
|
||||||
|
try oizys.run();
|
||||||
|
}
|
Loading…
Reference in a new issue