Compare commits
58 Commits
2.0.3
...
neofetch-8.1.0
| Author | SHA1 | Date | |
|---|---|---|---|
| 9cf9985973 | |||
| 18bb479415 | |||
| b667cc8ad6 | |||
| e838166b16 | |||
| 43e1dc1067 | |||
| cc5d7570fb | |||
| b05d9c44b4 | |||
| 2995c78e66 | |||
| 1d89f237db | |||
| 75cde60494 | |||
| fa71dfb84e | |||
| c147a2ffc6 | |||
| 9cc0f9a111 | |||
| 0aa7731c17 | |||
| 255dd3e630 | |||
| 7100f7a682 | |||
| 68cb804ccf | |||
| e9b65287a3 | |||
| 5ff0a8d49a | |||
| 635fbfff01 | |||
| 13e56f621b | |||
| 9500e8c0aa | |||
| e5ba2b3be9 | |||
| e78e60da3d | |||
| 809b9c34f4 | |||
| 352a1ba086 | |||
| b81d5fed1b | |||
| f32e2df4fa | |||
| abcc1d265b | |||
| 25824da0e0 | |||
| 5e0f1ee909 | |||
| 62b0fd959f | |||
| 9a66c10afd | |||
| 62fdc22c00 | |||
| 1fdcfa66b8 | |||
| d08a0745a5 | |||
| 4ee5344209 | |||
| 26030b0628 | |||
| 9b376f97c0 | |||
| 2dc18050ca | |||
| e816235637 | |||
| 8046e9bab3 | |||
| e03cda1475 | |||
| 20e5fb3f89 | |||
| e253a75924 | |||
| 2252fc36e7 | |||
| 4e23243384 | |||
| f6dc68d7dc | |||
| f947373a23 | |||
| 5b745cde01 | |||
| 1afbd66355 | |||
| 2fe21deea8 | |||
| 37a19901bb | |||
| 063679b72d | |||
| 264cf11690 | |||
| 6280d370bc | |||
| 6cfc337d83 | |||
| 533de96e80 |
Generated
+192
-315
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -3,7 +3,7 @@ resolver = "2"
|
|||||||
members = ["crates/*"]
|
members = ["crates/*"]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "2.0.3"
|
version = "2.1.0-rc1"
|
||||||
authors = ["Azalea Gui <azalea@hydev.org>"]
|
authors = ["Azalea Gui <azalea@hydev.org>"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
rust-version = "1.75.0"
|
rust-version = "1.75.0"
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
include hyfetch/scripts/*
|
|
||||||
|
|
||||||
recursive-exclude tools *
|
|
||||||
recursive-exclude .github *
|
|
||||||
recursive-exclude .vscode *
|
|
||||||
exclude .gitignore
|
|
||||||
exclude .gitattributes
|
|
||||||
exclude package.json
|
|
||||||
exclude CONTRIBUTING.md
|
|
||||||
@@ -129,6 +129,59 @@ cargo install --git https://github.com/hykilpikonna/hyfetch
|
|||||||
|
|
||||||
<!-- CHANGELOG STARTS HERE --->
|
<!-- CHANGELOG STARTS HERE --->
|
||||||
|
|
||||||
|
### 2.1.0-rc1
|
||||||
|
|
||||||
|
### 2.1.0
|
||||||
|
|
||||||
|
(changelog is generated by Gemini from commit history)
|
||||||
|
|
||||||
|
**✨ Features & Enhancements**
|
||||||
|
|
||||||
|
* Random Preset: Now can select multiple presets and let it randomly choose one on each run ([#487](https://github.com/hykilpikonna/hyfetch/issues/487)).
|
||||||
|
* Distro as Data: Migrated distribution ASCII art and metadata to a unified JSON-header format, enabling shared usage across Python and Rust implementations.
|
||||||
|
* Distro Parity: Added missing ASCII art and distros from [fastfetch](https://github.com/fastfetch-cli/fastfetch).
|
||||||
|
* New OS Support: Added support for QNX/Blackberry 10 ([#480](https://github.com/hykilpikonna/hyfetch/issues/480)).
|
||||||
|
* Custom Presets: Added `custom_presets` configuration option to allow user-defined color presets ([#481](https://github.com/hykilpikonna/hyfetch/issues/481)).
|
||||||
|
* Interactive Filtering: Added live filter for preset selection in the configuration menu ([#482](https://github.com/hykilpikonna/hyfetch/issues/482)).
|
||||||
|
* New Distros: Added support for Codex Linux ([#477](https://github.com/hykilpikonna/hyfetch/issues/477)) and Zirconium ([#468](https://github.com/hykilpikonna/hyfetch/issues/468)).
|
||||||
|
* New Flags: Added Peter Griffin pride flag ([#489](https://github.com/hykilpikonna/hyfetch/issues/489)), Rubber flag ([#479](https://github.com/hykilpikonna/hyfetch/issues/479)), and Haruhi Suzumiya flag ([#486](https://github.com/hykilpikonna/hyfetch/issues/486)).
|
||||||
|
|
||||||
|
**🐛 Bug Fixes**
|
||||||
|
|
||||||
|
* Windows/MSYS2: Fixed bash path detection and execution in MINGW64 environment ([#488](https://github.com/hykilpikonna/hyfetch/issues/488)).
|
||||||
|
* Backend Fixes: Fixed issues with the `macchina` backend crashing or reporting incorrect distribution ([#491](https://github.com/hykilpikonna/hyfetch/issues/491)).
|
||||||
|
* Terminal Fixes: Fixed terminal font output issues in Kitty terminal ([#484](https://github.com/hykilpikonna/hyfetch/issues/484)).
|
||||||
|
* Reliability:
|
||||||
|
* Improved path detection to continue even when current path is not found ([#426](https://github.com/hykilpikonna/hyfetch/issues/426)).
|
||||||
|
* Added fallback for operating systems unsupported by the Rust implementation ([#474](https://github.com/hykilpikonna/hyfetch/issues/474)).
|
||||||
|
* Fixed prioritization of CLI-specified ASCII art to ensure it correctly overrides configuration ([#475](https://github.com/hykilpikonna/hyfetch/issues/475)).
|
||||||
|
* Shell Detection: Switched to `os.execv` for more reliable shell detection and transition ([#469](https://github.com/hykilpikonna/hyfetch/issues/469)).
|
||||||
|
* Background Detection Timeout: Prevent crash due to timeout in background color detection ([#453](https://github.com/hykilpikonna/hyfetch/issues/453)).
|
||||||
|
|
||||||
|
|
||||||
|
### 2.0.5
|
||||||
|
|
||||||
|
**✨ Features & Enhancements**
|
||||||
|
|
||||||
|
* Added support for Secureblue ([#434](https://github.com/hykilpikonna/hyfetch/pull/434)).
|
||||||
|
* Added `void_old` logo variant ([#457](https://github.com/hykilpikonna/hyfetch/pull/457)).
|
||||||
|
* Added Femme flag ([#456](https://github.com/hykilpikonna/hyfetch/pull/456)).
|
||||||
|
|
||||||
|
**🐛 Bug Fixes**
|
||||||
|
|
||||||
|
* Fixed a panic when entering an invalid alignment option after rolling ([#460](https://github.com/hykilpikonna/hyfetch/issues/460)).
|
||||||
|
* Fixed Traceback printing on KeyboardInterrupt ([#462](https://github.com/hykilpikonna/hyfetch/issues/462)).
|
||||||
|
* Restored flags lost during Python/Rust presets merge ([#466](https://github.com/hykilpikonna/hyfetch/pull/466)).
|
||||||
|
* Fixed a panic with file metadata access ([#465](https://github.com/hykilpikonna/hyfetch/issues/465)).
|
||||||
|
|
||||||
|
### 2.0.4
|
||||||
|
|
||||||
|
**🔧 Building Pipeline Refactoring**
|
||||||
|
|
||||||
|
* Modernize Python building toolchain from `setup.py` to `pyproject.toml`
|
||||||
|
* Fixed a bug where Windows binaries are mistakenly built into Unix packages.
|
||||||
|
* Fixed a bug where `presets.json` was not being included in the built package.
|
||||||
|
|
||||||
### 2.0.3
|
### 2.0.3
|
||||||
|
|
||||||
(changelog is generated by Gemini from commit history)
|
(changelog is generated by Gemini from commit history)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ ansi_colours = { workspace = true, features = [] }
|
|||||||
anstream = { workspace = true, features = [], optional = true }
|
anstream = { workspace = true, features = [], optional = true }
|
||||||
anyhow = { workspace = true, features = ["std"] }
|
anyhow = { workspace = true, features = ["std"] }
|
||||||
bpaf = { workspace = true, features = [] }
|
bpaf = { workspace = true, features = [] }
|
||||||
crossterm = { workspace = true, features = [] }
|
crossterm = { workspace = true, features = ["events"] }
|
||||||
deranged = { workspace = true, features = ["serde", "std"] }
|
deranged = { workspace = true, features = ["serde", "std"] }
|
||||||
directories = { workspace = true, features = [] }
|
directories = { workspace = true, features = [] }
|
||||||
enterpolation = { workspace = true, features = ["bspline", "std"] }
|
enterpolation = { workspace = true, features = ["bspline", "std"] }
|
||||||
|
|||||||
+119
-76
@@ -7,16 +7,27 @@ use anyhow::{Context, Result};
|
|||||||
use fs_extra::dir::CopyOptions;
|
use fs_extra::dir::CopyOptions;
|
||||||
use heck::ToUpperCamelCase;
|
use heck::ToUpperCamelCase;
|
||||||
use indexmap::IndexMap;
|
use indexmap::IndexMap;
|
||||||
use regex::Regex;
|
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use unicode_normalization::UnicodeNormalization as _;
|
use unicode_normalization::UnicodeNormalization as _;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
struct AsciiDistro {
|
struct AsciiDistro {
|
||||||
pattern: String,
|
pattern: String,
|
||||||
|
color: String,
|
||||||
|
foreground: Vec<u8>,
|
||||||
|
background: Option<u8>,
|
||||||
art: String,
|
art: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
struct DistroHeader {
|
||||||
|
#[serde(rename = "match")]
|
||||||
|
pattern: String,
|
||||||
|
color: serde_json::Value,
|
||||||
|
foreground: Option<Vec<u8>>,
|
||||||
|
background: Option<u8>,
|
||||||
|
}
|
||||||
|
|
||||||
impl AsciiDistro {
|
impl AsciiDistro {
|
||||||
fn friendly_name(&self) -> String {
|
fn friendly_name(&self) -> String {
|
||||||
self.pattern
|
self.pattern
|
||||||
@@ -37,31 +48,35 @@ fn main() -> Result<()> {
|
|||||||
let dir = PathBuf::from(env::var_os("CARGO_WORKSPACE_DIR").unwrap_or_else(|| env::var_os("CARGO_MANIFEST_DIR").unwrap()));
|
let dir = PathBuf::from(env::var_os("CARGO_WORKSPACE_DIR").unwrap_or_else(|| env::var_os("CARGO_MANIFEST_DIR").unwrap()));
|
||||||
let o = PathBuf::from(env::var_os("OUT_DIR").unwrap());
|
let o = PathBuf::from(env::var_os("OUT_DIR").unwrap());
|
||||||
|
|
||||||
for file in &["neofetch", "hyfetch/data"] {
|
let data_dir = anything_that_exist(&[
|
||||||
let src = anything_that_exist(&[
|
&dir.join("hyfetch/data"),
|
||||||
&dir.join(file),
|
&dir.join("../../hyfetch/data"),
|
||||||
&dir.join("../../").join(file),
|
]).context("couldn't find hyfetch/data")?;
|
||||||
]).context("couldn't find neofetch")?;
|
|
||||||
let dst = o.join(file);
|
|
||||||
println!("cargo:rerun-if-changed={}", src.display());
|
|
||||||
|
|
||||||
// Copy either file or directory
|
let dst_root = o.join("hyfetch");
|
||||||
if src.is_dir() {
|
fs::create_dir_all(&dst_root)?;
|
||||||
let opt = CopyOptions { overwrite: true, copy_inside: true, ..CopyOptions::default() };
|
|
||||||
println!("copying {} to {}", src.display(), dst.display());
|
// Copy hyfetch/data
|
||||||
fs_extra::dir::copy(&src, &dst, &opt)?;
|
let opt = CopyOptions { overwrite: true, copy_inside: true, ..CopyOptions::default() };
|
||||||
}
|
fs_extra::dir::copy(&data_dir, &dst_root, &opt)?;
|
||||||
else { fs::copy(&src, &dst)?; }
|
|
||||||
}
|
// Copy neofetch
|
||||||
|
let neofetch_src = anything_that_exist(&[
|
||||||
|
&dir.join("neofetch"),
|
||||||
|
&dir.join("../../neofetch"),
|
||||||
|
]).context("couldn't find neofetch")?;
|
||||||
|
fs::copy(&neofetch_src, o.join("neofetch"))?;
|
||||||
|
|
||||||
preset_codegen(&o.join("hyfetch/data/presets.json"), &o.join("presets.rs"))?;
|
preset_codegen(&o.join("hyfetch/data/presets.json"), &o.join("presets.rs"))?;
|
||||||
export_distros(&o.join("neofetch"), &o)?;
|
|
||||||
|
let distros_dir = data_dir.join("distros");
|
||||||
|
export_distros(&distros_dir, &o)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn export_distros(neofetch_path: &Path, out_path: &Path) -> Result<()>
|
fn export_distros(distro_dir: &Path, out_path: &Path) -> Result<()>
|
||||||
{
|
{
|
||||||
let distros = parse_ascii_distros(neofetch_path)?;
|
let distros = parse_ascii_distros(distro_dir)?;
|
||||||
let mut variants = IndexMap::with_capacity(distros.len());
|
let mut variants = IndexMap::with_capacity(distros.len());
|
||||||
|
|
||||||
for distro in &distros {
|
for distro in &distros {
|
||||||
@@ -164,6 +179,66 @@ impl Distro {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn color(&self) -> &str {
|
||||||
|
match self {
|
||||||
|
"###,
|
||||||
|
);
|
||||||
|
|
||||||
|
for (variant, AsciiDistro { color, .. }) in &variants {
|
||||||
|
write!(buf, r###"
|
||||||
|
Self::{variant} => {color:?},
|
||||||
|
"###, color = color)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.push_str(
|
||||||
|
r###"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn foreground(&self) -> &[u8] {
|
||||||
|
match self {
|
||||||
|
"###,
|
||||||
|
);
|
||||||
|
|
||||||
|
for (variant, AsciiDistro { foreground, .. }) in &variants {
|
||||||
|
if foreground.is_empty() {
|
||||||
|
write!(buf, r###"
|
||||||
|
Self::{variant} => &[],
|
||||||
|
"###)?;
|
||||||
|
} else {
|
||||||
|
write!(buf, r###"
|
||||||
|
Self::{variant} => &{:?},
|
||||||
|
"###, foreground)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.push_str(
|
||||||
|
r###"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn background(&self) -> Option<u8> {
|
||||||
|
match self {
|
||||||
|
"###,
|
||||||
|
);
|
||||||
|
|
||||||
|
for (variant, AsciiDistro { background, .. }) in &variants {
|
||||||
|
if let Some(b) = background {
|
||||||
|
write!(buf, r###"
|
||||||
|
Self::{variant} => Some({b}),
|
||||||
|
"###)?;
|
||||||
|
} else {
|
||||||
|
write!(buf, r###"
|
||||||
|
Self::{variant} => None,
|
||||||
|
"###)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.push_str(
|
||||||
|
r###"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn ascii_art(&self) -> &str {
|
pub fn ascii_art(&self) -> &str {
|
||||||
let art = match self {
|
let art = match self {
|
||||||
"###,
|
"###,
|
||||||
@@ -191,67 +266,35 @@ impl Distro {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parses ascii distros from neofetch script.
|
fn parse_ascii_distros(distro_dir: &Path) -> Result<Vec<AsciiDistro>>
|
||||||
fn parse_ascii_distros(neofetch_path: &Path) -> Result<Vec<AsciiDistro>>
|
|
||||||
{
|
{
|
||||||
let nf = {
|
let mut distros = Vec::new();
|
||||||
let nf = fs::read_to_string(neofetch_path)?;
|
let mut paths: Vec<_> = fs::read_dir(distro_dir)?
|
||||||
|
.filter_map(|e| e.ok())
|
||||||
|
.map(|e| e.path())
|
||||||
|
.collect();
|
||||||
|
paths.sort();
|
||||||
|
|
||||||
// Get the content of "get_distro_ascii" function
|
for path in paths {
|
||||||
let (_, nf) = nf
|
if path.extension().and_then(|s| s.to_str()) == Some("ascii") {
|
||||||
.split_once("get_distro_ascii() {\n")
|
let content = fs::read_to_string(&path)?;
|
||||||
.context("couldn't find get_distro_ascii function")?;
|
let (header_line, art) = content.split_once('\n').context("invalid distro file")?;
|
||||||
let (nf, _) = nf
|
let header: DistroHeader = serde_json::from_str(header_line)?;
|
||||||
.split_once("\n}\n")
|
let color = match header.color {
|
||||||
.context("couldn't find end of get_distro_ascii function")?;
|
serde_json::Value::String(s) => s,
|
||||||
|
serde_json::Value::Number(n) => n.to_string(),
|
||||||
let mut nf = nf.replace('\t', &" ".repeat(4));
|
_ => "7".to_owned(),
|
||||||
|
};
|
||||||
// Remove trailing spaces
|
distros.push(AsciiDistro {
|
||||||
while nf.contains(" \n") {
|
pattern: header.pattern,
|
||||||
nf = nf.replace(" \n", "\n");
|
color,
|
||||||
|
foreground: header.foreground.unwrap_or_default(),
|
||||||
|
background: header.background,
|
||||||
|
art: art.to_owned(),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
nf
|
|
||||||
};
|
|
||||||
|
|
||||||
let case_re = Regex::new(r"case .*? in\n")?;
|
|
||||||
let eof_re = Regex::new(r"EOF[ \n]*?;;")?;
|
|
||||||
|
|
||||||
// Split by blocks
|
|
||||||
let mut blocks = Vec::new();
|
|
||||||
for b in case_re.split(&nf) {
|
|
||||||
blocks.extend(eof_re.split(b).map(|sub| sub.trim()));
|
|
||||||
}
|
}
|
||||||
|
Ok(distros)
|
||||||
// Parse blocks
|
|
||||||
fn parse_block(block: &str) -> Option<AsciiDistro> {
|
|
||||||
let (block, art) = block.split_once("'EOF'\n")?;
|
|
||||||
|
|
||||||
// Join \
|
|
||||||
//
|
|
||||||
// > A <backslash> that is not quoted shall preserve the literal value of the
|
|
||||||
// > following character, with the exception of a <newline>. If a <newline>
|
|
||||||
// > follows the <backslash>, the shell shall interpret this as line
|
|
||||||
// > continuation. The <backslash> and <newline> shall be removed before
|
|
||||||
// > splitting the input into tokens. Since the escaped <newline> is removed
|
|
||||||
// > entirely from the input and is not replaced by any white space, it cannot
|
|
||||||
// > serve as a token separator.
|
|
||||||
// See https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02_01
|
|
||||||
let block = block.replace("\\\n", "");
|
|
||||||
|
|
||||||
// Get case pattern
|
|
||||||
let pattern = block
|
|
||||||
.split('\n')
|
|
||||||
.next()
|
|
||||||
.and_then(|pattern| pattern.trim().strip_suffix(')'))?;
|
|
||||||
|
|
||||||
// Unescape backslashes here because backslashes are escaped in neofetch
|
|
||||||
// for printf
|
|
||||||
let art = art.replace(r"\\", r"\");
|
|
||||||
|
|
||||||
Some(AsciiDistro { pattern: pattern.to_owned(), art })
|
|
||||||
}
|
|
||||||
Ok(blocks.iter().filter_map(|block| parse_block(block)).collect())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Preset parsing
|
// Preset parsing
|
||||||
|
|||||||
@@ -372,12 +372,7 @@ impl NormalizedAsciiArt {
|
|||||||
// Line starts with neofetch color code
|
// Line starts with neofetch color code
|
||||||
last = Some(&line[m.span()]);
|
last = Some(&line[m.span()]);
|
||||||
},
|
},
|
||||||
Some(_) => {
|
_ => {
|
||||||
new.push_str(last.context(
|
|
||||||
"failed to find neofetch color code from a previous line",
|
|
||||||
)?);
|
|
||||||
},
|
|
||||||
None => {
|
|
||||||
new.push_str(last.unwrap_or(NEOFETCH_COLOR_PATTERNS[0]));
|
new.push_str(last.unwrap_or(NEOFETCH_COLOR_PATTERNS[0]));
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -385,7 +380,6 @@ impl NormalizedAsciiArt {
|
|||||||
|
|
||||||
// Get the last placeholder for the next line
|
// Get the last placeholder for the next line
|
||||||
if let Some(m) = matches.last() {
|
if let Some(m) = matches.last() {
|
||||||
last.context("non-space character seen before first color code")?;
|
|
||||||
last = Some(&line[m.span()]);
|
last = Some(&line[m.span()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+350
-123
@@ -1,8 +1,9 @@
|
|||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::cmp;
|
use std::cmp;
|
||||||
|
use std::collections::HashMap;
|
||||||
use std::fmt::Write as _;
|
use std::fmt::Write as _;
|
||||||
use std::fs::{self, File};
|
use std::fs::{self, File};
|
||||||
use std::io::{self, IsTerminal as _, Read as _};
|
use std::io::{self, IsTerminal as _, Read as _, Write};
|
||||||
use std::iter;
|
use std::iter;
|
||||||
use std::iter::zip;
|
use std::iter::zip;
|
||||||
use std::num::NonZeroU8;
|
use std::num::NonZeroU8;
|
||||||
@@ -10,6 +11,8 @@ use std::path::{Path, PathBuf};
|
|||||||
|
|
||||||
use aho_corasick::AhoCorasick;
|
use aho_corasick::AhoCorasick;
|
||||||
use anyhow::{Context as _, Result};
|
use anyhow::{Context as _, Result};
|
||||||
|
use crossterm::event::{self, Event, KeyCode, KeyEventKind, KeyModifiers};
|
||||||
|
use crossterm::terminal::{disable_raw_mode, enable_raw_mode};
|
||||||
use deranged::RangedU8;
|
use deranged::RangedU8;
|
||||||
use enterpolation::bspline::BSpline;
|
use enterpolation::bspline::BSpline;
|
||||||
use enterpolation::{Curve as _, Generator as _};
|
use enterpolation::{Curve as _, Generator as _};
|
||||||
@@ -21,7 +24,7 @@ use hyfetch::color_util::{
|
|||||||
NeofetchAsciiIndexedColor, PresetIndexedColor, Theme as _, ToAnsiString as _,
|
NeofetchAsciiIndexedColor, PresetIndexedColor, Theme as _, ToAnsiString as _,
|
||||||
};
|
};
|
||||||
use hyfetch::distros::Distro;
|
use hyfetch::distros::Distro;
|
||||||
use hyfetch::models::Config;
|
use hyfetch::models::{build_hex_color_profile, Config, PresetValue};
|
||||||
#[cfg(feature = "macchina")]
|
#[cfg(feature = "macchina")]
|
||||||
use hyfetch::neofetch_util::macchina_path;
|
use hyfetch::neofetch_util::macchina_path;
|
||||||
use hyfetch::neofetch_util::{self, add_pkg_path, fastfetch_path, get_distro_ascii, get_distro_name, literal_input, ColorAlignment, NEOFETCH_COLORS_AC, NEOFETCH_COLOR_PATTERNS, TEST_ASCII};
|
use hyfetch::neofetch_util::{self, add_pkg_path, fastfetch_path, get_distro_ascii, get_distro_name, literal_input, ColorAlignment, NEOFETCH_COLORS_AC, NEOFETCH_COLOR_PATTERNS, TEST_ASCII};
|
||||||
@@ -52,6 +55,16 @@ fn main() -> Result<()> {
|
|||||||
|
|
||||||
let options = options().run();
|
let options = options().run();
|
||||||
|
|
||||||
|
// Read ascii file first to avoid any issues with file descriptors being closed by other operations, and to allow CLI arguments to override config. (https://github.com/hykilpikonna/hyfetch/issues/475)
|
||||||
|
let cli_ascii = if let Some(path) = &options.ascii_file {
|
||||||
|
Some(RawAsciiArt {
|
||||||
|
asc: fs::read_to_string(path).with_context(|| format!("failed to read ascii from {path:?}"))?,
|
||||||
|
fg: Vec::new(),
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
let debug_mode = options.debug;
|
let debug_mode = options.debug;
|
||||||
|
|
||||||
init_tracing_subsriber(debug_mode).context("failed to init tracing subscriber")?;
|
init_tracing_subsriber(debug_mode).context("failed to init tracing subscriber")?;
|
||||||
@@ -123,43 +136,61 @@ fn main() -> Result<()> {
|
|||||||
let backend = options.backend.unwrap_or(config.backend);
|
let backend = options.backend.unwrap_or(config.backend);
|
||||||
let args = options.args.as_ref().or(config.args.as_ref());
|
let args = options.args.as_ref().or(config.args.as_ref());
|
||||||
|
|
||||||
fn parse_preset_string(preset_string: &str) -> Result<ColorProfile> {
|
fn parse_preset_string(preset_string: &str, config: &Config) -> Result<ColorProfile> {
|
||||||
if preset_string.contains('#') {
|
if preset_string.contains('#') {
|
||||||
let colors: Vec<&str> = preset_string.split(',').map(|s| s.trim()).collect();
|
let colors: Vec<String> = preset_string
|
||||||
for color in &colors {
|
.split(',')
|
||||||
if !color.starts_with('#') ||
|
.map(|s| s.trim().to_owned())
|
||||||
(color.len() != 4 && color.len() != 7) ||
|
.collect();
|
||||||
!color[1..].chars().all(|c| c.is_ascii_hexdigit()) {
|
let color_profile = build_hex_color_profile(&colors)
|
||||||
return Err(anyhow::anyhow!("invalid hex color: {}", color));
|
.context("failed to create color profile from hex")?;
|
||||||
}
|
return Ok(color_profile);
|
||||||
}
|
}
|
||||||
ColorProfile::from_hex_colors(colors)
|
|
||||||
.context("failed to create color profile from hex")
|
let mut preset_profiles: HashMap<String, ColorProfile> = <Preset as VariantArray>::VARIANTS
|
||||||
} else if preset_string == "random" {
|
.iter()
|
||||||
|
.map(|preset| (preset.as_ref().to_owned(), preset.color_profile()))
|
||||||
|
.collect();
|
||||||
|
preset_profiles.extend(config.custom_preset_profiles()?);
|
||||||
|
|
||||||
|
if preset_string.contains(',') {
|
||||||
|
let presets: Vec<&str> = preset_string.split(',').map(|s| s.trim()).collect();
|
||||||
let mut rng = fastrand::Rng::new();
|
let mut rng = fastrand::Rng::new();
|
||||||
let preset = *rng
|
let selected_index = rng.usize(0..presets.len());
|
||||||
.choice(<Preset as VariantArray>::VARIANTS)
|
return parse_preset_string(presets[selected_index], config);
|
||||||
.expect("preset iterator should not be empty");
|
}
|
||||||
Ok(preset.color_profile())
|
|
||||||
|
if preset_string == "random" {
|
||||||
|
let presets: Vec<ColorProfile> = preset_profiles.values().cloned().collect();
|
||||||
|
if presets.is_empty() {
|
||||||
|
return Err(anyhow::anyhow!("preset iterator should not be empty"));
|
||||||
|
}
|
||||||
|
let mut rng = fastrand::Rng::new();
|
||||||
|
let selected_index = rng.usize(0..presets.len());
|
||||||
|
return Ok(presets[selected_index].clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(color_profile) = preset_profiles.get(preset_string) {
|
||||||
|
Ok(color_profile.clone())
|
||||||
} else {
|
} else {
|
||||||
use std::str::FromStr;
|
let presets = preset_profiles
|
||||||
let preset = Preset::from_str(preset_string)
|
.keys()
|
||||||
.with_context(|| {
|
.map(String::as_str)
|
||||||
format!(
|
.chain(iter::once("random"))
|
||||||
"PRESET should be comma-separated hex colors or one of {{{presets}}}",
|
.sorted()
|
||||||
presets = <Preset as VariantNames>::VARIANTS
|
.join(",");
|
||||||
.iter()
|
Err(anyhow::anyhow!(
|
||||||
.chain(iter::once(&"random"))
|
"PRESET should be comma-separated hex colors or one of {{{presets}}}"
|
||||||
.join(",")
|
))
|
||||||
)
|
|
||||||
})?;
|
|
||||||
Ok(preset.color_profile())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get preset
|
// Get preset
|
||||||
let preset_string = options.preset.as_deref().unwrap_or(&config.preset);
|
let preset_string = options
|
||||||
let color_profile = parse_preset_string(preset_string)?;
|
.preset
|
||||||
|
.clone()
|
||||||
|
.unwrap_or_else(|| config.preset.get_random_if_multiple());
|
||||||
|
let color_profile = parse_preset_string(&preset_string, &config)?;
|
||||||
debug!(?color_profile, "color profile");
|
debug!(?color_profile, "color profile");
|
||||||
|
|
||||||
// Lighten
|
// Lighten
|
||||||
@@ -177,19 +208,15 @@ fn main() -> Result<()> {
|
|||||||
};
|
};
|
||||||
debug!(?color_profile, "lightened color profile");
|
debug!(?color_profile, "lightened color profile");
|
||||||
|
|
||||||
let asc = if let Some(path_str) = config.custom_ascii_path {
|
let asc = if let Some(asc) = cli_ascii {
|
||||||
|
asc
|
||||||
|
} else if let Some(path_str) = config.custom_ascii_path {
|
||||||
let path = PathBuf::from(path_str);
|
let path = PathBuf::from(path_str);
|
||||||
RawAsciiArt {
|
RawAsciiArt {
|
||||||
asc: fs::read_to_string(&path)
|
asc: fs::read_to_string(&path)
|
||||||
.with_context(|| format!("failed to read ascii from {path:?}"))?,
|
.with_context(|| format!("failed to read ascii from {path:?}"))?,
|
||||||
fg: Vec::new(),
|
fg: Vec::new(),
|
||||||
}
|
}
|
||||||
} else if let Some(path) = options.ascii_file {
|
|
||||||
RawAsciiArt {
|
|
||||||
asc: fs::read_to_string(&path)
|
|
||||||
.with_context(|| format!("failed to read ascii from {path:?}"))?,
|
|
||||||
fg: Vec::new(),
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
get_distro_ascii(distro, backend).context("failed to get distro ascii")?
|
get_distro_ascii(distro, backend).context("failed to get distro ascii")?
|
||||||
};
|
};
|
||||||
@@ -241,15 +268,15 @@ fn det_bg() -> Result<Option<Srgb<u8>>, terminal_colorsaurus::Error> {
|
|||||||
return Ok(None);
|
return Ok(None);
|
||||||
}
|
}
|
||||||
|
|
||||||
background_color(QueryOptions::default())
|
match background_color(QueryOptions::default()) {
|
||||||
.map(|terminal_colorsaurus::Color { r, g, b , .. }| Some(Srgb::new(r, g, b).into_format()))
|
Ok(terminal_colorsaurus::Color { r, g, b, .. }) => {
|
||||||
.or_else(|err| {
|
Ok(Some(Srgb::new(r, g, b).into_format()))
|
||||||
if matches!(err, terminal_colorsaurus::Error::UnsupportedTerminal(_)) {
|
}
|
||||||
Ok(None)
|
Err(err) => {
|
||||||
} else {
|
debug!(?err, "failed to detect background color");
|
||||||
Err(err)
|
Ok(None)
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates config interactively.
|
/// Creates config interactively.
|
||||||
@@ -447,6 +474,40 @@ fn create_config(
|
|||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
// 3. Choose preset
|
// 3. Choose preset
|
||||||
|
|
||||||
|
struct RawModeGuard {
|
||||||
|
enabled: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RawModeGuard {
|
||||||
|
fn new() -> Result<Self> {
|
||||||
|
Ok(Self { enabled: false })
|
||||||
|
}
|
||||||
|
|
||||||
|
fn enable(&mut self) -> Result<()> {
|
||||||
|
if !self.enabled {
|
||||||
|
enable_raw_mode().context("failed to enable terminal raw mode")?;
|
||||||
|
self.enabled = true;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn disable(&mut self) -> Result<()> {
|
||||||
|
if self.enabled {
|
||||||
|
disable_raw_mode().context("failed to disable terminal raw mode")?;
|
||||||
|
self.enabled = false;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Drop for RawModeGuard {
|
||||||
|
fn drop(&mut self) {
|
||||||
|
if self.enabled {
|
||||||
|
let _ = disable_raw_mode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Create flag lines
|
// Create flag lines
|
||||||
let mut flags = Vec::with_capacity(Preset::COUNT);
|
let mut flags = Vec::with_capacity(Preset::COUNT);
|
||||||
let spacing = {
|
let spacing = {
|
||||||
@@ -473,7 +534,11 @@ fn create_config(
|
|||||||
name = preset.as_ref(),
|
name = preset.as_ref(),
|
||||||
spacing = usize::from(spacing)
|
spacing = usize::from(spacing)
|
||||||
);
|
);
|
||||||
flags.push([name, flag.clone(), flag.clone(), flag]);
|
flags.push((
|
||||||
|
preset.clone(),
|
||||||
|
[name, flag.clone(), flag.clone(), flag],
|
||||||
|
preset.as_ref().to_ascii_lowercase(),
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate flags per row
|
// Calculate flags per row
|
||||||
@@ -483,34 +548,28 @@ fn create_config(
|
|||||||
let rows_per_page = (term_h.saturating_sub(13) / 5).clamp(1, u8::MAX.into()) as u8;
|
let rows_per_page = (term_h.saturating_sub(13) / 5).clamp(1, u8::MAX.into()) as u8;
|
||||||
(flags_per_row, rows_per_page)
|
(flags_per_row, rows_per_page)
|
||||||
};
|
};
|
||||||
let num_pages = (Preset::COUNT.div_ceil(flags_per_row as usize * rows_per_page as usize)).clamp(0, u8::MAX.into()) as u8;
|
let flags_per_page = usize::from(flags_per_row) * usize::from(rows_per_page);
|
||||||
|
|
||||||
// Create pages
|
fn filter_flag_indices(query: &str, flags: &[(Preset, [String; 4], String)]) -> Vec<usize> {
|
||||||
let mut pages = Vec::with_capacity(usize::from(num_pages));
|
if query.is_empty() {
|
||||||
for flags in flags.chunks(usize::from(
|
return (0..flags.len()).collect();
|
||||||
u16::from(flags_per_row)
|
|
||||||
.checked_mul(u16::from(rows_per_page))
|
|
||||||
.unwrap(),
|
|
||||||
)) {
|
|
||||||
let mut page = Vec::with_capacity(usize::from(rows_per_page));
|
|
||||||
for flags in flags.chunks(usize::from(flags_per_row)) {
|
|
||||||
page.push(flags);
|
|
||||||
}
|
}
|
||||||
pages.push(page);
|
|
||||||
|
let mut matched = flags
|
||||||
|
.iter()
|
||||||
|
.enumerate()
|
||||||
|
.filter_map(|(idx, (_, _, preset_name))| {
|
||||||
|
let position = preset_name.find(query)?;
|
||||||
|
Some((idx, preset_name.starts_with(query), position))
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
// Prefix matches are shown first, then other substring matches ordered by earliest index.
|
||||||
|
matched.sort_by_key(|&(idx, is_prefix, position)| (!is_prefix, position, idx));
|
||||||
|
matched.into_iter().map(|(idx, _, _)| idx).collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
let print_flag_page = |page, page_num: u8| -> Result<()> {
|
fn print_flag_row(row: &[&[String; 4]], color_mode: AnsiMode) -> Result<()> {
|
||||||
clear_screen(Some(&title), color_mode, debug_mode).context("failed to clear screen")?;
|
|
||||||
print_title_prompt(option_counter, "Let's choose a flag!");
|
|
||||||
println!("Available flag presets:\nPage: {page_num} of {num_pages}\n", page_num = page_num + 1);
|
|
||||||
for &row in page {
|
|
||||||
print_flag_row(row, color_mode).context("failed to print flag row")?;
|
|
||||||
}
|
|
||||||
println!();
|
|
||||||
Ok(())
|
|
||||||
};
|
|
||||||
|
|
||||||
fn print_flag_row(row: &[[String; 4]], color_mode: AnsiMode) -> Result<()> {
|
|
||||||
for i in 0..4 {
|
for i in 0..4 {
|
||||||
let mut line = Vec::new();
|
let mut line = Vec::new();
|
||||||
for flag in row {
|
for flag in row {
|
||||||
@@ -533,50 +592,214 @@ fn create_config(
|
|||||||
)
|
)
|
||||||
.expect("coloring text with default preset should not fail");
|
.expect("coloring text with default preset should not fail");
|
||||||
|
|
||||||
let preset: Preset;
|
let print_flag_page = |filtered_indices: &[usize],
|
||||||
let color_profile;
|
page_num: usize,
|
||||||
|
filter: &str,
|
||||||
|
hint: Option<&str>|
|
||||||
|
-> Result<()> {
|
||||||
|
let num_pages = filtered_indices.len().div_ceil(flags_per_page).max(1);
|
||||||
|
clear_screen(Some(&title), color_mode, debug_mode).context("failed to clear screen")?;
|
||||||
|
print_title_prompt(option_counter, "Let's choose a flag!");
|
||||||
|
println!(
|
||||||
|
"Available flag presets:\nPage: {page} of {num_pages}\n",
|
||||||
|
page = page_num + 1
|
||||||
|
);
|
||||||
|
|
||||||
let mut page: u8 = 0;
|
let start = page_num * flags_per_page;
|
||||||
loop {
|
let end = (start + flags_per_page).min(filtered_indices.len());
|
||||||
print_flag_page(&pages[usize::from(page)], page).context("failed to print flag page")?;
|
let mut visible_rows: usize = 0;
|
||||||
|
if start >= end {
|
||||||
|
println!("No presets matched this filter.");
|
||||||
|
} else {
|
||||||
|
for row in filtered_indices[start..end].chunks(usize::from(flags_per_row)) {
|
||||||
|
let row = row
|
||||||
|
.iter()
|
||||||
|
.map(|&idx| &flags[idx].1)
|
||||||
|
.collect::<Vec<&[String; 4]>>();
|
||||||
|
print_flag_row(&row, color_mode).context("failed to print flag row")?;
|
||||||
|
visible_rows += 1;
|
||||||
|
}
|
||||||
|
println!();
|
||||||
|
}
|
||||||
|
// Keep the prompt anchored by reserving a full page worth of flag rows.
|
||||||
|
for _ in visible_rows..usize::from(rows_per_page) {
|
||||||
|
for _ in 0..5 {
|
||||||
|
println!();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let mut opts: Vec<&str> = <Preset as VariantNames>::VARIANTS.into();
|
println!(
|
||||||
opts.extend(["next", "n", "prev", "p"]);
|
"Use the up/down arrow keys to go to the previous/next page. Type to filter and press Enter to select."
|
||||||
|
);
|
||||||
println!("Enter '[n]ext' to go to the next page and '[p]rev' to go to the previous page.");
|
printc(
|
||||||
let selection = literal_input(
|
format!(
|
||||||
format!("Which {preset_default_colored} do you want to use? "),
|
"Which {preset_default_colored} do you want to use? (default: {}, comma-separated for multiple at random)",
|
||||||
&opts[..],
|
Preset::Rainbow.as_ref()
|
||||||
Preset::Rainbow.as_ref(),
|
),
|
||||||
false,
|
|
||||||
color_mode,
|
color_mode,
|
||||||
)
|
)
|
||||||
.context("failed to ask for choice input")
|
.context("failed to print preset prompt")?;
|
||||||
.context("failed to select preset")?;
|
print!("> {filter}");
|
||||||
if selection == "next" || selection == "n" {
|
io::stdout().flush().context("failed to flush preset prompt")?;
|
||||||
page = (page + 1) % num_pages;
|
|
||||||
} else if selection == "prev" || selection == "p" {
|
if let Some(hint) = hint {
|
||||||
page = (page + num_pages - 1) % num_pages;
|
println!("\n{hint}");
|
||||||
} else {
|
|
||||||
preset = selection.parse().expect("selected preset should be valid");
|
|
||||||
debug!(?preset, "selected preset");
|
|
||||||
color_profile = preset.color_profile();
|
|
||||||
update_title(
|
|
||||||
&mut title,
|
|
||||||
&mut option_counter,
|
|
||||||
"Selected flag",
|
|
||||||
&color_profile
|
|
||||||
.with_lightness_adaptive(default_lightness, theme)
|
|
||||||
.color_text(
|
|
||||||
preset.as_ref(),
|
|
||||||
color_mode,
|
|
||||||
ForegroundBackground::Foreground,
|
|
||||||
false,
|
|
||||||
)
|
|
||||||
.expect("coloring text with selected preset should not fail"),
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
Ok(())
|
||||||
|
};
|
||||||
|
|
||||||
|
let selected_preset_names: Vec<String>;
|
||||||
|
let color_profile;
|
||||||
|
|
||||||
|
let mut page: usize = 0;
|
||||||
|
let mut filter = String::new();
|
||||||
|
let mut hint: Option<&str> = None;
|
||||||
|
let mut raw_mode = RawModeGuard::new().context("failed to initialize raw input mode")?;
|
||||||
|
loop {
|
||||||
|
raw_mode
|
||||||
|
.disable()
|
||||||
|
.context("failed to disable raw mode for rendering")?;
|
||||||
|
let filter_lower = filter.to_ascii_lowercase();
|
||||||
|
let parts: Vec<&str> = filter_lower.split(',').collect();
|
||||||
|
let current_query = parts.last().cloned().unwrap_or("");
|
||||||
|
let filtered_indices = filter_flag_indices(current_query, &flags);
|
||||||
|
let num_pages = filtered_indices.len().div_ceil(flags_per_page).max(1);
|
||||||
|
page = page.min(num_pages - 1);
|
||||||
|
|
||||||
|
print_flag_page(&filtered_indices, page, &filter, hint)
|
||||||
|
.context("failed to print flag page")?;
|
||||||
|
hint = None;
|
||||||
|
|
||||||
|
raw_mode
|
||||||
|
.enable()
|
||||||
|
.context("failed to enable raw mode for key input")?;
|
||||||
|
let event = event::read().context("failed to read keyboard event")?;
|
||||||
|
let Event::Key(key) = event else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
if !matches!(key.kind, KeyEventKind::Press | KeyEventKind::Repeat) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
match key.code {
|
||||||
|
KeyCode::Enter => {
|
||||||
|
let filter_lower = filter.to_ascii_lowercase();
|
||||||
|
let parts: Vec<&str> = filter_lower.split(',').map(|s| s.trim()).filter(|s| !s.is_empty()).collect();
|
||||||
|
let mut resolved_presets = Vec::new();
|
||||||
|
|
||||||
|
if parts.is_empty() {
|
||||||
|
// Default to Rainbow if nothing is entered
|
||||||
|
resolved_presets.push(Preset::Rainbow.as_ref().to_owned());
|
||||||
|
} else {
|
||||||
|
for part in parts.iter() {
|
||||||
|
let selection = flags
|
||||||
|
.iter()
|
||||||
|
.find(|(_, _, name)| name == part)
|
||||||
|
.map(|(preset, _, _)| preset.as_ref().to_owned())
|
||||||
|
.or_else(|| {
|
||||||
|
// Fuzzy match each part
|
||||||
|
let filtered = filter_flag_indices(part, &flags);
|
||||||
|
filtered.first().map(|&idx| flags[idx].0.as_ref().to_owned())
|
||||||
|
});
|
||||||
|
|
||||||
|
if let Some(p) = selection {
|
||||||
|
resolved_presets.push(p);
|
||||||
|
} else {
|
||||||
|
hint = Some("One or more presets could not be found.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if hint.is_none() {
|
||||||
|
selected_preset_names = resolved_presets;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
KeyCode::Up => {
|
||||||
|
page = (page + num_pages - 1) % num_pages;
|
||||||
|
},
|
||||||
|
KeyCode::Down => {
|
||||||
|
page = (page + 1) % num_pages;
|
||||||
|
},
|
||||||
|
KeyCode::Backspace => {
|
||||||
|
filter.pop();
|
||||||
|
page = 0;
|
||||||
|
},
|
||||||
|
KeyCode::Esc => {
|
||||||
|
filter.clear();
|
||||||
|
page = 0;
|
||||||
|
},
|
||||||
|
KeyCode::Char('c') if key.modifiers.contains(KeyModifiers::CONTROL) => {
|
||||||
|
raw_mode
|
||||||
|
.disable()
|
||||||
|
.context("failed to disable raw mode before interrupting")?;
|
||||||
|
println!();
|
||||||
|
return Err(anyhow::anyhow!("interrupted by user"));
|
||||||
|
},
|
||||||
|
KeyCode::Char(c)
|
||||||
|
if !key.modifiers.contains(KeyModifiers::CONTROL)
|
||||||
|
&& !key.modifiers.contains(KeyModifiers::ALT) =>
|
||||||
|
{
|
||||||
|
filter.push(c);
|
||||||
|
page = 0;
|
||||||
|
},
|
||||||
|
_ => {},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
raw_mode
|
||||||
|
.disable()
|
||||||
|
.context("failed to disable raw mode after preset selection")?;
|
||||||
|
|
||||||
|
let selected_presets = if selected_preset_names.len() > 1 {
|
||||||
|
PresetValue::Multiple(selected_preset_names.clone())
|
||||||
|
} else {
|
||||||
|
PresetValue::Single(selected_preset_names.first().cloned().unwrap_or_else(|| Preset::Rainbow.as_ref().to_owned()))
|
||||||
|
};
|
||||||
|
|
||||||
|
color_profile = {
|
||||||
|
let first_name = selected_preset_names.first().cloned().unwrap_or_else(|| Preset::Rainbow.as_ref().to_owned());
|
||||||
|
if first_name.contains('#') {
|
||||||
|
let colors: Vec<String> = first_name.split(',').map(|s| s.trim().to_owned()).collect();
|
||||||
|
build_hex_color_profile(&colors).expect("hex colors should be valid")
|
||||||
|
} else {
|
||||||
|
flags.iter().find(|(_, _, name)| name == &first_name).map(|(p, _, _)| p.color_profile()).unwrap_or_else(|| Preset::Rainbow.color_profile())
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
{
|
||||||
|
let colored_names = selected_preset_names.iter().map(|name| {
|
||||||
|
let profile = if name.contains('#') {
|
||||||
|
let colors: Vec<String> = name.split(',').map(|s| s.trim().to_owned()).collect();
|
||||||
|
build_hex_color_profile(&colors).expect("hex colors should be valid")
|
||||||
|
} else {
|
||||||
|
flags.iter().find(|(_, _, n)| n == name).map(|(p, _, _)| p.color_profile()).unwrap_or_else(|| Preset::Rainbow.color_profile())
|
||||||
|
};
|
||||||
|
profile.with_lightness_adaptive(default_lightness, theme)
|
||||||
|
.color_text(name, color_mode, ForegroundBackground::Foreground, false)
|
||||||
|
.expect("coloring text should not fail")
|
||||||
|
}).join(", ");
|
||||||
|
|
||||||
|
let label = if selected_preset_names.len() > 1 {
|
||||||
|
"Selected flags (random)"
|
||||||
|
} else {
|
||||||
|
"Selected flag"
|
||||||
|
};
|
||||||
|
|
||||||
|
update_title(
|
||||||
|
&mut title,
|
||||||
|
&mut option_counter,
|
||||||
|
label,
|
||||||
|
&colored_names,
|
||||||
|
);
|
||||||
|
|
||||||
|
printc(
|
||||||
|
format!(
|
||||||
|
"Which {preset_default_colored} do you want to use? {}\n",
|
||||||
|
colored_names
|
||||||
|
),
|
||||||
|
color_mode,
|
||||||
|
)
|
||||||
|
.context("failed to print preset selection summary")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
@@ -938,16 +1161,19 @@ fn create_config(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Save choice
|
// Save choice
|
||||||
color_align = arrangements
|
color_align = if choice == "horizontal" { ColorAlignment::Horizontal }
|
||||||
.into_iter()
|
else if choice == "vertical" { ColorAlignment::Vertical }
|
||||||
.find_map(|(k, ca)| {
|
else {
|
||||||
if k.to_lowercase() == choice {
|
arrangements.into_iter()
|
||||||
Some(ca)
|
.find_map(|(k, ca)| {
|
||||||
} else {
|
if k.to_lowercase() == choice {
|
||||||
None
|
Some(ca)
|
||||||
}
|
} else {
|
||||||
})
|
None
|
||||||
.expect("selected color alignment should be valid");
|
}
|
||||||
|
})
|
||||||
|
.expect("selected color alignment is not valid") // TODO: it sould ask the user to retry instead of panicking
|
||||||
|
};
|
||||||
debug!(?color_align, "selected color alignment");
|
debug!(?color_align, "selected color alignment");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1054,7 +1280,7 @@ fn create_config(
|
|||||||
// Create config
|
// Create config
|
||||||
clear_screen(Some(&title), color_mode, debug_mode).context("failed to clear screen")?;
|
clear_screen(Some(&title), color_mode, debug_mode).context("failed to clear screen")?;
|
||||||
let config = Config {
|
let config = Config {
|
||||||
preset: preset.as_ref().to_string(),
|
preset: selected_presets,
|
||||||
mode: color_mode,
|
mode: color_mode,
|
||||||
light_dark: Some(theme),
|
light_dark: Some(theme),
|
||||||
auto_detect_light_dark: Some(det_bg.is_some()),
|
auto_detect_light_dark: Some(det_bg.is_some()),
|
||||||
@@ -1065,6 +1291,7 @@ fn create_config(
|
|||||||
distro: logo_chosen,
|
distro: logo_chosen,
|
||||||
pride_month_disable: false,
|
pride_month_disable: false,
|
||||||
custom_ascii_path,
|
custom_ascii_path,
|
||||||
|
custom_presets: None,
|
||||||
};
|
};
|
||||||
debug!(?config, "created config");
|
debug!(?config, "created config");
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ pub fn options() -> OptionParser<Options> {
|
|||||||
let preset = long("preset")
|
let preset = long("preset")
|
||||||
.short('p')
|
.short('p')
|
||||||
.help(&*format!(
|
.help(&*format!(
|
||||||
"Use preset or comma-separated color list or comma-separated hex colors (e.g., \"#ff0000,#00ff00,#0000ff\")
|
"Use preset or comma-separated color list or comma-separated hex colors (e.g., \"#ff0000,#00ff00,#0000ff\"). Comma-separated preset names will pick one randomly.
|
||||||
PRESET={{{presets}}}",
|
PRESET={{{presets}}}",
|
||||||
presets = <Preset as VariantNames>::VARIANTS
|
presets = <Preset as VariantNames>::VARIANTS
|
||||||
.iter()
|
.iter()
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
use anyhow::{Context as _, Result};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use crate::color_profile::ColorProfile;
|
||||||
use crate::color_util::Lightness;
|
use crate::color_util::Lightness;
|
||||||
use crate::neofetch_util::ColorAlignment;
|
use crate::neofetch_util::ColorAlignment;
|
||||||
use crate::types::{AnsiMode, Backend, TerminalTheme};
|
use crate::types::{AnsiMode, Backend, TerminalTheme};
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
pub preset: String,
|
pub preset: PresetValue,
|
||||||
pub mode: AnsiMode,
|
pub mode: AnsiMode,
|
||||||
pub auto_detect_light_dark: Option<bool>,
|
pub auto_detect_light_dark: Option<bool>,
|
||||||
pub light_dark: Option<TerminalTheme>,
|
pub light_dark: Option<TerminalTheme>,
|
||||||
@@ -19,6 +23,7 @@ pub struct Config {
|
|||||||
pub distro: Option<String>,
|
pub distro: Option<String>,
|
||||||
pub pride_month_disable: bool,
|
pub pride_month_disable: bool,
|
||||||
pub custom_ascii_path: Option<String>,
|
pub custom_ascii_path: Option<String>,
|
||||||
|
pub custom_presets: Option<HashMap<String, Vec<String>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Config {
|
impl Config {
|
||||||
@@ -32,6 +37,40 @@ impl Config {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn custom_preset_profiles(&self) -> Result<HashMap<String, ColorProfile>> {
|
||||||
|
let mut profiles = HashMap::new();
|
||||||
|
if let Some(custom_presets) = &self.custom_presets {
|
||||||
|
for (preset_name, colors) in custom_presets {
|
||||||
|
if preset_name == "random" {
|
||||||
|
return Err(anyhow::anyhow!("custom preset key `random` is reserved"));
|
||||||
|
}
|
||||||
|
let color_profile = build_hex_color_profile(colors).with_context(|| {
|
||||||
|
format!("failed to validate custom preset key `{preset_name}`")
|
||||||
|
})?;
|
||||||
|
profiles.insert(preset_name.clone(), color_profile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(profiles)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn build_hex_color_profile(hex_colors: &[String]) -> Result<ColorProfile> {
|
||||||
|
if hex_colors.is_empty() {
|
||||||
|
return Err(anyhow::anyhow!("hex color list cannot be empty"));
|
||||||
|
}
|
||||||
|
|
||||||
|
for color in hex_colors {
|
||||||
|
if !color.starts_with('#')
|
||||||
|
|| (color.len() != 4 && color.len() != 7)
|
||||||
|
|| !color[1..].chars().all(|c| c.is_ascii_hexdigit())
|
||||||
|
{
|
||||||
|
return Err(anyhow::anyhow!("invalid hex color: {color}"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ColorProfile::from_hex_colors(hex_colors.to_vec())
|
||||||
|
.context("failed to create color profile from hex")
|
||||||
}
|
}
|
||||||
|
|
||||||
mod args_serde {
|
mod args_serde {
|
||||||
@@ -117,3 +156,33 @@ mod args_serde {
|
|||||||
deserializer.deserialize_option(OptionVisitor)
|
deserializer.deserialize_option(OptionVisitor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||||
|
#[serde(untagged)]
|
||||||
|
pub enum PresetValue {
|
||||||
|
Single(String),
|
||||||
|
Multiple(Vec<String>),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<String> for PresetValue {
|
||||||
|
fn from(s: String) -> Self {
|
||||||
|
PresetValue::Single(s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PresetValue {
|
||||||
|
pub fn get_random_if_multiple(&self) -> String {
|
||||||
|
match self {
|
||||||
|
PresetValue::Single(s) => s.clone(),
|
||||||
|
PresetValue::Multiple(v) => {
|
||||||
|
if v.is_empty() {
|
||||||
|
"random".to_owned()
|
||||||
|
} else {
|
||||||
|
let mut rng = fastrand::Rng::new();
|
||||||
|
let selected_index = rng.usize(0..v.len());
|
||||||
|
v[selected_index].clone()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,7 +2,9 @@ use std::borrow::Cow;
|
|||||||
use std::ffi::OsStr;
|
use std::ffi::OsStr;
|
||||||
#[cfg(feature = "macchina")]
|
#[cfg(feature = "macchina")]
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::io::{self, Write as _};
|
use std::io::{Write as _};
|
||||||
|
#[cfg(windows)]
|
||||||
|
use std::io::{self};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
use std::sync::OnceLock;
|
use std::sync::OnceLock;
|
||||||
@@ -153,7 +155,13 @@ pub fn add_pkg_path() -> Result<()> {
|
|||||||
// Get PATH
|
// Get PATH
|
||||||
let pv = &env::var_os("PATH").context("`PATH` env var is not set or invalid")?;
|
let pv = &env::var_os("PATH").context("`PATH` env var is not set or invalid")?;
|
||||||
let mut path = env::split_paths(pv).collect::<Vec<_>>();
|
let mut path = env::split_paths(pv).collect::<Vec<_>>();
|
||||||
let exe = env::current_exe().context("failed to get path of current running executable")?;
|
let exe = match env::current_exe() {
|
||||||
|
Ok(exe) => exe,
|
||||||
|
Err(e) => {
|
||||||
|
debug!("Failed to get path of current running executable: {}", e);
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
};
|
||||||
let base = exe.parent().unwrap();
|
let base = exe.parent().unwrap();
|
||||||
|
|
||||||
// Add from bin: ../git, ../fastfetch, ../scripts
|
// Add from bin: ../git, ../fastfetch, ../scripts
|
||||||
@@ -233,27 +241,27 @@ pub fn get_distro_ascii<S>(distro: Option<S>, backend: Backend) -> Result<RawAsc
|
|||||||
where
|
where
|
||||||
S: AsRef<str> + fmt::Debug,
|
S: AsRef<str> + fmt::Debug,
|
||||||
{
|
{
|
||||||
let distro: Cow<_> = if let Some(distro) = distro.as_ref() {
|
let distro_name: Cow<_> = if let Some(distro) = distro.as_ref() {
|
||||||
distro.as_ref().into()
|
distro.as_ref().into()
|
||||||
} else {
|
} else {
|
||||||
get_distro_name(backend)
|
get_distro_name(backend)
|
||||||
.context("failed to get distro name")?
|
.context("failed to get distro name")?
|
||||||
.into()
|
.into()
|
||||||
};
|
};
|
||||||
debug!(%distro, "distro name");
|
debug!(%distro_name, "distro name");
|
||||||
|
|
||||||
// Try new codegen-based detection method
|
// Try new codegen-based detection method
|
||||||
if let Some(distro) = Distro::detect(&distro) {
|
if let Some(distro) = Distro::detect(&distro_name) {
|
||||||
let asc = distro.ascii_art().to_owned();
|
let asc = distro.ascii_art().to_owned();
|
||||||
let fg = ascii_foreground(&distro);
|
let fg = ascii_foreground(&distro);
|
||||||
|
|
||||||
return Ok(RawAsciiArt { asc, fg });
|
return Ok(RawAsciiArt { asc, fg });
|
||||||
}
|
}
|
||||||
|
|
||||||
debug!(%distro, "could not find a match for distro; falling back to neofetch");
|
debug!(%distro_name, "could not find a match for distro; falling back to neofetch");
|
||||||
|
|
||||||
// Old detection method that calls neofetch
|
// Old detection method that calls neofetch
|
||||||
let asc = run_neofetch_command_piped(&["print_ascii", "--ascii_distro", distro.as_ref()])
|
let asc = run_neofetch_command_piped(&["print_ascii", "--ascii_distro", distro_name.as_ref()])
|
||||||
.context("failed to get ascii art from neofetch")?;
|
.context("failed to get ascii art from neofetch")?;
|
||||||
|
|
||||||
// Unescape backslashes here because backslashes are escaped in neofetch for
|
// Unescape backslashes here because backslashes are escaped in neofetch for
|
||||||
@@ -314,31 +322,53 @@ where
|
|||||||
/// Gets the absolute path of the bash command.
|
/// Gets the absolute path of the bash command.
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
fn bash_path() -> Result<PathBuf> {
|
fn bash_path() -> Result<PathBuf> {
|
||||||
// Find `bash.exe` in `PATH`, but exclude the known bad paths
|
// 1. Try to find a good bash.exe in PATH
|
||||||
if let Some(bash_path) = find_in_path("bash.exe").context("bash.exe not found")? {
|
let bash_in_path = find_in_path("bash.exe").unwrap_or(None);
|
||||||
// Check if it's not MSYS bash https://stackoverflow.com/a/58418686/1529493
|
if let Some(pth) = &bash_in_path {
|
||||||
if !bash_path.ends_with(r"Git\usr\bin\bash.exe") {
|
// Check if it's not WSL bash
|
||||||
// Check if it's not WSL bash
|
// See https://github.com/hykilpikonna/hyfetch/issues/233
|
||||||
// See https://github.com/hykilpikonna/hyfetch/issues/233
|
let is_wsl = (|| {
|
||||||
let windir = env::var_os("windir").context("`windir` environ not found")?;
|
let windir = env::var_os("windir")?;
|
||||||
match is_same_file(&bash_path, Path::new(&windir).join(r"System32\bash.exe")) {
|
let wsl_bash = Path::new(&windir).join(r"System32\bash.exe");
|
||||||
Ok(false) => return Ok(bash_path),
|
Some(is_same_file(pth, &wsl_bash).unwrap_or(false))
|
||||||
Err(err) if err.kind() == io::ErrorKind::NotFound => return Ok(bash_path),
|
})()
|
||||||
_ => {}
|
.unwrap_or(false);
|
||||||
|
|
||||||
|
if !is_wsl {
|
||||||
|
// Check if it's not MSYS bash https://stackoverflow.com/a/58418686/1529493
|
||||||
|
// We prefer the Git wrapper bash if possible, but we'll accept this if it's all we have.
|
||||||
|
if !pth.ends_with(r"Git\usr\bin\bash.exe") {
|
||||||
|
return Ok(pth.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(bash_path) = find_in_path("git.exe").context("failed to find `git.exe` in `PATH`")? {
|
// 2. Try to find git.exe in PATH and look for bash.exe relative to it
|
||||||
if bash_path.ends_with(r"Git\cmd\git.exe") {
|
if let Ok(Some(git_path)) = find_in_path("git.exe") {
|
||||||
let pth = bash_path.parent().unwrap().parent().unwrap().join(r"bin\bash.exe");
|
let mut current = git_path.clone();
|
||||||
if pth.is_file() {
|
for _ in 0..3 {
|
||||||
return Ok(pth);
|
if let Some(parent) = current.parent() {
|
||||||
|
let bin_bash = parent.join(r"bin\bash.exe");
|
||||||
|
if bin_bash.is_file() {
|
||||||
|
return Ok(bin_bash);
|
||||||
|
}
|
||||||
|
let usr_bin_bash = parent.join(r"usr\bin\bash.exe");
|
||||||
|
if usr_bin_bash.is_file() {
|
||||||
|
return Ok(usr_bin_bash);
|
||||||
|
}
|
||||||
|
current = parent.to_path_buf();
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Err(anyhow!("bash.exe not found"))
|
// 3. Fallback to whatever bash we found in PATH (even if it was the MSYS one)
|
||||||
|
if let Some(pth) = bash_in_path {
|
||||||
|
return Ok(pth);
|
||||||
|
}
|
||||||
|
|
||||||
|
Err(anyhow!("bash.exe not found. Please ensure Git for Windows is installed and in your PATH."))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Runs neofetch command, returning the piped stdout output.
|
/// Runs neofetch command, returning the piped stdout output.
|
||||||
@@ -501,7 +531,7 @@ pub fn get_distro_name(backend: Backend) -> Result<String> {
|
|||||||
doc["spacing"] = value(0);
|
doc["spacing"] = value(0);
|
||||||
doc["padding"] = value(0);
|
doc["padding"] = value(0);
|
||||||
// See https://github.com/Macchina-CLI/macchina/issues/319
|
// See https://github.com/Macchina-CLI/macchina/issues/319
|
||||||
// doc["hide_ascii"] = value(true);
|
doc["hide_ascii"] = value(false);
|
||||||
doc["separator"] = value("");
|
doc["separator"] = value("");
|
||||||
doc["custom_ascii"] = Item::Table(Table::from_iter([(
|
doc["custom_ascii"] = Item::Table(Table::from_iter([(
|
||||||
"path",
|
"path",
|
||||||
@@ -532,8 +562,11 @@ pub fn get_distro_name(backend: Backend) -> Result<String> {
|
|||||||
];
|
];
|
||||||
run_macchina_command_piped(&args[..])
|
run_macchina_command_piped(&args[..])
|
||||||
.map(|s| {
|
.map(|s| {
|
||||||
anstream::adapter::strip_str(&s)
|
let s = anstream::adapter::strip_str(&s).to_string();
|
||||||
.to_string()
|
let s = s.trim();
|
||||||
|
s.splitn(2, '-')
|
||||||
|
.last()
|
||||||
|
.expect("splitn with 2 should always have at least 1 element")
|
||||||
.trim()
|
.trim()
|
||||||
.to_owned()
|
.to_owned()
|
||||||
})
|
})
|
||||||
@@ -653,6 +686,7 @@ fn run_macchina(asc: String, args: Option<&Vec<String>>) -> Result<()> {
|
|||||||
.context("failed to create temp file for macchina theme")?;
|
.context("failed to create temp file for macchina theme")?;
|
||||||
let theme_doc = {
|
let theme_doc = {
|
||||||
let mut doc = DocumentMut::new();
|
let mut doc = DocumentMut::new();
|
||||||
|
doc["hide_ascii"] = value(false);
|
||||||
doc["custom_ascii"] = Item::Table(Table::from_iter([(
|
doc["custom_ascii"] = Item::Table(Table::from_iter([(
|
||||||
"path",
|
"path",
|
||||||
&*asc_file_path.to_string_lossy(),
|
&*asc_file_path.to_string_lossy(),
|
||||||
@@ -694,65 +728,8 @@ fn run_macchina(asc: String, args: Option<&Vec<String>>) -> Result<()> {
|
|||||||
/// Gets the color indices that should be considered as foreground, for a
|
/// Gets the color indices that should be considered as foreground, for a
|
||||||
/// particular distro's ascii art.
|
/// particular distro's ascii art.
|
||||||
fn ascii_foreground(distro: &Distro) -> Vec<NeofetchAsciiIndexedColor> {
|
fn ascii_foreground(distro: &Distro) -> Vec<NeofetchAsciiIndexedColor> {
|
||||||
let fg: Vec<u8> = match distro {
|
distro.foreground()
|
||||||
Distro::Anarchy => vec![2],
|
.iter()
|
||||||
Distro::Android => vec![2],
|
.map(|&f| f.try_into().expect("neofetch color index should be valid"))
|
||||||
Distro::Antergos => vec![1],
|
|
||||||
Distro::ArchStrike => vec![2],
|
|
||||||
Distro::Arkane => vec![1],
|
|
||||||
Distro::Asahi => vec![5],
|
|
||||||
Distro::Astra_Linux => vec![2],
|
|
||||||
Distro::BlackArch => vec![3],
|
|
||||||
Distro::CelOS => vec![3],
|
|
||||||
Distro::Chapeau => vec![2],
|
|
||||||
Distro::Chrom => vec![5],
|
|
||||||
Distro::Clear_Linux_OS => vec![2],
|
|
||||||
Distro::Container_Linux_by_CoreOS => vec![3],
|
|
||||||
Distro::CRUX => vec![3],
|
|
||||||
Distro::EuroLinux => vec![2],
|
|
||||||
Distro::eweOS => vec![3],
|
|
||||||
Distro::Fedora => vec![2],
|
|
||||||
Distro::Fedora_Sericea => vec![2],
|
|
||||||
Distro::Fedora_Silverblue => vec![2],
|
|
||||||
Distro::GalliumOS => vec![2],
|
|
||||||
Distro::Gentoo => vec![1],
|
|
||||||
Distro::HarDClanZ => vec![2],
|
|
||||||
Distro::Kibojoe => vec![3],
|
|
||||||
Distro::KrassOS => vec![2],
|
|
||||||
Distro::Kubuntu => vec![2],
|
|
||||||
Distro::Linux => vec![1],
|
|
||||||
Distro::LinuxFromScratch => vec![1, 3],
|
|
||||||
Distro::Lubuntu => vec![2],
|
|
||||||
Distro::openEuler => vec![2],
|
|
||||||
Distro::orchid => vec![1],
|
|
||||||
Distro::Panwah => vec![1],
|
|
||||||
Distro::Peppermint => vec![2],
|
|
||||||
Distro::PNM_Linux => vec![2],
|
|
||||||
Distro::Pop__OS => vec![2],
|
|
||||||
Distro::Reborn_OS => vec![1],
|
|
||||||
Distro::SalentOS => vec![4],
|
|
||||||
Distro::Septor => vec![2],
|
|
||||||
Distro::Ubuntu_Cinnamon => vec![2],
|
|
||||||
Distro::Ubuntu_Kylin => vec![2],
|
|
||||||
Distro::Ubuntu_MATE => vec![2],
|
|
||||||
Distro::Ubuntu_old => vec![2],
|
|
||||||
Distro::Ubuntu_Studio => vec![2],
|
|
||||||
Distro::Ubuntu_Sway => vec![2],
|
|
||||||
Distro::Ultramarine_Linux => vec![2],
|
|
||||||
Distro::Univention => vec![2],
|
|
||||||
Distro::uwuntu => vec![2],
|
|
||||||
Distro::Vanilla => vec![2],
|
|
||||||
Distro::VNux => vec![3, 5],
|
|
||||||
Distro::Void => vec![2],
|
|
||||||
Distro::Xray_OS => vec![2, 3],
|
|
||||||
Distro::Xubuntu => vec![2],
|
|
||||||
_ => Vec::new(),
|
|
||||||
};
|
|
||||||
|
|
||||||
fg.into_iter()
|
|
||||||
.map(|fore| {
|
|
||||||
fore.try_into()
|
|
||||||
.expect("`fore` should be a valid neofetch color index")
|
|
||||||
})
|
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,12 +85,7 @@ where
|
|||||||
|
|
||||||
let metadata = match fs::metadata(path) {
|
let metadata = match fs::metadata(path) {
|
||||||
Ok(metadata) => metadata,
|
Ok(metadata) => metadata,
|
||||||
Err(err) if err.kind() == io::ErrorKind::NotFound => {
|
Err(_) => return Ok(None)
|
||||||
return Ok(None);
|
|
||||||
},
|
|
||||||
Err(err) => {
|
|
||||||
return Err(err).with_context(|| format!("failed to get metadata for {path:?}"));
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if !metadata.is_file() {
|
if !metadata.is_file() {
|
||||||
|
|||||||
+5
-4
@@ -1,7 +1,7 @@
|
|||||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
|
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
|
||||||
.TH VERSION: "1" "October 2025" "Version: 2.0.3" "User Commands"
|
.TH VERSION: "1" "April 2026" "Version: 2.1.0-rc1" "User Commands"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
Version: \- manual page for Version: 2.0.3
|
Version: \- manual page for Version: 2.1.0-rc1
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B hyfetch
|
.B hyfetch
|
||||||
[\fI\,-c\/\fR] [\fI\,-C=CONFIG_FILE\/\fR] [\fI\,-p=PRESET\/\fR] [\fI\,-m=MODE\/\fR] [\fI\,-b=BACKEND\/\fR] [\fI\,--args=ARGS\/\fR] [\fI\,--c-scale=\/\fR
|
[\fI\,-c\/\fR] [\fI\,-C=CONFIG_FILE\/\fR] [\fI\,-p=PRESET\/\fR] [\fI\,-m=MODE\/\fR] [\fI\,-b=BACKEND\/\fR] [\fI\,--args=ARGS\/\fR] [\fI\,--c-scale=\/\fR
|
||||||
@@ -21,8 +21,9 @@ Use another config file
|
|||||||
.TP
|
.TP
|
||||||
\fB\-p\fR, \fB\-\-preset\fR=\fI\,PRESET\/\fR
|
\fB\-p\fR, \fB\-\-preset\fR=\fI\,PRESET\/\fR
|
||||||
Use preset or comma\-separated color list or comma\-separated hex colors
|
Use preset or comma\-separated color list or comma\-separated hex colors
|
||||||
(e.g., "#ff0000,#00ff00,#0000ff")
|
(e.g., "#ff0000,#00ff00,#0000ff"). Comma\-separated preset names will
|
||||||
PRESET={rainbow,transgender,nonbinary,xenogender,agender,queer,genderfluid,bisexual,pansexual,polysexual,omnisexual,omniromantic,gay\-men,lesbian,abrosexual,asexual,aromantic,fictosexual,aroace1,aroace2,aroace3,autosexual,intergender,greygender,akiosexual,bigender,demigender,demiboy,demigirl,transmasculine,transfeminine,genderfaun,demifaun,genderfae,demifae,neutrois,biromantic1,biromantic2,autoromantic,boyflux2,girlflux,genderflux,nullflux,hypergender,hyperboy,hypergirl,hyperandrogyne,hyperneutrois,finsexual,unlabeled1,unlabeled2,pangender,pangender.contrast,gendernonconforming1,gendernonconforming2,femboy,tomboy,gynesexual,androsexual,gendervoid,voidgirl,voidboy,nonhuman\-unity,plural,fraysexual,bear,butch,leather,otter,twink,adipophilia,kenochoric,veldian,solian,lunian,polyam,sapphic,androgyne,interprogress,progress,intersex,old\-polyam,equal\-rights,drag,pronounfluid,pronounflux,exipronoun,neopronoun,neofluid,genderqueer,cisgender,baker,caninekin,libragender,librafeminine,libramasculine,libraandrogyne,libranonbinary,fluidflux1,fluidflux2,beiyang,burger,throatlozenges,band,random}
|
pick one randomly.
|
||||||
|
PRESET={rainbow,transgender,nonbinary,xenogender,agender,queer,genderfluid,bisexual,pansexual,polysexual,omnisexual,omniromantic,gay\-men,lesbian,abrosexual,asexual,aromantic,fictosexual,aroace1,aroace2,aroace3,autosexual,intergender,greygender,akiosexual,bigender,demigender,demiboy,demigirl,transmasculine,transfeminine,genderfaun,demifaun,genderfae,demifae,neutrois,biromantic1,biromantic2,autoromantic,boyflux2,girlflux,genderflux,nullflux,hypergender,hyperboy,hypergirl,hyperandrogyne,hyperneutrois,finsexual,unlabeled1,unlabeled2,pangender,pangender.contrast,gendernonconforming1,gendernonconforming2,femboy,tomboy,gynesexual,androsexual,gendervoid,voidgirl,voidboy,nonhuman\-unity,plural,fraysexual,bear,butch,femme,leather,otter,twink,adipophilia,kenochoric,veldian,solian,lunian,polyam,sapphic,androgyne,interprogress,progress,intersex,old\-polyam,equal\-rights,drag,pronounfluid,pronounflux,exipronoun,neopronoun,neofluid,genderqueer,cisgender,baker,caninekin,libragender,librafeminine,libramasculine,libraandrogyne,libranonbinary,fluidflux1,fluidflux2,transbian,autism,cenelian,transneutral,beiyang,burger,throatlozenges,band,petergriffin,rubber,haruhi,random}
|
||||||
.TP
|
.TP
|
||||||
\fB\-m\fR, \fB\-\-mode\fR=\fI\,MODE\/\fR
|
\fB\-m\fR, \fB\-\-mode\fR=\fI\,MODE\/\fR
|
||||||
Color mode MODE={8bit,rgb}
|
Color mode MODE={8bit,rgb}
|
||||||
|
|||||||
+23
-21
@@ -1,7 +1,7 @@
|
|||||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
|
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
|
||||||
.TH NEOFETCH "1" "October 2025" "Neofetch 8.0.3" "User Commands"
|
.TH NEOFETCH "1" "April 2026" "Neofetch 8.1.0" "User Commands"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
Neofetch \- manual page for Neofetch 8.0.3
|
Neofetch \- manual page for Neofetch 8.1.0
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B neofetch
|
.B neofetch
|
||||||
\fI\,func_name --option "value" --option "value"\/\fR
|
\fI\,func_name --option "value" --option "value"\/\fR
|
||||||
@@ -326,13 +326,13 @@ BigLinux_large, Bitrig, BlackArch, BlackMesa, blackPanther, BLAG,
|
|||||||
BlankOn, BlueLight, Bodhi, bonsai, BSD, BunsenLabs, CachyOS,
|
BlankOn, BlueLight, Bodhi, bonsai, BSD, BunsenLabs, CachyOS,
|
||||||
Calculate, CalinixOS, Carbs, CBL\-Mariner, CelOS, Center, CentOS,
|
Calculate, CalinixOS, Carbs, CBL\-Mariner, CelOS, Center, CentOS,
|
||||||
Chakra, ChaletOS, Chapeau, Chimera, ChonkySealOS, Chrom, Cleanjaro,
|
Chakra, ChaletOS, Chapeau, Chimera, ChonkySealOS, Chrom, Cleanjaro,
|
||||||
Clear Linux OS, ClearOS, Clover, Cobalt, Condres, Container Linux by
|
Clear Linux OS, ClearOS, Clover, Cobalt, Codex Linux, Condres,
|
||||||
CoreOS, CRUX, Crystal Linux, Cucumber, CutefishOS, CuteOS, CyberOS,
|
Container Linux by CoreOS, CRUX, Crystal Linux, Cucumber,
|
||||||
dahlia, DarkOs, Darwin, Debian, Deepin, DesaOS, Devuan, DietPi,
|
CutefishOS, CuteOS, CyberOS, dahlia, DarkOs, Darwin, Debian, Deepin,
|
||||||
digital UNIX, DracOS, DragonFly, Drauger, Droidian, Elementary,
|
DesaOS, Devuan, DietPi, digital UNIX, DracOS, DragonFly, Drauger,
|
||||||
Elive, EncryptOS, EndeavourOS, Endless, Enso, EuroLinux,
|
Droidian, Elementary, Elive, EncryptOS, EndeavourOS, Endless, Enso,
|
||||||
EvolutionOS, eweOS, Exherbo, Exodia Predator OS, Fedora, Fedora
|
EuroLinux, EvolutionOS, eweOS, Exherbo, Exodia Predator OS, Fedora,
|
||||||
Kinoite, Fedora Sericea, Fedora Silverblue, Fedora_unicode,
|
Fedora Kinoite, Fedora Sericea, Fedora Silverblue, Fedora_unicode,
|
||||||
FemboyOS, Feren, Finnix, Floflis, FreeBSD, FreeMiNT, Frugalware,
|
FemboyOS, Feren, Finnix, Floflis, FreeBSD, FreeMiNT, Frugalware,
|
||||||
Funtoo, Furreto, GalliumOS, Garuda, Gentoo, GhostBSD, glaucus,
|
Funtoo, Furreto, GalliumOS, Garuda, Gentoo, GhostBSD, glaucus,
|
||||||
Gloire, gNewSense, GNOME, GNU, GoboLinux, GrapheneOS, Grombyang,
|
Gloire, gNewSense, GNOME, GNU, GoboLinux, GrapheneOS, Grombyang,
|
||||||
@@ -352,22 +352,24 @@ Tumbleweed, openSUSE Tumbleweed\-Slowroll, OPNsense, Oracle, orchid,
|
|||||||
OS Elbrus, PacBSD, Panwah, Parabola, parch, Pardus, Parrot, Parsix,
|
OS Elbrus, PacBSD, Panwah, Parabola, parch, Pardus, Parrot, Parsix,
|
||||||
PCBSD, PCLinuxOS, pearOS, Pengwin, Pentoo, Peppermint, Peropesis,
|
PCBSD, PCLinuxOS, pearOS, Pengwin, Pentoo, Peppermint, Peropesis,
|
||||||
phyOS, PikaOS, Pisi, PNM Linux, Pop!_OS, Porteus, PostMarketOS,
|
phyOS, PikaOS, Pisi, PNM Linux, Pop!_OS, Porteus, PostMarketOS,
|
||||||
Profelis SambaBOX, Proxmox, PuffOS, Puppy, PureOS, Q4OS, Qubes,
|
Profelis SambaBOX, Proxmox, PuffOS, Puppy, PureOS, Q4OS, QNX, Qubes,
|
||||||
Qubyt, Quibian, Radix, Raspbian, ravynOS, Reborn OS, Red Star,
|
Qubyt, Quibian, Radix, Raspbian, ravynOS, Reborn OS, Red Star,
|
||||||
Redcore, Redhat, Refracted Devuan, Regata, Regolith, RhaymOS, Rhino
|
Redcore, Redhat, Refracted Devuan, Regata, Regolith, RhaymOS, Rhino
|
||||||
Linux, rocky, Rosa, Sabayon, sabotage, Sailfish, SalentOS, Salient
|
Linux, rocky, Rosa, Sabayon, sabotage, Sailfish, SalentOS, Salient
|
||||||
OS, Salix, Sasanqua, Scientific, semc, Septor, Serene, SharkLinux,
|
OS, Salix, Sasanqua, Scientific, secureblue, semc, Septor, Serene,
|
||||||
ShastraOS, Siduction, SkiffOS, Slackel, Slackware, SliTaz, SmartOS,
|
SharkLinux, ShastraOS, Siduction, SkiffOS, Slackel, Slackware,
|
||||||
Soda, Solus, Source Mage, Sparky, Star, SteamOS, Stock Linux, Sulin,
|
SliTaz, SmartOS, Soda, Solus, Source Mage, Sparky, Star, SteamOS,
|
||||||
SunOS, SwagArch, t2, Tails, Tatra, TeArch, TorizonCore, Trisquel,
|
Stock Linux, Sulin, SunOS, SwagArch, t2, Tails, Tatra, TeArch,
|
||||||
Twister, Ubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin,
|
TorizonCore, Trisquel, Twister, Ubuntu, Ubuntu Budgie, Ubuntu
|
||||||
Ubuntu MATE, Ubuntu Studio, Ubuntu Sway, Ubuntu Touch, Ubuntu\-GNOME,
|
Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Sway,
|
||||||
ubuntu_old02, Ultramarine Linux, unicodearch, Univalent, Univention,
|
Ubuntu Touch, Ubuntu\-GNOME, ubuntu_old02, Ultramarine Linux,
|
||||||
Uos, UrukOS, uwuntu, Vanilla, Venom, VNux, Void, VzLinux, wii\-linuxngx, Windows, Windows 10, Windows 11, Windows95, Wrt, Xenia, Xenia2,
|
unicodearch, Univalent, Univention, Uos, UrukOS, uwuntu, Vanilla,
|
||||||
XFerience, Xray_OS, Xubuntu, yiffOS, Zorin have ascii logos.
|
Venom, VNux, Void, VzLinux, wii\-linux\-ngx, Windows, Windows 10,
|
||||||
|
Windows 11, Windows95, Wrt, Xenia, Xenia2, XFerience, Xray_OS,
|
||||||
|
Xubuntu, yiffOS, Zirconium, Zorin have ascii logos.
|
||||||
.TP
|
.TP
|
||||||
NOTE: arch, dragonfly, Fedora, LangitKetujuh, nixos, redhat, Ubuntu
|
NOTE: arch, dragonfly, Fedora, LangitKetujuh, nixos, redhat, Ubuntu,
|
||||||
have 'old' logo variants, use {distro}_old to use them.
|
void have 'old' logo variants, use {distro}_old to use them.
|
||||||
.TP
|
.TP
|
||||||
NOTE: alpine, android, arch, arcolinux, artix, CalinixOS, centos,
|
NOTE: alpine, android, arch, arcolinux, artix, CalinixOS, centos,
|
||||||
cleanjaro, crux, debian, dragonfly, elementary, endeavouros, fedora,
|
cleanjaro, crux, debian, dragonfly, elementary, endeavouros, fedora,
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
VERSION = '2.0.3'
|
VERSION = '2.1.0-rc1'
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{"match": "\"Ad\u00e9lie\"* | \"Adelie\"*", "color": "4 7 6"}
|
||||||
|
${c1} ${c3} ,-^-___
|
||||||
|
${c3} /\\\\\\///
|
||||||
|
${c2}refined.${c1} /\\\\\\\\//
|
||||||
|
${c2}reliable.${c1} /\\\\\\///
|
||||||
|
${c2}ready.${c1} /\\\\/////\\
|
||||||
|
__///\\\\\\\\/////\\
|
||||||
|
${c3} _//////\\\\\\\\\\\\\\////
|
||||||
|
${c1} ///////${c3}\\\\\\\\\\\\\\\\\\\\//
|
||||||
|
//////${c1}\\\\\\\\\\/
|
||||||
|
/////\\\\\\\\\\/
|
||||||
|
/////${c3}\\\\\\\\/
|
||||||
|
/\\\\///\\\\\\/
|
||||||
|
/\\\\\\/${c1}\\\/
|
||||||
|
/\\\\\\\\//
|
||||||
|
//////
|
||||||
|
/// ${c3}\\\\\\\\\\
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{"match": "\"Aeon\"*", "color": "38;5;36 38;5;36"}
|
||||||
|
⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷
|
||||||
|
⣿⡇ ⢸⣿
|
||||||
|
⣿⡇ ⢀⣀ ⣀⡀ ⢸⣿
|
||||||
|
⣿⣇ ⠸⣿⣄ ⣠⣿⠇ ⣸⣿
|
||||||
|
⢹⣿⡄ ⠙⠻⠿⠿⠟⠋ ⢠⣿⡏
|
||||||
|
⠹⣿⣦⡀ ⢀⣴⣿⠏
|
||||||
|
⠈⠛⢿⣶⣤⣄ ⣠⣤⣶⡿⠛⠁
|
||||||
|
${c2} ⣠⣴⡿⠿⠛ ⠛⠿⢿⣦⣄
|
||||||
|
⣠⣾⠟⠉ ⠉⠻⣷⣄
|
||||||
|
⢰⣿⠏ ⢀⣤⣶⣶⣤⡀ ⠹⣿⡆
|
||||||
|
⣿⡟ ⢰⣿⠏⠁⠈⠹⣿⡆ ⢿⣿
|
||||||
|
⣿⡇ ⠈⠋ ⠙⠁ ⢸⣿
|
||||||
|
⣿⡇ ⢸⣿
|
||||||
|
⣿⣷⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣾⣿
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"aerOS\"*", "color": "fg 0 0 0"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
aeros = AsciiArt(match=r'''"aerOS"*''', color='fg 0 0 0', ascii=r"""
|
|
||||||
${c1}
|
${c1}
|
||||||
ooo OOO OOO ooo
|
ooo OOO OOO ooo
|
||||||
oOO OOo
|
oOO OOo
|
||||||
@@ -25,5 +21,3 @@ ${c1}
|
|||||||
oOO OOo
|
oOO OOo
|
||||||
oOO OOo
|
oOO OOo
|
||||||
ooo OOO OOO ooo
|
ooo OOO OOO ooo
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{"match": "\"AerynOS\"*", "color": "7 5"}
|
||||||
|
;llll.
|
||||||
|
0MMMMMM:
|
||||||
|
NMMMMMMMMd
|
||||||
|
.@ .cccccccccoWMMMMMMMMMM0
|
||||||
|
@@ .MMMMMMMMMMMMMMMMMMMMMMMN
|
||||||
|
OMMMMMMMMMMMMMMMW.
|
||||||
|
.@ .MMMMMMMMMMMMMMMMMMM.
|
||||||
|
.@ dMMMMMMMMMMMMMMMMMMl OMMMMMMMMk
|
||||||
|
.OWMMMMM; dMMMMMMMMMk
|
||||||
|
.MMMMMMMMMk
|
||||||
|
@@ ooooooooooooooooooo .MMMMMMMMMN
|
||||||
|
.@ oooooMMMMMMMMMMMMP NMMMMMMMMW.
|
||||||
|
KMMMMMMMMMM. 0MMMMMMMMM:
|
||||||
|
NMMMMMMMMM. dMMMMMMMMMd
|
||||||
|
.WMMMMMMMW. XMMMMMMMMO
|
||||||
|
.MMMMMMMk. xMMMMMMMMX
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Afterglow\"*", "color": "5 1 3 4"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
afterglow = AsciiArt(match=r'''"Afterglow"*''', color='5 1 3 4', ascii=r"""
|
|
||||||
${c2} .
|
${c2} .
|
||||||
${c1}. ${c2}.{!
|
${c1}. ${c2}.{!
|
||||||
${c1}.L! ${c2}J@||*
|
${c1}.L! ${c2}J@||*
|
||||||
@@ -18,5 +14,3 @@ ${c2} .
|
|||||||
${c3}_@FFFFF ${c4}VLLLP`
|
${c3}_@FFFFF ${c4}VLLLP`
|
||||||
${c3}J@@LL@" ${c4}`"
|
${c3}J@@LL@" ${c4}`"
|
||||||
${c3}V@@"
|
${c3}V@@"
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"AIX\"*", "color": "2 7"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
aix = AsciiArt(match=r'''"AIX"*''', color='2 7', ascii=r"""
|
|
||||||
${c1} `:+ssssossossss+-`
|
${c1} `:+ssssossossss+-`
|
||||||
.oys///oyhddddhyo///sy+.
|
.oys///oyhddddhyo///sy+.
|
||||||
/yo:+hNNNNNNNNNNNNNNNNh+:oy/
|
/yo:+hNNNNNNNNNNNNNNNNh+:oy/
|
||||||
@@ -23,5 +19,3 @@ h//NNNNh ossss` +h md- .hm/ `sNNNNN:+y
|
|||||||
:ys:/yNNNNNNNNNNNNNNNmy/:sy:
|
:ys:/yNNNNNNNNNNNNNNNmy/:sy:
|
||||||
.+ys///osyhhhhys+///sy+.
|
.+ys///osyhhhhys+///sy+.
|
||||||
-/osssossossso/-
|
-/osssossossso/-
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"AlmaLinux\"*", "color": "1 3 4 2 6"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
almalinux = AsciiArt(match=r'''"AlmaLinux"*''', color='1 3 4 2 6', ascii=r"""
|
|
||||||
${c1} 'c:.
|
${c1} 'c:.
|
||||||
${c1} lkkkx, .. ${c2}.. ,cc,
|
${c1} lkkkx, .. ${c2}.. ,cc,
|
||||||
${c1} okkkk:ckkx' ${c2}.lxkkx.okkkkd
|
${c1} okkkk:ckkx' ${c2}.lxkkx.okkkkd
|
||||||
@@ -23,5 +19,3 @@ ${c3} ..... ${c5}.;dk:. ${c5}lkk. ${c4}:;,
|
|||||||
;kkkkl...
|
;kkkkl...
|
||||||
;kkkkl
|
;kkkkl
|
||||||
,od;
|
,od;
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Alpine\"*", "color": "4 5 7 6"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
alpine = AsciiArt(match=r'''"Alpine"*''', color='4 5 7 6', ascii=r"""
|
|
||||||
${c1} .hddddddddddddddddddddddh.
|
${c1} .hddddddddddddddddddddddh.
|
||||||
:dddddddddddddddddddddddddd:
|
:dddddddddddddddddddddddddd:
|
||||||
/dddddddddddddddddddddddddddd/
|
/dddddddddddddddddddddddddddd/
|
||||||
@@ -23,5 +19,3 @@ hdddyo+ohddyosdddddddddho+oydddy++ohdddh
|
|||||||
/dddddddddddddddddddddddddddd/
|
/dddddddddddddddddddddddddddd/
|
||||||
:dddddddddddddddddddddddddd:
|
:dddddddddddddddddddddddddd:
|
||||||
.hddddddddddddddddddddddh.
|
.hddddddddddddddddddddddh.
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{"match": "\"Alpine2\"*", "color": "4 7"}
|
||||||
|
.:::::::::::::::::::::.
|
||||||
|
.:::::::::::::::::::::::.
|
||||||
|
.:::::::::::::::::::::::::.
|
||||||
|
.:::::::::::::::::::::::::::.
|
||||||
|
.:::::::::${c2},db,${c1}::::::::::::::::.
|
||||||
|
.::::::::${c2},d%%%%b,${c1}::${c2},db,${c1}:::::::::.
|
||||||
|
.:::::::${c2},%%%%P'%%%b,d%%%b,${c1}::::::::.
|
||||||
|
.::::::${c2},%%%%P,${c1}:::${c2}`%%%b'^q%%b,${c1}:::::::.
|
||||||
|
'::::${c2},%%%%P,d|${c1}:::::${c2}`%%%b:'^%%b,${c1}:::::'
|
||||||
|
'::${c2}`%%%'${c1}:${c2}'q$|${c1}:::::::${c2}'q%%b'`q%%b'${c1}::'
|
||||||
|
':::::::::::::::::::::::::::::::'
|
||||||
|
':::::::::::::::::::::::::::::'
|
||||||
|
':::::::::::::::::::::::::::'
|
||||||
|
':::::::::::::::::::::::::'
|
||||||
|
':::::::::::::::::::::::'
|
||||||
|
':::::::::::::::::::::'
|
||||||
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{"match": "\"alpine2_small\"*", "color": "4 7"}
|
||||||
|
${c1} /\ /\
|
||||||
|
/${c2}/ ${c1}\ \
|
||||||
|
/${c2}// ${c1}\ \
|
||||||
|
/${c2}// ${c1}\ \
|
||||||
|
${c2}// ${c1}\ \
|
||||||
|
\
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{"match": "\"alpine3_small\"*", "color": "7"}
|
||||||
|
,db,
|
||||||
|
,d%%%%b, ,db,
|
||||||
|
,%%%%P'%%%b,d%%%b,
|
||||||
|
,%%%%P, `%%%b'^q%%b,
|
||||||
|
,%%%%P,d| `%%%b '^%%b,
|
||||||
|
`%%%' 'q$| 'q%%b'`q%%b
|
||||||
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{"match": "\"alpine_small\"", "color": "4 7"}
|
||||||
|
${c1} /\\ /\\
|
||||||
|
/${c2}/ ${c1}\\ \\
|
||||||
|
/${c2}/ ${c1}\\ \\
|
||||||
|
/${c2}// ${c1}\\ \\
|
||||||
|
${c2}// ${c1}\\ \\
|
||||||
|
\\
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Alter\"*", "color": "6 6"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
alter = AsciiArt(match=r'''"Alter"*''', color='6 6', ascii=r"""
|
|
||||||
${c1} %,
|
${c1} %,
|
||||||
^WWWw
|
^WWWw
|
||||||
'wwwwww
|
'wwwwww
|
||||||
@@ -23,5 +19,3 @@ ${c1} %,
|
|||||||
8~~:~~:~~~~:~~~~_1ltltu ,www
|
8~~:~~:~~~~:~~~~_1ltltu ,www
|
||||||
5~~:~~:~~:~~:~~:~~~_1ltq N,,
|
5~~:~~:~~:~~:~~:~~~_1ltq N,,
|
||||||
g~:~~:~~~:~~:~~:~:~~~~1q N,
|
g~:~~:~~~:~~:~~:~:~~~~1q N,
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{"match": "\"ALTLinux\"*", "color": "3 8 7"}
|
||||||
|
##############
|
||||||
|
######################
|
||||||
|
##########################
|
||||||
|
##+${c2}####${c1}#######################
|
||||||
|
#####${c2}#${c1}*${c2}###%+${c1}######################
|
||||||
|
########${c2}%${c1}*#${c2}%#####${c1}###################
|
||||||
|
##########${c2}##${c1}*#*${c2}#######%+${c1}##############
|
||||||
|
#############${c2}%#############%${c1}############
|
||||||
|
#############${c2}+################${c1}##########
|
||||||
|
##############${c2}################*${c1}#########
|
||||||
|
##############${c2}+################+${c1}########
|
||||||
|
###############${c2}##########${c1}###${c2}+##%${c1}########
|
||||||
|
###############${c2}+########${c1}######${c2}###${c1}#######
|
||||||
|
#############${c2}*####${c1}############${c2}%#+${c1}#######
|
||||||
|
############${c2}+###${c3}####${c1}##########${c2}%#*${c1}#######
|
||||||
|
##########${c2}###*${c3}######${c2}+#+${c1}#####${c2}+##*${c1}######
|
||||||
|
#########${c2}##%${c3}#####${c2}:%#####${c1}###${c2}###*${c1}#####
|
||||||
|
########${c2}%#+${c3}######${c2}#############${c1}####
|
||||||
|
#####${c2}##%:${c3}######${c2}:############${c1}##
|
||||||
|
##${c2}+##*${c3}########${c2}############${c1}
|
||||||
|
${c2}###${c3}#########${c2}##########${c1}
|
||||||
|
${c3}########${c2}######
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Amazon\"*", "color": "3 7"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
amazon = AsciiArt(match=r'''"Amazon"*''', color='3 7', ascii=r"""
|
|
||||||
${c1} `-/oydNNdyo:.`
|
${c1} `-/oydNNdyo:.`
|
||||||
`.:+shmMMMMMMMMMMMMMMmhs+:.`
|
`.:+shmMMMMMMMMMMMMMMmhs+:.`
|
||||||
-+hNNMMMMMMMMMMMMMMMMMMMMMMNNho-
|
-+hNNMMMMMMMMMMMMMMMMMMMMMMNNho-
|
||||||
@@ -22,5 +18,3 @@ dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd
|
|||||||
.:+ydNMMMMMMMMMMMh yMMMMMMMMMMMNdy+:.
|
.:+ydNMMMMMMMMMMMh yMMMMMMMMMMMNdy+:.
|
||||||
`.:+shNMMMMMh yMMMMMNhs+:``
|
`.:+shNMMMMMh yMMMMMNhs+:``
|
||||||
`-+shy shs+:`
|
`-+shy shs+:`
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{"match": "\"Amazon Linux\"*|\"amzn\"*", "color": "7 38;5;178"}
|
||||||
|
, ${c2}#_${c1}
|
||||||
|
~\_ ${c2}####_${c1}
|
||||||
|
~~ \_${c2}#####\${c1}
|
||||||
|
~~ \${c2}###|${c1}
|
||||||
|
~~ \${c2}#/${c1} ___
|
||||||
|
~~ V~' '->
|
||||||
|
~~~ /
|
||||||
|
~~._. _/
|
||||||
|
_/ _/
|
||||||
|
_/m/'
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{"match": "\"Amiga\"*", "color": "1 1 3 4 6 3 2"}
|
||||||
|
----.---
|
||||||
|
:-==.-==-
|
||||||
|
${c2} -=== ===:
|
||||||
|
===-:===.
|
||||||
|
${c3} -+++:=++=
|
||||||
|
=+++ +++.
|
||||||
|
${c6} .+++-=++=
|
||||||
|
${c4}.::. ::: ${c6} :**+ +**-
|
||||||
|
${c4} :--:.---. ${c6} .+**=-***.
|
||||||
|
${c5} :--- ---::${c6}***:***+
|
||||||
|
${c5} .---::-${c6}=##*.*##-
|
||||||
|
${c7} ----+${c6}##=:##*.
|
||||||
|
${c7} :-${c6}###-*##+
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{"match": "\"AmogOS\"*", "color": "15 6"}
|
||||||
|
${c1} ___________
|
||||||
|
/ \\
|
||||||
|
/ ${c2}______${c1} \\
|
||||||
|
/ ${c2}/ \\${c1} \\
|
||||||
|
| ${c2}( )${c1} \\
|
||||||
|
/ ${c2}\\______/${c1} |
|
||||||
|
| |
|
||||||
|
/ \\
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
/ |
|
||||||
|
| |
|
||||||
|
| _______ |
|
||||||
|
____/ / \\ |
|
||||||
|
/ | | |
|
||||||
|
| / ____/ |
|
||||||
|
\\_________/ / |
|
||||||
|
\\ __/
|
||||||
|
\\_______/
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Anarchy\"*", "color": "7 4", "foreground": [2]}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
anarchy = AsciiArt(match=r'''"Anarchy"*''', color='7 4', ascii=r"""
|
|
||||||
${c2}..${c1}
|
${c2}..${c1}
|
||||||
${c2}..${c1}
|
${c2}..${c1}
|
||||||
${c2}:..${c1}
|
${c2}:..${c1}
|
||||||
@@ -31,5 +27,3 @@ anarchy = AsciiArt(match=r'''"Anarchy"*''', color='7 4', ascii=r"""
|
|||||||
${c2}.:${c1}:
|
${c2}.:${c1}:
|
||||||
${c2}..${c1}
|
${c2}..${c1}
|
||||||
${c2}..${c1}
|
${c2}..${c1}
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Android\"*", "color": "2 7", "foreground": [2]}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
android = AsciiArt(match=r'''"Android"*''', color='2 7', ascii=r"""
|
|
||||||
${c1} -o o-
|
${c1} -o o-
|
||||||
+hydNNNNdyh+
|
+hydNNNNdyh+
|
||||||
+mMMMMMMMMMMMMm+
|
+mMMMMMMMMMMMMm+
|
||||||
@@ -21,5 +17,3 @@ ${c1} -o o-
|
|||||||
MMMMo oMMMM
|
MMMMo oMMMM
|
||||||
MMMMo oMMMM
|
MMMMo oMMMM
|
||||||
oNMm- -mMNs
|
oNMm- -mMNs
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{"match": "\"android_small\"*", "color": "2 7"}
|
||||||
|
${c1} ;, ,;
|
||||||
|
';,.-----.,;'
|
||||||
|
,' ',
|
||||||
|
/ O O \\
|
||||||
|
| |
|
||||||
|
'-----------------'
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{"match": "\"anduinos\"*", "color": "6 4"}
|
||||||
|
${c1}+++++++++++
|
||||||
|
+++++++++++++++++++++
|
||||||
|
+++++++++++++++++++++++++++++++
|
||||||
|
=+++++++++++++++++++++++++++++++++++++++=
|
||||||
|
+++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
=++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
==+++++++++++++++++++++++++++++++++==
|
||||||
|
+++++++++++++++++++++++++++
|
||||||
|
${c2}**** ${c1}++=+++++++++++=++ ${c2}****
|
||||||
|
********** ${c1}+++++++ ${c2}**********
|
||||||
|
************** **************
|
||||||
|
**************** ****************
|
||||||
|
***********************
|
||||||
|
****** ************* ******
|
||||||
|
*********** *** ***********
|
||||||
|
*************** ***************
|
||||||
|
*************** ***************
|
||||||
|
*********************
|
||||||
|
***********
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Antergos\"*", "color": "4 6", "foreground": [1]}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
antergos = AsciiArt(match=r'''"Antergos"*''', color='4 6', ascii=r"""
|
|
||||||
${c2} `.-/::/-``
|
${c2} `.-/::/-``
|
||||||
.-/osssssssso/.
|
.-/osssssssso/.
|
||||||
:osyysssssssyyys+-
|
:osyysssssssyyys+-
|
||||||
@@ -22,5 +18,3 @@ dmmmdddddddhhhyso${c1}++++++${c2}shhhhhddddddmmmmh
|
|||||||
.smmmmddddddddhhhhhhhhhdddddddddmmmms.
|
.smmmmddddddddhhhhhhhhhdddddddddmmmms.
|
||||||
`+ydmmmdddddddddddddddddddmmmmdy/.
|
`+ydmmmdddddddddddddddddddmmmmdy/.
|
||||||
`.:+ooyyddddddddddddyyso+:.`
|
`.:+ooyyddddddddddddyyso+:.`
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"antiX\"*", "color": "1 7 3"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
antix = AsciiArt(match=r'''"antiX"*''', color='1 7 3', ascii=r"""
|
|
||||||
${c1}
|
${c1}
|
||||||
\
|
\
|
||||||
, - ~ ^ ~ - \ /
|
, - ~ ^ ~ - \ /
|
||||||
@@ -16,5 +12,3 @@ ${c1}
|
|||||||
, / ,\
|
, / ,\
|
||||||
, / , ' \
|
, / , ' \
|
||||||
' - , _ _ _ , '
|
' - , _ _ _ , '
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{"match": "\"AnushOS\"*", "color": "7 8 3 6 1"}
|
||||||
|
${c4}#######################
|
||||||
|
${c4}# ${c2}##### ${c4}#
|
||||||
|
${c4}# ${c2}####### ${c4}#
|
||||||
|
${c4}# ${c2}##${c5}O${c2}#${c5}O${c2}## ${c4}#
|
||||||
|
${c4}# ${c2}#${c3}#####${c2}# ${c4}#
|
||||||
|
${c4}# ${c2}##${c1}##${c3}###${c1}##${c2}## ${c4}#
|
||||||
|
${c4}# ${c2}#${c1}##########${c2}## ${c4}#
|
||||||
|
${c4}# ${c2}#${c1}############${c2}## ${c4}#
|
||||||
|
${c4}# ${c2}#${c1}######${c5}A_O${c1}####${c2}### ${c4}#
|
||||||
|
${c4}# ${c3}##${c2}#${c1}############${c2}##${c3}## ${c4}#
|
||||||
|
${c4}#${c3}######${c2}#${c1}#######${c2}#${c3}######${c4}#
|
||||||
|
${c4}#${c3}#######${c2}#${c1}#####${c2}#${c3}#######${c4}#
|
||||||
|
${c4}# ${c3}#####${c2}#######${c3}##### ${c4}#
|
||||||
|
${c4}#######################
|
||||||
|
${c4}#${c5}╔═╗╔╗╔╦ ╦╔═╗╦ ╦╔═╗╔═╗${c4}#
|
||||||
|
${c4}#${c5}╠═╣║║║║ ║╚═╗╠═╣║ ║╚═╗${c4}#
|
||||||
|
${c4}#${c5}╩ ╩╝╚╝╚═╝╚═╝╩ ╩╚═╝╚═╝${c4}#
|
||||||
|
${c4}#######################
|
||||||
|
${c4}# ${c3}WWW.ANUSHOS.ORG ${c4}#
|
||||||
|
${c4}#######################
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"AOSC OS\"*", "color": "4 0 1 3"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
aosc_os = AsciiArt(match=r'''"AOSC OS"*''', color='4 0 1 3', ascii=r'''
|
|
||||||
${c2} __
|
${c2} __
|
||||||
${c2}gpBBBBBBBBBP
|
${c2}gpBBBBBBBBBP
|
||||||
${c2}_gBBBBBBBBBRP
|
${c2}_gBBBBBBBBBRP
|
||||||
@@ -20,5 +16,3 @@ ${c2} __
|
|||||||
${c3}_wNNNNNNNNNNNNNNNNNNNM^
|
${c3}_wNNNNNNNNNNNNNNNNNNNM^
|
||||||
${c3}""Y^^MNNNNNNNNNNNNP`
|
${c3}""Y^^MNNNNNNNNNNNNP`
|
||||||
${c3}`"""""""
|
${c3}`"""""""
|
||||||
''')
|
|
||||||
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{"match": "\"Aosc OS_old\"*|\"aoscos_old\"*", "color": "7"}
|
||||||
|
.:+syhhhhys+:.
|
||||||
|
.ohNMMMMMMMMMMMMMMNho.
|
||||||
|
`+mMMMMMMMMMMmdmNMMMMMMMMm+`
|
||||||
|
+NMMMMMMMMMMMM/ `./smMMMMMN+
|
||||||
|
.mMMMMMMMMMMMMMMo -yMMMMMm.
|
||||||
|
:NMMMMMMMMMMMMMMMs .hMMMMN:
|
||||||
|
.NMMMMhmMMMMMMMMMMm+/- oMMMMN.
|
||||||
|
dMMMMs ./ymMMMMMMMMMMNy. sMMMMd
|
||||||
|
-MMMMN` oMMMMMMMMMMMN: `NMMMM-
|
||||||
|
/MMMMh NMMMMMMMMMMMMm hMMMM/
|
||||||
|
/MMMMh NMMMMMMMMMMMMm hMMMM/
|
||||||
|
-MMMMN` :MMMMMMMMMMMMy. `NMMMM-
|
||||||
|
dMMMMs .yNMMMMMMMMMMMNy/. sMMMMd
|
||||||
|
.NMMMMo -/+sMMMMMMMMMMMmMMMMN.
|
||||||
|
:NMMMMh. .MMMMMMMMMMMMMMMN:
|
||||||
|
.mMMMMMy- NMMMMMMMMMMMMMm.
|
||||||
|
+NMMMMMms/.` mMMMMMMMMMMMN+
|
||||||
|
`+mMMMMMMMMNmddMMMMMMMMMMm+`
|
||||||
|
.ohNMMMMMMMMMMMMMMNho.
|
||||||
|
.:+syhhhhys+:.
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{"match": "\"Aosc OS/Retro\"*|\"aoscosretro\"*", "color": "4 7"}
|
||||||
|
${c2} .........
|
||||||
|
...................
|
||||||
|
.....................${c1}################${c2}
|
||||||
|
.............. ....${c1}################${c2}
|
||||||
|
.............. ...${c1}################${c2}
|
||||||
|
............. ..${c1}****************${c2}
|
||||||
|
............ . .${c1}****************${c2}
|
||||||
|
........... ... ${c1}................${c2}
|
||||||
|
.......... ..... ${c1}...............${c2}
|
||||||
|
......... ....... ...
|
||||||
|
.${c3}...... ${c2}.
|
||||||
|
${c3}..... .....${c2}.... ${c4}...........
|
||||||
|
${c3}.... ......${c2}. ${c4}...........
|
||||||
|
${c3}... ....... ${c4}...........
|
||||||
|
${c3}................ ${c4}***********
|
||||||
|
${c3}................ ${c4}###########
|
||||||
|
${c3}****************
|
||||||
|
${c3}################
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{"match": "\"Aosc OS/Retro_small\"*|\"aoscosretro_small\"*", "color": "4 7"}
|
||||||
|
${c2} _____ ${c1}_____${c2}
|
||||||
|
-' '-${c1}| |${c2}
|
||||||
|
/ ___ ${c1}| |${c2}
|
||||||
|
| / _ \${c1}|_____|${c2}
|
||||||
|
' / /_\ \
|
||||||
|
\ / _____ \${c4}___
|
||||||
|
${c3}|${c2}/_/ ${c3}| ${c4}| |
|
||||||
|
${c3}| | ${c4}|___|
|
||||||
|
${c3}|_____|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{"match": "\"Aperio GNU/Linux\"*", "color": "255"}
|
||||||
|
${c2}
|
||||||
|
_.._ _ ._.. _
|
||||||
|
(_][_)(/,[ |(_)
|
||||||
|
| GNU/Linux
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Aperture\"*", "color": "6 6 7 1"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
aperture = AsciiArt(match=r'''"Aperture"*''', color='6 6 7 1', ascii=r"""
|
|
||||||
${c1} .,-:;//;:=,
|
${c1} .,-:;//;:=,
|
||||||
. :H@@@MM@M#H/.,+%;,
|
. :H@@@MM@M#H/.,+%;,
|
||||||
,/X+ +M@@M@MM%=,-%HMMM@X/,
|
,/X+ +M@@M@MM%=,-%HMMM@X/,
|
||||||
@@ -23,5 +19,3 @@ ${c1} .,-:;//;:=,
|
|||||||
=%@M@M#@$-.=$@MM@@@M; %M%=
|
=%@M@M#@$-.=$@MM@@@M; %M%=
|
||||||
,:+$+-,/H#MMMMMMM@= =,
|
,:+$+-,/H#MMMMMMM@= =,
|
||||||
=++%%%%+/:-.
|
=++%%%%+/:-.
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{"match": "\"Apple\"*", "color": "2 3 1 1 5 4"}
|
||||||
|
..'
|
||||||
|
,xNMM.
|
||||||
|
.OMMMMo
|
||||||
|
lMM"
|
||||||
|
.;loddo:. .olloddol;.
|
||||||
|
cKMMMMMMMMMMNWMMMMMMMMMM0:
|
||||||
|
${c2}.KMMMMMMMMMMMMMMMMMMMMMMMWd.
|
||||||
|
XMMMMMMMMMMMMMMMMMMMMMMMX.
|
||||||
|
${c3};MMMMMMMMMMMMMMMMMMMMMMMM:
|
||||||
|
:MMMMMMMMMMMMMMMMMMMMMMMM:
|
||||||
|
${c4}.MMMMMMMMMMMMMMMMMMMMMMMMX.
|
||||||
|
kMMMMMMMMMMMMMMMMMMMMMMMMWd.
|
||||||
|
${c5}'XMMMMMMMMMMMMMMMMMMMMMMMMMMk
|
||||||
|
'XMMMMMMMMMMMMMMMMMMMMMMMMK.
|
||||||
|
${c6}kMMMMMMMMMMMMMMMMMMMMMMd
|
||||||
|
;KMMMMMMMWXXWMMMMMMMk.
|
||||||
|
"cooc*" "*coo'"
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{"match": "\"Apple_small\"*", "color": "2 3 1 5 4"}
|
||||||
|
${c1} .:'
|
||||||
|
__ :'__
|
||||||
|
${c2} .'`__`-'__``.
|
||||||
|
${c3}:__________.-'
|
||||||
|
${c4}:_________:
|
||||||
|
:_________`-;
|
||||||
|
${c5} `.__.-.__.'
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Apricity\"*", "color": "4 7 1"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
apricity = AsciiArt(match=r'''"Apricity"*''', color='4 7 1', ascii=r"""
|
|
||||||
${c2} ./o-
|
${c2} ./o-
|
||||||
``...`` `:. -/:
|
``...`` `:. -/:
|
||||||
`-+ymNMMMMMNmho-` :sdNNm/
|
`-+ymNMMMMMNmho-` :sdNNm/
|
||||||
@@ -21,5 +17,3 @@ MMMMMMNmNNMMMMMMMMmo.
|
|||||||
MMMMMMMMMMMMMMMms:`
|
MMMMMMMMMMMMMMMms:`
|
||||||
MMMMMMMMMMNds/.
|
MMMMMMMMMMNds/.
|
||||||
dhhyys+/-`
|
dhhyys+/-`
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Arch\"*", "color": "6 6 7 1"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
arch = AsciiArt(match=r'''"Arch"*''', color='6 6 7 1', ascii=r"""
|
|
||||||
${c1} -`
|
${c1} -`
|
||||||
.o+`
|
.o+`
|
||||||
`ooo/
|
`ooo/
|
||||||
@@ -22,5 +18,3 @@ ${c2} .oossssso-````/ossssss+`
|
|||||||
`+sso+:-` `.-/+oso:
|
`+sso+:-` `.-/+oso:
|
||||||
`++:. `-/+/
|
`++:. `-/+/
|
||||||
.` `/
|
.` `/
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{"match": "\"arch2\"*", "color": "6 6"}
|
||||||
|
▄
|
||||||
|
▟█▙
|
||||||
|
▟███▙
|
||||||
|
▟█████▙
|
||||||
|
▟███████▙
|
||||||
|
▂▔▀▜██████▙
|
||||||
|
▟██▅▂▝▜█████▙
|
||||||
|
▟█████████████▙
|
||||||
|
▟███████████████▙
|
||||||
|
▟█████████████████▙
|
||||||
|
▟███████████████████▙
|
||||||
|
${c2} ▟█████████▛▀▀▜████████▙
|
||||||
|
▟████████▛ ▜███████▙
|
||||||
|
▟█████████ ████████▙
|
||||||
|
▟██████████ █████▆▅▄▃▂
|
||||||
|
▟██████████▛ ▜█████████▙
|
||||||
|
▟██████▀▀▀ ▀▀██████▙
|
||||||
|
▟███▀▘ ▝▀███▙
|
||||||
|
▟▛▀ ▀▜▙
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{"match": "\"arch3\"*", "color": "6 6"}
|
||||||
|
.
|
||||||
|
/ \
|
||||||
|
/ \
|
||||||
|
/ \
|
||||||
|
/ \
|
||||||
|
/>, \
|
||||||
|
/ `*. \
|
||||||
|
/ ` \
|
||||||
|
/ \
|
||||||
|
/ \
|
||||||
|
${c2} / ,.-+-.. \
|
||||||
|
/ ,/' `\. \
|
||||||
|
/ .|' `|. _ \
|
||||||
|
/ :|. ,|; `+.\
|
||||||
|
/ .\: ;/, "<\
|
||||||
|
/ __,--+" "+--.__ \
|
||||||
|
/ _,+'" "'+._ \
|
||||||
|
/,-' `-.\
|
||||||
|
' '
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"arch_old\"", "color": "6 7 1"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
arch_old = AsciiArt(match=r'''"arch_old"''', color='6 7 1', ascii=r"""
|
|
||||||
${c1} __
|
${c1} __
|
||||||
_=(SDGJT=_
|
_=(SDGJT=_
|
||||||
_GTDJHGGFCVS)
|
_GTDJHGGFCVS)
|
||||||
@@ -19,5 +15,3 @@ ${c1}HELK['${c2} __,=OFFXCBGHC${c1}\FD)
|
|||||||
${c1}?KGHE ${c2}\_-#DASDFLSV='${c1} 'EF
|
${c1}?KGHE ${c2}\_-#DASDFLSV='${c1} 'EF
|
||||||
'EHTI !H
|
'EHTI !H
|
||||||
`0F' '!
|
`0F' '!
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{"match": "\"arch_small\"", "color": "6 7 1"}
|
||||||
|
${c1} /\\
|
||||||
|
/ \\
|
||||||
|
/\\ \\
|
||||||
|
${c2} / \\
|
||||||
|
/ ,, \\
|
||||||
|
/ | | -\\
|
||||||
|
/_-'' ''-_\\
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"ArchBox\"*", "color": "2 7 1"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
archbox = AsciiArt(match=r'''"ArchBox"*''', color='2 7 1', ascii=r"""
|
|
||||||
${c1} ...:+oh/:::..
|
${c1} ...:+oh/:::..
|
||||||
..-/oshhhhhh` `::::-.
|
..-/oshhhhhh` `::::-.
|
||||||
.:/ohhhhhhhhhhhh` `-::::.
|
.:/ohhhhhhhhhhhh` `-::::.
|
||||||
@@ -22,5 +18,3 @@ ${c1} ...:+oh/:::..
|
|||||||
`--/:` /: `hhhhhhhhhhhho/-
|
`--/:` /: `hhhhhhhhhhhho/-
|
||||||
-/:. `hhhhhhs+:-`
|
-/:. `hhhhhhs+:-`
|
||||||
::::/ho/-`
|
::::/ho/-`
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Archcraft\"*", "color": "6 1 2 3 4 5"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
archcraft = AsciiArt(match=r'''"Archcraft"*''', color='6 1 2 3 4 5', ascii=r"""
|
|
||||||
${c1}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⢰⡆${c1}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
${c1}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⢰⡆${c1}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||||
${c2}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⢠⣿⣿⡄${c2}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
${c2}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⢠⣿⣿⡄${c2}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||||
${c3}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⢀⣾⣿⣿⣿⡀${c3}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
${c3}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⢀⣾⣿⣿⣿⡀${c3}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||||
@@ -23,5 +19,3 @@ ${c5}⠄⠄⠄${c1}⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏${c5}⠄⠄⠄⠄⠄⠄
|
|||||||
${c6}⠄⠄${c1}⢠⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠁${c6}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⡄${c6}⠄⠄
|
${c6}⠄⠄${c1}⢠⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠁${c6}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⡄${c6}⠄⠄
|
||||||
${c1}⠄${c1}⣠⣿⣿⣿⣿⠿⠛⠋⠁${c1}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⠉⠙⠻⢿⣿⣿⣿⣿⣆${c1}⠄
|
${c1}⠄${c1}⣠⣿⣿⣿⣿⠿⠛⠋⠁${c1}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⠉⠙⠻⢿⣿⣿⣿⣿⣆${c1}⠄
|
||||||
${c1}⡰⠟⠛⠉⠁${c2}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⠉⠙⠛⠿⢆
|
${c1}⡰⠟⠛⠉⠁${c2}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⠉⠙⠛⠿⢆
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,9 +1,5 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Archcraft2\"*", "color": "6"}
|
||||||
|
-o\
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
archcraft_ascii = AsciiArt(match=r'''"archcraft_ascii"*''', color='6 1 2 3 4 5', ascii=r"""
|
|
||||||
${c1} -o\
|
|
||||||
:ooo:
|
:ooo:
|
||||||
.ooooo.
|
.ooooo.
|
||||||
ooooooo.
|
ooooooo.
|
||||||
@@ -23,5 +19,3 @@ ${c1} -o\
|
|||||||
.+osossos+-` `-+osososs+.
|
.+osossos+-` `-+osososs+.
|
||||||
:sss+=-:` `:-=+ssss:
|
:sss+=-:` `:-=+ssss:
|
||||||
:=-:` `-=+:
|
:=-:` `-=+:
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{"match": "\"archcraft_ascii\"*", "color": "6 1 2 3 4 5"}
|
||||||
|
${c1} -o\
|
||||||
|
:ooo:
|
||||||
|
.ooooo.
|
||||||
|
ooooooo.
|
||||||
|
+oooooooo.
|
||||||
|
-oooooooooo.
|
||||||
|
--:-+oooooooo.
|
||||||
|
yooo+=+sooooooo.
|
||||||
|
yoooooosooooooooo.
|
||||||
|
y+ooooooooooooooooo.
|
||||||
|
yoooooooooooooooooooo`
|
||||||
|
yoooooo+oo= :oo++ooooo`
|
||||||
|
:oooooo. +ooooo-
|
||||||
|
-ooooooo. .::. +ooosoo=
|
||||||
|
-oooooo` .oooo` +os-=o=
|
||||||
|
=ooooooo=: `oo+ :=ooo=--`.
|
||||||
|
+ooooooooos. .=sooooooo+-
|
||||||
|
.+osossos+-` `-+osososs+.
|
||||||
|
:sss+=-:` `:-=+ssss:
|
||||||
|
:=-:` `-=+:
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"archcraft_minimal\"*", "color": "6 1 2 3 4 5"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
archcraft_minimal = AsciiArt(match=r'''"archcraft_minimal"*''', color='6 1 2 3 4 5', ascii=r"""
|
|
||||||
${c1} ⢰⡆
|
${c1} ⢰⡆
|
||||||
⢠⣿⣿⡄
|
⢠⣿⣿⡄
|
||||||
⢀⣾⣿⣿⣿⡀
|
⢀⣾⣿⣿⣿⡀
|
||||||
@@ -23,5 +19,3 @@ ${c1} ⢰⡆
|
|||||||
⢠⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠁ ⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⡄
|
⢠⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠁ ⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⡄
|
||||||
⣠⣿⣿⣿⣿⠿⠛⠋⠁ ⠉⠙⠻⢿⣿⣿⣿⣿⣆
|
⣠⣿⣿⣿⣿⠿⠛⠋⠁ ⠉⠙⠻⢿⣿⣿⣿⣿⣆
|
||||||
⡰⠟⠛⠉⠁ ⠉⠙⠛⠿⢆
|
⡰⠟⠛⠉⠁ ⠉⠙⠛⠿⢆
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"ARCHlabs\"*", "color": "6 6 7 1"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
archlabs = AsciiArt(match=r'''"ARCHlabs"*''', color='6 6 7 1', ascii=r"""
|
|
||||||
${c1} 'c'
|
${c1} 'c'
|
||||||
'kKk,
|
'kKk,
|
||||||
.dKKKx.
|
.dKKKx.
|
||||||
@@ -24,5 +20,3 @@ ${c1} 'c'
|
|||||||
'xKK0koc,.. ${c4}'c, ${c1} ..,cok0KKk,
|
'xKK0koc,.. ${c4}'c, ${c1} ..,cok0KKk,
|
||||||
,xko:'. ${c4}.. ${c1} .':okx;
|
,xko:'. ${c4}.. ${c1} .':okx;
|
||||||
.,'. .',.
|
.,'. .',.
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"ArchMerge\"*", "color": "6 6 7 1"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
archmerge = AsciiArt(match=r'''"ArchMerge"*''', color='6 6 7 1', ascii=r"""
|
|
||||||
${c1} y:
|
${c1} y:
|
||||||
sMN-
|
sMN-
|
||||||
+MMMm`
|
+MMMm`
|
||||||
@@ -23,5 +19,3 @@ ${c1} y:
|
|||||||
/NMMMNds+:.` `-/oymMMMm.
|
/NMMMNds+:.` `-/oymMMMm.
|
||||||
+Mmy/. `:smN:
|
+Mmy/. `:smN:
|
||||||
/+. -o.
|
/+. -o.
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"ArchStrike\"*", "color": "8 6", "foreground": [2]}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
archstrike = AsciiArt(match=r'''"ArchStrike"*''', color='8 6', ascii=r"""
|
|
||||||
${c1} *
|
${c1} *
|
||||||
**.
|
**.
|
||||||
****
|
****
|
||||||
@@ -20,5 +16,3 @@ ${c1} *
|
|||||||
******${c2}/${c1}*** ${c2}//// ${c1}**${c2}/${c1}******
|
******${c2}/${c1}*** ${c2}//// ${c1}**${c2}/${c1}******
|
||||||
********${c2}/${c1}* ${c2}/// ${c1}*${c2}/${c1}********
|
********${c2}/${c1}* ${c2}/// ${c1}*${c2}/${c1}********
|
||||||
,****** ${c2}// ______ / ${c1}******,
|
,****** ${c2}// ______ / ${c1}******,
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{"match": "\"arco\"*|\"arcolinux\"*", "color": "4 7"}
|
||||||
|
/-
|
||||||
|
ooo:
|
||||||
|
yoooo/
|
||||||
|
yooooooo
|
||||||
|
yooooooooo
|
||||||
|
yooooooooooo
|
||||||
|
.yooooooooooooo
|
||||||
|
.oooooooooooooooo
|
||||||
|
.oooooooarcoooooooo
|
||||||
|
.ooooooooo-oooooooooo
|
||||||
|
.ooooooooo- oooooooooo
|
||||||
|
:ooooooooo. :ooooooooo
|
||||||
|
:ooooooooo. :ooooooooo
|
||||||
|
:oooarcooo .oooarcooo
|
||||||
|
:ooooooooy .ooooooooo
|
||||||
|
${c1}:ooooooooo ${c2}/ooooooooooooooooooo
|
||||||
|
${c1}:ooooooooo ${c2}.-ooooooooooooooooo.
|
||||||
|
${c1}ooooooooo- ${c2}-ooooooooooooo.
|
||||||
|
${c1}ooooooooo- ${c2}.-oooooooooo.
|
||||||
|
${c1}ooooooooo. ${c2}-ooooooooo
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{"match": "\"arco_small\"*|\"arcolinux_small\"*", "color": "4 7"}
|
||||||
|
A
|
||||||
|
ooo
|
||||||
|
ooooo
|
||||||
|
ooooooo
|
||||||
|
ooooooooo
|
||||||
|
ooooo ooooo
|
||||||
|
ooooo ooooo
|
||||||
|
ooooo ooooo
|
||||||
|
ooooo ${c2}<oooooooo>${c1}
|
||||||
|
ooooo ${c2}<oooooo>${c1}
|
||||||
|
ooooo ${c2}<oooo>
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"ArcoLinux\"*", "color": "7 4"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
arcolinux = AsciiArt(match=r'''"ArcoLinux"*''', color='7 4', ascii=r"""
|
|
||||||
${c2} /-
|
${c2} /-
|
||||||
ooo:
|
ooo:
|
||||||
yoooo/
|
yoooo/
|
||||||
@@ -23,5 +19,3 @@ ${c2} /-
|
|||||||
ooooooooo- ${c1}-ooooooooooooo.${c2}
|
ooooooooo- ${c1}-ooooooooooooo.${c2}
|
||||||
ooooooooo- ${c1}.-oooooooooo.${c2}
|
ooooooooo- ${c1}.-oooooooooo.${c2}
|
||||||
ooooooooo. ${c1}-ooooooooo${c2}
|
ooooooooo. ${c1}-ooooooooo${c2}
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{"match": "\"arcolinux_small\"*", "color": "7 4"}
|
||||||
|
${c2} A
|
||||||
|
ooo
|
||||||
|
ooooo
|
||||||
|
ooooooo
|
||||||
|
ooooooooo
|
||||||
|
ooooo ooooo
|
||||||
|
ooooo ooooo
|
||||||
|
ooooo ooooo
|
||||||
|
ooooo ${c1}<oooooooo>${c2}
|
||||||
|
ooooo ${c1}<oooooo>${c2}
|
||||||
|
ooooo ${c1}<oooo>${c2}
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Arkane\"*", "color": "7 130 237", "foreground": [1]}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
arkane = AsciiArt(match=r'''"Arkane"*''', color='7 130 237', ascii=r"""
|
|
||||||
${c3} .:..
|
${c3} .:..
|
||||||
..:::......
|
..:::......
|
||||||
${c2}.${c3} .${c2}.${c3}.....
|
${c2}.${c3} .${c2}.${c3}.....
|
||||||
@@ -26,5 +22,3 @@ ${c2}.-==+++***++*${c1}*#########${c3}=:::.
|
|||||||
${c2}.:==++++++**${c1}#############${c3}:
|
${c2}.:==++++++**${c1}#############${c3}:
|
||||||
${c2}.${c3}-+*++*+++==${c1}###${c3}+
|
${c2}.${c3}-+*++*+++==${c1}###${c3}+
|
||||||
-${c1}*+${c3}:
|
-${c1}*+${c3}:
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{"match": "\"Armbian\"*", "color": "7 1"}
|
||||||
|
..
|
||||||
|
`:]x**j-,'
|
||||||
|
.,+t***********z\<"
|
||||||
|
?******************;
|
||||||
|
'*n` .'`^,;;,^`'. ,cc.
|
||||||
|
-<. .[l
|
||||||
|
// ^^ ^^ \\
|
||||||
|
!^ ${c2}^^${c1} ":
|
||||||
|
'tt}` ${c2}!~]rj_${c1} ")t/.
|
||||||
|
Itttt?' ${c2}~~]rr]${c1} `{tttt,
|
||||||
|
\tttttt!""I${c2}_]r(${c1}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{"match": "\"Armbian2\"*", "color": "1"}
|
||||||
|
█ █ █ █ █ █ █ █ █ █ █
|
||||||
|
███████████████████████
|
||||||
|
▄▄██ ██▄▄
|
||||||
|
▄▄██ ███████████ ██▄▄
|
||||||
|
▄▄██ ██ ██ ██▄▄
|
||||||
|
▄▄██ ██ ██ ██▄▄
|
||||||
|
▄▄██ ██ ██ ██▄▄
|
||||||
|
▄▄██ █████████████ ██▄▄
|
||||||
|
▄▄██ ██ ██ ██▄▄
|
||||||
|
▄▄██ ██ ██ ██▄▄
|
||||||
|
▄▄██ ██ ██ ██▄▄
|
||||||
|
▄▄██ ██▄▄
|
||||||
|
███████████████████████
|
||||||
|
█ █ █ █ █ █ █ █ █ █ █
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{"match": "\"arse\"*|\"arselinux\"*|\"arse-linux\"*", "color": "4 7"}
|
||||||
|
⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⣶⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⠀⠀⣴⣶⠀⠀⠀⠀⠀
|
||||||
|
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣄⠀⠀⠀⠀⣼⠟⠁⠀⠀⢀⣀⠀
|
||||||
|
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡀⠀⢀⣤⡀⠀⠀⠀⠉⢻⣷⡄⠀⠀⠁⠀⢀⣤⣾⡿⠟⠀
|
||||||
|
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣷⣿⠏⠀⠀⠀⠀⠀⠀⠹⣿⡄⠀⠀⠀⠙⠉⠁⠀⠀⠀
|
||||||
|
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⡄⠀⠀⠀⠀⠀⠀⠀⢹⣿⠀⠀⠀⠀⠠⣶⣶⣶⡶
|
||||||
|
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⠀⠀⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⠀⠀⠀⢠⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠂⠀⠀⠀⠀⠀⢀⣾⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⠇⠀⠀⠀⠀⠀⣠⣾⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⣿⣇⣀⣀⣀⣠⣴⣾⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⢸⣿⠀⠀⠀⠀⠀⣤⣤⣴⣶⣾⠿⠟⣿⡏⠙⠛⠛⠛⠋⠉⢀⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⣿⡄⠀⠀⠀⠀⠈⠉⠉⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⢸⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⠇⠀⠀⠀⠀⠀⠀⠘⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"ArseLinux\"*", "color": "4 7"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
arselinux = AsciiArt(match=r'''"ArseLinux"*''', color='4 7', ascii=r"""
|
|
||||||
${c1}
|
${c1}
|
||||||
⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
⠀⣶⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⠀⠀⣴⣶⠀⠀⠀⠀⠀
|
⠀⣶⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⠀⠀⣴⣶⠀⠀⠀⠀⠀
|
||||||
@@ -19,5 +15,3 @@ ${c1}
|
|||||||
⠀⣿⡄⠀⠀⠀⠀⠈⠉⠉⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⢸⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
⠀⣿⡄⠀⠀⠀⠀⠈⠉⠉⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⢸⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⠇⠀⠀⠀⠀⠀⠀⠘⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⠇⠀⠀⠀⠀⠀⠀⠘⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Artix\"*", "color": "6 6 7 1"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
artix = AsciiArt(match=r'''"Artix"*''', color='6 6 7 1', ascii=r"""
|
|
||||||
${c1} '
|
${c1} '
|
||||||
'o'
|
'o'
|
||||||
'ooo'
|
'ooo'
|
||||||
@@ -23,5 +19,3 @@ ${c1} '
|
|||||||
'ooooi:'` `'';ioxxo'
|
'ooooi:'` `'';ioxxo'
|
||||||
'i:'` '':io'
|
'i:'` '':io'
|
||||||
'` `'
|
'` `'
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{"match": "\"artix2_small\"*", "color": "6"}
|
||||||
|
/\
|
||||||
|
/ \
|
||||||
|
/`'.,\
|
||||||
|
/ ',
|
||||||
|
/ ,`\
|
||||||
|
/ ,.'`. \
|
||||||
|
/.,'` `'.\
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"artix_small\"*", "color": "6 6 7 1"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
artix_small = AsciiArt(match=r'''"artix_small"*''', color='6 6 7 1', ascii=r"""
|
|
||||||
${c1} '
|
${c1} '
|
||||||
'A'
|
'A'
|
||||||
'ooo'
|
'ooo'
|
||||||
@@ -16,5 +12,3 @@ ${c1} '
|
|||||||
'ooxoo'` .:ooxxo'
|
'ooxoo'` .:ooxxo'
|
||||||
'io'` `'oo'
|
'io'` `'oo'
|
||||||
'` `'
|
'` `'
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Arya\"*", "color": "2 1"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
arya = AsciiArt(match=r'''"Arya"*''', color='2 1', ascii=r"""
|
|
||||||
${c1} `oyyy/${c2}-yyyyyy+
|
${c1} `oyyy/${c2}-yyyyyy+
|
||||||
${c1} -syyyy/${c2}-yyyyyy+
|
${c1} -syyyy/${c2}-yyyyyy+
|
||||||
${c1} .syyyyy/${c2}-yyyyyy+
|
${c1} .syyyyy/${c2}-yyyyyy+
|
||||||
@@ -18,5 +14,3 @@ ${c1} .oyyyyyyo. :yyyyyy/${c2}-yyyyyy+ ---------
|
|||||||
${c1} .syyyyyy+` :yyyyyy/${c2}-yyyyy+-+syyyyyyyy
|
${c1} .syyyyyy+` :yyyyyy/${c2}-yyyyy+-+syyyyyyyy
|
||||||
${c1} -syyyyyy/ :yyyyyy/${c2}-yyys:.syyyyyyyyyy
|
${c1} -syyyyyy/ :yyyyyy/${c2}-yyys:.syyyyyyyyyy
|
||||||
${c1}:syyyyyy/ :yyyyyy/${c2}-yyo.:syyyyyyyyyyy
|
${c1}:syyyyyy/ :yyyyyy/${c2}-yyo.:syyyyyyyyyyy
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Asahi\"*", "color": "3 2 1 8 7 6 4", "foreground": [5]}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
asahi = AsciiArt(match=r'''"Asahi"*''', color='3 2 1 8 7 6 4', ascii=r"""
|
|
||||||
${c1} ## ${c2}**
|
${c1} ## ${c2}**
|
||||||
${c1}*####${c2}****.
|
${c1}*####${c2}****.
|
||||||
${c1}###${c2},
|
${c1}###${c2},
|
||||||
@@ -21,5 +17,3 @@ ${c3}(((((((((((((((((((((${c5}@@@${c6}&%&${c5}@@@%${c4},..........
|
|||||||
${c3}.(((((((((${c5}@@@@(${c4}....
|
${c3}.(((((((((${c5}@@@@(${c4}....
|
||||||
${c3}/(((((${c5}@@#${c4}...
|
${c3}/(((((${c5}@@#${c4}...
|
||||||
${c3}.((${c4}&,
|
${c3}.((${c4}&,
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{"match": "\"asahi2\"*|\"asahi-linux2\"*", "color": "3 6 1 1 7 8 6"}
|
||||||
|
${c1}_wwM ${c2}_ww
|
||||||
|
${c1}MMM${c2}MMMM
|
||||||
|
${c1}MM
|
||||||
|
${c3}_ww##############yy_
|
||||||
|
${c4}wMMMMM${c3}###########${c4}MMMMm
|
||||||
|
${c4},MMMMMMMMM${c3}######${c4}MMMMMMMM0_
|
||||||
|
${c4}wMMMMMMMMMMMMM${c5}MM${c6}0MMMMMMMMMMm
|
||||||
|
${c4},MMMMMMMMMMMMMMM${c5}MMMM${c6}0MMMMMMMMM0,
|
||||||
|
${c4}wMMMMMMMMMMMMMMMM${c5}MMMMM0${c6}MMMMMMMMMMb
|
||||||
|
${c4}_MMMMMMMMMMMMMMMMMM${c5}MMMMMMM0${c6}MMMMMMMMM0,
|
||||||
|
${c4}_MMMMMMMMMMMMMMMMMMM${c5}MMMM${c7}M${c5}MMMW${c6}MMMMMMMMMM_
|
||||||
|
${c4}_MMMMMMMMMMMMMMMMMMMM${c5}MMMM${c7}M0${c5}MMMW${c6}MMMMMMMMMM_
|
||||||
|
${c4}~MMMMMMMMMMMMMMMMM${c5}MMMM${c7}M${c5}MMMW${c6}MMMMM00~
|
||||||
|
${c4}~MMMMMMMMMMMMM${c5}MMMWMMM${c6}0MM${c5}MMM${c6}~
|
||||||
|
${c4}~MMMMMMMMMM${c5}MMMMM${c6}0MMM~~
|
||||||
|
${c4}~MMMMMM${c5}MMM${c6}0MM~
|
||||||
|
${c4}~MM${c5}M${c6}@~
|
||||||
|
${c4}M
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{"match": "\"aster\"*", "color": "6"}
|
||||||
|
...''...
|
||||||
|
.;oOXWMWNXXXNMMN0d:.
|
||||||
|
.oXMWOo;.. ..:oO;
|
||||||
|
;KMWx, co,
|
||||||
|
'KMNl dMMW.
|
||||||
|
oMMx xMMMMk
|
||||||
|
xMM: dMMMMMM;
|
||||||
|
cMMl dMMMMMMMW
|
||||||
|
NMK xMMMx::dXMx
|
||||||
|
,MMl xMMN' .o.
|
||||||
|
cMM; dMMW'
|
||||||
|
;MMc oMMW,
|
||||||
|
WMK dMMW, ccccccc.
|
||||||
|
lMMl oMMM; ooooooo.
|
||||||
|
OMMc ...
|
||||||
|
xMMx
|
||||||
|
;XMN:
|
||||||
|
,.
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"AsteroidOS\"*", "color": "160 208 202 214"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
asteroidos = AsciiArt(match=r'''"AsteroidOS"*''', color='160 208 202 214', ascii=r"""
|
|
||||||
${c1} ***
|
${c1} ***
|
||||||
${c1} *****
|
${c1} *****
|
||||||
${c1} **********
|
${c1} **********
|
||||||
@@ -20,5 +16,3 @@ ${c4} #######%#######
|
|||||||
${c4} (#%%%%%%%#
|
${c4} (#%%%%%%%#
|
||||||
${c4} %%%%%
|
${c4} %%%%%
|
||||||
${c4} %%%
|
${c4} %%%
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,30 +1,24 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"astOS\"*", "color": "8"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
astos = AsciiArt(match=r'''"astOS"*''', color='8', ascii=r"""
|
|
||||||
${c1} oQA#$%UMn
|
${c1} oQA#$%UMn
|
||||||
H 9
|
H 9
|
||||||
G #
|
G #
|
||||||
6 %
|
6 %
|
||||||
?#M#%KW3"
|
?#M#%KW3"
|
||||||
// \\
|
// \\\
|
||||||
// \\
|
// \\\
|
||||||
// \\
|
// \\\
|
||||||
// \\
|
// \\\
|
||||||
n%@$DK&ML .0O3#@&M_
|
n%@$DK&ML .0O3#@&M_
|
||||||
P # 8 W
|
P # 8 W
|
||||||
H U G #
|
H U G #
|
||||||
B N O @
|
B N O @
|
||||||
C&&#%HNAR 'WS3QMHB"
|
C&&#%HNAR 'WS3QMHB"
|
||||||
// \\ \\
|
// \\\ \\\
|
||||||
// \\ \\
|
// \\\ \\\
|
||||||
// \\ \\
|
// \\\ \\\
|
||||||
// \\ \\
|
// \\\ \\\
|
||||||
uURF$##Bv nKWB$%ABc aM@3R@D@b
|
uURF$##Bv nKWB$%ABc aM@3R@D@b
|
||||||
8 M @ O # %
|
8 M @ O # %
|
||||||
% & G U @ @
|
% & G U @ @
|
||||||
& @ # % % #
|
& @ # % % #
|
||||||
!HGN@MNCf t&$9#%HQr ?@G#6S@QP
|
!HGN@MNCf t&$9#%HQr ?@G#6S@QP
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{"match": "\"Astra\"*|\"Astra Linux\"*|\"astralinux\"*", "color": "1 7"}
|
||||||
|
AA
|
||||||
|
AaaA
|
||||||
|
Aa${c2}/\${c1}aA
|
||||||
|
${c1} Aa${c2}/${c1}aa${c2}\${c1}aA
|
||||||
|
${c1} Aa${c2}/${c1}aAAa${c2}\${c1}aA
|
||||||
|
${c1} aA${c2}/${c1}aaAAaa${c2}\${c1}Aa
|
||||||
|
${c1} aA${c2}/${c1}aaAAAAaa${c2}\${c1}Aa
|
||||||
|
${c1} aaaaaaAAAAa${c2}/${c1}aaAAAAAAaa${c2}\${c1}aAAAAaaaaa
|
||||||
|
${c1}aAAa${c2}-----${c1}aaaaaAAAAAAAAAAaaaaa${c2}-----${c1}aAAa
|
||||||
|
${c1} aAA${c2}\ ${c1}aAAAAAAAAAAAAAAAAAAAAAAa${c2} /${c1}AAa
|
||||||
|
${c1} aAa${c2}\${c1}aAAA${c2}\${c1}AAAA${c2}\${c1}AAAA${c2}\${c1}AAA${c2}\${c1}AAa${c2}/${c1}aAa
|
||||||
|
${c1} aAa${c2}\${c1}aA${c2}\\${c1}AAA${c2}\\${c1}AAA${c2}\\${c1}AA${c2}\\/${c1}aAa
|
||||||
|
${c1} aAA${c2}\${c1}aA${c2}\\${c1}AAA${c2}\\${c1}AAA${c2}\\${c1}Aa${c2}/${c1}AAa
|
||||||
|
${c1} aA${c2}\${c1}aA${c2}\\${c1}AAA${c2}\\${c1}AAA${c2}\\/${c1}Aa
|
||||||
|
${c1} aA${c2}/${c1}AA${c2}\\\${c1}AA${c2}\\\${c1}AA${c2}\\\${c1}Aa
|
||||||
|
${c1} aA${c2}/\${c1}AAa${c2}\\\${c1}Aa${c2}\\\${c1}Aa${c2}\\\${c1}Aa
|
||||||
|
${c1} aA${c2}/\\${c1}AAa${c2}\\/\${c1}a${c2}\\\${c1}Aa${c2}\\${c1}Aa
|
||||||
|
${c1} aA${c2}/${c1}a${c2}\\\${c1}Aa${c2}\/${c1}AA${c2}\\\\\${c1}Aa${c2}\\${c1}Aa
|
||||||
|
${c1} aA${c2}/${c1}aA${c2}\\/${c1}aAa aAa${c2}\\\${c1}Aa${c2}\${c1}Aa
|
||||||
|
${c1} aA${c2}/\${c1}A${c2}\/${c1}Aa aA${c2}\\${c1}A${c2}\\${c1}Aa
|
||||||
|
${c1} A${c2}|/${c1}aaAa aAaa${c2}\|${c1}A
|
||||||
|
${c1} aAaa aaAa
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{"match": "\"Astra Linux\"*", "color": "160 231", "foreground": [2]}
|
||||||
|
${c1} AA
|
||||||
|
${c1} AaaA
|
||||||
|
${c1} Aa${c2}/\\${c1}aA
|
||||||
|
${c1} Aa${c2}/${c1}aa${c2}\\${c1}aA
|
||||||
|
${c1} Aa${c2}/${c1}aAAa${c2}\\${c1}aA
|
||||||
|
${c1} aA${c2}/${c1}aaAAaa${c2}\\${c1}Aa
|
||||||
|
${c1} aA${c2}/${c1}aaAAAAaa${c2}\\${c1}Aa
|
||||||
|
${c1} aaaaaaAAAAa${c2}/${c1}aaAAAAAAaa${c2}\\${c1}aAAAAaaaaa
|
||||||
|
${c1} aAAa${c2}-----${c1}aaaaaAAAAAAAAAAaaaaa${c2}-----${c1}aAAa
|
||||||
|
${c1} aAA${c2}\ ${c1}aAAAAAAAAAAAAAAAAAAAAAAa${c2} /${c1}AAa
|
||||||
|
${c1} aAa${c2}\\${c1}aAAA${c2}\\${c1}AAAA${c2}\\${c1}AAAA${c2}\\${c1}AAA${c2}\\${c1}AAa${c2}/${c1}aAa
|
||||||
|
${c1} aAa${c2}\\${c1}aA${c2}\\\\${c1}AAA${c2}\\\\${c1}AAA${c2}\\\\${c1}AA${c2}\\\\/${c1}aAa
|
||||||
|
${c1} aAA${c2}\\${c1}aA${c2}\\\\${c1}AAA${c2}\\\\${c1}AAA${c2}\\\\${c1}Aa${c2}/${c1}AAa
|
||||||
|
${c1} aA${c2}\\${c1}aA${c2}\\\\${c1}AAA${c2}\\\\${c1}AAA${c2}\\\\/${c1}Aa
|
||||||
|
${c1} aA${c2}/${c1}AA${c2}\\\\\\${c1}AA${c2}\\\\\\${c1}AA${c2}\\\\\\${c1}Aa
|
||||||
|
${c1} aA${c2}/\\${c1}AAa${c2}\\\\\\${c1}Aa${c2}\\\\\\${c1}Aa${c2}\\\\\\${c1}Aa
|
||||||
|
${c1} aA${c2}/\\\\${c1}AAa${c2}\\\\/\\${c1}a${c2}\\\\\\${c1}Aa${c2}\\\\${c1}Aa
|
||||||
|
${c1} aA${c2}/${c1}a${c2}\\\\\\${c1}Aa${c2}\\/${c1}AA${c2}\\\\\\\\\\${c1}Aa${c2}\\\\${c1}Aa
|
||||||
|
${c1} aA${c2}/${c1}aA${c2}\\\\/${c1}aAa aAa${c2}\\\\\\${c1}Aa${c2}\\${c1}Aa
|
||||||
|
${c1} aA${c2}/\\${c1}A${c2}\\/${c1}Aa aA${c2}\\\\${c1}A${c2}\\\\${c1}Aa
|
||||||
|
${c1} A${c2}|/${c1}aaAa aAaa${c2}\\|${c1}A
|
||||||
|
${c1} aAaa aaAa
|
||||||
@@ -1,9 +1,5 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Ataraxia Linux\"*|\"Ataraxia\"*", "color": "4 5"}
|
||||||
|
'l:
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
januslinux = AsciiArt(match=r'''"januslinux"*|"janus"*|"Ataraxia Linux"*|"Ataraxia"*''', color='4 5 6 2', ascii=r"""
|
|
||||||
${c1} 'l:
|
|
||||||
loooooo
|
loooooo
|
||||||
loooo coooool
|
loooo coooool
|
||||||
looooooooooooooooooool
|
looooooooooooooooooool
|
||||||
@@ -27,5 +23,3 @@ ${c1} cooo: ${c2}coooooooooooooooooool
|
|||||||
:oooool, coool:, looool:,
|
:oooool, coool:, looool:,
|
||||||
looool: ooooooooooooooo:
|
looool: ooooooooooooooo:
|
||||||
cooolc .ooooooooooool
|
cooolc .ooooooooooool
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
{"match": "\"Athena\"*", "color": "7 3"}
|
||||||
|
${c1} . ..
|
||||||
|
${c1} :####: ####.
|
||||||
|
${c1} .################
|
||||||
|
${c1} :##################
|
||||||
|
${c1}.###################.
|
||||||
|
${c1}######## #######
|
||||||
|
${c1}####### ${c2}####${c1} #####
|
||||||
|
${c1}:#######. ####
|
||||||
|
${c1} ######### ${c2}#${c1} ## #
|
||||||
|
${c1} ####### ${c2}##${c1} ####
|
||||||
|
${c1}######## ${c2}####${c1} #######
|
||||||
|
${c1}######## ${c2}#####${c1} ########
|
||||||
|
${c1}######## ${c2}#######${c1} #######
|
||||||
|
${c1} ####### ${c2}########${c1} #######
|
||||||
|
${c1} ######## ${c2}#########${c1} ######
|
||||||
|
${c1} ######## ${c2}#########${c1} #####
|
||||||
|
${c1} ####### ${c2}#########${c1} ####
|
||||||
|
${c1} ####### ${c2}#########${c1} ##
|
||||||
|
${c1} ####### ${c2}########${c1} ##
|
||||||
|
${c1} ###### ${c2}########${c1} #
|
||||||
|
${c1} ### ${c2}#######${c1}
|
||||||
|
${c1} ${c2}######${c1}
|
||||||
|
${c1} ${c2}####${c1}
|
||||||
|
${c1} ${c2}##${c1}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
{"match": "\"AthenaOS\"*", "color": "4 4"}
|
||||||
|
u.
|
||||||
|
..:Y
|
||||||
|
.Y..1
|
||||||
|
..::i::.. .br7S.
|
||||||
|
.::::...::::. 5dDr:
|
||||||
|
..:::.. .:i::.. Y7:
|
||||||
|
..:::::.. ..::::.
|
||||||
|
...:i:i:i:.. ${c2}... ${c1}:.:..:i:::...
|
||||||
|
::i:. ${c2}.USL Yr ${c1}..i::.
|
||||||
|
.:::. ${c2}:K :u. ${c1}.::.
|
||||||
|
:... ${c2}jB. .:vUi: 77 KB: ${c1}..::
|
||||||
|
...: ${c2}iBR vP::5X5PgSKXvLjS. iBB ${c1}.::.
|
||||||
|
:i:: ${c2}BBQr jgDIuj1UuJjXbbi 2BBP ${c1}:::;
|
||||||
|
'i:: ${c2}sQBg: i2S55121XSSU. YBQZ: ${c1}.:::
|
||||||
|
r::: ${c2}r:JgBMu. Q :BqEqZEB: Q :qBBK7i: ${c1}:i:i
|
||||||
|
.rir. ${c2}IBqPDgQBDr P rB :q 1QBRgEqgB ${c1}.::i.
|
||||||
|
:i:i ${c2}:JsXPDDRQQPBL P qQXBQRDDPIYY ${c1}rir:
|
||||||
|
:iii ${c2}5qvLUDDMgMgBB5 :DBQZRgMDdJ7Ygi ${c1}iir:
|
||||||
|
iri: ${c2}MBRgdZZggQgRBMIBQQRRggdZdMBBr ${c1}riri
|
||||||
|
irii ${c2}IBQgdZbDDRRRgQgQQMZDdZdgBB. ${c1}iiri
|
||||||
|
i7rr ${c2}.BBQZZbEEMQQDBQMEZdDDBBP ${c1}.rir:
|
||||||
|
:7ir. ${c2}7BBQMDMQSbB5ZBggQBBQ. ${c1}ivr7.
|
||||||
|
:r7r. ${c2}7BBBB:rBbQ.1BBBM. ${c1}:r7vi
|
||||||
|
::rLrr. ${c2}.b:rBQ7QB uU. ${c1}:7vLi.
|
||||||
|
.BB .iLYv: ${c1}idL B1 ${c1}:r77r.
|
||||||
|
LBB :vrvvr rvu7r:
|
||||||
|
ZB. ':7v177Lsvurr:'
|
||||||
|
.d2 ''::r:''
|
||||||
|
:'
|
||||||
@@ -1,9 +1,5 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"AthenaOS_old\"*", "color": "7 3"}
|
||||||
|
. ..
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
athena = AsciiArt(match=r'''"Athena"*''', color='7 3', ascii=r"""
|
|
||||||
${c1} . ..
|
|
||||||
${c1} :####: ####.
|
${c1} :####: ####.
|
||||||
${c1} .################
|
${c1} .################
|
||||||
${c1} :##################
|
${c1} :##################
|
||||||
@@ -27,5 +23,3 @@ ${c1} ### ${c2}#######${c1}
|
|||||||
${c1} ${c2}######${c1}
|
${c1} ${c2}######${c1}
|
||||||
${c1} ${c2}####${c1}
|
${c1} ${c2}####${c1}
|
||||||
${c1} ${c2}##${c1}
|
${c1} ${c2}##${c1}
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
{"match": "\"Aurora\"*", "color": "4 5 1 7"}
|
||||||
|
+++++++++
|
||||||
|
+++++${c4}+${c1}++++++${c4}+${c1}++
|
||||||
|
++++++${c4}+${c1}+++ +++++++++++
|
||||||
|
+++++++++++ ${c2}+${c1} +++++${c4}+${c1}+++++
|
||||||
|
++++++${c4}+${c1}++++ ${c4}+++${c1} +++++++++++
|
||||||
|
++++++++++${c4} + +++++ ++ ${c2}+++++${c4}+${c2}++++
|
||||||
|
+++${c4}+${c1}++++${c4} + + + +++++++ + + ${c2}+++++${c4}+${c2}++
|
||||||
|
++++++${c4} ${c2}+${c4} +++ +++++++++ +++ ${c2}++++++++
|
||||||
|
+++${c4}+${c1}++${c4} + +++++ +++++ +
|
||||||
|
++++++${c4} ${c2}+${c4} +++++ +++++ +++++
|
||||||
|
++${c4}+${c2}+++${c4} + +++++ ++++++ ++++++++++
|
||||||
|
++++++${c4} +++++ +++++ + +++++++++++++++++++
|
||||||
|
++++++${c4} + +++++ + +++++++++++++++
|
||||||
|
+++${c4}++${c2}+${c4} ++++++ +++++++++++++
|
||||||
|
++++++${c4} + ++++++ +++++++++++++ ${c2}+++ ${c4}++
|
||||||
|
++++++${c4} ++++++++++++++++ ${c2}++${c4}+${c2}+ ${c4}++ ${c1}+
|
||||||
|
++++++${c4} ++++++++++++++ ${c3}+ ${c2}++++
|
||||||
|
++++++${c4} +++++++++++ + ${c4}+ ${c3}++++++
|
||||||
|
++${c4}+${c3}+++${c4} ++++++++++ +++ ${c3}+++++++++++++
|
||||||
|
+++++ ${c4}+++++++++ + ${c3}+++++++++++++
|
||||||
|
+++ ${c4}++++++++ ${c2}++${c4} + ${c3}++++++++++++++ ++++
|
||||||
|
++ ${c4}++++++++ ${c3}+ ++++++++++++++ +++++++
|
||||||
|
${c4}++++++ ${c2}+ ${c3}+++++++++++++ +++++++${c2}++
|
||||||
|
${c4}++++ ${c3}+++++++++++++ ++++++${c2}+++
|
||||||
|
+++++++++++ ++++++${c2}+++
|
||||||
|
+++++ ++++++${c2}+++
|
||||||
|
++++++${c2}++
|
||||||
|
+++++
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{"match": "\"AxOS\"*", "color": "38;2;222;6;255 38;2;222;6;255"}
|
||||||
|
▂🬭⎻⎻🬭▂
|
||||||
|
▁▂━▂🬭🬭🭗 🬁🬭🬭▂▁━▂▁
|
||||||
|
🬂🬂🮂━🮂▔ ▔🮂━🮂🬂🬂🬿
|
||||||
|
🭄🬨▍ 🬜🮂▔ ▁▂▂🬭🬭▂▂▁ ▔🮂🬪 🮈🬕
|
||||||
|
🭄🭙▐▎ 🭃██████████🭎 🭢🮇▌🭤
|
||||||
|
🭄🭙 ▐🭄🭙 🭋█████🭜█████🭀 🭤🭏▌ 🭤🭏
|
||||||
|
🭗 🮉🭛 🭃███🭝🭙 🭥🭒███🭎 🭦▋ 🭢
|
||||||
|
▟🬮━🭷🭘 🭋████▄▂ ▂▄████🭀 🭣━🬯🭏
|
||||||
|
🭕╾🭺🬽 🭃██🭡 🭖██🭐 🭈╼🬡🭠
|
||||||
|
🬼 🮉🭀 🭋███΄ 🭤███🭀 🭋▊ 🭇
|
||||||
|
🬾 ▐🬾▁▁ 🭃██ ██🭐 ▁▁🭉🭫▌ 🭉🭠
|
||||||
|
🬾🮈▎ ▔🮂🬂▀🬎🬎 🮅🬎▀🬂🮂▔ 🮇▌🭉
|
||||||
|
🭿▍ ▂▁ ▁▂🬜΄🮈🬲
|
||||||
|
🭥🬭🬭▂▁━▂▁ ▁▂━▂🬭🬭🭚
|
||||||
|
▔⎺━▔🮂🬂🬂🬼 🭇🬂🬂🮂▔━⎺▔
|
||||||
|
⠈🮂🭷╾🭄╼🬂🮂΄
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"azos\"*", "color": "6 1"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
azos = AsciiArt(match=r'''"azos"*''', color='6 1', ascii=r"""
|
|
||||||
${c1} ////. ${c2} (((((
|
${c1} ////. ${c2} (((((
|
||||||
${c1} //////// ${c2} @((((((((
|
${c1} //////// ${c2} @((((((((
|
||||||
${c1} //////// ${c2} @((((((((
|
${c1} //////// ${c2} @((((((((
|
||||||
@@ -20,5 +16,3 @@ ${c1} //////// ////// ${c2} @(((( @((((((((
|
|||||||
${c1} //////// ${c2} @((((((((
|
${c1} //////// ${c2} @((((((((
|
||||||
${c1} //////// ${c2} @((((((((
|
${c1} //////// ${c2} @((((((((
|
||||||
${c1} ///// ${c2} (((((
|
${c1} ///// ${c2} (((((
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Bazzite\"*", "color": "5 5"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
bazzite = AsciiArt(match=r'''"Bazzite"*''', color='5 5', ascii=r"""
|
|
||||||
${c1} %%%%%%====%%%%%%%%%%
|
${c1} %%%%%%====%%%%%%%%%%
|
||||||
%%%%%%%% %%%%%%%%%%%%%%
|
%%%%%%%% %%%%%%%%%%%%%%
|
||||||
%%%%%%%%% %%%%%%%%%%%%%%%%
|
%%%%%%%%% %%%%%%%%%%%%%%%%
|
||||||
@@ -22,5 +18,3 @@ ${c1} %%%%%%====%%%%%%%%%%
|
|||||||
#######################
|
#######################
|
||||||
###################
|
###################
|
||||||
###########
|
###########
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{"match": "\"Bedrock\"*", "color": "8 7"}
|
||||||
|
${c1}--------------------------------------
|
||||||
|
--------------------------------------
|
||||||
|
--------------------------------------
|
||||||
|
---${c2}\\\\\\\\\\\\\\\\\\\\\\\\${c1}-----------------------
|
||||||
|
----${c2}\\\\\\ \\\\\\${c1}----------------------
|
||||||
|
-----${c2}\\\\\\ \\\\\\${c1}---------------------
|
||||||
|
------${c2}\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\${c1}------
|
||||||
|
-------${c2}\\\\\\ \\\\\\${c1}-----
|
||||||
|
--------${c2}\\\\\\ \\\\\\${c1}----
|
||||||
|
---------${c2}\\\\\\ ______ \\\\\\${c1}---
|
||||||
|
----------${c2}\\\\\\ ///${c1}---
|
||||||
|
-----------${c2}\\\\\\ ///${c1}----
|
||||||
|
------------${c2}\\\\\\ ///${c1}-----
|
||||||
|
-------------${c2}\\\\\\////////////////${c1}------
|
||||||
|
--------------------------------------
|
||||||
|
--------------------------------------
|
||||||
|
--------------------------------------
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{"match": "\"bedrock_small\"*", "color": "8 7"}
|
||||||
|
_________
|
||||||
|
| ${c2}__ ${c1} |
|
||||||
|
| ${c2}\ \___ ${c1} |
|
||||||
|
| ${c2} \ _ \${c1} |
|
||||||
|
| ${c2} \___/${c1} |
|
||||||
|
|_________|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"BigLinux\"*", "color": "6 11 4"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
biglinux = AsciiArt(match=r'''"BigLinux"*''', color='6 11 4', ascii=r"""
|
|
||||||
${c1} ...
|
${c1} ...
|
||||||
:OWMMMNd.
|
:OWMMMNd.
|
||||||
:NMMMMMMMMWc
|
:NMMMMMMMMWc
|
||||||
@@ -22,5 +18,3 @@ ${c3} .X. oMMMMW. l.
|
|||||||
kMMMMMMMMMMX.
|
kMMMMMMMMMMX.
|
||||||
:XMMMMMMK:
|
:XMMMMMMK:
|
||||||
':MM:" Made in Brazil
|
':MM:" Made in Brazil
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"BigLinux_large\"*", "color": "2 3 4 7"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
biglinux_large = AsciiArt(match=r'''"BigLinux_large"*''', color='2 3 4 7', ascii=r"""
|
|
||||||
${c4}
|
${c4}
|
||||||
${c3}.cd0KXXX${c4}0${c3}x;
|
${c3}.cd0KXXX${c4}0${c3}x;
|
||||||
${c3}.oXM${c4}M${c3}MMMMMMMMMWo
|
${c3}.oXM${c4}M${c3}MMMMMMMMMWo
|
||||||
@@ -25,5 +21,3 @@ ${c4}
|
|||||||
${c1}oWMMMMMMMMMMMMMMk.
|
${c1}oWMMMMMMMMMMMMMMk.
|
||||||
${c1}.oXMMMMMMMMW0c.
|
${c1}.oXMMMMMMMMW0c.
|
||||||
${c1}.;ccc:,.
|
${c1}.;ccc:,.
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"Bitrig\"*", "color": "2 7"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
bitrig = AsciiArt(match=r'''"Bitrig"*''', color='2 7', ascii=r"""
|
|
||||||
${c1} `hMMMMN+
|
${c1} `hMMMMN+
|
||||||
-MMo-dMd`
|
-MMo-dMd`
|
||||||
oMN- oMN`
|
oMN- oMN`
|
||||||
@@ -20,5 +16,3 @@ ${c1} `hMMMMN+
|
|||||||
/MN/-------oNN:
|
/MN/-------oNN:
|
||||||
hMd. .dMh
|
hMd. .dMh
|
||||||
sm/ /ms
|
sm/ /ms
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"BlackArch\"*", "color": "1 1 0 1", "foreground": [3]}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
blackarch = AsciiArt(match=r'''"BlackArch"*''', color='1 1 0 1', ascii=r"""
|
|
||||||
${c3} 00
|
${c3} 00
|
||||||
11
|
11
|
||||||
====${c1}
|
====${c1}
|
||||||
@@ -24,5 +20,3 @@ ${c2} .oossssso-`${c3}//${c1}`/ossssss+`
|
|||||||
`+sso+:-` ${c3}//${c1} `.-/+oso:
|
`+sso+:-` ${c3}//${c1} `.-/+oso:
|
||||||
`++:. ${c3}//${c1} `-/+/
|
`++:. ${c3}//${c1} `-/+/
|
||||||
.` ${c3}/${c1} `/
|
.` ${c3}/${c1} `/
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"BlackMesa\"", "color": "1"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
blackmesa = AsciiArt(match=r'''"BlackMesa"''', color='1', ascii=r"""
|
|
||||||
${c1}
|
${c1}
|
||||||
.-;+$XHHHHHHX$+;-.
|
.-;+$XHHHHHHX$+;-.
|
||||||
,;X@@X%/;=----=:/%X@@X/,
|
,;X@@X%/;=----=:/%X@@X/,
|
||||||
@@ -24,5 +20,3 @@ H@: :HHHHHHHHHHHHHHHHHHX, =@H
|
|||||||
:$@@@@@@@@@@@@@@@@@@@M@@@@$:
|
:$@@@@@@@@@@@@@@@@@@@M@@@@$:
|
||||||
,;$@@@@@@@@@@@@@@@@@@X/-
|
,;$@@@@@@@@@@@@@@@@@@X/-
|
||||||
.-;+$XXHHHHHX$+;-.
|
.-;+$XXHHHHHX$+;-.
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"blackPanther\"* | 'blackpanther'*", "color": "1 11 12"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
blackpanther = AsciiArt(match=r'''"blackPanther"* | 'blackpanther'*''', color='1 11 12', ascii=r"""
|
|
||||||
${c3} ........
|
${c3} ........
|
||||||
.,»╔╗╗╬▄▄╫█▀▓▄▄╬╗╗g≈,.
|
.,»╔╗╗╬▄▄╫█▀▓▄▄╬╗╗g≈,.
|
||||||
,j╗╬╣▓▓███████▌;»╙▀▀▀▀█▄▄╗j,
|
,j╗╬╣▓▓███████▌;»╙▀▀▀▀█▄▄╗j,
|
||||||
@@ -26,5 +22,3 @@ ${c3} ........
|
|||||||
`"╨▀█▄▄▄░`▐█████▄, ,▄▄▀▀░`
|
`"╨▀█▄▄▄░`▐█████▄, ,▄▄▀▀░`
|
||||||
`"╙╩▀▀▀▀████████▓▌▌▌▀▀▀╨"``
|
`"╙╩▀▀▀▀████████▓▌▌▌▀▀▀╨"``
|
||||||
``""░╚╨╝╝╝╝╨╨░""``
|
``""░╚╨╝╝╝╝╨╨░""``
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"BLAG\"*", "color": "5 7"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
blag = AsciiArt(match=r'''"BLAG"*''', color='5 7', ascii=r"""
|
|
||||||
${c1} d
|
${c1} d
|
||||||
,MK:
|
,MK:
|
||||||
xMMMX:
|
xMMMX:
|
||||||
@@ -20,5 +16,3 @@ ${c1} d
|
|||||||
OMMMK:
|
OMMMK:
|
||||||
oWk,
|
oWk,
|
||||||
;:
|
;:
|
||||||
""")
|
|
||||||
|
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
# This file is automatically generated. Please do not modify.
|
{"match": "\"BlankOn\"*", "color": "1 7 3"}
|
||||||
|
|
||||||
from . import AsciiArt
|
|
||||||
|
|
||||||
blankon = AsciiArt(match=r'''"BlankOn"*''', color='1 7 3', ascii=r"""
|
|
||||||
${c2} `./ohdNMMMMNmho+.` ${c1} .+oo:`
|
${c2} `./ohdNMMMMNmho+.` ${c1} .+oo:`
|
||||||
${c2} -smMMMMMMMMMMMMMMMMmy-` ${c1}`yyyyy+
|
${c2} -smMMMMMMMMMMMMMMMMmy-` ${c1}`yyyyy+
|
||||||
${c2} `:dMMMMMMMMMMMMMMMMMMMMMMd/` ${c1}`yyyyys
|
${c2} `:dMMMMMMMMMMMMMMMMMMMMMMd/` ${c1}`yyyyys
|
||||||
@@ -20,5 +16,3 @@ ${c2} -hMMMMMMMMNNNmmNNNMMMMMMMMh- ${c1}`yyyyys
|
|||||||
${c2} :yNMMMMMMMMMMMMMMMMMMNy:` ${c1}`yyyyys
|
${c2} :yNMMMMMMMMMMMMMMMMMMNy:` ${c1}`yyyyys
|
||||||
${c2} .:sdNMMMMMMMMMMNds/. ${c1}`yyyyyo
|
${c2} .:sdNMMMMMMMMMMNds/. ${c1}`yyyyyo
|
||||||
${c2} `.:/++++/:.` ${c1}:oys+.
|
${c2} `.:/++++/:.` ${c1}:oys+.
|
||||||
""")
|
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user