1 { inputs, pkgs, lib, config, ... }:
 
   2 let inherit (lib) types;
 
   3     inherit (config.networking) hostName domain;
 
   8   (inputs.julm-nix + "/nixos/profiles/security.nix")
 
   9   defaults/predictable-interface-names.nix
 
  12   #binaryCaches = lib.mkForce [];
 
  15   autoOptimiseStore = lib.mkDefault true;
 
  16   # Use gc.automatic to keep disk space under control.
 
  17   gc.automatic = lib.mkDefault true;
 
  18   gc.dates = lib.mkDefault "weekly";
 
  19   gc.options = lib.mkDefault "--delete-older-than 30d";
 
  20   # Setting NIX_PATH is useless now that flake.nix are used.
 
  21   nixPath = lib.mkForce [];
 
  23 environment.variables.NIXPKGS_CONFIG = lib.mkForce "";
 
  25 documentation.nixos = {
 
  26   # NOTE: useless on a server, and CPU intensive.
 
  27   enable = lib.mkDefault false;
 
  30 console.font = "Lat2-Terminus16";
 
  31 console.keyMap = lib.mkDefault "fr";
 
  32 i18n.defaultLocale = "fr_FR.UTF-8";
 
  33 nixpkgs.config.allowUnfree = false;
 
  34 time.timeZone = "Europe/Paris";
 
  36 # Always try to start all the units (default.target)
 
  37 # because systemd's emergency shell does not try to start sshd.
 
  38 # https://wiki.archlinux.org/index.php/systemd#Disable_emergency_mode_on_remote_host
 
  39 systemd.enableEmergencyMode = false;
 
  41 # On a remote headless server: always reboot on a kernel panic,
 
  42 # to not have to physically go power cycle the server.
 
  43 # Which may happen for instance if the wrong ZFS password is used
 
  44 # but the boot is manually forced to continue.
 
  45 # Using kernelParams instead of kernel.sysctl
 
  46 # sets this up as soon as the initrd.
 
  47 boot.kernelParams = [ "panic=10" ];
 
  49 boot.cleanTmpDir = lib.mkDefault true;
 
  50 boot.tmpOnTmpfs = lib.mkDefault true;
 
  54   # See: https://github.com/NixOS/nixpkgs/issues/10183#issuecomment-537629621
 
  56     "127.0.1.1" = lib.mkForce [ "${hostName}.${domain}" hostName ];
 
  57     "::1"       = lib.mkForce [ "${hostName}.${domain}" hostName "localhost" ];
 
  60   usePredictableInterfaceNames = true;
 
  63 services.logrotate = {
 
  67       path = "/var/log/btmp";
 
  68       frequency = "monthly";
 
  75       path = "/var/log/wtmp";
 
  76       frequency = "monthly";
 
  85 services.openssh.enable = true;
 
  87 environment.systemPackages = with pkgs; [
 
  90   config.boot.kernelPackages.cpupower
 
 101   #mailutils # builds guile
 
 120 environment.variables.SYSTEMD_LESS = "FKMRX";
 
 121 environment.etc."inputrc".text = lib.readFile defaults/readline/inputrc;
 
 123 boot.kernel.sysctl = {
 
 124   # Improve MTU detection
 
 125   # This can thaw TCP connections stalled by a host
 
 126   # requiring a lower MTU along the path,
 
 127   # though it would do so after a little delay
 
 128   # so it's better to set a low MTU when possible.
 
 129   "net/ipv4/tcp_mtu_probing" = 1;
 
 134     interactiveShellInit = ''
 
 135       bind '"\e[A":history-search-backward'
 
 136       bind '"\e[B":history-search-forward'
 
 138       # Ignore duplicate commands, ignore commands starting with a space
 
 139       export HISTCONTROL=erasedups:ignorespace
 
 140       export HISTSIZE=42000
 
 142       # Append to the history instead of overwriting (good for multiple connections)
 
 145       # Enable ** file pattern
 
 149       mkcd() { mkdir -p "$1" && cd "$1"; }
 
 150       stress-mem() { fac="$1"; stress-ng --vm 1 --vm-keep --vm-bytes $(awk "/MemAvailable/{ printf \"%d\n\", \$2 * $fac; }" </proc/meminfo)k; }
 
 151       sysenter() { srv="$1"; shift; nsenter -a -t "$(systemctl show --property MainPID --value "$srv")" "$@"; }
 
 152       systrace() { srv="$1"; shift; strace -f -p "$(systemctl show --property MainPID --value "$srv")" "$@"; }
 
 153       zfs-mount () { for d in $(zfs list -rH -o name "$@"); do sudo zfs mount -l "$d"; done; }
 
 154       zfs-unmount () { sudo zfs unmount -u "$@"; }
 
 160       ls = "ls --color=tty";
 
 161       mem = "ps -e -orss=,user=,args= | sort -b -k1,1n";
 
 162       mem-top = "smem --sort rss --autosize";
 
 165       st="sudo systemctl status";
 
 166       u="systemctl --user";
 
 167       ut="systemctl --user status";
 
 168       j="sudo journalctl -u";
 
 170       nixos-clean="sudo nix-collect-garbage -d";
 
 171       nixos-history="sudo nix-env --list-generations --profile /nix/var/nix/profiles/system";
 
 172       nixos-rollback="sudo nixos-rebuild switch --rollback";
 
 175   gnupg.agent.pinentryFlavor = "curses";
 
 176   mosh.enable = lib.mkDefault true;
 
 177   mtr.enable = lib.mkDefault true;
 
 178   traceroute.enable = lib.mkDefault true;