├── System8 ├── checker.png ├── icons │ ├── 9tv.png │ ├── 8dbus.png │ ├── 8help.png │ ├── 9vrml.png │ ├── 8graphic.png │ ├── 8media.png │ ├── 8script.png │ ├── 9accel.png │ ├── 9flash.png │ ├── 9media.png │ ├── 9nodisp.png │ ├── 9sound.png │ ├── 9macintalk.png │ └── 9pcexchange.png ├── message.png ├── os8_boot.png ├── picasso.png ├── shutdown.png ├── os8_swatch.png ├── System8.plymouth └── System8.script ├── screenshots ├── boot.png ├── message.png └── shutdown.png └── README.md /System8/checker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/checker.png -------------------------------------------------------------------------------- /System8/icons/9tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/icons/9tv.png -------------------------------------------------------------------------------- /System8/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/message.png -------------------------------------------------------------------------------- /System8/os8_boot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/os8_boot.png -------------------------------------------------------------------------------- /System8/picasso.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/picasso.png -------------------------------------------------------------------------------- /System8/shutdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/shutdown.png -------------------------------------------------------------------------------- /screenshots/boot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/screenshots/boot.png -------------------------------------------------------------------------------- /System8/icons/8dbus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/icons/8dbus.png -------------------------------------------------------------------------------- /System8/icons/8help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/icons/8help.png -------------------------------------------------------------------------------- /System8/icons/9vrml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/icons/9vrml.png -------------------------------------------------------------------------------- /System8/os8_swatch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/os8_swatch.png -------------------------------------------------------------------------------- /screenshots/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/screenshots/message.png -------------------------------------------------------------------------------- /System8/icons/8graphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/icons/8graphic.png -------------------------------------------------------------------------------- /System8/icons/8media.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/icons/8media.png -------------------------------------------------------------------------------- /System8/icons/8script.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/icons/8script.png -------------------------------------------------------------------------------- /System8/icons/9accel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/icons/9accel.png -------------------------------------------------------------------------------- /System8/icons/9flash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/icons/9flash.png -------------------------------------------------------------------------------- /System8/icons/9media.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/icons/9media.png -------------------------------------------------------------------------------- /System8/icons/9nodisp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/icons/9nodisp.png -------------------------------------------------------------------------------- /System8/icons/9sound.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/icons/9sound.png -------------------------------------------------------------------------------- /screenshots/shutdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/screenshots/shutdown.png -------------------------------------------------------------------------------- /System8/icons/9macintalk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/icons/9macintalk.png -------------------------------------------------------------------------------- /System8/icons/9pcexchange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vladkorotnev/System8/HEAD/System8/icons/9pcexchange.png -------------------------------------------------------------------------------- /System8/System8.plymouth: -------------------------------------------------------------------------------- 1 | [Plymouth Theme] 2 | Name=Mac OS 8 3 | Description=This theme is inspired by Mac OS 8. By akasaka, 2019 4 | ModuleName=script 5 | 6 | [script] 7 | ImageDir=/usr/share/plymouth/themes/System8 8 | ScriptFile=/usr/share/plymouth/themes/System8/System8.script 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # System8 2 | 3 | A Mac OS 8 theme for Plymouth. 4 | 5 | Or, more like, an attempt to pixel-perfect recreation of the Mac OS 8 boot process in Plymouth. 6 | 7 | # Installation 8 | 9 | * Place into your Plymouth theme directory (usually `/usr/share/plymouth/themes`, if not, adjust `System8.plymouth` and the following commands accordingly). 10 | * `sudo update-alternatives --install /usr/share/plymouth/themes/default.plymouth default.plymouth /usr/share/plymouth/themes/System8/System8.plymouth 100` will place the theme into a list of alternatives. 11 | * `sudo update-alternatives --config default.plymouth` will let you select the newly installed theme. 12 | * `sudo update-initramfs -u` will update your initrd to account for the changed theme. 13 | 14 | # Usage 15 | 16 | Start up, reboot or shut down your computer. 17 | 18 | # Todos 19 | 20 | * Make extension icons appear at random time, not at a certain rate, or even better, according to the actual boot process 21 | * Support the password input and question modes of Plymouth 22 | 23 | # Screenshots 24 | 25 | ## Startup 26 | ![Startup Screenshot](screenshots/boot.png) 27 | 28 | ## Message 29 | ![Message Screenshot](screenshots/message.png) 30 | 31 | ## Shutdown 32 | ![Shutdown Screenshot](screenshots/shutdown.png) 33 | 34 | ---- 35 | 36 | # Credits 37 | 38 | All graphics are from Mac OS and belong to Apple. 39 | 40 | Apple, Macintosh, Mac, Mac OS, Apple Computer, and the Picasso Macintosh logo are registered trademarks of Apple, Inc. 41 | Ⓒ Apple Computer, Inc. 1997 42 | 43 | The script (`System8.script`) is distributed under CC-BY-SA v4.0. You are free to modify and redistribute it as long as all of the attributions are preserved and your work is under the same license. 44 | 45 | [ ![CC-BY-SA 4.0 License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png) ](http://creativecommons.org/licenses/by-sa/4.0/) 46 | 47 | # References 48 | 49 | The script is based on the guide by [brej.org](http://brej.org/blog/?p=158). 50 | 51 | The script was developed with reference to the Plymouth scripting guide on [Freedesktop](https://freedesktop.org/wiki/Software/Plymouth/Scripts/). -------------------------------------------------------------------------------- /System8/System8.script: -------------------------------------------------------------------------------- 1 | #---------------------------------------------------------------------------------------- 2 | # Mac OS 8 Boot Script for Plymouth 3 | # An attempt to a pixel-perfect recreation of the Mac OS 8 boot sequence in Plymouth 4 | # by akasaka, 2019 5 | # Ⓒ Genjitsu Labs, 2019; All rights reserved 6 | # Graphics Ⓒ Apple Computer, Inc, 1997 7 | # Apple Computer, Macintosh, Mac OS and Apple are registered trademarks of Apple, Inc. 8 | # You are free to use and modify this script as long as the above lines are preserved. 9 | #---------------------------------------------------------------------------------------- 10 | # Revision 1.0: Jan 11, 2019 11 | # Initial revision, supports: boot/shutdown/message 12 | # Todo: add password, question, input ? 13 | #---------------------------------------------------------------------------------------- 14 | 15 | // Frame counter timer 16 | timer = 0; 17 | // Stage state variable: 18 | /* 19 | -2 Dialog 20 | -1 Invalid for animation, i.e. within a message or shutdown context 21 | 0 "Welcome to Macintosh" dialog 22 | 1 Startup progress dialog 23 | */ 24 | stage = 0; 25 | // Current mode container 26 | mode = Plymouth.GetMode(); 27 | 28 | 29 | if(mode == "boot") { 30 | // Prepare stage for boot mode 31 | // Note: this is a New World Mac boot-time color 32 | Window.SetBackgroundTopColor (0.3, 0.3, 0.3); 33 | Window.SetBackgroundBottomColor (0.3, 0.3, 0.3); 34 | // Load the image of a checkerboard pattern 2x2 repeated to 200x200 (with 2x2 Plymouth hangs) 35 | chk = Image("checker.png"); 36 | 37 | // Start from bottom right corner 38 | y = Window.GetHeight()-200; 39 | array = []; // If we don't store sprites, Plymouth ignores them for some reason 40 | ai = 0; 41 | // Fill whole screen with the 2x2 checkered pattern 42 | while ( y > -200 ) { 43 | x = Window.GetWidth()-200; 44 | while ( x > -200 ) { 45 | array[ai] = Sprite(chk); 46 | array[ai].SetPosition(x, y, 1); 47 | ai++; 48 | x -= 200; 49 | } 50 | y -= 200; 51 | } 52 | } 53 | 54 | 55 | if(mode == "boot") { 56 | // Welcome to Macintosh dialog 57 | picasso = Image("picasso.png"); 58 | } else if(mode == "shutdown") { 59 | // It is now safe to turn off your Macintosh... 60 | picasso = Image("shutdown.png"); 61 | stage = -1; 62 | } else { 63 | // Whatever is happening, just do a black screen 64 | stage = -1; 65 | } 66 | 67 | // Place dialog on screen 68 | welcome = Sprite(picasso); 69 | picasso_x = Window.GetWidth() / 2 - picasso.GetWidth() / 2 ; 70 | picasso_y = Window.GetHeight() / 3 - picasso.GetHeight() / 2; 71 | welcome.SetPosition( picasso_x, picasso_y, 2); 72 | 73 | // Boot window 74 | backdrop = Image("os8_boot.png"); 75 | boot = Sprite(backdrop); 76 | boot.SetOpacity(0); // hidden for now 77 | boot_x = Window.GetWidth() / 2 - backdrop.GetWidth() / 2; 78 | boot_y = Window.GetHeight() / 3 - backdrop.GetHeight() / 2; 79 | boot.SetPosition( boot_x, boot_y, 2); 80 | 81 | #--------------------------------------- Extension Icon -------------------------------- 82 | 83 | // Position of next icon 84 | extz_x = 16; 85 | extz_y = Window.GetHeight() - 48; 86 | // All icons 87 | icons = []; 88 | icon_i = 0; 89 | 90 | // Display a new 32x32 icon from png name 91 | fun spawn_icon(iname) 92 | { 93 | next_icon = Image(iname); 94 | icons[icon_i] = Sprite(next_icon); 95 | icons[icon_i].SetPosition(extz_x, extz_y, 2); 96 | icon_i ++; 97 | extz_x += 40; 98 | } 99 | 100 | // Hide all icons (i.e. before showing a dialog) 101 | fun hide_icons() { 102 | i = 0; 103 | for(i = 0; i < icon_i; i++) { 104 | icons[i].SetOpacity(0); 105 | } 106 | } 107 | 108 | #----------------------------------------- Progress Bar -------------------------------- 109 | 110 | progress_bar.original_image = Image("os8_swatch.png"); 111 | progress_bar.sprite = Sprite(); 112 | 113 | progress_bar.x = boot_x + 132; 114 | progress_bar.y = boot_y + 292; 115 | progress_bar.sprite.SetPosition(progress_bar.x, progress_bar.y, 3); 116 | 117 | fun progress_callback (duration, progress) 118 | { 119 | if (progress_bar.image.GetWidth () != Math.Int (158 * progress)) 120 | { 121 | progress_bar.image = progress_bar.original_image.Scale(158 * progress, progress_bar.original_image.GetHeight()); 122 | progress_bar.sprite.SetImage (progress_bar.image); 123 | } 124 | } 125 | 126 | #----------------------------------------- Frame Handler-------------------------------- 127 | 128 | // Icon name storage 129 | cur_icon = 0; 130 | max_icon = 13; 131 | icons = ["8help", "8dbus", "8graphic", "8media", "8script", "9accel", "9macintalk", "9nodisp", "9sound", "9tv", "9media", "9vrml", "9flash", "9pcexchange"]; 132 | 133 | // Every-frame function 134 | fun refresh_callback () 135 | { 136 | timer++; 137 | 138 | # Transition from Welcome to Boot in about 500ms 139 | if ( stage == 0 && timer >= 25 ) { 140 | welcome.SetOpacity(0); 141 | boot.SetOpacity(1); 142 | Plymouth.SetBootProgressFunction(progress_callback); 143 | stage = 1; 144 | } 145 | 146 | if (stage == 1 && timer % 52 == 0) { 147 | if(cur_icon < max_icon) { 148 | spawn_icon( "icons/" + icons[cur_icon] + ".png" ); 149 | cur_icon ++; 150 | } 151 | } 152 | } 153 | 154 | Plymouth.SetRefreshFunction (refresh_callback); 155 | 156 | 157 | #----------------------------------------- Dialog -------------------------------- 158 | 159 | picasso_text_x = 84; 160 | picasso_text_y = 21; 161 | 162 | fun dialog_setup() 163 | { 164 | picasso = Image("message.png"); 165 | welcome.SetImage(picasso); 166 | welcome.SetOpacity(1); 167 | boot.SetOpacity(0); 168 | progress_bar.sprite.SetOpacity(0); 169 | stage = -2; 170 | hide_icons(); 171 | } 172 | 173 | fun display_normal_callback () 174 | { 175 | if(stage == -2) { 176 | welcome.SetOpacity(0); 177 | boot.SetOpacity(1); 178 | progress_bar.sprite.SetOpacity(1); 179 | stage = 1; 180 | } 181 | } 182 | 183 | Plymouth.SetDisplayNormalFunction(display_normal_callback); 184 | 185 | 186 | #----------------------------------------- Message -------------------------------- 187 | 188 | message_sprite = Sprite(); 189 | message_sprite.SetPosition(picasso_x + picasso_text_x, picasso_y + picasso_text_y, 10000); 190 | 191 | fun message_callback (text) 192 | { 193 | dialog_setup(); 194 | my_image = Image.Text(text, 0, 0, 0); 195 | message_sprite.SetImage(my_image); 196 | } 197 | 198 | Plymouth.SetMessageFunction(message_callback); 199 | --------------------------------------------------------------------------------