Initial Commit
This commit is contained in:
77
tmpls/about.html
Normal file
77
tmpls/about.html
Normal file
@@ -0,0 +1,77 @@
|
||||
#macro("content"):
|
||||
<nav aria-label="breadcrumb">
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li>About</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<h1>About LURE</h1>
|
||||
|
||||
<section class="container">
|
||||
<hgroup><h2>Why does LURE exist?</h2></hgroup>
|
||||
<p>
|
||||
LURE was created because packaging software for multiple Linux distros can be difficult and
|
||||
error-prone, and installing those packages can be a nightmare for users unless they're available
|
||||
in their distro's official repositories.
|
||||
</p>
|
||||
<p>
|
||||
Take Discord for example. It only provides a deb file and a tar.gz file, and it's not available
|
||||
in most official repositories. That means users of RPM distros have to manually install discord
|
||||
using the tarball or rely on community-maintained repositories that don't always have
|
||||
up-to-date versions of Discord. That's also made worse by the fact that Discord refuses to run
|
||||
if there's a newer version available.
|
||||
</p>
|
||||
<p>
|
||||
LURE fixes that by always providing the most up to date version of Discord, which means all that
|
||||
RPM users have to do is run <code>lure in discord</code> and LURE will get the tarball and
|
||||
automatically build an RPM package out of it for them. When there's a newer version of Discord
|
||||
available, users can just run <code>lure up</code> and LURE will automatically download the updated
|
||||
version of Discord and install it. That also helps users of deb distros because it means they don't
|
||||
have to manually download packages for software like Discord.
|
||||
</p>
|
||||
</section>
|
||||
<section class="container">
|
||||
<hgroup><h2>How does LURE work?</h2></hgroup>
|
||||
<p>
|
||||
Similar to Arch Linux's AUR, LURE has a repository of shell scripts that tell it how to build a
|
||||
package. When you run a LURE command, it updates its repository and interprets the shell script
|
||||
for the package you want to install using its built-in bash implementation. Then, it uses the
|
||||
code inside the script to build a file structure to be included in the final package. It detects
|
||||
which distro you're running, resolves dependencies, detects which package manager you have and
|
||||
which package format it uses, builds metadata for the package from the information in the shell
|
||||
script, builds the final package, and then runs the install command for your package manager to
|
||||
install it.
|
||||
</p>
|
||||
</section>
|
||||
<section class="container">
|
||||
<hgroup><h2>How does LURE keep its packages up to date?</h2></hgroup>
|
||||
<p>
|
||||
LURE can automatically update its packages using a bot called
|
||||
<a href="https://gitea.elara.ws/lure/lure-updater">lure-updater</a>. It accepts plugins that
|
||||
detect when software is updated upstream and updates the LURE package accordingly. The plugins
|
||||
that are currently running in my instance of the bot can be found in the
|
||||
<a href="https://gitea.elara.ws/lure/updater-plugins">updater-plugins</a> repo. The
|
||||
<code>discord-bin</code> package, for example, checks Discord's API every hour to see if they've
|
||||
released an updated version, and if they have, it pushes an update to LURE's repo.
|
||||
</p>
|
||||
</section>
|
||||
<section class="container">
|
||||
<hgroup><h2>How do I add my own package to LURE?</h2></hgroup>
|
||||
<p>
|
||||
LURE provides <a href="https://github.com/lure-sh/lure/blob/master/docs/packages">comprehensive documentation</a>
|
||||
for packagers. If you need help with anything, feel free to ask on LURE's <a href="https://reddit.com/r/linux_user_repository">subreddit</a>.
|
||||
If you find a bug or would like a feature to be added, please open an issue on LURE's git repo.
|
||||
</p>
|
||||
</section>
|
||||
<section class="container">
|
||||
<hgroup><h2>Can I use and modify LURE's icons?</h2></hgroup>
|
||||
<p>
|
||||
LURE's icons are available on the <a href="/icons">icons page</a> of this site. They're licensed
|
||||
under CC-BY-NC-SA 4.0, which means you're free to share, modify, and use the icons for non-commercial
|
||||
purposes as long as you give appropriate credit and indicate any changes made to the original icons.
|
||||
</p>
|
||||
</section>
|
||||
#!macro
|
||||
|
||||
#include("base.html", title = "About", desc = "About the Linux User Repository")
|
||||
35
tmpls/base.html
Normal file
35
tmpls/base.html
Normal file
@@ -0,0 +1,35 @@
|
||||
<!DOCTYPE html>
|
||||
<html data-theme="dark">
|
||||
<head>
|
||||
<title>#(title) | LURE Web</title>
|
||||
<meta name="description" content='#(desc | title + " on LURE Web")' />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=0.8" />
|
||||
<link rel="stylesheet" href="/static/css/pico.min.css">
|
||||
<link rel="stylesheet" href="/static/css/lure.css">
|
||||
<link rel="icon" href="/static/icons/favicon.ico">
|
||||
</head>
|
||||
<body>
|
||||
<nav>
|
||||
<ul>
|
||||
<li><a href="/"><img src="/static/icons/lure-text-white.svg" alt="LURE Logo" width="85"></a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><a href="/" class='#(title == "Home" ? "active" : "")'>Home</a></li>
|
||||
<li><a href="/pkgs" class='#(title == "Package Search" ? "active" : "")'>Packages</a></li>
|
||||
<li><a href="/about" class='#(title == "About" ? "active" : "")'>About</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<main class="container">
|
||||
#macro("content")
|
||||
</main>
|
||||
|
||||
|
||||
<footer class="container">
|
||||
<div class="headings marginless">
|
||||
<h2>Copyright © #(now().Year()) LURE Web Contributors</h2>
|
||||
</div>
|
||||
<a href="https://github.com/lure-sh/lure-web" target="_blank">Source Code</a>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
25
tmpls/error.html
Normal file
25
tmpls/error.html
Normal file
@@ -0,0 +1,25 @@
|
||||
#macro("content"):
|
||||
<nav aria-label="breadcrumb">
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li>Error</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<h1>Error</h1>
|
||||
<br><br>
|
||||
|
||||
|
||||
<section class="container centered">
|
||||
<div>
|
||||
<hgroup>
|
||||
<h1>Something Went Wrong!</h1>
|
||||
<h2>Error #(error.StatusCode): #(error.StatusText())</h2>
|
||||
</hgroup>
|
||||
<pre><code>#(error.Msg)</code></pre>
|
||||
<a href="/" role="button">Go Back Home</a>
|
||||
</div>
|
||||
</section>
|
||||
#!macro
|
||||
|
||||
#include("base.html", title = sprintf("Error %d", error.StatusCode), desc = sprintf("Error %d: %s", error.StatusCode, error.StatusText()))
|
||||
32
tmpls/home.html
Normal file
32
tmpls/home.html
Normal file
@@ -0,0 +1,32 @@
|
||||
#macro("content"):
|
||||
<section class="container centered">
|
||||
<img src="/static/icons/lure-no-text.svg" alt="LURE logo without text" width="200">
|
||||
<hgroup>
|
||||
<h1>LURE</h1>
|
||||
<h2>The community repository missing from your Linux distro</h2>
|
||||
</hgroup>
|
||||
</section>
|
||||
|
||||
<section class="container">
|
||||
<hgroup>
|
||||
<h1>What does LURE do?</h1>
|
||||
<h2>LURE allows you to:</h2>
|
||||
</hgroup>
|
||||
<ul>
|
||||
<li>Access a wide range of software beyond what's available in official repositories</li>
|
||||
<li>Get new versions of software as they come out, before official repositories ship them</li>
|
||||
<li>Install unofficial software without having to deal with a separate package manager</li>
|
||||
<li>Release software for Linux without having to package it for different distributions</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="container">
|
||||
<hgroup>
|
||||
<h1>Install LURE</h1>
|
||||
<h2>Paste this into your Linux terminal and the install script will set everything up for you</h2>
|
||||
</hgroup>
|
||||
<pre><code>curl -fsSL lure.sh/install | bash</code></pre>
|
||||
<p>LURE is also available on the AUR as <code>linux-user-repository-bin</code> and distro packages are provided at the <a href="https://gitea.elara.ws/lure/lure/releases/latest">latest Gitea release</a></p>
|
||||
</section>
|
||||
#!macro
|
||||
|
||||
#include("base.html", title = "Home", desc = "The community repository missing from your Linux distro")
|
||||
39
tmpls/icons.html
Normal file
39
tmpls/icons.html
Normal file
@@ -0,0 +1,39 @@
|
||||
#macro("content"):
|
||||
<nav aria-label="breadcrumb">
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li>Icons</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<h1>Icons</h1>
|
||||
|
||||
<section class="container">
|
||||
<div class="grid">
|
||||
<div>
|
||||
<article class="centered">
|
||||
<header><strong>Without Text</strong></header>
|
||||
<img class="icon" src="/static/icons/lure-no-text.svg" alt="LURE icon without text">
|
||||
<footer><a href="/static/icons/lure-no-text.svg" download>Download</a></footer>
|
||||
</article>
|
||||
</div>
|
||||
<div>
|
||||
<article class="centered">
|
||||
<header><strong>With Text</strong></header>
|
||||
<img class="icon" src="/static/icons/lure-text.svg" alt="LURE icon with text">
|
||||
<footer><a href="/static/icons/lure-text.svg" download>Download</a></footer>
|
||||
</article>
|
||||
</div>
|
||||
<div>
|
||||
<article class="centered">
|
||||
<header><strong>White With Text</strong></header>
|
||||
<img class="icon" src="/static/icons/lure-text-white.svg" alt="LURE icon with text">
|
||||
<footer><a href="/static/icons/lure-text-white.svg" download>Download</a></footer>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
<strong>Note: The icons on this page are licensed under CC-BY-NC-SA 4.0 unless otherwise specified</strong>
|
||||
</section>
|
||||
#!macro
|
||||
|
||||
#include("base.html", title = "Icons", desc = "Linux User Repository icons and logos")
|
||||
142
tmpls/pkg.html
Normal file
142
tmpls/pkg.html
Normal file
@@ -0,0 +1,142 @@
|
||||
#macro("content"):
|
||||
<nav aria-label="breadcrumb">
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/pkgs">Packages</a></li>
|
||||
<li>#(pkg.Name)</li>
|
||||
</ul>
|
||||
</nav>
|
||||
<hgroup>
|
||||
<h1>#(pkg.Name)</h1>
|
||||
<h2>#(pkg.FullVersion())</h2>
|
||||
</hgroup>
|
||||
<a href="/pkg/#(pkg.Repository)/#(pkg.Name)/script" role="button">View script</a>
|
||||
<a href="javascript:openModal()" role="button" class="secondary">View badge</a>
|
||||
<br>
|
||||
<article>
|
||||
<h3 >Package Information</h3>
|
||||
<table>
|
||||
<tbody>
|
||||
#if(pkg.Description != ""):
|
||||
<tr>
|
||||
<th>Description:</th>
|
||||
<td>#(pkg.Description)</td>
|
||||
</tr>
|
||||
#!if
|
||||
#if(pkg.Homepage != ""):
|
||||
<tr>
|
||||
<th>Homepage:</th>
|
||||
<td><a href="#(pkg.Homepage)" target="_blank">#(pkg.Homepage)</a></td>
|
||||
</tr>
|
||||
#!if
|
||||
#if(pkg.Maintainer != ""):
|
||||
<tr>
|
||||
<th>Maintainer:</th>
|
||||
<td>#(pkg.Maintainer)</td>
|
||||
</tr>
|
||||
#!if
|
||||
#if(len(pkg.Licenses) != 0):
|
||||
<tr>
|
||||
<th>Licenses:</th>
|
||||
<td>
|
||||
#for(i, license in pkg.Licenses):
|
||||
#if(hasPrefix(license, "custom")):
|
||||
#(license)#if(i != len(pkg.Licenses) - 1):, #!if
|
||||
#else:
|
||||
<a href="https://spdx.org/licenses/#(license).html" target="_blank">#(license)</a>#if(i != len(pkg.Licenses) - 1):, #!if
|
||||
#!if
|
||||
#!for
|
||||
</td>
|
||||
</tr>
|
||||
#!if
|
||||
#if(len(pkg.Architectures) != 0):
|
||||
<tr>
|
||||
<th>Architectures:</th>
|
||||
<td>#(join(pkg.Architectures, ", "))</td>
|
||||
</tr>
|
||||
#!if
|
||||
#if(len(pkg.Conflicts) != 0):
|
||||
<tr>
|
||||
<th>Conflicts:</th>
|
||||
<td>#(join(pkg.Conflicts, ", "))</td>
|
||||
</tr>
|
||||
#!if
|
||||
#if(len(pkg.Provides) != 0):
|
||||
<tr>
|
||||
<th>Provides:</th>
|
||||
<td>#(join(pkg.Provides, ", "))</td>
|
||||
</tr>
|
||||
#!if
|
||||
<tr>
|
||||
<th>Repository:</th>
|
||||
<td>#(pkg.Repository)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</article>
|
||||
|
||||
#if(len(pkg.Depends) > 0):
|
||||
<article>
|
||||
<h3 >Runtime Dependencies</h3>
|
||||
<table>
|
||||
<tbody>
|
||||
#for(override, pkgList in pkg.Depends):
|
||||
<tr>
|
||||
<th>#(override == "" ? "default" : override):</th>
|
||||
<td>#(join(pkgList, ", "))</td>
|
||||
</tr>
|
||||
#!for
|
||||
</tbody>
|
||||
</table>
|
||||
</article>
|
||||
#!if
|
||||
|
||||
#if(len(pkg.BuildDepends) > 0):
|
||||
<article>
|
||||
<h3 >Build Dependencies</h3>
|
||||
<table>
|
||||
<tbody>
|
||||
#for(override, pkgList in pkg.BuildDepends):
|
||||
<tr>
|
||||
<th>#(override == "" ? "default" : override):</th>
|
||||
<td>#(join(pkgList, ", "))</td>
|
||||
</tr>
|
||||
#!for
|
||||
</tbody>
|
||||
</table>
|
||||
</article>
|
||||
#!if
|
||||
|
||||
<dialog id="badgeModal">
|
||||
<article style="min-width: 60%">
|
||||
<header>
|
||||
<strong>Badge</strong>
|
||||
<a aria-label="Close" class="close" href="javascript:closeModal()"></a>
|
||||
</header>
|
||||
<p class="centered">
|
||||
<img src="#(url)/badge.svg" alt="LURE badge for #(pkg.Name)">
|
||||
<hr>
|
||||
</p>
|
||||
<label for="badgeMarkdown">Markdown</label>
|
||||
<input id="badgeMarkdown" value="[/badge.svg)](#(url))" readonly />
|
||||
<label for="badgeHTML">HTML</label>
|
||||
<input id="badgeHTML" value='<a href="#(url)"><img src="#(url)/badge.svg" alt="LURE badge for #(pkg.Name)">' readonly />
|
||||
</article>
|
||||
</dialog>
|
||||
|
||||
<script>
|
||||
function openModal() {
|
||||
let modal = document.getElementById("badgeModal");
|
||||
document.documentElement.classList.add('modal-is-open');
|
||||
modal.setAttribute('open', true);
|
||||
}
|
||||
|
||||
function closeModal() {
|
||||
let modal = document.getElementById("badgeModal");
|
||||
document.documentElement.classList.remove('modal-is-open');
|
||||
modal.removeAttribute('open');
|
||||
}
|
||||
</script>
|
||||
#!macro
|
||||
|
||||
#include("base.html", title = pkg.Name + " Package", desc = sprintf("%s %s - %s", pkg.Name, pkg.FullVersion(), pkg.Description))
|
||||
62
tmpls/pkgs.html
Normal file
62
tmpls/pkgs.html
Normal file
@@ -0,0 +1,62 @@
|
||||
#macro("content"):
|
||||
<nav aria-label="breadcrumb">
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li>Packages</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<h1>Package Search</h1>
|
||||
|
||||
<form action="/pkgs">
|
||||
<input type="text" id="query" name="q" value='#(query.Get("q"))' placeholder="Query"/>
|
||||
<div class="grid">
|
||||
<div>
|
||||
<select name="sort">
|
||||
<option value="">Unsorted</option>
|
||||
<option value="name" #(query.Get("sort") == "name" ? "selected" : "")>Sort by Name</option>
|
||||
<option value="version" #(query.Get("sort") == "version" ? "selected" : "")>Sort by Version</option>
|
||||
<option value="repo" #(query.Get("sort") == "repo" ? "selected" : "")>Sort by Repository</option>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<select name="filter" onchange="onFilterChange(event)">
|
||||
<option value="">No Filter</option>
|
||||
<option value="inrepo" #(query.Get("filter") == "inrepo" ? "selected" : "")>In Repo</option>
|
||||
<option value="arch" #(query.Get("filter") == "arch" ? "selected" : "")>Supports Architecture</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<input class='#(query.Get("filter") == "" ? "hidden" : "")' type="text" id="filterValue" name="fv" value='#(query.Get("fv"))' placeholder="Filter Value"/>
|
||||
<button type="submit">Search</button>
|
||||
</form>
|
||||
<hr>
|
||||
|
||||
#for(pkg in pkgs):
|
||||
<article>
|
||||
<header>
|
||||
<div class="justify-space-between">
|
||||
<span class="left"><strong>#(pkg.Repository) / #(pkg.Name)</strong></span>
|
||||
<span class="right">#(pkg.Version)</span>
|
||||
</div>
|
||||
</header>
|
||||
<p>#(pkg.Description)</p>
|
||||
<footer class="centered">
|
||||
<a href="/pkg/#(pkg.Repository)/#(pkg.Name)">More Info →</a>
|
||||
</footer>
|
||||
</article>
|
||||
#!for
|
||||
|
||||
<script>
|
||||
function onFilterChange(e) {
|
||||
let filterValue = document.getElementById('filterValue');
|
||||
if (e.srcElement.value == '') {
|
||||
filterValue.classList.add('hidden');
|
||||
} else {
|
||||
filterValue.classList.remove('hidden');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
#!macro
|
||||
|
||||
#include("base.html", title = "Package Search", desc = "Search for LURE packages")
|
||||
19
tmpls/script.html
Normal file
19
tmpls/script.html
Normal file
@@ -0,0 +1,19 @@
|
||||
#macro("content"):
|
||||
<nav aria-label="breadcrumb">
|
||||
<ul>
|
||||
<li><a href="/">Home</a></li>
|
||||
<li><a href="/pkgs">Packages</a></li>
|
||||
<li><a href="/pkg/#(repoName)/#(pkgName)">#(pkgName)</a></li>
|
||||
<li>Script</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<hgroup>
|
||||
<h1>Build Script</h1>
|
||||
<h2>#(repoName) / #(pkgName)</h2>
|
||||
</hgroup>
|
||||
|
||||
#(script)
|
||||
#!macro
|
||||
|
||||
#include("base.html", title = pkgName + " Build Script", desc = sprintf("Build script for the %s package", pkgName))
|
||||
Reference in New Issue
Block a user