From 0d5cbc8ab3410004b7d5a1f77dd21f68ac6433da Mon Sep 17 00:00:00 2001 From: Noah Springer <23213489+Hampter@users.noreply.github.com> Date: Fri, 22 Nov 2024 19:45:08 +0000 Subject: [PATCH] feat(segment): add tauri and svelte --- src/config/segment_types.go | 6 ++ src/segments/svelte.go | 30 ++++++++ src/segments/tauri.go | 30 ++++++++ themes/schema.json | 106 +++++++++++++++++++++++++++ website/docs/segments/cli/svelte.mdx | 63 ++++++++++++++++ website/docs/segments/cli/tauri.mdx | 63 ++++++++++++++++ website/sidebars.js | 2 + 7 files changed, 300 insertions(+) create mode 100644 src/segments/svelte.go create mode 100644 src/segments/tauri.go create mode 100644 website/docs/segments/cli/svelte.mdx create mode 100644 website/docs/segments/cli/tauri.mdx diff --git a/src/config/segment_types.go b/src/config/segment_types.go index 4638c6a9..2a27e64d 100644 --- a/src/config/segment_types.go +++ b/src/config/segment_types.go @@ -185,6 +185,8 @@ const ( STATUS SegmentType = "status" // STRAVA is a sports activity tracker STRAVA SegmentType = "strava" + // Svelte segment + SVELTE SegmentType = "svelte" // Subversion segment SVN SegmentType = "svn" // SWIFT writes the active swift version @@ -193,6 +195,8 @@ const ( SYSTEMINFO SegmentType = "sysinfo" // TALOSCTL writes the talosctl context TALOSCTL SegmentType = "talosctl" + // Tauri Segment + TAURI SegmentType = "tauri" // TERRAFORM writes the terraform workspace we're currently in TERRAFORM SegmentType = "terraform" // TEXT writes a text @@ -306,10 +310,12 @@ var Segments = map[SegmentType]func() SegmentWriter{ SPOTIFY: func() SegmentWriter { return &segments.Spotify{} }, STATUS: func() SegmentWriter { return &segments.Status{} }, STRAVA: func() SegmentWriter { return &segments.Strava{} }, + SVELTE: func() SegmentWriter { return &segments.Svelte{} }, SVN: func() SegmentWriter { return &segments.Svn{} }, SWIFT: func() SegmentWriter { return &segments.Swift{} }, SYSTEMINFO: func() SegmentWriter { return &segments.SystemInfo{} }, TALOSCTL: func() SegmentWriter { return &segments.TalosCTL{} }, + TAURI: func() SegmentWriter { return &segments.Tauri{} }, TERRAFORM: func() SegmentWriter { return &segments.Terraform{} }, TEXT: func() SegmentWriter { return &segments.Text{} }, TIME: func() SegmentWriter { return &segments.Time{} }, diff --git a/src/segments/svelte.go b/src/segments/svelte.go new file mode 100644 index 00000000..1f0ca821 --- /dev/null +++ b/src/segments/svelte.go @@ -0,0 +1,30 @@ +package segments + +type Svelte struct { + language +} + +func (s *Svelte) Template() string { + return languageTemplate +} + +func (s *Svelte) Enabled() bool { + if !s.hasNodePackage("svelte") { + return false + } + + s.extensions = []string{"package.json"} + s.commands = []*cmd{ + { + regex: `(?:(?P((?P[0-9]+).(?P[0-9]+).(?P[0-9]+))))`, + getVersion: s.getVersion, + }, + } + s.versionURLTemplate = "https://github.com/sveltejs/svelte/releases/tag/svelte%40{{.Full}}" + + return s.language.Enabled() +} + +func (s *Svelte) getVersion() (string, error) { + return s.nodePackageVersion("svelte") +} diff --git a/src/segments/tauri.go b/src/segments/tauri.go new file mode 100644 index 00000000..728d9f79 --- /dev/null +++ b/src/segments/tauri.go @@ -0,0 +1,30 @@ +package segments + +import ( + "path/filepath" +) + +type Tauri struct { + language +} + +func (t *Tauri) Template() string { + return languageTemplate +} + +func (t *Tauri) Enabled() bool { + t.extensions = []string{"package.json"} + t.commands = []*cmd{ + { + regex: `(?:(?P((?P[0-9]+).(?P[0-9]+).(?P[0-9]+))))`, + getVersion: t.getVersion, + }, + } + t.versionURLTemplate = "https://github.com/tauri-apps/tauri/releases/tag/tauri-v{{.Full}}" + + return t.language.Enabled() +} + +func (t *Tauri) getVersion() (string, error) { + return t.nodePackageVersion(filepath.Join("@tauri-apps", "api")) +} diff --git a/themes/schema.json b/themes/schema.json index 18acb478..7d618f33 100644 --- a/themes/schema.json +++ b/themes/schema.json @@ -386,9 +386,11 @@ "shell", "sysinfo", "strava", + "svelte", "svn", "swift", "talosctl", + "tauri", "time", "text", "terraform", @@ -4899,6 +4901,110 @@ } } } + }, + { + "if": { + "properties": { + "type": { + "const": "tauri" + } + } + }, + "then": { + "title": "Tauri Segment", + "description": "https://ohmyposh.dev/docs/segments/cli/tauri", + "properties": { + "properties": { + "properties": { + "home_enabled": { + "$ref": "#/definitions/home_enabled" + }, + "fetch_version": { + "$ref": "#/definitions/fetch_version" + }, + "cache_duration": { + "$ref": "#/definitions/cache_duration", + "default": "none" + }, + "display_mode": { + "$ref": "#/definitions/display_mode" + }, + "missing_command_text": { + "$ref": "#/definitions/missing_command_text" + }, + "version_url_template": { + "$ref": "#/definitions/version_url_template" + }, + "extensions": { + "type": "array", + "title": "Extensions", + "description": "The extensions to look for when determining if the current directory is a Tauri project", + "default": [ + "package.json" + ], + "items": { + "type": "string" + } + }, + "folders": { + "$ref": "#/definitions/folders" + } + } + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "svelte" + } + } + }, + "then": { + "title": "Svelte Segment", + "description": "https://ohmyposh.dev/docs/segments/cli/svelte", + "properties": { + "properties": { + "properties": { + "home_enabled": { + "$ref": "#/definitions/home_enabled" + }, + "fetch_version": { + "$ref": "#/definitions/fetch_version" + }, + "cache_duration": { + "$ref": "#/definitions/cache_duration", + "default": "none" + }, + "display_mode": { + "$ref": "#/definitions/display_mode" + }, + "missing_command_text": { + "$ref": "#/definitions/missing_command_text" + }, + "version_url_template": { + "$ref": "#/definitions/version_url_template" + }, + "extensions": { + "type": "array", + "title": "Extensions", + "description": "The extensions to look for when determining if the current directory is a Svelte project", + "default": [ + "package.json" + ], + "items": { + "type": "string" + } + }, + "folders": { + "$ref": "#/definitions/folders" + } + } + } + } + } } ] } diff --git a/website/docs/segments/cli/svelte.mdx b/website/docs/segments/cli/svelte.mdx new file mode 100644 index 00000000..dac577cc --- /dev/null +++ b/website/docs/segments/cli/svelte.mdx @@ -0,0 +1,63 @@ +--- +id: svelte +title: Svelte +sidebar_label: Svelte +--- + +## What + +Display the currently active Svelte version. + +## Sample Configuration + +import Config from "@site/src/components/Config.js"; + + + +## Properties + +| Name | Type | Default | Description | +| ---------------------- | :--------: | :------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `home_enabled` | `boolean` | `false` | display the segment in the HOME folder or not | +| `fetch_version` | `boolean` | `true` | fetch the svelte version | +| `cache_duration` | `string` | `24h` | the duration for which the version will be cached. The duration is a string in the format `1h2m3s` and is parsed using the [time.ParseDuration] function from the Go standard library. To disable the cache, use `none` | +| `missing_command_text` | `string` | | text to display when the command is missing | +| `display_mode` | `string` | `context` |
  • `always`: the segment is always displayed
  • `files`: the segment is only displayed when file `extensions` listed are present
  • `context`: displays the segment when the environment or files is active
| +| `version_url_template` | `string` | | a go [text/template][go-text-template] [template][templates] that creates the URL of the version info / release notes | +| `extensions` | `[]string` | `angular.json` | allows to override the default list of file extensions to validate | +| `folders` | `[]string` | | allows to override the list of folder names to validate | + +## Template ([info][templates]) + +:::note default template + +```template +{{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }} +``` + +::: + +### Properties + +| Name | Type | Description | +| -------- | -------- | -------------------------------------------------- | +| `.Full` | `string` | the full version | +| `.Major` | `string` | major number | +| `.Minor` | `string` | minor number | +| `.Patch` | `string` | patch number | +| `.URL` | `string` | URL of the version info / release notes | +| `.Error` | `string` | error encountered when fetching the version string | + +[go-text-template]: https://golang.org/pkg/text/template/ +[templates]: /docs/configuration/templates +[svelte-docs]: https://svelte.dev/docs/svelte/overview +[time.ParseDuration]: https://golang.org/pkg/time/#ParseDuration diff --git a/website/docs/segments/cli/tauri.mdx b/website/docs/segments/cli/tauri.mdx new file mode 100644 index 00000000..7d407e28 --- /dev/null +++ b/website/docs/segments/cli/tauri.mdx @@ -0,0 +1,63 @@ +--- +id: tauri +title: Tauri +sidebar_label: Tauri +--- + +## What + +Display the currently active Tauri version. + +## Sample Configuration + +import Config from "@site/src/components/Config.js"; + + + +## Properties + +| Name | Type | Default | Description | +| ---------------------- | :--------: | :------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `home_enabled` | `boolean` | `false` | display the segment in the HOME folder or not | +| `fetch_version` | `boolean` | `true` | fetch the tauri version | +| `cache_duration` | `string` | `24h` | the duration for which the version will be cached. The duration is a string in the format `1h2m3s` and is parsed using the [time.ParseDuration] function from the Go standard library. To disable the cache, use `none` | +| `missing_command_text` | `string` | | text to display when the command is missing | +| `display_mode` | `string` | `context` |
  • `always`: the segment is always displayed
  • `files`: the segment is only displayed when file `extensions` listed are present
  • `context`: displays the segment when the environment or files is active
| +| `version_url_template` | `string` | | a go [text/template][go-text-template] [template][templates] that creates the URL of the version info / release notes | +| `extensions` | `[]string` | `angular.json` | allows to override the default list of file extensions to validate | +| `folders` | `[]string` | | allows to override the list of folder names to validate | + +## Template ([info][templates]) + +:::note default template + +```template +{{ if .Error }}{{ .Error }}{{ else }}{{ .Full }}{{ end }} +``` + +::: + +### Properties + +| Name | Type | Description | +| -------- | -------- | -------------------------------------------------- | +| `.Full` | `string` | the full version | +| `.Major` | `string` | major number | +| `.Minor` | `string` | minor number | +| `.Patch` | `string` | patch number | +| `.URL` | `string` | URL of the version info / release notes | +| `.Error` | `string` | error encountered when fetching the version string | + +[go-text-template]: https://golang.org/pkg/text/template/ +[templates]: /docs/configuration/templates +[tauri-docs]: https://v2.tauri.app/ +[time.ParseDuration]: https://golang.org/pkg/time/#ParseDuration diff --git a/website/sidebars.js b/website/sidebars.js index a05c03f7..d3326e30 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -82,7 +82,9 @@ module.exports = { "segments/cli/pnpm", "segments/cli/quasar", "segments/cli/react", + "segments/cli/svelte", "segments/cli/talosctl", + "segments/cli/tauri", "segments/cli/terraform", "segments/cli/ui5tooling", "segments/cli/umbraco",