aboutsummaryrefslogtreecommitdiff
path: root/share/hm-modules/hyprdesktop.nix
blob: de2a780096786905ae319aae83df4d65bf80e9a2 (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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
{ 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; [
      xh # Nice to use HTTP client
      bc # CLI calculator
      amfora # Gemini CLI browser
      trashy # Trash CLI
      tokei # counts lines of code
      btop # modern top
      wireplumber # session & policy manager for pipewire
      grim # screenshot utility for wayland
      slurp # region selection UI for wayland
      wl-clipboard # clipboard utility
      nushell # next-generation shell
      ffmpeg
      imagemagick
      exiftool
      sl
      jaq # json query tool
      mullvad
      # tools for dealing with all sorts archives
      atool
      unzip
      gnutar
      unrar-wrapper
      # Useful nix tooling
      nix-tree
      fzf

      # TUI/GUI programs
      cmus # music player
      calibre # Document organisation/reading program
      libreoffice-qt
      beekeeper-studio # SQL database client
      thunderbird # email client
      nsxiv # image viewer
      discord
      signal-desktop
      tdesktop # Telegram desktop
      fluffychat # matrix client
      qbittorrent # bittorrent client
      zathura # document reader
      bitwarden # password manager
      heroic # FOSS game launcher for GOG & Epic
      foliate

      # Other
      # It seems that not all gtk icon themes contain all icons? At least the
      # Flat-Remix icon themes don't contain all the icons that Foliate uses,
      # so I'm bringing in the adwaita icons as a fallback.
      gnome3.adwaita-icon-theme
    ] ++ lists.optionals cfg.hasBluetooth [ overskride ]
    ++ lists.optionals cfg.enableGaming [
      jdk17_headless
      superTuxKart
      wineWowPackages.full
      winetricks
    ]
    ++ lists.optionals (cfg.enableWindowsCompat || cfg.enableGaming) [
      wineWowPackages.full
      winetricks
      qemu_kvm
    ]
    ++ lists.optionals cfg.hasBrightnessCtl [
      brightnessctl
    ]
    ++ lists.optionals cfg.enableGitAnnex [
      git-annex
      git-remote-gcrypt
    ];

    home.shellAliases = {
      sl = "sl -awFc5";
    };

    services.dunst.enable = true;
    services.wpaperd.enable = true;
    services.poweralertd.enable = cfg.hasBattery;

    programs.mpv.enable = true;
    programs.git.enable = true;
    programs.kitty.enable = true;
    programs.waybar.enable = true;
    programs.firefox.enable = true;
    programs.tofi.enable = true;

    programs.gallery-dl.enable = true;

    programs.fish.enable = true;
    programs.eza.enable = true;
    programs.starship.enable = true;
    programs.atuin.enable = true;
    programs.nix-index.enable = true;

    programs.direnv = {
      enable = true;
      nix-direnv.enable = true;
    };
    programs.helix = {
      enable = true;
      defaultEditor = true;
    };

    xdg = {
      systemDirs.data =
        let
          gds = pkgs.gsettings-desktop-schemas;
          gtk3 = pkgs.gtk3;
        in
        [
          "${gds}/share/gsettings-schemas/${gds.name}"
          "${gtk3}/share/gsettings-schemas/${gtk3.name}"
        ];
      userDirs =
        let
          annex = "${config.home.homeDirectory}/Annex";
        in
        {
          enable = true;
          createDirectories = true;
        } // mkIf cfg.enableGitAnnex {
          pictures = "${annex}/Pictures";
          music = "${annex}/Music";
          documents = "${annex}/Documents";
        };
    };

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