Compare commits

..

72 Commits

Author SHA1 Message Date
31692206e0 amélioration hydra + retour au paquet par défaut 2017-01-04 14:26:28 +01:00
fad5a05159 ajout commande de debug 2017-01-03 18:12:15 +01:00
30962288b7 ajout référence ver source 2017-01-03 18:11:34 +01:00
8d28f29c57 MaJ version hydra - manuelle 2017-01-03 18:10:30 +01:00
df05e6101d prunetwork, & docker 2017-01-01 18:44:13 +01:00
72eaf19f95 déplacement des options de profils dans + spécifique 2017-01-01 18:31:33 +01:00
f632193558 création profil prunetwork && workstation 2017-01-01 18:23:59 +01:00
05b5da4319 suppression option inutilisée (même si interessante) 2017-01-01 18:22:59 +01:00
64d0765e40 xray n'est pas sous nixos 2017-01-01 18:17:25 +01:00
587e91fe61 la config locate est spécique aux domaines 2017-01-01 18:14:35 +01:00
Yves Dubromelle
0f4355d382 désactivation yubikey 2017-01-01 16:15:18 +01:00
Yves Dubromelle
8c18caab2e déplacement programmes dans fichiers spécifiques 2017-01-01 16:14:41 +01:00
Yves Dubromelle
2bee4131ed commentaires 2017-01-01 16:14:25 +01:00
Yves Dubromelle
49b86fb898 dev: programmes inutiles 2017-01-01 15:37:14 +01:00
6dd9251f07 activation de locate ... 2016-12-30 17:48:13 +01:00
6ca6c83898 commentaires 2016-12-30 17:20:04 +01:00
d6ff207d22 indentation 2016-12-30 17:18:37 +01:00
2a26db779f dev: ajout de hahp à l'environement haskell 2016-12-30 17:13:29 +01:00
aecfadea5f dev: suppression zeal 2016-12-30 17:11:10 +01:00
2e45bfbc05 dev: suppression des applications disponibles dans des fichiers séparés 2016-12-30 17:10:06 +01:00
cd05bec335 utilisation des variables pour activer les environements de dev 2016-12-30 17:09:15 +01:00
3aecc135c0 ajout de profiles pour le développement (haskell java rust) 2016-12-30 17:08:37 +01:00
54b8d6ce7d commande pour avoir les statistiques d'affectation des lignes de texte d'un dépôt git 2016-12-22 00:01:23 +01:00
4a81f80d8c déplacement ksnapshot 2016-12-19 18:18:32 +01:00
ec3dc220be edition-photo: un éditeur de raw n'est pas nécessaire. Il faut un appareil qui produise du raw 2016-12-19 18:16:39 +01:00
4a106a82ef edition-musique: seules les stations de travail dubronetwork ont l'option activée 2016-12-19 18:14:16 +01:00
4397b892eb cartographie: désactivation qgis 2016-12-19 18:12:58 +01:00
829aff682e bureautique: ajout section pour diagrammes 2016-12-19 18:11:32 +01:00
cff0a177d2 désactivation d'applications a priori peu utilisées 2016-12-19 18:10:42 +01:00
de2c645dbe indentation 2016-12-19 18:07:54 +01:00
0facfef3e9 réorganisation fichier app-dev 2016-12-19 18:07:04 +01:00
94c1485006 ajout commentaire 2016-12-19 18:02:13 +01:00
35322c124c ajout duplicity 2016-12-16 19:54:01 +01:00
8d9c0d830f interpreteur .net 2016-12-16 18:38:53 +01:00
bdf5e511f3 commentaires 2016-12-16 18:38:17 +01:00
386ce3b25e ajout hubicfuse 2016-12-16 18:38:03 +01:00
b9d19017c0 packages pour haskell 2016-12-11 21:27:11 +01:00
f91e72ef50 ajout de pandoc-citeproc 2016-12-09 18:33:08 +01:00
5f089977a2 mnomade
tinc: ajout conf neo
2016-11-29 10:37:49 +01:00
Yves Dubromelle
83aa5af2fc ménage 2016-11-28 22:19:13 +01:00
79d97ca438 ajout en masse de liens vers rollo, ocean, monstre 2016-11-28 21:51:57 +01:00
04869f63f7 tinc: ajouit adresse monstre, rollo, ocean 2016-11-28 20:40:21 +01:00
be47e7c285 make: ajout commandes rapides pour tinc 2016-11-28 20:27:24 +01:00
a2ee566f15 net: activation du forwarding pour IPv4 et IPv6 2016-11-28 19:43:51 +01:00
b51c69d330 tinc: modification plage addresse 2016-11-28 19:30:22 +01:00
a75b126b5a tnic: radx essaye de se connecter à phenom 2016-11-28 13:03:36 +01:00
Yves Dubromelle
eabe0db746 réduction de la taille des subnets 2016-11-28 12:54:45 +01:00
b2e44a7b75 activation rabbitmq radx 2016-11-22 18:22:14 +01:00
59982b296b ajout de maven 2016-11-22 15:50:04 +01:00
4b35c7c20a fix: erreur nom programme 2016-11-22 14:37:38 +01:00
c0509692b4 ajout focuswriter 2016-11-20 19:05:08 +01:00
772ce45d5e ajout lsb-release 2016-11-20 19:02:13 +01:00
Yves Dubromelle
f38a182c4d hydra: ajout de qemu 2016-11-15 12:38:20 +01:00
4bb890da7a règles pour les SSD 2016-11-13 16:10:12 +01:00
ec24734b05 make: utilisation d'un alias pour "git submodule foreach" 2016-11-11 11:26:59 +01:00
ac8e92cfce l'utilisateur hydra doit utiliser virtualbox 2016-11-10 16:59:07 +01:00
Yves Dubromelle
5ad9c73c03 support basique des scanners (sane + simple-scan) 2016-11-09 00:39:59 +01:00
Yves Dubromelle
faa4be782a phenom n'est plus un laptop 2016-11-08 23:45:57 +01:00
Yves Dubromelle
ec4aa5ac32 hydra: activation de services de vitualisation sur le builder
* certaines expressions nix demandent à être exécutées dans des VM, conatiners et autres.
    Jusque là, ces builds restaient dans la file d'attente d'hydra.
    Cela devrait corriger le problème.
2016-11-07 16:23:24 +01:00
7806cd3ad6 users; ajustement groupes 2016-11-03 22:53:23 +01:00
374b2732ad ajout clef yves@job 2016-11-02 16:54:11 +01:00
6ce50aea40 activation de Es + kibana sur radx 2016-11-01 19:18:21 +01:00
012cc8626c ajout de variables dans le config generator 2016-11-01 19:18:04 +01:00
bdbf858a11 ajout de services (Elasticsearch & kibana) 2016-11-01 19:17:40 +01:00
a4b166f1f8 readme: commentaire 2016-10-31 14:50:21 +01:00
bb5ee98bc3 hydra: ajout de commentaires 2016-10-31 14:34:22 +01:00
dd9f52b997 import confing hydra de pedro 2016-10-31 14:28:17 +01:00
bb617fbf13 Merge branch 'upgrade-16.09' = les machines sont migrées 2016-10-31 14:17:18 +01:00
021b1d5c26 Revert "lors d'une full-auto, on ne force pas à être sur la branche master"
This reverts commit 3a8a728268.
2016-10-31 14:17:03 +01:00
Yves Dubromelle
31f57965f9 peers -> extraconfig de tinc, pour être plus souple 2016-10-30 01:31:40 +02:00
Yves Dubromelle
0a3d820dd6 variable pour les noeuds auquels tinc doit se connecter 2016-10-30 01:24:27 +02:00
Yves Dubromelle
f0f266cb55 adresse IP du noeud tinc local 2016-10-30 01:19:25 +02:00
25 changed files with 470 additions and 151 deletions

View File

@@ -1,3 +1,5 @@
GSF=git submodule foreach
all: rebuild-switch all: rebuild-switch
date date
##--------- Commandes spécifiques pour NixOS ##--------- Commandes spécifiques pour NixOS
@@ -37,15 +39,16 @@ push: submodules-push
submodules-update: submodules-update:
#git submodule update --remote #git submodule update --remote
#git submodule foreach git co master $(GSF) git co master
git submodule foreach git ff $(GSF) git ff
$(GSF) git gc --auto
submodules-push: submodules-push:
git submodule foreach git push --all $(GSF) git push --all
git submodule foreach git push --tags $(GSF) git push --tags
submodules-tag: submodules-tag:
git submodule foreach git tag -f "$$(date +%F)-$$(hostname -s)" $(GSF) git tag -f "$$(date +%F)-$$(hostname -s)"
template: template:
find . -name "*.nix" -exec meld /etc/nixos/base/module-template.nix {} \; find . -name "*.nix" -exec meld /etc/nixos/base/module-template.nix {} \;

View File

@@ -1,5 +1,7 @@
# nixos-template-base # nixos-template-base
Version de nixos supportée : NixOs 16.09
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).

File diff suppressed because one or more lines are too long

View File

@@ -16,63 +16,83 @@ in
#* Utilisé pour afecter des capacités aux machines #* Utilisé pour afecter des capacités aux machines
r6d.profiles = { r6d.profiles = {
# Domaine # Domaine
isDubronetwork = mkEnableOption "Pour distinguer les machines dubronetwork."; isDubronetwork = mkEnableOption "Pour distinguer les machines dubronetwork.";
isPrunetwork = mkEnableOption "Pour distinguer les machines prunetwork."; isPrunetwork = mkEnableOption "Pour distinguer les machines prunetwork.";
# Utilisation machine # Utilisation machine
isDesktop = mkEnableOption "Pour indiquer une machine avec interface graphique."; isDesktop = mkEnableOption "Pour indiquer une machine avec interface graphique.";
isHome = mkEnableOption "Pour indiquer que la machine sert à la maison (divertissement & autre)."; isHome = mkEnableOption "Pour indiquer que la machine sert à la maison (divertissement & autre).";
isServer = mkEnableOption "Pour indiquer qu'il s'agit d'un serveur."; isServer = mkEnableOption "Pour indiquer qu'il s'agit d'un serveur.";
isWorkstation = mkEnableOption "Pour indiquer que la machine sert à travailler."; isWorkstation = mkEnableOption "Pour indiquer que la machine sert à travailler.";
}; };
#* Utilisé dans les fichiers .nix #* Utilisé dans les fichiers .nix
r6d.config-generator = { r6d.config-generator = {
enable = mkEnableOption "Génération de la configuration d'une machine."; enable = mkEnableOption "Génération de la configuration d'une machine.";
awesome = mkEnableOption "Profil pour activer le gestionnaire de fenêtre awesome."; awesome = mkEnableOption "Profil pour activer le gestionnaire de fenêtre awesome.";
auto-upgrade = mkEnableOption "Profil pour activer les mises à jour automatiques."; auto-upgrade = mkEnableOption "Profil pour activer les mises à jour automatiques.";
cartographie = mkEnableOption "Profil pour activer les outils de gestion de données géographiques."; 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"; conception-assistee = mkEnableOption "Profil pour activer les outils de conception électronique & modélisation 3D";
database_postgres=mkEnableOption "Profil pour activer le SGBD PostgreSQL."; database_postgres = mkEnableOption "Profil pour activer le SGBD PostgreSQL.";
developpement = mkEnableOption "Profil pour activer les outils de développement"; developpement = mkEnableOption "Profil pour activer les outils de développement";
docker = mkEnableOption "Profil pour l'utilisation de Docker."; developpement-haskell = mkEnableOption "Profil pour activer les outils de développement Haskell";
dovecot = mkEnableOption "Profil pour activer le serveur Dovecot."; developpement-java = mkEnableOption "Profil pour activer les outils de développement Java";
dns_autorite = mkEnableOption "Profil pour servir les fichiers de zone DNS."; developpement-rust = mkEnableOption "Profil pour activer les outils de développement Rust";
dns_resolveur = mkEnableOption "Profil pour activer un résolveur DNS local."; docker = mkEnableOption "Profil pour l'utilisation de Docker.";
edition-musique = mkEnableOption "Profil pour la création/édition de musique."; dovecot = mkEnableOption "Profil pour activer le serveur Dovecot.";
edition-photo = mkEnableOption "Profil pour la création/édition de photos."; dns_autorite = mkEnableOption "Profil pour servir les fichiers de zone DNS.";
edition-video = mkEnableOption "Profil pour la création/édition de video."; dns_resolveur = mkEnableOption "Profil pour activer un résolveur DNS local.";
fail2ban = mkEnableOption "Profil pour activer Fail2ban."; edition-musique = mkEnableOption "Profil pour la création/édition de musique.";
hydra-builder = mkEnableOption "Profil pour une machine qui compile pour hydra."; edition-photo = mkEnableOption "Profil pour la création/édition de photos.";
hydra-core = mkEnableOption "Profil pour un serveur hydra."; edition-video = mkEnableOption "Profil pour la création/édition de video.";
jeux = mkEnableOption "Profil pour les jeux vidéos."; elasticsearch = mkEnableOption "Profil pour activer le service elasticsearch.";
laptop = mkEnableOption "Profil pour les outils spécifiques aux ordinateurs portables.."; fail2ban = mkEnableOption "Profil pour activer Fail2ban.";
locate = mkEnableOption "Profil pour activer la fonction locate."; hydra-builder = mkEnableOption "Profil pour une machine qui compile pour hydra.";
mailboxes = mkEnableOption "Profil pour stocker les mails dans des boîtes aux lettres."; hydra-core = mkEnableOption "Profil pour un serveur hydra.";
murmur = mkEnableOption "Profil pour activer un serveur Mumble (murmur)"; kibana = mkEnableOption "Profil pour activer le service kibana.";
nix-serve-client= mkEnableOption "Profil pour que la machine soit un client de cache nix."; jeux = mkEnableOption "Profil pour les jeux vidéos.";
nix-serve-server= mkEnableOption "Profil pour que la machine soit un serveur de cache nix."; laptop = mkEnableOption "Profil pour les outils spécifiques aux ordinateurs portables..";
nixStoreProxyCache = mkEnableOption "Profil pour activer le proxy cahce nginx pour le nix store"; locate = mkEnableOption "Profil pour activer la fonction locate.";
online-ipv6 = mkEnableOption "Profil pour activer l'IPv6 de online.net"; mailboxes = mkEnableOption "Profil pour stocker les mails dans des boîtes aux lettres.";
print = mkEnableOption "Profil pour activer cups & pouvoir imprimer."; murmur = mkEnableOption "Profil pour activer un serveur Mumble (murmur)";
rabbitmq = mkEnableOption "Profil pour activer le service de messagerie AMQP."; nix-serve-client = mkEnableOption "Profil pour que la machine soit un client de cache nix.";
radicale = mkEnableOption "Profil pour activer le service d'hébergement de calendrier + tâches & contacts."; nix-serve-server = mkEnableOption "Profil pour que la machine soit un serveur de cache nix.";
swap = mkEnableOption "Profil pour que le swap soit activé."; nixStoreProxyCache = mkEnableOption "Profil pour activer le proxy cahce nginx pour le nix store";
virtualbox = mkEnableOption "Profil pour l'utilisation de VirtualBox."; print = mkEnableOption "Profil pour activer cups & pouvoir imprimer.";
xmonad = mkEnableOption "Profil pour activer le gestionnaire de fenêtres xmonad."; rabbitmq = mkEnableOption "Profil pour activer le service de messagerie AMQP.";
znc = mkEnableOption "Profil pour activer le relais IRC ZNC."; radicale = mkEnableOption "Profil pour activer le service d'hébergement de calendrier + tâches & contacts.";
scanner = mkEnableOption "Profil pour que les scanners soient utilisable.";
swap = mkEnableOption "Profil pour que le swap soit activé.";
virtualbox = mkEnableOption "Profil pour l'utilisation de VirtualBox.";
xmonad = mkEnableOption "Profil pour activer le gestionnaire de fenêtres xmonad.";
znc = mkEnableOption "Profil pour activer le relais IRC ZNC.";
tincAddress = mkOption {
default = "";
example = "192.168.1.1";
description = "Adresse du noeud tinc local";
type = lib.types.string;
};
tincExtraConfig = mkOption {
default = "";
example = ''
Mode = router
ConnecTo = bar
'';
description = "Configuration supplémentaire pour tinc";
type = lib.types.string;
};
}; };
#* Utilisé pour avoir des raccourcis de machine #* Utilisé pour avoir des raccourcis de machine
r6d.computers = { r6d.computers = {
isLatitude = mkEnableOption "Identification du nom de machine."; isLatitude = mkEnableOption "Identification du nom de machine.";
isMonstre = mkEnableOption "Identification du nom de machine."; isMonstre = mkEnableOption "Identification du nom de machine.";
isNeoNomade = mkEnableOption "Identification du nom de machine."; isNeoNomade = mkEnableOption "Identification du nom de machine.";
isNomade = mkEnableOption "Identification du nom de machine."; isNomade = mkEnableOption "Identification du nom de machine.";
isOcean = mkEnableOption "Identification du nom de machine."; isOcean = mkEnableOption "Identification du nom de machine.";
isPedro = mkEnableOption "Identification du nom de machine."; isPedro = mkEnableOption "Identification du nom de machine.";
isPhenom = mkEnableOption "Identification du nom de machine."; isPhenom = mkEnableOption "Identification du nom de machine.";
isRadx = mkEnableOption "Identification du nom de machine."; isRadx = mkEnableOption "Identification du nom de machine.";
isRollo = mkEnableOption "Identification du nom de machine."; isRollo = mkEnableOption "Identification du nom de machine.";
isXray = mkEnableOption "Identification du nom de machine.";
}; };
}; };
@@ -93,7 +113,6 @@ in
isPhenom = host == "phenom.dubronetwork.fr"; isPhenom = host == "phenom.dubronetwork.fr";
isRadx = host == "radx.prunetwork.fr"; isRadx = host == "radx.prunetwork.fr";
isRollo = host == "rollo.dubronetwork.fr"; isRollo = host == "rollo.dubronetwork.fr";
isXray = host == "xray.prunetwork.fr";
}; };
} }
@@ -104,6 +123,7 @@ in
r6d.config-generator = { r6d.config-generator = {
awesome = true; awesome = true;
nix-serve-client = true; nix-serve-client = true;
scanner = true;
}; };
}) })
(mkIf pfl.isHome { (mkIf pfl.isHome {
@@ -130,13 +150,7 @@ in
r6d.profiles.isDesktop = true; r6d.profiles.isDesktop = true;
r6d.config-generator = { r6d.config-generator = {
cartographie = true;
developpement = true;
docker = true; docker = true;
edition-musique = true;
edition-photo = true;
edition-video = true;
}; };
}) })
@@ -144,12 +158,22 @@ in
(mkIf pfl.isDubronetwork { (mkIf pfl.isDubronetwork {
r6d.config-generator = { r6d.config-generator = {
auto-upgrade = true; auto-upgrade = true;
locate = true;
print = true; print = true;
}; };
}) })
(mkIf (pfl.isDubronetwork && pfl.isWorkstation) { (mkIf (pfl.isDubronetwork && pfl.isWorkstation) {
r6d.config-generator = { r6d.config-generator = {
cartographie = true;
conception-assistee = true; conception-assistee = true;
docker = true;
developpement = true;
developpement-haskell = true;
developpement-java = true;
developpement-rust = true;
edition-musique = true;
edition-photo = true;
edition-video = true;
virtualbox = true; virtualbox = true;
xmonad = true; xmonad = true;
}; };
@@ -159,10 +183,26 @@ in
(mkIf pfl.isPrunetwork { (mkIf pfl.isPrunetwork {
r6d.config-generator = { r6d.config-generator = {
auto-upgrade = true; auto-upgrade = true;
docker = true;
locate = true;
fail2ban = true; fail2ban = true;
swap = true; swap = true;
}; };
}) })
(mkIf (pfl.isPrunetwork && pfl.isWorkstation) {
r6d.config-generator = {
cartographie = true;
developpement = true;
developpement-haskell = true;
developpement-java = true;
#developpement-rust = true;
#edition-musique = true;
edition-photo = true;
#edition-video = true;
print = true;
virtualbox = true;
};
})
## Affectation des profils aux machines ## Affectation des profils aux machines
@@ -175,6 +215,10 @@ in
r6d.config-generator = { r6d.config-generator = {
docker = true; docker = true;
radicale = true; radicale = true;
tincAddress = "192.168.12.6/24";
tincExtraConfig = ''
ConnectTo = rollo_dubronetwork_fr
'';
}; };
}) })
(mkIf comp.isRadx { (mkIf comp.isRadx {
@@ -185,16 +229,17 @@ in
}; };
r6d.config-generator = { r6d.config-generator = {
elasticsearch = true;
hydra-builder = true; hydra-builder = true;
hydra-core = true; hydra-core = true;
print = true; kibana = true;
virtualbox = true; rabbitmq = true;
}; tincAddress = "192.168.12.3/24";
}) tincExtraConfig = ''
(mkIf comp.isXray { ConnectTo = monstre_dubronetwork_fr
r6d.profiles = { ConnectTo = rollo_dubronetwork_fr
isPrunetwork = true; ConnectTo = ocean_prunetwork_fr
isServer = true; '';
}; };
}) })
@@ -207,6 +252,12 @@ in
r6d.config-generator = { r6d.config-generator = {
laptop = true; laptop = true;
tincAddress = "192.168.12.2/24";
tincExtraConfig = ''
ConnectTo = monstre_dubronetwork_fr
ConnectTo = rollo_dubronetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
}; };
}) })
(mkIf comp.isMonstre { (mkIf comp.isMonstre {
@@ -219,6 +270,11 @@ in
fail2ban = true; fail2ban = true;
nix-serve-client = true; nix-serve-client = true;
nixStoreProxyCache = true; nixStoreProxyCache = true;
tincAddress = "192.168.12.4/24";
tincExtraConfig = ''
ConnectTo = rollo_dubronetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
}; };
}) })
(mkIf comp.isNeoNomade{ (mkIf comp.isNeoNomade{
@@ -229,6 +285,12 @@ in
r6d.config-generator = { r6d.config-generator = {
laptop = true; laptop = true;
tincAddress = "192.168.12.7/24";
tincExtraConfig = ''
ConnectTo = monstre_dubronetwork_fr
ConnectTo = rollo_dubronetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
}; };
}) })
(mkIf comp.isNomade{ (mkIf comp.isNomade{
@@ -246,7 +308,6 @@ in
r6d.config-generator = { r6d.config-generator = {
fail2ban = true; fail2ban = true;
online-ipv6 = true;
}; };
}) })
(mkIf comp.isPhenom { (mkIf comp.isPhenom {
@@ -258,8 +319,13 @@ in
r6d.config-generator = { r6d.config-generator = {
nix-serve-server = true; nix-serve-server = true;
laptop = true;
edition-photo = true; edition-photo = true;
tincAddress = "192.168.12.1/24";
tincExtraConfig = ''
ConnectTo = monstre_dubronetwork_fr
ConnectTo = rollo_dubronetwork_fr
ConnectTo = ocean_prunetwork_fr
'';
}; };
}) })
(mkIf comp.isRollo { (mkIf comp.isRollo {
@@ -273,7 +339,10 @@ in
fail2ban = true; fail2ban = true;
mailboxes = true; mailboxes = true;
murmur = true; murmur = true;
online-ipv6 = true; tincAddress = "192.168.12.5/24";
tincExtraConfig = ''
ConnectTo = ocean_prunetwork_fr
'';
znc = true; znc = true;
}; };
}) })

View File

@@ -23,6 +23,9 @@ mkIf true {
python27Packages.glances python27Packages.glances
usbutils usbutils
# Backup
duplicity # création de sauvegarde chiffrées (GPG)
# Compression # Compression
lz4 lz4
lzop lzop
@@ -30,6 +33,8 @@ mkIf true {
# Système de fichier # Système de fichier
## Montage de filesystem ## Montage de filesystem
curlftpfs # ftp curlftpfs # ftp
exfat # Pour monter les FAT avec Fuse
hubicfuse # montage hubic
ntfs3g # ntfs ntfs3g # ntfs
sshfsFuse # ssh sshfsFuse # ssh
@@ -38,7 +43,7 @@ mkIf true {
## Exploitation FS ## Exploitation FS
inotify-tools # être notifié lorsque le contenu d'un répertoire change inotify-tools # être notifié lorsque le contenu d'un répertoire change
duff # outil de recherche de fichiers en doublons duff # outil de recherche de fichiers en doublons
rdfind # recherche de fichiers doublons pour remplacement par hard/soft link rdfind # recherche de fichiers doublons pour remplacement par hard/soft link
(mkIf profiles.isDesktop (mkIf profiles.isDesktop

View File

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

View File

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

View File

@@ -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;
in
mkIf cfg.developpement-haskell {
# Paquets
environment.systemPackages = with pkgs; [
# Haskell
cabal-install # fournis cabal
cabal2nix # convertir les .cabal en .nix
ghc # pour les appels depuis les scripts
stack # pour les paquets en LTS de stackage
# Application perso
haskellPackages.hahp
];
}

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

View File

@@ -0,0 +1,18 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf cfg.developpement-rust {
# Paquets
environment.systemPackages = with pkgs; [
# Rust
cargo # récupération des dépendances + compilation projet rust
rustc # pour les appels depuis les scripts
];
}

View File

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

View File

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

View File

@@ -24,7 +24,5 @@ mkIf profiles.isDesktop {
## Video ## Video
smplayer # lecteur vidéo smplayer # lecteur vidéo
vlc # lecteur vidéo vlc # lecteur vidéo
kde4.ksnapshot# réalisation de capture d'écran
]; ];
} }

View File

@@ -20,6 +20,8 @@ mkIf true {
## Diagnostic ## Diagnostic
arp-scan arp-scan
nmap # outil de scan de port réseau
mtr # outil de diagnostic réseau
#wireshark #wireshark
whois whois
]; ];

View File

@@ -16,7 +16,7 @@ mkIf profiles.isDesktop {
pass # gestionnaire de mots de passe pass # gestionnaire de mots de passe
pwgen # générateur de mots de passe pwgen # générateur de mots de passe
slock # vérouiller l''écran. "cannot disable the out-of-memory killer for this process (make sure to suid or sgid slock)" --> en root 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" ]; security.setuidPrograms = [ "slock" ];
} }

View File

@@ -31,16 +31,14 @@ in
systemPackages = with pkgs; [ systemPackages = with pkgs; [
bind # utilisé pour les utilitaires comme dig bind # utilisé pour les utilitaires comme dig
byobu # permet de se déconnecter d'un terminal sans l'aréter byobu # permet de se déconnecter d'un terminal sans l'aréter
exfat # Pour monter les FAT avec Fuse
git gitAndTools.gitSVN gitAndTools.tig gti # outil de gestion de version git gitAndTools.gitSVN gitAndTools.tig gti # outil de gestion de version
gnumake # pour décrire les recettes de compilation gnumake # pour décrire les recettes de compilation
gnupg # GPG gnupg # GPG
gpm # prise en charge de la souris en console gpm # prise en charge de la souris en console
htop # monitoring htop # monitoring
lsb-release # pour les scripts qui utilisent cet outil
#libressl # librairie pour faire du TLS et les algorithmes de crypto par OpenBSD #libressl # librairie pour faire du TLS et les algorithmes de crypto par OpenBSD
ncdu # outil pour voir l'espace utilisé ncdu # outil pour voir l'espace utilisé
nmap # outil de scan de port réseau
mtr # outil de diagnostic réseau
par2cmdline # outil de récupération de fichiers corrompus - .par2 par2cmdline # outil de récupération de fichiers corrompus - .par2
p7zip # compression de fichier p7zip # compression de fichier
parted # partitionnement de disque parted # partitionnement de disque
@@ -50,7 +48,7 @@ in
python # python -- python -m SimpleHTTPServer 8000 python # python -- python -m SimpleHTTPServer 8000
python34Packages.glances # monitoring python34Packages.glances # monitoring
pwgen # générateur de mot de passe pwgen # générateur de mot de passe
rtorrent # outil de téléchargement de torrent & magnet rtorrent # TODO outil de téléchargement de torrent & magnet
tmux # nécessaire pour byobu tmux # nécessaire pour byobu
tree # affiche une arborescence de fichiers et dossiers tree # affiche une arborescence de fichiers et dossiers
usbutils usbutils
@@ -66,6 +64,8 @@ in
tree1 = "tree -d -L 1"; tree1 = "tree -d -L 1";
tree2 = "tree -d -L 2"; tree2 = "tree -d -L 2";
tree3 = "tree -d -L 3"; tree3 = "tree -d -L 3";
# https://gist.github.com/amitchhajer/4461043 : Count number of code lines in git repository per user
#git-loc = "git ls-files | while read f; do git blame --line-porcelain "${f}" | grep '^author '; done | sort -f | uniq -ic | sort -n";
grep = "grep --color=auto"; grep = "grep --color=auto";
vi = "vim"; vi = "vim";
}; };

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;
in
mkIf cfg.scanner {
# Paquets
environment.systemPackages = with pkgs; [
simple-scan
];
# Services
hardware.sane.enable = true;
# Réseau
networking.firewall = {
allowedTCPPorts = [
];
allowedUDPPorts = [
];
};
}

View File

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

View File

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

View File

@@ -18,36 +18,43 @@ in
./service-haveged.nix ./service-haveged.nix
./service-monitoring.nix ./service-monitoring.nix
./service-ssh.nix ./service-ssh.nix
./udev.nix
# commandées par config-generator # commandées par config-generator
## option de configuration spécifique ## option de configuration spécifique
./app-awesome.nix # pour les profils awesome ./app-awesome.nix # pour les profils awesome
./app-cao.nix # de conception assisté par ordinateur & modélisation ./app-cao.nix # de conception assisté par ordinateur & modélisation
./app-cartographie.nix # utilisée pour manipuler les données géographiques & cartes ./app-cartographie.nix # manipuler les données géographiques & cartes
./app-developpement.nix # utilisée pour développer des programmes/scripts ./app-developpement.nix # développer des programmes/scripts
./app-docker.nix # pour activer docker ./app-developpement-haskell.nix # développer en haskell
./app-edition-musique.nix # pour modifier les fichiers musicaux ./app-developpement-java.nix # développer en java
./app-edition-photo.nix # pour modifier les photos & assimilé ./app-developpement-rust.nix # développer en rust
./app-edition-video.nix # pour modifier les vidéos ./app-docker.nix # activer docker
./app-jeux.nix # permettant de jouer ;) ./app-edition-musique.nix # modifier les fichiers musicaux
./app-virtualbox.nix # pour exploiter virtualbox ./app-edition-photo.nix # modifier les photos & assimilé
./auto-upgrade.nix # mise à jour automatique du système ./app-edition-video.nix # modifier les vidéos
./laptop.nix # appli & configuration adaptée pour un PC portable ./app-jeux.nix # jouer, tout simplement ;)
./print.nix # configuration de base de cups ./app-virtualbox.nix # activer virtualbox
./service-hydra-build.nix # service de construction de paquet. -> la machine compile des paquets ./auto-upgrade.nix # mise à jour automatique du système
./service-hydra-core.nix # service pour l'instance d'hydra ./laptop.nix # appli & configuration adaptée pour un PC portable
./service-laptop.nix # services spécifiques aux pc portables ./print.nix # configuration de base de cups
./service-locate.nix # service locate ./service-elasticsearch.nix # service de stockage et recher de données
./swap.nix # définition de l'utilisation du swap ./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 ## if isDesktop
./app-adminsys.nix # pour gérer le système dans son ensemble et les services ./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-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-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-multimedia.nix # pour gérer le son, l'image et la vidéo
./app-network.nix # de gestion, de diagnostique & surveillance réseau ./app-network.nix # de gestion, de diagnostique & surveillance réseau
./app-securite.nix # relatives à la sécurité (chiffrement, gpg, mots de passe, ...) ./app-securite.nix # relatives à la sécurité (chiffrement, gpg, mots de passe, ...)
./service-pulseaudio.nix # activation du serveur audio ./hardware-scanner.nix # utilisation d'un scanner
./service-x11.nix # activation du serveur graphique X ./service-pulseaudio.nix # activation du serveur audio
./service-x11.nix # activation du serveur graphique X
]; ];
} }

View File

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

View File

@@ -11,19 +11,32 @@ mkIf cfg.hydra-builder {
# Paquets # Paquets
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
qemu
kvm
]; ];
# Services # Services
## Services de virtualisation utilisé pour les tests hydra
virtualisation.docker.enable = true;
virtualisation.libvirtd.enable = true;
virtualisation.libvirtd.enableKVM = true;
#virtualisation.virtualbox.guest.enable = true;
virtualisation.virtualbox.host.enable = true; virtualisation.virtualbox.host.enable = true;
virtualisation.virtualbox.host.headless = true;
## 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 = [ "nixbld" ]; extraGroups = [
isNormalUser = true; "docker"
"nixbld"
"vboxusers"
];
isNormalUser = true; # devrait être à false: TODO débugger la conf ssh & users pour que ça marche en user système
openssh.authorizedKeys.keys = [ openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGYpjcWJCf8dXpv2LmoIaNVbwZXEC50QUU6Az+lqeD89 hydra radx" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGYpjcWJCf8dXpv2LmoIaNVbwZXEC50QUU6Az+lqeD89 hydra radx"

View File

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

33
public/service-kibana.nix Normal file
View File

@@ -0,0 +1,33 @@
{ 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.kibana {
# Paquets
environment.systemPackages = with pkgs; [
];
# Services
# K : http://localhost:8000
services.kibana = {
enable = true;
elasticsearch.url = "http://127.0.0.1:9200";
port = 8000;
};
# Réseau
# -> Aucun port n'est ouvert caril est recommandé de mettre un proxy HTTP devant
networking.firewall = {
allowedTCPPorts = [
];
allowedUDPPorts = [
];
};
}

18
public/udev.nix Normal file
View File

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