{"id":13490885,"url":"https://github.com/39aldo39/klfc","last_synced_at":"2026-02-21T13:01:59.540Z","repository":{"id":11096228,"uuid":"68038371","full_name":"39aldo39/klfc","owner":"39aldo39","description":"Keyboard Layout Files Creator","archived":false,"fork":false,"pushed_at":"2023-03-05T14:43:29.000Z","size":6319,"stargazers_count":236,"open_issues_count":28,"forks_count":16,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-10-22T06:36:44.841Z","etag":null,"topics":["keyboard-layout","keylayout","klc","pkl","tmk","xkb"],"latest_commit_sha":null,"homepage":null,"language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/39aldo39.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-09-12T18:58:34.000Z","updated_at":"2025-10-19T03:08:21.000Z","dependencies_parsed_at":"2024-10-31T04:32:03.110Z","dependency_job_id":null,"html_url":"https://github.com/39aldo39/klfc","commit_stats":{"total_commits":194,"total_committers":8,"mean_commits":24.25,"dds":0.04123711340206182,"last_synced_commit":"e07375b1459e416635100efe76b72ebe25f36c53"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/39aldo39/klfc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/39aldo39%2Fklfc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/39aldo39%2Fklfc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/39aldo39%2Fklfc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/39aldo39%2Fklfc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/39aldo39","download_url":"https://codeload.github.com/39aldo39/klfc/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/39aldo39%2Fklfc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29681468,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T12:30:22.644Z","status":"ssl_error","status_checked_at":"2026-02-21T12:29:55.402Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["keyboard-layout","keylayout","klc","pkl","tmk","xkb"],"created_at":"2024-07-31T19:00:51.791Z","updated_at":"2026-02-21T13:01:59.521Z","avatar_url":"https://github.com/39aldo39.png","language":"Haskell","funding_links":[],"categories":["Haskell"],"sub_categories":[],"readme":"Keyboard Layout Files Creator\n=============================\n\nKeyboard Layout Files Creator is a tool to create advanced keyboard layouts in various formats.\nCurrently, exporting to XKB, PKL, KLC, keylayout, TMK and AHK is supported.\nLayouts are stored in JSON files, of which examples can be found in the [examples](examples) folder.\nThe full format is documented in [doc/layout.md](doc/layout.md).\nIt is also possible to import an existing keyboard layout from a XKB, PKL or KLC file.\n\nExample\n-------\n\nTo get the same output as in the [examples/output](examples/output) folder, execute\n```\npath/to/klfc colemak.json altgr_colemak.json extend.json -o output\n```\ninside the examples folder.\n\nInstallation and building\n-------------------------\n\nThe easiest way to get KLFC is to download a pre-built binary from the [releases page](https://github.com/39aldo39/klfc/releases).\n\nKLFC can also be built from source.\nIt is written in Haskell and can be installed with the [Haskell toolchain](https://www.haskell.org/downloads).\nWith the Haskell toolchain installed, KLFC is built by executing `cabal install` inside the root directory of this project.\nThis will create a binary `klfc` in `~/.cabal/bin/`.\n\nIt is also possible to build from source with [nix](https://nixos.org) on any Linux distribution. This may be faster than using cabal since it can fetch binaries for many dependencies, skipping compiling them.\nTo do that, first [install nix](https://nixos.org/download.html).\n\nAfter you have nix installed, you can run `nix-env -i -f .` from your copy of this repository to install KLFC.\nThat will build KLFC and link it your nix profile, then you can use it from a regular shell afterwards.\n\nIf you'd like to get a shell with `hoogle`, `cabal`, `niv`, `haskell-language-server` and more for working on the project, run `nix-shell`.\nFrom this shell, you can then use `cabal build`, `cabal run`, etc, as normal.\n\nUsage\n-----\n\n```\nklfc [IMPORT TYPE] FILE... [OUTPUTS] [OPTIONS]\n```\n\n### Available options ###\n```\n-h,--help                Show this help text\n--version                Show version\n```\n\n#### Import types ####\n```\n--from-json              Read from a JSON file\n--from-xkb               Import from a XKB symbols file. To read a variant,\n                         append it in parenthesis (e.g. to read the Colemak\n                         variant of the us symbols file, use \"us(colemak)\").\n--from-pkl               Import from a PKL layout file\n--from-klc               Import from a KLC file\n```\n\n#### Import files ####\n```\nFILE...                  Files to read (‘-’ for stdin). If multiple files are\n                         read, the corresponding layouts will be put together.\n                         This is useful when a file only specifies a part of\n                         the layout (e.g. only the letters at a few\n                         shiftstates).\n```\n\n#### Output files ####\n```\n--json FILE              Save to a JSON file (‘-’ for stdout)\n--xkb DIRECTORY          Export to a XKB directory\n--pkl DIRECTORY          Export to a PKL directory\n--klc DIRECTORY          Export to a KLC directory (‘-’ for printing the base\n                         layout to stdout)\n--keylayout DIRECTORY    Export to a keylayout directory (‘-’ for printing the\n                         base layout to stdout)\n--tmk DIRECTORY          Export to a TMK directory (‘-’ for printing the base\n                         layout to stdout)\n--ahk DIRECTORY          Export to a AHK directory (‘-’ for printing the base\n                         layout to stdout)\n-o,--output DIRECTORY    Export to all file types\n```\n\n#### Extra Options ####\n```\n--remove-shiftstates INDEX\n                         Remove one or more shiftstates with their letters.\n                         The shiftstates are identified with their index\n                         (starting with 0). Multiple indices are seperated\n                         with a comma.\n--remove-empty-letters   Remove empty letters at the end of each key\n--combine-mods           Combine all the mods in the layout. For example, if\n                         the layout has the mods ‘Wide’ and ‘Angle’, a new mod\n                         ‘WideAngle’ will be created.\n--unify-shiftstates      Change the shiftstates of all keys such that all keys\n                         have the same shiftstates\n```\n##### KLC #####\n```\n--klc-chained-deads      Use chained dead keys in KLC. This requires\n                         alternative compilation, see\n                         \u003chttp://archives.miloush.net/michkap/archive/2011/04/16/10154700.html\u003e.\n```\n##### PKL #####\n```\n--pkl-compact            Set PKL to compact mode\n```\n##### XKB #####\n```\n--xkb-custom-shortcuts   Use the shortcut positions from the ‘shortcutPos’\n                         attributes for shortcuts in XKB\n--xkb-redirect-all       Always use the ‘redirect’ action in XKB, if possible.\n                         This may help some programs detect special actions on\n                         different layers.\n--xkb-redirect-clears-extend\n                         Clear the extend modifier (LevelFive) in redirect\n                         actions. This may help some programs detect special\n                         actions on the extend layer.\n```\n##### Keylayout #####\n```\n--keylayout-custom-shortcuts\n                         Use the shortcut positions from the ‘shortcutPos’\n                         attributes for shortcuts in keylayout\n```\n\nNix maintenance information\n---------------------------\n\nThe nix infrastructure in this project uses a pinned version of nixpkgs to ensure it will build consistently on any system.\nThis needs updating occasionally.\nYou can do `niv update` from within a nix-shell to accomplish this: it will update the file `nix/sources.json` with the latest version of nixpkgs.\n\nCheck that it still builds with `nix-build`. This will produce a copy of `klfc` in `result/bin/klfc`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F39aldo39%2Fklfc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F39aldo39%2Fklfc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F39aldo39%2Fklfc/lists"}