"Always building, always learning."
🛠️ fastboot-assistant
→ Android Fastboot tools with a clean interface
🛠️ The AtlantisOS Project
→ Build Ubuntu for everyone, by everyone themself
🛠️ Treble-Updater
→ Simple GSI update manager
🛠️ VLC-PlaySaver
→ Save & restore VLC playlists
🧪 Experimente
→ My playground for new ideas
/* nerdy.c — "NachtsternBuild Orbiter"
* A tiny, fun C program that prints a pastel-ish animated header
* Compile: gcc -O2 -std=c11 -o nachtstern nerdy.c
* Run: ./nachtstern
*/
#define _XOPEN_SOURCE 500 // for usleep
#define SLEEP_US 80000
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h> /* usleep */
#include <time.h>
/* ANSI color helpers (pastel-like) */
static const char *cols[] = {
"\x1b[38;5;159m", /* pastel cyan */
"\x1b[38;5;175m", /* pastel purple */
"\x1b[38;5;180m", /* pastel blue */
"\x1b[38;5;216m", /* pastel orange */
"\x1b[38;5;157m" /* pastel green */
};
static const char *RESET = "\x1b[0m";
static const int NCOLS = sizeof(cols)/sizeof(cols[0]);
/* Simple spinner frames */
static const char *frames[] = { "⠁","⠂","⠄","⡀","⢀","⠠","⠐","⠈" };
static const int NFRAMES = sizeof(frames)/sizeof(frames[0]);
/* Draw a fancy title using colors */
void draw_title(int phase)
{
const char *name = "NachtsternBuild";
int len = (int)strlen(name);
printf("\r");
for (int i = 0; i < len; ++i)
{
const char *c = cols[(i + phase) % NCOLS];
putchar(0); // no-op to keep char alignment in some terminals
printf("%s%c%s", c, name[i], RESET);
}
}
/* A small "orbiter" line with spinner and progress-like dots */
void orbiter(int step)
{
int pos = step % 40;
for (int i = 0; i < 40; ++i)
{
if (i == pos)
{
printf("%s●%s", cols[(step/3) % NCOLS], RESET);
}
else
{
if (i % 5 == 0)
{
printf("·"); // use UTF-8 dot
}
else
{
putchar(' ');
}
}
}
}
/* A fake "updater" that alternates success/fail cheekily */
void fake_update_sequence(void)
{
const char *msgs[] = {
"Scanning modules...",
"Patching fastboot-assistant...",
"Repacking Treble image...",
"Optimizing AtlantisOS...",
"Tidying Experimente..."
};
int n = sizeof(msgs)/sizeof(msgs[0]);
for (int i = 0; i < n; ++i)
{
printf("\n %s ", msgs[i]);
fflush(stdout);
for (int t = 0; t < 10; ++t)
{
printf("%s%s%s", cols[(i+t) % NCOLS], frames[(i+t) % NFRAMES], RESET);
fflush(stdout);
usleep(SLEEP_US);
printf("\b \b");
}
/* playful outcome */
if ((i % 2) == 0)
{
printf("%s[OK]%s", cols[(i+2) % NCOLS], RESET);
}
else
{
printf("%s[skipped — user debug pending]%s", cols[(i+4) % NCOLS], RESET);
}
}
printf("\n\n");
}
int main(void)
{
/* hide cursor */
printf("\x1b[?25l");
for (int phase = 0; phase < 12; ++phase)
{
/* print title */
printf("\r");
const char *header = " • ";
printf("%s", header);
for (int i = 0; i < (int)strlen("NachtsternBuild"); ++i)
{
printf("%s%c%s", cols[(i + phase) % NCOLS], "NachtsternBuild"[i], RESET);
}
printf(" ");
/* spinner */
printf("%s%s%s", cols[phase % NCOLS], frames[phase % NFRAMES], RESET);
fflush(stdout);
usleep(SLEEP_US * 6);
}
/* orbiter animation */
for (int i = 0; i < 80; ++i)
{
printf("\r ");
orbiter(i);
fflush(stdout);
usleep(SLEEP_US);
}
/* fake update */
printf("\n\n");
fake_update_sequence();
/* final playful tagline */
printf("%s✨ Done — build something weird and useful ✨%s\n", cols[2], RESET);
/* restore cursor */
printf("\x1b[?25h");
return 0;
}