mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-06-28 05:05:32 +02:00
Compare commits
No commits in common. "63c253802786d3554fbe668930c9af6d323424fd" and "439072c6b13cd9a33de9e93565fe28653ad0239b" have entirely different histories.
63c2538027
...
439072c6b1
@ -5,13 +5,6 @@ def get_oauth2_enabled(applications, application_id):
|
|||||||
enabled = app.get('oauth2_proxy', {}).get('enabled', False)
|
enabled = app.get('oauth2_proxy', {}).get('enabled', False)
|
||||||
return bool(enabled)
|
return bool(enabled)
|
||||||
|
|
||||||
def get_oidc_enabled(applications, application_id):
|
|
||||||
# Retrieve the application dictionary based on the ID
|
|
||||||
app = applications.get(application_id, {})
|
|
||||||
# Retrieve the value for oidc.enabled, default is False
|
|
||||||
enabled = app.get('oidc', {}).get('enabled', False)
|
|
||||||
return bool(enabled)
|
|
||||||
|
|
||||||
def get_css_enabled(applications, application_id):
|
def get_css_enabled(applications, application_id):
|
||||||
# Retrieve the application dictionary based on the given application_id.
|
# Retrieve the application dictionary based on the given application_id.
|
||||||
app = applications.get(application_id, {})
|
app = applications.get(application_id, {})
|
||||||
@ -23,6 +16,5 @@ class FilterModule(object):
|
|||||||
def filters(self):
|
def filters(self):
|
||||||
return {
|
return {
|
||||||
'get_css_enabled': get_css_enabled,
|
'get_css_enabled': get_css_enabled,
|
||||||
'get_oidc_enabled': get_oidc_enabled,
|
|
||||||
'get_oauth2_enabled': get_oauth2_enabled
|
'get_oauth2_enabled': get_oauth2_enabled
|
||||||
}
|
}
|
@ -114,14 +114,11 @@ defaults_applications:
|
|||||||
setup: false # Set true in inventory file to execute the setup and initializing procedures
|
setup: false # Set true in inventory file to execute the setup and initializing procedures
|
||||||
|
|
||||||
mailu:
|
mailu:
|
||||||
version: "2024.06" # Docker Image Version
|
|
||||||
setup: false # Set true in inventory file to execute the setup and initializing procedures
|
|
||||||
oidc:
|
oidc:
|
||||||
enabled: true # Activate OIDC for Mailu
|
enabled: true # Activate OIDC for Mailu
|
||||||
domain: "{{primary_domain}}" # The main domain from which mails will be send \ email suffix behind @
|
domain: "{{primary_domain}}" # The main domain from which mails will be send \ email suffix behind @
|
||||||
# I don't know why the database deactivation is necessary
|
# I don't know why the database deactivation is necessary
|
||||||
enable_central_database: False # Deactivate central database for mailu
|
enable_central_database: False # Deactivate central database for mailu
|
||||||
credentials:
|
|
||||||
# secret_key: # Needs to be set in inventory file
|
# secret_key: # Needs to be set in inventory file
|
||||||
# database_password: # Needs to be set in inventory file
|
# database_password: # Needs to be set in inventory file
|
||||||
# api_token: # Needs to be set in inventory file
|
# api_token: # Needs to be set in inventory file
|
||||||
@ -146,9 +143,11 @@ defaults_applications:
|
|||||||
single_user_mode: false # Set true for initial setup
|
single_user_mode: false # Set true for initial setup
|
||||||
setup: false # Set true in inventory file to execute the setup and initializing procedures
|
setup: false # Set true in inventory file to execute the setup and initializing procedures
|
||||||
oidc:
|
oidc:
|
||||||
enabled: true # Activate OIDC for Mastodon
|
enabled: true # Activate OIDC for Mailu
|
||||||
credentials:
|
#
|
||||||
# Check out the README.md of the docker-mastodon role to get detailled instructions about how to setup the credentials
|
# Check out the README.md of the docker-mastodon role to get detailled instructions about how to setup the credentials
|
||||||
|
#
|
||||||
|
# credentials:
|
||||||
# database_password:
|
# database_password:
|
||||||
# secret_key_base:
|
# secret_key_base:
|
||||||
# otp_secret:
|
# otp_secret:
|
||||||
@ -172,6 +171,12 @@ defaults_applications:
|
|||||||
version: "latest"
|
version: "latest"
|
||||||
setup: false # Set true in inventory file to execute the setup and initializing procedures
|
setup: false # Set true in inventory file to execute the setup and initializing procedures
|
||||||
|
|
||||||
|
## Mailu
|
||||||
|
mailu:
|
||||||
|
version: "2024.06"
|
||||||
|
domain: "{{primary_domain}}"
|
||||||
|
setup: false # Set true in inventory file to execute the setup and initializing procedures
|
||||||
|
|
||||||
## Moodle
|
## Moodle
|
||||||
moodle:
|
moodle:
|
||||||
site_titel: "Global Learning Academy on {{primary_domain}}"
|
site_titel: "Global Learning Academy on {{primary_domain}}"
|
||||||
|
@ -6,8 +6,6 @@ defaults_networks:
|
|||||||
# The default docker subnetworking does lead to overlapping and to huge networks.
|
# The default docker subnetworking does lead to overlapping and to huge networks.
|
||||||
# Due to this reason networks with 16 ips are created.
|
# Due to this reason networks with 16 ips are created.
|
||||||
# This should be sufficient for the most cases
|
# This should be sufficient for the most cases
|
||||||
|
|
||||||
# /28 Networks, 14 Usable Ip Addresses
|
|
||||||
akaunting:
|
akaunting:
|
||||||
subnet: 192.168.101.0/28
|
subnet: 192.168.101.0/28
|
||||||
attendize:
|
attendize:
|
||||||
@ -34,8 +32,8 @@ defaults_networks:
|
|||||||
subnet: 192.168.101.176/28
|
subnet: 192.168.101.176/28
|
||||||
listmonk:
|
listmonk:
|
||||||
subnet: 192.168.101.192/28
|
subnet: 192.168.101.192/28
|
||||||
# Free:
|
mariadb:
|
||||||
# subnet: 192.168.101.208/28
|
subnet: 192.168.101.208/28
|
||||||
matomo:
|
matomo:
|
||||||
subnet: 192.168.101.224/28
|
subnet: 192.168.101.224/28
|
||||||
mastodon:
|
mastodon:
|
||||||
@ -60,8 +58,8 @@ defaults_networks:
|
|||||||
subnet: 192.168.102.112/28
|
subnet: 192.168.102.112/28
|
||||||
pixelfed:
|
pixelfed:
|
||||||
subnet: 192.168.102.128/28
|
subnet: 192.168.102.128/28
|
||||||
# Free :
|
postgres:
|
||||||
# subnet: 192.168.102.144/28
|
subnet: 192.168.102.144/28
|
||||||
snipe_it:
|
snipe_it:
|
||||||
subnet: 192.168.102.160/28
|
subnet: 192.168.102.160/28
|
||||||
taiga:
|
taiga:
|
||||||
@ -70,14 +68,7 @@ defaults_networks:
|
|||||||
subnet: 192.168.102.192/28
|
subnet: 192.168.102.192/28
|
||||||
discourse:
|
discourse:
|
||||||
subnet: 192.168.102.208/28
|
subnet: 192.168.102.208/28
|
||||||
# /24 Networks / 254 Usable Clients
|
|
||||||
bigbluebutton:
|
bigbluebutton:
|
||||||
subnet: 10.7.7.0/24 # This variable does not have an impact. It's just there for documentation reasons, because this network is used in bbb
|
subnet: 10.7.7.0/24 # This variable does not have an impact. It's just there for documentation reasons.
|
||||||
postgres:
|
|
||||||
subnet: 192.168.200.0/24
|
|
||||||
mariadb:
|
|
||||||
subnet: 192.168.201.0/24
|
|
||||||
central_ldap:
|
|
||||||
subnet: 192.168.202.0/24
|
|
||||||
|
|
||||||
|
|
@ -16,15 +16,14 @@ defaults_service_provider:
|
|||||||
logo: https://cloud.veen.world/s/logo_cymais_512x512/download
|
logo: https://cloud.veen.world/s/logo_cymais_512x512/download
|
||||||
favicon: https://cloud.veen.world/s/veen_world_favicon/download
|
favicon: https://cloud.veen.world/s/veen_world_favicon/download
|
||||||
contact:
|
contact:
|
||||||
bluesky: "{{ '@' ~ administrator_username ~ '.' ~ domains.bluesky_api if 'bluesky' in group_names else '' }}"
|
bluesky: "@{{administrator_username}}.{{domains.bluesky_api}}"
|
||||||
email: "contact@{{primary_domain}}"
|
email: "contact@{{primary_domain}}"
|
||||||
mastodon: "{{ '@' ~ administrator_username ~ '@' ~ domains.mastodon if 'mastodon' in group_names else '' }}"
|
mastodon: "@{{administrator_username}}@{{domains.mastodon}}"
|
||||||
matrix: "{{ '@' ~ administrator_username ~ ':' ~ domains.matrix_synapse if 'matrix' in group_names else '' }}"
|
matrix: "@{{administrator_username}}:{{domains.matrix_synapse}}"
|
||||||
peertube: "{{ '@' ~ administrator_username ~ '@' ~ domains.peertube if 'peertube' in group_names else '' }}"
|
peertube: "@{{administrator_username}}@{{domains.peertube}}"
|
||||||
pixelfed: "{{ '@' ~ administrator_username ~ '@' ~ domains.pixelfed if 'pixelfed' in group_names else '' }}"
|
pixelfed: "@{{administrator_username}}@{{domains.pixelfed}}"
|
||||||
phone: "+0 000 000 404"
|
phone: "+0 000 000 404"
|
||||||
wordpress: "{{ '@' ~ administrator_username ~ '@' ~ domains.wordpress[0] if 'wordpress' in group_names else '' }}"
|
wordpress: "@{{administrator_username}}@{{domains.wordpress[0]}}"
|
||||||
|
|
||||||
legal:
|
legal:
|
||||||
editorial_responsible: "Johannes Gutenberg"
|
editorial_responsible: "Johannes Gutenberg"
|
||||||
source_code: "https://github.com/kevinveenbirkenbach/cymais"
|
source_code: "https://github.com/kevinveenbirkenbach/cymais"
|
||||||
|
@ -18,5 +18,5 @@
|
|||||||
|
|
||||||
- name: create central database
|
- name: create central database
|
||||||
include_role:
|
include_role:
|
||||||
name: "docker-{{database_type}}"
|
name: docker-{{database_type}}
|
||||||
when: enable_central_database | bool
|
when: enable_central_database | bool
|
@ -834,18 +834,21 @@
|
|||||||
"clientAuthenticatorType": "client-secret",
|
"clientAuthenticatorType": "client-secret",
|
||||||
"secret": "{{oidc.client.secret}}",
|
"secret": "{{oidc.client.secret}}",
|
||||||
"redirectUris": [
|
"redirectUris": [
|
||||||
|
{%- set redirect_uris = [] -%}
|
||||||
{%- for application, domain in domains.items() -%}
|
{%- for application, domain in domains.items() -%}
|
||||||
{%- if applications[application] is defined and ( applications | get_oauth2_enabled(application) or applications | get_oidc_enabled(application)) -%}
|
{%- if applications[application_id] is defined and applications | get_oauth2_enabled(application_id) -%}
|
||||||
{%- if domain is string -%}
|
{%- if domain is string -%}
|
||||||
"https://{{ domain }}/*"{% if not loop.last %},{% endif %}
|
{%- set _ = redirect_uris.append("https://" ~ domain ~ "/*") -%}
|
||||||
{%- else -%}
|
{%- else -%}
|
||||||
{%- for d in domain -%}
|
{%- for d in domain -%}
|
||||||
"https://{{ d }}/*"{% if not (loop.last and loop.parent.last) %},{% endif %}
|
{%- set _ = redirect_uris.append("https://" ~ domain ~ "/*") -%}
|
||||||
{%- endfor -%}
|
{%- endfor -%}
|
||||||
{%- endif -%}
|
{%- endif -%}
|
||||||
{%- endif -%}
|
{%- endif -%}
|
||||||
{%- endfor -%}
|
{%- endfor -%}
|
||||||
|
{{ redirect_uris | map('tojson') | join(",\n") }}
|
||||||
],
|
],
|
||||||
|
|
||||||
"webOrigins": [
|
"webOrigins": [
|
||||||
"https://*.{{primary_domain}}"
|
"https://*.{{primary_domain}}"
|
||||||
],
|
],
|
||||||
|
@ -24,8 +24,6 @@
|
|||||||
docker_network:
|
docker_network:
|
||||||
name: central_ldap
|
name: central_ldap
|
||||||
state: present
|
state: present
|
||||||
ipam_config:
|
|
||||||
- subnet: "{{ networks.local.central_ldap.subnet }}"
|
|
||||||
|
|
||||||
- name: "copy docker-compose.yml and env file"
|
- name: "copy docker-compose.yml and env file"
|
||||||
include_tasks: copy-docker-compose-and-env.yml
|
include_tasks: copy-docker-compose-and-env.yml
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
LD_PRELOAD=/usr/lib/libhardened_malloc.so
|
LD_PRELOAD=/usr/lib/libhardened_malloc.so
|
||||||
|
|
||||||
# Set to a randomly generated 16 bytes string
|
# Set to a randomly generated 16 bytes string
|
||||||
SECRET_KEY={{applications.mailu.credentials.secret_key}}
|
SECRET_KEY={{applications.mailu.secret_key}}
|
||||||
|
|
||||||
# Subnet of the docker network. This should not conflict with any networks to which your system is connected. (Internal and external!)
|
# Subnet of the docker network. This should not conflict with any networks to which your system is connected. (Internal and external!)
|
||||||
SUBNET={{networks.local.mailu.subnet}}
|
SUBNET={{networks.local.mailu.subnet}}
|
||||||
@ -145,7 +145,7 @@ LOG_LEVEL=WARNING
|
|||||||
SQLALCHEMY_DATABASE_URI_ROUNDCUBE=mysql://{{database_username}}:{{database_password}}@{{database_host}}/{{database_name}}?collation=utf8mb4_unicode_ci
|
SQLALCHEMY_DATABASE_URI_ROUNDCUBE=mysql://{{database_username}}:{{database_password}}@{{database_host}}/{{database_name}}?collation=utf8mb4_unicode_ci
|
||||||
SQLALCHEMY_DATABASE_URI=mysql+mysqlconnector://{{database_username}}:{{database_password}}@{{database_host}}/{{database_name}}?collation=utf8mb4_unicode_ci
|
SQLALCHEMY_DATABASE_URI=mysql+mysqlconnector://{{database_username}}:{{database_password}}@{{database_host}}/{{database_name}}?collation=utf8mb4_unicode_ci
|
||||||
|
|
||||||
API_TOKEN={{applications.mailu.credentials.api_token}}
|
API_TOKEN={{applications.mailu.api_token}}
|
||||||
|
|
||||||
# Activated https://mailu.io/master/configuration.html#advanced-settings
|
# Activated https://mailu.io/master/configuration.html#advanced-settings
|
||||||
AUTH_REQUIRE_TOKENS=True
|
AUTH_REQUIRE_TOKENS=True
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
application_id: "mailu"
|
application_id: "mailu"
|
||||||
database_password: "{{applications.mailu.credentials.database_password}}"
|
database_password: "{{applications.mailu.database_password}}"
|
||||||
database_type: "mariadb"
|
database_type: "mariadb"
|
||||||
cert_mount_directory: "{{docker_compose.directories.volumes}}certs/"
|
cert_mount_directory: "{{docker_compose.directories.volumes}}certs/"
|
||||||
enable_wildcard_certificate: false
|
enable_wildcard_certificate: false
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
docker_network:
|
docker_network:
|
||||||
name: central_mariadb
|
name: central_mariadb
|
||||||
state: present
|
state: present
|
||||||
ipam_config:
|
|
||||||
- subnet: "{{ networks.local.mariadb.subnet }}"
|
|
||||||
when: run_once_docker_mariadb is not defined
|
when: run_once_docker_mariadb is not defined
|
||||||
|
|
||||||
- name: install MariaDB
|
- name: install MariaDB
|
||||||
|
@ -31,6 +31,4 @@ docker exec -it central-postgres psql -U postgres
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
- The PostgreSQL server is bound to `127.0.0.1:5432` on the host machine, making it accessible only from localhost.
|
- The PostgreSQL server is bound to `127.0.0.1:5432` on the host machine, making it accessible only from localhost.
|
||||||
|
- Ensure that the provided passwords are secure and stored securely, preferably using Ansible Vault or another encryption method.
|
||||||
## Author
|
|
||||||
This role was created by [Kevin Veen-Birkenbach](https://www.veen.world).
|
|
@ -2,8 +2,6 @@
|
|||||||
docker_network:
|
docker_network:
|
||||||
name: central_postgres
|
name: central_postgres
|
||||||
state: present
|
state: present
|
||||||
ipam_config:
|
|
||||||
- subnet: "{{ networks.local.postgres.subnet }}"
|
|
||||||
when: run_once_docker_postgres is not defined
|
when: run_once_docker_postgres is not defined
|
||||||
|
|
||||||
- name: Install PostgreSQL
|
- name: Install PostgreSQL
|
||||||
|
@ -5,7 +5,7 @@ This Ansible role sets up and manages your Docker repository. It ensures that th
|
|||||||
## Features 🔧
|
## Features 🔧
|
||||||
|
|
||||||
- **Default Path Setup:**
|
- **Default Path Setup:**
|
||||||
Automatically sets a default `docker_repository_path`
|
Automatically sets a default `docker_repository_path` if not already defined.
|
||||||
|
|
||||||
- **Repository Management:**
|
- **Repository Management:**
|
||||||
Clones or updates your Docker repository from a specified Git repository.
|
Clones or updates your Docker repository from a specified Git repository.
|
||||||
@ -34,6 +34,12 @@ Ensure that you have set the following variables (either via your inventory, `gr
|
|||||||
- `docker_compose.directories.services`: The base directory where your Docker services are stored.
|
- `docker_compose.directories.services`: The base directory where your Docker services are stored.
|
||||||
The role will append `repository/` to this path to form `docker_repository_path`.
|
The role will append `repository/` to this path to form `docker_repository_path`.
|
||||||
|
|
||||||
|
If `docker_repository_path` is not defined, the role will automatically set it to:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
"{{ docker_compose.directories.services }}repository/"
|
||||||
|
```
|
||||||
|
|
||||||
## Author
|
## Author
|
||||||
|
|
||||||
Kevin Veen-Birkenbach
|
Kevin Veen-Birkenbach
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
- name: Set default docker_repository_path
|
- name: Set default docker_repository_path if not defined
|
||||||
set_fact:
|
set_fact:
|
||||||
docker_repository_path: "{{docker_compose.directories.services}}repository/"
|
docker_repository_path: "{{docker_compose.directories.services}}repository/"
|
||||||
|
when: docker_repository_path is not defined
|
||||||
|
|
||||||
- name: pull docker repository
|
- name: pull docker repository
|
||||||
git:
|
git:
|
||||||
|
@ -45,38 +45,12 @@ HINT:
|
|||||||
|
|
||||||
/* Bootstrap Overrides (Color/Shadow Variables Only) */
|
/* Bootstrap Overrides (Color/Shadow Variables Only) */
|
||||||
:root {
|
:root {
|
||||||
--bs-black: var(--color-01); /* Original tone: Black (#000) */
|
--bs-primary: var(--color-50);
|
||||||
--bs-white: var(--color-99); /* Original tone: White (#fff) */
|
--bs-secondary: var(--color-65);
|
||||||
--bs-gray: var(--color-50); /* Original tone: Gray (#6c757d) */
|
--bs-body-bg: var(--color-90);
|
||||||
--bs-gray-dark: var(--color-20); /* Original tone: Dark Gray (#343a40) */
|
--bs-body-color: var(--color-40);
|
||||||
--bs-gray-100: var(--color-95); /* Original tone: Very Light Gray (#f8f9fa) */
|
--bs-link-color: var(--color-50);
|
||||||
--bs-gray-200: var(--color-90); /* Original tone: Lighter Gray (#e9ecef) */
|
--bs-btn-color: var(--color-40);
|
||||||
--bs-gray-300: var(--color-85); /* Original tone: Light Gray (#dee2e6) */
|
|
||||||
--bs-gray-400: var(--color-80); /* Original tone: Gray (#ced4da) */
|
|
||||||
--bs-gray-500: var(--color-70); /* Original tone: Medium Gray (#adb5bd) */
|
|
||||||
--bs-gray-600: var(--color-50); /* Original tone: Gray (#6c757d) */
|
|
||||||
--bs-gray-700: var(--color-40); /* Original tone: Darker Gray (#495057) */
|
|
||||||
--bs-gray-800: var(--color-20); /* Original tone: Dark Gray (#343a40) */
|
|
||||||
--bs-gray-900: var(--color-10); /* Original tone: Very Dark Gray (#212529) */
|
|
||||||
--bs-primary: var(--color-65); /* Original tone: Blue (#0d6efd) */
|
|
||||||
--bs-light: var(--color-95); /* Original tone: Light (#f8f9fa) */
|
|
||||||
--bs-dark: var(--color-10); /* Original tone: Dark (#212529) */
|
|
||||||
--bs-primary-rgb: var(--color-rgb-65); /* Original tone: Blue (13, 110, 253) */
|
|
||||||
--bs-secondary-rgb: var(--color-rgb-50); /* Original tone: Grayish (#6c757d / 108, 117, 125) */
|
|
||||||
--bs-light-rgb: var(--color-rgb-95); /* Original tone: Light (248, 249, 250) */
|
|
||||||
--bs-dark-rgb: var(--color-rgb-10); /* Original tone: Dark (33, 37, 41) */
|
|
||||||
--bs-white-rgb: var(--color-rgb-99); /* Original tone: White (255, 255, 255) */
|
|
||||||
--bs-black-rgb: var(--color-rgb-01); /* Original tone: Black (0, 0, 0) */
|
|
||||||
--bs-body-color-rgb: var(--color-rgb-10); /* Original tone: Dark (#212529 / 33, 37, 41) */
|
|
||||||
--bs-body-bg-rgb: var(--color-rgb-99); /* Original tone: White (#fff / 255, 255, 255) */
|
|
||||||
--bs-body-color: var(--color-10); /* Original tone: Dark (#212529) */
|
|
||||||
--bs-body-bg: var(--color-99); /* Original tone: White (#fff) */
|
|
||||||
--bs-border-color: var(--color-85); /* Original tone: Gray (#dee2e6) */
|
|
||||||
--bs-link-color: var(--color-65); /* Original tone: Blue (#0d6efd) */
|
|
||||||
--bs-link-hover-color: var(--color-60); /* Original tone: Darker Blue (#0a58ca) */
|
|
||||||
--bs-code-color: var(--color-55); /* Original tone: Pink (#d63384) */
|
|
||||||
--bs-highlight-bg: var(--color-93); /* Original tone: Light Yellow (#fff3cd) */
|
|
||||||
--bs-list-group-bg: var(--color-40);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Discourse */
|
/* Discourse */
|
||||||
@ -188,6 +162,110 @@ HINT:
|
|||||||
--float-kit-arrow-fill-color: var(--secondary); /* already mapped above */
|
--float-kit-arrow-fill-color: var(--secondary); /* already mapped above */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Keycloak */
|
||||||
|
:root{
|
||||||
|
/* --- Palette Black (Graustufen) --- */
|
||||||
|
--pf-v5-global--palette--black-100: var(--color-95); /* #fafafa */
|
||||||
|
--pf-v5-global--palette--black-150: var(--color-90); /* #f5f5f5 */
|
||||||
|
--pf-v5-global--palette--black-200: var(--color-85); /* #f0f0f0 */
|
||||||
|
--pf-v5-global--palette--black-300: var(--color-75); /* #d2d2d2 */
|
||||||
|
--pf-v5-global--palette--black-400: var(--color-65); /* #b8bbbe */
|
||||||
|
--pf-v5-global--palette--black-500: var(--color-50); /* #8a8d90 */
|
||||||
|
--pf-v5-global--palette--black-600: var(--color-40); /* #6a6e73 */
|
||||||
|
--pf-v5-global--palette--black-700: var(--color-30); /* #4f5255 */
|
||||||
|
--pf-v5-global--palette--black-800: var(--color-25); /* #3c3f42 */
|
||||||
|
--pf-v5-global--palette--black-850: var(--color-20); /* #212427 */
|
||||||
|
--pf-v5-global--palette--black-900: var(--color-10); /* #151515 */
|
||||||
|
--pf-v5-global--palette--black-1000: var(--color-05); /* #030303 */
|
||||||
|
|
||||||
|
/* --- White --- */
|
||||||
|
--pf-v5-global--palette--white: var(--color-99);
|
||||||
|
|
||||||
|
/* --- Background Colors --- */
|
||||||
|
--pf-v5-global--BackgroundColor--100: var(--color-99);
|
||||||
|
--pf-v5-global--BackgroundColor--150: var(--color-95);
|
||||||
|
--pf-v5-global--BackgroundColor--200: var(--color-85);
|
||||||
|
--pf-v5-global--BackgroundColor--300: var(--color-75);
|
||||||
|
--pf-v5-global--BackgroundColor--400: var(--color-65);
|
||||||
|
--pf-v5-global--BackgroundColor--light-100: var(--color-99);
|
||||||
|
--pf-v5-global--BackgroundColor--light-200: var(--color-95);
|
||||||
|
--pf-v5-global--BackgroundColor--light-300: var(--color-85);
|
||||||
|
--pf-v5-global--BackgroundColor--dark-100: var(--color-10);
|
||||||
|
--pf-v5-global--BackgroundColor--dark-200: var(--color-25);
|
||||||
|
--pf-v5-global--BackgroundColor--dark-300: var(--color-20);
|
||||||
|
--pf-v5-global--BackgroundColor--dark-400: var(--color-30);
|
||||||
|
--pf-v5-global--BackgroundColor--dark-transparent-100: var(--color-05);
|
||||||
|
--pf-v5-global--BackgroundColor--dark-transparent-200: var(--color-05);
|
||||||
|
|
||||||
|
/* --- Color Variables --- */
|
||||||
|
--pf-v5-global--Color--100: var(--color-10);
|
||||||
|
--pf-v5-global--Color--200: var(--color-40);
|
||||||
|
--pf-v5-global--Color--300: var(--color-25);
|
||||||
|
--pf-v5-global--Color--400: var(--color-50);
|
||||||
|
--pf-v5-global--Color--light-100: var(--color-99);
|
||||||
|
--pf-v5-global--Color--light-200: var(--color-85);
|
||||||
|
--pf-v5-global--Color--light-300: var(--color-75);
|
||||||
|
--pf-v5-global--Color--dark-100: var(--color-10);
|
||||||
|
--pf-v5-global--Color--dark-200: var(--color-40);
|
||||||
|
|
||||||
|
/* --- Active Colors --- */
|
||||||
|
--pf-v5-global--active-color--100: var(--color-65);
|
||||||
|
--pf-v5-global--active-color--200: var(--color-95);
|
||||||
|
--pf-v5-global--active-color--300: var(--color-75);
|
||||||
|
--pf-v5-global--active-color--400: var(--color-85);
|
||||||
|
|
||||||
|
/* --- Disabled Colors --- */
|
||||||
|
--pf-v5-global--disabled-color--100: var(--color-40);
|
||||||
|
--pf-v5-global--disabled-color--200: var(--color-75);
|
||||||
|
--pf-v5-global--disabled-color--300: var(--color-85);
|
||||||
|
|
||||||
|
/* --- Primary Colors --- */
|
||||||
|
--pf-v5-global--primary-color--100: var(--color-65);
|
||||||
|
--pf-v5-global--primary-color--200: var(--color-40);
|
||||||
|
--pf-v5-global--primary-color--light-100: var(--color-75);
|
||||||
|
--pf-v5-global--primary-color--dark-100: var(--color-65);
|
||||||
|
|
||||||
|
/* --- Secondary Colors --- */
|
||||||
|
--pf-v5-global--secondary-color--100: var(--color-40);
|
||||||
|
|
||||||
|
/* --- Custom Colors --- */
|
||||||
|
--pf-v5-global--custom-color--100: var(--color-65);
|
||||||
|
--pf-v5-global--custom-color--200: var(--color-65);
|
||||||
|
--pf-v5-global--custom-color--300: var(--color-30);
|
||||||
|
|
||||||
|
/* --- Link Colors --- */
|
||||||
|
--pf-v5-global--link--Color: var(--color-65);
|
||||||
|
--pf-v5-global--link--Color--hover: var(--color-40);
|
||||||
|
--pf-v5-global--link--Color--light: var(--color-75);
|
||||||
|
--pf-v5-global--link--Color--light--hover: var(--color-85);
|
||||||
|
--pf-v5-global--link--Color--dark: var(--color-65);
|
||||||
|
--pf-v5-global--link--Color--dark--hover: var(--color-40);
|
||||||
|
--pf-v5-global--link--Color--visited: var(--color-40);
|
||||||
|
|
||||||
|
/* --- Border Colors --- */
|
||||||
|
--pf-v5-global--BorderColor--100: var(--color-75);
|
||||||
|
--pf-v5-global--BorderColor--200: var(--color-50);
|
||||||
|
--pf-v5-global--BorderColor--300: var(--color-85);
|
||||||
|
--pf-v5-global--BorderColor--400: var(--color-65);
|
||||||
|
--pf-v5-global--BorderColor--dark-100: var(--color-75);
|
||||||
|
--pf-v5-global--BorderColor--light-100: var(--color-65);
|
||||||
|
|
||||||
|
/* --- Icon Colors --- */
|
||||||
|
--pf-v5-global--icon--Color--light: var(--color-40);
|
||||||
|
--pf-v5-global--icon--Color--dark: var(--color-10);
|
||||||
|
--pf-v5-global--icon--Color--light--light: var(--color-85);
|
||||||
|
--pf-v5-global--icon--Color--dark--light: var(--color-99);
|
||||||
|
--pf-v5-global--icon--Color--light--dark: var(--color-40);
|
||||||
|
--pf-v5-global--icon--Color--dark--dark: var(--color-10);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Additional Keykloak Configuration */
|
||||||
|
a.pf-v5-c-nav__link{
|
||||||
|
--pf-v5-c-nav__link--BackgroundColor: rgba(var(--color-rgb-56), 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
/* gitea */
|
/* gitea */
|
||||||
:root {
|
:root {
|
||||||
/* Base and derived colors are now referenced from the computed scale */
|
/* Base and derived colors are now referenced from the computed scale */
|
||||||
@ -339,129 +417,6 @@ HINT:
|
|||||||
--color-overlay-backdrop: var(--color-05);
|
--color-overlay-backdrop: var(--color-05);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Keycloak */
|
|
||||||
:root{
|
|
||||||
/* --- Palette Black (Graustufen) --- */
|
|
||||||
--pf-v5-global--palette--black-100: var(--color-95); /* #fafafa */
|
|
||||||
--pf-v5-global--palette--black-150: var(--color-90); /* #f5f5f5 */
|
|
||||||
--pf-v5-global--palette--black-200: var(--color-85); /* #f0f0f0 */
|
|
||||||
--pf-v5-global--palette--black-300: var(--color-75); /* #d2d2d2 */
|
|
||||||
--pf-v5-global--palette--black-400: var(--color-65); /* #b8bbbe */
|
|
||||||
--pf-v5-global--palette--black-500: var(--color-50); /* #8a8d90 */
|
|
||||||
--pf-v5-global--palette--black-600: var(--color-40); /* #6a6e73 */
|
|
||||||
--pf-v5-global--palette--black-700: var(--color-30); /* #4f5255 */
|
|
||||||
--pf-v5-global--palette--black-800: var(--color-25); /* #3c3f42 */
|
|
||||||
--pf-v5-global--palette--black-850: var(--color-20); /* #212427 */
|
|
||||||
--pf-v5-global--palette--black-900: var(--color-10); /* #151515 */
|
|
||||||
--pf-v5-global--palette--black-1000: var(--color-05); /* #030303 */
|
|
||||||
|
|
||||||
/* --- White --- */
|
|
||||||
--pf-v5-global--palette--white: var(--color-99);
|
|
||||||
|
|
||||||
/* --- Background Colors --- */
|
|
||||||
--pf-v5-global--BackgroundColor--100: var(--color-99);
|
|
||||||
--pf-v5-global--BackgroundColor--150: var(--color-95);
|
|
||||||
--pf-v5-global--BackgroundColor--200: var(--color-85);
|
|
||||||
--pf-v5-global--BackgroundColor--300: var(--color-75);
|
|
||||||
--pf-v5-global--BackgroundColor--400: var(--color-65);
|
|
||||||
--pf-v5-global--BackgroundColor--light-100: var(--color-99);
|
|
||||||
--pf-v5-global--BackgroundColor--light-200: var(--color-95);
|
|
||||||
--pf-v5-global--BackgroundColor--light-300: var(--color-85);
|
|
||||||
--pf-v5-global--BackgroundColor--dark-100: var(--color-10);
|
|
||||||
--pf-v5-global--BackgroundColor--dark-200: var(--color-25);
|
|
||||||
--pf-v5-global--BackgroundColor--dark-300: var(--color-20);
|
|
||||||
--pf-v5-global--BackgroundColor--dark-400: var(--color-30);
|
|
||||||
--pf-v5-global--BackgroundColor--dark-transparent-100: var(--color-05);
|
|
||||||
--pf-v5-global--BackgroundColor--dark-transparent-200: var(--color-05);
|
|
||||||
|
|
||||||
/* --- Color Variables --- */
|
|
||||||
--pf-v5-global--Color--100: var(--color-10);
|
|
||||||
--pf-v5-global--Color--200: var(--color-40);
|
|
||||||
--pf-v5-global--Color--300: var(--color-25);
|
|
||||||
--pf-v5-global--Color--400: var(--color-50);
|
|
||||||
--pf-v5-global--Color--light-100: var(--color-99);
|
|
||||||
--pf-v5-global--Color--light-200: var(--color-85);
|
|
||||||
--pf-v5-global--Color--light-300: var(--color-75);
|
|
||||||
--pf-v5-global--Color--dark-100: var(--color-10);
|
|
||||||
--pf-v5-global--Color--dark-200: var(--color-40);
|
|
||||||
|
|
||||||
/* --- Active Colors --- */
|
|
||||||
--pf-v5-global--active-color--100: var(--color-65);
|
|
||||||
--pf-v5-global--active-color--200: var(--color-95);
|
|
||||||
--pf-v5-global--active-color--300: var(--color-75);
|
|
||||||
--pf-v5-global--active-color--400: var(--color-85);
|
|
||||||
|
|
||||||
/* --- Disabled Colors --- */
|
|
||||||
--pf-v5-global--disabled-color--100: var(--color-40);
|
|
||||||
--pf-v5-global--disabled-color--200: var(--color-75);
|
|
||||||
--pf-v5-global--disabled-color--300: var(--color-85);
|
|
||||||
|
|
||||||
/* --- Primary Colors --- */
|
|
||||||
--pf-v5-global--primary-color--100: var(--color-65);
|
|
||||||
--pf-v5-global--primary-color--200: var(--color-40);
|
|
||||||
--pf-v5-global--primary-color--light-100: var(--color-75);
|
|
||||||
--pf-v5-global--primary-color--dark-100: var(--color-65);
|
|
||||||
|
|
||||||
/* --- Secondary Colors --- */
|
|
||||||
--pf-v5-global--secondary-color--100: var(--color-40);
|
|
||||||
|
|
||||||
/* --- Custom Colors --- */
|
|
||||||
--pf-v5-global--custom-color--100: var(--color-65);
|
|
||||||
--pf-v5-global--custom-color--200: var(--color-65);
|
|
||||||
--pf-v5-global--custom-color--300: var(--color-30);
|
|
||||||
|
|
||||||
/* --- Link Colors --- */
|
|
||||||
--pf-v5-global--link--Color: var(--color-65);
|
|
||||||
--pf-v5-global--link--Color--hover: var(--color-40);
|
|
||||||
--pf-v5-global--link--Color--light: var(--color-75);
|
|
||||||
--pf-v5-global--link--Color--light--hover: var(--color-85);
|
|
||||||
--pf-v5-global--link--Color--dark: var(--color-65);
|
|
||||||
--pf-v5-global--link--Color--dark--hover: var(--color-40);
|
|
||||||
--pf-v5-global--link--Color--visited: var(--color-40);
|
|
||||||
|
|
||||||
/* --- Border Colors --- */
|
|
||||||
--pf-v5-global--BorderColor--100: var(--color-75);
|
|
||||||
--pf-v5-global--BorderColor--200: var(--color-50);
|
|
||||||
--pf-v5-global--BorderColor--300: var(--color-85);
|
|
||||||
--pf-v5-global--BorderColor--400: var(--color-65);
|
|
||||||
--pf-v5-global--BorderColor--dark-100: var(--color-75);
|
|
||||||
--pf-v5-global--BorderColor--light-100: var(--color-65);
|
|
||||||
|
|
||||||
/* --- Icon Colors --- */
|
|
||||||
--pf-v5-global--icon--Color--light: var(--color-40);
|
|
||||||
--pf-v5-global--icon--Color--dark: var(--color-10);
|
|
||||||
--pf-v5-global--icon--Color--light--light: var(--color-85);
|
|
||||||
--pf-v5-global--icon--Color--dark--light: var(--color-99);
|
|
||||||
--pf-v5-global--icon--Color--light--dark: var(--color-40);
|
|
||||||
--pf-v5-global--icon--Color--dark--dark: var(--color-10);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Additional Keykloak Configuration */
|
|
||||||
a.pf-v5-c-nav__link{
|
|
||||||
--pf-v5-c-nav__link--BackgroundColor: rgba(var(--color-rgb-56), 0.4);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* LAM */
|
|
||||||
:root {
|
|
||||||
--lam-background-color-default: var(--color-99); {# from #FFFFFF (very bright white) #}
|
|
||||||
--lam-input-bg-color: var(--color-98); {# from #fcfcfc (almost white) #}
|
|
||||||
--lam-text-color-default: var(--color-01); {# from #000000 (pure black) #}
|
|
||||||
--lam-border-color: var(--color-90); {# from #e8e8e8 (light grey) #}
|
|
||||||
--lam-border-color-primary: var(--color-15); {# from #01689e (dark blue) #}
|
|
||||||
--lam-border-color-secondary: var(--color-85); {# from #ffcb1d (bright yellow) #}
|
|
||||||
--lam-background-color-primary: var(--color-50); {# from #3daee9 (mid-tone blue) #}
|
|
||||||
--lam-background-color-secondary: var(--color-90); {# from #ffe233 (bright yellow) #}
|
|
||||||
--lam-text-color-primary: var(--color-99); {# from #ffffff (pure white) #}
|
|
||||||
--lam-text-color-secondary: var(--color-01); {# from #000000 (pure black) #}
|
|
||||||
--lam-text-color-ok: var(--color-10); {# from #237d0c (dark green) #}
|
|
||||||
--lam-table-background-color-bright: var(--color-98); {# from #fbfbfb (very light grey) #}
|
|
||||||
--lam-table-background-color-dark: var(--color-92); {# from #e8f3ff (light blue) #}
|
|
||||||
--lam-table-background-color-hover: var(--color-50); {# from #3daee9 (mid-tone blue) #}
|
|
||||||
--lam-table-text-color-hover: var(--color-99); {# from #ffffff (pure white) #}
|
|
||||||
--lam-table-border-color: var(--color-50); {# from #3daee9 (mid-tone blue) #}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Mastodon Overrides **/
|
/** Mastodon Overrides **/
|
||||||
div#mastodon, div#admin-wrapper {
|
div#mastodon, div#admin-wrapper {
|
||||||
/* Dropdown */
|
/* Dropdown */
|
||||||
@ -561,42 +516,21 @@ div.modal div.modal-content {
|
|||||||
/* Global Defaults (Colors Only) */
|
/* Global Defaults (Colors Only) */
|
||||||
body, html[native-dark-active] {
|
body, html[native-dark-active] {
|
||||||
background-color: var(--color-93);
|
background-color: var(--color-93);
|
||||||
background: linear-gradient(45deg, var(--color-93), var(--color-91), var(--color-95), var(--color-93));
|
background-image: none;
|
||||||
color: var(--color-40);
|
color: var(--color-40);
|
||||||
/* Use the corporate-design font family */
|
/* Use the corporate-design font family */
|
||||||
font-family: "Liberation Sans", Arial, sans-serif;
|
font-family: "Liberation Sans", Arial, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
{# All links (applies to all anchor elements regardless of state) #}
|
/* Links (Color Only) */
|
||||||
a {
|
a {
|
||||||
color: var(--color-50);
|
color: var(--color-50);
|
||||||
}
|
}
|
||||||
|
|
||||||
{# Unvisited links (applies only to links that have not been visited) #}
|
|
||||||
a:link {
|
|
||||||
color: var(--color-55);
|
|
||||||
}
|
|
||||||
|
|
||||||
{# Visited links (applies only to links that have been visited) #}
|
|
||||||
a:visited {
|
|
||||||
color: var(--color-45);
|
|
||||||
}
|
|
||||||
|
|
||||||
{# Hover state (applies when the mouse pointer is over the link) #}
|
|
||||||
a:hover {
|
|
||||||
color: var(--color-60);
|
|
||||||
}
|
|
||||||
|
|
||||||
{# Active state (applies during the time the link is being activated, e.g., on click) #}
|
|
||||||
a:active {
|
|
||||||
color: var(--color-65);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Buttons (Background, Text, Border, and Shadow)
|
/* Buttons (Background, Text, Border, and Shadow)
|
||||||
Now using a button background that is only slightly darker than the overall background */
|
Now using a button background that is only slightly darker than the overall background */
|
||||||
html[native-dark-active] button, html[native-dark-active] .btn, button, .btn {
|
html[native-dark-active] button, html[native-dark-active] .btn, button, .btn {
|
||||||
background-color: var(--color-87);
|
background-color: var(--color-87);
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-70), var(--color-91), var(--color-95), var(--color-95));
|
|
||||||
color: var(--color-50);
|
color: var(--color-50);
|
||||||
border-color: var(--color-80);
|
border-color: var(--color-80);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@ -606,271 +540,100 @@ button:hover, .btn:hover {
|
|||||||
filter: brightness(0.9);
|
filter: brightness(0.9);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* {# Invalid state: when the input value fails validation criteria. Use danger color for error indication. #} */
|
/* Inputs & Forms in Light Mode (Using a Light Tone from the Corporate Design) */
|
||||||
input:invalid,
|
input, textarea, select {
|
||||||
textarea:invalid,
|
background-color: var(--color-82); /* Instead of var(--color-90) */
|
||||||
select:invalid {
|
color: var(--color-40);
|
||||||
background-color: var(--color-01);
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-01), var(--color-10));
|
|
||||||
/* Use Bootstrap danger color for error messages */
|
|
||||||
color: var(--bs-danger);
|
|
||||||
border-color: var(--color-20);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* {# Valid state: when the input value meets all validation criteria. Use success color for confirmation. #} */
|
|
||||||
input:valid,
|
|
||||||
textarea:valid,
|
|
||||||
select:valid {
|
|
||||||
background-color: var(--color-80);
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-80), var(--color-90));
|
|
||||||
/* Use Bootstrap success color for confirmation messages */
|
|
||||||
color: var(--bs-success);
|
|
||||||
border-color: var(--color-70);
|
border-color: var(--color-70);
|
||||||
}
|
}
|
||||||
|
input:focus, textarea:focus, select:focus {
|
||||||
/* {# Required field: applied to elements that must be filled out by the user. Use warning color for emphasis. #} */
|
|
||||||
input:required,
|
|
||||||
textarea:required,
|
|
||||||
select:required {
|
|
||||||
background-color: var(--color-50);
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-50), var(--color-60));
|
|
||||||
/* Use Bootstrap warning color to indicate a required field */
|
|
||||||
color: var(--bs-warning);
|
|
||||||
border-color: var(--color-70);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* {# Optional field: applied to elements that are not mandatory. Use info color to denote additional information. #} */
|
|
||||||
input:optional,
|
|
||||||
textarea:optional,
|
|
||||||
select:optional {
|
|
||||||
background-color: var(--color-60);
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-60), var(--color-70));
|
|
||||||
/* Use Bootstrap info color to indicate optional information */
|
|
||||||
color: var(--bs-info);
|
|
||||||
border-color: var(--color-70);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* {# Read-only state: when an element is not editable by the user. #} */
|
|
||||||
input:read-only,
|
|
||||||
textarea:read-only,
|
|
||||||
select:read-only {
|
|
||||||
background-color: var(--color-80);
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-90), var(--color-70));
|
|
||||||
color: var(--color-20);
|
|
||||||
border-color: var(--color-50);
|
border-color: var(--color-50);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* {# Read-write state: when an element is editable by the user. #} */
|
|
||||||
input:read-write,
|
|
||||||
textarea:read-write,
|
|
||||||
select:read-write {
|
|
||||||
background-color: var(--color-70);
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-70), var(--color-80));
|
|
||||||
color: var(--color-40);
|
|
||||||
border-color: var(--color-70);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* {# In-range: for inputs with a defined range, when the value is within the allowed limits. #} */
|
|
||||||
input:in-range,
|
|
||||||
textarea:in-range,
|
|
||||||
select:in-range {
|
|
||||||
background-color: var(--color-70);
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-70), var(--color-85));
|
|
||||||
color: var(--color-40);
|
|
||||||
border-color: var(--color-70);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* {# Out-of-range: for inputs with a defined range, when the value falls outside the allowed limits. #} */
|
|
||||||
input:out-of-range,
|
|
||||||
textarea:out-of-range,
|
|
||||||
select:out-of-range {
|
|
||||||
background-color: var(--color-10);
|
|
||||||
background: linear-gradient(45deg, var(--color-10), var(--color-30));
|
|
||||||
color: var(--color-10);
|
|
||||||
border-color: var(--color-50);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* {# Placeholder-shown: when the input field is displaying its placeholder text. #} */
|
|
||||||
input:placeholder-shown,
|
|
||||||
textarea:placeholder-shown,
|
|
||||||
select:placeholder-shown {
|
|
||||||
background-color: var(--color-82);
|
|
||||||
background: linear-gradient(45deg, var(--color-82), var(--color-90));
|
|
||||||
color: var(--color-40);
|
|
||||||
border-color: var(--color-70);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* {# Focus state: when the element is focused by the user. #} */
|
|
||||||
input:focus,
|
|
||||||
textarea:focus,
|
|
||||||
select:focus {
|
|
||||||
background-color: var(--color-75);
|
|
||||||
background: linear-gradient(45deg, var(--color-75), var(--color-85));
|
|
||||||
color: var(--color-40);
|
|
||||||
border-color: var(--color-50);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* {# Hover state: when the mouse pointer is over the element. #} */
|
|
||||||
input:hover,
|
|
||||||
textarea:hover,
|
|
||||||
select:hover {
|
|
||||||
background-color: var(--color-78);
|
|
||||||
background: linear-gradient(45deg, var(--color-78), var(--color-88));
|
|
||||||
color: var(--color-40);
|
|
||||||
border-color: var(--color-65);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* {# Active state: when the element is being activated (e.g., clicked). #} */
|
|
||||||
input:active,
|
|
||||||
textarea:active,
|
|
||||||
select:active {
|
|
||||||
background-color: var(--color-68);
|
|
||||||
background: linear-gradient(45deg, var(--color-68), var(--color-78));
|
|
||||||
color: var(--color-40);
|
|
||||||
border-color: var(--color-60);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* {# Checked state: specifically for radio buttons and checkboxes when selected. #} */
|
|
||||||
input:checked {
|
|
||||||
background-color: var(--color-90);
|
|
||||||
background: linear-gradient(45deg, var(--color-90), var(--color-99));
|
|
||||||
color: var(--color-40);
|
|
||||||
border-color: var(--color-70);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Tables (Borders and Header Colors) */
|
/* Tables (Borders and Header Colors) */
|
||||||
th, td {
|
th, td {
|
||||||
border-color: var(--color-70);
|
border-color: var(--color-70) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
thead {
|
thead {
|
||||||
background-color: var(--color-80);
|
background-color: var(--color-80) !important;
|
||||||
/* New Gradient based on original background (80 -5, 80, 80 +1, 80 +5) */
|
color: var(--color-40) !important;
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-75), var(--color-80), var(--color-81), var(--color-85));
|
|
||||||
color: var(--color-40);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Headings (Text Color) */
|
/* Headings (Text Color) */
|
||||||
h1, h2, h3, h4, h5, h6, p{
|
h1, h2, h3, h4, h5, h6, p{
|
||||||
color: var(--color-10);
|
color: var(--color-10) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Navigation (Background and Text Colors) */
|
/* Navigation (Background and Text Colors) */
|
||||||
.navbar, .navbar-light, .navbar-dark {
|
.navbar, .navbar-light, .navbar-dark {
|
||||||
background-color: var(--color-90);
|
background-color: var(--color-90) !important;
|
||||||
/* New Gradient based on original background (90 -5, 90, 90 +1, 90 +5) */
|
color: var(--color-50) !important;
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-85), var(--color-90), var(--color-91), var(--color-95));
|
border-color: var(--color-85) !important;
|
||||||
color: var(--color-50);
|
|
||||||
border-color: var(--color-85);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar a {
|
.navbar a {
|
||||||
color: var(--color-40);
|
color: var(--color-40) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar a.dropdown-item {
|
.navbar a.dropdown-item {
|
||||||
color: var(--color-43);
|
color: var(--color-40) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cards / Containers (Background, Border, and Shadow)
|
/* Cards / Containers (Background, Border, and Shadow)
|
||||||
Cards now use a slightly lighter background and a bold, clear shadow */
|
Cards now use a slightly lighter background and a bold, clear shadow */
|
||||||
.card {
|
.card {
|
||||||
background-color: var(--color-90);
|
background-color: var(--color-90) !important;
|
||||||
/* New Gradient based on original background (90 -5, 90, 90 +1, 90 +5) */
|
border-color: var(--color-85) !important;
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-85), var(--color-90), var(--color-91), var(--color-95));
|
|
||||||
border-color: var(--color-85);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-body {
|
.card-body {
|
||||||
color: var(--color-40);
|
color: var(--color-40) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dropdown Menu and Submenu (Background, Text, and Shadow) */
|
/* Dropdown Menu and Submenu (Background, Text, and Shadow) */
|
||||||
.navbar .dropdown-menu,
|
.navbar .dropdown-menu,
|
||||||
.nav-item .dropdown-menu {
|
.nav-item .dropdown-menu {
|
||||||
background-color: var(--color-80);
|
background-color: var(--color-80) !important;
|
||||||
/* New Gradient based on original background (80 -5, 80, 80 +1, 80 +5) */
|
color: var(--color-40) !important;
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-75), var(--color-80), var(--color-81), var(--color-85));
|
|
||||||
color: var(--color-40);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-item {
|
.dropdown-item {
|
||||||
color: var(--color-40);
|
color: var(--color-40) !important;
|
||||||
background-color: var(--color-80);
|
background-color: var(--color-80) !important;
|
||||||
/* New Gradient based on original background (80 -5, 80, 80 +1, 80 +5) */
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-75), var(--color-80), var(--color-81), var(--color-85));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-item:hover,
|
.dropdown-item:hover,
|
||||||
.dropdown-item:focus {
|
.dropdown-item:focus {
|
||||||
background-color: var(--color-65);
|
background-color: var(--color-65) !important;
|
||||||
/* New Gradient based on original background (65 -5, 65, 65 +1, 65 +5) */
|
color: var(--color-40) !important;
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-60), var(--color-65), var(--color-66), var(--color-70));
|
|
||||||
color: var(--color-40);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Keycloak Header */
|
/* Keycloak Header */
|
||||||
div#app header, div#app header *{
|
div#app header, div#app header *{
|
||||||
background-color: var(--color-60);
|
background-color: var(--color-60) !important;
|
||||||
/* New Gradient based on original background (60 -5, 60, 60 +1, 60 +5) */
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-55), var(--color-60), var(--color-61), var(--color-65));
|
|
||||||
color: var(--color-98);
|
color: var(--color-98);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** LAM Specific **/
|
/** LAM Specific **/
|
||||||
.lam-vertical-tabs-navigation li, .lam-vertical-tabs-navigation{
|
.lam-vertical-tabs-navigation li, .lam-vertical-tabs-navigation{
|
||||||
background-color: transparent;
|
background-color: transparent !important;
|
||||||
/* New Gradient with transparent values */
|
border-color: transparent !important;
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, transparent, transparent, transparent, transparent);
|
|
||||||
border-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Not changable due to inline css */
|
|
||||||
.roundedShadowBox {
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.titleBar {
|
|
||||||
background-image: linear-gradient(var(--color-83), var(--color-92));
|
|
||||||
/* New Gradient based on original background (83 -5, 83, 83 +1, 83 +5) */
|
|
||||||
background-image: linear-gradient({{ range(0, 361) | random }}deg, var(--color-78), var(--color-83), var(--color-84), var(--color-88));
|
|
||||||
border-top-color: var(--color-78);
|
|
||||||
border-left-color: var(--color-87);
|
|
||||||
border-right-color: var(--color-87);
|
|
||||||
}
|
|
||||||
|
|
||||||
div.statusInfo {
|
|
||||||
background-color: var(--color-81);
|
|
||||||
/* New Gradient based on original background (81 -5, 81, 81 +1, 81 +5) */
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-76), var(--color-81), var(--color-82), var(--color-86));
|
|
||||||
color: var(--color-23);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Mailu **/
|
/** Mailu **/
|
||||||
[class*=sidebar-dark-], .bg-mailu-logo {
|
[class*=sidebar-dark-], .bg-mailu-logo {
|
||||||
background-color: var(--color-90);
|
background-color: var(--color-90) !important;
|
||||||
/* New Gradient based on original background (90 -5, 90, 90 +1, 90 +5) */
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-85), var(--color-90), var(--color-91), var(--color-95));
|
|
||||||
}
|
|
||||||
|
|
||||||
div.statusError {
|
|
||||||
background-color: var(--color-60);
|
|
||||||
/* New Gradient based on original background (60 -5, 60, 60 +1, 60 +5) */
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-55), var(--color-60), var(--color-61), var(--color-65));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Nextcloud specific **/
|
/** Nextcloud specific **/
|
||||||
html.ng-csp header#header{
|
html.ng-csp header#header{
|
||||||
background-color: var(--color-80);
|
color: var(--color-90) !important;
|
||||||
/* New Gradient based on original background (80 -5, 80, 80 +1, 80 +5) */
|
background-color: var(--color-80) !important;
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-75), var(--color-80), var(--color-81), var(--color-85));
|
|
||||||
color: var(--color-90);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
html.ng-csp div#postsetupchecks ul.info{
|
html.ng-csp div#postsetupchecks ul.info{
|
||||||
background-color: transparent;
|
background-color: transparent !important;
|
||||||
/* New Gradient with transparent values */
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, transparent, transparent, transparent, transparent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
div#mastodon .column-link{
|
div#mastodon .column-link{
|
||||||
@ -883,8 +646,6 @@ div#mastodon .column-back-button {
|
|||||||
|
|
||||||
div#mastodon textarea, div#mastodon input, div#mastodon .compose-form__highlightable {
|
div#mastodon textarea, div#mastodon input, div#mastodon .compose-form__highlightable {
|
||||||
background-color: var(--color-89);
|
background-color: var(--color-89);
|
||||||
/* New Gradient based on original background (89 -5, 89, 89 +1, 89 +5) */
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-84), var(--color-89), var(--color-90), var(--color-94));
|
|
||||||
color: var(--color-19);
|
color: var(--color-19);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -901,8 +662,6 @@ div#mastodon .dropdown-button{
|
|||||||
|
|
||||||
div#mastodon .button, div#mastodon .button:active, div#mastodon .button:focus, div#mastodon .button:hover{
|
div#mastodon .button, div#mastodon .button:active, div#mastodon .button:focus, div#mastodon .button:hover{
|
||||||
background-color: var(--color-71);
|
background-color: var(--color-71);
|
||||||
/* New Gradient based on original background (71 -5, 71, 71 +1, 71 +5) */
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-66), var(--color-71), var(--color-72), var(--color-76));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.compose-form__actions .icon-button {
|
.compose-form__actions .icon-button {
|
||||||
@ -911,61 +670,37 @@ div#mastodon .button, div#mastodon .button:active, div#mastodon .button:focus, d
|
|||||||
|
|
||||||
/** OpenProject **/
|
/** OpenProject **/
|
||||||
header.op-app-header{
|
header.op-app-header{
|
||||||
background-color: var(--color-40);
|
background-color: var(--color-40) !important;
|
||||||
/* New Gradient based on original background (40 -5, 40, 40 +1, 40 +5) */
|
color: var(--color-40) !important;
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-35), var(--color-40), var(--color-41), var(--color-45));
|
|
||||||
color: var(--color-40);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Open Project **/
|
/** Open Project **/
|
||||||
div#wrapper button, div#wrapper input, button.top-menu-search-button, div.menu-sidebar a{
|
div#wrapper button, div#wrapper input, button.top-menu-search-button, div.menu-sidebar a{
|
||||||
background-color: transparent;
|
background-color: transparent !important;
|
||||||
/* New Gradient with transparent values */
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, transparent, transparent, transparent, transparent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Peertube specific configuration */
|
/* Peertube specific configuration */
|
||||||
.peertube-container button {
|
.peertube-container button {
|
||||||
background-color: transparent;
|
background-color: transparent !important;
|
||||||
/* New Gradient with transparent values */
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, transparent, transparent, transparent, transparent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Pixelfed */
|
/* Pixelfed */
|
||||||
div.page-wrapper{
|
div.page-wrapper{
|
||||||
background: none;
|
background: none !important;
|
||||||
background-color: none;
|
background-color: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Taiga specific configuration **/
|
/** Taiga specific configuration **/
|
||||||
|
|
||||||
section.main.kanban{
|
section.main.kanban{
|
||||||
background-color: transparent;
|
background-color: transparent !important;
|
||||||
/* New Gradient with transparent values */
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, transparent, transparent, transparent, transparent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
div.master, div.kanban-header, div.kanban-table-inner, section.kanban button,a.dropdown-project-list-projects{
|
div.master, div.kanban-header, div.kanban-table-inner, section.kanban button,a.dropdown-project-list-projects{
|
||||||
background-color: var(--color-92);
|
background-color: var(--color-92) !important;
|
||||||
/* New Gradient based on original background (92 -5, 92, 92 +1, 92 +5) */
|
color: var(--color-40) !important;
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-87), var(--color-92), var(--color-93), var(--color-97));
|
|
||||||
color: var(--color-40);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
section.kanban h1, section.kanban h2{
|
section.kanban h1, section.kanban h2{
|
||||||
color: var(--color-40);
|
color: var(--color-40) !important;
|
||||||
}
|
|
||||||
|
|
||||||
.home-project {
|
|
||||||
background: var(--color-88);
|
|
||||||
/* New Gradient based on original background (88 -5, 88, 88 +1, 88 +5) */
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-83), var(--color-88), var(--color-89), var(--color-93));
|
|
||||||
border-color: var(--color-60);
|
|
||||||
color: var(--color-12);
|
|
||||||
}
|
|
||||||
|
|
||||||
.home-wrapper .title-bar {
|
|
||||||
background: var(--color-75);
|
|
||||||
/* New Gradient based on original background (75 -5, 75, 75 +1, 75 +5) */
|
|
||||||
background: linear-gradient({{ range(0, 361) | random }}deg, var(--color-70), var(--color-75), var(--color-76), var(--color-80));
|
|
||||||
}
|
}
|
@ -4,6 +4,3 @@ This user needs to type in his password before executing sudo.
|
|||||||
For security reasons it's recommended to use this user instead of the standard root user.
|
For security reasons it's recommended to use this user instead of the standard root user.
|
||||||
This user should not be used to login to other systems. It's just there to let administration tasks run.
|
This user should not be used to login to other systems. It's just there to let administration tasks run.
|
||||||
For this reason no ssh-keys are generated.
|
For this reason no ssh-keys are generated.
|
||||||
|
|
||||||
## Author
|
|
||||||
This role was created by [Kevin Veen-Birkenbach](https://www.veen.world/)
|
|
||||||
|
@ -46,13 +46,6 @@
|
|||||||
notify: sshd restart
|
notify: sshd restart
|
||||||
when: run_once_user_administrator is not defined
|
when: run_once_user_administrator is not defined
|
||||||
|
|
||||||
- name: "embed user routines for {{ role_path | basename }}"
|
|
||||||
include_role:
|
|
||||||
name: user
|
|
||||||
vars:
|
|
||||||
user_name: "administrator"
|
|
||||||
when: run_once_user_administrator is not defined
|
|
||||||
|
|
||||||
- name: run the user_administrator tasks once
|
- name: run the user_administrator tasks once
|
||||||
set_fact:
|
set_fact:
|
||||||
run_once_user_administrator: true
|
run_once_user_administrator: true
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
Certainly! Below is a README file in English for an Ansible role that includes the tasks you've provided:
|
||||||
# Root User
|
# Root User
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
@ -13,9 +14,16 @@ This Ansible role is designed to manage the generation and handling of an SSH ke
|
|||||||
4. **Output the public SSH key**: Debug task to display the SSH public key in the Ansible output.
|
4. **Output the public SSH key**: Debug task to display the SSH public key in the Ansible output.
|
||||||
5. **Run the user_root tasks once**: Sets a fact to ensure that the tasks for generating and displaying the key are executed only once.
|
5. **Run the user_root tasks once**: Sets a fact to ensure that the tasks for generating and displaying the key are executed only once.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
To use this role, include it in your playbook and set any necessary variables in your playbook's `vars` section. Ensure you have the necessary permissions to execute tasks as the root user.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- hosts: servers
|
||||||
|
become: yes
|
||||||
|
roles:
|
||||||
|
- ssh_key_generator_root
|
||||||
|
```
|
||||||
|
|
||||||
## Important Notes
|
## Important Notes
|
||||||
- Running this role will affect the root user's SSH configuration on the target system. Ensure you understand the implications of modifying root SSH keys.
|
- Running this role will affect the root user's SSH configuration on the target system. Ensure you understand the implications of modifying root SSH keys.
|
||||||
- Always test the role in a controlled environment before deploying to production.
|
- Always test the role in a controlled environment before deploying to production.
|
||||||
|
|
||||||
## Author
|
|
||||||
This role was created by [Kevin Veen-Birkenbach](https://www.veen.world/)
|
|
||||||
|
@ -20,13 +20,6 @@
|
|||||||
msg: "{{ public_key.stdout }}"
|
msg: "{{ public_key.stdout }}"
|
||||||
when: not ssh_key.stat.exists and run_once_user_root is not defined
|
when: not ssh_key.stat.exists and run_once_user_root is not defined
|
||||||
|
|
||||||
- name: "embed user routines for {{ role_path | basename }}"
|
|
||||||
include_role:
|
|
||||||
name: user
|
|
||||||
vars:
|
|
||||||
user_name: "root"
|
|
||||||
when: run_once_user_root is not defined
|
|
||||||
|
|
||||||
- name: run the user_root tasks once
|
- name: run the user_root tasks once
|
||||||
set_fact:
|
set_fact:
|
||||||
run_once_user_root: true
|
run_once_user_root: true
|
||||||
|
@ -1 +0,0 @@
|
|||||||
This role executes tasks which are relevant for all users
|
|
@ -1,6 +0,0 @@
|
|||||||
- name: create .bashrc
|
|
||||||
template:
|
|
||||||
src: "bashrc.j2"
|
|
||||||
dest: "{{ '/root/.bashrc' if user_name == 'root' else '/home/' ~ user_name ~ '/.bashrc' }}"
|
|
||||||
owner: "{{user_name}}"
|
|
||||||
group: "{{user_name}}"
|
|
@ -1,79 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Set color variables for the welcome text based on the current user
|
|
||||||
if [ "$USER" = "root" ]; then
|
|
||||||
HEADER_COLOR="\033[1;31m" # Bold red for root
|
|
||||||
elif [ "$USER" = "administrator" ]; then
|
|
||||||
HEADER_COLOR="\033[1;38;5;208m" # Bold orange for administrator
|
|
||||||
else
|
|
||||||
HEADER_COLOR="\033[1;33m" # Bold yellow for other users
|
|
||||||
fi
|
|
||||||
RESET_COLOR="\033[0m"
|
|
||||||
|
|
||||||
# Color code for the hostname (set to green, bold, underlined, and blinking)
|
|
||||||
# (Note: \[ and \] are used for PS1 only; for echo, use plain escapes)
|
|
||||||
HOSTNAME_COLOR="\033[1;4;5;32m"
|
|
||||||
|
|
||||||
clear
|
|
||||||
|
|
||||||
# Primary IP (determined via default route)
|
|
||||||
PRIMARY_IP=$(ip route get 8.8.8.8 2>/dev/null | awk '{print $7}' | head -n1)
|
|
||||||
|
|
||||||
# Print welcome message
|
|
||||||
echo -e "${HEADER_COLOR}Welcome, $USER on ${HOSTNAME_COLOR}$HOSTNAME!${RESET_COLOR}"
|
|
||||||
echo -e "Primary IP Address: ${PRIMARY_IP}"
|
|
||||||
echo -e "${HEADER_COLOR}Today is $(date +"%A, %d.%m.%Y %T")${RESET_COLOR}"
|
|
||||||
echo -e "\033[94mPowered by: CyMaIS - Cyber Master Infrastructure Solutions!"
|
|
||||||
echo -e "\033[1;31mWARNING: This software is not to be used for generating commercial profits.\033[94m"
|
|
||||||
echo -e "If you require a license for commercial use, please contact Kevin Veen-Birkenbach, the author and copyright holder.\n"
|
|
||||||
echo -e "More Information:"
|
|
||||||
echo -e "- About CyMaIS: \033[35mhttps://s.veen.world/cymais\033[94m"
|
|
||||||
echo -e "- About the author: \033[35mhttps://www.veen.world\033[94m"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# System Load (shows load averages and uptime)
|
|
||||||
echo -e "${HEADER_COLOR}System Load:${RESET_COLOR}"
|
|
||||||
uptime
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Memory Usage (RAM and swap)
|
|
||||||
echo -e "${HEADER_COLOR}Memory Usage:${RESET_COLOR}"
|
|
||||||
free -h
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Disk Usage
|
|
||||||
echo -e "${HEADER_COLOR}Disk Usage:${RESET_COLOR}"
|
|
||||||
df -h
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# CPU Information (e.g., model name)
|
|
||||||
echo -e "${HEADER_COLOR}CPU Information:${RESET_COLOR}"
|
|
||||||
lscpu | grep "Model name"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Top 5 Processes by CPU Usage
|
|
||||||
echo -e "${HEADER_COLOR}Top 5 Processes by CPU Usage:${RESET_COLOR}"
|
|
||||||
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 6
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Set aliases for colored output for ls and grep
|
|
||||||
alias ls='ls --color=auto'
|
|
||||||
alias grep='grep --color=auto'
|
|
||||||
|
|
||||||
# --- Prompt Configuration ---
|
|
||||||
|
|
||||||
# Define color codes for the username in the prompt based on the current user
|
|
||||||
if [ "$USER" = "root" ]; then
|
|
||||||
PROMPT_USER_COLOR="\[\033[4;5;1;31m\]" # Underlined, bold red for root
|
|
||||||
elif [ "$USER" = "administrator" ]; then
|
|
||||||
PROMPT_USER_COLOR="\[\033[4;38;5;208m\]" # Underlined, bold orange for administrator
|
|
||||||
else
|
|
||||||
PROMPT_USER_COLOR="\[\033[33m\]" # Yellow for other users
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Reset code for the prompt (must be wrapped in \[ \])
|
|
||||||
PROMPT_RESET="\[\033[0m\]"
|
|
||||||
|
|
||||||
# Configure PS1: username, hostname in green, time and current directory
|
|
||||||
PS1="${PROMPT_USER_COLOR}\u${PROMPT_RESET}@\[\033[1;4;5;32m\]\h${PROMPT_RESET} \[\033[90m\]\$(date +%H:%M:%S)\[\033[0m\]:\[\033[38;5;13m\]\w ${PROMPT_RESET}\$ "
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
|||||||
src: "docker-compose.yml.j2"
|
src: "docker-compose.yml.j2"
|
||||||
dest: "{{docker_compose.files.docker_compose}}"
|
dest: "{{docker_compose.files.docker_compose}}"
|
||||||
notify: docker compose project setup
|
notify: docker compose project setup
|
||||||
register: docker_compose_template
|
|
||||||
|
|
||||||
- name: "create {{docker_compose.files.env}}"
|
- name: "create {{docker_compose.files.env}}"
|
||||||
template:
|
template:
|
||||||
@ -12,13 +11,3 @@
|
|||||||
mode: '770'
|
mode: '770'
|
||||||
force: yes
|
force: yes
|
||||||
notify: docker compose project setup
|
notify: docker compose project setup
|
||||||
register: env_template
|
|
||||||
|
|
||||||
- name: Check if docker compose has any running container and trigger setup if needed
|
|
||||||
command: docker compose ps -q --filter status=running
|
|
||||||
args:
|
|
||||||
chdir: "{{ docker_compose.directories.instance }}"
|
|
||||||
register: docker_ps
|
|
||||||
changed_when: (docker_ps.stdout | trim) == ""
|
|
||||||
notify: docker compose project setup
|
|
||||||
when: not (docker_compose_template.changed or env_template.changed)
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user