{ ... }: { config, lib, pkgs, ... }: let isLinux = pkgs.stdenv.isLinux; in { home.stateVersion = "23.05"; xdg.enable = true; home.packages = with pkgs; [ # go go-tools golangci-lint gopls delve # docker dive # explore layers in docker images # shell shellcheck # git gitAndTools.pre-commit git-credential-manager gh # shell utils coreutils direnv dust procs ripgrep tree wget # network bandwhich # data manipulation jless jq yq # encryption age # media mpv ffmpeg # dicts aspell aspellDicts.en aspellDicts.en-computers aspellDicts.en-science # nix nil nix-direnv nixd nixfmt-classic nixpkgs-fmt nil # nix lsp # k8s kind # k8s in docker kubebuilder # generate controller kubectl kubernetes-helm # deploy applications kubie # kubeconfig browser https://github.com/sbstp/kubie kubelogin-oidc # OIDC plugin k9s # object explorer # hashicorp boundary nomad-pack tfswitch ] ++ (lib.optionals (isLinux) [ htop ]); programs.go = { enable = true; goPath = ".local/share/pkg.go"; goBin = ".local/bin.go"; goPrivate = [ "github.rbx.com/*" "github.com/fcuny/*" "git.fcuny.net/*" ]; }; # an alternative to ls programs.eza = { enable = true; icons = "never"; enableFishIntegration = false; extraOptions = [ "--group-directories-first" "--no-quotes" "--git-ignore" "--icons=never" ]; }; # an alternative to find programs.fd = { enable = true; hidden = true; ignores = [ ".git/" ".direnv/" ]; }; programs.direnv = { enable = true; nix-direnv.enable = true; enableZshIntegration = true; config = { global.disable_stdin = true; global.strict_env = true; }; }; programs.fish = { enable = true; interactiveShellInit = '' set fish_greeting "" ''; shellAbbrs = { ncg = "nix-collect-garbage -d"; }; shellAliases = { c = "clear"; ls = "eza -l -L=1 --git --color=always --group-directories-first"; la = "eza -la --git --color=always --group-directories-first"; ll = "eza -la -L=1 --git --color=always --group-directories-first"; lt = "eza -aT -L=2 --git --color=always --group-directories-first"; k = "kubectl"; kctx = "kubie ctx"; }; }; programs.git = { enable = true; userName = "Franck Cuny"; userEmail = "franck@fcuny.net"; aliases = { amend = "commit --amend"; }; includes = [ { condition = "hasconfig:remote.*.url:git@github.rbx.com:**"; path = pkgs.writeText "finsitGitConfig" (lib.generators.toGitINI { user.email = "fcuny@roblox.com"; }); } { condition = "hasconfig:remote.*.url:git@github.com:Roblox/**"; path = pkgs.writeText "finsitGitConfig" (lib.generators.toGitINI { user.email = "fcuny@roblox.com"; }); } ]; extraConfig = { core.whitespace = "trailing-space,space-before-tab"; color.ui = "true"; # abort if the remote branch does not match the local one push.default = "simple"; # https://adamj.eu/tech/2024/01/18/git-improve-diff-histogram/ diff.algorithm = "histogram"; init.defaultBranch = "main"; pull.rebase = true; rebase = { # Automatically create a temporary stash entry before the # operation begins, and apply it after the operation ends. autoStash = true; # Print a warning if some commits are removed missingCommitsCheck = "warn"; }; branch.autosetuprebase = "remote"; branch.sort = "authordate"; url = { "ssh://git@github.rbx.com/" = { insteadOf = "https://github.rbx.com/"; }; }; }; }; programs.ssh = { enable = true; forwardAgent = true; serverAliveInterval = 60; controlMaster = "auto"; controlPersist = "30m"; extraConfig = '' IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock" ''; matchBlocks = { "personal" = { hostname = "github.com"; user = "git"; forwardAgent = false; extraOptions = { preferredAuthentications = "publickey"; }; }; "github.com" = { hostname = "github.com"; user = "git"; forwardAgent = false; extraOptions = { preferredAuthentications = "publickey"; }; }; "github.rbx.com" = { hostname = "github.rbx.com"; user = "git"; forwardAgent = false; extraOptions = { preferredAuthentications = "publickey"; }; }; }; }; home.sessionPath = [ config.home.sessionVariables.GOBIN ]; home.sessionVariables = with config.xdg; { ASPELL_CONF = "conf ${config.xdg.configHome}/aspell/config;"; EDITOR = "emacsclient -a="; HOMEBREW_NO_AUTO_UPDATE = 1; IPYTHONDIR = "${cacheHome}/ipython"; LESS = "-FRSXM"; LESSCHARSET = "utf-8"; MYPY_CACHE_DIR = "${cacheHome}/mypy"; PAGER = "less"; PIP_LOG = "${cacheHome}/pip/pip.log"; PYLINTHOME = "${cacheHome}/pylint"; PYTHON_EGG_CACHE = "${cacheHome}/python-eggs"; SHELL = "${pkgs.fish}/bin/fish"; VISUAL = "emacsclient -a="; }; # Generate ssh agent config for 1Password # I want both my personal and work keys home.file.".config/1Password/ssh/agent.toml".text = '' [[ssh-keys]] account = "my.1password.com" [[ssh-keys]] account = "roblox.1password.com" item = "GitHub ssh key" vault = "Private" ''; home.file.kubie = { target = ".kube/kubie.yaml"; text = '' shell: fish configs: include: - ~/.kube/rksconfig prompt: fish_use_rprompt: true ''; }; }