{ "info": { "author": "Charles Leifer, Sol Bekic", "author_email": "s+py@s-ol.nu", "bugtrack_url": null, "classifiers": [], "description": "Themer\n======\n\n*Themer is a colorscheme generator and manager for your Linux desktop.*\n\n\nInstallation\n------------\n\n### AUR (Arch)\n\nInstall [python-themer-git](https://aur.archlinux.org/packages/python-themer-git/) with the AUR manager of your choice,\nfor example `trizen`:\n\n $ trizen -S python-themer-git\n\nor perform a manual build if you prefer:\n\n $ git clone https://aur.archlinux.org/packages/python-themer-git\n $ cd python-themer\n $ makepkg -sic\n\n### PyPi\n\n`themer` is now available in the PyPi repository as well. You can use a `pip` to install it:\n\n $ pip install themer\n\n### Manual Installation\n\nFirst, check out the git repository:\n\n $ git clone https://github.com/s-ol/themer.git\n\nInstall with `python setup.py install`\n\n $ cd themer\n $ sudo python setup.py install\n\n\nConfiguration\n-------------\n\nYou can create multiple template dirs for `themer` in `~/.config/themer/templates`.\nThe default template is `i3`; see [data/default](data/default) for the default configuration.\n\nStructure of Themer\n-------------------\n\n### The main directory\n\nEverything Themer does happens in `.config/themer/`. In short, things\nare created from `templates` and end up in `current`.\n\nIn a running setup this directory will contain the following:\n\n- `templates`, a directory holding the templates for your all your\n themes. This is where new themes are generated from.\n- an arbitrary number of themes (which are directories). These hold\n the config files that are specifically generated for this one\n theme. (They also contain a file called `colors.yaml`, where you can\n look up and change variables used in the theme.) These themes are\n for internal use mostly and while you _can_ create these themes by\n hand, most of the time you won't.\n- `current`, a symbolic link to the currently active theme directory.\n\nFor most people `templates` only holds 1 directory (called `i3` by\ndefault) for their setup. If you like to switch your DE or the\ngeneral appearance of your window manager you might want to add more\nof them. If you are only interested in small changes like colors and\nwallpapers (which don't change the structure of your configs, only the\ndetails) you are probably fine with one. (This is an abstraction layer\nwhich exists for historical reasons and might be removed in the\nfuture).\n\n### The templates\n\nSo how does a template look like? A useful template contains:\n\n- One or more file-templates. They should (but don't have to) end with\n `.tpl` and contain your config. Variables should have the form `{{\n variable_name }}` and will be replaced by their value when themer\n renders them.\n- A (potentially empty) directory of plugins. If plugins are placed\n here they can be activated by mentioning them in `config.yaml`\n- `config.yaml`, which tells themer how to use the other files.\n\n`config.yaml` has 3 sections:\n\n- `variables`, where `primary: red` means hat the files listed below\n will be rendered with `{{ primary }}` replaced by `red`\n- `plugins`, divided in `parsers` and `activators`, each with a list\n of activated plugins.\n- `files`, where `fromfile: tofile` means that `fromfile` (which is\n supposed to be the name of a file-template) is rendered to `tofile`\n in the rendered theme.\n\nUsage\n-----\n\n### Integrating Themer with your Setup\n\nAll the following steps will show you how to use `themer` to generate\nthemes, but you also need to configure your DE to use the generated\ntheme.\n\n`themer` does not assume anything about the tools you use in your DE,\nyou need to tell your DE about `themer`. The current theme will\nalways be available in `$XDG_HOME/themer/current` (usually\n`.config/themer/current`). To use `themer`, symlink the seperate\nfiles from there to their destination.\n\nFor example, this is how to set up `i3` with `themer`:\n\n $ mkdir -p .i3\n $ ln -s ~/.config/themer/current/i3.conf .i3/config\n\n\n### Generating Themes\n\nGenerate a theme from a wallpaper:\n\n $ themer generate themename wallpaper.png\n\n...or install a colorscheme from `sweyla.com`:\n \n $ themer generate themename 693812\n\n(this will install [http://sweyla.com/themes/seed/693812/](http://sweyla.com/themes/seed/693812/))\n\nyou can also use an Xresources-style file:\n\n $ themer generate themename /home/me/.Xresources\n\n[Plugins](#plugins) enable you to generate themes from other sources\nas well, see below.\n\n\n### Viewing Installed Themes\n\nYou can list all generated themes with `themer list`:\n\n $ themer list\n themeone\n themetwo\n\n\n### Viewing Installed Plugins\n\n $ themer plugins\n Enabled activators:\n themer.activators.wallfix.WallfixActivator\n themer.activators.i3.I3Activator\n Enabled parsers:\n themer.parsers.SweylaColorParser\n themer.parsers.KmeansColorParser\n themer.parsers.CachedColorParser\n themer.ColorParser\n\n\n### Activating Themes\n\nYou can activate an existing theme with `themer activate`:\n\n $ themer activate sometheme\n\nThis will symlink all defined templates to\n`~/.config/themer/current`. You should, in turn, symlink all the\nglobal configuration files to there. For example for i3:\n\n $ ln -s ~/.config/themer/current/i3.conf ~/.i3/config\n\nTo view the currently activated theme's colors use `themer current`.\n\nIf you have modified the templates or a themes `colors.yaml`,\nactivating the theme again will not apply those changes. Instead use\n`themer render` to update your configuration:\n\n $ themer render sometheme\n\nYou can also re-render all of your themes (for example if you changed\na lot in your configuration) by supplying `all` instead of a theme's\nname:\n\n $ themer render all\n\n\n### Deleting Themes\n\nDeleting generated themes is possible using `themer delete`:\n\n $ themer delete sometheme\n\n\nScreenshots\n-----------\n\n![](http://i.imgur.com/dXpXxPz.png)\n![](http://i.imgur.com/axUuxbF.png)\n![](http://media.charlesleifer.com/blog/photos/candybean.png)\n![](http://media.charlesleifer.com/blog/photos/bloom.png)\n![](http://media.charlesleifer.com/blog/photos/waves.png)\n![](http://media.charlesleifer.com/blog/photos/waves2.png)\n![](http://i.imgur.com/7GISqHw.png)\n![](http://i.imgur.com/cutS0S7.png)\n\n\nPlugins\n-------\n\nPlugins can be installed anywhere into your PYTHONPATH, but the `plugins` directory under the used template dir is automatically added to `sys.path`, so you may want to place them there (usually this is `~/.config/themer/templates/i3/plugins`).\nThey are loaded via their python module-an-classname string; e.g. `mymodule.activator.MyActivator`.\nPlugins are configured on a template-directory basis, in the `config.yaml` file (default `~/.config/themer/templates/i3/config.yaml`).\n\nThere are two kinds of plugins: **Activators** and **Parsers**.\nActivators should inherit from `themer.ThemeActivator`, Parsers should inherit from `themer.ColorParser`.\n\n\n### `ThemeActivator`s\nActivators are run once every time a theme is activated. Use them to reload configuration files, set desktop wallpapers etc.\n\nEach Activator should implement the method `activate`.\nThe constructor is passed the values for `theme_name`, `theme_dir` and `logger`.\nAll of these and `colors` can be accessed via the instance's properties.\n\n\n#### Example:\n\n from themer import ThemeActivator\n import os\n \n class I3Activator(ThemeActivator):\n def activate(self):\n os.system('i3-msg -q restart')\n\n\n### `ColorParser`s\nParsers are used to generate colorschemes from files and strings.\n\nEach ColorParser should implement the method `read`, which should return the color dictionary generated from the input string in `self.data` (or obtained via the constructor's first argument).\nA ColorParser can additionally return a path to a wallpaper to be used by setting `self.wallpaper` to anything other than `None`.\n\nAdditionally, Parsers need to have a `check` attribute. It is used to determine whether a Parser should be used for a given color source. `check` can either be a function, in which case it is passed the color-source string and expected to return a truthy value if it wants to handle that color source, or a string.\nIf it is a string it will be used as a regex and matched against the color source string.\n\nThe `themer.check_file_regex` helper can be used to build a `check` function that checks filenames against a regex and verifies their existence on the filesystem.\n\nThe constructor is passed the values for `data`, `config` and `logger`.\nAll of these can be accessed via the instance's properties.\nThe default constructor also sets `self.colors` to a new dictionary and `self.wallpaper` to `None`.\n\n\n#### Example:\n\n from themer import ColorParser, check_file_regex\n\n class NewColorParser(ColorParser):\n check = check_file_regex('\\.yaml$')\n def read(self):\n with open(self.data) as fh: # load colors from a yaml file\n self.colors = yaml.load(fh)\n return self.colors\n\n\nCredits\n-------\n\nOriginal script by [Charles Leifer](https://github.com/coleifer) \nMaintained and developed further by [Sol Bekic](https://github.com/s-ol)", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/s-ol/themer", "keywords": "wm colorscheme color theme wallpaper", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "Themer", "package_url": "https://pypi.org/project/Themer/", "platform": "", "project_url": "https://pypi.org/project/Themer/", "project_urls": { "Homepage": "https://github.com/s-ol/themer" }, "release_url": "https://pypi.org/project/Themer/1.8.4/", "requires_dist": null, "requires_python": "", "summary": "Themer is a colorscheme generator and manager for your desktop.", "version": "1.8.4" }, "last_serial": 4551480, "releases": { "1.1": [ { "comment_text": "", "digests": { "md5": "a5f9665fafe9cfeafbf18ef65401b7d0", "sha256": "4743c4e248ef647d2d4f4fa323a5512ba66afffb68d8f90c6faa2c473ffe53e8" }, "downloads": -1, "filename": "Themer-1.1.tar.gz", "has_sig": false, "md5_digest": "a5f9665fafe9cfeafbf18ef65401b7d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10695, "upload_time": "2015-04-16T19:00:52", "url": "https://files.pythonhosted.org/packages/cc/68/f620a3dbf78e22c6703afacad4eef1d26d5b80d789970ac7ce95542221ad/Themer-1.1.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "a830e52257cdb96f8ed5366eb7a2a195", "sha256": "de0e5a8e0beb66286e5b49277f173119c56a4a04ea8e1e908fbfe67a33715e49" }, "downloads": -1, "filename": "Themer-1.1.1.tar.gz", "has_sig": false, "md5_digest": "a830e52257cdb96f8ed5366eb7a2a195", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10703, "upload_time": "2015-04-17T11:48:10", "url": "https://files.pythonhosted.org/packages/f1/44/09bc328459b9ee71b7e583053367715965d0a3e099175518a17d69190edd/Themer-1.1.1.tar.gz" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "893d9fee6a822dfca7fb2eb35da616ee", "sha256": "43b1a7ac2cfa7dc3d381d07fd0b8a0653e1fa1d8de8be038b16c143f0010564e" }, "downloads": -1, "filename": "Themer-1.3.tar.gz", "has_sig": false, "md5_digest": "893d9fee6a822dfca7fb2eb35da616ee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18061, "upload_time": "2015-06-23T00:56:17", "url": "https://files.pythonhosted.org/packages/b0/93/ab17011ffec2e5d147c0a6f2f09ad0946720b431738391a4cc4c2e853309/Themer-1.3.tar.gz" } ], "1.5": [ { "comment_text": "", "digests": { "md5": "1e6acaf3b0a5f48cbecff6676fd699f8", "sha256": "2ace08db0e765c4deb422011e92fc4684f7e3369d53bc05bd720effd2a031b7d" }, "downloads": -1, "filename": "Themer-1.5.tar.gz", "has_sig": false, "md5_digest": "1e6acaf3b0a5f48cbecff6676fd699f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18186, "upload_time": "2015-08-08T16:52:27", "url": "https://files.pythonhosted.org/packages/ec/ae/1dcde52b7fe1dbd536a44f472a5e71e3c475c496708b86996ad25b64175d/Themer-1.5.tar.gz" } ], "1.7": [ { "comment_text": "", "digests": { "md5": "f10f8bfbc38ed03683d722691e2a75db", "sha256": "1b69ebd570c155b238c96d1d33f2e3df3a97831f7f0684254bec5c817879ba9c" }, "downloads": -1, "filename": "Themer-1.7.tar.gz", "has_sig": false, "md5_digest": "f10f8bfbc38ed03683d722691e2a75db", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18565, "upload_time": "2016-11-21T07:37:48", "url": "https://files.pythonhosted.org/packages/d7/18/9e0d620fdcfab11619b96d5e0679d3610e49d2f6eec55629be152f6fbac6/Themer-1.7.tar.gz" } ], "1.8": [ { "comment_text": "", "digests": { "md5": "e66a39b534dc918c7d875c42d2990386", "sha256": "8f7de16b7285f5e37248913b2267d51305ac8a893e7962293a6b7e384a1cf362" }, "downloads": -1, "filename": "Themer-1.8.tar.gz", "has_sig": false, "md5_digest": "e66a39b534dc918c7d875c42d2990386", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19955, "upload_time": "2017-04-10T19:15:23", "url": "https://files.pythonhosted.org/packages/4a/51/b631ac739914d3d96f63fa8ca1077364bb3c530d62fc2b975a4fe572f8b5/Themer-1.8.tar.gz" } ], "1.8.1": [ { "comment_text": "", "digests": { "md5": "327f43b4173d0574bddbf710e8e6347f", "sha256": "8fcfcf16b9ee120d36377587d1451e09633a2f21ec5d677e5f0eb1ee87931cfe" }, "downloads": -1, "filename": "Themer-1.8.1.tar.gz", "has_sig": false, "md5_digest": "327f43b4173d0574bddbf710e8e6347f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19792, "upload_time": "2017-04-10T19:37:38", "url": "https://files.pythonhosted.org/packages/8b/d6/e7dd7a5e9d2088f8bf8c228421ce14b66e8f5d05b24f503782727e850985/Themer-1.8.1.tar.gz" } ], "1.8.2": [ { "comment_text": "", "digests": { "md5": "a91e1371ca7f022cb3f1d3ceab710cf2", "sha256": "0f73588b7ea960a4509087925121f3cb47ba614279dfd134d59e89e59d1c409e" }, "downloads": -1, "filename": "Themer-1.8.2.tar.gz", "has_sig": false, "md5_digest": "a91e1371ca7f022cb3f1d3ceab710cf2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19881, "upload_time": "2017-08-01T13:08:25", "url": "https://files.pythonhosted.org/packages/40/a5/3e7a50237156798ea4b18a13ea43b32620528106871d9f28784e477acbf4/Themer-1.8.2.tar.gz" } ], "1.8.3": [ { "comment_text": "", "digests": { "md5": "46a90ba8a0f0af8951f2e627aaeeeba5", "sha256": "445b89e5b97e8f06ca5f36d4b2b0e864464692638581ff2b26cd9937f16ea2e7" }, "downloads": -1, "filename": "Themer-1.8.3.tar.gz", "has_sig": false, "md5_digest": "46a90ba8a0f0af8951f2e627aaeeeba5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23001, "upload_time": "2017-12-15T14:11:29", "url": "https://files.pythonhosted.org/packages/ed/6e/1ef286164d56f12c21b2da595fe4fad9213902d27d3dece0cb098cfdb1a9/Themer-1.8.3.tar.gz" } ], "1.8.4": [ { "comment_text": "", "digests": { "md5": "74cbe9d5aa10365855f4214d3613a615", "sha256": "c3c4cefcaddb75ef0d8e576f613f2d4a19415648ab1440ba3ec63d013c430d3e" }, "downloads": -1, "filename": "Themer-1.8.4.tar.gz", "has_sig": false, "md5_digest": "74cbe9d5aa10365855f4214d3613a615", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19711, "upload_time": "2018-12-02T03:06:05", "url": "https://files.pythonhosted.org/packages/82/2e/740fd7141d36217497092ce06919c9d40bb36fe2e33012e0b9a1fa9314e4/Themer-1.8.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "74cbe9d5aa10365855f4214d3613a615", "sha256": "c3c4cefcaddb75ef0d8e576f613f2d4a19415648ab1440ba3ec63d013c430d3e" }, "downloads": -1, "filename": "Themer-1.8.4.tar.gz", "has_sig": false, "md5_digest": "74cbe9d5aa10365855f4214d3613a615", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19711, "upload_time": "2018-12-02T03:06:05", "url": "https://files.pythonhosted.org/packages/82/2e/740fd7141d36217497092ce06919c9d40bb36fe2e33012e0b9a1fa9314e4/Themer-1.8.4.tar.gz" } ] }