Compare commits

...

193 Commits

Author SHA1 Message Date
19bd8fbfbc migration config rollo sur annuaire 2017-07-15 12:44:26 +02:00
Yves Dubromelle
630217ce02 ghc-mod fonctionne à nouveau 2017-07-14 17:03:47 +02:00
Yves Dubromelle
dcdaf91f8b voir les différences entre la configuration actuelle et /etc/nixos/configuration.nix 2017-07-05 22:51:29 +02:00
Yves Dubromelle
5803fdbbff configuration awesome par défaut linkée dans /etc 2017-07-05 22:50:26 +02:00
Yves Dubromelle
dcae05d4c0 ménage (suite) 2017-07-05 22:50:02 +02:00
Yves Dubromelle
196cc008c8 +service gpm pour la souris en console 2017-07-05 22:02:33 +02:00
Yves Dubromelle
fcc1cba9fb déplacement de dérivations dans les fichiers adéquats 2017-07-05 22:02:20 +02:00
f8a687be52 migration de neo-nomade à l'annuaire 2017-07-01 14:50:46 +02:00
28fc448e0c Mettre à jour 'README.md' 2017-07-01 12:45:28 +00:00
Yves Dubromelle
195f5e35a1 +plantuml dans les paquets de développement& 2017-06-23 23:16:02 +02:00
ad0799f08d indentation 2017-06-22 19:46:55 +02:00
Yves Dubromelle
4dbcc8ddc0 git alias to show commits not pushed to remotes 2017-06-03 18:06:03 +02:00
Yves Dubromelle
3a5ae68f3a migrated machines cleanup (latitude, monstre, pedro, phenom) 2017-06-03 17:44:49 +02:00
772cab2253 nsp 2017-06-03 13:10:00 +02:00
92bf72c7bf indentation 2017-06-03 13:08:50 +02:00
60f466a887 add sqlite to dev profile 2017-06-03 13:05:14 +02:00
eca3d77610 add option to build nixos documentation 2017-06-03 12:58:10 +02:00
78ece5641d add server options 2017-05-31 17:18:17 +02:00
cc851a7946 add assertion 2017-05-31 15:46:27 +02:00
aa22c6337d migrated into profile 2017-05-31 15:43:42 +02:00
acacc94903 add development packages to workstation profile 2017-05-31 15:41:12 +02:00
1f480bbbff add option to identify Workstations 2017-05-31 14:45:39 +02:00
Yves Dubromelle
ac91ce4492 regroupement des options éparses en configurationOptions et renommage 2017-05-31 00:23:10 +02:00
Yves Dubromelle
c43adc80cb utilisation des profils pour modifier les flags :) 2017-05-30 23:21:33 +02:00
Yves Dubromelle
745d2cd171 on peut se passer de passer lib en paramètre 2017-05-25 23:30:50 +02:00
Yves Dubromelle
259a1a0aa6 cible make pour juste builder NixOS sans appliquer 2017-05-25 02:18:07 +02:00
Yves Dubromelle
854eed9227 ébauche de fonction pour générer un profil 2017-05-25 02:17:42 +02:00
8ee09217cb une machine hydra-builder doit faire du garbage-collection régulièrement 2017-05-22 10:42:16 +02:00
b15672c3ad ménage config generator 2017-05-21 13:58:09 +02:00
ab1d364327 ajout option munin 2017-05-20 22:43:52 +02:00
67eadfab97 ces anciens profils ont été convertis en assertions 2017-05-19 17:18:20 +02:00
ff733c5d08 migration monstre 2017-05-19 13:02:31 +02:00
d3f1f2121e ajustement readme 2017-05-19 13:02:31 +02:00
Yves Dubromelle
cdd75e063d assertion DNS 2017-05-19 12:58:39 +02:00
a816a81b9e migration machines 2017-05-19 12:37:39 +02:00
aa6ae3cc8d ajout config yubike 2017-05-15 22:53:29 +02:00
419a1cbf53 fix: spacefm crashes https://github.com/IgnorantGuru/spacefm/issues/671 2017-05-15 20:34:35 +02:00
b03d4acfe2 add assertions on base 2017-05-13 17:13:23 +02:00
274f4812f4 désactivation config-generator 2017-05-05 11:39:11 +02:00
4749384834 x11 doit être activé à la main dans configuration.nix 2017-05-05 11:23:19 +02:00
55650f01b5 désactivation locate (infinite recursion) 2017-05-05 11:16:55 +02:00
197961745d indentation 2017-05-05 01:39:19 +02:00
f2f49c6206 ajout plugin pandoc 2017-05-05 01:38:40 +02:00
6e29240664 désactivation sqlitebrowser 2017-05-05 01:38:24 +02:00
01c3b6fc39 ajout option rmilter 2017-04-30 15:07:10 +02:00
24fa43926b ajout instructions readme 2017-04-28 17:43:50 +02:00
2588e7052a script qui relance une commande des changement du système de fichier 2017-04-28 17:43:45 +02:00
21d6e21214 options: ensemble d'options pour nix-serve-client 2017-04-28 17:43:40 +02:00
b08da50c3c désactivation de personnalisation de paquets 2017-04-28 17:43:28 +02:00
02f76b6a30 fix: typo 2017-04-28 17:43:23 +02:00
e778ad19cb fix: oubli d'une migration vers l'utilisation de l'annuaire 2017-04-28 17:43:13 +02:00
a074cfcfa7 EXPERIMENTAL: cfg -> flags 2017-04-27 22:06:12 +02:00
7f8563f32b exparimental: utilisation de l'annuaire 2017-04-27 12:29:18 +02:00
2a923e150e options: ajout des variables pour les profils 2017-04-27 12:11:03 +02:00
3869c2d520 options: ajouts configuration-flags 2017-04-27 12:03:16 +02:00
ddac52530b annuaire: ajout variables dans template & application 2017-04-24 23:37:18 +02:00
fe6f3136f7 essai de backport d'un annuaire de gestion de parc 2017-04-22 01:15:38 +02:00
c6fc32fbe7 radx: desactivation rabbitmq 2017-04-13 19:52:12 +02:00
Yves Dubromelle
42db758638 munin: postfix commande ppour donner les droits de lecture à munin 2017-04-11 15:14:41 +02:00
System administrator
07d8924ecd gparted: coquille, était "parted" 2017-04-11 13:46:29 +02:00
System administrator
2dc04d849b encore une modification de port pour hoogle 2017-04-11 13:46:29 +02:00
184de980a5 munin: EXPERIMENTAL est membre du groupe postfix pour grapher les mails 2017-04-11 01:08:30 +02:00
System administrator
f16e4d8934 changement du port de hoogle (conflit au boulot) 2017-04-06 08:55:26 +02:00
e204ffb841 ajout d'un client pour la sauvegarde nuagique 2017-04-01 09:26:09 +02:00
8c0a18a55b awesome: ajout clementine sur maj + F6 2017-04-01 07:51:28 +02:00
fd834eb186 munin: update mail address 2017-03-30 00:08:18 +02:00
f12b21f620 hydra: l'évaluation des builds n'est pas prioritaire sur le système 2017-03-26 22:45:05 +02:00
09212b7b67 déplacement du service smokeping vers private 2017-03-26 21:45:26 +02:00
b518d9a525 activation wireshark 2017-03-25 12:46:55 +01:00
bda5db0417 découpages des applications en "graphical" et "terminal" 2017-03-25 12:46:41 +01:00
37ae56a380 ajout option graphical + affectation pour workstation et neonomade 2017-03-25 12:45:05 +01:00
Yves Dubromelle
50085c2961 répartition des imports dans le niveau 1 de sous-dossiers 2017-03-25 00:46:59 +01:00
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
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
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
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
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
114 changed files with 1790 additions and 1309 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,19 +21,25 @@ full-auto: submodules-update upgrade clean optimise
@date @date
optimise: optimise:
nix-store --optimise $(TIME) nix-store --optimise
rebuild-build:
$(TIME) time nixos-rebuild build --fallback --show-trace
rebuild-switch: rebuild-switch:
nixos-rebuild switch --fallback --show-trace $(TIME) time nixos-rebuild switch --fallback --show-trace
show-diff-with-current:
-diff /run/current-system/configuration.nix /etc/nixos/configuration.nix
show-roots: show-roots:
nix-store --gc --print-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 ##--------- Commandes spécifiques pour NixOS -- Opérations non courantes
@@ -40,6 +47,9 @@ download-sources:
# https://nixos.org/wiki/Download_all_sources # https://nixos.org/wiki/Download_all_sources
nix-store -r $$(grep -l outputHash $$(nix-store -qR $$(nix-instantiate '<nixpkgs>' -A geeqie) | grep '.drv$$')) nix-store -r $$(grep -l outputHash $$(nix-store -qR $$(nix-instantiate '<nixpkgs>' -A geeqie) | grep '.drv$$'))
build-iso:
nix-build '<nixpkgs/nixos>' -A config.system.build.isoImage -I nixos-config=/etc/nixos/base/iso-image/livecd-minimal.nix
##--------- Commandes spécifiques pour GIT ##--------- Commandes spécifiques pour GIT
push: submodules-push push: submodules-push

198
README.md
View File

@@ -1,18 +1,60 @@
# 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
* https://nixos.org/wiki/How_to_install_NixOS_from_Linux#Installing_through_a_chroot ## pour l'utilisation de l'annuaire (2017-04-28)
* https://github.com/NixOS/nixpkgs/issues/13305
# Notes pour l'upgrade de 16.03 vers 16.09 * faire les mises à jour de l'OS
* commiter & pusher l'état des dépôts (au cas où). Pour les différents dépôts `git a`, `git commit` puis `make tag push`
* mettre à jour les dépôts avec les dernières versions, `make submodules-update`
* vérifier que `configuration.nix` contient `services.xserver.enable = true;` pour les machines avec interface graphique
* vérifier que `configuration.nix` contient le nom de la machine `networking.hostName = "<X>";`
* tester la configuration : `nixos-rebuild build`
* corriger et ajouter les éléments manquant (notamment dans `private/annuaire.nix` )
* lorsque tout semble bon, vérifier :
* qu'il y a toujours des utilisateurs dans la configuration
* que le moyen d'accéder à la machine n'a pas été supprimé (surtout les machines distantes)
* lancer la commande de build de l'os : `make` :)
## pour le passage de 16.09 à unstable
* mettre à jour tous les dépôts
* changer la branche de base vers `nixos-unstable`
* changer la declaration de la machine dans `configuration.nix`
~~~
networking.hostName = "<bidule>";
~~~
devient
~~~
r6d.computers.is<bidule> = true;
~~~
* mettre à jour le channel
~~~
nix-channel --add https://nixos.org/channels/nixos-unstable nixos
nix-channel --update
~~~
* faire la mise à jour
~~~
make
~~~
## pour le passage de 16.03 à 16.09
* mettre le dépôt base sur la branche upgrade-16.09 * 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 +83,149 @@ 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

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

View File

@@ -0,0 +1,54 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
flags = currentMachine.configurationFlags;
in
mkIf currentMachine.profiles.isDesktopEnvironment {
# Paquets
environment.systemPackages = with pkgs; [
# Environement de bureau
arandr # interface graphique pour xrandr
wmname # pour définir le nom du gestionnaire de fenêtre (utile pour java)
#kde4.ksnapshot # capture d'écran
xclip # manipulation du clipboard X depuis la console
xorg.xbacklight # pour gérer la luminosité de l'écran
xorg.xev # pour repérer les codes + noms standard des actions clavier/souris
xorg.xkill # pour 'tuer une application'
## Gestionnaire de fenêtre & Thème
gnome3.adwaita-icon-theme # thème d'icone - semble fonctionner avec spaceFM
## Manipulation de fichier
#kde5.dolphin # gestionnaire de fichiers graphique
#kde5.dolphin-plugins # gestionnaire de fichiers graphique
pcmanfm # gestionnaire de fichiers graphique
spaceFM # gestionnaire de fichiers graphique
#vifm # gestionnaire de fichiers basé sur VIM (console)
## Terminal
sakura # terminal
];
# Polices supplémentaires
fonts.fonts = with pkgs; [
fira # police créée pour Firefox
fira-code # idem fira-mono + ligatures pour la programmation
fira-mono # dérivée de fira en monospace
hack-font # police monospace créée explicitement pour coder
hasklig # police dérivée de source-code-pro mais avec des ligatures
];
# Paquets avec setuid root
security.wrappers = {
# 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";
};
}

View File

@@ -2,17 +2,16 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf profiles.isDesktop { mkIf (flags.officeSuite && flags.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Bureautique # Bureautique
aspell aspellDicts.fr # correction d'ortographe
gnumeric # tableur gnumeric # tableur
#kde4.ksnapshot# réalisation de capture d'écran #kde4.ksnapshot# réalisation de capture d'écran
@@ -34,17 +33,5 @@ mkIf profiles.isDesktop {
pdfpc # pdf pdfpc # pdf
qpdfview # pdf qpdfview # pdf
gqview # visionneuse image & gestion basique de collection gqview # visionneuse image & gestion basique de collection
## Convertisseurs (texte -> <autre format>)
gnuplot # générateur de graphes à partir de données numériques
graphviz # dot, neato : traçage de graphes (carré, rond)
#jekyll # générateur statique de site web
#odpdown # conversion md -> presentation ODP : https://github.com/thorstenb/odpdown
pandoc
haskellPackages.pandoc-citeproc
texlive.combined.scheme-full # distribution LaTeX
#texLive # distribution LaTeX de base
#texLiveBeamer # paquets et extensions pour Beamer
#texLiveModerncv # paquets pour la classe Modern CV
]; ];
} }

View File

@@ -2,12 +2,12 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf cfg.conception-assistee { mkIf (flags.conception-assistee && flags.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

View File

@@ -2,18 +2,16 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf cfg.cartographie { mkIf (flags.cartographie && flags.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Gestion de données géographiques # Gestion de données géographiques
expat
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

@@ -0,0 +1,51 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
flags = currentMachine.configurationFlags;
in
mkIf (flags.internetSuite && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
# Clients Internet
## Navigateur
chromium
firefox
## Mail & Discussion (texte, audio)
clawsMail
hexchat
quasselClient
mumble
pidgin
thunderbird
# Transfert de fichier
filezilla
transmission_gtk
transmission_remote_gtk
];
/* TODO: voir pour appliquer la personnalisation
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,15 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
flags = currentMachine.configurationFlags;
in
mkIf (true && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
];
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -2,12 +2,12 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf cfg.jetbrains-licensed { mkIf (flags.jetbrains-licensed && flags.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

View File

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

View File

@@ -2,41 +2,33 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf cfg.developpement { mkIf (flags.developpement && flags.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Base de données # Base de données
pgadmin # interface d'administration de postgres pgadmin # interface d'administration de postgres
sqlitebrowser # interface d'administration de sqlite #sqlitebrowser # interface d'administration de sqlite
# C / C++
gcc # pour les appels depuis les scripts
# Documentation # Documentation
#zeal # consulter la documentation hors ligne #zeal # consulter la documentation hors ligne
# Gestion des sources # Gestion des sources
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
subversion
# Mono
#mono46 # interpréteur .NET
## 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
# Editeur texte
atom
]; ];
} }

View File

@@ -2,12 +2,12 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf cfg.edition-musique { mkIf (flags.edition-musique && flags.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

View File

@@ -2,23 +2,18 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf cfg.edition-photo { mkIf (flags.edition-photo && flags.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Méta données
exif
exiftags
# Retouche, modification & dessin vectoriel # Retouche, modification & dessin vectoriel
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
#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

View File

@@ -2,12 +2,12 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf cfg.edition-video { mkIf (flags.edition-video && flags.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

View File

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

View File

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

View File

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

View File

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

View File

@@ -2,9 +2,9 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf true { mkIf true {
@@ -12,6 +12,9 @@ mkIf true {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Adminsys # Adminsys
bind # utilisé pour les utilitaires comme dig
cowsay # pour ansible & 4lulz
dhcp # client dhcp
iotop iotop
lm_sensors lm_sensors
lshw lshw
@@ -21,10 +24,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 # Backup
duplicity # création de sauvegarde chiffrées (GPG) duplicity # création de sauvegarde chiffrées (GPG)
par2cmdline # outil de récupération de fichiers corrompus - .par2
# Compression # Compression
lz4 lz4
@@ -36,6 +41,8 @@ mkIf true {
exfat # Pour monter les FAT avec Fuse exfat # Pour monter les FAT avec Fuse
hubicfuse # montage hubic hubicfuse # montage hubic
ntfs3g # ntfs ntfs3g # ntfs
samba # partages windows
squashfsTools # squashfs
sshfsFuse # ssh sshfsFuse # ssh
## Gestion de FS ## Gestion de FS
@@ -43,15 +50,8 @@ 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
detox # The detox utility renames files to make them easier to work with.
duff # outil de recherche de fichiers en doublons 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
## Gestion de FS
gparted # Gestion graphique de partitions
)
(mkIf profiles.isDesktop
unetbootin # création de clefs USB bootables
)
]; ];
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,36 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
flags = currentMachine.configurationFlags;
in
mkIf true {
# Paquets
environment.systemPackages = with pkgs; [
byobu # permet de se déconnecter d'un terminal sans l'arréter
git gitAndTools.tig gti # outil de gestion de version
gnumake # pour décrire les recettes de compilation
gnupg # GPG
htop # monitoring
lsb-release # pour les scripts qui utilisent cet outil (dont byobu)
#libressl # librairie pour faire du TLS et les algorithmes de crypto par OpenBSD
ncdu # outil pour voir l'espace utilisé
p7zip # compression de fichier
parted # partitionnement de disque
pciutils
pinentry # pour taper les mots de passe gpg
psmisc # fournis les utilitaires comme killall, fuser, pstree
#python # python -- python -m SimpleHTTPServer 8000
shared_mime_info # MIME info
tmux # nécessaire pour byobu
tree # affiche une arborescence de fichiers et dossiers
usbutils
(import ./vim.nix)
wget # client HTTP console
which # pour connaitre le chemin d'un exécutable
];
}

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,21 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
flags = currentMachine.configurationFlags;
in
mkIf flags.developpement-java {
# Paquets
environment.systemPackages = with pkgs; [
# Java
maven
openjdk
];
environment.variables = {
JAVA_HOME = "${pkgs.openjdk}";
};
}

View File

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

View File

@@ -2,12 +2,12 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf cfg.developpement-rust { mkIf flags.developpement-rust {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,25 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
flags = currentMachine.configurationFlags;
in
mkIf flags.edition-video {
# Paquets
environment.systemPackages = with pkgs; [
ffmpeg-full # assemblage de flux audio & video en ligne de commande
];
/* TODO: voir pour appliquer la personnalisation
nixpkgs.config.packageOverrides = pkgs: {
ffmpeg-full = pkgs.ffmpeg-full.override {
nonfreeLicensing = true;
nvenc = true;
};
};
*/
}

View File

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

View File

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

View File

@@ -2,13 +2,12 @@
let let
inherit (lib) mkIf; inherit (lib) mkIf;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf true { mkIf true {
#mkIf profiles.isDesktop {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@@ -21,11 +20,15 @@ mkIf true {
## Diagnostic ## Diagnostic
arp-scan arp-scan
nmap # outil de scan de port réseau nmap # outil de scan de port réseau
mtr # outil de diagnostic réseau
#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

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

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

@@ -1,20 +1,15 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
let
#inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
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*/
./options.nix
# subfolders
./applications/graphical/default.nix
./applications/terminal/default.nix
./configuration/default.nix
./services/default.nix
]; ];
} }

View File

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

View File

@@ -1,30 +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 (computers.isRollo) "http://ocean.grudu.net:5001/")
(mkIf (computers.isRollo) "http://192.168.12.6:5000/")
#(mkIf (computers.isOcean) "http://rollo.grudu.net:5001/")
(mkIf (computers.isOcean) "http://192.168.12.5:5000/")
(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,31 +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-server {
# Cache http pour le store
# Services
services.nix-serve = {
enable = true;
};
# Réseau
networking.firewall = {
allowedTCPPorts = [
#5000 # ouvert sur tinc
];
allowedUDPPorts = [
];
extraCommands = ''
iptables -A INPUT -i tinc.grudunet -p tcp --dport 5000 -j ACCEPT
ip6tables -A INPUT -i tinc.grudunet -p tcp --dport 5000 -j ACCEPT
'';
};
}

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

@@ -6,375 +6,49 @@ let
pfl = config.r6d.profiles; pfl = config.r6d.profiles;
comp = config.r6d.computers; comp = config.r6d.computers;
host = config.networking.hostName; host = config.networking.hostName;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
flags = currentMachine.configurationFlags;
in in
{ {
###### interface # TODO camel case partout
# TODO everything in english
# TODO sortir ce qui est privé
###### interface
options = { options = {
#* Utilisé pour avoir des raccourcis de machine
#* Utilisé pour afecter des capacités aux machines r6d.computers = {
r6d.profiles = { isNomade = mkEnableOption "Identification du nom de machine.";
# Domaine
isDubronetwork = mkEnableOption "Pour distinguer les machines dubronetwork.";
isPrunetwork = mkEnableOption "Pour distinguer les machines prunetwork.";
# Utilisation machine
isDesktop = 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.";
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";
developpement-haskell = mkEnableOption "Profil pour activer les outils de développement Haskell";
developpement-java = mkEnableOption "Profil pour activer les outils de développement Java";
developpement-rust = mkEnableOption "Profil pour activer les outils de développement Rust";
docker = mkEnableOption "Profil pour l'utilisation de Docker.";
dovecot = mkEnableOption "Profil pour activer le serveur Dovecot.";
dns_autorite = mkEnableOption "Profil pour servir les fichiers de zone DNS.";
dns_resolveur = mkEnableOption "Profil pour activer un résolveur DNS local.";
edition-musique = mkEnableOption "Profil pour la création/édition de musique.";
edition-photo = mkEnableOption "Profil pour la création/édition de photos.";
edition-video = mkEnableOption "Profil pour la création/édition de video.";
elasticsearch = mkEnableOption "Profil pour activer le service elasticsearch.";
fail2ban = mkEnableOption "Profil pour activer Fail2ban.";
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.";
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.";
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";
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 = {
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 ###### implementation
# https://nixos.org/releases/nixos/14.12-small/nixos-14.12.374.61adf9e/manual/sec-writing-modules.html # 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 # https://nixos.org/wiki/NixOS:extend_NixOS
config = mkMerge config = mkMerge
[ # Unconditional stuff. [
{
r6d.config-generator.enable = true;
r6d.computers = {
isHydra = host == "hydra.prunetwork.fr";
isLatitude = host == "latitude.dubronetwork.fr";
isMonstre = host == "monstre.dubronetwork.fr";
isNeoNomade = host == "neo-nomade.dubronetwork.fr";
isNomade = host == "nomade.dubronetwork.fr";
isOcean = host == "ocean.prunetwork.fr";
isPedro = host == "pedro.dubronetwork.fr";
isPhenom = host == "phenom.dubronetwork.fr";
isRadx = host == "radx.prunetwork.fr";
isRollo = host == "rollo.dubronetwork.fr";
};
}
# Conditional stuff
## Définition des profils génériques ## Définition des profils génériques
(mkIf pfl.isDesktop {
r6d.config-generator = {
awesome = true;
#nix-serve-client = true;
scanner = true;
};
})
(mkIf pfl.isHome {
r6d.profiles.isDesktop = true;
})
(mkIf (pfl.isServer && !comp.isMonstre) {
r6d.config-generator = {
#database_postgres = true;
dns_autorite = 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 ?
#nix-serve-server = true;
#rabbitmq = true;
};
})
# /!\ PAS un serveur # /!\ PAS un serveur
(mkIf (!pfl.isServer || comp.isMonstre) { (mkIf (!pfl.isServer || comp.isMonstre) {
r6d.config-generator = { r6d.config-generator = {
dns_resolveur = true; dns_resolveur = true;
}; };
}) })
(mkIf pfl.isWorkstation {
r6d.profiles.isDesktop = true;
r6d.config-generator = {
docker = true;
};
})
## Profils liés à Dubronetwork
(mkIf pfl.isDubronetwork {
r6d.config-generator = {
auto-upgrade = true;
locate = true;
print = true;
};
})
(mkIf (pfl.isDubronetwork && pfl.isWorkstation) {
r6d.config-generator = {
cartographie = true;
conception-assistee = true;
docker = true;
developpement = true;
developpement-haskell = true;
developpement-java = true;
developpement-rust = true;
edition-musique = true;
edition-photo = true;
edition-video = true;
virtualbox = true;
xmonad = true;
};
})
## Profils liés à Prunetwork
(mkIf pfl.isPrunetwork {
r6d.config-generator = {
auto-upgrade = true;
docker = true;
locate = true;
fail2ban = true;
swap = true;
};
})
(mkIf (pfl.isPrunetwork && pfl.isWorkstation) {
r6d.config-generator = {
cartographie = true;
developpement = true;
developpement-haskell = true;
developpement-java = true;
#developpement-rust = true;
#edition-musique = true;
edition-photo = true;
#edition-video = true;
print = true;
virtualbox = true;
};
})
## Affectation des profils aux machines ## Affectation des profils aux machines
(mkIf comp.isHydra {
r6d.profiles = {
isPrunetwork = true;
isServer = true;
};
r6d.config-generator = { # Dubro Vivo - St Malo
docker = true; #tincAddress = "192.168.12.8/24";
hydra-builder = true;
hydra-core = true;
tincAddress = "192.168.12.8/24";
tincExtraConfig = ''
ConnectTo = rollo_dubronetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
};
})
(mkIf comp.isOcean {
r6d.profiles = {
isPrunetwork = true;
isServer = true;
};
r6d.config-generator = {
docker = true;
radicale = true;
nix-serve-client = true;
nix-serve-server = true;
tincAddress = "192.168.12.6/24";
tincExtraConfig = ''
ConnectTo = rollo_dubronetwork_fr
'';
};
})
(mkIf comp.isRadx {
r6d.profiles = {
isHome = true;
isPrunetwork = true;
isWorkstation = true;
};
r6d.config-generator = {
elasticsearch = true;
hydra-builder = true;
hydra-core = true;
kibana = true;
rabbitmq = true;
tincAddress = "192.168.12.3/24";
tincExtraConfig = ''
ConnectTo = monstre_dubronetwork_fr
ConnectTo = rollo_dubronetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
};
})
(mkIf comp.isLatitude {
r6d.profiles = {
isDubronetwork = true;
isHome = true;
isWorkstation = true;
};
r6d.config-generator = {
jetbrains-licensed = true;
laptop = true;
tincAddress = "192.168.12.2/24";
tincExtraConfig = ''
ConnectTo = monstre_dubronetwork_fr
ConnectTo = rollo_dubronetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
nix-serve-server = true;
};
})
(mkIf comp.isMonstre {
r6d.profiles = {
isDubronetwork = true;
isServer = true;
};
r6d.config-generator = {
fail2ban = true;
murmur = true;
nix-serve-client = true;
nix-serve-server = true;
nixStoreProxyCache = true;
tincAddress = "192.168.12.4/24";
tincExtraConfig = ''
ConnectTo = rollo_dubronetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
};
})
(mkIf comp.isNeoNomade{
r6d.profiles = {
isDubronetwork = true;
isHome = true;
};
r6d.config-generator = {
laptop = true;
tincAddress = "192.168.12.7/24";
tincExtraConfig = ''
ConnectTo = monstre_dubronetwork_fr
ConnectTo = rollo_dubronetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
};
})
(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 = {
laptop = true; laptop = true;
}; };
}) })
(mkIf comp.isPedro {
r6d.profiles = {
isDubronetwork = true;
isServer = true;
};
r6d.config-generator = {
fail2ban = true;
};
})
(mkIf comp.isPhenom {
r6d.profiles = {
isDubronetwork = true;
isHome = true;
isWorkstation = true;
};
r6d.config-generator = {
jetbrains-licensed = true;
hydra-core = true;
nix-serve-server = true;
edition-photo = true;
tincAddress = "192.168.12.1/24";
tincExtraConfig = ''
ConnectTo = monstre_dubronetwork_fr
ConnectTo = rollo_dubronetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
};
})
(mkIf comp.isRollo {
r6d.profiles = {
isDubronetwork = true;
isServer = true;
};
r6d.config-generator = {
dovecot = true;
fail2ban = true;
mailboxes = true;
murmur = true;
nix-serve-client = true;
nix-serve-server = true;
tincAddress = "192.168.12.5/24";
tincExtraConfig = ''
ConnectTo = ocean_prunetwork_fr
'';
znc = true;
};
})
]; ];
} }

View File

@@ -2,12 +2,12 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf cfg.auto-upgrade { mkIf flags.auto-upgrade {
# Automatic update & automatic clean # Automatic update & automatic clean

View File

@@ -2,12 +2,13 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf cfg.awesome { # TODO: rc.lua par défaut (système)
mkIf flags.awesome {
environment.variables = { environment.variables = {
# Export the current path for the awesome derivation, useful for users rc.lua # Export the current path for the awesome derivation, useful for users rc.lua
@@ -18,5 +19,7 @@ mkIf cfg.awesome {
# beautiful.init(config.dir .. "/share/awesome//themes/zenburn/theme.lua") # beautiful.init(config.dir .. "/share/awesome//themes/zenburn/theme.lua")
# #
AWESOME_CONFIG_DIR = "${pkgs.awesome}"; AWESOME_CONFIG_DIR = "${pkgs.awesome}";
}; };
environment.etc."xdg/awesome/rc.lua".text = builtins.readFile ./../public/config-awesome-4-rc.lua;
} }

27
configuration/default.nix Normal file
View File

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

View File

@@ -2,9 +2,9 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
{ {
@@ -12,7 +12,7 @@ in
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;
@@ -20,43 +20,11 @@ in
# On autorise les paquets non-libres # On autorise les paquets non-libres
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
# Lancement de dbus pour les utilisateurs
services.dbus.socketActivated = true;
# NixOS Hardening # NixOS Hardening
#security.grsecurity.enable = true; #security.grsecurity.enable = true;
# 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
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
];
shellAliases = { shellAliases = {
byobu = "byobu-tmux"; byobu = "byobu-tmux";
gpg = "gpg2"; gpg = "gpg2";
@@ -69,13 +37,10 @@ in
#git-loc = "git ls-files | while read f; do git blame --line-porcelain "${f}" | grep '^author '; done | sort -f | uniq -ic | sort -n"; #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
@@ -19,6 +20,7 @@
# Logs # Logs
lol = log --graph --decorate --pretty=oneline --abbrev-commit lol = log --graph --decorate --pretty=oneline --abbrev-commit
lola = log --graph --decorate --pretty=oneline --abbrev-commit --all lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
not-pushed = log --branches --not --remotes
[push] [push]
default = simple default = simple
[core] [core]

View File

@@ -2,12 +2,12 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf cfg.laptop { mkIf flags.laptop {
# Gestion spécifique pour PC portable # Gestion spécifique pour PC portable
@@ -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

@@ -2,9 +2,9 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf true { mkIf true {

View File

@@ -2,15 +2,15 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf true { mkIf true {
# Utilisation d'adresse IPv6 temporaire # Utilisation d'adresse IPv6 temporaire
## https://blog.linitx.com/control-privacy-addressing-ipv6-linux/ ## https://blog.linitx.com/control-privacy-addressing-ipv6-linux/
## http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/x1092.html ## http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/x1092.html

23
configuration/network.nix Normal file
View File

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

View File

@@ -2,15 +2,15 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf cfg.swap { mkIf flags.swap {
# Gestion du swap # Gestion du swap
# https://en.wikipedia.org/wiki/Swappiness # https://en.wikipedia.org/wiki/Swappiness
boot.kernel.sysctl = { boot.kernel.sysctl = {
# le swap est activé (!= 0) # le swap est activé (!= 0)

View File

@@ -2,12 +2,12 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
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,67 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
mkIf = lib.mkIf;
in
{
imports = [ # applications :
# commandées par config-generator
./activation-manuelle/xmonad/xmonad.nix # gestionnaire de fenêtres xmonad
];
# Paquets
environment.systemPackages = with pkgs; mkIf profiles.isDesktop [
# Environement de bureau
arandr # interface graphique pour xrandr
wmname # pour définir le nom du gestionnaire de fenêtre (utile pour java)
#kde4.ksnapshot # capture d'écran
xorg.xbacklight # pour gérer la luminosité de l'écran
xorg.xev # pour repérer les codes + noms standard des actions clavier/souris
xorg.xkill # pour 'tuer une application'
## Gestionnaire de fenêtre & Thème
gnome3.adwaita-icon-theme # thème d'icone - semble fonctionner avec spaceFM
## Manipulation de fichier
pcmanfm # gestionnaire de fichiers graphique
spaceFM # gestionnaire de fichiers graphique
vifm # gestionnaire de fichiers basé sur VIM (console)
## 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
fonts.fonts = with pkgs; mkIf profiles.isDesktop [
fira # police créée pour Firefox
fira-code # idem fira-mono + ligatures pour la programmation
fira-mono # dérivée de fira en monospace
hack-font # police monospace créée explicitement pour coder
];
nixpkgs.config.packageOverrides = pkgs: {
clawsMail = pkgs.clawsMail.override {
enablePluginFancy = true;
enablePluginPdf = true;
enablePluginRavatar = true;
enablePluginSmime = true;
enablePluginVcalendar = true;
enableSpellcheck = true;
};
mumble = pkgs.mumble.override { pulseSupport = true; };
};
security.setuidPrograms = [ "udevil" ];
}

View File

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

View File

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

50
lib.nix Normal file
View File

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

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

@@ -2,9 +2,9 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf true { mkIf true {

8
onchange Executable file
View File

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

194
options.nix Normal file
View File

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

View File

@@ -1,39 +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 profiles.isDesktop {
# Paquets
environment.systemPackages = with pkgs; [
# Clients Internet
## Navigateur
chromium
firefox
## Réseaux sociaux
#python27Packages.turses # client twitter en ncurse
python27Packages.rainbowstream # client twitter en console
rtv # client reddit en console
## Mail & Discussion (texte, audio)
clawsMail
hexchat
quasselClient
mumble
mutt
pidgin
thunderbird
# Transfert de fichier
filezilla
transmission_gtk
transmission_remote_gtk
];
}

View File

@@ -1,26 +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.developpement-haskell {
# Paquets
environment.systemPackages = with pkgs; [
# Haskell
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
haskellPackages.stylish-haskell # qualité de code
haskellPackages.hindent
# Application perso
haskellPackages.hahp
];
}

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
mkIf cfg.developpement-java {
# Paquets
environment.systemPackages = with pkgs; [
# IDE
idea.idea-community # IntelliJ IDEA
# Java
maven
];
}

View File

@@ -1,17 +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.jeux {
# Paquets
environment.systemPackages = with pkgs; [
# Jeux
urbanterror
];
}

View File

@@ -1,28 +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 profiles.isDesktop {
# Paquets
environment.systemPackages = with pkgs; [
# Multimedia
## Audio
beep
cmus # lecteur audio console
espeak # synthèse vocale
paprefs # préferences pulseaudio
pavucontrol # mixer pulseaudio
vorbis-tools # codec
## Video
smplayer # lecteur vidéo
vlc # lecteur vidéo
];
}

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 profiles.isDesktop {
# Paquets
environment.systemPackages = with pkgs; [
# Securité
gnome3.seahorse # gestionnaire graphique de clef GPG
pass # gestionnaire 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
];
security.setuidPrograms = [ "slock" ];
}

View File

@@ -341,10 +341,12 @@ globalkeys = awful.util.table.join(
awful.key({ modkey }, "F5", function () awful.util.spawn("spacefm") end), awful.key({ modkey }, "F5", function () awful.util.spawn("spacefm") end),
awful.key({ modkey }, "F6", function () awful.util.spawn("vlc") 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 }, "F7", function () awful.util.spawn("claws-mail") end),
awful.key({ modkey }, "F11", function () awful.util.spawn("xrandr-auto") end),
awful.key({ modkey }, "F12", function () awful.util.spawn("slock") 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" }, "F1", function () awful.util.spawn("claws-mail") end),
awful.key({ modkey, "Shift" }, "F3", function () awful.util.spawn("pcmanfm") 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" }, "F6", function () awful.util.spawn("clementine") end),
awful.key({ modkey, "Shift" }, "F11", function () awful.util.spawn("xrandr-auto-2") end)
-- awful.key({ modkey, "Shift" }, "F11", function () awful.util.spawn("/home/taeradan/bin/xrandr-left") 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, "Control" }, "F11", function () awful.util.spawn("/home/taeradan/bin/xrandr-right") end),
@@ -564,6 +566,6 @@ client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_n
-- }}} -- }}}
-- Au démarrage -- Au démarrage
-- awful.util.spawn_with_shell("/home/taeradan/bin/xrandr-auto") awful.util.spawn_with_shell("xrandr-auto || true")
-- awful.util.spawn_with_shell("gnome-sound-applet") -- awful.util.spawn_with_shell("gnome-sound-applet")
-- awful.util.spawn_with_shell("nm-applet") -- awful.util.spawn_with_shell("nm-applet")

View File

@@ -1,23 +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 {
# fix: Hostname -s renvoie "Unknown host" alors que hostname renvoie la bonne valeur
# Il s'avère que hostname vérifie la validité du FQDN et du reverse.
# Fixer ces paramètres dans les hosts permet de faire tomber en marche
networking.extraHosts = ''
127.0.0.1 ${config.networking.hostName}
'';
boot.kernel.sysctl = {
"net.ipv4.conf.all.forwarding" = true;
"net.ipv4.conf.default.forwarding" = true;
};
}

View File

@@ -1,61 +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 # manipuler les données géographiques & cartes
./app-developpement.nix # développer des programmes/scripts
./app-developpement-haskell.nix # développer en haskell
./app-developpement-java.nix # développer en java
./app-developpement-jetbrains.nix # outils jetbrains
./app-developpement-rust.nix # développer en rust
./app-docker.nix # activer docker
./app-edition-musique.nix # modifier les fichiers musicaux
./app-edition-photo.nix # modifier les photos & assimilé
./app-edition-video.nix # modifier les vidéos
./app-jeux.nix # jouer, tout simplement ;)
./app-virtualbox.nix # activer 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,45 +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.hydra-builder {
# Paquets
environment.systemPackages = with pkgs; [
qemu
kvm
];
# Services
## Services de virtualisation utilisé pour les tests hydra
virtualisation.docker.enable = true;
virtualisation.libvirtd.enable = true;
virtualisation.libvirtd.enableKVM = true;
#virtualisation.virtualbox.guest.enable = true;
virtualisation.virtualbox.host.enable = true;
virtualisation.virtualbox.host.headless = true;
## Ménage automatique tous les jours
nix.gc.automatic = true;
users.users."hydrabld" = {
description = "Execution des jobs hydra";
group = "nixbld";
extraGroups = [
"docker"
"nixbld"
"vboxusers"
];
isNormalUser = true; # devrait être à false: TODO débugger la conf ssh & users pour que ça marche en user système
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGYpjcWJCf8dXpv2LmoIaNVbwZXEC50QUU6Az+lqeD89 hydra radx"
];
};
}

View File

@@ -1,19 +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.laptop {
# Gestion spécifique pour PC portable
# Services
services.xserver.synaptics = {
enable = true;
twoFingerScroll = true;
};
}

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 profiles.isDesktop {
# Pulse Audio
hardware.pulseaudio = {
enable = true;
support32Bit = true;
};
environment.etc."pulse/daemon.conf".text = "flat-volumes = no";
}

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

13
services/dbus.nix Normal file
View File

@@ -0,0 +1,13 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
flags = currentMachine.configurationFlags;
in
mkIf true {
# Lancement de dbus pour les utilisateurs
services.dbus.socketActivated = true;
}

40
services/default.nix Normal file
View File

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

View File

@@ -2,12 +2,12 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf cfg.docker { mkIf flags.docker {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

View File

@@ -2,12 +2,12 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf cfg.elasticsearch { mkIf flags.elasticsearch {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

14
services/gpm.nix Normal file
View File

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

View File

@@ -2,9 +2,9 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf true { mkIf true {

16
services/hoogle.nix Normal file
View File

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

55
services/hydra-build.nix Normal file
View File

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

View File

@@ -2,9 +2,9 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
#### https://github.com/NixOS/hydra/issues/413 #### https://github.com/NixOS/hydra/issues/413
@@ -22,7 +22,8 @@ let
# information pour l'état de hydra : # information pour l'état de hydra :
# hydra-queue-runner --status | json_pp # hydra-queue-runner --status | json_pp
in in
mkIf cfg.hydra-core { # TODO: passe de ménage
mkIf flags.hydra-core {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@@ -61,6 +62,8 @@ mkIf cfg.hydra-core {
#package = hydra-src-pkg ; #package = hydra-src-pkg ;
}; };
systemd.services.hydra-evaluator.serviceConfig.Nice = -19;
#systemd.services.hydra-evaluator = { #systemd.services.hydra-evaluator = {
# path = [ pkgs.nettools config.services.hydra.package ]; # path = [ pkgs.nettools config.services.hydra.package ];
#}; #};
@@ -73,7 +76,7 @@ mkIf cfg.hydra-core {
### Machines connues ### Machines connues
programs.ssh.knownHosts = { programs.ssh.knownHosts = {
"hydra.prunetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMhXFlj2oyArVyEwEwDxNXthB/JljHkq+UhTLxbekkMB"; "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

@@ -2,12 +2,12 @@
let let
inherit (lib) mkIf mkMerge mkThenElse; inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator; annuaire = config.r6d.machines;
computers = config.r6d.computers; currentMachine = annuaire."${config.networking.hostName}";
profiles = config.r6d.profiles; flags = currentMachine.configurationFlags;
in in
mkIf cfg.kibana { mkIf flags.kibana {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

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