🔒 Repository is read-only – file editing is disabled.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
{% extends "base.html" %}{% block title %}Pobieranie – {{ t('download_title') }} | PaganOS Linux{% endblock %}
{% block head %}
<style>
.iso-item{border:1px solid var(--border);border-radius:var(--radius);padding:1rem 1.1rem;margin-bottom:0.9rem;background:var(--bg2)}
.iso-item:last-child{margin-bottom:0}
.iso-head{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;flex-wrap:wrap}
.iso-ver{font-size:1.05rem;font-weight:800;color:var(--text-bright);letter-spacing:-0.01em}
.iso-sub{display:flex;gap:0.4rem;flex-wrap:wrap;margin-top:0.45rem}
.iso-desc{color:var(--text);font-size:0.9rem;margin:0.8rem 0 0;white-space:pre-wrap}
.iso-details{margin-top:0.6rem;font-size:0.85rem}
.iso-details summary{cursor:pointer;color:var(--link);font-weight:600;display:inline-flex;align-items:center;gap:0.35rem}
.iso-changes{margin:0.55rem 0 0 1.1rem;padding:0;color:var(--text)}
.iso-changes li{margin-bottom:0.3rem}
.iso-sha-row{display:flex;align-items:center;gap:0.55rem;flex-wrap:wrap;margin-top:0.8rem;padding-top:0.75rem;border-top:1px dashed var(--border)}
.iso-sha-lbl{font-size:0.7rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:0.05em}
.iso-sha{font-family:var(--mono);font-size:0.74rem;word-break:break-all;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-xs);padding:0.35rem 0.55rem;flex:1;min-width:200px;color:var(--text-bright)}
</style>
{% endblock %}
{% block content %}
<div class="hero" style="padding-top:2rem">
<h1 style="font-size:2.2rem;display:flex;align-items:center;gap:0.6rem"><svg class="i16" viewBox="0 0 24 24" width="30" height="30" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><path d="M7 10l5 5 5-5"/><path d="M12 15V3"/></svg>{{ t('download_title') }}</h1>
<p>{{ t('download_subtitle') }}</p>
</div>
<div class="grid2">
{% for d in downloads %}
<div class="card" style="text-align:center"><div class="card-icon">{{ d.icon }}</div>
<h3 style="color:var(--text-bright);margin-bottom:0.5rem">{{ d.title }}</h3>
<p class="text-muted mb-2">{{ d.description }}</p>
{% if d.url %}
<a href="{{ d.url }}" class="btn btn-primary btn-lg">{{ d.button_label or t('dl_from_repo') }}</a>
{% endif %}
</div>
{% endfor %}
<div class="card" style="text-align:center"><div class="card-icon"><svg class="i16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg></div>
<h3 style="color:var(--text-bright);margin-bottom:0.5rem">{{ t('repo_config') }}</h3>
<p class="text-muted mb-2">{{ t('repo_config_desc') }}</p>
<pre style="text-align:left;font-size:0.78rem">echo 'https://repo.paganlinux.eu/stable' > /etc/pag/repos/stable.conf
pag sync
pag upgrade</pre>
</div>
</div>
{% if isos %}
<div class="card mt-2"><div class="card-header"><h2><svg class="i16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="3"/></svg> {{ t('iso_available_images') }}</h2></div>
<p class="text-muted mb-2" style="font-size:0.85rem">{{ t('iso_verify') }}</p>
{% for i in isos %}
<article class="iso-item">
<div class="iso-head">
<div>
<div class="iso-ver">PaganOS {{ i.version }}</div>
<div class="iso-sub">
{% if i.date %}<span class="chip">{{ i.date }}</span>{% endif %}
<span class="chip">{{ i.size_mb }} MB</span>
<span class="chip chip-ok" title="SHA-256: {{ i.sha256 }}">{{ i.sha256_short }}…</span>
</div>
</div>
<a class="btn btn-primary" href="{{ i.link }}"><svg class="i16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><path d="M7 10l5 5 5-5"/><path d="M12 15V3"/></svg> {{ t('download_iso') }}</a>
</div>
{% if i.description %}<p class="iso-desc">{{ i.description }}</p>{% endif %}
{% if i.changes %}
<details class="iso-details">
<summary>{{ t('iso_changelog') }}</summary>
<ul class="iso-changes">
{% for ln in i.changes.split('\n') %}{% if ln.strip() %}<li>{{ ln }}</li>{% endif %}{% endfor %}
</ul>
</details>
{% endif %}
<div class="iso-sha-row">
<span class="iso-sha-lbl">{{ t('iso_checksum') }}</span>
<code class="iso-sha" id="iso-sha-{{ loop.index }}">{{ i.sha256 }}</code>
<button type="button" class="btn btn-sm btn-ghost" data-copy="iso-sha-{{ loop.index }}"><svg class="i16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg> <span>{{ t('iso_copy_sha') }}</span></button>
<a class="btn btn-sm btn-ghost" href="{{ i.link_sha }}" title="{{ i.filename }}.sha256">{{ t('iso_dl_sha') }}</a>
</div>
</article>
{% endfor %}
</div>
{% endif %}
<div class="card mt-2"><div class="card-header"><h2><svg class="i16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="7.5" cy="15.5" r="5.5"/><path d="M21 2l-9.6 9.6"/><path d="M15.5 7.5l3 3L22 7l-3-3"/></svg> {{ t('gpg_key') }}</h2></div>
<p class="text-muted mb-1">{{ t('gpg_key_desc') }}</p>
<pre>pag key-add https://repo.paganlinux.eu/stable/paganos.asc</pre>
<p class="text-xs text-muted mt-1">{{ t('fingerprint') }}: <code>157F DE15 A424 C89F FA94 01D4 A14C BE52 BE0D 63F5</code></p>
</div>
<script>
(function () {
document.querySelectorAll('[data-copy]').forEach(function (btn) {
btn.addEventListener('click', function () {
var el = document.getElementById(btn.getAttribute('data-copy'));
if (!el) return;
var txt = (el.textContent || '').trim();
function done() {
var span = btn.querySelector('span');
if (span) { var old = span.textContent; span.textContent = '{{ t('iso_copied') }}'; setTimeout(function(){ span.textContent = old; }, 1600); }
}
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(txt).then(done, function(){ fallback(); });
} else { fallback(); }
function fallback() {
try {
var ta = document.createElement('textarea');
ta.value = txt; ta.style.position = 'fixed'; ta.style.opacity = '0';
document.body.appendChild(ta); ta.select();
document.execCommand('copy'); document.body.removeChild(ta); done();
} catch (e) {}
}
});
});
})();
</script>
{% endblock %}