Compare commits

...

208 Commits

Author SHA1 Message Date
Yves Dubromelle
40426c1ad2 déplacement de la configuration à la racine du dépôt (sauf rc.lua) 2017-03-25 00:25:30 +01:00
Yves Dubromelle
c1d112a10a suite du tri dans public/ 2017-03-25 00:11:05 +01:00
Yves Dubromelle
9997092984 oops: munin-muttrc n'a pas suivi son fichier .nix 2017-03-25 00:08:22 +01:00
Yves Dubromelle
da41826e33 découpage des applications par défaut 2017-03-25 00:05:47 +01:00
Yves Dubromelle
708e5fcbce tri à la racine de public/ 2017-03-24 23:57:40 +01:00
Yves Dubromelle
097472cca0 tri de la catégorie applications 2017-03-24 23:43:14 +01:00
Yves Dubromelle
eeb4543f1f TADA ! retour de l'activation de xserver dans le template :) 2017-03-24 23:29:32 +01:00
Yves Dubromelle
4660f79017 refactor de la configuration spécifique aux laptops 2017-03-24 23:25:46 +01:00
Yves Dubromelle
3963027f04 isDesktop -> isDesktopEnvironment + groupes de logiciels 2017-03-24 23:14:20 +01:00
Yves Dubromelle
156cbc8c27 scanner sorti du profil desktop par défaut 2017-03-24 22:51:01 +01:00
Yves Dubromelle
a51024633f option à part pour pulseaudio 2017-03-24 22:30:01 +01:00
Yves Dubromelle
c8f8ad898d suppression des préfixes app et service 2017-03-24 22:25:34 +01:00
Yves Dubromelle
937565f885 déplacement naïf dans "applications" et "services" 2017-03-24 22:21:44 +01:00
Yves Dubromelle
15ce896f9c bon numéro de version nixos 2017-03-24 22:15:59 +01:00
348433e395 ajout service hoogle local pour profil dev-haskell 2017-03-20 21:29:21 +01:00
f1c02b0625 fix: erreur de nomage 2017-03-15 17:16:43 +01:00
0ffecb8804 option smokeping + activation pour serveurs 2017-03-15 17:16:20 +01:00
ac76e6e62b dev: ajout editeur atom 2017-03-13 23:55:47 +01:00
5a7ad25615 désactivation gitg 2017-03-13 23:55:34 +01:00
Yves Dubromelle
c3c7581a3e rollo: active virtualbox 2017-03-10 17:41:36 +01:00
e80018e273 radx: essai de faire une VM de build compatible hydra 2017-03-10 12:49:35 +01:00
b829e708a0 la machine hydra est serveur nix-serve 2017-03-10 12:37:04 +01:00
3297760d21 ajout systat pour les statistiques disque 2017-03-10 12:04:56 +01:00
b983832308 hydra-builder: suppression de la configuration utilisateur (spécifique machine) 2017-03-10 11:32:34 +01:00
db66626208 ocean est un hydra builder 2017-03-10 11:29:03 +01:00
Yves Dubromelle
14e9ddbc13 set JAVA_HOME 2017-03-09 23:32:55 +01:00
Yves Dubromelle
c96c981d20 retour à openjdk, problèmes avec zulu 2017-03-09 21:55:54 +01:00
4535ccf03c fix: oubli virgule 2017-03-06 09:51:07 +01:00
7bc21c0dc8 awesome: ajout 2nd script pour xrandr 2017-03-05 19:07:48 +01:00
Yves Dubromelle
3f74486951 nix-serve: latitude peut aussi être un client nix-serve 2017-03-05 15:33:31 +01:00
Yves Dubromelle
0dae9aef3c haskell: ajout ghc-mod 2017-03-05 15:14:25 +01:00
Yves Dubromelle
1a3e8f4528 tinc-hydra: ajout comme remote possible 2017-03-05 15:03:23 +01:00
Yves Dubromelle
b1d3ee4aae hydra: adresse tinc en .9 2017-03-05 14:48:59 +01:00
e2178821d8 haskell: extraction du prefixe commun 2017-03-04 17:20:03 +01:00
1e00db3864 haskell: commentaires 2017-03-04 17:17:19 +01:00
System administrator
3364f19ed7 xmonad: variable pour java et trayer 2017-03-04 13:41:42 +01:00
es006
c10d2c6d63 le script byobu va chercher la liste des sous modules 2017-03-04 12:15:57 +01:00
8dd973ede1 inutile 2017-03-03 21:36:45 +01:00
aeeea3a743 la clef du serveur hydra a changée 2017-03-03 16:00:51 +01:00
3b76bd00af Merge branch 'master' into nixos-unstable 2017-03-02 20:07:51 +01:00
e74a1825d9 backport from master 2017-03-02 19:48:11 +01:00
Yves Dubromelle
b47c6807d1 activation nix-serve pour les serveurs online 2017-03-02 18:56:05 +01:00
Yves Dubromelle
a4728792b2 les noms pour les machines dubro n'était pas dans config-generator 2017-03-02 18:51:14 +01:00
Yves Dubromelle
4c4c2fed3e fix: le nom de rollo n'était pas défini 2017-03-02 18:49:07 +01:00
93254f45c0 Mettre à jour 'README.md' 2017-03-02 17:27:05 +00:00
c1ce935adb Mettre à jour 'README.md' 2017-03-02 17:22:36 +00:00
e68cbcd8b9 Mettre à jour 'README.md' 2017-03-02 17:19:33 +00:00
ac39a52fd7 Mettre à jour 'README.md' 2017-03-02 17:16:43 +00:00
3dc8184bca formatage 2017-03-02 16:47:46 +01:00
24ef44b100 ajout notes pour installation machine chez online 2017-03-02 16:42:23 +01:00
9e9ea00cd2 Mettre à jour 'README.md' 2017-03-02 13:59:09 +00:00
464da39592 glances en python 3 refuse de compiler. Il reste celui en python2 2017-03-02 14:56:49 +01:00
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
2017-03-02 14:47:03 +01:00
Yves Dubromelle
2f99508331 ajout todo sur config-generator 2017-03-02 00:09:56 +01:00
Yves Dubromelle
b6a7f50ebd ajout de todo 2017-03-01 23:58:43 +01:00
Yves Dubromelle
2fdaf24fae déplacement de la config desktop vers les endroits quivontbien(c) dans public 2017-03-01 23:29:21 +01:00
Yves Dubromelle
c193d944d9 déplacement de la config xmonad vers public 2017-03-01 23:16:24 +01:00
Yves Dubromelle
7750d1a266 déplacement de la config du résolveur dns vers private + purge base 2017-03-01 23:01:09 +01:00
Yves Dubromelle
08195188b2 déplacement de nix-serve et fail2ban dans private 2017-03-01 22:52:34 +01:00
Yves Dubromelle
b12e1f9ae5 déplacement des users vers private 2017-03-01 22:30:51 +01:00
Yves Dubromelle
d0b3497ccb htop s'ouvre dans byobu 2017-03-01 21:59:42 +01:00
Yves Dubromelle
ba0d43670d la dernière série d'onglets byobu lance une commande 2017-03-01 21:59:09 +01:00
06aaf3cc23 comment 2017-03-01 21:37:13 +01:00
0e1a1b0107 déplacement config claws & mumble 2017-03-01 17:45:18 +01:00
c500c59732 déplacement des polices 2017-03-01 17:44:16 +01:00
9e3b1d163f déplacement paquets 2017-03-01 17:42:49 +01:00
9bdaae4593 typo 2017-03-01 17:39:16 +01:00
1a80e445ce ajout squelette pour unifier desktop/ 2017-03-01 17:37:22 +01:00
50d486565c inutile 2017-03-01 17:33:16 +01:00
b6cf3b2674 déplacement samba 2017-03-01 17:33:08 +01:00
c0427bb622 byoby: ajout commentaires + utilisation de boucles 2017-03-01 17:00:31 +01:00
Yves Dubromelle
5be0164cb9 script + variable d'environment pour une session byobu d'adminsys 2017-02-27 23:42:23 +01:00
System administrator
493249ebd3 clef ssh taeradan de la VM capgemini 2017-02-27 16:28:55 +01:00
System administrator
9d0c04810c clef ssh taeradan de la VM capgemini 2017-02-27 15:55:27 +01:00
Yves Dubromelle
e5de46f1d3 zulu: distribution openjdk 2017-02-26 22:13:01 +01:00
Yves Dubromelle
2a2c0a56fe munin: with pkgs 2017-02-26 22:04:41 +01:00
8ef6642024 munin: augmentation du délais de demarrage 2017-02-25 21:28:09 +01:00
e77df9816d munin: configuration de l'envois de mail 2017-02-25 20:53:34 +01:00
Yves Dubromelle
ba09f97684 setuid: smokeping 2017-02-25 15:22:55 +01:00
Yves Dubromelle
b0696f1983 sudo: inutile :) 2017-02-25 15:16:06 +01:00
Yves Dubromelle
2d9c9415a2 setuid: mtr 2017-02-25 15:13:07 +01:00
Yves Dubromelle
7e7736b631 setuid: udevil 2017-02-25 15:08:23 +01:00
Yves Dubromelle
52670ebd9c setuid: slock 2017-02-25 15:03:33 +01:00
Yves Dubromelle
8845300555 awesome: activation du raccourci xrandr-auto + au démarrage 2017-02-25 11:51:16 +01:00
dce783708c désactivation modification IO scheduler pour SSD 2017-02-20 22:23:13 +01:00
f2305d0a81 tinc: ajout @IP dubro vivo 2017-02-20 22:22:51 +01:00
a6e957afae ménage config-generator 2017-02-20 22:21:00 +01:00
edfac07129 pru: + de paquets par défaut 2017-02-20 22:20:39 +01:00
7799eb106f haskell: ajout threadscope pour analyser les logs d'application 2017-02-19 21:28:58 +01:00
e0a468bfeb fix port 2017-02-19 18:27:35 +01:00
c4013be348 typo 2017-02-19 18:22:27 +01:00
6cdd621db2 erreur DNS pour grudu. utilisation @IPv4 2017-02-19 18:20:12 +01:00
a5bfdbcd3d activation nix-serve-client {ocean, rollo} 2017-02-19 18:13:12 +01:00
5b954581db activation nix-serve client entre les serveurs online 2017-02-19 18:11:29 +01:00
ca11b46674 activation serveur nix-serve sur machines en salle machine 2017-02-19 18:08:28 +01:00
Yves Dubromelle
754a1ec934 nix-server: ajout de monstre 2017-02-12 22:58:00 +01:00
Yves Dubromelle
80f7b32af6 phenom: est un client nix-serve 2017-02-12 22:38:04 +01:00
Yves Dubromelle
5cd1cd0e6f phenom: desactivation de latitude comme source nix-serve 2017-02-12 22:10:30 +01:00
Yves Dubromelle
fae4a8237c /run/current-system/sw/bin/bash: q : commande introuvable 2017-02-12 22:06:38 +01:00
Yves Dubromelle
5f09c0896d ajout de machines fixes comme serveur nix 2017-02-12 22:04:08 +01:00
Yves Dubromelle
2244b917ac radx: activation nix-server 2017-02-12 22:00:48 +01:00
458362bece git: alias d'affichage des branches triées par date de modification 2017-02-11 01:42:45 +01:00
b4b213e836 client internet: ajout de quassel simple pour se connecter sans bouncer 2017-02-11 01:41:33 +01:00
cc7f911141 radx: activation postgresql 2017-02-11 01:41:14 +01:00
4ffd71f10f haskell: ajout hlint 2017-02-11 01:40:48 +01:00
Yves Dubromelle
07cf33a086 police hasklig 2017-02-04 13:44:11 +01:00
f3741782e3 munin: réduction du temps d'attente au lancement. On verra s'il est suffisant 2017-02-02 16:14:32 +01:00
b8c3447767 fix: syntax 2017-02-01 13:40:33 +01:00
eb3a945c7c prunetwork: disable hydra 2017-02-01 02:18:35 +01:00
6f19fdec07 ajout de time devant les commandes nix potentiellement longues 2017-01-31 13:10:55 +01:00
91e81d50a6 radx: profils de dev 2017-01-31 12:43:32 +01:00
Yves Dubromelle
293dd76025 profil pour Elm (et plugin vim) 2017-01-30 21:35:53 +01:00
65a21c197c ajout hostname pour {radx, hydra, ocean} 2017-01-29 23:56:58 +01:00
Yves Dubromelle
c11cd5d456 formatage 2017-01-29 23:34:52 +01:00
Yves Dubromelle
805ef707f5 fix: plus de matching sur le hostname, is<machine> à mettre à true dans configuration.nix 2017-01-29 23:31:44 +01:00
Yves Dubromelle
1ee426f50a hostname dans le config-generator pour phenom 2017-01-29 23:29:50 +01:00
Yves Dubromelle
0bcd327679 -hydra pour phenom 2017-01-29 23:28:53 +01:00
04c3397ff3 suppression de la variable enable car toujours à vraie 2017-01-29 19:28:40 +01:00
5f86c78e1b smokeping: ajout hydra 2017-01-28 00:15:26 +01:00
aad2931967 tinc: ajout adresse réseau grudu pour hydra.pru 2017-01-27 23:41:04 +01:00
715a3519f4 Merge remote-tracking branch 'origin/master' into nixos-unstable 2017-01-27 19:31:38 +01:00
0b08c7dbd0 munin: ajout dépendances sur 'sensors' 2017-01-27 19:30:04 +01:00
0dab828682 activation de hydra sur hydra.pru 2017-01-27 19:22:46 +01:00
b4786c8fdf ajout de la clef ssh serveur de hydra 2017-01-27 19:22:27 +01:00
11a69418a7 ajout machine hydra.prunetwork.fr 2017-01-27 18:17:02 +01:00
d7f2b4fd38 ajout monitoring smokeping pour toutes les machines 2017-01-26 11:49:18 +01:00
Yves Dubromelle
ce1cae293c ajout hindent 2017-01-26 10:42:52 +01:00
Yves Dubromelle
1c58705adf latitude sert son nix-store 2017-01-26 10:42:52 +01:00
Yves Dubromelle
84802f8604 ajout hindent 2017-01-26 10:41:38 +01:00
Yves Dubromelle
28092fb029 latitude sert son nix-store 2017-01-26 10:39:17 +01:00
Yves Dubromelle
1cc773c034 outils de ménage de fichier 2017-01-26 00:12:19 +01:00
Yves Dubromelle
58c32c79fb ajout de paquets haskell 2017-01-26 00:12:19 +01:00
d1a5228a92 MaJ config pulseaudio : nouvel argument pour déclarer les options du daemon 2017-01-26 00:12:19 +01:00
79a3fd779b munin: ajout bc 2017-01-26 00:12:02 +01:00
fcf73d4249 commande pour afficher les emplacements contenant des expressions nix construites 2017-01-26 00:11:52 +01:00
ce7e111128 on reste dans la branche courante 2017-01-26 00:11:06 +01:00
Yves Dubromelle
c0832c7ccb munin: augmentation du lelais de timeout pour le démarrage du daemon 2017-01-22 19:07:16 +01:00
Yves Dubromelle
10a42e4cbd monstre est un serveur nix 2017-01-22 00:00:38 +01:00
Yves Dubromelle
f0627eb800 nix-serve est disponible uniquement par tinc 2017-01-21 23:57:51 +01:00
Yves Dubromelle
ae4c1edee0 prise en compte du fichier jetbrains 2017-01-21 16:35:22 +01:00
Yves Dubromelle
4fec5f8c05 application de hydra-core sur phenom 2017-01-21 16:16:21 +01:00
Yves Dubromelle
bec65c07c3 variable pour activer une partie de la suite jetbrains 2017-01-21 16:14:35 +01:00
8de39214b6 changement de l'ordre des enregistrements pour awesome 2017-01-20 13:18:16 +01:00
b9b92c5942 monitoring: inutile de conserver le port 8000 ouvert car aucun service n'écoute 2017-01-20 13:17:42 +01:00
aec47a8d1b monitoring: l'utilisation de localhost posait problème 2017-01-20 13:17:20 +01:00
0fefb7adc8 calws: ajout plugin 2017-01-15 19:49:37 +01:00
6779d58dfb claws: activation calendrier + correcteur orthographe 2017-01-15 19:26:51 +01:00
54d15c8ed6 Revert "radx: désactivation hydra : ne s'installe pas" -> s'installe sur nixos-unstable
This reverts commit 7afafa7863.
2017-01-15 19:06:29 +01:00
f2ce6751d2 désactivation paquet pour migration nixos-unstable (17.03pre) 2017-01-15 14:54:11 +01:00
996b8e803c ajout fichier de configuration pour awesome 3 (nixos-16.09) 2017-01-15 14:54:11 +01:00
162bac4af0 fichier de configuration awesome 4 (nixos-17.03) 2017-01-15 14:53:46 +01:00
55da6460d6 remplacement gnome-icon-theme par équivalent gnome3 2017-01-14 23:16:42 +01:00
14bc58c1c2 désactivation ksnapshot 2017-01-14 23:15:17 +01:00
3818122ac9 haskell: ajout de stylish-haskell 2017-01-14 17:26:52 +01:00
7afafa7863 radx: désactivation hydra : ne s'installe pas 2017-01-13 22:03:17 +01:00
cb6676a215 make: cible pour telecharger toutes les sources nécessaires au build 2017-01-13 21:59:47 +01:00
c0c4550af0 masquage config hydra bleeding-edge (casse le nix store) 2017-01-11 14:51:32 +01:00
43fac7495d ajout client dhcp 2017-01-11 14:50:45 +01:00
Yves Dubromelle
ab32cae7d8 désactivation globale de nix-serve-client pour les desktops (ne marche pas sur monstre) 2017-01-10 21:01:32 +01:00
Yves Dubromelle
5bbb61b05d monstre: activation murmur (serveur mumble) 2017-01-10 20:58:42 +01:00
Yves Dubromelle
8abd9b1d5d hydra normal 2017-01-08 00:17:07 +01:00
31692206e0 amélioration hydra + retour au paquet par défaut 2017-01-04 14:26:28 +01:00
fad5a05159 ajout commande de debug 2017-01-03 18:12:15 +01:00
30962288b7 ajout référence ver source 2017-01-03 18:11:34 +01:00
8d28f29c57 MaJ version hydra - manuelle 2017-01-03 18:10:30 +01:00
df05e6101d prunetwork, & docker 2017-01-01 18:44:13 +01:00
72eaf19f95 déplacement des options de profils dans + spécifique 2017-01-01 18:31:33 +01:00
f632193558 création profil prunetwork && workstation 2017-01-01 18:23:59 +01:00
05b5da4319 suppression option inutilisée (même si interessante) 2017-01-01 18:22:59 +01:00
64d0765e40 xray n'est pas sous nixos 2017-01-01 18:17:25 +01:00
587e91fe61 la config locate est spécique aux domaines 2017-01-01 18:14:35 +01:00
Yves Dubromelle
0f4355d382 désactivation yubikey 2017-01-01 16:15:18 +01:00
Yves Dubromelle
8c18caab2e déplacement programmes dans fichiers spécifiques 2017-01-01 16:14:41 +01:00
Yves Dubromelle
2bee4131ed commentaires 2017-01-01 16:14:25 +01:00
Yves Dubromelle
49b86fb898 dev: programmes inutiles 2017-01-01 15:37:14 +01:00
6dd9251f07 activation de locate ... 2016-12-30 17:48:13 +01:00
6ca6c83898 commentaires 2016-12-30 17:20:04 +01:00
d6ff207d22 indentation 2016-12-30 17:18:37 +01:00
2a26db779f dev: ajout de hahp à l'environement haskell 2016-12-30 17:13:29 +01:00
aecfadea5f dev: suppression zeal 2016-12-30 17:11:10 +01:00
2e45bfbc05 dev: suppression des applications disponibles dans des fichiers séparés 2016-12-30 17:10:06 +01:00
cd05bec335 utilisation des variables pour activer les environements de dev 2016-12-30 17:09:15 +01:00
3aecc135c0 ajout de profiles pour le développement (haskell java rust) 2016-12-30 17:08:37 +01:00
54b8d6ce7d commande pour avoir les statistiques d'affectation des lignes de texte d'un dépôt git 2016-12-22 00:01:23 +01:00
4a81f80d8c déplacement ksnapshot 2016-12-19 18:18:32 +01:00
ec3dc220be edition-photo: un éditeur de raw n'est pas nécessaire. Il faut un appareil qui produise du raw 2016-12-19 18:16:39 +01:00
4a106a82ef edition-musique: seules les stations de travail dubronetwork ont l'option activée 2016-12-19 18:14:16 +01:00
4397b892eb cartographie: désactivation qgis 2016-12-19 18:12:58 +01:00
829aff682e bureautique: ajout section pour diagrammes 2016-12-19 18:11:32 +01:00
cff0a177d2 désactivation d'applications a priori peu utilisées 2016-12-19 18:10:42 +01:00
de2c645dbe indentation 2016-12-19 18:07:54 +01:00
0facfef3e9 réorganisation fichier app-dev 2016-12-19 18:07:04 +01:00
94c1485006 ajout commentaire 2016-12-19 18:02:13 +01:00
35322c124c ajout duplicity 2016-12-16 19:54:01 +01:00
8d9c0d830f interpreteur .net 2016-12-16 18:38:53 +01:00
bdf5e511f3 commentaires 2016-12-16 18:38:17 +01:00
386ce3b25e ajout hubicfuse 2016-12-16 18:38:03 +01:00
b9d19017c0 packages pour haskell 2016-12-11 21:27:11 +01:00
f91e72ef50 ajout de pandoc-citeproc 2016-12-09 18:33:08 +01:00
5f089977a2 mnomade
tinc: ajout conf neo
2016-11-29 10:37:49 +01:00
Yves Dubromelle
83aa5af2fc ménage 2016-11-28 22:19:13 +01:00
79d97ca438 ajout en masse de liens vers rollo, ocean, monstre 2016-11-28 21:51:57 +01:00
04869f63f7 tinc: ajouit adresse monstre, rollo, ocean 2016-11-28 20:40:21 +01:00
be47e7c285 make: ajout commandes rapides pour tinc 2016-11-28 20:27:24 +01:00
a2ee566f15 net: activation du forwarding pour IPv4 et IPv6 2016-11-28 19:43:51 +01:00
b51c69d330 tinc: modification plage addresse 2016-11-28 19:30:22 +01:00
a75b126b5a tnic: radx essaye de se connecter à phenom 2016-11-28 13:03:36 +01:00
Yves Dubromelle
eabe0db746 réduction de la taille des subnets 2016-11-28 12:54:45 +01:00
70 changed files with 2097 additions and 663 deletions

View File

@@ -1,17 +1,18 @@
GSF=git submodule foreach GSF=git submodule foreach
TIME=time
all: rebuild-switch all: rebuild-switch
date date
##--------- Commandes spécifiques pour NixOS ##--------- Commandes spécifiques pour NixOS
clean: clean:
nix-collect-garbage -d --delete-older-than 15d $(TIME) nix-collect-garbage -d --delete-older-than 15d
clean-aggressive: clean-aggressive:
nix-collect-garbage -d --delete-older-than 1d $(TIME) nix-collect-garbage -d --delete-older-than 1d
clean-total: clean-total:
nix-collect-garbage -d $(TIME) nix-collect-garbage -d
clean-log: clean-log:
journalctl --vacuum-size=1G journalctl --vacuum-size=1G
@@ -20,16 +21,25 @@ full-auto: submodules-update upgrade clean optimise
@date @date
optimise: optimise:
nix-store --optimise $(TIME) nix-store --optimise
rebuild-switch: rebuild-switch:
nixos-rebuild switch --fallback --show-trace $(TIME) time nixos-rebuild switch --fallback --show-trace
show-roots:
nix-store --gc --print-roots
store-repair: store-repair:
nix-store --verify --check-contents --repair $(TIME) nix-store --verify --check-contents --repair
upgrade: upgrade:
nixos-rebuild switch --upgrade --fallback --show-trace $(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$$'))
##--------- Commandes spécifiques pour GIT ##--------- Commandes spécifiques pour GIT
@@ -39,7 +49,7 @@ push: submodules-push
submodules-update: submodules-update:
#git submodule update --remote #git submodule update --remote
$(GSF) git co master #$(GSF) git co master
$(GSF) git ff $(GSF) git ff
$(GSF) git gc --auto $(GSF) git gc --auto

184
README.md
View File

@@ -1,18 +1,45 @@
# nixos-template-base # nixos-template-base
Version de nixos supportée : NixOs 16.09 Versions de NixOS supportées :
* NixOS 16.09
* NixOS unstable
Ce dépôt stocke une configuration générique des machines. 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). 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. Actuellement, les scripts contiennent un peu de configuration spécifique pour les machines des mainteneurs.
# Lien pour install sur machine distante # Notes de mise-à-jour
## pour le passage de 16.09 à unstable
* https://nixos.org/wiki/How_to_install_NixOS_from_Linux#Installing_through_a_chroot * mettre à jour tous les dépôts
* https://github.com/NixOS/nixpkgs/issues/13305 * changer la branche de base vers `nixos-unstable`
* changer la declaration de la machine dans `configuration.nix`
# Notes pour l'upgrade de 16.03 vers 16.09 ~~~
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 * 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``` * changer le channel nixos : ```nix-channel --add https://nixos.org/channels/nixos-16.09 nixos```
@@ -41,3 +68,150 @@ Pour résoudre les soucis d'upgrade, il est conseillé :
* d'ajouter `vim` aux paquets * d'ajouter `vim` aux paquets
* de réactiver petit à petit les lignes désactivées * 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
~~~
sudo su -
~~~
* formater les partitions
~~~
mkfs.ext4 -L nixos /dev/sda1
swapoff -a
mkswap /dev/sda2
swapon -a
~~~
* monter les partitions dans /mnt
~~~
mount /dev/sda1 /mnt/
mkdir /mnt/etc/
mkdir /etc/nixos
mkdir /mnt/nix
mount --bind /mnt/nix/ /nix
~~~
* installer les paquets nécessaires
~~~
apt-get install bzip2 git byobu htop glances
~~~
* création d'utilisateur (n'importe quil mot de passe)
~~~
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
~~~
update-ca-certificates
~~~
* installer nix
~~~
chown -R nix /nix
su - nix
bash <(curl https://nixos.org/nix/install)
exit
~~~
* créer un profil nix pour root & un channel
~~~
. ~nix/.nix-profile/etc/profile.d/nix.sh
nix-channel --remove nixpkgs
nix-channel --add http://nixos.org/channels/nixos-unstable nixos
nix-channel --update
~~~
* installer un editeur de texte
~~~
nix-env -i vim_configurable
~~~
* installation de nixos-install
~~~
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
~~~
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
~~~
mount --bind /mnt/etc/nixos/ /etc/nixos/
~~~
* mettre à jour la configuration matérielle
~~~
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
~~~
unset NIXOS_CONFIG
nixos-install
~~~

View File

@@ -12,6 +12,7 @@ mkIf true {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Adminsys # Adminsys
cowsay # pour ansible & 4lulz
iotop iotop
lm_sensors lm_sensors
lshw lshw
@@ -21,8 +22,12 @@ mkIf true {
powertop powertop
python27Packages.ansible2 python27Packages.ansible2
python27Packages.glances python27Packages.glances
sysstat # pour la commande "iostat -x -1" de monitoring d'activité disque
usbutils usbutils
# Backup
duplicity # création de sauvegarde chiffrées (GPG)
# Compression # Compression
lz4 lz4
lzop lzop
@@ -30,7 +35,11 @@ mkIf true {
# Système de fichier # Système de fichier
## Montage de filesystem ## Montage de filesystem
curlftpfs # ftp curlftpfs # ftp
exfat # Pour monter les FAT avec Fuse
hubicfuse # montage hubic
ntfs3g # ntfs ntfs3g # ntfs
samba # partages windows
squashfsTools # squashfs
sshfsFuse # ssh sshfsFuse # ssh
## Gestion de FS ## Gestion de FS
@@ -38,14 +47,15 @@ mkIf true {
## Exploitation FS ## Exploitation FS
inotify-tools # être notifié lorsque le contenu d'un répertoire change inotify-tools # être notifié lorsque le contenu d'un répertoire change
duff # outil de recherche de fichiers en doublons 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 rdfind # recherche de fichiers doublons pour remplacement par hard/soft link
(mkIf profiles.isDesktop (mkIf profiles.isDesktopEnvironment
## Gestion de FS ## Gestion de FS
gparted # Gestion graphique de partitions gparted # Gestion graphique de partitions
) )
(mkIf profiles.isDesktop (mkIf profiles.isDesktopEnvironment
unetbootin # création de clefs USB bootables unetbootin # création de clefs USB bootables
) )
]; ];

View File

@@ -1,60 +1,52 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
let let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
mkIf = lib.mkIf;
in in
{ mkIf profiles.isDesktopEnvironment {
imports = [ # applications :
# commandées par config-generator
./activation-manuelle/xmonad/xmonad.nix # gestionnaire de fenêtres xmonad
];
# Paquets # Paquets
environment.systemPackages = with pkgs; mkIf profiles.isDesktop [ environment.systemPackages = with pkgs; [
# Environement de bureau # Environement de bureau
arandr # interface graphique pour xrandr arandr # interface graphique pour xrandr
wmname # pour définir le nom du gestionnaire de fenêtre (utile pour java) wmname # pour définir le nom du gestionnaire de fenêtre (utile pour java)
kde4.ksnapshot# capture d'écran #kde4.ksnapshot # capture d'écran
xclip # manipulation du clipboard X depuis la console
xorg.xbacklight # pour gérer la luminosité de l'écran xorg.xbacklight # pour gérer la luminosité de l'écran
xorg.xev # pour repérer les codes + noms standard des actions clavier/souris xorg.xev # pour repérer les codes + noms standard des actions clavier/souris
xorg.xkill # pour 'tuer une application' xorg.xkill # pour 'tuer une application'
## Gestionnaire de fenêtre & Thème ## Gestionnaire de fenêtre & Thème
gnome.gnome_icon_theme # thème d'icone - semble fonctionner avec spaceFM gnome3.adwaita-icon-theme # thème d'icone - semble fonctionner avec spaceFM
## Manipulation de fichier ## Manipulation de fichier
pcmanfm # gestionnaire de fichiers graphique pcmanfm # gestionnaire de fichiers graphique
spaceFM # gestionnaire de fichiers graphique spaceFM # gestionnaire de fichiers graphique
vifm # gestionnaire de fichiers basé sur VIM (console) #vifm # gestionnaire de fichiers basé sur VIM (console)
## Terminal ## Terminal
sakura # terminal sakura # terminal
# A trier
cowsay
fgallery # générateur de gallerie statique http://www.thregr.org/~wavexx/software/fgallery/
samba
taskwarrior # gestionnaire de tâches en console
udevil # pour le montage des media amovibles
xclip # manipulation du clipboard X depuis la console
]; ];
# Polices supplémentaires # Polices supplémentaires
fonts.fonts = with pkgs; mkIf profiles.isDesktop [ fonts.fonts = with pkgs; [
fira # police créée pour Firefox fira # police créée pour Firefox
fira-code # idem fira-mono + ligatures pour la programmation fira-code # idem fira-mono + ligatures pour la programmation
fira-mono # dérivée de fira en monospace fira-mono # dérivée de fira en monospace
hack-font # police monospace créée explicitement pour coder hack-font # police monospace créée explicitement pour coder
hasklig # police dérivée de source-code-pro mais avec des ligatures
]; ];
nixpkgs.config.packageOverrides = pkgs: { # Paquets avec setuid root
clawsMail = pkgs.clawsMail.override { enablePluginFancy = true; }; security.wrappers = {
mumble = pkgs.mumble.override { pulseSupport = true; }; # pour le montage des media amovibles
devmon.source = "${pkgs.udevil}/bin/devmon";
udevil.source = "${pkgs.udevil}/bin/udevil"; # utilisé par spacefm
# vérouiller l''écran. "cannot disable the out-of-memory killer for this process (make sure to suid or sgid slock)" --> en root
slock.source = "${pkgs.slock}/bin/slock";
}; };
security.setuidPrograms = [ "udevil" ];
} }

View File

@@ -7,26 +7,32 @@ let
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
in in
mkIf profiles.isDesktop { mkIf cfg.officeSuite {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Bureautique # Bureautique
aspell aspellDicts.fr aspell aspellDicts.fr # correction d'ortographe
dia gnumeric # tableur
gnumeric #kde4.ksnapshot# réalisation de capture d'écran
# Gestion de tâche
taskwarrior # gestionnaire de tâches en console
## Cartes mentales ## Cartes mentales
freemind freemind
## Diagrammes & Schémas
dia # dessin & schéma technique
## Editeur de texte ## Editeur de texte
lyx # surcouche WISIWIM à LaTeX #lyx # surcouche WISIWIM à LaTeX
focuswriter # outil pour l'écriture #focuswriter # outil pour l'écriture
textadept # un éditeur de texte facile pour copier-coller graphique textadept # un éditeur de texte facile pour copier-coller graphique
zim # outil de prise de notes, wiki de bureau #zim # outil de prise de notes, wiki de bureau
## Visionneuse ## Visionneuse
kde5.okular # pdf #kde5.okular # pdf
mcomix # livres (cbr, liste d'images), gestion d'une bibliothèque mcomix # livres (cbr, liste d'images), gestion d'une bibliothèque
pdfpc # pdf pdfpc # pdf
qpdfview # pdf qpdfview # pdf
@@ -35,9 +41,10 @@ mkIf profiles.isDesktop {
## Convertisseurs (texte -> <autre format>) ## Convertisseurs (texte -> <autre format>)
gnuplot # générateur de graphes à partir de données numériques gnuplot # générateur de graphes à partir de données numériques
graphviz # dot, neato : traçage de graphes (carré, rond) graphviz # dot, neato : traçage de graphes (carré, rond)
jekyll # générateur statique de site web #jekyll # générateur statique de site web
odpdown # conversion md -> presentation ODP : https://github.com/thorstenb/odpdown #odpdown # conversion md -> presentation ODP : https://github.com/thorstenb/odpdown
pandoc pandoc
haskellPackages.pandoc-citeproc
texlive.combined.scheme-full # distribution LaTeX texlive.combined.scheme-full # distribution LaTeX
#texLive # distribution LaTeX de base #texLive # distribution LaTeX de base
#texLiveBeamer # paquets et extensions pour Beamer #texLiveBeamer # paquets et extensions pour Beamer

View File

@@ -15,7 +15,7 @@ mkIf cfg.cartographie {
expat expat
gpsbabel # pour convettir les données des GPS gpsbabel # pour convettir les données des GPS
josm # outil de contribution à OpenStreetMap josm # outil de contribution à OpenStreetMap
qgis # client lourd de manipulation de données géographiques #qgis # client lourd de manipulation de données géographiques
viking # analyse de topo, gestion de données GPS viking # analyse de topo, gestion de données GPS
]; ];
} }

View File

@@ -6,8 +6,8 @@ let
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
in in
# TODO: ménage
mkIf profiles.isDesktop { mkIf cfg.internetSuite {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@@ -18,13 +18,14 @@ environment.systemPackages = with pkgs; [
firefox firefox
## Réseaux sociaux ## Réseaux sociaux
python27Packages.turses # client twitter en ncurse #python27Packages.turses # client twitter en ncurse
python27Packages.rainbowstream # client twitter en console python27Packages.rainbowstream # client twitter en console
rtv # client reddit en console rtv # client reddit en console
## Mail & Discussion (texte, audio) ## Mail & Discussion (texte, audio)
clawsMail clawsMail
hexchat hexchat
quassel
quasselClient quasselClient
mumble mumble
mutt mutt
@@ -36,4 +37,21 @@ environment.systemPackages = with pkgs; [
transmission_gtk transmission_gtk
transmission_remote_gtk transmission_remote_gtk
]; ];
nixpkgs.config.packageOverrides = pkgs: {
clawsMail = pkgs.clawsMail.override {
enablePluginFancy = false; # nécessite wekitgtk qui est troué
enablePluginPdf = true;
enablePluginRavatar = true;
enablePluginSmime = true;
enablePluginVcalendar = true;
enableSpellcheck = true;
};
mumble = pkgs.mumble.override { pulseSupport = true; };
};
#nixpkgs.config.permittedInsecurePackages = [
# "webkitgtk-2.4.11" # pour que le plugin fancy de claws-mail fonctionne
#];
} }

View File

@@ -0,0 +1,42 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
{
# Paquets
environment.systemPackages = with pkgs; [
bind # utilisé pour les utilitaires comme dig
byobu # permet de se déconnecter d'un terminal sans l'aréter
dhcp # client dhcp
git gitAndTools.gitSVN gitAndTools.tig gti # outil de gestion de version
gnumake # pour décrire les recettes de compilation
gnupg # GPG
gpm # prise en charge de la souris en console
htop # monitoring
lsb-release # pour les scripts qui utilisent cet outil
#libressl # librairie pour faire du TLS et les algorithmes de crypto par OpenBSD
ncdu # outil pour voir l'espace utilisé
par2cmdline # outil de récupération de fichiers corrompus - .par2
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
#python34Packages.glances # monitoring
pwgen # générateur de mot de passe
rtorrent # TODO outil de téléchargement de torrent & magnet
tmux # nécessaire pour byobu
tree # affiche une arborescence de fichiers et dossiers
usbutils
(import ./vim.nix)
wget # client HTTP console
which # pour connaitre le chemin d'un exécutable
];
}

View File

@@ -7,19 +7,18 @@ let
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
in in
mkIf cfg.nix-serve-server { mkIf cfg.developpement-elm {
# Cache http pour le store # Paquets
environment.systemPackages = with pkgs; [
elmPackages.elm
];
# Services # Services
services.nix-serve = {
enable = true;
};
# Réseau # Réseau
networking.firewall = { networking.firewall = {
allowedTCPPorts = [ allowedTCPPorts = [
5000
]; ];
allowedUDPPorts = [ allowedUDPPorts = [
]; ];

View File

@@ -0,0 +1,34 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf cfg.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
darcs # Gestionnaire de version éponyme
ghc-mod
hindent # indentation code
hlint # qualite de code, analyse statique de code + astuces & bonnes pratiques
#postgrest # mapper HTTP <-> PostgreSQL
stylish-haskell # qualité de code
threadscope # visualisation des threads (<bidule>.eventlog)
turtle # genre shell-scripting
# Application perso
hahp
]);
}

View File

@@ -0,0 +1,24 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf cfg.developpement-java {
# Paquets
environment.systemPackages = with pkgs; [
# IDE
idea.idea-community # IntelliJ IDEA
# Java
maven
openjdk
];
environment.variables = {
JAVA_HOME = "${pkgs.openjdk}";
};
}

View File

@@ -7,12 +7,13 @@ let
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
in in
mkIf cfg.edition-video { mkIf cfg.jetbrains-licensed {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Vidéo idea.idea-ultimate
#cinelerra # editeur video idea.clion
pitivi # montage vidéo idea.datagrip
idea.pycharm-professional
]; ];
} }

View File

@@ -0,0 +1,18 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf cfg.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
];
}

View File

@@ -15,35 +15,31 @@ mkIf cfg.developpement {
pgadmin # interface d'administration de postgres pgadmin # interface d'administration de postgres
sqlitebrowser # interface d'administration de sqlite sqlitebrowser # interface d'administration de sqlite
# Développement # C / C++
cloc
idea.idea-community # IntelliJ IDEA
gcc # pour les appels depuis les scripts gcc # pour les appels depuis les scripts
maven
# Documentation # Documentation
zeal # consulter la documentation hors ligne #zeal # consulter la documentation hors ligne
## Gestion des sources # Gestion des sources
# git # déjà présent dans "base" cloc # outil pour compter les lignes de code source
# gitg # interface pour utiliser git (historique, commit) git # déjà présent dans "base"
#gitg # interface pour utiliser git (historique, commit)
gitstats # génère un site web statique avec des statistiques gitstats # génère un site web statique avec des statistiques
gitAndTools.gitFull # pour gitk gitAndTools.gitFull # pour gitk
git-cola # interface pour utiliser git (historique, commit) git-cola # interface pour utiliser git (historique, commit)
mercurial mercurial
subversion subversion
## Haskell # Mono
ghc # pour les appels depuis les scripts #mono46 # interpréteur .NET
stack
## Rust
cargo # récupération des dépendances + compilation projet rust
rustc # pour les appels depuis les scripts
## Visualisation & outils de diff ## Visualisation & outils de diff
gource # visualisation en mouvement de l'historique git #gource # visualisation en mouvement de l'historique git
meld # outil de comparaison graphique meld # outil de comparaison graphique
vbindiff # diff de fichier hexadecimaux avec vim #vbindiff # diff de fichier hexadecimaux avec vim
# Editeur texte
atom
]; ];
} }

View File

@@ -19,9 +19,9 @@ environment.systemPackages = with pkgs; [
gimp # logiciel d'édition/montage/retouche photo gimp # logiciel d'édition/montage/retouche photo
inkscape # édition d'image vectorielle (svg & autre) inkscape # édition d'image vectorielle (svg & autre)
imagemagick # modification image en CLI imagemagick # modification image en CLI
rawtherapee # développemen de photos en RAW #rawtherapee # développemen de photos en RAW
# TEST d'outil de gestion de catalogue de photos # TEST d'outil de gestion de catalogue de photos
kde4.digikam # gestionnaire de bibliothèque de photo #kde4.digikam # gestionnaire de bibliothèque de photo
]; ];
} }

View File

@@ -0,0 +1,26 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf cfg.edition-video {
# Paquets
environment.systemPackages = with pkgs; [
# Vidéo
#cinelerra # editeur video
pitivi # montage vidéo
ffmpeg-full # assemblage de flux audio & video en ligne de commande
];
nixpkgs.config.packageOverrides = pkgs: {
ffmpeg-full = pkgs.ffmpeg-full.override {
nonfreeLicensing = true;
nvenc = true;
};
};
}

View File

@@ -7,7 +7,8 @@ let
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
in in
mkIf profiles.isDesktop { # TODO ranger le spécifique pulseaudio
mkIf cfg.multimediaSuite {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@@ -24,7 +25,5 @@ mkIf profiles.isDesktop {
## Video ## Video
smplayer # lecteur vidéo smplayer # lecteur vidéo
vlc # lecteur vidéo vlc # lecteur vidéo
kde4.ksnapshot# réalisation de capture d'écran
]; ];
} }

View File

@@ -8,7 +8,6 @@ let
in in
mkIf true { mkIf true {
#mkIf profiles.isDesktop {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@@ -20,10 +19,17 @@ mkIf true {
## Diagnostic ## Diagnostic
arp-scan arp-scan
nmap # outil de scan de port réseau
#wireshark #wireshark
whois whois
]; ];
# Paquets avec setuid root
security.wrappers = {
# outil de diagnostic réseau
mtr.source = "${pkgs.mtr}/bin/mtr";
};
networking.firewall = { networking.firewall = {
allowedTCPPorts = [ allowedTCPPorts = [
5201 # iperf 5201 # iperf

View File

@@ -7,7 +7,7 @@ let
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
in in
mkIf profiles.isDesktop { mkIf cfg.securitySuite {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@@ -15,8 +15,6 @@ mkIf profiles.isDesktop {
gnome3.seahorse # gestionnaire graphique de clef GPG gnome3.seahorse # gestionnaire graphique de clef GPG
pass # gestionnaire de mots de passe pass # gestionnaire de mots de passe
pwgen # générateur de mots de passe pwgen # générateur de mots de passe
slock # vérouiller l''écran. "cannot disable the out-of-memory killer for this process (make sure to suid or sgid slock)" --> en root #yubikey-personalization-gui # utilisation de la clef Yubikey
yubikey-personalization-gui # utilisation de la clef Yubikey
]; ];
security.setuidPrograms = [ "slock" ];
} }

View File

@@ -12,6 +12,7 @@ vim_configurable.customize {
# Here you can place all your vim plugins # Here you can place all your vim plugins
# They are installed managed by `vam` (a vim plugin manager) # They are installed managed by `vam` (a vim plugin manager)
#"vim-addon-nix" #"vim-addon-nix"
"elm-vim"
"vim-nix" "vim-nix"
"wombat256-vim" "wombat256-vim"
]; } ]; }

View File

@@ -9,12 +9,60 @@ in
{ {
imports = [ imports = [
# recettes
./base/base.nix
./desktop/desktop.nix
./public/public.nix
# moulinette de configuration # moulinette de configuration
./config-generator.nix ./config-generator.nix
# installées systématiquement
./applications/default-applications.nix
./configuration/environment.nix
./configuration/localisation.nix
./configuration/network.nix
#./configuration/network-ipv6.nix
./configuration/udev.nix
./services/haveged.nix
./services/monitoring-munin.nix
./services/monitoring-smokeping.nix
./services/ssh.nix
# commandées par config-generator
## option de configuration spécifique
./applications/cao.nix # de conception assisté par ordinateur & modélisation
./applications/cartographie.nix # manipuler les données géographiques & cartes
./applications/developpement.nix # développer des programmes/scripts
./applications/developpement-elm.nix # développer en elm
./applications/developpement-haskell.nix # développer en haskell
./applications/developpement-java.nix # développer en java
./applications/developpement-jetbrains.nix # outils jetbrains
./applications/developpement-rust.nix # développer en rust
./applications/edition-musique.nix # modifier les fichiers musicaux
./applications/edition-photo.nix # modifier les photos & assimilé
./applications/edition-video.nix # modifier les vidéos
./applications/jeux.nix # jouer, tout simplement ;)
./configuration/auto-upgrade.nix # mise à jour automatique du système
./configuration/awesome.nix # pour le gestionaire de fenêtres awesome
./configuration/laptop.nix # appli & configuration adaptée pour un PC portable
./configuration/swap.nix # définition de l'utilisation du swap
./services/print.nix # configuration de base de cups
./services/docker.nix # activer docker
./services/elasticsearch.nix # service de stockage et recher de données
./services/hoogle.nix # service hoogle pour haskell
./services/hydra-build.nix # service de construction de paquet. -> la machine compile des paquets
./services/hydra-core.nix # service pour l'instance d'hydra
./services/kibana.nix # service de visualisation de données stockées dans elasticsearch
./services/locate.nix # service locate
./services/virtualbox.nix # activer virtualbox
./services/xmonad/xmonad.nix # pour le gestionaire de fenêtre xmonad
## if isDesktop
./applications/adminsys.nix # pour gérer le système dans son ensemble et les services
./applications/bureau.nix # éléments pour avoir un environement graphique minimal utilisable
./applications/bureautique.nix # dédiée à la bureautique (traitement de texte, dessin, ...)
./applications/client-internet.nix # pour accéder & utiliser des ressources par le réseau
./applications/multimedia.nix # pour gérer le son, l'image et la vidéo
./applications/network.nix # de gestion, de diagnostique & surveillance réseau
./applications/securite.nix # relatives à la sécurité (chiffrement, gpg, mots de passe, ...)
./services/pulseaudio.nix # activation du serveur audio
./services/scanner.nix # utilisation d'un scanner
./services/x11.nix # activation du serveur graphique X
]; ];
} }

View File

@@ -1 +0,0 @@
/etc/nixos/base/Makefile

View File

@@ -1,25 +0,0 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf cfg.nix-serve-client {
nix = {
# Cache http pour le store
requireSignedBinaryCaches = false;
binaryCaches = [
(mkIf (profiles.isDubronetwork && (! computers.isPedro) && (! computers.isRollo)) "http://nix-cache.dubronetwork.fr:5001")
(mkIf profiles.isPrunetwork "https://cache.nixos.org/")
(mkIf (profiles.isPrunetwork && !profiles.isServer) "http://nix-cache.dubronetwork.fr:5001")
];
extraOptions = ''
connect-timeout = 5
'';
};
}

View File

@@ -1,64 +0,0 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
ignoreip = "pedro.dubronetwork.fr cube.dubronetwork.fr voyage.prunetwork.fr xray.prunetwork.fr 192.168.0.0/16 172.16.0.0/16";
destemail = "admins@dubronetwork.fr";
in
mkIf cfg.fail2ban {
# Gestion de fail2ban
# Paquets
environment.systemPackages = with pkgs; [
mailutils
whois
];
# Services
services = {
fail2ban = {
enable = true;
jails = {
DEFAULT = ''
# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1/8 ${ignoreip}
# 1 jour
# bantime = 86400
# 5 jours
bantime = 432000
maxretry = 3
destemail = ${destemail}
# https://github.com/Baughn/nixpkgs/blob/master/nixos/modules/services/security/fail2ban.nix
findtime = 600
maxretry = 3
backend = systemd
enabled = true
'';
ssh-route = ''
filter = sshd
action = route[blocktype=blackhole]
'';
# désactivation car souci de PATH avec les commandes mail ou sendmail. Nécessite un path motifiable
# ticket à ouvrir
#ssh-mail = ''
# filter = sshd
# action = sendmail[sendername=Fail2ban @${config.networking.hostName}]
#'';
};
};
};
# https://github.com/NixOS/nixpkgs/issues/8437
services.fail2ban.jails.ssh-iptables = "enabled = true";
}

File diff suppressed because one or more lines are too long

View File

@@ -1,20 +0,0 @@
{ config, lib, pkgs, ... }:
let
#inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
{
imports = [
./network-dns.nix
# inclusion conditionnelle
./activation-manuelle/service-fail2ban.nix
./activation-manuelle/nix-serve-client.nix
./activation-manuelle/nix-serve-server.nix
./activation-manuelle/users.nix
];
}

View File

@@ -1,22 +0,0 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf true {
# 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;
};
}

34
byobu-adminsys Executable file
View File

@@ -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};

View File

@@ -9,126 +9,120 @@ let
in in
{ {
###### interface # TODO camel case partout
# TODO everything in english
# TODO sortir ce qui est privé
###### interface
options = { options = {
#* Utilisé pour afecter des capacités aux machines #* Utilisé pour afecter des capacités aux machines
r6d.profiles = { r6d.profiles = {
# Domaine # Domaine
isDubronetwork = mkEnableOption "Pour distinguer les machines dubronetwork."; isDubronetwork = mkEnableOption "Pour distinguer les machines dubronetwork.";
isPrunetwork = mkEnableOption "Pour distinguer les machines prunetwork."; isPrunetwork = mkEnableOption "Pour distinguer les machines prunetwork.";
# Utilisation machine # Utilisation machine
isDesktop = mkEnableOption "Pour indiquer une machine avec interface graphique."; isDesktopEnvironment = mkEnableOption "Pour indiquer une machine avec interface graphique.";
isHome = mkEnableOption "Pour indiquer que la machine sert à la maison (divertissement & autre)."; isServer = mkEnableOption "Pour indiquer qu'il s'agit d'un serveur.";
isServer = mkEnableOption "Pour indiquer qu'il s'agit d'un serveur."; isWorkstation = mkEnableOption "Pour indiquer que la machine sert à travailler.";
isWorkstation = mkEnableOption "Pour indiquer que la machine sert à travailler.";
};
#* Utilisé dans les fichiers .nix
r6d.config-generator = {
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";
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.";
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.";
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.";
murmur = mkEnableOption "Profil pour activer un serveur Mumble (murmur)";
nix-serve-client= mkEnableOption "Profil pour que la machine soit un client de cache nix.";
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";
online-ipv6 = mkEnableOption "Profil pour activer l'IPv6 de online.net";
print = mkEnableOption "Profil pour activer cups & pouvoir imprimer.";
rabbitmq = mkEnableOption "Profil pour activer le service de messagerie AMQP.";
radicale = mkEnableOption "Profil pour activer le service d'hébergement de calendrier + tâches & contacts.";
scanner = mkEnableOption "Profil pour que les scanners soient utilisable.";
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.";
tincAddress = mkOption {
default = "";
example = "192.168.1.1";
description = "Adresse du noeud tinc local";
type = lib.types.string;
};
tincExtraConfig = mkOption {
default = "";
example = ''
Mode = router
ConnecTo = bar
'';
description = "Configuration supplémentaire pour tinc";
type = lib.types.string;
};
};
#* Utilisé pour avoir des raccourcis de machine
r6d.computers = {
isLatitude = mkEnableOption "Identification du nom de machine.";
isMonstre = mkEnableOption "Identification du nom de machine.";
isNeoNomade = mkEnableOption "Identification du nom de machine.";
isNomade = mkEnableOption "Identification du nom de machine.";
isOcean = mkEnableOption "Identification du nom de machine.";
isPedro = mkEnableOption "Identification du nom de machine.";
isPhenom = mkEnableOption "Identification du nom de machine.";
isRadx = mkEnableOption "Identification du nom de machine.";
isRollo = mkEnableOption "Identification du nom de machine.";
isXray = mkEnableOption "Identification du nom de machine.";
};
}; };
###### implementation #* Utilisé dans les fichiers .nix
# https://nixos.org/releases/nixos/14.12-small/nixos-14.12.374.61adf9e/manual/sec-writing-modules.html r6d.config-generator = {
# https://nixos.org/wiki/NixOS:extend_NixOS #enable = mkEnableOption "Génération de la configuration d'une machine.";
config = mkMerge awesome = mkEnableOption "Profil pour activer le gestionnaire de fenêtre awesome.";
[ # Unconditional stuff. auto-upgrade = mkEnableOption "Profil pour activer les mises à jour automatiques.";
{ cartographie = mkEnableOption "Profil pour activer les outils de gestion de données géographiques.";
r6d.config-generator.enable = true; conception-assistee = mkEnableOption "Profil pour activer les outils de conception électronique & modélisation 3D";
r6d.computers = { database_postgres = mkEnableOption "Profil pour activer le SGBD PostgreSQL.";
isLatitude = host == "latitude.dubronetwork.fr"; developpement = mkEnableOption "Profil pour activer les outils de développement";
isMonstre = host == "monstre.dubronetwork.fr"; developpement-elm = mkEnableOption "Profil pour activer les outils de développement Elm";
isNeoNomade = host == "neo-nomade.dubronetwork.fr"; developpement-haskell = mkEnableOption "Profil pour activer les outils de développement Haskell";
isNomade = host == "nomade.dubronetwork.fr"; developpement-java = mkEnableOption "Profil pour activer les outils de développement Java";
isOcean = host == "ocean.prunetwork.fr"; developpement-rust = mkEnableOption "Profil pour activer les outils de développement Rust";
isPedro = host == "pedro.dubronetwork.fr"; docker = mkEnableOption "Profil pour l'utilisation de Docker.";
isPhenom = host == "phenom.dubronetwork.fr"; dovecot = mkEnableOption "Profil pour activer le serveur Dovecot.";
isRadx = host == "radx.prunetwork.fr"; dns_autorite = mkEnableOption "Profil pour servir les fichiers de zone DNS.";
isRollo = host == "rollo.dubronetwork.fr"; dns_resolveur = mkEnableOption "Profil pour activer un résolveur DNS local.";
isXray = host == "xray.prunetwork.fr"; 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.";
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.";
murmur = mkEnableOption "Profil pour activer un serveur Mumble (murmur)";
nix-serve-client = mkEnableOption "Profil pour que la machine soit un client de cache nix.";
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";
print = mkEnableOption "Profil pour activer cups & pouvoir imprimer.";
pulseaudio = mkEnableOption "Profil pour activer pulseaudio.";
rabbitmq = mkEnableOption "Profil pour activer le service de messagerie AMQP.";
radicale = mkEnableOption "Profil pour activer le service d'hébergement de calendrier + tâches & contacts.";
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.";
tincAddress = mkOption {
default = "";
example = "192.168.1.1";
description = "Adresse du noeud tinc local";
type = lib.types.string;
}; };
} tincExtraConfig = mkOption {
default = "";
# Conditional stuff example = ''
Mode = router
ConnecTo = bar
'';
description = "Configuration supplémentaire pour tinc";
type = lib.types.string;
};
};
#* Utilisé pour avoir des raccourcis de machine
r6d.computers = {
isHydra = mkEnableOption "Identification du nom de machine.";
isLatitude = mkEnableOption "Identification du nom de machine.";
isMonstre = mkEnableOption "Identification du nom de machine.";
isNeoNomade = mkEnableOption "Identification du nom de machine.";
isNomade = mkEnableOption "Identification du nom de machine.";
isOcean = mkEnableOption "Identification du nom de machine.";
isPedro = mkEnableOption "Identification du nom de machine.";
isPhenom = mkEnableOption "Identification du nom de machine.";
isRadx = mkEnableOption "Identification du nom de machine.";
isRollo = 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 ## Définition des profils génériques
(mkIf pfl.isDesktop { (mkIf pfl.isDesktopEnvironment {
r6d.config-generator = { r6d.config-generator = {
awesome = true; awesome = true;
nix-serve-client = true; internetSuite = true;
scanner = true; multimediaSuite = true;
officeSuite = true;
pulseaudio = true;
securitySuite = true;
}; };
}) })
(mkIf pfl.isHome {
r6d.profiles.isDesktop = true;
})
(mkIf (pfl.isServer && !comp.isMonstre) { (mkIf (pfl.isServer && !comp.isMonstre) {
r6d.config-generator = { r6d.config-generator = {
#database_postgres = true; #database_postgres = true;
@@ -136,6 +130,7 @@ in
#dns_resolveur = true; #dns_resolveur = true;
# inutile d'exposer la conf complète du serveur par le store tant qu'il n'y a pas de protection complémentaire - utilisation SSH ? # inutile d'exposer la conf complète du serveur par le store tant qu'il n'y a pas de protection complémentaire - utilisation SSH ?
#nix-serve-server = true; #nix-serve-server = true;
smokeping = true;
#rabbitmq = true; #rabbitmq = true;
}; };
@@ -147,16 +142,10 @@ in
}; };
}) })
(mkIf pfl.isWorkstation { (mkIf pfl.isWorkstation {
r6d.profiles.isDesktop = true; r6d.profiles.isDesktopEnvironment = true;
r6d.config-generator = { r6d.config-generator = {
cartographie = true;
developpement = true;
docker = true; docker = true;
edition-musique = true;
edition-photo = true;
edition-video = true;
}; };
}) })
@@ -164,12 +153,24 @@ in
(mkIf pfl.isDubronetwork { (mkIf pfl.isDubronetwork {
r6d.config-generator = { r6d.config-generator = {
auto-upgrade = true; auto-upgrade = true;
locate = true;
print = true; print = true;
}; };
}) })
(mkIf (pfl.isDubronetwork && pfl.isWorkstation) { (mkIf (pfl.isDubronetwork && pfl.isWorkstation) {
r6d.config-generator = { r6d.config-generator = {
cartographie = true;
conception-assistee = true; conception-assistee = true;
docker = true;
developpement = true;
developpement-elm = true;
developpement-haskell = true;
developpement-java = true;
developpement-rust = true;
edition-musique = true;
edition-photo = true;
edition-video = true;
scanner = true;
virtualbox = true; virtualbox = true;
xmonad = true; xmonad = true;
}; };
@@ -179,14 +180,38 @@ in
(mkIf pfl.isPrunetwork { (mkIf pfl.isPrunetwork {
r6d.config-generator = { r6d.config-generator = {
auto-upgrade = true; auto-upgrade = true;
docker = true;
locate = true;
fail2ban = true; fail2ban = true;
smokeping = true;
swap = true; swap = true;
}; };
}) })
(mkIf (pfl.isPrunetwork && pfl.isWorkstation) {
r6d.config-generator = {
cartographie = true;
conception-assistee = true;
docker = true;
developpement = true;
#developpement-elm = true;
developpement-haskell = true;
developpement-java = true;
developpement-rust = true;
edition-musique = true;
edition-photo = true;
edition-video = true;
hydra-core = false; # DO NOT ENABLE ON WORKSTATION, YOU CAN CRASH YOUR SYSTEM
print = true;
scanner = true;
#virtualbox = true;
#xmonad = true;
};
})
## Affectation des profils aux machines ## Affectation des profils aux machines
(mkIf comp.isOcean { (mkIf comp.isHydra {
networking.hostName = "hydra.prunetwork.fr"; # Define your hostname.
r6d.profiles = { r6d.profiles = {
isPrunetwork = true; isPrunetwork = true;
isServer = true; isServer = true;
@@ -194,47 +219,85 @@ in
r6d.config-generator = { r6d.config-generator = {
docker = true; docker = true;
radicale = true;
};
})
(mkIf comp.isRadx {
r6d.profiles = {
isHome = true;
isPrunetwork = true;
isWorkstation = true;
};
r6d.config-generator = {
elasticsearch = true;
hydra-builder = true; hydra-builder = true;
hydra-core = true; hydra-core = true;
kibana = true; nix-serve-server = true;
print = true; tincAddress = "192.168.12.9/24";
rabbitmq = true; tincExtraConfig = ''
virtualbox = true; ConnectTo = rollo_dubronetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
}; };
}) })
(mkIf comp.isXray { (mkIf comp.isOcean {
networking.hostName = "ocean.prunetwork.fr"; # Define your hostname.
r6d.profiles = { r6d.profiles = {
isPrunetwork = true; isPrunetwork = true;
isServer = true; isServer = true;
}; };
})
(mkIf comp.isLatitude { r6d.config-generator = {
docker = true;
hydra-builder = true;
radicale = true;
nix-serve-client = true;
nix-serve-server = true;
tincAddress = "192.168.12.6/24";
tincExtraConfig = ''
ConnectTo = hydra_prunetwork_fr
ConnectTo = rollo_dubronetwork_fr
'';
};
})
(mkIf comp.isRadx {
networking.hostName = "radx.prunetwork.fr"; # Define your hostname.
r6d.profiles = { r6d.profiles = {
isDubronetwork = true; isPrunetwork = true;
isHome = true;
isWorkstation = true; isWorkstation = true;
}; };
r6d.config-generator = { r6d.config-generator = {
database_postgres = true;
elasticsearch = true;
#hydra-core = false; # DO NOT ENABLE ON WORKSTATION
kibana = true;
nix-serve-client = true;
nix-serve-server = true;
rabbitmq = true;
tincAddress = "192.168.12.3/24";
tincExtraConfig = ''
ConnectTo = monstre_dubronetwork_fr
ConnectTo = rollo_dubronetwork_fr
ConnectTo = hydra_prunetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
virtualbox = true;
};
})
(mkIf comp.isLatitude {
networking.hostName = "latitude.dubronetwork.fr"; # Define your hostname.
r6d.profiles = {
isDubronetwork = true;
isWorkstation = true;
};
r6d.config-generator = {
jetbrains-licensed = true;
laptop = true; laptop = true;
nix-serve-client = true;
nix-serve-server = true;
tincAddress = "192.168.12.2/24"; tincAddress = "192.168.12.2/24";
tincExtraConfig = "ConnectTo = phenom_dubronetwork_fr"; tincExtraConfig = ''
ConnectTo = monstre_dubronetwork_fr
ConnectTo = rollo_dubronetwork_fr
ConnectTo = hydra_prunetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
}; };
}) })
(mkIf comp.isMonstre { (mkIf comp.isMonstre {
networking.hostName = "monstre.dubronetwork.fr"; # Define your hostname.
r6d.profiles = { r6d.profiles = {
isDubronetwork = true; isDubronetwork = true;
isServer = true; isServer = true;
@@ -242,21 +305,41 @@ in
r6d.config-generator = { r6d.config-generator = {
fail2ban = true; fail2ban = true;
murmur = true;
nix-serve-client = true; nix-serve-client = true;
nix-serve-server = true;
nixStoreProxyCache = true; nixStoreProxyCache = true;
tincAddress = "192.168.12.4/24";
tincExtraConfig = ''
ConnectTo = rollo_dubronetwork_fr
ConnectTo = hydra_prunetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
}; };
}) })
(mkIf comp.isNeoNomade{ (mkIf comp.isNeoNomade{
networking.hostName = "neo-nomade.dubronetwork.fr"; # Define your hostname.
r6d.profiles = { r6d.profiles = {
isDubronetwork = true; isDubronetwork = true;
isHome = true; isDesktopEnvironment = true;
}; };
r6d.config-generator = { r6d.config-generator = {
laptop = true; laptop = true;
scanner = true;
tincAddress = "192.168.12.7/24";
tincExtraConfig = ''
ConnectTo = monstre_dubronetwork_fr
ConnectTo = rollo_dubronetwork_fr
ConnectTo = hydra_prunetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
}; };
}) })
# Dubro Vivo - St Malo
#tincAddress = "192.168.12.8/24";
(mkIf comp.isNomade{ (mkIf comp.isNomade{
networking.hostName = "nomade.dubronetwork.fr"; # Define your hostname.
r6d.profiles.isDubronetwork = true; r6d.profiles.isDubronetwork = true;
r6d.config-generator = { r6d.config-generator = {
@@ -271,23 +354,32 @@ in
r6d.config-generator = { r6d.config-generator = {
fail2ban = true; fail2ban = true;
online-ipv6 = true;
}; };
}) })
(mkIf comp.isPhenom { (mkIf comp.isPhenom {
networking.hostName = "phenom.dubronetwork.fr"; # Define your hostname.
r6d.profiles = { r6d.profiles = {
isDubronetwork = true; isDubronetwork = true;
isHome = true;
isWorkstation = true; isWorkstation = true;
}; };
r6d.config-generator = { r6d.config-generator = {
jetbrains-licensed = true;
#hydra-core = true;
nix-serve-client = true;
nix-serve-server = true; nix-serve-server = true;
edition-photo = true; edition-photo = true;
tincAddress = "192.168.12.1/24"; tincAddress = "192.168.12.1/24";
tincExtraConfig = ''
ConnectTo = monstre_dubronetwork_fr
ConnectTo = rollo_dubronetwork_fr
ConnectTo = hydra_prunetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
}; };
}) })
(mkIf comp.isRollo { (mkIf comp.isRollo {
networking.hostName = "rollo.dubronetwork.fr"; # Define your hostname.
r6d.profiles = { r6d.profiles = {
isDubronetwork = true; isDubronetwork = true;
isServer = true; isServer = true;
@@ -298,7 +390,14 @@ in
fail2ban = true; fail2ban = true;
mailboxes = true; mailboxes = true;
murmur = true; murmur = true;
online-ipv6 = true; nix-serve-client = true;
nix-serve-server = true;
tincAddress = "192.168.12.5/24";
tincExtraConfig = ''
ConnectTo = hydra_prunetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
virtualbox = true;
znc = true; znc = true;
}; };
}) })

View File

@@ -7,6 +7,7 @@ let
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
in in
# TODO: rc.lua par défaut (système)
mkIf cfg.awesome { mkIf cfg.awesome {
environment.variables = { environment.variables = {

View File

@@ -7,12 +7,13 @@ let
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
in in
# TODO: ménage
{ {
# Nombre de process d'installation en parrallèle effectués par Nix # Nombre de process d'installation en parrallèle effectués par Nix
nix.buildCores = 0; nix.buildCores = 0;
# The NixOS release to be compatible with for stateful data such as databases. # The NixOS release to be compatible with for stateful data such as databases.
system.stateVersion = "16.09"; system.stateVersion = "17.03";
# copies the NixOS configuration file (usually /etc/nixos/configuration.nix) and links it from the resulting system (getting to /run/current-system/configuration.nix) # 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; system.copySystemConfiguration = true;
@@ -28,37 +29,6 @@ in
# Paquets # Paquets
environment = { environment = {
systemPackages = with pkgs; [
bind # utilisé pour les utilitaires comme dig
byobu # permet de se déconnecter d'un terminal sans l'aréter
exfat # Pour monter les FAT avec Fuse
git gitAndTools.gitSVN gitAndTools.tig gti # outil de gestion de version
gnumake # pour décrire les recettes de compilation
gnupg # GPG
gpm # prise en charge de la souris en console
htop # monitoring
lsb-release # pour les scripts qui utilisent cet outil
#libressl # librairie pour faire du TLS et les algorithmes de crypto par OpenBSD
ncdu # outil pour voir l'espace utilisé
nmap # outil de scan de port réseau
mtr # outil de diagnostic réseau
par2cmdline # outil de récupération de fichiers corrompus - .par2
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
python34Packages.glances # monitoring
pwgen # générateur de mot de passe
rtorrent # outil de téléchargement de torrent & magnet
tmux # nécessaire pour byobu
tree # affiche une arborescence de fichiers et dossiers
usbutils
(import ./vim.nix)
wget # client HTTP console
which # pour connaitre le chemin d'un exécutable
];
shellAliases = { shellAliases = {
byobu = "byobu-tmux"; byobu = "byobu-tmux";
gpg = "gpg2"; gpg = "gpg2";
@@ -67,15 +37,14 @@ in
tree1 = "tree -d -L 1"; tree1 = "tree -d -L 1";
tree2 = "tree -d -L 2"; tree2 = "tree -d -L 2";
tree3 = "tree -d -L 3"; 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"; grep = "grep --color=auto";
vi = "vim"; vi = "vim";
byobu-adminsys = "/etc/nixos/base/byobu-adminsys";
}; };
etc.gitconfig.text = builtins.readFile ./gitconfig; etc.gitconfig.text = builtins.readFile ./gitconfig;
}; };
# programmes qui n'ont pas besoin de sudo pour fonctionner
security.setuidPrograms = [
"mtr"
];
programs.bash = { programs.bash = {
enableCompletion = true; enableCompletion = true;
promptInit = builtins.readFile ./bash-prompt.sh; promptInit = builtins.readFile ./bash-prompt.sh;

View File

@@ -8,6 +8,7 @@
status = auto status = auto
[alias] [alias]
a = add -p a = add -p
br = for-each-ref --sort=committerdate refs/heads/ --format='%(committerdate:short)\t%(authorname)\t%(refname:short)'
ci = commit ci = commit
co = checkout co = checkout
ff = pull --ff-only ff = pull --ff-only

View File

@@ -24,4 +24,10 @@ mkIf cfg.laptop {
networkmanagerapplet # gestionnaire réseau graphique + console (nm-applet + nmtui) networkmanagerapplet # gestionnaire réseau graphique + console (nm-applet + nmtui)
wirelesstools # fournis iwconfig wirelesstools # fournis iwconfig
]; ];
# Services
services.xserver.synaptics = {
enable = true;
twoFingerScroll = true;
};
} }

View File

@@ -22,5 +22,8 @@ mkIf true {
"net.ipv6.conf.default.temp_prefered_lft" = 3600; # 1 heure "net.ipv6.conf.default.temp_prefered_lft" = 3600; # 1 heure
"net.ipv6.conf.default.temp_valid_lft" = 3600; # 1 heure "net.ipv6.conf.default.temp_valid_lft" = 3600; # 1 heure
"net.ipv6.conf.default.use_tempaddr" = 2; # activé "net.ipv6.conf.default.use_tempaddr" = 2; # activé
};
"net.ipv6.conf.all.forwarding" = true;
"net.ipv6.conf.default.forwarding" = true;
};
} }

View File

@@ -15,4 +15,9 @@ mkIf true {
networking.extraHosts = '' networking.extraHosts = ''
127.0.0.1 ${config.networking.hostName} 127.0.0.1 ${config.networking.hostName}
''; '';
boot.kernel.sysctl = {
"net.ipv4.conf.all.forwarding" = true;
"net.ipv4.conf.default.forwarding" = true;
};
} }

View File

@@ -7,7 +7,7 @@ let
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
in in
{ mkIf false {
# Définition du IO Scheduler pour les SSD # Définition du IO Scheduler pour les SSD
services.udev.extraRules = '' services.udev.extraRules = ''
# set deadline scheduler for non-rotating disks # set deadline scheduler for non-rotating disks

View File

@@ -1,40 +0,0 @@
{ stdenv, fetchurl
, boost
, bzip2
, cmake
, expat
, geos
, lua
, postgresql
, proj
, zlib
}
stdenv.mkDerivation rec {
#version = "0.87.1";
version = "0.90.1";
name = "osm2pgsql-${version}-0";
src = fetchurl {
url = "https://github.com/openstreetmap/osm2pgsql/archive/${version}.tar.gz";
sha256 = "0i0zg8di8nbh96qnyyr156ikwcsq1w9b2291bazm5whb351flmqx";
};
#nativeBuildInputs = [ ];
buildInputs = [ ];
#preConfigure = ''
'';
#buildPhase = ''jam "-j$NIX_BUILD_CORES" '';
#installPhase = ''
#'';
meta = with stdenv.lib; {
homepage = http://wiki.openstreetmap.org/wiki/Osm2pgsql;
description = "osm2pgsql is a tool for loading OpenStreetMap data into a PostgreSQL / PostGIS database suitable for applications like rendering into a map, geocoding with Nominatim, or general analysis.";
license = licenses.gpl2;
#maintainers = [ maintainers.phunehehe ];
maintainers = [ maintainers.jpierre03 ];
};
}

View File

@@ -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")

View File

@@ -0,0 +1,570 @@
-- $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
-- 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,
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),
awful.key({ modkey }, "F2", function () awful.util.spawn("firefox") end),
-- awful.key({ modkey }, "F3", function () awful.util.spawn("") end),
awful.key({ modkey }, "F4", function () awful.util.spawn("chromium") end),
awful.key({ modkey }, "F5", function () awful.util.spawn("spacefm") end),
awful.key({ modkey }, "F6", function () awful.util.spawn("vlc") end),
awful.key({ modkey }, "F7", function () awful.util.spawn("claws-mail") end),
awful.key({ modkey }, "F12", function () awful.util.spawn("slock") end),
awful.key({ modkey, "Shift" }, "F1", function () awful.util.spawn("claws-mail") end),
awful.key({ modkey, "Shift" }, "F3", function () awful.util.spawn("pcmanfm") end),
awful.key({ modkey }, "F10", function () awful.util.spawn("xrandr-auto-2") end),
awful.key({ modkey }, "F11", function () awful.util.spawn("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),
)
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")

View File

@@ -1,57 +0,0 @@
{ config, lib, pkgs, ... }:
let
#inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
{
imports = [
# installées systématiquement
./environment.nix
./localisation.nix
./network.nix
#./network-ipv6.nix
./sudo.nix
./service-haveged.nix
./service-monitoring.nix
./service-ssh.nix
./udev.nix
# commandées par config-generator
## option de configuration spécifique
./app-awesome.nix # pour les profils awesome
./app-cao.nix # de conception assisté par ordinateur & modélisation
./app-cartographie.nix # utilisée pour manipuler les données géographiques & cartes
./app-developpement.nix # utilisée pour développer des programmes/scripts
./app-docker.nix # pour activer docker
./app-edition-musique.nix # pour modifier les fichiers musicaux
./app-edition-photo.nix # pour modifier les photos & assimilé
./app-edition-video.nix # pour modifier les vidéos
./app-jeux.nix # permettant de jouer ;)
./app-virtualbox.nix # pour exploiter virtualbox
./auto-upgrade.nix # mise à jour automatique du système
./laptop.nix # appli & configuration adaptée pour un PC portable
./print.nix # configuration de base de cups
./service-elasticsearch.nix # service de stockage et recher de données
./service-hydra-build.nix # service de construction de paquet. -> la machine compile des paquets
./service-hydra-core.nix # service pour l'instance d'hydra
./service-kibana.nix # service de visualisation de données stockées dans elasticsearch
./service-laptop.nix # services spécifiques aux pc portables
./service-locate.nix # service locate
./swap.nix # définition de l'utilisation du swap
## if isDesktop
./app-adminsys.nix # pour gérer le système dans son ensemble et les services
./app-bureautique.nix # dédiée à la bureautique (traitement de texte, dessin, ...)
./app-client-internet.nix # pour accéder & utiliser des ressources par le réseau
./app-multimedia.nix # pour gérer le son, l'image et la vidéo
./app-network.nix # de gestion, de diagnostique & surveillance réseau
./app-securite.nix # relatives à la sécurité (chiffrement, gpg, mots de passe, ...)
./hardware-scanner.nix # utilisation d'un scanner
./service-pulseaudio.nix # activation du serveur audio
./service-x11.nix # activation du serveur graphique X
];
}

View File

@@ -1,18 +0,0 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf true {
# Authorisation de certaines applications par sudo sans mot de passe
security.sudo.extraConfig = ''
%users ALL = NOPASSWD: ${pkgs.mtr}/bin/mtr
%users ALL = NOPASSWD: ${pkgs.slock}/bin/slock
'';
}

View File

@@ -7,13 +7,10 @@ let
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
in in
mkIf cfg.laptop { mkIf cfg.developpement-haskell {
# Gestion spécifique pour PC portable services.hoogle = {
# Services
services.xserver.synaptics = {
enable = true; enable = true;
twoFingerScroll = true; # port 8080
}; };
} }

View File

@@ -6,7 +6,7 @@ let
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
in in
# TODO: ménage
mkIf cfg.hydra-builder { mkIf cfg.hydra-builder {
# Paquets # Paquets
@@ -28,18 +28,18 @@ mkIf cfg.hydra-builder {
## Ménage automatique tous les jours ## Ménage automatique tous les jours
nix.gc.automatic = true; nix.gc.automatic = true;
users.users."hydrabld" = { # users.users."hydrabld" = {
description = "Execution des jobs hydra"; # description = "Execution des jobs hydra";
group = "nixbld"; # group = "nixbld";
extraGroups = [ # extraGroups = [
"docker" # "docker"
"nixbld" # "nixbld"
"vboxusers" # "vboxusers"
]; # ];
isNormalUser = true; # devrait être à false: TODO débugger la conf ssh & users pour que ça marche en user système # isNormalUser = true; # devrait être à false: TODO débugger la conf ssh & users pour que ça marche en user système
openssh.authorizedKeys.keys = [ # openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGYpjcWJCf8dXpv2LmoIaNVbwZXEC50QUU6Az+lqeD89 hydra radx" # "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGYpjcWJCf8dXpv2LmoIaNVbwZXEC50QUU6Az+lqeD89 hydra radx"
]; # ];
}; # };
} }

View File

@@ -5,8 +5,24 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
in
#### 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 cfg.hydra-core { mkIf cfg.hydra-core {
# Paquets # Paquets
@@ -43,8 +59,13 @@ mkIf cfg.hydra-core {
listenHost = "localhost"; listenHost = "localhost";
minimumDiskFree = 50; # Go minimumDiskFree = 50; # Go
smtpHost = "localhost"; smtpHost = "localhost";
#package = hydra-src-pkg ;
}; };
#systemd.services.hydra-evaluator = {
# path = [ pkgs.nettools config.services.hydra.package ];
#};
## Ménage ## Ménage
#nix.gc.automatic = true; #nix.gc.automatic = true;
@@ -53,6 +74,7 @@ mkIf cfg.hydra-core {
### Machines connues ### Machines connues
programs.ssh.knownHosts = { programs.ssh.knownHosts = {
"hydra.prunetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHqja/yYsQeS5amZKPUG+EKSIkjEN6fYW54Fzvj1pFaP";
"monstre.dubronetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBTTrLhq1Cwm0rpnwEIxSLqVrJWZnt+/9dt+SKd8NiIc"; "monstre.dubronetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBTTrLhq1Cwm0rpnwEIxSLqVrJWZnt+/9dt+SKd8NiIc";
"pedro.dubronetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM7fjo2ysLqlfSo6BKnc6I6m1ayoPrbwEEyTKZmUzsOD"; "pedro.dubronetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM7fjo2ysLqlfSo6BKnc6I6m1ayoPrbwEEyTKZmUzsOD";
"ocean.prunetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINCaRuTl8iCTUE4XInOpkSlwQj5Re4w4Iq+gNIlJe8pA"; "ocean.prunetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINCaRuTl8iCTUE4XInOpkSlwQj5Re4w4Iq+gNIlJe8pA";

View File

@@ -7,10 +7,13 @@ let
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
in in
# TODO: ajouter option
# TODO: changer adresse mail
mkIf true { mkIf true {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
bc
mailutils mailutils
]; ];
@@ -20,23 +23,27 @@ mkIf true {
services.munin-node = { services.munin-node = {
enable = true; enable = true;
}; };
systemd.services.munin-node = {
path = with pkgs; [ munin lm_sensors ];
serviceConfig.TimeoutStartSec = "3min";
};
## Munin server -- generate /var/www/munin ## Munin server -- generate /var/www/munin
services.munin-cron = { services.munin-cron = {
enable = true; enable = true;
hosts = '' hosts = ''
[${config.networking.hostName}] [${config.networking.hostName}]
address localhost address 127.0.0.1
''; '';
extraGlobalConfig = '' extraGlobalConfig = ''
contact.email.command mail -s "Munin notification for ''${var:host}" root@${config.networking.hostName} contact.email.command ${pkgs.mutt}/bin/mutt -F /etc/nixos/base/public/services/munin-muttrc -s "Munin notification for ''${var:host}" jean-pierre@ocean.prunetwork.fr
''; '';
}; };
# Réseau # Réseau
networking.firewall = { networking.firewall = {
allowedTCPPorts = [ allowedTCPPorts = [
8000 #8000
]; ];
allowedUDPPorts = [ allowedUDPPorts = [
]; ];

View File

@@ -0,0 +1,198 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf cfg.smokeping {
# Paquets
environment.systemPackages = with pkgs; [
bind
];
# Paquets avec setuid root
security.wrappers = {
# outil de diagnostic réseau
fping.source = "${pkgs.fping}/bin/fping";
};
# Services
services.smokeping = {
enable = true;
probeConfig = ''
+ FPing
#binary = ${pkgs.fping}/bin/fping
binary = ${config.security.wrapperDir}/fping
+DNS
#binary = ${pkgs.bind}/bin/dig
binary = /run/current-system/sw/bin/dig
forks = 5
offset = 50%
step = 300
timeout = 15
'';
targetConfig = ''
probe = FPing
menu = Top
title = Suivi de la latence reseau
remark = Monitoring de la latence reseau. \
Here you will learn all about the latency of our network.
+ Local
probe = FPing
menu = Local
title = Local Network
++ LocalMachine
menu = Local Machine
title = This host
host = localhost
+ Grudu_Tinc
probe = FPing
title = Grudu_Tinc
menu = Grudu.net - Tinc
++ Hydra
menu = hydra.grudu.net
title = hydra.grudu.net
host = hydra.grudu.net
++ Monstre
menu = monstre.grudu.net
title = monstre.grudu.net
host = monstre.grudu.net
++ Rollo
menu = rollo.grudu.net
title = rollo.grudu.net
host = rollo.grudu.net
++ Ocean
menu = ocean.grudu.net
title = ocean.grudu.net
host = ocean.grudu.net
++ MultiHost
menu = Multihost
title = Ensemble de mesures de latence
host = /Grudu_Tinc/Monstre /Grudu_Tinc/Rollo /Grudu_Tinc/Ocean /Grudu_Tinc/Hydra
+ Grudu_DNS
title = Grudu_DNS
menu = Grudu.net - DNS
probe = DNS
pings = 5
++ Ocean
title = ocean
menu = serveur ocean
server = ocean.prunetwork.fr
+++ ocean
host = ocean.grudu.net
lookup = ocean.grudu.net
+++ rollo
host = rollo.grudu.net
lookup = rollo.grudu.net
++ Rollo
title = rollo
menu = serveur rollo
server = rollo.dubronetwork.fr
+++ ocean
host = ocean.grudu.net
lookup = ocean.grudu.net
+++ rollo
host = rollo.grudu.net
lookup = rollo.grudu.net
++ MultiHost
menu = Multihost
title = Ensemble de mesures DNS
host = /Grudu_DNS/Ocean/ocean /Grudu_DNS/Ocean/rollo /Grudu_DNS/Rollo/ocean /Grudu_DNS/Rollo/rollo
+ France
probe = FPing
title = France
menu = Operateur francais
++ Atos
menu = Atos
title = www.atos.fr
host = www.atos.fr
++ Axialys
menu = Axialys
title = www.axialys.fr
host = www.axialys.fr
++ Azurtel
menu = azurtel
title = www.azurtel.fr
host = www.azurtel.fr
++ Bouygues-Telecom
menu = Bouygues-Telecom
title = www.bouygues-telecom.fr
host = www.bouygues-telecom.fr
++ Colt
menu = Colt
title = www.colt.fr
host = www.colt.fr
++ Completel
menu = completel
title = www.completel.fr
host = www.completel.fr
++ Free
menu = Free
title = www.free.fr
host = www.free.fr
++ Kosmos
menu = Kosmos
title = www.kosmos.fr
host = www.kosmos.fr
++ Orange
menu = Orange
title = www.orange.fr
host = www.orange.fr
++ Renater
menu = Renater
title = www.renater.fr
host = www.renater.fr
++ SFR
menu = SFR
title = www.sfr.fr
host = www.sfr.fr
++ MultiHost
menu = Multihost
title = Ensemble de mesures de latence
host = /France/Atos /France/Axialys /France/Azurtel \
/France/Bouygues-Telecom \
/France/Completel \
/France/Free \
/France/Kosmos \
/France/Orange \
/France/Renater \
/France/SFR
# /France/Colt
'';
};
# Réseau
networking.firewall = {
allowedTCPPorts = [
#8081 # accès depuis localhost uniquement ou à travers un proxy nginx
];
allowedUDPPorts = [
];
};
}

3
services/munin-muttrc Normal file
View File

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

View File

@@ -7,12 +7,12 @@ let
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
in in
mkIf profiles.isDesktop { mkIf cfg.pulseaudio {
# Pulse Audio # Pulse Audio
hardware.pulseaudio = { hardware.pulseaudio = {
enable = true; enable = true;
support32Bit = true; support32Bit = true;
daemon.config = { flat-volumes = "no"; };
}; };
environment.etc."pulse/daemon.conf".text = "flat-volumes = no";
} }

View File

@@ -7,12 +7,12 @@ let
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
in in
mkIf profiles.isDesktop { mkIf profiles.isDesktopEnvironment {
# Services # Services
# Enable the X11 windowing system. # Enable the X11 windowing system.
services.xserver = { services.xserver = {
#enable = true; enable = true;
layout = "fr"; layout = "fr";
xkbOptions = "eurosign:e"; xkbOptions = "eurosign:e";
displayManager.lightdm.enable = true; displayManager.lightdm.enable = true;

View File

@@ -13,6 +13,7 @@ mkIf cfg.xmonad {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
dmenu dmenu
haskellPackages.xmobar haskellPackages.xmobar
trayer
]; ];
# Services # Services
@@ -23,4 +24,7 @@ mkIf cfg.xmonad {
haskellPackages.xmobar haskellPackages.xmobar
]; ];
}; };
environment.variables = {
_JAVA_AWT_WM_NONREPARENTING = "1";
};
} }