package input import ( "encoding/json" "fmt" "strings" ) type Layout struct { Code string Name string } var Layouts = []Layout{ {"al", "Albanian"}, {"et", "Amharic"}, {"am", "Armenian"}, {"ara", "Arabic"}, {"eg", "Arabic (Egypt)"}, {"iq", "Arabic (Iraq)"}, {"ma", "Arabic (Morocco)"}, {"sy", "Arabic (Syria)"}, {"az", "Azerbaijani"}, {"ml", "Bambara"}, {"bd", "Bangla"}, {"by", "Belarusian"}, {"be", "Belgian"}, {"dz", "Berber (Algeria, Latin)"}, {"ba", "Bosnian"}, {"brai", "Braille"}, {"bg", "Bulgarian"}, {"mm", "Burmese"}, {"cn", "Chinese"}, {"hr", "Croatian"}, {"cz", "Czech"}, {"dk", "Danish"}, {"af", "Dari"}, {"mv", "Dhivehi"}, {"nl", "Dutch"}, {"bt", "Dzongkha"}, {"au", "English (Australia)"}, {"cm", "English (Cameroon)"}, {"gh", "English (Ghana)"}, {"nz", "English (New Zealand)"}, {"ng", "English (Nigeria)"}, {"za", "English (South Africa)"}, {"gb", "English (UK)"}, {"us", "English (US)"}, {"epo", "Esperanto"}, {"ee", "Estonian"}, {"fo", "Faroese"}, {"ph", "Filipino"}, {"fi", "Finnish"}, {"fr", "French"}, {"ca", "French (Canada)"}, {"cd", "French (Democratic Republic of the Congo)"}, {"tg", "French (Togo)"}, {"ge", "Georgian"}, {"de", "German"}, {"at", "German (Austria)"}, {"ch", "German (Switzerland)"}, {"gr", "Greek"}, {"il", "Hebrew"}, {"hu", "Hungarian"}, {"is", "Icelandic"}, {"in", "Indian"}, {"id", "Indonesian (Latin)"}, {"ie", "Irish"}, {"it", "Italian"}, {"jp", "Japanese"}, {"kz", "Kazakh"}, {"kh", "Khmer (Cambodia)"}, {"kr", "Korean"}, {"kg", "Kyrgyz"}, {"la", "Lao"}, {"lv", "Latvian"}, {"lt", "Lithuanian"}, {"mk", "Macedonian"}, {"my", "Malay (Jawi, Arabic Keyboard)"}, {"mt", "Maltese"}, {"md", "Moldavian"}, {"mn", "Mongolian"}, {"me", "Montenegrin"}, {"np", "Nepali"}, {"gn", "N'Ko (AZERTY)"}, {"no", "Norwegian"}, {"ir", "Persian"}, {"pl", "Polish"}, {"pt", "Portuguese"}, {"br", "Portuguese (Brazil)"}, {"ro", "Romanian"}, {"ru", "Russian"}, {"rs", "Serbian"}, {"lk", "Sinhala (phonetic)"}, {"sk", "Slovak"}, {"si", "Slovenian"}, {"es", "Spanish"}, {"latam", "Spanish (Latin American)"}, {"ke", "Swahili (Kenya)"}, {"tz", "Swahili (Tanzania)"}, {"se", "Swedish"}, {"tw", "Taiwanese"}, {"tj", "Tajik"}, {"th", "Thai"}, {"bw", "Tswana"}, {"tm", "Turkmen"}, {"tr", "Turkish"}, {"ua", "Ukrainian"}, {"pk", "Urdu (Pakistan)"}, {"uz", "Uzbek"}, {"vn", "Vietnamese"}, {"sn", "Wolof"}, } func LayoutName(code string) string { for _, l := range Layouts { if l.Code == code { return l.Name } } return code } // getOptionResp is the shape of `hyprctl getoption -j`. type getOptionResp struct { Str string `json:"str"` Float float64 `json:"float"` } func CurrentLayout() (string, error) { out, err := run("getoption", "input:kb_layout", "-j") if err != nil { return "", err } var resp getOptionResp if err := json.Unmarshal([]byte(out), &resp); err != nil { return "", fmt.Errorf("parse getoption input:kb_layout: %w", err) } return strings.TrimSpace(resp.Str), nil } func SetLayout(code string) error { _, err := run("keyword", "input:kb_layout", code) return err }