Put both plymouth themes in the same directory
The new one is named kali-2019, the other is left unchanged.
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
8
Plymouth-Theme/kali-2019/kali.plymouth
Normal file
@ -0,0 +1,8 @@
|
||||
[Plymouth Theme]
|
||||
Name=Kali
|
||||
Description=Kali plymouth theme
|
||||
ModuleName=script
|
||||
|
||||
[script]
|
||||
ImageDir=/usr/share/plymouth/themes/kali-2019
|
||||
ScriptFile=/usr/share/plymouth/themes/kali-2019/kali.script
|
||||
158
Plymouth-Theme/kali-2019/kali.script
Normal file
@ -0,0 +1,158 @@
|
||||
LOGO_RIGHT_OFFSET_RATIO = -0.13;
|
||||
LOGO_TOP_OFFSET_RATIO = -0.07;
|
||||
|
||||
MAX_PASSWORD_LENGTH = 16;
|
||||
|
||||
X_CENTER = Window.GetWidth() / 2;
|
||||
Y_CENTER = Window.GetHeight() / 2;
|
||||
|
||||
status = "normal";
|
||||
|
||||
Window.SetBackgroundTopColor(0, 0, 0);
|
||||
Window.SetBackgroundBottomColor(0, 0, 0);
|
||||
|
||||
/* Images */
|
||||
container.image = Image("kali-logo-container.png");
|
||||
logo.image = Image("kali-logo.png");
|
||||
outline.image = Image("outline.png");
|
||||
fade.image = Image("kali-logo-fade.png");
|
||||
passwordDot.image = Image("password-dot.png");
|
||||
|
||||
// Kali logo can't be aligned by its natural center but by the circle center
|
||||
// formed inside its body curve. This can be easily calculated by the offset
|
||||
// ratio defined before.
|
||||
logo.rightOffset = logo.image.GetWidth() * LOGO_RIGHT_OFFSET_RATIO;
|
||||
logo.topOffset = logo.image.GetHeight() * LOGO_TOP_OFFSET_RATIO;
|
||||
|
||||
fun centerKaliLogo (image, zIndex) {
|
||||
sprite = Sprite(image);
|
||||
sprite.SetX(X_CENTER - image.GetWidth() / 2 + logo.rightOffset);
|
||||
sprite.SetY(Y_CENTER - image.GetHeight() / 2 + logo.topOffset);
|
||||
sprite.SetZ(zIndex);
|
||||
sprite.SetOpacity(0);
|
||||
return sprite;
|
||||
}
|
||||
|
||||
/* Kali logo sprites */
|
||||
logo.sprite = centerKaliLogo(logo.image, 4);
|
||||
fade.sprite = centerKaliLogo(fade.image, 3);
|
||||
container.sprite = centerKaliLogo(container.image, 2);
|
||||
outline.sprite = centerKaliLogo(outline.image, 1);
|
||||
|
||||
fun showKaliLogo () {
|
||||
logo.sprite.SetOpacity(1);
|
||||
fade.sprite.SetOpacity(0.5);
|
||||
}
|
||||
|
||||
/* -------------------------------- Message -------------------------------- */
|
||||
fun displayMessageCallback (text) {
|
||||
prompt.image = Image.Text(text, 1, 1, 1);
|
||||
prompt.sprite = Sprite(prompt.image);
|
||||
prompt.sprite.SetPosition(
|
||||
X_CENTER - prompt.image.GetWidth() / 2,
|
||||
container.sprite.GetY() + container.image.GetHeight() + 50,
|
||||
10000
|
||||
);
|
||||
global.prompt = prompt;
|
||||
}
|
||||
|
||||
Plymouth.SetMessageFunction(displayMessageCallback);
|
||||
|
||||
/* ---------------------------- Password Dialog ---------------------------- */
|
||||
fun passwordDialogSetup () {
|
||||
passwordField.image = Image("password-field.png");
|
||||
passwordField.sprite = Sprite(passwordField.image);
|
||||
passwordField.y = container.sprite.GetY() + container.image.GetHeight();
|
||||
passwordField.x = X_CENTER - passwordField.image.GetWidth() / 2;
|
||||
passwordField.z = 5;
|
||||
passwordField.sprite.SetX(passwordField.x);
|
||||
passwordField.sprite.SetY(passwordField.y);
|
||||
passwordField.sprite.SetZ(passwordField.z);
|
||||
global.passwordField = passwordField;
|
||||
showKaliLogo();
|
||||
}
|
||||
|
||||
fun setPasswordDialogOpacity (opacity) {
|
||||
passwordField.sprite.SetOpacity(opacity);
|
||||
|
||||
for (i = 0; passwordField.bullets[i]; i++)
|
||||
passwordField.bullets[i].sprite.SetOpacity(opacity);
|
||||
}
|
||||
|
||||
fun passwordDialogCallback (prompt, bullets) {
|
||||
global.status = "password";
|
||||
|
||||
if (!global.passwordField)
|
||||
passwordDialogSetup();
|
||||
else
|
||||
setPasswordDialogOpacity(1);
|
||||
|
||||
displayMessageCallback(prompt);
|
||||
|
||||
bulletWidth = passwordDot.image.GetWidth();
|
||||
|
||||
for (i = 0;
|
||||
passwordField.bullets[i] || i < bullets && i < MAX_PASSWORD_LENGTH;
|
||||
i++) {
|
||||
if (!passwordField.bullets[i]) {
|
||||
passwordField.bullets[i].sprite = Sprite(passwordDot.image);
|
||||
passwordField.bullets[i].sprite.SetX(passwordField.x
|
||||
+ (i + 1) * bulletWidth);
|
||||
passwordField.bullets[i].sprite.SetY(passwordField.y);
|
||||
passwordField.bullets[i].sprite.SetZ(passwordField.z);
|
||||
}
|
||||
|
||||
if (i < bullets)
|
||||
passwordField.bullets[i].sprite.SetOpacity(1);
|
||||
else
|
||||
passwordField.bullets[i].sprite.SetOpacity(0);
|
||||
}
|
||||
}
|
||||
|
||||
Plymouth.SetDisplayPasswordFunction(passwordDialogCallback);
|
||||
|
||||
fun displayNormalLogoCallback () {
|
||||
global.status = "normal";
|
||||
if (global.passwordField)
|
||||
setPasswordDialogOpacity(0);
|
||||
prompt.SetOpacity(0);
|
||||
showKaliLogo();
|
||||
}
|
||||
|
||||
Plymouth.SetDisplayNormalFunction(displayNormalLogoCallback);
|
||||
Plymouth.SetQuitFunction(displayNormalLogoCallback);
|
||||
|
||||
|
||||
if (Plymouth.GetMode() == "boot") {
|
||||
outline.movementRange =
|
||||
container.image.GetHeight() - outline.image.GetHeight();
|
||||
outline.initialPosition = container.sprite.GetY() + outline.movementRange;
|
||||
outline.sprite.SetY(outline.initialPosition);
|
||||
|
||||
container.sprite.SetOpacity(1);
|
||||
outline.sprite.SetOpacity(1);
|
||||
|
||||
fun bootProgressCallback (duration, progress) {
|
||||
if (global.status != "normal") return;
|
||||
if (progress < 0.1)
|
||||
logo.sprite.SetOpacity(progress / 0.1);
|
||||
else if (progress < 0.9) {
|
||||
relativeProgress = (progress - 0.1) / 0.8;
|
||||
outline.sprite.SetY(outline.initialPosition
|
||||
- outline.movementRange * relativeProgress);
|
||||
if (progress > 0.8 && progress < 0.85) {
|
||||
relativeProgress = (progress - 0.8) / 0.05;
|
||||
fade.sprite.SetOpacity(relativeProgress);
|
||||
} else if (progress > 0.85) {
|
||||
relativeProgress = (progress - 0.85) / 0.05;
|
||||
fade.sprite.SetOpacity(1 - relativeProgress);
|
||||
}
|
||||
} else {
|
||||
opacity = (1 - progress) / 0.1;
|
||||
logo.sprite.SetOpacity(opacity);
|
||||
}
|
||||
}
|
||||
|
||||
Plymouth.SetBootProgressFunction(bootProgressCallback);
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 472 B After Width: | Height: | Size: 472 B |
|
Before Width: | Height: | Size: 317 B After Width: | Height: | Size: 317 B |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
@ -1,6 +1,6 @@
|
||||
[Plymouth Theme]
|
||||
Name=Kali
|
||||
Description=Kali plymouth theme
|
||||
Description=A theme that features a blank background with a logo.
|
||||
ModuleName=script
|
||||
|
||||
[script]
|
||||
|
||||
|
Before Width: | Height: | Size: 324 B After Width: | Height: | Size: 324 B |
|
Before Width: | Height: | Size: 285 B After Width: | Height: | Size: 285 B |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 230 B After Width: | Height: | Size: 230 B |
|
Before Width: | Height: | Size: 265 B After Width: | Height: | Size: 265 B |
|
Before Width: | Height: | Size: 167 B After Width: | Height: | Size: 167 B |
|
Before Width: | Height: | Size: 331 B After Width: | Height: | Size: 331 B |
|
Before Width: | Height: | Size: 331 B After Width: | Height: | Size: 331 B |
@ -1,8 +0,0 @@
|
||||
[Plymouth Theme]
|
||||
Name=Kali
|
||||
Description=A theme that features a blank background with a logo.
|
||||
ModuleName=script
|
||||
|
||||
[script]
|
||||
ImageDir=/usr/share/plymouth/themes/kali
|
||||
ScriptFile=/usr/share/plymouth/themes/kali/kali.script
|
||||