initial commit

This commit is contained in:
Seán C McCord 2022-11-07 13:45:56 -05:00
commit 833ab4443e
Signed by: scm
GPG key ID: 8302D5513BFE9618
4 changed files with 129 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/waybar-kb

12
go.mod Normal file
View file

@ -0,0 +1,12 @@
module git.cycore.io/scm/waybar-kb
go 1.19
require github.com/joshuarubin/go-sway v1.2.0
require (
github.com/joshuarubin/lifecycle v1.0.0 // indirect
go.uber.org/atomic v1.3.2 // indirect
go.uber.org/multierr v1.1.0 // indirect
golang.org/x/sync v0.0.0-20190412183630-56d357773e84 // indirect
)

17
go.sum Normal file
View file

@ -0,0 +1,17 @@
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/joshuarubin/go-sway v1.2.0 h1:t3eqW504//uj9PDwFf0+IVfkD+WoOGaDX5gYIe0BHyM=
github.com/joshuarubin/go-sway v1.2.0/go.mod h1:qcDd6f25vJ0++wICwA1BainIcRC67p2Mb4lsrZ0k3/k=
github.com/joshuarubin/lifecycle v1.0.0 h1:N/lPEC8f+dBZ1Tn99vShqp36LwB+LI7XNAiNadZeLUQ=
github.com/joshuarubin/lifecycle v1.0.0/go.mod h1:sRy++ATvR9Ee21tkRdFkQeywAWvDsue66V70K0Dnl54=
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.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
go.uber.org/atomic v1.3.2 h1:2Oa65PReHzfn29GpvgsYwloV9AVFHPDk8tYxt2c2tr4=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
golang.org/x/sync v0.0.0-20190412183630-56d357773e84 h1:IqXQ59gzdXv58Jmm2xn0tSOR9i6HqroaOFRQ3wR/dJQ=
golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=

99
main.go Normal file
View file

@ -0,0 +1,99 @@
package main
import (
"context"
"flag"
"fmt"
"log"
"os"
"os/signal"
"strings"
"github.com/joshuarubin/go-sway"
)
var (
keyboard string
toggle bool
englishLayout string
englishVariant string
neoLayout = "de"
neoVariant = "neo"
)
func init() {
flag.StringVar(&keyboard, "k", "12771:4864:Wooting_Wooting60HE", "ID of keyboard, as reported by swaymsg get_inputs")
flag.StringVar(&englishLayout, "englishLayout", "us-mini", "layout id of English language")
flag.StringVar(&englishVariant, "englishVariant", "altgr-intl", "layout variant of the English language")
flag.BoolVar(&toggle, "t", false, "toggle keyboard layout")
}
func main() {
flag.Parse()
ctx, cancel := signal.NotifyContext(context.Background(), os.Kill, os.Interrupt)
defer cancel()
c, err := sway.New(ctx)
if err != nil {
log.Fatalln("failed to connect to sway:", err)
}
inputs, err := c.GetInputs(ctx)
if err != nil {
log.Fatalln("failed to get list of inputs from sway:", err)
}
var kb sway.Input
for _, i := range inputs {
if i.Identifier == keyboard {
kb = i
}
}
if kb.Identifier == "" {
log.Fatalf("keyboard ID %s not found", keyboard)
}
layout := "en"
if strings.Contains(*kb.XKBActiveLayoutName, "Neo") {
layout = "neo"
}
if toggle {
if layout == "neo" {
if err := setLayout(ctx, c, englishLayout, englishVariant); err != nil {
log.Fatalln("failed to set english layout:", err)
}
layout = "en"
} else {
if err := setLayout(ctx, c, neoLayout, neoVariant); err != nil {
log.Fatalln("failed to set neo layout:", err)
}
layout = "neo"
}
}
fmt.Println(layout)
}
func setLayout(ctx context.Context, c sway.Client, layout string, variant string) error {
if _, err := c.RunCommand(ctx, fmt.Sprintf("input %s xkb_variant \"\"", keyboard)); err != nil {
return fmt.Errorf("failed to reset keyboard variant: %w", err )
}
if _, err := c.RunCommand(ctx, fmt.Sprintf("input %s xkb_layout %s", keyboard, layout)); err != nil {
return fmt.Errorf("failed to set English layout: %w", err)
}
if _, err := c.RunCommand(ctx, fmt.Sprintf("input %s xkb_variant %s", keyboard, variant)); err != nil {
return fmt.Errorf("failed to set %s variant: %w", keyboard, err)
}
return nil
}