{"id":29793074,"url":"https://github.com/wins1ey/libresplit","last_synced_at":"2025-07-28T02:08:30.758Z","repository":{"id":177245721,"uuid":"660141920","full_name":"wins1ey/LibreSplit","owner":"wins1ey","description":"Free speedrun timer with auto splitting and load removal for Linux.","archived":false,"fork":false,"pushed_at":"2025-06-15T16:53:28.000Z","size":521,"stargazers_count":28,"open_issues_count":12,"forks_count":7,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-07-22T09:27:11.869Z","etag":null,"topics":["auto-splitter","autosplitter","linux","speedrun","speedrunning","timer"],"latest_commit_sha":null,"homepage":"","language":"C","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/wins1ey.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2023-06-29T10:30:19.000Z","updated_at":"2025-07-15T19:13:43.000Z","dependencies_parsed_at":"2024-03-24T23:22:00.626Z","dependency_job_id":"628cff50-17c3-4bf6-8dc7-d94831817f9d","html_url":"https://github.com/wins1ey/LibreSplit","commit_stats":null,"previous_names":["wins1ey/last"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wins1ey/LibreSplit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wins1ey%2FLibreSplit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wins1ey%2FLibreSplit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wins1ey%2FLibreSplit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wins1ey%2FLibreSplit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wins1ey","download_url":"https://codeload.github.com/wins1ey/LibreSplit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wins1ey%2FLibreSplit/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267451489,"owners_count":24089312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-28T02:00:09.689Z","response_time":68,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["auto-splitter","autosplitter","linux","speedrun","speedrunning","timer"],"created_at":"2025-07-28T02:08:30.082Z","updated_at":"2025-07-28T02:08:30.740Z","avatar_url":"https://github.com/wins1ey.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cimg src=\"libresplit.svg\" width=43 align=top\u003e [LibreSplit](https://libresplit.loomeh.is-a.dev)\n[![Discord](https://img.shields.io/discord/1381914148585078804?style=flat-square\u0026logo=discord\u0026label=LibreSplit\u0026color=%237289da)](https://discord.gg/qbzD7MBjyw)\n\nLibreSplit brings auto splitting functionality to [urn](https://github.com/3snowp7im/urn) with Lua-based auto splitters that are easy to port from asl.\n\n\u003cimg src=\"https://github.com/wins1ey/LibreSplit/assets/34382191/2adfdae5-9a21-4bdf-a4c4-f1d5962a0b63\" width=350\u003e\n\u003cimg src=\"https://github.com/wins1ey/LibreSplit/assets/34382191/4455f57a-3d34-4fa3-9dff-2b342b6c56da\" width=350\u003e\n\n## Features\n\n- **Split Tracking and Timing:** Accurately track and time your speedruns with ease.\n- **Auto Splitter Support:** Utilize Lua-based auto splitters to automate split timing based on in-game events.\n- **Customizable Themes:** Personalize your timer's appearance by creating and applying custom themes.\n- **Flexible Configuration:** Configure keybindings and various settings to suit your preferences.\n\n## Dependencies\n\nLibreSplit requires the following dependencies on your system to compile:\n\n- `libgtk+-3.0`\n- `x11`\n- `libjansson`\n- `luajit`\n\n## Installation\n\n```bash\ngit clone https://github.com/wins1ey/LibreSplit\ncd LibreSplit\nmake\nsudo make install\n```\nor\n```bash\ngit clone https://github.com/wins1ey/LibreSplit \u0026\u0026 cd LibreSplit \u0026\u0026 make \u0026\u0026 sudo make install\n```\n\n## Getting Started\n\n1. Launch LibreSplit by executing the compiled binary. `./libresplit`\n2. When first launched, LibreSplit will create the `libresplit` directory in your config directory. Auto splitters, splits and themes go in their respective folders inside.\n3. The initial window is undecorated, but you can toggle window decorations by pressing the right Control key.\n4. Control the timer using the following key presses:\n\n   | Key        | Stopped Action | Started Action |\n   |------------|----------------|----------------|\n   | Spacebar   | Start          | Split          |\n   | Backspace  | Reset          | Stop           |\n   | Delete     | Cancel         | -              |\n\n- The \"Cancel\" action resets the timer and decrements the attempt counter. A run reset before the start delay is automatically cancelled.\n- To manually modify the current split, use the following key actions:\n\n   | Key         | Action        |\n   |-------------|---------------|\n   | Page Up     | Unsplit       |\n   | Page Down   | Skip split    |\n\n4. Customize keybindings by setting the values in `com.github.wins1ey.libresplit` path with `gsettings`.\n\n   | Key                        | Type    | Description                       |\n   |----------------------------|---------|-----------------------------------|\n   | start-decorated            | Boolean | Start with window decorations     |\n   | hide-cursor                | Boolean | Hide cursor in window             |\n   | global-hotkeys             | Boolean | Enables global hotkeys            |\n   | theme                      | String  | Default theme name                |\n   | theme-variant              | String  | Default theme variant             |\n   | keybind-start-split        | String  | Start/split keybind               |\n   | keybind-stop-reset         | String  | Stop/Reset keybind                |\n   | keybind-cancel             | String  | Cancel keybind                    |\n   | keybind-unsplit            | String  | Unsplit keybind                   |\n   | keybind-skip-split         | String  | Skip split keybind                |\n   | keybind-toggle-decorations | String  | Toggle window decorations keybind |\n\nKeybind strings should be parseable by\n[gtk_accelerator_parse](https://developer.gnome.org/gtk3/stable/gtk3-Keyboard-Accelerators.html#gtk-accelerator-parse).\n\n## Auto Splitters\n\nLibreSplit supports auto splitters written in Lua to automate split timing based on in-game events. Feel free to make your own, Documentation can be found [here](docs/auto-splitters.md)\n\n## Split Files\n\nSplit files in LibreSplit are stored as well-formed JSON. The split file must contain a main object. The following keys are optional:\n\n| Key           | Value                                 |\n|---------------|---------------------------------------|\n| title         | Title string at top of window         |\n| start_delay   | Non-negative delay until timer starts |\n| world_record  | Best known time                       |\n| splits        | Array of split objects                |\n| theme         | Window theme                          |\n| theme_variant | Window theme variant                  |\n| width         | Window width                          |\n| height        | Window height                         |\n\nEach split object within the `splits` array has the following keys:\n\n| Key          | Value                  |\n|--------------|------------------------|\n| title        | Split title            |\n| time         | Split time             |\n| best_time    | Your best split time   |\n| best_segment | Your best segment time |\n\nTimes are strings in HH:MM:SS.mmmmmm format\n\n## Themes\n\nLibreSplit supports customizable themes, allowing you to personalize the timer's appearance. To create a theme:\n\n1. Create a CSS stylesheet with your desired styles.\n2. Place the stylesheet in the `~/.config/libresplit/themes/\u003cname\u003e/\u003cname\u003e.css` directory. (If you have `XDG_CONFIG_HOME` env var pointing somewher else than .config it will be wherever it points to)\n3. Set the global theme by modifying the `theme` value in `gsettings`.\n4. Theme variants should follow the pattern `\u003cname\u003e-\u003cvariant\u003e.css`.\n5. Individual splits can apply their own themes by specifying a `theme` key in the main split object.\n\nFor a list of supported CSS properties, refer to the [GtkCssProvider](https://developer.gnome.org/gtk3/stable/GtkCssProvider.html) documentation.\n\n## CSS Classes\n\nThe following CSS classes can be used to style the elements of the LibreSplit interface:\n\n```css\n.window\n.header\n.title\n.attempt-count\n.time\n.delta\n.timer\n.timer-seconds\n.timer-millis\n.delay\n.splits\n.split\n.current-split\n.split-title\n.split-time\n.split-delta\n.split-last\n.done\n.behind\n.losing\n.best-segment\n.best-split\n.footer\n.prev-segment-label\n.prev-segment\n.sum-of-bests-label\n.sum-of-bests\n.personal-best-label\n.personal-best\n.world-record-label\n.world-record\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwins1ey%2Flibresplit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwins1ey%2Flibresplit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwins1ey%2Flibresplit/lists"}