diff --git a/.codex b/.codex new file mode 100644 index 0000000..e69de29 diff --git a/configuration.nix b/configuration.nix index d43ff78..f3221c4 100644 --- a/configuration.nix +++ b/configuration.nix @@ -6,7 +6,7 @@ let andaredConnectScript = pkgs.writeShellScriptBin "andared-connect" (builtins.readFile ./andared-connect.sh); labUpdateMonitor = pkgs.writeShellScriptBin "lab-update-monitor" (builtins.readFile ./update-monitor.sh); labUpdateLauncher = pkgs.writeShellScriptBin "lab-update-launcher" (builtins.readFile ./update-launcher.sh); - # flatpak app IDs that overlap with nix-installed packages — blocked from + # flatpak app IDs that overlap with nix-installed packages - blocked from # being installed via Flatpak (both CLI and Discover) using a remote filter. blockedFlatpakIds = [ "org.chromium.Chromium" @@ -356,7 +356,6 @@ in # sticky bit (1) + root ownership means the user can create/delete their OWN # files inside, but cannot delete or rename the directory itself. # source: https://unix.stackexchange.com/questions/20104 (sticky bit approach) - # man tmpfiles.d (systemd-tmpfiles rule format) systemd.tmpfiles.rules = let # "d" = create directory, 1770 = rwxrwx--- + sticky bit diff --git a/docs/docs/features.md b/docs/docs/features.md new file mode 100644 index 0000000..96c3af8 --- /dev/null +++ b/docs/docs/features.md @@ -0,0 +1,28 @@ +# Features + +## Platform +- **NixOS 25.11** with **KDE Plasma 6** - simplified, restricted desktop setup +- Quiet boot with splash screen and minimal messages +- **Spanish locale** and Spanish user folders by default +- Auto-shutdown after **30 minutes of inactivity** + +## Security & Access +- Single default account: `usuario` / `usuario` +- Password-protected `sudo` +- **Rootless Docker** support + +## Software +Preinstalled applications include Firefox, Chromium, VS Code, PyCharm, DataGrip, +Git, GitHub CLI, Arduino IDE, Wireshark, Postman, GIMP, FreeCAD, Kdenlive, Cura, +and LibreOffice. Python comes with NumPy, Pandas, Matplotlib, SciPy, and Jupyter. + +## Privacy +- Firefox with telemetry disabled and ad blocking enabled +- Private/incognito browsing enforced by default + +## Maintenance +- **Flatpak enabled** (Nix duplicates blocked from Flathub) +- Built-in auto-update tooling with a desktop launcher +- Downloads folder auto-cleaned (files older than 2 weeks removed) +- Protected user folders to prevent accidental deletion +- Preconfigured **Andared_Corporativo** Wi-Fi (Junta de Andalucía) \ No newline at end of file diff --git a/docs/docs/index.md b/docs/docs/index.md new file mode 100644 index 0000000..91851c7 --- /dev/null +++ b/docs/docs/index.md @@ -0,0 +1,9 @@ +# About + +A NixOS configuration for the computer lab of eth0's school. Currently unused, but it may be perfect for those who are interested in setting up a similar environment. + +## Why Nix? + +NixOS is a Linux distribution that uses the Nix package manager to provide a declarative and reproducible configuration system. This means that you can define your entire system configuration in a single file, and Nix will take care of installing and configuring everything for you. + +This makes it easy to set up and maintain a consistent environment across multiple machines, which is ideal for a computer lab setting, where not always you want to install programs on every machine manually. \ No newline at end of file diff --git a/docs/docs/installation.md b/docs/docs/installation.md new file mode 100644 index 0000000..eeb3f5d --- /dev/null +++ b/docs/docs/installation.md @@ -0,0 +1,69 @@ +# Installation + +!!! tip "Connectivity" + A wired connection is recommended. If you need Wi-Fi, the NixOS GNOME ISO supports **Andared_Corporativo** - see the [Wi-Fi setup](#connecting-to-andared_corporativo) section below. + +Unlike most Nix configurations, this one requires a dedicated install script rather than a plain `nixos-rebuild`. + +## Steps + +1. Download the **minimal NixOS ISO** from the [official website](https://nixos.org/download/#nixos-iso) and boot from it. + +2. Identify your target drive: +```sh +lsblk +``` + +3. Run the install script, replacing `/dev/sda` with your drive: +```sh +curl -fsSL https://raw.githubusercontent.com/iesfdlr/lab/main/install.sh \ + | bash -s -- /dev/sda +``` + +4. Follow the on-screen prompts - the installer will ask for your **Andared credentials** and optionally let you set a custom `root` password. + +--- + +## Options + +All flags are appended after the drive argument. + +## Options + +All flags are appended after the drive argument. + +=== "Skip Andared" + + For machines that don't need `Andared_Corporativo`: + + ```sh + curl -fsSL https://raw.githubusercontent.com/iesfdlr/lab/main/install.sh \ + | bash -s -- /dev/sda --no-andared + ``` + +=== "Automated install" + + Pass credentials and root password directly for unattended installs: + + !!! warning + These values will be visible in your shell history. + + ```sh + curl -fsSL https://raw.githubusercontent.com/iesfdlr/lab/main/install.sh \ + | bash -s -- /dev/sda \ + --andared-username USER \ + --andared-password PASS \ + --root-password ROOT_PASS + ``` + +--- + +## Connecting to Andared_Corporativo + +If installing over Wi-Fi, connect manually in the NixOS GNOME ISO using these NetworkManager settings: + +| Field | Value | +|------------------------|------------------------| +| SSID | `Andared_Corporativo` | +| Security | Enterprise | +| Tunnel authentication | - | \ No newline at end of file diff --git a/docs/docs/stylesheets/extra.css b/docs/docs/stylesheets/extra.css new file mode 100644 index 0000000..91c1895 --- /dev/null +++ b/docs/docs/stylesheets/extra.css @@ -0,0 +1,1126 @@ +/* Catppuccin Theme for MkDocs Material - All 4 Flavors */ +/* Documentation: https://github.com/catppuccin/catppuccin */ + +/* ======================================== + Catppuccin Latte (Light Theme) + ======================================== */ +:root { + /* Catppuccin Latte Color Palette */ + --ctp-latte-base: #eff1f5; + --ctp-latte-mantle: #e6e9ef; + --ctp-latte-crust: #dce0e8; + --ctp-latte-surface0: #ccd0da; + --ctp-latte-surface1: #bcc0cc; + --ctp-latte-surface2: #acb0be; + --ctp-latte-overlay0: #9ca0b0; + --ctp-latte-overlay1: #8c8fa1; + --ctp-latte-overlay2: #7c7f93; + --ctp-latte-subtext0: #6c6f85; + --ctp-latte-subtext1: #5c5f77; + --ctp-latte-text: #4c4f69; + + --ctp-latte-lavender: #7287fd; + --ctp-latte-blue: #1e66f5; + --ctp-latte-sapphire: #209fb5; + --ctp-latte-sky: #04a5e5; + --ctp-latte-teal: #179299; + --ctp-latte-green: #40a02b; + --ctp-latte-yellow: #df8e1d; + --ctp-latte-peach: #fe640b; + --ctp-latte-maroon: #e64553; + --ctp-latte-red: #d20f39; + --ctp-latte-mauve: #8839ef; + --ctp-latte-pink: #ea76cb; + --ctp-latte-flamingo: #dd7878; + --ctp-latte-rosewater: #dc8a78; +} + +/* ======================================== + Catppuccin Frappé (Dark Theme) + ======================================== */ +:root { + /* Catppuccin Frappé Color Palette */ + --ctp-frappe-base: #303446; + --ctp-frappe-mantle: #292c3c; + --ctp-frappe-crust: #232634; + --ctp-frappe-surface0: #414559; + --ctp-frappe-surface1: #51576d; + --ctp-frappe-surface2: #626880; + --ctp-frappe-overlay0: #737994; + --ctp-frappe-overlay1: #838ba7; + --ctp-frappe-overlay2: #949cbb; + --ctp-frappe-subtext0: #a5adce; + --ctp-frappe-subtext1: #b5bfe2; + --ctp-frappe-text: #c6d0f5; + + --ctp-frappe-lavender: #babbf1; + --ctp-frappe-blue: #8caaee; + --ctp-frappe-sapphire: #85c1dc; + --ctp-frappe-sky: #99d1db; + --ctp-frappe-teal: #81c8be; + --ctp-frappe-green: #a6d189; + --ctp-frappe-yellow: #e5c890; + --ctp-frappe-peach: #ef9f76; + --ctp-frappe-maroon: #ea999c; + --ctp-frappe-red: #e78284; + --ctp-frappe-mauve: #ca9ee6; + --ctp-frappe-pink: #f4b8e4; + --ctp-frappe-flamingo: #eebebe; + --ctp-frappe-rosewater: #f2d5cf; +} + +/* ======================================== + Catppuccin Macchiato (Dark Theme) + ======================================== */ +:root { + /* Catppuccin Macchiato Color Palette */ + --ctp-macchiato-base: #24273a; + --ctp-macchiato-mantle: #1e2030; + --ctp-macchiato-crust: #181926; + --ctp-macchiato-surface0: #363a4f; + --ctp-macchiato-surface1: #494d64; + --ctp-macchiato-surface2: #5b6078; + --ctp-macchiato-overlay0: #6e738d; + --ctp-macchiato-overlay1: #8087a2; + --ctp-macchiato-overlay2: #939ab7; + --ctp-macchiato-subtext0: #a5adcb; + --ctp-macchiato-subtext1: #b8c0e0; + --ctp-macchiato-text: #cad3f5; + + --ctp-macchiato-lavender: #b7bdf8; + --ctp-macchiato-blue: #8aadf4; + --ctp-macchiato-sapphire: #7dc4e4; + --ctp-macchiato-sky: #91d7e3; + --ctp-macchiato-teal: #8bd5ca; + --ctp-macchiato-green: #a6da95; + --ctp-macchiato-yellow: #eed49f; + --ctp-macchiato-peach: #f5a97f; + --ctp-macchiato-maroon: #ee99a0; + --ctp-macchiato-red: #ed8796; + --ctp-macchiato-mauve: #c6a0f6; + --ctp-macchiato-pink: #f5bde6; + --ctp-macchiato-flamingo: #f0c6c6; + --ctp-macchiato-rosewater: #f4dbd6; +} + +/* ======================================== + Catppuccin Mocha (Dark Theme) + ======================================== */ +:root { + /* Catppuccin Mocha Color Palette */ + --ctp-mocha-base: #1e1e2e; + --ctp-mocha-mantle: #181825; + --ctp-mocha-crust: #11111b; + --ctp-mocha-surface0: #313244; + --ctp-mocha-surface1: #45475a; + --ctp-mocha-surface2: #585b70; + --ctp-mocha-overlay0: #6c7086; + --ctp-mocha-overlay1: #7f849c; + --ctp-mocha-overlay2: #9399b2; + --ctp-mocha-subtext0: #a6adc8; + --ctp-mocha-subtext1: #bac2de; + --ctp-mocha-text: #cdd6f4; + + --ctp-mocha-lavender: #b4befe; + --ctp-mocha-blue: #89b4fa; + --ctp-mocha-sapphire: #74c7ec; + --ctp-mocha-sky: #89dceb; + --ctp-mocha-teal: #94e2d5; + --ctp-mocha-green: #a6e3a1; + --ctp-mocha-yellow: #f9e2af; + --ctp-mocha-peach: #fab387; + --ctp-mocha-maroon: #eba0ac; + --ctp-mocha-red: #f38ba8; + --ctp-mocha-mauve: #cba6f7; + --ctp-mocha-pink: #f5c2e7; + --ctp-mocha-flamingo: #f2cdcd; + --ctp-mocha-rosewater: #f5e0dc; +} + +/* ======================================== + Light Mode - Catppuccin Latte + ======================================== */ +[data-md-color-scheme="latte"] { + /* Background colors */ + --md-default-bg-color: var(--ctp-latte-base); + --md-default-fg-color: var(--ctp-latte-text); + --md-code-bg-color: var(--ctp-latte-mantle); + --md-code-fg-color: var(--ctp-latte-text); + + /* Primary colors */ + --md-primary-fg-color: var(--ctp-latte-mauve); + --md-primary-fg-color--light: var(--ctp-latte-lavender); + --md-primary-fg-color--dark: var(--ctp-latte-surface0); + --md-primary-bg-color: var(--ctp-latte-text); + --md-primary-bg-color--light: var(--ctp-latte-subtext1); + + /* Accent colors */ + --md-accent-fg-color: var(--ctp-latte-green); + --md-accent-fg-color--transparent: rgba(64, 160, 43, 0.1); + --md-accent-bg-color: var(--ctp-latte-text); + --md-accent-bg-color--light: var(--ctp-latte-subtext1); + + /* Typography */ + --md-typeset-color: var(--ctp-latte-text); + --md-typeset-a-color: var(--ctp-latte-green); + + /* Code blocks */ + --md-code-hl-color: var(--ctp-latte-surface0); + --md-code-hl-number-color: var(--ctp-latte-peach); + --md-code-hl-special-color: var(--ctp-latte-pink); + --md-code-hl-function-color: var(--ctp-latte-blue); + --md-code-hl-constant-color: var(--ctp-latte-peach); + --md-code-hl-keyword-color: var(--ctp-latte-mauve); + --md-code-hl-string-color: var(--ctp-latte-green); + --md-code-hl-name-color: var(--ctp-latte-text); + --md-code-hl-operator-color: var(--ctp-latte-sky); + --md-code-hl-punctuation-color: var(--ctp-latte-overlay2); + --md-code-hl-comment-color: var(--ctp-latte-overlay0); + --md-code-hl-generic-color: var(--ctp-latte-pink); + --md-code-hl-variable-color: var(--ctp-latte-text); + + /* Admonitions */ + --md-admonition-bg-color: var(--ctp-latte-mantle); + + /* Footer */ + --md-footer-bg-color: var(--ctp-latte-mantle); + --md-footer-bg-color--dark: var(--ctp-latte-crust); + --md-footer-fg-color: var(--ctp-latte-text); + --md-footer-fg-color--light: var(--ctp-latte-subtext1); + --md-footer-fg-color--lighter: var(--ctp-latte-subtext0); + + /* Tables */ + --md-typeset-table-color: var(--ctp-latte-text); + --md-typeset-table-color--light: var(--ctp-latte-surface0); + + /* Shadows */ + --md-shadow-z1: 0 0.2rem 0.5rem rgba(76, 79, 105, 0.05); + --md-shadow-z2: 0 0.2rem 0.5rem rgba(76, 79, 105, 0.1); + --md-shadow-z3: 0 0.2rem 0.5rem rgba(76, 79, 105, 0.15); +} + +/* ======================================== + Dark Mode - Catppuccin Frappé + ======================================== */ +[data-md-color-scheme="frappe"] { + /* Background colors */ + --md-default-bg-color: var(--ctp-frappe-base); + --md-default-fg-color: var(--ctp-frappe-text); + --md-code-bg-color: var(--ctp-frappe-mantle); + --md-code-fg-color: var(--ctp-frappe-text); + + /* Primary colors */ + --md-primary-fg-color: var(--ctp-frappe-mauve); + --md-primary-fg-color--light: var(--ctp-frappe-lavender); + --md-primary-fg-color--dark: var(--ctp-frappe-surface0); + --md-primary-bg-color: var(--ctp-frappe-text); + --md-primary-bg-color--light: var(--ctp-frappe-subtext1); + + /* Accent colors */ + --md-accent-fg-color: var(--ctp-frappe-green); + --md-accent-fg-color--transparent: rgba(166, 209, 137, 0.1); + --md-accent-bg-color: var(--ctp-frappe-text); + --md-accent-bg-color--light: var(--ctp-frappe-subtext1); + + /* Typography */ + --md-typeset-color: var(--ctp-frappe-text); + --md-typeset-a-color: var(--ctp-frappe-green); + + /* Code blocks */ + --md-code-hl-color: var(--ctp-frappe-surface0); + --md-code-hl-number-color: var(--ctp-frappe-peach); + --md-code-hl-special-color: var(--ctp-frappe-pink); + --md-code-hl-function-color: var(--ctp-frappe-blue); + --md-code-hl-constant-color: var(--ctp-frappe-peach); + --md-code-hl-keyword-color: var(--ctp-frappe-mauve); + --md-code-hl-string-color: var(--ctp-frappe-green); + --md-code-hl-name-color: var(--ctp-frappe-text); + --md-code-hl-operator-color: var(--ctp-frappe-sky); + --md-code-hl-punctuation-color: var(--ctp-frappe-overlay2); + --md-code-hl-comment-color: var(--ctp-frappe-overlay0); + --md-code-hl-generic-color: var(--ctp-frappe-pink); + --md-code-hl-variable-color: var(--ctp-frappe-text); + + /* Admonitions */ + --md-admonition-bg-color: var(--ctp-frappe-mantle); + + /* Footer */ + --md-footer-bg-color: var(--ctp-frappe-mantle); + --md-footer-bg-color--dark: var(--ctp-frappe-crust); + --md-footer-fg-color: var(--ctp-frappe-text); + --md-footer-fg-color--light: var(--ctp-frappe-subtext1); + --md-footer-fg-color--lighter: var(--ctp-frappe-subtext0); + + /* Tables */ + --md-typeset-table-color: var(--ctp-frappe-text); + --md-typeset-table-color--light: var(--ctp-frappe-surface0); + + /* Shadows */ + --md-shadow-z1: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.3); + --md-shadow-z2: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.4); + --md-shadow-z3: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.5); +} + +/* ======================================== + Dark Mode - Catppuccin Macchiato + ======================================== */ +[data-md-color-scheme="macchiato"] { + /* Background colors */ + --md-default-bg-color: var(--ctp-macchiato-base); + --md-default-fg-color: var(--ctp-macchiato-text); + --md-code-bg-color: var(--ctp-macchiato-mantle); + --md-code-fg-color: var(--ctp-macchiato-text); + + /* Primary colors */ + --md-primary-fg-color: var(--ctp-macchiato-mauve); + --md-primary-fg-color--light: var(--ctp-macchiato-lavender); + --md-primary-fg-color--dark: var(--ctp-macchiato-surface0); + --md-primary-bg-color: var(--ctp-macchiato-text); + --md-primary-bg-color--light: var(--ctp-macchiato-subtext1); + + /* Accent colors */ + --md-accent-fg-color: var(--ctp-macchiato-green); + --md-accent-fg-color--transparent: rgba(166, 218, 149, 0.1); + --md-accent-bg-color: var(--ctp-macchiato-text); + --md-accent-bg-color--light: var(--ctp-macchiato-subtext1); + + /* Typography */ + --md-typeset-color: var(--ctp-macchiato-text); + --md-typeset-a-color: var(--ctp-macchiato-green); + + /* Code blocks */ + --md-code-hl-color: var(--ctp-macchiato-surface0); + --md-code-hl-number-color: var(--ctp-macchiato-peach); + --md-code-hl-special-color: var(--ctp-macchiato-pink); + --md-code-hl-function-color: var(--ctp-macchiato-blue); + --md-code-hl-constant-color: var(--ctp-macchiato-peach); + --md-code-hl-keyword-color: var(--ctp-macchiato-mauve); + --md-code-hl-string-color: var(--ctp-macchiato-green); + --md-code-hl-name-color: var(--ctp-macchiato-text); + --md-code-hl-operator-color: var(--ctp-macchiato-sky); + --md-code-hl-punctuation-color: var(--ctp-macchiato-overlay2); + --md-code-hl-comment-color: var(--ctp-macchiato-overlay0); + --md-code-hl-generic-color: var(--ctp-macchiato-pink); + --md-code-hl-variable-color: var(--ctp-macchiato-text); + + /* Admonitions */ + --md-admonition-bg-color: var(--ctp-macchiato-mantle); + + /* Footer */ + --md-footer-bg-color: var(--ctp-macchiato-mantle); + --md-footer-bg-color--dark: var(--ctp-macchiato-crust); + --md-footer-fg-color: var(--ctp-macchiato-text); + --md-footer-fg-color--light: var(--ctp-macchiato-subtext1); + --md-footer-fg-color--lighter: var(--ctp-macchiato-subtext0); + + /* Tables */ + --md-typeset-table-color: var(--ctp-macchiato-text); + --md-typeset-table-color--light: var(--ctp-macchiato-surface0); + + /* Shadows */ + --md-shadow-z1: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.3); + --md-shadow-z2: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.4); + --md-shadow-z3: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.5); +} + +/* ======================================== + Dark Mode - Catppuccin Mocha + ======================================== */ +[data-md-color-scheme="mocha"] { + /* Background colors */ + --md-default-bg-color: var(--ctp-mocha-base); + --md-default-fg-color: var(--ctp-mocha-text); + --md-code-bg-color: var(--ctp-mocha-mantle); + --md-code-fg-color: var(--ctp-mocha-text); + + /* Primary colors */ + --md-primary-fg-color: var(--ctp-mocha-mauve); + --md-primary-fg-color--light: var(--ctp-mocha-lavender); + --md-primary-fg-color--dark: var(--ctp-mocha-surface0); + --md-primary-bg-color: var(--ctp-mocha-text); + --md-primary-bg-color--light: var(--ctp-mocha-subtext1); + + /* Accent colors */ + --md-accent-fg-color: var(--ctp-mocha-green); + --md-accent-fg-color--transparent: rgba(166, 227, 161, 0.1); + --md-accent-bg-color: var(--ctp-mocha-text); + --md-accent-bg-color--light: var(--ctp-mocha-subtext1); + + /* Typography */ + --md-typeset-color: var(--ctp-mocha-text); + --md-typeset-a-color: var(--ctp-mocha-green); + + /* Code blocks */ + --md-code-hl-color: var(--ctp-mocha-surface0); + --md-code-hl-number-color: var(--ctp-mocha-peach); + --md-code-hl-special-color: var(--ctp-mocha-pink); + --md-code-hl-function-color: var(--ctp-mocha-blue); + --md-code-hl-constant-color: var(--ctp-mocha-peach); + --md-code-hl-keyword-color: var(--ctp-mocha-mauve); + --md-code-hl-string-color: var(--ctp-mocha-green); + --md-code-hl-name-color: var(--ctp-mocha-text); + --md-code-hl-operator-color: var(--ctp-mocha-sky); + --md-code-hl-punctuation-color: var(--ctp-mocha-overlay2); + --md-code-hl-comment-color: var(--ctp-mocha-overlay0); + --md-code-hl-generic-color: var(--ctp-mocha-pink); + --md-code-hl-variable-color: var(--ctp-mocha-text); + + /* Admonitions */ + --md-admonition-bg-color: var(--ctp-mocha-mantle); + + /* Footer */ + --md-footer-bg-color: var(--ctp-mocha-mantle); + --md-footer-bg-color--dark: var(--ctp-mocha-crust); + --md-footer-fg-color: var(--ctp-mocha-text); + --md-footer-fg-color--light: var(--ctp-mocha-subtext1); + --md-footer-fg-color--lighter: var(--ctp-mocha-subtext0); + + /* Tables */ + --md-typeset-table-color: var(--ctp-mocha-text); + --md-typeset-table-color--light: var(--ctp-mocha-surface0); + + /* Shadows */ + --md-shadow-z1: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.3); + --md-shadow-z2: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.4); + --md-shadow-z3: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.5); +} + +/* ======================================== + Common Styling for All Flavors + ======================================== */ + +/* Header */ +[data-md-color-scheme="latte"] .md-header { + background-color: var(--ctp-latte-mantle); + box-shadow: 0 0 0.2rem rgba(76, 79, 105, 0.1); +} + +[data-md-color-scheme="frappe"] .md-header, +[data-md-color-scheme="macchiato"] .md-header, +[data-md-color-scheme="mocha"] .md-header { + background-color: var(--md-code-bg-color); +} + +/* Tabs */ +[data-md-color-scheme="latte"] .md-tabs { + background-color: var(--ctp-latte-mantle); + border-bottom: 0.05rem solid var(--ctp-latte-surface0); +} + +[data-md-color-scheme="frappe"] .md-tabs, +[data-md-color-scheme="macchiato"] .md-tabs, +[data-md-color-scheme="mocha"] .md-tabs { + background-color: var(--md-code-bg-color); + border-bottom: 0.05rem solid var(--md-code-hl-color); +} + +/* Navigation */ +.md-nav__link--active { + color: var(--md-accent-fg-color); +} + +.md-nav__link:hover { + color: var(--md-accent-fg-color); +} + +/* Search box - comprehensive styling */ +.md-search__input { + background-color: var(--md-code-bg-color) !important; + color: var(--md-default-fg-color) !important; + border: 0.05rem solid var(--md-code-hl-color); +} + +.md-search__input::placeholder { + color: var(--md-default-fg-color) !important; + opacity: 0.6 !important; +} + +.md-search__input:hover, +.md-search__input:focus { + background-color: var(--md-code-bg-color) !important; + border-color: var(--md-accent-fg-color); + color: var(--md-default-fg-color) !important; +} + +/* Search overlay */ +.md-search__form { + background-color: var(--md-code-bg-color); +} + +/* Search output */ +.md-search__output { + background-color: var(--md-default-bg-color); +} + +.md-search-result__meta { + background-color: var(--md-code-bg-color); + color: var(--md-default-fg-color); +} + +/* Sidebar */ +.md-sidebar { + background-color: var(--md-default-bg-color); +} + +/* Code blocks */ +.md-typeset pre { + background-color: var(--md-code-bg-color); + border-radius: 0.5rem; + overflow-x: auto; +} + +.md-typeset code { + background-color: var(--md-code-bg-color); + color: var(--md-code-fg-color); +} + +/* Inline code */ +.md-typeset :not(pre)>code { + padding: 0.1em 0.4em; + border-radius: 0.3rem; + font-size: 0.9em; + font-weight: 500; +} + +/* Code copy button - beautiful styling */ +.md-clipboard { + + border-radius: 0.3rem; + opacity: 0.5; +} + +.md-clipboard:hover { + background-color: var(--md-accent-fg-color) !important; + +} + +.md-clipboard:focus {} + +/* Copy button icon */ +.md-clipboard svg { + fill: currentColor; +} + +/* Copy button success state */ +.md-clipboard--copied {} + +/* Links */ +.md-typeset a:hover { + color: var(--md-primary-fg-color--light); +} + +/* Buttons */ +.md-button { + background-color: var(--md-primary-fg-color); + color: var(--md-default-bg-color); + border: none; +} + +.md-button:hover { + background-color: var(--md-primary-fg-color--light); +} + +.md-button--primary { + background-color: var(--md-accent-fg-color); + color: var(--md-default-bg-color); +} + +.md-button--primary:hover { + background-color: var(--md-primary-fg-color--light); +} + +/* Admonitions */ +.md-typeset .admonition { + border-left: 0.2rem solid var(--md-accent-fg-color); +} + +/* Tables */ +.md-typeset table:not([class]) { + border: 0.05rem solid var(--md-typeset-table-color--light); +} + +.md-typeset table:not([class]) th { + background-color: var(--md-code-hl-color); +} + +/* Scrollbar */ +::-webkit-scrollbar { + width: 0.5rem; + height: 0.5rem; +} + +::-webkit-scrollbar-track { + background: var(--md-default-bg-color); +} + +::-webkit-scrollbar-thumb { + background: var(--md-code-hl-color); + border-radius: 0.25rem; +} + +::-webkit-scrollbar-thumb:hover { + background: var(--md-accent-fg-color); +} + +/* ======================================== + UI Improvements + ======================================== */ + +/* Permalink symbols (¶) */ +.md-typeset .headerlink { + color: var(--md-default-fg-color); +} + +/* Make headings bolder and ensure visibility */ +.md-typeset h1, +.md-typeset h2, +.md-typeset h3, +.md-typeset h4, +.md-typeset h5, +.md-typeset h6 { + font-weight: 700; + color: var(--md-default-fg-color) !important; +} + +/* Ensure h1 is very visible */ +.md-typeset h1 { + font-weight: 800; + color: var(--md-default-fg-color) !important; +} + +/* Improve header text visibility */ +.md-header__title, +.md-header__button, +.md-header__topic { + color: var(--md-default-fg-color) !important; + font-weight: 600; +} + +/* Page title in header */ +.md-header__topic:first-child { + font-weight: 700; +} + +/* Improve tabs text visibility */ +.md-tabs__link { + color: var(--md-default-fg-color); + opacity: 0.7; +} + +.md-tabs__link--active, +.md-tabs__link:hover { + color: var(--md-default-fg-color); + opacity: 1; +} + +/* Improve navigation text visibility */ +.md-nav__link { + color: var(--md-default-fg-color); +} + +.md-nav__title { + color: var(--md-default-fg-color); + font-weight: 600; +} + +/* Better admonitions styling - Base */ +.md-typeset .admonition, +.md-typeset details { + border-left-width: 0.2rem; + background-color: var(--md-code-bg-color); +} + +.md-typeset .admonition-title, +.md-typeset summary { + border: none; + font-weight: 600; + color: var(--md-default-fg-color); +} + +/* Admonition text content */ +.md-typeset .admonition>p, +.md-typeset .admonition>ul, +.md-typeset .admonition>ol, +.md-typeset details>p { + color: var(--md-default-fg-color); +} + +/* Latte (Light Theme) Admonitions */ +[data-md-color-scheme="latte"] .md-typeset .note>.admonition-title, +[data-md-color-scheme="latte"] .md-typeset .note>summary { + background-color: rgba(30, 102, 245, 0.15); + color: var(--ctp-latte-blue); +} + +[data-md-color-scheme="latte"] .md-typeset .tip>.admonition-title, +[data-md-color-scheme="latte"] .md-typeset .tip>summary { + background-color: rgba(23, 146, 153, 0.15); + color: var(--ctp-latte-teal); +} + +[data-md-color-scheme="latte"] .md-typeset .warning>.admonition-title, +[data-md-color-scheme="latte"] .md-typeset .warning>summary { + background-color: rgba(254, 100, 11, 0.15); + color: var(--ctp-latte-peach); +} + +[data-md-color-scheme="latte"] .md-typeset .danger>.admonition-title, +[data-md-color-scheme="latte"] .md-typeset .danger>summary { + background-color: rgba(210, 15, 57, 0.15); + color: var(--ctp-latte-red); +} + +[data-md-color-scheme="latte"] .md-typeset .info>.admonition-title, +[data-md-color-scheme="latte"] .md-typeset .info>summary { + background-color: rgba(4, 165, 229, 0.15); + color: var(--ctp-latte-sky); +} + +[data-md-color-scheme="latte"] .md-typeset .success>.admonition-title, +[data-md-color-scheme="latte"] .md-typeset .success>summary { + background-color: rgba(64, 160, 43, 0.15); + color: var(--ctp-latte-green); +} + +/* Frappé (Dark Theme) Admonitions */ +[data-md-color-scheme="frappe"] .md-typeset .note>.admonition-title, +[data-md-color-scheme="frappe"] .md-typeset .note>summary { + background-color: rgba(140, 170, 238, 0.15); + color: var(--ctp-frappe-blue); +} + +[data-md-color-scheme="frappe"] .md-typeset .tip>.admonition-title, +[data-md-color-scheme="frappe"] .md-typeset .tip>summary { + background-color: rgba(129, 200, 190, 0.15); + color: var(--ctp-frappe-teal); +} + +[data-md-color-scheme="frappe"] .md-typeset .warning>.admonition-title, +[data-md-color-scheme="frappe"] .md-typeset .warning>summary { + background-color: rgba(239, 159, 118, 0.15); + color: var(--ctp-frappe-peach); +} + +[data-md-color-scheme="frappe"] .md-typeset .danger>.admonition-title, +[data-md-color-scheme="frappe"] .md-typeset .danger>summary { + background-color: rgba(231, 130, 132, 0.15); + color: var(--ctp-frappe-red); +} + +[data-md-color-scheme="frappe"] .md-typeset .info>.admonition-title, +[data-md-color-scheme="frappe"] .md-typeset .info>summary { + background-color: rgba(153, 209, 219, 0.15); + color: var(--ctp-frappe-sky); +} + +[data-md-color-scheme="frappe"] .md-typeset .success>.admonition-title, +[data-md-color-scheme="frappe"] .md-typeset .success>summary { + background-color: rgba(166, 209, 137, 0.15); + color: var(--ctp-frappe-green); +} + +/* Macchiato (Dark Theme) Admonitions */ +[data-md-color-scheme="macchiato"] .md-typeset .note>.admonition-title, +[data-md-color-scheme="macchiato"] .md-typeset .note>summary { + background-color: rgba(138, 173, 244, 0.15); + color: var(--ctp-macchiato-blue); +} + +[data-md-color-scheme="macchiato"] .md-typeset .tip>.admonition-title, +[data-md-color-scheme="macchiato"] .md-typeset .tip>summary { + background-color: rgba(139, 213, 202, 0.15); + color: var(--ctp-macchiato-teal); +} + +[data-md-color-scheme="macchiato"] .md-typeset .warning>.admonition-title, +[data-md-color-scheme="macchiato"] .md-typeset .warning>summary { + background-color: rgba(245, 169, 127, 0.15); + color: var(--ctp-macchiato-peach); +} + +[data-md-color-scheme="macchiato"] .md-typeset .danger>.admonition-title, +[data-md-color-scheme="macchiato"] .md-typeset .danger>summary { + background-color: rgba(237, 135, 150, 0.15); + color: var(--ctp-macchiato-red); +} + +[data-md-color-scheme="macchiato"] .md-typeset .info>.admonition-title, +[data-md-color-scheme="macchiato"] .md-typeset .info>summary { + background-color: rgba(145, 215, 227, 0.15); + color: var(--ctp-macchiato-sky); +} + +[data-md-color-scheme="macchiato"] .md-typeset .success>.admonition-title, +[data-md-color-scheme="macchiato"] .md-typeset .success>summary { + background-color: rgba(166, 218, 149, 0.15); + color: var(--ctp-macchiato-green); +} + +/* Mocha (Dark Theme) Admonitions */ +[data-md-color-scheme="mocha"] .md-typeset .note>.admonition-title, +[data-md-color-scheme="mocha"] .md-typeset .note>summary { + background-color: rgba(137, 180, 250, 0.15); + color: var(--ctp-mocha-blue); +} + +[data-md-color-scheme="mocha"] .md-typeset .tip>.admonition-title, +[data-md-color-scheme="mocha"] .md-typeset .tip>summary { + background-color: rgba(148, 226, 213, 0.15); + color: var(--ctp-mocha-teal); +} + +[data-md-color-scheme="mocha"] .md-typeset .warning>.admonition-title, +[data-md-color-scheme="mocha"] .md-typeset .warning>summary { + background-color: rgba(250, 179, 135, 0.15); + color: var(--ctp-mocha-peach); +} + +[data-md-color-scheme="mocha"] .md-typeset .danger>.admonition-title, +[data-md-color-scheme="mocha"] .md-typeset .danger>summary { + background-color: rgba(243, 139, 168, 0.15); + color: var(--ctp-mocha-red); +} + +[data-md-color-scheme="mocha"] .md-typeset .info>.admonition-title, +[data-md-color-scheme="mocha"] .md-typeset .info>summary { + background-color: rgba(137, 220, 235, 0.15); + color: var(--ctp-mocha-sky); +} + +[data-md-color-scheme="mocha"] .md-typeset .success>.admonition-title, +[data-md-color-scheme="mocha"] .md-typeset .success>summary { + background-color: rgba(166, 227, 161, 0.15); + color: var(--ctp-mocha-green); +} + +/* Improve code block contrast */ +.md-typeset pre>code { + background-color: var(--md-code-bg-color); +} + +/* Better table header visibility */ +.md-typeset table:not([class]) th { + background-color: var(--md-code-hl-color); + color: var(--md-default-fg-color); + font-weight: 600; +} + +/* Table of Contents improvements */ +.md-nav--secondary .md-nav__link { + color: var(--md-default-fg-color) !important; + opacity: 0.8; +} + +.md-nav--secondary .md-nav__link--active { + color: var(--md-accent-fg-color) !important; + opacity: 1; + font-weight: 600; +} + +.md-nav--secondary .md-nav__link:hover { + color: var(--md-accent-fg-color) !important; + opacity: 1; +} + +/* Table of Contents title */ +.md-nav--secondary .md-nav__title { + color: var(--md-default-fg-color) !important; + font-weight: 700; +} + +/* Sidebar navigation */ +.md-sidebar--secondary { + color: var(--md-default-fg-color); +} + +.md-sidebar--secondary .md-nav { + color: var(--md-default-fg-color); +} + +/* Site title improvement */ +.md-header__title { + font-weight: 600; +} + +/* Improve all text contrast */ +.md-typeset { + color: var(--md-default-fg-color); +} + +/* Ensure proper contrast for all content */ +.md-content__inner { + color: var(--md-default-fg-color); +} + +/* All paragraphs */ +.md-typeset p { + color: var(--md-default-fg-color) !important; +} + +/* Lists */ +.md-typeset li { + color: var(--md-default-fg-color) !important; +} + +/* Strong and emphasis */ +.md-typeset strong, +.md-typeset em { + color: var(--md-default-fg-color); +} + +/* Blockquotes */ +.md-typeset blockquote { + color: var(--md-default-fg-color); +} + +/* Navigation items in primary sidebar */ +.md-nav--primary .md-nav__link { + color: var(--md-default-fg-color) !important; +} + +.md-nav--primary .md-nav__title { + color: var(--md-default-fg-color) !important; +} + +/* Ensure all text elements use proper color */ +.md-typeset * { + color: inherit; +} + +/* Code copy button - Catppuccin style */ +.md-clipboard { + background-color: var(--md-accent-fg-color) !important; + border-radius: 0.2rem; + opacity: 0.9; + transition: opacity 0.2s, background-color 0.2s; +} + +.md-clipboard:hover { + opacity: 1; + background-color: var(--md-accent-fg-color) !important; + filter: brightness(1.1); +} + +.md-clipboard:focus, +.md-clipboard:active { + opacity: 1; + background-color: var(--md-accent-fg-color) !important; +} + +/* Copy button icon - Light theme */ +[data-md-color-scheme="latte"] .md-clipboard svg { + fill: var(--ctp-latte-base) !important; +} + +/* Copy button icon - Dark themes */ +[data-md-color-scheme="frappe"] .md-clipboard svg, +[data-md-color-scheme="macchiato"] .md-clipboard svg, +[data-md-color-scheme="mocha"] .md-clipboard svg { + fill: var(--md-default-bg-color) !important; +} + +/* Success state after copying */ +.md-clipboard--inline:hover { + background-color: var(--md-accent-fg-color) !important; +} + +/* Back to top button */ +.md-top { + background-color: var(--md-accent-fg-color) !important; + color: var(--md-default-bg-color) !important; +} + +.md-top:hover { + background-color: var(--md-accent-fg-color) !important; + filter: brightness(1.1); +} + +/* Back to top icon */ +.md-top svg { + fill: var(--md-default-bg-color) !important; +} + +/* Search placeholder and input */ +.md-search__input::placeholder { + color: var(--md-default-fg-color) !important; + opacity: 0.6; +} + +.md-search__input { + color: var(--md-default-fg-color) !important; +} + +/* Search icon */ +.md-search__icon { + color: var(--md-default-fg-color) !important; +} + +.md-search__icon svg { + fill: var(--md-default-fg-color) !important; +} + +/* Search form */ +.md-search__form { + background-color: var(--md-code-hl-color); +} + +/* Search output */ +.md-search__output { + background-color: var(--md-default-bg-color); + color: var(--md-default-fg-color); +} + +/* Search result items */ +.md-search-result__item { + color: var(--md-default-fg-color); +} + +.md-search-result__link { + color: var(--md-default-fg-color) !important; +} + +.md-search-result__link:hover { + background-color: var(--md-code-hl-color); +} + + +/* ======================================== + Content Tabs (pymdownx.tabbed) Styling + ======================================== */ + +/* Inactive tabs */ +.md-typeset .tabbed-labels .tabbed-label { + color: var(--md-default-fg-color); + opacity: 0.6; + transition: opacity 0.2s, color 0.2s, border-bottom-color 0.2s; +} + +/* Hover state */ +.md-typeset .tabbed-labels .tabbed-label:hover { + color: var(--md-accent-fg-color); + opacity: 0.8; + cursor: pointer; +} + +/* Active tab - The complex selector is needed to override Material's default */ +.md-typeset .tabbed-set>input:nth-child(1):checked~.tabbed-labels> :nth-child(1), +.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels> :nth-child(2), +.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels> :nth-child(3), +.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels> :nth-child(4), +.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels> :nth-child(5) { + color: var(--md-accent-fg-color) !important; + border-bottom-color: var(--md-accent-fg-color) !important; + opacity: 1; +} + +/* Tab content container */ +.md-typeset .tabbed-content { + background-color: transparent; + border-radius: 0 0 0.2rem 0.2rem; +} + +/* Paths */ +.md-path__item:not(:first-child)::before { + background-color: var(--md-default-fg-color); +} + +.md-path__link { + color: var(--md-default-fg-color); +} + + + +/* ======================================== + Code Block Line Numbers Styling + ======================================== */ + +/* Container for the table */ +.md-typeset .highlight { + background-color: var(--md-code-bg-color); + border-radius: 0.5rem; + overflow: hidden; + margin: 1em 0; +} + +/* Reset basic pre styling when used inside highlight table */ +.md-typeset .highlighttable pre { + background-color: transparent !important; + border-radius: 0 !important; + margin: 0 !important; + padding: 0.7em 0 !important; + white-space: pre-wrap !important; + word-wrap: break-word !important; +} + +/* Table structure */ +.highlighttable { + width: 100%; + border-spacing: 0; + display: table; +} + +.highlighttable td { + padding: 0; + vertical-align: top; +} + +/* Line numbers column */ +.highlighttable .linenos { + min-width: 2.5em; + user-select: none; + border: none !important; + border-right: none !important; +} + +/* Line numbers text */ +.highlighttable .linenos pre { + text-align: right; + padding-right: 0.7em !important; + background: linear-gradient(to bottom, + #f38ba8, + /* Red */ + #fab387, + /* Peach */ + #f9e2af, + /* Yellow */ + #a6e3a1, + /* Green */ + #89b4fa, + /* Blue */ + #cba6f7 + /* Mauve */ + ); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + opacity: 0.8; +} + + + +/* Code content text */ +.highlighttable .code pre { + padding-left: 0.7em !important; + overflow: visible; +} + +/* Fix for dark mode backgrounds to ensure seamless look */ +[data-md-color-scheme="frappe"] .highlighttable, +[data-md-color-scheme="macchiato"] .highlighttable, +[data-md-color-scheme="mocha"] .highlighttable { + background-color: var(--md-code-bg-color); +} + +/* Syntax highlighting refinements */ +.highlight .c, +.highlight .cm, +.highlight .c1 { + font-style: italic; + opacity: 0.8; +} + +.highlight .k, +.highlight .kn, +.highlight .kd { + font-weight: 600; +} \ No newline at end of file diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml new file mode 100644 index 0000000..9a03b6c --- /dev/null +++ b/docs/mkdocs.yml @@ -0,0 +1,27 @@ +site_name: Nix Lab +site_url: https://nixlab.srizan.dev +theme: + name: material + palette: + - scheme: mocha + primary: custom + accent: custom + toggle: + icon: material/weather-sunny + name: Switch to Latte + - scheme: latte + primary: custom + accent: custom + toggle: + icon: material/weather-partly-cloudy + name: Switch to Mocha + +markdown_extensions: + - admonition + - pymdownx.details + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true + +extra_css: + - stylesheets/extra.css \ No newline at end of file diff --git a/install.sh b/install.sh index c337577..3eabd1b 100644 --- a/install.sh +++ b/install.sh @@ -344,7 +344,7 @@ main() { if [ -c /dev/tty ]; then printf '\n' > /dev/tty printf '┌─────────────────────────────────────────────────────┐\n' > /dev/tty - printf '│ Andared_Corporativo — Wi-Fi del centro educativo │\n' > /dev/tty + printf '│ Andared_Corporativo - Wi-Fi del centro educativo │\n' > /dev/tty printf '│ │\n' > /dev/tty printf '│ Introduce tu usuario y contraseña para dejar la │\n' > /dev/tty printf '│ conexión configurada. Pulsa Enter para omitir. │\n' > /dev/tty diff --git a/readme.md b/readme.md index 69cdfe2..2e0fe7c 100644 --- a/readme.md +++ b/readme.md @@ -7,7 +7,7 @@ si el equipo que usas para instalar necesita Wi‑Fi corporativa antes de clonar 1. descarga la iso de [nixos mínima](https://nixos.org/download/#nixos-iso) y arranca el ordenador desde ella 2. busca el disco duro en `lsblk` 3. `curl -fsSL https://raw.githubusercontent.com/iesfdlr/lab/main/install.sh | bash -s -- /dev/sda` (reemplaza `/dev/sda` por el disco duro que corresponda) -4. sigue las instrucciones en pantalla — el instalador pedirá las credenciales de Andared automáticamente y también te dará la opción de cambiar la contraseña de `root`. Pulsa Enter sin escribir nada para omitir cualquiera de esos pasos. +4. sigue las instrucciones en pantalla - el instalador pedirá las credenciales de Andared automáticamente y también te dará la opción de cambiar la contraseña de `root`. Pulsa Enter sin escribir nada para omitir cualquiera de esos pasos. Para máquinas que no necesitan `Andared_Corporativo`, pasa `--no-andared` para omitir el mensaje directamente: