mirror of
https://github.com/daylinmorgan/oizys.git
synced 2024-12-22 18:30:43 -06:00
finish styx rename
This commit is contained in:
parent
2880a7a9e1
commit
f35481f6bf
6 changed files with 2 additions and 306 deletions
|
@ -1,11 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
buildNimPackage,
|
|
||||||
fetchFromGitHub,
|
|
||||||
}:
|
|
||||||
buildNimPackage (final: prev: {
|
|
||||||
pname = "styx";
|
|
||||||
version = "2023.1001";
|
|
||||||
src = ./.;
|
|
||||||
lockFile = ./lock.json;
|
|
||||||
})
|
|
|
@ -1 +0,0 @@
|
||||||
{"depends":[{"method":"fetchzip","packages":["cligen"],"path":"/nix/store/b5dgqx2wds42kw2241qv7rmdf29hwl20-source","ref":"1.6.18","rev":"c54e2f3ea09d405a0d1b9bd8e7c0472d657d1193","sha256":"0ms572f6563bc2cr65gnh943adld5xbd6jy2w7gwvybxpczkxlf3","srcDir":"","url":"https://github.com/c-blake/cligen/archive/c54e2f3ea09d405a0d1b9bd8e7c0472d657d1193.tar.gz"}]}
|
|
142
styx/styx.nim
142
styx/styx.nim
|
@ -1,142 +0,0 @@
|
||||||
import std/[logging, os, osproc, tables, times]
|
|
||||||
from std/nativesockets import getHostname
|
|
||||||
|
|
||||||
|
|
||||||
var logger = newConsoleLogger()
|
|
||||||
addHandler(logger)
|
|
||||||
|
|
||||||
let summaryFilePath = getEnv("GITHUB_STEP_SUMMARY")
|
|
||||||
|
|
||||||
proc writeToSummary(msg: string) =
|
|
||||||
let f = open(summaryFilePath, mode = fmAppend)
|
|
||||||
write(f,msg)
|
|
||||||
close(f)
|
|
||||||
|
|
||||||
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) =
|
|
||||||
## build and upload to binary cache
|
|
||||||
let start = getTime()
|
|
||||||
let code = execCmd """
|
|
||||||
cachix watch-exec """ & c.cache & """ \
|
|
||||||
-- \
|
|
||||||
nix build """ & c.systemFlakePath & """ \
|
|
||||||
--print-build-logs \
|
|
||||||
--accept-flake-config
|
|
||||||
"""
|
|
||||||
let duration = (getTime() - start)
|
|
||||||
if code != 0:
|
|
||||||
error "failed to build configuration for: ", c.host
|
|
||||||
|
|
||||||
if summaryFilePath != "":
|
|
||||||
writeToSummary(
|
|
||||||
"Built host: " & c.host & " in " & $duration & " seconds"
|
|
||||||
)
|
|
||||||
info "Built host: " & c.host & " in " & $duration & " seconds"
|
|
||||||
|
|
||||||
proc touchPr(c: StyxContext) =
|
|
||||||
const cmds = ["git branch -D update_flake_lock_action",
|
|
||||||
"git fetch origin",
|
|
||||||
"git checkout update_flake_lock_action",
|
|
||||||
"git commit --amend --no-edit",
|
|
||||||
"git push origin update_flake_lock_action --force"]
|
|
||||||
for cmd in cmds:
|
|
||||||
let code = execCmd cmd
|
|
||||||
if code != 0:
|
|
||||||
error "command: ",cmd,"exited with code: ",$code
|
|
||||||
|
|
||||||
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"
|
|
||||||
|
|
||||||
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
|
|
||||||
of "touch-pr": touchPr c
|
|
||||||
else:
|
|
||||||
error "unknown command: ", cmd
|
|
||||||
quit 1
|
|
||||||
|
|
||||||
|
|
||||||
const usage = """
|
|
||||||
styx <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
|
|
||||||
touch-pr trigger Github Action Ci
|
|
||||||
|
|
||||||
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 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, see below"
|
|
||||||
echo usage; quit 1
|
|
||||||
info $c
|
|
||||||
runCmd c, cmd
|
|
|
@ -1,14 +0,0 @@
|
||||||
# Package
|
|
||||||
|
|
||||||
author = "Daylin Morgan"
|
|
||||||
version = "2023.1001"
|
|
||||||
description = "styx"
|
|
||||||
license = "MIT"
|
|
||||||
srcDir = "."
|
|
||||||
bin = @["styx"]
|
|
||||||
|
|
||||||
|
|
||||||
# Dependencies
|
|
||||||
|
|
||||||
requires "nim >= 2.0.0"
|
|
||||||
requires "cligen"
|
|
136
styx/styx.sh
136
styx/styx.sh
|
@ -1,136 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
TERM=${TERM:-dumb}
|
|
||||||
HOSTNAME=${HOSTNAME:-$(hostname)}
|
|
||||||
FLAKE_PATH=${FLAKE_PATH:-$HOME/nixcfg}
|
|
||||||
|
|
||||||
DIM="$(tput dim)"
|
|
||||||
BOLD="$(tput bold)"
|
|
||||||
RED="$(tput setaf 1)"
|
|
||||||
GREEN="$(tput setaf 2)"
|
|
||||||
YELLOW="$(tput setaf 3)"
|
|
||||||
CYAN="$(tput setaf 4)"
|
|
||||||
RESET="$(tput sgr0)"
|
|
||||||
PREFIX="${CYAN}styx${RESET}"
|
|
||||||
|
|
||||||
log() {
|
|
||||||
printf "%s | %s\n" "$PREFIX" "$*"
|
|
||||||
}
|
|
||||||
|
|
||||||
error() {
|
|
||||||
printf "%s | %s | %s\n" "$PREFIX" "${RED}error${RESET}" "$*"
|
|
||||||
}
|
|
||||||
|
|
||||||
help() {
|
|
||||||
cat <<EOF
|
|
||||||
styx <cmd> [-h]
|
|
||||||
${DIM}sister moon to nix on pluto
|
|
||||||
sister software to nix in this repo${RESET}
|
|
||||||
|
|
||||||
${BOLD}commands${RESET}:
|
|
||||||
EOF
|
|
||||||
printf "${GREEN}%8s${RESET} | ${YELLOW}%s${RESET}\n" \
|
|
||||||
fmt "format *.nix" \
|
|
||||||
build "build and monitor with nom" \
|
|
||||||
boot "evaluate flake for next boot" \
|
|
||||||
switch "perform nixos rebuild" \
|
|
||||||
store "run some store cleanup" \
|
|
||||||
cache "nix build and push to daylin.cachix.org"
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt() {
|
|
||||||
alejandra . "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
boot() {
|
|
||||||
sudo nixos-rebuild boot --flake "$FLAKE_PATH" "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
switch() {
|
|
||||||
sudo nixos-rebuild switch --flake "$FLAKE_PATH" "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
store() {
|
|
||||||
nix store optimise "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
build() {
|
|
||||||
nom build "$FLAKE_PATH#nixosConfigurations.${HOSTNAME}.config.system.build.toplevel"
|
|
||||||
case "$1" in
|
|
||||||
switch | boot | test ) sudo ./result/bin/switch-to-configuration "$1";;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
dry() {
|
|
||||||
# poor mans nix flake check
|
|
||||||
nix build "$FLAKE_PATH#nixosConfigurations.${HOSTNAME}.config.system.build.toplevel" --dry-run
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
cache() {
|
|
||||||
start=$(date +%s)
|
|
||||||
|
|
||||||
cachix watch-exec daylin \
|
|
||||||
-- \
|
|
||||||
nix build "$FLAKE_PATH#nixosConfigurations.${HOSTNAME}.config.system.build.toplevel" \
|
|
||||||
--print-build-logs \
|
|
||||||
--accept-flake-config
|
|
||||||
|
|
||||||
end=$(date +%s)
|
|
||||||
runtime=$(date -d@$((end-start)) +'%M minutes, %S seconds')
|
|
||||||
|
|
||||||
echo "Built host: ${HOSTNAME} in ${runtime} seconds" >> "$GITHUB_STEP_SUMMARY"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if [[ $# -eq 0 ]]; then
|
|
||||||
log no command specified see below for help
|
|
||||||
help
|
|
||||||
fi
|
|
||||||
|
|
||||||
while [[ $# -gt 0 ]]; do
|
|
||||||
case $1 in
|
|
||||||
fmt | boot | switch | store | build | dry | cache)
|
|
||||||
cmd=$1
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-f | --flake)
|
|
||||||
FLAKE_PATH="$2"
|
|
||||||
shift; shift;
|
|
||||||
;;
|
|
||||||
-h | --host)
|
|
||||||
shift
|
|
||||||
HOSTNAME="$1"
|
|
||||||
shift;
|
|
||||||
;;
|
|
||||||
--help)
|
|
||||||
help
|
|
||||||
;;
|
|
||||||
--)
|
|
||||||
shift
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
-*,--*)
|
|
||||||
error "unknown flag: ${BOLD}$1${RESET}"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
error "unknown command: ${BOLD}$1${RESET}"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ $# -gt 0 ]]; then
|
|
||||||
echo "forwarding args: ${BOLD}$*${RESET}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z ${cmd+x} ]]; then
|
|
||||||
error "please specify a command"
|
|
||||||
help
|
|
||||||
fi
|
|
||||||
|
|
||||||
$cmd "$@"
|
|
4
todo.md
4
todo.md
|
@ -1,5 +1,5 @@
|
||||||
# daylin's nixcfg todo's
|
# oizys todo's
|
||||||
|
|
||||||
- [ ] add a styx command to trigger build on flake.lock pr
|
<!-- nothing :) -->
|
||||||
|
|
||||||
<!-- generated with <3 by daylinmorgan/todo -->
|
<!-- generated with <3 by daylinmorgan/todo -->
|
||||||
|
|
Loading…
Reference in a new issue