diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..b82e9903 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,143 @@ +name: "Signaler un bug" +description: "Utilisez ce formulaire pour signaler un bug." +title: "[BUG] " +labels: ["bug"] +body: + - type: markdown + attributes: + value: "## **Description du problème**\nExpliquez clairement le problème rencontré." + - type: textarea + id: description_probleme + attributes: + label: "Description du problème" + description: "Expliquez clairement ce qui ne va pas." + placeholder: "Décrivez le problème ici..." + validations: + required: true + + - type: markdown + attributes: + value: "## **Étapes pour reproduire**\n1. Aller à '...'\n2. Cliquer sur '...'\n3. Voir l'erreur." + - type: textarea + id: etapes_reproduire + attributes: + label: "Étapes pour reproduire" + description: "Listez les étapes pour reproduire le problème." + placeholder: "1. Aller à '...'\n2. Cliquer sur '...'\n3. Voir l'erreur." + validations: + required: true + + - type: markdown + attributes: + value: "## **Comportement attendu**\nDécrivez ce que vous attendiez à la place." + - type: textarea + id: comportement_attendu + attributes: + label: "Comportement attendu" + description: "Décrivez ce que vous attendiez à la place." + placeholder: "Décrivez le comportement attendu ici..." + validations: + required: true + + - type: markdown + attributes: + value: "## **Captures d'écran**\nSi applicable, ajoutez des images pour expliquer." + - type: textarea + id: captures_ecran + attributes: + label: "Captures d'écran" + description: "Fournissez des liens vers des captures d'écran si applicable." + placeholder: "Collez les liens des captures d'écran ici..." + + - type: markdown + attributes: + value: "## **Informations supplémentaires**\nTout autre détail qui pourrait être utile." + - type: textarea + id: informations_supplementaires + attributes: + label: "Informations supplémentaires" + description: "Ajoutez tout autre détail pertinent." + placeholder: "Ajoutez des informations supplémentaires ici..." + + - type: markdown + attributes: + value: "## **Modifications de configuration**" + - type: checkboxes + id: modifications_configuration + attributes: + label: "Modifications de configuration" + description: "Indiquez si vous avez modifié la configuration." + options: + - label: "🔧 J'ai effectué des modifications dans la configuration (si oui, précisez-les)" + required: false + - type: textarea + id: details_modifications + attributes: + label: "Détails des modifications" + description: "Si vous avez modifié la configuration, veuillez fournir les détails ici." + placeholder: "Décrivez les modifications apportées à la configuration..." + + - type: markdown + attributes: + value: "## **Impact du problème**\nCochez l'une des cases." + - type: dropdown + id: impact_probleme + attributes: + label: "Impact du problème" + description: "Sélectionnez l'impact du problème." + options: + - "🪦 Bloquant : Je ne peux pas utiliser la distribution." + - "🚨 Majeur : Fonctionnalités critiques non disponibles." + - "⚠️ Mineur : Gênant mais contournable." + - "👁 Cosmétiques : Problème visuel ou de confort." + validations: + required: true + + - type: markdown + attributes: + value: "## **Tests déjà effectués**" + - type: checkboxes + id: tests_effectues + attributes: + label: "Tests déjà effectués" + description: "Cochez les tests que vous avez déjà effectués." + options: + - label: "🔄 J'ai redémarré le système" + required: false + - label: "🌐 J'ai vérifié que ma connexion internet fonctionnait" + required: false + + - type: markdown + attributes: + value: | + ## **Informations Système** + + Exécutez la commande suivante pour collecter les informations système nécessaires : + + ```bash + nix-shell -p pciutils util-linux inxi gawk --run " + echo -e '\n--- Infos ---'; \ + inxi -M; \ + echo -e '\n--- CPU ---'; \ + lscpu | grep -E '(Architecture|CPU op-mode|Vendor ID|Model name|Mode\\(s\\) opératoire\\(s\\) des processeurs|Identifiant constructeur|Nom de modèle)' | awk '{print \$0}'; \ + echo -e '\n--- GPU ---'; \ + lspci | grep -E 'VGA|3D'; \ + echo -e '\n--- Disque ---'; \ + df -h; \ + echo -e '\n--- RAM ---'; \ + free -h" + ``` + Collez les informations système ici : + + - type: textarea + id: informations_systeme + attributes: + label: "Informations Système" + description: "Collez les informations système obtenues en exécutant la commande ci-dessus." + placeholder: "Collez les informations système ici..." + validations: + required: true + + - type: markdown + attributes: + value: "> **Note** : Pour les contributeurs, mentionnez l'issue associé à vos Pull Request." diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..8005e322 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,2 @@ +blank_issues_enabled: false +contact_links: [] diff --git a/.github/ISSUE_TEMPLATE/documentation.yml b/.github/ISSUE_TEMPLATE/documentation.yml new file mode 100644 index 00000000..af3f3779 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.yml @@ -0,0 +1,56 @@ +name: "Proposer une modification de la documentation" +description: "Utilisez ce formulaire pour suggérer des améliorations ou des corrections à la documentation." +title: "[DOC] " +labels: ["documentation"] +body: + - type: markdown + attributes: + value: "## **Type de modification**\nSélectionnez le type de modification que vous proposez." + - type: dropdown + id: type_modification + attributes: + label: "Type de modification" + description: "Sélectionnez le type de modification que vous proposez." + options: + - "✍️ Correction de faute(s)" + - "📄 Ajouter du contenu" + - "🛠️ Amélioration du contenu" + - "🔍 Mise à jour d'informations obsolètes" + validations: + required: true + + - type: markdown + attributes: + value: "## **Description de la modification proposée**\nDécrivez en détail la modification que vous proposez." + - type: textarea + id: description_modification + attributes: + label: "Description de la modification" + description: "Décrivez en détail la modification que vous proposez." + placeholder: "Décrivez la modification ici..." + validations: + required: true + + - type: markdown + attributes: + value: "## **Justification de la modification**\nExpliquez pourquoi cette modification est nécessaire ou bénéfique." + - type: textarea + id: justification_modification + attributes: + label: "Justification de la modification" + description: "Expliquez pourquoi cette modification est nécessaire ou bénéfique." + placeholder: "Fournissez la justification ici..." + validations: + required: true + + - type: markdown + attributes: + value: "## **Informations supplémentaires**\nAjoutez tout autre détail pertinent ou des ressources supplémentaires." + - type: textarea + id: informations_supplementaires + attributes: + label: "Informations supplémentaires" + description: "Ajoutez tout autre détail pertinent ou des ressources supplémentaires." + placeholder: "Ajoutez des informations supplémentaires ici..." + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml new file mode 100644 index 00000000..f6b5aa1b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature.yml @@ -0,0 +1,68 @@ +name: "Proposer une nouvelle fonctionnalité" +description: "Utilisez ce formulaire pour suggérer une nouvelle fonctionnalité." +title: "[FEATURE] " +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: "## **Description de la fonctionnalité proposée**\nExpliquez clairement la fonctionnalité que vous proposez." + - type: textarea + id: description_fonctionnalite + attributes: + label: "Description de la fonctionnalité" + description: "Expliquez clairement la fonctionnalité que vous proposez." + placeholder: "Décrivez la fonctionnalité ici..." + validations: + required: true + + - type: markdown + attributes: + value: "## **Problème résolu**\nDécrivez le problème que cette fonctionnalité résoudra." + - type: textarea + id: probleme_resolu + attributes: + label: "Problème résolu" + description: "Décrivez le problème que cette fonctionnalité résoudra." + placeholder: "Décrivez le problème ici..." + validations: + required: true + + - type: markdown + attributes: + value: "## **Impact attendu**\nSélectionnez l'impact de cette fonctionnalité." + - type: dropdown + id: impact_fonctionnalite + attributes: + label: "Impact de la fonctionnalité" + description: "Sélectionnez l'impact de cette fonctionnalité." + options: + - "🚀 Amélioration majeure : Fonctionnalité essentielle pour le projet." + - "⚡ Amélioration mineure : Fonctionnalité utile mais non essentielle." + - "🧩 Complémentaire : Fonctionnalité qui enrichit l'expérience utilisateur." + - "🛠️ Correction : Résout un problème existant sans ajouter de nouvelles fonctionnalités." + validations: + required: true + + - type: markdown + attributes: + value: "## **Tests proposés**\nSi applicable, décrivez les tests ou scénarios qui pourraient être utilisés pour valider cette fonctionnalité." + - type: textarea + id: tests_proposes + attributes: + label: "Tests proposés" + description: "Si applicable, décrivez les tests ou scénarios qui pourraient être utilisés pour valider cette fonctionnalité." + placeholder: "Décrivez les tests ici..." + validations: + required: false + + - type: markdown + attributes: + value: "## **Informations supplémentaires**\nAjoutez tout autre détail pertinent." + - type: textarea + id: informations_supplementaires + attributes: + label: "Informations supplémentaires" + description: "Ajoutez tout autre détail pertinent." + placeholder: "Ajoutez des informations supplémentaires ici..." + validations: + required: false diff --git a/.github/workflows/nix-build.yml b/.github/workflows/nix-build.yml new file mode 100644 index 00000000..0eac03f3 --- /dev/null +++ b/.github/workflows/nix-build.yml @@ -0,0 +1,50 @@ +name: Build GLF-OS Configurations + +on: + push: + branches: [main, dev] + paths: ['**/*.nix'] + + pull_request: + branches: ['**'] + paths: ['**/*.nix'] + + workflow_dispatch: + +jobs: + buildGLF-Configurations: + runs-on: [ubuntu-latest] + steps: + - uses: actions/checkout@v3 + + - name: Install Nix + uses: cachix/install-nix-action@v17 + + - name: Build GLF + run: nix run github:Mic92/nix-fast-build -- --no-nom --skip-cached --systems 'x86_64-linux' -f .#nixosConfigurations.glf-installer.config.system.build.toplevel + continue-on-error: false + + test-user-config: + name: Test User Configuration + runs-on: ubuntu-latest + needs: [] + steps: + - uses: actions/checkout@v3 + - uses: cachix/install-nix-action@v17 + + - name: Build User Test Configuration + run: nix run github:Mic92/nix-fast-build -- --no-nom --skip-cached --systems 'x86_64-linux' -f .#nixosConfigurations.user-test.config.system.build.toplevel + + report: + name: Final Status + runs-on: ubuntu-latest + needs: [buildGLF-Configurations, test-user-config] + steps: + - name: Combine Results + run: | + echo "Build status:" + echo "- Installer: ${{ needs.buildGLF-Configurations.result }}" + echo "- Installer: ${{ contains(needs.*.result, 'success') && '✅' || '❌' }}" + echo "- User Config: ${{ needs.test-user-config.result }}" + echo "✅ Testing completed" + if: always() diff --git a/.github/workflows/pages.yaml b/.github/workflows/pages.yaml new file mode 100644 index 00000000..be54cf2f --- /dev/null +++ b/.github/workflows/pages.yaml @@ -0,0 +1,70 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +# Sample workflow for building and deploying a Jekyll site to GitHub Pages +name: Deploy Jekyll site to Pages + +on: + push: + branches: + - dev + paths: + - 'docs/**' + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: 'pages' + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Ruby environment + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.3' + bundler-cache: true + bundler: '2.5.9' + + - name: Install dependencies + run: | + bundle config set path 'vendor/bundle' + bundle install + working-directory: docs + + - name: Setup GitHub Pages + id: pages + uses: actions/configure-pages@v5 + + - name: Build Jekyll site + run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}" + env: + JEKYLL_ENV: production + working-directory: docs + + - name: Upload artifact to GitHub Pages + uses: actions/upload-pages-artifact@v3 + with: + path: docs/_site/ + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 88b4f146..8a157b36 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,15 @@ ,* .*.swp .DS_STORE -result +result # Generated by nix build +result- # Generated by nix fast build *.org *.qcow2 iso -__pycache__/ \ No newline at end of file +__pycache__/ +docs/_site +docs/.sass-cache/ +docs/.jekyll-cache/ +docs/.jekyll-metadata +docs/vendor +.idea \ No newline at end of file diff --git a/Justfile b/Justfile new file mode 100644 index 00000000..c0c24dc0 --- /dev/null +++ b/Justfile @@ -0,0 +1,60 @@ +# Justfile help +_default: + @just --list + +# Perform a iso & install +all: iso install + +# Check configuration (nix flake check) +check: + nix --extra-experimental-features "nix-command flakes" flake check --no-build + +# Build configuration (nix build) +build: + nix --extra-experimental-features "nix-command flakes" build -L .#nixosConfigurations.glf-installer.config.system.build.toplevel + +# Build new iso +iso: + nix --extra-experimental-features "nix-command flakes" build -L .#iso + +# Build and run glf-os virtual machine +build-vm: + nixos-rebuild build-vm -I nixos-config=./iso-cfg/configuration.nix && ./result/bin/run-glfos-vm + +# Update packages (flake.lock) +update: + nix --extra-experimental-features "nix-command flakes" flake update + +# Clean local build (nix-collect-garbage) +clean: + #!/usr/bin/env bash + if [ -L "result" ]; then rm result; fi + nix-collect-garbage + if [ -d "iso" ]; then rm -r iso; fi + +# Copy image and compute sha256sum +install: + #!/usr/bin/env bash + SRC_DIR := result/iso + DEST_DIR := iso + GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD) + SRC_IMG=$$(ls -t $(SRC_DIR) | tail -1); \ + DST_IMG="$${SRC_IMG/-x86_64-linux.iso/_$(GIT_BRANCH).iso}"; \ + if [ -n "$$SRC_IMG" ]; then \ + echo "Copying $(SRC_DIR)/$$SRC_IMG to $(DEST_DIR)/$$DST_IMG ..."; \ + install -d $(DEST_DIR); \ + install -m 644 "$(SRC_DIR)/$$SRC_IMG" $(DEST_DIR)/$$DST_IMG && \ + cd $(DEST_DIR) && \ + sha256sum "$$DST_IMG" > "$$DST_IMG.sha256sum"; \ + cat "$$DST_IMG.sha256sum"; \ + fi + +# Check, fix and format nix code +fix: + #!/usr/bin/env bash + find . -type f -name "*.nix" \ + ! -path ./modules/default/debug.nix \ + ! -path ./iso-cfg/customConfig/default.nix \ + -exec deadnix -eq {} \; + find . -type f -name "*.nix" -exec nixfmt -s {} \; + statix check . diff --git a/Makefile b/Makefile deleted file mode 100644 index c4b65a9c..00000000 --- a/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -# make without argument will perform a iso & install -all: iso install - -# Check configuration only without build -check: - nix --extra-experimental-features "nix-command flakes" flake check --no-build -# Check configuration only with build -build: - nix --extra-experimental-features "nix-command flakes" build -L .#nixosConfigurations.glf-installer.config.system.build.toplevel - -# Build new iso -iso: - nix --extra-experimental-features "nix-command flakes" build -L .#iso - -build-vm: - nixos-rebuild build-vm -I nixos-config=./nix-cfg/configuration.nix && ./result/bin/run-glfos-vm - -# Update flake.lock -update: - nix --extra-experimental-features "nix-command flakes" flake update - -# Clean local build -clean: - @if [ -L "result" ]; then rm result; fi - nix-collect-garbage - @if [ -d "iso" ]; then rm -r iso; fi - -# Copy image and compute sha256sum -SRC_DIR = result/iso -DEST_DIR = iso -GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD) -install: - @SRC_IMG=$$(ls -t $(SRC_DIR) | tail -1); \ - DST_IMG="$${SRC_IMG/-x86_64-linux.iso/_$(GIT_BRANCH).iso}"; \ - if [ -n "$$SRC_IMG" ]; then \ - echo "Copying $(SRC_DIR)/$$SRC_IMG to $(DEST_DIR)/$$DST_IMG ..."; \ - install -d $(DEST_DIR); \ - install -m 644 "$(SRC_DIR)/$$SRC_IMG" $(DEST_DIR)/$$DST_IMG && \ - cd $(DEST_DIR) && \ - sha256sum "$$DST_IMG" > "$$DST_IMG.sha256sum"; \ - cat "$$DST_IMG.sha256sum"; \ - fi - -.PHONY: all test clean iso update install diff --git a/README.md b/README.md index 8832f814..afea84a1 100644 --- a/README.md +++ b/README.md @@ -12,26 +12,26 @@ Pour construire l'ISO, suivez les étapes ci-dessous : nix build .#iso ``` -# Alternative (via utilisation de make) +# Alternative (via utilisation de just) > [!NOTE] -> Pré-requis: `gnumake` doit être installé -> Peut être installé temporairement via la commande `nix-shell -p gnumake` +> Pré-requis: `just` doit être installé +> Peut être installé temporairement avec `nix-shell -p just` 1. **Contruction de l'iso** : La construction de l'iso peut être lancée via la commande: - ``` - make + ```bash + just all ``` -Cette commande exécutera 2 opérations consécutives: `make iso` et `make install`. +Cette commande exécutera 2 opérations consécutives: `just iso` et `just install`. La première aura le même effet que la commande `nix build .#iso` hormis qu'elle ajoutera automatiquement les extra-features `nix-command flakes`. La deuxième copiera l'ISO généré (suffixé du nom de la branche courante) dans le répertoire `iso` à la racine du projet et créera son fichier hash associé. Exemple de résultat: - ``` + ```bash $ ls iso glfos-24.11.20241202.f9f0d5c_dev.iso glfos-24.11.20241202.f9f0d5c_dev.iso.sha256sum ``` @@ -40,8 +40,8 @@ Exemple de résultat: Cette commande effacera tout ce qui a été généré localement, ISOs inclus. - ``` - make clean + ```bash + just clean ``` 3. **Test de la configuration nix** : @@ -49,23 +49,33 @@ Cette commande effacera tout ce qui a été généré localement, ISOs inclus. Deux méthodes ici, la première permet de tester la configuration sans "build" et de repérer les erreurs de syntaxes. ```bash -make check +just check ``` > [!NOTE] -> Les fichiers vérifiés sont ceux qui sont appelés par le flocon (ex: le répertoire glf) +> Les fichiers vérifiés sont ceux qui sont appelés par le flocon (ex: le répertoire glf). > Tant que votre fichier est appelé par le flocon, configuration.nix ou un default.nix, le fichier sera vérifié. -La seconde méthode vérifie la syntaxe et construit la configuration sans générer d'iso (la configuration est mise en cache). +La seconde méthode évalue le code et construit la configuration sans générer d'iso (la configuration est mise en cache). ```bash -make build +just build +``` + +Pour formatter la configuration et vérifier / nettoyer le code, on peut aussi utiliser la commande suivante. + +```bash +# Il faut un nix-shell avec les outils +nix-shell -p nixfmt-rfc-style deadnix statix + +# Vérification et nettoyage du code +just fix ``` 4. **Test de la configuration dans une machine virtuelle** : -La configuration peut-être construite et lancé dans une machine virtuelle (depuis nixos uniquement) +La configuration peut-être construite et lancée dans une machine virtuelle (depuis nixos uniquement) ```bash -make build-vm +just build-vm ``` diff --git a/nix-cfg/glf/dark.jpg b/assets/wallpaper/dark.jpg similarity index 100% rename from nix-cfg/glf/dark.jpg rename to assets/wallpaper/dark.jpg diff --git a/nix-cfg/glf/white.jpg b/assets/wallpaper/white.jpg similarity index 100% rename from nix-cfg/glf/white.jpg rename to assets/wallpaper/white.jpg diff --git a/docs/.bundle/config b/docs/.bundle/config new file mode 100644 index 00000000..23692288 --- /dev/null +++ b/docs/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_PATH: "vendor/bundle" diff --git a/docs/Gemfile b/docs/Gemfile new file mode 100644 index 00000000..157e9183 --- /dev/null +++ b/docs/Gemfile @@ -0,0 +1,7 @@ +source 'https://rubygems.org' + +gem "jekyll", "~> 4.3.4" # installed by `gem jekyll` +# gem "webrick" # required when using Ruby >= 3 and Jekyll <= 4.2.2 + +gem "just-the-docs", "0.10.0" # pinned to the current release +# gem "just-the-docs" # always download the latest release diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock new file mode 100644 index 00000000..dd64b4da --- /dev/null +++ b/docs/Gemfile.lock @@ -0,0 +1,91 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + bigdecimal (3.1.8) + colorator (1.1.0) + concurrent-ruby (1.3.4) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + eventmachine (1.2.7) + ffi (1.17.0-arm64-darwin) + ffi (1.17.0-x86_64-linux-gnu) + forwardable-extended (2.6.0) + google-protobuf (4.28.1-arm64-darwin) + bigdecimal + rake (>= 13) + google-protobuf (4.28.1-x86_64-linux) + bigdecimal + rake (>= 13) + http_parser.rb (0.8.0) + i18n (1.14.6) + concurrent-ruby (~> 1.0) + jekyll (4.3.4) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) + jekyll-watch (~> 2.0) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) + liquid (~> 4.0) + mercenary (>= 0.3.6, < 0.5) + pathutil (~> 0.9) + rouge (>= 3.0, < 5.0) + safe_yaml (~> 1.0) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) + jekyll-include-cache (0.2.1) + jekyll (>= 3.7, < 5.0) + jekyll-sass-converter (3.0.0) + sass-embedded (~> 1.54) + jekyll-seo-tag (2.8.0) + jekyll (>= 3.8, < 5.0) + jekyll-watch (2.2.1) + listen (~> 3.0) + just-the-docs (0.10.0) + jekyll (>= 3.8.5) + jekyll-include-cache + jekyll-seo-tag (>= 2.0) + rake (>= 12.3.1) + kramdown (2.4.0) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.4) + listen (3.9.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mercenary (0.4.0) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (6.0.1) + rake (13.2.1) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) + ffi (~> 1.0) + rexml (3.3.7) + rouge (4.3.0) + safe_yaml (1.0.5) + sass-embedded (1.78.0-arm64-darwin) + google-protobuf (~> 4.27) + sass-embedded (1.78.0-x86_64-linux-gnu) + google-protobuf (~> 4.27) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + unicode-display_width (2.6.0) + webrick (1.8.1) + +PLATFORMS + arm64-darwin + x86_64-linux-gnu + +DEPENDENCIES + jekyll (~> 4.3.4) + just-the-docs (= 0.10.0) + +BUNDLED WITH + 2.5.9 diff --git a/docs/LICENSE b/docs/LICENSE new file mode 100644 index 00000000..7d510d02 --- /dev/null +++ b/docs/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 just-the-docs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..d6e45a1c --- /dev/null +++ b/docs/README.md @@ -0,0 +1,174 @@ +# GLS-OS Wiki + +This is a *bare-minimum* template to create a [Jekyll] site that: + +- uses the [Just the Docs] theme; +- can be built and published on [GitHub Pages]; +- can be built and previewed locally, and published on other platforms. + +More specifically, the created site: + +- uses a gem-based approach, i.e. uses a `Gemfile` and loads the `just-the-docs` gem; +- uses the [GitHub Pages / Actions workflow] to build and publish the site on GitHub Pages. + +To get started with creating a site, simply: + +1. click "[use this template]" to create a GitHub repository +2. go to Settings > Pages > Build and deployment > Source, and select GitHub Actions + +If you want to maintain your docs in the `docs` directory of an existing project repo, see [Hosting your docs from an existing project repo](#hosting-your-docs-from-an-existing-project-repo). + +After completing the creation of your new site on GitHub, update it as needed: + +## Replace the content of the template pages + +Update the following files to your own content: + +- `index.md` (your new home page) +- `README.md` (information for those who access your site repo on GitHub) + +## Changing the version of the theme and/or Jekyll + +Simply edit the relevant line(s) in the `Gemfile`. + +## Adding a plugin + +The Just the Docs theme automatically includes the [`jekyll-seo-tag`] plugin. + +To add an extra plugin, you need to add it in the `Gemfile` *and* in `_config.yml`. For example, to add [`jekyll-default-layout`]: + +- Add the following to your site's `Gemfile`: + + ```ruby + gem "jekyll-default-layout" + ``` + +- And add the following to your site's `_config.yml`: + + ```yaml + plugins: + - jekyll-default-layout + ``` + +Note: If you are using a Jekyll version less than 3.5.0, use the `gems` key instead of `plugins`. + +## Publishing your site on GitHub Pages + +1. If your created site is `YOUR-USERNAME/YOUR-SITE-NAME`, update `_config.yml` to: + + ```yaml + title: YOUR TITLE + description: YOUR DESCRIPTION + theme: just-the-docs + + url: https://YOUR-USERNAME.github.io/YOUR-SITE-NAME + + aux_links: # remove if you don't want this link to appear on your pages + Template Repository: https://github.com/YOUR-USERNAME/YOUR-SITE-NAME + ``` + +2. Push your updated `_config.yml` to your site on GitHub. + +3. In your newly created repo on GitHub: + - go to the `Settings` tab -> `Pages` -> `Build and deployment`, then select `Source`: `GitHub Actions`. + - if there were any failed Actions, go to the `Actions` tab and click on `Re-run jobs`. + +## Building and previewing your site locally + +Assuming [Jekyll] and [Bundler] are installed on your computer: + +1. Change your working directory to the root directory of your site. + +2. Run `bundle install`. + +3. Run `bundle exec jekyll serve` to build your site and preview it at `localhost:4000`. + + The built site is stored in the directory `_site`. + +## Publishing your built site on a different platform + +Just upload all the files in the directory `_site`. + +## Customization + +You're free to customize sites that you create with this template, however you like! + +[Browse our documentation][Just the Docs] to learn more about how to use this theme. + +## Hosting your docs from an existing project repo + +You might want to maintain your docs in an existing project repo. Instead of creating a new repo using the [just-the-docs template](https://github.com/just-the-docs/just-the-docs-template), you can copy the template files into your existing repo and configure the template's Github Actions workflow to build from a `docs` directory. You can clone the template to your local machine or download the `.zip` file to access the files. + +### Copy the template files + +1. Create a `.github/workflows` directory at your project root if your repo doesn't already have one. Copy the `pages.yml` file into this directory. GitHub Actions searches this directory for workflow files. + +2. Create a `docs` directory at your project root and copy all remaining template files into this directory. + +### Modify the GitHub Actions workflow + +The GitHub Actions workflow that builds and deploys your site to Github Pages is defined by the `pages.yml` file. You'll need to edit this file to that so that your build and deploy steps look to your `docs` directory, rather than the project root. + +1. Set the default `working-directory` param for the build job. + + ```yaml + build: + runs-on: ubuntu-latest + defaults: + run: + working-directory: docs + ``` + +2. Set the `working-directory` param for the Setup Ruby step. + + ```yaml + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.3' + bundler-cache: true + cache-version: 0 + working-directory: '${{ github.workspace }}/docs' + ``` + +3. Set the path param for the Upload artifact step: + + ```yaml + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: docs/_site/ + ``` + +4. Modify the trigger so that only changes within the `docs` directory start the workflow. Otherwise, every change to your project (even those that don't affect the docs) would trigger a new site build and deploy. + + ```yaml + on: + push: + branches: + - "main" + paths: + - "docs/**" + ``` + +## Licensing and Attribution + +This repository is licensed under the [MIT License]. You are generally free to reuse or extend upon this code as you see fit; just include the original copy of the license (which is preserved when you "make a template"). While it's not necessary, we'd love to hear from you if you do use this template, and how we can improve it for future use! + +The deployment GitHub Actions workflow is heavily based on GitHub's mixed-party [starter workflows]. A copy of their MIT License is available in [actions/starter-workflows]. + +---- + +[^1]: [It can take up to 10 minutes for changes to your site to publish after you push the changes to GitHub](https://docs.github.com/en/pages/setting-up-a-github-pages-site-with-jekyll/creating-a-github-pages-site-with-jekyll#creating-your-site). + +[Jekyll]: https://jekyllrb.com +[Just the Docs]: https://just-the-docs.github.io/just-the-docs/ +[GitHub Pages]: https://docs.github.com/en/pages +[GitHub Pages / Actions workflow]: https://github.blog/changelog/2022-07-27-github-pages-custom-github-actions-workflows-beta/ +[Bundler]: https://bundler.io +[use this template]: https://github.com/just-the-docs/just-the-docs-template/generate +[`jekyll-default-layout`]: https://github.com/benbalter/jekyll-default-layout +[`jekyll-seo-tag`]: https://jekyll.github.io/jekyll-seo-tag +[MIT License]: https://en.wikipedia.org/wiki/MIT_License +[starter workflows]: https://github.com/actions/starter-workflows/blob/main/pages/jekyll.yml +[actions/starter-workflows]: https://github.com/actions/starter-workflows/blob/main/LICENSE diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 00000000..c81252a8 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,60 @@ +title: Just the Docs Template +description: A starter template for a Jeykll site using the Just the Docs theme! +theme: just-the-docs + +url: https://just-the-docs.github.io + +# See : https://just-the-docs.github.io/just-the-docs/docs/configuration/ + +aux_links: + Template Repository: https://github.com/just-the-docs/just-the-docs-template + +logo: "/assets/images/logo.png" +favicon_ico: "/assets/images/favicon.ico" + +mermaid: + # Version of mermaid library + # Pick an available version from https://cdn.jsdelivr.net/npm/mermaid/ + version: "9.1.3" + +# Aux links for the upper right navigation +aux_links: + "GamingLinuxFR": + - "https://www.gaminglinux.fr" + +# Makes Aux links open in a new tab. Default is false +aux_links_new_tab: true +nav_external_links_new_tab: true + +nav_enabled: true +fold_nav: true +heading_anchors: true + +last_edit_timestamp: true # show or hide edit time - page must have `last_modified_date` defined in the frontmatter +last_edit_time_format: "%b %e %Y at %I:%M %p" # uses ruby's time format: https://ruby-doc.org/stdlib-2.7.0/libdoc/time/rdoc/Time.html + +enable_copy_code_button: true + +callouts_level: quiet +callouts: + info: + title: "ℹ️ Information" + color: blue + warning: + title: ⚠️ Avertissement + color: red + note: + title: "📝 Note" + color: purple + todo: + title: "📋 Todo" + color: yellow + in-progress: + title: "🚧 En construction" + color: yellow + screen: + title: "" + color: blue + +# Enable mathjax +math: mathjax diff --git a/docs/_sass/custom/custom.scss b/docs/_sass/custom/custom.scss new file mode 100644 index 00000000..fba0c063 --- /dev/null +++ b/docs/_sass/custom/custom.scss @@ -0,0 +1,20 @@ +.side-bar { + z-index: 0; + display: flex; + flex-wrap: wrap; + background-color: $sidebar-color; + + @include mq(md) { + flex-flow: column nowrap; + position: fixed; + width: $nav-width-md; + height: 100%; + border-right: $border $border-color; + align-items: flex-end; + } + + @include mq(lg) { + width: calc((100% - #{$nav-width + $content-width}) / 20 + #{$nav-width}); + min-width: $nav-width; + } +} diff --git a/docs/assets/images/amd.svg b/docs/assets/images/amd.svg new file mode 100644 index 00000000..e43ffa09 --- /dev/null +++ b/docs/assets/images/amd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/images/assistant.svg b/docs/assets/images/assistant.svg new file mode 100644 index 00000000..0eace851 --- /dev/null +++ b/docs/assets/images/assistant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/images/balenaEtcher.png b/docs/assets/images/balenaEtcher.png new file mode 100644 index 00000000..c027f54e Binary files /dev/null and b/docs/assets/images/balenaEtcher.png differ diff --git a/docs/assets/images/boot.svg b/docs/assets/images/boot.svg new file mode 100644 index 00000000..7b468b30 --- /dev/null +++ b/docs/assets/images/boot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/images/checksum.svg b/docs/assets/images/checksum.svg new file mode 100644 index 00000000..9d70b1aa --- /dev/null +++ b/docs/assets/images/checksum.svg @@ -0,0 +1,2 @@ + +fingerprint \ No newline at end of file diff --git a/docs/assets/images/computer.svg b/docs/assets/images/computer.svg new file mode 100644 index 00000000..6fa85a34 --- /dev/null +++ b/docs/assets/images/computer.svg @@ -0,0 +1,20 @@ + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/images/end.svg b/docs/assets/images/end.svg new file mode 100644 index 00000000..93c47bf4 --- /dev/null +++ b/docs/assets/images/end.svg @@ -0,0 +1 @@ +end-button \ No newline at end of file diff --git a/docs/assets/images/favicon.ico b/docs/assets/images/favicon.ico new file mode 100644 index 00000000..e323fa82 Binary files /dev/null and b/docs/assets/images/favicon.ico differ diff --git a/docs/assets/images/gpu.svg b/docs/assets/images/gpu.svg new file mode 100644 index 00000000..a4752cdc --- /dev/null +++ b/docs/assets/images/gpu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/images/installation.svg b/docs/assets/images/installation.svg new file mode 100644 index 00000000..3eb92d1a --- /dev/null +++ b/docs/assets/images/installation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/images/intel.svg b/docs/assets/images/intel.svg new file mode 100644 index 00000000..139a4d37 --- /dev/null +++ b/docs/assets/images/intel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/images/logo.png b/docs/assets/images/logo.png new file mode 100644 index 00000000..2b0bbb08 Binary files /dev/null and b/docs/assets/images/logo.png differ diff --git a/docs/assets/images/network.svg b/docs/assets/images/network.svg new file mode 100644 index 00000000..a8393b54 --- /dev/null +++ b/docs/assets/images/network.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/docs/assets/images/nvidia.svg b/docs/assets/images/nvidia.svg new file mode 100644 index 00000000..ce91c722 --- /dev/null +++ b/docs/assets/images/nvidia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/images/requirement.svg b/docs/assets/images/requirement.svg new file mode 100644 index 00000000..431898c0 --- /dev/null +++ b/docs/assets/images/requirement.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/images/settings.svg b/docs/assets/images/settings.svg new file mode 100644 index 00000000..5ed5f0c2 --- /dev/null +++ b/docs/assets/images/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/images/usbKey.svg b/docs/assets/images/usbKey.svg new file mode 100644 index 00000000..009925d5 --- /dev/null +++ b/docs/assets/images/usbKey.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..22506c08 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,26 @@ +--- +title: Accueil +layout: home +has_children: true +nav_order: 1 +--- + +{: .in-progress } +> - Cette documentation est en cours de rédaction et est sujet aux changements. +> - De nombreuses illustrations (images, gif) apparaîtront au fil du temps. +> - Certaines fonctionnalités décrites peuvent ne pas être encore fusionnées. +> - Consultez cette [pull-request](https://github.com/GLF-OS/Nixos-by-GLF/pull/100). + +# GLF-OS + +Gaming Linux Fr est une communauté de passionnés articulée autour d'un Discord, d'un site web et de la chaîne Youtube de Vinceff. +Aujourd'hui, nous sommes la première communauté francophone dédiée au jeu vidéo sur Linux. + +Nous lançons régulièrement des projets pour améliorer l'accessibilité de Linux. Par exemple, nous avons déjà travaillé sur des scripts pour Arch Linux (Architect) ainsi que sur des applications pour faciliter l'installation des logiciels telles que Easy Flatpak. + +Notre communauté réalise également des exercices d'audit, afin de mettre en avant les distributions Linux qui s'approchent le plus de notre vision idéale. Celle-ci étant axée pour les nouveaux venus (installation Out of the box), le multimédia et le gaming et ce dès l'installation. + +Et c'est en cumulant ces deux exercices que l'idée de créer notre propre distribution est née : Obtenir un système d'exploitation stable, accessible et orienté gaming. Il répond à tous les aspects au cahier des charges GLF. + +Ce projet est avant tout un projet communautaire, pour Gaming Linux Fr. Il est également un défi, relevé par la communauté. + diff --git a/docs/pages/assistance/debugUserConfigurationWithFlake.md b/docs/pages/assistance/debugUserConfigurationWithFlake.md new file mode 100644 index 00000000..48f2977e --- /dev/null +++ b/docs/pages/assistance/debugUserConfigurationWithFlake.md @@ -0,0 +1,299 @@ +--- +title: Débugguer la configuration d'un utilisateur à l'aide du flocon +layout: default +parent: Assistance +nav_order: 3 +--- + +{: .in-progress } +> Cette page est en cours de rédaction, elle peut être incomplète. +> La documentation décrit un cas d'utilisation fonctionnant uniquement après que la Pull Request #100 ait été fusionné. + +{: .todo } +> Illustrer ce que voit l'utilisateur & l'assistant + +Nous allons voir ici comment aider l'utilisateur en profitant du mécanisme des flocons. + +L'idée est la suivante : + +- L'utilisateur à un `flocon` dans sa configuration ce qui lui permet de modifier la provenance des sources qu'il utilise pour +ses paquets, modules, etc. +GLF-OS est un simple module que l'on appose sur une configuration NixOS, le flocon que nous fournissons par défaut à l'utilisateur récupère le module GLF-OS +du dépôt `Gaming-Linux-FR/GLF-OS`. +Nous allons voir un exemple de dépannage où l'assistant fournira une branche temporaire de debug à l'utilisateur. +L'utilisateur aura trois tâches, `rebuild`, fournir les logs et alerter la personne lorsque le problème est résolu. + +# Contexte + +Dans cet exemple, nous allons partir d'un cas connu, l'utilisation de GLF-OS sur un laptop équipé d'un ancien GPU NVIDIA. +Cet situation implique deux problèmes : + +- L'utilisateur doit utiliser une ancienne version du pilote GPU, dans notre exemple la version `470`. +- Puisque l'utilisateur utilise une ancienne version (`470`), il doit désactiver l'option `hardware.nvidia.dynamicBoost.enable` qui inclut la fonctionnalité `Dynamic Boost` +uniquement disponible à partir du pilote `560` et plus, cette option est activé par défaut avec GLF-OS. + +Dans la confiuration, ça corresponds à : + +```nix +hardware.nvidia.package = lib.mkForce config.boot.kernelPackages.nvidiaPackages.legacy_470; +hardware.nvidia.dynamicBoost.enable = lib.mkForce false; +# ou +hardware.nvidia = { + package = lib.mkForce config.boot.kernelPackages.nvidiaPackages.legacy_470; + dynamicBoost.enable = lib.mkForce false; +}; +``` + +# Situation +## Récupérer les informations + +L'utilisateur vous a fourni dans une issue ou un `help-me` sur discord, des informations sur ça machine (corresponds au retour de commande `glf-systeminfo`). + +```bash +--- Infos --- +Machine: + Type: Laptop System: LENOVO product: 80DU v: Lenovo Y70-70 Touch serial: + Mobo: LENOVO model: Lenovo Y70-70 Touch v: 31900058WIN serial: + UEFI: LENOVO v: 9ECN31WW(V1.14) date: 08/18/2014 + +--- CPU --- +Architecture : x86_64 +Mode(s) opératoire(s) des processeurs : 32-bit, 64-bit +Identifiant constructeur : GenuineIntel +Nom de modèle : Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz + +--- GPU --- +00:02.0 VGA compatible controller: Intel Corporation 4th Gen Core Processor Integrated Graphics Controller (rev 06) +01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 860M] (rev a2) + +--- Disque --- +Filesystem Size Used Avail Use% Mounted on +devtmpfs 393M 0 393M 0% /dev +tmpfs 3,9G 0 3,9G 0% /dev/shm +tmpfs 2,0G 7,1M 2,0G 1% /run +/dev/sda2 228G 37G 180G 17% / +efivarfs 88K 56K 28K 67% /sys/firmware/efi/efivars +tmpfs 1,0M 0 1,0M 0% /run/credentials/systemd-journald.service +tmpfs 1,0M 0 1,0M 0% /run/credentials/systemd-tmpfiles-setup-dev-early.service +tmpfs 1,0M 0 1,0M 0% /run/credentials/systemd-tmpfiles-setup-dev.service +tmpfs 3,9G 1,2M 3,9G 1% /run/wrappers +tmpfs 1,0M 0 1,0M 0% /run/credentials/systemd-vconsole-setup.service +/dev/sda1 511M 91M 421M 18% /boot +tmpfs 1,0M 0 1,0M 0% /run/credentials/systemd-tmpfiles-setup.service +tmpfs 1,0M 0 1,0M 0% /run/credentials/systemd-sysctl.service +tmpfs 1,0M 0 1,0M 0% /run/credentials/getty@tty1.service +tmpfs 786M 72K 786M 1% /run/user/1000 + +--- RAM --- + total utilisé libre partagé tamp/cache disponible +Mem: 7,7Gi 1,2Gi 4,9Gi 148Mi 2,0Gi 6,5Gi +Échange: 0B 0B 0B +``` + +Dans la section `GPU`, vous pouvez remarquer `01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX860M] (rev a2)`, ça nous apprends que le GPU est une +**GTX860M**. + +La commande `sudo nvidia-smi --version` nous apprends que nous utilisons le driver 565.77 : + +```bash +NVIDIA-SMI version : 565.77 +NVML version : 565.77 +DRIVER version : 565.77 +CUDA Version : 12.7 +``` + +{: .note } +> Puisque nous savons déjà comment résoudre le problème, passons à l'étape dédié aux tests + +## Création d'une branche de debug + +{: .info } +> Nous allons supposer que vous avez déjà configuré git et votre compte Github, si vous ne l'avez pas fait, consulter la page sur "Comment contribuer". + +- Depuis la page du [projet](https://github.com/Gaming-Linux-FR/GLF-OS), cliquez sur le bouton `Fork` pour créer une copie du projet. +- Depuis votre machine : + +```bash +git clone https://github.com/votreUtilisateur/GLF-OS +``` + +- Assurez-vous de partir de la branche `main` + +```bash +git checkout main +``` + +- Créez une nouvelle branche : + +```bash +git checkout -b debug_user +``` + +{: .note } +> Le nom de la nouvelle branche n'a pas d'importance, essayez de mettre un prefix `debug_` ou n'importe qu'elle information qui permette de clairement +> comprendre le rôle de cette branche. + +- Poussez votre branche vers votre fork + +```bash +git push origin debug_user +``` + +## Modifier le flocon utilisateur + +Demandez à l'utilisateur d'ouvrir le fichier `/etc/nixos/flake.nix` puis d'effectuer les modifications suivantes : + +Par défaut, l'utilisateur devrait avoir le flocon : + +```nix +{ + + description = "GLF-OS"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; + glf.url = "github:Gaming-Linux-FR/GLF-OS/main"; + }; + + outputs = { self, nixpkgs, glf, ... }@inputs: + let + pkgsSettings = system: import nixpkgs { + inherit system; + config.allowUnfree = true; + }; + in { + nixosConfigurations."GLF-OS" = nixpkgs.lib.nixosSystem { + pkgs = pkgsSettings "x86_64-linux"; + modules = [ + ./configuration.nix + inputs.glf.nixosModules.default + ]; + }; + }; + +} +``` + +Ici, l'utilisateur doit éditer la section inputs et ajouter un caractère `#` devant `glf.url`. +Ensuite, il ajoute une nouvelle ligne pointant vers votre dépôt : + +```nix + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; + #glf.url = "github:Gaming-Linux-FR/GLF-OS/main"; + glf.url = "github:yourGithubUsername/GLF-OS/debug_user"; + }; +``` + +{: .note } +> Vous devez faire attention à bien préciser le nom de votre branche de debug, auquel cas, les modifications portés sur votre branche n'auront aucune +> conséquence sur la machine utilisateur. + +## Test de la branche + +L'utilisateur doit maintenant effectuer les commandes : + +```bash +glf-update && glf-switch +``` + +Si aucune erreur n'a été commise, l'utilisateur ne devrait avoir aucune erreur. + +## Correction + +L'assistant peut maintenant ajouter des modifications pour corriger le problème chez l'utilisateur. + +Nous allons ouvrir le fichier `./modules/default/debug.nix`. + +```nix +{ lib, config, pkgs, ... }: + +{ + + options.glf.debug.enable = lib.mkOption { + description = "Enable GLF debug"; + type = lib.types.bool; + default = true; + }; + + config = lib.mkIf config.glf.debug.enable { + + # Add your debug configurations here + + }; + +} +``` + +Nous allons ajouter notre correctif mentionné au début de cette page à savoir : + +```nix +hardware.nvidia.package = lib.mkForce config.boot.kernelPackages.nvidiaPackages.legacy_470; +hardware.nvidia.dynamicBoost.enable = lib.mkForce false; +``` + +Nous avons maintenant : + + +```nix +{ lib, config, pkgs, ... }: + +{ + + options.glf.debug.enable = lib.mkOption { + description = "Enable GLF debug"; + type = lib.types.bool; + default = true; + }; + + config = lib.mkIf config.glf.debug.enable { + + # Add your debug configurations here + hardware.nvidia.package = lib.mkForce config.boot.kernelPackages.nvidiaPackages.legacy_470; + hardware.nvidia.dynamicBoost.enable = lib.mkForce false; + + }; + +} +``` + +```bash +git add `./modules/default/debug.nix` +git commit -m "Fixer la version du pilote nvidia sur 470, désactivation de dynamic Boost". +git push origin +``` + +{: .info } +> Prenez le temps d'indiquer un message à vos commits, ça vous permettra à vous aux mainteneurs du projet de comprendre ce que vous avez fait. + +## Test de la correction chez l'utilisateur + +Depuis l'application `Console`, + +```bash +glf-update && glf-switch +``` + +Puisque nous touchons au pilote nvidia, l'utilisateur devrait redémarrer pour s'assurer que la correction ait bien fonctionné. + +Après le redémarrage, l'utilisateur s'assure que son driver est à la bonne version : + +```bash +sudo nvidia-smi --version +``` + +## Rapporter la solution au projet + +Maintenant que vous avez confirmé que la modification a bien résolu le problème, il vous reste plus qu'à ouvrir une issue pour expliquer ce que vous avez fait. +Une pull request "propre" sera ensuite ouverte pour inclure les modifications. + +{: .todo } +> Lorsque le projet à introduit les changements au projet, l'utilisateur doit ensuite rebasculer sur l'input GLF d'origine, sinon il ne recevra pas les mises à jours du module. + + + + + + + + diff --git a/docs/pages/assistance/easyFlatpakNotInstalled.md b/docs/pages/assistance/easyFlatpakNotInstalled.md new file mode 100644 index 00000000..6f3c02a8 --- /dev/null +++ b/docs/pages/assistance/easyFlatpakNotInstalled.md @@ -0,0 +1,44 @@ +--- +title: EasyFlatpak n'est pas installé +layout: default +parent: Assistance +--- + +{: .warning } +> Cette page deviendra caduc lorsqu'*EasyFlatpak* sera fournis via un paquet nix natif au lieu de flatpak. + +# Nature du problème +**Easy Flatpak** n'apparaît pas, ni dans la barre des tâches, ni dans la liste d'applications. + +# Raison du problème +Easy Flatpak est actuellement installé via Flatpak. + +Pour des raisons techniques, l'installation de ce dernier est exécuté post-installation avec le service `flatpak-repo` et n'apparaît donc pas immédiatement au premier démarrage. +Plusieurs dépendances doivent être d'abord installé ce qui nécessite un certains temps (dépends de votre connexion internet). + +Après un certains temps, EasyFlatpak devrait apparaître de lui-même (après une dizaine de minutes) ou après un redémarrage. + +Pour consulter la progression de l'installation : + +- **Ouvrez** l'application `Console`, +- **Exécutez la commande** dans le terminal : + +```bash +sudo journalctl -u flatpak-repo.service -f +``` + +Vous pourriez également avoir un problème lié au réseau, vérifiez que vous ayez bien une connexion internet. + +# Résolution + +Si le service est planté, EasyFlatpak n'est pas installé après un long moment, depuis l'application `Console`, **exécutez la commande**: + +```bash +flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo && flatpak install -y flathub org.dupot.easyflatpak +``` + +- **Redémarrez**. + +# Vérification + +EasyFlatpak doit apparaître dans votre liste d'application et la barre des tâches. diff --git a/docs/pages/assistance/errorNvidiaDynamicBoost.md b/docs/pages/assistance/errorNvidiaDynamicBoost.md new file mode 100644 index 00000000..2863446d --- /dev/null +++ b/docs/pages/assistance/errorNvidiaDynamicBoost.md @@ -0,0 +1,76 @@ +--- +title: Erreur avec Nvidia Dynamic Boost +layout: default +parent: Assistance +--- + +# Nature du problème + +Après une reconstruction via `glf-switch`, si vous disposez d'un GPU Nvidia, vous pourriez obtenir l'erreur suivante : + +```bash +building Nix... +building the system configuration... +setting up /etc... +reloading user units for agarbu... +restarting sysinit-reactivation.target +the following new units started: flatpak-repo.service, run-credentials-systemd\x2dtmpfiles\x2dresetup.service.mount, sysinit-reactivation.target, systemd-tmpfiles-resetup.service +warning: the following units failed: nvidia-powerd.service +nvidia-powerd.service - nvidia-powerd service + Loaded: loaded (/etc/systemd/system/nvidia-powerd.service; enabled; preset: ignored) + Active: failed (Result: exit-code) since Sat 2025-01-11 15:02:27 CET; 269ms ago +Invocation: 37bcf2d843e54b43954543e7542eed8c + Process: 2981 ExecStart=/nix/store/rswdx3495sqz279ddaw40mjfx23846hj-nvidia-x11-565.57.01-6.12-1-bin/bin/nvidia-powerd (code=exited, status=1/FAILURE) + Main PID: 2981 (code=exited, status=1/FAILURE) + IP: 0B in, 0B out + IO: 0B read, 0B written + Mem peak: 1.5M + CPU: 14ms + +janv. 11 15:02:27 GLF-OS /nix/store/rswdx3495sqz279ddaw40mjfx23846hj-nvidia-x11-565.57.01-6.12-1-bin/bin/nvidia-powerd[2981]: nvidia-powerd version:1.0(build 1) +janv. 11 15:02:27 GLF-OS /nix/store/rswdx3495sqz279ddaw40mjfx23846hj-nvidia-x11-565.57.01-6.12-1-bin/bin/nvidia-powerd[2981]: SBIOS support not found for NVPCF GET_SUPPORTED function +janv. 11 15:02:27 GLF-OS /nix/store/rswdx3495sqz279ddaw40mjfx23846hj-nvidia-x11-565.57.01-6.12-1-bin/bin/nvidia-powerd[2981]: no matching GPU found +janv. 11 15:02:27 GLF-OS /nix/store/rswdx3495sqz279ddaw40mjfx23846hj-nvidia-x11-565.57.01-6.12-1-bin/bin/nvidia-powerd[2981]: failed to initialize Dynamic Boost +janv. 11 15:02:27 GLF-OS /nix/store/rswdx3495sqz279ddaw40mjfx23846hj-nvidia-x11-565.57.01-6.12-1-bin/bin/nvidia-powerd[2981]: failed to detach GPU ID 256 +janv. 11 15:02:27 GLF-OS /nix/store/rswdx3495sqz279ddaw40mjfx23846hj-nvidia-x11-565.57.01-6.12-1-bin/bin/nvidia-powerd[2981]: failed to initialize Dynamic Boost +janv. 11 15:02:27 GLF-OS /nix/store/rswdx3495sqz279ddaw40mjfx23846hj-nvidia-x11-565.57.01-6.12-1-bin/bin/nvidia-powerd[2981]: failed to detach GPU ID 256 +janv. 11 15:02:27 GLF-OS systemd[1]: nvidia-powerd.service: Main process exited, code=exited, status=1/FAILURE +janv. 11 15:02:27 GLF-OS systemd[1]: nvidia-powerd.service: Failed with result 'exit-code'. +janv. 11 15:02:27 GLF-OS systemd[1]: Failed to start nvidia-powerd.service. +warning: error(s) occurred while switching to the new configuration +``` + + +# Raison du problème + +Cette erreur peut apparaître lorsque l'option NixOS `hardware.nvidia.dynamicBoost.enable` est activée et que votre GPU n'est pas compatible car trop ancien.
+**Nvidia-powerd** fournit un support pour la fonctionnalité [NVIDIA Dynamic Boost](https://download.nvidia.com/XFree86/Linux-x86_64/510.47.03/README/dynamicboost.html), il permet de contrôler l'alimentation du CPU et du GPU en fonction de la charge de travail du système. + + +# Résolution du problème + +- **Ouvrez** l'application `Console`, +- **Saisissez** la commande : + +```bash +sudo nano /etc/nixos/customConfig/default.nix +``` + +Ajoutez à l'intérieur de la seconde accolade : + +```nix +hardware.nvidia.dynamicBoost.enable = lib.mkForce false; +``` + +- **Sauvegardez** (`CTRL+O`, `ENTER`) puis **quittez** (`CTRL+X`, `ENTER`) + +- **Reconstruisez** une nouvelle version GLFOS: + +```bash +glf-switch +``` + +# Vérification + +L'erreur devrait avoir disparu. + diff --git a/docs/pages/assistance/errorWithNvidiaAfterUpdate.md b/docs/pages/assistance/errorWithNvidiaAfterUpdate.md new file mode 100644 index 00000000..fa6df55d --- /dev/null +++ b/docs/pages/assistance/errorWithNvidiaAfterUpdate.md @@ -0,0 +1,50 @@ +--- +title: Erreur avec Nvidia après une mise à jour +layout: default +parent: Assistance +--- + +# Nature du problème + +Après une reconstruction via `glf-switch`, si vous disposez d'un GPU Nvidia, vous pourriez obtenir l'erreur suivante : + +```bash +nvidia-powerd.service - nvidia-powerd service + Loaded: loaded (/etc/systemd/system/nvidia-powerd.service; enabled; preset: enabled) + Active: failed (Result: exit-code) since Mon 2024-12-02 18:57:41 EET; 268ms ago + Invocation: 3407735c2e43471e9a1c29c4209082a6 + Process: 149160 ExecStart=/nix/store/xdxyd05p3brlj7s1nsij58kivf7q9lc1-nvidia-x11-550.120-6.10.9-bin/bin/nvidia-powerd (code=exited, status=1/FAILURE) +``` + +Remarquez `failed to initialize Dynamic Boost` dans l'erreur. + +# Raison du problème + +Cette erreur peut apparaître après la mise à jour du pilote Nvidia, le service `nvidia-powerd` n'arrive pas à se lancer.
+**Nvidia-powerd** fournit un support pour la fonctionnalité [NVIDIA Dynamic Boost](https://download.nvidia.com/XFree86/Linux-x86_64/510.47.03/README/dynamicboost.html), il permet de contrôler l'alimentation du CPU et du GPU en fonction de la charge de travail du système. + +Parfois, après une mise à jour, le service peine à se relancer. + +# Résolution du problème + +- **Ouvrez** l'application `Console`, +- **Saisissez** la commande : + +```bash +glf-boot +``` + +Cette commande va construire la nouvelle version et l'exécuter au prochain démarrage. + +- **Redémarrez**. + +# Vérification + +- **Ouvrez** l'application `Console`, +- **Saisissez** la commande : + +```bash +sudo systemctl status nvidia-powerd.service +``` + +L'erreur devrait avoir disparu. diff --git a/docs/pages/assistance/errorWithNvidiaDriverForOldGpu.md b/docs/pages/assistance/errorWithNvidiaDriverForOldGpu.md new file mode 100644 index 00000000..33eb574d --- /dev/null +++ b/docs/pages/assistance/errorWithNvidiaDriverForOldGpu.md @@ -0,0 +1,65 @@ +--- +title: Erreur avec le pilote avec un ancien GPU Nvidia +layout: default +parent: Assistance +--- + +# Nature du problème + +Si vous lancez la commande `sudo dmesg`, si vous disposez d'un GPU Nvidia, vous pourriez obtenir l'erreur suivante : + +```bash +NVRM: The NVIDIA GeForce 920M GPU installed in this system is +NVRM: supported through the NVIDIA 470.xx Legacy drivers. Please +NVRM: visit http://www.nvidia.com/object/unix.html fo more +NVRM: information. The 565.57.01 NVIDIA driver will ignore +NVRM: this GPU. Continuing probe... +NVRM: No NVIDIA GPU found. +``` + +# Raison du problème + +Comme indiqué clairement dans l'erreur, votre système utilise un driver Nvidia qui ne supporte pas votre GPU. +Il est nécessaire d'utiliser une ancienne version, à savoir `470.xx`. + +# Résolution du problème + +- **Ouvrez** l'application `Console`, +- **Saisissez** la commande : + +```bash +sudo nano /etc/nixos/customConfig/default.nix +``` + +Ajoutez à l'intérieur de la seconde accolade : + +```nix +hardware.nvidia.package = lib.mkForce config.boot.kernelPackages.nvidiaPackages.legacy_470; +hardware.nvidia.dynamicBoost.enable = lib.mkForce false; +``` + +{: .info } +> Si vous êtes amené à utiliser un vieux pilote, vous devrez aussi désactiver la fonctionnalité `DynamicBoost` disponible sur les pilotes `560.xx`.
+> Cette seconde ligne vous permet de corriger l'erreur lié à [Dynamic Boost](./errorNvidiaDynamicBoost.html). + + +- **Sauvegardez** (`CTRL+O`, `ENTER`) puis **quittez** (`CTRL+X`, `ENTER`) + +- **Reconstruisez** une nouvelle version GLFOS: + +```bash +glf-switch +``` + +- Si vous n'obtenez pas d'erreur, **redémarrez**. + +# Vérification + +- **Ouvrez** l'application `Console`, +- **Saisissez** la commande : + +```bash +sudo nvidia-smi +``` + +Vérifiez le numéro de version du pilote, vous devriez obtenir `470.xx`. diff --git a/docs/pages/assistance/helpUser.md b/docs/pages/assistance/helpUser.md new file mode 100644 index 00000000..9d9c8a7f --- /dev/null +++ b/docs/pages/assistance/helpUser.md @@ -0,0 +1,37 @@ +--- +title: Aider un utilisateur +layout: default +parent: Assistance +nav_order: 2 +--- + +{: .warning } +> * Cette page se base sur le PR #100 qui n'est pas encore fusionné dans dev. + +# Contexte + +Un utilisateur demande de l'aide à propos d'un problème, vous devez récolter des informations pour pouvoir l'aider à le résoudre. +Cette page vise à vous guider pour l'aider efficacemment. + +{: .info } +> N'oubliez pas de récolter les informations, ce sont ces informations qui permettent d'améliorer la documentation et réparer les problèmes connus. + +## Réunir des informations + +Si l'utilisateur ne l'a pas fait, demandez-lui de récupérer ce [formulaire](./troubleshootingForm.html) et d'y répondre. + +## Interpréter les informations + +Dépendamment des réponses fournit, posez-vous ces questions : + +### Si l'utilisateur a modifié la configuration par défaut + +- *Les options ajoutées, ont-elles un rapport avec le problème rencontré par l'utilisateur ?* (Exemple: Un problème GPU n'a aucun rapport avec le pilote d'imprimante) +- *Les options ajoutées, sont-elles en contradiction avec celle fournit par le module GLF-OS ?* (Exemple: Le module GLF active Firefox, l'option utilisateur le supprime) +- *L'erreur est-t-elle liée à une erreur de syntaxe nix ?* + +### Configuration matérielle + +- *L'appareil de l'utilisateur répond-t-il aux exigences minimales de GLF-OS (CPU, RAM, GPU, Disque) ?* +- *L'appareil de l'utilisateur dispose-t-il d'assez d'espace disque ?* + diff --git a/docs/pages/assistance/index.md b/docs/pages/assistance/index.md new file mode 100644 index 00000000..2e0b8723 --- /dev/null +++ b/docs/pages/assistance/index.md @@ -0,0 +1,5 @@ +--- +title: Assistance +layout: default +has_children: true +--- diff --git a/docs/pages/assistance/troubleshootingForm.md b/docs/pages/assistance/troubleshootingForm.md new file mode 100644 index 00000000..c39009f6 --- /dev/null +++ b/docs/pages/assistance/troubleshootingForm.md @@ -0,0 +1,87 @@ +--- +title: Formulaire de dépannage +layout: default +parent: Assistance +nav_order: 1 +--- + +# Formulaire de dépannage pour les utilisateurs de GLF-OS + +Ce formulaire est conçu pour aider l'utilisateur à fournir des informations clairs et pertinentes pour la ou les personnes qui lui viennent en aide de sorte que ce dernier puisse se concentrer sur la résolution du problème. +Nous ne demandons aucune informations sensible ou personnelle. + + +## 1. Description du problème: + +* **Description du problème :** Quel est le problème que vous rencontrez ? +* **Date d'apparition du problème :** Quand le problème a-t-il commencé, quand l'avez-vous remarqué ? +* **Activité en cours :** Que faisiez-vous lorsque le problème est apparu ? + +## 2. Informations sur le système : + +- **Ouvrez l'application** `Console`: +- **Copier puis collez la commande suivante dans l'application:** + +```bash +nix-shell -p pciutils util-linux inxi gawk --run ' +echo -e "\n--- Infos ---" +inxi -M +echo -e "\n--- CPU ---" +lscpu | grep -E "(Architecture|CPU op-mode|Vendor ID|Model name|Mode\(s\) opératoire\(s\) des processeurs|Identifiant constructeur|Nom de modèle)" | awk "{print \$0}" +echo -e "\n--- GPU ---" +lspci | grep -E "VGA|3D" +echo -e "\n--- Disque ---" +df -h +echo -e "\n--- RAM ---" +free -h +' +``` + +{: .info } +> Un alias qui propose la même commande : `glf-systemInfo` + +## 3. Actions déjà entreprises : + +- Démarches effectuées : Avez-vous déjà essayé des solutions pour résoudre le problème ? (**Oui**/**Non**) + - Si oui, décrivez ce que vous avez fait. + +## 4. Modifications de la configuration : + +- **Changement apportés :** Avez-vous modifié la configuration fournie par défaut ? (**Oui**/**Non**) +- **Détails des modifications :** Si oui, décrivez les changements apportés. + +## 5. Impact du problème: + +- 🪦 Bloquant : Je ne peux pas utiliser le système. + +- 🚨 Majeur : Des fonctionnalités critiques ne sont pas disponibles. + +- ⚠️ Mineur : Gênant, mais gérable. + +- 👁 Cosmétique : Problème visuel ou de confort uniquement. + +## 6. Informations supplémentaires : + +- **Autres détails :** Fournissez toute autre information que vous jugez pertinente. + +## 7. Version du flocon + +- **Fournissez les informations sur votre version du flocon :** + - **Ouvrez l'application `Console`**: + - **Fournissez le retour de la commande:** + +```bash +cat /etc/nixos/flake.lock +``` + + + + + + + + + + + + diff --git a/docs/pages/dev/Justfile.md b/docs/pages/dev/Justfile.md new file mode 100644 index 00000000..bbcb0788 --- /dev/null +++ b/docs/pages/dev/Justfile.md @@ -0,0 +1,22 @@ +--- +title: A propos du justfile +layout: default +parent: Développement +--- + +Le just expose les commandes suivantes : + +| Nom | Fonction | +|-------------------|----------------------------------------------------------------------| +| **just** | *Afficher les options de la commande just* | +| **just check** | *Lancer l'évaluation et les tests sans compiler* | +| **just build** | *Evaluer et compiler le projet* | +| **just build-vm** | *Construire le projet et exécuter une VM du résultat* | +| **just update** | *Mettre à jour le flocon vers la dernière mise à jour disponible* | +| **just clean** | *Nettoyer le dépôt* | +| **just iso** | *Construire l'image iso* | +| **just install** | *Copier l'image iso dans un répertoire `iso` et générer un checksum* | +| **just fix** | *Vérifier la syntaxe et le style du code nix et formatter* | + +{: .note } +> Dans la majorité des cas, vous aurez besoin de `just check` ou `just build` et `just all`. `just fix` fonctionne avec `deadnix`, `statix` et `nixfmt-rfc-style` (ne pas prendre la version `classic`). diff --git a/docs/pages/dev/aboutRepo.md b/docs/pages/dev/aboutRepo.md new file mode 100644 index 00000000..777267d8 --- /dev/null +++ b/docs/pages/dev/aboutRepo.md @@ -0,0 +1,89 @@ +--- +title: A propos du dépôt +layout: default +parent: Développement +--- + +{: .in-progress } +> Cette page se base sur le PR #100 qui n'est pas encore fusionné dans dev. + +{: .todo } +> - Pour éviter les pavés, proposer un screen/balise de code avec une coloration, mise en évidence du rôle de chaque lignes. + +Le dépôt est structuré des éléments principaux suivant : + +```bash +. +├── flake.nix +├── flake.lock +├── Justfile +├── patches/ +│ └── calamares-nixos-extensions/ +│ ├── branding/ +│ │ └── nixos/ +│ │ └── ... +│ ├── config/ +│ │ └── ... +│ └── modules/ +│ └── nixos/ +│ └── main.py +├── iso/ +│ ├── flake.nix +│ ├── flake.lock +│ ├── configuration.nix +│ └── hardware-configuration.nix +├── modules/ +│ └── default/ +│ └── ... +└── assets/ + └── wallpaper/ + └── ... +``` + +| Nom | Fonction | +|----------------|-------------------------------------------------------------------------------------------------------------------------| +| **flake.nix** | Décrit comment générer une image iso. | +| **flake.lock** | Verrou de version de nixpkgs. | +| **Justfile** | Contient des commandes pour automatiser les tests de la configuration, génération d'image iso. | +| **patches** | Contient des modifications pour calamares permettant d'inclure des configurations personnalisées durant l'installation. | +| **iso** | Contient les configurations propres à l'image iso et des configurations ajoutées durant l'installation. | +| **modules** | Contient l'ensemble des modules **GLF** | +| **assets** | C'est ici que sont conservés les assets comme les wallpapers ou icons. | + +# Fonctionnement du flocon à la racine du dépôt. + +Le flocon `./flake.nix` à la racine du dépôt endosse plusieurs capes. + +## Générer une configuration nixos + +- Import des modules NixOS pour obtenir le support d'installation calamares. +- Import des channels pour qu'ils soient disponible dans l'iso (réduit la quantité à télécharger durant l'installation) +- Import du module GLF +- Import du fichier `./nix-cfg/configuration.nix` + +- Permettre l'installation de paquets propriétaire. +- Modification de calamares de sorte à permettre l'ajout d'une configuration personnalisée. + +- Paramètres liés à l'image ISO générée, tels que la compression, l'ajout du répertoire `./nix-cfg` dans l'iso. + +Les lignes ci-dessous sont liés à `./nix-cfg/configuration.nix` + +Le premier rôle est de construire une configuration NixOS incluant : +- Configuration des langues pour proposer du français par défaut +- Configuration du layout pour proposer AZERTY +- Ajout d'un utilisateur "nixos" (par défaut) +- HostName définit sur "GLF-OS" +- Activation du support des flocons + + + + + + + + + + + + + diff --git a/docs/pages/dev/aboutWorkflow.md b/docs/pages/dev/aboutWorkflow.md new file mode 100644 index 00000000..67025929 --- /dev/null +++ b/docs/pages/dev/aboutWorkflow.md @@ -0,0 +1,67 @@ +--- +title: A propos des workflows +layout: default +parent: Développement +--- + +# Qu'est-ce qu'un workflow ? + +Un **workflow** est un mécanisme permettant d'*exécuter des actions après détection d'un événement*. +Ce sont des automatisations qui permettent aux mainteneurs de réduire les tâches répétitives et sujettes aux erreurs. + +## Quelles workflow utilisons-nous ? + +Nous avons actuellement un total de quatre workflows sur le dépôt. + +### Mise à jour du flocon + +Le premier workflow se charge de vérifier si le flocon a une mise à jour. +Il s'exécute tous les dimanches chaque semaine. + +```mermaid +graph TD + A[Début du workflow] -->|Tous les dimanches| B[Lancer `nix flake update`] + B --> C[Le fichier `flake.lock` a-t-il été mis à jour ?] + C -->|Non| D[Arrêt du workflow] + C -->|Oui| E[Créer une nouvelle branche] + E --> F[Ouvrir une pull request] + F --> G[Fin du workflow] +``` + +### Test de la configuration + +Ce workflow surveille les modifications arrivant dans les branches `main`, `dev` et les pull requests. +Pour chaque modifications, le workflow s'exécute et vérifie que les modifications peuvent être construites. + +La durée d'exécution est "aléatoire" dépendamment de la quantité de paquets à construire. +En moyenne, la durée d'exécution est estimée entre 3 et 12 minutes. + +### Génération d'une image ISO + +Ce workflow génère une image ISO, lorsque le mainteneur le déclenche manuellement. +L'iso générée est téléversé sur github. + +{: .note } +> - La bande passante est d'environ 15Mo/s. +> - Ce workflow doit être exécuté sur une machine "selfhosted", en effet la taille de l'iso associée au cache de construction dépasse la limite autorisé par les machines proposés par github. + +### Génération et déploiement de la documentation + +Pour chaque modifications apportés au répertoire `docs`, un workflow se charge de re-générer et déployer une nouvelle version de la documentation, celle que vous consultez ici-même. + +## A propos des machines "selfhosted" + +Github fournit des "machines" appelés **runner** gratuitement pour effectuer des actions, cependant ces machines ont entre autre des limites de stockages. +Nous avons également la possibilité d'ajouter des machines "selfhosted" (auto-herbergés) qui peuvent être mise à disposition. + +Nous avons mis à disposition un **docker-compose** pour déployer une machine. + +{: .note } +> - Une "machine" (runner) peut effectuer qu'une seule *action* en même temps. +> - Il est nécessaire d'ajouter un "token" fournis par l'organisation GLF pour permettre la connexion d'un runner au dépôt. +> - Puisque le runner est exécuté via github, il est possible de déployer plusieurs instances avec un seul token. +> - Avec docker, il est possible de limiter le pourcentage d'utilisation des coeurs du cpu et/ou de la RAM. + + + + diff --git a/docs/pages/dev/addGithubRunner.md b/docs/pages/dev/addGithubRunner.md new file mode 100644 index 00000000..b054b9d7 --- /dev/null +++ b/docs/pages/dev/addGithubRunner.md @@ -0,0 +1,208 @@ +--- +title: Ajouter une github runner +layout: default +parent: Développement +--- + +{: .warning } +> Cette page est en travaux et peut être incomplète + +# Qu'est-ce qu'un Github Runner ? + +Un runner est un outil permettant à votre machine d'exécuter des actions github, un runner équivaut à une action maximum. +Il est possible d'exécuter plusieurs runner sur une seule machine. + +Les étapes suivantes sont valide pour fonctionner sur votre fork comme sur le dépôt GLF. + +{: .warning } +> - En l'état, il est nécessaire d'exécuter le conteneur avec un argument `privileged` pour que l'action puisse exécuter nix avec les privilèges adéquat. +> À l'avenir, l'objectif est de réduire un maximum les privilèges nécessaire à l'exécution des tâches. +> - Les runner github se connectent à github et pas l'inverse, ça implique qu'il n'est pas nécessaire d'exposer le moindre port. +> - Les runner doivent être exécutés sur des machines de confiance puisque le système de fichiers du conteneur est exposé. + +## Déployer un runner + +Dans un fichier `docker-compose.yml` + +```yaml +services: + github-runner: + image: myoung34/github-runner:latest + privileged: true + environment: + REPO_URL: ${REPO_URL} + RUNNER_NAME: ${RUNNER_NAME} + ACCESS_TOKEN: ${ACCESS_TOKEN} + RUNNER_WORKDIR: ${RUNNER_WORKDIR} + LABELS: ${LABELS} + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./tmp/runner:/tmp/runner + deploy: + resources: + limits: + cpus: '2.4' + memory: 6g +``` + +Puis dans un `.env` + +```yaml +REPO_URL=https://github.com/GLF-OS/Nixos-by-GLF +RUNNER_NAME= +ACCESS_TOKEN= +RUNNER_WORKDIR=/tmp/runner/work +ORG_RUNNER=false +LABELS=linux,x64 +``` + +Dans **RUNNER_NAME**, inscrivez votre nom d'utilisateur puis dans **ACCESS_TOKEN**, inscrivez le token fournis par un membre de l'organisation. + +## Comment régler le pourcentage maximum d'utilisation du cpu/ram ? + +Dans le `docker-compose.yml`, vous pouvez lire les lignes : + +```yaml +limits: + cpus: '2.4' + memory: 6g +``` + +### CPU + +Lancez la commande + +```bash +grep -c 'processor' /proc/cpuinfo +``` + +Si j'obtiens *4* (threads), je peux définir la limite maximale à **400%**, soit 100% par threads. + +Dans l'exemple ci-dessus, j'ai définis à 240% l'utilisation du cpu soit un peu plus de la moitié des threads. + +### RAM + +La limite de mémoire permet de définir la quantité maximale allouée au runner. + +## Exécuter plusieurs instances du runner + +Si vous disposez de kubernetes (k3s/k8s), il existe un controller permettant d'automatiquement équilibrer la charge dépendamment des actions en attente. + +{: .note } +>- Faites attention à ne pas utiliser `container_name`, docker doit être celui qui gère les noms. +>- Vous devez utiliser un volume docker et pas un montage local +>- Pensez à corriger les limites attribués au conteneur, puisque chaque conteneur se verra apposer la même limite et pas une limite pour l'ensemble. + +```yaml +services: + github-runner: + image: myoung34/github-runner:latest + privileged: true + environment: + REPO_URL: ${REPO_URL} + RUNNER_NAME: ${RUNNER_NAME} + ACCESS_TOKEN: ${ACCESS_TOKEN} + RUNNER_WORKDIR: ${RUNNER_WORKDIR} + LABELS: ${LABELS} + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - github_runner:/tmp/runner + deploy: + resources: + limits: + cpus: '2.4' + memory: 6g +volumes: + github_runner: +``` + +Pour déployer le conteneur, utilisez la ligne suivante (vous pouvez modifier 2 par n'importe qu'elle valeur): + +```bash +docker compose up -d --scale github-runner=2 +``` + +Pour vérifier que le runner fonctionne bien : + +```bash +docker compose logs --follow +``` + +Lorsque ça fonctionne, vous devriez lire les lignes suivantes: + +```bash +github-runner-1 | -------------------------------------------------------------------------------- +github-runner-1 | | ____ _ _ _ _ _ _ _ _ | +github-runner-1 | | / ___(_) |_| | | |_ _| |__ / \ ___| |_(_) ___ _ __ ___ | +github-runner-1 | | | | _| | __| |_| | | | | '_ \ / _ \ / __| __| |/ _ \| '_ \/ __| | +github-runner-1 | | | |_| | | |_| _ | |_| | |_) | / ___ \ (__| |_| | (_) | | | \__ \ | +github-runner-1 | | \____|_|\__|_| |_|\__,_|_.__/ /_/ \_\___|\__|_|\___/|_| |_|___/ | +github-runner-1 | | | +github-runner-1 | | Self-hosted runner registration | +github-runner-1 | | | +github-runner-1 | -------------------------------------------------------------------------------- +github-runner-1 | +github-runner-1 | # Authentication +github-runner-1 | +github-runner-1 | +github-runner-1 | √ Connected to GitHub +github-runner-1 | +github-runner-1 | # Runner Registration +github-runner-1 | +github-runner-1 | +github-runner-1 | +github-runner-1 | +github-runner-1 | √ Runner successfully added +github-runner-1 | √ Runner connection is good +github-runner-1 | +github-runner-1 | # Runner settings +github-runner-1 | +github-runner-1 | +github-runner-1 | √ Settings Saved. +github-runner-1 | +github-runner-1 | +github-runner-1 | √ Connected to GitHub +github-runner-1 | +github-runner-1 | Current runner version: '2.321.0' +github-runner-1 | 2025-01-01 15:36:14Z: Listening for Jobs +``` + +## Génération d'un token + +Le token est la clé qui permet à un github runner de se connecter à un dépôt. +Il faut ouvrir cette [page](https://github.com/settings/tokens). + +- *Generate new token* +- *Generate new token (classic)* + +{: .warning } +> Le token ne doit en aucun cas être fournis à un tiers ou rendu public. +> Gardez le précieusement. + +Sur la page, donnez un nom au token et une date d'expiration. + +Sélectionnez ensuite les autorisations suivantes : + +```bash +- [X] repo + - [X] repo:status + - [X] repo:deployment + - [X] public_repo + - [X] repo:invite + - [X] security_events +- [X] workflow +- [X] admin:org + - [X] write:org + - [X] read:org + - [X] manage_runners.org +- [ ] admin:public_key + - [ ] write:public_key + - [X] read:public_key +- [ ] admin:repo_hook + - [ ] write:repo_hook + - [X] read:repo_hook +- [X] notifications +``` + +Une fois généré, notez le token et ajoutez-le au `.env` + diff --git a/docs/pages/dev/build.md b/docs/pages/dev/build.md new file mode 100644 index 00000000..68802ff2 --- /dev/null +++ b/docs/pages/dev/build.md @@ -0,0 +1,34 @@ +--- +title: Construire une iso +layout: default +parent: Développement +--- + +# Pré-requis + +- Le gestionnaire de paquets `nix` +- [`just`](https://github.com/casey/just) + +```bash +nix-shell -p just +``` + +# Construire + +1. Clonez le projet + +```bash +git clone https://github.com/GLF-OS/Nixos-by-GLF.git +``` + +2. Déplacez-vous dans l'arborescence + +```bash +cd Nixos-by-GLF +``` + +3. Construire + +```bash +just iso +``` diff --git a/docs/pages/dev/commonIssue.md b/docs/pages/dev/commonIssue.md new file mode 100644 index 00000000..21719943 --- /dev/null +++ b/docs/pages/dev/commonIssue.md @@ -0,0 +1,68 @@ +--- +title: Problèmes courant +layout: default +parent: Développement +--- + +Cette page vise à référencer des problèmes rencontrés durant le développement. +Il s'agit de notes diversent qui pourraient aider à l'avenir. + +# 2025-01-06 + +## Problème + +Durant le développement, après la construction d'une image ISO, l'assistant Calamares n'affichait plus les modifications GLF. +Les modifications liés à GNOME étaient toujours présentes. + +## Procédure de debug + +### Calamares-nixos-extensions + +La première étape était de vérifier si le paquet `calamares-nixos-extensions` avait modifié des chemins vers des fichiers. +Pour rappel, nous appliquons un `patch` au fichier `main.py` contenant nos modifications qui écrase le fichier original du paquet officiel. + +Après vérifications, aucune modifications majeur n'avait eu lieu. +Les chemins du paquet compilé dans `/nix/store` n'avait là non plus, pas changé. + +### Tests d'anciennes versions du projet GLF-OS + +Nous avons tenté de reconstruire d'anciennes images iso, même là, les modifications de calamares étaient perdus, ce qui n'était pas normal. +Une chose que nous avions observé, c'est qu'en remontant assez haut dans le développement du projet à la période où nous avions un répertoire `nix-cfg`, les modifications de calamares revenaient. +La modification majeur entre la période où ça fonctionnait et où ça ne fonctionnait plus corresponds au déplacement des anciens modules `glf` aux nouveaux. +On note que le flocon avait été édité pour correspondre aux nouveaux changements. + +D'une manière ou d'une autre, la modification du flocon semblait jouer un rôle. + +### Passage de stable à unstable + +De nombreux essaies plus tard, nous avons supposé que le problème pourrait venir d'un bug propre à `calamares`. +Nous avons construit une nouvelle image ISO pointant cette fois sur `nixos-unstable` (`25.05`), cette fois un message d'erreur indiquait un problème avec notre flocon. + +``` +evaluation warning: You have set specialArgs.pkgs, which means that options like nixpkgs.config + and nixpkgs.overlays will be ignored. If you wish to reuse an already created + pkgs, which you know is configured correctly for this NixOS configuration, + please import the `nixosModules.pkgsReadOnly` module from the nixpkgs flake or + `(modulesPath + "/misc/nixpkgs/read-only.nix"), and set `{ nixpkgs.pkgs = ; }`. + This properly disables the ignored options to prevent future surprises. +``` + +### Le rôle de nix + +Comme l'erreur ci-dessus le mentionne, nous faisons passer des valeurs pour `nixpkgs.config` et `nixpkgs.overlays` en plus de faire hériter de valeur dans `specialArgs`. +Formulé autrement, nous configurons plusieurs même élément dans deux endroits différents. + +Si auparavant nix n'avait pas de problème avec ça, aujourd'hui il décide d'ignorer l'une des deux, ici, il a choisi d'ignorer l'overlay calamares. + +### La solution + +Le système sur lequel GLF-OS est développé est un système NixOS. +Celui-ci avait été mis à jour quelques jours avant les tests, Nix était passé de la version `2.24.10` à `2.24.11`. + +L'organisation du flocon avec cette nouvelle version faisait que des options étaient ignorés sans fournir de message d'erreur. +Le passage à `nixos-unstable` pour le GLF-OS permettait d'afficher des erreurs qui n'apparaissent pas avec `nixos-24.11`. + +Après modification du flocon, le problème a été corrigé, les modifications de calamares pour GLF-OS revenus. + +{: .warning } +> Faites attentions aux montées de version de Nix. diff --git a/docs/pages/dev/debugFlake.md b/docs/pages/dev/debugFlake.md new file mode 100644 index 00000000..935d4476 --- /dev/null +++ b/docs/pages/dev/debugFlake.md @@ -0,0 +1,163 @@ +--- +title: Débugguer un flocon +layout: default +parent: Développement +--- + +L'écriture d'un flocon ou d'une configuration est parfois difficile pour de nombreuses raisons. + +Cette page vous donne quelques pistes pour apprendre à debugger. + +# Nix Repl + +Depuis le même répertoire que votre flocon : + +```bash +nix repl +``` + +Charger le flocon dans nix repl : + +```nix +:lf . +``` + +En appuyant plusieurs fois sur **TAB**, vous verrez ce que vous avez dans la portée. +Essayons de voir les inputs. Pensez à appuyer sur **TAB** après avoir saisi la ligne : + +```nix +inputs. +``` + +De mon côté, avec le flocon du module GLF, je peux voir les inputs `nixpkgs` et `utils`. + +```bash +nix-repl> inputs. +inputs.nixpkgs inputs.utils +``` + +Essayons avec les outputs : + +```nix +outputs. + +``` + +On retrouve effectivement le devShells (pour build la documentation), l'iso et nixosConfigurations. + +```nix +nix-repl> outputs. +outputs.devShells outputs.iso outputs.nixosConfigurations +``` + +Descendons en profondeur dans `outputs.nixosConfigurations` pour retrouver nos options. +Je vous épargne la recherche : + +```nix +nix-repl> outputs.nixosConfigurations.glf-installer.config. +``` + +On obtient : + +```nix +nix-repl> outputs.nixosConfigurations.glf-installer.config. +outputs.nixosConfigurations.glf-installer.config.appstream +outputs.nixosConfigurations.glf-installer.config.assertions +outputs.nixosConfigurations.glf-installer.config.boot +outputs.nixosConfigurations.glf-installer.config.console +outputs.nixosConfigurations.glf-installer.config.containers +outputs.nixosConfigurations.glf-installer.config.docker-containers +outputs.nixosConfigurations.glf-installer.config.documentation +outputs.nixosConfigurations.glf-installer.config.dysnomia +outputs.nixosConfigurations.glf-installer.config.ec2 +outputs.nixosConfigurations.glf-installer.config.environment +outputs.nixosConfigurations.glf-installer.config.fileSystems +outputs.nixosConfigurations.glf-installer.config.fonts +outputs.nixosConfigurations.glf-installer.config.gtk +outputs.nixosConfigurations.glf-installer.config.hardware +outputs.nixosConfigurations.glf-installer.config.i18n +outputs.nixosConfigurations.glf-installer.config.ids +outputs.nixosConfigurations.glf-installer.config.installer +outputs.nixosConfigurations.glf-installer.config.isSpecialisation +outputs.nixosConfigurations.glf-installer.config.isoImage +outputs.nixosConfigurations.glf-installer.config.jobs +outputs.nixosConfigurations.glf-installer.config.krb5 +outputs.nixosConfigurations.glf-installer.config.lib +outputs.nixosConfigurations.glf-installer.config.location +outputs.nixosConfigurations.glf-installer.config.meta +outputs.nixosConfigurations.glf-installer.config.nesting +outputs.nixosConfigurations.glf-installer.config.networking +outputs.nixosConfigurations.glf-installer.config.nix +outputs.nixosConfigurations.glf-installer.config.nixops +outputs.nixosConfigurations.glf-installer.config.nixpkgs +outputs.nixosConfigurations.glf-installer.config.nvidia_config +outputs.nixosConfigurations.glf-installer.config.oci +outputs.nixosConfigurations.glf-installer.config.openstack +outputs.nixosConfigurations.glf-installer.config.passthru +outputs.nixosConfigurations.glf-installer.config.power +outputs.nixosConfigurations.glf-installer.config.powerManagement +outputs.nixosConfigurations.glf-installer.config.programs +outputs.nixosConfigurations.glf-installer.config.qt +outputs.nixosConfigurations.glf-installer.config.qt5 +outputs.nixosConfigurations.glf-installer.config.security +outputs.nixosConfigurations.glf-installer.config.services +outputs.nixosConfigurations.glf-installer.config.snapraid +outputs.nixosConfigurations.glf-installer.config.sound +outputs.nixosConfigurations.glf-installer.config.specialisation +outputs.nixosConfigurations.glf-installer.config.stubby +outputs.nixosConfigurations.glf-installer.config.swapDevices +outputs.nixosConfigurations.glf-installer.config.system +outputs.nixosConfigurations.glf-installer.config.systemd +outputs.nixosConfigurations.glf-installer.config.time +outputs.nixosConfigurations.glf-installer.config.users +outputs.nixosConfigurations.glf-installer.config.virtualisation +outputs.nixosConfigurations.glf-installer.config.warnings +outputs.nixosConfigurations.glf-installer.config.xdg +outputs.nixosConfigurations.glf-installer.config.zramSwap +``` + +Cela doit vous être familié, non ? + +Regardez la dernière ligne `zramSwap`, elle correspond aux options [nixos](https://search.nixos.org/options?channel=24.11&from=0&size=50&sort=relevance&type=packages&query=zramSwap). + +```nix +nix-repl> outputs.nixosConfigurations.glf-installer.config.zramSwap. +outputs.nixosConfigurations.glf-installer.config.zramSwap.algorithm outputs.nixosConfigurations.glf-installer.config.zramSwap.priority +outputs.nixosConfigurations.glf-installer.config.zramSwap.enable outputs.nixosConfigurations.glf-installer.config.zramSwap.swapDevices +outputs.nixosConfigurations.glf-installer.config.zramSwap.memoryMax outputs.nixosConfigurations.glf-installer.config.zramSwap.writebackDevice +outputs.nixosConfigurations.glf-installer.config.zramSwap.memoryPercent +outputs.nixosConfigurations.glf-installer.config.zramSwap.numDevices +``` + +Essayons de lire la valeur de l'option `zramSwap.enable` (cette fois, utilisez ENTER pour valider) : + +```nix +nix-repl> outputs.nixosConfigurations.glf-installer.config.zramSwap.enable +[1 copied (185.6 MiB), 28.6 MiB DL]false +``` + +Essayons avec une autre option. + +```nix +nix-repl> outputs.nixosConfigurations.glf-installer.config.programs.firefox.enable +[1 copied (185.6 MiB), 28.6 MiB DL]true +``` + +Comme vous pouvez le voir, vous venez d'apprendre à parcourir les **attributs** d'un flocon, retrouver une option ainsi que la valeur actuellement attribué ! + + + + +```nix + +``` + + +```nix + +``` + + + + + diff --git a/docs/pages/dev/howContribute.md b/docs/pages/dev/howContribute.md new file mode 100644 index 00000000..6750ffe2 --- /dev/null +++ b/docs/pages/dev/howContribute.md @@ -0,0 +1,222 @@ +--- +title: Comment contribuer ? +layout: default +parent: Développement +--- + +{: .in-progress } +> Cette page est en cours d'écriture. + + +*Je souhaite contribuer mais je n'ai aucune idée de comment faire.* + +Pour contribuer, il y a plusieurs possibilités. +Il y a plusieurs moyen pour contribuer au projet. + +Vous pouvez ouvrir une issue pour `signaler un bug`, `proposer une amélioration` ou `modifier la documentation`. +Vous pouvez également ouvrir une pull request pour proposer du code et le fusionner dans le projet. + +Quelques soit la nature de votre contribution, essayez d'être clair, évitez l'argot et faite des phrases complètes. + +# Soumettre du code : + +Concernant Git, si vous souhaitez proposer une pull request mais que vous ne connaissez pas git, voici quelques +étapes pour vous aider. + +- Commencez par créer un compte [Github](https://github.com/login) +- Depuis l'appareil avec lequel vous développez, configurez Git. + +### Configurer Git + +- Installez Git, puis configurez-le comme suit : + +```bash +git config --global user.name "VOTRE_NOM_D'UTILISATEUR" +git config --global user.email "you@example.com" +``` + +Vérifiez ensuite avec : + +```bash +git config --global user.name +git config --global user.email +``` + +### Créer une clé SSH pour accéder à votre dépôt + +Nous allons créer une clé ssh qui vous permettra d'accéder à votre dépôt github et d'envoyer votre code. + +Depuis votre machine + +```bash +ssh-keygen -t ed25519 -f ~/.ssh/github +``` + +Appuyez plusieurs fois sur **ENTER**. + +{: .note } +> Vous pouvez ajouter un mot de passe à votre clé si vous le souhaitez. +> Vous pouvez remplacer "github" par n'importe quel mots, il s'agit d'une simple chaine de caractères, le nom n'a aucune importance. + +Après avoir généré la clé, vous devriez voir deux nouveaux fichiers dans `~/.ssh` à savoir : + +- `~/.ssh/github` +- `~/.ssh/github.pub` + +Vous souhaitez garder en lieu sûr `github`, il s'agit de votre clé privée. +`github.pub` peut quant à lui être exposé, ça n'a pas d'importance, il s'agit de votre clé publique. + +Prenez un instant pour charger votre clé avec : + +```bash +ssh-add ~/.ssh/github +``` + +Cette commande vous servira si votre clé ssh n'est pas automatiquement chargé. + +### Ajouter la clé SSH sur github + +Accédez aux paramètres SSH depuis votre compte [Github](https://github.com/settings/keys). + +- New SSH key +- Ajoutez un nom à votre clé SSH (par exemple le nom de l'appareil qui l'utilise) +- Ajoutez dans la section key, le contenu de votre clé `github.pub` + +```bash +pbcopy < ~/.ssh/github.pub +``` + +### Vérifier la clé SSH + +{: .note } +> - Vérifier la clé en copiant la ligne de commande de github, adapter après l'argument -f +> - Donner le retour de commande à github +> - Vérifier la connexion entre git et github + +### Fork le projet + +Maintenant que vous avez configuré Git, vous êtes prêt pour contribuer. + +Rendez-vous sur le lien du [projet](https://github.com/Gaming-Linux-FR/GLF-OS) et cliquez sur le bouton "**Fork**", en haut à droite. + +Choisissez un nom à votre Fork, décochez **Copy the `main` branch only** puis cliquez sur **Create fork**. + +{: .note } +> Actuellement, la branche `dev` est la branche principale du dépôt, `dev` pourrait être affiché à la place de `main`. +> Dans ce cas, la case peut rester coché. + +Après quelques instants, vous devriez avoir un nouveau dépôts sur votre compte. +C'est sur ce dépôt que vous allez travailler. + +### Cloner le fork + +Depuis votre machine, + +```bash +git clone https://github.com/Gaming-Linux-FR/GLF-OS +``` + +{: .note } +> Remplacez `Gaming-Linux-FR` par votre nom d'utilisateur Github, `GLF-OS` par le nom de votre fork, si vous l'avez nommé différemment. + +### Créer une branche + +Si votre prompt shell n'indique pas le nom de la branche actuelle, saisissez la commande suivante pour le voir : + +```bash +git rev-parse --abbrev-ref HEAD +``` + +Si votre branche est `main`, vous allez d'abord devoir vous déplacer sur `dev` puisque c'est la branche de travail. + +```bash +git checkout dev +``` + +Maintenant, vous devriez voir `dev` en saisissant la commande : + +```bash +git rev-parse --abbrev-ref HEAD +``` + +Une fois que vous avez confirmé que vous êtes bien sur dev, créez une nouvelle branche : + +```bash +git checkout -b maNouvelleBranche +``` + +{: .note } +> - Nous ne sommes pas pointilleux sur le nom des branches que vous utilisez. +> - Si vous n'avez pas d'idée, voici quelques exemples : +> - `feature_addSteamEnv` +> - `fix_errorWithNixConfig` +> - `doc_addIllustrations` +> - Prenez note que l'utilisation dun caractère "/" utilisé dans les paths peut provoquer des problèmes lorsque vous utilisez le [justfile](https://github.com/casey/just) du dépôt. Si vous ne comptez pas l'utiliser, ne tenez pas compte de cette information. + +### Créer un commit + +Vous venez de modifier par exemple la configuration Nix, vous souhaitez maintenant indiquer à Git que vous souhaitez versionner votre modification. + +Utilisez `git add chemin/vers/la/modification` ou directement `git add .` pour indiquer à Git d'inclure dans la nouvelle version les fichiers modifiés. + +Ensuite, créer un commit avec un message indiquant la nature du commit, par exemple : + +```bash +git commit -m "Mise à jour du flocon utilisateur" +``` + +### Bonus: nettoyez l'historique de votre branche + +{: .note } +> - Reformuler, +> - Illustrer. + +Vous avez passé un très long moment sur votre modification et le nombre de commit dans le log est vous souhaitez fusionner +l'ensemble de vos modifications en un seul commit. + +Faites `git log` et repérez le commit précédent votre première modification (de la branche actuelle). +Récupérer le hash dudit commit. + +Saissiez la commande : + +```bash +git rebase -i +``` + +{: .note } +> - Remplacez par celui que vous avez récupéré plus tôt. + +Une fenêtre avec un éditeur de texte apparaît, repérez la première ligne : + +``` +pick HASH XXXXXXXX +``` + +Cette ligne, vous n'y touchez pas. +Pour toutes celles qui suivent, remplacez `pick` par `squash` +Lorsque vous avez terminé, sauvegardez et quittez votre éditeur de texte. + +Vous devriez maintenant avoir une nouvelle fenêtre affichant l'ensemble des messages de commit que vous avez écrit. +Supprimez-les et remplacez-les par un message unique qui détaillera vos modifications. + +Sauvegardez et quittez. + +### Pousser vers votre dépôt + +Votre modification est prête à être soumise au projet, envoyez vos modifications vers votre Fork : + +```bash +git push -uv origin +``` + +Ouvrez la page vers votre fork, un message apparaîtra et vous proposera de contribuer en ouvrant une Pull Request. +Cliquez dessus. + +Donner un nom à votre pull request de sorte à expliquer succintement la nature de votre contribution. +Ensuite, assurez-vous d'avoir à gauche le dépôt GLF-OS pointant vers `dev` et à droite votre dépôt pointant sur votre nouvelle branche. + +Expliquez dans le message ce que vous avez fait, si une issue lié existe, indiquez-le. + +Validez votre pull request. + +A partir d'ici, nous contrôllons votre pull request et vous indiquons si elle est conforme ou non. diff --git a/docs/pages/dev/howToTestDocs.md b/docs/pages/dev/howToTestDocs.md new file mode 100644 index 00000000..c478e956 --- /dev/null +++ b/docs/pages/dev/howToTestDocs.md @@ -0,0 +1,31 @@ +--- +title: Comment tester la documentation ? +layout: default +parent: Développement +--- + +La documentation est générée puis déployée sur le dépôt à l'aide d'une "action" github. +Lorsque vous écrivez dans votre fork la documentation, vous voudrez avoir un rendu en direct de vos modifications. + +Pour ce faire : + +```bash +cd docs +nix-shell -p bundler ruby --run "bundle install && bundle exec jekyll serve" +``` + +Après avoir récupéré localement les dépendances à la construction de la documentation, vous devriez voir une ligne : + +```bash +http://127.0.0.1:4000 +``` + +{: .info } +> - Sachez que les modifications peuvent apparaître après un petit moment, 2-3 minutes parfois. +> - Les modifications d'un fichier existant, apparaîssent "instantanément" après un rechargement de la page. + +Si nix est installé sur votre système, essayez : + +```bash +nix develop +``` diff --git a/docs/pages/dev/howToWriteDocs.md b/docs/pages/dev/howToWriteDocs.md new file mode 100644 index 00000000..be3f7963 --- /dev/null +++ b/docs/pages/dev/howToWriteDocs.md @@ -0,0 +1,48 @@ +--- +title: Comment écrire la documentation ? +layout: default +parent: Développement +--- + +{: .in-progress } +> - A propos des paths pour les images +> - Documentation accessible (un maximum) aux débutants + +La documentation est écrit au format [markdown](https://docs.framasoft.org/fr/grav/markdown.html). + +# Convention de noms + +## Noms de fichiers, répertoires +- Les noms de fichiers, répertoires sont en minuscule, dans le cas de noms composés, ajoutez une majuscule à la première de chaque mots : + +``` +- dossier +- unDossier +- glfos +- glfosConfigurations +``` + +## Assets + +- Les répertoires qui contiennent des illustrations propre à une page de documentation sont à une page, doivent être nommés comme la page suivis d'un `Assets` : + +``` +- page.md +- pageAssets +``` + +{: .in-progress } +> L'url ci-dessous pointe vers une url qui n'existe pas encore (docs non fusionné) + +- Les illustrations "globales" sont à conservés dans `["docs/assets"](https://github.com/Gaming-Linux-FR/Nixos-by-GLF/tree/dev/docs/assets)`. +Ce sont des images qui peuvent être réutilisés. + + +# Ajouter une image + + + +{: .info } +> Les images sont stockés de cette façon pour que les tests locaux et le déploiement github aient le même résultat (des images qui s'affichent et qui pointent au même endroits) + + diff --git a/docs/pages/dev/index.md b/docs/pages/dev/index.md new file mode 100644 index 00000000..8bebb1e4 --- /dev/null +++ b/docs/pages/dev/index.md @@ -0,0 +1,5 @@ +--- +title: Développement +layout: default +has_children: true +--- diff --git a/docs/pages/dev/localRunner.md b/docs/pages/dev/localRunner.md new file mode 100644 index 00000000..0b4f482f --- /dev/null +++ b/docs/pages/dev/localRunner.md @@ -0,0 +1,54 @@ +--- +title: Runners locaux +layout: default +parent: Développement +--- + +# Comment exécuter localement des workflows ? + +Il est possible d'exécuter localement les workflows sans devoir systématiquement pousser votre code vers un dépôt. +Les workflows sont conservés dans `.github/workflows` et sont exécutable à l'aide de `docker` et `act`. + +## Pré-requis + +- Docker +- act + +### Cas Mac ARM +{: .info } +> - Si vous êtes en possession d'un Mac doté d'une puce ARM (M1/M2/...), vous ne pourrez pas exécuter les builds qui sont prévus pour x86_64. +> Si vous avez une machine x86_64 accessible via SSH et docker d'installé, suivez les lignes suivantes depuis votre MAC. +> - Vous souhaiterez utiliser une clé ssh pour accéder à votre machine distante. + +Précédez chacune de vos commandes `act` avec cette variable d'environnement, éditez les mots `user`, `ip` et `port` pour correspondre à votre appareil. +Si vous utilisez le port SSH par défaut (22), vous pouvez retirer `:port`. + +```bash +DOCKER_HOST='ssh://user@ip:port' act +``` + +## Lister les workflows + +```bash +act -l +``` + +```bash +Stage Job ID Job name Workflow name Workflow file Events +0 build build Deploy Jekyll site to Pages pages.yaml push,workflow_dispatch +1 deploy deploy Deploy Jekyll site to Pages pages.yaml workflow_dispatch,push +``` + +## Exécuter les workflows + +```bash +act +``` + +## Exécuter un workflow spécifique + +Si nous reprenons le résultat de la liste précédent, nous allons essayer de "build" la documentation. + +```bash +act -j build +``` diff --git a/docs/pages/dev/modificationDetails.md b/docs/pages/dev/modificationDetails.md new file mode 100644 index 00000000..f6c20d35 --- /dev/null +++ b/docs/pages/dev/modificationDetails.md @@ -0,0 +1,24 @@ +--- +title: Détails des modifications +layout: default +parent: Développement +--- + +Voici un tableau Markdown résumant le contenu des fichiers Nix fournis : + +| Fichier | Description | Options | Configuration | +|------------------|---------------------------------------------|--------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------| +| `printing.nix` | Configuration de l'impression | `glf.printing.enable` | Configure les pilotes d'imprimante, active la découverte automatique, supporte les scanners, ajoute les utilisateurs aux groupes scanner et lp. | +| `gaming.nix` | Configuration du gaming | `glf.gaming.enable` | Installe des paquets de gaming, configure des variables d'environnement, ajoute des règles udev pour les contrôleurs, active le support matériel Steam. | +| `system.nix` | Configuration du système | `glf.system.enable` | Active les graphiques, optimise le stockage Nix. | +| `updateConf.nix` | Configuration de la mise à jour automatique | `glf.autoUpgrade.enable` | Ajoute un script de mise à jour et configure un service systemd pour l'exécuter périodiquement. | +| `gnome.nix` | Configuration de GNOME | `glf.gnome.enable` | Active GNOME, configure les paquets système, les extensions, les paramètres GNOME, et les fonds d'écran. | +| `nvidia.nix` | Configuration de NVIDIA | `glf.nvidia_config` | Configure les pilotes NVIDIA, le support Prime, le gestion de l'énergie. | +| `nh.nix` | Configuration de Nix Home | `glf.nh.enable` | Ajoute des alias de shell et configure le nettoyage périodique. | +| `boot.nix` | Configuration du démarrage | `glf.boot.enable` | Nettoie `/tmp` au démarrage, configure les paramètres du noyau. | +| `fstrim.nix` | Configuration de fstrim | `glf.fstrim.enable` | Active fstrim pour le nettoyage des SSD. | +| `default.nix` | Fichier de configuration par défaut | N/A | Importe tous les autres fichiers de configuration. | +| `version.nix` | Configuration de la version | `glf.version.enable` | Configure les fichiers de version du système. | +| `packages.nix` | Configuration des paquets | `glf.packages.enable` | Installe des paquets système et configure Flatpak. | +| `firefox.nix` | Configuration de Firefox | `glf.firefox.enable` | Configure Firefox avec le support de PipeWire et les packs de langue. | +| `pipewire.nix` | Configuration de PipeWire | `glf.pipewire.enable` | Active PipeWire, JACK, PulseAudio, et ALSA. | diff --git a/docs/pages/dev/writeModule.md b/docs/pages/dev/writeModule.md new file mode 100644 index 00000000..baf260eb --- /dev/null +++ b/docs/pages/dev/writeModule.md @@ -0,0 +1,60 @@ +--- +title: Ecrire un module GLF +layout: default +parent: Développement +--- + +{: .todo } +> - Où faut-il appeler le module ? +> - Que mettre dans l'entête en haut ? +> - Expliquer pourquoi il faut favoriser l'option `mkDefault` au lieu de `mkForce` + +# Comment fonctionne le module GLF ? + +Le module GLF est un ensemble d'options NixOS auquels nous avons appliqués des options pré-configuré. + +La structure d'un module est la suivante : + +```nix +{ lib, config, pkgs, ... }: + +{ + + options.glf.