/ home / modules / desktop.nix
desktop.nix
  1  {
  2    config,
  3    lib,
  4    pkgs,
  5    inputs,
  6    ...
  7  }:
  8  with lib;
  9  let
 10    cfg = config.maatwerk.desktop;
 11  in
 12  {
 13    options.maatwerk.desktop = {
 14      enable = mkEnableOption "Enable default desktop packages + configuration";
 15    };
 16  
 17    config = mkIf cfg.enable {
 18      maatwerk.browser.enable = true;
 19      maatwerk.ghostty.enable = true;
 20      maatwerk.stylix.enable = true;
 21      maatwerk.attic.enable = true;
 22      maatwerk.aerc.enable = true;
 23      maatwerk.khal.enable = true;
 24      maatwerk.nixvim.enable = true;
 25  
 26      age.secrets = {
 27        proton.file = "${inputs.secrets}/proton.age";
 28      };
 29  
 30      home.packages =
 31        with pkgs;
 32        with pkgs.kdePackages;
 33        [
 34          kooha # record screen wayland
 35          wev # wayland xev
 36          cheese # webcam
 37          dezoomify-rs # art archival
 38          localsend # airdrop
 39          wvkbd-desktop # osk
 40          gnupg
 41          devenv
 42  
 43          # file support
 44          zathura # pdf
 45          imv # image
 46          mpv # video
 47          mousepad # gui-notepad
 48          imagemagick # convert images
 49  
 50          # work
 51          citrix_workspace
 52  
 53          # networking
 54          wireguard-tools # wg-quick
 55          podman-compose # replace for dud
 56          nyx # tor debugging
 57  
 58          # forensics
 59          magika-cli # recognize filetype
 60          sleuthkit # fls, icat
 61          exiftool # read metadata
 62          binwalk # firmware analysis
 63          tesseract # ocr
 64          ent # test entropy files
 65          mat2 # remove metadata
 66          nmap
 67          xca
 68  
 69          # music
 70          strawberry
 71  
 72          # messaging
 73          signal-desktop
 74          fractal # matrix-client
 75        ];
 76  
 77      # DBus secret service
 78      services.pass-secret-service.enable = true;
 79  
 80      services.unison = {
 81        enable = true;
 82        pairs = {
 83          "notes" = {
 84            # NFS doesn't support inotify events
 85            commandOptions.repeat = "60";
 86            roots = [
 87              "/home/martijn/Notes"
 88              "/mnt/notes/"
 89            ];
 90          };
 91          "aichats" = {
 92            # NFS doesn't support inotify events
 93            commandOptions.repeat = "60";
 94            roots = [
 95              "${config.xdg.configHome}/aichat/sessions"
 96              "/mnt/session/"
 97            ];
 98          };
 99        };
100      };
101  
102      programs.gpg = {
103        enable = true;
104        scdaemonSettings = {
105          # Use system PCSC driver
106          disable-ccid = true;
107          # Allow OpenSC to touch the card
108          pcsc-shared = true;
109          # Stop GPG from blocking Firefox
110          disable-application = "piv";
111          # card-timeout = "5";
112        };
113      };
114      services.gpg-agent = {
115        enable = true;
116        enableSshSupport = false;
117        pinentry.package = pkgs.pinentry-qt;
118        defaultCacheTtl = 43200;
119        maxCacheTtl = 43200;
120      };
121  
122    };
123  }