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"
'';
}
|