Prevents mkHosts subverting standard devos api to import core and add all necessary core features to mkHosts, so core can be safely deleted in suites
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 { };
}