ark/lib
Timothy DeHerrera d51cd34fb7
subflakes: make first class citizens
Subflakes should provide their wares as outputs, so wire up the pkgs
flake to reflect that.

Due to the unstable nature of flakes, updating the root flake doesn't
currently update the subflake lock file. Therefore, add additional
logic to flk update script in order to do this behind the scenes.

Nix is now pulled in from the "nix" registry flake in order for users
to take advantage of improvements to the UI since its last update in
nixpkgs.
2021-03-14 21:27:58 -06:00
..
devos subflakes: make first class citizens 2021-03-14 21:27:58 -06:00
attrs.nix treewide cleanups and refactoring for initial tests (#157) 2021-03-14 07:10:51 +00:00
default.nix treewide cleanups and refactoring for initial tests (#157) 2021-03-14 07:10:51 +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

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 { };
}