ark/lib
David Arnold db716d1921
lib: ensure path type in mkProfileAttrs
This is required so that filtering via lib.remove works against 
modules.core and similar which are of path type.

It is also a prerequisite for disabledModules to match by module.key
instead of path string relative to nixpkgs' modulePath.
2021-03-18 23:46:47 -05:00
..
devos lib: ensure path type in mkProfileAttrs 2021-03-18 23:46:47 -05:00
attrs.nix treewide cleanups and refactoring for initial tests (#157) 2021-03-14 07:10:51 +00:00
default.nix lib/devos: bake devos repo into live cd (#168) 2021-03-16 19:50:38 +00:00
lists.nix treewide cleanups and refactoring for initial tests (#157) 2021-03-14 07:10:51 +00:00
README.md lib: add usage docs 2021-03-01 14:37:43 -05:00
strings.nix lib: add rgxToString function 2021-03-14 21:40:49 -06: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 { };
}