Index: /trunk/COPYING
===================================================================
--- /trunk/COPYING	(revision 30)
+++ /trunk/COPYING	(revision 31)
@@ -2,5 +2,5 @@
  * ----------------------------------------------------------------------------
  * "THE BEER-WARE LICENSE" (Revision 42.1):
- * <yakumo.izuru@chaotic.ninja> wrote this file. As long as you retain this notice you
+ * <eternal-servant@yakumo.dev> wrote this file. As long as you retain this notice you
  * can do whatever you want with this stuff. If we meet some day, and you think
  * this stuff is worth it, you can buy me a bottle of sake in return Izuru Yakumo
Index: /trunk/README.md
===================================================================
--- /trunk/README.md	(revision 30)
+++ /trunk/README.md	(revision 31)
@@ -1,3 +1,3 @@
-SUWAKO(1) - FreeBSD General Commands Manual
+SUWAKO(1) - General Commands Manual
 
 # NAME
@@ -8,7 +8,7 @@
 
 **suwako**
-\[**-f**&nbsp;*from*]
-\[**-t**&nbsp;*to*]
-\[*input*]
+**-f**&nbsp;*from*
+**-t**&nbsp;*to*
+*input*
 
 # DESCRIPTION
@@ -17,6 +17,5 @@
 a rewrite from a shell script that had curl
 and awk for dependencies.
-It fully serves
-as a drop-in replacement.
+It fully serves as a drop-in replacement.
 
 # USAGE
@@ -41,10 +40,10 @@
 # AUTHORS
 
-Izuru Yakumo &lt;[yakumo.izuru@chaotic.ninja](mailto:yakumo.izuru@chaotic.ninja)&gt;
+Izuru Yakumo &lt;[eternal-servant@yakumo.dev](mailto:eternal-servant@yakumo.dev)&gt;
 
 # BUGS
 
-You cannot translate the string "version", this is
-a direct consequence of using flaggy.
+Mozhi instances use translated-text as opposed to translated\_text
+coming from SimplyTranslate instances.
 
-FreeBSD 13.2-RELEASE-p4 - December 16, 2023
+NetBSD 10.1 - May 14, 2025
Index: /trunk/cmd/root.go
===================================================================
--- /trunk/cmd/root.go	(revision 31)
+++ /trunk/cmd/root.go	(revision 31)
@@ -0,0 +1,101 @@
+/*
+Copyright © 2025 Izuru Yakumo <eternal-servant@yakumo.dev>
+
+*/
+package cmd
+
+import (
+	"encoding/json"
+	"fmt"
+	"log"
+	"net/http"
+	"net/url"
+	"os"
+	"strings"
+
+	"github.com/spf13/cobra"
+	"gopkg.in/ini.v1"
+)
+
+var (
+	cfgFile string
+	input string
+	output string
+)
+
+var conf struct {
+	endpoint string
+	engine string
+}
+
+type Translate struct {
+	Output string `json:"translated_text"`
+}
+
+var rootCmd = &cobra.Command{
+	Use: "suwako",
+	Short: "A client for SimplyTranslate with illusionary origins",
+	Args: cobra.MinimumNArgs(1),
+	Run: func(cmd *cobra.Command, args []string) {
+		_split := fmt.Sprint(args)
+		text := fmt.Sprint(strings.Trim(_split, "[]"))
+		if len(output) == 0 {
+			log.Fatalf("\033[1;31m%s\033[0m\n", "No target language")
+		}
+		var translate Translate
+		encInput := url.PathEscape(text)
+		queryURL := conf.endpoint + "/api/translate" + "?engine=" + conf.engine + "&from=" + input + "&to=" + output + "&text=" + encInput
+		resp, err := http.Get(queryURL)
+		CheckErr(err)
+		defer resp.Body.Close()
+
+		_ = json.NewDecoder(resp.Body).Decode(&translate)
+		CheckErr(err)
+		if len(translate.Output) == 0 {
+			log.Fatalf("\033[1;31m%s\033[0m\n", "There was no output, maybe the endpoint is down?")
+		} else {
+			fmt.Printf("%v\n", translate.Output)
+		}
+	},
+	Version: "3.0.0",
+}
+func CheckErr(err error) {
+	if err != nil {
+		log.Fatal(err)
+	}
+}
+func Execute() {
+	err := rootCmd.Execute()
+	if err != nil {
+		os.Exit(1)
+	}
+}
+
+func init() {
+	cobra.OnInitialize(initConfig)
+	rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $XDG_CONFIG_HOME/suwako.ini)")
+	rootCmd.PersistentFlags().StringVarP(&input, "from", "f", "auto", "language to translate from (default is auto)")
+	rootCmd.PersistentFlags().StringVarP(&output, "to", "t", "", "target language")
+}
+func parseConfig(file string) error {
+	cfg, err := ini.Load(file)
+	CheckErr(err)
+
+	conf.endpoint = cfg.Section("suwako").Key("endpoint").String()
+	conf.engine = cfg.Section("suwako").Key("engine").String()
+
+	return nil
+}
+func initConfig() {
+	if cfgFile != "" {
+		parseConfig(cfgFile)
+
+	} else {
+		// Find home directory.
+		xdg, err := os.UserConfigDir()
+		CheckErr(err)
+		defaultCfgPath := xdg + "/suwako.ini"
+		parseConfig(defaultCfgPath)
+	}
+
+}
Index: unk/doc.go
===================================================================
--- /trunk/doc.go	(revision 30)
+++ 	(revision )
@@ -1,2 +1,0 @@
-// package suwako is yet another client for SimplyTranslate https://simple-web.org/projects/simplytranslate.html written in Go.
-package suwako
Index: /trunk/go.mod
===================================================================
--- /trunk/go.mod	(revision 30)
+++ /trunk/go.mod	(revision 31)
@@ -1,10 +1,16 @@
 module marisa.chaotic.ninja/suwako
 
-go 1.18
+go 1.21.0
+
+toolchain go1.23.8
 
 require (
-	github.com/integrii/flaggy v1.5.2
+	github.com/spf13/cobra v1.9.1
 	gopkg.in/ini.v1 v1.67.0
 )
 
-require github.com/stretchr/testify v1.8.4 // indirect
+require (
+	github.com/inconshreveable/mousetrap v1.1.0 // indirect
+	github.com/spf13/pflag v1.0.6 // indirect
+	github.com/stretchr/testify v1.10.0 // indirect
+)
Index: /trunk/go.sum
===================================================================
--- /trunk/go.sum	(revision 30)
+++ /trunk/go.sum	(revision 31)
@@ -1,12 +1,19 @@
+github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
-github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/integrii/flaggy v1.5.2 h1:bWV20MQEngo4hWhno3i5Z9ISPxLPKj9NOGNwTWb/8IQ=
-github.com/integrii/flaggy v1.5.2/go.mod h1:dO13u7SYuhk910nayCJ+s1DeAAGC1THCMj1uSFmwtQ8=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
+github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
+github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
+github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
+github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
+github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
 gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Index: /trunk/main.go
===================================================================
--- /trunk/main.go	(revision 31)
+++ /trunk/main.go	(revision 31)
@@ -0,0 +1,11 @@
+/*
+Copyright © 2025 Izuru Yakumo <eternal-servant@yakumo.dev>
+
+*/
+package main
+
+import "marisa.chaotic.ninja/suwako/cmd"
+
+func main() {
+	cmd.Execute()
+}
Index: /trunk/suwako.1
===================================================================
--- /trunk/suwako.1	(revision 30)
+++ /trunk/suwako.1	(revision 31)
@@ -1,3 +1,3 @@
-.Dd $Mdocdate$
+.Dd May 14, 2025
 .Dt SUWAKO 1
 .Os
@@ -7,13 +7,12 @@
 .Sh SYNOPSIS
 .Nm
-.Op Fl f Ar from
-.Op Fl t Ar to
-.Op Ar input
+.Fl f Ar from
+.Fl t Ar to
+.Ar input
 .Sh DESCRIPTION
 Self-explanatory, besides, this was made as
 a rewrite from a shell script that had curl
 and awk for dependencies.
-It fully serves
-as a drop-in replacement.
+It fully serves as a drop-in replacement.
 .Sh USAGE
 .Bl -tag -width 11n -compact
@@ -29,6 +28,6 @@
 .Xr suwako.conf 5
 .Sh AUTHORS
-.An Izuru Yakumo Aq Mt yakumo.izuru@chaotic.ninja
+.An Izuru Yakumo Aq Mt eternal-servant@yakumo.dev
 .Sh BUGS
-You cannot translate the string "version", this is
-a direct consequence of using flaggy.
+Mozhi instances use translated-text as opposed to translated_text
+coming from SimplyTranslate instances.
Index: /trunk/suwako.conf.5
===================================================================
--- /trunk/suwako.conf.5	(revision 30)
+++ /trunk/suwako.conf.5	(revision 31)
@@ -1,9 +1,8 @@
-.Dd $Mdocdate$
+.Dd May 14, 2025
 .Dt SUWAKO.CONF 5
 .Os
 .Sh NAME
 .Nm suwako.conf
-.Nd INI-style configuration file for
-.Xr suwako 1
+.Nd INI-style configuration file for suwako
 .Sh DESCRIPTION
 The
@@ -12,14 +11,9 @@
 including the API path and the
 translation engine to be used on
-the
-.Xr suwako 1
-command.
+.Nm suwako
 .Sh OPTIONS
 .Bl -tag -width 11n -compact
-.It instance
-Contains the HTTPS URI to the
-server's up to the
-.Sy /api/translate
-endpoint.
+.It endpoint
+Contains the HTTPS URI to the instance
 .It engine
 For most use cases, the
@@ -31,6 +25,6 @@
 .El
 .Sh FILES
-.Pa ~/.suwako/suwako.conf
+.Pa ~/.config/suwako.ini
 path to this file
 .Sh AUTHORS
-.An Izuru Yakumo Aq Mt yakumo.izuru@chaotic.ninja
+.An Izuru Yakumo Aq Mt eternal-servant@yakumo.dev
Index: unk/version.go
===================================================================
--- /trunk/version.go	(revision 30)
+++ 	(revision )
@@ -1,50 +1,0 @@
-package suwako
-
-import (
-	"fmt"
-	"runtime/debug"
-	"strings"
-)
-
-const (
-	defaultVersion = "0.0.0"
-	defaultCommit  = "HEAD"
-	defaultBuild   = "0000-01-01:00:00+00:00"
-)
-
-var (
-	// Version is the tagged release version in the form <major>.<minor>.<patch>
-	// following semantic versioning and is overwritten by the build system.
-	Version = defaultVersion
-
-	// Commit is the commit sha of the build (normally from Git) and is overwritten
-	// by the build system.
-	Commit = defaultCommit
-
-	// Build is the date and time of the build as an RFC3339 formatted string
-	// and is overwritten by the build system.
-	Build = defaultBuild
-)
-
-// FullVersion display the full version and build
-func FullVersion() string {
-	var sb strings.Builder
-
-	isDefault := Version == defaultVersion && Commit == defaultCommit && Build == defaultBuild
-
-	if !isDefault {
-		sb.WriteString(fmt.Sprintf("%s@%s %s", Version, Commit, Build))
-	}
-
-	if info, ok := debug.ReadBuildInfo(); ok {
-		if isDefault {
-			sb.WriteString(fmt.Sprintf(" %s", info.Main.Version))
-		}
-		sb.WriteString(fmt.Sprintf(" %s", info.GoVersion))
-		if info.Main.Sum != "" {
-			sb.WriteString(fmt.Sprintf(" %s", info.Main.Sum))
-		}
-	}
-
-	return sb.String()
-}
