public-inbox: fix cc not found
[sourcephile-nix.git] / nixos / defaults.nix
index 2e662be9139fc9e8f5854dfb29e75018e0f74aeb..db52e5bbf32846f50e801cd3209a3d89f461375f 100644 (file)
-{ pkgs, lib, config, ... }:
+{ inputs, pkgs, lib, config, ... }:
 let inherit (lib) types;
+    inherit (config.networking) hostName domain;
 in
 {
 imports = [
   ./modules.nix
-  ./defaults/predictable-interface-names.nix
+  ./options.nix
+  (inputs.julm-nix + "/nixos/profiles/security.nix")
+  defaults/predictable-interface-names.nix
 ];
-config = {
-  nix = {
-    autoOptimiseStore = true;
-    extraOptions = ''
-    '';
-    # Use gc.automatic to keep disk space under control.
-    gc = {
-      automatic = true;
-      dates = "weekly";
-      options = "--delete-older-than 30d";
-    };
-  };
+nix = {
+  #binaryCaches = lib.mkForce [];
+  extraOptions = ''
+  '';
+  settings.auto-optimise-store = lib.mkDefault true;
+  # Use gc.automatic to keep disk space under control.
+  gc.automatic = lib.mkDefault true;
+  gc.dates = lib.mkDefault "weekly";
+  gc.options = lib.mkDefault "--delete-older-than 30d";
+  # Setting NIX_PATH is useless now that flake.nix are used.
+  nixPath = [];
+};
+environment.variables.NIXPKGS_CONFIG = lib.mkForce "";
 
-  nixpkgs = {
-    config = {
-      allowUnfree = false;
-      /*
-      packageOverrides = pkgs: {
-        postfix = pkgs.postfix.override {
-          withLDAP = true;
-        };
-      };
-      */
-    };
-    #overlays = import ../overlays.nix;
-  };
+documentation.nixos = {
+  # NOTE: useless on a server, and CPU intensive.
+  enable = lib.mkDefault false;
+};
 
-  documentation.nixos = {
-    enable = false; # NOTE: useless on a server, and CPU intensive.
-  };
+console.font = "Lat2-Terminus16";
+console.keyMap = lib.mkDefault "fr";
+i18n.defaultLocale = "fr_FR.UTF-8";
+nixpkgs.config.allowUnfree = false;
+time.timeZone = "Europe/Paris";
 
-  # Clean /tmp automatically on boot.
-  boot.cleanTmpDir = true;
+# Always try to start all the units (default.target)
+# because systemd's emergency shell does not try to start sshd.
+# https://wiki.archlinux.org/index.php/systemd#Disable_emergency_mode_on_remote_host
+systemd.enableEmergencyMode = false;
 
-  time = {
-    timeZone = "Europe/Paris";
-  };
+# On a remote headless server: always reboot on a kernel panic,
+# to not have to physically go power cycle the server.
+# Which may happen for instance if the wrong ZFS password is used
+# but the boot is manually forced to continue.
+# Using kernelParams instead of kernel.sysctl
+# sets this up as soon as the initrd.
+boot.kernelParams = [ "panic=10" ];
 
-  i18n = {
-    consoleFont   = "Lat2-Terminus16";
-    consoleKeyMap = "fr";
-    defaultLocale = "fr_FR.UTF-8";
-  };
+boot.cleanTmpDir = lib.mkDefault true;
+boot.tmpOnTmpfs = lib.mkDefault true;
 
-  services = {
-    openssh = {
-      enable = true;
-      extraConfig = ''
-      '';
-    };
-    journald = {
-      extraConfig = ''
-        SystemMaxUse=50M
-      '';
-    };
+networking = {
+  # Fix hostname --fqdn
+  # See: https://github.com/NixOS/nixpkgs/issues/10183#issuecomment-537629621
+  hosts = {
+    "127.0.1.1" = lib.mkForce [ "${hostName}.${domain}" hostName ];
+    "::1"       = lib.mkForce [ "${hostName}.${domain}" hostName "localhost" ];
   };
+  search = [ domain ];
+  usePredictableInterfaceNames = true;
+};
 
-  environment = {
-    systemPackages = with pkgs; [
-      binutils
-      dnsutils
-      htop
-      inetutils
-      iotop
-      lsof
-      mailutils
-      multitail
-      ncdu
-      pv
-      swaplist
-      tcpdump
-      tmux
-      tree
-      vim
-      which
-    ];
-
-    etc."inputrc".text = lib.readFile defaults/readline/inputrc;
-  };
+services.logrotate.enable = true;
+
+services.openssh.enable = true;
+
+environment.systemPackages = with pkgs; [
+  binutils
+  bmon
+  config.boot.kernelPackages.cpupower
+  conntrack-tools
+  dstat
+  gnupg
+  htop
+  iftop
+  inetutils
+  iotop
+  ldns
+  lf
+  lsof
+  #mailutils # builds guile
+  multitail
+  ncdu
+  nethogs
+  nload
+  nmon
+  pciutils # Not supported by a few hardwares
+  psmisc
+  pv
+  #rdfind
+  smem
+  tcpdump
+  tmux
+  tree
+  usbutils
+  #vim
+  which
+  #dnsutils
+  #ntop
+  #stress
+];
+environment.variables.SYSTEMD_LESS = "FKMRX";
+environment.etc."inputrc".text = lib.readFile defaults/readline/inputrc;
+
+boot.kernel.sysctl = {
+  # Improve MTU detection
+  # This can thaw TCP connections stalled by a host
+  # requiring a lower MTU along the path,
+  # though it would do so after a little delay
+  # so it's better to set a low MTU when possible.
+  "net/ipv4/tcp_mtu_probing" = 1;
+};
+
+programs = {
+  bash = {
+    interactiveShellInit = ''
+      bind '"\e[A":history-search-backward'
+      bind '"\e[B":history-search-forward'
+
+      # Ignore duplicate commands, ignore commands starting with a space
+      export HISTCONTROL=erasedups:ignorespace
+      export HISTSIZE=42000
+
+      # Append to the history instead of overwriting (good for multiple connections)
+      shopt -s histappend
+
+      # Enable ** file pattern
+      shopt -s globstar
+
+      # Utilities
+      mkcd() { mkdir -p "$1" && cd "$1"; }
+      stress-mem() { fac="$1"; stress-ng --vm 1 --vm-keep --vm-bytes $(awk "/MemAvailable/{ printf \"%d\n\", \$2 * $fac; }" </proc/meminfo)k; }
+      sysenter() { srv="$1"; shift; nsenter -a -t "$(systemctl show --property MainPID --value "$srv")" "$@"; }
+      systrace() { srv="$1"; shift; strace -f -p "$(systemctl show --property MainPID --value "$srv")" "$@"; }
+      zfs-mount () { for d in $(zfs list -rH -o name "$@"); do sudo zfs mount -l "$d"; done; }
+      zfs-unmount () { sudo zfs unmount -u "$@"; }
+    '';
+    shellAliases = {
+      cl = "clear";
+      l = "ls -alh";
+      ll = "ls -al";
+      ls = "ls --color=tty";
+      mem = "ps -e -orss=,user=,args= | sort -b -k1,1n";
+      mem-top = "smem --sort rss --autosize";
+
+      s="sudo systemctl";
+      st="sudo systemctl status";
+      u="systemctl --user";
+      ut="systemctl --user status";
+      j="sudo journalctl -u";
 
-  programs = {
-    bash = {
-      interactiveShellInit = ''
-        bind '"\e[A":history-search-backward'
-        bind '"\e[B":history-search-forward'
-
-        # Ignore duplicate commands, ignore commands starting with a space
-        export HISTCONTROL=erasedups:ignorespace
-        export HISTSIZE=42000
-
-        # Append to the history instead of overwriting (good for multiple connections)
-        shopt -s histappend
-      '';
-      shellAliases = {
-        cl = "clear";
-        l  = "ls -alh";
-        ll = "ls -l";
-        ls = "ls --color=tty";
-        mem = "ps -e -orss=,user=,args= | sort -b -k1,1n";
-
-        s="sudo systemctl";
-        s-u="systemctl --user";
-
-        nixos-clean="sudo nix-collect-garbage -d";
-        nixos-history="sudo nix-env --list-generations --profile /nix/var/nix/profiles/system";
-        nixos-rollback="sudo nixos-rebuild switch --rollback";
-        nixos-update="sudo nix-channel --update";
-        nixos-upgrade="sudo nixos-rebuild switch";
-        nixos-upstream="sudo nix-channel --list";
-      };
+      nixos-clean="sudo nix-collect-garbage -d";
+      nixos-history="sudo nix-env --list-generations --profile /nix/var/nix/profiles/system";
+      nixos-rollback="sudo nixos-rebuild switch --rollback";
     };
-    mtr.enable = true;
   };
+  gnupg.agent.pinentryFlavor = "curses";
+  mosh.enable = lib.mkDefault true;
+  mtr.enable = lib.mkDefault true;
+  traceroute.enable = lib.mkDefault true;
 };
 }