Compare commits
4 commits
Author | SHA1 | Date | |
---|---|---|---|
b26d54f371 | |||
0419647865 | |||
fd2720ac17 | |||
9a76e56656 |
3
.gitignore
vendored
|
@ -1,8 +1,7 @@
|
|||
logo
|
||||
config/vms_ready/
|
||||
config/vms_supported/
|
||||
#*.chunklist
|
||||
#*.conf
|
||||
*.conf
|
||||
*.dmg
|
||||
*.fd
|
||||
*.img
|
||||
|
|
3
.gitmodules
vendored
|
@ -1,3 +0,0 @@
|
|||
[submodule "quickemu-origin"]
|
||||
path = quickemu-origin
|
||||
url = https://github.com/quickemu-project/quickemu
|
|
@ -1 +0,0 @@
|
|||
docs/README.md
|
342
README.md
|
@ -1,83 +1,47 @@
|
|||

|
||||

|
||||

|
||||

|
||||
Want you try new Operating system?
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
# Looking to try out a new operating system?
|
||||
|
||||
try
|
||||
|
||||
# **DistroHopper**
|
||||
Quickly download, create and run VM of any#TODO operating system.
|
||||
|
||||
|
||||
# For now yad not work under wayland correctly
|
||||
Until this will be solved upstream use just quickfzf TUI under wayland!
|
||||
It's even quicker and easier to use.
|
||||
But don't have that nice distro icons you never heard about.. (or no?)
|
||||
|
||||
Linux required...
|
||||
|
||||
---
|
||||
|
||||
Click on Hop for latest download
|
||||
|
||||
[](https://sourceforge.net/projects/distrohopper/files/latest/download)
|
||||
|
||||
[](https://liberapay.com/zenobit/donate)
|
||||
How?
|
||||
|
||||
# [DistroHooper](https://github.com/oSoWoSo/DistroHooper)
|
||||
Licensed under AGPL3
|
||||
# Still Beta version!
|
||||
<details>
|
||||
<summary>Click for screenshot</summary>
|
||||
<img src="docs/distrohopper.png">
|
||||
</details>
|
||||
|
||||
As a base excellent [quickemu](https://github.com/quickemu-project/quickemu) (Link to project page)
|
||||
|
||||
[](https://www.youtube.com/watch?v=AOTYWEgw0hI)
|
||||
### Still Testing version!
|
||||

|
||||
|
||||
|
||||
You can download new distro with **few clicks** of a mouse
|
||||
quickly create and run VMs
|
||||
|
||||
# Features
|
||||
- GUI using yad (on youtube)
|
||||
As a base excellent [quickemu](https://github.com/quickemu-project/quickemu)
|
||||
|
||||
[](https://www.youtube.com/watch?v=RrFQECcwLRA)
|
||||
I added:
|
||||
|
||||
- TUI using fzf (on youtube)
|
||||
## quickgui
|
||||
using yad
|
||||
|
||||
[](https://www.youtube.com/watch?v=gJ5hqYEskOw)
|
||||
### .Desktop file generator
|
||||
It will simple generate .desktop files for every supported VM in quickemu.
|
||||
So you can copy it anywhere...
|
||||
|
||||
- Desktop(shortcuts) entries generator
|
||||
And I mean every supported distro.
|
||||
|
||||
- Set dir where VMs will be stored
|
||||
you can download new distro with few clicks of a mouse
|
||||
|
||||
- Install DistroHopper systemwide
|
||||
You need to run quickgui just for update supported distros.
|
||||
|
||||
- Portable mode (dependecies still must be installed)
|
||||
### Simple GUI using yad --notebook
|
||||
|
||||
- Add new operating system to quickget (bit easier)
|
||||
See it in action on youtube...
|
||||
|
||||
- Copy all downloaded ISOs to destination directory
|
||||
[](https://www.youtube.com/watch?v=JtjIseqZMkQ)
|
||||
|
||||
- Translate DistroHopper (Currently supported English and Czech language)
|
||||
or command line?...
|
||||
|
||||
|
||||
Developed in English and translated into Czech language.
|
||||
## quicktui
|
||||
using fzf
|
||||
|
||||
## Welcome translations!
|
||||
[](https://www.youtube.com/watch?v=gJ5hqYEskOw)
|
||||
|
||||
---
|
||||
|
||||
# Why am I doing it?
|
||||
# Why I creating this?
|
||||
Because I wanna learn
|
||||
|
||||
- Linux
|
||||
|
@ -88,20 +52,23 @@ Developed in English and translated into Czech language.
|
|||
|
||||
- project management
|
||||
|
||||
And contribute to open source
|
||||
- contribute to open source
|
||||
|
||||
play with Quickemu
|
||||
Because I wanna play with Quickemu
|
||||
|
||||
And easily add new distros to it
|
||||
And easily add new distro to it
|
||||
|
||||
---
|
||||
#
|
||||
|
||||
## How to run DistroHopper?
|
||||
Quickemu.
|
||||
|
||||
You need fullfill the requirement first...
|
||||
[](https://www.youtube.com/watch?v=AOTYWEgw0hI)
|
||||
|
||||
## Requirements (For running VMs)
|
||||
- [QEMU](https://www.qemu.org/) (*6.0.0 or newer*) **with GTK, SDL, SPICE & VirtFS support**
|
||||
## Requirements
|
||||
|
||||
- [QEMU](https://www.qemu.org/) (*6.0.0 or newer*) **with GTK, SDL,
|
||||
SPICE & VirtFS support**
|
||||
- [bash](https://www.gnu.org/software/bash/) (*4.0 or newer*)
|
||||
- [Coreutils](https://www.gnu.org/software/coreutils/)
|
||||
- [EDK II](https://github.com/tianocore/edk2)
|
||||
|
@ -134,245 +101,36 @@ packaging will take care of the dependencies. For other host
|
|||
distributions or operating systems it will be necessary to install the
|
||||
above requirements or their equivalents.
|
||||
|
||||
If you install DistroHopper, it should take care of dependencies on Arch, Debian, Ubuntu, openSuse and Fedora
|
||||
These examples may save a little typing
|
||||
|
||||
### For DistroHopper to work you need
|
||||
Debian:
|
||||
|
||||
`wget yad fzf`
|
||||
sudo apt install qemu bash coreutils ovmf grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-client-gtk swtpm wget xdg-user-dirs zsync unzip
|
||||
|
||||
quickemu is included
|
||||
Fedora:
|
||||
|
||||
For adding new distros, or adding/improving translations you will need also meld.
|
||||
sudo dnf install qemu bash coreutils edk2-tools grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-gtk-tools swtpm wget xdg-user-dirs xrandr unzip
|
||||
|
||||
# How to install DistroHopper?
|
||||
Void Linux:
|
||||
|
||||
You need get copy of distrohopper
|
||||
sudo xbps-install qemu bash coreutils grep jq procps-ng python3 util-linux sed spice-gtk swtpm usbutils wget xdg-user-dirs xrandr unzip zsync socat
|
||||
|
||||
If you want more stable experience, download latest release from
|
||||
# Currently supported Distribution:
|
||||
|
||||
#### [GitHub](https://github.com/oSoWoSo/DistroHopper/releases) or SourceForge [](https://sourceforge.net/projects/distrohopper/files/latest/download)
|
||||
In screenshot above...
|
||||
|
||||
---
|
||||
|
||||
If you want latest developer version... (could have bugs and break anytime)
|
||||
|
||||
Or you want translate DistroHopper
|
||||
|
||||
`git clone https://github.com/oSoWoSo/DistroHopper`
|
||||
|
||||
Enter created/unpacked distrohopper directory
|
||||
|
||||
Now you should be good to go...
|
||||
|
||||
---
|
||||
|
||||
# How to run DistroHopper
|
||||
|
||||
Just run from terminal
|
||||
|
||||
`./dh`
|
||||
|
||||
And you will see what next...
|
||||
|
||||
I am usually run DistroHopper as:
|
||||
|
||||
`./dh m r s l && ./dh i && dh g`
|
||||
|
||||
(But...)
|
||||
|
||||
## Desktop files
|
||||
|
||||
All desktop files will be storred in your .config/distrohopper
|
||||
in directories *ready* and *supported*
|
||||
|
||||
Fell free to copy them anywhere you want...
|
||||
|
||||
### Currently supported Operating Systems and tools:
|
||||
agarimos
|
||||
alma
|
||||
alpine
|
||||
android
|
||||
arch
|
||||
archcraft
|
||||
arco
|
||||
artix
|
||||
athenaos
|
||||
batocera
|
||||
biglinux
|
||||
blendos
|
||||
bodhi
|
||||
cachyos
|
||||
centos-stream
|
||||
cereus
|
||||
chimera
|
||||
debian
|
||||
deepin
|
||||
devuan
|
||||
dietpi
|
||||
dragonflybsd
|
||||
edubuntu
|
||||
elementary
|
||||
endeavouros
|
||||
endless
|
||||
fedora
|
||||
freebsd
|
||||
freedos
|
||||
fvoid
|
||||
gabeeos
|
||||
garuda
|
||||
gentoo
|
||||
ghostbsd
|
||||
haiku
|
||||
holoiso
|
||||
kali
|
||||
kdeneon
|
||||
kolibrios
|
||||
kubuntu
|
||||
lite
|
||||
lmde
|
||||
mageia
|
||||
manjaro
|
||||
mint
|
||||
miyo
|
||||
mx
|
||||
netboot
|
||||
netbsd
|
||||
nixos
|
||||
lubuntu
|
||||
macos
|
||||
openbsd
|
||||
openindiana
|
||||
opensuse
|
||||
oracle
|
||||
popos
|
||||
reactos
|
||||
rebornos
|
||||
rocky
|
||||
siduction
|
||||
slackware
|
||||
slax
|
||||
slitaz
|
||||
solus
|
||||
tails
|
||||
tinycore
|
||||
truenas-core
|
||||
truenas-scale
|
||||
tuxedoos
|
||||
ubuntu
|
||||
ubuntu-budgie
|
||||
ubuntucinnamon
|
||||
ubuntukylin
|
||||
ubuntu-mate
|
||||
ubuntu-server
|
||||
ubuntustudio
|
||||
ubuntu-unity
|
||||
vanillaos
|
||||
ventoy
|
||||
void
|
||||
voidpup
|
||||
vx
|
||||
windows
|
||||
xero
|
||||
xubuntu
|
||||
zorin
|
||||
|
||||
|
||||
Also with posible planned: [in discusion](https://github.com/oSoWoSo/DistroHopper/discussions/9)
|
||||
|
||||
---
|
||||
|
||||
#### [discuss](https://github.com/oSoWoSo/DistroHopper/discussions) on github
|
||||
|
||||
# Join DistroHopper chat group:
|
||||
[](https://simplex.chat/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FnTkG5MBnhRsRTb4heK-8J9jo0Vqc43q2%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEA-Go_Cwwzp419dls_-cmYvePuTyKdZ6bsrXAy8K1Sizc%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%228L5-Gq789MCV_wUQuNtTLg%3D%3D%22%7D) (click SimpleX logo)
|
||||
|
||||
(check the software! even if you don't want chat about DistroHopper)
|
||||
[Simplex website](https://simplex.chat)
|
||||
### Testing version!
|
||||
|
||||
# Without these amazing projects it wouldn't be posible:
|
||||
|
||||
#### [bash](https://www.gnu.org/software/bash/)
|
||||
[bash](https://www.gnu.org/software/bash/)
|
||||
|
||||
#### [QEMU](https://www.qemu.org/)
|
||||
[QEMU](https://www.qemu.org/)
|
||||
|
||||
#### [quickemu](https://github.com/quickemu-project/quickemu)
|
||||
[quickemu](https://github.com/quickemu-project/quickemu)
|
||||
|
||||
GUI depends on
|
||||
#### [yad](https://github.com/v1cont/yad)
|
||||
[yad](https://github.com/v1cont/yad)
|
||||
|
||||
TUI depends on
|
||||
#### [fzf](https://github.com/junegunn/fzf)
|
||||
|
||||
----
|
||||
|
||||
For
|
||||
|
||||
- easy of use
|
||||
|
||||
#### [fish](https://fishshell.com)
|
||||
|
||||
- commiting and working with github
|
||||
|
||||
#### [lazygit](https://github.com/jesseduffield/lazygit)
|
||||
|
||||
#### [opencommit](https://github.com/di-sukharev/opencommit)
|
||||
|
||||
- Editing
|
||||
|
||||
#### [geany](https://geany.org/)
|
||||
|
||||
#### [Kate](https://apps.kde.org/kate)
|
||||
|
||||
- diff
|
||||
|
||||
#### [Meld](https://meld.app/)
|
||||
|
||||
- Logo and icons
|
||||
|
||||
#### [GIMP](https://www.gimp.org)
|
||||
|
||||
and
|
||||
|
||||
#### [Inkscape](https://inkscape.org)
|
||||
|
||||
#### [logo by](https://freesvg.org/by/OpenClipart) bit repaired by me..
|
||||
|
||||
- Updating translation
|
||||
|
||||
#### [Poedit](https://poeditor.com/)
|
||||
|
||||
Everything done on
|
||||
|
||||
#### [Void Linux](https://voidlinux.org)
|
||||
|
||||
---
|
||||
|
||||
# Mirrored on
|
||||
|
||||
#### [GitHub](https://github.com/oSoWoSo/DistroHopper)
|
||||
|
||||
#### [SourceForge](https://sourceforge.net/projects/distrohopper)
|
||||
|
||||
#### [Disroot](https://git.disroot.org/oSoWoSo/DistroHopper)
|
||||
|
||||
#### [Codeberg](https://codeberg.org/oSoWoSo/DistroHopper)
|
||||
|
||||
#### [GitLab](https://gitlab.com/osowoso/distrohopper)
|
||||
|
||||
#### [SourceHut](https://git.sr.ht/~osowoso/DistroHopper)
|
||||
|
||||
---
|
||||
|
||||
For Homepage click on Hop
|
||||
|
||||
[](https://dh.osowoso.xyz/)
|
||||
|
||||
# donate
|
||||
[](https://liberapay.com/zenobit/donate)
|
||||
|
||||
@zen0bit at github
|
||||
|
||||
mailto: <zenobit@osowoso.xyz>
|
||||
|
||||
#### parent site [oSoWoSo](https://osowoso.xyz)
|
||||
|
||||
[fzf](https://github.com/junegunn/fzf)
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=About DistroHopper
|
||||
Exec=yad --image=/usr/share/icons/distroicons/hop.svg --info --text "About Distrohopper \n\n Quickly download, create and run VM of any operating system. \n Source Code: https://github.com/oSoWoSo/DistroHopper \n License: AGPL-3-only" --no-buttons
|
||||
Icon=/usr/share/icons/distroicons/hop.svg
|
||||
Categories=System;Virtualization;Settings;
|
44
addnewtoquickgui.sh
Executable file
|
@ -0,0 +1,44 @@
|
|||
#!/bin/bash
|
||||
|
||||
yad --form --field="Name" "" --field="Releases" "" --field="Editions" "" --field="URL" "" --field="ISO" ""
|
||||
|
||||
# little script for adding distros to quickemu
|
||||
# This version use desktop files and notebook
|
||||
|
||||
#TODO ADD_PRETTY_NAME_${DISTRO}
|
||||
${DISTRO}) PRETTY_NAME="VX Linux";;
|
||||
|
||||
#TODO ADD_NAME_${DISTRO}
|
||||
${DISTRO} \
|
||||
|
||||
#TODO ADD_releases_${DISTRO} function
|
||||
function releases_${DISTRO}() {
|
||||
echo 6.1 5.0 4.2 4.1 4.0
|
||||
}
|
||||
#TODO ADD_editions_${DISTRO} function
|
||||
function editions_${DISTRO}() {
|
||||
echo
|
||||
}
|
||||
#TODO ADD_get_${DISTRO} function
|
||||
function get_${DISTRO}() {
|
||||
local HASH=""
|
||||
local ISO=""
|
||||
local URL="https://github.com/dessington/${DISTRO}/releases/download/${RELEASE}"
|
||||
|
||||
if [ "$RELEASE" == "4.0" ]; then
|
||||
ISO="vx-linux-4.0-qt.iso"
|
||||
else
|
||||
ISO="vx-linux-${RELEASE}.iso"
|
||||
fi
|
||||
echo "${URL}/${ISO} ${HASH}"
|
||||
}
|
||||
|
||||
function get_voidpup() {
|
||||
local HASH=""
|
||||
local URL=""
|
||||
local TMPURL=""
|
||||
|
||||
TMPURL=$(wget -q -S -O- --max-redirect=0 "https://sourceforge.net/projects/vpup/files/latest/download" 2>&1 | grep -i Location | cut -d' ' -f4)
|
||||
URL=${TMPURL%\?*}
|
||||
echo "${URL} ${HASH}"
|
||||
}
|
|
@ -1,92 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2023 darkmaster @grm34
|
||||
#
|
||||
# This script automatically translates base language strings and adds
|
||||
# them into the various translations (original will be used on error).
|
||||
# It also removes duplicate strings and rearranges them alphabetically.
|
||||
|
||||
_sort_strings() {
|
||||
# RM duplicate strings from an array and sorts them alphabetically.
|
||||
# Usage: _sort_strings "$@" (array of strings)
|
||||
# Returns: $sorted_strings (array)
|
||||
local string strings
|
||||
declare -A strings
|
||||
for string in "${@}"; do
|
||||
[[ $string ]] && IFS=" " strings["${string:- }"]=1
|
||||
done
|
||||
# shellcheck disable=SC2207
|
||||
IFS=$'\n' sorted_strings=($(sort <<< "${!strings[*]}"))
|
||||
}
|
||||
|
||||
_clean_cfg_files() {
|
||||
# RM duplicates lines and sorts them alphabetically.
|
||||
# Usage: _clean_cfg_files "$@" (array of files)
|
||||
local file
|
||||
for file in "$@"; do
|
||||
mapfile -t strings < "$file"
|
||||
_sort_strings "${strings[@]}"
|
||||
printf "%s\n" "${sorted_strings[@]}" > "$file"
|
||||
done
|
||||
}
|
||||
|
||||
_get_strings_from_cfg() {
|
||||
# Grabs strings from CFG files.
|
||||
# Usage: _get_strings_from_cfg "$@" (array of files)
|
||||
# Returns: $<language_code>_strings $cfg_list (arrays)
|
||||
local file name
|
||||
for file in "$@"; do
|
||||
name=${file##*/}; name="${name/.cfg/_strings}"
|
||||
mapfile -t "$name" < "$file"
|
||||
[[ $name != en_strings ]] && cfg_list+=("$name")
|
||||
done
|
||||
}
|
||||
|
||||
_get_string_data() {
|
||||
# Grabs string name and string value
|
||||
# Returns: $data (array)
|
||||
IFS=$'\n' read -d "" -ra data <<< "${1//=/$'\n'}"
|
||||
data[1]=${data[1]//\"}
|
||||
}
|
||||
|
||||
_translate_string() {
|
||||
# Usage: _translate_string "string" "language code"
|
||||
# Returns: $translated (string)
|
||||
translated="$(curl -s https://api-free.deepl.com/v2/translate \
|
||||
-d auth_key=f1414922-db81-5454-67bd-9608cdca44b3:fx \
|
||||
-d "text=$1" -d "target_lang=${2^^}" \
|
||||
| grep -o '"text":"[^"]*' | grep -o '[^"]*$')"
|
||||
}
|
||||
|
||||
_translate_and_add_missing_strings_into_cfg() {
|
||||
# Translates then write missing strings from base language
|
||||
# into the various translation files (from $cfg_list).
|
||||
local line language trad_strings
|
||||
for line in "${en_strings[@]:?}"; do
|
||||
_get_string_data "$line"
|
||||
for language in "${cfg_list[@]}"; do
|
||||
declare -n trad_strings="$language"
|
||||
if [[ "${trad_strings[*]}" != *"${data[0]}="* ]]; then
|
||||
_translate_string "${data[1]}" "${language/_strings}"
|
||||
[[ -n $translated ]] && line="${data[0]}=\"${translated}\""
|
||||
[[ -n $translated ]] && note="translated" || note="original"
|
||||
trad_strings+=("$line"); file="${language/_strings/.cfg}"
|
||||
printf "%s\n" "${trad_strings[@]}" > "lang/$file"
|
||||
echo "=> ${data[0]} (${note}) added into $file"
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
# Run auto-translate.
|
||||
if [[ $1 == dh ]]; then
|
||||
echo "Running auto-translate (this could take a while)..."
|
||||
_clean_cfg_files lang/*.cfg
|
||||
_get_strings_from_cfg lang/*.cfg
|
||||
_translate_and_add_missing_strings_into_cfg
|
||||
_clean_cfg_files lang/*.cfg
|
||||
[[ $note ]] && echo "==> done" || echo "==> nothing to translate"
|
||||
else
|
||||
echo "ERROR: you must specify 'dh' as argument"
|
||||
fi
|
||||
|
6
config/1stRun.desktop
Normal file
|
@ -0,0 +1,6 @@
|
|||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Renew VMs
|
||||
Exec=sakura -h renew.sh
|
||||
Icon=/home/zen/.config/distrohopper/vms_icons/tux.svg
|
||||
Categories=System;Virtualization;Settings;
|
28
config/1stRun.sh
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/bin/bash
|
||||
source distrohopper.conf
|
||||
|
||||
# distrohopper first run
|
||||
CONFIG_DIR="$HOME/.config/distrohopper"
|
||||
|
||||
# create default dirs
|
||||
rm -r "$CONFIG_DIR"
|
||||
mkdir -p "$CONFIG_DIR" "$CONFIG_DIR/vms_ready" "$CONFIG_DIR/vms_supported" "$CONFIG_DIR/vms_icons"
|
||||
|
||||
# copy icons
|
||||
#cp -r vms_icons "$CONFIG_DIR/"
|
||||
# copy everything to config dir
|
||||
cp -r * "$CONFIG_DIR/"
|
||||
|
||||
# install prerequisities (Void linux)
|
||||
|
||||
|
||||
|
||||
# Install distrohopper to all users
|
||||
sudo cp ../dh ../quickgui ../quicktui ../quickget ../quickemu /usr/bin/
|
||||
|
||||
# Renew VMs
|
||||
"$CONFIG_DIR/renew.sh"
|
||||
# Set VMs dir
|
||||
"$CONFIG_DIR/set_dir.sh"
|
||||
|
||||
echo "Done"
|
|
@ -2,5 +2,5 @@
|
|||
Type=Application
|
||||
Name=About yad
|
||||
Exec=yad --about
|
||||
Icon=/usr/share/icons/Papirus/64x64/apps/yad.svg
|
||||
Icon=/home/zen/.config/distrohopper/vms_icons/cereus.svg
|
||||
Categories=System;Virtualization;Settings;
|
6
config/add_distro.desktop
Executable file
|
@ -0,0 +1,6 @@
|
|||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Add new distro
|
||||
Exec=sakura -h -e /home/zen/.config/distrohopper/add_distro.sh
|
||||
Icon=/home/zen/.config/distrohopper/vms_icons/cereus.svg
|
||||
Categories=System;Virtualization;Settings;
|
39
config/add_distro.sh
Executable file
|
@ -0,0 +1,39 @@
|
|||
#!/bin/bash
|
||||
|
||||
yad --form --field="Pretty name" "" --field="Name" "" --field="Releases" "" --field="Editions" "" --field="URL" "" --field="ISO" "" --field="Hash" "" > template.tmp
|
||||
|
||||
|
||||
PRETTY_NAME="$(cat template.tmp | cut -d'|' -f1)"
|
||||
NAME="$(cat template.tmp | cut -d'|' -f2)"
|
||||
RELEASES="$(cat template.tmp | cut -d'|' -f3)"
|
||||
EDITIONS="$(cat template.tmp | cut -d'|' -f4)"
|
||||
URL="$(cat template.tmp | cut -d'|' -f5)"
|
||||
ISO="$(cat template.tmp | cut -d'|' -f6)"
|
||||
HASH="$(cat template.tmp | cut -d'|' -f7)"
|
||||
echo " $NAME) PRETTY_NAME=$PRETTY_NAME;;
|
||||
" > newvm.tmp
|
||||
echo " $NAME \\
|
||||
" >> newvm.tmp
|
||||
echo "function releases_$NAME() {
|
||||
echo $RELEASES
|
||||
}
|
||||
" >> newvm.tmp
|
||||
echo "function editions_$NAME() {
|
||||
echo $EDITIONS
|
||||
}
|
||||
" >> newvm.tmp
|
||||
echo "function get_$NAME() {
|
||||
local EDITION="${1:-}"
|
||||
local HASH=""
|
||||
local ISO="$ISO"
|
||||
local URL="$URL"
|
||||
HASH=\"$(wget -q -O- "${URL}/CHECKSUM" | grep "(${ISO}" | cut -d' ' -f4)\"
|
||||
echo "${URL}/${ISO} ${HASH}"
|
||||
}
|
||||
" >> newvm.tmp
|
||||
echo "template.tmp content:
|
||||
"
|
||||
cat template.tmp
|
||||
echo "newvm.tmp content:
|
||||
"
|
||||
cat newvm.tmp
|
19
config/check.sh
Executable file
|
@ -0,0 +1,19 @@
|
|||
#!/bin/bash
|
||||
|
||||
# DEBUG mod
|
||||
#bash -x quickyad 2>&1 | tee output.log
|
||||
|
||||
# YAD gui script for excellent quickemu
|
||||
#TODO Download Icons
|
||||
#TODO Add homepages to right click
|
||||
|
||||
echo "Running..."
|
||||
# dependencies checks
|
||||
if ! command -v yad >/dev/null 2>&1; then
|
||||
echo "You are missing yad..." >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! command -v quickemu >/dev/null 2>&1; then
|
||||
echo "You are missing quickemu..." >&2
|
||||
exit 1
|
||||
fi
|
6
config/renew.desktop
Normal file
|
@ -0,0 +1,6 @@
|
|||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Renew VMs
|
||||
Exec=sakura -h renew.sh
|
||||
Icon=/home/zen/.config/distrohopper/vms_icons/tux.svg
|
||||
Categories=System;Virtualization;Settings;
|
80
config/renew.sh
Executable file
|
@ -0,0 +1,80 @@
|
|||
#!/bin/bash
|
||||
export LC_ALL=C
|
||||
|
||||
echo "Updating VMs..."
|
||||
# distrohopper config file
|
||||
CONFIG_DIR="$HOME/.config/distrohopper"
|
||||
source "$CONFIG_DIR/distrohopper.conf"
|
||||
# shellcheck source=distrohopper.conf
|
||||
# remove desktop files (ready to run VMs)
|
||||
rm "$CONFIG_DIR/vms_ready/*"
|
||||
# Enter ditrohopper VMs dir
|
||||
cd "$QUICKEMU_VMS_DIR" || exit
|
||||
# check for VMs .conf files (ready to run VMs)
|
||||
for vm_config_file in *.conf; do
|
||||
vm_desktop_file=$(basename "$QUICKEMU_VMS_DIR/$vm_config_file" .conf)
|
||||
# Use fuzzy matching to find the best matching icon file (ready to run VMs)
|
||||
icon_name=$(basename "$QUICKEMU_VMS_DIR/$vm_config_file" .conf | cut -d'-' -f -2)
|
||||
icon_file=$(find "$ICON_DIR" -type f -iname "${icon_name// /}.*")
|
||||
# If no icon was found, try shorter name (ready to run VMs)
|
||||
if [ -z "$icon_file" ]; then
|
||||
icon_name=$(basename "$QUICKEMU_VMS_DIR/$vm_config_file" .conf | cut -d'-' -f1)
|
||||
icon_file=$(find "$ICON_DIR" -type f -iname "${icon_name// /}.*")
|
||||
fi
|
||||
# If no icon was found, use a default icon (ready to run VMs)
|
||||
if [ -z "$icon_file" ]; then
|
||||
icon_file="$ICON_DIR/tux.svg"
|
||||
fi
|
||||
# content of desktop files (ready to run VMs)
|
||||
desktop_file_content="[Desktop Entry]
|
||||
Type=Application
|
||||
Name=$vm_desktop_file
|
||||
Exec=sh -c 'cd "$QUICKEMU_VMS_DIR" && quickemu -vm \"$vm_config_file\"'
|
||||
Icon=$icon_file
|
||||
Categories=System;Virtualization;"
|
||||
# create desktop files (ready to run VMs)
|
||||
echo "$desktop_file_content" > "$CONFIG_DIR"/vms_ready/"$vm_desktop_file".desktop
|
||||
done
|
||||
|
||||
# remove desktop files (supported VMs)
|
||||
rm "$CONFIG_DIR"/vms_supported/"*"
|
||||
# get supported VMs
|
||||
quickget | sed 1d | cut -d':' -f2 | grep -o '[^ ]*' > "$CONFIG_DIR/supported.md"
|
||||
while read -r get_name; do
|
||||
vm_desktop_file=$(echo "$get_name" | tr ' ' '_')
|
||||
releases=$(quickget "$vm_desktop_file" | grep 'Releases' | cut -d':' -f2 | sed 's/^ //')
|
||||
editions=$(quickget "$vm_desktop_file" | grep 'Editions' | cut -d':' -f2 | sed 's/^ //')
|
||||
icon_name="$ICON_DIR/$get_name"
|
||||
if [ -f "$icon_name.svg" ]; then
|
||||
icon_file="$icon_name.svg"
|
||||
elif [ -f "$icon_name.png" ]; then
|
||||
icon_file="$icon_name.png"
|
||||
else
|
||||
icon_file="$ICON_DIR/tux.svg"
|
||||
fi
|
||||
# Check if there are editions
|
||||
if [ -z "$editions" ]; then
|
||||
# Create desktop file for VMs without editions
|
||||
desktop_file_content="[Desktop Entry]
|
||||
Type=Application
|
||||
Name=$get_name
|
||||
releases=$releases
|
||||
replace='\"!\"'
|
||||
Exec=sh -c 'cd "$QUICKEMU_VMS_DIR" && yad --form --field=\"Release:CB\" \"${releases// /$replace}\" | cut -d\"|\" -f1 | xargs -I{} sh -c \"quickget $get_name {}\"'
|
||||
Icon=$icon_file
|
||||
Categories=System;Virtualization;"
|
||||
echo "$desktop_file_content" > "$CONFIG_DIR"/vms_supported/"$vm_desktop_file".desktop
|
||||
else
|
||||
# Create desktop file for VMs with editions
|
||||
desktop_file_content="[Desktop Entry]
|
||||
Type=Application
|
||||
Name=$get_name
|
||||
releases=$releases
|
||||
editions=$editions
|
||||
replace=$replace
|
||||
Exec=sh -c 'cd \"$QUICKEMU_VMS_DIR\" && yad --form --separator=\" \" --field=\"Release:CB\" \"${releases// /$replace}\" --field=\"Edition:CB\" \"${editions// /$replace}\" | xargs -I{} sh -c \"quickget $get_name {}\"'
|
||||
Icon=$icon_file
|
||||
Categories=System;Virtualization;"
|
||||
echo "$desktop_file_content" > "$CONFIG_DIR"/vms_supported/"$vm_desktop_file".desktop
|
||||
fi
|
||||
done < "$CONFIG_DIR"/supported.md
|
6
config/set_dir.desktop
Normal file
|
@ -0,0 +1,6 @@
|
|||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Set VMs dir
|
||||
Exec=set_dir.sh
|
||||
Icon=/home/zen/.config/distrohopper/vms_icons/cereus.svg
|
||||
Categories=System;Virtualization;Settings;
|
8
config/set_dir.sh
Executable file
|
@ -0,0 +1,8 @@
|
|||
#!/bin/bash
|
||||
source distrohopper.conf
|
||||
NEWDIR="$(yad --file --directory --title="Where to save VMs?")"
|
||||
QUICKEMU_VMS_DIR="$NEWDIR"
|
||||
export QUICKEMU_VMS_DIR
|
||||
echo "New dir is: $QUICKEMU_VMS_DIR"
|
||||
#cat distrohopper.conf | grep 'QUICKEMU_VMS_DIR='
|
||||
#sed -f distrohopper.conf --posix -E 's/QUICKEMU_VMS_DIR="$HOME/.local/share/quickemu"/QUICKEMU_VMS_DIR="$QUICKEMU_VMS_DIR"/g'
|
|
@ -35,13 +35,11 @@ linuxmint
|
|||
lmde
|
||||
mageia
|
||||
manjaro
|
||||
miyo
|
||||
mxlinux
|
||||
netboot
|
||||
netbsd
|
||||
nixos
|
||||
lubuntu
|
||||
macos
|
||||
openbsd
|
||||
opensuse
|
||||
oraclelinux
|
||||
|
@ -63,11 +61,9 @@ ubuntukylin
|
|||
ubuntu-mate
|
||||
ubuntustudio
|
||||
ubuntu-unity
|
||||
ventoy
|
||||
void
|
||||
voidpup
|
||||
vxlinux
|
||||
windows
|
||||
xerolinux
|
||||
xubuntu
|
||||
zorin
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
BIN
config/vms_icons/agarimos.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
12
config/vms_icons/arch.svg
Normal file
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="512px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 65 65" version="1.1" height="512px">
|
||||
<defs>
|
||||
<linearGradient id="lg" y1="26.924%" x2="28.129%" x1="54.638%" y2="79.519%">
|
||||
<stop stop-color="#fff" stop-opacity="0" offset="0"/>
|
||||
<stop stop-color="#fff" stop-opacity=".27451" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path d="m32.253 0.20991c-2.849 6.9843-4.579 11.559-7.75 18.336 1.944 2.061 4.334 4.453 8.211 7.164-4.168-1.715-7.009-3.432-9.133-5.219-4.059 8.47-10.423 20.531-23.328 43.719 10.14-5.854 18.002-9.466 25.328-10.844-0.314-1.351-0.481-2.819-0.469-4.344l0.008-0.32c0.161-6.498 3.542-11.495 7.547-11.156 4.004 0.339 7.122 5.884 6.961 12.383-0.031 1.224-0.173 2.4-0.414 3.492 7.247 1.418 15.034 5.013 25.039 10.789-1.973-3.632-3.74-6.905-5.422-10.024-2.649-2.053-5.411-4.724-11.047-7.617 3.874 1.007 6.65 2.171 8.812 3.469-17.098-31.835-18.48-36.068-24.343-49.828v-0.00009z" fill="#1793D1"/>
|
||||
<path id="path2522" fill-opacity=".16568" fill="#fff" d="m50.266 38.249c-13.872-18.827-17.087-34.002-17.902-37.625 7.4 17.067 7.349 17.277 17.902 37.625z"/>
|
||||
<path d="m32.378 0.45992c-0.36 0.88448-0.7 1.7468-1.032 2.5625-0.364 0.8946-0.718 1.7565-1.062 2.5938s-0.693 1.6309-1.031 2.4375c-0.339 0.8065-0.654 1.6039-1 2.4063-0.346 0.802-0.726 1.613-1.094 2.437-0.368 0.825-0.752 1.658-1.156 2.532-0.404 0.873-0.828 1.801-1.282 2.75-0.061 0.128-0.124 0.276-0.187 0.406 1.939 2.054 4.33 4.427 8.187 7.125-4.167-1.715-7-3.432-9.125-5.219-0.11 0.226-0.198 0.425-0.312 0.656-0.42 0.871-0.871 1.733-1.344 2.688-0.113 0.224-0.196 0.427-0.312 0.656-0.501 1.004-1.026 2.043-1.594 3.156-0.113 0.22-0.228 0.402-0.344 0.625-0.343 0.667-1.44 2.77-2.562 4.907-0.655 1.248-1.169 2.27-1.907 3.656-0.209 0.398-0.639 1.195-0.75 1.406 8.125-4.573 16.891-11.216 32.813-5.531-0.797-1.51-1.562-2.919-2.25-4.25-0.688-1.332-1.312-2.571-1.906-3.75s-1.143-2.291-1.657-3.344c-0.513-1.053-0.989-2.047-1.437-3s-0.885-1.87-1.281-2.75c-0.397-0.879-0.766-1.73-1.125-2.562-0.359-0.833-0.695-1.658-1.032-2.469-0.336-0.8115-0.672-1.5896-1-2.4063-0.142-0.3554-0.263-0.7338-0.406-1.0938-0.888-2.0849-1.759-4.1515-2.812-6.625v0.00002z" fill="url(#lg)"/>
|
||||
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 798 B After Width: | Height: | Size: 798 B |
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 846 B After Width: | Height: | Size: 846 B |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 4 KiB |
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 9.2 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
1063
config/vms_icons/blendos.svg
Normal file
After Width: | Height: | Size: 667 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 2 KiB |
BIN
config/vms_icons/dietpi.png
Normal file
After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 6 KiB After Width: | Height: | Size: 6 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 5.6 KiB |
BIN
config/vms_icons/gabeeos.png
Normal file
After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
BIN
config/vms_icons/haiku.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
BIN
config/vms_icons/kolibrios.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 519 B After Width: | Height: | Size: 519 B |
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
BIN
config/vms_icons/mageia.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 389 B After Width: | Height: | Size: 389 B |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
63
config/vms_icons/mx.svg
Normal file
|
@ -0,0 +1,63 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="512"
|
||||
height="512"
|
||||
version="1.1"
|
||||
id="svg12"
|
||||
sodipodi:docname="mx.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs16" />
|
||||
<sodipodi:namedview
|
||||
id="namedview14"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.7050781"
|
||||
inkscape:cx="251.30813"
|
||||
inkscape:cy="256"
|
||||
inkscape:window-width="3440"
|
||||
inkscape:window-height="1417"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg12" />
|
||||
<rect
|
||||
style="opacity:0.2;stroke-width:8.77193"
|
||||
width="491.22806"
|
||||
height="491.22806"
|
||||
x="8.9861288"
|
||||
y="14.359788"
|
||||
rx="24.561403"
|
||||
ry="24.561403"
|
||||
id="rect2" />
|
||||
<rect
|
||||
style="fill:#4f4f4f;stroke-width:8.77193"
|
||||
width="491.22806"
|
||||
height="491.22806"
|
||||
x="8.9861288"
|
||||
y="5.5878611"
|
||||
rx="24.561403"
|
||||
ry="24.561403"
|
||||
id="rect4" />
|
||||
<path
|
||||
style="opacity:0.1;fill:#ffffff;stroke-width:8.77193"
|
||||
d="m 33.554547,5.5878611 c -13.60702,0 -24.5684295,10.9613999 -24.5684295,24.5684199 v 8.77193 c 0,-13.60702 10.9614095,-24.56842 24.5684295,-24.56842 H 475.64402 c 13.60526,0 24.57018,10.9614 24.57018,24.56842 v -8.77193 c 0,-13.60702 -10.96492,-24.5684199 -24.57018,-24.5684199 z"
|
||||
id="path6" />
|
||||
<path
|
||||
style="opacity:0.2;stroke-width:8.77193"
|
||||
d="m 175.65279,119.62295 -35.08772,35.08772 96.85088,108.96491 -19.5614,23.00877 -24.6579,-26.71053 L 61.617697,409.09663 H 447.58262 l -87.7193,-105.26316 -10.1579,11.59649 -63.28947,-71.20175 90.99123,-107.0614 -17.54386,-17.54386 -90.05263,105.92982 z m 78.36842,162.72807 62.80702,70.64912 -18.36842,21.00877 -63.70175,-69.00877 z"
|
||||
id="path8" />
|
||||
<path
|
||||
style="fill:#ffffff;stroke-width:8.77193"
|
||||
d="m 175.65279,110.85102 -35.08772,35.08772 96.85088,108.96491 -19.5614,23.00877 -24.6579,-26.71053 L 61.617697,400.3247 H 447.58262 l -87.7193,-105.26316 -10.1579,11.59649 -63.28947,-71.20175 90.99123,-107.0614 -17.54386,-17.54386 -90.05263,105.92982 z m 78.36842,162.72807 62.80702,70.64912 -18.36842,21.00877 -63.70175,-69.00877 z"
|
||||
id="path10" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 9 KiB After Width: | Height: | Size: 9 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 6 KiB After Width: | Height: | Size: 6 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |