Compare commits

...

709 Commits

Author SHA1 Message Date
Yves Dubromelle fe50587190
Merge nixos-21.05-preparation fixes #9 3 years ago
Yves Dubromelle c1b40f9d07
nouveau site pour vérifier le status de NixOS 3 years ago
Yves Dubromelle 06d73c9519
lancement auto des plugins vim selon le type de fichier 3 years ago
Yves Dubromelle f7264ae434 vim: nouvelle façon d'appeler les plugins, reorga du code 3 years ago
Yves Dubromelle 4fd9d0d7f8 config git au format Nix 3 years ago
Yves Dubromelle 963b0b9d4b configuration gnome active pour xmonad 3 years ago
Yves Dubromelle 51b98cda4f nettoyage paquets xmonad inutiles 3 years ago
Yves Dubromelle f751e24839 outil pour générer une dérivation Nix dans un projet Rust 3 years ago
Yves Dubromelle 1b1aebd0a0 ajout du plugin vim-wiki 3 years ago
Yves Dubromelle 812bc511e0 impression vers des imprimantes Samba 3 years ago
Yves Dubromelle e55568d1c6 rdfind cassé dans les paquets 3 years ago
Yves Dubromelle d4f2298518 fix: mauvaise couleur de fond dans vim dans certains cas 3 years ago
Yves Dubromelle 2fad38532f nouvelle syntaxe pour l'optimisation du store 4 years ago
Yves Dubromelle 28cf2d2071 lot de renommages dans nixpkgs 4 years ago
Yves Dubromelle f6f3befe2f activation des sous-commandes nix et des flakes 4 years ago
Yves Dubromelle 257f59054d renommage d'options Nix 4 years ago
Yves Dubromelle 518054fd0a gestionnaire graphique bluetooth 4 years ago
Yves Dubromelle 03bcc056c1 ajout d'un module pipewire en prévision de remplacement de pulseaudio 4 years ago
Yves Dubromelle 7679f865b0 lazydocker pour controller les imgaes et containers dans le terminal 4 years ago
Yves Dubromelle 2d63aae5a1 syntaxe fish pour vim 4 years ago
Yves Dubromelle 48a257405a préconisations des devs d'OpenJDK : utilisons la dernière version disponible 4 years ago
Yves Dubromelle 30e2f31255 ajout de kitty : terminal virtuel rendu par GPU 4 years ago
Yves Dubromelle 0364ea9b29 ajout de lazygit ; interface terminal sympa pour git 4 years ago
Yves Dubromelle b2505f45c4 prise en compte globale de fish 4 years ago
Yves Dubromelle 962c052b29 seule la maj auto a besoin d'être conditionnelle; nom de fichier 4 years ago
Yves Dubromelle 032d7e8e1a auto-optimisation du store, options du ramasse-miettes 4 years ago
Yves Dubromelle af35de1639 jetbrains mono en police mono par défaut (pour uniformiser avec Intellij) 4 years ago
Yves Dubromelle c8ae50be5b ajout de rustup pour faciliter l'installation de toolchain rust 4 years ago
Yves Dubromelle 9310d01af6 option dédiée au matériel rtl-sdr 4 years ago
Yves Dubromelle ea33bac49b options dédiées pour slock, spacefm et udevil 4 years ago
Yves Dubromelle 204fb83207 git a son option dédiée 4 years ago
Yves Dubromelle cf3c3c3603 fix: infos git dans le prompt 4 years ago
Yves Dubromelle edad20c5c0 prompt: commentaires 4 years ago
Yves Dubromelle ed937ba5bc activation par défaut de l'agent gnupg 4 years ago
Yves Dubromelle 3de6332c3e pgadmin commenté, plus mis à jour, tire un openssl déprécié 4 years ago
Yves Dubromelle e26453fc7e gnuradio tire un vieux paquet python, Pilllow 6.2.2, marqué insecure 4 years ago
Yves Dubromelle 67b9f5b0f7 dbus est désormais tout le temps actif par défaut 4 years ago
Yves Dubromelle 8f4f8ef953 déplacement d'options et paquets upstream 4 years ago
Yves Dubromelle c33f0f9c50 mise à jour paquets python en 3.9 4 years ago
Yves Dubromelle 2064606f18 paquets marqués comme cassés dans nixpkgs 4 years ago
Yves Dubromelle 4a5f0ba1a7 utilisation de networking.fqdn (hostName + domain)
Les nouvelles règles dans NixOS obligent à avoir dans networking.hostName
un label DNS strict, il faut donc préciser le domaine à part dans
networking.domain.
networking.fqdn est une facilité pour concaténer les deux, en lecture
seule.
4 years ago
Yves Dubromelle 9ed945bba8 channel nixos-unstable 4 years ago
Jean-Pierre PRUNARET 65e5776f86 ménage appli pour préparation migration NixOS 20.03 5 years ago
Yves Dubromelle 235e636451 client mumble à nouveau fréquentable (build sans broncher) 5 years ago
Yves Dubromelle e849c55297 radio: dump1090 écoute ADB-S des avions et placement sur une carte 5 years ago
Yves Dubromelle 1e51d11778 radio: CubicSDR comme alternative à gqrx 5 years ago
Yves Dubromelle f39f486f51 awesome: meta+l pour slock et suspend combinés 5 years ago
Yves Dubromelle 2a5809c3de radio: chirp pour programmer les radios portatives 5 years ago
Yves Dubromelle 7681f7774e nixos: 19.03 -> 19.09 6 years ago
Yves Dubromelle fe0ea31e30 les variantes de git se catapultent -> git full par défaut 6 years ago
Jean-Pierre PRUNARET f7de6a69bd oops 6 years ago
Jean-Pierre PRUNARET 9151b4dfc5 radio : ménage dans les paquets 6 years ago
Yves Dubromelle 209b1b3e47 outils dans le system tray pour : batterie, volume, bluetooth 6 years ago
Yves Dubromelle 8355abcbfc le bluetooth peut être éteint par défaut (ça consomme) 6 years ago
Yves Dubromelle 9150a37969 gestion de l'énergie : TLP fait bien le job 6 years ago
Yves Dubromelle 59d243bb9d wireshark: package -> option (gestion fine des droits) 6 years ago
Yves Dubromelle c7a1a433ef nm-applet: package -> option (activation automatique) 6 years ago
Yves Dubromelle da750b9c33 java 11 est la LTS officielle, autant l'utiliser 6 years ago
Yves Dubromelle 0ff5f2934e synaptics est dépcrécié -> libinput 6 years ago
Yves Dubromelle f0d5881c80 ajout de ant et gradle en plus de maven, pas de jaloux :) 6 years ago
Yves Dubromelle 16b0a5b617 nixpkgs a une nouvelle option pour gérer java + JAVA_HOME 6 years ago
Jean-Pierre PRUNARET de02b42953 munin : ajout de monitoring pout chrony 6 years ago
Jean-Pierre PRUNARET 25275ec0dd make : ajustement statistiques ntp 6 years ago
Jean-Pierre PRUNARET 19258654cf nixos-manual : ajustement clef de config suite migration NixOS 19.03 6 years ago
Jean-Pierre PRUNARET 7a7bcc99f2 EXP désactivation de darcs 6 years ago
Jean-Pierre PRUNARET dddc3e79e0 ajout font awesome 6 years ago
Jean-Pierre PRUNARET 1e8b78d720 make: ajout cible 'list-installed-packages' 6 years ago
Jean-Pierre PRUNARET 366eebee8a radio : compilation ok gnu-radio 6 years ago
Jean-Pierre PRUNARET 5ecdc764ac make: commande lancer awesome en mode de test 6 years ago
Yves Dubromelle a5e03f769b /!\ migration à nixos 19.03 (18.03 plus mis à jour) 6 years ago
Yves Dubromelle c642afb7e6 formater de code haskell en vogue 6 years ago
Yves Dubromelle 1127daa925 désactivation de paquets haskell qui ne build plus 6 years ago
Jean-Pierre PRUNARET 328eabc735 ssh: augmentation du nombre de connexions simultanées en mode proxy 7 years ago
Jean-Pierre PRUNARET f2247b6e3e Revert "l'attribut de génération des pages de man a changé de nom (-> documentation.man.enable)"
This reverts commit 0c47de1cb1.
7 years ago
Jean-Pierre PRUNARET 0073763f32 Revert "munin : blocage du module car refuse de s'installer" -> fonctionne avec nixos stable
This reverts commit 8dcdea29c1.
7 years ago
Jean-Pierre PRUNARET e2ba892109 /!\ FORCE NIXOS 18.03 pour corriger une infinite recursion sur nix 7 years ago
Jean-Pierre PRUNARET 0c47de1cb1 l'attribut de génération des pages de man a changé de nom (-> documentation.man.enable) 8 years ago
Jean-Pierre PRUNARET 8dcdea29c1 munin : blocage du module car refuse de s'installer 8 years ago
Jean-Pierre PRUNARET cffcd9bd3e makefile: utilisation de variable globale 8 years ago
Jean-Pierre PRUNARET 3f80d6be6e scanner: activation du service + driver HP 8 years ago
Jean-Pierre PRUNARET e94b16fce7 ahout de "." dans les descriptions 8 years ago
Jean-Pierre PRUNARET 3f038be64a template : ajout d'un exemple d'assertion 8 years ago
Jean-Pierre PRUNARET 76fce51cf0 munin: config notifications 8 years ago
Jean-Pierre PRUNARET 264a782227 ajout options de config pour quagga 8 years ago
Jean-Pierre PRUNARET e56040b333 u2f: import configuration pour activer le support des clefs FIDO / u2f
Notes :
- import de conf active sur radx
- fonctionne avec Chromium & Github
- ne fonctionne pas avec Firefox & Github
8 years ago
Jean-Pierre PRUNARET bb08ab258f ssh: ordre de paramétrage du client SSH 8 years ago
Jean-Pierre PRUNARET ab183dbc00 ajout d'une option dans tinc pour stocker le nom DNS de la machine 8 years ago
Jean-Pierre PRUNARET 62164179ed profil developpement: ajout des autotools 8 years ago
Jean-Pierre PRUNARET b04e9502f0 make : ajout cible show-time pour avoir les stats de chrony (service ntp) 8 years ago
Jean-Pierre PRUNARET 4ab0e2ff47 hydra: suppression option suite à evol nixos, l'option est
deprecated/inutile
8 years ago
Jean-Pierre PRUNARET f025b78d94 radio: ajout de lib 8 years ago
Jean-Pierre PRUNARET 87e16c5fe7 awesome : inutile d'ajouter le tooltip en boucle 8 years ago
Jean-Pierre PRUNARET f7bd484863 make: ajustement requête blackhole pour afficher le nom de machine 8 years ago
Jean-Pierre PRUNARET ebea0312a8 awesome : ajout d'un widget iostat 8 years ago
Jean-Pierre PRUNARET 3be18dce4b awesome config: formattage 8 years ago
Jean-Pierre PRUNARET ecfe564d93 ajout documentation 8 years ago
Jean-Pierre PRUNARET c3979947ec gnuradio: ajout commande pour ajuster le ficher de conf local 8 years ago
Jean-Pierre PRUNARET db912bbc3b make: ajout cible show-blackholed pour facilement voir le nombre d'IP blackholées 8 years ago
Jean-Pierre PRUNARET b991fadc06 all : activation des pages de manuel (backport de config radx) 8 years ago
Jean-Pierre PRUNARET 8f21c1dc33 all: ménage de /tmp au lancement de nixos 8 years ago
Jean-Pierre PRUNARET c0493bb038 mtr: modification de la facçon d'activer les droits 8 years ago
Jean-Pierre PRUNARET 3894796a14 MaJ nixos version 8 years ago
Jean-Pierre PRUNARET 6d13167f38 python : update des packages vers python 3.6 lorsque possible 8 years ago
Jean-Pierre PRUNARET c00cdb9343 bureau : ajout de grammalectre comme correcteur grammatical 8 years ago
Jean-Pierre PRUNARET 697f44f3bc extraction des redéfinition des packages
-> ce n'est pas un fix très joli mais il a le mérite de réappliquer les
config que nous avions été obligés de mettre en commentaires lors du
dernier upgrade
8 years ago
Jean-Pierre PRUNARET 75682ee664 radio : extraction d'une option pour activer le profil
+ découpage des modules terminal/graphical
8 years ago
Jean-Pierre PRUNARET 3969805880 radio : configuration matérielle (module kernel masqué) 8 years ago
Jean-Pierre PRUNARET 99eac99e81 EXP radio 8 years ago
Jean-Pierre PRUNARET 7ca303303c notes pulseaudio 8 years ago
Jean-Pierre PRUNARET 5453b6bdcd EXPERIMENTAL ajout config pour radio SDR 8 years ago
Jean-Pierre PRUNARET b26bc099c8 munin : fix script path 8 years ago
Jean-Pierre PRUNARET 29b388ee95 ajout commande pv 8 years ago
Jean-Pierre PRUNARET 10937423fc désactivation textadept (erreur compil) 8 years ago
Jean-Pierre PRUNARET 38cf4631dd désactivation postgrest 8 years ago
Yves Dubromelle 88fa40fde3 haskell: ajout de servant 8 years ago
Jean-Pierre PRUNARET 99b3b11bd2 MaJ clef ssh hydra 8 years ago
Jean-Pierre PRUNARET eabecd5b69 Mettre à jour 'README.md' 8 years ago
Jean-Pierre PRUNARET 73b9eab551 Mettre à jour 'README.md' 8 years ago
Jean-Pierre PRUNARET 7329e54d04 utilisation de httpS pour le channel https://nixos.org/channels/nixos-unstable 8 years ago
Jean-Pierre PRUNARET fc18c2a6c5 Mettre à jour 'README.md' 8 years ago
Jean-Pierre PRUNARET 1458c750f3 config des TMP pour l'install de machine 8 years ago
Jean-Pierre PRUNARET 0b6968338f Mettre à jour 'README.md' 8 years ago
Jean-Pierre PRUNARET dc24c48cfd désactivation ansible 8 years ago
Jean-Pierre PRUNARET b1a19b811d amélioration purge des logs 8 years ago
Jean-Pierre PRUNARET dfe2bde371 commentaire 8 years ago
Jean-Pierre PRUNARET b8106deb18 lien 8 years ago
Yves Dubromelle cc2f1c33af lien howoldis pour dater les releases NixOS 8 years ago
Jean-Pierre PRUNARET 19bd8fbfbc migration config rollo sur annuaire 8 years ago
Yves Dubromelle 630217ce02 ghc-mod fonctionne à nouveau 8 years ago
Yves Dubromelle dcdaf91f8b voir les différences entre la configuration actuelle et /etc/nixos/configuration.nix 8 years ago
Yves Dubromelle 5803fdbbff configuration awesome par défaut linkée dans /etc 8 years ago
Yves Dubromelle dcae05d4c0 ménage (suite) 8 years ago
Yves Dubromelle 196cc008c8 +service gpm pour la souris en console 8 years ago
Yves Dubromelle fcc1cba9fb déplacement de dérivations dans les fichiers adéquats 8 years ago
Jean-Pierre PRUNARET f8a687be52 migration de neo-nomade à l'annuaire 8 years ago
Jean-Pierre PRUNARET 28fc448e0c Mettre à jour 'README.md' 8 years ago
Yves Dubromelle 195f5e35a1 +plantuml dans les paquets de développement& 8 years ago
Jean-Pierre PRUNARET ad0799f08d indentation 8 years ago
Yves Dubromelle 4dbcc8ddc0 git alias to show commits not pushed to remotes 8 years ago
Yves Dubromelle 3a5ae68f3a migrated machines cleanup (latitude, monstre, pedro, phenom) 8 years ago
Jean-Pierre PRUNARET 772cab2253 nsp 8 years ago
Jean-Pierre PRUNARET 92bf72c7bf indentation 8 years ago
Jean-Pierre PRUNARET 60f466a887 add sqlite to dev profile 8 years ago
Jean-Pierre PRUNARET eca3d77610 add option to build nixos documentation 8 years ago
Jean-Pierre PRUNARET 78ece5641d add server options 8 years ago
Jean-Pierre PRUNARET cc851a7946 add assertion 8 years ago
Jean-Pierre PRUNARET aa22c6337d migrated into profile 8 years ago
Jean-Pierre PRUNARET acacc94903 add development packages to workstation profile 8 years ago
Jean-Pierre PRUNARET 1f480bbbff add option to identify Workstations 8 years ago
Yves Dubromelle ac91ce4492 regroupement des options éparses en configurationOptions et renommage 8 years ago
Yves Dubromelle c43adc80cb utilisation des profils pour modifier les flags :) 8 years ago
Yves Dubromelle 745d2cd171 on peut se passer de passer lib en paramètre 8 years ago
Yves Dubromelle 259a1a0aa6 cible make pour juste builder NixOS sans appliquer 8 years ago
Yves Dubromelle 854eed9227 ébauche de fonction pour générer un profil 8 years ago
Jean-Pierre PRUNARET 8ee09217cb une machine hydra-builder doit faire du garbage-collection régulièrement 8 years ago
Jean-Pierre PRUNARET b15672c3ad ménage config generator 8 years ago
Jean-Pierre PRUNARET ab1d364327 ajout option munin 8 years ago
Jean-Pierre PRUNARET 67eadfab97 ces anciens profils ont été convertis en assertions 8 years ago
Jean-Pierre PRUNARET ff733c5d08 migration monstre 8 years ago
Jean-Pierre PRUNARET d3f1f2121e ajustement readme 8 years ago
Yves Dubromelle cdd75e063d assertion DNS 8 years ago
Jean-Pierre PRUNARET a816a81b9e migration machines 8 years ago
Jean-Pierre PRUNARET aa6ae3cc8d ajout config yubike 8 years ago
Jean-Pierre PRUNARET 419a1cbf53 fix: spacefm crashes https://github.com/IgnorantGuru/spacefm/issues/671 8 years ago
Jean-Pierre PRUNARET b03d4acfe2 add assertions on base 8 years ago
Jean-Pierre PRUNARET 274f4812f4 désactivation config-generator 8 years ago
Jean-Pierre PRUNARET 4749384834 x11 doit être activé à la main dans configuration.nix 8 years ago
Jean-Pierre PRUNARET 55650f01b5 désactivation locate (infinite recursion) 8 years ago
Jean-Pierre PRUNARET 197961745d indentation 8 years ago
Jean-Pierre PRUNARET f2f49c6206 ajout plugin pandoc 8 years ago
Jean-Pierre PRUNARET 6e29240664 désactivation sqlitebrowser 8 years ago
Jean-Pierre PRUNARET 01c3b6fc39 ajout option rmilter 8 years ago
Jean-Pierre PRUNARET 24fa43926b ajout instructions readme 8 years ago
Jean-Pierre PRUNARET 2588e7052a script qui relance une commande des changement du système de fichier 8 years ago
Jean-Pierre PRUNARET 21d6e21214 options: ensemble d'options pour nix-serve-client 8 years ago
Jean-Pierre PRUNARET b08da50c3c désactivation de personnalisation de paquets 8 years ago
Jean-Pierre PRUNARET 02f76b6a30 fix: typo 8 years ago
Jean-Pierre PRUNARET e778ad19cb fix: oubli d'une migration vers l'utilisation de l'annuaire 8 years ago
Jean-Pierre PRUNARET a074cfcfa7 EXPERIMENTAL: cfg -> flags 9 years ago
Jean-Pierre PRUNARET 7f8563f32b exparimental: utilisation de l'annuaire 9 years ago
Jean-Pierre PRUNARET 2a923e150e options: ajout des variables pour les profils 9 years ago
Jean-Pierre PRUNARET 3869c2d520 options: ajouts configuration-flags 9 years ago
Jean-Pierre PRUNARET ddac52530b annuaire: ajout variables dans template & application 9 years ago
Yves Dubromelle fe6f3136f7 essai de backport d'un annuaire de gestion de parc 9 years ago
Jean-Pierre PRUNARET c6fc32fbe7 radx: desactivation rabbitmq 9 years ago
Yves Dubromelle 42db758638 munin: postfix commande ppour donner les droits de lecture à munin 9 years ago
System administrator 07d8924ecd gparted: coquille, était "parted" 9 years ago
System administrator 2dc04d849b encore une modification de port pour hoogle 9 years ago
Jean-Pierre PRUNARET 184de980a5 munin: EXPERIMENTAL est membre du groupe postfix pour grapher les mails 9 years ago
System administrator f16e4d8934 changement du port de hoogle (conflit au boulot) 9 years ago
Jean-Pierre PRUNARET e204ffb841 ajout d'un client pour la sauvegarde nuagique 9 years ago
Jean-Pierre PRUNARET 8c0a18a55b awesome: ajout clementine sur maj + F6 9 years ago
Jean-Pierre PRUNARET fd834eb186 munin: update mail address 9 years ago
Jean-Pierre PRUNARET f12b21f620 hydra: l'évaluation des builds n'est pas prioritaire sur le système 9 years ago
Jean-Pierre PRUNARET 09212b7b67 déplacement du service smokeping vers private 9 years ago
Jean-Pierre PRUNARET b518d9a525 activation wireshark 9 years ago
Jean-Pierre PRUNARET bda5db0417 découpages des applications en "graphical" et "terminal" 9 years ago
Jean-Pierre PRUNARET 37ae56a380 ajout option graphical + affectation pour workstation et neonomade 9 years ago
Yves Dubromelle 50085c2961 répartition des imports dans le niveau 1 de sous-dossiers 9 years ago
Yves Dubromelle 40426c1ad2 déplacement de la configuration à la racine du dépôt (sauf rc.lua) 9 years ago
Yves Dubromelle c1d112a10a suite du tri dans public/ 9 years ago
Yves Dubromelle 9997092984 oops: munin-muttrc n'a pas suivi son fichier .nix 9 years ago
Yves Dubromelle da41826e33 découpage des applications par défaut 9 years ago
Yves Dubromelle 708e5fcbce tri à la racine de public/ 9 years ago
Yves Dubromelle 097472cca0 tri de la catégorie applications 9 years ago
Yves Dubromelle eeb4543f1f TADA ! retour de l'activation de xserver dans le template :) 9 years ago
Yves Dubromelle 4660f79017 refactor de la configuration spécifique aux laptops 9 years ago
Yves Dubromelle 3963027f04 isDesktop -> isDesktopEnvironment + groupes de logiciels 9 years ago
Yves Dubromelle 156cbc8c27 scanner sorti du profil desktop par défaut 9 years ago
Yves Dubromelle a51024633f option à part pour pulseaudio 9 years ago
Yves Dubromelle c8f8ad898d suppression des préfixes app et service 9 years ago
Yves Dubromelle 937565f885 déplacement naïf dans "applications" et "services" 9 years ago
Yves Dubromelle 15ce896f9c bon numéro de version nixos 9 years ago
Jean-Pierre PRUNARET 348433e395 ajout service hoogle local pour profil dev-haskell 9 years ago
Jean-Pierre PRUNARET f1c02b0625 fix: erreur de nomage 9 years ago
Jean-Pierre PRUNARET 0ffecb8804 option smokeping + activation pour serveurs 9 years ago
Jean-Pierre PRUNARET ac76e6e62b dev: ajout editeur atom 9 years ago
Jean-Pierre PRUNARET 5a7ad25615 désactivation gitg 9 years ago
Yves Dubromelle c3c7581a3e rollo: active virtualbox 9 years ago
Jean-Pierre PRUNARET e80018e273 radx: essai de faire une VM de build compatible hydra 9 years ago
Jean-Pierre PRUNARET b829e708a0 la machine hydra est serveur nix-serve 9 years ago
Jean-Pierre PRUNARET 3297760d21 ajout systat pour les statistiques disque 9 years ago
Jean-Pierre PRUNARET b983832308 hydra-builder: suppression de la configuration utilisateur (spécifique machine) 9 years ago
Jean-Pierre PRUNARET db66626208 ocean est un hydra builder 9 years ago
Yves Dubromelle 14e9ddbc13 set JAVA_HOME 9 years ago
Yves Dubromelle c96c981d20 retour à openjdk, problèmes avec zulu 9 years ago
Jean-Pierre PRUNARET 4535ccf03c fix: oubli virgule 9 years ago
Jean-Pierre PRUNARET 7bc21c0dc8 awesome: ajout 2nd script pour xrandr 9 years ago
Yves Dubromelle 3f74486951 nix-serve: latitude peut aussi être un client nix-serve 9 years ago
Yves Dubromelle 0dae9aef3c haskell: ajout ghc-mod 9 years ago
Yves Dubromelle 1a3e8f4528 tinc-hydra: ajout comme remote possible 9 years ago
Yves Dubromelle b1d3ee4aae hydra: adresse tinc en .9 9 years ago
Jean-Pierre PRUNARET e2178821d8 haskell: extraction du prefixe commun 9 years ago
Jean-Pierre PRUNARET 1e00db3864 haskell: commentaires 9 years ago
System administrator 3364f19ed7 xmonad: variable pour java et trayer 9 years ago
es006 c10d2c6d63 le script byobu va chercher la liste des sous modules 9 years ago
Jean-Pierre PRUNARET 8dd973ede1 inutile 9 years ago
Jean-Pierre PRUNARET aeeea3a743 la clef du serveur hydra a changée 9 years ago
Jean-Pierre PRUNARET 3b76bd00af Merge branch 'master' into nixos-unstable 9 years ago
Jean-Pierre PRUNARET e74a1825d9 backport from master 9 years ago
Yves Dubromelle b47c6807d1 activation nix-serve pour les serveurs online 9 years ago
Yves Dubromelle a4728792b2 les noms pour les machines dubro n'était pas dans config-generator 9 years ago
Yves Dubromelle 4c4c2fed3e fix: le nom de rollo n'était pas défini 9 years ago
Jean-Pierre PRUNARET 93254f45c0 Mettre à jour 'README.md' 9 years ago
Jean-Pierre PRUNARET c1ce935adb Mettre à jour 'README.md' 9 years ago
Jean-Pierre PRUNARET e68cbcd8b9 Mettre à jour 'README.md' 9 years ago
Jean-Pierre PRUNARET ac39a52fd7 Mettre à jour 'README.md' 9 years ago
Jean-Pierre PRUNARET 3dc8184bca formatage 9 years ago
Jean-Pierre PRUNARET 24ef44b100 ajout notes pour installation machine chez online 9 years ago
Jean-Pierre PRUNARET 9e9ea00cd2 Mettre à jour 'README.md' 9 years ago
Jean-Pierre PRUNARET 464da39592 glances en python 3 refuse de compiler. Il reste celui en python2 9 years ago
Jean-Pierre PRUNARET 963c818875 claws-mail: désactivation du plugin pour voir les mails en HTML
* plusieurs failles de sécurité
* option en commentaire pour l'activer quand même
9 years ago
Yves Dubromelle 2f99508331 ajout todo sur config-generator 9 years ago
Yves Dubromelle b6a7f50ebd ajout de todo 9 years ago
Yves Dubromelle 2fdaf24fae déplacement de la config desktop vers les endroits quivontbien(c) dans public 9 years ago
Yves Dubromelle c193d944d9 déplacement de la config xmonad vers public 9 years ago
Yves Dubromelle 7750d1a266 déplacement de la config du résolveur dns vers private + purge base 9 years ago
Yves Dubromelle 08195188b2 déplacement de nix-serve et fail2ban dans private 9 years ago
Yves Dubromelle b12e1f9ae5 déplacement des users vers private 9 years ago
Yves Dubromelle d0b3497ccb htop s'ouvre dans byobu 9 years ago
Yves Dubromelle ba0d43670d la dernière série d'onglets byobu lance une commande 9 years ago
Jean-Pierre PRUNARET 06aaf3cc23 comment 9 years ago
Jean-Pierre PRUNARET 0e1a1b0107 déplacement config claws & mumble 9 years ago
Jean-Pierre PRUNARET c500c59732 déplacement des polices 9 years ago
Jean-Pierre PRUNARET 9e3b1d163f déplacement paquets 9 years ago
Jean-Pierre PRUNARET 9bdaae4593 typo 9 years ago
Jean-Pierre PRUNARET 1a80e445ce ajout squelette pour unifier desktop/ 9 years ago
Jean-Pierre PRUNARET 50d486565c inutile 9 years ago
Jean-Pierre PRUNARET b6cf3b2674 déplacement samba 9 years ago
Jean-Pierre PRUNARET c0427bb622 byoby: ajout commentaires + utilisation de boucles 9 years ago
Yves Dubromelle 5be0164cb9 script + variable d'environment pour une session byobu d'adminsys 9 years ago
System administrator 493249ebd3 clef ssh taeradan de la VM capgemini 9 years ago
System administrator 9d0c04810c clef ssh taeradan de la VM capgemini 9 years ago
Yves Dubromelle e5de46f1d3 zulu: distribution openjdk 9 years ago
Yves Dubromelle 2a2c0a56fe munin: with pkgs 9 years ago
Jean-Pierre PRUNARET 8ef6642024 munin: augmentation du délais de demarrage 9 years ago
Jean-Pierre PRUNARET e77df9816d munin: configuration de l'envois de mail 9 years ago
Yves Dubromelle ba09f97684 setuid: smokeping 9 years ago
Yves Dubromelle b0696f1983 sudo: inutile :) 9 years ago
Yves Dubromelle 2d9c9415a2 setuid: mtr 9 years ago
Yves Dubromelle 7e7736b631 setuid: udevil 9 years ago
Yves Dubromelle 52670ebd9c setuid: slock 9 years ago
Yves Dubromelle 8845300555 awesome: activation du raccourci xrandr-auto + au démarrage 9 years ago
Jean-Pierre PRUNARET dce783708c désactivation modification IO scheduler pour SSD 9 years ago
Jean-Pierre PRUNARET f2305d0a81 tinc: ajout @IP dubro vivo 9 years ago
Jean-Pierre PRUNARET a6e957afae ménage config-generator 9 years ago
Jean-Pierre PRUNARET edfac07129 pru: + de paquets par défaut 9 years ago
Jean-Pierre PRUNARET 7799eb106f haskell: ajout threadscope pour analyser les logs d'application 9 years ago
Jean-Pierre PRUNARET e0a468bfeb fix port 9 years ago
Jean-Pierre PRUNARET c4013be348 typo 9 years ago
Jean-Pierre PRUNARET 6cdd621db2 erreur DNS pour grudu. utilisation @IPv4 9 years ago
Jean-Pierre PRUNARET a5bfdbcd3d activation nix-serve-client {ocean, rollo} 9 years ago
Jean-Pierre PRUNARET 5b954581db activation nix-serve client entre les serveurs online 9 years ago
Jean-Pierre PRUNARET ca11b46674 activation serveur nix-serve sur machines en salle machine 9 years ago
Yves Dubromelle 754a1ec934 nix-server: ajout de monstre 9 years ago
Yves Dubromelle 80f7b32af6 phenom: est un client nix-serve 9 years ago
Yves Dubromelle 5cd1cd0e6f phenom: desactivation de latitude comme source nix-serve 9 years ago
Yves Dubromelle fae4a8237c /run/current-system/sw/bin/bash: q : commande introuvable 9 years ago
Yves Dubromelle 5f09c0896d ajout de machines fixes comme serveur nix 9 years ago
Yves Dubromelle 2244b917ac radx: activation nix-server 9 years ago
Jean-Pierre PRUNARET 458362bece git: alias d'affichage des branches triées par date de modification 9 years ago
Jean-Pierre PRUNARET b4b213e836 client internet: ajout de quassel simple pour se connecter sans bouncer 9 years ago
Jean-Pierre PRUNARET cc7f911141 radx: activation postgresql 9 years ago
Jean-Pierre PRUNARET 4ffd71f10f haskell: ajout hlint 9 years ago
Yves Dubromelle 07cf33a086 police hasklig 9 years ago
Jean-Pierre PRUNARET f3741782e3 munin: réduction du temps d'attente au lancement. On verra s'il est suffisant 9 years ago
Jean-Pierre PRUNARET b8c3447767 fix: syntax 9 years ago
Jean-Pierre PRUNARET eb3a945c7c prunetwork: disable hydra 9 years ago
Jean-Pierre PRUNARET 6f19fdec07 ajout de time devant les commandes nix potentiellement longues 9 years ago
Jean-Pierre PRUNARET 91e81d50a6 radx: profils de dev 9 years ago
Yves Dubromelle 293dd76025 profil pour Elm (et plugin vim) 9 years ago
Jean-Pierre PRUNARET 65a21c197c ajout hostname pour {radx, hydra, ocean} 9 years ago
Yves Dubromelle c11cd5d456 formatage 9 years ago
Yves Dubromelle 805ef707f5 fix: plus de matching sur le hostname, is<machine> à mettre à true dans configuration.nix 9 years ago
Yves Dubromelle 1ee426f50a hostname dans le config-generator pour phenom 9 years ago
Yves Dubromelle 0bcd327679 -hydra pour phenom 9 years ago
Jean-Pierre PRUNARET 04c3397ff3 suppression de la variable enable car toujours à vraie 9 years ago
Jean-Pierre PRUNARET 5f86c78e1b smokeping: ajout hydra 9 years ago
Jean-Pierre PRUNARET aad2931967 tinc: ajout adresse réseau grudu pour hydra.pru 9 years ago
Jean-Pierre PRUNARET 715a3519f4 Merge remote-tracking branch 'origin/master' into nixos-unstable 9 years ago
Jean-Pierre PRUNARET 0b08c7dbd0 munin: ajout dépendances sur 'sensors' 9 years ago
Jean-Pierre PRUNARET 0dab828682 activation de hydra sur hydra.pru 9 years ago
Jean-Pierre PRUNARET b4786c8fdf ajout de la clef ssh serveur de hydra 9 years ago
Jean-Pierre PRUNARET 11a69418a7 ajout machine hydra.prunetwork.fr 9 years ago
Jean-Pierre PRUNARET d7f2b4fd38 ajout monitoring smokeping pour toutes les machines 9 years ago
Yves Dubromelle ce1cae293c ajout hindent 9 years ago
Yves Dubromelle 1c58705adf latitude sert son nix-store 9 years ago
Yves Dubromelle 84802f8604 ajout hindent 9 years ago
Yves Dubromelle 28092fb029 latitude sert son nix-store 9 years ago
Yves Dubromelle 1cc773c034 outils de ménage de fichier 9 years ago
Yves Dubromelle 58c32c79fb ajout de paquets haskell 9 years ago
Jean-Pierre PRUNARET d1a5228a92 MaJ config pulseaudio : nouvel argument pour déclarer les options du daemon 9 years ago
Jean-Pierre PRUNARET 79a3fd779b munin: ajout bc 9 years ago
Jean-Pierre PRUNARET fcf73d4249 commande pour afficher les emplacements contenant des expressions nix construites 9 years ago
Jean-Pierre PRUNARET ce7e111128 on reste dans la branche courante 9 years ago
Yves Dubromelle c0832c7ccb munin: augmentation du lelais de timeout pour le démarrage du daemon 9 years ago
Yves Dubromelle 10a42e4cbd monstre est un serveur nix 9 years ago
Yves Dubromelle f0627eb800 nix-serve est disponible uniquement par tinc 9 years ago
Yves Dubromelle ae4c1edee0 prise en compte du fichier jetbrains 9 years ago
Yves Dubromelle 4fec5f8c05 application de hydra-core sur phenom 9 years ago
Yves Dubromelle bec65c07c3 variable pour activer une partie de la suite jetbrains 9 years ago
Jean-Pierre PRUNARET 8de39214b6 changement de l'ordre des enregistrements pour awesome 9 years ago
Jean-Pierre PRUNARET b9b92c5942 monitoring: inutile de conserver le port 8000 ouvert car aucun service n'écoute 9 years ago
Jean-Pierre PRUNARET aec47a8d1b monitoring: l'utilisation de localhost posait problème 9 years ago
Jean-Pierre PRUNARET 0fefb7adc8 calws: ajout plugin 9 years ago
Jean-Pierre PRUNARET 6779d58dfb claws: activation calendrier + correcteur orthographe 9 years ago
Jean-Pierre PRUNARET 54d15c8ed6 Revert "radx: désactivation hydra : ne s'installe pas" -> s'installe sur nixos-unstable
This reverts commit 7afafa7863.
9 years ago
Jean-Pierre PRUNARET f2ce6751d2 désactivation paquet pour migration nixos-unstable (17.03pre) 9 years ago
Jean-Pierre PRUNARET 996b8e803c ajout fichier de configuration pour awesome 3 (nixos-16.09) 9 years ago
Jean-Pierre PRUNARET 162bac4af0 fichier de configuration awesome 4 (nixos-17.03) 9 years ago
Jean-Pierre PRUNARET 55da6460d6 remplacement gnome-icon-theme par équivalent gnome3 9 years ago
Jean-Pierre PRUNARET 14bc58c1c2 désactivation ksnapshot 9 years ago
Jean-Pierre PRUNARET 3818122ac9 haskell: ajout de stylish-haskell 9 years ago
Jean-Pierre PRUNARET 7afafa7863 radx: désactivation hydra : ne s'installe pas 9 years ago
Jean-Pierre PRUNARET cb6676a215 make: cible pour telecharger toutes les sources nécessaires au build 9 years ago
Jean-Pierre PRUNARET c0c4550af0 masquage config hydra bleeding-edge (casse le nix store) 9 years ago
Jean-Pierre PRUNARET 43fac7495d ajout client dhcp 9 years ago
Yves Dubromelle ab32cae7d8 désactivation globale de nix-serve-client pour les desktops (ne marche pas sur monstre) 9 years ago
Yves Dubromelle 5bbb61b05d monstre: activation murmur (serveur mumble) 9 years ago
Yves Dubromelle 8abd9b1d5d hydra normal 9 years ago
Jean-Pierre PRUNARET 31692206e0 amélioration hydra + retour au paquet par défaut 9 years ago
Jean-Pierre PRUNARET fad5a05159 ajout commande de debug 9 years ago
Jean-Pierre PRUNARET 30962288b7 ajout référence ver source 9 years ago
Jean-Pierre PRUNARET 8d28f29c57 MaJ version hydra - manuelle 9 years ago
Jean-Pierre PRUNARET df05e6101d prunetwork, & docker 9 years ago
Jean-Pierre PRUNARET 72eaf19f95 déplacement des options de profils dans + spécifique 9 years ago
Jean-Pierre PRUNARET f632193558 création profil prunetwork && workstation 9 years ago
Jean-Pierre PRUNARET 05b5da4319 suppression option inutilisée (même si interessante) 9 years ago
Jean-Pierre PRUNARET 64d0765e40 xray n'est pas sous nixos 9 years ago
Jean-Pierre PRUNARET 587e91fe61 la config locate est spécique aux domaines 9 years ago
Yves Dubromelle 0f4355d382 désactivation yubikey 9 years ago
Yves Dubromelle 8c18caab2e déplacement programmes dans fichiers spécifiques 9 years ago
Yves Dubromelle 2bee4131ed commentaires 9 years ago
Yves Dubromelle 49b86fb898 dev: programmes inutiles 9 years ago
Jean-Pierre PRUNARET 6dd9251f07 activation de locate ... 9 years ago
Jean-Pierre PRUNARET 6ca6c83898 commentaires 9 years ago
Jean-Pierre PRUNARET d6ff207d22 indentation 9 years ago
Jean-Pierre PRUNARET 2a26db779f dev: ajout de hahp à l'environement haskell 9 years ago
Jean-Pierre PRUNARET aecfadea5f dev: suppression zeal 9 years ago
Jean-Pierre PRUNARET 2e45bfbc05 dev: suppression des applications disponibles dans des fichiers séparés 9 years ago
Jean-Pierre PRUNARET cd05bec335 utilisation des variables pour activer les environements de dev 9 years ago
Jean-Pierre PRUNARET 3aecc135c0 ajout de profiles pour le développement (haskell java rust) 9 years ago
Jean-Pierre PRUNARET 54b8d6ce7d commande pour avoir les statistiques d'affectation des lignes de texte d'un dépôt git 9 years ago
Jean-Pierre PRUNARET 4a81f80d8c déplacement ksnapshot 9 years ago
Jean-Pierre PRUNARET ec3dc220be edition-photo: un éditeur de raw n'est pas nécessaire. Il faut un appareil qui produise du raw 9 years ago
Jean-Pierre PRUNARET 4a106a82ef edition-musique: seules les stations de travail dubronetwork ont l'option activée 9 years ago
Jean-Pierre PRUNARET 4397b892eb cartographie: désactivation qgis 9 years ago
Jean-Pierre PRUNARET 829aff682e bureautique: ajout section pour diagrammes 9 years ago
Jean-Pierre PRUNARET cff0a177d2 désactivation d'applications a priori peu utilisées 9 years ago
Jean-Pierre PRUNARET de2c645dbe indentation 9 years ago
Jean-Pierre PRUNARET 0facfef3e9 réorganisation fichier app-dev 9 years ago
Jean-Pierre PRUNARET 94c1485006 ajout commentaire 9 years ago
Jean-Pierre PRUNARET 35322c124c ajout duplicity 9 years ago
Jean-Pierre PRUNARET 8d9c0d830f interpreteur .net 9 years ago
Jean-Pierre PRUNARET bdf5e511f3 commentaires 9 years ago
Jean-Pierre PRUNARET 386ce3b25e ajout hubicfuse 9 years ago
Jean-Pierre PRUNARET b9d19017c0 packages pour haskell 9 years ago
Jean-Pierre PRUNARET f91e72ef50 ajout de pandoc-citeproc 9 years ago
Jean-Pierre PRUNARET 5f089977a2 mnomade
tinc: ajout conf neo
9 years ago
Yves Dubromelle 83aa5af2fc ménage 9 years ago
Jean-Pierre PRUNARET 79d97ca438 ajout en masse de liens vers rollo, ocean, monstre 9 years ago
Jean-Pierre PRUNARET 04869f63f7 tinc: ajouit adresse monstre, rollo, ocean 9 years ago
Jean-Pierre PRUNARET be47e7c285 make: ajout commandes rapides pour tinc 9 years ago
Jean-Pierre PRUNARET a2ee566f15 net: activation du forwarding pour IPv4 et IPv6 9 years ago
Jean-Pierre PRUNARET b51c69d330 tinc: modification plage addresse 9 years ago
Jean-Pierre PRUNARET a75b126b5a tnic: radx essaye de se connecter à phenom 9 years ago
Yves Dubromelle eabe0db746 réduction de la taille des subnets 9 years ago
Jean-Pierre PRUNARET b2e44a7b75 activation rabbitmq radx 9 years ago
Jean-Pierre PRUNARET 59982b296b ajout de maven 9 years ago
Jean-Pierre PRUNARET 4b35c7c20a fix: erreur nom programme 9 years ago
Jean-Pierre PRUNARET c0509692b4 ajout focuswriter 9 years ago
Jean-Pierre PRUNARET 772ce45d5e ajout lsb-release 9 years ago
Yves Dubromelle f38a182c4d hydra: ajout de qemu 9 years ago
Jean-Pierre PRUNARET 4bb890da7a règles pour les SSD 9 years ago
Jean-Pierre PRUNARET ec24734b05 make: utilisation d'un alias pour "git submodule foreach" 9 years ago
Jean-Pierre PRUNARET ac8e92cfce l'utilisateur hydra doit utiliser virtualbox 9 years ago
Yves Dubromelle 5ad9c73c03 support basique des scanners (sane + simple-scan) 9 years ago
Yves Dubromelle faa4be782a phenom n'est plus un laptop 9 years ago
Yves Dubromelle ec4aa5ac32 hydra: activation de services de vitualisation sur le builder
* certaines expressions nix demandent à être exécutées dans des VM, conatiners et autres.
    Jusque là, ces builds restaient dans la file d'attente d'hydra.
    Cela devrait corriger le problème.
9 years ago
Jean-Pierre PRUNARET 7806cd3ad6 users; ajustement groupes 9 years ago
Jean-Pierre PRUNARET 374b2732ad ajout clef yves@job 9 years ago
Jean-Pierre PRUNARET 6ce50aea40 activation de Es + kibana sur radx 9 years ago
Jean-Pierre PRUNARET 012cc8626c ajout de variables dans le config generator 9 years ago
Jean-Pierre PRUNARET bdbf858a11 ajout de services (Elasticsearch & kibana) 9 years ago
Jean-Pierre PRUNARET a4b166f1f8 readme: commentaire 9 years ago
Jean-Pierre PRUNARET bb5ee98bc3 hydra: ajout de commentaires 9 years ago
Jean-Pierre PRUNARET dd9f52b997 import confing hydra de pedro 9 years ago
Jean-Pierre PRUNARET bb617fbf13 Merge branch 'upgrade-16.09' = les machines sont migrées 9 years ago
Jean-Pierre PRUNARET 021b1d5c26 Revert "lors d'une full-auto, on ne force pas à être sur la branche master"
This reverts commit 3a8a728268.
9 years ago
Yves Dubromelle 31f57965f9 peers -> extraconfig de tinc, pour être plus souple 9 years ago
Yves Dubromelle 0a3d820dd6 variable pour les noeuds auquels tinc doit se connecter 9 years ago
Yves Dubromelle f0f266cb55 adresse IP du noeud tinc local 9 years ago
Yves Dubromelle 1916d6eb90 désactivation grsecurity 9 years ago
Jean-Pierre PRUNARET fa32aed569 hydra build: correction du type d'user 9 years ago
Jean-Pierre PRUNARET 9201266575 Revert "fix: variables d'environnement pour gpg (et donc pass)"
This reverts commit 2982725e0b.
9 years ago
Jean-Pierre PRUNARET 756a18b2e8 Merge remote-tracking branch 'origin/upgrade-16.09' into upgrade-16.09 9 years ago
Jean-Pierre PRUNARET 3b04c2edb0 alias gpg -> gpg2 9 years ago
Jean-Pierre PRUNARET 2982725e0b fix: variables d'environnement pour gpg (et donc pass) 9 years ago
Jean-Pierre PRUNARET 9e8d3b24b3 correction du nom d'utilisateur pour le build 9 years ago
Jean-Pierre PRUNARET dba3a46ebd fichier inutile 9 years ago
Jean-Pierre PRUNARET 7d28694819 ocean: activation radicale 9 years ago
Jean-Pierre PRUNARET ed5420e1b0 ajout option pour radicale 9 years ago
Jean-Pierre PRUNARET d6bfe1c706 pinentry 9 years ago
Jean-Pierre PRUNARET 7dada8a3e6 fix: erreur de type (string et non array) 9 years ago
Jean-Pierre PRUNARET bd0076b9d1 MaJ commande ssh 9 years ago
Jean-Pierre PRUNARET 6800de18af ajout des clef publiques des serveurs 9 years ago
Jean-Pierre PRUNARET 5d831cf7be Merge branch 'upgrade-16.09' into HEAD 9 years ago
Jean-Pierre PRUNARET 2ffdaf0a53 Revert "suelette de config hydra"
This reverts commit 99d5886aff.
9 years ago
Jean-Pierre PRUNARET 7dbfccf2f4 hydra: désactivation gc car conflit 9 years ago
Jean-Pierre PRUNARET e2e15cad39 hydra: ajout config core & builder (pas testé) 9 years ago
Jean-Pierre PRUNARET 2d770067b7 hydra: ajout options pour les profils hydra 9 years ago
Jean-Pierre PRUNARET 46e61f0fed config hydra TMP 9 years ago
Yves Dubromelle 99d5886aff suelette de config hydra 9 years ago
Yves Dubromelle 21d7c97c76 readme: ajustement sur le bootloader 9 years ago
Yves Dubromelle 3a8a728268 lors d'une full-auto, on ne force pas à être sur la branche master 9 years ago
Jean-Pierre PRUNARET a5aae179a2 Mettre à jour 'README.md' 9 years ago
Jean-Pierre PRUNARET 95e8687609 précision sur le channel 9 years ago
Jean-Pierre PRUNARET 8e35b38d19 Merge remote-tracking branch 'origin/master' into upgrade-16.09 9 years ago
Jean-Pierre PRUNARET 51dd0b65f4 correction régression sur hostname 9 years ago
Jean-Pierre PRUNARET 04038a7b16 fusion des dichiers README (oups) 9 years ago
Jean-Pierre PRUNARET 4fbf145c78 ajout README 9 years ago
Jean-Pierre PRUNARET 821d46befe désactivation par défaut de x11 : doit être explicitement appelé 9 years ago
Jean-Pierre PRUNARET 807b1bc2e6 activation dbus 9 years ago
Jean-Pierre PRUNARET 4b5eacda0f x11: paramètres non nécessaires car les valeurs par défaut sont OK 9 years ago
Jean-Pierre PRUNARET 18f960b879 Revert "x11: paramètres non nécessaires car les valeurs par défaut sont OK"
This reverts commit a8e28e594a.
9 years ago
Jean-Pierre PRUNARET a8e28e594a x11: paramètres non nécessaires car les valeurs par défaut sont OK 9 years ago
Jean-Pierre PRUNARET 758e8ba84a MaJ des nom de paquets (cf. release note) 9 years ago
Jean-Pierre PRUNARET 1d3f46c2ec texlive nouvelle archi (2015 ...) 9 years ago
Jean-Pierre PRUNARET 3ccc8678ce ajout outil wifi pour profil laptop 9 years ago
Yves Dubromelle 215005d927 installation des outils réseaux sur toutes les machines 9 years ago
Yves Dubromelle 9fb124116d phenom: permet de modifier les photo + profil laptop (pour carte wifi) 9 years ago
Yves Dubromelle d65ee1bd2c bonnes pratiques selon nixos 9 years ago
Yves Dubromelle dce7b12a33 ajout pmisc 9 years ago
Jean-Pierre PRUNARET 826595cb6c radx peut imprimer 9 years ago
Jean-Pierre PRUNARET b633d3c794 les machines @home peuvent utiliser le cache sur monstre 9 years ago
Jean-Pierre PRUNARET 5444be4fd2 copie de configuration.nix par nix dans l'environement courant 9 years ago
Jean-Pierre PRUNARET 9b4a4f1b67 ssh: ajout lien best practices 9 years ago
Jean-Pierre PRUNARET b622554b42 ajout clef mbp pour root (car radx n'est toujours pas en route) 9 years ago
Jean-Pierre PRUNARET 332f40265d tout le monde peut exécuter mtr sans sudo 9 years ago
Yves Dubromelle 781973228f parce-que je m'ennuie à l'aéroport :) 9 years ago
Yves Dubromelle 65e1c6ff0e utilisation de slock sans sudo -> wrapper setuid 9 years ago
Jean-Pierre PRUNARET b42c8e3080 tout le monde peut faire 'sudo slock' 9 years ago
Jean-Pierre PRUNARET adaa4eeb61 ajout de la date après un full-auto 9 years ago
Jean-Pierre PRUNARET 56d2c04cd6 app-dev: commentaires + outils git supplémentaire 9 years ago
Jean-Pierre PRUNARET ebe63ea5e0 organisation fichier 9 years ago
Jean-Pierre PRUNARET ea69ceba37 ajout de paquets : duff & odpdown 9 years ago
Yves Dubromelle e8521880e1 bloc commenté pour activer le pack d'extention virtualbox 9 years ago
Yves Dubromelle 313457be31 wrapper setuid pour udevil (montage USB, smb, etc...) 9 years ago
Jean-Pierre PRUNARET df0951ce65 ajout de commentaires 9 years ago
Jean-Pierre PRUNARET 1323e6dee1 commandes pour gérer un système de fichier temporaire en mémoire 9 years ago
Yves Dubromelle d16271c61e fix: monstre est censé servir de résolveur pour le LAN dubronetwork 9 years ago
Jean-Pierre PRUNARET 6c45e0bfa2 autorisation de 'sudo mtr' pour tous les users 9 years ago
Jean-Pierre PRUNARET c2d3bb8cb4 désactivation de l'envois de mail par fail2ban. Erreur de PATH nixos 9 years ago
Jean-Pierre PRUNARET d5c79218fa ajout whois 9 years ago
Jean-Pierre PRUNARET e7ef51ecbe il faut configurer un peu plus la règle 9 years ago
Jean-Pierre PRUNARET 6c02c2200c envois de mails lors d'un ban avec informations whois & lignes 9 years ago
Jean-Pierre PRUNARET c8592c769e ajout des valeurs par défaut car remplacées 9 years ago
Jean-Pierre PRUNARET 7b298ac8a3 activation règle ssh-iptable 9 years ago
Jean-Pierre PRUNARET 9190d21a65 il manquait la commande mail pour munin 9 years ago
Yves Dubromelle b4c960d3d3 fix: quand isDesktop = true, les autres paquets n'étaient plus là 9 years ago
Jean-Pierre PRUNARET 516976ccf9 désactivation de sudo sans mot de passe 9 years ago
Jean-Pierre PRUNARET 634af07219 ajout d'assertion à users.nix 9 years ago
Jean-Pierre PRUNARET 91d414d3e1 ajustement description 9 years ago
Jean-Pierre PRUNARET ca0171b70e une partie des outils d'admin sont disponibles en permanence 9 years ago
Jean-Pierre PRUNARET 48361328dd ajout de rdfind + ajout commentaires 9 years ago
Jean-Pierre PRUNARET ee34e1a138 lancement de la commande munin (web) par 'make munin' 9 years ago
Jean-Pierre PRUNARET ea307cc5dc application du template 9 years ago
Jean-Pierre PRUNARET 1cce1ec034 commande pour faciliter l'application du template 9 years ago
Jean-Pierre PRUNARET 32a05e2124 MaJ template 9 years ago
Yves Dubromelle 23cb4c79a9 désactivation du cache standard pour les machines dubronetwork 9 years ago
Yves Dubromelle 160ec79b0f désactivation de nix-serve-server sur les serveurs dubronetwork 9 years ago
Yves Dubromelle 9bc50b35dd ajout de la machine pedro 9 years ago
Yves Dubromelle 1c649a9b04 les jeux ne sont plus activés systématiquements 9 years ago
Yves Dubromelle 7cb371510b ajustement des règles d'utilisation du cache 9 years ago
Yves Dubromelle b38e5a87bb monstre est un client du cache nix 9 years ago
Yves Dubromelle 50326127d3 taeradan: ajout d'un mot de passe initial très compliqué 9 years ago
Yves Dubromelle 02a8b96e61 ajout d'utilisateurs avec mailbox 9 years ago
Yves Dubromelle 5e6586d403 rollo stocke les mails 9 years ago
Yves Dubromelle b65ffa4d8f ajout option de configuration pour stocker les mails en boite 9 years ago
Yves Dubromelle 744ebec05b activation des comptes jpierre03 et taeradan sur toutes les machines 9 years ago
Jean-Pierre PRUNARET d1113bec00 script de lancement d'un serveur web pour les fichier munin 9 years ago
Jean-Pierre PRUNARET ef2733675d radx: désactivation de nix-serve 9 years ago
Jean-Pierre PRUNARET 63902d313c radx n'est plus un serveur 9 years ago
Jean-Pierre PRUNARET 0dc2561017 désactivation addresqse ipv6 temporaires 9 years ago
Yves Dubromelle 953021f306 option pour le proxy-cache nginx du nix store + actif sur monstre 9 years ago
Yves Dubromelle c2da568c30 template d'un module nix façon r6d 9 years ago
Jean-Pierre PRUNARET bbfd76a4a1 ajout clef SSH pour root 9 years ago
Yves Dubromelle e1e30f4ce0 option pour activer dovecot 9 years ago
Jean-Pierre PRUNARET 4c3e1abfcb ajout de variables locales pour la config de fail2ban 9 years ago
Yves Dubromelle c5b9c97327 ajout de programmes (reddit, IRC) depuis phenom 9 years ago
Yves Dubromelle 6b0689d336 option pour ZNC 9 years ago
Jean-Pierre PRUNARET 7536316133 ajout clef ssh à root 9 years ago
Jean-Pierre PRUNARET c346262619 oups: un paquet ne compile pas 9 years ago
Jean-Pierre PRUNARET 312cc9ddc2 suppression de paquets qui devraient être des services 9 years ago
Jean-Pierre PRUNARET ff3e764bc2 extraction des apps pour l'édition multimédie (musique, photo, video) 9 years ago
Jean-Pierre PRUNARET 4100ff2f2f regroupement conf laptop + service laptop 9 years ago
Jean-Pierre PRUNARET b64a846407 indentation 9 years ago
Jean-Pierre PRUNARET 2df8cf6695 extraction de pulseaudio comme service 9 years ago
Jean-Pierre PRUNARET 40ea98af6b extraction de x11 comme service 9 years ago
Yves Dubromelle 944f8103e6 quelques polices sympatiques pour le bureau et le code 9 years ago
Jean-Pierre PRUNARET 453ad77953 extraction de services & configuration générique 9 years ago
Jean-Pierre PRUNARET 3c7274848d ajout de variable cartographie 9 years ago
Jean-Pierre PRUNARET 1d5692fbc5 Merge remote-tracking branch 'origin/master' 9 years ago
Jean-Pierre PRUNARET 7367bd462e le monitoring est un service publiable -> public 9 years ago
Jean-Pierre PRUNARET 3de2cceef4 le monitoring est regroupé dans un fichier 9 years ago
Jean-Pierre PRUNARET 8ebfe6c9a6 on fait apparaître que locate est un service 9 years ago
Jean-Pierre PRUNARET 33e44d23f9 harmonisation des headers pour public/ 9 years ago
Yves Dubromelle 461adfc7fe arandr, interface pour xrandr 9 years ago
Jean-Pierre PRUNARET 47de85f6bd notes sur comment les packages publics sont activés 9 years ago
Jean-Pierre PRUNARET abec02d668 expression vide 9 years ago
Jean-Pierre PRUNARET 78cccc3934 tri des entrées 9 years ago
Jean-Pierre PRUNARET 42c1327500 déplacement de desktop vers public 9 years ago
Jean-Pierre PRUNARET e685d8e518 regroupement des clients pour réseaux sociaux 9 years ago
Jean-Pierre PRUNARET 366272d1f6 ajout d'infos sur le README 9 years ago
Jean-Pierre PRUNARET 25e9a9c1ab revue du lien symbolique pour le Makefile 9 years ago
Jean-Pierre PRUNARET e685771d12 déplacement base/base vers base/public 9 years ago
Jean-Pierre PRUNARET 67907ba8c8 déplacement de .nix de base/desktop vers base/public 9 years ago
Jean-Pierre PRUNARET 36c0eba3b5 déplacement de .nix de base/base vers base/public 9 years ago
Jean-Pierre PRUNARET 3d7b3f1106 création de variable de stockage de clef ssh 9 years ago
Yves Dubromelle 71c89d7272 l'uid n'est pas forcé. nix choisi le 1er libre. 9 years ago
Yves Dubromelle e974e8949d ajout de clef ssh 9 years ago
Jean-Pierre PRUNARET a8b5ee97c6 ajout utilisateur taeradan si dubronetwork 9 years ago
Jean-Pierre PRUNARET 45a4bc9a28 indentation 9 years ago
Yves Dubromelle b998bea22e ouverture du port pour afficher les stats munin 9 years ago
Yves Dubromelle a356a2f5fa Merge remote-tracking branch 'origin/master' 9 years ago
Yves Dubromelle 0e5137a236 suppression de postfix comme paquet accessible 9 years ago
Yves Dubromelle 65064f7f8b Merge remote-tracking branch 'origin/master' 9 years ago
Yves Dubromelle 12e3f20a8e ajout option de configuration pour ipv6 (EXPERIMENTAL) 9 years ago
Jean-Pierre PRUNARET a05ef8fbdc ajout clef ssh voyage 9 years ago
Jean-Pierre PRUNARET e6fc844aaf ajout de clef ssh autorisée 9 years ago
Yves Dubromelle eaa35ac70e examples de configuration de xmonad et xmobar 9 years ago
Jean-Pierre PRUNARET 2bcc6944b2 ajout de docker pour ocean 9 years ago
Jean-Pierre PRUNARET 013b83c9a0 Merge branch 'master' of ssh://gogs.prunetwork.fr:10022/nixos-config/nixos-template-base 9 years ago
Yves Dubromelle a5842e7763 réactivation de tex full 9 years ago
Jean-Pierre PRUNARET 06ec0979dc ajout app géo 9 years ago
Jean-Pierre PRUNARET 221bcd2dee déplacement dans dossier spécifique 9 years ago
Jean-Pierre PRUNARET aec2f9bfe9 ajout d'un début de création de dérivation pour osm2pgsql 9 years ago
Jean-Pierre PRUNARET a84ca742de déplacement de config generator 9 years ago
Jean-Pierre PRUNARET 256ae50aea ajout de qgis 9 years ago
Jean-Pierre PRUNARET 35e09f59d5 purge des copies des fichiers imprimés par cups 9 years ago
Jean-Pierre PRUNARET 40f547852e commentaires + ménage dans les appli réseau 9 years ago
Jean-Pierre PRUNARET 2a4c036ee4 activation conditionnelle (workstation) pour certains ensembles d'appli 9 years ago
Jean-Pierre PRUNARET ee93d2f29d renommage fichier 9 years ago
Jean-Pierre PRUNARET 55880e13f3 adaptation pour que les expression de desktop se lancent que dans desktop 9 years ago
Jean-Pierre PRUNARET 9db6440dab activation des base et desktop 9 years ago
Jean-Pierre PRUNARET 5d86171461 ajout de fichiers migrer en douceur d'existant 9 years ago
Jean-Pierre PRUNARET 909844a961 import historique de "base" 9 years ago
Jean-Pierre PRUNARET 3b39357e2a import historique de "desktop" 9 years ago
Jean-Pierre PRUNARET 3a3e43dd26 commit initial 9 years ago
Yves Dubromelle 11c624da59 option pour afficher le détail des erreurs 9 years ago
Yves Dubromelle e88711df13 désactivation de nix-serve-client pour dubronetwork (déjà dans desktop) 9 years ago
Yves Dubromelle 8881df0d4a option de configuration pour murmur + activation pour rollo 9 years ago
System administrator 206430165a ajout de rollo.dubronetwokr.fr 9 years ago
Jean-Pierre PRUNARET 6ff5e008a7 harmonisation fichiers activation manuelle 9 years ago
Jean-Pierre PRUNARET 35c49c2fcd Merge remote-tracking branch 'origin/master' 9 years ago
Jean-Pierre PRUNARET 95c7fc7a14 ajout de paquets utilisé sur les desktop & serveur -> base 9 years ago
Yves Dubromelle 908be0c5e8 option pour que les rebuild cherchent une solution au lieu de planter 9 years ago
Yves Dubromelle 12fe6f2b94 implémentation de la typo "gti" :) 9 years ago
Jean-Pierre PRUNARET dbd58cabc0 désactivation de nix serve pour ocean
* nix serve permet de récupérer toute la config de la machine ce qui ne
  me plait pas pour un serveur.
9 years ago
Jean-Pierre PRUNARET 5fa77bda2e le résolveur DNS local est activé si la machine n'est pas un serveur 9 years ago
Jean-Pierre PRUNARET 363b2f56e4 ajout de variables pour le DNS 9 years ago
Jean-Pierre PRUNARET 5380bb76b0 ajout du monitoring local (déplacement depuis server) 9 years ago
Jean-Pierre PRUNARET ef3778dd54 ajout de variable pour rabbitmq 9 years ago
Jean-Pierre PRUNARET b50aa1ad0e ajout option pour lancer un serveur postgres 9 years ago
Jean-Pierre PRUNARET 326da0f7e8 ajout header + utilisation 9 years ago
Jean-Pierre PRUNARET c5b7c16946 xmonad est activé pour toutes les stations de travail dubronetwork 9 years ago
Jean-Pierre PRUNARET af15068c29 utilisation de blocs pour éviter de répeter le préfixe 9 years ago
Jean-Pierre PRUNARET d503b8f0f4 ajout de commentaires 9 years ago
Jean-Pierre PRUNARET 7bd6eb37e3 fix: erreur sur la logique. oubli d'un ! 9 years ago
Jean-Pierre PRUNARET 592e5664be ajout clef mbp 9 years ago
Jean-Pierre PRUNARET 20e8e8beaa renforcement serveur SSH en forcant les algos récents (selon mozilla) 9 years ago
Jean-Pierre PRUNARET 66252cb498 renforcement de la sécurité pour les clients SSH 9 years ago
Jean-Pierre PRUNARET 906ae9b7d1 ajout de python 9 years ago
Jean-Pierre PRUNARET 2195033ee5 ajout de variable pour l'impression 9 years ago
Jean-Pierre PRUNARET becd37ba28 ajustment config nix serve client 9 years ago
Jean-Pierre PRUNARET f55ae85a66 ajout de groupes 9 years ago
Jean-Pierre PRUNARET cd458f24a7 création automatique de l'utilisateur selon la machine 9 years ago
Jean-Pierre PRUNARET 86c46a97de désactivation du client nix-serve sur les serveurs prunetwork 9 years ago
Jean-Pierre PRUNARET b2619291a7 ajout readme avec 2 liens 9 years ago
Jean-Pierre PRUNARET 5350372774 ajout de profil minimaliste pour ocean 9 years ago
Yves Dubromelle e0cd512f87 petits outils pour xorg : xev et xbacklight 9 years ago
Yves Dubromelle 3d1a7d2161 timeout à 5 secondes pour la connexion à un cache 9 years ago
Yves Dubromelle 51787ab25b configuration pour xmonad 9 years ago
Yves Dubromelle 111f33ff3d profil pour xmonad, et activation pour latitude 9 years ago
Jean-Pierre PRUNARET 7e9a8131a3 déplacement de la définition de la variable awesome 9 years ago
Jean-Pierre PRUNARET 28f65522ae ajout variable pour ajouter variable d'environnement awesome 9 years ago
Yves Dubromelle b7f05e47ac prise en compte de nomade par le générateur 9 years ago
Yves Dubromelle 350b62aef2 formattage 9 years ago
Yves Dubromelle ba9cdb7518 exemple d'utilisation de la variable d'environement pour awesome 9 years ago
Yves Dubromelle bd70296e68 variable d'environement contenant le chemin vers awesome 9 years ago
Yves Dubromelle f6b939ffa9 ajout de politique d'énergie pour laptop 9 years ago
Yves Dubromelle aa48575f58 déplacement de l'activation de nixos server vers phenom 9 years ago
Jean-Pierre PRUNARET 50083e7d93 xkill 9 years ago
Jean-Pierre PRUNARET a920200904 ajout machine xray 9 years ago
Jean-Pierre PRUNARET a5f3e7f87d ajout de zeal (explorateur de doc offline) 9 years ago
Jean-Pierre PRUNARET 9cce1410a0 ajout d'un lien vers des raccourcis utiles pour git 9 years ago
Jean-Pierre PRUNARET 3180832a1f ajout de paquets utilisés sur radx 9 years ago
Jean-Pierre PRUNARET 9499034120 ajout du cache nixos normal.
* la définition d'un server de cache supprimait cache.nixos.org de la liste

  Pour le voir nixos-option nix.binaryCaches
9 years ago
Jean-Pierre PRUNARET 2c715f9e14 monstre n'utilise plus phenom comme cache 9 years ago
Jean-Pierre PRUNARET cd18fb2792 création de variable nix pour identifier les machines 9 years ago
Jean-Pierre PRUNARET 522131a517 ajout de monstre comme serveur de cache 9 years ago
Jean-Pierre PRUNARET cfc55fa479 nsp 9 years ago
Jean-Pierre PRUNARET 81ad043adb activation de fail2ban sur les serveur dubronetwork & prunetwork 9 years ago
Jean-Pierre PRUNARET a475a88ac4 ajout de fail2ban 9 years ago
Jean-Pierre PRUNARET 49dfc7eeb0 uniformisation des en-tetes 9 years ago
Jean-Pierre PRUNARET 30c9bd1b71 le client nix-serve change de serveur selon le domaine de la machine 9 years ago
Jean-Pierre PRUNARET b95c4509aa renommage fichier 9 years ago
Jean-Pierre PRUNARET e3d982a1fd réorganisation du fichier 9 years ago
Jean-Pierre PRUNARET 021f6499f9 ajout de profils + utilisation sur les machines gérées 9 years ago
Jean-Pierre PRUNARET 1416a12d22 activation de virtualbox sur radx 9 years ago
Jean-Pierre PRUNARET 0bfca5b71d ajout des activations manuelles dans desktop.
* l'activarion ou non est controlée depuis base. Mais l'inclusion est
* systématique
9 years ago
Jean-Pierre PRUNARET 62b1537353 fix: erreur de syntaxe sur les fichiers manuels 9 years ago
Jean-Pierre PRUNARET c9d1f4e67c augmentation de la durée de validité des @IP
* cela signifie que les connexions TCP longues seront coupées après plus
  longtemps
9 years ago
Jean-Pierre PRUNARET 2bb9511c1f ajout de commentaires à la liste d'applications 9 years ago
Jean-Pierre PRUNARET b4a72c5510 indentation 9 years ago
Jean-Pierre PRUNARET 253403de89 déplacement des inclusions manuelles 9 years ago
Jean-Pierre PRUNARET 2fa21f7f4d activation du client sur les machines + ajout monstre 9 years ago
Jean-Pierre PRUNARET 0bbddfbfa0 ajout du flag pour le client nix-serve 9 years ago
Jean-Pierre PRUNARET 85ee98585b Merge remote-tracking branch 'origin/master' 9 years ago
Jean-Pierre PRUNARET c8444defd3 Merge branch 'generator' 9 years ago
Jean-Pierre PRUNARET df8df234c1 utilisation des flags de configuration des fop,tionalités 9 years ago
Jean-Pierre PRUNARET 61d0c565ea Merge branch 'generator' 9 years ago
Jean-Pierre PRUNARET 0a8c503032 les services "activation manuelle" sont gérés par config-generator 9 years ago
Jean-Pierre PRUNARET 3d1feebee0 ajout de machines (latitude, neo-nomade) 9 years ago
Jean-Pierre PRUNARET d03f8cbfc2 ajustement de la configuration 9 years ago
Jean-Pierre PRUNARET b277551d6a moulinette de configuration par flags de fonctionalité 9 years ago
Jean-Pierre PRUNARET 11a50ead02 réduction taille LaTeX: Full -> base + beamer + cv 9 years ago
Jean-Pierre PRUNARET 28f91e5327 déplacement des app géographiques dans un fichier à part 9 years ago
Yves Dubromelle b816211833 ajout des ports pour iperf 9 years ago
Jean-Pierre PRUNARET 5e470017d6 suite du classement dans catégories 9 years ago
Jean-Pierre PRUNARET d5ef35906b la prise en charge de la souris en console est migrée de desktop à base 9 years ago
Jean-Pierre PRUNARET a27a1c5aed ajout thème d'icone pour spaceFM 9 years ago
Yves Dubromelle 0ad1b1038c virtualbox en activation manuelle 9 years ago
Yves Dubromelle dee3648f70 allowUnfree déplacé dans base 9 years ago
Yves Dubromelle 4a68e71a1d ajustement pour que ça compile 9 years ago
Yves Dubromelle 10f7efd252 fix typo 9 years ago
Jean-Pierre PRUNARET e8d0ccd483 ajout d'une expression laptop inspirée de la conf de latitude 9 years ago
Yves Dubromelle ae328bb742 activation de povray pour freecad + commentaires 9 years ago
Yves Dubromelle b5316cc818 logiciel de capture d'écran 9 years ago
Yves Dubromelle 024227a2f1 ajout paquet photo 9 years ago
Jean-Pierre PRUNARET 00a4fb4e16 docker est placé dans une expression manuelle avec activation du service 9 years ago
Jean-Pierre PRUNARET fff3b94beb ajout de commentaires 9 years ago
Jean-Pierre PRUNARET 3e5540a9e6 ajout du dictionnaire FR pour aspell 9 years ago
Jean-Pierre PRUNARET 47b69d9e85 les jeux ne sont installés seulement si nécessaire 9 years ago
Jean-Pierre PRUNARET 2479e9f72b ordre alphabetique 9 years ago
Jean-Pierre PRUNARET e60fd00c47 ajout de catégories & commentaires dans les fichiers nix 9 years ago
Jean-Pierre PRUNARET e40206c116 manipulation du presse papier depuis la console 9 years ago
Jean-Pierre PRUNARET 63108b2077 ajout de gource & gcc 9 years ago
Jean-Pierre PRUNARET 1991c00fe8 ajout de message d'erreur de slock 9 years ago
Jean-Pierre PRUNARET af3faefeee ajout editeur de texte graphique (pas vocation à remplacer vim) 9 years ago
Jean-Pierre PRUNARET bec1c4b84d ajout d'une liste adminsys + déplacement de paquets 9 years ago
Jean-Pierre PRUNARET 59a545f3ab déplacement paquet 9 years ago
Jean-Pierre PRUNARET 171ccd1559 découpage des applications déjà classées dans différents fichiers 9 years ago
Yves Dubromelle d1114b0548 tri, suite 9 years ago
Yves Dubromelle 745bcf876a installation de urbanterror 9 years ago
Yves Dubromelle c85389b633 installation de ghc 9 years ago
Yves Dubromelle fb068f2efa améliorations pour les "marble mouse" 9 years ago
Yves Dubromelle ba13255577 début classement des paquets 9 years ago
Yves Dubromelle d9a03c1445 activation de pulseaudio 9 years ago
Yves Dubromelle 669be98608 activation du plugin html sur claws-mail 9 years ago
Yves Dubromelle 1a4277af74 installation de freecad 9 years ago
Yves Dubromelle fbf0ddfbae paquets déjà présents dans template-base 9 years ago
Yves Dubromelle dac301ae6c activation de l'agent gnupg au lieu de l'agent ssh (incompatibles) 9 years ago
Yves Dubromelle cfcaaf1509 gnupg déjà défini dans template-base 9 years ago
Yves Dubromelle fc2c49b15d problème pour glances avec python 3.5 10 years ago
Yves Dubromelle fb1ac16d95 problème avec ansible et python 3.5 10 years ago
Yves Dubromelle 6e73a026ca première passe d'écrêmage 10 years ago
Yves Dubromelle 4e3ec6c71f ajout de tous les logiciels en vrac 10 years ago
Yves Dubromelle aa7d44af03 commit initial 10 years ago

@ -1,48 +1,118 @@
GSF=git submodule foreach
TIME=time
CHRONY_STATUS=chronyc tracking
CHRONY_STATS=chronyc sources -v
CHRONY_STATS_SOURCES=chronyc sourcestats
all: rebuild-switch
date
##--------- Commandes spécifiques pour NixOS
clean:
nix-collect-garbage -d --delete-older-than 15d
$(TIME) nix-collect-garbage -d --delete-older-than 15d
clean-aggressive:
nix-collect-garbage -d --delete-older-than 1d
$(TIME) nix-collect-garbage -d --delete-older-than 1d
clean-total:
nix-collect-garbage -d
$(TIME) nix-collect-garbage -d
clean-log:
journalctl --flush --rotate
journalctl --vacuum-size=1G
full-auto: submodules-update upgrade clean optimise
@date
list-installed-packages:
@# source : https://functor.tokyo/blog/2018-02-20-show-packages-installed-on-nixos
@# https://www.domenkozar.com/2014/01/02/getting-started-with-nix-package-manager/
@#nixos-option environment.systemPackages
nixos-option environment.systemPackages | head -2 | tail -1 | sed -e 's/ /\n/g' | cut -d- -f2- | sort | uniq| sed -e 's/"$$//'
optimise:
nix-store --optimise
$(TIME) nix store optimise
push: submodules-push
git push --all
git push --tags
rebuild-build:
nix-channel --add https://nixos.org/channels/nixos-unstable nixos
$(TIME) time nixos-rebuild build --fallback --show-trace
rebuild-switch:
nixos-rebuild switch
$(TIME) time nixos-rebuild switch --fallback --show-trace
show-blackholed:
-@ip route |grep blackhole |wc -l| awk '{print "Il y a "$$1" route(s) en blackhole sur";system("hostname ")}' |cowsay
show-diff-with-current:
-diff /run/current-system/configuration.nix /etc/nixos/configuration.nix
show-roots:
nix-store --gc --print-roots
show-time:
-@$(CHRONY_STATUS) && $(CHRONY_STATS)
-@watch -d -n 2 "$(CHRONY_STATUS) && echo "-- Statistiques générales :" && $(CHRONY_STATS) && echo "-- Statistiques sur les sources :" && $(CHRONY_STATS_SOURCES) && echo "-- Statistiques sur les clients :" && chronyc clients"
store-repair:
nix-store --verify --check-contents --repair
$(TIME) nix-store --verify --check-contents --repair
upgrade:
nix-channel --add https://nixos.org/channels/nixos-unstable nixos
$(TIME) nixos-rebuild switch --upgrade --fallback --show-trace
##--------- Commandes spécifiques pour NixOS -- Opérations non courantes
download-sources:
# https://nixos.org/wiki/Download_all_sources
nix-store -r $$(grep -l outputHash $$(nix-store -qR $$(nix-instantiate '<nixpkgs>' -A geeqie) | grep '.drv$$'))
build-iso:
nix-build '<nixpkgs/nixos>' -A config.system.build.isoImage -I nixos-config=/etc/nixos/base/iso-image/livecd-minimal.nix
##--------- Commandes spécifiques pour GIT
push: submodules-push
git push --all
git push --tags
submodules-update:
#git submodule update --remote
git submodule foreach git co master
git submodule foreach git ff
#$(GSF) git co master
$(GSF) git ff
$(GSF) git gc --auto
submodules-push:
git submodule foreach git push --all
git submodule foreach git push --tags
$(GSF) git push --all
$(GSF) git push --tags
submodules-tag:
git submodule foreach git tag -f "$$(date +%F)-$$(hostname -s)"
$(GSF) git tag -f "$$(date +%F)-$$(hostname -s)"
template:
find . -name "*.nix" -exec meld /etc/nixos/base/module-template.nix {} \;
tag: submodules-tag
git tag -f "$$(date +%F)-$$(hostname -s)"
upgrade:
nixos-rebuild switch --upgrade
##--------- Munin
munin:
pushd /var/www/munin/ ; python -m SimpleHTTPServer 8000
##--------- Gestion d'un système de fichier monté en mémoire
tmpfs-create:
mkdir -p /mnt/tmpfs
tmpfs-mount: tmpfs-create
mount -t tmpfs -o size=10G tmpfs /mnt/tmpfs
tmpfs-umount:
umount /mnt/tmpfs
tmpfs-destroy: tmpfs-umount
rmdir /mnt/tmpfs
##- Test awesome
test-awesome:
Xephyr :5 & sleep 1; DISPLAY=:5 awesome

@ -0,0 +1,240 @@
# nixos-template-base
Versions de NixOS supportées :
* NixOS unstable
Ce dépôt stocke une configuration générique des machines.
~~Une recette dite "config-generator" adapte la configuration selon le nom de la machine (FQDN).~~
~~Actuellement, les scripts contiennent un peu de configuration spécifique pour les machines des mainteneurs.~~
# Liens
* https://status.nixos.org/ pour savoir de quand datent les différentes releases de NixOS
* https://repology.org/repository/nix_unstable/problems pour lister les paquets avec problèmes
# Notes de mise-à-jour
## pour l'utilisation de l'annuaire (à partir de 2017-04-28)
* faire les mises à jour de l'OS
* commiter & pusher l'état des dépôts (au cas où). Pour les différents dépôts `git a`, `git commit` puis `make tag push`
* mettre à jour les dépôts avec les dernières versions, `make submodules-update`
* vérifier que `configuration.nix` contient `services.xserver.enable = true;` pour les machines avec interface graphique
* vérifier que `configuration.nix` contient le nom de la machine `networking.hostName = "<X>";`
* vérifier que `configuration.nix` contient le nom de domaine `networking.domain = "<X>";`
* tester la configuration : `nixos-rebuild build`
* corriger et ajouter les éléments manquant (notamment dans `private/annuaire.nix` )
* lorsque tout semble bon, vérifier :
* qu'il y a toujours des utilisateurs dans la configuration
* que le moyen d'accéder à la machine n'a pas été supprimé (surtout les machines distantes)
* lancer la commande de build de l'os : `make` :)
## pour le passage de 16.09 à unstable
* mettre à jour tous les dépôts
* changer la branche de base vers `nixos-unstable`
* changer la declaration de la machine dans `configuration.nix`
~~~
networking.hostName = "<bidule>";
~~~
devient
~~~
r6d.computers.is<bidule> = true;
~~~
* mettre à jour le channel
~~~
nix-channel --add https://nixos.org/channels/nixos-unstable nixos
nix-channel --update
~~~
* faire la mise à jour
~~~
make
~~~
## pour le passage de 16.03 à 16.09
* mettre le dépôt base sur la branche upgrade-16.09
* changer le channel nixos : ```nix-channel --add https://nixos.org/channels/nixos-16.09 nixos```
* activer x11 dans le configuration.nix
~~~
services.xserver.enable = true;
~~~
* remplacer le bootloader si gummiboot était utilisé
~~~
boot.loader.gummiboot.enable = true;
~~~
devient
~~~
boot.loader.systemd-boot.enable = true;
~~~
Pour résoudre les soucis d'upgrade, il est conseillé :
* de désactiver tous les imports (sauf `hardware.nix`)
* d'ajouter `.../localisation.nix` dans les imports sous peine d'être en clavier US
* d'ajouter ```nixpkgs.config.allowUnfree = true;```
* d'ajouter `vim` aux paquets
* de réactiver petit à petit les lignes désactivées
# Installation sur machine chez online.net
* https://nixos.org/wiki/Install_NixOS_on_Online.Net
* https://nixos.org/wiki/Install_NixOS_on_Linode
## Installation selon config online
* commander serveur
* lancer la procédure d'installation avec ubuntu LTS 64bits
* partitionner le disque avec l'interface web
* lancer l'installation de l'os.
* attendre que la procédure standard d'installation d'online ait terminée
* lorsque l'install est finie, dans l'onglet "Etat" se trouve l'option "Secours"
## Transformation en NixOS
* relancer la machine en mode "Secours"
* choisir un linux 64bits (préférence pour ubuntu LTS)
* le système de boot donne des identifiants SSH pour le connecter à la machine
* se connecter à la machine
* passer en root
~~~bash
sudo su -
~~~
* formater les partitions
~~~bash
mkfs.ext4 -L nixos /dev/sda1
swapoff -a
mkswap /dev/sda2
swapon -a
~~~
* monter les partitions dans /mnt
~~~bash
mount /dev/sda1 /mnt/
mkdir /mnt/etc/
mkdir /mnt/etc/nixos
mkdir /etc/nixos
mkdir /mnt/nix
mkdir /nix
mount --bind /mnt/nix/ /nix
mkdir /mnt/tmp
mount --bind /mnt/tmp /tmp
~~~
* installer les paquets nécessaires
~~~bash
apt-get install bzip2 git byobu htop glances
~~~
* création d'utilisateur (n'importe quil mot de passe)
~~~bash
adduser nix
groupadd -r nixbld
for n in $(seq 1 10); do useradd -c "Nix build user $n" -d /var/empty -g nixbld -G nixbld -M -N -r -s "$(which nologin)" nixbld$n; done
~~~
* mise-à-jour des certificats
~~~bash
update-ca-certificates
~~~
* installer nix
~~~bash
chown -R nix /nix /tmp
su - nix
bash <(curl https://nixos.org/nix/install)
exit
~~~
* créer un profil nix pour root & un channel
~~~bash
. ~nix/.nix-profile/etc/profile.d/nix.sh
nix-channel --remove nixpkgs
nix-channel --add https://nixos.org/channels/nixos-unstable nixos
nix-channel --update
~~~
* installer un editeur de texte
~~~bash
nix-env -i vim_configurable
~~~
* installation de nixos-install
~~~bash
cat <<EOF > /root/configuration.nix
{ fileSystems."/" = {};
boot.loader.grub.enable = false;
}
EOF
export NIX_PATH=nixpkgs=/root/.nix-defexpr/channels/nixos:nixos=/root/.nix-defexpr/channels/nixos/nixos
export NIXOS_CONFIG=/root/configuration.nix
nix-env -i -A config.system.build.nixos-install \
-A config.system.build.nixos-option \
-A config.system.build.nixos-generate-config \
-f "<nixos>"
~~~
* configuration de NixOS
si la machine existe déjà, cloner le dépôt dans /mnt/etc/nixos
pour cela, créer clef ssh et l'ajouter sur la forge
~~~bash
ssh-keygen -t ed25519
cp ~/.ssh/id_ed25519* /mnt/etc/nixos/
git clone <>
git submodule init
git submodule update
~~~
* monter /etc/nixos vers /mnt/etc/nixos pour que la config clonée fonctionne
~~~bash
mount --bind /mnt/etc/nixos/ /etc/nixos/
~~~
* mettre à jour la configuration matérielle
~~~bash
export NIX_PATH=nixpkgs=/root/.nix-defexpr/channels/nixos:nixos=/root/.nix-defexpr/channels/nixos/nixos
nixos-generate-config --root /mnt
~~~
* vérifier le /mnt/etc/nixos/configuration.nix
notamment le périphérique utilisé par grub
* installer le système sur le disque
~~~bash
unset NIXOS_CONFIG
nixos-install
~~~

@ -1,7 +0,0 @@
{ config, pkgs, ... }:
{
# Automatic update & automatic clean
system.autoUpgrade.enable = true;
nix.gc.automatic = true;
}

@ -1,11 +0,0 @@
{ config, pkgs, ... }:
{
imports = [
];
services.locate= {
enable = true;
interval = "hourly";
};
}

@ -1,7 +0,0 @@
{ config, pkgs, ... }:
{
# Cache http pour le store
nix.requireSignedBinaryCaches = false;
nix.binaryCaches = [ "http://192.168.10.169:5000" ];
}

@ -1,7 +0,0 @@
{ config, pkgs, ... }:
{
# Cache http pour le store
services.nix-serve.enable = true;
networking.firewall.allowedTCPPorts = [5000];
}

@ -1,11 +0,0 @@
{ config, pkgs, ... }:
{
# https://en.wikipedia.org/wiki/Swappiness
boot.kernel.sysctl = {
# le swap est activé (!= 0)
# le swap est utilisé lorsque (100 - x) % de la mémoire est déja allouée
"vm.swappiness" = 10;
};
}

@ -0,0 +1,21 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.graphical {
# Paquets
environment.systemPackages = with pkgs; [
# Gestion de FS
gparted # Gestion graphique de partitions
unetbootin # création de clefs USB bootables
# visualisation de log
#logstalgia
];
}

@ -0,0 +1,56 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf currentMachine.profiles.isDesktopEnvironment {
# Paquets
environment.systemPackages = with pkgs; [
# Environement de bureau
arandr # interface graphique pour xrandr
wmname # pour définir le nom du gestionnaire de fenêtre (utile pour java)
#kde4.ksnapshot # capture d'écran
xclip # manipulation du clipboard X depuis la console
xorg.xbacklight # pour gérer la luminosité de l'écran
xorg.xev # pour repérer les codes + noms standard des actions clavier/souris
xorg.xkill # pour 'tuer une application'
## Gestionnaire de fenêtre & Thème
gnome3.adwaita-icon-theme # thème d'icone - semble fonctionner avec spaceFM
## Manipulation de fichier
#kde5.dolphin # gestionnaire de fichiers graphique
#kde5.dolphin-plugins # gestionnaire de fichiers graphique
pcmanfm # gestionnaire de fichiers graphique
#vifm # gestionnaire de fichiers basé sur VIM (console)
## Terminal
kitty # terminal avec rendu par GPU
sakura # terminal
];
# Polices supplémentaires
fonts.fonts = with pkgs; [
fira # police créée pour Firefox
fira-code # idem fira-mono + ligatures pour la programmation
fira-mono # dérivée de fira en monospace
font-awesome_5 # Jeux de police, utilisé avec Latex
hack-font # police monospace créée explicitement pour coder
hasklig # police dérivée de source-code-pro mais avec des ligatures
jetbrains-mono # police spécial développeurs par Jetbrains
];
fonts.fontconfig.defaultFonts = {
monospace = [ "JetBrains Mono" ];
};
programs = {
slock.enable = true;
spacefm.enable = true;
udevil.enable = true;
};
}

@ -0,0 +1,37 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.officeSuite && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
# Bureautique
gnumeric # tableur
#kde4.ksnapshot# réalisation de capture d'écran
## Cartes mentales
freemind
## Diagrammes & Schémas
dia # dessin & schéma technique
## Editeur de texte
#lyx # surcouche WISIWIM à LaTeX
#focuswriter # outil pour l'écriture
#textadept # un éditeur de texte facile pour copier-coller graphique
#zim # outil de prise de notes, wiki de bureau
## Visionneuse
#kde5.okular # pdf
#mcomix # livres (cbr, liste d'images), gestion d'une bibliothèque # Supprimé dans NixOS 20.03
pdfpc # pdf
qpdfview # pdf
gqview # visionneuse image & gestion basique de collection
];
}

@ -0,0 +1,24 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.conception-assistee && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
# CAO
## Modélisation 3D
freecad # modélisation de pièces en 3D
povray # Rendu tracé de rayon, utilisé dans freecad
## Électricité & Électronique
fritzing # schéma de câblages "jolis"
kicad # ensemble d'outils de conception électronique
qucs # simulateur de circuits électroniques
];
}

@ -0,0 +1,19 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.cartographie && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
# Gestion de données géographiques
josm # outil de contribution à OpenStreetMap
#qgis # client lourd de manipulation de données géographiques
viking # analyse de topo, gestion de données GPS
];
}

@ -0,0 +1,33 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.internetSuite && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
# Clients Internet
## Navigateur
chromium
firefox
## Mail & Discussion (texte, audio)
claws-mail
hexchat
quasselClient
mumble
pidgin
thunderbird
# Transfert de fichier
filezilla
transmission-gtk
transmission-remote-gtk
];
}

@ -0,0 +1,15 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (true && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
];
}

@ -0,0 +1,40 @@
{ config, lib, pkgs, ... }:
let
#inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
{
imports = [
# installées systématiquement
./default-applications.nix
# commandées par config-generator
## option de configuration spécifique
./cao.nix # de conception assisté par ordinateur & modélisation
./cartographie.nix # manipuler les données géographiques & cartes
./developpement.nix # développer des programmes/scripts
./developpement-elm.nix # développer en elm
./developpement-haskell.nix # développer en haskell
./developpement-java.nix # développer en java
./developpement-jetbrains.nix # outils jetbrains
./developpement-rust.nix # développer en rust
./edition-musique.nix # modifier les fichiers musicaux
./edition-photo.nix # modifier les photos & assimilé
./edition-video.nix # modifier les vidéos
./jeux.nix # jouer, tout simplement ;)
./radio.nix # outils pour faire de la radio SDR
## if isDesktop
./adminsys.nix # pour gérer le système dans son ensemble et les services
./bureau.nix # éléments pour avoir un environement graphique minimal utilisable
./bureautique.nix # dédiée à la bureautique (traitement de texte, dessin, ...)
./client-internet.nix # pour accéder & utiliser des ressources par le réseau
./multimedia.nix # pour gérer le son, l'image et la vidéo
./network.nix # de gestion, de diagnostique & surveillance réseau
./securite.nix # relatives à la sécurité (chiffrement, gpg, mots de passe, ...)
];
}

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.developpement-elm && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
];
# Services
# Réseau
networking.firewall = {
allowedTCPPorts = [
];
allowedUDPPorts = [
];
};
}

@ -0,0 +1,18 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.developpement-haskell && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
] ++ (with pkgs.haskellPackages; [
# Haskell lib
#threadscope # visualisation des threads (<bidule>.eventlog)
]);
}

@ -0,0 +1,17 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.developpement-java && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
# IDE
jetbrains.idea-community # IntelliJ IDEA
];
}

@ -0,0 +1,19 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.jetbrains-licensed && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
jetbrains.idea-ultimate
jetbrains.clion
jetbrains.datagrip
jetbrains.pycharm-professional
];
}

@ -0,0 +1,15 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.developpement-rust && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
];
}

@ -0,0 +1,33 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.developpement && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
# Base de données
#pgadmin # interface d'administration de postgres ***plus à jour, version openssl dépréciée***
#sqlitebrowser # interface d'administration de sqlite
# Documentation
#zeal # consulter la documentation hors ligne
# Gestion des sources
#gitg # interface pour utiliser git (historique, commit)
gitstats # génère un site web statique avec des statistiques
git-cola # interface pour utiliser git (historique, commit)
## Visualisation & outils de diff
#gource # visualisation en mouvement de l'historique git
meld # outil de comparaison graphique
# Editeur texte
atom
];
}

@ -0,0 +1,19 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.edition-musique && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
#
audacity # montage audio
easytag # gestion des métadonnées des fichiers musicaux
picard # gestion des métadonnées des fichiers musicaux
];
}

@ -0,0 +1,22 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.edition-photo && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
# Retouche, modification & dessin vectoriel
gimp # logiciel d'édition/montage/retouche photo
inkscape # édition d'image vectorielle (svg & autre)
#rawtherapee # développemen de photos en RAW
# TEST d'outil de gestion de catalogue de photos
#kde4.digikam # gestionnaire de bibliothèque de photo
];
}

@ -0,0 +1,18 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.edition-video && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
# Vidéo
#cinelerra # editeur video
pitivi # montage vidéo
];
}

@ -0,0 +1,17 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.jeux && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
# Jeux
urbanterror
];
}

@ -0,0 +1,18 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.multimediaSuite && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
## Video
smplayer # lecteur vidéo
vlc # lecteur vidéo
];
}

@ -0,0 +1,21 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (true && flags.graphical) {
# Diagnostic réseau Wireshark (droits fins par le groupe wireshark)
programs.wireshark = {
enable = true;
package = pkgs.wireshark;
};
# Paquets
environment.systemPackages = with pkgs; [
];
}

@ -0,0 +1,27 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.radio && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
## GUI
chirp # Configuration de radios portatives
gqrx # GUI
cubicsdr # Another GUI
gnuradio-with-packages # Software Defined Radio (SDR) software
## A Trier
#inspectrum # Tool for analysing captured signals from sdr receivers
];
nixpkgs.config.permittedInsecurePackages = [
"python2.7-Pillow-6.2.2"
];
}

@ -0,0 +1,17 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.securitySuite && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
gnome3.seahorse # gestionnaire graphique de clef GPG
#yubikey-personalization-gui # utilisation de la clef Yubikey
];
}

@ -0,0 +1,48 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf true {
nixpkgs.config.packageOverrides = pkgs: {
claws-mail = pkgs.claws-mail.override {
enablePgp = true;
enablePluginArchive = true;
#enablePluginFancy = false; # nécessite wekitgtk qui est troué # Option supprimée dans NixOS 20.03
enablePluginPdf = true;
enablePluginRavatar = true;
enablePluginSmime = true;
enablePluginVcalendar = true;
enableSpellcheck = true;
};
ffmpeg-full = pkgs.ffmpeg-full.override {
nonfreeLicensing = true;
nvenc = true;
};
# bug connu : https://nixos.org/nix-dev/2014-December/015225.html
# find /nix/store/ -maxdepth 1 -type d -name "*gnuradio-*"
# Commande pour générer le path : find /nix/store/ -maxdepth 1 -type d -name "*gnuradio-*"|paste -d: -s -
gnuradio-with-packages = pkgs.gnuradio-with-packages.override {
extraPackages = with pkgs; [
gnuradio-ais
gnuradio-gsm
gnuradio-nacl
gnuradio-osmosdr # support des dongle Realtek
gnuradio-rds # support du décodage de RDS sur les radio FM
];
};
mumble = pkgs.mumble.override { pulseSupport = true; };
};
#nixpkgs.config.permittedInsecurePackages = [
# "webkitgtk-2.4.11" # pour que le plugin fancy de claws-mail fonctionne
#];
}

@ -0,0 +1,58 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf true {
# Paquets
environment.systemPackages = with pkgs; [
# Adminsys
bind # utilisé pour les utilitaires comme dig
cowsay # pour ansible & 4lulz
dhcp # client dhcp
iotop
lm_sensors
lshw
lsof
ntp
powerline-fonts
powertop
#ansible
glances
pv # afficher le débit d'un flux dd if=/dev/zero | pv | dd of=/dev/null
sysstat # pour la commande "iostat -x -1" de monitoring d'activité disque
usbutils
# Backup
duplicity # création de sauvegarde chiffrées (GPG)
par2cmdline # outil de récupération de fichiers corrompus - .par2
# Compression
lz4
lzop
# Système de fichier
## Montage de filesystem
curlftpfs # ftp
exfat # Pour monter les FAT avec Fuse
hubicfuse # montage hubic
ntfs3g # ntfs
samba # partages windows
squashfsTools # squashfs
sshfs-fuse # ssh
## Gestion de FS
nfs-utils
## Exploitation FS
inotify-tools # être notifié lorsque le contenu d'un répertoire change
detox # The detox utility renames files to make them easier to work with.
duff # outil de recherche de fichiers en doublons
#rdfind # recherche de fichiers doublons pour remplacement par hard/soft link
];
}

@ -0,0 +1,17 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf true {
# Paquets
environment.systemPackages = with pkgs; [
## Manipulation de fichier
vifm # gestionnaire de fichiers basé sur VIM (console)
];
}

@ -0,0 +1,33 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.officeSuite {
# Paquets
environment.systemPackages = with pkgs; [
# Bureautique
aspell aspellDicts.fr # correction d'ortographe
python39Packages.grammalecte # correction gramatical
# Gestion de tâche
taskwarrior # gestionnaire de tâches en console
## Convertisseurs (texte -> <autre format>)
gnuplot # générateur de graphes à partir de données numériques
graphviz # dot, neato : traçage de graphes (carré, rond)
#jekyll # générateur statique de site web
#odpdown # conversion md -> presentation ODP : https://github.com/thorstenb/odpdown
pandoc
#haskellPackages.pandoc-citeproc # ***BROKEN***
texlive.combined.scheme-full # distribution LaTeX
#texLive # distribution LaTeX de base
#texLiveBeamer # paquets et extensions pour Beamer
#texLiveModerncv # paquets pour la classe Modern CV
];
}

@ -0,0 +1,15 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.conception-assistee {
# Paquets
environment.systemPackages = with pkgs; [
];
}

@ -0,0 +1,18 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.cartographie {
# Paquets
environment.systemPackages = with pkgs; [
# Gestion de données géographiques
expat
gpsbabel # pour convertir les données des GPS
];
}

@ -0,0 +1,30 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.internetSuite {
# Paquets
environment.systemPackages = with pkgs; [
# Clients Internet
## Réseaux sociaux
#turses # client twitter en ncurse
#python39Packages.rainbowstream # client twitter en console
#rtv # client reddit en console
## Mail & Discussion (texte, audio)
mutt
## Sauvegarde nuagique (cloud storage)
#rclone
## P2P
rtorrent # outil de téléchargement de torrent & magnet
];
}

@ -0,0 +1,73 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf true {
# Paquets
environment.systemPackages = with pkgs; [
byobu # permet de se déconnecter d'un terminal sans l'arréter
tig gti lazygit # outil de gestion de version
gnumake # pour décrire les recettes de compilation
gnupg # GPG
htop # monitoring
lsb-release # pour les scripts qui utilisent cet outil (dont byobu)
#libressl # librairie pour faire du TLS et les algorithmes de crypto par OpenBSD
ncdu # outil pour voir l'espace utilisé
p7zip # compression de fichier
parted # partitionnement de disque
pciutils
pinentry # pour taper les mots de passe gpg
psmisc # fournis les utilitaires comme killall, fuser, pstree
#python # python -- python -m SimpleHTTPServer 8000
shared-mime-info # MIME info
tmux # nécessaire pour byobu
tree # affiche une arborescence de fichiers et dossiers
usbutils
wget # client HTTP console
which # pour connaitre le chemin d'un exécutable
];
programs = {
fish.enable = true;
gnupg.agent.enable = true;
git = {
enable = true;
package = pkgs.gitFull;
config = {
# http://www.git-attitude.fr/2014/09/15/30-options-git-qui-gagnent-a-etre-connues/
color = {
diff = "auto";
branch = "auto";
interactive = "auto";
pager = true;
showbranch = "auto";
status = "auto";
};
alias = {
a = "add -p";
br = "for-each-ref --sort=committerdate refs/heads/ --format='%(committerdate:short)\t%(authorname)\t%(refname:short)'";
ci = "commit";
co = "checkout";
ff = "pull --ff-only";
oops = "commit --amend --no-edit";
# Show files ignored by git
ignored = "ls-files -o -i --exclude-standard";
ls = "ls-files";
st = "status";
# Logs
lol = "log --graph --decorate --pretty=oneline --abbrev-commit";
lola = "log --graph --decorate --pretty=oneline --abbrev-commit --all";
not-pushed = "log --branches --not --remotes";
};
push.default = "simple";
code.editor = "${pkgs.vim_configurable}/bin/vim";
};
lfs.enable = true;
};
};
}

@ -0,0 +1,41 @@
{ config, lib, pkgs, ... }:
let
#inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
{
imports = [
# installées systématiquement
./default-applications.nix
# commandées par config-generator
## option de configuration spécifique
./cao.nix # de conception assisté par ordinateur & modélisation
./cartographie.nix # manipuler les données géographiques & cartes
./developpement.nix # développer des programmes/scripts
./developpement-elm.nix # développer en elm
./developpement-haskell.nix # développer en haskell
./developpement-java.nix # développer en java
./developpement-jetbrains.nix # outils jetbrains
./developpement-rust.nix # développer en rust
./edition-musique.nix # modifier les fichiers musicaux
./edition-photo.nix # modifier les photos & assimilé
./edition-video.nix # modifier les vidéos
./jeux.nix # jouer, tout simplement ;)
./radio.nix # outils pour faire de la radio SDR
./vim.nix # vim avec plugins
## if isDesktop
./adminsys.nix # pour gérer le système dans son ensemble et les services
./bureau.nix # éléments pour avoir un environement graphique minimal utilisable
./bureautique.nix # dédiée à la bureautique (traitement de texte, dessin, ...)
./client-internet.nix # pour accéder & utiliser des ressources par le réseau
./multimedia.nix # pour gérer le son, l'image et la vidéo
./network.nix # de gestion, de diagnostique & surveillance réseau
./securite.nix # relatives à la sécurité (chiffrement, gpg, mots de passe, ...)
];
}

@ -0,0 +1,26 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.developpement-elm {
# Paquets
environment.systemPackages = with pkgs; [
elmPackages.elm
];
# Services
# Réseau
networking.firewall = {
allowedTCPPorts = [
];
allowedUDPPorts = [
];
};
}

@ -0,0 +1,36 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.developpement-haskell {
# Paquets
environment.systemPackages = with pkgs; [
# Haskell platform
cabal-install # fournis cabal
cabal2nix # convertir les .cabal en .nix
ghc # pour les appels depuis les scripts
stack # pour les paquets en LTS de stackage
] ++ (with pkgs.haskellPackages; [
# Haskell lib
autoproc # ? procmail
#brittany # formatteur de code
#darcs # gestionnaire de version éponyme
#ghc-mod # outil d'analyse de code haskell utilisé par IDE
#hindent # indentation code ***BROKEN***
hlint # qualite de code, analyse statique de code + astuces & bonnes pratiques
#postgrest # mapper HTTP <-> PostgreSQL
servant # génération d'API REST
stylish-haskell # qualité de code
turtle # genre shell-scripting
# Application perso
#hahp
#pandoc-filter-graphviz # filtre pour utiliser graphviz à partir de pandoc ***BROKEN***
]);
}

@ -0,0 +1,24 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.developpement-java {
# Installe le paquet + JAVA_HOME
programs.java = {
enable = true;
};
# Paquets
environment.systemPackages = with pkgs; [
# Systèmes de build autour de java
ant
maven
gradle
];
}

@ -0,0 +1,15 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.jetbrains-licensed {
# Paquets
environment.systemPackages = with pkgs; [
];
}

@ -0,0 +1,20 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.developpement-rust {
# Paquets
environment.systemPackages = with pkgs; [
# Rust
cargo # récupération des dépendances + compilation projet rust
rustc # pour les appels depuis les scripts
rustup # outil de configuration de toolchain rust
crate2nix # génère les fichiers de build Nix dans un projet Rust
];
}

@ -0,0 +1,40 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.developpement {
# Paquets
environment.systemPackages = with pkgs; [
# Build / outil de construction
autobuild
autoconf
automake
# Base de données
pg_top # monitoring de PostgreSQL
sqlite # le moteur de base de données
# C / C++
gcc # pour les appels depuis les scripts
# Gestion des sources
cloc # outil pour compter les lignes de code source
mercurial
subversion
# spécification
plantuml # diagrammes UML et plus si affinité
# Mono
#mono46 # interpréteur .NET
## Visualisation & outils de diff
#vbindiff # diff de fichier hexadecimaux avec vim
];
}

@ -0,0 +1,15 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.edition-musique {
# Paquets
environment.systemPackages = with pkgs; [
];
}

@ -0,0 +1,21 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.edition-photo {
# Paquets
environment.systemPackages = with pkgs; [
# Méta données
exif
exiftags
# Retouche, modification & dessin vectoriel
imagemagick # modification image en CLI
];
}

@ -0,0 +1,16 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.edition-video {
# Paquets
environment.systemPackages = with pkgs; [
ffmpeg-full # assemblage de flux audio & video en ligne de commande
];
}

@ -0,0 +1,15 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.jeux {
# Paquets
environment.systemPackages = with pkgs; [
];
}

@ -0,0 +1,20 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.multimediaSuite {
# Paquets
environment.systemPackages = with pkgs; [
## Audio
beep
cmus # lecteur audio console
espeak # synthèse vocale
vorbis-tools # codec
];
}

@ -0,0 +1,39 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf true {
# Paquets
environment.systemPackages = with pkgs; [
# Outils réseau
iperf # outil de mesure de la qualité du réseau
iptraf-ng # outil de mesure de la qualité du réseau
nload # affichage de statisques d'utilisation instantannées du réseau
inetutils
## Diagnostic
arp-scan
#mtr -> installé plus bas
nmap # outil de scan de port réseau
whois
];
# https://github.com/NixOS/nixpkgs/issues/30335
# Some programs need SUID wrappers, can be configured further or are started in user sessions.
programs.mtr.enable = true;
networking.firewall = {
allowedTCPPorts = [
5201 # iperf
];
allowedUDPPorts = [
5201 # iperf
];
};
}

@ -0,0 +1,29 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.radio {
# pour que ça marche
# sudo rmmod dvb_usb_rtl28xxu
# lecture radio FM
# rtl_fm -f 96.9e6 -M wbfm -s 440000 -r 44100 - | aplay -r 44100 -f S16_LE
# rtl_fm -f 96.95e6 -M wbfm -s 441000 -r 44100 - | aplay -r 44100 -f S16_LE -t raw -c 1
# rtl_fm -f 96.95e6 -M wbfm -s 441000 -r 44100 -E deemp - |pv| aplay -r 44100 -f S16_LE -t raw -c 1
# Paquets
environment.systemPackages = with pkgs; [
gnss-sdr # Global Navigation Satellite Systems software-defined receiver
liquid-dsp # Digital signal processing library for software-defined radios
rtl-sdr # Turns your Realtek RTL2832 based DVB dongle into a SDR receiver
dump1090 # Listen to planes ADS-B and view them on a map
];
hardware.rtl-sdr.enable = true;
}

@ -0,0 +1,17 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.securitySuite {
# Paquets
environment.systemPackages = with pkgs; [
pass # gestionnaire de mots de passe
pwgen # générateur de mots de passe
];
}

@ -0,0 +1,28 @@
{pkgs, ... }:
let
myVim = pkgs.vim_configurable.customize {
# Specifies the vim binary name.
# E.g. set this to "my-vim" and you need to type "my-vim" to open this vim
# This allows to have multiple vim packages installed (e.g. with a different set of plugins)
name = "vim";
vimrcConfig.customRC = builtins.readFile ./vimrc;
vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
start = [
wombat256-vim
];
opt = [
elm-vim
vim-fish
vim-nix
vimwiki
];
};
};
in {
programs.vim = {
defaultEditor = true;
package = myVim;
};
}

@ -2,6 +2,9 @@
" This must be first, because it changes other options as a side effect.
set nocompatible
filetype plugin on
syntax on
" allow backspacing over everything in insert mode
set backspace=indent,eol,start
@ -32,3 +35,10 @@ if &t_Co > 8
let &colorcolumn="80,".join(range(120,999),",")
highlight ColorColumn ctermbg=235 guibg=#2c2d27
endif
" vim hardcodes background color erase even if the terminfo file does
" not contain bce (not to mention that libvte based terminals
" incorrectly contain bce in their terminfo files). This causes
" incorrect background rendering when using a color theme with a
" background color.
let &t_ut=''

@ -1,13 +1,18 @@
{ config, pkgs, ... }:
{ config, lib, pkgs, ... }:
{
imports = [
#./activation-manuelle/auto-upgrade.nix
#./activation-manuelle/locate.nix
#./activation-manuelle/swap.nix
./environment.nix
./localisation.nix
./networking.nix
./services.nix
# moulinette de configuration
/*./config-generator.nix*/
./options.nix
# Redéfinition d'applications et de modules
./applications/overrides.nix
# subfolders
./applications/graphical/default.nix
./applications/terminal/default.nix
./configuration/default.nix
./services/default.nix
];
}

@ -0,0 +1,34 @@
#!/usr/bin/env bash
SESSION_NAME="Adminsys"
PROJECT_DIR="/etc/nixos"
PROJECT_MODULES=$(cd $PROJECT_DIR && git submodule --quiet foreach 'echo $path')
HEAD_ADDITIONNAL_TABS="git config"
TAIL_ADDITIONNAL_TABS="glances htop"
# création de la session
byobu new-session -d -s ${SESSION_NAME} -n 'run' -c ${PROJECT_DIR};
# définition des onglets
## onglets courants au début. Positionnés dans dossier projet
for i in ${HEAD_ADDITIONNAL_TABS}
do
byobu new-window -n ${i} -c ${PROJECT_DIR};
done
## onglets spécifiques au projet. Positionnés dans les dossiers enfants
for i in ${PROJECT_MODULES}
do
byobu new-window -n ${i} -c ${PROJECT_DIR}/${i};
done
## onglets courants à la fin. Positionnés dans dossier projet. Lance la commande du même nom que l'onglet
for i in ${TAIL_ADDITIONNAL_TABS}
do
byobu new-window -n ${i} -c ${PROJECT_DIR} ${i};
done
# affiche la session
byobu -2 attach-session -t ${SESSION_NAME};

@ -0,0 +1,55 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkEnableOption mkIf mkMerge mkOption singleton types;
cfg = config.r6d.config-generator;
pfl = config.r6d.profiles;
comp = config.r6d.computers;
host = config.networking.fqdn;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
{
# TODO camel case partout
# TODO everything in english
# TODO sortir ce qui est privé
###### interface
options = {
#* Utilisé pour avoir des raccourcis de machine
r6d.computers = {
isNomade = mkEnableOption "Identification du nom de machine.";
};
};
###### implementation
# https://nixos.org/releases/nixos/14.12-small/nixos-14.12.374.61adf9e/manual/sec-writing-modules.html
# https://nixos.org/wiki/NixOS:extend_NixOS
config = mkMerge
[
## Définition des profils génériques
# /!\ PAS un serveur
(mkIf (!pfl.isServer || comp.isMonstre) {
r6d.config-generator = {
dns_resolveur = true;
};
})
## Affectation des profils aux machines
# Dubro Vivo - St Malo
#tincAddress = "192.168.12.8/24";
(mkIf comp.isNomade{
networking.hostName = "nomade"; # Define your hostname.
networking.domain = "dubronetwork.fr";
r6d.profiles.isDubronetwork = true;
r6d.config-generator = {
laptop = true;
};
})
];
}

@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
# TODO: rc.lua par défaut (système)
mkIf flags.awesome {
environment.variables = {
# Export the current path for the awesome derivation, useful for users rc.lua
# Example usage in rc.lua :
#
# config = {}
# config.dir = os.getenv("AWESOME_CONFIG_DIR")
# beautiful.init(config.dir .. "/share/awesome//themes/zenburn/theme.lua")
#
AWESOME_CONFIG_DIR = "${pkgs.awesome}";
};
environment.etc."xdg/awesome/rc.lua".text = builtins.readFile ./../public/config-awesome-4-rc.lua;
}

@ -1,4 +1,7 @@
# Définition des couleurs du prompt
# Git information in prompt
. /run/current-system/sw/share/bash-completion/completions/git-prompt.sh
# Prompt colors
if [[ $(tput colors) -ge 256 ]] 2>/dev/null; then
PS1_USER='\[$(tput setaf 27)\]'
PS1_HOST='\[$(tput setaf 37)\]'
@ -18,10 +21,12 @@ fi
BOLD='\[$(tput bold)\]'
RESET='\[$(tput sgr0)\]'
# Définition du prompt
# Username or red color if root
if [ $UID = 0 ]; then
PS1_ID=$PS1_ROOT
else
PS1_ID=$PS1_USER'\u'$PS1_MISC@$PS1_HOST
fi
# Prompt definition
PS1=$RESET$BOLD$PS1_ID'\h '$PS1_PATH'\w'$PS1_GIT'$(__git_ps1)'"\n"$PS1_MISC'\$ '$RESET

@ -0,0 +1,28 @@
{ config, lib, pkgs, ... }:
let
#inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
{
imports = [
# installées systématiquement
./environment.nix
./localisation.nix
./network.nix
#./network-ipv6.nix
./u2f.nix
./udev.nix
# commandées par config-generator
## option de configuration spécifique
./awesome.nix # pour le gestionaire de fenêtres awesome
./laptop.nix # appli & configuration adaptée pour un PC portable
./nix-options.nix # options de Nix (update, gc, optimisation)
./swap.nix # définition de l'utilisation du swap
];
}

@ -0,0 +1,64 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
{
# The NixOS release to be compatible with for stateful data such as databases.
system.stateVersion = "19.09";
# copies the NixOS configuration file (usually /etc/nixos/configuration.nix) and links it from the resulting system (getting to /run/current-system/configuration.nix)
system.copySystemConfiguration = true;
# On autorise les paquets non-libres
nixpkgs.config.allowUnfree = true;
# NixOS Hardening
#security.grsecurity.enable = true;
# Ménage de /tmp au boot
boot.cleanTmpDir = true;
# Activation des pages de manuel
documentation.man.enable = true;
# Paquets
environment = {
shellAliases = {
byobu = "byobu-tmux";
gpg = "gpg2";
jacques-a-dit = "sudo";
tree = "tree -C";
tree1 = "tree -d -L 1";
tree2 = "tree -d -L 2";
tree3 = "tree -d -L 3";
# https://gist.github.com/amitchhajer/4461043 : Count number of code lines in git repository per user
#git-loc = "git ls-files | while read f; do git blame --line-porcelain "${f}" | grep '^author '; done | sort -f | uniq -ic | sort -n";
grep = "grep --color=auto";
vi = "vim";
byobu-adminsys = "/etc/nixos/base/byobu-adminsys";
};
};
programs.bash = {
enableCompletion = true;
promptInit = builtins.readFile ./bash-prompt.sh;
interactiveShellInit = builtins.readFile ./bash-interactive-init.sh;
};
# https://wiki.mozilla.org/Security/Guidelines/OpenSSH#Modern
programs.ssh.extraConfig = ''
# Ensure KnownHosts are unreadable if leaked - it is otherwise easier to know which hosts your keys have access to.
HashKnownHosts yes
# Host keys the client accepts - order here is honored by OpenSSH
HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp384,ecdsa-sha2-nistp256
KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
'';
}

@ -0,0 +1,40 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.laptop {
# Gestion spécifique pour PC portable
## Gestion de l'énergie
services.tlp.enable = true;
## Activation d'un gestionnaire de réseau
networking.networkmanager.enable = true;
hardware.bluetooth = {
enable = true;
powerOnBoot = false;
};
# Gestion graphique du réseau dans la barre système
programs.nm-applet.enable = true;
# Paquets
environment.systemPackages = with pkgs; [
wirelesstools # fournis iwconfig
blueman # outils bluetooth (manager, system tray)
cbatticon # status de la batterie dans le system tray
];
# Services
services.blueman.enable = true;
services.xserver.libinput = {
enable = true;
};
}

@ -0,0 +1,23 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf true {
# Select internationalisation properties.
console = {
font = "Lat2-Terminus16";
keyMap = "fr";
};
i18n = {
defaultLocale = "fr_FR.UTF-8";
};
# Set your time zone.
time.timeZone = "Europe/Paris";
}

@ -1,29 +1,30 @@
{ config, pkgs, ... }:
{ config, lib, pkgs, ... }:
{
# Définition des domaines utilisés lorsque un identifiant non-FQDN est donné (ping, nslookup)
networking = {
search = [
"dubronetwork.fr"
"prunetwork.fr"
"teleragno.fr"
"teleragno.net"
];
dnsExtensionMechanism = true;
};
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf true {
# Utilisation d'adresse IPv6 temporaire
## https://blog.linitx.com/control-privacy-addressing-ipv6-linux/
## http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/x1092.html
boot.kernel.sysctl = {
"net.ipv6.conf.all.temp_prefered_lft" = 1800; # 30 min
"net.ipv6.conf.all.temp_valid_lft" = 3600; # 1 heure
"net.ipv6.conf.all.temp_valid_lft" = 43200; # 12 heures
"net.ipv6.conf.all.use_tempaddr" = 2; # activé
"net.ipv6.conf.default.temp_prefered_lft" = 3600; # 1 heure
"net.ipv6.conf.default.temp_valid_lft" = 3600; # 1 heure
"net.ipv6.conf.default.use_tempaddr" = 2; # activé
};
# Activation du routage
"net.ipv6.conf.all.forwarding" = true;
"net.ipv6.conf.default.forwarding" = true;
};
}

@ -0,0 +1,24 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf true {
# fix: Hostname -s renvoie "Unknown host" alors que hostname renvoie la bonne valeur
# Il s'avère que hostname vérifie la validité du FQDN et du reverse.
# Fixer ces paramètres dans les hosts permet de faire tomber en marche
networking.extraHosts = ''
127.0.0.1 ${config.networking.fqdn} ${config.networking.hostName}
'';
# Activation du routage
boot.kernel.sysctl = {
"net.ipv4.conf.all.forwarding" = true;
"net.ipv4.conf.default.forwarding" = true;
};
}

@ -0,0 +1,30 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
{
# Automatic update & automatic clean
system.autoUpgrade.enable = flags.auto-upgrade;
nix = {
extraOptions = ''
experimental-features = nix-command flakes
'';
settings = {
auto-optimise-store = true;
# Nombre de process d'installation en parrallèle effectués par Nix
cores = 0;
};
gc = {
automatic = true;
dates = "daily";
options = "--delete-older-than 7d";
};
};
}

@ -0,0 +1,20 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.swap {
# Gestion du swap
# https://en.wikipedia.org/wiki/Swappiness
boot.kernel.sysctl = {
# le swap est activé (!= 0)
# le swap est utilisé lorsque (100 - x) % de la mémoire est déja allouée
"vm.swappiness" = 10;
};
}

@ -0,0 +1,41 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf true {
# Ajout du support des yobikey & hyperfido
## source des valeurs udev : https://github.com/Yubico/libu2f-host/blob/master/70-u2f.rules
## source car udev sur nixos semble ancien : https://raw.githubusercontent.com/Yubico/libu2f-host/master/70-old-u2f.rules
services.udev.extraRules = ''
# this udev file should be used with udev older than 188
ACTION!="add|change", GOTO="u2f_end"
# Yubico YubiKey
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1050", ATTRS{idProduct}=="0113|0114|0115|0116|0120|0402|0403|0406|0407|0410", GROUP="plugdev", MODE="0660"
# Happlink (formerly Plug-Up) Security KEY
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="f1d0", GROUP="plugdev", MODE="0660"
# Neowave Keydo and Keydo AES
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1e0d", ATTRS{idProduct}=="f1d0|f1ae", GROUP="plugdev", MODE="0660"
# HyperSecu HyperFIDO
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="096e", ATTRS{idProduct}=="0880", GROUP="plugdev", MODE="0660"
LABEL="u2f_end"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", GROUP="audio", MODE="0666", SYMLINK+="rtl_sdr"
'';
security.pam.u2f.enable = true;
environment.systemPackages = with pkgs; [
libu2f-host
];
}

@ -0,0 +1,18 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf false {
# Définition du IO Scheduler pour les SSD
services.udev.extraRules = ''
# set deadline scheduler for non-rotating disks
# according to https://wiki.debian.org/SSDOptimization, deadline is preferred over noop
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"
'';
}

@ -1,56 +0,0 @@
{ config, pkgs, ... }:
{
# Nombre de process d'installation en parrallèle effectués par Nix
nix.buildCores = 0;
# The NixOS release to be compatible with for stateful data such as databases.
system.stateVersion = "16.03";
# On autorise les paquets non-libres
nixpkgs.config.allowUnfree = true;
# List packages installed in system profile. To search by name, run:
# $ nix-env -qaP | grep wget
environment = {
systemPackages = with pkgs; [
bind # utilisé pour les utilitaires comme dig
byobu
exfat # Pour monter les FAT avec Fuse
git gitAndTools.gitSVN gitAndTools.tig
gnumake
gnupg
gpm # prise en charge de la souris en console
htop
ncdu
nmap
mtr
p7zip
parted
pciutils
python34Packages.glances
pwgen
tmux
tree
usbutils
(import ./vim.nix)
wget
which
];
shellAliases = {
byobu = "byobu-tmux";
tree = "tree -C";
tree1 = "tree -d -L 1";
tree2 = "tree -d -L 2";
tree3 = "tree -d -L 3";
grep = "grep --color=auto";
vi = "vim";
};
etc.gitconfig.text = builtins.readFile ./gitconfig;
};
programs.bash = {
enableCompletion = true;
promptInit = builtins.readFile ./bash-prompt.sh;
interactiveShellInit = builtins.readFile ./bash-interactive-init.sh;
};
}

@ -1,23 +0,0 @@
[color]
diff = auto
branch = auto
interactive = auto
pager = true
showbranch = auto
status = auto
[alias]
a = add -p
ci = commit
co = checkout
ff = pull --ff-only
# Show files ignored by git
ignored = ls-files -o -i --exclude-standard
ls = ls-files
st = status
# Logs
lol = log --graph --decorate --pretty=oneline --abbrev-commit
lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
[push]
default = simple
[core]
editor = /usr/bin/env vim

@ -0,0 +1,7 @@
all:
nixos-generate-config --root /mnt
git config --global user.email "nixos-live@example.org"
git config --global user.name "NixOS Live"
cd /mnt/etc/nixos && git init . && git add . && git commit -m "initial commit"
cd /mnt/etc/nixos && git submodule add http://gogs.prunetwork.fr:80/nixos-config/nixos-template-base.git base
cd /mnt/etc/nixos && git submodule add https://gogs.prunetwork.fr/Capgemini-CDS-Arkea/template-nixos.git capgemini-cmb

@ -0,0 +1,24 @@
{ config, lib, pkgs, ... }:
{
imports = [
capgemini-cmb/default.nix
/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix
nixos-template-base/base.nix
];
# Custom name
isoImage.isoName = pkgs.lib.mkForce "${config.isoImage.isoBaseName}-capgemini-${config.system.nixosLabel}-${pkgs.stdenv.system}.iso";
# Avoid having the terminal flooded by kernel audit messages
boot.kernelParams = [ "audit=0" ];
# Files to copy to the liveCD
isoImage.contents = [
{
source = ./Makefile.installation;
target = "/custom/Makefile";
}
];
environment.shellAliases = { nixos-generate-custom-config = "cd /iso/custom/ && make";};
networking.hostName = "nixos-livecd";
networking.domain = "grudu.net";
}

@ -0,0 +1,50 @@
let
lib = with import <nixpkgs> {}; pkgs.lib;
profiles = {
isDesktopEnvironment = {
awesome = true;
internetSuite = true;
graphical = true;
multimediaSuite = true;
officeSuite = true;
pulseaudio = true;
securitySuite = true;
};
isWorkstation = {
docker = true;
developpement = true;
developpement-elm = true;
developpement-haskell = true;
developpement-java = true;
developpement-rust = true;
};
#isServer = {
#};
};
in
with lib; rec{
# Apply the profiles (pre-defined + custom) to the whole directory
applyProfilesToDirectory = customProfiles: directory:
lib.mapAttrs (applyProfilesToMachine customProfiles) directory;
# Apply the profiles (pre-defined + custom) to a machine
applyProfilesToMachine = customProfiles: machineName: machineOptions:
{ configurationFlags = lib.recursiveUpdate (generateFlagsSet customProfiles machineOptions.profiles) machineOptions.configurationFlags;
configurationOptions = machineOptions.configurationOptions;
profiles = machineOptions.profiles;
};
# Generate a set of configuration flags based on profiles
generateFlagsSet = customProfiles: machineProfiles:
let
allProfiles = recursiveUpdate profiles customProfiles;
conditionalFlags = name: value:
if machineProfiles.${name}
then value
else {};
in
foldr (a: b: a // b) {} (mapAttrsToList conditionalFlags allProfiles);
}

@ -1,13 +0,0 @@
{ config, pkgs, ... }:
{
# Select internationalisation properties.
i18n = {
consoleFont = "Lat2-Terminus16";
consoleKeyMap = "fr";
defaultLocale = "fr_FR.UTF-8";
};
# Set your time zone.
time.timeZone = "Europe/Paris";
}

@ -0,0 +1,32 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf true {
# Paquets
environment.systemPackages = with pkgs; [
];
# Services
# Réseau
networking.firewall = {
allowedTCPPorts = [
];
allowedUDPPorts = [
];
};
} // {
assertions = [
{
assertion = true;
message = "Assetion toujours valide.";
}
];
}

@ -0,0 +1,8 @@
#!/usr/bin/env bash
EXCLUSION="~$|swp$|swo$"
while inotifywait --exclude $EXCLUSION -r -e modify .
do
$@
done

@ -0,0 +1,216 @@
{ config, lib, pkgs, r6d, ... }:
let
inherit (lib) mkEnableOption mkTextOption mkIf mkMerge mkOption singleton types;
# TODO: Anglish :)
machineOptions = types.submodule {
options = {
configurationFlags = {
#enable = mkEnableOption "Génération de la configuration d'une machine.";
awesome = mkEnableOption "Profil pour activer le gestionnaire de fenêtre awesome.";
auto-upgrade = mkEnableOption "Profil pour activer les mises à jour automatiques.";
cartographie = mkEnableOption "Profil pour activer les outils de gestion de données géographiques.";
conception-assistee = mkEnableOption "Profil pour activer les outils de conception électronique & modélisation 3D";
database_postgres = mkEnableOption "Profil pour activer le SGBD PostgreSQL.";
developpement = mkEnableOption "Profil pour activer les outils de développement";
developpement-elm = mkEnableOption "Profil pour activer les outils de développement Elm";
developpement-haskell = mkEnableOption "Profil pour activer les outils de développement Haskell";
developpement-java = mkEnableOption "Profil pour activer les outils de développement Java";
developpement-rust = mkEnableOption "Profil pour activer les outils de développement Rust";
docker = mkEnableOption "Profil pour l'utilisation de Docker.";
dovecot = mkEnableOption "Profil pour activer le serveur Dovecot.";
dns_autorite = mkEnableOption "Profil pour servir les fichiers de zone DNS.";
dns_resolveur = mkEnableOption "Profil pour activer un résolveur DNS local.";
edition-musique = mkEnableOption "Profil pour la création/édition de musique.";
edition-photo = mkEnableOption "Profil pour la création/édition de photos.";
edition-video = mkEnableOption "Profil pour la création/édition de video.";
elasticsearch = mkEnableOption "Profil pour activer le service elasticsearch.";
fail2ban = mkEnableOption "Profil pour activer Fail2ban.";
graphical = mkEnableOption "Profil pour activer les applications graphgiques.";
hydra-builder = mkEnableOption "Profil pour une machine qui compile pour hydra.";
hydra-core = mkEnableOption "Profil pour un serveur hydra.";
kibana = mkEnableOption "Profil pour activer le service kibana.";
internetSuite = mkEnableOption "Profil pour la suite de logiciels pour Internet.";
jetbrains-licensed = mkEnableOption "Profil pour la suite de développement Jetbrains payante (sous-ensemble).";
jeux = mkEnableOption "Profil pour les jeux vidéos.";
laptop = mkEnableOption "Profil pour les outils spécifiques aux ordinateurs portables.";
locate = mkEnableOption "Profil pour activer la fonction locate.";
mailboxes = mkEnableOption "Profil pour stocker les mails dans des boîtes aux lettres.";
multimediaSuite = mkEnableOption "Profil pour la suite multimédia.";
munin = mkEnableOption "Profil pour activer la supervision par Munin";
murmur = mkEnableOption "Profil pour activer un serveur Mumble (murmur)";
nixos-manual = mkEnableOption "Profil pour activer la documentation nixos en local sur un TTY";
nix-serve-server = mkEnableOption "Profil pour que la machine soit un serveur de cache nix.";
nixStoreProxyCache = mkEnableOption "Profil pour activer le proxy cahce nginx pour le nix store";
officeSuite = mkEnableOption "Profil pour la suite bureautique";
pipewire = mkEnableOption "Profil pour activer pipewire.";
print = mkEnableOption "Profil pour activer cups & pouvoir imprimer.";
pulseaudio = mkEnableOption "Profil pour activer pulseaudio.";
rabbitmq = mkEnableOption "Profil pour activer le service de messagerie AMQP.";
radio = mkEnableOption "Profil pour activer les outils pour faire de radio numérique - SDR.";
radicale = mkEnableOption "Profil pour activer le service d'hébergement de calendrier + tâches & contacts.";
rmilter = mkEnableOption "Profil pour activer le filtrage de mails par postfix.";
scanner = mkEnableOption "Profil pour que les scanners soient utilisable.";
securitySuite = mkEnableOption "Profil pour la suite de logiciels de sécurité.";
smokeping = mkEnableOption "Profil pour activer le monitoring réseau par smokeping.";
swap = mkEnableOption "Profil pour que le swap soit activé.";
virtualbox = mkEnableOption "Profil pour l'utilisation de VirtualBox.";
xmonad = mkEnableOption "Profil pour activer le gestionnaire de fenêtres xmonad.";
znc = mkEnableOption "Profil pour activer le relais IRC ZNC.";
};
configurationOptions = {
ipAddress = mkOption {
description = "Adresse IP.";
type = lib.types.str;
};
nix-serve-server = mkEnableOption "nix-serve server.";
nix-serve-client = {
enable = mkEnableOption "nix-serve client";
servers = mkOption {
default = [ https://cache.nixos.org/ ];
description = "List of nix-serve servers providing binary caches.";
type = types.listOf types.str;
};
};
tinc = {
enable = mkEnableOption "Enable tinc service.";
dnsFQDN = mkOption {
example = "device.example.net.";
description = "DNS name of host pointing to tunnel IP.";
type = lib.types.str;
};
connectToAddress = mkOption {
default = "";
example = "192.168.1.1";
description = "External address to connect from another node.";
type = lib.types.str;
};
vpnAddress = mkOption {
example = "192.168.69.69/24";
description = "VPN local node IP address.";
type = lib.types.str;
};
vpnCidrLength = mkOption {
default = 24;
example = 24;
description = "VPN netmask length.";
type = lib.types.int;
};
extraConfig = mkOption {
default = "";
example = ''
Mode = router
ConnecTo = bar
'';
description = "Configuration supplémentaire pour tinc.";
type = lib.types.str;
};
};
quagga = {
enable = mkEnableOption "Enable Quagga + BGP service";
bgpConfig = mkOption {
type = types.lines;
default = "";
example =''
router bgp 65001
neighbor 10.0.0.1 remote-as 65001
'';
description = ''
BGP configuration statements.
'';
};
};
windowsBoot = {
enable = mkEnableOption "Activation du démarrage de Windows par Grub";
drive = mkOption {
description = "Lecteur sur lequel est présent le système Windows (au format GRUB)";
type = lib.types.str;
default = "hd0,1";
};
};
windowsMount ={
enable = mkEnableOption "Montage de la partition data Windows";
device = mkOption {
description = "Lecteur sur lequel est présent le disque de data Windows";
type = lib.types.str;
default = "/dev/sda2";
};
};
};
profiles = {
# Domaine
isDubronetwork = mkEnableOption "Pour distinguer les machines dubronetwork.";
isDubronetworkServer = mkEnableOption "Pour distinguer les machines dubronetwork avec Server.";
isDubronetworkWorkstation = mkEnableOption "Pour distinguer les machines dubronetwork avec Workstation.";
isPrunetwork = mkEnableOption "Pour distinguer les machines prunetwork.";
isPrunetworkServer = mkEnableOption "Pour distinguer les machines prunetwork avec Server.";
isPrunetworkWorkstation = mkEnableOption "Pour distinguer les machines prunetwork avec Workstation.";
# Utilisation machine
isDesktopEnvironment = mkEnableOption "Pour indiquer une machine avec interface graphique.";
isServer = mkEnableOption "Pour indiquer qu'il s'agit d'un serveur.";
isWorkstation = mkEnableOption "Pour indiquer que la machine sert à travailler.";
};
};
};
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
{
options = {
r6d.machines = mkOption {
type = types.attrsOf machineOptions;
description = ''
Machines directory.
'';
};
};
config = {
/**
prototype : (expression A ) && tests || !(expression A) -> réalise le test si A est satisfait, et continue sinon = pas de politique
*/
assertions = [
{
assertion = (currentMachine.profiles.isWorkstation && (currentMachine.configurationFlags.graphical == true))
|| (!currentMachine.profiles.isWorkstation);
message = "A workstation requires a graphical environement.";
}
{
assertion = (currentMachine.profiles.isDesktopEnvironment && (currentMachine.configurationFlags.graphical == true))
|| (!currentMachine.profiles.isDesktopEnvironment);
message = "A desktop station requires a graphical environement.";
}
{
assertion = (currentMachine.profiles.isDesktopEnvironment && (config.services.xserver.enable == true))
|| (!currentMachine.profiles.isDesktopEnvironment);
message = "You need to enable xserver manually.";
}
{
assertion = (currentMachine.profiles.isServer && (currentMachine.profiles.isDesktopEnvironment == false))
|| (!currentMachine.profiles.isServer);
message = "A graphical environment is not required for a server.";
}
{
/* At least one (authorité or resolveur) */
assertion = flags.dns_autorite || flags.dns_resolveur;
message = "DNS service is disabled. You must enable a dns recursor or autoritative.";
}
{
/* authorité xor resolveur */
assertion = (flags.dns_autorite && ! flags.dns_resolveur)
|| (!flags.dns_autorite && flags.dns_resolveur);
message = "Both authoritative and recursor DNS services can't be live simultaneously. Choose only one!";
}
];
};
}

@ -0,0 +1,470 @@
-- ~home : .config/awesome/rc.lua
-- Standard awesome library
local gears = require("gears")
local awful = require("awful")
awful.rules = require("awful.rules")
require("awful.autofocus")
-- Widget and layout library
local wibox = require("wibox")
-- Theme handling library
local beautiful = require("beautiful")
-- Notification library
local naughty = require("naughty")
local menubar = require("menubar")
-- {{{ Error handling
-- Check if awesome encountered an error during startup and fell back to
-- another config (This code will only ever execute for the fallback config)
if awesome.startup_errors then
naughty.notify({ preset = naughty.config.presets.critical,
title = "Oops, there were errors during startup!",
text = awesome.startup_errors })
end
-- Handle runtime errors after startup
do
local in_error = false
awesome.connect_signal("debug::error", function (err)
-- Make sure we don't go into an endless error loop
if in_error then return end
in_error = true
naughty.notify({ preset = naughty.config.presets.critical,
title = "Oops, an error happened!",
text = err })
in_error = false
end)
end
-- }}}
-- {{{ Variable definitions
-- Themes define colours, icons, font and wallpapers.
local config_dir = os.getenv("AWESOME_CONFIG_DIR")
beautiful.init(config_dir .. "/share/awesome/themes/zenburn/theme.lua")
-- beautiful.init("/nix/store/vpj4i2vmqbinqfcigy44xzh81k9h0mv8-awesome-3.5.8/share/awesome/themes/zenburn/theme.lua")
-- This is used later as the default terminal and editor to run.
terminal = "sakura"
editor = os.getenv("EDITOR") or "vim"
editor_cmd = terminal .. " -e " .. editor
-- Default modkey.
-- Usually, Mod4 is the key with a logo between Control and Alt.
-- If you do not like this or do not have such a key,
-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
-- However, you can use another modifier like Mod1, but it may interact with others.
modkey = "Mod4"
-- Table of layouts to cover with awful.layout.inc, order matters.
local layouts =
{
awful.layout.suit.fair,
awful.layout.suit.fair.horizontal,
awful.layout.suit.max.fullscreen,
awful.layout.suit.spiral,
awful.layout.suit.spiral.dwindle,
awful.layout.suit.max,
awful.layout.suit.floating,
awful.layout.suit.tile,
awful.layout.suit.tile.left,
awful.layout.suit.tile.bottom,
awful.layout.suit.tile.top,
awful.layout.suit.magnifier
}
-- }}}
-- {{{ Wallpaper
if beautiful.wallpaper then
for s = 1, screen.count() do
gears.wallpaper.maximized(beautiful.wallpaper, s, true)
end
end
-- }}}
-- {{{ Tags
-- Define a tag table which hold all screen tags.
tags = {}
for s = 1, screen.count() do
-- Each screen has its own tag table.
tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[1])
end
-- }}}
-- {{{ Menu
-- Create a laucher widget and a main menu
myawesomemenu = {
{ "manual", terminal .. " -e man awesome" },
{ "edit config", editor_cmd .. " " .. awesome.conffile },
{ "restart", awesome.restart },
{ "quit", awesome.quit }
}
mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
{ "open terminal", terminal }
}
})
mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
menu = mymainmenu })
-- Menubar configuration
menubar.utils.terminal = terminal -- Set the terminal for applications that require it
-- }}}
-- {{{ Wibox
-- Create a textclock widget
mytextclock = awful.widget.textclock()
-- Create a wibox for each screen and add it
mywibox = {}
mypromptbox = {}
mylayoutbox = {}
mytaglist = {}
mytaglist.buttons = awful.util.table.join(
awful.button({ }, 1, awful.tag.viewonly),
awful.button({ modkey }, 1, awful.client.movetotag),
awful.button({ }, 3, awful.tag.viewtoggle),
awful.button({ modkey }, 3, awful.client.toggletag),
awful.button({ }, 4, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end),
awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end)
)
mytasklist = {}
mytasklist.buttons = awful.util.table.join(
awful.button({ }, 1, function (c)
if c == client.focus then
c.minimized = true
else
-- Without this, the following
-- :isvisible() makes no sense
c.minimized = false
if not c:isvisible() then
awful.tag.viewonly(c:tags()[1])
end
-- This will also un-minimize
-- the client, if needed
client.focus = c
c:raise()
end
end),
awful.button({ }, 3, function ()
if instance then
instance:hide()
instance = nil
else
instance = awful.menu.clients({
theme = { width = 250 }
})
end
end),
awful.button({ }, 4, function ()
awful.client.focus.byidx(1)
if client.focus then client.focus:raise() end
end),
awful.button({ }, 5, function ()
awful.client.focus.byidx(-1)
if client.focus then client.focus:raise() end
end))
for s = 1, screen.count() do
-- Create a promptbox for each screen
mypromptbox[s] = awful.widget.prompt()
-- Create an imagebox widget which will contains an icon indicating which layout we're using.
-- We need one layoutbox per screen.
mylayoutbox[s] = awful.widget.layoutbox(s)
mylayoutbox[s]:buttons(awful.util.table.join(
awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end),
awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end),
awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end),
awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end)))
-- Create a taglist widget
mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.filter.all, mytaglist.buttons)
-- Create a tasklist widget
mytasklist[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, mytasklist.buttons)
-- Create the wibox
mywibox[s] = awful.wibox({ position = "top", screen = s })
-- Widgets that are aligned to the left
local left_layout = wibox.layout.fixed.horizontal()
left_layout:add(mylauncher)
left_layout:add(mytaglist[s])
left_layout:add(mypromptbox[s])
-- Widgets that are aligned to the right
local right_layout = wibox.layout.fixed.horizontal()
if s == 1 then right_layout:add(wibox.widget.systray()) end
right_layout:add(mytextclock)
right_layout:add(mylayoutbox[s])
-- Now bring it all together (with the tasklist in the middle)
local layout = wibox.layout.align.horizontal()
layout:set_left(left_layout)
layout:set_middle(mytasklist[s])
layout:set_right(right_layout)
mywibox[s]:set_widget(layout)
end
-- }}}
-- {{{ Mouse bindings
root.buttons(awful.util.table.join(
awful.button({ }, 3, function () mymainmenu:toggle() end),
awful.button({ }, 4, awful.tag.viewnext),
awful.button({ }, 5, awful.tag.viewprev)
))
-- }}}
-- {{{ Key bindings
globalkeys = awful.util.table.join(
awful.key({ modkey, }, "Left", awful.tag.viewprev ),
awful.key({ modkey, }, "Right", awful.tag.viewnext ),
awful.key({ modkey, }, "Escape", awful.tag.history.restore),
awful.key({ modkey, }, "j",
function ()
awful.client.focus.byidx( 1)
if client.focus then client.focus:raise() end
end),
awful.key({ modkey, }, "k",
function ()
awful.client.focus.byidx(-1)
if client.focus then client.focus:raise() end
end),
awful.key({ modkey, }, "w", function () mymainmenu:show() end),
-- Layout manipulation
awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end),
awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end),
awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end),
awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end),
awful.key({ modkey, }, "u", awful.client.urgent.jumpto),
awful.key({ modkey, }, "Tab",
function ()
awful.client.focus.history.previous()
if client.focus then
client.focus:raise()
end
end),
-- Standard program
awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end),
awful.key({ modkey, "Control" }, "r", awesome.restart),
awful.key({ modkey, "Shift" }, "q", awesome.quit),
awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end),
awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end),
awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end),
awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end),
awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end),
awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end),
awful.key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end),
awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end),
awful.key({ modkey, "Control" }, "n", awful.client.restore),
-- Prompt
awful.key({ modkey }, "r", function () mypromptbox[mouse.screen]:run() end),
awful.key({ modkey }, "x",
function ()
awful.prompt.run({ prompt = "Run Lua code: " },
mypromptbox[mouse.screen].widget,
awful.util.eval, nil,
awful.util.getdir("cache") .. "/history_eval")
end),
-- Menubar
awful.key({ modkey }, "p", function() menubar.show() end),
-- Lanceurs perso
awful.key({ modkey }, "F1", function () awful.util.spawn("kontact") end),
awful.key({ modkey, "Shift" }, "F1", function () awful.util.spawn("claws-mail") end),
awful.key({ modkey }, "F2", function () awful.util.spawn("firefox") end),
awful.key({ modkey, "Shift" }, "F2", function () awful.util.spawn("uzbl-tabbed") end),
awful.key({ modkey }, "F3", function () awful.util.spawn("spacefm") end),
awful.key({ modkey, "Shift" }, "F3", function () awful.util.spawn("pcmanfm") end),
-- awful.key({ modkey }, "F11", function () awful.util.spawn("/home/taeradan/bin/xrandr-auto") end),
-- awful.key({ modkey, "Shift" }, "F11", function () awful.util.spawn("/home/taeradan/bin/xrandr-left") end),
-- awful.key({ modkey, "Control" }, "F11", function () awful.util.spawn("/home/taeradan/bin/xrandr-right") end),
awful.key({ modkey }, "F12", function () awful.util.spawn("slock") end)
)
clientkeys = awful.util.table.join(
awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen end),
awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end),
awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ),
awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
awful.key({ modkey, }, "o", awful.client.movetoscreen ),
awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end),
awful.key({ modkey, }, "n",
function (c)
-- The client currently has the input focus, so it cannot be
-- minimized, since minimized clients can't have the focus.
c.minimized = true
end),
awful.key({ modkey, }, "m",
function (c)
c.maximized_horizontal = not c.maximized_horizontal
c.maximized_vertical = not c.maximized_vertical
end)
)
-- Bind all key numbers to tags.
-- Be careful: we use keycodes to make it works on any keyboard layout.
-- This should map on the top row of your keyboard, usually 1 to 9.
for i = 1, 9 do
globalkeys = awful.util.table.join(globalkeys,
-- View tag only.
awful.key({ modkey }, "#" .. i + 9,
function ()
local screen = mouse.screen
local tag = awful.tag.gettags(screen)[i]
if tag then
awful.tag.viewonly(tag)
end
end),
-- Toggle tag.
awful.key({ modkey, "Control" }, "#" .. i + 9,
function ()
local screen = mouse.screen
local tag = awful.tag.gettags(screen)[i]
if tag then
awful.tag.viewtoggle(tag)
end
end),
-- Move client to tag.
awful.key({ modkey, "Shift" }, "#" .. i + 9,
function ()
if client.focus then
local tag = awful.tag.gettags(client.focus.screen)[i]
if tag then
awful.client.movetotag(tag)
end
end
end),
-- Toggle tag.
awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
function ()
if client.focus then
local tag = awful.tag.gettags(client.focus.screen)[i]
if tag then
awful.client.toggletag(tag)
end
end
end))
end
clientbuttons = awful.util.table.join(
awful.button({ }, 1, function (c) client.focus = c; c:raise() end),
awful.button({ modkey }, 1, awful.mouse.client.move),
awful.button({ modkey }, 3, awful.mouse.client.resize)
)
-- Set keys
root.keys(globalkeys)
-- }}}
-- {{{ Rules
-- Rules to apply to new clients (through the "manage" signal).
awful.rules.rules = {
-- All clients will match this rule.
{ rule = { },
properties = { border_width = beautiful.border_width,
border_color = beautiful.border_normal,
focus = awful.client.focus.filter,
raise = true,
keys = clientkeys,
buttons = clientbuttons }
},
{ rule = { class = "MPlayer" },
properties = { floating = true }
},
{ rule = { class = "pinentry" },
properties = { floating = true }
},
{ rule = { class = "gimp" },
properties = { floating = true }
}
-- Set Firefox to always map on tags number 2 of screen 1.
-- { rule = { class = "Firefox" },
-- properties = { tag = tags[1][2] } },
}
-- }}}
-- {{{ Signals
-- Signal function to execute when a new client appears.
client.connect_signal("manage", function (c, startup)
-- Enable sloppy focus
c:connect_signal("mouse::enter", function(c)
if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
and awful.client.focus.filter(c) then
client.focus = c
end
end)
if not startup then
-- Set the windows at the slave,
-- i.e. put it at the end of others instead of setting it master.
-- awful.client.setslave(c)
-- Put windows in a smart way, only if they does not set an initial position.
if not c.size_hints.user_position and not c.size_hints.program_position then
awful.placement.no_overlap(c)
awful.placement.no_offscreen(c)
end
end
local titlebars_enabled = false
if titlebars_enabled and (c.type == "normal" or c.type == "dialog") then
-- buttons for the titlebar
local buttons = awful.util.table.join(
awful.button({ }, 1, function()
client.focus = c
c:raise()
awful.mouse.client.move(c)
end),
awful.button({ }, 3, function()
client.focus = c
c:raise()
awful.mouse.client.resize(c)
end)
)
-- Widgets that are aligned to the left
local left_layout = wibox.layout.fixed.horizontal()
left_layout:add(awful.titlebar.widget.iconwidget(c))
left_layout:buttons(buttons)
-- Widgets that are aligned to the right
local right_layout = wibox.layout.fixed.horizontal()
right_layout:add(awful.titlebar.widget.floatingbutton(c))
right_layout:add(awful.titlebar.widget.maximizedbutton(c))
right_layout:add(awful.titlebar.widget.stickybutton(c))
right_layout:add(awful.titlebar.widget.ontopbutton(c))
right_layout:add(awful.titlebar.widget.closebutton(c))
-- The title goes in the middle
local middle_layout = wibox.layout.flex.horizontal()
local title = awful.titlebar.widget.titlewidget(c)
title:set_align("center")
middle_layout:add(title)
middle_layout:buttons(buttons)
-- Now bring it all together
local layout = wibox.layout.align.horizontal()
layout:set_left(left_layout)
layout:set_right(right_layout)
layout:set_middle(middle_layout)
awful.titlebar(c):set_widget(layout)
end
end)
client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end)
client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
-- }}}
-- Au démarrage
-- awful.util.spawn_with_shell("/home/taeradan/bin/xrandr-auto")
-- awful.util.spawn_with_shell("gnome-sound-applet")
-- awful.util.spawn_with_shell("nm-applet")

@ -0,0 +1,654 @@
-- $HOME : .config/awesome/rc.lua
-- Standard awesome library
local gears = require("gears")
local awful = require("awful")
awful.rules = require("awful.rules")
require("awful.autofocus")
-- Widget and layout library
local wibox = require("wibox")
-- Theme handling library
local beautiful = require("beautiful")
-- Notification library
local naughty = require("naughty")
local menubar = require("menubar")
local hotkeys_popup = require("awful.hotkeys_popup").widget
-- {{{ Error handling
-- Check if awesome encountered an error during startup and fell back to
-- another config (This code will only ever execute for the fallback config)
if awesome.startup_errors then
naughty.notify({
preset = naughty.config.presets.critical,
title = "Oops, there were errors during startup!",
text = awesome.startup_errors
})
end
-- Handle runtime errors after startup
do
local in_error = false
awesome.connect_signal("debug::error", function (err)
-- Make sure we don't go into an endless error loop
if in_error then return end
in_error = true
naughty.notify({
preset = naughty.config.presets.critical,
title = "Oops, an error happened!",
text = tostring(err)
})
in_error = false
end)
end
-- }}}
-- {{{ Variable definitions
-- Themes define colours, icons, font and wallpapers.
local config_dir = os.getenv("AWESOME_CONFIG_DIR")
beautiful.init(config_dir .. "/share/awesome/themes/zenburn/theme.lua")
-- This is used later as the default terminal and editor to run.
terminal = "sakura"
editor = os.getenv("EDITOR") or "vim"
editor_cmd = terminal .. " -e " .. editor
-- Default modkey.
-- Usually, Mod4 is the key with a logo between Control and Alt.
-- If you do not like this or do not have such a key,
-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
-- However, you can use another modifier like Mod1, but it may interact with others.
modkey = "Mod4"
-- Table of layouts to cover with awful.layout.inc, order matters.
awful.layout.layouts = {
awful.layout.suit.corner.nw,
awful.layout.suit.tile,
awful.layout.suit.tile.left,
awful.layout.suit.tile.bottom,
awful.layout.suit.tile.top,
awful.layout.suit.fair,
awful.layout.suit.fair.horizontal,
awful.layout.suit.spiral,
awful.layout.suit.spiral.dwindle,
awful.layout.suit.max,
awful.layout.suit.max.fullscreen,
awful.layout.suit.magnifier,
awful.layout.suit.floating,
-- awful.layout.suit.corner.ne,
-- awful.layout.suit.corner.sw,
-- awful.layout.suit.corner.se,
}
-- }}}
-- {{{ Helper functions
local function client_menu_toggle_fn()
local instance = nil
return function ()
if instance and instance.wibox.visible then
instance:hide()
instance = nil
else
instance = awful.menu.clients({ theme = { width = 250 } })
end
end
end
-- }}}
-- {{{ Menu
-- Create a launcher widget and a main menu
myawesomemenu = {
{ "hotkeys", function() return false, hotkeys_popup.show_help end},
{ "manual", terminal .. " -e man awesome" },
{ "edit config", editor_cmd .. " " .. awesome.conffile },
{ "restart", awesome.restart },
{ "quit", function() awesome.quit() end}
}
mymainmenu = awful.menu({
items = {
{ "awesome", myawesomemenu, beautiful.awesome_icon },
{ "open terminal", terminal }
}
})
mylauncher = awful.widget.launcher({
image = beautiful.awesome_icon,
menu = mymainmenu
})
-- Menubar configuration
menubar.utils.terminal = terminal -- Set the terminal for applications that require it
-- }}}
-- Keyboard map indicator and switcher
mykeyboardlayout = awful.widget.keyboardlayout()
-- {{{ Wibar
-- Create a textclock widget
mytextclock = wibox.widget.textclock()
-- Create a wibox for each screen and add it
local taglist_buttons = awful.util.table.join(
awful.button(
{ },
1,
function(t) t:view_only() end
),
awful.button(
{ modkey },
1,
function(t)
if client.focus then
client.focus:move_to_tag(t)
end
end
),
awful.button(
{ },
3,
awful.tag.viewtoggle
),
awful.button(
{ modkey },
3,
function(t)
if client.focus then
client.focus:toggle_tag(t)
end
end
),
awful.button(
{ },
4,
function(t) awful.tag.viewnext(t.screen) end
),
awful.button(
{ },
5,
function(t) awful.tag.viewprev(t.screen) end
)
)
local tasklist_buttons = awful.util.table.join(
awful.button(
{ },
1,
function (c)
if c == client.focus then
c.minimized = true
else
-- Without this, the following
-- :isvisible() makes no sense
c.minimized = false
if not c:isvisible() and c.first_tag then
c.first_tag:view_only()
end
-- This will also un-minimize
-- the client, if needed
client.focus = c
c:raise()
end
end
),
awful.button(
{ },
3,
client_menu_toggle_fn()
),
awful.button(
{ },
4,
function ()
awful.client.focus.byidx(1)
end
),
awful.button(
{ },
5,
function ()
awful.client.focus.byidx(-1)
end
)
)
local function set_wallpaper(s)
-- Wallpaper
if beautiful.wallpaper then
local wallpaper = beautiful.wallpaper
-- If wallpaper is a function, call it with the screen
if type(wallpaper) == "function" then
wallpaper = wallpaper(s)
end
gears.wallpaper.maximized(wallpaper, s, true)
end
end
local iostat_tooltiptext = ""
-- Widget de monitoring de l'activité des disques https://awesomewm.org/recipes/watch/
-- disk I/O using iostat from sysstat utilities
local iotable = {}
local iostat = awful.widget.watch("iostat -dm -y 1 1", 2, -- in Kb, use -dm for Mb
function(widget, stdout)
for line in stdout:match("(sd.*)\n"):gmatch("(.-)\n") do
local device, tps, read_s, wrtn_s, read, wrtn =
line:match("(%w+)%s*(%d+,?%d*)%s*(%d+,?%d*)%s*(%d+,?%d*)%s*(%d+,?%d*)%s*(%d+,?%d*)")
-- [1] [2] [3] [4] [5]
iotable[device] = { tps, read_s, wrtn_s, read, wrtn }
end
local label = ""
for device,values in spairs(iotable) do
label = label..(device..": "..iotable[device][2].." MB_read/s |"..iotable[device][3].." MB_wrtn/s").."\n"
end
iostat_tooltiptext = label
-- customize here
--widget:set_text("sda: "..iotable["sda"][2].."/"..iotable["sda"][3]) -- read_s/wrtn_s
widget:set_text("iostat")
end
)
iostat_t = awful.tooltip({
--objects = { },
timer_function = function()
return iostat_tooltiptext
end,
})
iostat_t:add_to_object(iostat)
-- tris d'un tableau par la clef https://stackoverflow.com/questions/15706270/sort-a-table-in-lua
function spairs(t, order)
-- collect the keys
local keys = {}
for k in pairs(t) do keys[#keys+1] = k end
-- if order function given, sort by it by passing the table and keys a, b,
-- otherwise just sort the keys
if order then
table.sort(keys, function(a,b) return order(t, a, b) end)
else
table.sort(keys)
end
-- return the iterator function
local i = 0
return function()
i = i + 1
if keys[i] then
return keys[i], t[keys[i]]
end
end
end
-- Re-set wallpaper when a screen's geometry changes (e.g. different resolution)
screen.connect_signal("property::geometry", set_wallpaper)
awful.screen.connect_for_each_screen(
function(s)
-- Wallpaper
set_wallpaper(s)
-- Each screen has its own tag table.
awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, s, awful.layout.layouts[1])
-- Create a promptbox for each screen
s.mypromptbox = awful.widget.prompt()
-- Create an imagebox widget which will contains an icon indicating which layout we're using.
-- We need one layoutbox per screen.
s.mylayoutbox = awful.widget.layoutbox(s)
s.mylayoutbox:buttons(awful.util.table.join(
awful.button({ }, 1, function () awful.layout.inc( 1) end),
awful.button({ }, 3, function () awful.layout.inc(-1) end),
awful.button({ }, 4, function () awful.layout.inc( 1) end),
awful.button({ }, 5, function () awful.layout.inc(-1) end)
))
-- Create a taglist widget
s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, taglist_buttons)
-- Create a tasklist widget
s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, tasklist_buttons)
-- Create the wibox
s.mywibox = awful.wibar({ position = "top", screen = s })
-- Add widgets to the wibox
s.mywibox:setup {
layout = wibox.layout.align.horizontal,
{ -- Left widgets
layout = wibox.layout.fixed.horizontal,
mylauncher,
s.mytaglist,
s.mypromptbox
},
s.mytasklist, -- Middle widget
{ -- Right widgets
layout = wibox.layout.fixed.horizontal,
wibox.widget.textbox(' | '),
iostat,
wibox.widget.textbox(' | '),
mykeyboardlayout,
wibox.widget.systray(),
mytextclock,
s.mylayoutbox
}
}
end
)
-- }}}
-- {{{ Mouse bindings
root.buttons(awful.util.table.join(
awful.button({ }, 3, function () mymainmenu:toggle() end),
awful.button({ }, 4, awful.tag.viewnext),
awful.button({ }, 5, awful.tag.viewprev)
))
-- }}}
-- {{{ Key bindings
globalkeys = awful.util.table.join(
awful.key({ modkey, }, "s", hotkeys_popup.show_help, {description="show help", group="awesome"}),
awful.key({ modkey, }, "Left", awful.tag.viewprev, {description = "view previous", group = "tag"}),
awful.key({ modkey, }, "Right", awful.tag.viewnext, {description = "view next", group = "tag"}),
awful.key({ modkey, }, "Escape", awful.tag.history.restore, {description = "go back", group = "tag"}),
awful.key({ modkey, }, "j", function () awful.client.focus.byidx( 1) end, {description = "focus next by index", group = "client"}),
awful.key({ modkey, }, "k", function () awful.client.focus.byidx(-1) end, {description = "focus previous by index", group = "client"}),
awful.key({ modkey, }, "w", function () mymainmenu:show() end, {description = "show main menu", group = "awesome"}),
-- Layout manipulation
awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end, {description = "swap with next client by index", group = "client"}),
awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end, {description = "swap with previous client by index", group = "client"}),
awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end, {description = "focus the next screen", group = "screen"}),
awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end, {description = "focus the previous screen", group = "screen"}),
awful.key({ modkey, }, "u", awful.client.urgent.jumpto, {description = "jump to urgent client", group = "client"}),
awful.key({ modkey, }, "Tab", function () awful.client.focus.history.previous() if client.focus then client.focus:raise() end end,
{description = "go back", group = "client"}),
-- Standard program
awful.key({ modkey, }, "Return", function () awful.spawn(terminal) end, {description = "open a terminal", group = "launcher"}),
awful.key({ modkey, "Control" }, "r", awesome.restart, {description = "reload awesome", group = "awesome"}),
awful.key({ modkey, "Shift" }, "q", awesome.quit, {description = "quit awesome", group = "awesome"}),
awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end, {description = "increase master width factor", group = "layout"}),
awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end, {description = "decrease master width factor", group = "layout"}),
awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1, nil, true) end, {description = "increase the number of master clients", group = "layout"}),
awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1, nil, true) end, {description = "decrease the number of master clients", group = "layout"}),
awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1, nil, true) end, {description = "increase the number of columns", group = "layout"}),
awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1, nil, true) end, {description = "decrease the number of columns", group = "layout"}),
awful.key({ modkey, }, "space", function () awful.layout.inc( 1) end, {description = "select next", group = "layout"}),
awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(-1) end, {description = "select previous", group = "layout"}),
awful.key({ modkey, "Control" }, "n", function () local c = awful.client.restore() --[[ Focus restored client ]] if c then client.focus = c c:raise() end end,
{description = "restore minimized", group = "client"}),
-- Prompt
awful.key({ modkey }, "r", function () awful.screen.focused().mypromptbox:run() end, {description = "run prompt", group = "launcher"}),
awful.key({ modkey }, "x",
function ()
awful.prompt.run {
prompt = "Run Lua code: ",
textbox = awful.screen.focused().mypromptbox.widget,
exe_callback = awful.util.eval,
history_path = awful.util.get_cache_dir() .. "/history_eval"
}
end,
{description = "lua execute prompt", group = "awesome"}),
-- Menubar
awful.key({ modkey }, "p", function() menubar.show() end, {description = "show the menubar", group = "launcher"}),
-- Lanceurs perso
awful.key({ modkey }, "F1", function () awful.util.spawn("firefox") end, {description = "Lance Firefox", group = "Lanceurs personnels"}),
awful.key({ modkey }, "F2", function () awful.util.spawn("firefox") end, {description = "Lance Firefox", group = "Lanceurs personnels"}),
awful.key({ modkey }, "F3", function () awful.util.spawn("gqrx") end, {description = "Lance gqrx", group = "Lanceurs personnels"}),
awful.key({ modkey }, "F4", function () awful.util.spawn("chromium") end, {description = "Lance Chromium", group = "Lanceurs personnels"}),
awful.key({ modkey }, "F5", function () awful.util.spawn("spacefm") end, {description = "Lance spacefm", group = "Lanceurs personnels"}),
awful.key({ modkey }, "F6", function () awful.util.spawn("vlc") end, {description = "Lance vlc", group = "Lanceurs personnels"}),
awful.key({ modkey }, "F7", function () awful.util.spawn("claws-mail") end, {description = "Lance claws", group = "Lanceurs personnels"}),
awful.key({ modkey }, "F11", function () awful.util.spawn("xrandr-auto") end, {description = "Lance le script xrandr-auto", group = "Lanceurs personnels"}),
awful.key({ modkey }, "F12", function () awful.util.spawn("slock") end, {description = "Verouille la session avec slock", group = "Lanceurs personnels"}),
awful.key({ modkey, "Shift" }, "F1", function () awful.util.spawn("claws-mail") end, {description = "Lance claws", group = "Lanceurs personnels"}),
awful.key({ modkey, "Shift" }, "F3", function () awful.util.spawn("pcmanfm") end, {description = "Lance pcmanfm", group = "Lanceurs personnels"}),
awful.key({ modkey, "Shift" }, "F6", function () awful.util.spawn("clementine") end, {description = "Lance clementine", group = "Lanceurs personnels"}),
awful.key({ modkey, "Shift" }, "F11", function () awful.util.spawn("xrandr-auto-2") end, {description = "Lance le script xrandr-auto-2", group = "Lanceurs personnels"}),
awful.key({ modkey }, "l", function () awful.util.spawn("slock systemctl suspend -i") end, {description = "Verouille la session avec slock", group = "Lanceurs personnels"})
-- awful.key({ modkey, "Shift" }, "F11", function () awful.util.spawn("/home/taeradan/bin/xrandr-left") end),
-- awful.key({ modkey, "Control" }, "F11", function () awful.util.spawn("/home/taeradan/bin/xrandr-right") end),
)
clientkeys = awful.util.table.join(
awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen c:raise() end, {description = "toggle fullscreen", group = "client"}),
awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end, {description = "close", group = "client"}),
awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle , {description = "toggle floating", group = "client"}),
awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end, {description = "move to master", group = "client"}),
awful.key({ modkey, }, "o", function (c) c:move_to_screen() end, {description = "move to screen", group = "client"}),
awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end, {description = "toggle keep on top", group = "client"}),
awful.key({ modkey, }, "n", function (c) --[[ The client currently has the input focus, so it cannot be minimized, since minimized clients can't have the focus. ]] c.minimized = true end ,
{description = "minimize", group = "client"}),
awful.key({ modkey, }, "m", function (c) c.maximized = not c.maximized c:raise() end , {description = "maximize", group = "client"})
)
-- Bind all key numbers to tags.
-- Be careful: we use keycodes to make it works on any keyboard layout.
-- This should map on the top row of your keyboard, usually 1 to 9.
for i = 1, 9 do
globalkeys = awful.util.table.join(
globalkeys,
-- View tag only.
awful.key(
{ modkey },
"#" .. i + 9,
function ()
local screen = awful.screen.focused()
local tag = screen.tags[i]
if tag then
tag:view_only()
end
end,
{description = "view tag #"..i, group = "tag"}
),
-- Toggle tag display.
awful.key(
{ modkey, "Control" },
"#" .. i + 9,
function ()
local screen = awful.screen.focused()
local tag = screen.tags[i]
if tag then
awful.tag.viewtoggle(tag)
end
end,
{description = "toggle tag #" .. i, group = "tag"}
),
-- Move client to tag.
awful.key(
{ modkey, "Shift" },
"#" .. i + 9,
function ()
if client.focus then
local tag = client.focus.screen.tags[i]
if tag then
client.focus:move_to_tag(tag)
end
end
end,
{description = "move focused client to tag #"..i, group = "tag"}
),
-- Toggle tag on focused client.
awful.key(
{ modkey, "Control", "Shift" },
"#" .. i + 9,
function ()
if client.focus then
local tag = client.focus.screen.tags[i]
if tag then
client.focus:toggle_tag(tag)
end
end
end,
{description = "toggle focused client on tag #" .. i, group = "tag"}
)
)
end
clientbuttons = awful.util.table.join(
awful.button({ }, 1, function (c) client.focus = c; c:raise() end),
awful.button({ modkey }, 1, awful.mouse.client.move),
awful.button({ modkey }, 3, awful.mouse.client.resize))
-- Set keys
root.keys(globalkeys)
-- }}}
-- {{{ Rules
-- Rules to apply to new clients (through the "manage" signal).
awful.rules.rules = {
-- All clients will match this rule.
{
rule = { },
properties = {
border_width = beautiful.border_width,
border_color = beautiful.border_normal,
focus = awful.client.focus.filter,
raise = true,
keys = clientkeys,
buttons = clientbuttons,
screen = awful.screen.preferred,
placement = awful.placement.no_overlap+awful.placement.no_offscreen
}
},
-- Floating clients.
{
rule_any = {
instance = {
"DTA", -- Firefox addon DownThemAll.
"copyq", -- Includes session name in class.
},
class = {
"Arandr",
"Gpick",
"Kruler",
"MessageWin", -- kalarm.
"Sxiv",
"Wpa_gui",
"pinentry",
"veromix",
"xtightvncviewer"
},
name = {
"Event Tester", -- xev.
},
role = {
"AlarmWindow", -- Thunderbird's calendar.
"pop-up", -- e.g. Google Chrome's (detached) Developer Tools.
}
},
properties = { floating = true }
},
-- Add titlebars to normal clients and dialogs
{
rule_any = {
type = { "normal", "dialog" }
},
properties = { titlebars_enabled = false }
},
-- Set Firefox to always map on the tag named "2" on screen 1.
-- { rule = { class = "Firefox" },
-- properties = { screen = 1, tag = "2" } },
}
-- }}}
-- {{{ Signals
-- Signal function to execute when a new client appears.
client.connect_signal(
"manage",
function (c)
--[[ Set the windows at the slave, i.e. put it at the end of others instead of setting it master.]]
-- if not awesome.startup then awful.client.setslave(c) end
if awesome.startup and
not c.size_hints.user_position
and not c.size_hints.program_position then
--[[ Prevent clients from being unreachable after screen count changes.]]
awful.placement.no_offscreen(c)
end
end
)
-- Add a titlebar if titlebars_enabled is set to true in the rules.
client.connect_signal(
"request::titlebars",
function(c)
-- buttons for the titlebar
local buttons = awful.util.table.join(
awful.button(
{ },
1,
function()
client.focus = c
c:raise()
awful.mouse.client.move(c)
end
),
awful.button(
{ },
3,
function()
client.focus = c
c:raise()
awful.mouse.client.resize(c)
end
)
)
awful.titlebar(c) : setup {
{ -- Left
awful.titlebar.widget.iconwidget(c),
buttons = buttons,
layout = wibox.layout.fixed.horizontal
},
{ -- Middle
{ -- Title
align = "center",
widget = awful.titlebar.widget.titlewidget(c)
},
buttons = buttons,
layout = wibox.layout.flex.horizontal
},
{ -- Right
awful.titlebar.widget.floatingbutton (c),
awful.titlebar.widget.maximizedbutton(c),
awful.titlebar.widget.stickybutton (c),
awful.titlebar.widget.ontopbutton (c),
awful.titlebar.widget.closebutton (c),
layout = wibox.layout.fixed.horizontal()
},
layout = wibox.layout.align.horizontal
}
end
)
-- Enable sloppy focus, so that focus follows mouse.
client.connect_signal(
"mouse::enter",
function(c)
if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
and awful.client.focus.filter(c) then
client.focus = c
end
end
)
client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end)
client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
-- }}}
-- Au démarrage
awful.util.spawn_with_shell("xrandr-auto || true")
-- awful.util.spawn_with_shell("gnome-sound-applet")
-- awful.util.spawn_with_shell("nm-applet")

@ -1,31 +0,0 @@
{ config, pkgs, ... }:
{
# Sécurité & Acces distant
## Augmentation de l'entropie du système par un générateur de nombres aléatoires
## cat /proc/sys/kernel/random/entropy_avail
services.haveged = {
enable = true;
refill_threshold = 2048;
};
## OpenSSH daemon
services.openssh = {
enable = true;
};
# Enable CUPS to print documents.
services.printing = {
enable = true;
drivers = [ pkgs.samsung-unified-linux-driver ];
};
# Monitoring
## Noeud de supervision munin = pas de stockage des données locales
services.munin-node = {
enable = true;
};
}

@ -0,0 +1,40 @@
{ config, lib, pkgs, ... }:
let
#inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
{
imports = [
# installées systématiquement
./gpm.nix
./haveged.nix
./monitoring-munin.nix
./ssh.nix
./yubikey.nix
# commandées par config-generator
## option de configuration spécifique
./print.nix # configuration de base de cups
./docker.nix # activer docker
./elasticsearch.nix # service de stockage et recher de données
./hoogle.nix # service hoogle pour haskell
./hydra-build.nix # service de construction de paquet. -> la machine compile des paquets
./hydra-core.nix # service pour l'instance d'hydra
./kibana.nix # service de visualisation de données stockées dans elasticsearch
# TODO: réactiver locate
#./locate.nix # service locate
./nixos-manual.nix # documentation nixos sur TTY
./virtualbox.nix # activer virtualbox
./xmonad/xmonad.nix # pour le gestionaire de fenêtre xmonad
## if isDesktop
./pulseaudio.nix # activation du serveur audio
./pipewire.nix # activation du serveur audio
./scanner.nix # utilisation d'un scanner
./x11.nix # activation du serveur graphique X
];
}

@ -0,0 +1,21 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.docker {
# Paquets
environment.systemPackages = with pkgs; [
# Ecosystème Docker
docker
docker-compose
lazydocker
];
virtualisation.docker.enable = true;
}

@ -0,0 +1,34 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.elasticsearch {
# Paquets
environment.systemPackages = with pkgs; [
];
# Services
## E : http://localhost:9200/_cat/indices?v
services.elasticsearch = {
enable = true;
port = 9200;
listenAddress = "127.0.0.1";
#listenAddress = "_site_";
};
# Réseau
# -> Aucun port n'est ouvert caril est recommandé de mettre un proxy HTTP devant
networking.firewall = {
allowedTCPPorts = [
];
allowedUDPPorts = [
];
};
}

@ -0,0 +1,14 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf true {
# prise en charge de la souris en console
services.gpm.enable = true;
}

@ -0,0 +1,21 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf true {
# Sécurité & Accès distant
# Services
## Augmentation de l'entropie du système par un générateur de nombres aléatoires
## cat /proc/sys/kernel/random/entropy_avail
services.haveged = {
enable = true;
refill_threshold = 2048;
};
}

@ -0,0 +1,16 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.developpement-haskell {
services.hoogle = {
enable = true;
port = 10080;
};
}

@ -0,0 +1,54 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
# TODO: ménage
mkIf flags.hydra-builder {
# Paquets
environment.systemPackages = with pkgs; [
kvm
qemu
virtualbox
];
# Services
## Services de virtualisation utilisé pour les tests hydra
virtualisation = {
docker.enable = true;
libvirtd = {
enable = true;
};
virtualbox = {
#guest.enable = true;
host.enable = true;
host.headless = true;
};
};
## Ménage automatique tous les jours - Frequent garbage collection is a good idea for build machines.
nix.gc = {
automatic = true;
dates = "*:0/30";
};
# users.users."hydrabld" = {
# description = "Execution des jobs hydra";
# group = "nixbld";
# extraGroups = [
# "docker"
# "nixbld"
# "vboxusers"
# ];
# isNormalUser = true; # devrait être à false: TODO débugger la conf ssh & users pour que ça marche en user système
# openssh.authorizedKeys.keys = [
# "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGYpjcWJCf8dXpv2LmoIaNVbwZXEC50QUU6Az+lqeD89 hydra radx"
# ];
# };
}

@ -0,0 +1,95 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
#### https://github.com/NixOS/hydra/issues/413
# Note that we use 'import <nixpkgs> {}' instead of 'pkgs'.
# If we use the latter we get an infinite recursion
# because we include hydra-src in the module imports below which in turn defines the 'pkgs' value.
#hydra-src = (import <nixpkgs> {}).fetchgit {
# url = "https://github.com/NixOS/hydra.git";
# rev = "de55303197d997c4fc5503b52b1321ae9528583d";
# sha256 = "0nimqsbpjxfwha6d5gp6a7jh50i83z1llmx30da4bscsic8z1xly";
#};
#hydra-src-pkg = lib.mkDefault ((import (hydra-src + /release.nix) {}).build.x86_64-linux);
# information pour l'état de hydra :
# hydra-queue-runner --status | json_pp
in
# TODO: passe de ménage
mkIf flags.hydra-core {
# Paquets
environment.systemPackages = with pkgs; [
];
# Documentation HYDRA
## Installation
# 1. créer clef SSH :
# ssh-keygen -C "hydra@pedro.dubronetwork.fr" -N "" -f /etc/nixos/id_buildfarm
# 2. récupérer la clef publique du serveur ssh + l'ajouter dans les `knownHosts` :
# ssh-keyscan localhost
# 3. créer un utilisateur pour gérer hydra
# su - hydra
# hydra-create-user jpierre03 --password xxx --role 'admin'
# 4. relancer hydra
# 5. ajouter un vhost à nginx
# 6. relancer nginx
# 7. le service accessible à hydra.<nom de machine>
## Tutoriel
# * https://github.com/peti/hydra-tutorial
# Services
## Hydra
services.hydra = {
enable = true;
hydraURL = "http://hydra.${config.networking.fqdn}";
notificationSender = "hydra@${config.networking.fqdn}";
listenHost = "localhost";
minimumDiskFree = 50; # Go
smtpHost = "localhost";
#package = hydra-src-pkg ;
};
systemd.services.hydra-evaluator.serviceConfig.Nice = -19;
#systemd.services.hydra-evaluator = {
# path = [ pkgs.nettools config.services.hydra.package ];
#};
## Ménage
#nix.gc.automatic = true;
## Délégation des actions de compilation à la ferme de compilation
### Machines connues
programs.ssh.knownHosts = {
"hydra.prunetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDYrZu31+/ybhel7LNPNgsALEoMHwTc1OiTcmJnXZ3He";
"monstre.dubronetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBTTrLhq1Cwm0rpnwEIxSLqVrJWZnt+/9dt+SKd8NiIc";
"pedro.dubronetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM7fjo2ysLqlfSo6BKnc6I6m1ayoPrbwEEyTKZmUzsOD";
"ocean.prunetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINCaRuTl8iCTUE4XInOpkSlwQj5Re4w4Iq+gNIlJe8pA";
"radx.prunetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGyoXdTEnxSgZTMfRfVH+bpOGZJtJpydAijcRGsZik7U";
"rollo.dubronetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID4lWgS/sVdcZvnAAN+lBSOcCL9ISdAUsjp1kh9lalNu";
};
### La liste des machines utilisées
nix = {
distributedBuilds = false;
buildMachines = [
# { hostName = "pedro.dubronetwork.fr"; maxJobs = 5; speedFactor = 10; sshKey = "/etc/nixos/id_buildfarm"; sshUser = "root"; system = "x86_64-linux"; }
];
extraOptions = "auto-optimise-store = true";
};
}

@ -0,0 +1,33 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.kibana {
# Paquets
environment.systemPackages = with pkgs; [
];
# Services
# K : http://localhost:8000
services.kibana = {
enable = true;
elasticsearch.url = "http://127.0.0.1:9200";
port = 8000;
};
# Réseau
# -> Aucun port n'est ouvert caril est recommandé de mettre un proxy HTTP devant
networking.firewall = {
allowedTCPPorts = [
];
allowedUDPPorts = [
];
};
}

@ -0,0 +1,17 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
mkIf flags.locate {
# Services
services.locate = {
enable = true;
interval = "hourly";
};
}

@ -0,0 +1,86 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.fqdn}";
flags = currentMachine.configurationFlags;
in
# TODO: changer adresse mail
mkIf flags.munin {
# Paquets
environment.systemPackages = with pkgs; [
bc
mailutils
];
# Services
## Noeud de supervision munin = pas de stockage des données locales
services.munin-node = {
enable = true;
extraConfig = ''
# Ignore the apc_nis plugin, as it throws errors as I don't have an UPS.
# It's there because munin-node-configure is called with the contrib group,
# and the plugin has no method to check whether there's a compatible UPS available.
ignore_file ^apc_nis$
ignore_file ^sensors_-wrapped$
ignore_file ^.sensors_-wrapped$
'';
extraPlugins = {
chrony = /etc/nixos/base/services/munin-chrony;
chrony_tracking_stratum = /etc/nixos/base/services/munin-chrony-tracking-stratum;
chrony_tracking_ppm = /etc/nixos/base/services/munin-chrony-tracking-ppm;
chrony_tracking_time_ = /etc/nixos/base/services/munin-chrony-tracking-time;
chrony_tracking_time_root = /etc/nixos/base/services/munin-chrony-tracking-time-root;
chrony_tracking_update_time = /etc/nixos/base/services/munin-chrony-tracking-update-time;
};
};
systemd.services.munin-node = {
path = with pkgs; [ munin lm_sensors ];
serviceConfig.TimeoutStartSec = "3min";
};
users.extraUsers.munin = {
#extraGroups = [ "postfix" "root" ];
extraGroups = [ "postfix" ];
};
# chmod a+rX -Rv /var/lib/postfix/queue/
## Munin server -- generate /var/www/munin
services.munin-cron = {
enable = true;
hosts = ''
[${config.networking.fqdn}]
address 127.0.0.1
df._dev_sda2.warning 35
use_node_name yes
#contacts syslog
contacts email
'';
# http://sametmax.com/monitorez-vos-serveurs-avec-munin-et-notifications-par-email/
# http://guide.munin-monitoring.org/en/latest/tutorial/alert.html#syntax-of-warning-and-critical
extraGlobalConfig = ''
#---
#contact.email.command ${pkgs.mutt}/bin/mutt -F /etc/nixos/base/services/munin-muttrc -s "Munin notification for ${config.networking.fqdn}" root@ocean.prunetwork.fr
contact.email.command /run/current-system/sw/bin/mutt -F /etc/nixos/base/services/munin-muttrc -s "Munin notification for ${config.networking.fqdn}" root@ocean.prunetwork.fr
contact.syslog.command /run/current-system/sw/bin/logger -p user.crit -t "Munin notification for ${config.networking.fqdn}"
#---
contact.email.always_send ok,warning,critical,unknown
contact.syslog.always_send ok,warning,critical,unknown
'';
};
# Réseau
networking.firewall = {
allowedTCPPorts = [
#8000
];
allowedUDPPorts = [
];
};
}

@ -0,0 +1,123 @@
#!/bin/sh
: <<=cut
=head1 NAME
parse Chrony Tracking output for timeserver status information
=head1 APPLICABLE SYSTEMS
Any system with a local chronyd service.
=head1 CONFIGURATION
No configuration.
=head1 MAGIC MARKERS
#%# family=auto
#%# capabilities=autoconf
=head1 VERSION
Revision 0.1 2008/08/23 13:06:00 joti
First version only chronyc tracking, autodetection included.
Revision 0.2 2008/10/11 16:09:00 joti
Added scaling of other values to match with frequency, added more description to fields
Revision 0.3 2014/02/16 zjttoefs
reduce forking by using awk
do not limit output precision
add stratum monitoring
detect slow/fast time or freqency and adjust sign of value accordingly
remove commented out code
Revision 0.4 2016/11/10 Lars Kruse
rewrite field handling
use "which" for "chronyc" location
switch from "bash" to "sh"
fix exit code of failing "autoconf"
=head1 AUTHOR
joti
zjttoefs
Lars Kruse <devel@sumpfralle.de>
=cut
CHRONYC="$(which chronyc | head -1)"
# Frequency has extremely higher values than other. Therefore they are fitted by scaling via suitable factors.
# field definitions:
# - munin fieldname
# - factor for graph visualization (all values are supposed to reach a similar dimension)
# - regular expression of the chrony output line (may not contain whitespace, case insensitive)
# - label (may include "%d" for including the factor; may contain whitespace)
fields="stratum 1 ^Stratum Stratum
systime 1000000 ^System.time System Time (us)
offsetlast 1000000 ^Last.offset Last Offset (us)
offsetrms 1000000 ^RMS.offset RMS Offset (us)
frequency 1 ^Frequency Frequency (ppm)
residualfreq 1 ^Residual.freq Residual Freq (ppm)
skew 1 ^Skew Skew (ppm)
rootdelay 1000000 ^Root.delay Root Delay (us)
rootdispersion 1000000 ^Root.dispersion Root Dispersion (us)
updateinterval 1 ^Update.interval Update Interval (s)"
# chrony example output (v2.4.1):
# Reference ID : 131.188.3.221 (ntp1.rrze.uni-erlangen.de)
# Stratum : 2
# Ref time (UTC) : Thu Nov 10 22:39:50 2016
# System time : 0.000503798 seconds slow of NTP time
# Last offset : +0.000254355 seconds
# RMS offset : 0.002186779 seconds
# Frequency : 17.716 ppm slow
# Residual freq : +0.066 ppm
# Skew : 4.035 ppm
# Root delay : 0.042980 seconds
# Root dispersion : 0.005391 seconds
# Update interval : 258.4 seconds
# Leap status : Normal
if [ "$1" = "autoconf" ]; then
if [ -n "$CHRONYC" ] && [ -x "$CHRONYC" ]; then
echo yes
else
echo "no (missing 'chronyc' executable)"
fi
exit 0
fi
if [ "$1" = "config" ]; then
echo 'graph_title Chrony Tracking Stats'
echo 'graph_args --base 1000 -l 0'
echo 'graph_vlabel (time,ppm)'
echo 'graph_category time'
echo 'graph_scale no'
echo "$fields" | while read fieldname factor regex label; do
# insert the factor, if "%d" is part of the label
printf "${fieldname}.label $label\n" "$factor"
echo "${fieldname}.type GAUGE"
done
exit 0
fi
chrony_status="$("$CHRONYC" tracking)"
echo "$fields" | while read fieldname factor regex label; do
status_line="$(echo "$chrony_status" | grep -i -- "$regex " | cut -d ":" -f 2-)"
if [ -z "$status_line" ]; then
value="U"
else
# the keyword "slow" indicates negative values
value="$(echo "$status_line" | awk '{ /slow/ ? SIGN=-1 : SIGN=1; print $1 * SIGN * '"$factor"' }')"
fi
echo "${fieldname}.value $value"
done

@ -0,0 +1,116 @@
#!/bin/sh
: <<=cut
=head1 NAME
parse Chrony Tracking output for timeserver status information
=head1 APPLICABLE SYSTEMS
Any system with a local chronyd service.
=head1 CONFIGURATION
No configuration.
=head1 MAGIC MARKERS
#%# family=auto
#%# capabilities=autoconf
=head1 VERSION
Revision 0.1 2008/08/23 13:06:00 joti
First version only chronyc tracking, autodetection included.
Revision 0.2 2008/10/11 16:09:00 joti
Added scaling of other values to match with frequency, added more description to fields
Revision 0.3 2014/02/16 zjttoefs
reduce forking by using awk
do not limit output precision
add stratum monitoring
detect slow/fast time or freqency and adjust sign of value accordingly
remove commented out code
Revision 0.4 2016/11/10 Lars Kruse
rewrite field handling
use "which" for "chronyc" location
switch from "bash" to "sh"
fix exit code of failing "autoconf"
=head1 AUTHOR
joti
zjttoefs
Lars Kruse <devel@sumpfralle.de>
=cut
CHRONYC="$(which chronyc | head -1)"
# Frequency has extremely higher values than other. Therefore they are fitted by scaling via suitable factors.
# field definitions:
# - munin fieldname
# - factor for graph visualization (all values are supposed to reach a similar dimension)
# - regular expression of the chrony output line (may not contain whitespace, case insensitive)
# - label (may include "%d" for including the factor; may contain whitespace)
fields="frequency 1 ^Frequency Local Clock Frequency Drift (ppm)
residualfreq 1 ^Residual.freq Residual Freq (ppm)
skew 1 ^Skew Skew (ppm)"
# chrony example output (v2.4.1):
# Reference ID : 131.188.3.221 (ntp1.rrze.uni-erlangen.de)
# Stratum : 2
# Ref time (UTC) : Thu Nov 10 22:39:50 2016
# System time : 0.000503798 seconds slow of NTP time
# Last offset : +0.000254355 seconds
# RMS offset : 0.002186779 seconds
# Frequency : 17.716 ppm slow
# Residual freq : +0.066 ppm
# Skew : 4.035 ppm
# Root delay : 0.042980 seconds
# Root dispersion : 0.005391 seconds
# Update interval : 258.4 seconds
# Leap status : Normal
if [ "$1" = "autoconf" ]; then
if [ -n "$CHRONYC" ] && [ -x "$CHRONYC" ]; then
echo yes
else
echo "no (missing 'chronyc' executable)"
fi
exit 0
fi
if [ "$1" = "config" ]; then
echo 'graph_title Chrony Tracking Stats - Frequencies stability'
echo 'graph_args --base 1000 -l 0'
echo 'graph_vlabel (ppm)'
echo 'graph_category time'
echo 'graph_scale no'
echo "$fields" | while read fieldname factor regex label; do
# insert the factor, if "%d" is part of the label
printf "${fieldname}.label $label\n" "$factor"
echo "${fieldname}.type GAUGE"
done
exit 0
fi
chrony_status="$("$CHRONYC" tracking)"
echo "$fields" | while read fieldname factor regex label; do
status_line="$(echo "$chrony_status" | grep -i -- "$regex " | cut -d ":" -f 2-)"
if [ -z "$status_line" ]; then
value="U"
else
# the keyword "slow" indicates negative values
value="$(echo "$status_line" | awk '{ /slow/ ? SIGN=-1 : SIGN=1; print $1 * SIGN * '"$factor"' }')"
fi
echo "${fieldname}.value $value"
done

@ -0,0 +1,116 @@
#!/bin/sh
: <<=cut
=head1 NAME
parse Chrony Tracking output for timeserver status information
=head1 APPLICABLE SYSTEMS
Any system with a local chronyd service.
=head1 CONFIGURATION
No configuration.
=head1 MAGIC MARKERS
#%# family=auto
#%# capabilities=autoconf
=head1 VERSION
Revision 0.1 2008/08/23 13:06:00 joti
First version only chronyc tracking, autodetection included.
Revision 0.2 2008/10/11 16:09:00 joti
Added scaling of other values to match with frequency, added more description to fields
Revision 0.3 2014/02/16 zjttoefs
reduce forking by using awk
do not limit output precision
add stratum monitoring
detect slow/fast time or freqency and adjust sign of value accordingly
remove commented out code
Revision 0.4 2016/11/10 Lars Kruse
rewrite field handling
use "which" for "chronyc" location
switch from "bash" to "sh"
fix exit code of failing "autoconf"
=head1 AUTHOR
joti
zjttoefs
Lars Kruse <devel@sumpfralle.de>
=cut
CHRONYC="$(which chronyc | head -1)"
# Frequency has extremely higher values than other. Therefore they are fitted by scaling via suitable factors.
# field definitions:
# - munin fieldname
# - factor for graph visualization (all values are supposed to reach a similar dimension)
# - regular expression of the chrony output line (may not contain whitespace, case insensitive)
# - label (may include "%d" for including the factor; may contain whitespace)
fields="stratum 1 ^Stratum Stratum"
# chrony example output (v2.4.1):
# Reference ID : 131.188.3.221 (ntp1.rrze.uni-erlangen.de)
# Stratum : 2
# Ref time (UTC) : Thu Nov 10 22:39:50 2016
# System time : 0.000503798 seconds slow of NTP time
# Last offset : +0.000254355 seconds
# RMS offset : 0.002186779 seconds
# Frequency : 17.716 ppm slow
# Residual freq : +0.066 ppm
# Skew : 4.035 ppm
# Root delay : 0.042980 seconds
# Root dispersion : 0.005391 seconds
# Update interval : 258.4 seconds
# Leap status : Normal
if [ "$1" = "autoconf" ]; then
if [ -n "$CHRONYC" ] && [ -x "$CHRONYC" ]; then
echo yes
else
echo "no (missing 'chronyc' executable)"
fi
exit 0
fi
if [ "$1" = "config" ]; then
echo 'graph_title Chrony Tracking Stats - Stratum'
echo 'graph_args --base 1000 -l 0'
echo 'graph_vlabel (stratum)'
echo 'graph_category time'
echo 'graph_scale no'
echo 'stratum.warning 8'
echo 'stratum.critical 11'
echo "$fields" | while read fieldname factor regex label; do
# insert the factor, if "%d" is part of the label
printf "${fieldname}.label $label\n" "$factor"
echo "${fieldname}.type GAUGE"
done
exit 0
fi
chrony_status="$("$CHRONYC" tracking)"
echo "$fields" | while read fieldname factor regex label; do
status_line="$(echo "$chrony_status" | grep -i -- "$regex " | cut -d ":" -f 2-)"
if [ -z "$status_line" ]; then
value="U"
else
# the keyword "slow" indicates negative values
value="$(echo "$status_line" | awk '{ /slow/ ? SIGN=-1 : SIGN=1; print $1 * SIGN * '"$factor"' }')"
fi
echo "${fieldname}.value $value"
done

@ -0,0 +1,118 @@
#!/bin/sh
: <<=cut
=head1 NAME
parse Chrony Tracking output for timeserver status information
=head1 APPLICABLE SYSTEMS
Any system with a local chronyd service.
=head1 CONFIGURATION
No configuration.
=head1 MAGIC MARKERS
#%# family=auto
#%# capabilities=autoconf
=head1 VERSION
Revision 0.1 2008/08/23 13:06:00 joti
First version only chronyc tracking, autodetection included.
Revision 0.2 2008/10/11 16:09:00 joti
Added scaling of other values to match with frequency, added more description to fields
Revision 0.3 2014/02/16 zjttoefs
reduce forking by using awk
do not limit output precision
add stratum monitoring
detect slow/fast time or freqency and adjust sign of value accordingly
remove commented out code
Revision 0.4 2016/11/10 Lars Kruse
rewrite field handling
use "which" for "chronyc" location
switch from "bash" to "sh"
fix exit code of failing "autoconf"
=head1 AUTHOR
joti
zjttoefs
Lars Kruse <devel@sumpfralle.de>
=cut
CHRONYC="$(which chronyc | head -1)"
# Frequency has extremely higher values than other. Therefore they are fitted by scaling via suitable factors.
# field definitions:
# - munin fieldname
# - factor for graph visualization (all values are supposed to reach a similar dimension)
# - regular expression of the chrony output line (may not contain whitespace, case insensitive)
# - label (may include "%d" for including the factor; may contain whitespace)
fields="systime 1000000 ^System.time System Time (us)
offsetlast 1000000 ^Last.offset Last Offset (us)
offsetrms 1000000 ^RMS.offset RMS Offset (us)
rootdelay 1000000 ^Root.delay Root Delay (us)
rootdispersion 1000000 ^Root.dispersion Root Dispersion (us)"
# chrony example output (v2.4.1):
# Reference ID : 131.188.3.221 (ntp1.rrze.uni-erlangen.de)
# Stratum : 2
# Ref time (UTC) : Thu Nov 10 22:39:50 2016
# System time : 0.000503798 seconds slow of NTP time
# Last offset : +0.000254355 seconds
# RMS offset : 0.002186779 seconds
# Frequency : 17.716 ppm slow
# Residual freq : +0.066 ppm
# Skew : 4.035 ppm
# Root delay : 0.042980 seconds
# Root dispersion : 0.005391 seconds
# Update interval : 258.4 seconds
# Leap status : Normal
if [ "$1" = "autoconf" ]; then
if [ -n "$CHRONYC" ] && [ -x "$CHRONYC" ]; then
echo yes
else
echo "no (missing 'chronyc' executable)"
fi
exit 0
fi
if [ "$1" = "config" ]; then
echo 'graph_title Chrony Tracking Stats - Time'
echo 'graph_args --base 1000 -l 0'
echo 'graph_vlabel (time)'
echo 'graph_category time'
echo 'graph_scale no'
echo "$fields" | while read fieldname factor regex label; do
# insert the factor, if "%d" is part of the label
printf "${fieldname}.label $label\n" "$factor"
echo "${fieldname}.type GAUGE"
done
exit 0
fi
chrony_status="$("$CHRONYC" tracking)"
echo "$fields" | while read fieldname factor regex label; do
status_line="$(echo "$chrony_status" | grep -i -- "$regex " | cut -d ":" -f 2-)"
if [ -z "$status_line" ]; then
value="U"
else
# the keyword "slow" indicates negative values
value="$(echo "$status_line" | awk '{ /slow/ ? SIGN=-1 : SIGN=1; print $1 * SIGN * '"$factor"' }')"
fi
echo "${fieldname}.value $value"
done

@ -0,0 +1,115 @@
#!/bin/sh
: <<=cut
=head1 NAME
parse Chrony Tracking output for timeserver status information
=head1 APPLICABLE SYSTEMS
Any system with a local chronyd service.
=head1 CONFIGURATION
No configuration.
=head1 MAGIC MARKERS
#%# family=auto
#%# capabilities=autoconf
=head1 VERSION
Revision 0.1 2008/08/23 13:06:00 joti
First version only chronyc tracking, autodetection included.
Revision 0.2 2008/10/11 16:09:00 joti
Added scaling of other values to match with frequency, added more description to fields
Revision 0.3 2014/02/16 zjttoefs
reduce forking by using awk
do not limit output precision
add stratum monitoring
detect slow/fast time or freqency and adjust sign of value accordingly
remove commented out code
Revision 0.4 2016/11/10 Lars Kruse
rewrite field handling
use "which" for "chronyc" location
switch from "bash" to "sh"
fix exit code of failing "autoconf"
=head1 AUTHOR
joti
zjttoefs
Lars Kruse <devel@sumpfralle.de>
=cut
CHRONYC="$(which chronyc | head -1)"
# Frequency has extremely higher values than other. Therefore they are fitted by scaling via suitable factors.
# field definitions:
# - munin fieldname
# - factor for graph visualization (all values are supposed to reach a similar dimension)
# - regular expression of the chrony output line (may not contain whitespace, case insensitive)
# - label (may include "%d" for including the factor; may contain whitespace)
fields="rootdelay 1000000 ^Root.delay Root Delay (us)
rootdispersion 1000000 ^Root.dispersion Root Dispersion (us)"
# chrony example output (v2.4.1):
# Reference ID : 131.188.3.221 (ntp1.rrze.uni-erlangen.de)
# Stratum : 2
# Ref time (UTC) : Thu Nov 10 22:39:50 2016
# System time : 0.000503798 seconds slow of NTP time
# Last offset : +0.000254355 seconds
# RMS offset : 0.002186779 seconds
# Frequency : 17.716 ppm slow
# Residual freq : +0.066 ppm
# Skew : 4.035 ppm
# Root delay : 0.042980 seconds
# Root dispersion : 0.005391 seconds
# Update interval : 258.4 seconds
# Leap status : Normal
if [ "$1" = "autoconf" ]; then
if [ -n "$CHRONYC" ] && [ -x "$CHRONYC" ]; then
echo yes
else
echo "no (missing 'chronyc' executable)"
fi
exit 0
fi
if [ "$1" = "config" ]; then
echo 'graph_title Chrony Tracking Stats - Root Time'
echo 'graph_args --base 1000 -l 0'
echo 'graph_vlabel (time)'
echo 'graph_category time'
echo 'graph_scale no'
echo "$fields" | while read fieldname factor regex label; do
# insert the factor, if "%d" is part of the label
printf "${fieldname}.label $label\n" "$factor"
echo "${fieldname}.type GAUGE"
done
exit 0
fi
chrony_status="$("$CHRONYC" tracking)"
echo "$fields" | while read fieldname factor regex label; do
status_line="$(echo "$chrony_status" | grep -i -- "$regex " | cut -d ":" -f 2-)"
if [ -z "$status_line" ]; then
value="U"
else
# the keyword "slow" indicates negative values
value="$(echo "$status_line" | awk '{ /slow/ ? SIGN=-1 : SIGN=1; print $1 * SIGN * '"$factor"' }')"
fi
echo "${fieldname}.value $value"
done

@ -0,0 +1,114 @@
#!/bin/sh
: <<=cut
=head1 NAME
parse Chrony Tracking output for timeserver status information
=head1 APPLICABLE SYSTEMS
Any system with a local chronyd service.
=head1 CONFIGURATION
No configuration.
=head1 MAGIC MARKERS
#%# family=auto
#%# capabilities=autoconf
=head1 VERSION
Revision 0.1 2008/08/23 13:06:00 joti
First version only chronyc tracking, autodetection included.
Revision 0.2 2008/10/11 16:09:00 joti
Added scaling of other values to match with frequency, added more description to fields
Revision 0.3 2014/02/16 zjttoefs
reduce forking by using awk
do not limit output precision
add stratum monitoring
detect slow/fast time or freqency and adjust sign of value accordingly
remove commented out code
Revision 0.4 2016/11/10 Lars Kruse
rewrite field handling
use "which" for "chronyc" location
switch from "bash" to "sh"
fix exit code of failing "autoconf"
=head1 AUTHOR
joti
zjttoefs
Lars Kruse <devel@sumpfralle.de>
=cut
CHRONYC="$(which chronyc | head -1)"
# Frequency has extremely higher values than other. Therefore they are fitted by scaling via suitable factors.
# field definitions:
# - munin fieldname
# - factor for graph visualization (all values are supposed to reach a similar dimension)
# - regular expression of the chrony output line (may not contain whitespace, case insensitive)
# - label (may include "%d" for including the factor; may contain whitespace)
fields="updateinterval 1 ^Update.interval Update Interval (s)"
# chrony example output (v2.4.1):
# Reference ID : 131.188.3.221 (ntp1.rrze.uni-erlangen.de)
# Stratum : 2
# Ref time (UTC) : Thu Nov 10 22:39:50 2016
# System time : 0.000503798 seconds slow of NTP time
# Last offset : +0.000254355 seconds
# RMS offset : 0.002186779 seconds
# Frequency : 17.716 ppm slow
# Residual freq : +0.066 ppm
# Skew : 4.035 ppm
# Root delay : 0.042980 seconds
# Root dispersion : 0.005391 seconds
# Update interval : 258.4 seconds
# Leap status : Normal
if [ "$1" = "autoconf" ]; then
if [ -n "$CHRONYC" ] && [ -x "$CHRONYC" ]; then
echo yes
else
echo "no (missing 'chronyc' executable)"
fi
exit 0
fi
if [ "$1" = "config" ]; then
echo 'graph_title Chrony Tracking Stats - Update interval'
echo 'graph_args --base 1000 -l 0'
echo 'graph_vlabel (time)'
echo 'graph_category time'
echo 'graph_scale no'
echo "$fields" | while read fieldname factor regex label; do
# insert the factor, if "%d" is part of the label
printf "${fieldname}.label $label\n" "$factor"
echo "${fieldname}.type GAUGE"
done
exit 0
fi
chrony_status="$("$CHRONYC" tracking)"
echo "$fields" | while read fieldname factor regex label; do
status_line="$(echo "$chrony_status" | grep -i -- "$regex " | cut -d ":" -f 2-)"
if [ -z "$status_line" ]; then
value="U"
else
# the keyword "slow" indicates negative values
value="$(echo "$status_line" | awk '{ /slow/ ? SIGN=-1 : SIGN=1; print $1 * SIGN * '"$factor"' }')"
fi
echo "${fieldname}.value $value"
done

@ -0,0 +1,3 @@
set copy=no
set realname = "Munin daemon"

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save