Package: cargo-steel-lib Version: 0.8.3~git20260929.9774aa0 Architecture: arm64 Homepage: https://github.com/mattwparas/steel Maintainer: Ong Yong Xin Installed-Size: 4626 Depends: libc6 (>= 2.34) Priority: optional Section: utils Filename: pool/main/c/cargo-steel-lib/cargo-steel-lib_0.8.3~git20260929.9774aa0_arm64.deb Size: 839892 SHA256: da8acf5e10ca9d303c72bedddee98fe65776553bafabce100554254dbf0449a6 SHA1: 35c478db0cf7dfe17202534bde1b06cc88910cd9 MD5sum: 122412daffe331366f41dbb844909073 Description: Cargo plugin to build dylib for steel Package: helix Version: 25.7.1~git20260929.df595c7 Architecture: arm64 Homepage: https://helix-editor.com Maintainer: Ong Yong Xin Installed-Size: 281904 Depends: libc6 (>= 2.17), libc6 (>= 2.34), libstdc++6 (>= 5), libstdc++6 (>= 5.2) Suggests: steel-forge, steel-interpreter, steel-language-server Conflicts: hx Provides: editor Priority: optional Section: utils Filename: pool/main/h/helix/helix_25.7.1~git20260929.df595c7_arm64.deb Size: 20070472 SHA256: 5a5a27e75a6edcd0089cc1a71e891d47aa57ca8cec65b520c4f18a315140eabb SHA1: a88b6af02cf46fa0a3c5dce2b94913c533b311d5 MD5sum: dc408264d08e881be88cf0c354c3e132 Description: Steel-enabled fork of the post-modern text editor. Package: helix-steel Version: 25.7.1~git20260928.df595c7 Architecture: arm64 Homepage: https://helix-editor.com Maintainer: Ong Yong Xin Installed-Size: 281904 Depends: libc6 (>= 2.17), libc6 (>= 2.34), libstdc++6 (>= 5), libstdc++6 (>= 5.2) Priority: optional Section: utils Filename: pool/main/h/helix-steel/helix-steel_25.7.1~git20260928.df595c7_arm64.deb Size: 20068816 SHA256: b9f1e49624f0614149e222cc808d88c56d3ed1423274375639f7e7ef907f5e67 SHA1: 8b4c284d4c9c3509c982a9887755ce8cb7ff1c22 MD5sum: 938b25e9ab0a77d023fd9f86b2e35823 Description: Steel-enabled fork of the post-modern text editor. Package: steel-forge Version: 0.8.3~git20260929.9774aa0 Architecture: arm64 Homepage: https://github.com/mattwparas/steel Maintainer: Ong Yong Xin Installed-Size: 95108 Depends: libc6 (>= 2.34) Priority: optional Section: utils Filename: pool/main/s/steel-forge/steel-forge_0.8.3~git20260929.9774aa0_arm64.deb Size: 15928896 SHA256: f7d50e0f445baf462d0bb8a00ffa5643d846e4070553699e3a8c9f03dac0dee4 SHA1: daab5166bea7818223b8b85e7832828bbad84970 MD5sum: dcb63888feb98c12c3f4438450d757f2 Description: Package manager for steel Package: steel-interpreter Version: 0.8.3~git20260929.9774aa0 Architecture: arm64 Homepage: https://github.com/mattwparas/steel Maintainer: Ong Yong Xin Installed-Size: 78522 Depends: libc6 (>= 2.34) Priority: optional Section: utils Filename: pool/main/s/steel-interpreter/steel-interpreter_0.8.3~git20260929.9774aa0_arm64.deb Size: 11887792 SHA256: 1dc945417d10bb6a68aa3200e0ecf78e5c8400e9957dfd6f07fa7f682134e487 SHA1: 47df000bc035813785277e1f3e676f2de29af00d MD5sum: 2da8f3d5b18be053b3b075395e16c5f2 Description: Steel repl and command line interface # Steel .
.
. An embeddable and extensible scheme dialect built in Rust. . ![Actions Status](https://github.com/mattwparas/steel/workflows/Build/badge.svg) ![Actions Status](https://github.com/mattwparas/steel/workflows/Docker%20CI/badge.svg) [![Coverage Status](https://coveralls.io/repos/github/mattwparas/steel/badge.svg?branch=master)](https://coveralls.io/github/mattwparas/steel?branch=master) [![Discord Chat](https://img.shields.io/discord/1152443024715034675.svg?logo=discord&label=discord)](https://discord.gg/WwFRXdN6HU) [![Matrix Chat](https://img.shields.io/matrix/steel:matrix.org?logo=element&label=matrix)](https://matrix.to/#/#steel:matrix.org) . Try it on the Playground ยท Read the Steel book (WIP) .
. ## About . `Steel` is an embeddable scheme interpreter, with a standalone interpreter/REPL included as well. The language is implemented as a bytecode virtual machine. At the moment, it is mostly compliant with R5RS, only missing `let-syntax` support. Support for R7Rs is underway. . > **Warning** > The API is relatively stable, however it may change at any time while pre 1.0. > Care will be taken to keep things backwards compatible where possible. . . ## Features . - [R5RS](https://standards.scheme.org/official/r5rs.pdf) support - Modules, using `require` and `provide` much like Racket. - `syntax-rules` and `syntax-case` macros. - Easy integration with native Rust functions and structs, either through embedding or via FFI. - Higher order Contracts - Built in immutable data structures, including: - lists - vectors - hashmaps - hashsets . For more details, see the [book](https://mattwparas.github.io/steel/book). . ## Getting Started . This github repository contains a CLI interpreter. To try it out on the online playground, go to the [Steel playground](https://mattwparas.github.io/steel-playground/). To get started using a REPL with the crates, make sure you first have Rust installed. . Then, clone the repo and run the following command: . ```bash cargo run ``` . This will launch a REPL instance that looks something like this: .

. ### Full install . If you'd like to install everything, just run the following command: . ```bash cargo xtask install ``` . This will install: . - The steel interpreter, `steel` - The package manager, `forge` - The dylib installer, `cargo-steel-lib` (also available via the interpreter) - The steel language server - The standard library, found under the `cogs` directory . #### Nix . Steel can also be installed with Nix. Add the following to your Home Manager config: . ```nix home.packages = [ pkgs.steel ]; ``` . ### Packages . If you would like to customize the location of installed packages, please set the `STEEL_HOME` environment variable. Steel currently follows XDG if present, and otherwise assumes the default of `$HOME/.steel` if the `STEEL_HOME` environment variable is not already set. . ## License . Licensed under either of . - Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) - MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) . at your option. . ## Contribution . Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. . See [CONTRIBUTING.md](./CONTRIBUTING.md). Package: steel-language-server Version: 0.8.3~git20260929.9774aa0 Architecture: arm64 Homepage: https://github.com/mattwparas/steel Maintainer: Ong Yong Xin Installed-Size: 59775 Depends: libc6 (>= 2.34) Priority: optional Section: utils Filename: pool/main/s/steel-language-server/steel-language-server_0.8.3~git20260929.9774aa0_arm64.deb Size: 9182156 SHA256: e8c4009e1c14b4fa5ffc6a50cbec5c7168a2112d9cb2b380c509cf24c470b661 SHA1: 6c6861e119a10b2d7f1985d7d4211ad6e648f289 MD5sum: 48e55b9e394dc69f829ac7faeef01e42 Description: Steel language server # Steel language server . ## Installation . From the directory of this crate, run: . ``` cargo install --path . ``` . This will install the `steel-language-server` to your path. . Configuration in helix can be done by adding the following to your `languages.toml` file: . ```toml [[language]] name = "scheme" language-servers = [ "steel-language-server" ] . [language-server.steel-language-server] command = "steel-language-server" args = [] ``` . Configuration in neovim can be done by adding the following to your configuration . ```lua configs.steel = { default_config = { cmd = { "steel-language-server" }, filetypes = { "scheme" }, root_dir = function(_) -- We can run on single file, so root dir doesn't really matter. require("lspconfig.util").root_pattern "*" end, single_file_support = true, docs = { description = [[ Steel language server. . Install from: https://github.com/mattwparas/steel/tree/master/crates/steel-language-server . Check the repo for more configuration. ]], default_config = {} } } } ``` . Now you can call . ```lua require'lspconfig'.steel.setup { -- Your usual configuration (handlers, capabilities, etc.) goes here. } ``` . VSCode, and emacs installation instructions coming soon. . ## Configuration . If you're embedding steel within a host application, it is possible the language server does not have knowledge of the globals given by the host application. To make these available to the language server, create a configuration file for the language server under the path specified by the env var `STEEL_LSP_HOME`. . For example, I have set my `STEEL_LSP_HOME` to `~/.config/steel-lsp/` and added the file `globals.scm`: . ```scheme . (define keymaps (#%module "helix/core/keymaps")) . (define (register-values module values) (map (lambda (ident) (#%module-add module (symbol->string ident) void)) values)) . (register-values keymaps '(helix-current-keymap *buffer-or-extension-keybindings* *reverse-buffer-map* helix-merge-keybindings helix-string->keymap *global-keybinding-map* helix-deep-copy-keymap)) . (define typable-commands (#%module "helix/core/typable")) (define static-commands (#%module "helix/core/static")) (define editor (#%module "helix/core/editor")) . (register-values typable-commands '()) . (#%ignore-unused-identifier "_") . keymaps . ``` . The following rules apply: Any global value that is defined as a builtin module, will be interpreted by the LSP and used, or evaluated as a top level env var. So either defining `keymaps` or evaluating like so on the last line of the example will get the module to show up. . Any symbol added with `#%ignore-unused-identifier` will escape that symbol from being shown as an unused identifier. . Any global registered with `#%register-global` will be ignored as a free identifier as well. .