os/lib
2021-04-18 22:40:53 -05:00
..
devos ref: cave out instances of userFLake dependencies and intject them as 2021-04-18 22:16:53 -05:00
mkFlake fix: constructors of mkFlake function family 2021-04-18 22:29:28 -05:00
pkgs-lib ref: simplify pkgs-lib deps injection 2021-04-18 22:40:53 -05:00
tests ref: extract lib into subflake 2021-04-18 19:11:26 -05:00
attrs.nix ref: reduce exposure to callLibs 2021-04-18 22:16:53 -05:00
flake.nix fix: constructors of mkFlake function family 2021-04-18 22:29:28 -05:00
lists.nix ref: reduce exposure to callLibs 2021-04-18 22:16:53 -05:00
README.md lib: add usage docs 2021-03-01 14:37:43 -05:00
strings.nix ref: reduce exposure to callLibs 2021-04-18 22:16:53 -05:00

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 into nixpkgs:./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 into nixpkgs:./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 into nixpkgs:./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 { };
}