commit fb46b909c88772a6502149001151aa68927806d5 Author: Chris Ha Date: Sun Apr 3 21:45:35 2022 -0500 initial commit diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..31f3878 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[{go.mod,go.sum,*.go}] +indent_style = tab +indent_size = 4 + +[{Makefile,Dockerfile,*.yml,*.yaml}] +indent_style = tab +indent_size = 2 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..13ac585 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +rose_pine +*.png diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..fb016df --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + "recommendations": [ + "golang.go", + "editorconfig.editorconfig", + "aaron-bond.better-comments", + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..13e6a07 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,12 @@ +{ + "go.lintOnSave": "file", + "go.formatTool": "goimports", + "go.useLanguageServer": true, + "[go]": { + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.organizeImports": true + } + }, + "go.docsTool": "gogetdoc" +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..b6e97e9 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +

+ +

Rosé Pine Wallpaper Generator

+

+ +

All natural pine, faux fur and a bit of soho vibes for the classy minimalist

+ +

+ + + +

+ +## To generate all PNG files, + +```bash +go run main.go +``` + +Or, + +```bash +task build +chmod +x rose_pine +./rose_pine +``` +requires **go-task** + +## Credits + +[generativeart](https://github.com/jdxyw/generativeart) + +[rose pine theme](https://github.com/rose-pine) + +[go-task](https://github.com/go-task/task) diff --git a/Taskfile.yml b/Taskfile.yml new file mode 100644 index 0000000..c534acf --- /dev/null +++ b/Taskfile.yml @@ -0,0 +1,11 @@ +version: '3' + +tasks: + build: + cmds: + - go build -o rose_pine + + install: + cmds: + - task build + - cp rose_pine ~/bin/ diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..e0efdf9 --- /dev/null +++ b/go.mod @@ -0,0 +1,11 @@ +module go-rosepine-genart + +go 1.18 + +require github.com/jdxyw/generativeart v0.0.0-20220127024657-50049f153090 + +require ( + github.com/fogleman/gg v1.3.0 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..5e3a3db --- /dev/null +++ b/go.sum @@ -0,0 +1,19 @@ +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/jdxyw/generativeart v0.0.0-20220127024657-50049f153090 h1:p3I1AdXWM+Uqw53I+VyGMGEoN2JxHWAVq3TRE0ekZcQ= +github.com/jdxyw/generativeart v0.0.0-20220127024657-50049f153090/go.mod h1:KLeb41mWAuL1YMqEuhikZ6/kC/yZJyvda4ZUaVzpu6A= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb h1:fqpd0EBDzlHRCjiphRR5Zo/RSWWQlWv34418dnEixWk= +golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go new file mode 100644 index 0000000..90ae8d0 --- /dev/null +++ b/main.go @@ -0,0 +1,129 @@ +package main + +import ( + "fmt" + "image/color" + "math/rand" + "sync" + "time" + + "github.com/jdxyw/generativeart" + "github.com/jdxyw/generativeart/arts" +) + +const CANVAS_WIDTH = 3456 +const CANVAS_HEIGHT = 2234 + +var ROSE_PINE_BASE = color.RGBA{25, 23, 36, 255} +var ROSE_PINE_COLORS = []color.RGBA{ + {0xEB, 0x6F, 0x92, 0xFF}, + {0xF6, 0xC1, 0x77, 0xFF}, + {0xEB, 0xBC, 0xBA, 0xFF}, + {0x31, 0x74, 0x8F, 0xFF}, + {0x9C, 0xCF, 0xD8, 0xFF}, + {0xC4, 0xA7, 0xE7, 0xFF}, +} + +func PrepareCanvas(c *generativeart.Canva) { + c.SetBackground(ROSE_PINE_BASE) + c.FillBackground() + c.SetColorSchema(ROSE_PINE_COLORS) +} + +func GenerateCircle(wg *sync.WaitGroup) { + defer wg.Done() + + fmt.Println("Generating a circle png...") + + c := generativeart.NewCanva(CANVAS_WIDTH, CANVAS_HEIGHT) + PrepareCanvas(c) + c.Draw(arts.NewColorCircle(1234)) + c.ToPNG("rose_pine_circle.png") +} + +func GenerateCircle2(wg *sync.WaitGroup) { + defer wg.Done() + + fmt.Println("Generating a circle2 png...") + + c := generativeart.NewCanva(CANVAS_WIDTH, CANVAS_HEIGHT) + PrepareCanvas(c) + c.Draw(arts.NewColorCircle2(333)) + c.ToPNG("rose_pine_circle2.png") +} + +func GenerateContourLine(wg *sync.WaitGroup) { + defer wg.Done() + + fmt.Println("Generating a contourline png...") + + c := generativeart.NewCanva(CANVAS_WIDTH, CANVAS_HEIGHT) + PrepareCanvas(c) + c.Draw(arts.NewContourLine(999)) + c.ToPNG("rose_pine_contourline.png") +} + +func GenerateMaze(wg *sync.WaitGroup) { + defer wg.Done() + + fmt.Println("Generating a maze png...") + + c := generativeart.NewCanva(CANVAS_WIDTH, CANVAS_HEIGHT) + PrepareCanvas(c) + c.SetLineWidth(1) + for i := range ROSE_PINE_COLORS { + c.SetLineWidth(float64((i+1)/3 + 1)) + c.Draw(arts.NewMaze(i*10 + 100)) + c.SetLineColor(ROSE_PINE_COLORS[i]) + } + c.ToPNG("rose_pine_maze.png") +} + +func GenerateNoiseLine(wg *sync.WaitGroup) { + defer wg.Done() + + fmt.Println("Generating a noiseline png...") + + c := generativeart.NewCanva(CANVAS_WIDTH, CANVAS_HEIGHT) + PrepareCanvas(c) + c.Draw(arts.NewNoiseLine(3456)) + c.ToPNG("rose_pine_noiseline.png") +} + +func GenerateShape(wg *sync.WaitGroup) { + defer wg.Done() + + fmt.Println("Generating a shape png...") + + c := generativeart.NewCanva(CANVAS_WIDTH, CANVAS_HEIGHT) + PrepareCanvas(c) + c.Draw(arts.NewRandomShape(111)) + c.ToPNG("rose_pine_shape.png") +} + +func main() { + rand.Seed(time.Now().Unix()) + + var wg sync.WaitGroup + + wg.Add(1) + go GenerateCircle(&wg) + + wg.Add(1) + go GenerateCircle2(&wg) + + wg.Add(1) + go GenerateContourLine(&wg) + + wg.Add(1) + go GenerateMaze(&wg) + + wg.Add(1) + go GenerateNoiseLine(&wg) + + wg.Add(1) + go GenerateShape(&wg) + + wg.Wait() + fmt.Println("main finished") +}