Modern Development Tooling

Modern Development Tooling using nix, direnv and zellij

Nix

Nix is a package manager and system configuration tool designed to make system management more reliable and reproducible.

Here are some key points about Nix:

  1. Package management: Nix allows you to install, upgrade, and remove software packages on your system.
  2. Declarative configuration: It enables you to describe your entire system configuration in a declarative manner.

Nix

  1. Reproducibility: Nix aims to create reproducible builds and environments, ensuring that software works consistently across different machines.
  2. Isolation: Packages are stored in isolation from each other, which helps prevent dependency conflicts.
  3. Rollbacks: Nix makes it easy to roll back to previous system states or package versions if needed.
  4. Multi-user support: Different users can have different software environments on the same system.

Nix

  1. NixOS: There's also a Linux distribution called NixOS that's built around the Nix package manager.
  2. Functional approach: Nix uses a functional programming language for its configuration, which can make it powerful but also require a learning curve.
  3. Nix is available for Linux, Windows (WSL2), macOS and Docker.

Nix host config

Simplified host configuration (from pbek/nixcfg):

{ config, pkgs, username, ... }:

{
  imports =
    [
      ./hardware-configuration.nix
      ../../modules/mixins/users.nix
      ../../modules/mixins/desktop.nix
      ../../modules/mixins/audio.nix
      ../../modules/mixins/jetbrains.nix
      ../../modules/mixins/openssh.nix
    ];

  networking.hostName = "sinope"; # Define your hostname.

  environment.systemPackages = with pkgs; [
    go-passbolt-cli
  ];
}