about summary refs log tree commit diff
path: root/nix/users
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--nix/users/fcuny/darwin.nix8
-rw-r--r--nix/users/fcuny/home-manager.nix256
-rw-r--r--nix/users/fcuny/nixos.nix20
3 files changed, 284 insertions, 0 deletions
diff --git a/nix/users/fcuny/darwin.nix b/nix/users/fcuny/darwin.nix
new file mode 100644
index 0000000..b56a67d
--- /dev/null
+++ b/nix/users/fcuny/darwin.nix
@@ -0,0 +1,8 @@
+{ pkgs, ... }: {
+  # The user should already exist, but we need to set this up so Nix knows
+  # what our home directory is (https://github.com/LnL7/nix-darwin/issues/423).
+  users.users.fcuny = {
+    home = "/Users/fcuny";
+    shell = pkgs.fish;
+  };
+}
diff --git a/nix/users/fcuny/home-manager.nix b/nix/users/fcuny/home-manager.nix
new file mode 100644
index 0000000..6c3342b
--- /dev/null
+++ b/nix/users/fcuny/home-manager.nix
@@ -0,0 +1,256 @@
+{ ... }:
+
+{ config, lib, pkgs, ... }: {
+  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
+  ];
+
+  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";
+    };
+  };
+
+  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
+    '';
+  };
+}
diff --git a/nix/users/fcuny/nixos.nix b/nix/users/fcuny/nixos.nix
new file mode 100644
index 0000000..662c0b1
--- /dev/null
+++ b/nix/users/fcuny/nixos.nix
@@ -0,0 +1,20 @@
+{ pkgs, ... }: {
+  # https://github.com/nix-community/home-manager/pull/2408
+  environment.pathsToLink = [ "/share/fish" ];
+
+  # Add ~/.local/bin to PATH
+  environment.localBinInPath = true;
+
+  # we're using fish as our shell
+  programs.fish.enable = true;
+
+  users.users.fcuny = {
+    isNormalUser = true;
+    home = "/home/fcuny";
+    extraGroups = [ "docker" "wheel" ];
+    shell = pkgs.fish;
+    openssh.authorizedKeys.keys = [
+      "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINBkozy+X96u5ciX766bJ/AyQ3xm1tXZTIr5+4PVFZFi"
+    ];
+  };
+}