{ hostConfig, pkgs ? (import ./pkgs.nix).stable {}, }: let recursiveMerge = with pkgs.lib; attrList: let f = attrPath: zipAttrsWith (n: values: if tail values == [] then head values else if all isList values then unique (concatLists values) else if all isAttrs values then f (attrPath ++ [n]) values else last values ); in f [] attrList; config = recursiveMerge [ (import ./config/default.nix) hostConfig ]; in rec { gitConfig = pkgs.stdenv.mkDerivation { name = "mediocregopher-git-config"; gitConfigBase = ./base/gitconfig; gitConfigCustom = builtins.toFile "mediocregopher-git-config-custom" (pkgs.lib.generators.toGitINI config.git); builder = builtins.toFile "builder.sh" '' source $stdenv/setup dir="$out"/git mkdir -p "$dir" cp "$gitConfigBase" "$dir"/config cp "$gitConfigCustom" "$dir"/custom ''; }; gitWrapped = pkgs.writeShellScript "git" '' export XDG_CONFIG_HOME=${gitConfig} exec ${pkgs.git}/bin/git "$@" ''; git = pkgs.runCommand "mediocregopher-git" {} '' cp -rL "${pkgs.git}" "$out" chmod -R +rwX "$out" cp "${gitWrapped}" "$out"/bin/git ''; bin = pkgs.buildEnv { name = "mediocregopher-bin"; paths = [ (pkgs.runCommand "mediocregopher-default-bin" {} '' mkdir -p "$out" cp -rL "${./bin}" "$out"/bin '') ] ++ ( builtins.map (cFn: cFn pkgs) config.binExtra ); }; zsh = ((import ./zsh) { inherit config; }).zsh; awesome = ((import ./awesome) { inherit config; }); loadout = pkgs.buildEnv { name = "loadout"; paths = [ pkgs.dosfstools pkgs.hdparm pkgs.smartmontools pkgs.gnugrep pkgs.silver-searcher pkgs.gawk pkgs.tree pkgs.pv pkgs.less pkgs.tmux pkgs.calc pkgs.units pkgs.man pkgs.man-pages pkgs.man-pages-posix git pkgs.mercurial pkgs.breezy # bzr pkgs.nano pkgs.gnumake pkgs.cmake pkgs.strace pkgs.curl pkgs.wget pkgs.rsync pkgs.hostname pkgs.netcat pkgs.nmap pkgs.dnsutils pkgs.openssh pkgs.sshfs pkgs.fuse3 pkgs.usbutils pkgs.tcpdump pkgs.ncdu pkgs.htop pkgs.jnettop pkgs.iotop pkgs.zip pkgs.unzip pkgs.unrar pkgs.gzip pkgs.jq pkgs.yq pkgs.rsbkb pkgs.tomb pkgs.udiskie pkgs.xterm # nice to have a backup pkgs.libreoffice pkgs.gimp pkgs.inkscape pkgs.vlc pkgs.sylpheed pkgs.calibre pkgs.lagrange pkgs.pavucontrol pkgs.xdg-utils pkgs.arandr pkgs.xsel pkgs.xorg.xrandr pkgs.wireshark pkgs.electrum (pkgs.callPackage ./nix/bandcamp-dl.nix {}) bin ((import ./nvim) {}).nvim zsh ((import ./alacritty) { inherit config zsh; }).alacritty ((import ./alacritty) { inherit config zsh; }).alacrittyLight awesome.env pkgs.nixgl ]; }; fonts = pkgs.buildEnv { name = "fonts"; paths = [ pkgs.nerdfonts pkgs.source-code-pro ]; }; }