From 929ffaadf78189b58239391f0783e8ed1dce1141 Mon Sep 17 00:00:00 2001 From: Marvin Scham Date: Sun, 14 Sep 2025 01:03:11 +0200 Subject: [PATCH] Updated content + code cleanup --- readme_updater.py | 40 +++++++++++++++++++------------------ resources/README.md | 5 +++++ resources/README.md.jinja | 6 +++--- resources/socials.json | 8 ++++---- resources/technologies.json | 16 +++++++++++---- 5 files changed, 45 insertions(+), 30 deletions(-) create mode 100644 resources/README.md diff --git a/readme_updater.py b/readme_updater.py index 696a48c..6d64216 100644 --- a/readme_updater.py +++ b/readme_updater.py @@ -41,16 +41,10 @@ def calc_darkness_bias(obj, threshold): def seconds_to_string(seconds): - days = seconds // 86400 - remaining_seconds = seconds % 86400 - hours = remaining_seconds // 3600 - remaining_minutes = (remaining_seconds % 3600) // 60 + hours = seconds // 3600 + remaining_minutes = (seconds % 3600) // 60 - time_string = "" - if days > 0: - time_string += f"{days}:{hours:02}" - else: - time_string += f"{hours}" + time_string = f"{hours}" time_string += f":{remaining_minutes:02}" return time_string @@ -71,7 +65,7 @@ with open(os.path.join(resource_dir, "socials.json")) as f: socials = json.load(f) # Sort to build rainbow -hue_shift = 0.35 +hue_shift = 0.8 darkness_bias = 0.2 technologies = sorted( @@ -81,8 +75,10 @@ technologies = sorted( blog_entries = {} try: + ghost_base_url = os.getenv("GHOST_URL").rstrip("/") + ghost_api_key = os.getenv("GHOST_API_KEY") response = requests.get( - f"{os.getenv("GHOST_URL")}/ghost/api/content/posts/?key={os.getenv("GHOST_KEY")}" + f"{ghost_base_url}/ghost/api/content/posts/?key={ghost_api_key}" ) blog_entries = response.json()["posts"][:3] except Exception as e: @@ -95,8 +91,9 @@ try: waka_token = base64.b64encode(os.getenv("WAKAPI_KEY").encode("ascii")).decode( "ascii" ) + wakapi_base_url = os.getenv("WAKAPI_URL").rstrip("/") response = requests.get( - f"{os.getenv("WAKAPI_URL")}/api/summary?interval=30_days", + f"{wakapi_base_url}/api/summary?interval=30_days", headers={"Authorization": f"Basic {waka_token}"}, ) waka_info = response.json() @@ -106,17 +103,19 @@ try: project_list = waka_info["projects"][:4] lang_list = waka_info["languages"][:6] - max_name_len = max(len(entry["key"]) for entry in project_list) + # max_name_len = max(len(entry["key"]) for entry in project_list) max_lang_len = max(len(entry["key"]) for entry in lang_list) - max_key_len = max(max_name_len, max_lang_len) + # max_key_len = max(max_name_len, max_lang_len) + max_key_len = max_lang_len - max_proj_time_len = max( - len(seconds_to_string(entry["total"])) for entry in project_list - ) + # max_proj_time_len = max( + # len(seconds_to_string(entry["total"])) for entry in project_list + # ) max_lang_time_len = max( len(seconds_to_string(entry["total"])) for entry in lang_list ) - max_total_len = max(max_proj_time_len, max_lang_time_len) + # max_total_len = max(max_proj_time_len, max_lang_time_len) + max_total_len = max_lang_time_len # waka_projects += "
\n"
     # for project in project_list:
@@ -135,15 +134,18 @@ try:
     # waka_projects += "
" waka_langs += "
\n"
+    waka_langs += f"{'Lang':<{max_key_len}}   "
+    waka_langs += f"{'hh:mm':>{max_total_len}}   \n"
     for lang in lang_list:
         filled_length = int((lang["total"] / total_duration) * MAX_BAR_LENGTH)
         progress_bar = BAR_CHAR * filled_length + EMPTY_BAR_CHAR * (
             MAX_BAR_LENGTH - filled_length
         )
         percentage_str = str(int((lang["total"] / total_duration * 100))) + "%"
+        time_string = seconds_to_string(lang["total"])
 
         waka_langs += f"{lang['key']:<{max_key_len}}   "
-        waka_langs += f"{seconds_to_string(lang["total"]):>{max_total_len}}   "
+        waka_langs += f"{time_string:>{max_total_len}}   "
         waka_langs += f"{progress_bar}   "
         waka_langs += f"{percentage_str:>3}\n"
     waka_langs += "
" diff --git a/resources/README.md b/resources/README.md new file mode 100644 index 0000000..2a9e9d5 --- /dev/null +++ b/resources/README.md @@ -0,0 +1,5 @@ +# Resources + +## Logo source for shields.io icons + +> https://simpleicons.org/ diff --git a/resources/README.md.jinja b/resources/README.md.jinja index 476cb2d..9a32074 100644 --- a/resources/README.md.jinja +++ b/resources/README.md.jinja @@ -1,8 +1,8 @@

Welcome!

-

I'm Marvin – M.Sc. student, fullstack developer and creator of Mastery Chart.
Located in Baden-Württemberg, Germany .

+

I'm Marvin – Software engineer and creator of Mastery Chart.
Located in Baden-Württemberg, Germany .

{# Derived from https://github.com/thmsgbrt/thmsgbrt #} -

🛠 Tools I use

+

🛠 Things I use

{% for item in technologies -%} {{ item['name'] }} @@ -26,7 +26,7 @@ {%- if waka_stats|length > 1 %} -

📊 30-day breakdown

+

📊 30-day coding activity

{{ waka_stats }} {% endif %} diff --git a/resources/socials.json b/resources/socials.json index 8183af5..66abbfe 100644 --- a/resources/socials.json +++ b/resources/socials.json @@ -3,24 +3,24 @@ "name": "Homepage", "url": "https://marvinscham.de", "color": "#0d254c", - "logo": "googlechrome" + "logo": "" }, { "name": "GitHub", "url": "https://github.vom/marvinscham", "color": "#181717", - "logo": "github" + "logo": "" }, { "name": "LinkedIn", "url": "https://www.linkedin.com/in/marvin-scham-58576216b/", "color": "#0A66C2", - "logo": "linkedin" + "logo": "" }, { "name": "Duolingo", "url": "https://duolingo.com/profile/marvinscham", "color": "#58CC02", - "logo": "duolingo" + "logo": "" } ] diff --git a/resources/technologies.json b/resources/technologies.json index 066c827..1925f74 100644 --- a/resources/technologies.json +++ b/resources/technologies.json @@ -1,10 +1,12 @@ [ + { "name": "Adminer", "logo": "adminer", "color": "#34567C" }, { "name": "Authentik", "logo": "authentik", "color": "#FD4B2D" }, { "name": "Bash", "logo": "gnubash", "color": "#4EAA25" }, - { "name": "Chart.js", "logo": "chartdotjs", "color": "#FF6384" }, + { "name": "Calibre--Web", "logo": "calibreweb", "color": "#45B29D" }, { "name": "Cloudflare", "logo": "cloudflare", "color": "#F38020" }, + { "name": "C%2b%2b", "logo": "cplusplus", "color": "#00599C" }, + { "name": "CSS", "logo": "css", "color": "#663399" }, { "name": "D3.js", "logo": "d3", "color": "#F9A03C" }, - { "name": "Django", "logo": "django", "color": "#092E20" }, { "name": "Docker", "logo": "Docker", "color": "#2496ED" }, { "name": "Ghost", "logo": "ghost", "color": "#15171A" }, { "name": "Git", "logo": "git", "color": "#F05032" }, @@ -12,17 +14,23 @@ { "name": "Immich", "logo": "immich", "color": "#4250AF" }, { "name": "JavaScript", "logo": "javascript", "color": "#F7DF1E" }, { "name": "LaTeX", "logo": "latex", "color": "#008080" }, + { "name": "Linux Mint", "logo": "linuxmint", "color": "#86BE43" }, { "name": "MariaDB", "logo": "mariadb", "color": "#1F305F" }, { "name": "Markdown", "logo": "markdown", "color": "#000000" }, { "name": "n8n", "logo": "n8n", "color": "#EA4B71" }, + { "name": "Nextcloud", "logo": "nextcloud", "color": "#0082C9" }, { "name": "nginx", "logo": "nginx", "color": "#009639" }, { "name": "Obsidian", "logo": "obsidian", "color": "#7C3AED" }, { "name": "Paperless", "logo": "paperlessngx", "color": "#17541F" }, { "name": "PHP", "logo": "php", "color": "#777BB4" }, { "name": "Plausible", "logo": "plausibleanalytics", "color": "#5850EC" }, { "name": "Python", "logo": "python", "color": "#3776AB" }, + { "name": "Redis", "logo": "redis", "color": "#FF4438" }, { "name": "Riot API", "logo": "riotgames", "color": "#EB0029" }, - { "name": "SonarQube", "logo": "sonarqube", "color": "#4E9BCD" }, - { "name": "Tailwind", "logo": "tailwindcss", "color": "#06B6D4" }, + { "name": "Sass", "logo": "sass", "color": "#CC6699" }, + { "name": "SonarQube", "logo": "sonarqubeserver", "color": "#126ED3" }, + { "name": "Traefik", "logo": "traefikproxy", "color": "#24A1C1" }, + { "name": "uBlock", "logo": "ublockorigin", "color": "#800000" }, + { "name": "Vaultwarden", "logo": "vaultwarden", "color": "#000000" }, { "name": "WireGuard", "logo": "wireguard", "color": "#88171A" } ]