Compare commits

..

145 Commits

Author SHA1 Message Date
ddac52530b annuaire: ajout variables dans template & application 2017-04-24 23:37:18 +02:00
fe6f3136f7 essai de backport d'un annuaire de gestion de parc 2017-04-22 01:15:38 +02:00
c6fc32fbe7 radx: desactivation rabbitmq 2017-04-13 19:52:12 +02:00
Yves Dubromelle
42db758638 munin: postfix commande ppour donner les droits de lecture à munin 2017-04-11 15:14:41 +02:00
System administrator
07d8924ecd gparted: coquille, était "parted" 2017-04-11 13:46:29 +02:00
System administrator
2dc04d849b encore une modification de port pour hoogle 2017-04-11 13:46:29 +02:00
184de980a5 munin: EXPERIMENTAL est membre du groupe postfix pour grapher les mails 2017-04-11 01:08:30 +02:00
System administrator
f16e4d8934 changement du port de hoogle (conflit au boulot) 2017-04-06 08:55:26 +02:00
e204ffb841 ajout d'un client pour la sauvegarde nuagique 2017-04-01 09:26:09 +02:00
8c0a18a55b awesome: ajout clementine sur maj + F6 2017-04-01 07:51:28 +02:00
fd834eb186 munin: update mail address 2017-03-30 00:08:18 +02:00
f12b21f620 hydra: l'évaluation des builds n'est pas prioritaire sur le système 2017-03-26 22:45:05 +02:00
09212b7b67 déplacement du service smokeping vers private 2017-03-26 21:45:26 +02:00
b518d9a525 activation wireshark 2017-03-25 12:46:55 +01:00
bda5db0417 découpages des applications en "graphical" et "terminal" 2017-03-25 12:46:41 +01:00
37ae56a380 ajout option graphical + affectation pour workstation et neonomade 2017-03-25 12:45:05 +01:00
Yves Dubromelle
50085c2961 répartition des imports dans le niveau 1 de sous-dossiers 2017-03-25 00:46:59 +01:00
Yves Dubromelle
40426c1ad2 déplacement de la configuration à la racine du dépôt (sauf rc.lua) 2017-03-25 00:25:30 +01:00
Yves Dubromelle
c1d112a10a suite du tri dans public/ 2017-03-25 00:11:05 +01:00
Yves Dubromelle
9997092984 oops: munin-muttrc n'a pas suivi son fichier .nix 2017-03-25 00:08:22 +01:00
Yves Dubromelle
da41826e33 découpage des applications par défaut 2017-03-25 00:05:47 +01:00
Yves Dubromelle
708e5fcbce tri à la racine de public/ 2017-03-24 23:57:40 +01:00
Yves Dubromelle
097472cca0 tri de la catégorie applications 2017-03-24 23:43:14 +01:00
Yves Dubromelle
eeb4543f1f TADA ! retour de l'activation de xserver dans le template :) 2017-03-24 23:29:32 +01:00
Yves Dubromelle
4660f79017 refactor de la configuration spécifique aux laptops 2017-03-24 23:25:46 +01:00
Yves Dubromelle
3963027f04 isDesktop -> isDesktopEnvironment + groupes de logiciels 2017-03-24 23:14:20 +01:00
Yves Dubromelle
156cbc8c27 scanner sorti du profil desktop par défaut 2017-03-24 22:51:01 +01:00
Yves Dubromelle
a51024633f option à part pour pulseaudio 2017-03-24 22:30:01 +01:00
Yves Dubromelle
c8f8ad898d suppression des préfixes app et service 2017-03-24 22:25:34 +01:00
Yves Dubromelle
937565f885 déplacement naïf dans "applications" et "services" 2017-03-24 22:21:44 +01:00
Yves Dubromelle
15ce896f9c bon numéro de version nixos 2017-03-24 22:15:59 +01:00
348433e395 ajout service hoogle local pour profil dev-haskell 2017-03-20 21:29:21 +01:00
f1c02b0625 fix: erreur de nomage 2017-03-15 17:16:43 +01:00
0ffecb8804 option smokeping + activation pour serveurs 2017-03-15 17:16:20 +01:00
ac76e6e62b dev: ajout editeur atom 2017-03-13 23:55:47 +01:00
5a7ad25615 désactivation gitg 2017-03-13 23:55:34 +01:00
Yves Dubromelle
c3c7581a3e rollo: active virtualbox 2017-03-10 17:41:36 +01:00
e80018e273 radx: essai de faire une VM de build compatible hydra 2017-03-10 12:49:35 +01:00
b829e708a0 la machine hydra est serveur nix-serve 2017-03-10 12:37:04 +01:00
3297760d21 ajout systat pour les statistiques disque 2017-03-10 12:04:56 +01:00
b983832308 hydra-builder: suppression de la configuration utilisateur (spécifique machine) 2017-03-10 11:32:34 +01:00
db66626208 ocean est un hydra builder 2017-03-10 11:29:03 +01:00
Yves Dubromelle
14e9ddbc13 set JAVA_HOME 2017-03-09 23:32:55 +01:00
Yves Dubromelle
c96c981d20 retour à openjdk, problèmes avec zulu 2017-03-09 21:55:54 +01:00
4535ccf03c fix: oubli virgule 2017-03-06 09:51:07 +01:00
7bc21c0dc8 awesome: ajout 2nd script pour xrandr 2017-03-05 19:07:48 +01:00
Yves Dubromelle
3f74486951 nix-serve: latitude peut aussi être un client nix-serve 2017-03-05 15:33:31 +01:00
Yves Dubromelle
0dae9aef3c haskell: ajout ghc-mod 2017-03-05 15:14:25 +01:00
Yves Dubromelle
1a3e8f4528 tinc-hydra: ajout comme remote possible 2017-03-05 15:03:23 +01:00
Yves Dubromelle
b1d3ee4aae hydra: adresse tinc en .9 2017-03-05 14:48:59 +01:00
e2178821d8 haskell: extraction du prefixe commun 2017-03-04 17:20:03 +01:00
1e00db3864 haskell: commentaires 2017-03-04 17:17:19 +01:00
System administrator
3364f19ed7 xmonad: variable pour java et trayer 2017-03-04 13:41:42 +01:00
es006
c10d2c6d63 le script byobu va chercher la liste des sous modules 2017-03-04 12:15:57 +01:00
8dd973ede1 inutile 2017-03-03 21:36:45 +01:00
aeeea3a743 la clef du serveur hydra a changée 2017-03-03 16:00:51 +01:00
3b76bd00af Merge branch 'master' into nixos-unstable 2017-03-02 20:07:51 +01:00
e74a1825d9 backport from master 2017-03-02 19:48:11 +01:00
Yves Dubromelle
b47c6807d1 activation nix-serve pour les serveurs online 2017-03-02 18:56:05 +01:00
Yves Dubromelle
a4728792b2 les noms pour les machines dubro n'était pas dans config-generator 2017-03-02 18:51:14 +01:00
Yves Dubromelle
4c4c2fed3e fix: le nom de rollo n'était pas défini 2017-03-02 18:49:07 +01:00
93254f45c0 Mettre à jour 'README.md' 2017-03-02 17:27:05 +00:00
c1ce935adb Mettre à jour 'README.md' 2017-03-02 17:22:36 +00:00
e68cbcd8b9 Mettre à jour 'README.md' 2017-03-02 17:19:33 +00:00
ac39a52fd7 Mettre à jour 'README.md' 2017-03-02 17:16:43 +00:00
3dc8184bca formatage 2017-03-02 16:47:46 +01:00
24ef44b100 ajout notes pour installation machine chez online 2017-03-02 16:42:23 +01:00
9e9ea00cd2 Mettre à jour 'README.md' 2017-03-02 13:59:09 +00:00
464da39592 glances en python 3 refuse de compiler. Il reste celui en python2 2017-03-02 14:56:49 +01:00
963c818875 claws-mail: désactivation du plugin pour voir les mails en HTML
* plusieurs failles de sécurité
* option en commentaire pour l'activer quand même
2017-03-02 14:47:03 +01:00
Yves Dubromelle
2f99508331 ajout todo sur config-generator 2017-03-02 00:09:56 +01:00
Yves Dubromelle
b6a7f50ebd ajout de todo 2017-03-01 23:58:43 +01:00
Yves Dubromelle
2fdaf24fae déplacement de la config desktop vers les endroits quivontbien(c) dans public 2017-03-01 23:29:21 +01:00
Yves Dubromelle
c193d944d9 déplacement de la config xmonad vers public 2017-03-01 23:16:24 +01:00
Yves Dubromelle
7750d1a266 déplacement de la config du résolveur dns vers private + purge base 2017-03-01 23:01:09 +01:00
Yves Dubromelle
08195188b2 déplacement de nix-serve et fail2ban dans private 2017-03-01 22:52:34 +01:00
Yves Dubromelle
b12e1f9ae5 déplacement des users vers private 2017-03-01 22:30:51 +01:00
Yves Dubromelle
d0b3497ccb htop s'ouvre dans byobu 2017-03-01 21:59:42 +01:00
Yves Dubromelle
ba0d43670d la dernière série d'onglets byobu lance une commande 2017-03-01 21:59:09 +01:00
06aaf3cc23 comment 2017-03-01 21:37:13 +01:00
0e1a1b0107 déplacement config claws & mumble 2017-03-01 17:45:18 +01:00
c500c59732 déplacement des polices 2017-03-01 17:44:16 +01:00
9e3b1d163f déplacement paquets 2017-03-01 17:42:49 +01:00
9bdaae4593 typo 2017-03-01 17:39:16 +01:00
1a80e445ce ajout squelette pour unifier desktop/ 2017-03-01 17:37:22 +01:00
50d486565c inutile 2017-03-01 17:33:16 +01:00
b6cf3b2674 déplacement samba 2017-03-01 17:33:08 +01:00
c0427bb622 byoby: ajout commentaires + utilisation de boucles 2017-03-01 17:00:31 +01:00
Yves Dubromelle
5be0164cb9 script + variable d'environment pour une session byobu d'adminsys 2017-02-27 23:42:23 +01:00
System administrator
493249ebd3 clef ssh taeradan de la VM capgemini 2017-02-27 16:28:55 +01:00
System administrator
9d0c04810c clef ssh taeradan de la VM capgemini 2017-02-27 15:55:27 +01:00
Yves Dubromelle
e5de46f1d3 zulu: distribution openjdk 2017-02-26 22:13:01 +01:00
Yves Dubromelle
2a2c0a56fe munin: with pkgs 2017-02-26 22:04:41 +01:00
8ef6642024 munin: augmentation du délais de demarrage 2017-02-25 21:28:09 +01:00
e77df9816d munin: configuration de l'envois de mail 2017-02-25 20:53:34 +01:00
Yves Dubromelle
ba09f97684 setuid: smokeping 2017-02-25 15:22:55 +01:00
Yves Dubromelle
b0696f1983 sudo: inutile :) 2017-02-25 15:16:06 +01:00
Yves Dubromelle
2d9c9415a2 setuid: mtr 2017-02-25 15:13:07 +01:00
Yves Dubromelle
7e7736b631 setuid: udevil 2017-02-25 15:08:23 +01:00
Yves Dubromelle
52670ebd9c setuid: slock 2017-02-25 15:03:33 +01:00
Yves Dubromelle
8845300555 awesome: activation du raccourci xrandr-auto + au démarrage 2017-02-25 11:51:16 +01:00
dce783708c désactivation modification IO scheduler pour SSD 2017-02-20 22:23:13 +01:00
f2305d0a81 tinc: ajout @IP dubro vivo 2017-02-20 22:22:51 +01:00
a6e957afae ménage config-generator 2017-02-20 22:21:00 +01:00
edfac07129 pru: + de paquets par défaut 2017-02-20 22:20:39 +01:00
7799eb106f haskell: ajout threadscope pour analyser les logs d'application 2017-02-19 21:28:58 +01:00
e0a468bfeb fix port 2017-02-19 18:27:35 +01:00
c4013be348 typo 2017-02-19 18:22:27 +01:00
6cdd621db2 erreur DNS pour grudu. utilisation @IPv4 2017-02-19 18:20:12 +01:00
a5bfdbcd3d activation nix-serve-client {ocean, rollo} 2017-02-19 18:13:12 +01:00
5b954581db activation nix-serve client entre les serveurs online 2017-02-19 18:11:29 +01:00
ca11b46674 activation serveur nix-serve sur machines en salle machine 2017-02-19 18:08:28 +01:00
Yves Dubromelle
754a1ec934 nix-server: ajout de monstre 2017-02-12 22:58:00 +01:00
Yves Dubromelle
80f7b32af6 phenom: est un client nix-serve 2017-02-12 22:38:04 +01:00
Yves Dubromelle
5cd1cd0e6f phenom: desactivation de latitude comme source nix-serve 2017-02-12 22:10:30 +01:00
Yves Dubromelle
fae4a8237c /run/current-system/sw/bin/bash: q : commande introuvable 2017-02-12 22:06:38 +01:00
Yves Dubromelle
5f09c0896d ajout de machines fixes comme serveur nix 2017-02-12 22:04:08 +01:00
Yves Dubromelle
2244b917ac radx: activation nix-server 2017-02-12 22:00:48 +01:00
458362bece git: alias d'affichage des branches triées par date de modification 2017-02-11 01:42:45 +01:00
b4b213e836 client internet: ajout de quassel simple pour se connecter sans bouncer 2017-02-11 01:41:33 +01:00
cc7f911141 radx: activation postgresql 2017-02-11 01:41:14 +01:00
4ffd71f10f haskell: ajout hlint 2017-02-11 01:40:48 +01:00
Yves Dubromelle
07cf33a086 police hasklig 2017-02-04 13:44:11 +01:00
f3741782e3 munin: réduction du temps d'attente au lancement. On verra s'il est suffisant 2017-02-02 16:14:32 +01:00
b8c3447767 fix: syntax 2017-02-01 13:40:33 +01:00
eb3a945c7c prunetwork: disable hydra 2017-02-01 02:18:35 +01:00
6f19fdec07 ajout de time devant les commandes nix potentiellement longues 2017-01-31 13:10:55 +01:00
91e81d50a6 radx: profils de dev 2017-01-31 12:43:32 +01:00
Yves Dubromelle
293dd76025 profil pour Elm (et plugin vim) 2017-01-30 21:35:53 +01:00
65a21c197c ajout hostname pour {radx, hydra, ocean} 2017-01-29 23:56:58 +01:00
Yves Dubromelle
c11cd5d456 formatage 2017-01-29 23:34:52 +01:00
Yves Dubromelle
805ef707f5 fix: plus de matching sur le hostname, is<machine> à mettre à true dans configuration.nix 2017-01-29 23:31:44 +01:00
Yves Dubromelle
1ee426f50a hostname dans le config-generator pour phenom 2017-01-29 23:29:50 +01:00
Yves Dubromelle
0bcd327679 -hydra pour phenom 2017-01-29 23:28:53 +01:00
04c3397ff3 suppression de la variable enable car toujours à vraie 2017-01-29 19:28:40 +01:00
5f86c78e1b smokeping: ajout hydra 2017-01-28 00:15:26 +01:00
aad2931967 tinc: ajout adresse réseau grudu pour hydra.pru 2017-01-27 23:41:04 +01:00
715a3519f4 Merge remote-tracking branch 'origin/master' into nixos-unstable 2017-01-27 19:31:38 +01:00
0b08c7dbd0 munin: ajout dépendances sur 'sensors' 2017-01-27 19:30:04 +01:00
0dab828682 activation de hydra sur hydra.pru 2017-01-27 19:22:46 +01:00
b4786c8fdf ajout de la clef ssh serveur de hydra 2017-01-27 19:22:27 +01:00
11a69418a7 ajout machine hydra.prunetwork.fr 2017-01-27 18:17:02 +01:00
d7f2b4fd38 ajout monitoring smokeping pour toutes les machines 2017-01-26 11:49:18 +01:00
Yves Dubromelle
84802f8604 ajout hindent 2017-01-26 10:41:38 +01:00
Yves Dubromelle
28092fb029 latitude sert son nix-store 2017-01-26 10:39:17 +01:00
97 changed files with 1416 additions and 740 deletions

View File

@@ -1,17 +1,18 @@
GSF=git submodule foreach GSF=git submodule foreach
TIME=time
all: rebuild-switch all: rebuild-switch
date date
##--------- Commandes spécifiques pour NixOS ##--------- Commandes spécifiques pour NixOS
clean: clean:
nix-collect-garbage -d --delete-older-than 15d $(TIME) nix-collect-garbage -d --delete-older-than 15d
clean-aggressive: clean-aggressive:
nix-collect-garbage -d --delete-older-than 1d $(TIME) nix-collect-garbage -d --delete-older-than 1d
clean-total: clean-total:
nix-collect-garbage -d $(TIME) nix-collect-garbage -d
clean-log: clean-log:
journalctl --vacuum-size=1G journalctl --vacuum-size=1G
@@ -20,19 +21,19 @@ full-auto: submodules-update upgrade clean optimise
@date @date
optimise: optimise:
nix-store --optimise $(TIME) nix-store --optimise
rebuild-switch: rebuild-switch:
nixos-rebuild switch --fallback --show-trace $(TIME) time nixos-rebuild switch --fallback --show-trace
show-roots: show-roots:
nix-store --gc --print-roots nix-store --gc --print-roots
store-repair: store-repair:
nix-store --verify --check-contents --repair $(TIME) nix-store --verify --check-contents --repair
upgrade: upgrade:
nixos-rebuild switch --upgrade --fallback --show-trace $(TIME) nixos-rebuild switch --upgrade --fallback --show-trace
##--------- Commandes spécifiques pour NixOS -- Opérations non courantes ##--------- Commandes spécifiques pour NixOS -- Opérations non courantes
@@ -40,6 +41,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

184
README.md
View File

@@ -1,18 +1,45 @@
# nixos-template-base # nixos-template-base
Version de nixos supportée : NixOs 16.09 Versions de NixOS supportées :
* NixOS 16.09
* NixOS unstable
Ce dépôt stocke une configuration générique des machines. Ce dépôt stocke une configuration générique des machines.
Une recette dite "config-generator" adapte la configuration selon le nom de la machine (FQDN). Une recette dite "config-generator" adapte la configuration selon le nom de la machine (FQDN).
Actuellement, les scripts contiennent un peu de configuration spécifique pour les machines des mainteneurs. Actuellement, les scripts contiennent un peu de configuration spécifique pour les machines des mainteneurs.
# Lien pour install sur machine distante # Notes de mise-à-jour
## pour le passage de 16.09 à unstable
* https://nixos.org/wiki/How_to_install_NixOS_from_Linux#Installing_through_a_chroot * mettre à jour tous les dépôts
* https://github.com/NixOS/nixpkgs/issues/13305 * changer la branche de base vers `nixos-unstable`
* changer la declaration de la machine dans `configuration.nix`
# Notes pour l'upgrade de 16.03 vers 16.09 ~~~
networking.hostName = "<bidule>";
~~~
devient
~~~
r6d.computers.is<bidule> = true;
~~~
* mettre à jour le channel
~~~
nix-channel --add https://nixos.org/channels/nixos-unstable nixos
nix-channel --update
~~~
* faire la mise à jour
~~~
make
~~~
## pour le passage de 16.03 à 16.09
* mettre le dépôt base sur la branche upgrade-16.09 * mettre le dépôt base sur la branche upgrade-16.09
* changer le channel nixos : ```nix-channel --add https://nixos.org/channels/nixos-16.09 nixos``` * changer le channel nixos : ```nix-channel --add https://nixos.org/channels/nixos-16.09 nixos```
@@ -41,3 +68,150 @@ Pour résoudre les soucis d'upgrade, il est conseillé :
* d'ajouter `vim` aux paquets * d'ajouter `vim` aux paquets
* de réactiver petit à petit les lignes désactivées * de réactiver petit à petit les lignes désactivées
# Installation sur machine chez online.net
* https://nixos.org/wiki/Install_NixOS_on_Online.Net
* https://nixos.org/wiki/Install_NixOS_on_Linode
## Installation selon config online
* commander serveur
* lancer la procédure d'installation avec ubuntu LTS 64bits
* partitionner le disque avec l'interface web
* lancer l'installation de l'os.
* attendre que la procédure standard d'installation d'online ait terminée
* lorsque l'install est finie, dans l'onglet "Etat" se trouve l'option "Secours"
## Transformation en NixOS
* relancer la machine en mode "Secours"
* choisir un linux 64bits (préférence pour ubuntu LTS)
* le système de boot donne des identifiants SSH pour le connecter à la machine
* se connecter à la machine
* passer en root
~~~
sudo su -
~~~
* formater les partitions
~~~
mkfs.ext4 -L nixos /dev/sda1
swapoff -a
mkswap /dev/sda2
swapon -a
~~~
* monter les partitions dans /mnt
~~~
mount /dev/sda1 /mnt/
mkdir /mnt/etc/
mkdir /etc/nixos
mkdir /mnt/nix
mount --bind /mnt/nix/ /nix
~~~
* installer les paquets nécessaires
~~~
apt-get install bzip2 git byobu htop glances
~~~
* création d'utilisateur (n'importe quil mot de passe)
~~~
adduser nix
groupadd -r nixbld
for n in $(seq 1 10); do useradd -c "Nix build user $n" -d /var/empty -g nixbld -G nixbld -M -N -r -s "$(which nologin)" nixbld$n; done
~~~
* mise-à-jour des certificats
~~~
update-ca-certificates
~~~
* installer nix
~~~
chown -R nix /nix
su - nix
bash <(curl https://nixos.org/nix/install)
exit
~~~
* créer un profil nix pour root & un channel
~~~
. ~nix/.nix-profile/etc/profile.d/nix.sh
nix-channel --remove nixpkgs
nix-channel --add http://nixos.org/channels/nixos-unstable nixos
nix-channel --update
~~~
* installer un editeur de texte
~~~
nix-env -i vim_configurable
~~~
* installation de nixos-install
~~~
cat <<EOF > /root/configuration.nix
{ fileSystems."/" = {};
boot.loader.grub.enable = false;
}
EOF
export NIX_PATH=nixpkgs=/root/.nix-defexpr/channels/nixos:nixos=/root/.nix-defexpr/channels/nixos/nixos
export NIXOS_CONFIG=/root/configuration.nix
nix-env -i -A config.system.build.nixos-install \
-A config.system.build.nixos-option \
-A config.system.build.nixos-generate-config \
-f "<nixos>"
~~~
* configuration de NixOS
si la machine existe déjà, cloner le dépôt dans /mnt/etc/nixos
pour cela, créer clef ssh et l'ajouter sur la forge
~~~
ssh-keygen -t ed25519
cp ~/.ssh/id_ed25519* /mnt/etc/nixos/
git clone <>
git submodule init
git submodule update
~~~
* monter /etc/nixos vers /mnt/etc/nixos pour que la config clonée fonctionne
~~~
mount --bind /mnt/etc/nixos/ /etc/nixos/
~~~
* mettre à jour la configuration matérielle
~~~
export NIX_PATH=nixpkgs=/root/.nix-defexpr/channels/nixos:nixos=/root/.nix-defexpr/channels/nixos/nixos
nixos-generate-config --root /mnt
~~~
* vérifier le /mnt/etc/nixos/configuration.nix
notamment le périphérique utilisé par grub
* installer le système sur le disque
~~~
unset NIXOS_CONFIG
nixos-install
~~~

View File

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

View File

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

View File

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

View File

@@ -5,9 +5,11 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.conception-assistee { mkIf (cfg.conception-assistee && cfg.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

View File

@@ -5,15 +5,15 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.cartographie { mkIf (cfg.cartographie && cfg.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Gestion de données géographiques # Gestion de données géographiques
expat
gpsbabel # pour convettir les données des GPS
josm # outil de contribution à OpenStreetMap josm # outil de contribution à OpenStreetMap
#qgis # client lourd de manipulation de données géographiques #qgis # client lourd de manipulation de données géographiques
viking # analyse de topo, gestion de données GPS viking # analyse de topo, gestion de données GPS

View File

@@ -0,0 +1,52 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in
# TODO: ménage
mkIf (cfg.internetSuite && cfg.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
# Clients Internet
## Navigateur
chromium
firefox
## Mail & Discussion (texte, audio)
clawsMail
hexchat
quassel
quasselClient
mumble
pidgin
thunderbird
# Transfert de fichier
filezilla
transmission_gtk
transmission_remote_gtk
];
nixpkgs.config.packageOverrides = pkgs: {
clawsMail = pkgs.clawsMail.override {
enablePluginFancy = false; # nécessite wekitgtk qui est troué
enablePluginPdf = true;
enablePluginRavatar = true;
enablePluginSmime = true;
enablePluginVcalendar = true;
enableSpellcheck = true;
};
mumble = pkgs.mumble.override { pulseSupport = true; };
};
#nixpkgs.config.permittedInsecurePackages = [
# "webkitgtk-2.4.11" # pour que le plugin fancy de claws-mail fonctionne
#];
}

View File

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

View File

@@ -0,0 +1,41 @@
{ config, lib, pkgs, ... }:
let
#inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
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,27 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in
mkIf (cfg.developpement-elm && cfg.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
];
# Services
# Réseau
networking.firewall = {
allowedTCPPorts = [
];
allowedUDPPorts = [
];
};
}

View File

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

View File

@@ -5,16 +5,15 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.developpement-java { mkIf (cfg.developpement-java && cfg.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# IDE # IDE
idea.idea-community # IntelliJ IDEA idea.idea-community # IntelliJ IDEA
# Java
maven
]; ];
} }

View File

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

View File

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

View File

@@ -5,9 +5,11 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.developpement { mkIf (cfg.developpement && cfg.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@@ -15,28 +17,20 @@ mkIf cfg.developpement {
pgadmin # interface d'administration de postgres pgadmin # interface d'administration de postgres
sqlitebrowser # interface d'administration de sqlite sqlitebrowser # interface d'administration de sqlite
# 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

@@ -5,9 +5,11 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.edition-musique { mkIf (cfg.edition-musique && cfg.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

View File

@@ -5,20 +5,17 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.edition-photo { mkIf (cfg.edition-photo && cfg.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

@@ -5,9 +5,11 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.edition-video { mkIf (cfg.edition-video && cfg.graphical) {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [

View File

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

View File

@@ -5,21 +5,18 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf profiles.isDesktop { # TODO ranger le spécifique pulseaudio
mkIf (cfg.multimediaSuite && cfg.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,19 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in
mkIf (true && cfg.graphical) {
# Paquets
environment.systemPackages = with pkgs; [
## Diagnostic
wireshark
];
}

View File

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

View File

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf true { mkIf true {
@@ -12,6 +14,7 @@ mkIf true {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Adminsys # Adminsys
cowsay # pour ansible & 4lulz
iotop iotop
lm_sensors lm_sensors
lshw lshw
@@ -21,6 +24,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
@@ -36,6 +40,7 @@ mkIf true {
exfat # Pour monter les FAT avec Fuse exfat # Pour monter les FAT avec Fuse
hubicfuse # montage hubic hubicfuse # montage hubic
ntfs3g # ntfs ntfs3g # ntfs
samba # partages windows
squashfsTools # squashfs squashfsTools # squashfs
sshfsFuse # ssh sshfsFuse # ssh
@@ -47,13 +52,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,19 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in
mkIf true {
# Paquets
environment.systemPackages = with pkgs; [
## Manipulation de fichier
vifm # gestionnaire de fichiers basé sur VIM (console)
];
}

View File

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

View File

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

View File

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

View File

@@ -5,35 +5,25 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
# TODO: ménage
mkIf profiles.isDesktop { mkIf cfg.internetSuite {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Clients Internet # Clients Internet
## Navigateur
chromium
firefox
## Réseaux sociaux ## Réseaux sociaux
#python27Packages.turses # client twitter en ncurse #python27Packages.turses # client twitter en ncurse
python27Packages.rainbowstream # client twitter en console python27Packages.rainbowstream # client twitter en console
rtv # client reddit en console rtv # client reddit en console
## Mail & Discussion (texte, audio) ## Mail & Discussion (texte, audio)
clawsMail
hexchat
quasselClient
mumble
mutt mutt
pidgin
thunderbird
# Transfert de fichier ## Sauvegarde nuagique (cloud storage)
filezilla rclone
transmission_gtk
transmission_remote_gtk
]; ];
} }

View File

@@ -0,0 +1,44 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
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
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,41 @@
{ config, lib, pkgs, ... }:
let
#inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
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,28 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in
mkIf cfg.developpement-elm {
# Paquets
environment.systemPackages = with pkgs; [
elmPackages.elm
];
# Services
# Réseau
networking.firewall = {
allowedTCPPorts = [
];
allowedUDPPorts = [
];
};
}

View File

@@ -5,27 +5,31 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.developpement-haskell { mkIf cfg.developpement-haskell {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Haskell # Haskell platform
cabal-install # fournis cabal cabal-install # fournis cabal
cabal2nix # convertir les .cabal en .nix cabal2nix # convertir les .cabal en .nix
ghc # pour les appels depuis les scripts ghc # pour les appels depuis les scripts
stack # pour les paquets en LTS de stackage stack # pour les paquets en LTS de stackage
] ++ (with pkgs.haskellPackages; [
haskellPackages.stylish-haskell # qualité de code # Haskell lib
haskellPackages.hindent autoproc # ? procmail
darcs # Gestionnaire de version éponyme
ghc-mod
hindent # indentation code
hlint # qualite de code, analyse statique de code + astuces & bonnes pratiques
#postgrest # mapper HTTP <-> PostgreSQL
stylish-haskell # qualité de code
turtle # genre shell-scripting
# Application perso # Application perso
haskellPackages.hahp hahp
]);
# Application
haskellPackages.autoproc # ? procmail
haskellPackages.darcs # Gestionnaire de version éponyme
haskellPackages.turtle # genre shell-scripting
];
} }

View File

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

View File

@@ -5,15 +5,13 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.jetbrains-licensed { mkIf cfg.jetbrains-licensed {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
idea.idea-ultimate
idea.clion
idea.datagrip
idea.pycharm-professional
]; ];
} }

View File

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.developpement-rust { mkIf cfg.developpement-rust {

View File

@@ -0,0 +1,31 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in
mkIf cfg.developpement {
# Paquets
environment.systemPackages = with pkgs; [
# 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,17 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in
mkIf cfg.edition-musique {
# Paquets
environment.systemPackages = with pkgs; [
];
}

View File

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

View File

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

View File

@@ -5,13 +5,13 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.jeux { mkIf cfg.jeux {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Jeux
urbanterror
]; ];
} }

View File

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

View File

@@ -5,10 +5,11 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf true { mkIf true {
#mkIf profiles.isDesktop {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@@ -21,11 +22,15 @@ mkIf true {
## Diagnostic ## Diagnostic
arp-scan arp-scan
nmap # outil de scan de port réseau nmap # outil de scan de port réseau
mtr # outil de diagnostic réseau
#wireshark
whois whois
]; ];
# Paquets avec setuid root
security.wrappers = {
# outil de diagnostic réseau
mtr.source = "${pkgs.mtr}/bin/mtr";
};
networking.firewall = { networking.firewall = {
allowedTCPPorts = [ allowedTCPPorts = [
5201 # iperf 5201 # iperf

View File

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

View File

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

View File

@@ -5,16 +5,20 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
{ {
imports = [ imports = [
# recettes
./base/base.nix
./desktop/desktop.nix
./public/public.nix
# moulinette de configuration # moulinette de configuration
./config-generator.nix ./config-generator.nix
./options.nix
# subfolders
./applications/graphical/default.nix
./applications/terminal/default.nix
./configuration/default.nix
./services/default.nix
]; ];
} }

View File

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

View File

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

View File

@@ -1,31 +0,0 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf cfg.nix-serve-server {
# Cache http pour le store
# Services
services.nix-serve = {
enable = true;
};
# Réseau
networking.firewall = {
allowedTCPPorts = [
#5000 # ouvert sur tinc
];
allowedUDPPorts = [
];
extraCommands = ''
iptables -A INPUT -i tinc.grudunet -p tcp --dport 5000 -j ACCEPT
ip6tables -A INPUT -i tinc.grudunet -p tcp --dport 5000 -j ACCEPT
'';
};
}

View File

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

File diff suppressed because one or more lines are too long

View File

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

View File

@@ -1,22 +0,0 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf true {
# Définition des domaines utilisés lorsque un identifiant non-FQDN est donné (ping, nslookup)
networking = {
search = [
"dubronetwork.fr"
"prunetwork.fr"
"teleragno.fr"
"teleragno.net"
];
dnsExtensionMechanism = true;
};
}

34
byobu-adminsys Executable file
View File

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

View File

@@ -6,130 +6,126 @@ 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}";
in in
{ {
###### interface # TODO camel case partout
# TODO everything in english
# TODO sortir ce qui est privé
# TODO portage du système d'annuaire de machines de capgemini
###### interface
options = { options = {
#* Utilisé pour afecter des capacités aux machines
#* Utilisé pour afecter des capacités aux machines r6d.profiles = {
r6d.profiles = { # Domaine
# Domaine isDubronetwork = mkEnableOption "Pour distinguer les machines dubronetwork.";
isDubronetwork = mkEnableOption "Pour distinguer les machines dubronetwork."; isPrunetwork = mkEnableOption "Pour distinguer les machines prunetwork.";
isPrunetwork = mkEnableOption "Pour distinguer les machines prunetwork."; # Utilisation machine
# Utilisation machine isDesktopEnvironment = mkEnableOption "Pour indiquer une machine avec interface graphique.";
isDesktop = mkEnableOption "Pour indiquer une machine avec interface graphique."; isServer = mkEnableOption "Pour indiquer qu'il s'agit d'un serveur.";
isHome = mkEnableOption "Pour indiquer que la machine sert à la maison (divertissement & autre)."; isWorkstation = mkEnableOption "Pour indiquer que la machine sert à travailler.";
isServer = mkEnableOption "Pour indiquer qu'il s'agit d'un serveur.";
isWorkstation = mkEnableOption "Pour indiquer que la machine sert à travailler.";
};
#* Utilisé dans les fichiers .nix
r6d.config-generator = {
enable = mkEnableOption "Génération de la configuration d'une machine.";
awesome = mkEnableOption "Profil pour activer le gestionnaire de fenêtre awesome.";
auto-upgrade = mkEnableOption "Profil pour activer les mises à jour automatiques.";
cartographie = mkEnableOption "Profil pour activer les outils de gestion de données géographiques.";
conception-assistee = mkEnableOption "Profil pour activer les outils de conception électronique & modélisation 3D";
database_postgres = mkEnableOption "Profil pour activer le SGBD PostgreSQL.";
developpement = mkEnableOption "Profil pour activer les outils de développement";
developpement-haskell = mkEnableOption "Profil pour activer les outils de développement Haskell";
developpement-java = mkEnableOption "Profil pour activer les outils de développement Java";
developpement-rust = mkEnableOption "Profil pour activer les outils de développement Rust";
docker = mkEnableOption "Profil pour l'utilisation de Docker.";
dovecot = mkEnableOption "Profil pour activer le serveur Dovecot.";
dns_autorite = mkEnableOption "Profil pour servir les fichiers de zone DNS.";
dns_resolveur = mkEnableOption "Profil pour activer un résolveur DNS local.";
edition-musique = mkEnableOption "Profil pour la création/édition de musique.";
edition-photo = mkEnableOption "Profil pour la création/édition de photos.";
edition-video = mkEnableOption "Profil pour la création/édition de video.";
elasticsearch = mkEnableOption "Profil pour activer le service elasticsearch.";
fail2ban = mkEnableOption "Profil pour activer Fail2ban.";
hydra-builder = mkEnableOption "Profil pour une machine qui compile pour hydra.";
hydra-core = mkEnableOption "Profil pour un serveur hydra.";
kibana = mkEnableOption "Profil pour activer le service kibana.";
jetbrains-licensed = mkEnableOption "Profil pour la suite de développement Jetbrains payante (sous-ensemble).";
jeux = mkEnableOption "Profil pour les jeux vidéos.";
laptop = mkEnableOption "Profil pour les outils spécifiques aux ordinateurs portables.";
locate = mkEnableOption "Profil pour activer la fonction locate.";
mailboxes = mkEnableOption "Profil pour stocker les mails dans des boîtes aux lettres.";
murmur = mkEnableOption "Profil pour activer un serveur Mumble (murmur)";
nix-serve-client = mkEnableOption "Profil pour que la machine soit un client de cache nix.";
nix-serve-server = mkEnableOption "Profil pour que la machine soit un serveur de cache nix.";
nixStoreProxyCache = mkEnableOption "Profil pour activer le proxy cahce nginx pour le nix store";
print = mkEnableOption "Profil pour activer cups & pouvoir imprimer.";
rabbitmq = mkEnableOption "Profil pour activer le service de messagerie AMQP.";
radicale = mkEnableOption "Profil pour activer le service d'hébergement de calendrier + tâches & contacts.";
scanner = mkEnableOption "Profil pour que les scanners soient utilisable.";
swap = mkEnableOption "Profil pour que le swap soit activé.";
virtualbox = mkEnableOption "Profil pour l'utilisation de VirtualBox.";
xmonad = mkEnableOption "Profil pour activer le gestionnaire de fenêtres xmonad.";
znc = mkEnableOption "Profil pour activer le relais IRC ZNC.";
tincAddress = mkOption {
default = "";
example = "192.168.1.1";
description = "Adresse du noeud tinc local";
type = lib.types.string;
};
tincExtraConfig = mkOption {
default = "";
example = ''
Mode = router
ConnecTo = bar
'';
description = "Configuration supplémentaire pour tinc";
type = lib.types.string;
};
};
#* Utilisé pour avoir des raccourcis de machine
r6d.computers = {
isLatitude = mkEnableOption "Identification du nom de machine.";
isMonstre = mkEnableOption "Identification du nom de machine.";
isNeoNomade = mkEnableOption "Identification du nom de machine.";
isNomade = mkEnableOption "Identification du nom de machine.";
isOcean = mkEnableOption "Identification du nom de machine.";
isPedro = mkEnableOption "Identification du nom de machine.";
isPhenom = mkEnableOption "Identification du nom de machine.";
isRadx = mkEnableOption "Identification du nom de machine.";
isRollo = mkEnableOption "Identification du nom de machine.";
};
}; };
###### implementation #* Utilisé dans les fichiers .nix
# https://nixos.org/releases/nixos/14.12-small/nixos-14.12.374.61adf9e/manual/sec-writing-modules.html r6d.config-generator = {
# https://nixos.org/wiki/NixOS:extend_NixOS #enable = mkEnableOption "Génération de la configuration d'une machine.";
config = mkMerge awesome = mkEnableOption "Profil pour activer le gestionnaire de fenêtre awesome.";
[ # Unconditional stuff. auto-upgrade = mkEnableOption "Profil pour activer les mises à jour automatiques.";
{ cartographie = mkEnableOption "Profil pour activer les outils de gestion de données géographiques.";
r6d.config-generator.enable = true; conception-assistee = mkEnableOption "Profil pour activer les outils de conception électronique & modélisation 3D";
r6d.computers = { database_postgres = mkEnableOption "Profil pour activer le SGBD PostgreSQL.";
isLatitude = host == "latitude.dubronetwork.fr"; developpement = mkEnableOption "Profil pour activer les outils de développement";
isMonstre = host == "monstre.dubronetwork.fr"; developpement-elm = mkEnableOption "Profil pour activer les outils de développement Elm";
isNeoNomade = host == "neo-nomade.dubronetwork.fr"; developpement-haskell = mkEnableOption "Profil pour activer les outils de développement Haskell";
isNomade = host == "nomade.dubronetwork.fr"; developpement-java = mkEnableOption "Profil pour activer les outils de développement Java";
isOcean = host == "ocean.prunetwork.fr"; developpement-rust = mkEnableOption "Profil pour activer les outils de développement Rust";
isPedro = host == "pedro.dubronetwork.fr"; docker = mkEnableOption "Profil pour l'utilisation de Docker.";
isPhenom = host == "phenom.dubronetwork.fr"; dovecot = mkEnableOption "Profil pour activer le serveur Dovecot.";
isRadx = host == "radx.prunetwork.fr"; dns_autorite = mkEnableOption "Profil pour servir les fichiers de zone DNS.";
isRollo = host == "rollo.dubronetwork.fr"; dns_resolveur = mkEnableOption "Profil pour activer un résolveur DNS local.";
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.";
murmur = mkEnableOption "Profil pour activer un serveur Mumble (murmur)";
nix-serve-client = mkEnableOption "Profil pour que la machine soit un client de cache nix.";
nix-serve-server = mkEnableOption "Profil pour que la machine soit un serveur de cache nix.";
nixStoreProxyCache = mkEnableOption "Profil pour activer le proxy cahce nginx pour le nix store";
officeSuite = mkEnableOption "Profil pour la suite bureautique";
print = mkEnableOption "Profil pour activer cups & pouvoir imprimer.";
pulseaudio = mkEnableOption "Profil pour activer pulseaudio.";
rabbitmq = mkEnableOption "Profil pour activer le service de messagerie AMQP.";
radicale = mkEnableOption "Profil pour activer le service d'hébergement de calendrier + tâches & contacts.";
scanner = mkEnableOption "Profil pour que les scanners soient utilisable.";
securitySuite = mkEnableOption "Profil pour la suite de logiciels de sécurité.";
smokeping = mkEnableOption "Profil pour activer le monitoring réseau par smokeping.";
swap = mkEnableOption "Profil pour que le swap soit activé.";
virtualbox = mkEnableOption "Profil pour l'utilisation de VirtualBox.";
xmonad = mkEnableOption "Profil pour activer le gestionnaire de fenêtres xmonad.";
znc = mkEnableOption "Profil pour activer le relais IRC ZNC.";
tincAddress = mkOption {
default = "";
example = "192.168.1.1";
description = "Adresse du noeud tinc local";
type = lib.types.string;
}; };
} tincExtraConfig = mkOption {
default = "";
# Conditional stuff example = ''
Mode = router
ConnecTo = bar
'';
description = "Configuration supplémentaire pour tinc";
type = lib.types.string;
};
};
#* Utilisé pour avoir des raccourcis de machine
r6d.computers = {
isHydra = mkEnableOption "Identification du nom de machine.";
isLatitude = mkEnableOption "Identification du nom de machine.";
isMonstre = mkEnableOption "Identification du nom de machine.";
isNeoNomade = mkEnableOption "Identification du nom de machine.";
isNomade = mkEnableOption "Identification du nom de machine.";
isOcean = mkEnableOption "Identification du nom de machine.";
isPedro = mkEnableOption "Identification du nom de machine.";
isPhenom = mkEnableOption "Identification du nom de machine.";
isRadx = mkEnableOption "Identification du nom de machine.";
isRollo = mkEnableOption "Identification du nom de machine.";
};
};
###### implementation
# https://nixos.org/releases/nixos/14.12-small/nixos-14.12.374.61adf9e/manual/sec-writing-modules.html
# https://nixos.org/wiki/NixOS:extend_NixOS
config = mkMerge
[
## Définition des profils génériques ## Définition des profils génériques
(mkIf pfl.isDesktop { (mkIf pfl.isDesktopEnvironment {
r6d.config-generator = { r6d.config-generator = {
awesome = true; awesome = true;
#nix-serve-client = true; internetSuite = true;
scanner = true; multimediaSuite = true;
officeSuite = true;
pulseaudio = true;
securitySuite = true;
}; };
}) })
(mkIf pfl.isHome {
r6d.profiles.isDesktop = true;
})
(mkIf (pfl.isServer && !comp.isMonstre) { (mkIf (pfl.isServer && !comp.isMonstre) {
r6d.config-generator = { r6d.config-generator = {
#database_postgres = true; #database_postgres = true;
@@ -137,6 +133,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;
}; };
@@ -148,10 +145,11 @@ in
}; };
}) })
(mkIf pfl.isWorkstation { (mkIf pfl.isWorkstation {
r6d.profiles.isDesktop = true; r6d.profiles.isDesktopEnvironment = true;
r6d.config-generator = { r6d.config-generator = {
docker = true; docker = true;
graphical = true;
}; };
}) })
@@ -169,12 +167,14 @@ in
conception-assistee = true; conception-assistee = true;
docker = true; docker = true;
developpement = true; developpement = true;
developpement-elm = true;
developpement-haskell = true; developpement-haskell = true;
developpement-java = true; developpement-java = true;
developpement-rust = true; developpement-rust = true;
edition-musique = true; edition-musique = true;
edition-photo = true; edition-photo = true;
edition-video = true; edition-video = true;
scanner = true;
virtualbox = true; virtualbox = true;
xmonad = true; xmonad = true;
}; };
@@ -187,27 +187,35 @@ in
docker = true; docker = true;
locate = true; locate = true;
fail2ban = true; fail2ban = true;
smokeping = true;
swap = true; swap = true;
}; };
}) })
(mkIf (pfl.isPrunetwork && pfl.isWorkstation) { (mkIf (pfl.isPrunetwork && pfl.isWorkstation) {
r6d.config-generator = { r6d.config-generator = {
cartographie = true; cartographie = true;
conception-assistee = true;
docker = true;
developpement = true; developpement = true;
#developpement-elm = true;
developpement-haskell = true; developpement-haskell = true;
developpement-java = true; developpement-java = true;
#developpement-rust = true; developpement-rust = true;
#edition-musique = true; edition-musique = true;
edition-photo = true; edition-photo = true;
#edition-video = true; edition-video = true;
hydra-core = false; # DO NOT ENABLE ON WORKSTATION, YOU CAN CRASH YOUR SYSTEM
print = true; print = true;
virtualbox = true; scanner = true;
#virtualbox = true;
#xmonad = true;
}; };
}) })
## Affectation des profils aux machines ## Affectation des profils aux machines
(mkIf comp.isOcean { (mkIf comp.isHydra {
networking.hostName = "hydra.prunetwork.fr"; # Define your hostname.
r6d.profiles = { r6d.profiles = {
isPrunetwork = true; isPrunetwork = true;
isServer = true; isServer = true;
@@ -215,55 +223,85 @@ in
r6d.config-generator = { r6d.config-generator = {
docker = true; docker = true;
radicale = true; hydra-builder = true;
tincAddress = "192.168.12.6/24"; hydra-core = true;
nix-serve-server = true;
tincAddress = "192.168.12.9/24";
tincExtraConfig = '' tincExtraConfig = ''
ConnectTo = rollo_dubronetwork_fr ConnectTo = rollo_dubronetwork_fr
''; ConnectTo = ocean_prunetwork_fr
'';
};
})
(mkIf comp.isOcean {
networking.hostName = "ocean.prunetwork.fr"; # Define your hostname.
r6d.profiles = {
isPrunetwork = true;
isServer = true;
};
r6d.config-generator = {
docker = true;
hydra-builder = true;
radicale = true;
nix-serve-client = true;
nix-serve-server = true;
tincAddress = "192.168.12.6/24";
tincExtraConfig = ''
ConnectTo = hydra_prunetwork_fr
ConnectTo = rollo_dubronetwork_fr
'';
}; };
}) })
(mkIf comp.isRadx { (mkIf comp.isRadx {
networking.hostName = "radx.prunetwork.fr"; # Define your hostname.
r6d.profiles = { r6d.profiles = {
isHome = true;
isPrunetwork = true; isPrunetwork = true;
isWorkstation = true; isWorkstation = true;
}; };
r6d.config-generator = { r6d.config-generator = {
database_postgres = true;
elasticsearch = true; elasticsearch = true;
hydra-builder = true; #hydra-core = false; # DO NOT ENABLE ON WORKSTATION
hydra-core = true;
kibana = true; kibana = true;
rabbitmq = true; nix-serve-client = true;
nix-serve-server = true;
#rabbitmq = true;
tincAddress = "192.168.12.3/24"; tincAddress = "192.168.12.3/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
''; '';
virtualbox = true;
}; };
}) })
(mkIf comp.isLatitude { (mkIf comp.isLatitude {
networking.hostName = "latitude.dubronetwork.fr"; # Define your hostname.
r6d.profiles = { r6d.profiles = {
isDubronetwork = true; isDubronetwork = true;
isHome = true;
isWorkstation = true; isWorkstation = true;
}; };
r6d.config-generator = { r6d.config-generator = {
jetbrains-licensed = true; jetbrains-licensed = true;
laptop = true; laptop = true;
nix-serve-client = true;
nix-serve-server = true;
tincAddress = "192.168.12.2/24"; tincAddress = "192.168.12.2/24";
tincExtraConfig = '' 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
''; '';
nix-serve-server = true;
}; };
}) })
(mkIf comp.isMonstre { (mkIf comp.isMonstre {
networking.hostName = "monstre.dubronetwork.fr"; # Define your hostname.
r6d.profiles = { r6d.profiles = {
isDubronetwork = true; isDubronetwork = true;
isServer = true; isServer = true;
@@ -278,27 +316,35 @@ in
tincAddress = "192.168.12.4/24"; tincAddress = "192.168.12.4/24";
tincExtraConfig = '' tincExtraConfig = ''
ConnectTo = rollo_dubronetwork_fr ConnectTo = rollo_dubronetwork_fr
ConnectTo = hydra_prunetwork_fr
ConnectTo = ocean_prunetwork_fr ConnectTo = ocean_prunetwork_fr
''; '';
}; };
}) })
(mkIf comp.isNeoNomade{ (mkIf comp.isNeoNomade{
networking.hostName = "neo-nomade.dubronetwork.fr"; # Define your hostname.
r6d.profiles = { r6d.profiles = {
isDubronetwork = true; isDubronetwork = true;
isHome = true; isDesktopEnvironment = true;
}; };
r6d.config-generator = { r6d.config-generator = {
laptop = true; laptop = true;
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
''; '';
}; };
}) })
# Dubro Vivo - St Malo
#tincAddress = "192.168.12.8/24";
(mkIf comp.isNomade{ (mkIf comp.isNomade{
networking.hostName = "nomade.dubronetwork.fr"; # Define your hostname.
r6d.profiles.isDubronetwork = true; r6d.profiles.isDubronetwork = true;
r6d.config-generator = { r6d.config-generator = {
@@ -316,26 +362,29 @@ in
}; };
}) })
(mkIf comp.isPhenom { (mkIf comp.isPhenom {
networking.hostName = "phenom.dubronetwork.fr"; # Define your hostname.
r6d.profiles = { r6d.profiles = {
isDubronetwork = true; isDubronetwork = true;
isHome = true;
isWorkstation = true; isWorkstation = true;
}; };
r6d.config-generator = { r6d.config-generator = {
jetbrains-licensed = true; jetbrains-licensed = true;
hydra-core = true; #hydra-core = true;
nix-serve-client = true;
nix-serve-server = true; nix-serve-server = true;
edition-photo = true; edition-photo = true;
tincAddress = "192.168.12.1/24"; tincAddress = "192.168.12.1/24";
tincExtraConfig = '' 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
''; '';
}; };
}) })
(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;
@@ -346,10 +395,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

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.auto-upgrade { mkIf cfg.auto-upgrade {

View File

@@ -5,8 +5,11 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
# TODO: rc.lua par défaut (système)
mkIf cfg.awesome { mkIf cfg.awesome {
environment.variables = { environment.variables = {

29
configuration/default.nix Normal file
View File

@@ -0,0 +1,29 @@
{ config, lib, pkgs, ... }:
let
#inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
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

@@ -5,14 +5,17 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
# TODO: ménage
{ {
# Nombre de process d'installation en parrallèle effectués par Nix # Nombre de process d'installation en parrallèle effectués par Nix
nix.buildCores = 0; nix.buildCores = 0;
# The NixOS release to be compatible with for stateful data such as databases. # The NixOS release to be compatible with for stateful data such as databases.
system.stateVersion = "16.09"; system.stateVersion = "17.03";
# copies the NixOS configuration file (usually /etc/nixos/configuration.nix) and links it from the resulting system (getting to /run/current-system/configuration.nix) # copies the NixOS configuration file (usually /etc/nixos/configuration.nix) and links it from the resulting system (getting to /run/current-system/configuration.nix)
system.copySystemConfiguration = true; system.copySystemConfiguration = true;
@@ -28,35 +31,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";
@@ -69,13 +43,10 @@ in
#git-loc = "git ls-files | while read f; do git blame --line-porcelain "${f}" | grep '^author '; done | sort -f | uniq -ic | sort -n"; #git-loc = "git ls-files | while read f; do git blame --line-porcelain "${f}" | grep '^author '; done | sort -f | uniq -ic | sort -n";
grep = "grep --color=auto"; grep = "grep --color=auto";
vi = "vim"; vi = "vim";
byobu-adminsys = "/etc/nixos/base/byobu-adminsys";
}; };
etc.gitconfig.text = builtins.readFile ./gitconfig; etc.gitconfig.text = builtins.readFile ./gitconfig;
}; };
# programmes qui n'ont pas besoin de sudo pour fonctionner
security.setuidPrograms = [
"mtr"
];
programs.bash = { programs.bash = {
enableCompletion = true; enableCompletion = true;
promptInit = builtins.readFile ./bash-prompt.sh; promptInit = builtins.readFile ./bash-prompt.sh;

View File

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

View File

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.laptop { mkIf cfg.laptop {
@@ -24,4 +26,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

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf true { mkIf true {

View File

@@ -5,12 +5,14 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
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

View File

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf true { mkIf true {

View File

@@ -5,9 +5,11 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
{ mkIf false {
# Définition du IO Scheduler pour les SSD # Définition du IO Scheduler pour les SSD
services.udev.extraRules = '' services.udev.extraRules = ''
# set deadline scheduler for non-rotating disks # set deadline scheduler for non-rotating disks

View File

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

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

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf true { mkIf true {

78
options.nix Normal file
View File

@@ -0,0 +1,78 @@
{ config, lib, pkgs, r6d, ... }:
let
inherit (lib) mkEnableOption mkTextOption mkIf mkMerge mkOption singleton types;
# TODO: Anglish :)
machineOptions = types.submodule {
options = {
configuration-flags = types.submodule r6d.config-generator;
profiles = types.submodule r6d.profiles;
ipAddress = mkOption {
description = "Adresse IP";
type = lib.types.string;
};
nix-serve-server = mkEnableOption "nix-serve server";
nix-serve-client = mkEnableOption "nix-serve client";
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";
};
};
};
};
in
{
options = {
r6d.machines = mkOption {
type = types.attrsOf machineOptions;
description = ''
Machines directory.
'';
};
};
}

View File

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

View File

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

View File

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

37
services/default.nix Normal file
View File

@@ -0,0 +1,37 @@
{ config, lib, pkgs, ... }:
let
#inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in
{
imports = [
# installées systématiquement
./haveged.nix
./monitoring-munin.nix
./ssh.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
./locate.nix # service locate
./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

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.docker { mkIf cfg.docker {

View File

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.elasticsearch { mkIf cfg.elasticsearch {

View File

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf true { mkIf true {

View File

@@ -5,15 +5,14 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.laptop { mkIf cfg.developpement-haskell {
# Gestion spécifique pour PC portable services.hoogle = {
# Services
services.xserver.synaptics = {
enable = true; enable = true;
twoFingerScroll = true; port = 10080;
}; };
} }

View File

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

View File

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
#### https://github.com/NixOS/hydra/issues/413 #### https://github.com/NixOS/hydra/issues/413
@@ -22,6 +24,7 @@ let
# information pour l'état de hydra : # information pour l'état de hydra :
# hydra-queue-runner --status | json_pp # hydra-queue-runner --status | json_pp
in in
# TODO: passe de ménage
mkIf cfg.hydra-core { mkIf cfg.hydra-core {
# Paquets # Paquets
@@ -61,6 +64,8 @@ mkIf cfg.hydra-core {
#package = hydra-src-pkg ; #package = hydra-src-pkg ;
}; };
systemd.services.hydra-evaluator.serviceConfig.Nice = -19;
#systemd.services.hydra-evaluator = { #systemd.services.hydra-evaluator = {
# path = [ pkgs.nettools config.services.hydra.package ]; # path = [ pkgs.nettools config.services.hydra.package ];
#}; #};
@@ -73,6 +78,7 @@ mkIf cfg.hydra-core {
### Machines connues ### Machines connues
programs.ssh.knownHosts = { programs.ssh.knownHosts = {
"hydra.prunetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHqja/yYsQeS5amZKPUG+EKSIkjEN6fYW54Fzvj1pFaP";
"monstre.dubronetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBTTrLhq1Cwm0rpnwEIxSLqVrJWZnt+/9dt+SKd8NiIc"; "monstre.dubronetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBTTrLhq1Cwm0rpnwEIxSLqVrJWZnt+/9dt+SKd8NiIc";
"pedro.dubronetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM7fjo2ysLqlfSo6BKnc6I6m1ayoPrbwEEyTKZmUzsOD"; "pedro.dubronetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM7fjo2ysLqlfSo6BKnc6I6m1ayoPrbwEEyTKZmUzsOD";
"ocean.prunetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINCaRuTl8iCTUE4XInOpkSlwQj5Re4w4Iq+gNIlJe8pA"; "ocean.prunetwork.fr".publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINCaRuTl8iCTUE4XInOpkSlwQj5Re4w4Iq+gNIlJe8pA";

View File

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.kibana { mkIf cfg.kibana {

View File

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.locate { mkIf cfg.locate {

View File

@@ -5,8 +5,12 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
# TODO: ajouter option
# TODO: changer adresse mail
mkIf true { mkIf true {
# Paquets # Paquets
@@ -21,7 +25,16 @@ mkIf true {
services.munin-node = { services.munin-node = {
enable = true; enable = true;
}; };
systemd.services.munin-node.serviceConfig.TimeoutStartSec = "3min"; systemd.services.munin-node = {
path = with pkgs; [ munin lm_sensors ];
serviceConfig.TimeoutStartSec = "3min";
};
users.extraUsers.munin = {
#extraGroups = [ "postfix" "root" ];
extraGroups = [ "postfix" ];
};
# chmod a+rX -Rv /var/lib/postfix/queue/
## Munin server -- generate /var/www/munin ## Munin server -- generate /var/www/munin
services.munin-cron = { services.munin-cron = {
@@ -31,7 +44,7 @@ mkIf true {
address 127.0.0.1 address 127.0.0.1
''; '';
extraGlobalConfig = '' extraGlobalConfig = ''
contact.email.command mail -s "Munin notification for ''${var:host}" root@${config.networking.hostName} contact.email.command ${pkgs.mutt}/bin/mutt -F /etc/nixos/base/public/services/munin-muttrc -s "Munin notification for ''${var:host}" root@prunetwork.fr
''; '';
}; };

3
services/munin-muttrc Normal file
View File

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

View File

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.print { mkIf cfg.print {

View File

@@ -5,9 +5,11 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf profiles.isDesktop { mkIf cfg.pulseaudio {
# Pulse Audio # Pulse Audio
hardware.pulseaudio = { hardware.pulseaudio = {
@@ -15,5 +17,4 @@ mkIf profiles.isDesktop {
support32Bit = true; support32Bit = true;
daemon.config = { flat-volumes = "no"; }; daemon.config = { flat-volumes = "no"; };
}; };
#environment.etc."pulse/daemon.conf".text = "flat-volumes = no";
} }

View File

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.scanner { mkIf cfg.scanner {

View File

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf true { mkIf true {

View File

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.virtualbox { mkIf cfg.virtualbox {

View File

@@ -5,14 +5,16 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf profiles.isDesktop { mkIf profiles.isDesktopEnvironment {
# Services # Services
# Enable the X11 windowing system. # Enable the X11 windowing system.
services.xserver = { services.xserver = {
#enable = true; enable = true;
layout = "fr"; layout = "fr";
xkbOptions = "eurosign:e"; xkbOptions = "eurosign:e";
displayManager.lightdm.enable = true; displayManager.lightdm.enable = true;

View File

@@ -5,6 +5,8 @@ let
cfg = config.r6d.config-generator; cfg = config.r6d.config-generator;
computers = config.r6d.computers; computers = config.r6d.computers;
profiles = config.r6d.profiles; profiles = config.r6d.profiles;
annuaire = config.r6d.machines;
currentMachine = annuaire."${config.networking.hostName}";
in in
mkIf cfg.xmonad { mkIf cfg.xmonad {
@@ -13,6 +15,7 @@ mkIf cfg.xmonad {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
dmenu dmenu
haskellPackages.xmobar haskellPackages.xmobar
trayer
]; ];
# Services # Services
@@ -23,4 +26,7 @@ mkIf cfg.xmonad {
haskellPackages.xmobar haskellPackages.xmobar
]; ];
}; };
environment.variables = {
_JAVA_AWT_WM_NONREPARENTING = "1";
};
} }