Add support for OpenWRT
[pulga.git] / src / distros.rs
blob236f854f3171538161d8e5d950e7d448f8aa4997
1 use phf::phf_map;
3 use crate::{arts::*, get_rand};
5 use std::fs;
7 // Unused for now
8 /// Should include (preferably) all package managers used by distros.
9 #[allow(dead_code)]
10 pub enum PackageManager {
11     Pacman,
12     EOPKG,
13     DPKG,
14     RPM,
18 // Return the enum variant
19 pub static DISTROS: phf::Map<&'static str, &'static str> = phf_map! {
20     "arch"        => ARCH_LOGO        ,
21     "manjaro"     => MANJARO_LOGO     ,
22     "debian"      => DEBIAN_LOGO      ,
23     "fedora"      => FEDORA_LOGO      ,
24     "aix"         => AIX_LOGO         ,
25     "hash"        => HASH_LOGO        ,
26     "alpine"      => ALPINE_LOGO      ,
27     "alter"       => ALTER_LOGO       ,
28     "amazon"      => AMAZON_LOGO      ,
29     "anarchy"     => ANARCHY_LOGO     ,
30     "android"     => ANDROID_LOGO     ,
31     "antergos"    => ANTERGOS_LOGO    ,
32     "antix"       => ANTIX_LOGO       ,
33     "aoscosretro" => AOSCOSRETRO_LOGO ,
34     "aoscos"      => AOSCOS_LOGO      ,
35     "arcolinux"   => ARCOLINUX_LOGO   ,
36     "archbox"     => ARCHBOX_LOGO     ,
37     "archlabs"    => ARCHLABS_LOGO    ,
38     "archstrike"  => ARCHSTRIKE_LOGO  ,
39     "xferience"   => XFERIENCE_LOGO   ,
40     "artix"       => ARTIX_LOGO       ,
41     "arya"        => ARYA_LOGO        ,
42     "bedrock"     => BEDROCK_LOGO     ,
43     "bitrig"      => BITRIG_LOGO      ,
44     "blackarch"   => BLACKARCH_LOGO   ,
45     "blankon"     => BLANKON_LOGO     ,
46     "bluelight"   => BLUELIGHT_LOGO   ,
47     "bonsai"      => BONSAI_LOGO      ,
48     "bsd"         => BSD_LOGO         ,
49     "bunsenlabs"  => BUNSENLABS_LOGO  ,
50     "calculate"   => CALCULATE_LOGO   ,
51     "carbs"       => CARBS_LOGO       ,
52     "centos"      => CENTOS_LOGO      ,
53     "chakra"      => CHAKRA_LOGO      ,
54     "chaletos"    => CHALETOS_LOGO    ,
55     "chapeau"     => CHAPEAU_LOGO     ,
56     "chrom"       => CHROM_LOGO       ,
57     "clearos"     => CLEAROS_LOGO     ,
58     "clearlinux"  => CLEARLINUX_LOGO  ,
59     "clover"      => CLOVER_LOGO      ,
60     "condres"     => CONDRES_LOGO     ,
61     "openwrt"     => OPENWRT          ,
64 pub fn choose_distro(random: bool) -> &'static str {
65     if random {
66         let keys: Vec<&str> = DISTROS.keys().map(|x: &&str| *x).collect();
67         let idx = get_rand(keys.len() as i32) as usize;
68         DISTROS
69             .get(keys[idx])
70             .map(Clone::clone)
71             .unwrap_or("linux")
73     } else {
74         let id = get_id().unwrap();
75         DISTROS
76             .get(id.as_str())
77             .map(Clone::clone)
78             .unwrap_or("linux")
79     }
82 pub fn get_id() -> Option<String> {
83     let text = fs::read_to_string("/etc/os-release").ok()?;
84     let id: usize = text.find("\nID=")?;
85     let id: String = text[id + 4..].chars().take_while(|x| *x != '\n').collect();
86     Some(id)