this post was submitted on 27 Apr 2025
15 points (100.0% liked)

Nix / NixOS

2154 readers
1 users here now

Main links

Videos

founded 2 years ago
MODERATORS
 

As the title says. Want that i can have a single config for my systems and just require a single line to install and configure software which i always use in a bundle(office, specific programming applications, server applications,...).

you are viewing a single comment's thread
view the rest of the comments
[–] Corbin 6 points 4 days ago

I'm a fan of putting factored expressions into their own files and importing those files as NixOS modules. For example, let's say that we want to install vim. We might start with a vim.nix:

{ pkgs, ... }: {
  environment.systemPackages = [ pkgs.vim ];
}

Then in the main configuration, this can be imported by path:

{
    imports = [ ./vim.nix ];
}

Adding the import is like enabling the feature, but without any options or config. Later on, the feature can be customized without changing the import-oriented usage pattern:

{ pkgs, ... }:
let
  vim = ...;
in {
  environment.systemPackages = [ vim ];
}

Since the imported file is a complete NixOS module, it can carry other configuration. Here's a real example, adb.nix, which adds Android debugger support:

{ pkgs, ... }: {
  programs.adb.enable = true;
  environment.systemPackages = [ pkgs.pmount ];
  users.users.corbin.extraGroups = [ "adbusers" ];
}