{ lib, config, pkgs, ... }: { imports = [ ../vars.nix ./fcitx.nix ./secrets.nix ./emacs.nix ./firefox.nix ./git.nix ./hyprland.nix ./mpv.nix ./yt-dlp.nix ./wofi.nix ./kitty.nix ./waybar.nix ./zsh.nix ./mbsync.nix ./msmtp.nix ./gammastep.nix ./mpd.nix ./mako.nix ./user.nix ]; options = { monorepo.profiles = { enable = lib.mkEnableOption "Enables home manager desktop configuration"; # Programs lang-c.enable = lib.mkEnableOption "Enables C language support"; lang-sh.enable = lib.mkEnableOption "Enables sh language support"; lang-rust.enable = lib.mkEnableOption "Enables Rust language support"; lang-python.enable = lib.mkEnableOption "Enables python language support"; lang-sol.enable = lib.mkEnableOption "Enables solidity language support"; lang-openscad.enable = lib.mkEnableOption "Enables openscad language support"; lang-js.enable = lib.mkEnableOption "Enables javascript language support"; lang-nix.enable = lib.mkEnableOption "Enables nix language support"; lang-coq.enable = lib.mkEnableOption "Enables coq language support"; crypto.enable = lib.mkEnableOption "Enables various cryptocurrency wallets"; art.enable = lib.mkEnableOption "Enables various art programs"; music.enable = lib.mkEnableOption "Enables mpd"; hyprland = { enable = lib.mkEnableOption "Enables hyprland"; monitors = lib.mkOption { type = lib.types.listOf lib.types.str; default = [ "HDMI-A-1" "eDP-1" "DP-2" "DP-3" "LVDS-1" ]; example = []; description = "Hyprland monitors"; }; }; email = { email = lib.mkOption { type = lib.types.str; default = "ret2pop@gmail.com"; example = "john@example.com"; description = "Email address and imaps/smtps account"; }; imapsServer = lib.mkOption { type = lib.types.str; default = "imap.gmail.com"; example = "imap.example.com"; description = "imaps server address"; }; smtpsServer = lib.mkOption { type = lib.types.str; default = "smtp.gmail.com"; example = "smtp.example.com"; description = "smtp server address"; }; enable = lib.mkEnableOption "Enables email"; }; }; }; config = { home.packages = (if config.monorepo.profiles.email.enable then [ pkgs.mu ] else []) ++ (if config.monorepo.profiles.lang-c.enable then (with pkgs; [ autobuild clang gdb gnumake bear clang-tools ]) else []) ++ (if config.monorepo.profiles.lang-js.enable then (with pkgs; [ nodejs bun yarn typescript vscode-langservers-extracted ]) else []) ++ (if config.monorepo.profiles.lang-rust.enable then (with pkgs; [ cargo rust-analyzer rustfmt ]) else []) ++ (if config.monorepo.profiles.lang-python.enable then (with pkgs; [ poetry python3 python312Packages.jedi ]) else []) ++ (if config.monorepo.profiles.lang-sol.enable then (with pkgs; [ solc ]) else []) ++ (if config.monorepo.profiles.lang-openscad.enable then (with pkgs; [ openscad openscad-lsp ]) else []) ++ (if config.monorepo.profiles.lang-sh.enable then (with pkgs; [ bash-language-server ]) else []) ++ (if config.monorepo.profiles.lang-coq.enable then (with pkgs; [ coq ]) else []) ++ (if config.monorepo.profiles.lang-nix.enable then (with pkgs; [ nil nixd nixfmt-rfc-style ]) else []) ++ (if config.monorepo.profiles.crypto.enable then (with pkgs; [ bitcoin electrum monero-cli monero-gui ]) else []) ++ (if config.monorepo.profiles.art.enable then (with pkgs; [ inkscape krita ]) else []) ++ (if config.monorepo.profiles.music.enable then (with pkgs; [ mpc-cli sox ]) else []); monorepo.profiles = { enable = lib.mkDefault true; music.enable = lib.mkDefault true; hyprland.enable = lib.mkDefault true; email.enable = lib.mkDefault true; # Programming lang-c.enable = lib.mkDefault true; lang-rust.enable = lib.mkDefault true; lang-python.enable = lib.mkDefault true; lang-sol.enable = lib.mkDefault true; lang-sh.enable = lib.mkDefault true; lang-openscad.enable = lib.mkDefault true; lang-js.enable = lib.mkDefault true; lang-nix.enable = lib.mkDefault true; lang-coq.enable = lib.mkDefault true; crypto.enable = lib.mkDefault true; art.enable = lib.mkDefault true; }; }; }