Compare commits

..

102 Commits

Author SHA1 Message Date
3ccc8678ce ajout outil wifi pour profil laptop 2016-10-10 22:11:44 +02:00
Yves Dubromelle
215005d927 installation des outils réseaux sur toutes les machines 2016-10-09 18:43:01 +02:00
Yves Dubromelle
9fb124116d phenom: permet de modifier les photo + profil laptop (pour carte wifi) 2016-10-06 21:47:44 +02:00
Yves Dubromelle
d65ee1bd2c bonnes pratiques selon nixos 2016-10-05 00:01:33 +02:00
Yves Dubromelle
dce7b12a33 ajout pmisc 2016-10-05 00:01:33 +02:00
826595cb6c radx peut imprimer 2016-09-27 23:08:04 +02:00
b633d3c794 les machines @home peuvent utiliser le cache sur monstre 2016-09-27 23:07:44 +02:00
5444be4fd2 copie de configuration.nix par nix dans l'environement courant 2016-09-20 15:21:48 +02:00
9b4a4f1b67 ssh: ajout lien best practices 2016-09-15 15:52:15 +02:00
b622554b42 ajout clef mbp pour root (car radx n'est toujours pas en route) 2016-09-15 12:08:25 +02:00
332f40265d tout le monde peut exécuter mtr sans sudo 2016-09-10 15:27:35 +02:00
Yves Dubromelle
781973228f parce-que je m'ennuie à l'aéroport :) 2016-09-04 10:21:36 +02:00
Yves Dubromelle
65e1c6ff0e utilisation de slock sans sudo -> wrapper setuid 2016-08-27 19:39:13 +02:00
b42c8e3080 tout le monde peut faire 'sudo slock' 2016-08-27 18:11:11 +02:00
adaa4eeb61 ajout de la date après un full-auto 2016-08-26 23:48:27 +02:00
56d2c04cd6 app-dev: commentaires + outils git supplémentaire 2016-08-24 12:48:59 +02:00
ebe63ea5e0 organisation fichier 2016-08-24 12:47:23 +02:00
ea69ceba37 ajout de paquets : duff & odpdown 2016-08-24 12:31:07 +02:00
Yves Dubromelle
e8521880e1 bloc commenté pour activer le pack d'extention virtualbox 2016-08-20 09:54:46 +02:00
Yves Dubromelle
313457be31 wrapper setuid pour udevil (montage USB, smb, etc...) 2016-08-20 09:54:46 +02:00
df0951ce65 ajout de commentaires 2016-08-19 19:53:59 +02:00
1323e6dee1 commandes pour gérer un système de fichier temporaire en mémoire 2016-08-19 19:50:13 +02:00
Yves Dubromelle
d16271c61e fix: monstre est censé servir de résolveur pour le LAN dubronetwork 2016-08-17 09:48:48 +02:00
6c45e0bfa2 autorisation de 'sudo mtr' pour tous les users 2016-08-16 20:05:02 +02:00
c2d3bb8cb4 désactivation de l'envois de mail par fail2ban. Erreur de PATH nixos 2016-08-16 20:03:49 +02:00
d5c79218fa ajout whois 2016-08-15 17:11:55 +02:00
e7ef51ecbe il faut configurer un peu plus la règle 2016-08-15 17:07:45 +02:00
6c02c2200c envois de mails lors d'un ban avec informations whois & lignes 2016-08-15 16:57:07 +02:00
c8592c769e ajout des valeurs par défaut car remplacées 2016-08-15 16:17:46 +02:00
7b298ac8a3 activation règle ssh-iptable 2016-08-15 16:14:06 +02:00
9190d21a65 il manquait la commande mail pour munin 2016-08-15 14:46:09 +02:00
Yves Dubromelle
b4c960d3d3 fix: quand isDesktop = true, les autres paquets n'étaient plus là 2016-08-15 02:47:53 +02:00
516976ccf9 désactivation de sudo sans mot de passe 2016-08-14 11:25:32 +02:00
634af07219 ajout d'assertion à users.nix 2016-08-14 10:43:41 +02:00
91d414d3e1 ajustement description 2016-08-14 10:42:15 +02:00
ca0171b70e une partie des outils d'admin sont disponibles en permanence 2016-08-14 10:27:17 +02:00
48361328dd ajout de rdfind + ajout commentaires 2016-08-14 00:12:14 +02:00
ee34e1a138 lancement de la commande munin (web) par 'make munin' 2016-08-12 13:06:37 +02:00
ea307cc5dc application du template 2016-08-12 12:46:36 +02:00
1cce1ec034 commande pour faciliter l'application du template 2016-08-12 12:12:47 +02:00
32a05e2124 MaJ template 2016-08-12 11:51:40 +02:00
Yves Dubromelle
23cb4c79a9 désactivation du cache standard pour les machines dubronetwork 2016-08-12 01:35:04 +02:00
Yves Dubromelle
160ec79b0f désactivation de nix-serve-server sur les serveurs dubronetwork 2016-08-12 01:25:24 +02:00
Yves Dubromelle
9bc50b35dd ajout de la machine pedro 2016-08-12 01:08:32 +02:00
Yves Dubromelle
1c649a9b04 les jeux ne sont plus activés systématiquements 2016-08-11 23:49:17 +02:00
Yves Dubromelle
7cb371510b ajustement des règles d'utilisation du cache 2016-08-11 23:47:50 +02:00
Yves Dubromelle
b38e5a87bb monstre est un client du cache nix 2016-08-11 23:44:05 +02:00
Yves Dubromelle
50326127d3 taeradan: ajout d'un mot de passe initial très compliqué 2016-08-11 23:32:00 +02:00
Yves Dubromelle
02a8b96e61 ajout d'utilisateurs avec mailbox 2016-08-11 23:30:24 +02:00
Yves Dubromelle
5e6586d403 rollo stocke les mails 2016-08-11 23:25:00 +02:00
Yves Dubromelle
b65ffa4d8f ajout option de configuration pour stocker les mails en boite 2016-08-11 23:08:33 +02:00
Yves Dubromelle
744ebec05b activation des comptes jpierre03 et taeradan sur toutes les machines 2016-08-11 22:58:15 +02:00
d1113bec00 script de lancement d'un serveur web pour les fichier munin 2016-08-11 22:09:16 +02:00
ef2733675d radx: désactivation de nix-serve 2016-08-11 21:51:43 +02:00
63902d313c radx n'est plus un serveur 2016-08-11 21:45:47 +02:00
0dc2561017 désactivation addresqse ipv6 temporaires 2016-08-11 21:27:06 +02:00
Yves Dubromelle
953021f306 option pour le proxy-cache nginx du nix store + actif sur monstre 2016-08-11 19:59:30 +02:00
Yves Dubromelle
c2da568c30 template d'un module nix façon r6d 2016-08-11 19:56:15 +02:00
bbfd76a4a1 ajout clef SSH pour root 2016-08-11 19:42:19 +02:00
Yves Dubromelle
e1e30f4ce0 option pour activer dovecot 2016-08-10 23:16:03 +02:00
4c3e1abfcb ajout de variables locales pour la config de fail2ban 2016-08-10 16:11:03 +02:00
Yves Dubromelle
c5b9c97327 ajout de programmes (reddit, IRC) depuis phenom 2016-08-10 12:12:58 +02:00
Yves Dubromelle
6b0689d336 option pour ZNC 2016-08-09 22:11:29 +02:00
7536316133 ajout clef ssh à root 2016-08-09 15:16:16 +02:00
c346262619 oups: un paquet ne compile pas 2016-08-09 14:15:27 +02:00
312cc9ddc2 suppression de paquets qui devraient être des services 2016-08-09 14:10:58 +02:00
ff3e764bc2 extraction des apps pour l'édition multimédie (musique, photo, video) 2016-08-09 14:08:53 +02:00
4100ff2f2f regroupement conf laptop + service laptop 2016-08-09 13:52:10 +02:00
b64a846407 indentation 2016-08-09 13:38:12 +02:00
2df8cf6695 extraction de pulseaudio comme service 2016-08-09 13:36:34 +02:00
40ea98af6b extraction de x11 comme service 2016-08-09 13:34:24 +02:00
Yves Dubromelle
944f8103e6 quelques polices sympatiques pour le bureau et le code 2016-08-09 10:53:05 +02:00
453ad77953 extraction de services & configuration générique 2016-08-08 23:32:19 +02:00
3c7274848d ajout de variable cartographie 2016-08-08 23:15:24 +02:00
1d5692fbc5 Merge remote-tracking branch 'origin/master' 2016-08-08 23:05:00 +02:00
7367bd462e le monitoring est un service publiable -> public 2016-08-08 23:04:14 +02:00
3de2cceef4 le monitoring est regroupé dans un fichier 2016-08-08 23:03:19 +02:00
8ebfe6c9a6 on fait apparaître que locate est un service 2016-08-08 22:59:55 +02:00
33e44d23f9 harmonisation des headers pour public/ 2016-08-08 22:58:30 +02:00
Yves Dubromelle
461adfc7fe arandr, interface pour xrandr 2016-08-08 22:57:15 +02:00
47de85f6bd notes sur comment les packages publics sont activés 2016-08-08 22:52:24 +02:00
abec02d668 expression vide 2016-08-08 22:44:43 +02:00
78cccc3934 tri des entrées 2016-08-08 22:32:52 +02:00
42c1327500 déplacement de desktop vers public 2016-08-08 22:30:44 +02:00
e685d8e518 regroupement des clients pour réseaux sociaux 2016-08-08 22:24:50 +02:00
366272d1f6 ajout d'infos sur le README 2016-08-08 22:24:09 +02:00
25e9a9c1ab revue du lien symbolique pour le Makefile 2016-08-08 22:19:43 +02:00
e685771d12 déplacement base/base vers base/public 2016-08-08 22:15:21 +02:00
67907ba8c8 déplacement de .nix de base/desktop vers base/public 2016-08-08 22:06:08 +02:00
36c0eba3b5 déplacement de .nix de base/base vers base/public 2016-08-08 22:00:02 +02:00
3d7b3f1106 création de variable de stockage de clef ssh 2016-08-07 11:11:05 +02:00
Yves Dubromelle
71c89d7272 l'uid n'est pas forcé. nix choisi le 1er libre. 2016-08-07 10:21:59 +02:00
Yves Dubromelle
e974e8949d ajout de clef ssh 2016-08-07 10:14:29 +02:00
a8b5ee97c6 ajout utilisateur taeradan si dubronetwork 2016-08-07 10:03:41 +02:00
45a4bc9a28 indentation 2016-08-07 09:54:25 +02:00
Yves Dubromelle
b998bea22e ouverture du port pour afficher les stats munin 2016-08-07 02:01:01 +02:00
Yves Dubromelle
a356a2f5fa Merge remote-tracking branch 'origin/master' 2016-08-07 01:38:28 +02:00
Yves Dubromelle
0e5137a236 suppression de postfix comme paquet accessible 2016-08-07 01:37:18 +02:00
Yves Dubromelle
65064f7f8b Merge remote-tracking branch 'origin/master' 2016-08-06 22:59:55 +02:00
Yves Dubromelle
12e3f20a8e ajout option de configuration pour ipv6 (EXPERIMENTAL) 2016-08-06 22:52:08 +02:00
a05ef8fbdc ajout clef ssh voyage 2016-08-06 16:41:17 +02:00
e6fc844aaf ajout de clef ssh autorisée 2016-08-05 15:25:49 +02:00
60 changed files with 993 additions and 527 deletions

View File

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

73
Makefile Normal file
View File

@@ -0,0 +1,73 @@
all: rebuild-switch
date
##--------- Commandes spécifiques pour NixOS
clean:
nix-collect-garbage -d --delete-older-than 15d
clean-aggressive:
nix-collect-garbage -d --delete-older-than 1d
clean-total:
nix-collect-garbage -d
clean-log:
journalctl --vacuum-size=1G
full-auto: submodules-update upgrade clean optimise
@date
optimise:
nix-store --optimise
rebuild-switch:
nixos-rebuild switch --fallback --show-trace
store-repair:
nix-store --verify --check-contents --repair
upgrade:
nixos-rebuild switch --upgrade --fallback --show-trace
##--------- Commandes spécifiques pour GIT
push: submodules-push
git push --all
git push --tags
submodules-update:
#git submodule update --remote
git submodule foreach git co master
git submodule foreach git ff
submodules-push:
git submodule foreach git push --all
git submodule foreach git push --tags
submodules-tag:
git submodule foreach git tag -f "$$(date +%F)-$$(hostname -s)"
template:
find . -name "*.nix" -exec meld /etc/nixos/base/module-template.nix {} \;
tag: submodules-tag
git tag -f "$$(date +%F)-$$(hostname -s)"
##--------- Munin
munin:
pushd /var/www/munin/ ; python -m SimpleHTTPServer 8000
##--------- Gestion d'un système de fichier monté en mémoire
tmpfs-create:
mkdir -p /mnt/tmpfs
tmpfs-mount: tmpfs-create
mount -t tmpfs -o size=10G tmpfs /mnt/tmpfs
tmpfs-umount:
umount /mnt/tmpfs
tmpfs-destroy: tmpfs-umount
rmdir /mnt/tmpfs

6
README
View File

@@ -1,3 +1,9 @@
# nixos-template-base
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).
Actuellement, les scripts contiennent un peu de configuration spécifique pour les machines des mainteneurs.
# Lien pour install sur machine distante

View File

@@ -1,10 +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
{
imports = [
# recettes
./base/base.nix
./desktop/desktop.nix
./public/public.nix
# moulinette de configuration
./config-generator.nix

View File

@@ -1,48 +0,0 @@
all: rebuild-switch
date
clean:
nix-collect-garbage -d --delete-older-than 15d
clean-aggressive:
nix-collect-garbage -d --delete-older-than 1d
clean-total:
nix-collect-garbage -d
clean-log:
journalctl --vacuum-size=1G
full-auto: submodules-update upgrade clean optimise
optimise:
nix-store --optimise
push: submodules-push
git push --all
git push --tags
rebuild-switch:
nixos-rebuild switch --fallback --show-trace
store-repair:
nix-store --verify --check-contents --repair
submodules-update:
#git submodule update --remote
git submodule foreach git co master
git submodule foreach git ff
submodules-push:
git submodule foreach git push --all
git submodule foreach git push --tags
submodules-tag:
git submodule foreach git tag -f "$$(date +%F)-$$(hostname -s)"
tag: submodules-tag
git tag -f "$$(date +%F)-$$(hostname -s)"
upgrade:
nixos-rebuild switch --upgrade --fallback --show-trace

1
base/Makefile Symbolic link
View File

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

View File

@@ -1,12 +0,0 @@
{ config, pkgs, ... }:
with pkgs.lib;
let
cfg = config.r6d.config-generator;
in {
# Automatic update & automatic clean
system.autoUpgrade.enable = cfg.auto-upgrade;
nix.gc.automatic = cfg.auto-upgrade;
}

View File

@@ -1,37 +0,0 @@
{ config, pkgs, ... }:
with pkgs.lib;
let
cfg = config.r6d.config-generator;
in {
# Gestion de fail2ban
services = mkIf cfg.fail2ban {
fail2ban = {
enable = true;
jails = {
DEFAULT = ''
# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1/8 pedro.dubronetwork.fr cube.dubronetwork.fr voyage.prunetwork.fr xray.prunetwork.fr 192.168.0.0/16 172.16.0.0/16
# 1 jour
# bantime = 86400
# 5 jours
bantime = 432000
maxretry = 3
#
# Destination email address used solely for the interpolations in
# jail.{conf,local} configuration files.
destemail = admins@dubronetwork.fr
'';
ssh-route = ''
filter = sshd
action = route[blocktype=blackhole]
maxretry = 3
'';
};
};
};
}

View File

@@ -1,10 +0,0 @@
{ config, pkgs, ... }:
with pkgs.lib;
let
cfg = config.r6d.config-generator;
in {
# Gestion spécifique pour PC portable
powerManagement.cpuFreqGovernor = mkIf cfg.laptop "powersave";
}

View File

@@ -1,15 +0,0 @@
{ config, pkgs, ... }:
with pkgs.lib;
let
cfg = config.r6d.config-generator;
in {
imports = [
];
services.locate = {
enable = cfg.locate;
interval = "hourly";
};
}

View File

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

View File

@@ -1,12 +1,27 @@
{ config, pkgs, ... }:
with pkgs.lib;
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
in {
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf cfg.nix-serve-server {
# Cache http pour le store
services.nix-serve.enable = cfg.nix-serve-server;
networking.firewall.allowedTCPPorts = mkIf cfg.nix-serve-server [ 5000 ];
# Services
services.nix-serve = {
enable = true;
};
# Réseau
networking.firewall = {
allowedTCPPorts = [
5000
];
allowedUDPPorts = [
];
};
}

View File

@@ -0,0 +1,64 @@
{ 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,22 +1,20 @@
{ config, pkgs, ... }:
{ config, lib, pkgs, ... }:
let
#inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
{
imports = [
./environment.nix
./localisation.nix
./monitoring.nix
./networking.nix
./services.nix
./network-dns.nix
# inclusion conditionnelle
./activation-manuelle/auto-upgrade.nix
./activation-manuelle/laptop.nix
./activation-manuelle/locate.nix
./activation-manuelle/fail2ban.nix
./activation-manuelle/service-fail2ban.nix
./activation-manuelle/nix-serve-client.nix
./activation-manuelle/nix-serve-server.nix
./activation-manuelle/print.nix
./activation-manuelle/swap.nix
./activation-manuelle/users.nix
];
}

View File

@@ -1,27 +0,0 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{ config, pkgs, ... }:
{
## Munin server -- generate /var/www/munin
services.munin-cron = {
enable = true;
hosts = ''
[${config.networking.hostName}]
address localhost
'';
extraGlobalConfig = ''
contact.email.command mail -s "Munin notification for ''${var:host}" hostmaster@prunetwork.fr
'';
};
networking.firewall.allowedTCPPorts = [
# TODO configurer les bon ports lors de l'ouverture du service
];
## Documentation
# * https://nixos.org/wiki/Create_and_debug_nix_packages
# * http://chriswarbo.net/essays/nixos/developing_on_nixos.html
}

22
base/network-dns.nix Normal file
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;
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;
};
}

View File

@@ -1,6 +1,5 @@
{ config, lib, pkgs, ... }:
# exemple utilisé pour commencer bird.nix
let
inherit (lib) mkEnableOption mkIf mkMerge mkOption singleton types;
cfg = config.r6d.config-generator;
@@ -31,24 +30,33 @@ in
enable = mkEnableOption "Génération de la configuration d'une machine.";
awesome = mkEnableOption "Profil pour activer le gestionnaire de fenêtre awesome.";
auto-upgrade = mkEnableOption "Profil pour activer les mises à jour automatiques.";
cartographie = mkEnableOption "Profil pour activer les outils de gestion de données géographiques.";
conception-assistee = mkEnableOption "Profil pour activer les outils de conception électronique & modélisation 3D";
database_postgres=mkEnableOption "Profil pour activer le SGBD PostgreSQL.";
developpement = mkEnableOption "Profil pour activer les outils de développement";
docker = mkEnableOption "Profil pour l'utilisation de Docker.";
dovecot = mkEnableOption "Profil pour activer le serveur Dovecot.";
dns_autorite = mkEnableOption "Profil pour servir les fichiers de zone DNS.";
dns_resolveur = mkEnableOption "Profil pour activer un résolveur DNS local.";
edition-musique = mkEnableOption "Profil pour la création/édition de musique.";
edition-photo = mkEnableOption "Profil pour la création/édition de photos.";
edition-video = mkEnableOption "Profil pour la création/édition de video.";
fail2ban = mkEnableOption "Profil pour activer Fail2ban.";
jeux = mkEnableOption "Profil pour les jeux vidéos.";
laptop = mkEnableOption "Profil pour les outils spécifiques aux ordinateurs portables..";
locate = mkEnableOption "Profil pour activer la fonction locate.";
mailboxes = mkEnableOption "Profil pour stocker les mails dans des boîtes aux lettres.";
murmur = mkEnableOption "Profil pour activer un serveur Mumble (murmur)";
nix-serve-client= mkEnableOption "Profil pour que la machine soit un client de cache nix.";
nix-serve-server= mkEnableOption "Profil pour que la machine soit un serveur de cache nix.";
nixStoreProxyCache = mkEnableOption "Profil pour activer le proxy cahce nginx pour le nix store";
online-ipv6 = mkEnableOption "Profil pour activer l'IPv6 de online.net";
print = mkEnableOption "Profil pour activer cups & pouvoir imprimer.";
rabbitmq = mkEnableOption "Profil pour activer le service de messagerie AMQP.";
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.";
};
#* Utilisé pour avoir des raccourcis de machine
r6d.computers = {
@@ -57,6 +65,7 @@ in
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.";
@@ -77,6 +86,7 @@ in
isNeoNomade = host == "neo-nomade.dubronetwork.fr";
isNomade = host == "nomade.dubronetwork.fr";
isOcean = host == "ocean.prunetwork.fr";
isPedro = host == "pedro.dubronetwork.fr";
isPhenom = host == "phenom.dubronetwork.fr";
isRadx = host == "radx.prunetwork.fr";
isRollo = host == "rollo.dubronetwork.fr";
@@ -96,7 +106,7 @@ in
(mkIf pfl.isHome {
r6d.profiles.isDesktop = true;
})
(mkIf pfl.isServer {
(mkIf (pfl.isServer && !comp.isMonstre) {
r6d.config-generator = {
#database_postgres = true;
dns_autorite = true;
@@ -108,7 +118,7 @@ in
};
})
# /!\ PAS un serveur
(mkIf (!pfl.isServer) {
(mkIf (!pfl.isServer || comp.isMonstre) {
r6d.config-generator = {
dns_resolveur = true;
};
@@ -117,8 +127,13 @@ in
r6d.profiles.isDesktop = true;
r6d.config-generator = {
cartographie = true;
developpement = true;
docker = true;
edition-musique = true;
edition-photo = true;
edition-video = true;
};
})
@@ -129,12 +144,6 @@ in
print = true;
};
})
(mkIf (pfl.isDubronetwork && pfl.isHome) {
r6d.config-generator.jeux = true;
})
(mkIf (pfl.isDubronetwork && pfl.isServer) {
r6d.config-generator.nix-serve-server = true;
})
(mkIf (pfl.isDubronetwork && pfl.isWorkstation) {
r6d.config-generator = {
conception-assistee = true;
@@ -168,12 +177,11 @@ in
r6d.profiles = {
isHome = true;
isPrunetwork = true;
isServer = true;
isWorkstation = true;
};
r6d.config-generator = {
nix-serve-server = true;
print = true;
virtualbox = true;
};
})
@@ -201,7 +209,11 @@ in
isServer = true;
};
r6d.config-generator.fail2ban = true;
r6d.config-generator = {
fail2ban = true;
nix-serve-client = true;
nixStoreProxyCache = true;
};
})
(mkIf comp.isNeoNomade{
r6d.profiles = {
@@ -220,6 +232,17 @@ in
laptop = true;
};
})
(mkIf comp.isPedro {
r6d.profiles = {
isDubronetwork = true;
isServer = true;
};
r6d.config-generator = {
fail2ban = true;
online-ipv6 = true;
};
})
(mkIf comp.isPhenom {
r6d.profiles = {
isDubronetwork = true;
@@ -229,6 +252,8 @@ in
r6d.config-generator = {
nix-serve-server = true;
laptop = true;
edition-photo = true;
};
})
(mkIf comp.isRollo {
@@ -238,8 +263,12 @@ in
};
r6d.config-generator = {
dovecot = true;
fail2ban = true;
mailboxes = true;
murmur = true;
online-ipv6 = true;
znc = true;
};
})
];

View File

@@ -1,44 +0,0 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf cfg.developpement {
environment.systemPackages = with pkgs; [
# Base de données
pgadmin
sqlitebrowser
# Développement
cloc
idea.idea-community
gcc # pour les appels depuis les scripts
# Documentation
zeal
## Gestion des sources
# git # déjà présent dans "base"
git-cola
mercurial
subversion
## Haskell
ghc
stack
## Rust
cargo # récupération des dépendances + compilation projet rust
rustPlatform.rustc
## Visualisation & outils de diff
gource
meld
vbindiff # diff de fichier hexadecimaux avec vim
];
}

View File

@@ -1,25 +0,0 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in mkIf cfg.laptop {
# Paquets spécifiques pour un ordinateur portable
## Activation d'un gestionnaire de réseau
networking.networkmanager.enable = true;
hardware.bluetooth.enable = true;
environment.systemPackages = with pkgs; [
networkmanagerapplet
];
services.xserver.synaptics = {
enable = true;
twoFingerScroll = true;
};
}

View File

@@ -1,19 +1,21 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
in mkIf cfg.xmonad {
# Paquets spécifiques pour xmonad
mkIf cfg.xmonad {
environment.systemPackages = with pkgs;[
# Paquets
environment.systemPackages = with pkgs; [
dmenu
haskellPackages.xmobar
];
# Services
services.xserver.windowManager.xmonad = {
enable = true;
enableContribAndExtras = true;

View File

@@ -1,46 +0,0 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf profiles.isDesktop {
environment.systemPackages = with pkgs; [
# Adminsys
iotop
lm_sensors
lshw
lsof
ntp
powerline-fonts
powertop
python27Packages.ansible2
python27Packages.glances
usbutils
# DNS
unbound
# Compression
lz4
lzop
# Mail
postfix
# Système de fichier
curlftpfs
gparted
inotify-tools
nfs-utils
ntfs3g
sshfsFuse
#
unetbootin # création de clefs USB bootables
];
}

View File

@@ -1,42 +0,0 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf profiles.isDesktop {
environment.systemPackages = with pkgs; [
# Multimedia
## Audio
audacity # montage audio
beep
cmus # lecteur audio console
easytag # gestion des métadonnées des fichiers musicaux
picard # gestion des métadonnées des fichiers musicaux
espeak # synthèse vocale
paprefs # préferences pulseaudio
pavucontrol # mixer pulseaudio
vorbis-tools # codec
## Video
smplayer # lecteur vidéo
vlc # lecteur vidéo
## Photo & Dessin vectoriel
exif
exiftags
gimp # logiciel d'édition/montage/retouche photo
inkscape # édition d'image vectorielle (svg & autre)
imagemagick # modification image en CLI
kde4.ksnapshot
rawtherapee # développemen de photos en RAW
### TEST d'outil de gestion de catalogue de photos
kde4.digikam # gestionnaire de bibliothèque de photo
];
}

View File

@@ -1,61 +1,54 @@
{ config, pkgs, ... }:
{ config, lib, pkgs, ... }:
let
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
mkIf = pkgs.lib.mkIf;
mkIf = lib.mkIf;
in
{
imports = [ # applications :
# commandées par config-generator
./activation-manuelle/app-awesome.nix # pour les profils awesome
./activation-manuelle/app-cao.nix # de conception assisté par ordinateur & modélisation
./activation-manuelle/app-developpement.nix # utilisée pour développer des programmes/scripts
./activation-manuelle/app-docker.nix # pour activer docker
./activation-manuelle/app-jeux.nix # permettant de jouer ;)
./activation-manuelle/app-virtualbox.nix # pour exploiter virtualbox
./activation-manuelle/laptop.nix # appli & configuration adaptée pour un PC portable$
./activation-manuelle/xmonad/xmonad.nix # gestionnaire de fenêtres xmonad
# installées systématiquement
./desktop-minimal.nix
./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, ...)
# A ajouter dans config-generator & revoir le contenu pour le mettre si nécessaire dans minimal
./app-cartographie.nix # utilisée pour manipuler les données géographiques & cartes
./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, ...)
];
# Paquets
environment.systemPackages = with pkgs; mkIf profiles.isDesktop [
# Environement de bureau
wmname # pour définir le nom du gestionnaire de fenêtre (utile pour java)
arandr # interface graphique pour xrandr
wmname # pour définir le nom du gestionnaire de fenêtre (utile pour java)
kde4.ksnapshot# capture d'écran
xorg.xbacklight # pour gérer la luminosité de l'écran
xorg.xev # pour repérer les codes + noms standard des actions clavier/souris
xorg.xkill # pour 'tuer une application'
xorg.xkill # pour 'tuer une application'
## Gestionnaire de fenêtre & Thème
gnome.gnome_icon_theme # thème d'icone - semble fonctionner avec spaceFM
## Manipulation de fichier
pcmanfm # gestionnaire de fichiers graphique
spaceFM # gestionnaire de fichiers graphique
vifm # gestionnaire de fichiers basé sur VIM (console)
pcmanfm # gestionnaire de fichiers graphique
spaceFM # gestionnaire de fichiers graphique
vifm # gestionnaire de fichiers basé sur VIM (console)
## Terminal
sakura # terminal
sakura # terminal
# A trier
cowsay
fgallery # générateur de gallerie statique http://www.thregr.org/~wavexx/software/fgallery/
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
taskwarrior # gestionnaire de tâches en console
udevil # pour le montage des media amovibles
xclip # manipulation du clipboard X depuis la console
];
# Polices supplémentaires
fonts.fonts = with pkgs; mkIf profiles.isDesktop [
fira # police créée pour Firefox
fira-code # idem fira-mono + ligatures pour la programmation
fira-mono # dérivée de fira en monospace
hack-font # police monospace créée explicitement pour coder
];
nixpkgs.config.packageOverrides = pkgs: {
@@ -63,45 +56,5 @@ in
mumble = pkgs.mumble.override { pulseSupport = true; };
};
# Enable the X11 windowing system.
services.xserver = mkIf profiles.isDesktop {
enable = true;
layout = "fr";
xkbOptions = "eurosign:e";
displayManager.lightdm.enable = true;
windowManager.awesome.enable = true;
startGnuPGAgent = true;
startOpenSSHAgent = false; # pas compatible avec l'agent GnuPG
inputClassSections = [''
Identifier "Marble Mouse"
MatchProduct "Logitech USB Trackball"
MatchIsPointer "on"
MatchDevicePath "/dev/input/event*"
Driver "evdev"
# Physical button #s: A b D - - - - B C b = A & D simultaneously; - = no button
#Option "ButtonMapping" "1 8 3 4 5 6 7 2 2" # For right-hand placement
#Option "ButtonMapping" "3 8 1 4 5 6 7 2 2" # For left-hand placement
# EmulateWheel refers to emulating a mouse wheel using Marble Mouse trackball.
Option "EmulateWheel" "true"
Option "EmulateWheelButton" "8" # Factory default; use "9" for left-side placement.
# EmulateWheelInertia specifies how far (in pixels) the pointer must move to
# generate button press/release events in wheel emulation mode.
Option "EmulateWheelInertia" "10" # Factory default: 50
Option "ZAxisMapping" "4 5"
Option "XAxisMapping" "6 7" # Disable this for vertical-only scrolling.
# Emulate3Buttons refers to the act of pressing buttons A and D
# simultaneously to emulate a middle-click or wheel click.
Option "Emulate3Buttons" "true" # Factory default.
''];
};
# Pulse Audio
hardware.pulseaudio = mkIf profiles.isDesktop {
enable = true;
support32Bit = true;
};
environment.etc."pulse/daemon.conf".text = "flat-volumes = no";
security.setuidPrograms = [ "udevil" ];
}

View File

@@ -1,18 +1,25 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
in mkIf cfg.virtualbox {
mkIf true {
# Paquets
environment.systemPackages = with pkgs; [
linuxPackages.virtualbox
linuxPackages.virtualboxGuestAdditions
];
virtualisation.virtualbox.host.enable = true;
}
# Services
# Réseau
networking.firewall = {
allowedTCPPorts = [
];
allowedUDPPorts = [
];
};
}

52
public/app-adminsys.nix Normal file
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;
in
mkIf true {
# Paquets
environment.systemPackages = with pkgs; [
# Adminsys
iotop
lm_sensors
lshw
lsof
ntp
powerline-fonts
powertop
python27Packages.ansible2
python27Packages.glances
usbutils
# Compression
lz4
lzop
# Système de fichier
## Montage de filesystem
curlftpfs # ftp
ntfs3g # ntfs
sshfsFuse # ssh
## Gestion de FS
nfs-utils
## Exploitation FS
inotify-tools # être notifié lorsque le contenu d'un répertoire change
duff # outil de recherche de fichiers en doublons
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

@@ -1,11 +1,13 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in mkIf cfg.awesome {
in
mkIf cfg.awesome {
environment.variables = {
# Export the current path for the awesome derivation, useful for users rc.lua

View File

@@ -1,7 +1,7 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
@@ -9,6 +9,7 @@ in
mkIf profiles.isDesktop {
# Paquets
environment.systemPackages = with pkgs; [
# Bureautique
aspell aspellDicts.fr
@@ -34,6 +35,7 @@ mkIf profiles.isDesktop {
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
texLiveFull # distribution LaTeX
#texLive # distribution LaTeX de base

View File

@@ -1,7 +1,7 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
@@ -9,7 +9,8 @@ in
mkIf cfg.conception-assistee {
environment.systemPackages = with pkgs; [
# Paquets
environment.systemPackages = with pkgs; [
# CAO
## Modélisation 3D
freecad # modélisation de pièces en 3D

View File

@@ -1,14 +1,15 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf profiles.isDesktop {
mkIf cfg.cartographie {
# Paquets
environment.systemPackages = with pkgs; [
# Gestion de données géographiques
expat

View File

@@ -1,7 +1,7 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
@@ -9,16 +9,22 @@ in
mkIf profiles.isDesktop {
# Paquets
environment.systemPackages = with pkgs; [
# Clients Internet
## Navigateur & Réseaux sociaux
## Navigateur
chromium
firefox
python27Packages.turses # client twitter en ncurse
## Réseaux sociaux
python27Packages.turses # client twitter en ncurse
python27Packages.rainbowstream # client twitter en console
rtv # client reddit en console
## Mail & Discussion (texte, audio)
clawsMail
hexchat
kde5.quasselClient
mumble
mutt

View File

@@ -0,0 +1,48 @@
{ 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 {
# Paquets
environment.systemPackages = with pkgs; [
# Base de données
pgadmin # interface d'administration de postgres
sqlitebrowser # interface d'administration de sqlite
# Développement
cloc
idea.idea-community # IntelliJ IDEA
gcc # pour les appels depuis les scripts
# Documentation
zeal # consulter la documentation hors ligne
## Gestion des sources
# 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
gitAndTools.gitFull # pour gitk
git-cola # interface pour utiliser git (historique, commit)
mercurial
subversion
## Haskell
ghc # pour les appels depuis les scripts
stack
## Rust
cargo # récupération des dépendances + compilation projet rust
rustPlatform.rustc # pour les appels depuis les scripts
## Visualisation & outils de diff
gource # visualisation en mouvement de l'historique git
meld # outil de comparaison graphique
vbindiff # diff de fichier hexadecimaux avec vim
];
}

View File

@@ -1,13 +1,15 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
in mkIf cfg.docker {
mkIf cfg.docker {
# Paquets
environment.systemPackages = with pkgs; [
# Ecosystème Docker
docker

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;
in
mkIf cfg.edition-musique {
# Paquets
environment.systemPackages = with pkgs; [
#
audacity # montage audio
easytag # gestion des métadonnées des fichiers musicaux
picard # gestion des métadonnées des fichiers musicaux
];
}

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.edition-photo {
# Paquets
environment.systemPackages = with pkgs; [
# Méta données
exif
exiftags
# Retouche, modification & dessin vectoriel
gimp # logiciel d'édition/montage/retouche photo
inkscape # édition d'image vectorielle (svg & autre)
imagemagick # modification image en CLI
rawtherapee # développemen de photos en RAW
# TEST d'outil de gestion de catalogue de photos
kde4.digikam # gestionnaire de bibliothèque de photo
];
}

View File

@@ -1,15 +1,18 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf profiles.isDesktop {
mkIf cfg.edition-video {
# Paquets
environment.systemPackages = with pkgs; [
# Vidéo
#cinelerra # editeur video
pitivi # montage vidéo
];
}

View File

@@ -1,13 +1,15 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
in mkIf cfg.jeux {
mkIf cfg.jeux {
# Paquets
environment.systemPackages = with pkgs; [
# Jeux
urbanterror

30
public/app-multimedia.nix Normal file
View File

@@ -0,0 +1,30 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf profiles.isDesktop {
# Paquets
environment.systemPackages = with pkgs; [
# Multimedia
## Audio
beep
cmus # lecteur audio console
espeak # synthèse vocale
paprefs # préferences pulseaudio
pavucontrol # mixer pulseaudio
vorbis-tools # codec
## Video
smplayer # lecteur vidéo
vlc # lecteur vidéo
kde4.ksnapshot# réalisation de capture d'écran
];
}

View File

@@ -7,31 +7,29 @@ let
profiles = config.r6d.profiles;
in
mkIf profiles.isDesktop {
mkIf true {
#mkIf profiles.isDesktop {
# Paquets
environment.systemPackages = with pkgs; [
# Outils réseau
iperf # outil de mesure de la qualité du réseau
iptraf-ng # outil de mesure de la qualité du réseau
nload # affichage de statisques d'utilisation instantannées du réseau
telnet
#vsftpd # serveur FTP
## Diagnostic
arp-scan
wireshark
#wireshark
whois
## Routage
quagga # daemon de routage
## Tunnel
# openvpn
tinc
];
networking.firewall = {
allowedTCPPorts = [5201]; # iperf
allowedUDPPorts = [5201]; # iperf
allowedTCPPorts = [
5201 # iperf
];
allowedUDPPorts = [
5201 # iperf
];
};
}

View File

@@ -1,7 +1,7 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf;
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
@@ -9,6 +9,7 @@ in
mkIf profiles.isDesktop {
# Paquets
environment.systemPackages = with pkgs; [
# Securité
gnome3.seahorse # gestionnaire graphique de clef GPG
@@ -17,4 +18,5 @@ mkIf profiles.isDesktop {
slock # vérouiller l''écran. "cannot disable the out-of-memory killer for this process (make sure to suid or sgid slock)" --> en root
yubikey-personalization-gui # utilisation de la clef Yubikey
];
security.setuidPrograms = [ "slock" ];
}

27
public/app-virtualbox.nix Normal file
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.virtualbox {
# Paquets
environment.systemPackages = with pkgs; [
linuxPackages.virtualbox
linuxPackages.virtualboxGuestAdditions
];
# À décommenter pour activer le pack d'extension
#boot.kernelPackages = pkgs.linuxPackages // {
# virtualbox = pkgs.linuxPackages.virtualbox.override {
# enableExtensionPack = true;
# pulseSupport = true;
# };
#};
virtualisation.virtualbox.host.enable = true;
}

16
public/auto-upgrade.nix Normal file
View File

@@ -0,0 +1,16 @@
{ 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.auto-upgrade {
# Automatic update & automatic clean
system.autoUpgrade.enable = true;
nix.gc.automatic = true;
}

View File

@@ -1,4 +1,11 @@
{ config, pkgs, ... }:
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
{
# Nombre de process d'installation en parrallèle effectués par Nix
@@ -7,11 +14,13 @@
# The NixOS release to be compatible with for stateful data such as databases.
system.stateVersion = "16.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)
system.copySystemConfiguration = true;
# On autorise les paquets non-libres
nixpkgs.config.allowUnfree = true;
# List packages installed in system profile. To search by name, run:
# $ nix-env -qaP | grep wget
# Paquets
environment = {
systemPackages = with pkgs; [
bind # utilisé pour les utilitaires comme dig
@@ -30,6 +39,7 @@
p7zip # compression de fichier
parted # partitionnement de disque
pciutils
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
@@ -43,6 +53,7 @@
];
shellAliases = {
byobu = "byobu-tmux";
jacques-a-dit = "sudo";
tree = "tree -C";
tree1 = "tree -d -L 1";
tree2 = "tree -d -L 2";
@@ -52,6 +63,10 @@
};
etc.gitconfig.text = builtins.readFile ./gitconfig;
};
# programmes qui n'ont pas besoin de sudo pour fonctionner
security.setuidPrograms = [
"mtr"
];
programs.bash = {
enableCompletion = true;
promptInit = builtins.readFile ./bash-prompt.sh;

27
public/laptop.nix Normal file
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.laptop {
# Gestion spécifique pour PC portable
## Gestion de l'énergie
powerManagement.cpuFreqGovernor = "powersave";
## Activation d'un gestionnaire de réseau
networking.networkmanager.enable = true;
hardware.bluetooth.enable = true;
# Paquets
environment.systemPackages = with pkgs; [
networkmanagerapplet # gestionnaire réseau graphique + console (nm-applet + nmtui)
wirelesstools # fournis iwconfig
];
}

View File

@@ -1,6 +1,14 @@
{ config, pkgs, ... }:
{ 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 {
{
# Select internationalisation properties.
i18n = {
consoleFont = "Lat2-Terminus16";

View File

@@ -1,16 +1,13 @@
{ config, pkgs, ... }:
{ config, lib, pkgs, ... }:
{
# 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;
};
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf true {
# Utilisation d'adresse IPv6 temporaire

View File

@@ -1,12 +1,17 @@
{ config, pkgs, ... }:
with pkgs.lib;
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
in {
# Enable CUPS to print documents.
services.printing = mkIf cfg.print {
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf cfg.print {
# Services
## Enable CUPS to print documents.
services.printing = {
enable = true;
drivers = [
pkgs.samsung-unified-linux-driver

50
public/public.nix Normal file
View File

@@ -0,0 +1,50 @@
{ 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-ipv6.nix
./sudo.nix
./service-haveged.nix
./service-monitoring.nix
./service-ssh.nix
# commandées par config-generator
## option de configuration spécifique
./app-awesome.nix # pour les profils awesome
./app-cao.nix # de conception assisté par ordinateur & modélisation
./app-cartographie.nix # utilisée pour manipuler les données géographiques & cartes
./app-developpement.nix # utilisée pour développer des programmes/scripts
./app-docker.nix # pour activer docker
./app-edition-musique.nix # pour modifier les fichiers musicaux
./app-edition-photo.nix # pour modifier les photos & assimilé
./app-edition-video.nix # pour modifier les vidéos
./app-jeux.nix # permettant de jouer ;)
./app-virtualbox.nix # pour exploiter virtualbox
./auto-upgrade.nix # mise à jour automatique du système
./laptop.nix # appli & configuration adaptée pour un PC portable
./print.nix # configuration de base de cups
./service-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, ...)
./service-pulseaudio.nix # activation du serveur audio
./service-x11.nix # activation du serveur graphique X
];
}

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;
in
mkIf true {
# Sécurité & Accès distant
# Services
## Augmentation de l'entropie du système par un générateur de nombres aléatoires
## cat /proc/sys/kernel/random/entropy_avail
services.haveged = {
enable = true;
refill_threshold = 2048;
};
}

19
public/service-laptop.nix Normal file
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;
in
mkIf cfg.laptop {
# Gestion spécifique pour PC portable
# Services
services.xserver.synaptics = {
enable = true;
twoFingerScroll = true;
};
}

17
public/service-locate.nix Normal file
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;
in
mkIf cfg.locate {
# Services
services.locate = {
enable = true;
interval = "hourly";
};
}

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;
in
mkIf true {
# Paquets
environment.systemPackages = with pkgs; [
mailutils
];
# Services
## Noeud de supervision munin = pas de stockage des données locales
services.munin-node = {
enable = true;
};
## Munin server -- generate /var/www/munin
services.munin-cron = {
enable = true;
hosts = ''
[${config.networking.hostName}]
address localhost
'';
extraGlobalConfig = ''
contact.email.command mail -s "Munin notification for ''${var:host}" root@${config.networking.hostName}
'';
};
# Réseau
networking.firewall = {
allowedTCPPorts = [
8000
];
allowedUDPPorts = [
];
};
}

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

View File

@@ -1,19 +1,20 @@
{ config, pkgs, ... }:
{ config, lib, pkgs, ... }:
{
# Sécurité & Acces distant
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
## Augmentation de l'entropie du système par un générateur de nombres aléatoires
## cat /proc/sys/kernel/random/entropy_avail
services.haveged = {
enable = true;
refill_threshold = 2048;
};
mkIf true {
# Services
## OpenSSH daemon
services.openssh = {
enable = true;
# https://wiki.mozilla.org/Security/Guidelines/OpenSSH#Modern_.28OpenSSH_6.7.2B.29
# http://www.cyberciti.biz/tips/linux-unix-bsd-openssh-server-best-practices.html
extraConfig = ''
KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
@@ -27,12 +28,4 @@
UsePrivilegeSeparation sandbox
'';
};
# Monitoring
## Noeud de supervision munin = pas de stockage des données locales
services.munin-node = {
enable = true;
};
}

47
public/service-x11.nix Normal file
View File

@@ -0,0 +1,47 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf profiles.isDesktop {
# Services
# Enable the X11 windowing system.
services.xserver = {
enable = true;
layout = "fr";
xkbOptions = "eurosign:e";
displayManager.lightdm.enable = true;
windowManager.awesome.enable = true;
startGnuPGAgent = true;
startOpenSSHAgent = false; # pas compatible avec l'agent GnuPG
inputClassSections = [''
Identifier "Marble Mouse"
MatchProduct "Logitech USB Trackball"
MatchIsPointer "on"
MatchDevicePath "/dev/input/event*"
Driver "evdev"
# Physical button #s: A b D - - - - B C b = A & D simultaneously; - = no button
#Option "ButtonMapping" "1 8 3 4 5 6 7 2 2" # For right-hand placement
#Option "ButtonMapping" "3 8 1 4 5 6 7 2 2" # For left-hand placement
# EmulateWheel refers to emulating a mouse wheel using Marble Mouse trackball.
Option "EmulateWheel" "true"
Option "EmulateWheelButton" "8" # Factory default; use "9" for left-side placement.
# EmulateWheelInertia specifies how far (in pixels) the pointer must move to
# generate button press/release events in wheel emulation mode.
Option "EmulateWheelInertia" "10" # Factory default: 50
Option "ZAxisMapping" "4 5"
Option "XAxisMapping" "6 7" # Disable this for vertical-only scrolling.
# Emulate3Buttons refers to the act of pressing buttons A and D
# simultaneously to emulate a middle-click or wheel click.
Option "Emulate3Buttons" "true" # Factory default.
''];
};
}

18
public/sudo.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
mkIf true {
# Authorisation de certaines applications par sudo sans mot de passe
security.sudo.extraConfig = ''
%users ALL = NOPASSWD: ${pkgs.mtr}/bin/mtr
%users ALL = NOPASSWD: ${pkgs.slock}/bin/slock
'';
}

View File

@@ -1,14 +1,18 @@
{ config, pkgs, ... }:
with pkgs.lib;
{ config, lib, pkgs, ... }:
let
inherit (lib) mkIf mkMerge mkThenElse;
cfg = config.r6d.config-generator;
in {
computers = config.r6d.computers;
profiles = config.r6d.profiles;
in
mkIf cfg.swap {
# Gestion du swap
# https://en.wikipedia.org/wiki/Swappiness
boot.kernel.sysctl = mkIf cfg.swap {
boot.kernel.sysctl = {
# le swap est activé (!= 0)
# le swap est utilisé lorsque (100 - x) % de la mémoire est déja allouée
"vm.swappiness" = 10;