mirror of
https://github.com/anotherhadi/settuings.git
synced 2026-10-05 08:18:23 +02:00
146 lines
3.1 KiB
Go
146 lines
3.1 KiB
Go
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 <name> -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
|
|
}
|