add "inputs" page

Signed-off-by: Hadi <[email protected]>
This commit is contained in:
Hadi
2026-08-13 17:59:03 +02:00
parent df530f39b0
commit 6e4f8b889c
23 changed files with 1047 additions and 2 deletions
+145
View File
@@ -0,0 +1,145 @@
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
}