{ 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 sl jaq # json query tool mullvad # tools for dealing with all sorts archives atool zip unzip gnutar unrar-wrapper gzip # other random CLI's fzf wget xdg-utils yazi # TUI file manager pandoc (pass-nodmenu.withExtensions (exts: [ exts.pass-otp ])) rsync rclone # Developer stuff git gitui scheme-manpages guile # TUI/GUI programs thunderbird # email client aerc # email client nsxiv # image viewer signal-desktop whatsapp-for-linux qbittorrent # bittorrent client zathura # document reader foliate nyxt zed-editor # 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. adwaita-icon-theme ] ++ 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.file.guile-init = { target = ".guile"; text = '' (use-modules (ice-9 readline)) (activate-readline) ''; }; home.pointerCursor = { gtk.enable = true; package = pkgs.vanilla-dmz; name = "Vanilla-DMZ"; size = 20; }; home.shellAliases = { sl = "sl -awFc5"; }; services.dunst.enable = true; services.wpaperd.enable = true; services.poweralertd.enable = cfg.hasBattery; services.emacs.enable = true; programs.mpv.enable = true; programs.git.enable = true; programs.jujutsu.enable = true; programs.foot.enable = true; programs.waybar.enable = true; programs.firefox.enable = true; programs.tofi.enable = true; programs.aerc.enable = true; programs.gallery-dl.enable = true; programs.fish.enable = true; programs.eza.enable = true; programs.zoxide.enable = true; programs.senpai.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; # Disable dirs that I don't use desktop = null; publicShare = null; templates = null; } // mkIf cfg.enableGitAnnex { pictures = "${annex}/Pictures"; music = "${annex}/Music"; documents = "${annex}/Documents"; download = "${annex}/Downloads"; }; portal.xdgOpenUsePortal = true; }; 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"; }; }; }; }