Compare commits
	
		
			No commits in common. 'nixos-unstable' and '2016-08-23-ocean' have entirely different histories. 
		
	
	
		
			nixos-unst
			...
			2016-08-23
		
	
		
	@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					# 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* https://nixos.org/wiki/How_to_install_NixOS_from_Linux#Installing_through_a_chroot
 | 
				
			||||||
 | 
					* https://github.com/NixOS/nixpkgs/issues/13305
 | 
				
			||||||
@ -1,240 +0,0 @@
 | 
				
			|||||||
# nixos-template-base
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Versions de NixOS supportées :
 | 
					 | 
				
			||||||
* NixOS unstable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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.~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Liens
 | 
					 | 
				
			||||||
* https://status.nixos.org/ pour savoir de quand datent les différentes releases de NixOS
 | 
					 | 
				
			||||||
* https://repology.org/repository/nix_unstable/problems pour lister les paquets avec problèmes
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Notes de mise-à-jour
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## pour l'utilisation de l'annuaire (à partir de 2017-04-28)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* faire les mises à jour de l'OS
 | 
					 | 
				
			||||||
* commiter & pusher l'état des dépôts (au cas où). Pour les différents dépôts `git a`, `git commit` puis `make tag push`
 | 
					 | 
				
			||||||
* mettre à jour les dépôts avec les dernières versions, `make submodules-update`
 | 
					 | 
				
			||||||
* vérifier que `configuration.nix` contient `services.xserver.enable = true;` pour les machines avec interface graphique
 | 
					 | 
				
			||||||
* vérifier que `configuration.nix` contient le nom de la machine `networking.hostName = "<X>";`
 | 
					 | 
				
			||||||
* vérifier que `configuration.nix` contient le nom de domaine `networking.domain = "<X>";`
 | 
					 | 
				
			||||||
* tester la configuration : `nixos-rebuild build`
 | 
					 | 
				
			||||||
* corriger et ajouter les éléments manquant (notamment dans `private/annuaire.nix` )
 | 
					 | 
				
			||||||
* lorsque tout semble bon, vérifier :
 | 
					 | 
				
			||||||
  * qu'il y a toujours des utilisateurs dans la configuration
 | 
					 | 
				
			||||||
  * que le moyen d'accéder à la machine n'a pas été supprimé (surtout les machines distantes)
 | 
					 | 
				
			||||||
* lancer la commande de build de l'os : `make` :)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## pour le passage de 16.09 à unstable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* mettre à jour tous les dépôts
 | 
					 | 
				
			||||||
* changer la branche de base vers `nixos-unstable`
 | 
					 | 
				
			||||||
* changer la declaration de la machine dans `configuration.nix`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
networking.hostName = "<bidule>";
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
devient
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
r6d.computers.is<bidule> = true;
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* mettre à jour le channel
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
nix-channel --add  https://nixos.org/channels/nixos-unstable nixos
 | 
					 | 
				
			||||||
nix-channel --update
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* faire la mise à jour
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
make
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## pour le passage de 16.03 à 16.09
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* mettre le dépôt base sur la branche upgrade-16.09
 | 
					 | 
				
			||||||
* changer le channel nixos : ```nix-channel --add https://nixos.org/channels/nixos-16.09 nixos```
 | 
					 | 
				
			||||||
* activer x11 dans le configuration.nix
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
services.xserver.enable = true;
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* remplacer le bootloader si gummiboot était utilisé
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
boot.loader.gummiboot.enable = true;
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
devient
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
boot.loader.systemd-boot.enable = true;
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Pour résoudre les soucis d'upgrade, il est conseillé :
 | 
					 | 
				
			||||||
* de désactiver tous les imports (sauf `hardware.nix`)
 | 
					 | 
				
			||||||
* d'ajouter `.../localisation.nix` dans les imports sous peine d'être en clavier US
 | 
					 | 
				
			||||||
* d'ajouter ```nixpkgs.config.allowUnfree = true;```
 | 
					 | 
				
			||||||
* d'ajouter `vim` aux paquets
 | 
					 | 
				
			||||||
* de réactiver petit à petit les lignes désactivées
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Installation sur machine chez online.net
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* https://nixos.org/wiki/Install_NixOS_on_Online.Net
 | 
					 | 
				
			||||||
* https://nixos.org/wiki/Install_NixOS_on_Linode
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Installation selon config online
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* commander serveur
 | 
					 | 
				
			||||||
* lancer la procédure d'installation avec ubuntu LTS 64bits
 | 
					 | 
				
			||||||
* partitionner le disque avec l'interface web
 | 
					 | 
				
			||||||
* lancer l'installation de l'os.
 | 
					 | 
				
			||||||
* attendre que la procédure standard d'installation d'online ait terminée
 | 
					 | 
				
			||||||
* lorsque l'install est finie, dans l'onglet "Etat" se trouve l'option "Secours"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Transformation en NixOS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* relancer la machine en mode "Secours"
 | 
					 | 
				
			||||||
* choisir un linux 64bits (préférence pour ubuntu LTS)
 | 
					 | 
				
			||||||
* le système de boot donne des identifiants SSH pour le connecter à la machine
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* se connecter à la machine
 | 
					 | 
				
			||||||
* passer en root
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~bash
 | 
					 | 
				
			||||||
sudo su -
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* formater les partitions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~bash
 | 
					 | 
				
			||||||
mkfs.ext4 -L nixos /dev/sda1
 | 
					 | 
				
			||||||
swapoff -a
 | 
					 | 
				
			||||||
mkswap /dev/sda2
 | 
					 | 
				
			||||||
swapon -a
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* monter les partitions dans /mnt
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~bash
 | 
					 | 
				
			||||||
mount /dev/sda1 /mnt/
 | 
					 | 
				
			||||||
mkdir /mnt/etc/
 | 
					 | 
				
			||||||
mkdir /mnt/etc/nixos
 | 
					 | 
				
			||||||
mkdir /etc/nixos
 | 
					 | 
				
			||||||
mkdir /mnt/nix
 | 
					 | 
				
			||||||
mkdir /nix
 | 
					 | 
				
			||||||
mount --bind /mnt/nix/ /nix
 | 
					 | 
				
			||||||
mkdir /mnt/tmp
 | 
					 | 
				
			||||||
mount --bind /mnt/tmp /tmp
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* installer les paquets nécessaires
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~bash
 | 
					 | 
				
			||||||
apt-get install bzip2 git byobu htop glances
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* création d'utilisateur (n'importe quil mot de passe)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~bash
 | 
					 | 
				
			||||||
adduser nix
 | 
					 | 
				
			||||||
groupadd -r nixbld
 | 
					 | 
				
			||||||
for n in $(seq 1 10); do useradd -c "Nix build user $n" -d /var/empty -g nixbld -G nixbld -M -N -r -s "$(which nologin)" nixbld$n; done
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* mise-à-jour des certificats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~bash
 | 
					 | 
				
			||||||
update-ca-certificates
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* installer nix
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~bash
 | 
					 | 
				
			||||||
chown -R nix /nix /tmp
 | 
					 | 
				
			||||||
su - nix
 | 
					 | 
				
			||||||
bash <(curl https://nixos.org/nix/install)
 | 
					 | 
				
			||||||
exit
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* créer un profil nix pour root & un channel
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~bash
 | 
					 | 
				
			||||||
. ~nix/.nix-profile/etc/profile.d/nix.sh
 | 
					 | 
				
			||||||
nix-channel --remove nixpkgs
 | 
					 | 
				
			||||||
nix-channel --add https://nixos.org/channels/nixos-unstable nixos
 | 
					 | 
				
			||||||
nix-channel --update
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* installer un editeur de texte
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~bash
 | 
					 | 
				
			||||||
nix-env -i vim_configurable
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* installation de nixos-install
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~bash
 | 
					 | 
				
			||||||
cat <<EOF > /root/configuration.nix
 | 
					 | 
				
			||||||
{ fileSystems."/" = {};
 | 
					 | 
				
			||||||
  boot.loader.grub.enable = false;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
EOF
 | 
					 | 
				
			||||||
export NIX_PATH=nixpkgs=/root/.nix-defexpr/channels/nixos:nixos=/root/.nix-defexpr/channels/nixos/nixos
 | 
					 | 
				
			||||||
export NIXOS_CONFIG=/root/configuration.nix
 | 
					 | 
				
			||||||
nix-env -i -A config.system.build.nixos-install \
 | 
					 | 
				
			||||||
       -A config.system.build.nixos-option \
 | 
					 | 
				
			||||||
       -A config.system.build.nixos-generate-config \
 | 
					 | 
				
			||||||
       -f "<nixos>"
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* configuration de NixOS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
si la machine existe déjà, cloner le dépôt dans /mnt/etc/nixos
 | 
					 | 
				
			||||||
pour cela, créer clef ssh et l'ajouter sur la forge
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~bash
 | 
					 | 
				
			||||||
ssh-keygen -t ed25519
 | 
					 | 
				
			||||||
cp ~/.ssh/id_ed25519* /mnt/etc/nixos/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
git clone <>
 | 
					 | 
				
			||||||
git submodule init
 | 
					 | 
				
			||||||
git submodule update
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* monter /etc/nixos vers /mnt/etc/nixos pour que la config clonée fonctionne
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~bash
 | 
					 | 
				
			||||||
mount --bind /mnt/etc/nixos/ /etc/nixos/
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* mettre à jour la configuration matérielle
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~bash
 | 
					 | 
				
			||||||
export NIX_PATH=nixpkgs=/root/.nix-defexpr/channels/nixos:nixos=/root/.nix-defexpr/channels/nixos/nixos
 | 
					 | 
				
			||||||
nixos-generate-config --root /mnt
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* vérifier le /mnt/etc/nixos/configuration.nix
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
notamment le périphérique utilisé par grub
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
* installer le système sur le disque
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~bash
 | 
					 | 
				
			||||||
unset NIXOS_CONFIG
 | 
					 | 
				
			||||||
nixos-install
 | 
					 | 
				
			||||||
~~~
 | 
					 | 
				
			||||||
@ -1,21 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.graphical {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
     # Gestion de FS
 | 
					 | 
				
			||||||
     gparted       # Gestion graphique de partitions
 | 
					 | 
				
			||||||
     unetbootin    # création de clefs USB bootables
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
     # visualisation de log
 | 
					 | 
				
			||||||
     #logstalgia
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,56 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf currentMachine.profiles.isDesktopEnvironment {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    # Environement de bureau
 | 
					 | 
				
			||||||
    arandr          # interface graphique pour xrandr
 | 
					 | 
				
			||||||
    wmname          # pour définir le nom du gestionnaire de fenêtre (utile pour java)
 | 
					 | 
				
			||||||
    #kde4.ksnapshot # capture d'écran
 | 
					 | 
				
			||||||
    xclip           # manipulation du clipboard X depuis la console
 | 
					 | 
				
			||||||
    xorg.xbacklight # pour gérer la luminosité de l'écran
 | 
					 | 
				
			||||||
    xorg.xev        # pour repérer les codes + noms standard des actions clavier/souris
 | 
					 | 
				
			||||||
    xorg.xkill      # pour 'tuer une application'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Gestionnaire de fenêtre & Thème
 | 
					 | 
				
			||||||
    gnome3.adwaita-icon-theme  # thème d'icone - semble fonctionner avec spaceFM
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Manipulation de fichier
 | 
					 | 
				
			||||||
    #kde5.dolphin          # gestionnaire de fichiers graphique
 | 
					 | 
				
			||||||
    #kde5.dolphin-plugins  # gestionnaire de fichiers graphique
 | 
					 | 
				
			||||||
    pcmanfm               # gestionnaire de fichiers graphique
 | 
					 | 
				
			||||||
    #vifm                  # gestionnaire de fichiers basé sur VIM (console)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Terminal
 | 
					 | 
				
			||||||
    kitty                  # terminal avec rendu par GPU
 | 
					 | 
				
			||||||
    sakura                # terminal
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Polices supplémentaires
 | 
					 | 
				
			||||||
  fonts.fonts = with pkgs; [
 | 
					 | 
				
			||||||
    fira            # police créée pour Firefox
 | 
					 | 
				
			||||||
    fira-code       # idem fira-mono + ligatures pour la programmation
 | 
					 | 
				
			||||||
    fira-mono       # dérivée de fira en monospace
 | 
					 | 
				
			||||||
    font-awesome_5  # Jeux de police, utilisé avec Latex
 | 
					 | 
				
			||||||
    hack-font       # police monospace créée explicitement pour coder
 | 
					 | 
				
			||||||
    hasklig         # police dérivée de source-code-pro mais avec des ligatures
 | 
					 | 
				
			||||||
    jetbrains-mono  # police spécial développeurs par Jetbrains
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
  fonts.fontconfig.defaultFonts = {
 | 
					 | 
				
			||||||
    monospace = [ "JetBrains Mono" ];
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  programs = {
 | 
					 | 
				
			||||||
    slock.enable = true;
 | 
					 | 
				
			||||||
    spacefm.enable = true;
 | 
					 | 
				
			||||||
    udevil.enable = true;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,37 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf (flags.officeSuite && flags.graphical) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    # Bureautique
 | 
					 | 
				
			||||||
    gnumeric      # tableur
 | 
					 | 
				
			||||||
    #kde4.ksnapshot# réalisation de capture d'écran
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Cartes mentales
 | 
					 | 
				
			||||||
    freemind
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Diagrammes & Schémas
 | 
					 | 
				
			||||||
    dia           # dessin & schéma technique
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Editeur de texte
 | 
					 | 
				
			||||||
    #lyx          # surcouche WISIWIM à LaTeX
 | 
					 | 
				
			||||||
    #focuswriter  # outil pour l'écriture
 | 
					 | 
				
			||||||
    #textadept     # un éditeur de texte facile pour copier-coller graphique
 | 
					 | 
				
			||||||
    #zim          # outil de prise de notes, wiki de bureau
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Visionneuse
 | 
					 | 
				
			||||||
    #kde5.okular   # pdf
 | 
					 | 
				
			||||||
    #mcomix        # livres (cbr, liste d'images), gestion d'une bibliothèque # Supprimé dans NixOS 20.03
 | 
					 | 
				
			||||||
    pdfpc         # pdf
 | 
					 | 
				
			||||||
    qpdfview      # pdf
 | 
					 | 
				
			||||||
    gqview        # visionneuse image & gestion basique de collection
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,33 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf (flags.internetSuite && flags.graphical) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Paquets
 | 
					 | 
				
			||||||
environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    # Clients Internet
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Navigateur
 | 
					 | 
				
			||||||
    chromium
 | 
					 | 
				
			||||||
    firefox
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Mail & Discussion (texte, audio)
 | 
					 | 
				
			||||||
    claws-mail
 | 
					 | 
				
			||||||
    hexchat
 | 
					 | 
				
			||||||
    quasselClient
 | 
					 | 
				
			||||||
    mumble
 | 
					 | 
				
			||||||
    pidgin
 | 
					 | 
				
			||||||
    thunderbird
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Transfert de fichier
 | 
					 | 
				
			||||||
    filezilla
 | 
					 | 
				
			||||||
    transmission-gtk
 | 
					 | 
				
			||||||
    transmission-remote-gtk
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,15 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf (true && flags.graphical) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,40 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  #inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  imports = [
 | 
					 | 
				
			||||||
    # installées systématiquement
 | 
					 | 
				
			||||||
    ./default-applications.nix
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # commandées par config-generator
 | 
					 | 
				
			||||||
    ## option de configuration spécifique
 | 
					 | 
				
			||||||
    ./cao.nix                   # de conception assisté par ordinateur & modélisation
 | 
					 | 
				
			||||||
    ./cartographie.nix          # manipuler les données géographiques & cartes
 | 
					 | 
				
			||||||
    ./developpement.nix         # développer des programmes/scripts
 | 
					 | 
				
			||||||
    ./developpement-elm.nix     # développer en elm
 | 
					 | 
				
			||||||
    ./developpement-haskell.nix # développer en haskell
 | 
					 | 
				
			||||||
    ./developpement-java.nix    # développer en java
 | 
					 | 
				
			||||||
    ./developpement-jetbrains.nix # outils jetbrains
 | 
					 | 
				
			||||||
    ./developpement-rust.nix    # développer en rust
 | 
					 | 
				
			||||||
    ./edition-musique.nix       # modifier les fichiers musicaux
 | 
					 | 
				
			||||||
    ./edition-photo.nix         # modifier les photos & assimilé
 | 
					 | 
				
			||||||
    ./edition-video.nix         # modifier les vidéos
 | 
					 | 
				
			||||||
    ./jeux.nix                  # jouer, tout simplement ;)
 | 
					 | 
				
			||||||
    ./radio.nix                 # outils pour faire de la radio SDR
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## if isDesktop
 | 
					 | 
				
			||||||
    ./adminsys.nix              # pour gérer le système dans son ensemble et les services
 | 
					 | 
				
			||||||
    ./bureau.nix                # éléments pour avoir un environement graphique minimal utilisable
 | 
					 | 
				
			||||||
    ./bureautique.nix           # dédiée à la bureautique (traitement de texte, dessin, ...)
 | 
					 | 
				
			||||||
    ./client-internet.nix       # pour accéder & utiliser des ressources par le réseau
 | 
					 | 
				
			||||||
    ./multimedia.nix            # pour gérer le son, l'image et la vidéo
 | 
					 | 
				
			||||||
    ./network.nix               # de gestion, de diagnostique & surveillance réseau
 | 
					 | 
				
			||||||
    ./securite.nix              # relatives à la sécurité (chiffrement, gpg, mots de passe, ...)
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,25 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf (flags.developpement-elm && flags.graphical) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Services
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Réseau
 | 
					 | 
				
			||||||
  networking.firewall = {
 | 
					 | 
				
			||||||
    allowedTCPPorts = [
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
    allowedUDPPorts = [
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,18 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf (flags.developpement-haskell && flags.graphical) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
  ] ++ (with pkgs.haskellPackages; [
 | 
					 | 
				
			||||||
    # Haskell lib
 | 
					 | 
				
			||||||
    #threadscope     # visualisation des threads (<bidule>.eventlog)
 | 
					 | 
				
			||||||
  ]);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,17 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf (flags.developpement-java && flags.graphical) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    # IDE
 | 
					 | 
				
			||||||
    jetbrains.idea-community # IntelliJ IDEA
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,19 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf (flags.jetbrains-licensed && flags.graphical) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    jetbrains.idea-ultimate
 | 
					 | 
				
			||||||
    jetbrains.clion
 | 
					 | 
				
			||||||
    jetbrains.datagrip
 | 
					 | 
				
			||||||
    jetbrains.pycharm-professional
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,15 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf (flags.developpement-rust && flags.graphical) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,33 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf (flags.developpement && flags.graphical) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    # Base de données
 | 
					 | 
				
			||||||
    #pgadmin             # interface d'administration de postgres ***plus à jour, version openssl dépréciée***
 | 
					 | 
				
			||||||
    #sqlitebrowser       # interface d'administration de sqlite
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Documentation
 | 
					 | 
				
			||||||
    #zeal                # consulter la documentation hors ligne
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Gestion des sources
 | 
					 | 
				
			||||||
    #gitg               # interface pour utiliser git (historique, commit)
 | 
					 | 
				
			||||||
    gitstats            # génère un site web statique avec des statistiques
 | 
					 | 
				
			||||||
    git-cola            # interface pour utiliser git (historique, commit)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Visualisation & outils de diff
 | 
					 | 
				
			||||||
    #gource              # visualisation en mouvement de l'historique git
 | 
					 | 
				
			||||||
    meld                # outil de comparaison graphique
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Editeur texte
 | 
					 | 
				
			||||||
    atom
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,22 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf (flags.edition-photo && flags.graphical) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    # Retouche, modification & dessin vectoriel
 | 
					 | 
				
			||||||
    gimp          # logiciel d'édition/montage/retouche photo
 | 
					 | 
				
			||||||
    inkscape      # édition d'image vectorielle (svg & autre)
 | 
					 | 
				
			||||||
    #rawtherapee  # développemen de photos en RAW
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # TEST d'outil de gestion de catalogue de photos
 | 
					 | 
				
			||||||
    #kde4.digikam  # gestionnaire de bibliothèque de photo
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,17 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf (flags.jeux && flags.graphical) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    # Jeux
 | 
					 | 
				
			||||||
    urbanterror
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,18 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf (flags.multimediaSuite && flags.graphical) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    ## Video
 | 
					 | 
				
			||||||
    smplayer      # lecteur vidéo
 | 
					 | 
				
			||||||
    vlc           # lecteur vidéo
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,21 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf (true && flags.graphical) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Diagnostic réseau Wireshark (droits fins par le groupe wireshark)
 | 
					 | 
				
			||||||
  programs.wireshark = {
 | 
					 | 
				
			||||||
    enable = true;
 | 
					 | 
				
			||||||
    package = pkgs.wireshark;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,27 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf (flags.radio && flags.graphical) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    ## GUI
 | 
					 | 
				
			||||||
    chirp                   # Configuration de radios portatives
 | 
					 | 
				
			||||||
    gqrx                    # GUI
 | 
					 | 
				
			||||||
    cubicsdr                # Another GUI
 | 
					 | 
				
			||||||
    gnuradio-with-packages  # Software Defined Radio (SDR) software
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## A Trier
 | 
					 | 
				
			||||||
    #inspectrum    # Tool for analysing captured signals from sdr receivers
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  nixpkgs.config.permittedInsecurePackages = [
 | 
					 | 
				
			||||||
    "python2.7-Pillow-6.2.2"
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,17 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf (flags.securitySuite && flags.graphical) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    gnome3.seahorse # gestionnaire graphique de clef GPG
 | 
					 | 
				
			||||||
    #yubikey-personalization-gui # utilisation de la clef Yubikey
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,48 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf true {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  nixpkgs.config.packageOverrides = pkgs: {
 | 
					 | 
				
			||||||
    claws-mail = pkgs.claws-mail.override {
 | 
					 | 
				
			||||||
      enablePgp = true;
 | 
					 | 
				
			||||||
      enablePluginArchive = true;
 | 
					 | 
				
			||||||
      #enablePluginFancy = false; # nécessite wekitgtk qui est troué # Option supprimée dans NixOS 20.03
 | 
					 | 
				
			||||||
      enablePluginPdf = true;
 | 
					 | 
				
			||||||
      enablePluginRavatar = true;
 | 
					 | 
				
			||||||
      enablePluginSmime = true;
 | 
					 | 
				
			||||||
      enablePluginVcalendar = true;
 | 
					 | 
				
			||||||
      enableSpellcheck = true;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ffmpeg-full = pkgs.ffmpeg-full.override {
 | 
					 | 
				
			||||||
      nonfreeLicensing = true;
 | 
					 | 
				
			||||||
      nvenc  = true;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # bug connu : https://nixos.org/nix-dev/2014-December/015225.html
 | 
					 | 
				
			||||||
    # find /nix/store/  -maxdepth 1 -type d -name "*gnuradio-*"
 | 
					 | 
				
			||||||
    # Commande pour générer le path : find /nix/store/  -maxdepth 1 -type d -name "*gnuradio-*"|paste -d: -s -
 | 
					 | 
				
			||||||
    gnuradio-with-packages = pkgs.gnuradio-with-packages.override {
 | 
					 | 
				
			||||||
      extraPackages = with pkgs; [
 | 
					 | 
				
			||||||
        gnuradio-ais
 | 
					 | 
				
			||||||
        gnuradio-gsm
 | 
					 | 
				
			||||||
        gnuradio-nacl
 | 
					 | 
				
			||||||
        gnuradio-osmosdr    # support des dongle Realtek
 | 
					 | 
				
			||||||
        gnuradio-rds        # support du décodage de RDS sur les radio FM
 | 
					 | 
				
			||||||
      ];
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    mumble = pkgs.mumble.override { pulseSupport = true; };
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  #nixpkgs.config.permittedInsecurePackages = [
 | 
					 | 
				
			||||||
  #  "webkitgtk-2.4.11"       # pour que le plugin fancy de claws-mail fonctionne
 | 
					 | 
				
			||||||
  #];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,58 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf true {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    # Adminsys
 | 
					 | 
				
			||||||
    bind          # utilisé pour les utilitaires comme dig
 | 
					 | 
				
			||||||
    cowsay        # pour ansible & 4lulz
 | 
					 | 
				
			||||||
    dhcp          # client dhcp
 | 
					 | 
				
			||||||
    iotop
 | 
					 | 
				
			||||||
    lm_sensors
 | 
					 | 
				
			||||||
    lshw
 | 
					 | 
				
			||||||
    lsof
 | 
					 | 
				
			||||||
    ntp
 | 
					 | 
				
			||||||
    powerline-fonts
 | 
					 | 
				
			||||||
    powertop
 | 
					 | 
				
			||||||
    #ansible
 | 
					 | 
				
			||||||
    glances
 | 
					 | 
				
			||||||
    pv            # afficher le débit d'un flux     dd if=/dev/zero | pv | dd of=/dev/null
 | 
					 | 
				
			||||||
    sysstat       # pour la commande "iostat -x -1" de monitoring d'activité disque
 | 
					 | 
				
			||||||
    usbutils
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Backup
 | 
					 | 
				
			||||||
    duplicity     # création de sauvegarde chiffrées (GPG)
 | 
					 | 
				
			||||||
    par2cmdline   # outil de récupération de fichiers corrompus - .par2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Compression
 | 
					 | 
				
			||||||
    lz4
 | 
					 | 
				
			||||||
    lzop
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Système de fichier
 | 
					 | 
				
			||||||
    ## Montage de filesystem
 | 
					 | 
				
			||||||
    curlftpfs     # ftp
 | 
					 | 
				
			||||||
    exfat         # Pour monter les FAT avec Fuse
 | 
					 | 
				
			||||||
    hubicfuse     # montage hubic
 | 
					 | 
				
			||||||
    ntfs3g        # ntfs
 | 
					 | 
				
			||||||
    samba         # partages windows
 | 
					 | 
				
			||||||
    squashfsTools # squashfs
 | 
					 | 
				
			||||||
    sshfs-fuse    # ssh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Gestion de FS
 | 
					 | 
				
			||||||
    nfs-utils
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Exploitation FS
 | 
					 | 
				
			||||||
    inotify-tools # être notifié lorsque le contenu d'un répertoire change
 | 
					 | 
				
			||||||
    detox			    # The detox utility renames files to make them easier to work with.
 | 
					 | 
				
			||||||
    duff          # outil de recherche de fichiers en doublons
 | 
					 | 
				
			||||||
    #rdfind        # recherche de fichiers doublons pour remplacement par hard/soft link
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,17 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf true {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    ## Manipulation de fichier
 | 
					 | 
				
			||||||
    vifm            # gestionnaire de fichiers basé sur VIM (console)
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,33 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.officeSuite {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    # Bureautique
 | 
					 | 
				
			||||||
    aspell aspellDicts.fr         # correction d'ortographe
 | 
					 | 
				
			||||||
    python39Packages.grammalecte  # correction gramatical
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Gestion de tâche
 | 
					 | 
				
			||||||
    taskwarrior     # gestionnaire de tâches en console
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Convertisseurs (texte -> <autre format>)
 | 
					 | 
				
			||||||
    gnuplot       # générateur de graphes à partir de données numériques
 | 
					 | 
				
			||||||
    graphviz      # dot, neato : traçage de graphes (carré, rond)
 | 
					 | 
				
			||||||
    #jekyll       # générateur statique de site web
 | 
					 | 
				
			||||||
    #odpdown      # conversion md -> presentation ODP : https://github.com/thorstenb/odpdown
 | 
					 | 
				
			||||||
    pandoc
 | 
					 | 
				
			||||||
    #haskellPackages.pandoc-citeproc # ***BROKEN***
 | 
					 | 
				
			||||||
    texlive.combined.scheme-full # distribution LaTeX
 | 
					 | 
				
			||||||
    #texLive       # distribution LaTeX de base
 | 
					 | 
				
			||||||
    #texLiveBeamer # paquets et extensions pour Beamer
 | 
					 | 
				
			||||||
    #texLiveModerncv # paquets pour la classe Modern CV
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,15 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.conception-assistee {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,18 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.cartographie {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    # Gestion de données géographiques
 | 
					 | 
				
			||||||
    expat
 | 
					 | 
				
			||||||
    gpsbabel      # pour convertir les données des GPS
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,30 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.internetSuite {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Paquets
 | 
					 | 
				
			||||||
environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    # Clients Internet
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Réseaux sociaux
 | 
					 | 
				
			||||||
    #turses                            # client twitter en ncurse
 | 
					 | 
				
			||||||
    #python39Packages.rainbowstream    # client twitter en console
 | 
					 | 
				
			||||||
    #rtv                               # client reddit en console
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Mail & Discussion (texte, audio)
 | 
					 | 
				
			||||||
    mutt
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Sauvegarde nuagique (cloud storage)
 | 
					 | 
				
			||||||
    #rclone
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## P2P
 | 
					 | 
				
			||||||
    rtorrent      # outil de téléchargement de torrent & magnet
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,73 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf true {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
      byobu         # permet de se déconnecter d'un terminal sans l'arréter
 | 
					 | 
				
			||||||
      tig gti lazygit # outil de gestion de version
 | 
					 | 
				
			||||||
      gnumake       # pour décrire les recettes de compilation
 | 
					 | 
				
			||||||
      gnupg         # GPG
 | 
					 | 
				
			||||||
      htop          # monitoring
 | 
					 | 
				
			||||||
      lsb-release   # pour les scripts qui utilisent cet outil (dont byobu)
 | 
					 | 
				
			||||||
      #libressl      # librairie pour faire du TLS et les algorithmes de crypto par OpenBSD
 | 
					 | 
				
			||||||
      ncdu          # outil pour voir l'espace utilisé
 | 
					 | 
				
			||||||
      p7zip         # compression de fichier
 | 
					 | 
				
			||||||
      parted        # partitionnement de disque
 | 
					 | 
				
			||||||
      pciutils
 | 
					 | 
				
			||||||
      pinentry      # pour taper les mots de passe gpg
 | 
					 | 
				
			||||||
      psmisc        # fournis les utilitaires comme killall, fuser, pstree
 | 
					 | 
				
			||||||
      #python        # python -- python -m SimpleHTTPServer 8000
 | 
					 | 
				
			||||||
      shared-mime-info  # MIME info
 | 
					 | 
				
			||||||
      tmux          # nécessaire pour byobu
 | 
					 | 
				
			||||||
      tree          # affiche une arborescence de fichiers et dossiers
 | 
					 | 
				
			||||||
      usbutils
 | 
					 | 
				
			||||||
      wget          # client HTTP console
 | 
					 | 
				
			||||||
      which         # pour connaitre le chemin d'un exécutable
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
  programs = {
 | 
					 | 
				
			||||||
    fish.enable = true;
 | 
					 | 
				
			||||||
    gnupg.agent.enable = true;
 | 
					 | 
				
			||||||
    git = {
 | 
					 | 
				
			||||||
      enable = true;
 | 
					 | 
				
			||||||
      package = pkgs.gitFull;
 | 
					 | 
				
			||||||
      config = {
 | 
					 | 
				
			||||||
        # http://www.git-attitude.fr/2014/09/15/30-options-git-qui-gagnent-a-etre-connues/
 | 
					 | 
				
			||||||
        color = {
 | 
					 | 
				
			||||||
          diff = "auto";
 | 
					 | 
				
			||||||
          branch = "auto";
 | 
					 | 
				
			||||||
          interactive = "auto";
 | 
					 | 
				
			||||||
          pager = true;
 | 
					 | 
				
			||||||
          showbranch = "auto";
 | 
					 | 
				
			||||||
          status = "auto";
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        alias = {
 | 
					 | 
				
			||||||
          a  = "add -p";
 | 
					 | 
				
			||||||
          br = "for-each-ref --sort=committerdate refs/heads/ --format='%(committerdate:short)\t%(authorname)\t%(refname:short)'";
 | 
					 | 
				
			||||||
          ci = "commit";
 | 
					 | 
				
			||||||
          co = "checkout";
 | 
					 | 
				
			||||||
          ff = "pull --ff-only";
 | 
					 | 
				
			||||||
          oops = "commit --amend --no-edit";
 | 
					 | 
				
			||||||
          # Show files ignored by git
 | 
					 | 
				
			||||||
          ignored = "ls-files -o -i --exclude-standard";
 | 
					 | 
				
			||||||
          ls = "ls-files";
 | 
					 | 
				
			||||||
          st = "status";
 | 
					 | 
				
			||||||
          # Logs
 | 
					 | 
				
			||||||
          lol = "log --graph --decorate --pretty=oneline --abbrev-commit";
 | 
					 | 
				
			||||||
          lola = "log --graph --decorate --pretty=oneline --abbrev-commit --all";
 | 
					 | 
				
			||||||
          not-pushed = "log --branches --not --remotes";
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        push.default = "simple";
 | 
					 | 
				
			||||||
        code.editor = "${pkgs.vim_configurable}/bin/vim";
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
      lfs.enable = true;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,41 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  #inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  imports = [
 | 
					 | 
				
			||||||
    # installées systématiquement
 | 
					 | 
				
			||||||
    ./default-applications.nix
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # commandées par config-generator
 | 
					 | 
				
			||||||
    ## option de configuration spécifique
 | 
					 | 
				
			||||||
    ./cao.nix                   # de conception assisté par ordinateur & modélisation
 | 
					 | 
				
			||||||
    ./cartographie.nix          # manipuler les données géographiques & cartes
 | 
					 | 
				
			||||||
    ./developpement.nix         # développer des programmes/scripts
 | 
					 | 
				
			||||||
    ./developpement-elm.nix     # développer en elm
 | 
					 | 
				
			||||||
    ./developpement-haskell.nix # développer en haskell
 | 
					 | 
				
			||||||
    ./developpement-java.nix    # développer en java
 | 
					 | 
				
			||||||
    ./developpement-jetbrains.nix # outils jetbrains
 | 
					 | 
				
			||||||
    ./developpement-rust.nix    # développer en rust
 | 
					 | 
				
			||||||
    ./edition-musique.nix       # modifier les fichiers musicaux
 | 
					 | 
				
			||||||
    ./edition-photo.nix         # modifier les photos & assimilé
 | 
					 | 
				
			||||||
    ./edition-video.nix         # modifier les vidéos
 | 
					 | 
				
			||||||
    ./jeux.nix                  # jouer, tout simplement ;)
 | 
					 | 
				
			||||||
    ./radio.nix                 # outils pour faire de la radio SDR
 | 
					 | 
				
			||||||
    ./vim.nix                   # vim avec plugins
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## if isDesktop
 | 
					 | 
				
			||||||
    ./adminsys.nix              # pour gérer le système dans son ensemble et les services
 | 
					 | 
				
			||||||
    ./bureau.nix                # éléments pour avoir un environement graphique minimal utilisable
 | 
					 | 
				
			||||||
    ./bureautique.nix           # dédiée à la bureautique (traitement de texte, dessin, ...)
 | 
					 | 
				
			||||||
    ./client-internet.nix       # pour accéder & utiliser des ressources par le réseau
 | 
					 | 
				
			||||||
    ./multimedia.nix            # pour gérer le son, l'image et la vidéo
 | 
					 | 
				
			||||||
    ./network.nix               # de gestion, de diagnostique & surveillance réseau
 | 
					 | 
				
			||||||
    ./securite.nix              # relatives à la sécurité (chiffrement, gpg, mots de passe, ...)
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,26 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.developpement-elm {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    elmPackages.elm
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Services
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Réseau
 | 
					 | 
				
			||||||
  networking.firewall = {
 | 
					 | 
				
			||||||
    allowedTCPPorts = [
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
    allowedUDPPorts = [
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,36 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.developpement-haskell {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    # Haskell platform
 | 
					 | 
				
			||||||
    cabal-install         # fournis cabal
 | 
					 | 
				
			||||||
    cabal2nix             # convertir les .cabal en .nix
 | 
					 | 
				
			||||||
    ghc                   # pour les appels depuis les scripts
 | 
					 | 
				
			||||||
    stack                 # pour les paquets en LTS de stackage
 | 
					 | 
				
			||||||
  ] ++ (with pkgs.haskellPackages; [
 | 
					 | 
				
			||||||
    # Haskell lib
 | 
					 | 
				
			||||||
    autoproc              # ? procmail
 | 
					 | 
				
			||||||
    #brittany              # formatteur de code
 | 
					 | 
				
			||||||
    #darcs                 # gestionnaire de version éponyme
 | 
					 | 
				
			||||||
    #ghc-mod               # outil d'analyse de code haskell utilisé par IDE
 | 
					 | 
				
			||||||
    #hindent               # indentation code ***BROKEN***
 | 
					 | 
				
			||||||
    hlint                 # qualite de code, analyse statique de code + astuces & bonnes pratiques
 | 
					 | 
				
			||||||
    #postgrest            # mapper HTTP <-> PostgreSQL
 | 
					 | 
				
			||||||
    servant               # génération d'API REST
 | 
					 | 
				
			||||||
    stylish-haskell       # qualité de code
 | 
					 | 
				
			||||||
    turtle                # genre shell-scripting
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Application perso
 | 
					 | 
				
			||||||
    #hahp
 | 
					 | 
				
			||||||
    #pandoc-filter-graphviz # filtre pour utiliser graphviz à partir de pandoc ***BROKEN***
 | 
					 | 
				
			||||||
  ]);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,24 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.developpement-java {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Installe le paquet + JAVA_HOME
 | 
					 | 
				
			||||||
  programs.java = {
 | 
					 | 
				
			||||||
    enable = true;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    # Systèmes de build autour de java
 | 
					 | 
				
			||||||
    ant
 | 
					 | 
				
			||||||
    maven
 | 
					 | 
				
			||||||
    gradle
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,15 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.jetbrains-licensed {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,20 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.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
 | 
					 | 
				
			||||||
    rustup              # outil de configuration de toolchain rust
 | 
					 | 
				
			||||||
    crate2nix           # génère les fichiers de build Nix dans un projet Rust
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,40 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.developpement {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    # Build / outil de construction
 | 
					 | 
				
			||||||
    autobuild
 | 
					 | 
				
			||||||
    autoconf
 | 
					 | 
				
			||||||
    automake
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Base de données
 | 
					 | 
				
			||||||
    pg_top                 # monitoring de PostgreSQL
 | 
					 | 
				
			||||||
    sqlite                 # le moteur de base de données
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # C / C++
 | 
					 | 
				
			||||||
    gcc                    # pour les appels depuis les scripts
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Gestion des sources
 | 
					 | 
				
			||||||
    cloc                   # outil pour compter les lignes de code source
 | 
					 | 
				
			||||||
    mercurial
 | 
					 | 
				
			||||||
    subversion
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # spécification
 | 
					 | 
				
			||||||
    plantuml               # diagrammes UML et plus si affinité
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Mono
 | 
					 | 
				
			||||||
    #mono46                # interpréteur .NET
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ## Visualisation & outils de diff
 | 
					 | 
				
			||||||
    #vbindiff              # diff de fichier hexadecimaux avec vim
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,15 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.edition-musique {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,21 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.edition-photo {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    # Méta données
 | 
					 | 
				
			||||||
    exif
 | 
					 | 
				
			||||||
    exiftags
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Retouche, modification & dessin vectoriel
 | 
					 | 
				
			||||||
    imagemagick   # modification image en CLI
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,16 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.edition-video {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    ffmpeg-full   # assemblage de flux audio & video en ligne de commande
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,15 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.jeux {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,20 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.multimediaSuite {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    ## Audio
 | 
					 | 
				
			||||||
    beep
 | 
					 | 
				
			||||||
    cmus          # lecteur audio console
 | 
					 | 
				
			||||||
    espeak        # synthèse vocale
 | 
					 | 
				
			||||||
    vorbis-tools  # codec
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,29 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.radio {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# pour que ça marche
 | 
					 | 
				
			||||||
# sudo rmmod dvb_usb_rtl28xxu
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# lecture radio FM
 | 
					 | 
				
			||||||
# rtl_fm -f 96.9e6 -M wbfm -s 440000 -r 44100 - | aplay -r 44100 -f S16_LE
 | 
					 | 
				
			||||||
# rtl_fm -f 96.95e6 -M wbfm -s 441000 -r 44100 - | aplay -r 44100 -f S16_LE -t raw -c 1
 | 
					 | 
				
			||||||
# rtl_fm -f 96.95e6 -M wbfm -s 441000 -r 44100 -E deemp - |pv| aplay -r 44100 -f S16_LE -t raw -c 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    gnss-sdr    # Global Navigation Satellite Systems software-defined receiver
 | 
					 | 
				
			||||||
    liquid-dsp  # Digital signal processing library for software-defined radios
 | 
					 | 
				
			||||||
    rtl-sdr     # Turns your Realtek RTL2832 based DVB dongle into a SDR receiver
 | 
					 | 
				
			||||||
    dump1090    # Listen to planes ADS-B and view them on a map
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  hardware.rtl-sdr.enable = true;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,17 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.securitySuite {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    pass            # gestionnaire de mots de passe
 | 
					 | 
				
			||||||
    pwgen           # générateur de mots de passe
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,28 +0,0 @@
 | 
				
			|||||||
{pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  myVim = pkgs.vim_configurable.customize {
 | 
					 | 
				
			||||||
    # Specifies the vim binary name.
 | 
					 | 
				
			||||||
    # E.g. set this to "my-vim" and you need to type "my-vim" to open this vim
 | 
					 | 
				
			||||||
    # This allows to have multiple vim packages installed (e.g. with a different set of plugins)
 | 
					 | 
				
			||||||
    name = "vim";
 | 
					 | 
				
			||||||
    vimrcConfig.customRC = builtins.readFile ./vimrc;
 | 
					 | 
				
			||||||
    vimrcConfig.packages.myVimPackage = with pkgs.vimPlugins; {
 | 
					 | 
				
			||||||
      start = [
 | 
					 | 
				
			||||||
        wombat256-vim
 | 
					 | 
				
			||||||
      ];
 | 
					 | 
				
			||||||
      opt = [
 | 
					 | 
				
			||||||
        elm-vim
 | 
					 | 
				
			||||||
        vim-fish
 | 
					 | 
				
			||||||
        vim-nix
 | 
					 | 
				
			||||||
        vimwiki
 | 
					 | 
				
			||||||
      ];
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
in {
 | 
					 | 
				
			||||||
  programs.vim = {
 | 
					 | 
				
			||||||
    defaultEditor = true;
 | 
					 | 
				
			||||||
    package = myVim;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,18 +1,20 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					{ config, lib, pkgs, ... }:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let
 | 
				
			||||||
 | 
					  #inherit (lib) mkIf mkMerge mkThenElse;
 | 
				
			||||||
 | 
					  cfg = config.r6d.config-generator;
 | 
				
			||||||
 | 
					  computers = config.r6d.computers;
 | 
				
			||||||
 | 
					  profiles = config.r6d.profiles;
 | 
				
			||||||
 | 
					in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  imports = [
 | 
					  imports = [
 | 
				
			||||||
    # moulinette de configuration
 | 
					    # recettes
 | 
				
			||||||
    /*./config-generator.nix*/
 | 
					    ./base/base.nix
 | 
				
			||||||
    ./options.nix
 | 
					    ./desktop/desktop.nix
 | 
				
			||||||
 | 
					    ./public/public.nix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Redéfinition d'applications et de modules
 | 
					    # moulinette de configuration
 | 
				
			||||||
    ./applications/overrides.nix
 | 
					    ./config-generator.nix
 | 
				
			||||||
 | 
					 | 
				
			||||||
    # subfolders
 | 
					 | 
				
			||||||
    ./applications/graphical/default.nix
 | 
					 | 
				
			||||||
    ./applications/terminal/default.nix
 | 
					 | 
				
			||||||
    ./configuration/default.nix
 | 
					 | 
				
			||||||
    ./services/default.nix
 | 
					 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					/etc/nixos/base/Makefile
 | 
				
			||||||
@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					{ config, lib, pkgs, ... }:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let
 | 
				
			||||||
 | 
					  inherit (lib) mkIf mkMerge mkThenElse;
 | 
				
			||||||
 | 
					  cfg = config.r6d.config-generator;
 | 
				
			||||||
 | 
					  computers = config.r6d.computers;
 | 
				
			||||||
 | 
					  profiles = config.r6d.profiles;
 | 
				
			||||||
 | 
					in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mkIf cfg.nix-serve-client {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  nix = {
 | 
				
			||||||
 | 
					    # Cache http pour le store
 | 
				
			||||||
 | 
					    requireSignedBinaryCaches = false;
 | 
				
			||||||
 | 
					    binaryCaches =  [
 | 
				
			||||||
 | 
					      (mkIf (profiles.isDubronetwork && (! computers.isPedro) && (! computers.isRollo)) "http://nix-cache.dubronetwork.fr:5001")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      (mkIf profiles.isPrunetwork "https://cache.nixos.org/")
 | 
				
			||||||
 | 
					      (mkIf (profiles.isPrunetwork && !profiles.isServer) "http://192.168.1.20:5000")
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					    extraOptions = ''
 | 
				
			||||||
 | 
					    connect-timeout = 5
 | 
				
			||||||
 | 
					    '';
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -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.nix-serve-server {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Cache http pour le store
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Services
 | 
				
			||||||
 | 
					  services.nix-serve = {
 | 
				
			||||||
 | 
					    enable = true;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Réseau
 | 
				
			||||||
 | 
					  networking.firewall = {
 | 
				
			||||||
 | 
					    allowedTCPPorts = [
 | 
				
			||||||
 | 
					      5000
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					    allowedUDPPorts = [
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -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
												
											
										
									
								@ -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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  imports = [
 | 
				
			||||||
 | 
					    ./network-dns.nix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # inclusion conditionnelle
 | 
				
			||||||
 | 
					    ./activation-manuelle/service-fail2ban.nix
 | 
				
			||||||
 | 
					    ./activation-manuelle/nix-serve-client.nix
 | 
				
			||||||
 | 
					    ./activation-manuelle/nix-serve-server.nix
 | 
				
			||||||
 | 
					    ./activation-manuelle/users.nix
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -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;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,34 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SESSION_NAME="Adminsys"
 | 
					 | 
				
			||||||
PROJECT_DIR="/etc/nixos"
 | 
					 | 
				
			||||||
PROJECT_MODULES=$(cd $PROJECT_DIR && git submodule --quiet foreach 'echo $path')
 | 
					 | 
				
			||||||
HEAD_ADDITIONNAL_TABS="git config"
 | 
					 | 
				
			||||||
TAIL_ADDITIONNAL_TABS="glances htop"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# création de la session
 | 
					 | 
				
			||||||
byobu new-session -d -s ${SESSION_NAME} -n 'run' -c ${PROJECT_DIR};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# définition des onglets
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## onglets courants au début. Positionnés dans dossier projet
 | 
					 | 
				
			||||||
for i in ${HEAD_ADDITIONNAL_TABS}
 | 
					 | 
				
			||||||
do
 | 
					 | 
				
			||||||
    byobu new-window -n ${i} -c ${PROJECT_DIR};
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## onglets spécifiques au projet. Positionnés dans les dossiers enfants
 | 
					 | 
				
			||||||
for i in ${PROJECT_MODULES}
 | 
					 | 
				
			||||||
do
 | 
					 | 
				
			||||||
    byobu new-window -n ${i} -c ${PROJECT_DIR}/${i};
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## onglets courants à la fin. Positionnés dans dossier projet. Lance la commande du même nom que l'onglet
 | 
					 | 
				
			||||||
for i in ${TAIL_ADDITIONNAL_TABS}
 | 
					 | 
				
			||||||
do
 | 
					 | 
				
			||||||
    byobu new-window -n ${i} -c ${PROJECT_DIR} ${i};
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# affiche la session
 | 
					 | 
				
			||||||
byobu -2 attach-session -t ${SESSION_NAME};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@ -1,28 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  #inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  imports = [
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # installées systématiquement
 | 
					 | 
				
			||||||
    ./environment.nix
 | 
					 | 
				
			||||||
    ./localisation.nix
 | 
					 | 
				
			||||||
    ./network.nix
 | 
					 | 
				
			||||||
    #./network-ipv6.nix
 | 
					 | 
				
			||||||
    ./u2f.nix
 | 
					 | 
				
			||||||
    ./udev.nix
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # commandées par config-generator
 | 
					 | 
				
			||||||
    ## option de configuration spécifique
 | 
					 | 
				
			||||||
    ./awesome.nix               # pour le gestionaire de fenêtres awesome
 | 
					 | 
				
			||||||
    ./laptop.nix                    # appli & configuration adaptée pour un PC portable
 | 
					 | 
				
			||||||
    ./nix-options.nix              # options de Nix (update, gc, optimisation)
 | 
					 | 
				
			||||||
    ./swap.nix                      # définition de l'utilisation du swap
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,64 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  # The NixOS release to be compatible with for stateful data such as databases.
 | 
					 | 
				
			||||||
  system.stateVersion = "19.09";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # 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;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # NixOS Hardening
 | 
					 | 
				
			||||||
  #security.grsecurity.enable = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Ménage de /tmp au boot
 | 
					 | 
				
			||||||
  boot.cleanTmpDir = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Activation des pages de manuel
 | 
					 | 
				
			||||||
  documentation.man.enable = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment = {
 | 
					 | 
				
			||||||
    shellAliases = {
 | 
					 | 
				
			||||||
      byobu = "byobu-tmux";
 | 
					 | 
				
			||||||
      gpg = "gpg2";
 | 
					 | 
				
			||||||
      jacques-a-dit = "sudo";
 | 
					 | 
				
			||||||
      tree = "tree -C";
 | 
					 | 
				
			||||||
      tree1 = "tree -d -L 1";
 | 
					 | 
				
			||||||
      tree2 = "tree -d -L 2";
 | 
					 | 
				
			||||||
      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";
 | 
					 | 
				
			||||||
      vi = "vim";
 | 
					 | 
				
			||||||
      byobu-adminsys = "/etc/nixos/base/byobu-adminsys";
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
  programs.bash = {
 | 
					 | 
				
			||||||
    enableCompletion = true;
 | 
					 | 
				
			||||||
    promptInit = builtins.readFile ./bash-prompt.sh;
 | 
					 | 
				
			||||||
    interactiveShellInit = builtins.readFile ./bash-interactive-init.sh;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # https://wiki.mozilla.org/Security/Guidelines/OpenSSH#Modern
 | 
					 | 
				
			||||||
  programs.ssh.extraConfig = ''
 | 
					 | 
				
			||||||
    # Ensure KnownHosts are unreadable if leaked - it is otherwise easier to know which hosts your keys have access to.
 | 
					 | 
				
			||||||
    HashKnownHosts yes
 | 
					 | 
				
			||||||
    # Host keys the client accepts - order here is honored by OpenSSH
 | 
					 | 
				
			||||||
    HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp384,ecdsa-sha2-nistp256
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256
 | 
					 | 
				
			||||||
    MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
 | 
					 | 
				
			||||||
    Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
 | 
					 | 
				
			||||||
  '';
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,40 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf flags.laptop {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Gestion spécifique pour PC portable
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ## Gestion de l'énergie
 | 
					 | 
				
			||||||
  services.tlp.enable = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ## Activation d'un gestionnaire de réseau
 | 
					 | 
				
			||||||
  networking.networkmanager.enable = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  hardware.bluetooth = {
 | 
					 | 
				
			||||||
    enable = true;
 | 
					 | 
				
			||||||
    powerOnBoot = false;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Gestion graphique du réseau dans la barre système
 | 
					 | 
				
			||||||
  programs.nm-applet.enable = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Paquets
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    wirelesstools           # fournis iwconfig
 | 
					 | 
				
			||||||
    blueman                 # outils bluetooth (manager, system tray)
 | 
					 | 
				
			||||||
    cbatticon               # status de la batterie dans le system tray
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Services
 | 
					 | 
				
			||||||
  services.blueman.enable = true;
 | 
					 | 
				
			||||||
  services.xserver.libinput = {
 | 
					 | 
				
			||||||
    enable = true;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,24 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf true {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # fix: Hostname -s renvoie "Unknown host" alors que hostname renvoie la bonne valeur
 | 
					 | 
				
			||||||
  #      Il s'avère que hostname vérifie la validité du FQDN et du reverse.
 | 
					 | 
				
			||||||
  #      Fixer ces paramètres dans les hosts permet de faire tomber en marche
 | 
					 | 
				
			||||||
  networking.extraHosts = ''
 | 
					 | 
				
			||||||
    127.0.0.1   ${config.networking.fqdn} ${config.networking.hostName}
 | 
					 | 
				
			||||||
  '';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Activation du routage
 | 
					 | 
				
			||||||
  boot.kernel.sysctl = {
 | 
					 | 
				
			||||||
    "net.ipv4.conf.all.forwarding" = true;
 | 
					 | 
				
			||||||
    "net.ipv4.conf.default.forwarding" = true;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,30 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Automatic update & automatic clean
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  system.autoUpgrade.enable = flags.auto-upgrade;
 | 
					 | 
				
			||||||
  nix = {
 | 
					 | 
				
			||||||
    extraOptions = ''
 | 
					 | 
				
			||||||
      experimental-features = nix-command flakes
 | 
					 | 
				
			||||||
    '';
 | 
					 | 
				
			||||||
    settings = {
 | 
					 | 
				
			||||||
      auto-optimise-store = true;
 | 
					 | 
				
			||||||
      # Nombre de process d'installation en parrallèle effectués par Nix
 | 
					 | 
				
			||||||
      cores = 0;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    gc = {
 | 
					 | 
				
			||||||
      automatic = true;
 | 
					 | 
				
			||||||
      dates = "daily";
 | 
					 | 
				
			||||||
      options = "--delete-older-than 7d";
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,41 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf true {
 | 
					 | 
				
			||||||
  # Ajout du support des yobikey & hyperfido
 | 
					 | 
				
			||||||
  ## source des valeurs udev : https://github.com/Yubico/libu2f-host/blob/master/70-u2f.rules
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ## source car udev sur nixos semble ancien : https://raw.githubusercontent.com/Yubico/libu2f-host/master/70-old-u2f.rules
 | 
					 | 
				
			||||||
  services.udev.extraRules = ''
 | 
					 | 
				
			||||||
  # this udev file should be used with udev older than 188
 | 
					 | 
				
			||||||
  ACTION!="add|change", GOTO="u2f_end"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Yubico YubiKey
 | 
					 | 
				
			||||||
  KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1050", ATTRS{idProduct}=="0113|0114|0115|0116|0120|0402|0403|0406|0407|0410", GROUP="plugdev", MODE="0660"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Happlink (formerly Plug-Up) Security KEY
 | 
					 | 
				
			||||||
  KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="f1d0", GROUP="plugdev", MODE="0660"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  #  Neowave Keydo and Keydo AES
 | 
					 | 
				
			||||||
  KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1e0d", ATTRS{idProduct}=="f1d0|f1ae", GROUP="plugdev", MODE="0660"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # HyperSecu HyperFIDO
 | 
					 | 
				
			||||||
  KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="096e", ATTRS{idProduct}=="0880", GROUP="plugdev", MODE="0660"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  LABEL="u2f_end"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", GROUP="audio", MODE="0666", SYMLINK+="rtl_sdr"
 | 
					 | 
				
			||||||
  '';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  security.pam.u2f.enable = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  environment.systemPackages = with pkgs; [
 | 
					 | 
				
			||||||
    libu2f-host
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,18 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkIf mkMerge mkThenElse;
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkIf false {
 | 
					 | 
				
			||||||
  # 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"
 | 
					 | 
				
			||||||
  '';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					{ 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.xmonad {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Paquets
 | 
				
			||||||
 | 
					  environment.systemPackages = with pkgs; [
 | 
				
			||||||
 | 
					    dmenu
 | 
				
			||||||
 | 
					    haskellPackages.xmobar
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Services
 | 
				
			||||||
 | 
					  services.xserver.windowManager.xmonad = {
 | 
				
			||||||
 | 
					    enable = true;
 | 
				
			||||||
 | 
					    enableContribAndExtras = true;
 | 
				
			||||||
 | 
					    extraPackages = haskellPackages: [
 | 
				
			||||||
 | 
					      haskellPackages.xmobar
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,60 @@
 | 
				
			|||||||
 | 
					{ config, pkgs, ... }:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let
 | 
				
			||||||
 | 
					  cfg = config.r6d.config-generator;
 | 
				
			||||||
 | 
					  computers = config.r6d.computers;
 | 
				
			||||||
 | 
					  profiles = config.r6d.profiles;
 | 
				
			||||||
 | 
					  mkIf = pkgs.lib.mkIf;
 | 
				
			||||||
 | 
					in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  imports = [                   # applications :
 | 
				
			||||||
 | 
					    # commandées par config-generator
 | 
				
			||||||
 | 
					    ./activation-manuelle/xmonad/xmonad.nix      # gestionnaire de fenêtres xmonad
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Paquets
 | 
				
			||||||
 | 
					  environment.systemPackages = with pkgs; mkIf profiles.isDesktop [
 | 
				
			||||||
 | 
					    # Environement de bureau
 | 
				
			||||||
 | 
					    arandr          # interface graphique pour xrandr
 | 
				
			||||||
 | 
					    wmname          # pour définir le nom du gestionnaire de fenêtre (utile pour java)
 | 
				
			||||||
 | 
					    kde4.ksnapshot# capture d'écran
 | 
				
			||||||
 | 
					    xorg.xbacklight # pour gérer la luminosité de l'écran
 | 
				
			||||||
 | 
					    xorg.xev        # pour repérer les codes + noms standard des actions clavier/souris
 | 
				
			||||||
 | 
					    xorg.xkill      # pour 'tuer une application'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## Gestionnaire de fenêtre & Thème
 | 
				
			||||||
 | 
					    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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## Terminal
 | 
				
			||||||
 | 
					    sakura          # terminal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # A trier
 | 
				
			||||||
 | 
					    cowsay
 | 
				
			||||||
 | 
					    fgallery        # générateur de gallerie statique http://www.thregr.org/~wavexx/software/fgallery/
 | 
				
			||||||
 | 
					    samba
 | 
				
			||||||
 | 
					    taskwarrior     # gestionnaire de tâches en console
 | 
				
			||||||
 | 
					    udevil          # pour le montage des media amovibles
 | 
				
			||||||
 | 
					    xclip           # manipulation du clipboard X depuis la console
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Polices supplémentaires
 | 
				
			||||||
 | 
					  fonts.fonts = with pkgs; mkIf profiles.isDesktop [
 | 
				
			||||||
 | 
					    fira            # police créée pour Firefox
 | 
				
			||||||
 | 
					    fira-code       # idem fira-mono + ligatures pour la programmation
 | 
				
			||||||
 | 
					    fira-mono       # dérivée de fira en monospace
 | 
				
			||||||
 | 
					    hack-font       # police monospace créée explicitement pour coder
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  nixpkgs.config.packageOverrides = pkgs: {
 | 
				
			||||||
 | 
					    clawsMail = pkgs.clawsMail.override { enablePluginFancy = true; };
 | 
				
			||||||
 | 
					    mumble = pkgs.mumble.override { pulseSupport = true; };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  security.setuidPrograms = [ "udevil" ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,7 +0,0 @@
 | 
				
			|||||||
all:
 | 
					 | 
				
			||||||
	nixos-generate-config --root /mnt
 | 
					 | 
				
			||||||
	git config --global user.email "nixos-live@example.org"
 | 
					 | 
				
			||||||
	git config --global user.name "NixOS Live"
 | 
					 | 
				
			||||||
	cd /mnt/etc/nixos && git init . && git add . && git commit -m "initial commit"
 | 
					 | 
				
			||||||
	cd /mnt/etc/nixos && git submodule add http://gogs.prunetwork.fr:80/nixos-config/nixos-template-base.git base
 | 
					 | 
				
			||||||
	cd /mnt/etc/nixos && git submodule add https://gogs.prunetwork.fr/Capgemini-CDS-Arkea/template-nixos.git capgemini-cmb
 | 
					 | 
				
			||||||
@ -1,24 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, ... }:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  imports = [
 | 
					 | 
				
			||||||
    capgemini-cmb/default.nix
 | 
					 | 
				
			||||||
    /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix
 | 
					 | 
				
			||||||
    nixos-template-base/base.nix
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
  # Custom name
 | 
					 | 
				
			||||||
  isoImage.isoName = pkgs.lib.mkForce "${config.isoImage.isoBaseName}-capgemini-${config.system.nixosLabel}-${pkgs.stdenv.system}.iso";
 | 
					 | 
				
			||||||
  # Avoid having the terminal flooded by kernel audit messages
 | 
					 | 
				
			||||||
  boot.kernelParams = [ "audit=0" ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Files to copy to the liveCD
 | 
					 | 
				
			||||||
  isoImage.contents = [
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      source = ./Makefile.installation;
 | 
					 | 
				
			||||||
      target = "/custom/Makefile";
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  ];
 | 
					 | 
				
			||||||
  environment.shellAliases = { nixos-generate-custom-config = "cd /iso/custom/ && make";};
 | 
					 | 
				
			||||||
  networking.hostName = "nixos-livecd";
 | 
					 | 
				
			||||||
  networking.domain = "grudu.net";
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,50 +0,0 @@
 | 
				
			|||||||
let
 | 
					 | 
				
			||||||
  lib = with import <nixpkgs> {}; pkgs.lib;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  profiles = {
 | 
					 | 
				
			||||||
    isDesktopEnvironment = {
 | 
					 | 
				
			||||||
      awesome = true;
 | 
					 | 
				
			||||||
      internetSuite = true;
 | 
					 | 
				
			||||||
      graphical = true;
 | 
					 | 
				
			||||||
      multimediaSuite = true;
 | 
					 | 
				
			||||||
      officeSuite = true;
 | 
					 | 
				
			||||||
      pulseaudio = true;
 | 
					 | 
				
			||||||
      securitySuite = true;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    isWorkstation = {
 | 
					 | 
				
			||||||
      docker = true;
 | 
					 | 
				
			||||||
      developpement = true;
 | 
					 | 
				
			||||||
      developpement-elm = true;
 | 
					 | 
				
			||||||
      developpement-haskell = true;
 | 
					 | 
				
			||||||
      developpement-java = true;
 | 
					 | 
				
			||||||
      developpement-rust = true;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    #isServer = {
 | 
					 | 
				
			||||||
      #};
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
with lib; rec{
 | 
					 | 
				
			||||||
  # Apply the profiles (pre-defined + custom) to the whole directory
 | 
					 | 
				
			||||||
  applyProfilesToDirectory = customProfiles: directory:
 | 
					 | 
				
			||||||
    lib.mapAttrs (applyProfilesToMachine customProfiles) directory;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Apply the profiles (pre-defined + custom) to a machine
 | 
					 | 
				
			||||||
  applyProfilesToMachine = customProfiles: machineName: machineOptions:
 | 
					 | 
				
			||||||
  { configurationFlags = lib.recursiveUpdate (generateFlagsSet customProfiles machineOptions.profiles) machineOptions.configurationFlags;
 | 
					 | 
				
			||||||
    configurationOptions = machineOptions.configurationOptions;
 | 
					 | 
				
			||||||
    profiles = machineOptions.profiles;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Generate a set of configuration flags based on profiles
 | 
					 | 
				
			||||||
  generateFlagsSet = customProfiles: machineProfiles:
 | 
					 | 
				
			||||||
  let
 | 
					 | 
				
			||||||
    allProfiles = recursiveUpdate profiles customProfiles;
 | 
					 | 
				
			||||||
    conditionalFlags = name: value:
 | 
					 | 
				
			||||||
      if machineProfiles.${name}
 | 
					 | 
				
			||||||
      then value
 | 
					 | 
				
			||||||
      else {};
 | 
					 | 
				
			||||||
  in
 | 
					 | 
				
			||||||
  foldr (a: b: a // b) {} (mapAttrsToList conditionalFlags allProfiles);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					{ stdenv, fetchurl
 | 
				
			||||||
 | 
					, boost
 | 
				
			||||||
 | 
					, bzip2
 | 
				
			||||||
 | 
					, cmake
 | 
				
			||||||
 | 
					, expat
 | 
				
			||||||
 | 
					, geos
 | 
				
			||||||
 | 
					, lua
 | 
				
			||||||
 | 
					, postgresql
 | 
				
			||||||
 | 
					, proj
 | 
				
			||||||
 | 
					, zlib
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					stdenv.mkDerivation rec {
 | 
				
			||||||
 | 
					  #version = "0.87.1";
 | 
				
			||||||
 | 
					  version = "0.90.1";
 | 
				
			||||||
 | 
					  name = "osm2pgsql-${version}-0";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  src = fetchurl {
 | 
				
			||||||
 | 
					    url = "https://github.com/openstreetmap/osm2pgsql/archive/${version}.tar.gz";
 | 
				
			||||||
 | 
					    sha256 = "0i0zg8di8nbh96qnyyr156ikwcsq1w9b2291bazm5whb351flmqx";
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #nativeBuildInputs = [ ];
 | 
				
			||||||
 | 
					    buildInputs = [ ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #preConfigure = ''
 | 
				
			||||||
 | 
					    '';
 | 
				
			||||||
 | 
					    #buildPhase = ''jam "-j$NIX_BUILD_CORES" '';
 | 
				
			||||||
 | 
					    #installPhase = ''
 | 
				
			||||||
 | 
					    #'';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    meta = with stdenv.lib; {
 | 
				
			||||||
 | 
					      homepage = http://wiki.openstreetmap.org/wiki/Osm2pgsql;
 | 
				
			||||||
 | 
					      description = "osm2pgsql is a tool for loading OpenStreetMap data into a PostgreSQL / PostGIS database suitable for applications like rendering into a map, geocoding with Nominatim, or general analysis.";
 | 
				
			||||||
 | 
					      license = licenses.gpl2;
 | 
				
			||||||
 | 
					      #maintainers = [ maintainers.phunehehe ];
 | 
				
			||||||
 | 
					      maintainers = [ maintainers.jpierre03 ];
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1,8 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
EXCLUSION="~$|swp$|swo$"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
while inotifywait --exclude $EXCLUSION -r -e modify .
 | 
					 | 
				
			||||||
do
 | 
					 | 
				
			||||||
	$@
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
@ -1,216 +0,0 @@
 | 
				
			|||||||
{ config, lib, pkgs, r6d, ... }:
 | 
					 | 
				
			||||||
let
 | 
					 | 
				
			||||||
  inherit (lib) mkEnableOption mkTextOption mkIf mkMerge mkOption singleton types;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # TODO: Anglish :)
 | 
					 | 
				
			||||||
  machineOptions = types.submodule {
 | 
					 | 
				
			||||||
    options = {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      configurationFlags = {
 | 
					 | 
				
			||||||
        #enable                = mkEnableOption "Génération de la configuration d'une machine.";
 | 
					 | 
				
			||||||
        awesome               = mkEnableOption "Profil pour activer le gestionnaire de fenêtre awesome.";
 | 
					 | 
				
			||||||
        auto-upgrade          = mkEnableOption "Profil pour activer les mises à jour automatiques.";
 | 
					 | 
				
			||||||
        cartographie          = mkEnableOption "Profil pour activer les outils de gestion de données géographiques.";
 | 
					 | 
				
			||||||
        conception-assistee   = mkEnableOption "Profil pour activer les outils de conception électronique & modélisation 3D";
 | 
					 | 
				
			||||||
        database_postgres     = mkEnableOption "Profil pour activer le SGBD PostgreSQL.";
 | 
					 | 
				
			||||||
        developpement         = mkEnableOption "Profil pour activer les outils de développement";
 | 
					 | 
				
			||||||
        developpement-elm     = mkEnableOption "Profil pour activer les outils de développement Elm";
 | 
					 | 
				
			||||||
        developpement-haskell = mkEnableOption "Profil pour activer les outils de développement Haskell";
 | 
					 | 
				
			||||||
        developpement-java    = mkEnableOption "Profil pour activer les outils de développement Java";
 | 
					 | 
				
			||||||
        developpement-rust    = mkEnableOption "Profil pour activer les outils de développement Rust";
 | 
					 | 
				
			||||||
        docker                = mkEnableOption "Profil pour l'utilisation de Docker.";
 | 
					 | 
				
			||||||
        dovecot               = mkEnableOption "Profil pour activer le serveur Dovecot.";
 | 
					 | 
				
			||||||
        dns_autorite          = mkEnableOption "Profil pour servir les fichiers de zone DNS.";
 | 
					 | 
				
			||||||
        dns_resolveur         = mkEnableOption "Profil pour activer un résolveur DNS local.";
 | 
					 | 
				
			||||||
        edition-musique       = mkEnableOption "Profil pour la création/édition de musique.";
 | 
					 | 
				
			||||||
        edition-photo         = mkEnableOption "Profil pour la création/édition de photos.";
 | 
					 | 
				
			||||||
        edition-video         = mkEnableOption "Profil pour la création/édition de video.";
 | 
					 | 
				
			||||||
        elasticsearch         = mkEnableOption "Profil pour activer le service elasticsearch.";
 | 
					 | 
				
			||||||
        fail2ban              = mkEnableOption "Profil pour activer Fail2ban.";
 | 
					 | 
				
			||||||
        graphical             = mkEnableOption "Profil pour activer les applications graphgiques.";
 | 
					 | 
				
			||||||
        hydra-builder         = mkEnableOption "Profil pour une machine qui compile pour hydra.";
 | 
					 | 
				
			||||||
        hydra-core            = mkEnableOption "Profil pour un serveur hydra.";
 | 
					 | 
				
			||||||
        kibana                = mkEnableOption "Profil pour activer le service kibana.";
 | 
					 | 
				
			||||||
        internetSuite         = mkEnableOption "Profil pour la suite de logiciels pour Internet.";
 | 
					 | 
				
			||||||
        jetbrains-licensed    = mkEnableOption "Profil pour la suite de développement Jetbrains payante (sous-ensemble).";
 | 
					 | 
				
			||||||
        jeux                  = mkEnableOption "Profil pour les jeux vidéos.";
 | 
					 | 
				
			||||||
        laptop                = mkEnableOption "Profil pour les outils spécifiques aux ordinateurs portables.";
 | 
					 | 
				
			||||||
        locate                = mkEnableOption "Profil pour activer la fonction locate.";
 | 
					 | 
				
			||||||
        mailboxes             = mkEnableOption "Profil pour stocker les mails dans des boîtes aux lettres.";
 | 
					 | 
				
			||||||
        multimediaSuite       = mkEnableOption "Profil pour la suite multimédia.";
 | 
					 | 
				
			||||||
        munin                 = mkEnableOption "Profil pour activer la supervision par Munin";
 | 
					 | 
				
			||||||
        murmur                = mkEnableOption "Profil pour activer un serveur Mumble (murmur)";
 | 
					 | 
				
			||||||
        nixos-manual          = mkEnableOption "Profil pour activer la documentation nixos en local sur un TTY";
 | 
					 | 
				
			||||||
        nix-serve-server      = mkEnableOption "Profil pour que la machine soit un serveur de cache nix.";
 | 
					 | 
				
			||||||
        nixStoreProxyCache    = mkEnableOption "Profil pour activer le proxy cahce nginx pour le nix store";
 | 
					 | 
				
			||||||
        officeSuite           = mkEnableOption "Profil pour la suite bureautique";
 | 
					 | 
				
			||||||
        pipewire              = mkEnableOption "Profil pour activer pipewire.";
 | 
					 | 
				
			||||||
        print                 = mkEnableOption "Profil pour activer cups & pouvoir imprimer.";
 | 
					 | 
				
			||||||
        pulseaudio            = mkEnableOption "Profil pour activer pulseaudio.";
 | 
					 | 
				
			||||||
        rabbitmq              = mkEnableOption "Profil pour activer le service de messagerie AMQP.";
 | 
					 | 
				
			||||||
        radio                 = mkEnableOption "Profil pour activer les outils pour faire de radio numérique - SDR.";
 | 
					 | 
				
			||||||
        radicale              = mkEnableOption "Profil pour activer le service d'hébergement de calendrier + tâches & contacts.";
 | 
					 | 
				
			||||||
        rmilter               = mkEnableOption "Profil pour activer le filtrage de mails par postfix.";
 | 
					 | 
				
			||||||
        scanner               = mkEnableOption "Profil pour que les scanners soient utilisable.";
 | 
					 | 
				
			||||||
        securitySuite         = mkEnableOption "Profil pour la suite de logiciels de sécurité.";
 | 
					 | 
				
			||||||
        smokeping             = mkEnableOption "Profil pour activer le monitoring réseau par smokeping.";
 | 
					 | 
				
			||||||
        swap                  = mkEnableOption "Profil pour que le swap soit activé.";
 | 
					 | 
				
			||||||
        virtualbox            = mkEnableOption "Profil pour l'utilisation de VirtualBox.";
 | 
					 | 
				
			||||||
        xmonad                = mkEnableOption "Profil pour activer le gestionnaire de fenêtres xmonad.";
 | 
					 | 
				
			||||||
        znc                   = mkEnableOption "Profil pour activer le relais IRC ZNC.";
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      configurationOptions = {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      ipAddress = mkOption {
 | 
					 | 
				
			||||||
        description = "Adresse IP.";
 | 
					 | 
				
			||||||
        type = lib.types.str;
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
      nix-serve-server = mkEnableOption "nix-serve server.";
 | 
					 | 
				
			||||||
      nix-serve-client = {
 | 
					 | 
				
			||||||
        enable =  mkEnableOption "nix-serve client";
 | 
					 | 
				
			||||||
        servers = mkOption {
 | 
					 | 
				
			||||||
          default = [ https://cache.nixos.org/ ];
 | 
					 | 
				
			||||||
          description = "List of nix-serve servers providing binary caches.";
 | 
					 | 
				
			||||||
          type = types.listOf types.str;
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      tinc = {
 | 
					 | 
				
			||||||
        enable = mkEnableOption "Enable tinc service.";
 | 
					 | 
				
			||||||
        dnsFQDN = mkOption {
 | 
					 | 
				
			||||||
          example = "device.example.net.";
 | 
					 | 
				
			||||||
          description = "DNS name of host pointing to tunnel IP.";
 | 
					 | 
				
			||||||
          type = lib.types.str;
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        connectToAddress = mkOption {
 | 
					 | 
				
			||||||
          default = "";
 | 
					 | 
				
			||||||
          example = "192.168.1.1";
 | 
					 | 
				
			||||||
          description = "External address to connect from another node.";
 | 
					 | 
				
			||||||
          type = lib.types.str;
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        vpnAddress = mkOption {
 | 
					 | 
				
			||||||
          example = "192.168.69.69/24";
 | 
					 | 
				
			||||||
          description = "VPN local node IP address.";
 | 
					 | 
				
			||||||
          type = lib.types.str;
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        vpnCidrLength = mkOption {
 | 
					 | 
				
			||||||
          default = 24;
 | 
					 | 
				
			||||||
          example = 24;
 | 
					 | 
				
			||||||
          description = "VPN netmask length.";
 | 
					 | 
				
			||||||
          type = lib.types.int;
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
        extraConfig = mkOption {
 | 
					 | 
				
			||||||
          default = "";
 | 
					 | 
				
			||||||
          example = ''
 | 
					 | 
				
			||||||
              Mode = router
 | 
					 | 
				
			||||||
              ConnecTo = bar
 | 
					 | 
				
			||||||
          '';
 | 
					 | 
				
			||||||
          description = "Configuration supplémentaire pour tinc.";
 | 
					 | 
				
			||||||
          type = lib.types.str;
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      quagga = {
 | 
					 | 
				
			||||||
        enable = mkEnableOption "Enable Quagga + BGP service";
 | 
					 | 
				
			||||||
        bgpConfig = mkOption {
 | 
					 | 
				
			||||||
          type = types.lines;
 | 
					 | 
				
			||||||
          default = "";
 | 
					 | 
				
			||||||
          example =''
 | 
					 | 
				
			||||||
              router bgp 65001
 | 
					 | 
				
			||||||
                neighbor 10.0.0.1 remote-as 65001
 | 
					 | 
				
			||||||
            '';
 | 
					 | 
				
			||||||
          description = ''
 | 
					 | 
				
			||||||
            BGP configuration statements.
 | 
					 | 
				
			||||||
          '';
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      windowsBoot = {
 | 
					 | 
				
			||||||
        enable = mkEnableOption "Activation du démarrage de Windows par Grub";
 | 
					 | 
				
			||||||
        drive = mkOption {
 | 
					 | 
				
			||||||
          description = "Lecteur sur lequel est présent le système Windows (au format GRUB)";
 | 
					 | 
				
			||||||
          type = lib.types.str;
 | 
					 | 
				
			||||||
          default = "hd0,1";
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
      windowsMount ={
 | 
					 | 
				
			||||||
        enable = mkEnableOption "Montage de la partition data Windows";
 | 
					 | 
				
			||||||
        device = mkOption {
 | 
					 | 
				
			||||||
          description = "Lecteur sur lequel est présent le disque de data Windows";
 | 
					 | 
				
			||||||
          type = lib.types.str;
 | 
					 | 
				
			||||||
          default = "/dev/sda2";
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      profiles = {
 | 
					 | 
				
			||||||
        # Domaine
 | 
					 | 
				
			||||||
        isDubronetwork        = mkEnableOption "Pour distinguer les machines dubronetwork.";
 | 
					 | 
				
			||||||
        isDubronetworkServer  = mkEnableOption "Pour distinguer les machines dubronetwork avec Server.";
 | 
					 | 
				
			||||||
        isDubronetworkWorkstation = mkEnableOption "Pour distinguer les machines dubronetwork avec Workstation.";
 | 
					 | 
				
			||||||
        isPrunetwork          = mkEnableOption "Pour distinguer les machines prunetwork.";
 | 
					 | 
				
			||||||
        isPrunetworkServer    = mkEnableOption "Pour distinguer les machines prunetwork avec Server.";
 | 
					 | 
				
			||||||
        isPrunetworkWorkstation = mkEnableOption "Pour distinguer les machines prunetwork avec Workstation.";
 | 
					 | 
				
			||||||
        # Utilisation machine
 | 
					 | 
				
			||||||
        isDesktopEnvironment  = mkEnableOption "Pour indiquer une machine avec interface graphique.";
 | 
					 | 
				
			||||||
        isServer              = mkEnableOption "Pour indiquer qu'il s'agit d'un serveur.";
 | 
					 | 
				
			||||||
        isWorkstation         = mkEnableOption "Pour indiquer que la machine sert à travailler.";
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  annuaire = config.r6d.machines;
 | 
					 | 
				
			||||||
  currentMachine = annuaire."${config.networking.fqdn}";
 | 
					 | 
				
			||||||
  flags = currentMachine.configurationFlags;
 | 
					 | 
				
			||||||
in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  options = {
 | 
					 | 
				
			||||||
    r6d.machines = mkOption {
 | 
					 | 
				
			||||||
      type = types.attrsOf machineOptions;
 | 
					 | 
				
			||||||
      description = ''
 | 
					 | 
				
			||||||
          Machines directory.
 | 
					 | 
				
			||||||
      '';
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  config = {
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     prototype : (expression A ) && tests || !(expression A) ->   réalise le test si A est satisfait, et continue sinon = pas de politique
 | 
					 | 
				
			||||||
    */
 | 
					 | 
				
			||||||
    assertions = [
 | 
					 | 
				
			||||||
     {
 | 
					 | 
				
			||||||
       assertion = (currentMachine.profiles.isWorkstation && (currentMachine.configurationFlags.graphical == true))
 | 
					 | 
				
			||||||
       || (!currentMachine.profiles.isWorkstation);
 | 
					 | 
				
			||||||
       message = "A workstation requires a graphical environement.";
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
     {
 | 
					 | 
				
			||||||
       assertion = (currentMachine.profiles.isDesktopEnvironment && (currentMachine.configurationFlags.graphical == true))
 | 
					 | 
				
			||||||
       || (!currentMachine.profiles.isDesktopEnvironment);
 | 
					 | 
				
			||||||
       message = "A desktop station requires a graphical environement.";
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
     {
 | 
					 | 
				
			||||||
       assertion = (currentMachine.profiles.isDesktopEnvironment && (config.services.xserver.enable == true))
 | 
					 | 
				
			||||||
                 || (!currentMachine.profiles.isDesktopEnvironment);
 | 
					 | 
				
			||||||
       message = "You need to enable xserver manually.";
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
     {
 | 
					 | 
				
			||||||
       assertion = (currentMachine.profiles.isServer  && (currentMachine.profiles.isDesktopEnvironment == false))
 | 
					 | 
				
			||||||
                 || (!currentMachine.profiles.isServer);
 | 
					 | 
				
			||||||
       message = "A graphical environment is not required for a server.";
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
     {
 | 
					 | 
				
			||||||
       /*  At least one (authorité or resolveur) */
 | 
					 | 
				
			||||||
       assertion = flags.dns_autorite || flags.dns_resolveur;
 | 
					 | 
				
			||||||
       message = "DNS service is disabled. You must enable a dns recursor or autoritative.";
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
     {
 | 
					 | 
				
			||||||
       /*  authorité xor resolveur */
 | 
					 | 
				
			||||||
       assertion = (flags.dns_autorite && ! flags.dns_resolveur)
 | 
					 | 
				
			||||||
                 || (!flags.dns_autorite && flags.dns_resolveur);
 | 
					 | 
				
			||||||
       message = "Both authoritative and recursor DNS services can't be live simultaneously. Choose only one!";
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					{ 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
 | 
				
			||||||
 | 
					    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
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					      #
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -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 profiles.isDesktop {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Paquets
 | 
				
			||||||
 | 
					  environment.systemPackages = with pkgs; [
 | 
				
			||||||
 | 
					    # Bureautique
 | 
				
			||||||
 | 
					    aspell aspellDicts.fr
 | 
				
			||||||
 | 
					    dia
 | 
				
			||||||
 | 
					    gnumeric
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## Cartes mentales
 | 
				
			||||||
 | 
					    freemind
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## Editeur de texte
 | 
				
			||||||
 | 
					    lyx           # surcouche WISIWIM à LaTeX
 | 
				
			||||||
 | 
					    textadept     # un éditeur de texte facile pour copier-coller graphique
 | 
				
			||||||
 | 
					    zim           # outil de prise de notes, wiki de bureau
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## Visionneuse
 | 
				
			||||||
 | 
					    kde5.okular   # pdf
 | 
				
			||||||
 | 
					    mcomix        # livres (cbr, liste d'images), gestion d'une bibliothèque
 | 
				
			||||||
 | 
					    pdfpc         # pdf
 | 
				
			||||||
 | 
					    qpdfview      # pdf
 | 
				
			||||||
 | 
					    gqview        # visionneuse image & gestion basique de collection
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## Convertisseurs (texte -> <autre format>)
 | 
				
			||||||
 | 
					    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
 | 
				
			||||||
 | 
					    pandoc
 | 
				
			||||||
 | 
					    texLiveFull   # distribution LaTeX
 | 
				
			||||||
 | 
					    #texLive       # distribution LaTeX de base
 | 
				
			||||||
 | 
					    #texLiveBeamer # paquets et extensions pour Beamer
 | 
				
			||||||
 | 
					    #texLiveModerncv # paquets pour la classe Modern CV
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					{ config, lib, pkgs, ... }:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let
 | 
				
			||||||
 | 
					  inherit (lib) mkIf mkMerge mkThenElse;
 | 
				
			||||||
 | 
					  cfg = config.r6d.config-generator;
 | 
				
			||||||
 | 
					  computers = config.r6d.computers;
 | 
				
			||||||
 | 
					  profiles = config.r6d.profiles;
 | 
				
			||||||
 | 
					in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mkIf profiles.isDesktop {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Paquets
 | 
				
			||||||
 | 
					environment.systemPackages = with pkgs; [
 | 
				
			||||||
 | 
					    # Clients Internet
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## Navigateur
 | 
				
			||||||
 | 
					    chromium
 | 
				
			||||||
 | 
					    firefox
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## Réseaux sociaux
 | 
				
			||||||
 | 
					    python27Packages.turses           # client twitter en ncurse
 | 
				
			||||||
 | 
					    python27Packages.rainbowstream    # client twitter en console
 | 
				
			||||||
 | 
					    rtv                               # client reddit en console
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ## Mail & Discussion (texte, audio)
 | 
				
			||||||
 | 
					    clawsMail
 | 
				
			||||||
 | 
					    hexchat
 | 
				
			||||||
 | 
					    kde5.quasselClient
 | 
				
			||||||
 | 
					    mumble
 | 
				
			||||||
 | 
					    mutt
 | 
				
			||||||
 | 
					    pidgin
 | 
				
			||||||
 | 
					    thunderbird
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Transfert de fichier
 | 
				
			||||||
 | 
					    filezilla
 | 
				
			||||||
 | 
					    transmission_gtk
 | 
				
			||||||
 | 
					    transmission_remote_gtk
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					{ 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
 | 
				
			||||||
 | 
					    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
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -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
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -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.jeux {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Paquets
 | 
				
			||||||
 | 
					  environment.systemPackages = with pkgs; [
 | 
				
			||||||
 | 
					    # Jeux
 | 
				
			||||||
 | 
					    urbanterror
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -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
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -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 profiles.isDesktop {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Paquets
 | 
				
			||||||
 | 
					  environment.systemPackages = with pkgs; [
 | 
				
			||||||
 | 
					    # Securité
 | 
				
			||||||
 | 
					    gnome3.seahorse # gestionnaire graphique de clef GPG
 | 
				
			||||||
 | 
					    pass            # gestionnaire de mots de passe
 | 
				
			||||||
 | 
					    pwgen           # générateur de mots de passe
 | 
				
			||||||
 | 
					    slock           # vérouiller l''écran. "cannot disable the out-of-memory killer for this process (make sure to suid or sgid slock)" --> en root
 | 
				
			||||||
 | 
					    yubikey-personalization-gui # utilisation de la clef Yubikey
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -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;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,470 +0,0 @@
 | 
				
			|||||||
-- ~home : .config/awesome/rc.lua
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Standard awesome library
 | 
					 | 
				
			||||||
local gears = require("gears")
 | 
					 | 
				
			||||||
local awful = require("awful")
 | 
					 | 
				
			||||||
awful.rules = require("awful.rules")
 | 
					 | 
				
			||||||
require("awful.autofocus")
 | 
					 | 
				
			||||||
-- Widget and layout library
 | 
					 | 
				
			||||||
local wibox = require("wibox")
 | 
					 | 
				
			||||||
-- Theme handling library
 | 
					 | 
				
			||||||
local beautiful = require("beautiful")
 | 
					 | 
				
			||||||
-- Notification library
 | 
					 | 
				
			||||||
local naughty = require("naughty")
 | 
					 | 
				
			||||||
local menubar = require("menubar")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Error handling
 | 
					 | 
				
			||||||
-- Check if awesome encountered an error during startup and fell back to
 | 
					 | 
				
			||||||
-- another config (This code will only ever execute for the fallback config)
 | 
					 | 
				
			||||||
if awesome.startup_errors then
 | 
					 | 
				
			||||||
    naughty.notify({ preset = naughty.config.presets.critical,
 | 
					 | 
				
			||||||
                     title = "Oops, there were errors during startup!",
 | 
					 | 
				
			||||||
                     text = awesome.startup_errors })
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Handle runtime errors after startup
 | 
					 | 
				
			||||||
do
 | 
					 | 
				
			||||||
    local in_error = false
 | 
					 | 
				
			||||||
    awesome.connect_signal("debug::error", function (err)
 | 
					 | 
				
			||||||
        -- Make sure we don't go into an endless error loop
 | 
					 | 
				
			||||||
        if in_error then return end
 | 
					 | 
				
			||||||
        in_error = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        naughty.notify({ preset = naughty.config.presets.critical,
 | 
					 | 
				
			||||||
                         title = "Oops, an error happened!",
 | 
					 | 
				
			||||||
                         text = err })
 | 
					 | 
				
			||||||
        in_error = false
 | 
					 | 
				
			||||||
    end)
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Variable definitions
 | 
					 | 
				
			||||||
-- Themes define colours, icons, font and wallpapers.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local config_dir = os.getenv("AWESOME_CONFIG_DIR")
 | 
					 | 
				
			||||||
beautiful.init(config_dir .. "/share/awesome/themes/zenburn/theme.lua")
 | 
					 | 
				
			||||||
-- beautiful.init("/nix/store/vpj4i2vmqbinqfcigy44xzh81k9h0mv8-awesome-3.5.8/share/awesome/themes/zenburn/theme.lua")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- This is used later as the default terminal and editor to run.
 | 
					 | 
				
			||||||
terminal = "sakura"
 | 
					 | 
				
			||||||
editor = os.getenv("EDITOR") or "vim"
 | 
					 | 
				
			||||||
editor_cmd = terminal .. " -e " .. editor
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Default modkey.
 | 
					 | 
				
			||||||
-- Usually, Mod4 is the key with a logo between Control and Alt.
 | 
					 | 
				
			||||||
-- If you do not like this or do not have such a key,
 | 
					 | 
				
			||||||
-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
 | 
					 | 
				
			||||||
-- However, you can use another modifier like Mod1, but it may interact with others.
 | 
					 | 
				
			||||||
modkey = "Mod4"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Table of layouts to cover with awful.layout.inc, order matters.
 | 
					 | 
				
			||||||
local layouts =
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	awful.layout.suit.fair,
 | 
					 | 
				
			||||||
	awful.layout.suit.fair.horizontal,
 | 
					 | 
				
			||||||
	awful.layout.suit.max.fullscreen,
 | 
					 | 
				
			||||||
	awful.layout.suit.spiral,
 | 
					 | 
				
			||||||
	awful.layout.suit.spiral.dwindle,
 | 
					 | 
				
			||||||
	awful.layout.suit.max,
 | 
					 | 
				
			||||||
	awful.layout.suit.floating,
 | 
					 | 
				
			||||||
	awful.layout.suit.tile,
 | 
					 | 
				
			||||||
	awful.layout.suit.tile.left,
 | 
					 | 
				
			||||||
	awful.layout.suit.tile.bottom,
 | 
					 | 
				
			||||||
	awful.layout.suit.tile.top,
 | 
					 | 
				
			||||||
	awful.layout.suit.magnifier
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Wallpaper
 | 
					 | 
				
			||||||
if beautiful.wallpaper then
 | 
					 | 
				
			||||||
    for s = 1, screen.count() do
 | 
					 | 
				
			||||||
        gears.wallpaper.maximized(beautiful.wallpaper, s, true)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Tags
 | 
					 | 
				
			||||||
-- Define a tag table which hold all screen tags.
 | 
					 | 
				
			||||||
tags = {}
 | 
					 | 
				
			||||||
for s = 1, screen.count() do
 | 
					 | 
				
			||||||
    -- Each screen has its own tag table.
 | 
					 | 
				
			||||||
    tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[1])
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Menu
 | 
					 | 
				
			||||||
-- Create a laucher widget and a main menu
 | 
					 | 
				
			||||||
myawesomemenu = {
 | 
					 | 
				
			||||||
   { "manual", terminal .. " -e man awesome" },
 | 
					 | 
				
			||||||
   { "edit config", editor_cmd .. " " .. awesome.conffile },
 | 
					 | 
				
			||||||
   { "restart", awesome.restart },
 | 
					 | 
				
			||||||
   { "quit", awesome.quit }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
 | 
					 | 
				
			||||||
                                    { "open terminal", terminal }
 | 
					 | 
				
			||||||
                                  }
 | 
					 | 
				
			||||||
                        })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
 | 
					 | 
				
			||||||
                                     menu = mymainmenu })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Menubar configuration
 | 
					 | 
				
			||||||
menubar.utils.terminal = terminal -- Set the terminal for applications that require it
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Wibox
 | 
					 | 
				
			||||||
-- Create a textclock widget
 | 
					 | 
				
			||||||
mytextclock = awful.widget.textclock()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Create a wibox for each screen and add it
 | 
					 | 
				
			||||||
mywibox = {}
 | 
					 | 
				
			||||||
mypromptbox = {}
 | 
					 | 
				
			||||||
mylayoutbox = {}
 | 
					 | 
				
			||||||
mytaglist = {}
 | 
					 | 
				
			||||||
mytaglist.buttons = awful.util.table.join(
 | 
					 | 
				
			||||||
                    awful.button({ }, 1, awful.tag.viewonly),
 | 
					 | 
				
			||||||
                    awful.button({ modkey }, 1, awful.client.movetotag),
 | 
					 | 
				
			||||||
                    awful.button({ }, 3, awful.tag.viewtoggle),
 | 
					 | 
				
			||||||
                    awful.button({ modkey }, 3, awful.client.toggletag),
 | 
					 | 
				
			||||||
                    awful.button({ }, 4, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end),
 | 
					 | 
				
			||||||
                    awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end)
 | 
					 | 
				
			||||||
                    )
 | 
					 | 
				
			||||||
mytasklist = {}
 | 
					 | 
				
			||||||
mytasklist.buttons = awful.util.table.join(
 | 
					 | 
				
			||||||
                     awful.button({ }, 1, function (c)
 | 
					 | 
				
			||||||
                                              if c == client.focus then
 | 
					 | 
				
			||||||
                                                  c.minimized = true
 | 
					 | 
				
			||||||
                                              else
 | 
					 | 
				
			||||||
                                                  -- Without this, the following
 | 
					 | 
				
			||||||
                                                  -- :isvisible() makes no sense
 | 
					 | 
				
			||||||
                                                  c.minimized = false
 | 
					 | 
				
			||||||
                                                  if not c:isvisible() then
 | 
					 | 
				
			||||||
                                                      awful.tag.viewonly(c:tags()[1])
 | 
					 | 
				
			||||||
                                                  end
 | 
					 | 
				
			||||||
                                                  -- This will also un-minimize
 | 
					 | 
				
			||||||
                                                  -- the client, if needed
 | 
					 | 
				
			||||||
                                                  client.focus = c
 | 
					 | 
				
			||||||
                                                  c:raise()
 | 
					 | 
				
			||||||
                                              end
 | 
					 | 
				
			||||||
                                          end),
 | 
					 | 
				
			||||||
                     awful.button({ }, 3, function ()
 | 
					 | 
				
			||||||
                                              if instance then
 | 
					 | 
				
			||||||
                                                  instance:hide()
 | 
					 | 
				
			||||||
                                                  instance = nil
 | 
					 | 
				
			||||||
                                              else
 | 
					 | 
				
			||||||
                                                  instance = awful.menu.clients({
 | 
					 | 
				
			||||||
                                                      theme = { width = 250 }
 | 
					 | 
				
			||||||
                                                  })
 | 
					 | 
				
			||||||
                                              end
 | 
					 | 
				
			||||||
                                          end),
 | 
					 | 
				
			||||||
                     awful.button({ }, 4, function ()
 | 
					 | 
				
			||||||
                                              awful.client.focus.byidx(1)
 | 
					 | 
				
			||||||
                                              if client.focus then client.focus:raise() end
 | 
					 | 
				
			||||||
                                          end),
 | 
					 | 
				
			||||||
                     awful.button({ }, 5, function ()
 | 
					 | 
				
			||||||
                                              awful.client.focus.byidx(-1)
 | 
					 | 
				
			||||||
                                              if client.focus then client.focus:raise() end
 | 
					 | 
				
			||||||
                                          end))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
for s = 1, screen.count() do
 | 
					 | 
				
			||||||
    -- Create a promptbox for each screen
 | 
					 | 
				
			||||||
    mypromptbox[s] = awful.widget.prompt()
 | 
					 | 
				
			||||||
    -- Create an imagebox widget which will contains an icon indicating which layout we're using.
 | 
					 | 
				
			||||||
    -- We need one layoutbox per screen.
 | 
					 | 
				
			||||||
    mylayoutbox[s] = awful.widget.layoutbox(s)
 | 
					 | 
				
			||||||
    mylayoutbox[s]:buttons(awful.util.table.join(
 | 
					 | 
				
			||||||
                           awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end),
 | 
					 | 
				
			||||||
                           awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end),
 | 
					 | 
				
			||||||
                           awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end),
 | 
					 | 
				
			||||||
                           awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end)))
 | 
					 | 
				
			||||||
    -- Create a taglist widget
 | 
					 | 
				
			||||||
    mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.filter.all, mytaglist.buttons)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    -- Create a tasklist widget
 | 
					 | 
				
			||||||
    mytasklist[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, mytasklist.buttons)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    -- Create the wibox
 | 
					 | 
				
			||||||
    mywibox[s] = awful.wibox({ position = "top", screen = s })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    -- Widgets that are aligned to the left
 | 
					 | 
				
			||||||
    local left_layout = wibox.layout.fixed.horizontal()
 | 
					 | 
				
			||||||
    left_layout:add(mylauncher)
 | 
					 | 
				
			||||||
    left_layout:add(mytaglist[s])
 | 
					 | 
				
			||||||
    left_layout:add(mypromptbox[s])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    -- Widgets that are aligned to the right
 | 
					 | 
				
			||||||
    local right_layout = wibox.layout.fixed.horizontal()
 | 
					 | 
				
			||||||
    if s == 1 then right_layout:add(wibox.widget.systray()) end
 | 
					 | 
				
			||||||
    right_layout:add(mytextclock)
 | 
					 | 
				
			||||||
    right_layout:add(mylayoutbox[s])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    -- Now bring it all together (with the tasklist in the middle)
 | 
					 | 
				
			||||||
    local layout = wibox.layout.align.horizontal()
 | 
					 | 
				
			||||||
    layout:set_left(left_layout)
 | 
					 | 
				
			||||||
    layout:set_middle(mytasklist[s])
 | 
					 | 
				
			||||||
    layout:set_right(right_layout)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    mywibox[s]:set_widget(layout)
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Mouse bindings
 | 
					 | 
				
			||||||
root.buttons(awful.util.table.join(
 | 
					 | 
				
			||||||
    awful.button({ }, 3, function () mymainmenu:toggle() end),
 | 
					 | 
				
			||||||
    awful.button({ }, 4, awful.tag.viewnext),
 | 
					 | 
				
			||||||
    awful.button({ }, 5, awful.tag.viewprev)
 | 
					 | 
				
			||||||
))
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Key bindings
 | 
					 | 
				
			||||||
globalkeys = awful.util.table.join(
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "Left",   awful.tag.viewprev       ),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "Right",  awful.tag.viewnext       ),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "Escape", awful.tag.history.restore),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "j",
 | 
					 | 
				
			||||||
        function ()
 | 
					 | 
				
			||||||
            awful.client.focus.byidx( 1)
 | 
					 | 
				
			||||||
            if client.focus then client.focus:raise() end
 | 
					 | 
				
			||||||
        end),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "k",
 | 
					 | 
				
			||||||
        function ()
 | 
					 | 
				
			||||||
            awful.client.focus.byidx(-1)
 | 
					 | 
				
			||||||
            if client.focus then client.focus:raise() end
 | 
					 | 
				
			||||||
        end),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "w", function () mymainmenu:show() end),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    -- Layout manipulation
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "j", function () awful.client.swap.byidx(  1)    end),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "k", function () awful.client.swap.byidx( -1)    end),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "u", awful.client.urgent.jumpto),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "Tab",
 | 
					 | 
				
			||||||
        function ()
 | 
					 | 
				
			||||||
            awful.client.focus.history.previous()
 | 
					 | 
				
			||||||
            if client.focus then
 | 
					 | 
				
			||||||
                client.focus:raise()
 | 
					 | 
				
			||||||
            end
 | 
					 | 
				
			||||||
        end),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    -- Standard program
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "Return", function () awful.util.spawn(terminal) end),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "r", awesome.restart),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "q", awesome.quit),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "l",     function () awful.tag.incmwfact( 0.05)    end),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "h",     function () awful.tag.incmwfact(-0.05)    end),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "h",     function () awful.tag.incnmaster( 1)      end),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "l",     function () awful.tag.incnmaster(-1)      end),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "h",     function () awful.tag.incncol( 1)         end),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "l",     function () awful.tag.incncol(-1)         end),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "space", function () awful.layout.inc(layouts,  1) end),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "space", function () awful.layout.inc(layouts, -1) end),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "n", awful.client.restore),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    -- Prompt
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "r",     function () mypromptbox[mouse.screen]:run() end),
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "x",
 | 
					 | 
				
			||||||
              function ()
 | 
					 | 
				
			||||||
                  awful.prompt.run({ prompt = "Run Lua code: " },
 | 
					 | 
				
			||||||
                  mypromptbox[mouse.screen].widget,
 | 
					 | 
				
			||||||
                  awful.util.eval, nil,
 | 
					 | 
				
			||||||
                  awful.util.getdir("cache") .. "/history_eval")
 | 
					 | 
				
			||||||
              end),
 | 
					 | 
				
			||||||
    -- Menubar
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "p",  function() menubar.show() end),
 | 
					 | 
				
			||||||
    -- Lanceurs perso
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "F1", function () awful.util.spawn("kontact") end),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "F1", function () awful.util.spawn("claws-mail") end),
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "F2", function () awful.util.spawn("firefox") end),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "F2", function () awful.util.spawn("uzbl-tabbed") end),
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "F3", function () awful.util.spawn("spacefm") end),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "F3", function () awful.util.spawn("pcmanfm") end),
 | 
					 | 
				
			||||||
--  awful.key({ modkey            }, "F11", function () awful.util.spawn("/home/taeradan/bin/xrandr-auto") end),
 | 
					 | 
				
			||||||
--  awful.key({ modkey, "Shift"   }, "F11", function () awful.util.spawn("/home/taeradan/bin/xrandr-left") end),
 | 
					 | 
				
			||||||
--  awful.key({ modkey, "Control" }, "F11", function () awful.util.spawn("/home/taeradan/bin/xrandr-right") end),
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "F12", function () awful.util.spawn("slock") end)
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
clientkeys = awful.util.table.join(
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "f",      function (c) c.fullscreen = not c.fullscreen  end),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "c",      function (c) c:kill()                         end),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "space",  awful.client.floating.toggle                     ),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "o",      awful.client.movetoscreen                        ),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "t",      function (c) c.ontop = not c.ontop            end),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "n",
 | 
					 | 
				
			||||||
        function (c)
 | 
					 | 
				
			||||||
            -- The client currently has the input focus, so it cannot be
 | 
					 | 
				
			||||||
            -- minimized, since minimized clients can't have the focus.
 | 
					 | 
				
			||||||
            c.minimized = true
 | 
					 | 
				
			||||||
        end),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "m",
 | 
					 | 
				
			||||||
        function (c)
 | 
					 | 
				
			||||||
            c.maximized_horizontal = not c.maximized_horizontal
 | 
					 | 
				
			||||||
            c.maximized_vertical   = not c.maximized_vertical
 | 
					 | 
				
			||||||
        end)
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Bind all key numbers to tags.
 | 
					 | 
				
			||||||
-- Be careful: we use keycodes to make it works on any keyboard layout.
 | 
					 | 
				
			||||||
-- This should map on the top row of your keyboard, usually 1 to 9.
 | 
					 | 
				
			||||||
for i = 1, 9 do
 | 
					 | 
				
			||||||
    globalkeys = awful.util.table.join(globalkeys,
 | 
					 | 
				
			||||||
        -- View tag only.
 | 
					 | 
				
			||||||
        awful.key({ modkey }, "#" .. i + 9,
 | 
					 | 
				
			||||||
                  function ()
 | 
					 | 
				
			||||||
                        local screen = mouse.screen
 | 
					 | 
				
			||||||
                        local tag = awful.tag.gettags(screen)[i]
 | 
					 | 
				
			||||||
                        if tag then
 | 
					 | 
				
			||||||
                           awful.tag.viewonly(tag)
 | 
					 | 
				
			||||||
                        end
 | 
					 | 
				
			||||||
                  end),
 | 
					 | 
				
			||||||
        -- Toggle tag.
 | 
					 | 
				
			||||||
        awful.key({ modkey, "Control" }, "#" .. i + 9,
 | 
					 | 
				
			||||||
                  function ()
 | 
					 | 
				
			||||||
                      local screen = mouse.screen
 | 
					 | 
				
			||||||
                      local tag = awful.tag.gettags(screen)[i]
 | 
					 | 
				
			||||||
                      if tag then
 | 
					 | 
				
			||||||
                         awful.tag.viewtoggle(tag)
 | 
					 | 
				
			||||||
                      end
 | 
					 | 
				
			||||||
                  end),
 | 
					 | 
				
			||||||
        -- Move client to tag.
 | 
					 | 
				
			||||||
        awful.key({ modkey, "Shift" }, "#" .. i + 9,
 | 
					 | 
				
			||||||
                  function ()
 | 
					 | 
				
			||||||
                      if client.focus then
 | 
					 | 
				
			||||||
                          local tag = awful.tag.gettags(client.focus.screen)[i]
 | 
					 | 
				
			||||||
                          if tag then
 | 
					 | 
				
			||||||
                              awful.client.movetotag(tag)
 | 
					 | 
				
			||||||
                          end
 | 
					 | 
				
			||||||
                     end
 | 
					 | 
				
			||||||
                  end),
 | 
					 | 
				
			||||||
        -- Toggle tag.
 | 
					 | 
				
			||||||
        awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
 | 
					 | 
				
			||||||
                  function ()
 | 
					 | 
				
			||||||
                      if client.focus then
 | 
					 | 
				
			||||||
                          local tag = awful.tag.gettags(client.focus.screen)[i]
 | 
					 | 
				
			||||||
                          if tag then
 | 
					 | 
				
			||||||
                              awful.client.toggletag(tag)
 | 
					 | 
				
			||||||
                          end
 | 
					 | 
				
			||||||
                      end
 | 
					 | 
				
			||||||
                  end))
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
clientbuttons = awful.util.table.join(
 | 
					 | 
				
			||||||
    awful.button({ }, 1, function (c) client.focus = c; c:raise() end),
 | 
					 | 
				
			||||||
    awful.button({ modkey }, 1, awful.mouse.client.move),
 | 
					 | 
				
			||||||
    awful.button({ modkey }, 3, awful.mouse.client.resize)
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Set keys
 | 
					 | 
				
			||||||
root.keys(globalkeys)
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Rules
 | 
					 | 
				
			||||||
-- Rules to apply to new clients (through the "manage" signal).
 | 
					 | 
				
			||||||
awful.rules.rules = {
 | 
					 | 
				
			||||||
    -- All clients will match this rule.
 | 
					 | 
				
			||||||
    { rule = { },
 | 
					 | 
				
			||||||
      properties = { border_width = beautiful.border_width,
 | 
					 | 
				
			||||||
                     border_color = beautiful.border_normal,
 | 
					 | 
				
			||||||
                     focus = awful.client.focus.filter,
 | 
					 | 
				
			||||||
                     raise = true,
 | 
					 | 
				
			||||||
                     keys = clientkeys,
 | 
					 | 
				
			||||||
                     buttons = clientbuttons }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {   rule = { class = "MPlayer" },
 | 
					 | 
				
			||||||
        properties = { floating = true }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {   rule = { class = "pinentry" },
 | 
					 | 
				
			||||||
        properties = { floating = true }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {   rule = { class = "gimp" },
 | 
					 | 
				
			||||||
        properties = { floating = true }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    -- Set Firefox to always map on tags number 2 of screen 1.
 | 
					 | 
				
			||||||
    -- { rule = { class = "Firefox" },
 | 
					 | 
				
			||||||
    --   properties = { tag = tags[1][2] } },
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Signals
 | 
					 | 
				
			||||||
-- Signal function to execute when a new client appears.
 | 
					 | 
				
			||||||
client.connect_signal("manage", function (c, startup)
 | 
					 | 
				
			||||||
    -- Enable sloppy focus
 | 
					 | 
				
			||||||
    c:connect_signal("mouse::enter", function(c)
 | 
					 | 
				
			||||||
        if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
 | 
					 | 
				
			||||||
            and awful.client.focus.filter(c) then
 | 
					 | 
				
			||||||
            client.focus = c
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
    end)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if not startup then
 | 
					 | 
				
			||||||
        -- Set the windows at the slave,
 | 
					 | 
				
			||||||
        -- i.e. put it at the end of others instead of setting it master.
 | 
					 | 
				
			||||||
        -- awful.client.setslave(c)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        -- Put windows in a smart way, only if they does not set an initial position.
 | 
					 | 
				
			||||||
        if not c.size_hints.user_position and not c.size_hints.program_position then
 | 
					 | 
				
			||||||
            awful.placement.no_overlap(c)
 | 
					 | 
				
			||||||
            awful.placement.no_offscreen(c)
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    local titlebars_enabled = false
 | 
					 | 
				
			||||||
    if titlebars_enabled and (c.type == "normal" or c.type == "dialog") then
 | 
					 | 
				
			||||||
        -- buttons for the titlebar
 | 
					 | 
				
			||||||
        local buttons = awful.util.table.join(
 | 
					 | 
				
			||||||
                awful.button({ }, 1, function()
 | 
					 | 
				
			||||||
                    client.focus = c
 | 
					 | 
				
			||||||
                    c:raise()
 | 
					 | 
				
			||||||
                    awful.mouse.client.move(c)
 | 
					 | 
				
			||||||
                end),
 | 
					 | 
				
			||||||
                awful.button({ }, 3, function()
 | 
					 | 
				
			||||||
                    client.focus = c
 | 
					 | 
				
			||||||
                    c:raise()
 | 
					 | 
				
			||||||
                    awful.mouse.client.resize(c)
 | 
					 | 
				
			||||||
                end)
 | 
					 | 
				
			||||||
                )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        -- Widgets that are aligned to the left
 | 
					 | 
				
			||||||
        local left_layout = wibox.layout.fixed.horizontal()
 | 
					 | 
				
			||||||
        left_layout:add(awful.titlebar.widget.iconwidget(c))
 | 
					 | 
				
			||||||
        left_layout:buttons(buttons)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        -- Widgets that are aligned to the right
 | 
					 | 
				
			||||||
        local right_layout = wibox.layout.fixed.horizontal()
 | 
					 | 
				
			||||||
        right_layout:add(awful.titlebar.widget.floatingbutton(c))
 | 
					 | 
				
			||||||
        right_layout:add(awful.titlebar.widget.maximizedbutton(c))
 | 
					 | 
				
			||||||
        right_layout:add(awful.titlebar.widget.stickybutton(c))
 | 
					 | 
				
			||||||
        right_layout:add(awful.titlebar.widget.ontopbutton(c))
 | 
					 | 
				
			||||||
        right_layout:add(awful.titlebar.widget.closebutton(c))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        -- The title goes in the middle
 | 
					 | 
				
			||||||
        local middle_layout = wibox.layout.flex.horizontal()
 | 
					 | 
				
			||||||
        local title = awful.titlebar.widget.titlewidget(c)
 | 
					 | 
				
			||||||
        title:set_align("center")
 | 
					 | 
				
			||||||
        middle_layout:add(title)
 | 
					 | 
				
			||||||
        middle_layout:buttons(buttons)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        -- Now bring it all together
 | 
					 | 
				
			||||||
        local layout = wibox.layout.align.horizontal()
 | 
					 | 
				
			||||||
        layout:set_left(left_layout)
 | 
					 | 
				
			||||||
        layout:set_right(right_layout)
 | 
					 | 
				
			||||||
        layout:set_middle(middle_layout)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        awful.titlebar(c):set_widget(layout)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
end)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end)
 | 
					 | 
				
			||||||
client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Au démarrage
 | 
					 | 
				
			||||||
-- awful.util.spawn_with_shell("/home/taeradan/bin/xrandr-auto")
 | 
					 | 
				
			||||||
-- awful.util.spawn_with_shell("gnome-sound-applet")
 | 
					 | 
				
			||||||
-- awful.util.spawn_with_shell("nm-applet")
 | 
					 | 
				
			||||||
@ -1,654 +0,0 @@
 | 
				
			|||||||
-- $HOME : .config/awesome/rc.lua
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Standard awesome library
 | 
					 | 
				
			||||||
local gears = require("gears")
 | 
					 | 
				
			||||||
local awful = require("awful")
 | 
					 | 
				
			||||||
awful.rules = require("awful.rules")
 | 
					 | 
				
			||||||
require("awful.autofocus")
 | 
					 | 
				
			||||||
-- Widget and layout library
 | 
					 | 
				
			||||||
local wibox = require("wibox")
 | 
					 | 
				
			||||||
-- Theme handling library
 | 
					 | 
				
			||||||
local beautiful = require("beautiful")
 | 
					 | 
				
			||||||
-- Notification library
 | 
					 | 
				
			||||||
local naughty = require("naughty")
 | 
					 | 
				
			||||||
local menubar = require("menubar")
 | 
					 | 
				
			||||||
local hotkeys_popup = require("awful.hotkeys_popup").widget
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Error handling
 | 
					 | 
				
			||||||
-- Check if awesome encountered an error during startup and fell back to
 | 
					 | 
				
			||||||
-- another config (This code will only ever execute for the fallback config)
 | 
					 | 
				
			||||||
if awesome.startup_errors then
 | 
					 | 
				
			||||||
    naughty.notify({
 | 
					 | 
				
			||||||
      preset = naughty.config.presets.critical,
 | 
					 | 
				
			||||||
      title = "Oops, there were errors during startup!",
 | 
					 | 
				
			||||||
      text = awesome.startup_errors
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Handle runtime errors after startup
 | 
					 | 
				
			||||||
do
 | 
					 | 
				
			||||||
    local in_error = false
 | 
					 | 
				
			||||||
    awesome.connect_signal("debug::error", function (err)
 | 
					 | 
				
			||||||
        -- Make sure we don't go into an endless error loop
 | 
					 | 
				
			||||||
        if in_error then return end
 | 
					 | 
				
			||||||
        in_error = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        naughty.notify({
 | 
					 | 
				
			||||||
            preset = naughty.config.presets.critical,
 | 
					 | 
				
			||||||
            title = "Oops, an error happened!",
 | 
					 | 
				
			||||||
            text = tostring(err)
 | 
					 | 
				
			||||||
          })
 | 
					 | 
				
			||||||
        in_error = false
 | 
					 | 
				
			||||||
    end)
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Variable definitions
 | 
					 | 
				
			||||||
-- Themes define colours, icons, font and wallpapers.
 | 
					 | 
				
			||||||
local config_dir = os.getenv("AWESOME_CONFIG_DIR")
 | 
					 | 
				
			||||||
beautiful.init(config_dir .. "/share/awesome/themes/zenburn/theme.lua")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- This is used later as the default terminal and editor to run.
 | 
					 | 
				
			||||||
terminal = "sakura"
 | 
					 | 
				
			||||||
editor = os.getenv("EDITOR") or "vim"
 | 
					 | 
				
			||||||
editor_cmd = terminal .. " -e " .. editor
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Default modkey.
 | 
					 | 
				
			||||||
-- Usually, Mod4 is the key with a logo between Control and Alt.
 | 
					 | 
				
			||||||
-- If you do not like this or do not have such a key,
 | 
					 | 
				
			||||||
-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
 | 
					 | 
				
			||||||
-- However, you can use another modifier like Mod1, but it may interact with others.
 | 
					 | 
				
			||||||
modkey = "Mod4"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Table of layouts to cover with awful.layout.inc, order matters.
 | 
					 | 
				
			||||||
awful.layout.layouts = {
 | 
					 | 
				
			||||||
    awful.layout.suit.corner.nw,
 | 
					 | 
				
			||||||
    awful.layout.suit.tile,
 | 
					 | 
				
			||||||
    awful.layout.suit.tile.left,
 | 
					 | 
				
			||||||
    awful.layout.suit.tile.bottom,
 | 
					 | 
				
			||||||
    awful.layout.suit.tile.top,
 | 
					 | 
				
			||||||
    awful.layout.suit.fair,
 | 
					 | 
				
			||||||
    awful.layout.suit.fair.horizontal,
 | 
					 | 
				
			||||||
    awful.layout.suit.spiral,
 | 
					 | 
				
			||||||
    awful.layout.suit.spiral.dwindle,
 | 
					 | 
				
			||||||
    awful.layout.suit.max,
 | 
					 | 
				
			||||||
    awful.layout.suit.max.fullscreen,
 | 
					 | 
				
			||||||
    awful.layout.suit.magnifier,
 | 
					 | 
				
			||||||
    awful.layout.suit.floating,
 | 
					 | 
				
			||||||
    -- awful.layout.suit.corner.ne,
 | 
					 | 
				
			||||||
    -- awful.layout.suit.corner.sw,
 | 
					 | 
				
			||||||
    -- awful.layout.suit.corner.se,
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Helper functions
 | 
					 | 
				
			||||||
local function client_menu_toggle_fn()
 | 
					 | 
				
			||||||
    local instance = nil
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return function ()
 | 
					 | 
				
			||||||
        if instance and instance.wibox.visible then
 | 
					 | 
				
			||||||
            instance:hide()
 | 
					 | 
				
			||||||
            instance = nil
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
            instance = awful.menu.clients({ theme = { width = 250 } })
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Menu
 | 
					 | 
				
			||||||
-- Create a launcher widget and a main menu
 | 
					 | 
				
			||||||
myawesomemenu = {
 | 
					 | 
				
			||||||
    { "hotkeys", function() return false, hotkeys_popup.show_help end},
 | 
					 | 
				
			||||||
    { "manual", terminal .. " -e man awesome" },
 | 
					 | 
				
			||||||
    { "edit config", editor_cmd .. " " .. awesome.conffile },
 | 
					 | 
				
			||||||
    { "restart", awesome.restart },
 | 
					 | 
				
			||||||
    { "quit", function() awesome.quit() end}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mymainmenu = awful.menu({
 | 
					 | 
				
			||||||
    items = {
 | 
					 | 
				
			||||||
        { "awesome", myawesomemenu, beautiful.awesome_icon },
 | 
					 | 
				
			||||||
        { "open terminal", terminal }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mylauncher = awful.widget.launcher({
 | 
					 | 
				
			||||||
    image = beautiful.awesome_icon,
 | 
					 | 
				
			||||||
    menu = mymainmenu
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Menubar configuration
 | 
					 | 
				
			||||||
menubar.utils.terminal = terminal -- Set the terminal for applications that require it
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Keyboard map indicator and switcher
 | 
					 | 
				
			||||||
mykeyboardlayout = awful.widget.keyboardlayout()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Wibar
 | 
					 | 
				
			||||||
-- Create a textclock widget
 | 
					 | 
				
			||||||
mytextclock = wibox.widget.textclock()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Create a wibox for each screen and add it
 | 
					 | 
				
			||||||
local taglist_buttons = awful.util.table.join(
 | 
					 | 
				
			||||||
    awful.button(
 | 
					 | 
				
			||||||
        { },
 | 
					 | 
				
			||||||
        1,
 | 
					 | 
				
			||||||
        function(t) t:view_only() end
 | 
					 | 
				
			||||||
    ),
 | 
					 | 
				
			||||||
    awful.button(
 | 
					 | 
				
			||||||
        { modkey },
 | 
					 | 
				
			||||||
        1,
 | 
					 | 
				
			||||||
        function(t)
 | 
					 | 
				
			||||||
            if client.focus then
 | 
					 | 
				
			||||||
                client.focus:move_to_tag(t)
 | 
					 | 
				
			||||||
            end
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
    ),
 | 
					 | 
				
			||||||
    awful.button(
 | 
					 | 
				
			||||||
        { },
 | 
					 | 
				
			||||||
        3,
 | 
					 | 
				
			||||||
        awful.tag.viewtoggle
 | 
					 | 
				
			||||||
    ),
 | 
					 | 
				
			||||||
    awful.button(
 | 
					 | 
				
			||||||
        { modkey },
 | 
					 | 
				
			||||||
        3,
 | 
					 | 
				
			||||||
        function(t)
 | 
					 | 
				
			||||||
            if client.focus then
 | 
					 | 
				
			||||||
                client.focus:toggle_tag(t)
 | 
					 | 
				
			||||||
            end
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
    ),
 | 
					 | 
				
			||||||
    awful.button(
 | 
					 | 
				
			||||||
        { },
 | 
					 | 
				
			||||||
        4,
 | 
					 | 
				
			||||||
        function(t) awful.tag.viewnext(t.screen) end
 | 
					 | 
				
			||||||
    ),
 | 
					 | 
				
			||||||
    awful.button(
 | 
					 | 
				
			||||||
        { },
 | 
					 | 
				
			||||||
        5,
 | 
					 | 
				
			||||||
        function(t) awful.tag.viewprev(t.screen) end
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local tasklist_buttons = awful.util.table.join(
 | 
					 | 
				
			||||||
    awful.button(
 | 
					 | 
				
			||||||
        { },
 | 
					 | 
				
			||||||
        1,
 | 
					 | 
				
			||||||
        function (c)
 | 
					 | 
				
			||||||
            if c == client.focus then
 | 
					 | 
				
			||||||
                c.minimized = true
 | 
					 | 
				
			||||||
            else
 | 
					 | 
				
			||||||
                -- Without this, the following
 | 
					 | 
				
			||||||
                -- :isvisible() makes no sense
 | 
					 | 
				
			||||||
                c.minimized = false
 | 
					 | 
				
			||||||
                if not c:isvisible() and c.first_tag then
 | 
					 | 
				
			||||||
                    c.first_tag:view_only()
 | 
					 | 
				
			||||||
                end
 | 
					 | 
				
			||||||
                -- This will also un-minimize
 | 
					 | 
				
			||||||
                -- the client, if needed
 | 
					 | 
				
			||||||
                client.focus = c
 | 
					 | 
				
			||||||
                c:raise()
 | 
					 | 
				
			||||||
            end
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
    ),
 | 
					 | 
				
			||||||
    awful.button(
 | 
					 | 
				
			||||||
        { },
 | 
					 | 
				
			||||||
        3,
 | 
					 | 
				
			||||||
        client_menu_toggle_fn()
 | 
					 | 
				
			||||||
    ),
 | 
					 | 
				
			||||||
    awful.button(
 | 
					 | 
				
			||||||
        { },
 | 
					 | 
				
			||||||
        4,
 | 
					 | 
				
			||||||
        function ()
 | 
					 | 
				
			||||||
            awful.client.focus.byidx(1)
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
    ),
 | 
					 | 
				
			||||||
    awful.button(
 | 
					 | 
				
			||||||
        { },
 | 
					 | 
				
			||||||
        5,
 | 
					 | 
				
			||||||
        function ()
 | 
					 | 
				
			||||||
            awful.client.focus.byidx(-1)
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local function set_wallpaper(s)
 | 
					 | 
				
			||||||
    -- Wallpaper
 | 
					 | 
				
			||||||
    if beautiful.wallpaper then
 | 
					 | 
				
			||||||
        local wallpaper = beautiful.wallpaper
 | 
					 | 
				
			||||||
        -- If wallpaper is a function, call it with the screen
 | 
					 | 
				
			||||||
        if type(wallpaper) == "function" then
 | 
					 | 
				
			||||||
            wallpaper = wallpaper(s)
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
        gears.wallpaper.maximized(wallpaper, s, true)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local iostat_tooltiptext = ""
 | 
					 | 
				
			||||||
-- Widget de monitoring de l'activité des disques https://awesomewm.org/recipes/watch/
 | 
					 | 
				
			||||||
-- disk I/O using iostat from sysstat utilities
 | 
					 | 
				
			||||||
local iotable = {}
 | 
					 | 
				
			||||||
local iostat = awful.widget.watch("iostat -dm -y 1 1", 2, -- in Kb, use -dm for Mb
 | 
					 | 
				
			||||||
    function(widget, stdout)
 | 
					 | 
				
			||||||
        for line in stdout:match("(sd.*)\n"):gmatch("(.-)\n") do
 | 
					 | 
				
			||||||
            local device, tps, read_s, wrtn_s, read, wrtn =
 | 
					 | 
				
			||||||
            line:match("(%w+)%s*(%d+,?%d*)%s*(%d+,?%d*)%s*(%d+,?%d*)%s*(%d+,?%d*)%s*(%d+,?%d*)")
 | 
					 | 
				
			||||||
            --                  [1]  [2]     [3]     [4]   [5]
 | 
					 | 
				
			||||||
            iotable[device] = { tps, read_s, wrtn_s, read, wrtn }
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        local label = ""
 | 
					 | 
				
			||||||
        for device,values in spairs(iotable) do
 | 
					 | 
				
			||||||
          label = label..(device..": "..iotable[device][2].." MB_read/s  |"..iotable[device][3].." MB_wrtn/s").."\n"
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
        iostat_tooltiptext = label
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        -- customize here
 | 
					 | 
				
			||||||
        --widget:set_text("sda: "..iotable["sda"][2].."/"..iotable["sda"][3]) -- read_s/wrtn_s
 | 
					 | 
				
			||||||
        widget:set_text("iostat")
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
iostat_t = awful.tooltip({
 | 
					 | 
				
			||||||
 --objects = {  },
 | 
					 | 
				
			||||||
 timer_function = function()
 | 
					 | 
				
			||||||
         return iostat_tooltiptext
 | 
					 | 
				
			||||||
     end,
 | 
					 | 
				
			||||||
 })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
iostat_t:add_to_object(iostat)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- tris d'un tableau par la clef https://stackoverflow.com/questions/15706270/sort-a-table-in-lua
 | 
					 | 
				
			||||||
function spairs(t, order)
 | 
					 | 
				
			||||||
    -- collect the keys
 | 
					 | 
				
			||||||
    local keys = {}
 | 
					 | 
				
			||||||
    for k in pairs(t) do keys[#keys+1] = k end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    -- if order function given, sort by it by passing the table and keys a, b,
 | 
					 | 
				
			||||||
    -- otherwise just sort the keys
 | 
					 | 
				
			||||||
    if order then
 | 
					 | 
				
			||||||
        table.sort(keys, function(a,b) return order(t, a, b) end)
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        table.sort(keys)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    -- return the iterator function
 | 
					 | 
				
			||||||
    local i = 0
 | 
					 | 
				
			||||||
    return function()
 | 
					 | 
				
			||||||
        i = i + 1
 | 
					 | 
				
			||||||
        if keys[i] then
 | 
					 | 
				
			||||||
            return keys[i], t[keys[i]]
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Re-set wallpaper when a screen's geometry changes (e.g. different resolution)
 | 
					 | 
				
			||||||
screen.connect_signal("property::geometry", set_wallpaper)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
awful.screen.connect_for_each_screen(
 | 
					 | 
				
			||||||
    function(s)
 | 
					 | 
				
			||||||
        -- Wallpaper
 | 
					 | 
				
			||||||
        set_wallpaper(s)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        -- Each screen has its own tag table.
 | 
					 | 
				
			||||||
        awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, s, awful.layout.layouts[1])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        -- Create a promptbox for each screen
 | 
					 | 
				
			||||||
        s.mypromptbox = awful.widget.prompt()
 | 
					 | 
				
			||||||
        -- Create an imagebox widget which will contains an icon indicating which layout we're using.
 | 
					 | 
				
			||||||
        -- We need one layoutbox per screen.
 | 
					 | 
				
			||||||
        s.mylayoutbox = awful.widget.layoutbox(s)
 | 
					 | 
				
			||||||
        s.mylayoutbox:buttons(awful.util.table.join(
 | 
					 | 
				
			||||||
            awful.button({ }, 1, function () awful.layout.inc( 1) end),
 | 
					 | 
				
			||||||
            awful.button({ }, 3, function () awful.layout.inc(-1) end),
 | 
					 | 
				
			||||||
            awful.button({ }, 4, function () awful.layout.inc( 1) end),
 | 
					 | 
				
			||||||
            awful.button({ }, 5, function () awful.layout.inc(-1) end)
 | 
					 | 
				
			||||||
        ))
 | 
					 | 
				
			||||||
        -- Create a taglist widget
 | 
					 | 
				
			||||||
        s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.all, taglist_buttons)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        -- Create a tasklist widget
 | 
					 | 
				
			||||||
        s.mytasklist = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, tasklist_buttons)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        -- Create the wibox
 | 
					 | 
				
			||||||
        s.mywibox = awful.wibar({ position = "top", screen = s })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        -- Add widgets to the wibox
 | 
					 | 
				
			||||||
        s.mywibox:setup {
 | 
					 | 
				
			||||||
            layout = wibox.layout.align.horizontal,
 | 
					 | 
				
			||||||
            { -- Left widgets
 | 
					 | 
				
			||||||
                layout = wibox.layout.fixed.horizontal,
 | 
					 | 
				
			||||||
                mylauncher,
 | 
					 | 
				
			||||||
                s.mytaglist,
 | 
					 | 
				
			||||||
                s.mypromptbox
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            s.mytasklist, -- Middle widget
 | 
					 | 
				
			||||||
            { -- Right widgets
 | 
					 | 
				
			||||||
              layout = wibox.layout.fixed.horizontal,
 | 
					 | 
				
			||||||
              wibox.widget.textbox(' | '),
 | 
					 | 
				
			||||||
              iostat,
 | 
					 | 
				
			||||||
              wibox.widget.textbox(' | '),
 | 
					 | 
				
			||||||
              mykeyboardlayout,
 | 
					 | 
				
			||||||
              wibox.widget.systray(),
 | 
					 | 
				
			||||||
              mytextclock,
 | 
					 | 
				
			||||||
              s.mylayoutbox
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Mouse bindings
 | 
					 | 
				
			||||||
root.buttons(awful.util.table.join(
 | 
					 | 
				
			||||||
    awful.button({ }, 3, function () mymainmenu:toggle() end),
 | 
					 | 
				
			||||||
    awful.button({ }, 4, awful.tag.viewnext),
 | 
					 | 
				
			||||||
    awful.button({ }, 5, awful.tag.viewprev)
 | 
					 | 
				
			||||||
))
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Key bindings
 | 
					 | 
				
			||||||
globalkeys = awful.util.table.join(
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "s",      hotkeys_popup.show_help,                               {description="show help", group="awesome"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "Left",   awful.tag.viewprev,                                    {description = "view previous", group = "tag"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "Right",  awful.tag.viewnext,                                    {description = "view next", group = "tag"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "Escape", awful.tag.history.restore,                             {description = "go back", group = "tag"}),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "j", function () awful.client.focus.byidx( 1) end,               {description = "focus next by index", group = "client"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "k", function () awful.client.focus.byidx(-1) end,               {description = "focus previous by index", group = "client"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "w", function () mymainmenu:show() end,                          {description = "show main menu", group = "awesome"}),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    -- Layout manipulation
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "j", function () awful.client.swap.byidx(  1)    end,            {description = "swap with next client by index", group = "client"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "k", function () awful.client.swap.byidx( -1)    end,            {description = "swap with previous client by index", group = "client"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end,            {description = "focus the next screen", group = "screen"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end,            {description = "focus the previous screen", group = "screen"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "u", awful.client.urgent.jumpto,                                 {description = "jump to urgent client", group = "client"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "Tab", function () awful.client.focus.history.previous() if client.focus then client.focus:raise() end end,
 | 
					 | 
				
			||||||
                                                                                                      {description = "go back", group = "client"}),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    -- Standard program
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "Return", function () awful.spawn(terminal) end,                 {description = "open a terminal", group = "launcher"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "r", awesome.restart,                                            {description = "reload awesome", group = "awesome"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "q", awesome.quit,                                               {description = "quit awesome", group = "awesome"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "l",     function () awful.tag.incmwfact( 0.05)          end,    {description = "increase master width factor", group = "layout"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "h",     function () awful.tag.incmwfact(-0.05)          end,    {description = "decrease master width factor", group = "layout"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "h",     function () awful.tag.incnmaster( 1, nil, true) end,    {description = "increase the number of master clients", group = "layout"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "l",     function () awful.tag.incnmaster(-1, nil, true) end,    {description = "decrease the number of master clients", group = "layout"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "h",     function () awful.tag.incncol( 1, nil, true)    end,    {description = "increase the number of columns", group = "layout"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "l",     function () awful.tag.incncol(-1, nil, true)    end,    {description = "decrease the number of columns", group = "layout"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "space", function () awful.layout.inc( 1)                end,    {description = "select next", group = "layout"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "space", function () awful.layout.inc(-1)                end,    {description = "select previous", group = "layout"}),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "n", function () local c = awful.client.restore() --[[ Focus restored client ]] if c then client.focus = c c:raise() end end,
 | 
					 | 
				
			||||||
                                                                                                      {description = "restore minimized", group = "client"}),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    -- Prompt
 | 
					 | 
				
			||||||
    awful.key({ modkey },            "r", function () awful.screen.focused().mypromptbox:run() end,   {description = "run prompt", group = "launcher"}),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    awful.key({ modkey }, "x",
 | 
					 | 
				
			||||||
    function ()
 | 
					 | 
				
			||||||
        awful.prompt.run {
 | 
					 | 
				
			||||||
            prompt       = "Run Lua code: ",
 | 
					 | 
				
			||||||
            textbox      = awful.screen.focused().mypromptbox.widget,
 | 
					 | 
				
			||||||
            exe_callback = awful.util.eval,
 | 
					 | 
				
			||||||
            history_path = awful.util.get_cache_dir() .. "/history_eval"
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    end,
 | 
					 | 
				
			||||||
                                                                                                      {description = "lua execute prompt", group = "awesome"}),
 | 
					 | 
				
			||||||
    -- Menubar
 | 
					 | 
				
			||||||
    awful.key({ modkey }, "p", function() menubar.show() end,                                         {description = "show the menubar", group = "launcher"}),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    -- Lanceurs perso
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "F1",  function () awful.util.spawn("firefox") end,              {description = "Lance Firefox", group = "Lanceurs personnels"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "F2",  function () awful.util.spawn("firefox") end,              {description = "Lance Firefox", group = "Lanceurs personnels"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "F3",  function () awful.util.spawn("gqrx") end,                 {description = "Lance gqrx", group = "Lanceurs personnels"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "F4",  function () awful.util.spawn("chromium") end,             {description = "Lance Chromium", group = "Lanceurs personnels"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "F5",  function () awful.util.spawn("spacefm") end,              {description = "Lance spacefm", group = "Lanceurs personnels"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "F6",  function () awful.util.spawn("vlc") end,                  {description = "Lance vlc", group = "Lanceurs personnels"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "F7",  function () awful.util.spawn("claws-mail") end,           {description = "Lance claws", group = "Lanceurs personnels"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "F11", function () awful.util.spawn("xrandr-auto") end,          {description = "Lance le script xrandr-auto", group = "Lanceurs personnels"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey            }, "F12", function () awful.util.spawn("slock") end,                {description = "Verouille la session avec slock", group = "Lanceurs personnels"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "F1",  function () awful.util.spawn("claws-mail") end,           {description = "Lance claws", group = "Lanceurs personnels"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "F3",  function () awful.util.spawn("pcmanfm") end,              {description = "Lance pcmanfm", group = "Lanceurs personnels"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "F6",  function () awful.util.spawn("clementine") end,           {description = "Lance clementine", group = "Lanceurs personnels"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "F11", function () awful.util.spawn("xrandr-auto-2") end,        {description = "Lance le script xrandr-auto-2", group = "Lanceurs personnels"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey  }, "l", function () awful.util.spawn("slock systemctl suspend -i") end, {description = "Verouille la session avec slock", group = "Lanceurs personnels"})
 | 
					 | 
				
			||||||
    --  awful.key({ modkey, "Shift"   }, "F11", function () awful.util.spawn("/home/taeradan/bin/xrandr-left") end),
 | 
					 | 
				
			||||||
    --  awful.key({ modkey, "Control" }, "F11", function () awful.util.spawn("/home/taeradan/bin/xrandr-right") end),
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
clientkeys = awful.util.table.join(
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "f", function (c) c.fullscreen = not c.fullscreen c:raise() end, {description = "toggle fullscreen", group = "client"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Shift"   }, "c",      function (c) c:kill()                         end,     {description = "close", group = "client"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "space",  awful.client.floating.toggle                     ,     {description = "toggle floating", group = "client"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end,     {description = "move to master", group = "client"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "o",      function (c) c:move_to_screen()               end,     {description = "move to screen", group = "client"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "t",      function (c) c.ontop = not c.ontop            end,     {description = "toggle keep on top", group = "client"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "n",      function (c) --[[ The client currently has the input focus, so it cannot be minimized, since minimized clients can't have the focus. ]]  c.minimized = true end ,
 | 
					 | 
				
			||||||
                                                                                                      {description = "minimize", group = "client"}),
 | 
					 | 
				
			||||||
    awful.key({ modkey,           }, "m", function (c) c.maximized = not c.maximized c:raise() end ,  {description = "maximize", group = "client"})
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Bind all key numbers to tags.
 | 
					 | 
				
			||||||
-- Be careful: we use keycodes to make it works on any keyboard layout.
 | 
					 | 
				
			||||||
-- This should map on the top row of your keyboard, usually 1 to 9.
 | 
					 | 
				
			||||||
for i = 1, 9 do
 | 
					 | 
				
			||||||
    globalkeys = awful.util.table.join(
 | 
					 | 
				
			||||||
        globalkeys,
 | 
					 | 
				
			||||||
        -- View tag only.
 | 
					 | 
				
			||||||
        awful.key(
 | 
					 | 
				
			||||||
            { modkey },
 | 
					 | 
				
			||||||
            "#" .. i + 9,
 | 
					 | 
				
			||||||
            function ()
 | 
					 | 
				
			||||||
                local screen = awful.screen.focused()
 | 
					 | 
				
			||||||
                local tag = screen.tags[i]
 | 
					 | 
				
			||||||
                if tag then
 | 
					 | 
				
			||||||
                    tag:view_only()
 | 
					 | 
				
			||||||
                end
 | 
					 | 
				
			||||||
            end,
 | 
					 | 
				
			||||||
            {description = "view tag #"..i, group = "tag"}
 | 
					 | 
				
			||||||
        ),
 | 
					 | 
				
			||||||
        -- Toggle tag display.
 | 
					 | 
				
			||||||
        awful.key(
 | 
					 | 
				
			||||||
            { modkey, "Control" },
 | 
					 | 
				
			||||||
            "#" .. i + 9,
 | 
					 | 
				
			||||||
            function ()
 | 
					 | 
				
			||||||
                local screen = awful.screen.focused()
 | 
					 | 
				
			||||||
                local tag = screen.tags[i]
 | 
					 | 
				
			||||||
                if tag then
 | 
					 | 
				
			||||||
                    awful.tag.viewtoggle(tag)
 | 
					 | 
				
			||||||
                end
 | 
					 | 
				
			||||||
            end,
 | 
					 | 
				
			||||||
            {description = "toggle tag #" .. i, group = "tag"}
 | 
					 | 
				
			||||||
        ),
 | 
					 | 
				
			||||||
        -- Move client to tag.
 | 
					 | 
				
			||||||
        awful.key(
 | 
					 | 
				
			||||||
            { modkey, "Shift" },
 | 
					 | 
				
			||||||
            "#" .. i + 9,
 | 
					 | 
				
			||||||
            function ()
 | 
					 | 
				
			||||||
                if client.focus then
 | 
					 | 
				
			||||||
                    local tag = client.focus.screen.tags[i]
 | 
					 | 
				
			||||||
                    if tag then
 | 
					 | 
				
			||||||
                        client.focus:move_to_tag(tag)
 | 
					 | 
				
			||||||
                    end
 | 
					 | 
				
			||||||
                end
 | 
					 | 
				
			||||||
            end,
 | 
					 | 
				
			||||||
            {description = "move focused client to tag #"..i, group = "tag"}
 | 
					 | 
				
			||||||
        ),
 | 
					 | 
				
			||||||
        -- Toggle tag on focused client.
 | 
					 | 
				
			||||||
        awful.key(
 | 
					 | 
				
			||||||
            { modkey, "Control", "Shift" },
 | 
					 | 
				
			||||||
            "#" .. i + 9,
 | 
					 | 
				
			||||||
            function ()
 | 
					 | 
				
			||||||
                if client.focus then
 | 
					 | 
				
			||||||
                    local tag = client.focus.screen.tags[i]
 | 
					 | 
				
			||||||
                    if tag then
 | 
					 | 
				
			||||||
                        client.focus:toggle_tag(tag)
 | 
					 | 
				
			||||||
                    end
 | 
					 | 
				
			||||||
                end
 | 
					 | 
				
			||||||
            end,
 | 
					 | 
				
			||||||
            {description = "toggle focused client on tag #" .. i, group = "tag"}
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
clientbuttons = awful.util.table.join(
 | 
					 | 
				
			||||||
awful.button({ }, 1, function (c) client.focus = c; c:raise() end),
 | 
					 | 
				
			||||||
awful.button({ modkey }, 1, awful.mouse.client.move),
 | 
					 | 
				
			||||||
awful.button({ modkey }, 3, awful.mouse.client.resize))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Set keys
 | 
					 | 
				
			||||||
root.keys(globalkeys)
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Rules
 | 
					 | 
				
			||||||
-- Rules to apply to new clients (through the "manage" signal).
 | 
					 | 
				
			||||||
awful.rules.rules = {
 | 
					 | 
				
			||||||
    -- All clients will match this rule.
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        rule = { },
 | 
					 | 
				
			||||||
        properties = {
 | 
					 | 
				
			||||||
            border_width = beautiful.border_width,
 | 
					 | 
				
			||||||
            border_color = beautiful.border_normal,
 | 
					 | 
				
			||||||
            focus = awful.client.focus.filter,
 | 
					 | 
				
			||||||
            raise = true,
 | 
					 | 
				
			||||||
            keys = clientkeys,
 | 
					 | 
				
			||||||
            buttons = clientbuttons,
 | 
					 | 
				
			||||||
            screen = awful.screen.preferred,
 | 
					 | 
				
			||||||
            placement = awful.placement.no_overlap+awful.placement.no_offscreen
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      -- Floating clients.
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
          rule_any = {
 | 
					 | 
				
			||||||
              instance = {
 | 
					 | 
				
			||||||
                  "DTA",  -- Firefox addon DownThemAll.
 | 
					 | 
				
			||||||
                  "copyq",  -- Includes session name in class.
 | 
					 | 
				
			||||||
              },
 | 
					 | 
				
			||||||
              class = {
 | 
					 | 
				
			||||||
                  "Arandr",
 | 
					 | 
				
			||||||
                  "Gpick",
 | 
					 | 
				
			||||||
                  "Kruler",
 | 
					 | 
				
			||||||
                  "MessageWin",  -- kalarm.
 | 
					 | 
				
			||||||
                  "Sxiv",
 | 
					 | 
				
			||||||
                  "Wpa_gui",
 | 
					 | 
				
			||||||
                  "pinentry",
 | 
					 | 
				
			||||||
                  "veromix",
 | 
					 | 
				
			||||||
                  "xtightvncviewer"
 | 
					 | 
				
			||||||
              },
 | 
					 | 
				
			||||||
              name = {
 | 
					 | 
				
			||||||
                  "Event Tester",  -- xev.
 | 
					 | 
				
			||||||
              },
 | 
					 | 
				
			||||||
              role = {
 | 
					 | 
				
			||||||
                  "AlarmWindow",  -- Thunderbird's calendar.
 | 
					 | 
				
			||||||
                  "pop-up",       -- e.g. Google Chrome's (detached) Developer Tools.
 | 
					 | 
				
			||||||
              }
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          properties = { floating = true }
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      -- Add titlebars to normal clients and dialogs
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
          rule_any = {
 | 
					 | 
				
			||||||
              type = { "normal", "dialog" }
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          properties = { titlebars_enabled = false }
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      -- Set Firefox to always map on the tag named "2" on screen 1.
 | 
					 | 
				
			||||||
      -- { rule = { class = "Firefox" },
 | 
					 | 
				
			||||||
      --   properties = { screen = 1, tag = "2" } },
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- {{{ Signals
 | 
					 | 
				
			||||||
-- Signal function to execute when a new client appears.
 | 
					 | 
				
			||||||
client.connect_signal(
 | 
					 | 
				
			||||||
    "manage",
 | 
					 | 
				
			||||||
    function (c)
 | 
					 | 
				
			||||||
        --[[ Set the windows at the slave, i.e. put it at the end of others instead of setting it master.]]
 | 
					 | 
				
			||||||
        -- if not awesome.startup then awful.client.setslave(c) end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if awesome.startup and
 | 
					 | 
				
			||||||
            not c.size_hints.user_position
 | 
					 | 
				
			||||||
            and not c.size_hints.program_position then
 | 
					 | 
				
			||||||
            --[[ Prevent clients from being unreachable after screen count changes.]]
 | 
					 | 
				
			||||||
            awful.placement.no_offscreen(c)
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Add a titlebar if titlebars_enabled is set to true in the rules.
 | 
					 | 
				
			||||||
client.connect_signal(
 | 
					 | 
				
			||||||
    "request::titlebars",
 | 
					 | 
				
			||||||
    function(c)
 | 
					 | 
				
			||||||
        -- buttons for the titlebar
 | 
					 | 
				
			||||||
        local buttons = awful.util.table.join(
 | 
					 | 
				
			||||||
            awful.button(
 | 
					 | 
				
			||||||
                { },
 | 
					 | 
				
			||||||
                1,
 | 
					 | 
				
			||||||
                function()
 | 
					 | 
				
			||||||
                    client.focus = c
 | 
					 | 
				
			||||||
                    c:raise()
 | 
					 | 
				
			||||||
                    awful.mouse.client.move(c)
 | 
					 | 
				
			||||||
                end
 | 
					 | 
				
			||||||
            ),
 | 
					 | 
				
			||||||
            awful.button(
 | 
					 | 
				
			||||||
                { },
 | 
					 | 
				
			||||||
                3,
 | 
					 | 
				
			||||||
                function()
 | 
					 | 
				
			||||||
                    client.focus = c
 | 
					 | 
				
			||||||
                    c:raise()
 | 
					 | 
				
			||||||
                    awful.mouse.client.resize(c)
 | 
					 | 
				
			||||||
                end
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        awful.titlebar(c) : setup {
 | 
					 | 
				
			||||||
            { -- Left
 | 
					 | 
				
			||||||
                awful.titlebar.widget.iconwidget(c),
 | 
					 | 
				
			||||||
                buttons = buttons,
 | 
					 | 
				
			||||||
                layout  = wibox.layout.fixed.horizontal
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            { -- Middle
 | 
					 | 
				
			||||||
                { -- Title
 | 
					 | 
				
			||||||
                    align  = "center",
 | 
					 | 
				
			||||||
                    widget = awful.titlebar.widget.titlewidget(c)
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                buttons = buttons,
 | 
					 | 
				
			||||||
                layout  = wibox.layout.flex.horizontal
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            { -- Right
 | 
					 | 
				
			||||||
                awful.titlebar.widget.floatingbutton (c),
 | 
					 | 
				
			||||||
                awful.titlebar.widget.maximizedbutton(c),
 | 
					 | 
				
			||||||
                awful.titlebar.widget.stickybutton   (c),
 | 
					 | 
				
			||||||
                awful.titlebar.widget.ontopbutton    (c),
 | 
					 | 
				
			||||||
                awful.titlebar.widget.closebutton    (c),
 | 
					 | 
				
			||||||
                layout = wibox.layout.fixed.horizontal()
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            layout = wibox.layout.align.horizontal
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Enable sloppy focus, so that focus follows mouse.
 | 
					 | 
				
			||||||
client.connect_signal(
 | 
					 | 
				
			||||||
    "mouse::enter",
 | 
					 | 
				
			||||||
    function(c)
 | 
					 | 
				
			||||||
        if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
 | 
					 | 
				
			||||||
        and awful.client.focus.filter(c) then
 | 
					 | 
				
			||||||
            client.focus = c
 | 
					 | 
				
			||||||
        end
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end)
 | 
					 | 
				
			||||||
client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
 | 
					 | 
				
			||||||
-- }}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Au démarrage
 | 
					 | 
				
			||||||
awful.util.spawn_with_shell("xrandr-auto || true")
 | 
					 | 
				
			||||||
-- awful.util.spawn_with_shell("gnome-sound-applet")
 | 
					 | 
				
			||||||
-- awful.util.spawn_with_shell("nm-applet")
 | 
					 | 
				
			||||||
@ -0,0 +1,78 @@
 | 
				
			|||||||
 | 
					{ 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
 | 
				
			||||||
 | 
					  nix.buildCores = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # The NixOS release to be compatible with for stateful data such as databases.
 | 
				
			||||||
 | 
					  system.stateVersion = "16.03";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # On autorise les paquets non-libres
 | 
				
			||||||
 | 
					  nixpkgs.config.allowUnfree = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Paquets
 | 
				
			||||||
 | 
					  environment = {
 | 
				
			||||||
 | 
					    systemPackages = with pkgs; [
 | 
				
			||||||
 | 
					      bind          # utilisé pour les utilitaires comme dig
 | 
				
			||||||
 | 
					      byobu         # permet de se déconnecter d'un terminal sans l'aréter
 | 
				
			||||||
 | 
					      exfat         # Pour monter les FAT avec Fuse
 | 
				
			||||||
 | 
					      git gitAndTools.gitSVN gitAndTools.tig gti # outil de gestion de version
 | 
				
			||||||
 | 
					      gnumake       # pour décrire les recettes de compilation
 | 
				
			||||||
 | 
					      gnupg         # GPG
 | 
				
			||||||
 | 
					      gpm           # prise en charge de la souris en console
 | 
				
			||||||
 | 
					      htop          # monitoring
 | 
				
			||||||
 | 
					      #libressl      # librairie pour faire du TLS et les algorithmes de crypto par OpenBSD
 | 
				
			||||||
 | 
					      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
 | 
				
			||||||
 | 
					      p7zip         # compression de fichier
 | 
				
			||||||
 | 
					      parted        # partitionnement de disque
 | 
				
			||||||
 | 
					      pciutils
 | 
				
			||||||
 | 
					      python        # python -- python -m SimpleHTTPServer 8000
 | 
				
			||||||
 | 
					      python34Packages.glances # monitoring
 | 
				
			||||||
 | 
					      pwgen         # générateur de mot de passe
 | 
				
			||||||
 | 
					      rtorrent      # outil de téléchargement de torrent & magnet
 | 
				
			||||||
 | 
					      tmux          # nécessaire pour byobu
 | 
				
			||||||
 | 
					      tree          # affiche une arborescence de fichiers et dossiers
 | 
				
			||||||
 | 
					      usbutils
 | 
				
			||||||
 | 
					      (import ./vim.nix)
 | 
				
			||||||
 | 
					      wget          # client HTTP console
 | 
				
			||||||
 | 
					      which         # pour connaitre le chemin d'un exécutable
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					    shellAliases = {
 | 
				
			||||||
 | 
					      byobu = "byobu-tmux";
 | 
				
			||||||
 | 
					      tree = "tree -C";
 | 
				
			||||||
 | 
					      tree1 = "tree -d -L 1";
 | 
				
			||||||
 | 
					      tree2 = "tree -d -L 2";
 | 
				
			||||||
 | 
					      tree3 = "tree -d -L 3";
 | 
				
			||||||
 | 
					      grep = "grep --color=auto";
 | 
				
			||||||
 | 
					      vi = "vim";
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    etc.gitconfig.text = builtins.readFile ./gitconfig;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  programs.bash = {
 | 
				
			||||||
 | 
					    enableCompletion = true;
 | 
				
			||||||
 | 
					    promptInit = builtins.readFile ./bash-prompt.sh;
 | 
				
			||||||
 | 
					    interactiveShellInit = builtins.readFile ./bash-interactive-init.sh;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # https://wiki.mozilla.org/Security/Guidelines/OpenSSH#Modern
 | 
				
			||||||
 | 
					  programs.ssh.extraConfig = ''
 | 
				
			||||||
 | 
					    # Ensure KnownHosts are unreadable if leaked - it is otherwise easier to know which hosts your keys have access to.
 | 
				
			||||||
 | 
					    HashKnownHosts yes
 | 
				
			||||||
 | 
					    # Host keys the client accepts - order here is honored by OpenSSH
 | 
				
			||||||
 | 
					    HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp384,ecdsa-sha2-nistp256
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp256,ecdh-sha2-nistp384,diffie-hellman-group-exchange-sha256
 | 
				
			||||||
 | 
					    MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
 | 
				
			||||||
 | 
					    Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
 | 
				
			||||||
 | 
					  '';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					# http://www.git-attitude.fr/2014/09/15/30-options-git-qui-gagnent-a-etre-connues/
 | 
				
			||||||
 | 
					[color]
 | 
				
			||||||
 | 
					    diff = auto
 | 
				
			||||||
 | 
					    branch = auto
 | 
				
			||||||
 | 
					    interactive = auto
 | 
				
			||||||
 | 
					    pager = true
 | 
				
			||||||
 | 
					    showbranch = auto
 | 
				
			||||||
 | 
					    status = auto
 | 
				
			||||||
 | 
					[alias]
 | 
				
			||||||
 | 
					    a  = add -p
 | 
				
			||||||
 | 
					    ci = commit
 | 
				
			||||||
 | 
					    co = checkout
 | 
				
			||||||
 | 
					    ff = pull --ff-only
 | 
				
			||||||
 | 
					    oops = commit --amend --no-edit
 | 
				
			||||||
 | 
					    # Show files ignored by git
 | 
				
			||||||
 | 
					    ignored = ls-files -o -i --exclude-standard
 | 
				
			||||||
 | 
					    ls = ls-files
 | 
				
			||||||
 | 
					    st = status
 | 
				
			||||||
 | 
					    # Logs
 | 
				
			||||||
 | 
					    lol = log --graph --decorate --pretty=oneline --abbrev-commit
 | 
				
			||||||
 | 
					    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all
 | 
				
			||||||
 | 
					[push]
 | 
				
			||||||
 | 
					    default = simple
 | 
				
			||||||
 | 
					[core]
 | 
				
			||||||
 | 
					    editor = /usr/bin/env vim
 | 
				
			||||||
@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					{ 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
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -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
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
					Loading…
					
					
				
		Reference in New Issue