{ pkgs, inputs, config, system, ... }: with pkgs; let cfg = config.schmittlauch.packages; unstable = inputs.nixos-unstable.legacyPackages.${system}; graphicsApps = [ inkscape darktable exiftool gimp ] ++ (with gimpPlugins; [ fourier lqrPlugin ]) ++ lib.optionals pkgs.stdenv.isLinux [ hugin luminanceHDR xournal ]; multimediaApps = [ mpv yt-dlp ] ++ lib.optionals pkgs.stdenv.isLinux [ vlc amarok clementine elisa musescore tenacity soundkonverter config.nur.repos.fooker.studio-link ]; cliApps = [ myVim htop tmux httpie ponysay gti tree lsof mosh openssh sshfs-fuse cryfs openssh sshuttle thefuck gnupg unar lzop p7zip pwgen pandoc pdfgrep # zig dependency breaks occasionally, stay on C version for now ncdu_1 dos2unix unzip fswatch jq age lnav nix-output-monitor # putting this here as a plain `nix` alternative ] ++ lib.optionals pkgs.stdenv.isLinux [ xclip smbnetfs # for FUSE smb mounting psmisc # for killall torsocks agrep reptyr # re-bind running program to other tty config.nur.repos.schmittlauch.lolcommits ]; nixHelpers = [ nixpkgs-review unstable.nixfmt-rfc-style nix-top statix ]; devTools = [ curl httpie gcc shellcheck mtr ripgrep gitui lazygit pre-commit scriv # Haskell ghc cabal2nix ] ++ lib.optionals pkgs.stdenv.isLinux [ gdb strace ltrace valgrind zeal ]; pythonTools = with python3Packages; [ notebook ipython pip numpy matplotlib jedi jedi-language-server black flake8 mypy ]; fonts = [ comic-neue source-sans-pro source-code-pro source-serif-pro ubuntu_font_family twemoji-color-font open-sans (iosevka-bin.override { variant = "curly-slab"; }) config.nur.repos.schmittlauch.vollkorn # TODO: humor-sans # fcio corporate design, TODO module fira-code fira-mono # TODO fira-sans + condensed # TODO museo 500 ]; games = [ superTuxKart hedgewars ]; desktopApps = [ firefox chromium falkon thunderbird calibre dino zotero keepassxc ding aspell aspellDicts.de aspellDicts.en # for kate/KDE applications hunspellDicts.de-de hunspellDicts.en-us hunspellDicts.en-gb-ise seafile-client alacritty libreoffice-qt # fresh with KDE integration backintime-common anki signal-desktop (tor-browser-bundle-bin.override { mediaSupport = true; pulseaudioSupport = pkgs.stdenv.isLinux; }) pdfpc quaternion nheko gpxsee subsurface yate # split and merge PDFs in a GUI pdfarranger qbittorrent #(pkgs.pidgin-with-plugins.override { # plugins = [ pkgs.pidginotr ];}) logseq # for Hibiscus banking software jameica #ToDo: which of these drivers is actually used? geckodriver chromedriver ]; kdeTools = with plasma5Packages; with kdeGear; [ okular gwenview yakuake kmail kontact korganizer akonadi-mime # for KOrganizer kaddressbook kdeconnect dolphin spectacle kate kleopatra qdirstat ark kwalletmanager ktouch kcharselect konversation okteta krdc skanlite akonadiconsole tokodon # mastodon client ] ++ (with kdeFrameworks; [ networkmanager-qt kcrash breeze-gtk ]); in { options.schmittlauch.packages = { graphics = lib.mkEnableOption "Enable a common set of graphics apps"; multimedia = lib.mkEnableOption "Enable a common set of multimedia apps"; cli = lib.mkOption { description = "Enable a common set of CLI tools"; type = lib.types.bool; default = true; }; nixHelpers = lib.mkEnableOption "Enable a common set of Nix helper tools"; devTools = lib.mkEnableOption "Enable a common set of dev tools"; pythonTools = lib.mkEnableOption "Enable a common set of python tools"; games = lib.mkEnableOption "Enable some games"; desktop = lib.mkEnableOption "Enable a common set of desktop applications"; kde = lib.mkEnableOption "Enable a common set of KDE applications"; }; # TODO fonts in separate module # TODO latex in separate module config = { home.packages = lib.flatten ( (lib.optional cfg.graphics graphicsApps) ++ (lib.optional cfg.multimedia multimediaApps) ++ (lib.optional cfg.cli cliApps) ++ (lib.optional cfg.nixHelpers nixHelpers) ++ (lib.optional cfg.devTools devTools) ++ (lib.optional cfg.pythonTools pythonTools) ++ (lib.optional cfg.games games) ++ (lib.optional cfg.desktop desktopApps) ++ (lib.optional cfg.kde kdeTools) ); nixpkgs.overlays = import ../overlays.nix; nixpkgs.config = { clementine.spotify = false; vim = { gui = "gtk3"; python = true; multibyteSupport = true; }; }; }; }