1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7let
8 cfg = config.py.programs;
9 inherit (lib) mkEnableOption mkIf;
10in
11{
12 options.py.programs = {
13 bat.enable = mkEnableOption "bat";
14 direnv.enable = mkEnableOption "direnv";
15 fzf.enable = mkEnableOption "fzf";
16 nix-index.enable = mkEnableOption "nix-index";
17 obs.enable = mkEnableOption "OBS Studio";
18 pandoc.enable = mkEnableOption "pandoc";
19 wakatime.enable = mkEnableOption "wakatime";
20 zoxide.enable = mkEnableOption "zoxide";
21 };
22 config = {
23 catppuccin = {
24 bat.enable = cfg.bat.enable;
25 fzf.enable = cfg.fzf.enable;
26 obs.enable = cfg.obs.enable;
27 };
28 programs = {
29 bat = mkIf cfg.bat.enable {
30 enable = true;
31 };
32 direnv = mkIf cfg.direnv.enable {
33 enable = true;
34 enableBashIntegration = true;
35 enableNushellIntegration = true;
36 enableZshIntegration = true;
37 nix-direnv.enable = true;
38 stdlib = builtins.readFile ./direnv-stdlib.sh;
39 };
40 fzf = mkIf cfg.fzf.enable {
41 enable = true;
42 enableBashIntegration = true;
43 enableZshIntegration = true;
44 };
45 nix-index = mkIf cfg.nix-index.enable {
46 enable = true;
47 enableBashIntegration = true;
48 enableFishIntegration = true;
49 enableZshIntegration = true;
50 };
51 obs-studio = mkIf cfg.obs.enable {
52 enable = true;
53 plugins = with pkgs.obs-studio-plugins; [
54 obs-text-pthread
55 obs-backgroundremoval
56 input-overlay
57 obs-tuna
58 obs-pipewire-audio-capture
59 obs-vkcapture
60 wlrobs
61 ];
62 };
63 pandoc = mkIf cfg.pandoc.enable { enable = true; };
64 zoxide = mkIf cfg.zoxide.enable {
65 enable = true;
66 enableBashIntegration = true;
67 enableFishIntegration = true;
68 enableZshIntegration = true;
69 };
70 };
71 home = {
72 packages = mkIf cfg.wakatime.enable [ pkgs.wakatime ];
73 sessionVariables = {
74 WAKATIME_HOME = "${config.xdg.configHome}/wakatime";
75 };
76 };
77 };
78}