Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
64e06d111c | ||
|
|
8193c75f38 | ||
|
|
3464b68573 | ||
|
|
c7a283f4af | ||
|
|
98e2a007f2 |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm11.3-395.3l112 112c4.6 4.6 5.9 11.5 3.5 17.4s-8.3 9.9-14.8 9.9l-64 0 0 96c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32l0-96-64 0c-6.5 0-12.3-3.9-14.8-9.9s-1.1-12.9 3.5-17.4l112-112c6.2-6.2 16.4-6.2 22.6 0z"/></svg>
|
||||||
|
After Width: | Height: | Size: 490 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M160 0c17.7 0 32 14.3 32 32l0 35.7c1.6 .2 3.1 .4 4.7 .7c.4 .1 .7 .1 1.1 .2l48 8.8c17.4 3.2 28.9 19.9 25.7 37.2s-19.9 28.9-37.2 25.7l-47.5-8.7c-31.3-4.6-58.9-1.5-78.3 6.2s-27.2 18.3-29 28.1c-2 10.7-.5 16.7 1.2 20.4c1.8 3.9 5.5 8.3 12.8 13.2c16.3 10.7 41.3 17.7 73.7 26.3l2.9 .8c28.6 7.6 63.6 16.8 89.6 33.8c14.2 9.3 27.6 21.9 35.9 39.5c8.5 17.9 10.3 37.9 6.4 59.2c-6.9 38-33.1 63.4-65.6 76.7c-13.7 5.6-28.6 9.2-44.4 11l0 33.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-34.9c-.4-.1-.9-.1-1.3-.2l-.2 0s0 0 0 0c-24.4-3.8-64.5-14.3-91.5-26.3c-16.1-7.2-23.4-26.1-16.2-42.2s26.1-23.4 42.2-16.2c20.9 9.3 55.3 18.5 75.2 21.6c31.9 4.7 58.2 2 76-5.3c16.9-6.9 24.6-16.9 26.8-28.9c1.9-10.6 .4-16.7-1.3-20.4c-1.9-4-5.6-8.4-13-13.3c-16.4-10.7-41.5-17.7-74-26.3l-2.8-.7s0 0 0 0C119.4 279.3 84.4 270 58.4 253c-14.2-9.3-27.5-22-35.8-39.6c-8.4-17.9-10.1-37.9-6.1-59.2C23.7 116 52.3 91.2 84.8 78.3c13.3-5.3 27.9-8.9 43.2-11L128 32c0-17.7 14.3-32 32-32z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M470.7 9.4c3 3.1 5.3 6.6 6.9 10.3s2.4 7.8 2.4 12.2c0 0 0 .1 0 .1c0 0 0 0 0 0l0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.7L310.6 214.6c-11.8 11.8-30.8 12.6-43.5 1.7L176 138.1 84.8 216.3c-13.4 11.5-33.6 9.9-45.1-3.5s-9.9-33.6 3.5-45.1l112-96c12-10.3 29.7-10.3 41.7 0l89.5 76.7L370.7 64 352 64c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0s0 0 0 0c8.8 0 16.8 3.6 22.6 9.3l.1 .1zM0 304c0-26.5 21.5-48 48-48l416 0c26.5 0 48 21.5 48 48l0 160c0 26.5-21.5 48-48 48L48 512c-26.5 0-48-21.5-48-48L0 304zM48 416l0 48 48 0c0-26.5-21.5-48-48-48zM96 304l-48 0 0 48c26.5 0 48-21.5 48-48zM464 416c-26.5 0-48 21.5-48 48l48 0 0-48zM416 304c0 26.5 21.5 48 48 48l0-48-48 0zm-96 80a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z"/></svg>
|
||||||
|
After Width: | Height: | Size: 926 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM160 152c0-13.3 10.7-24 24-24l88 0c44.2 0 80 35.8 80 80c0 28-14.4 52.7-36.3 67l34.1 75.1c5.5 12.1 .1 26.3-11.9 31.8s-26.3 .1-31.8-11.9L268.9 288 208 288l0 72c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-96 0-112zm48 88l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0 64z"/></svg>
|
||||||
|
After Width: | Height: | Size: 544 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M64 32C28.7 32 0 60.7 0 96l0 64c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-64c0-35.3-28.7-64-64-64L64 32zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm48 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 288c-35.3 0-64 28.7-64 64l0 64c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-64c0-35.3-28.7-64-64-64L64 288zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z"/></svg>
|
||||||
|
After Width: | Height: | Size: 627 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M352 224c53 0 96-43 96-96s-43-96-96-96s-96 43-96 96c0 4 .2 8 .7 11.9l-94.1 47C145.4 170.2 121.9 160 96 160c-53 0-96 43-96 96s43 96 96 96c25.9 0 49.4-10.2 66.6-26.9l94.1 47c-.5 3.9-.7 7.8-.7 11.9c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-25.9 0-49.4 10.2-66.6 26.9l-94.1-47c.5-3.9 .7-7.8 .7-11.9s-.2-8-.7-11.9l94.1-47C302.6 213.8 326.1 224 352 224z"/></svg>
|
||||||
|
After Width: | Height: | Size: 579 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M320 96L192 96 144.6 24.9C137.5 14.2 145.1 0 157.9 0L354.1 0c12.8 0 20.4 14.2 13.3 24.9L320 96zM192 128l128 0c3.8 2.5 8.1 5.3 13 8.4C389.7 172.7 512 250.9 512 416c0 53-43 96-96 96L96 512c-53 0-96-43-96-96C0 250.9 122.3 172.7 179 136.4c0 0 0 0 0 0s0 0 0 0c4.8-3.1 9.2-5.9 13-8.4zm84 88c0-11-9-20-20-20s-20 9-20 20l0 14c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1c0 0 0 0 0 0s0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4l0 14.6c0 11 9 20 20 20s20-9 20-20l0-13.8c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15c0 0 0 0 0 0l-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7l0-13.9z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -3,12 +3,36 @@
|
|||||||
width: default
|
width: default
|
||||||
desktop-navigation-width: default
|
desktop-navigation-width: default
|
||||||
center-vertically: false
|
center-vertically: false
|
||||||
hide-desktop-navigation: false
|
hide-desktop-navigation: true
|
||||||
show-mobile-header: false
|
show-mobile-header: false
|
||||||
|
|
||||||
head-widgets:
|
head-widgets:
|
||||||
|
- $include: ../widgets/search.yml
|
||||||
|
|
||||||
columns:
|
columns:
|
||||||
- size: full
|
- size: full
|
||||||
widgets:
|
widgets:
|
||||||
- $include: ../widgets/search.yml
|
- $include: ../widgets/bookmarks/most-used.yml
|
||||||
|
- $include: ../widgets/rss/selfhst.yml
|
||||||
|
- type: split-column
|
||||||
|
max-columns: 2
|
||||||
|
widgets:
|
||||||
|
- $include: ../widgets/feeds/hacker-news.yml
|
||||||
|
- $include: ../widgets/feeds/lobsters.yml
|
||||||
|
- $include: ../widgets/reddit/selfhosted.yml
|
||||||
|
- $include: ../widgets/custom/wikipedia-on-this-day.yml
|
||||||
|
- $include: ../widgets/videos/youtube-subscriptions.yml
|
||||||
|
- size: small
|
||||||
|
widgets:
|
||||||
|
- $include: ../widgets/clock.yml
|
||||||
|
- $include: ../widgets/custom/sunrise-sunset.yml
|
||||||
|
- $include: ../widgets/calendar.yml
|
||||||
|
- $include: ../widgets/custom/random-fact.yml
|
||||||
|
- $include: ../widgets/weather/quito.yml
|
||||||
|
- $include: ../widgets/weather/seoul.yml
|
||||||
|
- $include: ../widgets/custom/lastfm-latest.yml
|
||||||
|
- $include: ../widgets/custom/steam-recent-games.yml
|
||||||
|
- $include: ../widgets/custom/steam-friends.yml
|
||||||
|
- $include: ../widgets/releases/followed.yml
|
||||||
|
- $include: ../widgets/releases/own.yml
|
||||||
|
- $include: ../widgets/custom/xkcd.yml
|
||||||
|
|||||||
@@ -12,3 +12,4 @@
|
|||||||
- size: full
|
- size: full
|
||||||
widgets:
|
widgets:
|
||||||
- $include: ../widgets/search.yml
|
- $include: ../widgets/search.yml
|
||||||
|
- $include: ../widgets/bookmarks/most-used.yml
|
||||||
|
|||||||
@@ -0,0 +1,129 @@
|
|||||||
|
- type: bookmarks
|
||||||
|
title: 📌 Bookmarks
|
||||||
|
groups:
|
||||||
|
|
||||||
|
- title: Work
|
||||||
|
color: *color_mauve
|
||||||
|
same-tab: true
|
||||||
|
hide-arrow: false
|
||||||
|
links:
|
||||||
|
- title: GitHub
|
||||||
|
url: https://github.com/moonstar-x
|
||||||
|
icon: si:github
|
||||||
|
- title: Gitea
|
||||||
|
url: https://ms-x.dev
|
||||||
|
icon: si:gitea
|
||||||
|
- title: Penpot
|
||||||
|
url: https://design.ms-x.dev
|
||||||
|
icon: si:penpot
|
||||||
|
- title: AWS
|
||||||
|
url: https://console.aws.amazon.com
|
||||||
|
icon: si:amazonwebservices
|
||||||
|
- title: Cloudflare
|
||||||
|
url: https://cloudflare.com
|
||||||
|
icon: si:cloudflare
|
||||||
|
|
||||||
|
- title: Productivity
|
||||||
|
color: *color_blue
|
||||||
|
same-tab: true
|
||||||
|
hide-arrow: false
|
||||||
|
links:
|
||||||
|
- title: Pairdrop
|
||||||
|
url: https://pairdrop.ms-x.dev
|
||||||
|
icon: /assets/icons/svg/share-nodes.svg
|
||||||
|
- title: RegExr
|
||||||
|
url: https://regexr.com
|
||||||
|
icon: /assets/icons/svg/registered.svg
|
||||||
|
- title: Portainer
|
||||||
|
url: https://docker.ms-x.dev
|
||||||
|
icon: si:portainer
|
||||||
|
- title: Toggl Track
|
||||||
|
url: https://track.toggl.com
|
||||||
|
icon: si:toggltrack
|
||||||
|
- title: n8n
|
||||||
|
url: https://automation.ms-x.dev
|
||||||
|
icon: si:n8n
|
||||||
|
|
||||||
|
- title: Entertainment
|
||||||
|
color: *color_red
|
||||||
|
same-tab: true
|
||||||
|
hide-arrow: false
|
||||||
|
links:
|
||||||
|
- title: YouTube
|
||||||
|
url: https://youtube.com
|
||||||
|
icon: si:youtube
|
||||||
|
- title: Jellyfin
|
||||||
|
url: https://media.ms-x.dev
|
||||||
|
icon: si:jellyfin
|
||||||
|
- title: Jellyfin - Music
|
||||||
|
url: https://music.ms-x.dev
|
||||||
|
icon: si:jellyfin
|
||||||
|
- title: Roblox
|
||||||
|
url: https://roblox.com/home
|
||||||
|
icon: si:roblox
|
||||||
|
- title: Steam LVL Up
|
||||||
|
url: https://steamlvlup.com
|
||||||
|
icon: /assets/icons/svg/circle-up.svg
|
||||||
|
|
||||||
|
- title: Development
|
||||||
|
color: *color_peach
|
||||||
|
same-tab: true
|
||||||
|
hide-arrow: false
|
||||||
|
links:
|
||||||
|
- title: App Store Connect
|
||||||
|
url: https://appstoreconnect.apple.com
|
||||||
|
icon: si:appstore
|
||||||
|
- title: Google Play Console
|
||||||
|
url: https://play.google.com/console/
|
||||||
|
icon: si:googleplay
|
||||||
|
- title: Discord Applications
|
||||||
|
url: https://discord.com/developers/applications
|
||||||
|
icon: si:discord
|
||||||
|
- title: Google Analytics
|
||||||
|
url: https://analytics.google.com
|
||||||
|
icon: si:googleanalytics
|
||||||
|
- title: Umami
|
||||||
|
url: https://analytics.ms-x.dev
|
||||||
|
icon: si:umami
|
||||||
|
|
||||||
|
- title: Reference
|
||||||
|
color: *color_yellow
|
||||||
|
same-tab: true
|
||||||
|
hide-arrow: false
|
||||||
|
links:
|
||||||
|
- title: /g/
|
||||||
|
url: https://boards.4chan.org/g/
|
||||||
|
icon: si:4chan
|
||||||
|
- title: Reddit
|
||||||
|
url: https://reddit.com
|
||||||
|
icon: si:reddit
|
||||||
|
- title: Miniflux
|
||||||
|
url: https://rss.ms-x.dev
|
||||||
|
icon: si:rss
|
||||||
|
- title: Stack Overflow
|
||||||
|
url: https://stackoverflow.com/users/11200608/moonstar-x
|
||||||
|
icon: si:stackoverflow
|
||||||
|
- title: Selfh.st
|
||||||
|
url: http://selfh.st
|
||||||
|
icon: /assets/icons/svg/server.svg
|
||||||
|
|
||||||
|
- title: Other
|
||||||
|
color: *color_green
|
||||||
|
same-tab: true
|
||||||
|
hide-arrow: false
|
||||||
|
links:
|
||||||
|
- title: Last.fm
|
||||||
|
url: https://last.fm/user/moonstar-x
|
||||||
|
icon: si:lastdotfm
|
||||||
|
- title: Uptime Kuma
|
||||||
|
url: https://status.moonstar-x.dev
|
||||||
|
icon: si:uptimekuma
|
||||||
|
- title: SRI
|
||||||
|
url: https://srienlinea.sri.gob.ec
|
||||||
|
icon: /assets/icons/svg/stack-dollar.svg
|
||||||
|
- title: Maybe
|
||||||
|
url: https://finance.ms-x.dev
|
||||||
|
icon: /assets/icons/svg/money-bill-trend-up.svg
|
||||||
|
- title: Wallos
|
||||||
|
url: https://subscriptions.ms-x.dev
|
||||||
|
icon: /assets/icons/svg/dollar-sign.svg
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- type: calendar
|
||||||
|
title: 📅 Calendar
|
||||||
|
first-day-of-week: monday
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
- type: clock
|
||||||
|
title: ⏰ Clock
|
||||||
|
hour-format: 12h
|
||||||
|
timezones:
|
||||||
|
- timezone: America/Los_Angeles
|
||||||
|
label: Los Angeles
|
||||||
|
- timezone: America/New_York
|
||||||
|
label: New York
|
||||||
|
- timezone: Europe/Paris
|
||||||
|
label: Paris
|
||||||
|
- timezone: Asia/Seoul
|
||||||
|
label: Seoul
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
- type: custom-api
|
||||||
|
title: 🎵 Lastest Scrobbles
|
||||||
|
cache: 60s
|
||||||
|
url: http://ws.audioscrobbler.com/2.0/
|
||||||
|
parameters:
|
||||||
|
method: user.getRecentTracks
|
||||||
|
user: ${LASTFM_USERNAME}
|
||||||
|
api_key: ${LASTFM_API_KEY}
|
||||||
|
format: json
|
||||||
|
limit: 10
|
||||||
|
template: |
|
||||||
|
<ul class="list list-gap-10 collapsible-container" data-collapse-after="5">
|
||||||
|
{{ range .JSON.Array "recenttracks.track" }}
|
||||||
|
<li class="flex items-center gap-10">
|
||||||
|
<div style="border-radius: 5px; min-width: 5rem; max-width: 5rem; overflow: hidden;" class="card">
|
||||||
|
<object data={{ .String "image.2.#text" }} type="image/png">
|
||||||
|
<img src="https://lastfm.freetls.fastly.net/i/u/174s/2a96cbd8b46e442fc41c2b86b821562f.png" alt="Fallback">
|
||||||
|
</object>
|
||||||
|
</div>
|
||||||
|
<div class="flex-1">
|
||||||
|
<p class="color-primary size-h5">{{ .String "artist.#text" }}</p>
|
||||||
|
<p class="size-h5">{{ .String "name" }}</p>
|
||||||
|
<p class="size-h6">
|
||||||
|
{{ if .String "@attr.nowplaying" }}
|
||||||
|
<span class="color-positive">Now playing</span>
|
||||||
|
{{ else }}
|
||||||
|
<span class="color-subdue" {{ .String "date.#text" | parseRelativeTime "02 Jan 2006, 15:04" }}></span>
|
||||||
|
{{ end }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- type: custom-api
|
||||||
|
title: 💡 Random Fact
|
||||||
|
cache: 1h
|
||||||
|
url: https://uselessfacts.jsph.pl/api/v2/facts/random
|
||||||
|
template: |
|
||||||
|
<p class="size-h4 color-paragraph">{{ .JSON.String "text" }}</p>
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
- type: custom-api
|
||||||
|
title: 🎮 Steam Friends
|
||||||
|
cache: 1m
|
||||||
|
url: https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=${STEAM_API_KEY}&steamids=${STEAM_FRIENDS}
|
||||||
|
template: |
|
||||||
|
<ul class="list list-gap-10 collapsible-container" data-collapse-after="5">
|
||||||
|
{{ $players := .JSON.Array "response.players" }}
|
||||||
|
{{ if gt (len $players) 0 }}
|
||||||
|
{{ range $players }}
|
||||||
|
{{ $status := .Int "personastate" }}
|
||||||
|
{{ $colorClass := "color-subdue" }}
|
||||||
|
{{ $statusText := "Offline" }}
|
||||||
|
{{ if eq $status 1 }}
|
||||||
|
{{ $colorClass = "color-positive" }}
|
||||||
|
{{ $statusText = "Online" }}
|
||||||
|
{{ else if eq $status 2 }}
|
||||||
|
{{ $colorClass = "color-highlight" }}
|
||||||
|
{{ $statusText = "Busy" }}
|
||||||
|
{{ else if eq $status 3 }}
|
||||||
|
{{ $colorClass = "color-primary" }}
|
||||||
|
{{ $statusText = "Away" }}
|
||||||
|
{{ else if eq $status 4 }}
|
||||||
|
{{ $colorClass = "color-primary" }}
|
||||||
|
{{ $statusText = "Snooze" }}
|
||||||
|
{{ else if eq $status 5 }}
|
||||||
|
{{ $colorClass = "color-primary" }}
|
||||||
|
{{ $statusText = "Looking to Trade" }}
|
||||||
|
{{ else if eq $status 6 }}
|
||||||
|
{{ $colorClass = "color-primary" }}
|
||||||
|
{{ $statusText = "Looking to Play" }}
|
||||||
|
{{ end }}
|
||||||
|
<li class="flex gap-10 items-start thumbnail-parent">
|
||||||
|
<a href="{{ .String "profileurl" }}" style="width: 4.4rem;height: 4.4rem;border: 2px solid var(--color-text-subdue);padding: 2px;border-radius: 50%;position: relative;flex-shrink: 0;">
|
||||||
|
<img class="thumbnail" style="aspect-ratio: 1; border-radius: 50%;" src="{{ .String "avatarmedium" }}" alt="Avatar" loading="lazy">
|
||||||
|
</a>
|
||||||
|
<div class="items-start">
|
||||||
|
<a href="{{.String "profileurl"}}" title="{{.String "personname"}}" class="size-h3 block">{{ .String "personaname" }}</a>
|
||||||
|
<span class="{{ $colorClass }}">
|
||||||
|
{{ if .Exists "gameextrainfo" }}
|
||||||
|
{{ .String "gameextrainfo" }}
|
||||||
|
{{ else }}
|
||||||
|
{{ $statusText }}
|
||||||
|
{{ if eq $status 0 }}
|
||||||
|
{{ if .Exists "lastlogoff" }}
|
||||||
|
for <span data-dynamic-relative-time="{{ .Int "lastlogoff" }}"></span>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
{{ else }}
|
||||||
|
<p class="color-negative">No player data found.</p>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
- type: custom-api
|
||||||
|
title: 🎮 Recently Played Games
|
||||||
|
cache: 1h
|
||||||
|
url: http://api.steampowered.com/IPlayerService/GetRecentlyPlayedGames/v0001/?key=${STEAM_API_KEY}&steamid=${STEAM_USERID}&format=json
|
||||||
|
template: |
|
||||||
|
<div>
|
||||||
|
{{ if eq .Response.StatusCode 200 }}
|
||||||
|
{{ $games := .JSON.Array "response.games" }}
|
||||||
|
{{ if gt (len $games) 0 }}
|
||||||
|
<ul class="list list-gap-10 collapsible-container" data-collapse-after="5">
|
||||||
|
{{ range $games }}
|
||||||
|
<li style="display: flex; align-items: center;">
|
||||||
|
<a href="https://store.steampowered.com/app/{{ .Int "appid" }}" target="_blank">
|
||||||
|
<img
|
||||||
|
src="http://media.steampowered.com/steamcommunity/public/images/apps/{{ .Int "appid" }}/{{ .String "img_icon_url" }}.jpg"
|
||||||
|
alt="{{ .String "name" }}"
|
||||||
|
style="width: 32px; border-radius: var(--border-radius); margin-right: 10px;">
|
||||||
|
</a>
|
||||||
|
<div>
|
||||||
|
<a
|
||||||
|
href="https://store.steampowered.com/app/{{ .Int "appid" }}"
|
||||||
|
class="size-base color-primary"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
{{ .String "name" }}
|
||||||
|
</a>
|
||||||
|
<br>
|
||||||
|
<span class="size-h5 color-subdue">
|
||||||
|
Last 2 weeks:
|
||||||
|
{{ if gt (toFloat (.Int "playtime_2weeks")) 60.0 }}
|
||||||
|
{{ printf "%.2f hrs" (div (toFloat (.Int "playtime_2weeks")) 60.0) }}
|
||||||
|
{{ else }}
|
||||||
|
{{ .Int "playtime_2weeks" }} mins
|
||||||
|
{{ end }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
{{ else }}
|
||||||
|
<p class="color-negative">No recently played games found.</p>
|
||||||
|
{{ end }}
|
||||||
|
{{ else }}
|
||||||
|
<p class="color-negative">An unexpected error occurred. Please try again later.</p>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
- type: custom-api
|
||||||
|
title: ☀️ Sunrise & Sunset
|
||||||
|
body-type: string
|
||||||
|
cache: 12h
|
||||||
|
options:
|
||||||
|
location: Quito, Ecuador
|
||||||
|
template: |
|
||||||
|
{{ $timeLayout := "3:04 PM" }}
|
||||||
|
|
||||||
|
{{/* Step 1: geocode the location */}}
|
||||||
|
{{ $loc := replaceAll " " "%20" (.Options.StringOr "location" "") }}
|
||||||
|
{{ $geoUrl := printf "https://geocoding-api.open-meteo.com/v1/search?name=%s&count=1&language=en&format=json" $loc }}
|
||||||
|
{{ $geo := newRequest $geoUrl | getResponse }}
|
||||||
|
{{ $results := $geo.JSON.Array "results" }}
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
|
||||||
|
|
||||||
|
{{ if eq (len $results) 0 }}
|
||||||
|
<p class="color-paragraph">Location "{{ .Options.StringOr "location" "" }}" not found.</p>
|
||||||
|
{{ else }}
|
||||||
|
{{ $lat := $geo.JSON.String "results.0.latitude" }}
|
||||||
|
{{ $lon := $geo.JSON.String "results.0.longitude" }}
|
||||||
|
|
||||||
|
{{/* Step 2: today's sunrise/sunset/daylight from Open-Meteo */}}
|
||||||
|
{{ $fcUrl := printf "https://api.open-meteo.com/v1/forecast?latitude=%s&longitude=%s&daily=sunrise,sunset,daylight_duration&forecast_days=1&timezone=auto" $lat $lon }}
|
||||||
|
{{ $fc := newRequest $fcUrl | getResponse }}
|
||||||
|
|
||||||
|
{{ $sunriseRaw := $fc.JSON.String "daily.sunrise.0" }}
|
||||||
|
{{ $sunsetRaw := $fc.JSON.String "daily.sunset.0" }}
|
||||||
|
{{ $daylight := $fc.JSON.Int "daily.daylight_duration.0" }}
|
||||||
|
|
||||||
|
{{ if or (eq $sunriseRaw "") (eq $sunsetRaw "") }}
|
||||||
|
<p class="color-paragraph"><i class="fas fa-circle-exclamation"></i> No sunrise/sunset today (polar region).</p>
|
||||||
|
{{ else }}
|
||||||
|
{{ $sunrise := $sunriseRaw | parseTime "2006-01-02T15:04" }}
|
||||||
|
{{ $sunset := $sunsetRaw | parseTime "2006-01-02T15:04" }}
|
||||||
|
{{ $hours := div $daylight 3600 }}
|
||||||
|
{{ $mins := div (mod $daylight 3600) 60 }}
|
||||||
|
|
||||||
|
<div style="display:flex; justify-content:space-around; align-items:center; padding:0.5rem 0;">
|
||||||
|
<div style="text-align:center;">
|
||||||
|
<i class="fas fa-arrow-up" style="color: var(--color-positive); font-size: 14px; margin-right: 0.25rem;"></i>
|
||||||
|
<i class="fas fa-sun" style="color: var(--color-text-highlight); font-size: 28px;"></i>
|
||||||
|
<p class="size-h3 color-text-highlight">{{ $sunrise.Format $timeLayout }}</p>
|
||||||
|
<p class="size-h6 color-paragraph">Sunrise</p>
|
||||||
|
</div>
|
||||||
|
<div style="text-align:center;">
|
||||||
|
<i class="fas fa-clock" style="color: var(--color-paragraph); font-size: 22px;"></i>
|
||||||
|
<p class="size-h3 color-text-highlight">{{ $hours }}h {{ $mins }}m</p>
|
||||||
|
<p class="size-h6 color-paragraph">Daylight</p>
|
||||||
|
</div>
|
||||||
|
<div style="text-align:center;">
|
||||||
|
<i class="fas fa-arrow-down" style="color: var(--color-negative); font-size: 14px; margin-right: 0.25rem;"></i>
|
||||||
|
<i class="fas fa-moon" style="color: var(--color-text-highlight); font-size: 28px;"></i>
|
||||||
|
<p class="size-h3 color-text-highlight">{{ $sunset.Format $timeLayout }}</p>
|
||||||
|
<p class="size-h6 color-paragraph">Sunset</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
- type: custom-api
|
||||||
|
title: 💡 On This Day
|
||||||
|
cache: 6h
|
||||||
|
url: https://api.github.com/rate_limit
|
||||||
|
template: |
|
||||||
|
{{/* Top-level URL is a cheap dummy JSON; the real work is done inside the template via newRequest so we can compute today's date. Wikipedia's REST API requires a descriptive User-Agent per their policy (https://meta.wikimedia.org/wiki/User-Agent_policy) — an unset UA returns 403. */}}
|
||||||
|
{{ $month := now | formatTime "01" }}
|
||||||
|
{{ $day := now | formatTime "02" }}
|
||||||
|
{{ $url := concat "https://en.wikipedia.org/api/rest_v1/feed/onthisday/events/" $month "/" $day }}
|
||||||
|
{{
|
||||||
|
$resp := newRequest $url
|
||||||
|
| withHeader "Accept" "application/json"
|
||||||
|
| withHeader "User-Agent" "glance-dashboard/1.0 (+https://github.com/glanceapp/glance)"
|
||||||
|
| getResponse
|
||||||
|
}}
|
||||||
|
|
||||||
|
{{ if ne $resp.Response.StatusCode 200 }}
|
||||||
|
<p class="color-negative">Failed to load Wikipedia events ({{ $resp.Response.Status }})</p>
|
||||||
|
{{ else }}
|
||||||
|
{{ $events := $resp.JSON.Array "events" }}
|
||||||
|
{{ if eq (len $events) 0 }}
|
||||||
|
<p class="color-subdue">No events found for today.</p>
|
||||||
|
{{ else }}
|
||||||
|
<ul class="list list-gap-14 collapsible-container" data-collapse-after="5">
|
||||||
|
{{ range $events }}
|
||||||
|
{{ $year := .Int "year" }}
|
||||||
|
{{ $text := .String "text" }}
|
||||||
|
{{ $pages := .Array "pages" }}
|
||||||
|
{{ $link := "" }}
|
||||||
|
{{ if gt (len $pages) 0 }}
|
||||||
|
{{ $firstPage := index $pages 0 }}
|
||||||
|
{{ $link = $firstPage.String "content_urls.desktop.page" }}
|
||||||
|
{{ end }}
|
||||||
|
<li>
|
||||||
|
<div class="flex items-baseline" style="gap: 0.6rem;">
|
||||||
|
<span class="color-primary size-h4" style="flex: 0 0 auto; min-width: 3rem;">{{ $year }}</span>
|
||||||
|
<span class="size-h5" style="flex: 1 1 auto;">
|
||||||
|
{{ if ne $link "" }}
|
||||||
|
<a href="{{ $link }}" target="_blank" rel="noreferrer" class="color-highlight">{{ $text }}</a>
|
||||||
|
{{ else }}
|
||||||
|
{{ $text }}
|
||||||
|
{{ end }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
- type: custom-api
|
||||||
|
title: 💥 xkcd
|
||||||
|
cache: 2m
|
||||||
|
url: https://xkcd.com/info.0.json
|
||||||
|
template: |
|
||||||
|
<center>{{ .JSON.String "title" }}</center>
|
||||||
|
<img src="{{ .JSON.String "img" }}"></img>
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
- type: hacker-news
|
||||||
|
title: 📰 Hacker News
|
||||||
|
limit: 25
|
||||||
|
collapse-after: 5
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
- type: lobsters
|
||||||
|
title: 🦞 Lobsters
|
||||||
|
limit: 25
|
||||||
|
collapse-after: 5
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
- type: markets
|
||||||
|
title: 💰 Markets
|
||||||
|
sort-by: absolute-change
|
||||||
|
markets:
|
||||||
|
- symbol: SPY
|
||||||
|
name: S&P 500
|
||||||
|
- symbol: BTC-USD
|
||||||
|
name: Bitcoin
|
||||||
|
- symbol: NVDA
|
||||||
|
name: NVIDIA
|
||||||
|
- symbol: AAPL
|
||||||
|
name: Apple
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
- type: rss
|
||||||
|
title: 💻 r/selfhosted
|
||||||
|
style: vertical-list
|
||||||
|
limit: 25
|
||||||
|
collapse-after: 5
|
||||||
|
feeds:
|
||||||
|
- url: https://reddit.com/r/selfhosted.rss
|
||||||
|
title: r/selfhosted
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
- type: releases
|
||||||
|
title: 🆕 Followed Releases
|
||||||
|
token: ${GITHUB_TOKEN}
|
||||||
|
show-source-icon: true
|
||||||
|
limit: 25
|
||||||
|
collapse-after: 10
|
||||||
|
repositories:
|
||||||
|
- glanceapp/glance
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
- type: releases
|
||||||
|
title: 🆕 Own Releases
|
||||||
|
token: ${GITHUB_TOKEN}
|
||||||
|
show-source-icon: true
|
||||||
|
limit: 25
|
||||||
|
collapse-after: 10
|
||||||
|
repositories:
|
||||||
|
- moonstar-x/discord-free-games-notifier
|
||||||
|
- moonstar-x/free-games-crawler
|
||||||
|
- moonstar-x/discord-tts-bot
|
||||||
|
- moonstar-x-libs/react-twitch-embed
|
||||||
|
- moonstar-x-libs/eslint-config-moonstar-x
|
||||||
|
- moonstar-x-libs/node-logger
|
||||||
|
- moonstar-x-libs/tsconfig
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
- type: repository
|
||||||
|
title: moonstar-x/discord-free-games-notifier
|
||||||
|
token: ${GITHUB_TOKEN}
|
||||||
|
repository: moonstar-x/discord-free-games-notifier
|
||||||
|
pull-requests-limit: 5
|
||||||
|
issues-limit: 5
|
||||||
|
commits-limit: -1
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
- type: repository
|
||||||
|
title: moonstar-x/discord-tts-bot
|
||||||
|
token: ${GITHUB_TOKEN}
|
||||||
|
repository: moonstar-x/discord-tts-bot
|
||||||
|
pull-requests-limit: 5
|
||||||
|
issues-limit: 5
|
||||||
|
commits-limit: -1
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
- type: repository
|
||||||
|
title: moonstar-x-libs/eslint-config-moonstar-x
|
||||||
|
token: ${GITHUB_TOKEN}
|
||||||
|
repository: moonstar-x-libs/eslint-config-moonstar-x
|
||||||
|
pull-requests-limit: 5
|
||||||
|
issues-limit: 5
|
||||||
|
commits-limit: -1
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
- type: repository
|
||||||
|
title: moonstar-x/free-games-crawler
|
||||||
|
token: ${GITHUB_TOKEN}
|
||||||
|
repository: moonstar-x/free-games-crawler
|
||||||
|
pull-requests-limit: 5
|
||||||
|
issues-limit: 5
|
||||||
|
commits-limit: -1
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
- type: repository
|
||||||
|
title: moonstar-x-libs/node-logger
|
||||||
|
token: ${GITHUB_TOKEN}
|
||||||
|
repository: moonstar-x-libs/node-logger
|
||||||
|
pull-requests-limit: 5
|
||||||
|
issues-limit: 5
|
||||||
|
commits-limit: -1
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
- type: repository
|
||||||
|
title: moonstar-x-libs/react-twitch-embed
|
||||||
|
token: ${GITHUB_TOKEN}
|
||||||
|
repository: moonstar-x-libs/react-twitch-embed
|
||||||
|
pull-requests-limit: 5
|
||||||
|
issues-limit: 5
|
||||||
|
commits-limit: -1
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
- type: repository
|
||||||
|
title: moonstar-x-libs/tsconfig
|
||||||
|
token: ${GITHUB_TOKEN}
|
||||||
|
repository: moonstar-x-libs/tsconfig
|
||||||
|
pull-requests-limit: 5
|
||||||
|
issues-limit: 5
|
||||||
|
commits-limit: -1
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
- type: rss
|
||||||
|
title: 💿 selfh.st
|
||||||
|
style: horizontal-cards
|
||||||
|
limit: 25
|
||||||
|
feeds:
|
||||||
|
- url: https://selfh.st/rss/
|
||||||
|
title: selfh.st
|
||||||
@@ -5,6 +5,9 @@
|
|||||||
autofocus: true
|
autofocus: true
|
||||||
placeholder: 검색어를 입력해 주세요.
|
placeholder: 검색어를 입력해 주세요.
|
||||||
bangs:
|
bangs:
|
||||||
|
- title: ChatGPT
|
||||||
|
shortcut: "!chat"
|
||||||
|
url: https://chatgpt.com/?q={QUERY}
|
||||||
- title: YouTube
|
- title: YouTube
|
||||||
shortcut: "!yt"
|
shortcut: "!yt"
|
||||||
url: https://youtube.com/results?search_query={QUERY}
|
url: https://youtube.com/results?search_query={QUERY}
|
||||||
@@ -17,6 +20,9 @@
|
|||||||
- title: Reddit
|
- title: Reddit
|
||||||
shortcut: "!reddit"
|
shortcut: "!reddit"
|
||||||
url: https://reddit.com/search?q={QUERY}
|
url: https://reddit.com/search?q={QUERY}
|
||||||
|
- title: StackOverflow
|
||||||
|
shortcut: "!so"
|
||||||
|
url: https://stackoverflow.com/search?q={QUERY}
|
||||||
- title: Docker Hub
|
- title: Docker Hub
|
||||||
shortcut: "!docker"
|
shortcut: "!docker"
|
||||||
url: https://hub.docker.com/search?q={QUERY}
|
url: https://hub.docker.com/search?q={QUERY}
|
||||||
@@ -29,6 +35,6 @@
|
|||||||
- title: PyPI
|
- title: PyPI
|
||||||
shortcut: "!py"
|
shortcut: "!py"
|
||||||
url: https://pypi.org/search/?q={QUERY}
|
url: https://pypi.org/search/?q={QUERY}
|
||||||
- title: StackOverflow
|
- title: Pub.dev
|
||||||
shortcut: "!so"
|
shortcut: "!flutter"
|
||||||
url: https://stackoverflow.com/search?q={QUERY}
|
url: https://pub.dev/packages?q={QUERY}
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
- type: videos
|
||||||
|
title: 📺 Subscriptions
|
||||||
|
limit: 100
|
||||||
|
collapse-after-rows: 6
|
||||||
|
include-shorts: false
|
||||||
|
style: grid-cards
|
||||||
|
channels:
|
||||||
|
- UC7Jwj9fkrf1adN4fMmTkpug
|
||||||
|
- UCsBjURrPoezykLs9EqgamOA
|
||||||
|
- UCGudGqToOw9hWGR88W9Jutg
|
||||||
|
- UCsXVk37bltHxD1rDPwtNM8Q
|
||||||
|
- UCJXa3_WNNmIpewOtCHf3B0g
|
||||||
|
- UCA_NMesSILCEBUJ3Qqw8muw
|
||||||
|
- UCHnyfMqiRRG1u-2MsSQLbXA
|
||||||
|
- UCsvn_Po0SmunchJYOWpOxMg
|
||||||
|
- UCO8WCQsddotuNAH6-Pb_A0Q
|
||||||
|
- UCpnkp_D4FLPCiXOmDhoAeYA
|
||||||
|
- UC2UXDak6o7rBm23k3Vv5dww
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- type: weather
|
||||||
|
title: 🌦️ Weather [Quito]
|
||||||
|
units: metric
|
||||||
|
hour-format: 12h
|
||||||
|
hide-location: false
|
||||||
|
location: Quito, Ecuador
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
- type: weather
|
||||||
|
title: 🌦️ Weather [Seoul]
|
||||||
|
units: metric
|
||||||
|
hour-format: 12h
|
||||||
|
hide-location: false
|
||||||
|
location: Seoul, South Korea
|
||||||
@@ -10,3 +10,8 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
TZ: ${TIMEZONE}
|
TZ: ${TIMEZONE}
|
||||||
GITHUB_TOKEN: ${GITHUB_TOKEN}
|
GITHUB_TOKEN: ${GITHUB_TOKEN}
|
||||||
|
LASTFM_USERNAME: ${LASTFM_USERNAME}
|
||||||
|
LASTFM_API_KEY: ${LASTFM_API_KEY}
|
||||||
|
STEAM_USERID: ${STEAM_USERID}
|
||||||
|
STEAM_API_KEY: ${STEAM_API_KEY}
|
||||||
|
STEAM_FRIENDS: ${STEAM_FRIENDS}
|
||||||
|
|||||||