mirror of
https://github.com/NixOS/mobile-nixos.git
synced 2024-12-04 21:18:28 +03:00
doc: Generate devices list with support-level
This commit is contained in:
parent
8fedb1afa4
commit
8b34419fc6
@ -1,6 +1,45 @@
|
|||||||
require "erb"
|
require "erb"
|
||||||
require "json"
|
require "json"
|
||||||
|
|
||||||
|
NOTES_HEADER = "== Device-specific notes"
|
||||||
|
|
||||||
|
COLUMNS = [
|
||||||
|
{ key: "identifier", name: "Identifier" },
|
||||||
|
{ key: "manufacturer", name: "Manufacturer" },
|
||||||
|
{ key: "name", name: "Name" },
|
||||||
|
{ key: "hardware.soc", name: "SoC" },
|
||||||
|
]
|
||||||
|
|
||||||
|
SUPPORT_LEVELS = {
|
||||||
|
"supported" => {
|
||||||
|
title: "Supported",
|
||||||
|
description: "These devices are supported. They use mainline Linux.",
|
||||||
|
},
|
||||||
|
"best-effort" => {
|
||||||
|
title: "Best effort",
|
||||||
|
description: "These devices are almost supported, but may not be a priority, or require more work.",
|
||||||
|
},
|
||||||
|
"vendor" => {
|
||||||
|
title: "Using vendor tooling",
|
||||||
|
description: "These devices are best-effort with kernel and different dependencies coming from vendor forks.",
|
||||||
|
},
|
||||||
|
"unsupported" => {
|
||||||
|
title: "Unsupported",
|
||||||
|
description: "These devices are not abandoned, but not supported. Lower your expectations.",
|
||||||
|
},
|
||||||
|
"abandoned" => {
|
||||||
|
title: "Abandoned",
|
||||||
|
description: "These devices are still in the repository, but are unmaintained, and abandoned.",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
SUPPORT_LEVEL_ORDER = [
|
||||||
|
"supported",
|
||||||
|
"best-effort",
|
||||||
|
"vendor",
|
||||||
|
"unsupported",
|
||||||
|
"abandoned",
|
||||||
|
]
|
||||||
|
|
||||||
def githubURL(device)
|
def githubURL(device)
|
||||||
"https://github.com/NixOS/mobile-nixos/tree/master/devices/#{device}"
|
"https://github.com/NixOS/mobile-nixos/tree/master/devices/#{device}"
|
||||||
end
|
end
|
||||||
@ -20,14 +59,45 @@ def yesno(bool)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
NOTES_HEADER = "== Device-specific notes"
|
def devices_table(devices_info)
|
||||||
|
[
|
||||||
COLUMNS = [
|
"[.with-links%autowidth]",
|
||||||
{ key: "identifier", name: "Identifier" },
|
"|===",
|
||||||
{ key: "manufacturer", name: "Manufacturer" },
|
COLUMNS.map {|col| "| #{col[:name]}" }.join(""),
|
||||||
{ key: "name", name: "Name" },
|
devices_info.keys.sort.map do |identifier|
|
||||||
{ key: "hardware.soc", name: "SoC" },
|
data = devices_info[identifier]
|
||||||
]
|
COLUMNS.map do |col|
|
||||||
|
value = data.dig(*(col[:key].split(".")))
|
||||||
|
if col[:key] == "identifier"
|
||||||
|
"|<<#{identifier}.adoc#,`#{value}`>>"
|
||||||
|
else
|
||||||
|
"|<<#{identifier}.adoc#,#{value}>>"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end.join("\n"),
|
||||||
|
"|===",
|
||||||
|
].join("\n")
|
||||||
|
end
|
||||||
|
def devices_sections(devices_info)
|
||||||
|
grouped_devices = $devicesInfo.group_by { |_, device| device["supportLevel"] }.transform_values(&:to_h)
|
||||||
|
missing_descriptions = grouped_devices.keys.reject {|level| SUPPORT_LEVEL_ORDER.include?(level) }
|
||||||
|
if missing_descriptions.length > 0 then
|
||||||
|
$stderr.puts "Missing description for support levels: #{missing_descriptions.inspect}"
|
||||||
|
exit 1
|
||||||
|
end
|
||||||
|
SUPPORT_LEVEL_ORDER.map do |support_level|
|
||||||
|
if devices = grouped_devices[support_level] then
|
||||||
|
level = SUPPORT_LEVELS[support_level]
|
||||||
|
[
|
||||||
|
"== #{level[:title]}",
|
||||||
|
"\n#{level[:description]}\n",
|
||||||
|
devices_table(devices),
|
||||||
|
].join("\n")
|
||||||
|
else
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
end.compact.join("\n")
|
||||||
|
end
|
||||||
|
|
||||||
$out = ENV["out"]
|
$out = ENV["out"]
|
||||||
$devicesInfo = Dir.glob(File.join(ENV["devicesInfo"], "*")).sort.map do |filename|
|
$devicesInfo = Dir.glob(File.join(ENV["devicesInfo"], "*")).sort.map do |filename|
|
||||||
@ -48,30 +118,9 @@ File.open(File.join($out, "devices/index.adoc"), "w") do |file|
|
|||||||
The following table lists all devices Mobile NixOS available out of the
|
The following table lists all devices Mobile NixOS available out of the
|
||||||
box on the master branch.
|
box on the master branch.
|
||||||
|
|
||||||
The inclusion in this list does not guarantee the device can boot Mobile
|
Different devices have varying degree of support.
|
||||||
NixOS, but only that it did at one point in the past. Though, efforts are
|
|
||||||
made to ensure all of these still work.
|
|
||||||
|
|
||||||
[.with-links%autowidth]
|
#{devices_sections($devicesInfo)}
|
||||||
|===
|
|
||||||
#{COLUMNS.map {|col| "| #{col[:name]}" }.join("")}
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
$devicesInfo.keys.sort.each do |identifier|
|
|
||||||
data = $devicesInfo[identifier]
|
|
||||||
COLUMNS.each do |col|
|
|
||||||
value = data.dig(*(col[:key].split(".")))
|
|
||||||
if col[:key] == "identifier"
|
|
||||||
file.puts("|<<#{identifier}.adoc#,`#{value}`>>")
|
|
||||||
else
|
|
||||||
file.puts("|<<#{identifier}.adoc#,#{value}>>")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
file.puts <<~EOF
|
|
||||||
|===
|
|
||||||
|
|
||||||
Remember to look at the link:https://github.com/NixOS/mobile-nixos/pulls?q=is%3Aopen+is%3Apr+label%3A%22type%3A+port%22[port label]
|
Remember to look at the link:https://github.com/NixOS/mobile-nixos/pulls?q=is%3Aopen+is%3Apr+label%3A%22type%3A+port%22[port label]
|
||||||
on the Mobile NixOS pull requests tracker, for upcoming devices.
|
on the Mobile NixOS pull requests tracker, for upcoming devices.
|
||||||
|
Loading…
Reference in New Issue
Block a user