Compare commits

...

120 Commits

Author SHA1 Message Date
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
System administrator
493249ebd3 clef ssh taeradan de la VM capgemini 2017-02-27 16:28:55 +01:00
e0a468bfeb fix port 2017-02-19 18:27:35 +01:00
c4013be348 typo 2017-02-19 18:22:27 +01:00
6cdd621db2 erreur DNS pour grudu. utilisation @IPv4 2017-02-19 18:20:12 +01:00
a5bfdbcd3d activation nix-serve-client {ocean, rollo} 2017-02-19 18:13:12 +01:00
5b954581db activation nix-serve client entre les serveurs online 2017-02-19 18:11:29 +01:00
ca11b46674 activation serveur nix-serve sur machines en salle machine 2017-02-19 18:08:28 +01:00
aad2931967 tinc: ajout adresse réseau grudu pour hydra.pru 2017-01-27 23:41:04 +01:00
101 changed files with 1542 additions and 1040 deletions

View File

@@ -23,6 +23,9 @@ full-auto: submodules-update upgrade clean optimise
optimise: optimise:
$(TIME) nix-store --optimise $(TIME) nix-store --optimise
rebuild-build:
$(TIME) time nixos-rebuild build --fallback --show-trace
rebuild-switch: rebuild-switch:
$(TIME) time nixos-rebuild switch --fallback --show-trace $(TIME) time nixos-rebuild switch --fallback --show-trace
@@ -41,6 +44,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

197
README.md
View File

@@ -1,18 +1,59 @@
# 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`
* tester la configuration : `nixos-rebuild build`
* corriger et ajouter les éléments manquant (notamment dans `private/annuaire.nix` )
* vérifier que `configuration.nix` contient `services.xserver.enable = true;` pour les machines avec interface graphique
* 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 +82,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

@@ -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 profiles.isDesktop { mkIf currentMachine.profiles.isDesktopEnvironment {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@@ -24,16 +24,18 @@ mkIf profiles.isDesktop {
gnome3.adwaita-icon-theme # thème d'icone - semble fonctionner avec spaceFM gnome3.adwaita-icon-theme # thème d'icone - semble fonctionner avec spaceFM
## Manipulation de fichier ## Manipulation de fichier
pcmanfm # gestionnaire de fichiers graphique #kde5.dolphin # gestionnaire de fichiers graphique
spaceFM # gestionnaire de fichiers graphique #kde5.dolphin-plugins # gestionnaire de fichiers graphique
#vifm # gestionnaire de fichiers basé sur VIM (console) pcmanfm # gestionnaire de fichiers graphique
spaceFM # gestionnaire de fichiers graphique
#vifm # gestionnaire de fichiers basé sur VIM (console)
## Terminal ## Terminal
sakura # terminal sakura # terminal
]; ];
# Polices supplémentaires # Polices supplémentaires
fonts.fonts = with pkgs; mkIf profiles.isDesktop [ fonts.fonts = with pkgs; [
fira # police créée pour Firefox fira # police créée pour Firefox
fira-code # idem fira-mono + ligatures pour la programmation fira-code # idem fira-mono + ligatures pour la programmation
fira-mono # dérivée de fira en monospace fira-mono # dérivée de fira en monospace
@@ -46,5 +48,7 @@ mkIf profiles.isDesktop {
# pour le montage des media amovibles # pour le montage des media amovibles
devmon.source = "${pkgs.udevil}/bin/devmon"; devmon.source = "${pkgs.udevil}/bin/devmon";
udevil.source = "${pkgs.udevil}/bin/udevil"; # utilisé par spacefm 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

@@ -0,0 +1,37 @@
{ 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 && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
# Bureautique
gnumeric # tableur
#kde4.ksnapshot# réalisation de capture d'écran
## Cartes mentales
freemind
## Diagrammes & Schémas
dia # dessin & schéma technique
## Editeur de texte
#lyx # surcouche WISIWIM à LaTeX
#focuswriter # outil pour l'écriture
textadept # un éditeur de texte facile pour copier-coller graphique
#zim # outil de prise de notes, wiki de bureau
## Visionneuse
#kde5.okular # pdf
mcomix # livres (cbr, liste d'images), gestion d'une bibliothèque
pdfpc # pdf
qpdfview # pdf
gqview # visionneuse image & gestion basique de collection
];
}

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

@@ -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
# TODO: ménage # TODO: ménage
mkIf profiles.isDesktop { mkIf (flags.internetSuite && flags.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@@ -17,18 +17,12 @@ environment.systemPackages = with pkgs; [
chromium chromium
firefox 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) ## Mail & Discussion (texte, audio)
clawsMail clawsMail
hexchat hexchat
quassel quassel
quasselClient quasselClient
mumble mumble
mutt
pidgin pidgin
thunderbird thunderbird
@@ -38,6 +32,7 @@ environment.systemPackages = with pkgs; [
transmission_remote_gtk transmission_remote_gtk
]; ];
/* TODO: voir pour appliquer la personnalisation
nixpkgs.config.packageOverrides = pkgs: { nixpkgs.config.packageOverrides = pkgs: {
clawsMail = pkgs.clawsMail.override { clawsMail = pkgs.clawsMail.override {
enablePluginFancy = false; # nécessite wekitgtk qui est troué enablePluginFancy = false; # nécessite wekitgtk qui est troué
@@ -49,9 +44,9 @@ environment.systemPackages = with pkgs; [
}; };
mumble = pkgs.mumble.override { pulseSupport = true; }; mumble = pkgs.mumble.override { pulseSupport = true; };
}; };
*/
#nixpkgs.config.permittedInsecurePackages = [ #nixpkgs.config.permittedInsecurePackages = [
# "webkitgtk-2.4.11" # pour que le plugin fancy de claws-mail fonctionne # "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

@@ -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.edition-video && flags.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
# Vidéo
#cinelerra # editeur video
pitivi # montage vidéo
];
}

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

@@ -2,24 +2,19 @@
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 { # TODO ranger le spécifique pulseaudio
mkIf (flags.multimediaSuite && flags.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Multimedia
## Audio ## Audio
beep
cmus # lecteur audio console
espeak # synthèse vocale
paprefs # préferences pulseaudio paprefs # préferences pulseaudio
pavucontrol # mixer pulseaudio pavucontrol # mixer pulseaudio
vorbis-tools # codec
## Video ## Video
smplayer # lecteur vidéo smplayer # 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 {
@@ -22,6 +22,7 @@ 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
@@ -49,13 +50,5 @@ mkIf true {
detox # The detox utility renames files to make them easier to work with. 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

@@ -2,42 +2,21 @@
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 {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Bureautique # Bureautique
aspell aspellDicts.fr # correction d'ortographe aspell aspellDicts.fr # correction d'ortographe
gnumeric # tableur
#kde4.ksnapshot# réalisation de capture d'écran
# Gestion de tâche # Gestion de tâche
taskwarrior # gestionnaire de tâches en console taskwarrior # gestionnaire de tâches en console
## Cartes mentales
freemind
## Diagrammes & Schémas
dia # dessin & schéma technique
## Editeur de texte
#lyx # surcouche WISIWIM à LaTeX
#focuswriter # outil pour l'écriture
textadept # un éditeur de texte facile pour copier-coller graphique
#zim # outil de prise de notes, wiki de bureau
## Visionneuse
#kde5.okular # pdf
mcomix # livres (cbr, liste d'images), gestion d'une bibliothèque
pdfpc # pdf
qpdfview # pdf
gqview # visionneuse image & gestion basique de collection
## Convertisseurs (texte -> <autre format>) ## Convertisseurs (texte -> <autre format>)
gnuplot # générateur de graphes à partir de données numériques gnuplot # générateur de graphes à partir de données numériques
graphviz # dot, neato : traçage de graphes (carré, rond) graphviz # dot, neato : traçage de graphes (carré, rond)

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,27 @@
{ 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.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
];
}

View File

@@ -0,0 +1,43 @@
{ 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; [
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
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

@@ -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-elm { mkIf flags.developpement-elm {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

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
hindent # indentation code
hlint # qualite de code, analyse statique de code + astuces & bonnes pratiques
pandoc-filter-graphviz # filtre pour utiliser graphviz à partir de pandoc
#postgrest # mapper HTTP <-> PostgreSQL
stylish-haskell # qualité de code
turtle # genre shell-scripting
# Application perso
hahp
]);
}

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,33 @@
{ 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 # déjà présent dans "base"
mercurial
subversion
# 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

@@ -2,25 +2,24 @@
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 {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Vidéo
#cinelerra # editeur video
pitivi # montage vidéo
ffmpeg-full # assemblage de flux audio & video en ligne de commande ffmpeg-full # assemblage de flux audio & video en ligne de commande
]; ];
/* TODO: voir pour appliquer la personnalisation
nixpkgs.config.packageOverrides = pkgs: { nixpkgs.config.packageOverrides = pkgs: {
ffmpeg-full = pkgs.ffmpeg-full.override { ffmpeg-full = pkgs.ffmpeg-full.override {
nonfreeLicensing = true; nonfreeLicensing = true;
nvenc = 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,7 +20,6 @@ mkIf true {
## Diagnostic ## Diagnostic
arp-scan arp-scan
nmap # outil de scan de port réseau nmap # outil de scan de port réseau
#wireshark
whois whois
]; ];

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

@@ -1,18 +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
./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

@@ -2,7 +2,7 @@
SESSION_NAME="Adminsys" SESSION_NAME="Adminsys"
PROJECT_DIR="/etc/nixos" PROJECT_DIR="/etc/nixos"
PROJECT_MODULES="base private server" PROJECT_MODULES=$(cd $PROJECT_DIR && git submodule --quiet foreach 'echo $path')
HEAD_ADDITIONNAL_TABS="git config" HEAD_ADDITIONNAL_TABS="git config"
TAIL_ADDITIONNAL_TABS="glances htop" TAIL_ADDITIONNAL_TABS="glances htop"

View File

@@ -6,96 +6,22 @@ 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
{ {
# TODO: ménage # TODO camel case partout
# TODO everything in english
# TODO sortir ce qui est privé
###### interface ###### interface
options = { options = {
#* Utilisé pour afecter des capacités aux machines
r6d.profiles = {
# 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-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.";
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 #* Utilisé pour avoir des raccourcis de machine
r6d.computers = { 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."; isNeoNomade = mkEnableOption "Identification du nom de machine.";
isNomade = 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."; isRollo = mkEnableOption "Identification du nom de machine.";
}; };
}; };
@@ -106,16 +32,6 @@ in
config = mkMerge config = mkMerge
[ [
## 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) { (mkIf (pfl.isServer && !comp.isMonstre) {
r6d.config-generator = { r6d.config-generator = {
#database_postgres = true; #database_postgres = true;
@@ -123,6 +39,7 @@ in
#dns_resolveur = true; #dns_resolveur = true;
# inutile d'exposer la conf complète du serveur par le store tant qu'il n'y a pas de protection complémentaire - utilisation SSH ? # inutile d'exposer la conf complète du serveur par le store tant qu'il n'y a pas de protection complémentaire - utilisation SSH ?
#nix-serve-server = true; #nix-serve-server = true;
smokeping = true;
#rabbitmq = true; #rabbitmq = true;
}; };
@@ -133,181 +50,25 @@ in
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-elm = 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;
conception-assistee = true;
docker = true;
developpement = true;
#developpement-elm = true;
developpement-haskell = true;
developpement-java = true;
developpement-rust = true;
edition-musique = true;
edition-photo = true;
edition-video = true;
hydra-core = false; # DO NOT ENABLE ON WORKSTATION, YOU CAN CRASH YOUR SYSTEM
print = true;
#virtualbox = true;
#xmonad = true;
};
})
## Affectation des profils aux machines ## Affectation des profils aux machines
(mkIf comp.isHydra {
networking.hostName = "hydra.prunetwork.fr"; # Define your hostname.
r6d.profiles = {
isPrunetwork = true;
isServer = true;
};
r6d.config-generator = {
docker = true;
hydra-builder = true;
hydra-core = true;
#tincAddress = "192.168.12.6/24";
#tincExtraConfig = ''
# ConnectTo = rollo_dubronetwork_fr
# '';
};
})
(mkIf comp.isOcean {
networking.hostName = "ocean.prunetwork.fr"; # Define your hostname.
r6d.profiles = {
isPrunetwork = true;
isServer = true;
};
r6d.config-generator = {
docker = true;
radicale = true;
tincAddress = "192.168.12.6/24";
tincExtraConfig = ''
ConnectTo = rollo_dubronetwork_fr
'';
};
})
(mkIf comp.isRadx {
networking.hostName = "radx.prunetwork.fr"; # Define your hostname.
r6d.profiles = {
isHome = true;
isPrunetwork = true;
isWorkstation = true;
};
r6d.config-generator = {
database_postgres = true;
elasticsearch = true;
hydra-builder = true;
#hydra-core = false; # DO NOT ENABLE ON WORKSTATION
kibana = true;
nix-serve-client = true;
nix-serve-server = true;
rabbitmq = true;
tincAddress = "192.168.12.3/24";
tincExtraConfig = ''
ConnectTo = monstre_dubronetwork_fr
ConnectTo = rollo_dubronetwork_fr
ConnectTo = 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{ (mkIf comp.isNeoNomade{
networking.hostName = "neo-nomade.dubronetwork.fr"; # Define your hostname.
r6d.profiles = { r6d.profiles = {
isDubronetwork = true; isDubronetwork = true;
isHome = true; isDesktopEnvironment = true;
}; };
r6d.config-generator = { r6d.config-generator = {
laptop = true; laptop = true;
graphical = true;
scanner = true;
tincAddress = "192.168.12.7/24"; tincAddress = "192.168.12.7/24";
tincExtraConfig = '' tincExtraConfig = ''
ConnectTo = monstre_dubronetwork_fr ConnectTo = monstre_dubronetwork_fr
ConnectTo = rollo_dubronetwork_fr ConnectTo = rollo_dubronetwork_fr
ConnectTo = hydra_prunetwork_fr
ConnectTo = ocean_prunetwork_fr ConnectTo = ocean_prunetwork_fr
''; '';
}; };
@@ -315,45 +76,15 @@ in
# Dubro Vivo - St Malo # Dubro Vivo - St Malo
#tincAddress = "192.168.12.8/24"; #tincAddress = "192.168.12.8/24";
(mkIf comp.isNomade{ (mkIf comp.isNomade{
networking.hostName = "nomade.dubronetwork.fr"; # Define your hostname.
r6d.profiles.isDubronetwork = true; r6d.profiles.isDubronetwork = true;
r6d.config-generator = { r6d.config-generator = {
laptop = true; laptop = true;
}; };
}) })
(mkIf comp.isPedro {
r6d.profiles = {
isDubronetwork = true;
isServer = true;
};
r6d.config-generator = {
fail2ban = true;
};
})
(mkIf comp.isPhenom {
networking.hostName = "phenom.dubronetwork.fr"; # Define your hostname.
r6d.profiles = {
isDubronetwork = true;
isHome = true;
isWorkstation = true;
};
r6d.config-generator = {
jetbrains-licensed = true;
#hydra-core = true;
nix-serve-client = 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 { (mkIf comp.isRollo {
networking.hostName = "rollo.dubronetwork.fr"; # Define your hostname.
r6d.profiles = { r6d.profiles = {
isDubronetwork = true; isDubronetwork = true;
isServer = true; isServer = true;
@@ -364,10 +95,14 @@ in
fail2ban = true; fail2ban = true;
mailboxes = true; mailboxes = true;
murmur = true; murmur = true;
nix-serve-client = true;
nix-serve-server = true;
tincAddress = "192.168.12.5/24"; tincAddress = "192.168.12.5/24";
tincExtraConfig = '' tincExtraConfig = ''
ConnectTo = hydra_prunetwork_fr
ConnectTo = ocean_prunetwork_fr ConnectTo = ocean_prunetwork_fr
''; '';
virtualbox = true;
znc = true; 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,13 +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
# TODO: rc.lua par défaut (système) # TODO: rc.lua par défaut (système)
mkIf cfg.awesome { 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

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
# TODO: ménage # TODO: ménage
@@ -13,7 +13,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;
@@ -29,35 +29,6 @@ in
# Paquets # Paquets
environment = { environment = {
systemPackages = with pkgs; [
bind # utilisé pour les utilitaires comme dig
byobu # permet de se déconnecter d'un terminal sans l'aréter
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";

View File

@@ -20,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,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 false { mkIf false {

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,33 +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
haskellPackages.hlint
haskellPackages.threadscope
# Application perso
haskellPackages.hahp
# Application
haskellPackages.autoproc # ? procmail
haskellPackages.darcs # Gestionnaire de version éponyme
haskellPackages.turtle # genre shell-scripting
];
}

View File

@@ -1,21 +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
zulu
];
}

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,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 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
#yubikey-personalization-gui # utilisation de la clef Yubikey
];
# Paquets avec setui root
security.wrappers = {
# 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

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

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,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;
in
{
imports = [
# installées systématiquement
./environment.nix
./localisation.nix
./network.nix
#./network-ipv6.nix
./service-haveged.nix
./service-monitoring-munin.nix
./service-monitoring-smokeping.nix
./service-ssh.nix
./udev.nix
# commandées par config-generator
## option de configuration spécifique
./app-awesome.nix # pour le gestionaire de fenêtres 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-elm.nix # développer en elm
./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
./xmonad/xmonad.nix # pour le gestionaire de fenêtre xmonad
## if isDesktop
./app-adminsys.nix # pour gérer le système dans son ensemble et les services
./app-bureau.nix # éléments pour avoir un environement graphique minimal utilisable
./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
# TODO: ménage
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,199 +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
# TODO: ajouter option
mkIf true {
# Paquets
environment.systemPackages = with pkgs; [
bind
];
# Paquets avec setuid root
security.wrappers = {
# outil de diagnostic réseau
fping.source = "${pkgs.fping}/bin/fping";
};
# Services
services.smokeping = {
enable = true;
probeConfig = ''
+ FPing
#binary = ${pkgs.fping}/bin/fping
binary = ${config.security.wrapperDir}/fping
+DNS
#binary = ${pkgs.bind}/bin/dig
binary = /run/current-system/sw/bin/dig
forks = 5
offset = 50%
step = 300
timeout = 15
'';
targetConfig = ''
probe = FPing
menu = Top
title = Suivi de la latence reseau
remark = Monitoring de la latence reseau. \
Here you will learn all about the latency of our network.
+ Local
probe = FPing
menu = Local
title = Local Network
++ LocalMachine
menu = Local Machine
title = This host
host = localhost
+ Grudu_Tinc
probe = FPing
title = Grudu_Tinc
menu = Grudu.net - Tinc
++ Hydra
menu = hydra.grudu.net
title = hydra.grudu.net
host = hydra.grudu.net
++ Monstre
menu = monstre.grudu.net
title = monstre.grudu.net
host = monstre.grudu.net
++ Rollo
menu = rollo.grudu.net
title = rollo.grudu.net
host = rollo.grudu.net
++ Ocean
menu = ocean.grudu.net
title = ocean.grudu.net
host = ocean.grudu.net
++ MultiHost
menu = Multihost
title = Ensemble de mesures de latence
host = /Grudu_Tinc/Monstre /Grudu_Tinc/Rollo /Grudu_Tinc/Ocean /Grudu_Tinc/Hydra
+ Grudu_DNS
title = Grudu_DNS
menu = Grudu.net - DNS
probe = DNS
pings = 5
++ Ocean
title = ocean
menu = serveur ocean
server = ocean.prunetwork.fr
+++ ocean
host = ocean.grudu.net
lookup = ocean.grudu.net
+++ rollo
host = rollo.grudu.net
lookup = rollo.grudu.net
++ Rollo
title = rollo
menu = serveur rollo
server = rollo.dubronetwork.fr
+++ ocean
host = ocean.grudu.net
lookup = ocean.grudu.net
+++ rollo
host = rollo.grudu.net
lookup = rollo.grudu.net
++ MultiHost
menu = Multihost
title = Ensemble de mesures DNS
host = /Grudu_DNS/Ocean/ocean /Grudu_DNS/Ocean/rollo /Grudu_DNS/Rollo/ocean /Grudu_DNS/Rollo/rollo
+ France
probe = FPing
title = France
menu = Operateur francais
++ Atos
menu = Atos
title = www.atos.fr
host = www.atos.fr
++ Axialys
menu = Axialys
title = www.axialys.fr
host = www.axialys.fr
++ Azurtel
menu = azurtel
title = www.azurtel.fr
host = www.azurtel.fr
++ Bouygues-Telecom
menu = Bouygues-Telecom
title = www.bouygues-telecom.fr
host = www.bouygues-telecom.fr
++ Colt
menu = Colt
title = www.colt.fr
host = www.colt.fr
++ Completel
menu = completel
title = www.completel.fr
host = www.completel.fr
++ Free
menu = Free
title = www.free.fr
host = www.free.fr
++ Kosmos
menu = Kosmos
title = www.kosmos.fr
host = www.kosmos.fr
++ Orange
menu = Orange
title = www.orange.fr
host = www.orange.fr
++ Renater
menu = Renater
title = www.renater.fr
host = www.renater.fr
++ SFR
menu = SFR
title = www.sfr.fr
host = www.sfr.fr
++ MultiHost
menu = Multihost
title = Ensemble de mesures DNS
host = /France/Atos /France/Axialys /France/Azurtel \
/France/Bouygues-Telecom \
/France/Completel \
/France/Free \
/France/Kosmos \
/France/Orange \
/France/Renater \
/France/SFR
# /France/Colt
'';
};
# Réseau
networking.firewall = {
allowedTCPPorts = [
#8081 # accès depuis localhost uniquement ou à travers un proxy nginx
];
allowedUDPPorts = [
];
};
}

38
services/default.nix Normal file
View File

@@ -0,0 +1,38 @@
{ 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
./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; [

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
@@ -23,7 +23,7 @@ let
# hydra-queue-runner --status | json_pp # hydra-queue-runner --status | json_pp
in in
# TODO: passe de ménage # TODO: passe de ménage
mkIf cfg.hydra-core { mkIf flags.hydra-core {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@@ -62,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 ];
#}; #};
@@ -74,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; [

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.locate { mkIf flags.locate {
# Services # Services
services.locate = { services.locate = {

View File

@@ -2,14 +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
# TODO: ajouter option
# TODO: changer adresse mail # TODO: changer adresse mail
mkIf true { mkIf flags.munin {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@@ -27,6 +26,12 @@ mkIf true {
path = with pkgs; [ munin lm_sensors ]; path = with pkgs; [ munin lm_sensors ];
serviceConfig.TimeoutStartSec = "3min"; serviceConfig.TimeoutStartSec = "3min";
}; };
users.extraUsers.munin = {
#extraGroups = [ "postfix" "root" ];
extraGroups = [ "postfix" ];
};
# chmod a+rX -Rv /var/lib/postfix/queue/
## Munin server -- generate /var/www/munin ## Munin server -- generate /var/www/munin
services.munin-cron = { services.munin-cron = {
@@ -36,7 +41,7 @@ mkIf true {
address 127.0.0.1 address 127.0.0.1
''; '';
extraGlobalConfig = '' extraGlobalConfig = ''
contact.email.command ${pkgs.mutt}/bin/mutt -F /etc/nixos/base/public/munin-muttrc -s "Munin notification for ''${var:host}" jean-pierre@ocean.prunetwork.fr contact.email.command ${pkgs.mutt}/bin/mutt -F /etc/nixos/base/public/services/munin-muttrc -s "Munin notification for ''${var:host}" root@prunetwork.fr
''; '';
}; };

33
services/nixos-manual.nix Normal file
View File

@@ -0,0 +1,33 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
flags = currentMachine.configurationFlags;
in
mkIf flags.nixos-manual {
# Paquets
environment.systemPackages = with pkgs; [
bc
mailutils
];
# Services
## documentation sur ctrl + alt + F8
services.nixosManual = {
enable = true;
showManual = true;
};
# Réseau
networking.firewall = {
allowedTCPPorts = [
];
allowedUDPPorts = [
];
};
}

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.print { mkIf flags.print {
# Services # Services
## Enable CUPS to print documents. ## Enable CUPS to print documents.

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 profiles.isDesktop { mkIf flags.pulseaudio {
# Pulse Audio # Pulse Audio
hardware.pulseaudio = { hardware.pulseaudio = {

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.scanner { mkIf flags.scanner {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

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,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.virtualbox { mkIf flags.virtualbox {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

View File

@@ -2,17 +2,20 @@
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 { /**
* Il faut activer `services.xserver.enable = true;` dans configuration.nix
*/
mkIf currentMachine.profiles.isDesktopEnvironment {
# Services # Services
# Enable the X11 windowing system. # Enable the X11 windowing system.
services.xserver = { services.xserver = {
#enable = true; # enable = true;
layout = "fr"; layout = "fr";
xkbOptions = "eurosign:e"; xkbOptions = "eurosign:e";
displayManager.lightdm.enable = true; displayManager.lightdm.enable = true;

View File

@@ -2,17 +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.xmonad { mkIf flags.xmonad {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
dmenu dmenu
haskellPackages.xmobar haskellPackages.xmobar
trayer
]; ];
# Services # Services
@@ -23,4 +24,7 @@ mkIf cfg.xmonad {
haskellPackages.xmobar haskellPackages.xmobar
]; ];
}; };
environment.variables = {
_JAVA_AWT_WM_NONREPARENTING = "1";
};
} }

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