aboutsummaryrefslogtreecommitdiff
path: root/share/hm-modules/hyprdesktop.nix
blob: 82adbffbb24b000e2a9625aec54541ec853d6038 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
{
  config,
  pkgs,
  lib,
  ...
}:
let
  inherit (lib)
    mkIf
    mkOption
    mkEnableOption
    types
    mdDoc
    lists
    ;
  cfg = config.custom.hyprdesktop;
in
{
  imports = [ ../home/minimal.nix ];

  options.custom.hyprdesktop = {
    enable = mkEnableOption "Enable hyprdesktop";

    mainUser = mkOption {
      type = types.str;
      example = "alice";
      description = mdDoc "Main superuser's username.";
    };

    hasBluetooth = mkOption {
      type = types.bool;
      default = false;
      example = "true";
    };
    hasBrightnessCtl = mkOption {
      type = types.bool;
      default = false;
      example = "true";
    };
    hasBattery = mkOption {
      type = types.bool;
      default = false;
      example = "true";
    };

    enableGaming = mkOption {
      type = types.bool;
      default = false;
      example = "true";
    };
    enableWindowsCompat = mkOption {
      type = types.bool;
      default = false;
      example = "true";
    };
    enableGitAnnex = mkOption {
      type = types.bool;
      default = true;
      example = "false";
    };
  };

  config = mkIf cfg.enable {
    wayland.windowManager.hyprland.enable = true;
    home.packages =
      with pkgs;
      [
        wireplumber # session & policy manager for pipewire
        grim # screenshot utility for wayland
        slurp # region selection UI for wayland
        wl-clipboard # clipboard utility
        xdg-utils
      ]
      ++ lists.optionals cfg.hasBluetooth [ overskride ]
      ++ lists.optionals cfg.enableGaming [
        prismlauncher
        jdk17_headless
        wineWowPackages.wayland
        aisleriot
        heroic
      ]
      ++ lists.optionals (cfg.enableWindowsCompat || cfg.enableGaming) [
        wineWowPackages.wayland
        qemu_kvm
      ]
      ++ lists.optionals cfg.hasBrightnessCtl [ brightnessctl ]
      ++ lists.optionals cfg.enableGitAnnex [
        git-annex
        git-remote-gcrypt
      ];

    home.pointerCursor = {
      gtk.enable = true;
      package = pkgs.vanilla-dmz;
      name = "Vanilla-DMZ";
      size = 20;
    };

    services.dunst.enable = true;
    services.wpaperd.enable = true;
    services.poweralertd.enable = cfg.hasBattery;
    programs.jujutsu.enable = true;
    programs.foot.enable = true;
    programs.waybar.enable = true;
    programs.tofi.enable = true;

    xdg.portal = {
      enable = true;
      extraPortals = [ pkgs.kdePackages.xdg-desktop-portal-kde ];
      xdgOpenUsePortal = true;
      config = {
        kde = {
          default = [ "kde" ];
          "org.freedesktop.impl.portal.Secret" = [
            "kwallet"
          ];
        };
        hyprland.default = [ "hyprland" ];
      };
    };

    gtk = {
      theme = {
        package = pkgs.flat-remix-gtk;
        name = "Flat-Remix-GTK-Blue-Darkest";
      };
      iconTheme = {
        package = pkgs.flat-remix-icon-theme;
        name = "Flat-Remix-Blue-Dark";
      };
    };
  };
}