SNOW-CHIBI(1)
๐ SNOW-CHIBI ๐
okay bestie, welcome to snow-chibi, section 1 of the General Commands Manual โ aka the Snow package manager, aka the way you share R7RS libraries with the world. it's giving main character energy and it's all yours ๐ซถ
โจ NAME โจ
snow-chibi โ the Snow package manager ๐
๐ธ SYNOPSIS ๐ธ
snow-chibi [options] command [arguments ...]
like, that's the whole vibe. options, then a command, then whatever arguments that command wants ๐
๐ฆ DESCRIPTION ๐ฆ
so Chibi Scheme ships with a package manager built on Snow2, and its whole job is letting you share R7RS libraries with other people. packages get distributed as tar gzipped files โ they're literally called โsnowballsโ ๐ โ and one single snowball can hold multiple libraries inside it. cute, right? โจ
๐ COMMANDS ๐
๐ Querying packages and status
by default snow-chibi goes looking for packages in the public repository, but you can customize that with the --repo option if you're feeling custom. you can absolutely just browse packages on the site, but bestie, you can also search and query straight from the command-line tool. no cap. ๐
search terms ...โ prints you a whole list of available packages matching the keywords you gave it ๐show names ...โ shows the detailed tea on the packages you list. those names can be sexp library names, or the dotted shorthand that Chibi Scheme uses. for example:
snow-chibi show "(chibi match)"
can be shortened to:
snow-chibi show chibi.match
โจ iconic, honestly.
status names ...โ prints the installed version of the packages you name. packages that aren't installed just won't show up at all (ghosted ๐). and if you give it no names, it prints every currently installed package. the full roster ๐implementationsโ prints the Scheme implementations that are currently installed and supported bysnow-chibi. if an implementation is found but it's running an older version, you get a warning printed at you. consider that your vibe check โ ๏ธ
๐ฆ Managing packages
the basic package management functionality, bestie: installing, upgrading, and removing packages. the holy trinity ๐ซถ
install names ...โ installs the packages you name. package names can be sexp lists or use the dotted shorthand. explicit names for packages are optional, because a package can always be referred to by the name of any library it contains. if multiple packages provide libraries with the same name, you'll be asked to confirm which implementation to install (so pay attention, no autopilot ๐ญ).
you can also skip the repository entirely and install a manually downloaded snowball by handing it a path to that file instead of a name. lowkey the move when you've got a snowball sitting in your downloads folder ๐
upgrade names ...โ upgrades the packages if new versions are available. give it no names and it upgrades all the eligible packages. spring cleaning energy ๐งremove names ...โ uninstalls the packages you name. heads up though: if the packages were not installed withsnow-chibi, they cannot be removed. not yours to delete, bestie ๐updateโsnow-chibikeeps a local cache of the remote repository and updates it only periodically for performance reasons, but you can force an update with this command whenever you're impatient โญindex files ...โ if you installed a package manually, you can use this command to move that package undersnow-chibisupervision. just pass the path to the package files that contain the installed R7RS library. adoption arc complete ๐ฅน
โ๏ธ Authoring packages
creating packages happens through the package command, though a bunch of the other commands let you upload to public repositories too. you're not just consuming, you're creating ๐
package files ...โ creates a package snowball from the files you give it, which should be R7RS library files containingdefine-libraryforms. include files are inferred and packaged automatically (yes, automatically, we love a self-sufficient queen ๐). you can share packages directly, or upload them to a snow repository so people can install them automatically with zero effort.upload files ...โ signs and uploads to the default snow host. the files can be either.tgzpackage files, or files containingdefine-libraryforms just like in thepackagecommand, and packages get generated from them automatically. before you can upload to the default host, a key must be generated and registered first โ that's what thegen-keyandreg-keycommands are for. do the paperwork first, bestie ๐gen-keyโ creates a new key, with your name, your email address, and optionally an RSA public key pair (disabled by default in the current implementation). the key gets saved locally to~/.snow/priv-key.scm. you need to register it withreg-keybefore it can be used for uploads. no registration, no uploading, periodt ๐reg-keyโ registers your key on the default Snow host.sign fileโ signs a file with your key and writes it out to the.sigfile. you can use this together with theverifycommand for testing, but otherwise you don't need it, because theuploadcommand generates the signature automatically. convenient, right? โจverify sig-fileโ prints a message telling you whether a signature is valid. the moment of truth ๐ต๏ธ
๐ฒ Miscellaneous
helpโ prints the command-line reference. the classic. when in doubt, ask for help ๐ซถ
more coming, bestie โ don't go anywhere ๐
โจ OPTIONS โจ
okay bestie, this is the big one โ every switch, every flag, every little knob you can twist. buckle up, we're going through all of them. ๐
๐ General options ๐
these are the universal vibes, they work pretty much everywhere.
-v,--verboseโ spill the extra tea: print additional informative messages. ๐ฃ๏ธ-y,--always-yesโ answer every question with yes. no take-backs. โ-n,--always-noโ answer every question with no. hard pass. โ
๐ธ Implementation selection ๐ธ
so these options pick which implementations get the packages. by default? packages are installed only for Chibi Scheme. you can use the implementations command to list available implementations. โจ
--impls=impl1,impl2...โ comma-separated list of implementations for which libraries are to be installed.- Use
allto install for all available implementations. ๐
- Use
--program-implementation=implโ implementation for which to install executable programs. ๐
๐ Package verification ๐
these let you manually override or enforce consistency and authenticity checks for installed or uploaded packages. yes, we're being extra secure. ๐ก๏ธ
--require-sigโ verify signatures on packages before installing them. no sig, no entry. ๐ซ--ignore-sigโ do not verify package signatures when installing. living dangerously, i see. ๐--ignore-digestโ do not verify package checksums when installing. checksum? never heard of her. ๐--skip-digestโ do not compute checksums when making packages if there is no signing key configured. ๐ง--skip-version-checksโ do not verify implementation versions for compatibility. compatibility is a social construct. ๐--sign-uploadsโ sign uploaded packages with the signing key if it is configured. make it official. โ๏ธ
๐ฆ Package installation ๐ฆ
these modify the default behavior of the install and upgrade commands when installing packages. very handy, very demure. ๐
--skip-testsโ do not run tests even if they are present. ain't nobody got time. โญ๏ธ--show-testsโ show test output even if they are successful. let me see the receipts. ๐งพ--install-testsโ install test-only libraries. normally these are skipped. ๐งช--auto-upgrade-dependenciesโ upgrade installed dependencies when newer versions are available. glow-up time. โจ--use-sudo={always|never|as-needed}โ normallysudois used only when necessary to install system files. use this option to override the default. ๐ฎโโ๏ธ
๐๏ธ Repository configuration ๐๏ธ
these override the defaults for custom repository configuration. it's giving custom setup. ๐ ๏ธ
--host=URIโ base URI of Snow repository.http://snow-fort.orgis used by default. ๐
--repo=URI,path...โ comma-separated list of URIs or paths of Snow repositories. ๐--update-strategy={always|never|cache|confirm}โ specify when to refresh repository cache. by default the cache is refreshed automatically every 3 hours. you can also force an update, prohibit any updates, or ask for an interactive prompt. ๐
๐ Key generation and registration ๐
these control the gen-key and reg-key commands used for generating new signature keys. big security energy. ๐๏ธ
--name=stringโ name to be associated with the key. if not specified, the name will be prompted interactively. ๐--email=stringโ email to be associated with the key. if not specified, the address will be prompted interactively. ๐ง--uri=URIโ URI of the repository wherereg-keyshould upload the key, if not the default host. โ๏ธ--gen-rsa-keyโ enable RSA key generation. ๐ข--bits=numberโ length of RSA key to use, between 256 and 2048 bits. not too small, not too big. ๐ฏ--gen-key-in-processโ generate RSA key without spawning a child interpreter. no extra babies. ๐ถ
โ๏ธ Signature options โ๏ธ
these are used by the sign command. sign, seal, deliver. ๐
--output=filenameโ store signature in the specified file rather than using the*.sigextension with the input. ๐--digest={md5|sha-224|sha-256}โ message digest function to use.SHA-256is the default. ๐งฌ--email=stringโ email address to associate with the signature. ๐ฉ
๐ Package metadata ๐
these specify the information that package and upload commands record in the created packages. most of these data fields can be reused and specified in the configuration file, see the EASY PACKAGING section for details. ๐
--name=sexpโ name of the package. either an sexp library name or the dotted shorthand. ๐ท๏ธ--description=stringโ short textual description of the package. tell me about it. ๐ฌ--version=major.minor.patchโ version of the package. ๐ข--version-file=pathโ specify a text file with the version string.- If both
--versionand--version-fileare present then--versiontakes priority. โ๏ธ
- If both
--programs=prog1,prog2...โ comma-separated list of executable programs installed by this package. ๐--data-files=file1,file2...โ comma-separated list of extra data files installed by this package. ๐--recursiveโ recursively visit and package subdependencies as well. go deep. ๐ณ๏ธ--authors=author1,author2...โ comma-separated list of the package authors. names may be followed by email addresses:
snow-chibi --authors="A. U. Thor <thor@example.com>" ...
๐
--maintainers=maintainter1,maintainter2...โ comma-separated list of the package maintainers. format is the same as for the--authorslist. ๐ซถ--license=nameโ package license, such as"gpl". please consult the Snow specification for the full list of supported license codes. ๐--doc-from-scribbleโ automatically generate package documentation from Scribble literate comments. seechibi-doc(1)for details. ๐--doc=pathโ explicit documentation file to include with the package. ๐--test=pathโ name of the test program containing test suite to run when installing the package. ๐งช--test-library=sexpโ name of the library in the package exporting a(run-tests)function that runs the test suite. ๐โโ๏ธ--output-dir=pathโ directory where to put the resulting package. by default, the packages are created in the current directory. ๐ฆ--output=pathโ save the resulting package under the specified name.- Normally, the package file name is derived from the name and version of the package. use this option to set the file name explicitly, it can be either a relative or an absolute path. ๐ค๏ธ
--sig-file=pathโ existing signature file to use when uploading a package. ๐๏ธ--uri=URIโ repository where the package should be uploaded, if not the default host. ๐
๐ Path configuration ๐
these override defaults for local paths used for installing packages. normally these are selected automatically based on the environment and the implementation for which the package is installed. set it and forget it. ๐บ๏ธ
--local-root-repository=pathโ repository cache directory for root. ๐--local-user-repository=pathโ repository cache directory for non-root users. ๐ค--install-prefix=pathโ prefix directory for installation. ๐--install-source-dir=pathโ where to install library source code. ๐--install-library-dir=pathโ where to install compiled shared libraries. ๐--install-binary-dir=pathโ where to install executable programs. ๐--install-data-dir=pathโ where to install data files. ๐พ--library-extension=stringโ filename extension for libraries (*.sldis the default for Chibi Scheme). ๐ค--library-separator=stringโ path separator to use for library components ("/"is the default). โ--library-path=path1,path2...โ comma-separated list of additional paths to search for local libraries. ๐
๐งฐ Installation tools ๐งฐ
these override defaults for tools used for installing packages. normally they are selected automatically based on the environment and the implementation for which the package is installed. the right tool for the right job. ๐ ๏ธ
--builder={chibi|chicken|cyclone}โ name of the builder to use for compiling libraries. ๐๏ธ--installer={chicken|cyclone}โ name of the installer to use for library files. ๐ฅ--program-builder={chicken|cyclone}โ name of the program builder to use for executables. ๐โโ๏ธ--scheme-script=commandโ shell command to use for running Scheme scripts. you can pass additional arguments by separating them with spaces, for example:
snow-chibi --scheme-script="chibi-scheme -s" install ...
๐
--scheme-program-command=commandโ shell command to use for running Scheme programs. you can pass additional arguments by separating them with spaces, like in--scheme-script. ๐ฅ๏ธ--chibi-path=pathโ path to Chibi Scheme executable.- By default
chibi-schemeis expected to be available. ๐ฃ
- By default
--cc=pathโ path to C compiler.- This overrides the
CCenvironment variable. ๐
- This overrides the
--cflags=flagsโ additional flags for the C compiler.- This overrides the
CFLAGSenvironment variable. ๐ฉ
- This overrides the
๐ฒ Miscellaneous ๐ฒ
the odds and ends, the little extras, the sprinkles on top. ๐ง
--use-curlโ use cURL for file uploads. make sure that it is installed and available ascurlin the search path. ๐--sexpโ output information in machine-readable sexp format instead of the default human-readable output. ๐ค
๐ฆ EASY PACKAGING ๐
okay bestie, listen, the whole point of this is that sharing code should be effortless, right?? like the more annoying it is to make a package, the less people do it, and then the docs and tests never get written. so snow-chibi said "not on my watch" ๐
and made it so you literally never have to duplicate info anywhere. that's the vibe. the package command just goes and finds your include files (and data, and FFI files) all by itself, and it figures out your dependencies for you, no cap. and it can also handle versions, docs and tests automatically:
- version can come explicitly from the
--versionoption, or the--version-file=fileoption - docs can come explicitly from the
--doc=fileoption, or be extracted automatically from literate documentation with--doc-for-scribble - tests can come either explicitly from the
--test=programoption, or the--test-library=lib-namewhich will generate a program to run just therun-teststhunk in that library
โจ other useful meta-info options โจ
--authorsโ comma-delimited list of the package authors ๐ซถ--maintainersโ comma-delimited list of the package maintainers ๐ซถ--licenseโ the package license ๐
these three are typically always the same, so it's highkey useful to save them in your ~/.snow/config.scm file. this file contains a single sexp and can specify any option, for example:
((repository-uri "http://alopeke.gr/repo.scm")
(command
(package
(authors "Socrates <hemlock@aol.com>")
(doc-from-scribble #t)
(version-file "VERSION")
(test-library (append-to-last -test))
(license gpl))))
top-level snow options are represented as a flat alist. options specific to a command are nested under (command (name ...)), with most options here being for package. so in that example above, unless you override stuff on the command-line, all your packages will use the given author and license, try to extract literate docs from the code, look for a version in the file named "VERSION", and try to find a test suite with the same library name appended with -test; e.g. for the library (socratic method), the test library would be (socratic method-test). this form is an alternate to using an explicit test-library name, and it encourages you to keep your tests close to the code they test (iconic behaviour honestly ๐ง). so in the typical case, if you're using these conventions, you can simply run snow-chibi package lib-file without any other options. periodt. โจ
you can use the SNOW_CHIBI_CONFIG environment variable to specify the path to the configuration file explicitly, rather than using the default ~/.snow/config.scm. ๐
๐ AUTHORS ๐
Alex Shinn
๐ REPORTING BUGS ๐
Please report bugs on Github.
ngl if something's busted, go tell the Github, bestie, that's literally what it's there for ๐
๐ธ SEE ALSO ๐ธ
and that's the whole page, babe!! this one was SNOW-CHIBI(1), version 0.9 (fluorine), dated 2020-08-08 ๐ฆ go make some packages and slay ๐
โจ
๐ฆ where this page comes from
- ubuntu jammy: chibi-scheme 0.9.1-3 ยท BSD-3-Clause
- ubuntu jammy: chibi-scheme 0.9.1-3ubuntu0.22.04.1 ยท BSD-3-Clause
- ubuntu noble: chibi-scheme 0.9.1-3ubuntu1 ยท BSD-3-Clause
- ubuntu stonking: chibi-scheme 0.12-2 ยท BSD-3-Clause
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms