Core modules

A set of NixOS modules available at provision.core that provide defaults for:

  • aliases (optionally enabled use sysadmin + nix shell aliases)
  • defaults (optionally set some sysctl + systemd global defaults)
  • fonts (optionally configure system fonts)
  • locales (optionally configure locale, keymaps, timeZone)
  • packages (optionally enabled a core set of tools to import)
  • shell (starship, zsh, direnv)

System

Defaults

Changes some system defaults of sysctl and systemd.

provision.core.defaults = {
  # it can be useful to bump inotify limits to when encountering `too many open files` in many places
  sysctl.bumpInotifyLimits = true;
  # multiplied by 128 to set limits in `fs.inotify.max_*` options
  sysctl.inotifyLimitsMultiple = 64;

  # Set a default timeout for systemd units globally
  systemd.defaultTimeoutSec = 30;
};

Module Options Reference for provision.core.defaults

Packages

Adds packages to environment.systemPackages. Includes some default aliases that I find useful.

provision.core.packages = {
  # enabling imports the aliases into `environment.systemPackages`
  enable = true;

  # Add your own packages, these are merged with the upstream defaults
  packages = with pkgs; [
    tmux
    ripgrep
  ];

  # You can override all of the upstream defaults with
  # packages = lib.mkForce [ ];
};

Module Options Reference for provision.core.packages

Aliases

Adds shell aliases to environment.shellAliases. Includes some default aliases that I find useful.

provision.core.aliases = {
  # enabling imports the aliases into `environment.shellAliases`
  enable = true;

  # Define your own aliases, these are merged with the upstream defaults
  aliases = {
    myalias = "ls -la";
    # you can override one of the default upstreams
    np = "nix shell nixos#";
    # or disable it
    n = null;
    nl = "";
  };

  # You can override all of the upstream defaults with
  # aliases = lib.mkForce { };
};

Module Options Reference for provision.core.aliases

Locale

Configures locale, timeZone, keymap

provision.core.locale = {
  enable = true;
  keyMap = "de";
  default = "de_DE.UTF-8";
  timeZone = "Europe/Berlin";
  # swap caps:escape in xkb.options
  swapEscape = true;
};

Module Options Reference for provision.core.locale

Fonts

Simple wrapper that adds packages to fonts.packages and sets fonts.defaultFonts names.

provision.core.fonts = {
  enable = true;
  name = "Hack";
  packages = [ pkgs.hack-font ];
};

Module Options Reference for provision.core.fonts

Shell

Add opinionated configurations of some basic shell utilities, currently:

  • starship
  • zsh
  • direnv
provision.core.shell = {
  # enable all integrations
  enable = true;

  # or enable them on a per integration basic
  direnv.enable = true;
  starship.enable = true;
  zsh.enable = true;
};

Module Options Reference for provision.core.shell

Security

Some basic security related options enablement

  • doas + extra rules
  • ssh (no openFirewall)
  • electron compatibility (chromium suid sandbox)
  • hardened kernel (enable + set)
  • user namespacing (enable)
provision.core.security = {
  # enable doas
  doas.enable = true;
  # add extra rules
  doas.extraRules = [
    {
      users = [ "myuser" ];
      noPass = true;
    }
  ];
  electron.enable = true;
  hardened = {
    enable = true;
    kernel = pkgs.linux_6_6_hardened;
  };
  namespacing.enable = true;
};

Module Options Reference for provision.core.security