" I'm a helper class modelling the common uses of the Nim's [Nimble package manager](https://github.com/nim-lang/nimble). This was evolved in the context of the [Grafoscopio](mutabit.com/grafoscopio/en.html) community exploration and prototyping of interactive documentation. " Class { #name : #Nimble, #superclass : #Object, #category : #'MiniDocs-MiniDocs' } { #category : #accessing } Nimble class >> detect: packageName [ ^ self installed detect: [ :dependency | dependency beginsWith: packageName ] ifFound: [ ^ true ] ifNone: [ ^ false ] ] { #category : #accessing } Nimble class >> install: packageName [ (self detect: packageName) ifTrue: [ ^ self ]. self installPackagesList. OSSUnixSubprocess new command: 'nimble'; arguments: {'install'. packageName}; redirectStdout; runAndWaitOnExitDo: [ :process :outString | ^ outString ] ] { #category : #accessing } Nimble class >> installPackagesList [ (FileLocator home / '.nimble' / 'packages_official.json') exists ifTrue: [ ^ self ]. OSSUnixSubprocess new command: 'nimble'; arguments: #('refresh'); redirectStdout; runAndWaitOnExitDo: [ :process :outString | ^ outString ] ] { #category : #accessing } Nimble class >> installed [ | installed | OSSUnixSubprocess new command: 'nimble'; arguments: #('list' '--installed'); redirectStdout; redirectStderr; runAndWaitOnExitDo: [ :process :outString :errString | process isSuccess ifTrue: [ ^ outString lines ]; ifFalse: [ ^ nil ] ] ] { #category : #accessing } Nimble class >> version [ OSSUnixSubprocess new command: 'nimble'; arguments: #('--version'); redirectStdout; runAndWaitOnExitDo: [ :process :outString | ^ outString ] ]