{ config, lib, pkgs, ... }: with lib; let cfg = config.machine; optPkgs = package: pkgstring: optionals (elem pkgstring cfg.pkgs) package; gitpkgs = import /nixpkgs {}; stablepkgs = import {}; # Programms I'm likely to want on every machine and/or may execute as root base = with pkgs; [ alsaUtils finger_bsd ccze cksfv cryptsetup dhcpcd dnsutils git git-lfs gnupg gptfdisk haskellPackages.nix-derivation home-manager htop hwinfo indent iptables jp lrzip lsof lshw macchanger mkpasswd netcat nix-diff nix-index nix-plugins nix-prefetch-git nix-serve nix-update-source nix-zsh-completions nixbang nixops nmap nox ntfs3g oh-my-zsh openssl parted p7zip pciutils psmisc rfkill ripgrep rsync sl sysvtools telnet traceroute tree unrar unzipNLS usbutils vim vulnix wget whois wirelesstools wpa_supplicant zip zlib zsh ]; dict = with pkgs; [ translate-shell ( hunspellWithDicts (with pkgs.hunspellDicts; [ de-de en-us ] )) ( aspellWithDicts (d: with d; [ de en en-computers en-science ] )) ]; emacs = gitpkgs.emacsWithPackages (epkgs: with epkgs; [ /* Theming */ solarized-theme color-theme-sanityinc-tomorrow moe-theme powerline moody minions /*General Stuff */ rainbow-delimiters # color parenthesis by indentation color-identifiers-mode /* Python */ company-jedi pylint melpaStablePackages.elpy flycheck-mypy /* Git support */ magit emms # multimedia support wsd-mode plantuml-mode /* Other Stuff, not yet sorted */ mu4e-alert google-translate tramp transmission org-plus-contrib orgit ox-gfm ox-rst easy-jekyll markdown-mode impatient-mode simple-httpd htmlize eclim auto-complete pkgs.aspell pkgs.aspellDicts.en pkgs.aspellDicts.de use-package diminish bind-key smartparens evil-surround evil-indent-textobject evil-cleverparens avy undo-tree cdlatex # for math expressions helm /* LaTeX */ auctex helm-bibtex cdlatex markdown-mode flycheck pkgs.ledger yaml-mode company # Irony is currently broken. # /* C/C++ */ irony company-irony company-irony-c-headers flycheck-irony clang-format pkgs.clang-tools /* Haskell */ haskell-mode flycheck-haskell /* Org */ org org-ref pdf-tools org-bullets org-caldav /* Rust */ rust-mode flycheck-rust racer /* mail */ messages-are-flowing /* Nix */ nix-buffer nix-mode nixos-options company-nixos-options nix-sandbox paganini-theme json-navigator spaceline # modeline beautification winum eyebrowse # window management auto-compile /* Maxima */ pkgs.maxima visual-fill-column web-mode melpaStablePackages.idris-mode helm-idris /* Java */ # projectile yasnippet lsp-mode hydra company-lsp lsp-ui lsp-java dap-mode cl-lib meghanada autodisass-java-bytecode google-c-style realgud weechat ]); extra = with pkgs; [ imagemagick texlive.combined.scheme-full transmission ]; mail_utils = with pkgs; [ fetchmail isync mailutils mu pandoc postfix ]; cpp = with pkgs; [ clang cmake gcc global irony-server ]; haskell = pkgs.haskellPackages.ghcWithPackages (pkgs: with pkgs; [ hindent mtl random ]); haskell-tools = with pkgs; [ cabal-install hlint]; # ghcid java = with pkgs; [ openjdk11 maven (with gitpkgs.eclipses; eclipseWithPlugins { eclipse = eclipse-platform; jvmArgs = [ "-Xmx2048m" ]; plugins = with plugins; [ color-theme # emacsplus checkstyle eclemma ]; }) ]; python3 = pkgs.python3Full.withPackages(ps: with ps; [ GitPython bpython cairosvg cairocffi configparser django elpy emoji epc flake8 genanki mypy numpy opencv3 paho-mqtt pep8 pillow pip plotly pyflakes pygame pygame_sdl2 pylama pylint pyopengl pyproj pytest requests schedule scipy selenium telegram tkinter toolz virtualenv xdot # flask # flask-common # flask-compress # flask-cors # flask-limiter # flask-pymongo # flask-restful # flask-restplus # flask_assets # flask_elastic # flask_login # flask_mail # flask_marshmallow # flask_migrate # flask_oauthlib # flask_principal # flask_script # flask_sqlalchemy # flask_testing # flask_wtf # flaskbabel ] ++ optionals (elem "i3" cfg.desktop.wms) [ py3status pytz tzlocal ]); rustpkgs = with stablepkgs; [ rustup carnix rustracer ]; server = with pkgs; [ audit letsencrypt php simp_le ]; uniProgs = with pkgs; [ qucs ]; xpkgs = with pkgs; [ feh scrot theme_flat-remix theme_sddm_midnight gnome3.dconf gnome3.gnome-terminal gnome3.gvfs gvfs gitpkgs.krita gitpkgs.gmic_krita_qt oneko pcmanfm lxmenu-data shared_mime_info pavucontrol xclip xlibs.xkill xorg.xbacklight xdiskusage ]; in { environment.systemPackages = base ++ (optPkgs dict "dict") ++ (optPkgs [emacs] "emacs") ++ (optPkgs extra "extra") ++ (optPkgs mail_utils "mailutils") ++ (optPkgs cpp "cpp") ++ (optPkgs [haskell] "haskell") ++ (optPkgs java "java") ++ (optPkgs [python3] "python3") ++ (optPkgs rustpkgs "rustpkgs") ++ (optPkgs server "server") ++ (optPkgs uniProgs "uniProgs") ++ (optPkgs xpkgs "xpkgs"); services.emacs = mkIf (elem "emacs" cfg.pkgs) { defaultEditor = true; enable = true; install = true; package = emacs; }; }