docs/Nixpkgs/Languages-And-Frameworks/lisp.section/index.html

3245 lines
70 KiB
HTML
Raw Normal View History

2024-07-24 19:14:02 +00:00
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Aux Documentation">
<meta name="author" content="Nixpkgs Aux, and Lix Contributors">
<link rel="canonical" href="https://docs.auxolotl.org/Nixpkgs/Languages-And-Frameworks/lisp.section/">
<link rel="prev" href="../julia.section/">
<link rel="next" href="../lua.section/">
<link rel="icon" href="../../../assets/aux-logo.svg">
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.29">
<title>lisp-modules - Aux Docs</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.76a95c52.min.css">
<link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.bunny.net/css?family=IBM+Plex+Sans:300,300i,400,400i,700,700i%7CIBM+Plex+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"IBM Plex Sans";--md-code-font:"IBM Plex Mono"}</style>
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<meta property="og:type" content="website" >
<meta property="og:title" content="lisp-modules {#lisp} - Aux Docs" >
<meta property="og:description" content="Aux Documentation" >
<meta property="og:image" content="https://docs.auxolotl.org/assets/images/social/Nixpkgs/Languages-And-Frameworks/lisp.section.png" >
<meta property="og:image:type" content="image/png" >
<meta property="og:image:width" content="1200" >
<meta property="og:image:height" content="630" >
<meta property="og:url" content="https://docs.auxolotl.org/Nixpkgs/Languages-And-Frameworks/lisp.section/" >
<meta name="twitter:card" content="summary_large_image" >
<meta name="twitter:title" content="lisp-modules {#lisp} - Aux Docs" >
<meta name="twitter:description" content="Aux Documentation" >
<meta name="twitter:image" content="https://docs.auxolotl.org/assets/images/social/Nixpkgs/Languages-And-Frameworks/lisp.section.png" >
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#lisp" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../.." title="Aux Docs" class="md-header__button md-logo" aria-label="Aux Docs" data-md-component="logo">
<img src="../../../assets/aux-logo.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Aux Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
lisp-modules
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue" aria-label="Dark Mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Dark Mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="blue" aria-label="Light Mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Light Mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5c-.84 0-1.65.15-2.39.42L12 2M3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29L3.34 7m.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14L3.36 17M20.65 7l-1.77 3.79a7.023 7.023 0 0 0-2.38-4.15l4.15.36m-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29L20.64 17M12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44L12 22Z"/></svg>
</label>
</form>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://git.auxolotl.org/auxolotl/docs" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16.777 0a2.9 2.9 0 1 1-2.529 4.322H12.91a4.266 4.266 0 0 0-4.265 4.195v2.118a7.076 7.076 0 0 1 4.147-1.42l.118-.002h1.338a2.9 2.9 0 0 1 5.43 1.422 2.9 2.9 0 0 1-5.43 1.422H12.91a4.266 4.266 0 0 0-4.265 4.195v2.319A2.9 2.9 0 0 1 7.222 24 2.9 2.9 0 0 1 5.8 18.57V8.589a7.109 7.109 0 0 1 6.991-7.108l.118-.001h1.338A2.9 2.9 0 0 1 16.778 0ZM7.223 19.905a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Zm9.554-10.464a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.39Zm0-7.735a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Z"/></svg>
</div>
<div class="md-source__repository">
auxolotl/docs
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../../.." class="md-tabs__link">
Aux Documentation Hub
</a>
</li>
<li class="md-tabs__item">
<a href="../../../TODO/" class="md-tabs__link">
TODO
</a>
</li>
<li class="md-tabs__item">
<a href="../../../Aux/" class="md-tabs__link">
Aux
</a>
</li>
<li class="md-tabs__item">
<a href="../../../Lix/" class="md-tabs__link">
Lix
</a>
</li>
<li class="md-tabs__item">
<a href="../../../NixOS/appstream/" class="md-tabs__link">
NixOS
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../../" class="md-tabs__link">
Nixpkgs
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../.." title="Aux Docs" class="md-nav__button md-logo" aria-label="Aux Docs" data-md-component="logo">
<img src="../../../assets/aux-logo.svg" alt="logo">
</a>
Aux Docs
</label>
<div class="md-nav__source">
<a href="https://git.auxolotl.org/auxolotl/docs" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16.777 0a2.9 2.9 0 1 1-2.529 4.322H12.91a4.266 4.266 0 0 0-4.265 4.195v2.118a7.076 7.076 0 0 1 4.147-1.42l.118-.002h1.338a2.9 2.9 0 0 1 5.43 1.422 2.9 2.9 0 0 1-5.43 1.422H12.91a4.266 4.266 0 0 0-4.265 4.195v2.319A2.9 2.9 0 0 1 7.222 24 2.9 2.9 0 0 1 5.8 18.57V8.589a7.109 7.109 0 0 1 6.991-7.108l.118-.001h1.338A2.9 2.9 0 0 1 16.778 0ZM7.223 19.905a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Zm9.554-10.464a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.39Zm0-7.735a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Z"/></svg>
</div>
<div class="md-source__repository">
auxolotl/docs
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../.." class="md-nav__link">
<span class="md-ellipsis">
Aux Documentation Hub
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../TODO/" class="md-nav__link">
<span class="md-ellipsis">
TODO
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../../Aux/" class="md-nav__link">
<span class="md-ellipsis">
Aux
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../../Lix/" class="md-nav__link">
<span class="md-ellipsis">
Lix
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../../NixOS/appstream/" class="md-nav__link">
<span class="md-ellipsis">
NixOS
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" checked>
<div class="md-nav__link md-nav__container">
<a href="../../" class="md-nav__link ">
<span class="md-ellipsis">
Nixpkgs
</span>
</a>
<label class="md-nav__link " for="__nav_6" id="__nav_6_label" tabindex="">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Nixpkgs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../options/" class="md-nav__link">
<span class="md-ellipsis">
Options
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Build-Helpers/" class="md-nav__link">
<span class="md-ellipsis">
Build Helpers
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Development/" class="md-nav__link">
<span class="md-ellipsis">
Development
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Functions/" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Hooks/" class="md-nav__link">
<span class="md-ellipsis">
Hooks
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_7" checked>
<div class="md-nav__link md-nav__container">
<a href="../" class="md-nav__link ">
<span class="md-ellipsis">
Languages And Frameworks
</span>
</a>
<label class="md-nav__link " for="__nav_6_7" id="__nav_6_7_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_7_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_6_7">
<span class="md-nav__icon md-icon"></span>
Languages And Frameworks
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../agda.section/" class="md-nav__link">
<span class="md-ellipsis">
Agda
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../android.section/" class="md-nav__link">
<span class="md-ellipsis">
Android
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../beam.section/" class="md-nav__link">
<span class="md-ellipsis">
BEAM Languages (Erlang, Elixir &amp; LFE)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../bower.section/" class="md-nav__link">
<span class="md-ellipsis">
Bower
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../chicken.section/" class="md-nav__link">
<span class="md-ellipsis">
CHICKEN
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../coq.section/" class="md-nav__link">
<span class="md-ellipsis">
Coq and coq packages
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../crystal.section/" class="md-nav__link">
<span class="md-ellipsis">
Crystal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cuda.section/" class="md-nav__link">
<span class="md-ellipsis">
CUDA
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cuelang.section/" class="md-nav__link">
<span class="md-ellipsis">
Cue (Cuelang)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dart.section/" class="md-nav__link">
<span class="md-ellipsis">
Dart
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dhall.section/" class="md-nav__link">
<span class="md-ellipsis">
Dhall
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dlang.section/" class="md-nav__link">
<span class="md-ellipsis">
D (Dlang)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet.section/" class="md-nav__link">
<span class="md-ellipsis">
Dotnet
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../emscripten.section/" class="md-nav__link">
<span class="md-ellipsis">
Emscripten
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../gnome.section/" class="md-nav__link">
<span class="md-ellipsis">
GNOME
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../go.section/" class="md-nav__link">
<span class="md-ellipsis">
Go
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../gradle.section/" class="md-nav__link">
<span class="md-ellipsis">
Gradle
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hare.section/" class="md-nav__link">
<span class="md-ellipsis">
Hare
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../haskell.section/" class="md-nav__link">
<span class="md-ellipsis">
Haskell
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hy.section/" class="md-nav__link">
<span class="md-ellipsis">
Hy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../idris.section/" class="md-nav__link">
<span class="md-ellipsis">
Idris
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../idris2.section/" class="md-nav__link">
<span class="md-ellipsis">
Idris2
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ios.section/" class="md-nav__link">
<span class="md-ellipsis">
iOS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../java.section/" class="md-nav__link">
<span class="md-ellipsis">
Java
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../javascript.section/" class="md-nav__link">
<span class="md-ellipsis">
Javascript
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../julia.section/" class="md-nav__link">
<span class="md-ellipsis">
Julia
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
lisp-modules
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
lisp-modules
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#lisp-overview" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lisp-use-case-example" class="md-nav__link">
<span class="md-ellipsis">
The 90% use case example
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lisp-importing-packages-from-quicklisp" class="md-nav__link">
<span class="md-ellipsis">
Importing packages from Quicklisp
</span>
</a>
<nav class="md-nav" aria-label="Importing packages from Quicklisp">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#lisp-quicklisp-adding-native-dependencies" class="md-nav__link">
<span class="md-ellipsis">
Adding native dependencies
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lisp-quicklisp-trusting" class="md-nav__link">
<span class="md-ellipsis">
Trusting systems.txt and releases.txt
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lisp-quicklisp-quirks" class="md-nav__link">
<span class="md-ellipsis">
Quirks
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lisp-defining-packages-inside" class="md-nav__link">
<span class="md-ellipsis">
Defining packages manually inside Nixpkgs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lisp-defining-packages-outside" class="md-nav__link">
<span class="md-ellipsis">
Defining packages manually outside Nixpkgs
</span>
</a>
<nav class="md-nav" aria-label="Defining packages manually outside Nixpkgs">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#lisp-including-external-pkg-in-scope" class="md-nav__link">
<span class="md-ellipsis">
Including an external package in scope
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lisp-overriding-package-attributes" class="md-nav__link">
<span class="md-ellipsis">
Overriding package attributes
</span>
</a>
<nav class="md-nav" aria-label="Overriding package attributes">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#lisp-dealing-with-slashy-systems" class="md-nav__link">
<span class="md-ellipsis">
Dealing with slashy systems
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lisp-building-wrappers" class="md-nav__link">
<span class="md-ellipsis">
Building Wrappers
</span>
</a>
<nav class="md-nav" aria-label="Building Wrappers">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#lisp-loading-asdf" class="md-nav__link">
<span class="md-ellipsis">
Loading ASDF
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lisp-loading-systems" class="md-nav__link">
<span class="md-ellipsis">
Loading systems
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lisp-adding-a-new-lisp" class="md-nav__link">
<span class="md-ellipsis">
Adding a new Lisp
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../lua.section/" class="md-nav__link">
<span class="md-ellipsis">
Lua
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../maven.section/" class="md-nav__link">
<span class="md-ellipsis">
Maven
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../nim.section/" class="md-nav__link">
<span class="md-ellipsis">
Nim
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ocaml.section/" class="md-nav__link">
<span class="md-ellipsis">
OCaml
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../octave.section/" class="md-nav__link">
<span class="md-ellipsis">
Octave
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../perl.section/" class="md-nav__link">
<span class="md-ellipsis">
Perl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../php.section/" class="md-nav__link">
<span class="md-ellipsis">
PHP
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../pkg-config.section/" class="md-nav__link">
<span class="md-ellipsis">
pkg-config
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../python.section/" class="md-nav__link">
<span class="md-ellipsis">
Python
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../qt.section/" class="md-nav__link">
<span class="md-ellipsis">
Qt
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../r.section/" class="md-nav__link">
<span class="md-ellipsis">
R
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ruby.section/" class="md-nav__link">
<span class="md-ellipsis">
Ruby
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../rust.section/" class="md-nav__link">
<span class="md-ellipsis">
Rust
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../scheme.section/" class="md-nav__link">
<span class="md-ellipsis">
Scheme
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../swift.section/" class="md-nav__link">
<span class="md-ellipsis">
Swift
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../texlive.section/" class="md-nav__link">
<span class="md-ellipsis">
TeX Live
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../titanium.section/" class="md-nav__link">
<span class="md-ellipsis">
Titanium
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../vim.section/" class="md-nav__link">
<span class="md-ellipsis">
Vim
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Library-Reference/asserts/" class="md-nav__link">
<span class="md-ellipsis">
Library Reference
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Module-System/module-system.chapter/" class="md-nav__link">
<span class="md-ellipsis">
Module System
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Packages/" class="md-nav__link">
<span class="md-ellipsis">
Packages
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Standard-Environment/" class="md-nav__link">
<span class="md-ellipsis">
Standard Environment
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Using-Nixpkgs/" class="md-nav__link">
<span class="md-ellipsis">
Using Nixpkgs
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#lisp-overview" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lisp-use-case-example" class="md-nav__link">
<span class="md-ellipsis">
The 90% use case example
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lisp-importing-packages-from-quicklisp" class="md-nav__link">
<span class="md-ellipsis">
Importing packages from Quicklisp
</span>
</a>
<nav class="md-nav" aria-label="Importing packages from Quicklisp">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#lisp-quicklisp-adding-native-dependencies" class="md-nav__link">
<span class="md-ellipsis">
Adding native dependencies
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lisp-quicklisp-trusting" class="md-nav__link">
<span class="md-ellipsis">
Trusting systems.txt and releases.txt
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lisp-quicklisp-quirks" class="md-nav__link">
<span class="md-ellipsis">
Quirks
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lisp-defining-packages-inside" class="md-nav__link">
<span class="md-ellipsis">
Defining packages manually inside Nixpkgs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lisp-defining-packages-outside" class="md-nav__link">
<span class="md-ellipsis">
Defining packages manually outside Nixpkgs
</span>
</a>
<nav class="md-nav" aria-label="Defining packages manually outside Nixpkgs">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#lisp-including-external-pkg-in-scope" class="md-nav__link">
<span class="md-ellipsis">
Including an external package in scope
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lisp-overriding-package-attributes" class="md-nav__link">
<span class="md-ellipsis">
Overriding package attributes
</span>
</a>
<nav class="md-nav" aria-label="Overriding package attributes">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#lisp-dealing-with-slashy-systems" class="md-nav__link">
<span class="md-ellipsis">
Dealing with slashy systems
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lisp-building-wrappers" class="md-nav__link">
<span class="md-ellipsis">
Building Wrappers
</span>
</a>
<nav class="md-nav" aria-label="Building Wrappers">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#lisp-loading-asdf" class="md-nav__link">
<span class="md-ellipsis">
Loading ASDF
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lisp-loading-systems" class="md-nav__link">
<span class="md-ellipsis">
Loading systems
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lisp-adding-a-new-lisp" class="md-nav__link">
<span class="md-ellipsis">
Adding a new Lisp
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="lisp">lisp-modules</h1>
<p>This document describes the Nixpkgs infrastructure for building Common Lisp
systems that use <a href="https://asdf.common-lisp.dev/">ASDF</a> (Another System
Definition Facility). It lives in <code>pkgs/development/lisp-modules</code>.</p>
<h2 id="lisp-overview">Overview</h2>
<p>The main entry point of the API are the Common Lisp implementation packages
themselves (e.g. <code>abcl</code>, <code>ccl</code>, <code>clasp-common-lisp</code>, <code>clisp</code>, <code>ecl</code>,
<code>sbcl</code>). They have the <code>pkgs</code> and <code>withPackages</code> attributes, which can be used
to discover available packages and to build wrappers, respectively.</p>
<p>The <code>pkgs</code> attribute set contains packages that were automatically
<a href="#lisp-importing-packages-from-quicklisp">imported</a> from Quicklisp, and any
other <a href="#lisp-defining-packages-inside">manually defined</a> ones. Not every package
works for all the CL implementations (e.g. <code>nyxt</code> only makes sense for <code>sbcl</code>).</p>
<p>The <code>withPackages</code> function is of primary utility. It is used to build
<a href="#lisp-building-wrappers">runnable wrappers</a>, with a pinned and pre-built
<a href="#lisp-loading-asdf">ASDF FASL</a> available in the <code>ASDF</code> environment variable,
and <code>CL_SOURCE_REGISTRY</code>/<code>ASDF_OUTPUT_TRANSLATIONS</code> configured to
<a href="#lisp-loading-systems">find the desired systems on runtime</a>.</p>
<p>In addition, Lisps have the <code>withOverrides</code> function, which can be used to
<a href="#lisp-including-external-pkg-in-scope">substitute</a> any package in the scope of
their <code>pkgs</code>. This will also be useful together with <code>overrideLispAttrs</code> when
<a href="#lisp-dealing-with-slashy-systems">dealing with slashy systems</a>, because they
should stay in the main package and be built by specifying the <code>systems</code>
argument to <code>build-asdf-system</code>.</p>
<h2 id="lisp-use-case-example">The 90% use case example</h2>
<p>The most common way to use the library is to run ad-hoc wrappers like this:</p>
<p><code>nix-shell -p 'sbcl.withPackages (ps: with ps; [ alexandria ])'</code></p>
<p>Then, in a shell:</p>
<div class="highlight"><pre><span></span><code>$ sbcl
* (load (sb-ext:posix-getenv &quot;ASDF&quot;))
* (asdf:load-system &#39;alexandria)
</code></pre></div>
<p>Also one can create a <code>pkgs.mkShell</code> environment in <code>shell.nix</code>/<code>flake.nix</code>:</p>
<div class="highlight"><pre><span></span><code><span class="k">let</span>
sbcl&#39; <span class="o">=</span> sbcl<span class="o">.</span>withPackages <span class="p">(</span>ps<span class="p">:</span> <span class="p">[</span> ps<span class="o">.</span>alexandria <span class="p">]);</span>
<span class="k">in</span> mkShell <span class="p">{</span>
<span class="ss">packages</span> <span class="o">=</span> <span class="p">[</span> sbcl&#39; <span class="p">];</span>
<span class="p">}</span>
</code></pre></div>
<p>Such a Lisp can be now used e.g. to compile your sources:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="ss">buildPhase</span> <span class="o">=</span> <span class="s s-Multiline">&#39;&#39;</span>
<span class="s s-Multiline"> </span><span class="si">${</span>sbcl&#39;<span class="si">}</span><span class="s s-Multiline">/bin/sbcl --load my-build-file.lisp</span>
<span class="s s-Multiline"> &#39;&#39;</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div>
<h2 id="lisp-importing-packages-from-quicklisp">Importing packages from Quicklisp</h2>
<p>To save some work of writing Nix expressions, there is a script that imports all
the packages distributed by Quicklisp into <code>imported.nix</code>. This works by parsing
its <code>releases.txt</code> and <code>systems.txt</code> files, which are published every couple of
months on <a href="https://beta.quicklisp.org/dist/quicklisp.txt">quicklisp.org</a>.</p>
<p>The import process is implemented in the <code>import</code> directory as Common Lisp
code in the <code>org.lispbuilds.nix</code> ASDF system. To run the script, one can
execute <code>ql-import.lisp</code>:</p>
<div class="highlight"><pre><span></span><code>cd pkgs/development/lisp-modules
nix-shell --run &#39;sbcl --script ql-import.lisp&#39;
</code></pre></div>
<p>The script will:</p>
<ol>
<li>Download the latest Quicklisp <code>systems.txt</code> and <code>releases.txt</code> files</li>
<li>Generate a temporary SQLite database of all QL systems in <code>packages.sqlite</code></li>
<li>Generate an <code>imported.nix</code> file from the database</li>
</ol>
<p>(The <code>packages.sqlite</code> file can be deleted at will, because it is regenerated
each time the script runs.)</p>
<p>The maintainer's job is to:</p>
<ol>
<li>Re-run the <code>ql-import.lisp</code> script when there is a new Quicklisp release</li>
<li><a href="#lisp-quicklisp-adding-native-dependencies">Add any missing native dependencies</a> in <code>ql.nix</code></li>
<li>For packages that still don't build, <a href="#lisp-defining-packages-inside">package them manually</a> in <code>packages.nix</code></li>
</ol>
<p>Also, the <code>imported.nix</code> file <strong>must not be edited manually</strong>! It should only be
generated as described in this section (by running <code>ql-import.lisp</code>).</p>
<h3 id="lisp-quicklisp-adding-native-dependencies">Adding native dependencies</h3>
<p>The Quicklisp files contain ASDF dependency data, but don't include native
library (CFFI) dependencies, and, in the case of ABCL, Java dependencies.</p>
<p>The <code>ql.nix</code> file contains a long list of overrides, where these dependencies
can be added.</p>
<p>Packages defined in <code>packages.nix</code> contain these dependencies naturally.</p>
<h3 id="lisp-quicklisp-trusting">Trusting <code>systems.txt</code> and <code>releases.txt</code></h3>
<p>The previous implementation of <code>lisp-modules</code> didn't fully trust the Quicklisp
data, because there were times where the dependencies specified were not
complete and caused broken builds. It instead used a <code>nix-shell</code> environment to
discover real dependencies by using the ASDF APIs.</p>
<p>The current implementation has chosen to trust this data, because it's faster to
parse a text file than to build each system to generate its Nix file, and
because that way packages can be mass-imported. Because of that, there may come
a day where some packages will break, due to bugs in Quicklisp. In that case,
the fix could be a manual override in <code>packages.nix</code> and <code>ql.nix</code>.</p>
<p>A known fact is that Quicklisp doesn't include dependencies on slashy systems in
its data. This is an example of a situation where such fixes were used, e.g. to
replace the <code>systems</code> attribute of the affected packages. (See the definition of
<code>iolib</code>).</p>
<h3 id="lisp-quicklisp-quirks">Quirks</h3>
<p>During Quicklisp import:</p>
<ul>
<li><code>+</code> in names is converted to <code>_plus{_,}</code>: <code>cl+ssl</code>-&gt;<code>cl_plus_ssl</code>, <code>alexandria+</code>-&gt;<code>alexandria_plus</code></li>
<li><code>.</code> in names is converted to <code>_dot_</code>: <code>iolib.base</code>-&gt;<code>iolib_dot_base</code></li>
<li>names starting with a number have a <code>_</code> prepended (<code>3d-vectors</code>-&gt;<code>_3d-vectors</code>)</li>
<li><code>_</code> in names is converted to <code>__</code> for reversibility</li>
</ul>
<h2 id="lisp-defining-packages-inside">Defining packages manually inside Nixpkgs</h2>
<p>Packages that for some reason are not in Quicklisp, and so cannot be
auto-imported, or don't work straight from the import, are defined in the
<code>packages.nix</code> file.</p>
<p>In that file, use the <code>build-asdf-system</code> function, which is a wrapper around
<code>mkDerivation</code> for building ASDF systems. Various other hacks are present, such
as <code>build-with-compile-into-pwd</code> for systems which create files during
compilation (such as cl-unicode).</p>
<p>The <code>build-asdf-system</code> function is documented
<a href="#lisp-defining-packages-outside">here</a>. Also, <code>packages.nix</code> is full of
examples of how to use it.</p>
<h2 id="lisp-defining-packages-outside">Defining packages manually outside Nixpkgs</h2>
<p>Lisp derivations (<code>abcl</code>, <code>sbcl</code> etc.) also export the <code>buildASDFSystem</code>
function, which is similar to <code>build-asdf-system</code> from <code>packages.nix</code>, but is
part of the public API.</p>
<p>It takes the following arguments:</p>
<ul>
<li><code>pname</code>: the package name</li>
<li><code>version</code>: the package version</li>
<li><code>src</code>: the package source</li>
<li><code>patches</code>: patches to apply to the source before build</li>
<li><code>nativeLibs</code>: native libraries used by CFFI and grovelling</li>
<li><code>javaLibs</code>: Java libraries for ABCL</li>
<li><code>lispLibs</code>: dependencies on other packages build with <code>buildASDFSystem</code></li>
<li><code>systems</code>: list of systems to build</li>
</ul>
<p>It can be used to define packages outside Nixpkgs, and, for example, add them
into the package scope with <code>withOverrides</code>.</p>
<h3 id="lisp-including-external-pkg-in-scope">Including an external package in scope</h3>
<p>A package defined outside Nixpkgs using <code>buildASDFSystem</code> can be woven into the
Nixpkgs-provided scope like this:</p>
<div class="highlight"><pre><span></span><code><span class="k">let</span>
<span class="ss">alexandria</span> <span class="o">=</span> sbcl<span class="o">.</span>buildASDFSystem <span class="k">rec</span> <span class="p">{</span>
<span class="ss">pname</span> <span class="o">=</span> <span class="s2">&quot;alexandria&quot;</span><span class="p">;</span>
<span class="ss">version</span> <span class="o">=</span> <span class="s2">&quot;1.4&quot;</span><span class="p">;</span>
<span class="ss">src</span> <span class="o">=</span> fetchFromGitLab <span class="p">{</span>
<span class="ss">domain</span> <span class="o">=</span> <span class="s2">&quot;gitlab.common-lisp.net&quot;</span><span class="p">;</span>
<span class="ss">owner</span> <span class="o">=</span> <span class="s2">&quot;alexandria&quot;</span><span class="p">;</span>
<span class="ss">repo</span> <span class="o">=</span> <span class="s2">&quot;alexandria&quot;</span><span class="p">;</span>
<span class="ss">rev</span> <span class="o">=</span> <span class="s2">&quot;v</span><span class="si">${</span>version<span class="si">}</span><span class="s2">&quot;</span><span class="p">;</span>
<span class="ss">hash</span> <span class="o">=</span> <span class="s2">&quot;sha256-1Hzxt65dZvgOFIljjjlSGgKYkj+YBLwJCACi5DZsKmQ=&quot;</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">};</span>
sbcl&#39; <span class="o">=</span> sbcl<span class="o">.</span>withOverrides <span class="p">(</span>self<span class="p">:</span> super<span class="p">:</span> <span class="p">{</span>
<span class="k">inherit</span> alexandria<span class="p">;</span>
<span class="p">});</span>
<span class="k">in</span> sbcl&#39;<span class="o">.</span>pkgs<span class="o">.</span>alexandria
</code></pre></div>
<h2 id="lisp-overriding-package-attributes">Overriding package attributes</h2>
<p>Packages export the <code>overrideLispAttrs</code> function, which can be used to build a
new package with different parameters.</p>
<p>Example of overriding <code>alexandria</code>:</p>
<div class="highlight"><pre><span></span><code>sbcl<span class="o">.</span>pkgs<span class="o">.</span>alexandria<span class="o">.</span>overrideLispAttrs <span class="p">(</span>oldAttrs<span class="p">:</span> <span class="k">rec</span> <span class="p">{</span>
<span class="ss">version</span> <span class="o">=</span> <span class="s2">&quot;1.4&quot;</span><span class="p">;</span>
<span class="ss">src</span> <span class="o">=</span> fetchFromGitLab <span class="p">{</span>
<span class="ss">domain</span> <span class="o">=</span> <span class="s2">&quot;gitlab.common-lisp.net&quot;</span><span class="p">;</span>
<span class="ss">owner</span> <span class="o">=</span> <span class="s2">&quot;alexandria&quot;</span><span class="p">;</span>
<span class="ss">repo</span> <span class="o">=</span> <span class="s2">&quot;alexandria&quot;</span><span class="p">;</span>
<span class="ss">rev</span> <span class="o">=</span> <span class="s2">&quot;v</span><span class="si">${</span>version<span class="si">}</span><span class="s2">&quot;</span><span class="p">;</span>
<span class="ss">hash</span> <span class="o">=</span> <span class="s2">&quot;sha256-1Hzxt65dZvgOFIljjjlSGgKYkj+YBLwJCACi5DZsKmQ=&quot;</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">})</span>
</code></pre></div>
<h3 id="lisp-dealing-with-slashy-systems">Dealing with slashy systems</h3>
<p>Slashy (secondary) systems should not exist in their own packages! Instead, they
should be included in the parent package as an extra entry in the <code>systems</code>
argument to the <code>build-asdf-system</code>/<code>buildASDFSystem</code> functions.</p>
<p>The reason is that ASDF searches for a secondary system in the <code>.asd</code> of the
parent package. Thus, having them separate would cause either one of them not to
load cleanly, because one will contains FASLs of itself but not the other, and
vice versa.</p>
<p>To package slashy systems, use <code>overrideLispAttrs</code>, like so:</p>
<div class="highlight"><pre><span></span><code>ecl<span class="o">.</span>pkgs<span class="o">.</span>alexandria<span class="o">.</span>overrideLispAttrs <span class="p">(</span>oldAttrs<span class="p">:</span> <span class="p">{</span>
<span class="ss">systems</span> <span class="o">=</span> oldAttrs<span class="o">.</span>systems <span class="o">++</span> <span class="p">[</span> <span class="s2">&quot;alexandria/tests&quot;</span> <span class="p">];</span>
<span class="ss">lispLibs</span> <span class="o">=</span> oldAttrs<span class="o">.</span>lispLibs <span class="o">++</span> <span class="p">[</span> ecl<span class="o">.</span>pkgs<span class="o">.</span>rt <span class="p">];</span>
<span class="p">})</span>
</code></pre></div>
<p>See the <a href="#lisp-including-external-pkg-in-scope">respective section</a> on using
<code>withOverrides</code> for how to weave it back into <code>ecl.pkgs</code>.</p>
<p>Note that sometimes the slashy systems might not only have more dependencies
than the main one, but create a circular dependency between <code>.asd</code>
files. Unfortunately, in this case an adhoc solution becomes necessary.</p>
<h2 id="lisp-building-wrappers">Building Wrappers</h2>
<p>Wrappers can be built using the <code>withPackages</code> function of Common Lisp
implementations (<code>abcl</code>, <code>ecl</code>, <code>sbcl</code> etc.):</p>
<div class="highlight"><pre><span></span><code>nix-shell -p &#39;sbcl.withPackages (ps: [ ps.alexandria ps.bordeaux-threads ])&#39;
</code></pre></div>
<p>Such a wrapper can then be used like this:</p>
<div class="highlight"><pre><span></span><code>$ sbcl
* (load (sb-ext:posix-getenv &quot;ASDF&quot;))
* (asdf:load-system &#39;alexandria)
* (asdf:load-system &#39;bordeaux-threads)
</code></pre></div>
<h3 id="lisp-loading-asdf">Loading ASDF</h3>
<p>For best results, avoid calling <code>(require 'asdf)</code> When using the
library-generated wrappers.</p>
<p>Use <code>(load (ext:getenv "ASDF"))</code> instead, supplying your implementation's way of
getting an environment variable for <code>ext:getenv</code>. This will load the
(pre-compiled to FASL) Nixpkgs-provided version of ASDF.</p>
<h3 id="lisp-loading-systems">Loading systems</h3>
<p>There, you can use <code>asdf:load-system</code>. This works by setting the right
values for the <code>CL_SOURCE_REGISTRY</code>/<code>ASDF_OUTPUT_TRANSLATIONS</code> environment
variables, so that systems are found in the Nix store and pre-compiled FASLs are
loaded.</p>
<h2 id="lisp-adding-a-new-lisp">Adding a new Lisp</h2>
<p>The function <code>wrapLisp</code> is used to wrap Common Lisp implementations. It adds the
<code>pkgs</code>, <code>withPackages</code>, <code>withOverrides</code> and <code>buildASDFSystem</code> attributes to the
derivation.</p>
<p><code>wrapLisp</code> takes these arguments:</p>
<ul>
<li><code>pkg</code>: the Lisp package</li>
<li><code>faslExt</code>: Implementation-specific extension for FASL files</li>
<li><code>program</code>: The name of executable file in <code>${pkg}/bin/</code> (Default: <code>pkg.pname</code>)</li>
<li><code>flags</code>: A list of flags to always pass to <code>program</code> (Default: <code>[]</code>)</li>
<li><code>asdf</code>: The ASDF version to use (Default: <code>pkgs.asdf_3_3</code>)</li>
<li><code>packageOverrides</code>: Package overrides config (Default: <code>(self: super: {})</code>)</li>
</ul>
<p>This example wraps CLISP:</p>
<div class="highlight"><pre><span></span><code>wrapLisp <span class="p">{</span>
<span class="ss">pkg</span> <span class="o">=</span> clisp<span class="p">;</span>
<span class="ss">faslExt</span> <span class="o">=</span> <span class="s2">&quot;fas&quot;</span><span class="p">;</span>
<span class="ss">flags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;-E&quot;</span> <span class="s2">&quot;UTF8&quot;</span><span class="p">];</span>
<span class="p">}</span>
</code></pre></div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Licenced MIT
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-social">
<a href="https://git.auxolotl.org/auxolotl/docs" target="_blank" rel="noopener" title="Aux Docs Repo" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16.777 0a2.9 2.9 0 1 1-2.529 4.322H12.91a4.266 4.266 0 0 0-4.265 4.195v2.118a7.076 7.076 0 0 1 4.147-1.42l.118-.002h1.338a2.9 2.9 0 0 1 5.43 1.422 2.9 2.9 0 0 1-5.43 1.422H12.91a4.266 4.266 0 0 0-4.265 4.195v2.319A2.9 2.9 0 0 1 7.222 24 2.9 2.9 0 0 1 5.8 18.57V8.589a7.109 7.109 0 0 1 6.991-7.108l.118-.001h1.338A2.9 2.9 0 0 1 16.778 0ZM7.223 19.905a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Zm9.554-10.464a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.39Zm0-7.735a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Z"/></svg>
</a>
<a href="https://forum.aux.computer/" target="_blank" rel="noopener" title="Aux Forum" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12.103 0C18.666 0 24 5.485 24 11.997c0 6.51-5.33 11.99-11.9 11.99L0 24V11.79C0 5.28 5.532 0 12.103 0zm.116 4.563a7.395 7.395 0 0 0-6.337 3.57 7.247 7.247 0 0 0-.148 7.22L4.4 19.61l4.794-1.074a7.424 7.424 0 0 0 8.136-1.39 7.256 7.256 0 0 0 1.737-7.997 7.375 7.375 0 0 0-6.84-4.585h-.008z"/></svg>
</a>
<a href="https://wiki.auxolotl.org/" target="_blank" rel="noopener" title="Aux Wiki" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17.801 13.557c.148.098.288.202.417.313 1.854 1.6 3.127 4.656 2.582 7.311-1.091-.255-5.747-1.055-7.638-3.383-.91-1.12-1.366-2.081-1.569-2.885a5.65 5.65 0 0 0 .034-.219c.089.198.197.35.313.466.24.24.521.335.766.372.304.046.594-.006.806-.068l.001.001c.05-.015.433-.116.86-.342.325-.173 2.008-.931 3.428-1.566Zm-7.384 1.435C9.156 16.597 6.6 18.939.614 18.417c.219-1.492 1.31-3.019 2.51-4.11.379-.345.906-.692 1.506-1.009.286.168.598.332.939.486 2.689 1.221 3.903 1.001 4.89.573a1.3 1.3 0 0 0 .054-.025 6.156 6.156 0 0 0-.096.66Zm4.152-.462c.38-.341.877-.916 1.383-1.559-.389-.15-.866-.371-1.319-.591-.598-.29-1.305-.283-2.073-.315a4.685 4.685 0 0 1-.804-.103c.014-.123.027-.246.038-.369.062.104.673.057.871.057.354 0 1.621.034 3.074-.574 1.452-.608 2.55-1.706 3.022-3.225.474-1.52.22-3.091-.168-3.952-.169.709-1.453 2.381-1.926 2.871-.473.489-2.381 2.296-2.972 2.921-.7.74-.688.793-1.332 1.302-.202.19-.499.402-.563.53.027-.338.039-.675.027-.997a7.653 7.653 0 0 0-.032-.523c.322-.059.567-.522.567-.861 0-.224-.106-.247-.271-.229.075-.894.382-3.923 1.254-4.281.218.109.831.068.649-.295-.182-.364-.825-.074-1.081.266-.28.374-.956 2.046-.92 4.324-.113.014-.174.033-.322.033-.171 0-.321-.04-.433-.05.034-2.275-.714-3.772-.84-4.169-.12-.375-.491-.596-.781-.596-.146 0-.272.056-.333.179-.182.363.459.417.677.308.706.321 1.156 3.519 1.254 4.277-.125-.006-.199.035-.199.233 0 .311.17.756.452.843a.442.442 0 0 0-.007.03s-.287.99-.413 2.189a4.665 4.665 0 0 1-.718-.225c-.714-.286-1.355-.583-2.019-.566-.664.018-1.366.023-1.804-.036-.438-.058-.649-.15-.649-.15s-.234.365.257 1.075c.42.607 1.055 1.047 1.644 1.18.589.134 1.972.18 2.785-.377.16-.109.317-.228.459-.34a8.717 8.717 0 0 0-.013.626c-.289.753-.571 1.993-.268 3.338 0-.001.701-.842.787-2.958.006-.144.009-.271.01-.383.052-.248.103-.518.148-.799.072.135.151.277.234.413.511.842 1.791 1.37 2.383 1.49.091.019.187.032.285.038Zm-1.12.745c-.188.055-.445.1-.713.059-.21-.031-.45-.11-.655-.316-.169-.168-.312-.419-.401-.789a9.837 9.837 0 0 0 .039-.82l.049-.243c.563.855 1.865 1.398 2.476 1.522.036.008.072.014.109.02l-.013.009c-.579.415-.76.503-.891.558Zm6.333-2.818c-.257.114-4.111 1.822-5.246 2.363.98-.775 3.017-3.59 3.699-4.774 1.062.661 1.468 1.109 1.623 1.441.101.217.09.38.096.515a.57.57 0 0 1-.172.455Zm-9.213 1.62a1.606 1.606 0 0 1-.19.096c-.954.414-2.126.61-4.728-.571-2.023-.918-3.024-2.157-3.371-2.666.476.161 1.471.473 2.157.524.282.021.703.068 1.167.125.021.209.109.486.345.829l.001.001c.451.651 1.134 1.119 1.765 1.262.622.141 2.083.182 2.942-.407a3.12 3.12 0 0 0 .132-.093l.001.179a6.052 6.052 0 0 0-.221.721Zm5.512-1.271a17.49 17.49 0 0 1-1.326-.589c.437.042 1.054.083 1.692.108-.121.162-.244.323-.366.481Zm.932-1.26c-.12.17-.245.343-.373.517-.241.018-.478.03-.709.038a29.05 29.05 0 0 1-.741-.048c.608-.065 1.228-.252 1.823-.507Zm.22-.315c-.809.382-1.679.648-2.507.648-.472 0-.833.018-1.139.039v.001c-.324-.031-.665-.039-1.019-.054a3.555 3.555 0 0 1-.152-.009c.102-.002.192-.006.249-.006.363 0 1.662.034 3.151-.589 1.508-.632 2.645-1.773 3.136-3.351.37-1.186.31-2.402.086-3.312.458-.336.86-.651 1.147-.91.501-.451.743-.733.848-.869.199.206.714.864.685 2.138-.036 1.611-.606 3.187-1.501 4.154a9.099 9.099 0 0 1-1.321 1.132 11.978 11.978 0 0 0-.644-.422l-.089-.055-.051.091c-.184.332-.5.825-.879 1.374ZM4.763 5.817c-.157 1.144.113 2.323.652 3.099.539.776 2.088 2.29 3.614 2.505.991.14 2.055.134 2.055.134s-.593-.576-1.114-1.66c-.521-1.085-.948-2.104-1.734-2.786-.785-.681-1.601-1.416-2.045-1.945-.444-.53-.59-.86-.59-.86s-.656.175-.838 1.513Zm14.301 4.549a9.162 9.162 0 0 0 1.3-1.12c.326-.352.611-.782.845-1.265 1.315.145 2.399.371 2.791.434 0 0-.679 1.971-3.945 3.022l-.016-.035c-.121-.26-.385-.594-.975-1.036Zm-11.634.859a8.537 8.537 0 0 1-.598-.224c-1.657-.693-2.91-1.944-3.449-3.678-.498-1.601-.292-3.251.091-4.269.225.544.758 1.34 1.262 2.01a3.58 3.58 0 0 0-.172.726c-.163 1.197.123 2.428.687 3.24.416.599 1.417 1.62 2.555 2.193-.128.002-.253.003-.376.002Zm-1.758-.077c-.958-.341-1.901-.787-2.697-1.368C-.07 7.559 0 6.827 0 6.827s1.558-.005 3.088.179c.03.126.065.
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../../..", "features": ["content.tooltips", "search.highlight", "navigation.tabs", "navigation.indexes", "navigation.prune"], "search": "../../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../../assets/javascripts/bundle.fe8b6f2b.min.js"></script>
</body>
</html>