devos/lib
bors[bot] 3823eb6423
Merge #231
231: Move flake implementation logic to lib r=nrdxp a=Pacman99

This is a simpler version of #218 that moves flake logic to lib and adds a module to evaluate devos. This DOES NOT support out of tree usage, so if you were following any of the previous PR's, the doc sections/examples to use devos as a library will not work. There is work to make a cleaner api and only then will out of tree support work. Until then, this is still useful to simplify devos and clean up a lot of the implementation logic.

Co-authored-by: Pacman99 <pachum99@gmail.com>
2021-04-09 02:58:30 +00:00
..
devos make core an unecessary profile and add to suites 2021-04-06 19:00:57 -07:00
mkFlake drop toString in evalArgs - trying to fix CI 2021-04-06 17:33:05 -07:00
attrs.nix lib: only readDir if path exists with safeReadDir 2021-04-01 11:39:02 -07:00
default.nix lib: init mkFlake to create a devos flake 2021-04-06 12:45:04 -07:00
lists.nix drop toString in pathsIn - trying to fix CI issues 2021-04-06 17:02:30 -07: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 { };
}