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

Nix / NixOS

2152 readers
3 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,...).

all 4 comments
sorted by: hot top controversial new old
[–] [email protected] 9 points 3 days ago

If it's only for your self I would write a nix module that does everything you need, then import the module in the system configuration. If you want to enable/disable it all you need is to add/remove one line in the imports section.

[–] [email protected] 6 points 3 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" ];
}
[–] [email protected] 4 points 3 days ago

Write a NixOS module, publish it in a flake in the nixosModules output, import that flake in your flake-based NixOS configs.