diff --git a/pkgs/oizys-nim/default.nix b/pkgs/oizys-nim/default.nix index 1504c35..730d6df 100644 --- a/pkgs/oizys-nim/default.nix +++ b/pkgs/oizys-nim/default.nix @@ -8,5 +8,5 @@ buildNimblePackage { verions = "unstable"; src = lib.cleanSource ./.; nativeBuildInputs = [ openssl ]; - nimbleDepsHash = "sha256-WeTbNoF+TuzWriqoHWk5DBVgBXtNBIBHMkwy8/+a2JA="; + nimbleDepsHash = "sha256-U44sZSUcus9minOs/Euy4h071eU9Cn83RnYb5jiKibo="; } diff --git a/pkgs/oizys-nim/nimble.lock b/pkgs/oizys-nim/nimble.lock index 5fc6710..ae2a70b 100644 --- a/pkgs/oizys-nim/nimble.lock +++ b/pkgs/oizys-nim/nimble.lock @@ -1,16 +1,6 @@ { "version": 2, "packages": { - "bbansi": { - "version": "0.1.1", - "vcsRevision": "9a85d9ed028f06f1ed1ee6851480a51408a6004e", - "url": "https://github.com/daylinmorgan/bbansi", - "downloadMethod": "git", - "dependencies": [], - "checksums": { - "sha1": "b338433f9a7a1b788b7583674c2b14096ced29ee" - } - }, "cligen": { "version": "1.7.0", "vcsRevision": "4193f802796f15559c81c6dd56724d6f20345917", @@ -21,6 +11,16 @@ "sha1": "300bd7fdb6e48d2d98e34ed0661206b50331e99c" } }, + "hwylterm": { + "version": "0.1.0", + "vcsRevision": "f743d4b2dc93e41d0e8b5bb0a3e5f26ffc2534e1", + "url": "https://github.com/daylinmorgan/hwylterm", + "downloadMethod": "git", + "dependencies": [], + "checksums": { + "sha1": "5a5e00533d5cf2660872738cabf8b7572128b05b" + } + }, "jsony": { "version": "1.1.5", "vcsRevision": "ea811bec7fa50f5abd3088ba94cda74285e93f18", diff --git a/pkgs/oizys-nim/oizys.nimble b/pkgs/oizys-nim/oizys.nimble index e5f2ac4..dc102df 100644 --- a/pkgs/oizys-nim/oizys.nimble +++ b/pkgs/oizys-nim/oizys.nimble @@ -14,4 +14,4 @@ requires "nim >= 2.0.8" requires "cligen" requires "jsony" requires "zippy" -requires "https://github.com/daylinmorgan/bbansi#9a85d9e" +requires "https://github.com/daylinmorgan/hwylterm#HEAD" diff --git a/pkgs/oizys-nim/src/oizys.nim b/pkgs/oizys-nim/src/oizys.nim index ac2ad92..acd4166 100644 --- a/pkgs/oizys-nim/src/oizys.nim +++ b/pkgs/oizys-nim/src/oizys.nim @@ -1,7 +1,7 @@ ## nix begat oizys import std/[os, tables, sequtils, strformat,strutils] -import cligen, bbansi +import cligen, hwylterm import oizys/[context, github, nix, overlay, logging] diff --git a/pkgs/oizys-nim/src/oizys/context.nim b/pkgs/oizys-nim/src/oizys/context.nim index ee6c81d..379fbce 100644 --- a/pkgs/oizys-nim/src/oizys/context.nim +++ b/pkgs/oizys-nim/src/oizys/context.nim @@ -1,6 +1,6 @@ import std/[logging, os, strformat, strutils] from std/nativesockets import getHostname -import bbansi +import hwylterm import ./logging type diff --git a/pkgs/oizys-nim/src/oizys/exec.nim b/pkgs/oizys-nim/src/oizys/exec.nim index 6555dff..ad1da3c 100644 --- a/pkgs/oizys-nim/src/oizys/exec.nim +++ b/pkgs/oizys-nim/src/oizys/exec.nim @@ -3,7 +3,7 @@ import std/[ strutils, streams, logging ] -import ./spin +import hwylterm func addArgs*(cmd: var string, args: openArray[string]) = diff --git a/pkgs/oizys-nim/src/oizys/github.nim b/pkgs/oizys-nim/src/oizys/github.nim index 1cb2dfb..f5b63d0 100644 --- a/pkgs/oizys-nim/src/oizys/github.nim +++ b/pkgs/oizys-nim/src/oizys/github.nim @@ -1,5 +1,5 @@ import std/[httpclient,logging, os, strformat, strutils, json, tables, tempfiles] -import jsony, bbansi, zippy/ziparchives +import jsony, hwylterm, zippy/ziparchives import ./[logging, exec, context] # localPassC is used by zippy but the additional diff --git a/pkgs/oizys-nim/src/oizys/logging.nim b/pkgs/oizys-nim/src/oizys/logging.nim index 708a43a..f1f7993 100644 --- a/pkgs/oizys-nim/src/oizys/logging.nim +++ b/pkgs/oizys-nim/src/oizys/logging.nim @@ -1,7 +1,7 @@ import std/[logging,strutils] export logging -import bbansi +import hwylterm var handlers {.threadvar.}: seq[Logger] diff --git a/pkgs/oizys-nim/src/oizys/nix.nim b/pkgs/oizys-nim/src/oizys/nix.nim index 2c6a247..8c70007 100644 --- a/pkgs/oizys-nim/src/oizys/nix.nim +++ b/pkgs/oizys-nim/src/oizys/nix.nim @@ -3,7 +3,7 @@ import std/[ enumerate, os, sequtils, strformat, strutils, sugar, logging, tables ] -import bbansi, jsony +import hwylterm, jsony import ./[context, exec, logging] diff --git a/pkgs/oizys-nim/src/oizys/spin.nim b/pkgs/oizys-nim/src/oizys/spin.nim deleted file mode 100644 index ab5f4b0..0000000 --- a/pkgs/oizys-nim/src/oizys/spin.nim +++ /dev/null @@ -1,137 +0,0 @@ -import std/[os, locks, sequtils, terminal] - -import bbansi - -type - SpinnerKind* = enum - Dots - Spinner* = object - interval*: int - frames*: seq[string] - -proc makeSpinner*(interval: int, frames: seq[string]): Spinner = - Spinner(interval: interval, frames: frames) - -const Spinners*: array[SpinnerKind, Spinner] = [ - # Dots - Spinner(interval: 80, frames: @["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"]), -] - - -type - Spinny = ref object - t: Thread[Spinny] - lock: Lock - text: string - running: bool - frames: seq[string] - frame: string - interval: int - customSymbol: bool - style: string - - EventKind = enum - Stop, SymbolChange, TextChange, - - SpinnyEvent = object - kind: EventKind - payload: string - -var spinnyChannel: Channel[SpinnyEvent] - -proc newSpinny*(text: string, s: Spinner): Spinny = - let style = "bold blue" - Spinny( - text: text, - running: true, - frames: mapIt(s.frames, $bb(it, style)), - customSymbol: false, - interval: s.interval, - style: "bold blue" - ) - -proc newSpinny*(text: string, spinType: SpinnerKind): Spinny = - newSpinny(text, Spinners[spinType]) - -proc setSymbolColor*(spinny: Spinny, style: string) = - spinny.frames = mapIt(spinny.frames, $bb(it, style)) - -proc setSymbol*(spinny: Spinny, symbol: string) = - spinnyChannel.send(SpinnyEvent(kind: SymbolChange, payload: symbol)) - -proc setText*(spinny: Spinny, text: string) = - spinnyChannel.send(SpinnyEvent(kind: TextChange, payload: text)) - -proc handleEvent(spinny: Spinny, eventData: SpinnyEvent): bool = - result = true - case eventData.kind - of Stop: - result = false - of SymbolChange: - spinny.customSymbol = true - spinny.frame = eventData.payload - of TextChange: - spinny.text = eventData.payload - -proc spinnyLoop(spinny: Spinny) {.thread.} = - var frameCounter = 0 - - while spinny.running: - let data = spinnyChannel.tryRecv() - if data.dataAvailable: - # If we received a Stop event - if not spinny.handleEvent(data.msg): - spinnyChannel.close() - # This is required so we can reopen the same channel more than once - # See https://github.com/nim-lang/Nim/issues/6369 - spinnyChannel = default(typeof(spinnyChannel)) - # TODO: Do we need spinny.running at all? - spinny.running = false - break - - stdout.flushFile() - if not spinny.customSymbol: - spinny.frame = spinny.frames[frameCounter] - - withLock spinny.lock: - eraseLine() - stdout.write(spinny.frame & " " & spinny.text) - stdout.flushFile() - - sleep spinny.interval - - if frameCounter >= spinny.frames.len - 1: - frameCounter = 0 - else: - frameCounter += 1 - -proc start*(spinny: Spinny) = - initLock spinny.lock - spinnyChannel.open() - createThread(spinny.t, spinnyLoop, spinny) - -proc stop(spinny: Spinny, kind: EventKind, payload = "") = - spinnyChannel.send(SpinnyEvent(kind: kind, payload: payload)) - spinnyChannel.send(SpinnyEvent(kind: Stop)) - joinThread spinny.t - eraseLine stdout - flushFile stdout - - -proc stop*(spinny: Spinny) = - spinny.stop(Stop) - -template withSpinner*(msg: string = "", body: untyped): untyped = - var spinner {.inject.} = newSpinny(msg, Dots) - if isatty(stdout): # don't spin if it's not a tty - start spinner - - body - - if isatty(stdout): - stop spinner - -template withSpinner*(body: untyped): untyped = - withSpinner("", body) - -