mnussbaum.base16-builder-ansible
base16-builder-ansible 
Diese Rolle erstellt und gibt Base16 Themen zurück. Base16 ist ein Framework zur Generierung von Themen für eine Vielzahl von Anwendungen wie Vim, Bash oder i3 mit Farbschemata wie Tomorrow Night oder Gruvbox.
Ziel dieses Builders ist es, die Installation und Aktualisierung von Base16-Farben in verschiedenen Anwendungen zu erleichtern. Die Verwendung von Ansible als Base16-Builder bietet uns viel Flexibilität. Wir können Themen generieren und diese entweder als eigenständige Dateien speichern oder in größere Konfigurationsdateivorlagen einbetten. Dies ist besonders nützlich für Anwendungen, die nur eine einzige Konfigurationsdatei verarbeiten können, wie i3.
Anstatt vorab gerenderte Farbschema-Vorlagen herunterzuladen, erstellt diese Rolle die Vorlagen dynamisch. So können wir Base16-Farbschemata verwenden, die in älteren Vorlagen-Repos möglicherweise noch nicht vorhanden sind, und stellen sicher, dass wir immer die neueste Version vorhandener Farbschemas verwenden.
Aktuell wird Version 0.9.1 der Base16-Spezifikation implementiert.
Beispiele für die Verwendung
---
roles:
- mnussbaum.base16-builder-ansible
tasks:
# Erstelle ein Farbschema und eine Vorlage und weise sie einer Variablen zu
- base16_builder:
scheme: tomorrow-night
template: shell
register: base16_schemes
# Es ist hilfreich, das registrierte Ergebnis einmal mit debug auszugeben, um herauszufinden,
# wie man auf ein bestimmtes Schema und eine bestimmte Vorlage zugreift. Jedes Base16-Vorlagen-Repo (z.B.
# "shell", "i3") kann mehrere Vorlage-Dateien enthalten, daher wird jede
# Vorlage in dem Ergebnisobjekt unter einem etwas anderen Index-Pfad registriert.
- debug:
var: base16_schemes
# Ich werde den gerenderten Inhalt zur besseren Lesbarkeit auslassen, aber das Ergebnis wird so aussehen:
#
# "base16_schemes": {
# "changed": true,
# "failed": false,
# "schemes": {
# "tomorrow-night": {
# "shell": {
# "scripts": {
# "base16-tomorrow-night.sh": "#!/bin/sh\n# base16-shell ..."
# }
# },
# "scheme-variables": {
# "base00-dec-b": "0.12941176470588237",
# "base00-dec-g": "0.12156862745098039",
# "base00-dec-r": "0.11372549019607843",
# "base00-hex": "1d1f21",
# "base00-hex-b": "21",
# "base00-hex-g": "1f",
# "base00-hex-r": "1d",
# "base00-rgb-b": "33",
# "base00-rgb-g": "31",
# "base00-rgb-r": "29",
# ...viele weitere Farbvariablen...
# "scheme-author": "Chris Kempson (http://chriskempson.com)",
# "scheme-name": "Tomorrow Night",
# "scheme-slug": "tomorrow-night",
# "scheme-slug-underscored": "tomorrow_night"
# }
# }
# }
# }
# Du kannst die generierten Farbschemata in eine Datei schreiben oder sie in deine eigenen
# Vorlagen rendern
- copy:
content: "{{ base16_schemes['schemes']['tomorrow-night']['shell']['scripts']['base16-tomorrow-night.sh'] }}"
dest: /my/bash/profile/dir/tomorrow-night-shell.sh
# Erstelle jede Vorlage für ein einzelnes Farbschema
- base16_builder:
scheme: tomorrow-night
register: base16_schemes
# Erstelle jedes Farbschema für eine einzelne Vorlage
- base16_builder:
template: shell
register: base16_schemes
# Erstelle jedes Farbschema für jede Vorlage
- base16_builder: {}
register: base16_schemes
# Erstelle jedes Farbschema für einige ausgewählte Vorlagen
- base16_builder:
template:
- shell
- i3
- qutebrowser
register: base16_schemes
# Lade die neuesten Farbschema- und Vorlagen-Quelldateien herunter, aber baue nichts
- base16_builder:
update: yes
build: no
# Lade Updates für eine einzelne Vorlage und ein Farbschema herunter und baue es neu
- base16_builder:
update: yes
scheme: tomorrow-night
template: shell
register: base16_schemes
# Wenn du dein eigenes Base16-Farbschema erstellt hast und auf dieses verweisen möchtest, bevor es
# in die Masterliste der Schemata übernommen wird, kannst du die Masterliste forked, einen
# Verweis auf dein Schema hinzufügen und dann deine geforkte Liste hier als Schemen-Quelle
# verwenden. Das gleiche gilt für neue Vorlagen-Repos und die Master-Vorlagenliste. Diese Masterlisten sind verfügbar unter:
#
# https://github.com/chriskempson/base16-schemes-source
# https://github.com/chriskempson/base16-templates-source
#
- base16_builder:
scheme: mein-neues-farbschema
template: shell
schemes_source: http://github.com/my-user/my-schemes-source-fork
templates_source: http://github.com/my-user/my-templates-source-fork
Optionen
scheme:
description:
- Setze dies auf den Namen eines Farbschemas, um nur dieses eine Schema zu bauen, anstatt alle zu bauen, was die Standardeinstellung ist
- Nur ein einzelnes Schema zu bauen, ist viel schneller als alle zu bauen
required: false
type: string
default: Alle Schemata bauen
scheme_family:
description:
- Setze dies auf den Namen einer Gruppe von Schemata, die in einem einzigen Repo leben (d.h. eine Familie), um nur diese Gruppe von Schemata zu bauen
- Wenn dies nicht gesetzt ist und ein Schema-Argument übergeben wird, wird erwartet, dass der Schema-Name im Namen der Schema-Familie enthalten ist. Zum Beispiel: Die Schema-Familie "tomorrow" steht in den Schemanamen "tomorrow-night" und "tomorrow"
- Setze dieses Argument nur, wenn der Name der Schema-Familie nicht in den Schema-Namen enthalten ist. Zum Beispiel: Die Schema-Familie "materialtheme" ist nicht im Schema-Namen "material-darker" enthalten
required: false
type: string
default: Alle Schemata bauen
template:
description:
- Setze dies auf den Namen einer Vorlage oder eine Liste von Vorlagen-Namen, um nur diese zu bauen, anstatt alle zu bauen, was die Standardeinstellung ist
- Nur einige Vorlagen zu bauen, ist viel schneller als alle zu bauen
required: false
type: list
default: Alle Vorlagen bauen
cache_dir:
description:
- Übergeordnetes Verzeichnis zum Speichern von geklonten Schemata, Vorlagen und Quelldaten
- Wird erstellt, wenn es noch nicht existiert
- Der Standard versucht, die $XDG_CACHE_DIR-Umgebungsvariable zu verwenden, dann ein ~/.cache-Verzeichnis, und fällt zurück auf das temporäre Verzeichnis der Plattform, wenn die ersten beiden nicht existieren
required: false
type: string
default: Erste verfügbare von $XDG_CACHE_DIR, $HOME/.cache oder plattformbezogenes temporäres Verzeichnis
schemes_source:
description:
- Git Repo URL oder lokaler Verzeichnispfad, der verwendet wird, um Schemata zu finden
- Die Quelle muss eine list.yaml-Datei enthalten, die die Namen der Schemata den Git-URLs oder lokalen Verzeichnispfaden der Schema-Repos zuordnet
required: false
type: string
default: https://github.com/chriskempson/base16-schemes-source
templates_source:
description:
- Git Repo URL oder lokaler Verzeichnispfad, der verwendet wird, um Vorlagen zu finden
- Die Quelle muss eine list.yaml-Datei enthalten, die die Namen der Vorlagen den Git-URLs oder lokalen Verzeichnispfaden der Vorlagen-Repos zuordnet
required: false
type: string
default: https://github.com/chriskempson/base16-templates-source
update:
description:
- Klone oder lade Farbschema- und Vorlagendaten
- Standardmäßig wird alles aktualisiert, respektiert jedoch die Schema- und Vorlage-Argumente
- Der Build lädt alle fehlenden Daten herunter, sodass du nicht _immer_ das Update aufrufen musst
required: false
type: bool
default: no
build:
description:
- Auf "no" setzen, um das Erstellen von Farbschemas oder Vorlagen zu deaktivieren
- Nützlich, um auf "no" zu setzen, wenn aktualisiert wird, um nur Quellen herunterzuladen
required: false
type: bool
default: yes
Abhängigkeiten
Python 3.5 oder höher, 2.7 wird wahrscheinlich funktionieren, aber ist ungetestet
Ansible
Pystache, das du installieren kannst mit:
pip install pystache
Installation
Du kannst diese Rolle mit ansible-galaxy
installieren. Schau dir die
ansible-galaxy
-Dokumentation für alle verschiedenen Möglichkeiten an, wie du Rollen installieren kannst, aber die
einfachste Methode ist einfach:
$ ansible-galaxy install mnussbaum.base16-builder-ansible
Nachdem du die Rolle installiert hast, musst du sie referenzieren, und dann kannst du das
base16_builder
-Modul verwenden, das sie bereitstellt. Hier ist ein ganz kurzes Beispiel:
---
roles:
- mnussbaum.base16-builder-ansible
tasks:
- base16_builder:
scheme: tomorrow-night
template: shell
register: base16_schemes
Wenn du ansible-galaxy
nicht verwenden möchtest oder kannst, kannst du dieses Repo klonen und direkt in deinen Ansible Rollenpfad ablegen.
Egal, wie du die Rolle installierst, vergiss nicht, auch die Pystache-Abhängigkeit zu installieren, wie oben erwähnt.
Entwicklung
Dieses Projekt verwendet Pipenv zur Installation von Abhängigkeiten. Um die Tests auszuführen:
pip install --user pipenv
pipenv install --dev
pipenv run nose2
Du kannst die Tests auch in einem Docker-Container gegen alle unterstützten Python-Versionen ausführen mit:
./ci
Lizenz
To Do
- Git-Pulls parallelisieren
- Erlaube die Verwendung unverlangter Base16-Schemata
Builds and updates Base16 color schemes and templates so that you can install them into config files and render them into own dotfile templates
ansible-galaxy install mnussbaum.base16-builder-ansible