mirror of
https://github.com/daylinmorgan/oizys.git
synced 2024-12-22 18:30:43 -06:00
styx is dead long live oizys
This commit is contained in:
parent
a64d438e4a
commit
8975830af7
6 changed files with 156 additions and 7 deletions
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
description = "daylinmorgan-nixcfg";
|
description = "nix begat oizys";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
||||||
|
@ -35,10 +35,10 @@
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
lib = import ./lib {inherit inputs nixpkgs;};
|
lib = import ./lib {inherit inputs nixpkgs;};
|
||||||
inherit (lib) findModules mapHosts buildStyx;
|
inherit (lib) findModules mapHosts buildOizys;
|
||||||
in {
|
in {
|
||||||
nixosModules = findModules ./modules;
|
nixosModules = findModules ./modules;
|
||||||
nixosConfigurations = mapHosts ./hosts;
|
nixosConfigurations = mapHosts ./hosts;
|
||||||
packages = buildStyx {};
|
packages = buildOizys {};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,12 +11,12 @@
|
||||||
in rec {
|
in rec {
|
||||||
forAllSystems = f: genAttrs supportedSystems (system: f nixpkgs.legacyPackages.${system});
|
forAllSystems = f: genAttrs supportedSystems (system: f nixpkgs.legacyPackages.${system});
|
||||||
|
|
||||||
buildStyx = _:
|
buildOizys = _:
|
||||||
forAllSystems (
|
forAllSystems (
|
||||||
pkgs: let
|
pkgs: let
|
||||||
pkg = pkgs.callPackage ../styx {};
|
pkg = pkgs.callPackage ../oizys {};
|
||||||
in {
|
in {
|
||||||
styx = pkg;
|
oizys = pkg;
|
||||||
default = pkg;
|
default = pkg;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
nix-output-monitor
|
nix-output-monitor
|
||||||
alejandra
|
alejandra
|
||||||
inputs.self.packages.${pkgs.system}.styx
|
inputs.self.packages.${pkgs.system}.oizys
|
||||||
];
|
];
|
||||||
|
|
||||||
nix.settings = {
|
nix.settings = {
|
||||||
|
|
9
oizys/default.nix
Normal file
9
oizys/default.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildNimPackage,
|
||||||
|
}:
|
||||||
|
buildNimPackage (final: prev: {
|
||||||
|
pname = "oizys";
|
||||||
|
version = "unstable";
|
||||||
|
src = ./.;
|
||||||
|
})
|
127
oizys/oizys.nim
Normal file
127
oizys/oizys.nim
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
import std/[logging, os, osproc, tables, times]
|
||||||
|
from std/nativesockets import getHostname
|
||||||
|
|
||||||
|
|
||||||
|
var logger = newConsoleLogger()
|
||||||
|
addHandler(logger)
|
||||||
|
let summaryFile = getEnv("GITHUB_STEP_SUMMARY")
|
||||||
|
|
||||||
|
type
|
||||||
|
StyxContext = object
|
||||||
|
flake, host: string
|
||||||
|
cache = "daylin"
|
||||||
|
nom: bool = true
|
||||||
|
|
||||||
|
proc newCtx(): StyxContext =
|
||||||
|
result = StyxContext()
|
||||||
|
result.flake = getEnv("FLAKE_PATH", getEnv("HOME") / "nixcfg")
|
||||||
|
result.host = getHostname()
|
||||||
|
|
||||||
|
proc systemFlakePath(c: StyxContext): string =
|
||||||
|
c.flake & "#nixosConfigurations." & c.host & ".config.system.build.toplevel"
|
||||||
|
|
||||||
|
proc execQuit(cmd: string) =
|
||||||
|
quit (execCmd cmd)
|
||||||
|
|
||||||
|
proc build(c: StyxContext) =
|
||||||
|
## build nixos
|
||||||
|
let
|
||||||
|
cmd = if c.nom: "nom" else: "nix"
|
||||||
|
execQuit cmd & " build " & c.systemFlakePath
|
||||||
|
|
||||||
|
proc dry(c: StyxContext) =
|
||||||
|
## poor man's nix flake check
|
||||||
|
execQuit "nix build " & c.systemFlakePath & " --dry-run"
|
||||||
|
|
||||||
|
proc cache(c: StyxContext) =
|
||||||
|
# Simple benchmarking
|
||||||
|
let start = cpuTime()
|
||||||
|
let code = execCmd """
|
||||||
|
cachix watch-exec """ & c.cache & """ \
|
||||||
|
-- \
|
||||||
|
nix build """ & c.systemFlakePath & """ \
|
||||||
|
--print-build-logs \
|
||||||
|
--accept-flake-config
|
||||||
|
"""
|
||||||
|
let duration = (cpuTime() - start)
|
||||||
|
if code != 0:
|
||||||
|
error "faile to build configuration for: ", c.host
|
||||||
|
|
||||||
|
if summaryFile != "":
|
||||||
|
writeFile(
|
||||||
|
summaryFile,
|
||||||
|
"Built host: " & c.host & " in " & $duration & " seconds"
|
||||||
|
)
|
||||||
|
info "Built host: " & c.host & " in " & $duration & " seconds"
|
||||||
|
|
||||||
|
|
||||||
|
proc nixosRebuild(c: StyxContext, cmd: string) =
|
||||||
|
execQuit "sudo nixos-rebuild " & cmd & " " & " --flake " & c.flake
|
||||||
|
|
||||||
|
proc boot(c: StyxContext) =
|
||||||
|
## nixos rebuild boot
|
||||||
|
nixosRebuild c, "build"
|
||||||
|
|
||||||
|
proc switch(c: StyxContext) =
|
||||||
|
## nixos rebuild switch
|
||||||
|
nixosRebuild c, "switch"
|
||||||
|
|
||||||
|
const usage = """
|
||||||
|
oizys <cmd> [opts]
|
||||||
|
commands:
|
||||||
|
dry poor man's nix flake check
|
||||||
|
boot nixos-rebuild boot
|
||||||
|
switch nixos-rebuild switch
|
||||||
|
cache build and push to cachix
|
||||||
|
build build system flake
|
||||||
|
|
||||||
|
options:
|
||||||
|
--help > show this help
|
||||||
|
-h|--host > hostname (current host)
|
||||||
|
-f|--flake > path to flake ($FLAKE_PATH or $HOME/styx)
|
||||||
|
-c|--cache > name of cachix binary cache (daylin)
|
||||||
|
"""
|
||||||
|
|
||||||
|
proc runCmd(c: StyxContext, cmd: string) =
|
||||||
|
case cmd:
|
||||||
|
of "dry": dry c
|
||||||
|
of "switch": switch c
|
||||||
|
of "boot": boot c
|
||||||
|
of "cache": cache c
|
||||||
|
of "build": build c
|
||||||
|
else:
|
||||||
|
error "unknown command: ", cmd
|
||||||
|
echo usage
|
||||||
|
quit 1
|
||||||
|
|
||||||
|
|
||||||
|
proc parseFlag(c: var StyxContext, key, val: string) =
|
||||||
|
case key:
|
||||||
|
of "help":
|
||||||
|
echo usage; quit 0
|
||||||
|
of "h","host":
|
||||||
|
c.host = val
|
||||||
|
of "f","flake":
|
||||||
|
c.flake = val
|
||||||
|
of "no-nom":
|
||||||
|
c.nom = false
|
||||||
|
|
||||||
|
when isMainModule:
|
||||||
|
import std/parseopt
|
||||||
|
var
|
||||||
|
c = newCtx()
|
||||||
|
cmd: string
|
||||||
|
for kind, key, val in getopt():
|
||||||
|
case kind
|
||||||
|
of cmdArgument:
|
||||||
|
cmd = key
|
||||||
|
of cmdLongOption, cmdShortOption:
|
||||||
|
parseFlag c, key, val
|
||||||
|
of cmdEnd:
|
||||||
|
discard
|
||||||
|
if cmd == "":
|
||||||
|
echo "please specify a command"
|
||||||
|
echo usage; quit 1
|
||||||
|
|
||||||
|
info $c
|
||||||
|
runCmd c, cmd
|
13
oizys/oizys.nimble
Normal file
13
oizys/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"
|
Loading…
Reference in a new issue