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

3284 lines
71 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/lua.section/">
<link rel="prev" href="../lisp.section/">
<link rel="next" href="../maven.section/">
<link rel="icon" href="../../../assets/aux-logo.svg">
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.29">
<title>Lua - 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="Lua {#lua} - 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/lua.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/lua.section/" >
<meta name="twitter:card" content="summary_large_image" >
<meta name="twitter:title" content="Lua {#lua} - 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/lua.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="#lua" 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">
Lua
</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">
<a href="../lisp.section/" class="md-nav__link">
<span class="md-ellipsis">
lisp-modules
</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">
Lua
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Lua
</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="#lua-userguide" class="md-nav__link">
<span class="md-ellipsis">
Using Lua
</span>
</a>
<nav class="md-nav" aria-label="Using Lua">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#lua-overview" class="md-nav__link">
<span class="md-ellipsis">
Overview of Lua
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#installing-lua-and-packages" class="md-nav__link">
<span class="md-ellipsis">
Installing Lua and packages
</span>
</a>
<nav class="md-nav" aria-label="Installing Lua and packages">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#lua-environment-defined-in-separate-.nix-file" class="md-nav__link">
<span class="md-ellipsis">
Lua environment defined in separate .nix file
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lua-environment-defined-in-.confignixpkgsconfig.nix" class="md-nav__link">
<span class="md-ellipsis">
Lua environment defined in ~/.config/nixpkgs/config.nix
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lua-environment-defined-in-etcnixosconfiguration.nix" class="md-nav__link">
<span class="md-ellipsis">
Lua environment defined in /etc/nixos/configuration.nix
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#how-to-override-a-lua-package-using-overlays" class="md-nav__link">
<span class="md-ellipsis">
How to override a Lua package using overlays?
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#temporary-lua-environment-with-nix-shell" class="md-nav__link">
<span class="md-ellipsis">
Temporary Lua environment with nix-shell
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lua-developing" class="md-nav__link">
<span class="md-ellipsis">
Developing with lua
</span>
</a>
<nav class="md-nav" aria-label="Developing with lua">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#packaging-a-library-on-luarocks" class="md-nav__link">
<span class="md-ellipsis">
Packaging a library on luarocks
</span>
</a>
<nav class="md-nav" aria-label="Packaging a library on luarocks">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#packaging-a-library-manually" class="md-nav__link">
<span class="md-ellipsis">
Packaging a library manually
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lua-reference" class="md-nav__link">
<span class="md-ellipsis">
Lua Reference
</span>
</a>
<nav class="md-nav" aria-label="Lua Reference">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#lua-interpreters" class="md-nav__link">
<span class="md-ellipsis">
Lua interpreters
</span>
</a>
<nav class="md-nav" aria-label="Lua interpreters">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#attributes-on-lua-interpreters-packages" class="md-nav__link">
<span class="md-ellipsis">
Attributes on lua interpreters packages
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#buildluarockspackage-function" class="md-nav__link">
<span class="md-ellipsis">
buildLuarocksPackage function
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#buildluaapplication-function" class="md-nav__link">
<span class="md-ellipsis">
buildLuaApplication function
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lua.withpackages-function" class="md-nav__link">
<span class="md-ellipsis">
lua.withPackages function
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lua-contributing" class="md-nav__link">
<span class="md-ellipsis">
Lua Contributing guidelines
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</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="#lua-userguide" class="md-nav__link">
<span class="md-ellipsis">
Using Lua
</span>
</a>
<nav class="md-nav" aria-label="Using Lua">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#lua-overview" class="md-nav__link">
<span class="md-ellipsis">
Overview of Lua
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#installing-lua-and-packages" class="md-nav__link">
<span class="md-ellipsis">
Installing Lua and packages
</span>
</a>
<nav class="md-nav" aria-label="Installing Lua and packages">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#lua-environment-defined-in-separate-.nix-file" class="md-nav__link">
<span class="md-ellipsis">
Lua environment defined in separate .nix file
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lua-environment-defined-in-.confignixpkgsconfig.nix" class="md-nav__link">
<span class="md-ellipsis">
Lua environment defined in ~/.config/nixpkgs/config.nix
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lua-environment-defined-in-etcnixosconfiguration.nix" class="md-nav__link">
<span class="md-ellipsis">
Lua environment defined in /etc/nixos/configuration.nix
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#how-to-override-a-lua-package-using-overlays" class="md-nav__link">
<span class="md-ellipsis">
How to override a Lua package using overlays?
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#temporary-lua-environment-with-nix-shell" class="md-nav__link">
<span class="md-ellipsis">
Temporary Lua environment with nix-shell
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lua-developing" class="md-nav__link">
<span class="md-ellipsis">
Developing with lua
</span>
</a>
<nav class="md-nav" aria-label="Developing with lua">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#packaging-a-library-on-luarocks" class="md-nav__link">
<span class="md-ellipsis">
Packaging a library on luarocks
</span>
</a>
<nav class="md-nav" aria-label="Packaging a library on luarocks">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#packaging-a-library-manually" class="md-nav__link">
<span class="md-ellipsis">
Packaging a library manually
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lua-reference" class="md-nav__link">
<span class="md-ellipsis">
Lua Reference
</span>
</a>
<nav class="md-nav" aria-label="Lua Reference">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#lua-interpreters" class="md-nav__link">
<span class="md-ellipsis">
Lua interpreters
</span>
</a>
<nav class="md-nav" aria-label="Lua interpreters">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#attributes-on-lua-interpreters-packages" class="md-nav__link">
<span class="md-ellipsis">
Attributes on lua interpreters packages
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#buildluarockspackage-function" class="md-nav__link">
<span class="md-ellipsis">
buildLuarocksPackage function
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#buildluaapplication-function" class="md-nav__link">
<span class="md-ellipsis">
buildLuaApplication function
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lua.withpackages-function" class="md-nav__link">
<span class="md-ellipsis">
lua.withPackages function
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lua-contributing" class="md-nav__link">
<span class="md-ellipsis">
Lua Contributing guidelines
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="lua">Lua</h1>
<h2 id="lua-userguide">Using Lua</h2>
<h3 id="lua-overview">Overview of Lua</h3>
<p>Several versions of the Lua interpreter are available: luajit, lua 5.1, 5.2, 5.3.
The attribute <code>lua</code> refers to the default interpreter, it is also possible to refer to specific versions, e.g. <code>lua5_2</code> refers to Lua 5.2.</p>
<p>Lua libraries are in separate sets, with one set per interpreter version.</p>
<p>The interpreters have several common attributes. One of these attributes is
<code>pkgs</code>, which is a package set of Lua libraries for this specific
interpreter. E.g., the <code>busted</code> package corresponding to the default interpreter
is <code>lua.pkgs.busted</code>, and the lua 5.2 version is <code>lua5_2.pkgs.busted</code>.
The main package set contains aliases to these package sets, e.g.
<code>luaPackages</code> refers to <code>lua5_1.pkgs</code> and <code>lua52Packages</code> to
<code>lua5_2.pkgs</code>.</p>
<p>Note that nixpkgs patches the non-luajit interpreters to avoid referring to
<code>/usr</code> and have <code>;;</code> (a <a href="https://www.lua.org/manual/5.1/manual.html#pdf-package.path">placeholder</a> replaced with the default LUA_PATH) work correctly.</p>
<h3 id="installing-lua-and-packages">Installing Lua and packages</h3>
<h4 id="lua-environment-defined-in-separate-.nix-file">Lua environment defined in separate <code>.nix</code> file</h4>
<p>Create a file, e.g. <code>build.nix</code>, with the following expression</p>
<div class="highlight"><pre><span></span><code><span class="k">with</span> <span class="nb">import</span> <span class="l">&lt;nixpkgs&gt;</span> <span class="p">{};</span>
lua5_2<span class="o">.</span>withPackages <span class="p">(</span>ps<span class="p">:</span> <span class="k">with</span> ps<span class="p">;</span> <span class="p">[</span> busted luafilesystem <span class="p">])</span>
</code></pre></div>
<p>and install it in your profile with</p>
<p><div class="highlight"><pre><span></span><code>nix-env<span class="w"> </span>-if<span class="w"> </span>build.nix
</code></pre></div>
Now you can use the Lua interpreter, as well as the extra packages (<code>busted</code>,
<code>luafilesystem</code>) that you added to the environment.</p>
<h4 id="lua-environment-defined-in-.confignixpkgsconfig.nix">Lua environment defined in <code>~/.config/nixpkgs/config.nix</code></h4>
<p>If you prefer to, you could also add the environment as a package override to the Nixpkgs set, e.g.
using <code>config.nix</code>,</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span> <span class="c1"># ...</span>
<span class="ss">packageOverrides</span> <span class="o">=</span> pkgs<span class="p">:</span> <span class="k">with</span> pkgs<span class="p">;</span> <span class="p">{</span>
<span class="ss">myLuaEnv</span> <span class="o">=</span> lua5_2<span class="o">.</span>withPackages <span class="p">(</span>ps<span class="p">:</span> <span class="k">with</span> ps<span class="p">;</span> <span class="p">[</span> busted luafilesystem <span class="p">]);</span>
<span class="p">};</span>
<span class="p">}</span>
</code></pre></div>
<p>and install it in your profile with</p>
<p><div class="highlight"><pre><span></span><code>nix-env<span class="w"> </span>-iA<span class="w"> </span>nixpkgs.myLuaEnv
</code></pre></div>
The environment is installed by referring to the attribute, and considering
the <code>nixpkgs</code> channel was used.</p>
<h4 id="lua-environment-defined-in-etcnixosconfiguration.nix">Lua environment defined in <code>/etc/nixos/configuration.nix</code></h4>
<p>For the sake of completeness, here's another example how to install the environment system-wide.</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span> <span class="c1"># ...</span>
environment<span class="o">.</span><span class="ss">systemPackages</span> <span class="o">=</span> <span class="k">with</span> pkgs<span class="p">;</span> <span class="p">[</span>
<span class="p">(</span>lua<span class="o">.</span>withPackages<span class="p">(</span>ps<span class="p">:</span> <span class="k">with</span> ps<span class="p">;</span> <span class="p">[</span> busted luafilesystem <span class="p">]))</span>
<span class="p">];</span>
<span class="p">}</span>
</code></pre></div>
<h3 id="how-to-override-a-lua-package-using-overlays">How to override a Lua package using overlays?</h3>
<p>Use the following overlay template:</p>
<div class="highlight"><pre><span></span><code>final<span class="p">:</span> prev<span class="p">:</span>
<span class="p">{</span>
<span class="ss">lua</span> <span class="o">=</span> prev<span class="o">.</span>lua<span class="o">.</span>override <span class="p">{</span>
<span class="ss">packageOverrides</span> <span class="o">=</span> luaself<span class="p">:</span> luaprev<span class="p">:</span> <span class="p">{</span>
<span class="ss">luarocks-nix</span> <span class="o">=</span> luaprev<span class="o">.</span>luarocks-nix<span class="o">.</span>overrideAttrs<span class="p">(</span>oa<span class="p">:</span> <span class="p">{</span>
<span class="ss">pname</span> <span class="o">=</span> <span class="s2">&quot;luarocks-nix&quot;</span><span class="p">;</span>
<span class="ss">src</span> <span class="o">=</span> <span class="l">/home/my_luarocks/repository</span><span class="p">;</span>
<span class="p">});</span>
<span class="p">};</span>
<span class="p">};</span>
<span class="ss">luaPackages</span> <span class="o">=</span> lua<span class="o">.</span>pkgs<span class="p">;</span>
<span class="p">}</span>
</code></pre></div>
<h3 id="temporary-lua-environment-with-nix-shell">Temporary Lua environment with <code>nix-shell</code></h3>
<p>There are two methods for loading a shell with Lua packages. The first and recommended method
is to create an environment with <code>lua.buildEnv</code> or <code>lua.withPackages</code> and load that. E.g.</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>nix-shell<span class="w"> </span>-p<span class="w"> </span><span class="s1">&#39;lua.withPackages(ps: with ps; [ busted luafilesystem ])&#39;</span>
</code></pre></div>
<p>opens a shell from which you can launch the interpreter</p>
<div class="highlight"><pre><span></span><code><span class="o">[</span>nix-shell:~<span class="o">]</span><span class="w"> </span>lua
</code></pre></div>
<p>The other method, which is not recommended, does not create an environment and requires you to list the packages directly,</p>
<p><div class="highlight"><pre><span></span><code>$<span class="w"> </span>nix-shell<span class="w"> </span>-p<span class="w"> </span>lua.pkgs.busted<span class="w"> </span>lua.pkgs.luafilesystem
</code></pre></div>
Again, it is possible to launch the interpreter from the shell.
The Lua interpreter has the attribute <code>pkgs</code> which contains all Lua libraries for that specific interpreter.</p>
<h2 id="lua-developing">Developing with lua</h2>
<p>Now that you know how to get a working Lua environment with Nix, it is time
to go forward and start actually developing with Lua. There are two ways to
package lua software, either it is on luarocks and most of it can be taken care
of by the luarocks2nix converter or the packaging has to be done manually.
Let's present the luarocks way first and the manual one in a second time.</p>
<h3 id="packaging-a-library-on-luarocks">Packaging a library on luarocks</h3>
<p><a href="https://luarocks.org/">Luarocks.org</a> is the main repository of lua packages.
The site proposes two types of packages, the <code>rockspec</code> and the <code>src.rock</code>
(equivalent of a <a href="https://github.com/luarocks/luarocks/wiki/Rockspec-format">rockspec</a> but with the source).</p>
<p>Luarocks-based packages are generated in <a href="https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/lua-modules/generated-packages.nix">pkgs/development/lua-modules/generated-packages.nix</a> from
the whitelist maintainers/scripts/luarocks-packages.csv and updated by running
the package <code>luarocks-packages-updater</code>:</p>
<div class="highlight"><pre><span></span><code>nix-shell<span class="w"> </span>-p<span class="w"> </span>luarocks-packages-updater<span class="w"> </span>--run<span class="w"> </span>luarocks-packages-updater
</code></pre></div>
<p><a href="https://github.com/nix-community/luarocks">luarocks2nix</a> is a tool capable of generating nix derivations from both rockspec and src.rock (and favors the src.rock).
The automation only goes so far though and some packages need to be customized.
These customizations go in <a href="https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/lua-modules/overrides.nix">pkgs/development/lua-modules/overrides.nix</a>.
For instance if the rockspec defines <code>external_dependencies</code>, these need to be manually added to the overrides.nix.</p>
<p>You can try converting luarocks packages to nix packages with the command <code>nix-shell -p luarocks-nix</code> and then <code>luarocks nix PKG_NAME</code>.</p>
<h4 id="packaging-a-library-manually">Packaging a library manually</h4>
<p>You can develop your package as you usually would, just don't forget to wrap it
within a <code>toLuaModule</code> call, for instance</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="ss">mynewlib</span> <span class="o">=</span> toLuaModule <span class="p">(</span> stdenv<span class="o">.</span>mkDerivation <span class="p">{</span> <span class="cm">/* ... */</span> <span class="p">});</span>
<span class="p">}</span>
</code></pre></div>
<p>There is also the <code>buildLuaPackage</code> function that can be used when lua modules
are not packaged for luarocks. You can see a few examples at <code>pkgs/top-level/lua-packages.nix</code>.</p>
<h2 id="lua-reference">Lua Reference</h2>
<h3 id="lua-interpreters">Lua interpreters</h3>
<p>Versions 5.1, 5.2, 5.3 and 5.4 of the lua interpreter are available as
respectively <code>lua5_1</code>, <code>lua5_2</code>, <code>lua5_3</code> and <code>lua5_4</code>. Luajit is available too.
The Nix expressions for the interpreters can be found in <code>pkgs/development/interpreters/lua-5</code>.</p>
<h4 id="attributes-on-lua-interpreters-packages">Attributes on lua interpreters packages</h4>
<p>Each interpreter has the following attributes:</p>
<ul>
<li><code>interpreter</code>. Alias for <code>${pkgs.lua}/bin/lua</code>.</li>
<li><code>buildEnv</code>. Function to build lua interpreter environments with extra packages bundled together. See section <em>lua.buildEnv function</em> for usage and documentation.</li>
<li><code>withPackages</code>. Simpler interface to <code>buildEnv</code>.</li>
<li><code>pkgs</code>. Set of Lua packages for that specific interpreter. The package set can be modified by overriding the interpreter and passing <code>packageOverrides</code>.</li>
</ul>
<h4 id="buildluarockspackage-function"><code>buildLuarocksPackage</code> function</h4>
<p>The <code>buildLuarocksPackage</code> function is implemented in <code>pkgs/development/interpreters/lua-5/build-luarocks-package.nix</code>
The following is an example:
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="ss">luaposix</span> <span class="o">=</span> buildLuarocksPackage <span class="p">{</span>
<span class="ss">pname</span> <span class="o">=</span> <span class="s2">&quot;luaposix&quot;</span><span class="p">;</span>
<span class="ss">version</span> <span class="o">=</span> <span class="s2">&quot;34.0.4-1&quot;</span><span class="p">;</span>
<span class="ss">src</span> <span class="o">=</span> fetchurl <span class="p">{</span>
<span class="ss">url</span> <span class="o">=</span> <span class="s2">&quot;https://raw.githubusercontent.com/rocks-moonscript-org/moonrocks-mirror/master/luaposix-34.0.4-1.src.rock&quot;</span><span class="p">;</span>
<span class="ss">hash</span> <span class="o">=</span> <span class="s2">&quot;sha256-4mLJG8n4m6y4Fqd0meUDfsOb9RHSR0qa/KD5KCwrNXs=&quot;</span><span class="p">;</span>
<span class="p">};</span>
<span class="ss">disabled</span> <span class="o">=</span> <span class="p">(</span>luaOlder <span class="s2">&quot;5.1&quot;</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span>luaAtLeast <span class="s2">&quot;5.4&quot;</span><span class="p">);</span>
<span class="ss">propagatedBuildInputs</span> <span class="o">=</span> <span class="p">[</span> bit32 lua std_normalize <span class="p">];</span>
<span class="ss">meta</span> <span class="o">=</span> <span class="p">{</span>
<span class="ss">homepage</span> <span class="o">=</span> <span class="s2">&quot;https://github.com/luaposix/luaposix/&quot;</span><span class="p">;</span>
<span class="ss">description</span> <span class="o">=</span> <span class="s2">&quot;Lua bindings for POSIX&quot;</span><span class="p">;</span>
<span class="ss">maintainers</span> <span class="o">=</span> <span class="k">with</span> lib<span class="o">.</span>maintainers<span class="p">;</span> <span class="p">[</span> vyp lblasc <span class="p">];</span>
license<span class="o">.</span><span class="ss">fullName</span> <span class="o">=</span> <span class="s2">&quot;MIT/X11&quot;</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">};</span>
<span class="p">}</span>
</code></pre></div></p>
<p>The <code>buildLuarocksPackage</code> delegates most tasks to luarocks:</p>
<ul>
<li>it adds <code>luarocks</code> as an unpacker for <code>src.rock</code> files (zip files really).</li>
<li><code>configurePhase</code> writes a temporary luarocks configuration file which location
is exported via the environment variable <code>LUAROCKS_CONFIG</code>.</li>
<li>the <code>buildPhase</code> does nothing.</li>
<li><code>installPhase</code> calls <code>luarocks make --deps-mode=none --tree $out</code> to build and
install the package</li>
<li>In the <code>postFixup</code> phase, the <code>wrapLuaPrograms</code> bash function is called to
wrap all programs in the <code>$out/bin/*</code> directory to include <code>$PATH</code>
environment variable and add dependent libraries to script's <code>LUA_PATH</code> and
<code>LUA_CPATH</code>.</li>
</ul>
<p>It accepts as arguments:</p>
<ul>
<li>'luarocksConfig': a nix value that directly maps to the luarocks config used during
the installation</li>
</ul>
<p>By default <code>meta.platforms</code> is set to the same value as the interpreter unless overridden otherwise.</p>
<h4 id="buildluaapplication-function"><code>buildLuaApplication</code> function</h4>
<p>The <code>buildLuaApplication</code> function is practically the same as <code>buildLuaPackage</code>.
The difference is that <code>buildLuaPackage</code> by default prefixes the names of the packages with the version of the interpreter.
Because with an application we're not interested in multiple version the prefix is dropped.</p>
<h4 id="lua.withpackages-function">lua.withPackages function</h4>
<p>The <code>lua.withPackages</code> takes a function as an argument that is passed the set of lua packages and returns the list of packages to be included in the environment.
Using the <code>withPackages</code> function, the previous example for the luafilesystem environment can be written like this:</p>
<div class="highlight"><pre><span></span><code>lua<span class="o">.</span>withPackages <span class="p">(</span>ps<span class="p">:</span> <span class="p">[</span>ps<span class="o">.</span>luafilesystem<span class="p">])</span>
</code></pre></div>
<p><code>withPackages</code> passes the correct package set for the specific interpreter version as an argument to the function. In the above example, <code>ps</code> equals <code>luaPackages</code>.
But you can also easily switch to using <code>lua5_1</code>:</p>
<div class="highlight"><pre><span></span><code>lua5_1<span class="o">.</span>withPackages <span class="p">(</span>ps<span class="p">:</span> <span class="p">[</span>ps<span class="o">.</span>lua<span class="p">])</span>
</code></pre></div>
<p>Now, <code>ps</code> is set to <code>lua5_1.pkgs</code>, matching the version of the interpreter.</p>
<h3 id="lua-contributing">Lua Contributing guidelines</h3>
<p>Following rules should be respected:</p>
<ul>
<li>Commit names of Lua libraries should reflect that they are Lua libraries, so write for example <code>luaPackages.luafilesystem: 1.11 -&gt; 1.12</code>.</li>
</ul>
</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>