Skip to content

Commit 108139c

Browse files
Deploy to GitHub pages
0 parents  commit 108139c

File tree

2 files changed

+9901
-0
lines changed

2 files changed

+9901
-0
lines changed

index.html

Lines changed: 351 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,351 @@
1+
<!doctype html>
2+
3+
<html lang="en">
4+
<head>
5+
<meta charset="utf-8">
6+
<meta name="viewport" content="width=device-width, initial-scale=1">
7+
8+
<title>Olaki - A list of Android devices by compatible operating systems</title>
9+
<meta name="description" content="An aggregated list of Android devices by compatible operating systems.">
10+
<meta name="author" content="kedio-labs">
11+
12+
<meta property="og:title" content="Olaki - Aggregated list of Android devices by compatible operating systems">
13+
<meta property="og:type" content="website">
14+
<meta property="og:url" content="https://kedio-labs.github.io/olaki">
15+
<meta property="og:description" content="An aggregated list of Android devices by compatible operating systems.">
16+
<style>
17+
:root {
18+
--body-backrgound-color: #ffff;
19+
--table-border: 1px solid black;
20+
--table-odd-row-backrgound-color: #d9b1ea;
21+
--table-even-row-backrgound-color: #e5e3e3;
22+
--appendix-code-backrgound-color: #d0d0d0;
23+
}
24+
25+
html, body {
26+
font-family: sans-serif;
27+
font-size: 1em;
28+
color: #0c0c0c;
29+
background-color: var(--body-backrgound-color);
30+
padding: 0 10px 10px 10px;
31+
}
32+
33+
#table-container {
34+
width: 1300px;
35+
}
36+
37+
table {
38+
font-size: 0.95rem;
39+
border-top: var(--table-border);
40+
border-left: var(--table-border);
41+
border-spacing: 0;
42+
width: 100%;
43+
}
44+
45+
/* attempt to target mobile devices */
46+
@media (hover: none), (hover: on-demand) {
47+
#table-container {
48+
overflow: auto;
49+
height: 450px;
50+
}
51+
}
52+
53+
th, td {
54+
padding: 10px 0;
55+
border-bottom: var(--table-border);
56+
border-right: var(--table-border);
57+
word-wrap: break-word;
58+
text-align: center;
59+
}
60+
61+
th {
62+
/* safari */
63+
position: -webkit-sticky;
64+
position: sticky;
65+
top: 0;
66+
background-color: var(--table-even-row-backrgound-color);
67+
z-index: 10;
68+
}
69+
70+
/* device name column */
71+
tr th:first-child, tr td:first-child {
72+
width: 160px;
73+
padding: 10px;
74+
}
75+
76+
/* codename name column */
77+
tr th:nth-child(2), tr td:nth-child(2) {
78+
width: 103px;
79+
}
80+
81+
tbody tr:nth-child(odd) {
82+
background-color: var(--table-odd-row-backrgound-color);
83+
}
84+
85+
tbody tr:nth-child(even) {
86+
background-color: var(--table-even-row-backrgound-color);
87+
}
88+
89+
.back-to-top {
90+
margin-left: 10px;
91+
font-size: 0.85rem;
92+
}
93+
94+
footer .code {
95+
background-color: var(--appendix-code-backrgound-color);
96+
width: 355px;
97+
padding: 5px 10px;
98+
line-height: 1.5rem;
99+
}
100+
101+
h1, h2 {
102+
border-bottom: 1px solid #a2a9b1;
103+
}
104+
</style>
105+
</head>
106+
107+
<body>
108+
<header>
109+
<h1>Welcome to Olaki.</h1>
110+
<p>
111+
An automatically generated list of Android devices by compatible operating systems. For each device, a link to the
112+
corresponding OS image or project page is provided. See the source code <a href="https://github.com/kedio-labs/olaki"
113+
target="_blank">here.</a>
114+
</p>
115+
<p>
116+
Sensible defaults are defined to try and only include <code>(device, OS)</code> pairs with high enough compatibility rates.
117+
See the <a href="#appendix-header">Appendix</a> for more details.
118+
</p>
119+
<p>Last update: <span id="last-update-date"></span>.</p>
120+
<p>Please <a href="https://github.com/kedio-labs/olaki" target="_blank">contribute</a> if you'd like to see other operating
121+
systems listed here.
122+
</p>
123+
<div class="contents-container">
124+
<span class="contents">Contents:</span>
125+
<ul>
126+
<li><a href="#olaki-table-header">Table</a></li>
127+
<li><a href="#appendix-header">Appendix</a></li>
128+
<li><a href="#faq-header">F.A.Q.</a></li>
129+
</ul>
130+
</div>
131+
</header>
132+
<main>
133+
<h2 id="olaki-table-header">Table</h2>
134+
<p id="quick-table-stats"></p>
135+
<div id="table-container">
136+
<table id="olaki-table">
137+
<thead>
138+
<tr>
139+
<th>Device name</th>
140+
<th>Codename</th>
141+
<th class="os-column-header">crDroid</th>
142+
<th class="os-column-header">Murena</th>
143+
<th class="os-column-header">Kali<br>Linux</th>
144+
<th class="os-column-header">Lineage<br>OS</th>
145+
<th class="os-column-header">OmniROM</th>
146+
<th class="os-column-header">postmarket<br>OS</th>
147+
<th class="os-column-header">Ubuntu<br>Touch</th>
148+
<th class="os-column-header">Calyx<br>OS</th>
149+
<th class="os-column-header">Graphene<br>OS</th>
150+
</tr>
151+
</thead>
152+
<tbody>
153+
</tbody>
154+
</table>
155+
</div>
156+
<footer>
157+
<h2 id="appendix-header"><span>Appendix - Parameters used to build this table</span><span class="back-to-top">[ <a href="#">back to top</a> ]</span>
158+
</h2>
159+
<h3>crDroid</h3>
160+
<div class="code" id="crdroid-parameters">
161+
N/A
162+
</div>
163+
<h3>Murena</h3>
164+
<div class="code" id="eos-parameters"></div>
165+
<h3>Kali Linux</h3>
166+
<div class="code" id="kali-parameters"></div>
167+
<h3>LineageOS</h3>
168+
<div class="code" id="lineageos-parameters"></div>
169+
<h3>OmniROM</h3>
170+
<div class="code" id="omnirom-parameters"></div>
171+
<h3>postmarketOS</h3>
172+
<div class="code" id="pmos-parameters"></div>
173+
<h3>Ubuntu Touch</h3>
174+
<div class="code" id="ubuntutouch-parameters"></div>
175+
<h2 id="faq-header"><span>F.A.Q.</span><span class="back-to-top">[ <a href="#">back to top</a> ]</span>
176+
</h2>
177+
<h3>Why should I install a custom OS on my Android device?</h3>
178+
<div>
179+
<span>You could benefit from some of the following</span>
180+
<ul>
181+
<li>Increase the lifespan of your device
182+
<ul>
183+
<li>Once your device's manufacturer stops providing OS updates, you may not be able to install apps that require a
184+
newer OS version.
185+
</li>
186+
<li>You phone may also not receive further security updates, which poses a risk.</li>
187+
</ul>
188+
</li>
189+
<li>Sustainability
190+
<ul>
191+
<li>Mining and manufacturing processes involved in making smartphones have a sizeable impact on the environment. Using
192+
them as long as practically possible helps reduce that impact.
193+
</li>
194+
</ul>
195+
</li>
196+
<li>Increased privacy
197+
<ul>
198+
<li>With most of the custom OSes listed above, you can unGoogle your smartphone. This means not having to install
199+
Google apps or services.
200+
</li>
201+
</ul>
202+
</li>
203+
<li>Repurpose your device
204+
<ul>
205+
<li>If your phone is not fitted to be used as such anymore, you can repurpose it as a small computer, a small gaming
206+
device, a glorified remote control for connected devices, etc. You can also achieve some of these without a custom
207+
OS if relevant apps are compatible with your Android OS version (i.e. it's not too old).
208+
</li>
209+
</ul>
210+
</li>
211+
</ul>
212+
</div>
213+
214+
<h3>Is it easy to install a custom OS on my Android device?</h3>
215+
<p>Your mileage may vary. It will require learning about concepts such as rooting, bootloader, flashing, ROM, etc. Luckily,
216+
many people have been through this before so there is extensive documentation on the internet and the list above is aimed at
217+
providing <code>(device, os)</code> pairs with high compatibility rates.</p>
218+
<h3>Can you please add OS [XYZ] to the list?</h3>
219+
<p>Sounds like a plan. :) Please raise <a href="https://github.com/kedio-labs/olaki/issues" target="_blank">an issue</a>
220+
once you've
221+
confirmed it's not a duplicate or, if you have coding
222+
skills, raise <a href="https://github.com/kedio-labs/olaki/pulls" target="_blank">a PR!</a>
223+
</p>
224+
<h3>I have found a bug/inconsistency!</h3>
225+
<p>Well, thank you for spotting that! Please let us know by raising <a href="https://github.com/kedio-labs/olaki/issues"
226+
target="_blank">an
227+
issue</a> once you've
228+
confirmed it's not a duplicate or better still, raise <a href="https://github.com/kedio-labs/olaki/pulls"
229+
target="_blank">a PR</a> if
230+
that's possible.
231+
</p>
232+
<h3>I want to repurpose my phone as a headless single-board computer à la Raspberry Pi without installing a custom OS</h3>
233+
<p>There are several ways to achieve that. The easiest option is to install <a href="https://termux.com/" target="_blank">termux</a>
234+
if your smartphone OS version is not too old. And if you'd like to play with linux distros within termux, have a look at <a
235+
href="https://github.com/termux/proot-distro#supported-distributions" target="_blank">proot-distro.</a></p>
236+
<p>Another option is to check in the list above if your phone is compatible with postmarketOS, which is a flavour of Alpine.
237+
You can thus run many applications, including for self-hosting, as explored in <a
238+
href="https://blog.kedio.co/post/how-to-run-a-server-on-postmarketos" target="_blank">this blog post.</a></p>
239+
<p>If you'd like your phone to be always on, an important aspect to consider is how to run your phone without a battery.
240+
Manufacturers most likely don't design their phones with that in mind. See the question below for a quick tip.</p>
241+
<h3>How do I run my phone without a battery?</h3>
242+
<p>The easiest is to keep the battery and simply use a plug timer so that the phone is not constantly being charged.</p>
243+
<p>Alternatively, there are ways for some phones to remove the battery and simulate its presence so that the device still
244+
boots up and runs normally. This is a case-by-case basis though. Doing some research online for your specific device may
245+
give you pointers. For example, here is how to achieve <a
246+
href="https://blog.kedio.co/post/how-to-run-a-oneplus-6t-without-battery" target="_blank">a battery-less setup for OnePlus
247+
6T devices.</a></p>
248+
</footer>
249+
</main>
250+
251+
<script src="olaki-data.js"></script>
252+
<script>
253+
//
254+
// populate last updated timestamp
255+
//
256+
document.getElementById("last-update-date").innerText = new Date(olakiData.lastUpdated).toUTCString();
257+
258+
//
259+
// populate table
260+
//
261+
let numberOfDeviceToOsPairs = 0;
262+
const populateOsCell = (osCell, url, urlText) => {
263+
numberOfDeviceToOsPairs++; // mutating a variable outside this function. Sorry :p
264+
const link = getOsDownloadATag(url, urlText);
265+
osCell.append(link);
266+
};
267+
const tbody = document.getElementById("olaki-table").getElementsByTagName("tbody")[0];
268+
269+
const getOsDownloadATag = (url, text) => {
270+
const link = document.createElement("a");
271+
link.href = url;
272+
link.target = "_blank";
273+
link.innerText = text;
274+
return link;
275+
};
276+
277+
for (const deviceSummary of olakiData.deviceSummaries) {
278+
const row = tbody.insertRow();
279+
row.insertCell().append(deviceSummary.vendor + " " + deviceSummary.name);
280+
row.insertCell().append(deviceSummary.codename);
281+
282+
let nextOsCell = row.insertCell();
283+
if (deviceSummary.crdroid) {
284+
populateOsCell(nextOsCell, deviceSummary.crdroid.url, `version ${deviceSummary.crdroid.latestAvailableVersion}`);
285+
}
286+
287+
nextOsCell = row.insertCell();
288+
if (deviceSummary.eos) {
289+
populateOsCell(nextOsCell, deviceSummary.eos.url, deviceSummary.eos.maturity);
290+
}
291+
292+
nextOsCell = row.insertCell();
293+
if (deviceSummary.kali) {
294+
populateOsCell(nextOsCell, deviceSummary.kali.url, deviceSummary.kali.isStable ? "stable" : "latest");
295+
}
296+
297+
nextOsCell = row.insertCell();
298+
if (deviceSummary.lineageos) {
299+
populateOsCell(nextOsCell, deviceSummary.lineageos.url, deviceSummary.lineageos.isMaintained ? "maintained" : "unmaintained");
300+
}
301+
302+
nextOsCell = row.insertCell();
303+
if (deviceSummary.omnirom) {
304+
populateOsCell(nextOsCell, deviceSummary.omnirom.url, deviceSummary.omnirom.isOfficial ? "official" : "unofficial");
305+
}
306+
307+
nextOsCell = row.insertCell();
308+
if (deviceSummary.pmos) {
309+
populateOsCell(nextOsCell, deviceSummary.pmos.url, deviceSummary.pmos.category);
310+
}
311+
312+
nextOsCell = row.insertCell();
313+
if (deviceSummary.ubuntutouch) {
314+
populateOsCell(nextOsCell, deviceSummary.ubuntutouch.url, deviceSummary.ubuntutouch.progress + "%");
315+
}
316+
317+
nextOsCell = row.insertCell();
318+
if (deviceSummary.calyxos) {
319+
populateOsCell(nextOsCell, deviceSummary.calyxos.url, 'yes');
320+
}
321+
322+
nextOsCell = row.insertCell();
323+
if (deviceSummary.grapheneos) {
324+
populateOsCell(nextOsCell, deviceSummary.grapheneos.url, 'yes');
325+
}
326+
}
327+
328+
//
329+
// populate table stats
330+
//
331+
document.getElementById("quick-table-stats").innerHTML =
332+
`Quick stats: ${Object.keys(olakiData.deviceSummaries).length} devices. ${document.getElementsByClassName("os-column-header").length} operating systems. ${numberOfDeviceToOsPairs} <code>(device, OS)</code> pairs available.`;
333+
334+
335+
//
336+
// populate appendix
337+
//
338+
const populateAppendixSectionForOS = (os) => document.getElementById(`${os}-parameters`).innerText = JSON.stringify(olakiData.appConfig[os], null, " ");
339+
340+
populateAppendixSectionForOS("eos");
341+
populateAppendixSectionForOS("kali");
342+
populateAppendixSectionForOS("lineageos");
343+
populateAppendixSectionForOS("omnirom");
344+
populateAppendixSectionForOS("pmos");
345+
populateAppendixSectionForOS("ubuntutouch");
346+
// no need for an appendix section for CalyxOS
347+
// no need for an appendix section for GrapheneOS
348+
349+
</script>
350+
</body>
351+
</html>

0 commit comments

Comments
 (0)