This ensures that all builds of activated profiles are included into the iso cache and don't require rebuilding within the live installer environment.
Lib
The lib directory mirrors the upstream concepts of nixpkgs:./lib
,
nixpkgs:./nixos/lib
and nixpkgs:./pkgs/pkgs-lib
,
but also occasionally nixpkgs:./pkgs/build-support
.
It comes with functions necesary to declutter devos
itself, but you are
welcome to extend it to your needs.
For example:
-
you want to add a library function that depends on some packages and use it throughout your devos environment: place it into
./lib
as if you would place it intonixpkgs:./pkgs/pkgs-lib
. -
you want to add library functions that don't depend on
pkgs
: place them into./lib
as if you would place them intonixpkgs:./lib
. -
need to try out a newish custom build support: place it here before upstreaming into
nixpkgs:./pkgs/build-support
. -
you want to reutilize certain module configuration functions or helpers: place them into
./lib
as if you would place them intonixpkgs:./nixos/lib
.
Once your library grows, we recoomend you start organizing them into subfolders
analogous nixpkgs
:
nixpkgs |
devos |
---|---|
./lib |
./lib |
./pkgs/pkgs-lib |
./lib/pkgs-lib |
./nixos/lib |
./lib/nixos-lib |
./pkgs/build-support |
./lib/pkgs-build |
Example
lib/nixos-lib/mkCustomI3BindSym/default.nix:
{ pkgs, writers, ... }:
{ name, cmd, workspace, baseKey }:
let
isWorkspaceEmpty = writers.writePython3 "is-workspace-empty" {
libraries = [ pkgs.python3Packages.i3ipc ];
} (builtins.readFile ./is-workspace-empty.py);
ws = builtins.toString workspace;
in
''
# ${name}
#bindsym ${baseKey}+${ws} workspace ${ws}; exec ${cmd}
bindsym ${baseKey}+${ws} workspace ${ws}; exec bash -c "${isWorkspaceEmpty} && ${cmd}"
''
lib/nixos-lib/mkCustomI3BindSym/is-workspace-empty.py:
# returns 0/1 if current workspace is empty/non-empty
import i3ipc
i3 = i3ipc.Connection()
tree = i3.get_tree()
def current_workspace():
return tree.find_focused().workspace()
if current_workspace().leaves():
print("Error current workspace is not empty")
exit(1)
exit(0)
lib/default.nix:
{ nixos, pkgs, ... }:
# ...
{
# ...
mkCustomI3BindSym = pkgs.callPackage ./nixos-lib/mkCustomI3BindSym { };
}