Package: cargo-steel-lib Version: 0.8.3~git20260929.9774aa0 Architecture: amd64 Homepage: https://github.com/mattwparas/steel Maintainer: Ong Yong Xin Installed-Size: 4595 Depends: libc6 (>= 2.34) Priority: optional Section: utils Filename: pool/main/c/cargo-steel-lib/cargo-steel-lib_0.8.3~git20260929.9774aa0_amd64.deb Size: 921848 SHA256: 67ac4aa0e757543df49ff39dfaaeab5ae8ae019ddbcac89bf795fb992db7c068 SHA1: dd025c7ac0f1d0076bac7f9e9da1e530d9459d2e MD5sum: 51eb15b818ea272a1650fec7ed53e4a8 Description: Cargo plugin to build dylib for steel Package: helix Version: 25.7.1~git20260929.df595c7 Architecture: amd64 Homepage: https://helix-editor.com Maintainer: Ong Yong Xin Installed-Size: 282495 Depends: libc6 (>= 2.14), libc6 (>= 2.2.5), libc6 (>= 2.3), libc6 (>= 2.3.4), libc6 (>= 2.34), libc6 (>= 2.4), 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_amd64.deb Size: 21580228 SHA256: aa8081be3982df0b3ceccae5a19755cd0922036bb9d0d18bb07ef11f1a2e16d1 SHA1: 84884dc0bf067a1a7c21bece256b47f2301585c5 MD5sum: c1f87ee0b5af7270e3d1b5df9b7ba2b7 Description: Steel-enabled fork of the post-modern text editor. Package: helix-steel Version: 25.7.1~git20260928.df595c7 Architecture: amd64 Homepage: https://helix-editor.com Maintainer: Ong Yong Xin Installed-Size: 282495 Depends: libc6 (>= 2.14), libc6 (>= 2.2.5), libc6 (>= 2.3), libc6 (>= 2.3.4), libc6 (>= 2.34), libc6 (>= 2.4), libstdc++6 (>= 5), libstdc++6 (>= 5.2) Priority: optional Section: utils Filename: pool/main/h/helix-steel/helix-steel_25.7.1~git20260928.df595c7_amd64.deb Size: 21574356 SHA256: 03f87ebb9a4097ef2e9a4e34dc8faacfcccd156da45f5390b873dee54d41d0e0 SHA1: d1a02463b58b22f00cef5f06259d7b4c6b4bcb72 MD5sum: 4f00ea17ba70d3484c5e49c8c868d456 Description: Steel-enabled fork of the post-modern text editor. Package: steel-forge Version: 0.8.3~git20260929.9774aa0 Architecture: amd64 Homepage: https://github.com/mattwparas/steel Maintainer: Ong Yong Xin Installed-Size: 92594 Depends: libc6 (>= 2.34) Priority: optional Section: utils Filename: pool/main/s/steel-forge/steel-forge_0.8.3~git20260929.9774aa0_amd64.deb Size: 16852992 SHA256: d7fb6c6b165340386ed35e229d6c120b36f4a3bc8a15d474b03cc11dbd0bbb82 SHA1: d96a115d60be466c9998fedae1fbdae52b2b726d MD5sum: f85ac40cb05b90c94f883517a9a7eb5a Description: Package manager for steel Package: steel-interpreter Version: 0.8.3~git20260929.9774aa0 Architecture: amd64 Homepage: https://github.com/mattwparas/steel Maintainer: Ong Yong Xin Installed-Size: 76327 Depends: libc6 (>= 2.34) Priority: optional Section: utils Filename: pool/main/s/steel-interpreter/steel-interpreter_0.8.3~git20260929.9774aa0_amd64.deb Size: 12751652 SHA256: c702ad10b80c331a7dd42389a850797e7e1ab8f4f39a3abe2cb6b87c3291aa6d SHA1: 5126fa64606583413f6bb1f1756123ccb5ae81a9 MD5sum: dfc0064158f61ac35adfe767f94192ca 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: amd64 Homepage: https://github.com/mattwparas/steel Maintainer: Ong Yong Xin Installed-Size: 57548 Depends: libc6 (>= 2.34) Priority: optional Section: utils Filename: pool/main/s/steel-language-server/steel-language-server_0.8.3~git20260929.9774aa0_amd64.deb Size: 9697624 SHA256: 8ec1dd5ff452a6ff01bceefea61787157b4db7c3dc14734c29b40bbe5eff3c69 SHA1: dd2a60713f612420bc9fe975719047088dd2705b MD5sum: 7e4a3a06c748b7582e4e3210912b4e7f 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. .