commit 145db452d88f528ce275a1043a167bc97705ec3a Author: Olivier Navas Date: Mon Sep 30 19:32:52 2024 +0200 Initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..dcbe12d --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# libreticmenu + +* Pour lancer libreticmenu sans pull depuis le repo (développement) + +```bash +NOPULL=0 ./libreticmenu.sh +``` diff --git a/ansible/configure-local-admin.yml b/ansible/configure-local-admin.yml new file mode 100644 index 0000000..27bbe8a --- /dev/null +++ b/ansible/configure-local-admin.yml @@ -0,0 +1,21 @@ +# +# Configure un sudoer +# + +- name: Préparation de l'installation + hosts: localhost + tasks: + - name: Configure sudo pour {{ user }} + ansible.builtin.copy: + content: | + # Autorise {{ user }} à faire sudo + {{ user }} ALL = ALL + dest: /etc/sudoers.d/libreticmenu_allow_sudo_{{ user }} + when: state == "present" + + - name: Supprime sudo pour {{ user }} + ansible.builtin.file: + path: /etc/sudoers.d/libreticmenu_allow_sudo_{{ user }} + state: absent + when: state == "absent" + diff --git a/ansible/cubic-setup.yml b/ansible/cubic-setup.yml new file mode 100644 index 0000000..2c2f52f --- /dev/null +++ b/ansible/cubic-setup.yml @@ -0,0 +1,30 @@ +# +# Ce playbook est à faire dans le modèle cubic : +# +# A ce stade, l'utilisateur d'install n'est pas créé, on ne peut pas compter sur le fait +# que son dossier d'accueil existe +# +# cd /opt +# git clone https://git.libretic.fr/libretic/libreticmenu.git +# cd libreticmenu +# ansible-playbook ansible/cubic-setup.yml +# + +- name: Préparation de l'installation dans cubic + hosts: localhost + vars_files: + - main.yml + tasks: + - name: Sudoers pour {{ mint_install_user }} + ansible.builtin.copy: + content: | + # Autorise {{ mint_install_user }} à faire sudo sans mdp + {{ mint_install_user }} ALL = NOPASSWD:/opt/libreticmenu/libreticmenu.sh + dest: /etc/sudoers.d/{{ mint_install_user }} + + - name: Packages + ansible.builtin.apt: + name: + - ca-certificates + - python3-poetry + state: present diff --git a/ansible/mint-compliance.yml b/ansible/mint-compliance.yml new file mode 100644 index 0000000..66e42cd --- /dev/null +++ b/ansible/mint-compliance.yml @@ -0,0 +1,8 @@ +- name: Conformité de l'installation du poste linux + hosts: localhost + roles: + - base + - skel + - theme-libretic + - firefox-policy + diff --git a/ansible/roles/base/handlers/main.yml b/ansible/roles/base/handlers/main.yml new file mode 100644 index 0000000..4ed3329 --- /dev/null +++ b/ansible/roles/base/handlers/main.yml @@ -0,0 +1,2 @@ +- name: Update-grub + ansible.builtin.command: update-grub diff --git a/ansible/roles/base/tasks/main.yml b/ansible/roles/base/tasks/main.yml new file mode 100644 index 0000000..eee4e27 --- /dev/null +++ b/ansible/roles/base/tasks/main.yml @@ -0,0 +1,51 @@ +- name: Installation des packages nécessaires + ansible.builtin.package: + name: "{{ required_packages }}" + +- name: Suppression des packages non souhaités + ansible.builtin.package: + name: "{{ remove_packages }}" + state: absent + +- name: Installation des flatpak nécessaires + community.general.flatpak: + name: "{{ required_flatpak }}" + method: system + +- name: Configuration Lightdm + ansible.builtin.template: + src: lightdm-show-manual.conf.j2 + dest: /etc/lightdm/lightdm.conf.d/lightdm-show-manual.conf + owner: root + group: root + mode: u=rw,g=r,o=r + +- name: Configuration Mintupdate + ansible.builtin.file: + path: "{{ item }}" + owner: root + group: root + mode: u=rw,g=r,o=r + state: touch + modification_time: preserve + access_time: preserve + loop: + - /var/lib/linuxmint/mintupdate-automatic-removals-enabled + - /var/lib/linuxmint/mintupdate-automatic-upgrades-enabled + +- name: Configure GRUB_CMDLINE_LINUX_DEFAULT + ansible.builtin.lineinfile: + state: present + dest: /etc/default/grub + regexp: '^GRUB_CMDLINE_LINUX_DEFAULT=""$' + line: 'GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"' + notify: Update-grub + +- name: Configure GRUB options + ansible.builtin.blockinfile: + state: present + path: /etc/default/grub + marker: "# {mark} ANSIBLE MANAGED BLOCK: GRUB options" + block: | + GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT + notify: Update-grub diff --git a/ansible/roles/base/templates/lightdm-show-manual.conf.j2 b/ansible/roles/base/templates/lightdm-show-manual.conf.j2 new file mode 100644 index 0000000..1241477 --- /dev/null +++ b/ansible/roles/base/templates/lightdm-show-manual.conf.j2 @@ -0,0 +1,3 @@ +[Seat:*] +#greeter-hide-users=true +greeter-show-manual-login=true diff --git a/ansible/roles/base/vars/main.yml b/ansible/roles/base/vars/main.yml new file mode 100644 index 0000000..03d8ccb --- /dev/null +++ b/ansible/roles/base/vars/main.yml @@ -0,0 +1,11 @@ +mint_install_user: installer + +required_packages: + - openssh-server + +remove_packages: + - mintchat + +required_flatpak: + - io.github.ungoogled_software.ungoogled_chromium + diff --git a/ansible/roles/firefox-policy/tasks/main.yml b/ansible/roles/firefox-policy/tasks/main.yml new file mode 100644 index 0000000..d5fef75 --- /dev/null +++ b/ansible/roles/firefox-policy/tasks/main.yml @@ -0,0 +1,15 @@ +- name: Dossier de stratégie firefox + ansible.builtin.file: + path: /etc/firefox/policies + state: directory + owner: root + group: root + mode: u=rwx,g=rx,o=rx + +- name: Stratégie firefox + ansible.builtin.template: + src: policies.json + dest: /etc/firefox/policies/policies.json + owner: root + group: root + mode: u=rw,g=r,o=r diff --git a/ansible/roles/firefox-policy/templates/policies.json b/ansible/roles/firefox-policy/templates/policies.json new file mode 100644 index 0000000..511255d --- /dev/null +++ b/ansible/roles/firefox-policy/templates/policies.json @@ -0,0 +1,38 @@ +{ + "policies": { + "BlockAboutConfig": true, + "Extensions": { + "Install": ["https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/addon-4328681-latest.xpi", + "https://addons.mozilla.org/firefox/downloads/latest/privacy-badger17/addon-4321653-latest.xpi", + "https://addons.mozilla.org/firefox/downloads/latest/duckduckgo-for-firefox/addon-4325805-latest.xpi"], + "Uninstall": [], + "Locked": [] + }, + "Homepage": { + "URL": "https://libretic.fr/", + "Locked": false, + "StartPage": "homepage" + }, + "FirefoxHome": { + "Search": true, + "SponsoredTopSites": false, + "Highlights": false, + "Pocket": false, + "SponsoredPocket": false, + "Snippets": false, + "Locked": false + }, + "FirefoxSuggest": { + "WebSuggestions": false, + "SponsoredSuggestions": false, + "ImproveSuggest": false, + "Locked": false + }, + "EnableTrackingProtection": { + "Value": true, + "Locked": false, + "Cryptomining": true, + "Fingerprinting": true + } + } +} diff --git a/ansible/roles/skel/files/skel/.bash_logout b/ansible/roles/skel/files/skel/.bash_logout new file mode 100644 index 0000000..de4f5f7 --- /dev/null +++ b/ansible/roles/skel/files/skel/.bash_logout @@ -0,0 +1,7 @@ +# ~/.bash_logout: executed by bash(1) when login shell exits. + +# when leaving the console clear the screen to increase privacy + +if [ "$SHLVL" = 1 ]; then + [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q +fi diff --git a/ansible/roles/skel/files/skel/.bashrc b/ansible/roles/skel/files/skel/.bashrc new file mode 100644 index 0000000..b488fcc --- /dev/null +++ b/ansible/roles/skel/files/skel/.bashrc @@ -0,0 +1,117 @@ +# ~/.bashrc: executed by bash(1) for non-login shells. +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) +# for examples + +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac + +# don't put duplicate lines or lines starting with space in the history. +# See bash(1) for more options +HISTCONTROL=ignoreboth + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000 +HISTFILESIZE=2000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +#shopt -s globstar + +# make less more friendly for non-text input files, see lesspipe(1) +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set variable identifying the chroot you work in (used in the prompt below) +if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then + debian_chroot=$(cat /etc/debian_chroot) +fi + +# set a fancy prompt (non-color, unless we know we "want" color) +case "$TERM" in + xterm-color|*-256color) color_prompt=yes;; +esac + +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +#force_color_prompt=yes + +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + # We have color support; assume it's compliant with Ecma-48 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such + # a case would tend to support setf rather than setaf.) + color_prompt=yes + else + color_prompt= + fi +fi + +if [ "$color_prompt" = yes ]; then + PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' +else + PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' +fi +unset color_prompt force_color_prompt + +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*) + PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" + ;; +*) + ;; +esac + +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + #alias dir='dir --color=auto' + #alias vdir='vdir --color=auto' + + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' +fi + +# colored GCC warnings and errors +#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' + +# some more ls aliases +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' + +# Add an "alert" alias for long running commands. Use like so: +# sleep 10; alert +alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' + +# Alias definitions. +# You may want to put all your additions into a separate file like +# ~/.bash_aliases, instead of adding them here directly. +# See /usr/share/doc/bash-doc/examples in the bash-doc package. + +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +if ! shopt -oq posix; then + if [ -f /usr/share/bash-completion/bash_completion ]; then + . /usr/share/bash-completion/bash_completion + elif [ -f /etc/bash_completion ]; then + . /etc/bash_completion + fi +fi diff --git a/ansible/roles/skel/files/skel/.config/qt5ct/qt5ct.conf b/ansible/roles/skel/files/skel/.config/qt5ct/qt5ct.conf new file mode 100644 index 0000000..46b1795 --- /dev/null +++ b/ansible/roles/skel/files/skel/.config/qt5ct/qt5ct.conf @@ -0,0 +1,25 @@ +[Appearance] +color_scheme_path= +custom_palette=false +icon_theme=Mint-Y-Sand +style=gtk2 + +[Fonts] +fixed=@Variant(\0\0\0@\0\0\0\x12\0M\0o\0n\0o\0s\0p\0\x61\0\x63\0\x65@$\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10) +general=@Variant(\0\0\0@\0\0\0\f\0U\0\x62\0u\0n\0t\0u@$\0\0\0\0\0\0\xff\xff\xff\xff\x5\x1\0\x32\x10) + +[Interface] +activate_item_on_single_click=1 +buttonbox_layout=0 +cursor_flash_time=1000 +dialog_buttons_have_icons=1 +double_click_interval=400 +gui_effects=@Invalid() +menus_have_icons=true +stylesheets=@Invalid() +toolbutton_style=4 +underline_shortcut=1 +wheel_scroll_lines=3 + +[SettingsWindow] +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x2\0\0\0\0\x4\xa1\0\0\x1n\0\0\a\x84\0\0\x4\x36\0\0\x4\xa1\0\0\x1\x8a\0\0\a\x84\0\0\x4\x36\0\0\0\0\0\0\0\0\n\0) diff --git a/ansible/roles/skel/files/skel/.profile b/ansible/roles/skel/files/skel/.profile new file mode 100644 index 0000000..d89ea5a --- /dev/null +++ b/ansible/roles/skel/files/skel/.profile @@ -0,0 +1,27 @@ +# ~/.profile: executed by the command interpreter for login shells. +# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login +# exists. +# see /usr/share/doc/bash/examples/startup-files for examples. +# the files are located in the bash-doc package. + +# the default umask is set in /etc/profile; for setting the umask +# for ssh logins, install and configure the libpam-umask package. +#umask 022 + +# if running bash +if [ -n "$BASH_VERSION" ]; then + # include .bashrc if it exists + if [ -f "$HOME/.bashrc" ]; then + . "$HOME/.bashrc" + fi +fi + +# set PATH so it includes user's private bin if it exists +if [ -d "$HOME/bin" ] ; then + PATH="$HOME/bin:$PATH" +fi + +# set PATH so it includes user's private bin if it exists +if [ -d "$HOME/.local/bin" ] ; then + PATH="$HOME/.local/bin:$PATH" +fi diff --git a/ansible/roles/skel/tasks/main.yml b/ansible/roles/skel/tasks/main.yml new file mode 100644 index 0000000..d3ae2ef --- /dev/null +++ b/ansible/roles/skel/tasks/main.yml @@ -0,0 +1,7 @@ +- name: Synchronise le modèle de dossier utilisateur + ansible.builtin.synchronize: + src: skel + dest: /etc/ + delete: true + owner: false + group: false diff --git a/ansible/roles/theme-libretic/files/linux-mint-libretic-wallpaper.jpg b/ansible/roles/theme-libretic/files/linux-mint-libretic-wallpaper.jpg new file mode 100644 index 0000000..2c0cdab Binary files /dev/null and b/ansible/roles/theme-libretic/files/linux-mint-libretic-wallpaper.jpg differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/LICENSE b/ansible/roles/theme-libretic/files/spin-libretic/LICENSE new file mode 100644 index 0000000..9cecc1d --- /dev/null +++ b/ansible/roles/theme-libretic/files/spin-libretic/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + {project} Copyright (C) {year} {fullname} + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-0.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-0.png new file mode 100644 index 0000000..afaf6a5 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-0.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-1.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-1.png new file mode 100644 index 0000000..2c3e1a1 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-1.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-10.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-10.png new file mode 100644 index 0000000..a855798 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-10.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-100.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-100.png new file mode 100644 index 0000000..a1a06af Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-100.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-101.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-101.png new file mode 100644 index 0000000..c89a516 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-101.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-102.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-102.png new file mode 100644 index 0000000..1ff8a4e Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-102.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-103.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-103.png new file mode 100644 index 0000000..341391a Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-103.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-104.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-104.png new file mode 100644 index 0000000..78667ce Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-104.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-105.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-105.png new file mode 100644 index 0000000..d4aff96 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-105.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-106.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-106.png new file mode 100644 index 0000000..4c98b9e Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-106.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-107.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-107.png new file mode 100644 index 0000000..36febf3 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-107.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-108.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-108.png new file mode 100644 index 0000000..a21ffc8 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-108.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-109.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-109.png new file mode 100644 index 0000000..98e6c50 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-109.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-11.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-11.png new file mode 100644 index 0000000..0482038 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-11.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-110.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-110.png new file mode 100644 index 0000000..cde38eb Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-110.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-111.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-111.png new file mode 100644 index 0000000..b0842f8 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-111.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-112.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-112.png new file mode 100644 index 0000000..e535eb1 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-112.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-113.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-113.png new file mode 100644 index 0000000..7211842 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-113.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-114.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-114.png new file mode 100644 index 0000000..e3135c4 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-114.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-115.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-115.png new file mode 100644 index 0000000..defb6a4 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-115.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-116.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-116.png new file mode 100644 index 0000000..36dae6e Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-116.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-117.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-117.png new file mode 100644 index 0000000..54667a9 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-117.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-118.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-118.png new file mode 100644 index 0000000..014f764 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-118.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-119.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-119.png new file mode 100644 index 0000000..b8fcbd4 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-119.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-12.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-12.png new file mode 100644 index 0000000..d3dd5f2 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-12.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-120.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-120.png new file mode 100644 index 0000000..957e40d Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-120.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-121.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-121.png new file mode 100644 index 0000000..5f84f7b Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-121.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-122.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-122.png new file mode 100644 index 0000000..a3b26e4 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-122.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-123.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-123.png new file mode 100644 index 0000000..d932135 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-123.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-124.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-124.png new file mode 100644 index 0000000..f36ce78 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-124.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-125.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-125.png new file mode 100644 index 0000000..dee04dd Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-125.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-126.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-126.png new file mode 100644 index 0000000..fa58711 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-126.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-127.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-127.png new file mode 100644 index 0000000..fce4c4c Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-127.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-128.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-128.png new file mode 100644 index 0000000..8bbc77b Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-128.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-129.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-129.png new file mode 100644 index 0000000..5d34ee2 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-129.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-13.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-13.png new file mode 100644 index 0000000..4feabda Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-13.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-130.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-130.png new file mode 100644 index 0000000..a6e2508 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-130.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-131.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-131.png new file mode 100644 index 0000000..980d5ff Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-131.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-132.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-132.png new file mode 100644 index 0000000..5807485 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-132.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-133.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-133.png new file mode 100644 index 0000000..d3b64ec Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-133.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-134.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-134.png new file mode 100644 index 0000000..b4ba6c8 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-134.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-135.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-135.png new file mode 100644 index 0000000..ca9a29f Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-135.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-136.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-136.png new file mode 100644 index 0000000..4e69620 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-136.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-137.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-137.png new file mode 100644 index 0000000..f63f887 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-137.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-138.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-138.png new file mode 100644 index 0000000..367b22b Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-138.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-139.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-139.png new file mode 100644 index 0000000..1016c94 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-139.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-14.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-14.png new file mode 100644 index 0000000..cfb977c Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-14.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-140.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-140.png new file mode 100644 index 0000000..a9b18f2 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-140.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-141.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-141.png new file mode 100644 index 0000000..ad1fa80 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-141.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-142.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-142.png new file mode 100644 index 0000000..b3d085b Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-142.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-143.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-143.png new file mode 100644 index 0000000..ca48561 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-143.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-144.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-144.png new file mode 100644 index 0000000..b49a318 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-144.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-145.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-145.png new file mode 100644 index 0000000..a5c832a Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-145.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-146.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-146.png new file mode 100644 index 0000000..253da95 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-146.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-147.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-147.png new file mode 100644 index 0000000..d2c085c Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-147.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-148.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-148.png new file mode 100644 index 0000000..1d82ee1 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-148.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-149.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-149.png new file mode 100644 index 0000000..6f83993 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-149.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-15.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-15.png new file mode 100644 index 0000000..c3870d4 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-15.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-150.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-150.png new file mode 100644 index 0000000..12564b9 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-150.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-151.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-151.png new file mode 100644 index 0000000..b75a1d2 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-151.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-152.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-152.png new file mode 100644 index 0000000..dd5fda0 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-152.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-153.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-153.png new file mode 100644 index 0000000..195142c Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-153.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-154.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-154.png new file mode 100644 index 0000000..7904c1d Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-154.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-155.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-155.png new file mode 100644 index 0000000..447e9aa Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-155.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-156.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-156.png new file mode 100644 index 0000000..08abb02 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-156.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-157.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-157.png new file mode 100644 index 0000000..746ce0a Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-157.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-158.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-158.png new file mode 100644 index 0000000..5ecbdad Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-158.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-159.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-159.png new file mode 100644 index 0000000..b6d6685 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-159.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-16.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-16.png new file mode 100644 index 0000000..3eba1eb Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-16.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-160.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-160.png new file mode 100644 index 0000000..69fcbeb Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-160.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-161.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-161.png new file mode 100644 index 0000000..1e9e523 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-161.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-162.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-162.png new file mode 100644 index 0000000..a50c117 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-162.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-163.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-163.png new file mode 100644 index 0000000..dd63fef Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-163.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-164.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-164.png new file mode 100644 index 0000000..d000257 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-164.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-165.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-165.png new file mode 100644 index 0000000..2e4ab59 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-165.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-166.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-166.png new file mode 100644 index 0000000..89b31c8 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-166.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-167.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-167.png new file mode 100644 index 0000000..9c6f42b Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-167.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-168.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-168.png new file mode 100644 index 0000000..1de8157 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-168.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-17.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-17.png new file mode 100644 index 0000000..eaa3b71 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-17.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-18.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-18.png new file mode 100644 index 0000000..a90ab3f Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-18.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-19.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-19.png new file mode 100644 index 0000000..32e8869 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-19.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-2.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-2.png new file mode 100644 index 0000000..602b3fb Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-2.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-20.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-20.png new file mode 100644 index 0000000..315d785 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-20.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-21.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-21.png new file mode 100644 index 0000000..0536eb5 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-21.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-22.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-22.png new file mode 100644 index 0000000..ab26b5c Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-22.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-23.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-23.png new file mode 100644 index 0000000..06da768 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-23.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-24.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-24.png new file mode 100644 index 0000000..5a750d6 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-24.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-25.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-25.png new file mode 100644 index 0000000..e685ce1 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-25.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-26.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-26.png new file mode 100644 index 0000000..c279cef Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-26.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-27.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-27.png new file mode 100644 index 0000000..8c29085 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-27.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-28.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-28.png new file mode 100644 index 0000000..2c0fbab Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-28.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-29.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-29.png new file mode 100644 index 0000000..3934f35 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-29.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-3.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-3.png new file mode 100644 index 0000000..9160d16 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-3.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-30.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-30.png new file mode 100644 index 0000000..4aeb85e Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-30.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-31.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-31.png new file mode 100644 index 0000000..588ff52 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-31.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-32.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-32.png new file mode 100644 index 0000000..afa0953 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-32.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-33.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-33.png new file mode 100644 index 0000000..ee62c4c Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-33.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-34.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-34.png new file mode 100644 index 0000000..0fb8089 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-34.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-35.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-35.png new file mode 100644 index 0000000..b3b3002 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-35.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-36.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-36.png new file mode 100644 index 0000000..5127e0c Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-36.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-37.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-37.png new file mode 100644 index 0000000..9ddcf8e Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-37.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-38.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-38.png new file mode 100644 index 0000000..07733a2 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-38.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-39.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-39.png new file mode 100644 index 0000000..ddb8082 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-39.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-4.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-4.png new file mode 100644 index 0000000..ac479bb Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-4.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-40.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-40.png new file mode 100644 index 0000000..8701959 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-40.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-41.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-41.png new file mode 100644 index 0000000..73dc77c Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-41.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-42.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-42.png new file mode 100644 index 0000000..0c1b3e4 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-42.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-43.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-43.png new file mode 100644 index 0000000..bfd84fc Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-43.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-44.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-44.png new file mode 100644 index 0000000..ead2e58 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-44.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-45.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-45.png new file mode 100644 index 0000000..73730cc Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-45.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-46.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-46.png new file mode 100644 index 0000000..17cd24a Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-46.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-47.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-47.png new file mode 100644 index 0000000..47b2712 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-47.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-48.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-48.png new file mode 100644 index 0000000..699c325 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-48.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-49.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-49.png new file mode 100644 index 0000000..597b0a6 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-49.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-5.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-5.png new file mode 100644 index 0000000..02cef50 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-5.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-50.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-50.png new file mode 100644 index 0000000..2574cb0 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-50.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-51.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-51.png new file mode 100644 index 0000000..fdbb9f6 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-51.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-52.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-52.png new file mode 100644 index 0000000..50537e2 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-52.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-53.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-53.png new file mode 100644 index 0000000..253b49a Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-53.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-54.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-54.png new file mode 100644 index 0000000..bad9006 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-54.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-55.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-55.png new file mode 100644 index 0000000..a31a53e Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-55.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-56.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-56.png new file mode 100644 index 0000000..f68e627 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-56.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-57.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-57.png new file mode 100644 index 0000000..2b96945 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-57.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-58.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-58.png new file mode 100644 index 0000000..8611737 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-58.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-59.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-59.png new file mode 100644 index 0000000..d4caad3 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-59.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-6.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-6.png new file mode 100644 index 0000000..998e5ae Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-6.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-60.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-60.png new file mode 100644 index 0000000..2c7a9b8 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-60.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-61.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-61.png new file mode 100644 index 0000000..89a4a2e Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-61.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-62.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-62.png new file mode 100644 index 0000000..d44f739 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-62.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-63.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-63.png new file mode 100644 index 0000000..92e9232 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-63.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-64.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-64.png new file mode 100644 index 0000000..adca632 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-64.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-65.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-65.png new file mode 100644 index 0000000..bc65ba5 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-65.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-66.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-66.png new file mode 100644 index 0000000..cd0e18b Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-66.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-67.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-67.png new file mode 100644 index 0000000..654c611 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-67.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-68.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-68.png new file mode 100644 index 0000000..8554a8d Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-68.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-69.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-69.png new file mode 100644 index 0000000..4db685e Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-69.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-7.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-7.png new file mode 100644 index 0000000..83eddd7 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-7.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-70.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-70.png new file mode 100644 index 0000000..cd28598 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-70.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-71.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-71.png new file mode 100644 index 0000000..108844e Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-71.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-72.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-72.png new file mode 100644 index 0000000..5004e97 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-72.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-73.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-73.png new file mode 100644 index 0000000..29d8332 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-73.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-74.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-74.png new file mode 100644 index 0000000..8ebe4e4 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-74.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-75.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-75.png new file mode 100644 index 0000000..5c4aa79 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-75.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-76.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-76.png new file mode 100644 index 0000000..12440ef Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-76.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-77.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-77.png new file mode 100644 index 0000000..320dd7a Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-77.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-78.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-78.png new file mode 100644 index 0000000..787efc7 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-78.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-79.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-79.png new file mode 100644 index 0000000..994cd07 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-79.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-8.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-8.png new file mode 100644 index 0000000..7619a9a Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-8.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-80.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-80.png new file mode 100644 index 0000000..11db2dd Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-80.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-81.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-81.png new file mode 100644 index 0000000..0df7806 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-81.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-82.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-82.png new file mode 100644 index 0000000..d909292 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-82.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-83.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-83.png new file mode 100644 index 0000000..e057b18 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-83.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-84.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-84.png new file mode 100644 index 0000000..f292a93 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-84.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-85.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-85.png new file mode 100644 index 0000000..5c905ab Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-85.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-86.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-86.png new file mode 100644 index 0000000..5cf099a Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-86.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-87.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-87.png new file mode 100644 index 0000000..bc91ada Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-87.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-88.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-88.png new file mode 100644 index 0000000..66ed8bb Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-88.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-89.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-89.png new file mode 100644 index 0000000..ef705f2 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-89.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-9.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-9.png new file mode 100644 index 0000000..14d4bff Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-9.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-90.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-90.png new file mode 100644 index 0000000..df27d5a Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-90.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-91.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-91.png new file mode 100644 index 0000000..10551f2 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-91.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-92.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-92.png new file mode 100644 index 0000000..384bf3e Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-92.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-93.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-93.png new file mode 100644 index 0000000..d530198 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-93.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-94.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-94.png new file mode 100644 index 0000000..71f6399 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-94.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-95.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-95.png new file mode 100644 index 0000000..41ce727 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-95.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-96.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-96.png new file mode 100644 index 0000000..1dbe6a3 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-96.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-97.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-97.png new file mode 100644 index 0000000..eaeb96c Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-97.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-98.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-98.png new file mode 100644 index 0000000..83ce01a Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-98.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/progress-99.png b/ansible/roles/theme-libretic/files/spin-libretic/progress-99.png new file mode 100644 index 0000000..cf640a7 Binary files /dev/null and b/ansible/roles/theme-libretic/files/spin-libretic/progress-99.png differ diff --git a/ansible/roles/theme-libretic/files/spin-libretic/spin-libretic.plymouth b/ansible/roles/theme-libretic/files/spin-libretic/spin-libretic.plymouth new file mode 100755 index 0000000..ef619be --- /dev/null +++ b/ansible/roles/theme-libretic/files/spin-libretic/spin-libretic.plymouth @@ -0,0 +1,9 @@ +[Plymouth Theme] +Name=Spin Libretic +Description=Theme plymouth Spin-Libretic +Comment=Created By Aditya Shakya (@adi1090x) - modified by Libretic +ModuleName=script + +[script] +ImageDir=/usr/share/plymouth/themes/spin-libretic +ScriptFile=/usr/share/plymouth/themes/spin-libretic/spin-libretic.script diff --git a/ansible/roles/theme-libretic/files/spin-libretic/spin-libretic.script b/ansible/roles/theme-libretic/files/spin-libretic/spin-libretic.script new file mode 100755 index 0000000..97ea809 --- /dev/null +++ b/ansible/roles/theme-libretic/files/spin-libretic/spin-libretic.script @@ -0,0 +1,108 @@ +## Author : Aditya Shakya (adi1090x) +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Reddit : @adi1090x + +// Screen size +screen.w = Window.GetWidth(0); +screen.h = Window.GetHeight(0); +screen.half.w = Window.GetWidth(0) / 2; +screen.half.h = Window.GetHeight(0) / 2; + +// Question prompt +question = null; +answer = null; + +// Message +message = null; + +// Password prompt +bullets = null; +prompt = null; +bullet.image = Image.Text("*", 1, 1, 1); + +// Flow +state.status = "play"; +state.time = 0.0; + +//--------------------------------- Refresh (Logo animation) -------------------------- + +# cycle through all images +for (i = 0; i < 169; i++) + flyingman_image[i] = Image("progress-" + i + ".png"); +flyingman_sprite = Sprite(); + +# set image position +flyingman_sprite.SetX(Window.GetX() + (Window.GetWidth(0) / 2 - flyingman_image[0].GetWidth() / 2)); # Place images in the center +flyingman_sprite.SetY(Window.GetY() + (Window.GetHeight(0) / 2 - flyingman_image[0].GetHeight() / 2)); + +progress = 0; + +fun refresh_callback () + { + flyingman_sprite.SetImage(flyingman_image[Math.Int(progress / 2) % 169]); + progress++; + } + +Plymouth.SetRefreshFunction (refresh_callback); + +//------------------------------------- Password prompt ------------------------------- +fun DisplayQuestionCallback(prompt, entry) { + question = null; + answer = null; + + if (entry == "") + entry = ""; + + question.image = Image.Text(prompt, 1, 1, 1); + question.sprite = Sprite(question.image); + question.sprite.SetX(screen.half.w - question.image.GetWidth() / 2); + question.sprite.SetY(screen.h - 4 * question.image.GetHeight()); + + answer.image = Image.Text(entry, 1, 1, 1); + answer.sprite = Sprite(answer.image); + answer.sprite.SetX(screen.half.w - answer.image.GetWidth() / 2); + answer.sprite.SetY(screen.h - 2 * answer.image.GetHeight()); +} +Plymouth.SetDisplayQuestionFunction(DisplayQuestionCallback); + +//------------------------------------- Password prompt ------------------------------- +fun DisplayPasswordCallback(nil, bulletCount) { + state.status = "pause"; + totalWidth = bulletCount * bullet.image.GetWidth(); + startPos = screen.half.w - totalWidth / 2; + + prompt.image = Image.Text("Enter Password", 1, 1, 1); + prompt.sprite = Sprite(prompt.image); + prompt.sprite.SetX(screen.half.w - prompt.image.GetWidth() / 2); + prompt.sprite.SetY(screen.h - 4 * prompt.image.GetHeight()); + + // Clear all bullets (user might hit backspace) + bullets = null; + for (i = 0; i < bulletCount; i++) { + bullets[i].sprite = Sprite(bullet.image); + bullets[i].sprite.SetX(startPos + i * bullet.image.GetWidth()); + bullets[i].sprite.SetY(screen.h - 2 * bullet.image.GetHeight()); + } +} +Plymouth.SetDisplayPasswordFunction(DisplayPasswordCallback); + +//--------------------------- Normal display (unset all text) ---------------------- +fun DisplayNormalCallback() { + state.status = "play"; + bullets = null; + prompt = null; + message = null; + question = null; + answer = null; +} +Plymouth.SetDisplayNormalFunction(DisplayNormalCallback); + +//----------------------------------------- Message -------------------------------- +fun MessageCallback(text) { + message.image = Image.Text(text, 1, 1, 1); + message.sprite = Sprite(message.image); + message.sprite.SetPosition(screen.half.w - message.image.GetWidth() / 2, message.image.GetHeight()); +} +Plymouth.SetMessageFunction(MessageCallback); + diff --git a/ansible/roles/theme-libretic/handlers/main.yml b/ansible/roles/theme-libretic/handlers/main.yml new file mode 100644 index 0000000..630ec89 --- /dev/null +++ b/ansible/roles/theme-libretic/handlers/main.yml @@ -0,0 +1,4 @@ +- name: Mise à jour initramfs + ansible.builtin.command: update-initramfs -u + listen: update-initramfs + changed_when: true diff --git a/ansible/roles/theme-libretic/tasks/main.yml b/ansible/roles/theme-libretic/tasks/main.yml new file mode 100644 index 0000000..4a7fba8 --- /dev/null +++ b/ansible/roles/theme-libretic/tasks/main.yml @@ -0,0 +1,38 @@ +- name: Dossier du thème plymouth + ansible.builtin.file: + path: /usr/share/plymouth/themes/spin-libretic + state: directory + owner: root + group: root + mode: u=rwx,g=rx,o=rx + notify: update-initramfs + +- name: Copie le thème plymouth + ansible.builtin.copy: + src: spin-libretic + dest: /usr/share/plymouth/themes/spin-libretic + owner: root + group: root + mode: u=rw,g=r,o=r + notify: update-initramfs + +- name: Active le thème plymouth + ansible.builtin.file: + src: /usr/share/plymouth/themes/spin-libretic/spin-libretic.plymouth + dest: /etc/alternatives/default.plymouth + state: link + notify: update-initramfs + +- name: Copie le fond d'écran + ansible.builtin.copy: + src: linux-mint-libretic-wallpaper.jpg + dest: /usr/share/backgrounds/linuxmint/ + owner: root + group: root + mode: u=rw,g=r,o=r + +- name: Active le fond d'écran + ansible.builtin.file: + src: /usr/share/backgrounds/linuxmint/linux-mint-libretic-wallpaper.jpg + dest: /usr/share/backgrounds/linuxmint/default_background.jpg + state: link diff --git a/ansible/vars/main.yml b/ansible/vars/main.yml new file mode 100644 index 0000000..3e5e230 --- /dev/null +++ b/ansible/vars/main.yml @@ -0,0 +1 @@ +mint_install_user: installer \ No newline at end of file diff --git a/config.yml b/config.yml new file mode 100644 index 0000000..a9aa0e0 --- /dev/null +++ b/config.yml @@ -0,0 +1,5 @@ +playbook: + base_path: ansible + initial-setup: mint-initial-setup.yml + register: mint-register.yml + compliance: mint-compliance.yml diff --git a/libreticmenu.sh b/libreticmenu.sh new file mode 100755 index 0000000..9316e69 --- /dev/null +++ b/libreticmenu.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -eo pipefail +DIR=$(dirname $0) +cd $DIR +[ "$NOPULL" != "0" ] && git pull +poetry -C $DIR/libreticmenu install +poetry -C $DIR/libreticmenu run python $DIR/libreticmenu/libreticmenu.py $* diff --git a/libreticmenu/.gitignore b/libreticmenu/.gitignore new file mode 100644 index 0000000..eeb8a6e --- /dev/null +++ b/libreticmenu/.gitignore @@ -0,0 +1 @@ +**/__pycache__ diff --git a/libreticmenu/PosteLinuxMint.py b/libreticmenu/PosteLinuxMint.py new file mode 100644 index 0000000..ad5138b --- /dev/null +++ b/libreticmenu/PosteLinuxMint.py @@ -0,0 +1,46 @@ +import socket +import subprocess +import os +import glob + +def runAnsiblePlaybook(config, playbook, branch): + subprocess.run(['ansible-playbook', config['playbook'][playbook]], check=True, cwd=config['base_path']) + +def getHostName(): + return socket.gethostname() + +def getDomain(): + domainname = subprocess.check_output(['domainname', '-d'], text=True).rstrip() + return domainname + +def isCompliant(): + return False + +def setFQDN(fqdn): + result = subprocess.run(['hostnamectl', 'hostname', fqdn], check=True) + return result.returncode == 0 + + +def runCompliance(config, branch): + runAnsiblePlaybook(config, 'compliance', branch) + + +def addLocalAdmin(config, user): + result = subprocess.run( + ['ansible-playbook', + 'ansible/configure-local-admin.yml', + '--extra-vars', str({'user': user, 'state': 'present'})], + check=True) + +def removeLocalAdmin(config, user): + result = subprocess.run( + ['ansible-playbook', + 'ansible/configure-local-admin.yml', + '--extra-vars', str({'user': user, 'state': 'absent'})], + check=True) + +def getLocalAdmins(config): + prefix = '/etc/sudoers.d/libreticmenu_allow_sudo_' + pathlist = glob.glob(prefix+'*') + userlist = [s[len(prefix):] for s in pathlist] + return userlist diff --git a/libreticmenu/__init__.py b/libreticmenu/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/libreticmenu/libreticmenu.py b/libreticmenu/libreticmenu.py new file mode 100644 index 0000000..95a5e49 --- /dev/null +++ b/libreticmenu/libreticmenu.py @@ -0,0 +1,187 @@ +from InquirerPy import inquirer +from InquirerPy import prompt +from rich.console import Console +from rich.table import Table +import PosteLinuxMint +import libreticmenuBranch +import argparse +import yaml +import syslog +import os + + +### Cartouche de status + +def print_status(): + # Récupération des infos + hostname = PosteLinuxMint.getHostName() + domain = PosteLinuxMint.getDomain() + isRegistered = PosteLinuxMint.isRegistered() + isCompliant = PosteLinuxMint.isCompliant() + currentBranch = libreticmenuBranch.getlibreticmenuBranch() + + # Affichage du statut + console = Console() + console.print() + console.print("=== Menu de configuration - poste Linux Mint ===", style="bold red") + console.print() + table = Table(show_header=True, header_style="bold dim") + table.add_column("Paramètre", style="bold magenta") + table.add_column("Valeur") + table.add_column("Statut", justify="center") + table.add_row("Environnement du poste", currentBranch, "[green]OK" if currentBranch == "main" else "[yellow]Attention") + table.add_row("Hostname", hostname, "[green]OK" if hostname != "unassigned-hostname" else "[red]KO") + table.add_row("Poste configuré", str(isCompliant), "[green]OK" if isCompliant else "[red]KO") + console.print(table) + console.print() + + +### Menu du choix hostname +def hostnameChoice(config, branch): + questions = [ + { + "type": "input", + "message": "Renseigner le nom de la machine : ", + }, + ] + result = prompt(questions) + fqdn = result[0] + "." + result[1] + + proceed = inquirer.confirm( + message ="Définir {} comme nom de machine ?".format(fqdn), + confirm_letter = "o", + default=False).execute() + if proceed: + PosteLinuxMint.setFQDN(fqdn) + else: + print("Annulation") + +def complianceChoice(config, branch): + PosteLinuxMint.runCompliance(config, branch) + +def libreticmenuBranchChoice(config, branch): + questions = [ + { + "type": "list", + "message": "Choisir le type d'environnement de ce poste :", + "choices": ["main", "preprod"], + "default": "main", + }, + ] + result = prompt(questions) + + proceed = inquirer.confirm( + message ="Définir {} comme environnement pour ce poste ?".format(result[0]), + confirm_letter = "o", + default=False).execute() + if proceed: + libreticmenuBranch.setlibreticmenuBranch(result[0]) + console = Console() + console.print() + console.print("=== Relancer libreticmenu.sh pour bénéficier du changement d'environnement ===", style="bold red") + console.print() + exit() + else: + print("Annulation") + + +# Chargement du fichier de configuration +def readConfig(configFile): + try: + with open(configFile, "r") as file: + config = yaml.safe_load(file) + syslog.syslog(syslog.LOG_DEBUG, "Lecture du fichier de configuration {0}, contient: {1}".format(configFile, config)) + return config + + except: + syslog.syslog(syslog.LOG_DEBUG, "Impossible de lire le fichier de configuration {0}".format(configFile)) + raise + + +def addLocalAdminChoice(config, branch): + questions = [ + { + "type": "input", + "message": "Utilisateur devant être administrateur local : ", + }, + ] + result = prompt(questions) + + proceed = inquirer.confirm( + message ="Définir {} comme administrateur de ce poste ?".format(result[0]), + confirm_letter = "o", + default=False).execute() + if proceed: + PosteLinuxMint.addLocalAdmin(config, result[0]) + else: + print("Annulation") + +def removeLocalAdminChoice(config, branch): + userlist = PosteLinuxMint.getLocalAdmins(config) + + if len(userlist) == 0: + console = Console() + console.print("=== Aucun administrateur local à supprimer ===", style="bold red") + return + + questions = [ + { + "type": "list", + "message": "Utilisateur ne devant plus être administrateur local : ", + "choices": userlist, + }, + ] + result = prompt(questions) + + proceed = inquirer.confirm( + message ="Retirer {} des administrateurs de ce poste ?".format(result[0]), + confirm_letter = "o", + default=False).execute() + if proceed: + PosteLinuxMint.removeLocalAdmin(config, result[0]) + else: + print("Annulation") + + +# Menu principal +def main(): + parser = argparse.ArgumentParser(prog="libreticmenu.py", description="Menu de configuration poste Linux Mint") + parser.add_argument("-c", "--config", help="Fichier de configuration (config.yml par défaut)", default="config.yml") + parser.add_argument("-s", "--section", help="Section du fichier à utiliser (prod par défaut)", default="prod") + parser.add_argument("--runCompliance", help="Ne présente pas le menu et exécuter la conformité", action=argparse.BooleanOptionalAction) + args = parser.parse_args() + + config = readConfig(args.config, args.section) + + menu_main = { + "Définir le hostname": hostnameChoice, + "Exécuter la configuration du poste": complianceChoice, + "Changer le type d'environnement": libreticmenuBranchChoice, + "Ajouter sudoer": addLocalAdminChoice, + "Supprimer sudoer": removeLocalAdminChoice, + "Quitter": None + } + + currentBranch = libreticmenuBranch.getlibreticmenuBranch() + + if args.runCompliance: + PosteLinuxMint.runCompliance(config, currentBranch) + exit() + + while True: + print_status() + console = Console() + console.print("Choisir une des options suivantes", style="bold blue") + action = inquirer.select( + message = "Que souhaitez-vous faire ?", + choices = menu_main.keys(), + default = None).execute() + + if menu_main[action] != None: + menu_main[action](config, currentBranch) + else: + break + + +if __name__ == "__main__": + main() diff --git a/libreticmenu/libreticmenuBranch.py b/libreticmenu/libreticmenuBranch.py new file mode 100644 index 0000000..d8b8605 --- /dev/null +++ b/libreticmenu/libreticmenuBranch.py @@ -0,0 +1,14 @@ +from git import Repo +import os + + +def getlibreticmenuBranch(): + repo = Repo(os.getcwd()) + branch = repo.active_branch + return branch.name + + +def setlibreticmenuBranch(branch): + repo = Repo(os.getcwd()) + git = repo.git + git.switch(branch) diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..79a3465 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,248 @@ +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. + +[[package]] +name = "gitdb" +version = "4.0.11" +description = "Git Object Database" +optional = false +python-versions = ">=3.7" +files = [ + {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, + {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, +] + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.43" +description = "GitPython is a Python library used to interact with Git repositories" +optional = false +python-versions = ">=3.7" +files = [ + {file = "GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff"}, + {file = "GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"}, +] + +[package.dependencies] +gitdb = ">=4.0.1,<5" +typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""} + +[package.extras] +doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"] +test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] + +[[package]] +name = "inquirerpy" +version = "0.3.4" +description = "Python port of Inquirer.js (A collection of common interactive command-line user interfaces)" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "InquirerPy-0.3.4-py3-none-any.whl", hash = "sha256:c65fdfbac1fa00e3ee4fb10679f4d3ed7a012abf4833910e63c295827fe2a7d4"}, + {file = "InquirerPy-0.3.4.tar.gz", hash = "sha256:89d2ada0111f337483cb41ae31073108b2ec1e618a49d7110b0d7ade89fc197e"}, +] + +[package.dependencies] +pfzy = ">=0.3.1,<0.4.0" +prompt-toolkit = ">=3.0.1,<4.0.0" + +[package.extras] +docs = ["Sphinx (>=4.1.2,<5.0.0)", "furo (>=2021.8.17-beta.43,<2022.0.0)", "myst-parser (>=0.15.1,<0.16.0)", "sphinx-autobuild (>=2021.3.14,<2022.0.0)", "sphinx-copybutton (>=0.4.0,<0.5.0)"] + +[[package]] +name = "markdown-it-py" +version = "2.2.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.7" +files = [ + {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, + {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" +typing_extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "pfzy" +version = "0.3.4" +description = "Python port of the fzy fuzzy string matching algorithm" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "pfzy-0.3.4-py3-none-any.whl", hash = "sha256:5f50d5b2b3207fa72e7ec0ef08372ef652685470974a107d0d4999fc5a903a96"}, + {file = "pfzy-0.3.4.tar.gz", hash = "sha256:717ea765dd10b63618e7298b2d98efd819e0b30cd5905c9707223dceeb94b3f1"}, +] + +[package.extras] +docs = ["Sphinx (>=4.1.2,<5.0.0)", "furo (>=2021.8.17-beta.43,<2022.0.0)", "myst-parser (>=0.15.1,<0.16.0)", "sphinx-autobuild (>=2021.3.14,<2022.0.0)", "sphinx-copybutton (>=0.4.0,<0.5.0)"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.47" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, + {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "pygments" +version = "2.17.2" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, +] + +[package.extras] +plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "rich" +version = "13.8.1" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.8.1-py3-none-any.whl", hash = "sha256:1760a3c0848469b97b558fc61c85233e3dafb69c7a071b4d60c38099d3cd4c06"}, + {file = "rich-13.8.1.tar.gz", hash = "sha256:8260cda28e3db6bf04d2d1ef4dbc03ba80a824c88b0e7668a0f23126a424844a"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" +typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "smmap" +version = "5.0.1" +description = "A pure Python implementation of a sliding window memory map manager" +optional = false +python-versions = ">=3.7" +files = [ + {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, + {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, +] + +[[package]] +name = "typing-extensions" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "wcwidth" +version = "0.2.13" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.7" +content-hash = "d975fcbc8f9e6d028bed71bb97a0c9aa450896a0edf251fed2689be6d14aa8df" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..a7c6ace --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,17 @@ +[tool.poetry] +name = "libreticmenu" +version = "0.1.0" +description = "" +authors = ["Olivier Navas "] +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.7" +inquirerpy = "^0.3.4" +rich = "^13.7" +pyyaml = "^6.0" +gitpython = "^3.1" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api"