{ stable ? import , unstable ? import , gitpkgs ? import /nixpkgs/default.nix, config, lib, pkgs, ... }: with lib; let optPkgs = package: pkgstring: if elem pkgstring config.machine.pkgs then package else []; gitpkgs = import /nixpkgs/default.nix {}; # Programms I'm likely to want on every machine and/or may execute as root base = with pkgs; [ alsaUtils ccze cksfv cryptsetup dhcpcd dnsutils git gnupg gptfdisk home-manager htop hwinfo indent iptables lrzip lshw macchanger mkpasswd netcat 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 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: [ d.de d.en d.en-computers d.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 /* Git support */ magit emms # multimedia support wsd-mode plantuml-mode /* Other Stuff, not yet sorted */ google-translate transmission org-plus-contrib orgit ox-gfm ox-rst 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 /* C/C++ */ irony company-irony company-irony-c-headers flycheck-irony /* 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 spaceline # modeline beautification winum eyebrowse # window management auto-compile /* Maxima */ pkgs.maxima visual-fill-column web-mode melpaStablePackages.idris-mode helm-idris ]); extra = with pkgs; [ transmission texlive.combined.scheme-full ]; mailutils = with pkgs; [ fetchmail imagemagick isync mu-git pandoc postfix ]; cpp = with pkgs; [ clang cmake gcc global irony-server ]; haskell = pkgs.haskellPackages.ghcWithPackages (pkgs: with pkgs; [ mtl random ]); java = with pkgs; [ openjdk11 (with pkgs.eclipses; eclipseWithPlugins { eclipse = eclipse-platform; jvmArgs = [ "-Xmx2048m" ]; plugins = [ plugins.color-theme plugins.emacsplus plugins.checkstyle ]; }) ]; python3 = gitpkgs.python3Full.withPackages(ps: with ps; [ GitPython bpython configparser django elpy emoji epc genanki numpy opencv3 paho-mqtt pep8 pillow pip plotly pyflakes pylama pylint pyopengl pyproj requests schedule scipy selenium telegram tkinter toolz virtualenv # 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 /* temporarily fix python stuff */ py3status pytz tzlocal ]); rustpkgs = with pkgs; [ 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 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 mailutils "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 = { enable = (elem "emacs" config.machine.pkgs); install = (elem "emacs" config.machine.pkgs); package = emacs; }; }