Skip to content

Instantly share code, notes, and snippets.

@zainab-ali
Last active August 14, 2025 19:32
Show Gist options
  • Select an option

  • Save zainab-ali/ef7eea79b32b1e265c216e818eb96dab to your computer and use it in GitHub Desktop.

Select an option

Save zainab-ali/ef7eea79b32b1e265c216e818eb96dab to your computer and use it in GitHub Desktop.
London Scala User Group Talks Thank-you Template
//> using dep com.indoorvivants::decline-derive::latest.release
import decline_derive.*
case class Attributes(
@Name("intro-slides")
introSlides: String,
@Name("venue")
venue: String,
@Name("venue-bsky")
venueBsky: String,
@Name("speaker-1-name")
speaker1Name: String,
@Name("speaker-1-bsky")
speaker1Bsky: String,
@Name("speaker-1-talk-title")
talk1: String,
@Name("speaker-1-slides")
speaker1Slides: String,
@Name("speaker-2-name")
speaker2Name: String,
@Name("speaker-2-bsky")
speaker2Bsky: String,
@Name("speaker-2-talk-title")
talk2: String,
@Name("speaker-2-slides")
speaker2Slides: String,
@Name("next-talk-date")
nextTalksDate: String,
@Name("next-talk-link")
nextTalksLink: String,
@Name("next-hack-date")
nextHackDate: String,
@Name("next-hack-link")
nextHackLink: String,
@Name("next-wis-date")
nextWomenInScalaDate: String,
@Name("next-wis-link")
nextWomenInScalaLink: String
) derives CommandApplication
@main def main(args: String*) =
fillIn(CommandApplication.parseOrExit[Attributes](args))
def fillIn(attributes: Attributes): Unit = {
val template = """
=== Bluesky ===
Thank you for attending yesterday's Scala Talks! Thanks go to @<venue-bsky> for having us round for pizza, drinks and a beautiful venue. Special thanks go to our fantastic speakers @<speaker-1-bsky> and @<speaker-2-bsky>. See you next time!
πŸ—’ from us <intro-slides>
πŸ—’ from "<talk-1>" by @<speaker-1-bsky> : <speaker-1-slides>
πŸ—’ from "<talk-2>" by @<speaker-2-bsky> : <speaker-2-slides>
Join our Discord for video announcements https://discord.gg/aRCVCHmHES!
=== LinkedIn ===
Thank you for attending yesterday's Scala Talks! Thank go to <venue> for having us round for pizza, drinks and a beautiful venue. Special thanks go to our fantastic speakers <speaker-1> and <speaker-2>. See you next time!
πŸ—’ Slides from us <intro-slides>
πŸ—’ Slides from "<talk-1>" by <speaker-1> : <speaker-1-slides>
πŸ—’ Slides from "<talk-2>" by <speaker-2> : <speaker-2-slides>
🎟 Enter our Scala Days Underrepresented Group Discount Ticket Raffle: https://forms.gle/cKjqBHW36VsgMB3u7
πŸ“… Save the date for our next meetup on <next-talks-date> <next-talks-link>
πŸ“… Come along to the OSS hack on <next-hack-date> <next-hack-link>
πŸ“… Come along to ScalaBridge on <next-bridge-date> <next-bridge-link>
πŸ“’Join our Discord for video announcements: https://discord.gg/aRCVCHmHES!
πŸ‘·Join our Discord #jobs channel for job postings: https://discord.gg/aRCVCHmHES!
=== Meetup ===
Thank you for attending yesterday's Scala Talks! We hope you enjoyed it as much as we did. Thanks go to <venue> for having us round for pizza, drinks and a beautiful venue. Special thanks go to our fantastic speakers <speaker-1> and <speaker-2>.
- πŸ—’ [slides from us](<intro-slides>)
- πŸ—’ [slides from "<talk-1>" by <speaker-1>](<speaker-1-slides>)
- πŸ—’ [slides from "<talk-2>" by <speaker-2>](<speaker-2-slides>)
- 🎟 [Enter our Scala Days Underrepresented Group Discount Ticket Raffle](https://forms.gle/cKjqBHW36VsgMB3u7)
- πŸ“… [Save the date for our next meetup on <next-talks-date>](<next-talks-link>)
- πŸ“… [Come along to the OSS hack on <next-hack-date>](<next-hack-link>)
- πŸ“… [Come along to Women In Scala on <next-wis-date>](<next-wis-link>)
- πŸ“’[Join our Discord for video announcements](https://discord.gg/aRCVCHmHES)
- πŸ‘·[Join our Discord jobs channel for job postings](https://discord.gg/aRCVCHmHES)
See you soon!
London Scala User Group
"""
val filledIn = template
.replaceAll("<intro-slides>", attributes.introSlides)
.replaceAll("<venue>", attributes.venue)
.replaceAll("<venue-bsky>", attributes.venueBsky)
.replaceAll("<speaker-1-bsky>", attributes.speaker1Bsky)
.replaceAll("<speaker-1>", attributes.speaker1Name)
.replaceAll("<talk-1>", attributes.talk1)
.replaceAll("<speaker-1-slides>", attributes.speaker1Slides)
.replaceAll("<speaker-2-bsky>", attributes.speaker2Bsky)
.replaceAll("<speaker-2>", attributes.speaker2Name)
.replaceAll("<talk-2>", attributes.talk2)
.replaceAll("<speaker-2-slides>", attributes.speaker2Slides)
.replaceAll("<next-talks-date>", attributes.nextTalksDate)
.replaceAll("<next-talks-link>", attributes.nextTalksLink)
.replaceAll("<next-hack-date>", attributes.nextHackDate)
.replaceAll("<next-hack-link>", attributes.nextHackLink)
.replaceAll("<next-wis-date>", attributes.nextWomenInScalaDate)
.replaceAll("<next-wis-link>", attributes.nextWomenInScalaLink)
println(filledIn)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment