blob: d613bf834dec1e375f0511fad6e5c7fa5c1c7971 (
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
{ pkgs, ... }: {
# Set your time zone.
time.timeZone = "America/Toronto";
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
console = {
font = "Lat2-Terminus16";
};
# enable flakes and nix cli
nix.settings.experimental-features = [
"nix-command"
"flakes"
];
# I like my ethX/wlanX names
networking.usePredictableInterfaceNames = false;
# use local dns on each host
services.unbound = {
enable = true;
settings = {
server = {
interface = [
"127.0.0.1"
"100.64.0.2"
#"fd00:b0ba:cafe:babe::2"
"::1"
];
access-control = [
"0.0.0.0/0 allow"
"::0/0 allow"
];
hide-identity = true;
hide-version = true;
# Synthesize NXDOMAINs from DNSSEC NSEC chains.
# https://tools.ietf.org/html/rfc8198
aggressive-nsec = false;
module-config = "\"respip validator iterator\"";
local-data = [
"\"saklas.epistemia. 86400 IN A 100.64.0.1\""
"\"demiurge.epistemia. 86400 IN A 100.64.0.2\""
"\"hastur.epistemia. 86400 IN A 100.64.0.3\""
"\"iphonebob.epistemia. 86400 IN A 100.64.0.4\""
"\"lab.epistemia. 86400 IN A 100.64.0.5\""
];
local-zone = [
"\"saklas.epistemia.\" redirect"
"\"demiurge.epistemia.\" redirect"
"\"hastur.epistemia.\" redirect"
"\"iphonebob.epistemia.\" redirect"
"\"lab.epistemia.\" redirect"
];
};
# hagezi for dns-based adblocking (in addition to others)
rpz = {
name = "hagezi.ultimate";
zonefile = "hagezi.ultimate";
url = "https://raw.githubusercontent.com/hagezi/dns-blocklists/main/rpz/ultimate.txt";
};
# go through mullvad for regular dns queries
forward-zone = {
name = ".";
forward-addr = [ "194.242.2.2" ];
};
};
};
environment.etc."resolv.conf".text = ''
nameserver 127.0.0.1
search epistemia
'';
# Define a user account.
users = {
groups.vin = {};
users.vin = {
isNormalUser = true;
group = "vin";
extraGroups = [
"transmission"
"wheel"
];
shell = pkgs.zsh;
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEvM0xCLziR+ZT/SYE1aZM6dklbw4fEC17TWqbADIZRH vin@demiurge"
];
};
};
# default packages for both me and root
environment = {
systemPackages = with pkgs; [
doas-sudo-shim
git
wget
];
pathsToLink = [ "/share/zsh" ];
};
# enable bluetooth and add some udev rules
hardware = {
bluetooth.enable = true;
flipperzero.enable = true;
keyboard.qmk.enable = true;
};
programs = {
# for gtk in home-manager
dconf.enable = true;
# gpg
gnupg.agent = {
enable = true;
enableSSHSupport = false;
pinentryPackage = pkgs.pinentry-rofi;
settings.default-cache-ttl = 600;
};
# disable nano. I don't like nano.
nano.enable = false;
# steam, proprietary. I sometimes like playing nonfree games too.
steam.enable = true;
# configuration in home-manager
zsh.enable = true;
zsh.promptInit = "PS1='$ '";
};
security = {
# I prefer doas over sudo for simplicity
doas = {
enable = true;
extraRules = [
{
users = [ "vin" ];
keepEnv = true;
persist = true;
}
];
};
sudo.enable = false;
# needed to give realtime privileges to pipewire
rtkit.enable = true;
# trust certificate for *.demiurge.epistemia
pki.certificates = [
''
-----BEGIN CERTIFICATE-----
MIIELzCCApegAwIBAgIRANnOZgETCYAX7+HrLIGpk5AwDQYJKoZIhvcNAQELBQAw
ezEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMSgwJgYDVQQLDB92aW5A
ZGVtaXVyZ2UuZXBpc3RlbWlhIChWaW5lZXQpMS8wLQYDVQQDDCZta2NlcnQgdmlu
QGRlbWl1cmdlLmVwaXN0ZW1pYSAoVmluZWV0KTAeFw0yNTA5MjEyMzE4MDFaFw0y
NzEyMjIwMDE4MDFaMEAxJzAlBgNVBAoTHm1rY2VydCBkZXZlbG9wbWVudCBjZXJ0
aWZpY2F0ZTEVMBMGA1UECwwMdmluQGRlbWl1cmdlMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEA7RhsOzlGqpgKVV02WFoT0bIeqUNQ5d6MFl+w9TsKSy7G
yhWMOjUMchm5oco33QMwmzUpejqFuRtGIm9Gj1IoPKgK4hb+UVzJb1ZwevhWyQzr
al7rg2beb9dBYNXlZhpYjzLrom6FS/QrEEudjsrVwR5DdvYb+NeirXqWfL0NCiF8
GtDDAQdbdmLWJBrjfEO0YbLplgEvwJphxEdDuJsjqLOEGj+Q1ZONjQMTVxZOgIRl
u5DYItMESV/Rc0elBlapOeBatp01rvcdm2hGz3TaFusR4SeIcYOMoX+P4wK6sQZM
X9fR95cHv/Vx02S90I9LMpleti8tXwBNLgoho2fsmwIDAQABo2kwZzAOBgNVHQ8B
Af8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAUwZNUYxIJ
idGGuM7Kz8ysS+8Zc4cwHwYDVR0RBBgwFoIUKi5kZW1pdXJnZS5lcGlzdGVtaWEw
DQYJKoZIhvcNAQELBQADggGBAFdUThVUJpatQtnAxB6kV2mh0vdKzwhf4Mk+Su4d
/jAwNcM3m2xjSbjU+U5QyTI99qe+zvQF5WhVik+hWqcRPBF8NkeF47pZuAmiB+Vr
jL8iWyD8x7BER0PpCAGTCusNXXg3+Ttb2gygOOk+JJqvXpMXbbhCTgc1qJD3EziL
1hXZovZFTmdcPFV6iu+oyyMmzLQl0SIIgqIICs1F21HMNdwAWKX25NMK3YCJVuTf
ZxUfmLaqwnr5liS7aa7xZRzaee58VouUL9RtLT+JxLsg9EYV31dHJ57fNTBqzGsw
2X03iE9+p87UHwd/7SnO5K+y7FpUu96LsAyeNnRuO2ys+3XwCVS7xjA7MwyAnfJt
i8WMWzlQbxhppK/QO/R8/rt0RcNHY9fp8ZK7qVZWF/rnTVUbw1ZmFLBDbuY9ehq9
vgQF6lZFCIKkf7am2vqwZHVtx1R+Cgl9/+4YlLPOeMmRyI3SFaIERRiHT0SuvqzF
SivxomFBHWe4CLwWy/mDaC18/g==
-----END CERTIFICATE-----
''
];
};
# create caches and use mandoc
documentation.man = {
enable = true;
generateCaches = true;
man-db.enable = false;
mandoc.enable = true;
};
}
|