{ config, lib, pkgs, pkgs-unstable, ... }: { # Home Manager needs a bit of information about you and the paths it should # manage. home.username = "millironx"; home.homeDirectory = "/Users/millironx"; # This value determines the Home Manager release that your configuration is # compatible with. This helps avoid breakage when a new Home Manager release # introduces backwards incompatible changes. # # You should not change this value, even if you update Home Manager. If you do # want to update the value, then make sure to first check the Home Manager # release notes. home.stateVersion = "23.11"; # Please read the comment before changing. # The home.packages option allows you to install Nix packages into your # environment. home.packages = with pkgs; [ act anki-bin # anki is broken on aarch64-darwin asitop bat cowsay direnv earthly ffmpeg figlet fortune gh gitflow git-absorb gnugrep gnupg gnused htop inkscape-with-extensions jq lapce logseq lsd lynx most musescore neovide nil nixd nixfmt pandoc pinentry_mac pipx python3 quarto shellcheck pkgs-unstable.signal-desktop sketchybar-app-font sqlitebrowser texlive.combined.scheme-full pkgs-unstable.woodpecker-cli yt-dlp pkgs-unstable.zed-editor zotero zulu17 # # It is sometimes useful to fine-tune packages, for example, by applying # # overrides. You can do that directly here, just don't forget the # # parentheses. Maybe you want to install Nerd Fonts with a limited number of # # fonts? (pkgs.nerdfonts.override { fonts = [ "FiraCode" "Hack" "Meslo" "NerdFontsSymbolsOnly" ]; }) # # You can also create simple shell scripts directly inside your # # configuration. For example, this adds a command 'my-hello' to your # # environment: # (pkgs.writeShellScriptBin "my-hello" '' # echo "Hello, ${config.home.username}!" # '') (pkgs.writeShellScriptBin "nd" '' mkdir "$1" cd "$1" '') (pkgs.writeShellScriptBin "uq" '' xattr -rdv com.apple.quarantine "/Applications/$1.app" '') ]; # Home Manager is pretty good at managing dotfiles. The primary way to manage # plain files is through 'home.file'. home.file = { # # Building this configuration will create a copy of 'dotfiles/screenrc' in # # the Nix store. Activating the configuration will then make '~/.screenrc' a # # symlink to the Nix store copy. # ".screenrc".source = dotfiles/screenrc; # # You can also set the file content immediately. # ".gradle/gradle.properties".text = '' # org.gradle.console=verbose # org.gradle.daemon.idletimeout=3600000 # ''; }; # Home Manager can also manage your environment variables through # 'home.sessionVariables'. If you don't want to manage your shell through Home # Manager then you have to manually source 'hm-session-vars.sh' located at # either # # ~/.nix-profile/etc/profile.d/hm-session-vars.sh # # or # # /etc/profiles/per-user/millironx/etc/profile.d/hm-session-vars.sh # home.sessionVariables = { EDITOR = "nvim"; PAGER = "most"; NXF_HOME = "$HOME/.nextflow"; NXF_CACHE = "$HOME/.cache/nextflow"; NXF_CONDA_CACHEDIR = "$NXF_CACHE/conda"; NXF_SINGULARITY_CACHEDIR = "$NXF_CACHE/singularity"; JULIA_NUM_THREADS = "$(sysctl -n hw.logicalcpu)"; JULIA_PKG_USE_CLI_GIT = "true"; GPG_TTY = "$(tty)"; SSH_AUTH_SOCK = "$(gpgconf --list-dirs agent-ssh-socket)"; }; home.shellAliases = { cat = "bat"; ls = "lsd"; code = "codium"; nproc = "sysctl -n hw.logicalcpu"; please = "sudo $(fc -ln -1)"; nrun = '' __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only"''; grim = "git rebase -i --autosquash $(git_main_branch)"; grid = "git rebase -i --autosquash $(git_develop_branch)"; gpub = "git push --set-upstream origin $(git rev-parse --abbrev-ref HEAD)"; }; home.sessionPath = [ "$HOME/.julia/bin" "$HOME/.juliaup/bin" "$HOME/.cargo/bin" "$HOME/.local/bin" "$HOME/.rd/bin" ]; # Let Home Manager install and manage itself. programs.home-manager.enable = true; programs.bash = { enable = true; initExtra = '' # >>> conda initialize >>> # !! Contents within this block are managed by 'conda init' !! __conda_setup="$($HOME/miniconda3/bin/conda shell.bash 'hook' 2> /dev/null)" if [ $? -eq 0 ]; then eval "$__conda_setup" else if [ -f "$HOME/miniconda3/etc/profile.d/conda.sh" ]; then . "$HOME/miniconda3/etc/profile.d/conda.sh" else export PATH="$HOME/miniconda3/bin:$PATH" fi fi unset __conda_setup if [ -f "$HOME/miniconda3/etc/profile.d/mamba.sh" ]; then . "$HOME/miniconda3/etc/profile.d/mamba.sh" fi # <<< conda initialize <<< export PS1="[\[\e[32m\]\u\[\e[m\]@\[\e[33m\]\h\[\e[m\] \[\e[34m\]\W\[\e[m\]] \\$ " ''; profileExtra = '' if [ "$(arch)" = "i386" ]; then eval "$(/usr/local/bin/brew shellenv bash)" else eval "$(/opt/homebrew/bin/brew shellenv bash)" fi #gpgconf --launch gpg-agent ''; }; programs.bat = { enable = true; config = { pager = "less -SRF"; }; }; programs.direnv = { enable = true; enableBashIntegration = true; enableZshIntegration = true; }; programs.git = { enable = true; userName = "Thomas A. Christensen II"; userEmail = "25492070+MillironX@users.noreply.github.com"; signing = { key = "0x19A2EF3A3C0C18A9!"; signByDefault = true; }; extraConfig = { core = { editor = "nvim"; }; credential = { helper = "store"; }; color = { ui = "auto"; }; init = { defaultBranch = "master"; }; }; }; programs.gpg.enable = true; programs.neovim = { enable = true; package = pkgs.neovim-unwrapped; coc.enable = true; plugins = with pkgs.vimPlugins; [ mason-nvim mason-lspconfig-nvim nvim-lspconfig nvim-dap nvim-dap-ui null-ls-nvim nvim-lint formatter-nvim lspsaga-nvim vim-slime ]; extraLuaConfig = '' require("mason").setup() ''; }; programs.zsh = { enable = true; autosuggestion.enable = true; enableCompletion = true; completionInit = "autoload -U compinit && compinit; autoload -U bashcompinit && bashcompinit"; antidote = { enable = true; plugins = [ "ohmyzsh/ohmyzsh path:lib" "ohmyzsh/ohmyzsh path:plugins/git" "ohmyzsh/ohmyzsh path:plugins/extract" "zsh-users/zsh-syntax-highlighting" "zsh-users/zsh-autosuggestions" "zsh-users/zsh-completions" "romkatv/powerlevel10k" ]; }; initExtraFirst = '' if [[ -r "''${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-''${(%):-%n}.zsh" ]]; then source "''${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-''${(%):-%n}.zsh" fi ''; initExtra = '' source ~/.p10k.zsh # >>> conda initialize >>> # !! Contents within this block are managed by 'conda init' !! __conda_setup="$($HOME/miniconda3/bin/conda shell.zsh 'hook' 2> /dev/null)" if [ $? -eq 0 ]; then eval "$__conda_setup" else if [ -f "$HOME/miniconda3/etc/profile.d/conda.sh" ]; then . "$HOME/miniconda3/etc/profile.d/conda.sh" else export PATH="$HOME/miniconda3/bin:$PATH" fi fi unset __conda_setup if [ -f "$HOME/miniconda3/etc/profile.d/mamba.sh" ]; then . "$HOME/miniconda3/etc/profile.d/mamba.sh" fi # <<< conda initialize <<< #gpgconf --launch gpg-agent source "$HOME/.cargo/env" ''; profileExtra = '' if [ "$(arch)" = "i386" ]; then eval "$(/usr/local/bin/brew shellenv zsh)" else eval "$(/opt/homebrew/bin/brew shellenv zsh)" fi ''; }; services.gpg-agent = { enable = true; enableBashIntegration = true; enableSshSupport = true; enableZshIntegration = true; defaultCacheTtl = 60; maxCacheTtl = 120; pinentryPackage = pkgs.pinentry_mac; sshKeys = [ "CC3F27D613DCC2248B56A881FDDACEF6EA090E37" ]; verbose = true; }; }