{ config, pkgs, identity, dotfilesPath, ...}: { imports = [ ./nix/hm-micro-editor.nix ]; home.username = identity.username; home.homeDirectory = "/home/${identity.username}"; home.stateVersion = "26.05"; # From https://github.com/NixOS/nixpkgs/blob/nixos-26.05/pkgs/top-level/unixtools.nix#L17-L19 # You should always try to use single binaries when available. For # instance, if your program needs to use "ps", just list it as a build # input, not "procps" which requires Linux. # idk... it uses one more level of redirection and it makes it harder for me to # determine the ultimate source for some of these otherwise home.packages = with pkgs; [ # TODO: I need to find a better way to audit the transitive dependencies # Luckily on most that I saw the (runtime) dependencies are quite minimal # zip # Built from source from ftp://ftp.info-zip.org or https://src.fedoraproject.org zip # unzip # Build from source from mirror://sourceforge/infozip/unzip unzip # fd # Built from source from github, sharkdp/fd fd # micro # Built from source from github, micro-editor/micro micro # curl # Built from... source? from https://curl.haxx.se/download or https://github.com/curl/curl curl # p7zip # Built from source from github p7zip-project/p7zip and builds it p7zip # less - pager # Built from source from https://www.greenwoodsoftware.com less # procps - /proc utilities, specifically for ps # Built from source from mirror://sourceforge/procps-ng/procps-ng-... procps # iputils - ping and others # Built from source from github iputils/iputils iputils # git - This is added below by the git configuration # bash - This should already be installed on any machine I'd be using # TODO: Add dig ]; programs.home-manager.enable = true; # Bash # DO NOT USE programs.bash. I find it annoying to disable all the defaults # when I can't configure it in the same way my .bashrc does (with the very # specific history config). I also dont want to translate all of this into # nix-y specifications, when the underlying format is very non-nix. # Reminder: # Bash has 2 dimensions # * non-interactive vs interactive - `bash -c ...` vs just using a tty # * login vs non-login - First shell after sshing or opening a tty is the login shell # .bashrc is run for every NON-LOGIN shell (but we run it for _every_ shell using .profile, see below) home.file.".bashrc".source = config.lib.file.mkOutOfStoreSymlink "${dotfilesPath}/.bashrc"; # .profile is run only in the LOGIN shell (but is also run for sh and others...) # .profile has a line that, if running with bash, run the .bashrc # Does not run if .bash_profile exists! # TODO: I need to make sure .bash_profile gets deleted!! # TODO: I need to maybe thing about /etc/bash.bashrc and all these other fucking shell files litered around the system?? home.file.".profile".source = config.lib.file.mkOutOfStoreSymlink "${dotfilesPath}/.profile"; # Git programs.git = { enable = true; package = pkgs.gitMinimal; settings = { user.name = identity.git.name; user.email = identity.git.email; core.excludesfile = "${dotfilesPath}/.gitignore"; core.editor = "micro"; init.defaultBranch = identity.git.defaultBranch; }; }; # Fd home.file.".config/fd/ignore".source = config.lib.file.mkOutOfStoreSymlink "${dotfilesPath}/.config/fd/ignore"; # Override locales to only include EN (this fixes the 200MB include) # i18n.glibcLocales = pkgs.glibcLocales.override { # allLocales = false; # locales = [ "en_US.UTF-8/UTF-8" ]; # }; }