initial commit
This commit is contained in:
commit
833ab4443e
4 changed files with 129 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
/waybar-kb
|
12
go.mod
Normal file
12
go.mod
Normal 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
17
go.sum
Normal 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
99
main.go
Normal 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
|
||||||
|
}
|
Loading…
Reference in a new issue