{"id":13760711,"url":"https://github.com/pinpox/base16-universal-manager","last_synced_at":"2026-03-16T15:38:21.508Z","repository":{"id":45221848,"uuid":"160924870","full_name":"pinpox/base16-universal-manager","owner":"pinpox","description":"A universal manager to set base16 themes for any supported application","archived":false,"fork":false,"pushed_at":"2025-01-23T19:14:41.000Z","size":159,"stargazers_count":93,"open_issues_count":11,"forks_count":22,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-29T15:09:37.022Z","etag":null,"topics":["base16","base16-builder","base16-color","base16-template","go","golang","rice","template","templates","theme","theming"],"latest_commit_sha":null,"homepage":"https://github.com/chriskempson/base16","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pinpox.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}},"created_at":"2018-12-08T09:41:45.000Z","updated_at":"2025-03-28T11:06:22.000Z","dependencies_parsed_at":"2024-01-15T03:57:16.247Z","dependency_job_id":"0a5e4658-09b0-492d-8b36-d8c41664a8f9","html_url":"https://github.com/pinpox/base16-universal-manager","commit_stats":null,"previous_names":["binaryplease/base16-universal-manager"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinpox%2Fbase16-universal-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinpox%2Fbase16-universal-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinpox%2Fbase16-universal-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinpox%2Fbase16-universal-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pinpox","download_url":"https://codeload.github.com/pinpox/base16-universal-manager/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247361691,"owners_count":20926643,"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","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":["base16","base16-builder","base16-color","base16-template","go","golang","rice","template","templates","theme","theming"],"created_at":"2024-08-03T13:01:18.631Z","updated_at":"2026-03-16T15:38:16.475Z","avatar_url":"https://github.com/pinpox.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"[![Build Status](https://api.travis-ci.org/pinpox/base16-universal-manager.svg)](http://travis-ci.org/pinpox/base16-universal-manager) [![GoDoc](https://godoc.org/github.com/pinpox/base16-universal-manager?status.svg)](http://godoc.org/github.com/pinpox/base16-universal-manager)\n[![Go Report Card](https://goreportcard.com/badge/github.com/pinpox/base16-universal-manager)](https://goreportcard.com/report/github.com/pinpox/base16-universal-manager)\n[![codecov](https://codecov.io/gh/pinpox/base16-universal-manager/branch/master/graph/badge.svg)](https://codecov.io/gh/pinpox/base16-universal-manager)\n[![HitCount](http://hits.dwyl.io/pinpox/base16-universal-manager.svg)](http://hits.dwyl.io/pinpox/base16-universal-manager)\n\n\n# ![Base16](logo.png)\n\n## About\n### Base16 Universal Manager\nGets a [base16](https://github.com/chriskempson/base16) colorscheme the configured templates from the official repos and renders them out to the given locations\nIt will use the [levenstein distance](https://en.wikipedia.org/wiki/Levenshtein_distance) to find the matching colorscheme from the supplied name.\n\n### Base16 themes\nAn architecture for building themes based on carefully chosen syntax\nhighlighting using a base of sixteen colors. Base16 provides a set of guidelines\ndetailing how to style syntax and how to code a _builder_ for compiling Base16\n_schemes_ and _templates_.\n\n### Why another manager/builder?\nBase16 themes look great and the fact that you can use them on a lot of\ndifferent applications makes it easy to get a desktop configuration set up\neasealy that looks uniformly themed. I really like the idea of having theme\ncolors and the templates for different applications separated.\n\nThe common workflow to set up a theme on your system looks like this in most\ncases:\n\n1. Search for a theme you like\n2. Scroll through the support list of supported applications to find all the\n   ones you need\n3. Download or build the theme files for every application\n4. Copy them all in their respective places.\n5. Restart or refresh every application\n\nI found this pretty tedious to do, since I like to change my theme every now and\nthen. This is where the need for a manager came up.\n\nThe idea: automate the complete workflow above. After setting up my\nconfiguration for the manager **once** I ideally want to run **one** command and\nhave all my applicatins set-up and ready whith the theme I choose.\n\nThere are other projects that try to simplify this workflow, but I have had\nproblems with them in the past and don't particulary like the designs. Setting a\ntheme should *not* require me to download or build them *all*. It also should\nreally set them, avoiding having to run a theme-setting script every time the\napplication is started.\n\n### What Base16 Universal Manager is NOT\nEven though this project builds the themes needed and could probably be expanded\nor used as a theme builder in the sense described in the official base16\nguidelines, this is not what it is intended for. It is mainly aimed at users and\nnot theme or template maintainers and desigend to only get and build the stuff\nthe user really needs.\n\n#### Similar projects\n[base16-shell](https://github.com/chriskempson/base16-shell) A shell script to change your shell's default ANSI colors\n\nI liked the idea, but it limits the use to command line applications.\nAlso I found the script to be to slow on my system, which results in the colors\nof new terminals been changed about ~0.5s after start. In the meantime my\nterminal waits. There probably are usecases, where this is the better choice,\nbut it was not what I was looking for.\n\n[base16-manager](https://github.com/base16-manager/base16-manager) A command line tool to install base16 templates and set themes globally.\n\nEven though this project aimed to provide the same funcionality, only very few\napplications are supported. Also it required me to download a lot of repos I\nwill never use.\n\n\n## Installation\n\nAt the moment, you can only build and install this with go. You can install it\ndirectly or build it from source. I might provide packages for multiple linux\ndistributions and pre-build binaries in the future.\n\n### Install directly\n```\nmkdir -p \"$(go env GOPATH)/src\"\ngo install github.com/pinpox/base16-universal-manager@latest\n```\n### Get source and build manually\n```\ngo get github.com/pinpox/base16-universal-manager\ncd $GOPATH/src/github.com/pinpox/base16-universal-manager\ngo build\n```\n\nIf you get errors on missing dependencies, install them as usual with `go get`.\n\n### Shell completions\n* [fish shell](https://github.com/fish-shell/fish-shell) completions: Add the [`completions/fish/base16-universal-manager.fish`](completions/fish/base16-universal-manager.fish) to `~/.config/fish/completions/`\n\n      wget https://raw.githubusercontent.com/pinpox/base16-universal-manager/master/completions/fish/base16-universal-manager.fish -O ~/.config/fish/completions/base16-universal-manager.fish\n\n## Usage\n\nTo run, just execute the application without any command line flags. It will\nexpect a config.yaml (example provided) in `$XDG_CONFIG_HOME/.config/base16-universal-manager/`\n(`$XDG_CONFIG_HOME` defaults to `~/.config` on \\*nix systems if unspecified) and\nrenders all specified application templates with the selected colorscheme.\n\nThe following flags are planned and will be implemented soon:\n```\nusage: base16-universal-manager [\u003cflags\u003e]\n\nFlags:\n  --help             Show context-sensitive help (also try --help-long and --help-man).\n  --update-list      Update the list of templates and colorschemes\n  --clear-list       Delete local master list caches\n  --clear-schemes    Delete local scheme caches\n  --clear-templates  Delete local template caches\n  --version          Show application version.\n```\n\n## Configuration\n### GitHub Token (optional)\nThis program fetches data using the GitHub API. If you are not logged in, you\nmight get blocked by the API's [rate limiting](https://developer.github.com/v3/#rate-limiting)\n\nTo increase the amout of allowed request, you can use personal access-token.\nGenerate one [here](https://github.com/settings/tokens/new) (Default options\nshould be enough, just provide a name) and put it in your configuration file.\n\nPutting the token in the configuration will automatically use it to make all\nrequests as a registered user.\n\n### Configuration file\n\nThe configuration file specifies everything the program should do when run. It\nconsists mainly of two parts:\n\n#### General configuration values\n\n| Variable | Default | Explanation|\n| ---|---|---|\n| GithubToken |  set-your-token-here | see `GitHub Token (optinonal)`|\n| Colorscheme |  flat.yml | The colorscheme to use, uses local path if it contains a `/` |\n| DryRun |  false | Print the rendered files to stdout instead of saving them|\n\nThe provided theme names, do not have to be exact.\nThe [Levenstein distance](https://en.wikipedia.org/wiki/Levenshtein_distance\u003cPaste\u003e)\nis used to calculate the best matching option. This is handy in case you only\npartly remember the name of a particular scheme, if you made a typo, or if you are just plain *lazy*.\n\n\n\n\n#### Applications which you want to theme\nThe rest of the configuration are the application specific settings. It consists\nof a list of applications you want to use. Here is an example that would set up\nvim and i3 for you:\n\n```\napplications:\n  i3:\n    enabled: true\n    hook: i3-msg 'restart'\n    files:\n      default:\n        path: ~/.i3/i3_colors/\n        mode: rewrite\n      bar-colors:\n        path: ~/.i3/i3_bar_colors/\n        mode: rewrite\n  vim:\n    enabled: true\n    files:\n      default:\n        path: ~/.vim/vim_colors/\n        mode: rewrite\n```\n\nIn this configuration we render the files called `default` and `bar-colors` from\nthe [base16-i3 templates repository](https://github.com/khamer/base16-i3/tree/master/templates)\nto a to `~/.i3/i3_colors` and `~/.i3/i3_bar_colors` as\nwell as the file called `default` from the [base16-vim templates\nrepo](https://github.com/chriskempson/base16-vim/tree/master/templates) to\n`~/.vim/vim_colors`. In the configurations of those applications you could then\nsource that generated files.\n\nNote: the convention for `path` is that if it ends with a `/` the rendered file will\nbe placed in the directory `path` (it will be created if it doesn't exist).\nIf it doesn't end with a `/` then `path` specifies exactly where the renered file\nshould be placed. For example the above config will create/rewrite the following files:\n\n - ~/.i3/i3_colors/default.config\n - ~/.i3/i3_bar_colors/bar-colors.config\n - ~/.vim/vim_colors/default.vim\n\nSome applications have limitations in their configuration files and cannot source\nother configuration files. In that case rewriting the file won't help. That's why\nthere is another mode called `replace`. Here's an example config demonstating this:\n\n```\napplications:\n  alacritty:\n    enabled: true\n    files:\n      default:\n        path: ~/.config/alacritty/alacritty.yml\n        mode: replace\n        start_marker: \"# \u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\"\n        end_marker: \"# \u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\"\n```\n\nWith this configuration the rendered colors will be placed between the lines `# \u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c`\nand `# \u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e` in `~/.config/alacritty/alacritty.yml`. Note that `start_marker` and\n`end_marker` are regexes and do not have to match exactly.\n\nThe `hook` variable can be set for every application configured. It allows to\nrun a command after the files have been rendererd, e.g. to refersh the\napplication in order to show the new values. In this example we use `i3-msg\n'restart'` to restart the i3 window manager in place, thus reloading the colors.\n\n### Application examples\nBase16 Universal Manager can support all applications listed in the base16 repo.\nFor application-specific integration examples see the [list in the wiki](https://github.com/pinpox/base16-universal-manager/wiki/Configuration-examples)\n\n\n## Contributing\nI hacked this project together in a weekend and it grew to be bigger than\nexpected. The code quality could be way better and even though it is already\npretty usable, you might find bugs or other issues. The documentation is\nwork-in-progress.\n\nIssues, bug-reports, pull requests or ideas for features and improvements are\n**very welcome**. Also it would be great if users of specific applications can\ndocument the usage of their respective templates, as I don't use all of them and\ncan't/won't test the integration for every single application.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpinpox%2Fbase16-universal-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpinpox%2Fbase16-universal-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpinpox%2Fbase16-universal-manager/lists"}