summaryrefslogtreecommitdiff
path: root/kj-laptop01/home.nix
blob: b45088766b2d1ae9f6759bd86e61ad95a4a72238 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
{
  config,
  pkgs,
  ...
}:
{
  home.username = "kjtsanaktsidis";
  home.homeDirectory = "/home/kjtsanaktsidis";
  home.stateVersion = "25.05";

  programs.home-manager.enable = true;

  # Install packages
  home.packages = with pkgs; [
    htop
    zellij
    tmux
    neovim
    git-absorb
    # LazyVim dependencies
    lazygit
    ripgrep
    fd
    nodejs
    python3
  ];

  # Configure sops for home-manager
  sops = {
    age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
    defaultSopsFile = ./secrets.yaml;
    secrets = {
      kj_id_ed25519 = {
        path = "${config.home.homeDirectory}/.ssh/id_ed25519";
      };
      kj_gpg_private_key = {
        path = "${config.home.homeDirectory}/.gnupg/private-key.asc";
      };
    };
  };

  # LazyVim configuration for Neovim
  programs.neovim = {
    enable = true;
    defaultEditor = true;
    viAlias = true;
    vimAlias = true;
    plugins = with pkgs.vimPlugins; [
      LazyVim
    ];
    extraLuaConfig = ''
      require("lazyvim").setup()
    '';
  };

  # Git configuration
  programs.git = {
    enable = true;
    userName = "KJ Tsanaktsidis";
    userEmail = "kj@kjtsanaktsidis.id.au";
    signing = {
      key = "7F21FB211E24B02A5DEF86E227CD40EB9B81C726";
      signByDefault = true;
    };
    extraConfig = {
      pull.rebase = true;
    };
  };

  # SSH public key (private key is managed by sops)
  home.file.".ssh/id_ed25519.pub" = {
    text = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMtGcEXu5S/0zsF6Suxc65DmGFGt1JWRnqadoVhErOed kjtsanaktsidis@KJMacbookGroq.local";
  };

  # Zsh configuration
  programs.zsh = {
    enable = true;
    history = {
      size = 1000000;
      save = 1000000;
      append = true;
      extended = true;
      ignoreSpace = false;
      ignoreDups = false;
    };

    initContent = ''
      # Initialize completion system
      autoload -Uz compinit
      compinit

      # Initialize prompt system
      autoload -Uz promptinit
      promptinit

      # Set options
      setopt extendedglob nomatch notify

      # Define gentoo prompt theme
      prompt_gentoo_help () {
        cat <<'EOF'
      This prompt is color-scheme-able.  You can invoke it thus:

        prompt gentoo [<promptcolor> [<usercolor> [<rootcolor>]]]

      EOF
      }

      prompt_gentoo_setup () {
        local prompt_gentoo_prompt=''${1:-'blue'}
        local prompt_gentoo_user=''${2:-'green'}
        local prompt_gentoo_root=''${3:-'red'}

        if [ "$USER" = 'root' ]
        then
          local base_prompt="%B%F{$prompt_gentoo_root}%m%k "
        else
          local base_prompt="%B%F{$prompt_gentoo_user}%n@%m%k "
        fi
        local post_prompt="%b%f%k"

        local path_prompt="%B%F{$prompt_gentoo_prompt}%1~"
        typeset -g PS1="$base_prompt$path_prompt %# $post_prompt"
        typeset -g PS2="$base_prompt$path_prompt %_> $post_prompt"
        typeset -g PS3="$base_prompt$path_prompt ?# $post_prompt"
      }

      # Register the prompt with promptinit
      prompt_themes+=( gentoo )

      # Use the gentoo prompt
      prompt gentoo
    '';
  };

  # FZF with standard keybindings
  programs.fzf = {
    enable = true;
    enableZshIntegration = true;
  };

  programs.gpg = {
    enable = true;
    homedir = "${config.home.homeDirectory}/.gnupg";
  };
  services.gpg-agent = {
    enable = true;
  };
  home.activation.importGpgPrivateKey = config.lib.dag.entryAfter ["sops-nix" "onFilesChange"] ''
    export GNUPGHOME="${config.programs.gpg.homedir}"
    $DRY_RUN_CMD ${pkgs.gnupg}/bin/gpg --batch --verbose --trust-model always --import "${config.sops.secrets.kj_gpg_private_key.path}"
    echo "GPG private key imported from sops secret"
  '';
}