<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Stamper Labs</title>
    <description>The latest articles on DEV Community by Stamper Labs (@stamperlabs).</description>
    <link>https://dev.to/stamperlabs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F12272%2Fdbb01c0a-9814-4080-b3e4-31d5d9c5aa73.png</url>
      <title>DEV Community: Stamper Labs</title>
      <link>https://dev.to/stamperlabs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/stamperlabs"/>
    <language>en</language>
    <item>
      <title>Semantic Versioning with Jreleaser and Upcoming4j</title>
      <dc:creator>German Valencia</dc:creator>
      <pubDate>Fri, 30 Jan 2026 19:04:17 +0000</pubDate>
      <link>https://dev.to/stamperlabs/semantic-versioning-with-jreleaser-and-upcoming4j-75b</link>
      <guid>https://dev.to/stamperlabs/semantic-versioning-with-jreleaser-and-upcoming4j-75b</guid>
      <description>&lt;p&gt;While working with &lt;a href="https://www.npmjs.com/package/@semantic-release/npm" rel="noopener noreferrer"&gt;semantic-release npm package&lt;/a&gt; to fully automate application releases in &lt;code&gt;Nodejs&lt;/code&gt;, I got used to an out-of-the-box workflow where &lt;a href="https://www.conventionalcommits.org/en/v1.0.0/" rel="noopener noreferrer"&gt;conventional commits&lt;/a&gt; drive version calculation, git tagging, changelog generation, GitHub releases, and CI-safe publishing.&lt;/p&gt;

&lt;p&gt;When I switched to gradle-java projects, I could not find an equivalent solution. After researching the ecosystem, &lt;a href="https://jreleaser.org/" rel="noopener noreferrer"&gt;Jreleaser&lt;/a&gt; stood out as the most complete tool available for creating Git tags, generating changelogs, and publishing GitHub releases. However, it expects the version to be predefined. &lt;/p&gt;

&lt;p&gt;That gap led me to create &lt;a href="https://github.com/Stamper-Labs/upcoming4j" rel="noopener noreferrer"&gt;Upcoming4j&lt;/a&gt;, a lightweight &lt;code&gt;gradle&lt;/code&gt; plugin focused solely on semantic version calculation, designed to integrate seamlessly with &lt;code&gt;Jreleaser&lt;/code&gt; to fully automate software versioning.&lt;/p&gt;

&lt;p&gt;In the following step-by-step guide, I will show how to integrate &lt;code&gt;JReleaser&lt;/code&gt; and &lt;code&gt;Upcoming4j&lt;/code&gt; to automatically increment version numbers, create Git tags, generate changelogs, and publish GitHub releases based on Git commit history using semantic versioning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install &lt;a href="https://sdkman.io/" rel="noopener noreferrer"&gt;Sdkman&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install JDK 21&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sdk &lt;span class="nb"&gt;install &lt;/span&gt;java 21.0.9-amzn
&lt;span class="nv"&gt;$ &lt;/span&gt;java &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Install git
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;git
&lt;span class="nv"&gt;$ &lt;/span&gt;git &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 1: Download Playground Gradle-Java Project &lt;code&gt;u4j-playground&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Download and unzip &lt;a href="https://drive.google.com/file/d/1nHtiCHjIVXvqnz5xa5rzR3VabbARMiZ1/view?usp=drive_link" rel="noopener noreferrer"&gt;the playground project&lt;/a&gt; into your local file system. This is a gradle-java project that will be used to demonstrate how to integrate JReleaser and Upcoming4j in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Install and Configure &lt;code&gt;Jreleaser&lt;/code&gt; Plugin
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;JReleaser&lt;/code&gt; uses a hosted Git repository to create Git tags and publish releases. Create a new repository on your &lt;strong&gt;GitHub&lt;/strong&gt; account and follow the instructions to link your local playground project to the remote repository.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Download the &lt;a href="https://gist.github.com/sttamper/0bd186b222258d2c93fb5ef3b80ac919" rel="noopener noreferrer"&gt;Jreleaser Configuration file&lt;/a&gt;, and place it in the following location: &lt;code&gt;/u4j-playground/gradle/jreleaser.gradle&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the &lt;code&gt;/u4j-playground/build.gradle&lt;/code&gt; file to install and apply &lt;code&gt;Jreleaser&lt;/code&gt; configuration. The file should look like this now:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gradle"&gt;&lt;code&gt;&lt;span class="n"&gt;plugins&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="s1"&gt;'application'&lt;/span&gt;
    &lt;span class="c1"&gt;// install JReleaser plugin&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="s1"&gt;'org.jreleaser'&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s1"&gt;'1.22.0'&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Apply JReleaser configuration&lt;/span&gt;
&lt;span class="n"&gt;apply&lt;/span&gt; &lt;span class="nl"&gt;from:&lt;/span&gt; &lt;span class="s1"&gt;'gradle/jreleaser.gradle'&lt;/span&gt;

&lt;span class="c1"&gt;// Set a harcoded version for now&lt;/span&gt;
&lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'1.0.0'&lt;/span&gt;

&lt;span class="k"&gt;repositories&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;mavenCentral&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;dependencies&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;testImplementation&lt;/span&gt; &lt;span class="n"&gt;libs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;junit&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;jupiter&lt;/span&gt;
    &lt;span class="n"&gt;testRuntimeOnly&lt;/span&gt; &lt;span class="s1"&gt;'org.junit.platform:junit-platform-launcher'&lt;/span&gt;
    &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="n"&gt;libs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;guava&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;java&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;toolchain&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;languageVersion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JavaLanguageVersion&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;application&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;mainClass&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'org.example.App'&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;named&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'test'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;useJUnitPlatform&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Verify &lt;code&gt;Jreleaser&lt;/code&gt; Configuration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create a &lt;a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens" rel="noopener noreferrer"&gt;Personal Access Token&lt;/a&gt; in &lt;strong&gt;Github&lt;/strong&gt;, and export the token using the following environment variable:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;JRELEASER_GITHUB_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_token
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;JReleaser&lt;/code&gt; in &lt;code&gt;--dryrun&lt;/code&gt; mode to preview the release steps without making any changes:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;./gradlew clean jreleaserRelease &lt;span class="nt"&gt;--no-configuration-cache&lt;/span&gt; &lt;span class="nt"&gt;--stacktrace&lt;/span&gt; &lt;span class="nt"&gt;--dryrun&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Check logs to verify outcomes:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6ocllmfskr9ujbw0v8x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6ocllmfskr9ujbw0v8x.png" alt="Jreleaser logs" width="800" height="853"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Notice that even in &lt;code&gt;--dryrun&lt;/code&gt; mode, &lt;code&gt;Jreleaser&lt;/code&gt; requires PAT being exported.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Notice that &lt;code&gt;JReleaser&lt;/code&gt; is not yet fully compliant with Gradle’s configuration cache. Therefore &lt;code&gt;--no-configuration-cache&lt;/code&gt; flag is being used.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 5: Install and Apply &lt;code&gt;Upcoming4j&lt;/code&gt; Plugin
&lt;/h2&gt;

&lt;p&gt;Open &lt;code&gt;/u4j-playground/build.gradle&lt;/code&gt; file and install &lt;code&gt;Upcoming4j&lt;/code&gt; plugin, the file should look like this now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gradle"&gt;&lt;code&gt;&lt;span class="n"&gt;plugins&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="s1"&gt;'application'&lt;/span&gt;
    &lt;span class="c1"&gt;// install JReleaser plugin&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="s1"&gt;'org.jreleaser'&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s1"&gt;'1.22.0'&lt;/span&gt;
    &lt;span class="c1"&gt;// Install Upcoming4j plugin&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="s1"&gt;'io.github.sttamper.upcoming4j'&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s1"&gt;'0.0.4'&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Apply JReleaser configuration&lt;/span&gt;
&lt;span class="n"&gt;apply&lt;/span&gt; &lt;span class="nl"&gt;from:&lt;/span&gt; &lt;span class="s1"&gt;'gradle/jreleaser.gradle'&lt;/span&gt;

&lt;span class="c1"&gt;// Set up next version with Upcoming4j&lt;/span&gt;
&lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nx&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;repositories&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;mavenCentral&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;dependencies&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;testImplementation&lt;/span&gt; &lt;span class="n"&gt;libs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;junit&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;jupiter&lt;/span&gt;
    &lt;span class="n"&gt;testRuntimeOnly&lt;/span&gt; &lt;span class="s1"&gt;'org.junit.platform:junit-platform-launcher'&lt;/span&gt;
    &lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="n"&gt;libs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;guava&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;java&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;toolchain&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;languageVersion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JavaLanguageVersion&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;application&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;mainClass&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'org.example.App'&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;named&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'test'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;useJUnitPlatform&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Verify &lt;code&gt;Upcoming4j&lt;/code&gt; Configuration
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Upcoming4j&lt;/code&gt; computes the next semantic version during Gradle’s configuration phase, ensuring that the correct version is always available in the &lt;code&gt;version&lt;/code&gt; property of the &lt;code&gt;build.gradle&lt;/code&gt; file.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean project:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; ./gradlew clean
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Check Upcoming4j logs to confirm version calculation:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flnlfl27llwketeu6aac1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flnlfl27llwketeu6aac1.png" alt="Upcoming4j logs" width="800" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Step: Bump The Next Semantic Version
&lt;/h2&gt;

&lt;p&gt;Now you can run &lt;code&gt;JReleaser&lt;/code&gt; to create the next release version calculated by &lt;code&gt;Upcoming4j&lt;/code&gt;, based on the analysis of the commit history:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./gradlew clean jreleaserRelease &lt;span class="nt"&gt;--no-configuration-cache&lt;/span&gt; &lt;span class="nt"&gt;--stacktrace&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>java</category>
      <category>gradle</category>
      <category>github</category>
      <category>git</category>
    </item>
    <item>
      <title>Customizing MacOS Terminal with Starship Like a Pro</title>
      <dc:creator>German Valencia</dc:creator>
      <pubDate>Sun, 18 Jan 2026 04:50:29 +0000</pubDate>
      <link>https://dev.to/stamperlabs/customizing-macos-terminal-with-starship-like-a-pro-2geb</link>
      <guid>https://dev.to/stamperlabs/customizing-macos-terminal-with-starship-like-a-pro-2geb</guid>
      <description>&lt;p&gt;As terminal applications grow more powerful and complex, managing multiple CLIs and their different versions becomes increasingly challenging. Customizing your terminal can make a big difference, helping you handle several tools at once without getting lost in the clutter.&lt;/p&gt;

&lt;p&gt;I previously relied on Oh My Zsh for prompt customization, but recently switched to &lt;a href="https://starship.rs/" rel="noopener noreferrer"&gt;Starship&lt;/a&gt; because it provides a simpler declarative approach to customization. So in this post, I will walk through how to build a clean starship prompt, including dynamic context for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS profiles &lt;/li&gt;
&lt;li&gt;Java (Gradle)&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Install &lt;a href="https://brew.sh/" rel="noopener noreferrer"&gt;Homebrew&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Install &lt;a href="https://iterm2.com/" rel="noopener noreferrer"&gt;Iterm2&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Install Starship
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;starship
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Integrate Starship with Zsh
&lt;/h2&gt;

&lt;p&gt;Open &lt;code&gt;.zshrc&lt;/code&gt; for edition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the following line to load starship on every zsh session:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;starship init zsh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3 (Optional): Install Zsh Plugins
&lt;/h2&gt;

&lt;p&gt;The following plugins are optional, but they enhance your terminal experience by highlighting commands in real time and providing suggestions based on your command history and current input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;zsh-syntax-highlighting
brew &lt;span class="nb"&gt;install &lt;/span&gt;zsh-autosuggestions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;.zshrc&lt;/code&gt; for edition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add following lines to load plugins on every zsh session:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;brew &lt;span class="nt"&gt;--prefix&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/share/zsh-autosuggestions/zsh-autosuggestions.zsh
&lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;brew &lt;span class="nt"&gt;--prefix&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Install Nerd Fonts
&lt;/h2&gt;

&lt;p&gt;To ensure terminal can correctly render icons and custom glyphs, you need to install a &lt;strong&gt;Nerd Font&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew search font-fira-code-nerd-font
brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; font-fira-code-nerd-font
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Setting Terminal Font
&lt;/h2&gt;

&lt;p&gt;Update your terminal settings to use a Nerd Font: &lt;/p&gt;

&lt;h3&gt;
  
  
  Iterm2
&lt;/h3&gt;

&lt;p&gt;Navigate to: &lt;em&gt;&lt;strong&gt;Settings &amp;gt; Profiles &amp;gt; Default &amp;gt; General&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Terminal Font&lt;/td&gt;
&lt;td&gt;FiraCode Nerd Font&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Visual Studio Code integrated terminal
&lt;/h3&gt;

&lt;p&gt;Navigate to: &lt;em&gt;&lt;strong&gt;Settings &amp;gt; User&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;terminal.integrated.fontFamily&lt;/td&gt;
&lt;td&gt;FiraCode Nerd Font&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;editor.fontFamily&lt;/td&gt;
&lt;td&gt;Menlo, Monaco, 'Courier New', monospace, 'FiraCode Nerd Font’&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  MacOS native terminal
&lt;/h3&gt;

&lt;p&gt;Navigate to: &lt;em&gt;&lt;strong&gt;Settings &amp;gt; Profiles &amp;gt; Text&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Font&lt;/td&gt;
&lt;td&gt;FiraCode Nerd Font&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 6: Customize Starship Theme
&lt;/h2&gt;

&lt;p&gt;Create and open the &lt;code&gt;starship.toml&lt;/code&gt; configuration file for edition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.config &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; nano ~/.config/starship.toml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, download the Starship configuration from the following GitHub Gist:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://gist.github.com/sttamper/ff69056e8cb94be9397a2c5508e57018" rel="noopener noreferrer"&gt;Starship Configuration GitHub Gist&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Replace the contents of &lt;code&gt;starship.toml&lt;/code&gt; file with the configuration from the gist, then save the file and restart the terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Last Step: Play With The New Prompt
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AWS profiles
&lt;/h3&gt;

&lt;p&gt;In the example below, after running &lt;code&gt;export AWS_PROFILE=root&lt;/code&gt;, Starship reflects the currently active AWS account directly in the prompt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Starship displays the active AWS profile: &lt;code&gt;root&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The terminal prompt also shows the active AWS region: &lt;code&gt;us-east-1 (Virginia)&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1n4umc7n0majdkwt7eb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1n4umc7n0majdkwt7eb.png" alt=" " width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  NodeJS projects
&lt;/h3&gt;

&lt;p&gt;The following example shows how changing the Node.js version using NVM (&lt;code&gt;nvm use&lt;/code&gt;) is reflected in Starship:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Starship automatically updates the prompt to display the active Node.js version.&lt;/li&gt;
&lt;li&gt;Starship also shows useful Git repository information, such as the current branch and an icon indicating modified files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F70kk5tsacjh8syg0mrmu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F70kk5tsacjh8syg0mrmu.png" alt=" " width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Java and Gradle projects
&lt;/h3&gt;

&lt;p&gt;In the following example, observe how Starship displays information about the current environment in a Java application directory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The active Java version currently in use.&lt;/li&gt;
&lt;li&gt;The active Gradle version.&lt;/li&gt;
&lt;li&gt;Additional contextual information, such as the active AWS profile and region, when those tools are enabled.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8mc1jig95dupr0wqjd4s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8mc1jig95dupr0wqjd4s.png" alt=" " width="800" height="665"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enjoy it!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>cli</category>
      <category>aws</category>
    </item>
  </channel>
</rss>
