Clean branch
This commit is contained in:
commit
de986accc2
42 changed files with 1959 additions and 0 deletions
26
LICENSE
Normal file
26
LICENSE
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
MIT License
|
||||
|
||||
Copyright
|
||||
(c) 2023
|
||||
Macronova
|
||||
|
||||
Permission
|
||||
is
|
||||
hereby
|
||||
granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
17
common/.sops.yaml
Normal file
17
common/.sops.yaml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
keys:
|
||||
- &blitzar age1mc72my8whm2fm3wjg2ucvckx27dyp09urdgs9lpzqswl5pa5py8sfwszt9
|
||||
- ¯onova age1sy52xwldc7puckze2kcax7csc2nrg049y9nt2qd0ltvghckms5nq2d25ra
|
||||
- &nebula age1vyq4xceveer87xt506yl59lh82dmeuagzlmnk87augfvqry7vqaq5hwy33
|
||||
- &singularity age15cp5p76q7vhwg9v8u98dpshrmtengghmm7yn5ckfk0yz694q3g6qajywwu
|
||||
creation_rules:
|
||||
- path_regex: secrets.yaml$
|
||||
key_groups:
|
||||
- age:
|
||||
- *blitzar
|
||||
- *macronova
|
||||
- *nebula
|
||||
- path_regex: auths.yaml$
|
||||
key_groups:
|
||||
- age:
|
||||
- *macronova
|
||||
- *singularity
|
||||
39
common/auths.yaml
Normal file
39
common/auths.yaml
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
cloudflare:
|
||||
singularity: ENC[AES256_GCM,data:pb2HNPTSAJ47oOeo77+lR1WrCpjMm8UtqOvHJWpKlnOcvw+2q2S2SpB3CbY5Ovp28Vq29paVUOnc5f2SZA==,iv:H5tf/Uq9uk4u0ZPxmW7UrgRXuHMGBU8KTMwnhODC7IQ=,tag:xvte0Rkh8Rgds6r5VIkTUA==,type:str]
|
||||
mail:
|
||||
macronova:
|
||||
password: ENC[AES256_GCM,data:wJMS3WqmAMQiOiyDUvmwH6Bes4L8GZC/2MxXP23M+RUrN7esqQsaMXLksY/33TuopuekVAvW9K+D2go5quaxdZhB/cVrhXqIjLVLV6Wa+WkYlbeQvJ5ix3R40X455opndrCQCQslatzcgGxmMS8qj5j0UcOfng==,iv:jfo7REVvIDI9MiWRsBi4MoTHfO6lHY5oQI9WyUecnnQ=,tag:hrSHzh4DK5Skav6A3fwD5A==,type:str]
|
||||
users:
|
||||
root:
|
||||
password: ENC[AES256_GCM,data:RhoImsE3Yjn5K6LYqedCew8vd2LXPvIMuY70nCGpQRyfpBfGL4yXMDXRtZtU3VPLlqvjkSGSzvgWta/pni83JdPxqYqRBPi0M/fEondL3Phpx4/xL9K4Fr7QZ3BDsWj07Wi/DKk+qvMFkAQhczJ3bePbCE723A==,iv:pWzCTJ4ahsBI8OYpL9Bd0k23ka0PCDZDP+yuxIfkbvk=,tag:fBy4ZQM30ny4Ab5fVbkMwg==,type:str]
|
||||
xray:
|
||||
config.json: ENC[AES256_GCM,data:OfdVi938yFyZxV9aXRmLcO6Yr/fwocu2msSUHXIfTZUn4D2lrQhZMCtdkJoZxI/4hCxPGGns9FlJ10++iVJTPAp0UyEV2f2bsWfR/K9X1oD0j0jSdF4V7bwXUeAFtdCJKcuZ8zj/7UrrUucQ3Pwg2iYrzkzyJq38qWu47mIv8N2ata+mS+mle66Fh2YX74pZ6BuziUGuZ6QSVjz/s/YvCfyhPQD1t4zAEjHD2/jigZ4ZKhE7HbdDt3/W1S8m5+DhWSf+INVjcQt+DU4buEz1jNrQQxZXJTR4ZtRQJI6/oUN6deQLQtzBIIL7dGlbsTKp9IW6bho4mP/u162muq0vNskUafawWwaSpdyRnqTzqRHuzA1JfsSJVc6awf+3N35VjCBNmLXOTsdl4GNXt4IA4sRNyXS3dnToW1V9Jbr4zuECsdm2XnnODvkc/wwbL0JG9uav9soerd+FZ/9LZ8ETvN/8UcbjuQtrdSwLvu+bKb/mkJ9k03/cZL0OPeSYvJo1tBjN+bR/r2WG0iQSLsIkZoIv4PfhjveBRitFHUeZYQAbVbxK+LbV5pzfb8Nbf7tMJyXBSBf1d364Z85Aj5+AgTTW7LQqKKSs9YuHsQSARBlqPBdXnh25nTgPfUIt/Z+PDE8ryxOW8vITvo8RJ6b15Y1niwwFFcfbpdn13r+/9exFaV48huVllZz3C7HpC57GBrMyIN34G2ZA/VQ7UW8LxJLxhaBDLj0jHHI/BzTsBvwzvWKWFbnIu1yKX9Nn9I+Qa4RSxfSbiLjGUkRelL6+ktzCZmUxx+DiUOITpQ2F36XBGbclZHKhBIJRoSYNPGP6BKB/7s3l2pk5MZW8rmhe0Y1gK3aVZEfS2d6sIxD5xZ7gVV+U6hVaa+CAGf9mlHWbnMWnjuHeuKGAXgw0c0GjpQvL6c7G16sCFBDyeaiiJJPUDyHCiY83m/UeL2RjhYAbG4ydDflP1/BfZl4YV5xNFnbvMWehNV7JY5J8FbepdIwz6OJ6tibt7Qfny7/uYvA5+dKb53G/A0MzLG9IkiLpfTVdfVwD1iU288hqcADCY1yw+m46ivGvU/GJNHxUzmZ1rvxB9+cxox2BIJp75Fre39EMcu0at8br9K+NGE63e2epdXqUQ0Qi3PQL/4Dx9xI1SVtn62DwOuFuAgjYbVP3BA7PYePan6nMEBOhIR+pJJWxBhYGeKJIuqBECoX6ht0ldVzn8wyoa0eEs2sc5LpqqrxAJij4oRprjol/7MYU+ZESMP2Cap46qsSeqCX8v6d/wz73VEmyzbzgSsfGfoXhu9k9eM+Xt5ULhjYyK1Rt+HoVRapyBI+tsk+AUc14ItBvQZfmZ0QZZgTyLXyYzDbGg3t2ZBCC/vedPzeRSW/PgBTS/fiVBRzKTms62IWZ1ggyn9X8QXpyWbIix9BFThfm2c1stKcCXp1iKs0IdNj6Lrwvoimuzs6nS7+oWhTJrELuNz9ok6sFxg6GDAv+9v+7dYZnYm6SwlzTD/DIxlqT2ozW2cqwNwilBC7gyxFH7wUuHD1tz7t5mkkIi+r2rq4gIRS/UFcW37zV0deg3JpFxhEkitIw4+WWG8gcuollYw60xfCI5qu4kIZiTYV7oRQYJTnJDF44pDngq1frOuPIT+D5lh+R4TSYL9/4zt6Cdp+2FLddyyyW6mUSXIz6ribg+q6JV2Su8qozBWAlAr3lkesBCuobgBRXECPfIksg9SOVhZulAu1/mo0H/F7XJvTBgQurx1+nTgfJSoQtLlbgSCYr4aViJZOMOdL+yZk5tBwKNx+sF6mZwhe4pSlpIbqtPJeDDA0JC6/OabvSFFXhkYOUll7nA071oUvtdiXYoh2Vv7GJdJMHxxbSVjKv/dYbfXuDN+036bXnXbu2WPbxRTyRxLeLSCli+ngxbl5BOPS+2N/JItTcaRur7K98vuaHDzr1y6eA0GXJxm0PDqMd2F2MW12QDLTtEhq0+hn5HJcOBB4CNLn0mBXbMS8VHDoLokwMtZg3ukcBMnBfza9Q7BcBovypOtjrZ50zU40x4bA7YwPojHSXkAHrUNElBPSOjV5JvkAcX6CF6BG8PloJc+5aC3eGFQ/teymS9HbmPpCI7rXV5D7gsy9kdL1yVtQpOLsdcoERidyh21aEL2q5s26ri8/7e7TF4bpVE1bNiuus68kNZxqabuBfVOEzS0yKBnEHxqtJxZlPvakVQjdfQ0faLLjzXCvXsn3+pPQf0h8yXtLKmlIOlC+G2CoSGtXQ30ha7XuQqzWQBCu5Wv3fAHQyAgJIRzGn+OVz86r2/Gt4sRIECWKPylZi3Yh0XkNIA53T170hUTIi+aSSUgH7trKm0hp7VMJIBa74gyBuQnfez/lI/IDxkiZICmatYgjRL1QkHBvvxmT+4LYHy+nIuSu8OQX0HVRlRY3mkdarH8ypMvqqDkuCtOJPyQlW3qZxg1Us68X4lyviQISd0EeBf7/pRXXGpk6t50CYCvB0Hpz6e/CQZnTcyMvLzwpR1L/SqLL0vHY+bE7B72pL97o3o5GfiBvgKvIhgqqqwYQpt34mR580ZH2UkfgeCWI9uvpv/WaX8y0jHf2rifhLcTYShDLcv2j+/Kq5kGx+UjaRe2JFYKWOCX0S7JUO/FVDaL56F1u/WVSj7LSWQhtWK18OdZfyx8Epdce+bgcEx2zv5I8HByQznbib6bIrWOIWzp5y4wdoIlbmbUC2zax6j9v5Mxwpdy5VW2731fCsOX9SarqeK4GGzhYzqqxePJpif+AD4xcAY53XgOg38hQ8nUdJvSk7xVb0Sl4iWezHF6tt495/tlw6yyNQfs1TfMnYP4o0UhN8jTi8FnA1V1cMiKnOz4FWPl06X6cyZZDwO3ZmfSNjilusNdeuXUMJk67+h5xyik+r7Mkduz6fbno6YRTGFwkz,iv:a/F/UBjwV+rteo2Qle9XOVYW9ltdD/nfLh/1Pr5yiWU=,tag:tYd1w+b7DfZERGZQwRbHoA==,type:str]
|
||||
sops:
|
||||
kms: []
|
||||
gcp_kms: []
|
||||
azure_kv: []
|
||||
hc_vault: []
|
||||
age:
|
||||
- recipient: age1sy52xwldc7puckze2kcax7csc2nrg049y9nt2qd0ltvghckms5nq2d25ra
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpRDcyaExMVktDMjQ1dWZL
|
||||
VHUvYVNUWDV5UEpRVlAwMEdMVHRGMWRmQVUwCjI5VzBhY1RjQm9LeEtXbFpGK29p
|
||||
cm5icTg3OHp1QTZ4NnhSMGtmbHh6eTAKLS0tIDBrN00rSUxiLzFFMWNZSldESmxU
|
||||
b3hEc3lScGl3UTRGNjQvZTFQYzMzQncKr9RA+wl52Ul+BiTq+0UrSBrd0QrWsfNs
|
||||
fMiGMUrp+dxjBoG4S0oYJbXdoPJb+us4a+YZzsmraWbwbqph5vOXQg==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age15cp5p76q7vhwg9v8u98dpshrmtengghmm7yn5ckfk0yz694q3g6qajywwu
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDWUdCMmlmL3I1YUJYcDQ2
|
||||
Z0pyUTkzS0RMcGFvODBNUnNscGg3Ykp0WHpnCjQ1NnlWMXhtZnA3NUNiVXRFM05F
|
||||
Yk9Jb0lmRjVINXdBTVlpUVErODZlbFEKLS0tIDhheE9OSXJUcktMRGpaejRKOVNn
|
||||
ZW9EMlgrMnFHaHdQSWgvM25ocmNoVEkKo7H1Y+kZrtmk58Oe6d51wJQLF5T7OZtX
|
||||
0LgNOjevRPfxG4FpNk9yhLyrelpHkiSmBFTGHqbnouFE54L1eot/UQ==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2023-08-18T20:53:15Z"
|
||||
mac: ENC[AES256_GCM,data:o7gv08Xcb9SeJ8tpONnFNnXiAFoehlGZenfJzaxnUQ9VgzKJgRCzWHoI4BgqL2I0zXmnQ3Cs3FTGQxS5XbVDzr/FhK4gv4ikBdllg8aJbQJ5GdtZh/qqrLiNjea3jmfEAHuLWe43+ZGySOKZtCFgNARO8jgVg4HIPsrb7pSU/38=,iv:Me2r64RnA2Hn+RpqI9X8eLfFC9jGTyo2sEaA9pkyz0U=,tag:XlRP5GvsfVrlAXH8CF+lnw==,type:str]
|
||||
pgp: []
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.7.3
|
||||
62
common/constants.nix
Normal file
62
common/constants.nix
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
{ config, lib, ... }: with lib; {
|
||||
options.constants = {
|
||||
domain = mkOption {
|
||||
type = types.str;
|
||||
default = "invariantspace.com";
|
||||
description = ''
|
||||
Store the default domain for all devices.
|
||||
'';
|
||||
};
|
||||
homeDir = mkOption {
|
||||
type = types.str;
|
||||
default = "/home/${config.constants.userName}";
|
||||
description = ''
|
||||
The default home directory for the default user.
|
||||
'';
|
||||
};
|
||||
localhost = mkOption {
|
||||
type = types.str;
|
||||
default = "127.0.0.1";
|
||||
description = ''
|
||||
Store the default localhost address.
|
||||
'';
|
||||
};
|
||||
postMaster = mkOption {
|
||||
type = types.str;
|
||||
default = "trivial@${config.constants.domain}";
|
||||
description = ''
|
||||
Store the default post master email address.
|
||||
'';
|
||||
};
|
||||
publicKeys = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHPT/zRq5fffcUmjxcwG2cTr09fOa9O4rBUb6ob2CyNy macronova@blitzar"
|
||||
];
|
||||
description = ''
|
||||
The public keys for SSH authentication.
|
||||
'';
|
||||
};
|
||||
privateKeyFiles = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = if config.services.openssh.enable then builtins.map (key: key.path) config.services.openssh.hostKeys else [ "/root/.ssh/${config.networking.hostName}" ];
|
||||
description = ''
|
||||
The private key files for sops.
|
||||
'';
|
||||
};
|
||||
sopsFile = mkOption {
|
||||
type = types.path;
|
||||
default = ./secrets.yaml;
|
||||
description = ''
|
||||
The secrets file for device.
|
||||
'';
|
||||
};
|
||||
userName = mkOption {
|
||||
type = types.str;
|
||||
default = "macronova";
|
||||
description = ''
|
||||
The default username across all devices.
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
12
common/default.nix
Normal file
12
common/default.nix
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{ inputs, ... }:
|
||||
|
||||
{
|
||||
imports = with inputs; [
|
||||
sops-nix.nixosModules.sops
|
||||
home-manager.nixosModules.home-manager
|
||||
] ++ [
|
||||
./constants.nix
|
||||
./secrets.nix
|
||||
./users.nix
|
||||
];
|
||||
}
|
||||
8
common/secrets.nix
Normal file
8
common/secrets.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{ config, ... }:
|
||||
|
||||
{
|
||||
sops = with config.constants; {
|
||||
age.sshKeyPaths = privateKeyFiles;
|
||||
defaultSopsFile = sopsFile;
|
||||
};
|
||||
}
|
||||
43
common/secrets.yaml
Normal file
43
common/secrets.yaml
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
cloudflare:
|
||||
nebula: ENC[AES256_GCM,data:uK5RBgh8WfwpbIbTQSd9XGomc9GyvU1pWId7xqULwxOUPraXKWACG7GSSER/RPoDp0GQbd/Usc/HzXQPvQ==,iv:R8/jU6jYHfmBQ5KnV0lkDCVyj4rZmd0ZInIa7vrh79U=,tag:kjbZjvMYZMJOv/K1mYHPow==,type:str]
|
||||
users:
|
||||
macronova:
|
||||
password: ENC[AES256_GCM,data:o3WtsW7x9wy+gtl8UiT/s5q7F7Ym4q/CGvTy5Hl6FfvaEhbC/GPHQKVbz0MmRF3WV7Oq3jNxdryxWgXcd+WSCHoThNRIh/B4ZpLePD9Yi7Bf6trEYGWMdQM1Qx9pET7FaEBVOJC8eg+Ca4b/cASo53iuim6wzw==,iv:dbypWZHIXhl1kSnyiqW6R/O4NZb7u0R9X+tYpCKEMw4=,tag:bgCiGaH7EVfu7Sox0vulug==,type:str]
|
||||
sops:
|
||||
kms: []
|
||||
gcp_kms: []
|
||||
azure_kv: []
|
||||
hc_vault: []
|
||||
age:
|
||||
- recipient: age1mc72my8whm2fm3wjg2ucvckx27dyp09urdgs9lpzqswl5pa5py8sfwszt9
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsQnQ1TkRrd1lEMG9vbDd6
|
||||
R2RYMDRNNWVLUTBqNEtjL1lvMGpOSzh5ZW1jCm56VU5uWElBNm9xUUJPTDYyTGs0
|
||||
dmRSMmR3RXJHc00yUENpTVROajFBMTgKLS0tIEo3SVlzcXBGdzg3aXNZaG0xbXc5
|
||||
eEMyWFZ4VVByelVxNm80SkxYdExwV0UKXTtkHk7LMBy0LY4tjbcpxGHhxnwbTexe
|
||||
98TKQMBQncPR7IVZDkOHmsYq20jSCWEdV6vLH2mQH6Kqq4HQCS6/sA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1sy52xwldc7puckze2kcax7csc2nrg049y9nt2qd0ltvghckms5nq2d25ra
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRRjM2VEx1N25CK00yVGht
|
||||
TzNpbi8vVXF0WmJGTldtWTFWdS9UZHNoTmp3CjZOeXpvOVE0M2kzbEdKTzlBYVFa
|
||||
LzFzaFM5SmlwQytDMFhtb0ttb2N1c3MKLS0tIDgrTVJpaWdZSzlPL0Z2WE9RSno0
|
||||
QmRJUlY0NTJZMnVKdUJLWk1yZFRkb1UKaubDYas4I2MGs6XauGSmev03UgF6btYB
|
||||
ynok/qxNaXFL4MwuHnL5W/TnHpGAE6M7PLLEV4Kf+yaHojbLLxUw6A==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1vyq4xceveer87xt506yl59lh82dmeuagzlmnk87augfvqry7vqaq5hwy33
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpUWJLL3FxWE1mbnZsN0dU
|
||||
VlBXUHZlRFlOR01WSUlmdkw1eGtpaDhlSmdBClVWRGZ5anFHWFRKcUFuNkJ3Y2lz
|
||||
Kys1N29QVWozZXI5eVFSV21OSHFqRG8KLS0tIG9CYmRuUm5YQzZidTR2R1l0a05h
|
||||
TG5mYWd3MnI5TlZiNXBjb0JJY3BvN0EKUd0ldQPe0/zdHjsmKEUhH7xkpO4nLfd5
|
||||
fnTk1jGonJg+t+TqLLg/YYKlcNkgExWaIZ7wrd0RVKXOeC2BtM/wzQ==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2023-08-18T01:56:26Z"
|
||||
mac: ENC[AES256_GCM,data:hYx5DAqxXmnVRpFiE+jamI+/hYODzOsQ6+t9Gjf4mxgKXOHNDBwsmfxtNc/ZGOyfVlwa7tdGlKUxkiqe1SlJ/5v+Z5O6xv2dGJM/E+1D1YFuhcnye6EL9IYtia0ziS0A/vcN1afpaXZK7G6pMWCtjTLZ76hRyu0FlPJh5MMQZYo=,iv:TsSyplcz4JHrEr/n7XOVWGvP+ttYv9+HsQpbGYFq13I=,tag:DDiAY0sTKPRSsG59kv4j0g==,type:str]
|
||||
pgp: []
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.7.3
|
||||
99
common/users.nix
Normal file
99
common/users.nix
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
let
|
||||
usr = config.constants.userName;
|
||||
usrPwdFile = "users/${usr}/password";
|
||||
in
|
||||
{
|
||||
environment.systemPackages = with pkgs.fishPlugins; [
|
||||
fzf-fish
|
||||
pisces
|
||||
puffer
|
||||
tide
|
||||
];
|
||||
|
||||
home-manager = {
|
||||
useGlobalPkgs = true;
|
||||
users.${usr} = {
|
||||
home = {
|
||||
packages = with pkgs; [
|
||||
dua
|
||||
fd
|
||||
nil
|
||||
nixpkgs-fmt
|
||||
rclone
|
||||
sops
|
||||
];
|
||||
stateVersion = config.system.stateVersion;
|
||||
};
|
||||
programs = {
|
||||
bat.enable = true;
|
||||
bottom.enable = true;
|
||||
direnv = {
|
||||
enable = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
eza = {
|
||||
enable = true;
|
||||
enableAliases = true;
|
||||
};
|
||||
fish.enable = true;
|
||||
fzf.enable = true;
|
||||
git = {
|
||||
enable = true;
|
||||
extraConfig = {
|
||||
core.autocrlf = "input";
|
||||
pull.rebase = false;
|
||||
push.autoSetupRemote = true;
|
||||
};
|
||||
ignores = [
|
||||
".direnv"
|
||||
".envrc"
|
||||
];
|
||||
userEmail = config.constants.postMaster;
|
||||
userName = config.constants.userName;
|
||||
};
|
||||
helix = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
settings = {
|
||||
editor = {
|
||||
lsp.display-inlay-hints = true;
|
||||
soft-wrap.enable = true;
|
||||
};
|
||||
theme = "base16_transparent";
|
||||
};
|
||||
};
|
||||
ripgrep.enable = true;
|
||||
tealdeer.enable = true;
|
||||
zoxide = {
|
||||
enable = true;
|
||||
options = [ "--cmd cd" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
programs.fish.enable = true;
|
||||
|
||||
sops.secrets.${usrPwdFile}.neededForUsers = true;
|
||||
|
||||
users = {
|
||||
mutableUsers = false;
|
||||
users.${usr} = {
|
||||
description = "Sicheng Pan";
|
||||
extraGroups = [
|
||||
"audio"
|
||||
"input"
|
||||
"networkmanager"
|
||||
"uinput"
|
||||
"wheel"
|
||||
];
|
||||
hashedPasswordFile = config.sops.secrets.${usrPwdFile}.path;
|
||||
home = config.constants.homeDir;
|
||||
isNormalUser = true;
|
||||
openssh.authorizedKeys.keys = config.constants.publicKeys;
|
||||
shell = pkgs.fish;
|
||||
};
|
||||
};
|
||||
}
|
||||
54
darwin/quasar/default.nix
Normal file
54
darwin/quasar/default.nix
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
# List packages installed in system profile. To search by name, run:
|
||||
# $ nix-env -qaP | grep wget
|
||||
|
||||
# Add trusted users
|
||||
nix.settings.trusted-users = [ "root" "@admin" ];
|
||||
|
||||
# Configure nixpkgs
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
# Use common system packages
|
||||
environment = {
|
||||
systemPackages = with pkgs; [
|
||||
bat
|
||||
bottom
|
||||
direnv
|
||||
dua
|
||||
exa
|
||||
fd
|
||||
fzf
|
||||
helix
|
||||
nil
|
||||
nixpkgs-fmt
|
||||
rclone
|
||||
ripgrep
|
||||
tealdeer
|
||||
zoxide
|
||||
];
|
||||
shells = [ pkgs.fish ];
|
||||
};
|
||||
|
||||
# Enable fish
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
interactiveShellInit = ''
|
||||
alias ls=exa
|
||||
zoxide init --cmd cd fish | source
|
||||
'';
|
||||
};
|
||||
users.users.macronova = {
|
||||
home = "/Users/macronova";
|
||||
shell = "${pkgs.fish}/bin/fish";
|
||||
};
|
||||
|
||||
# Auto upgrade nix package and the daemon service.
|
||||
services.nix-daemon.enable = true;
|
||||
# nix.package = pkgs.nix;
|
||||
|
||||
# Used for backwards compatibility, please read the changelog before changing.
|
||||
# $ darwin-rebuild changelog
|
||||
system.stateVersion = 4;
|
||||
}
|
||||
453
flake.lock
generated
Normal file
453
flake.lock
generated
Normal file
|
|
@ -0,0 +1,453 @@
|
|||
{
|
||||
"nodes": {
|
||||
"blobs": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1604995301,
|
||||
"narHash": "sha256-wcLzgLec6SGJA8fx1OEN1yV/Py5b+U5iyYpksUY/yLw=",
|
||||
"owner": "simple-nixos-mailserver",
|
||||
"repo": "blobs",
|
||||
"rev": "2cccdf1ca48316f2cfd1c9a0017e8de5a7156265",
|
||||
"type": "gitlab"
|
||||
},
|
||||
"original": {
|
||||
"owner": "simple-nixos-mailserver",
|
||||
"repo": "blobs",
|
||||
"type": "gitlab"
|
||||
}
|
||||
},
|
||||
"darkmatter": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1683347392,
|
||||
"narHash": "sha256-snW+8pJvBQ1B11FmUf6kSgARZW5OvW9uXgxA2VrlzcQ=",
|
||||
"owner": "VandalByte",
|
||||
"repo": "darkmatter-grub-theme",
|
||||
"rev": "efe1abbde0aa9410217247d415ff734583af9711",
|
||||
"type": "gitlab"
|
||||
},
|
||||
"original": {
|
||||
"owner": "VandalByte",
|
||||
"repo": "darkmatter-grub-theme",
|
||||
"type": "gitlab"
|
||||
}
|
||||
},
|
||||
"darwin": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1696360011,
|
||||
"narHash": "sha256-HpPv27qMuPou4acXcZ8Klm7Zt0Elv9dgDvSJaomWb9Y=",
|
||||
"owner": "lnl7",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "8b6ea26d5d2e8359d06278364f41fbc4b903b28a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "lnl7",
|
||||
"repo": "nix-darwin",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"disko": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1696814493,
|
||||
"narHash": "sha256-1qArVsJGG2RHbV2iKFpAmM5os3myvwpXMOdFy5nh54M=",
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"rev": "32ce057c183506cecb0b84950e4eaf39f37e8c75",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1673956053,
|
||||
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-compat_2": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1668681692,
|
||||
"narHash": "sha256-Ht91NGdewz8IQLtWZ9LCeNXMSXHUss+9COoqu6JLmXU=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "009399224d5e398d03b22badca40a37ac85412a1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1689068808,
|
||||
"narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hardware": {
|
||||
"locked": {
|
||||
"lastModified": 1696614066,
|
||||
"narHash": "sha256-nAyYhO7TCr1tikacP37O9FnGr2USOsVBD3IgvndUYjM=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "bb2db418b616fea536b1be7f6ee72fb45c11afe0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"repo": "nixos-hardware",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_4"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1696737557,
|
||||
"narHash": "sha256-YD/pjDjj/BNmisEvRdM/vspkCU3xyyeGVAUWhvVSi5Y=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "3c1d8758ac3f55ab96dcaf4d271c39da4b6e836d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"mailserver": {
|
||||
"inputs": {
|
||||
"blobs": "blobs",
|
||||
"flake-compat": "flake-compat_2",
|
||||
"nixpkgs": "nixpkgs_5",
|
||||
"nixpkgs-22_11": "nixpkgs-22_11",
|
||||
"nixpkgs-23_05": "nixpkgs-23_05",
|
||||
"utils": "utils"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1689976554,
|
||||
"narHash": "sha256-uWJq3sIhkqfzPmfB2RWd5XFVooGFfSuJH9ER/r302xQ=",
|
||||
"owner": "simple-nixos-mailserver",
|
||||
"repo": "nixos-mailserver",
|
||||
"rev": "c63f6e7b053c18325194ff0e274dba44e8d2271e",
|
||||
"type": "gitlab"
|
||||
},
|
||||
"original": {
|
||||
"owner": "simple-nixos-mailserver",
|
||||
"repo": "nixos-mailserver",
|
||||
"type": "gitlab"
|
||||
}
|
||||
},
|
||||
"nix-custom": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs_6",
|
||||
"wallpaper-engine-kde-plugin-lib": "wallpaper-engine-kde-plugin-lib"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1691983676,
|
||||
"narHash": "sha256-0K/o6iPzC/eOBM1FNWu5rl9B0yA52Z4mqHHvvk1xLGc=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "fbf346f822d68ed20fc36486175a484693c23366",
|
||||
"revCount": 3,
|
||||
"type": "git",
|
||||
"url": "https://forgejo.invariantspace.com/macronova/nix-custom"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://forgejo.invariantspace.com/macronova/nix-custom"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1661353537,
|
||||
"narHash": "sha256-1E2IGPajOsrkR49mM5h55OtYnU0dGyre6gl60NXKITE=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "0e304ff0d9db453a4b230e9386418fd974d5804a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-22_11": {
|
||||
"locked": {
|
||||
"lastModified": 1669558522,
|
||||
"narHash": "sha256-yqxn+wOiPqe6cxzOo4leeJOp1bXE/fjPEi/3F/bBHv8=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "ce5fe99df1f15a09a91a86be9738d68fadfbad82",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-22.11",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs-23_05": {
|
||||
"locked": {
|
||||
"lastModified": 1684782344,
|
||||
"narHash": "sha256-SHN8hPYYSX0thDrMLMWPWYulK3YFgASOrCsIL3AJ78g=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "8966c43feba2c701ed624302b6a935f97bcbdf88",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-23.05",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1696717752,
|
||||
"narHash": "sha256-qEq1styCyQHSrw7AOhskH2qwCFx93bOwsGEzUIrZC0g=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "2f3b6b3fcd9fa0a4e6b544180c058a70890a7cc1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "release-23.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1687274257,
|
||||
"narHash": "sha256-TutzPriQcZ8FghDhEolnHcYU2oHIG5XWF+/SUBNnAOE=",
|
||||
"path": "/nix/store/22qgs3skscd9bmrxv9xv4q5d4wwm5ppx-source",
|
||||
"rev": "2c9ecd1f0400076a4d6b2193ad468ff0a7e7fdc5",
|
||||
"type": "path"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1696725822,
|
||||
"narHash": "sha256-B7uAOS7TkLlOg1aX01rQlYbydcyB6ZnLJSfaYbKVww8=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "5aabb5780a11c500981993d49ee93cfa6df9307b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_4": {
|
||||
"locked": {
|
||||
"lastModified": 1696604326,
|
||||
"narHash": "sha256-YXUNI0kLEcI5g8lqGMb0nh67fY9f2YoJsILafh6zlMo=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "87828a0e03d1418e848d3dd3f3014a632e4a4f64",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_5": {
|
||||
"locked": {
|
||||
"lastModified": 1670751203,
|
||||
"narHash": "sha256-XdoH1v3shKDGlrwjgrNX/EN8s3c+kQV7xY6cLCE8vcI=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "64e0bf055f9d25928c31fb12924e59ff8ce71e60",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-unstable",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs_6": {
|
||||
"locked": {
|
||||
"lastModified": 1691654369,
|
||||
"narHash": "sha256-gSILTEx1jRaJjwZxRlnu3ZwMn1FVNk80qlwiCX8kmpo=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "ce5e4a6ef2e59d89a971bc434ca8ca222b9c7f5e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_7": {
|
||||
"locked": {
|
||||
"lastModified": 1696604326,
|
||||
"narHash": "sha256-YXUNI0kLEcI5g8lqGMb0nh67fY9f2YoJsILafh6zlMo=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "87828a0e03d1418e848d3dd3f3014a632e4a4f64",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_8": {
|
||||
"locked": {
|
||||
"lastModified": 1696693680,
|
||||
"narHash": "sha256-PH0HQTkqyj7DmdPKPwrrXwVURLBqzZs4nqnDw9q8mhg=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "945559664c1dc5836173ee12896ba421d9b37181",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"darkmatter": "darkmatter",
|
||||
"darwin": "darwin",
|
||||
"disko": "disko",
|
||||
"hardware": "hardware",
|
||||
"home-manager": "home-manager",
|
||||
"mailserver": "mailserver",
|
||||
"nix-custom": "nix-custom",
|
||||
"nixpkgs": "nixpkgs_7",
|
||||
"sops-nix": "sops-nix"
|
||||
}
|
||||
},
|
||||
"sops-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_8",
|
||||
"nixpkgs-stable": "nixpkgs-stable"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1696734395,
|
||||
"narHash": "sha256-O/g/wwBqqSS7RQ53bE6Ssf0pXVTCYfN7NnJDhKfggQY=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "d7380c38d407eaf06d111832f4368ba3486b800e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"utils": {
|
||||
"locked": {
|
||||
"lastModified": 1605370193,
|
||||
"narHash": "sha256-YyMTf3URDL/otKdKgtoMChu4vfVL3vCMkRqpGifhUn0=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "5021eac20303a61fafe17224c087f5519baed54d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"wallpaper-engine-kde-plugin-lib": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1691303010,
|
||||
"narHash": "sha256-BVtTnJA1RLUU/Tj7WI/80ja4pI8NezHCjKvB72VjrZk=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "f972b2a24c9c3cc2d3e4f41d2ebd14f1473cebdf",
|
||||
"revCount": 557,
|
||||
"submodules": true,
|
||||
"type": "git",
|
||||
"url": "https://github.com/catsout/wallpaper-engine-kde-plugin"
|
||||
},
|
||||
"original": {
|
||||
"submodules": true,
|
||||
"type": "git",
|
||||
"url": "https://github.com/catsout/wallpaper-engine-kde-plugin"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
62
flake.nix
Normal file
62
flake.nix
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
{
|
||||
description = "Entrypoint of all nix configurations";
|
||||
|
||||
inputs = {
|
||||
darkmatter.url = "gitlab:VandalByte/darkmatter-grub-theme";
|
||||
darwin.url = "github:lnl7/nix-darwin";
|
||||
disko.url = "github:nix-community/disko";
|
||||
hardware.url = "github:nixos/nixos-hardware";
|
||||
home-manager.url = "github:nix-community/home-manager";
|
||||
mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver";
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
nix-custom.url = "git+https://forgejo.invariantspace.com/macronova/nix-custom";
|
||||
sops-nix.url = "github:Mic92/sops-nix";
|
||||
};
|
||||
|
||||
outputs = inputs@{ self, darwin, nixpkgs, ... }:
|
||||
let
|
||||
darwinConfigDir = ./darwin;
|
||||
linuxConfigDir = ./linux;
|
||||
templateDir = ./template;
|
||||
systemArgs = archPath: instance: {
|
||||
modules = [
|
||||
# Import config from folder
|
||||
(archPath + "/${instance}")
|
||||
# Setup Nix
|
||||
({ pkgs, ... }: {
|
||||
nix = {
|
||||
gc = {
|
||||
automatic = true;
|
||||
options = "--delete-older-than 30d";
|
||||
};
|
||||
settings = {
|
||||
experimental-features = [ "nix-command" "flakes" ];
|
||||
auto-optimise-store = true;
|
||||
};
|
||||
};
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
})
|
||||
];
|
||||
specialArgs = { inherit inputs; };
|
||||
};
|
||||
in
|
||||
{
|
||||
darwinConfigurations = builtins.mapAttrs
|
||||
(instance: _:
|
||||
darwin.lib.darwinSystem (systemArgs darwinConfigDir instance // {
|
||||
system = "aarch64-darwin";
|
||||
}))
|
||||
(builtins.readDir darwinConfigDir);
|
||||
nixosConfigurations = builtins.mapAttrs
|
||||
(instance: _:
|
||||
nixpkgs.lib.nixosSystem (systemArgs linuxConfigDir instance))
|
||||
(builtins.readDir linuxConfigDir);
|
||||
templates = builtins.mapAttrs
|
||||
(template: _: {
|
||||
path = templateDir + "/${template}";
|
||||
description = "Template flake setup: ${template}";
|
||||
})
|
||||
(builtins.readDir templateDir);
|
||||
};
|
||||
|
||||
}
|
||||
17
linux/blitzar/audio.nix
Normal file
17
linux/blitzar/audio.nix
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{ ... }: {
|
||||
security.rtkit.enable = true;
|
||||
|
||||
# Enable pipewire
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa = {
|
||||
enable = true;
|
||||
support32Bit = true;
|
||||
};
|
||||
pulse.enable = true;
|
||||
};
|
||||
|
||||
# Enable noisetorch
|
||||
programs.noisetorch.enable = true;
|
||||
|
||||
}
|
||||
73
linux/blitzar/configuration.nix
Normal file
73
linux/blitzar/configuration.nix
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page
|
||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
# Configure boot loader
|
||||
boot.loader.grub = {
|
||||
enable = true;
|
||||
device = "nodev";
|
||||
efiSupport = true;
|
||||
efiInstallAsRemovable = true;
|
||||
darkmatter-theme = {
|
||||
enable = true;
|
||||
style = "nixos";
|
||||
resolution = "1440p";
|
||||
};
|
||||
};
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "America/Los_Angeles";
|
||||
|
||||
# Enable bluetooth
|
||||
hardware.bluetooth.enable = true;
|
||||
|
||||
# Enable hardware accelerated video decoding
|
||||
hardware.opengl = {
|
||||
enable = true;
|
||||
extraPackages = with pkgs; [
|
||||
vaapiVdpau
|
||||
libvdpau-va-gl
|
||||
];
|
||||
};
|
||||
|
||||
# Enable firmware update
|
||||
services.fwupd.enable = true;
|
||||
|
||||
# Configure network proxy if necessary
|
||||
# networking.proxy.default = "http://user:password@proxy:port/";
|
||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
# services.printing.enable = true;
|
||||
|
||||
# Some programs need SUID wrappers, can be configured further or are
|
||||
# started in user sessions.
|
||||
# programs.mtr.enable = true;
|
||||
# programs.gnupg.agent = {
|
||||
# enable = true;
|
||||
# enableSSHSupport = true;
|
||||
# };
|
||||
|
||||
# List services that you want to enable:
|
||||
|
||||
# Enable the OpenSSH daemon.
|
||||
# services.openssh.enable = true;
|
||||
|
||||
# Copy the NixOS configuration file and link it from the resulting system
|
||||
# (/run/current-system/configuration.nix). This is useful in case you
|
||||
# accidentally delete configuration.nix.
|
||||
# system.copySystemConfiguration = true;
|
||||
|
||||
# This value determines the NixOS release from which the default
|
||||
# settings for stateful data, like file locations and database versions
|
||||
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||
# this value at the release version of the first install of this system.
|
||||
# Before changing this value read the documentation for this option
|
||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||
system.stateVersion = "22.11"; # Did you read the comment?
|
||||
|
||||
}
|
||||
|
||||
18
linux/blitzar/default.nix
Normal file
18
linux/blitzar/default.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{ inputs, ... }: {
|
||||
imports = with inputs; [
|
||||
darkmatter.nixosModule
|
||||
disko.nixosModules.disko
|
||||
hardware.nixosModules.asus-zephyrus-ga402
|
||||
] ++ [
|
||||
./audio.nix
|
||||
./configuration.nix
|
||||
./disko.nix
|
||||
./gui.nix
|
||||
./hardware-configuration.nix
|
||||
./network.nix
|
||||
./locale.nix
|
||||
./syncthing.nix
|
||||
./zfs.nix
|
||||
../../common
|
||||
];
|
||||
}
|
||||
88
linux/blitzar/disko.nix
Normal file
88
linux/blitzar/disko.nix
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
{ ... }: {
|
||||
disko.devices = {
|
||||
# Partition the physical disk
|
||||
disk = {
|
||||
storage = {
|
||||
type = "disk";
|
||||
device = "/dev/nvme0n1";
|
||||
content = {
|
||||
type = "table";
|
||||
format = "gpt";
|
||||
partitions = [
|
||||
{
|
||||
name = "esp";
|
||||
start = "2MiB";
|
||||
end = "2GiB";
|
||||
fs-type = "fat32";
|
||||
bootable = true;
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "vfat";
|
||||
mountpoint = "/boot";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "zfs";
|
||||
start = "2GiB";
|
||||
end = "100%";
|
||||
content = {
|
||||
type = "zfs";
|
||||
pool = "zroot";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Construct the primary zfs pool for this system.
|
||||
zpool.zroot = {
|
||||
type = "zpool";
|
||||
options = {
|
||||
ashift = "12";
|
||||
autotrim = "on";
|
||||
listsnapshots = "on";
|
||||
};
|
||||
rootFsOptions = {
|
||||
acltype = "posix";
|
||||
atime = "off";
|
||||
compression = "zstd";
|
||||
dnodesize = "auto";
|
||||
mountpoint = "none";
|
||||
normalization = "formD";
|
||||
xattr = "sa";
|
||||
};
|
||||
datasets = {
|
||||
# Encrypt main dataset
|
||||
main = {
|
||||
type = "zfs_fs";
|
||||
options = {
|
||||
encryption = "on";
|
||||
keyformat = "passphrase";
|
||||
};
|
||||
};
|
||||
# Create dataset for home
|
||||
"main/home" = {
|
||||
type = "zfs_fs";
|
||||
mountpoint = "/home";
|
||||
};
|
||||
# Create dataset for nix store
|
||||
"main/nix" = {
|
||||
type = "zfs_fs";
|
||||
mountpoint = "/nix";
|
||||
};
|
||||
# Create dataset for root
|
||||
"main/root" = {
|
||||
type = "zfs_fs";
|
||||
mountpoint = "/";
|
||||
};
|
||||
# Reserve space for performance
|
||||
reservation = {
|
||||
type = "zfs_fs";
|
||||
options.refreservation = "256G";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
67
linux/blitzar/gui.nix
Normal file
67
linux/blitzar/gui.nix
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
{ config, inputs, pkgs, ... }: {
|
||||
home-manager.users.${config.constants.userName} = {
|
||||
home.packages = with pkgs; [
|
||||
exactaudiocopy
|
||||
haruna
|
||||
jellyfin-media-player
|
||||
lutris
|
||||
nvtop-amd
|
||||
mono
|
||||
picard
|
||||
qbittorrent
|
||||
sweet
|
||||
sweet-nova
|
||||
telegram-desktop
|
||||
thunderbird
|
||||
wineWowPackages.waylandFull
|
||||
winetricks
|
||||
yuzu-mainline
|
||||
] ++ (with pkgs.libsForQt5; [
|
||||
kirigami-addons
|
||||
qt5.qtwebsockets
|
||||
]) ++ [
|
||||
inputs.nix-custom.packages.${pkgs.system}.wallpaper-engine-kde-plugin-lib
|
||||
(pkgs.python3.withPackages (ps: with ps; [
|
||||
websockets
|
||||
]))
|
||||
];
|
||||
programs = {
|
||||
firefox.enable = true;
|
||||
kitty = {
|
||||
enable = true;
|
||||
settings = {
|
||||
background_opacity = "0.72";
|
||||
remember_window_size = "no";
|
||||
};
|
||||
theme = "Tokyo Night Moon";
|
||||
};
|
||||
obs-studio.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
programs.clash-verge = {
|
||||
enable = true;
|
||||
tunMode = true;
|
||||
autoStart = true;
|
||||
};
|
||||
|
||||
programs.dconf.enable = true;
|
||||
|
||||
programs.steam.enable = true;
|
||||
|
||||
services.colord.enable = true;
|
||||
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
displayManager = {
|
||||
defaultSession = "plasmawayland";
|
||||
autoLogin.user = "macronova";
|
||||
sddm = {
|
||||
enable = true;
|
||||
autoLogin.relogin = true;
|
||||
};
|
||||
};
|
||||
desktopManager.plasma5.enable = true;
|
||||
videoDrivers = [ "amdgpu" ];
|
||||
};
|
||||
}
|
||||
26
linux/blitzar/hardware-configuration.nix
Normal file
26
linux/blitzar/hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[
|
||||
(modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "usbhid" "sdhci_pci" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-amd" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.wlan0.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
82
linux/blitzar/locale.nix
Normal file
82
linux/blitzar/locale.nix
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
{ pkgs, ... }: {
|
||||
# Configure default fonts
|
||||
fonts = {
|
||||
packages = with pkgs; [
|
||||
inter
|
||||
iosevka
|
||||
noto-fonts
|
||||
noto-fonts-cjk-sans
|
||||
noto-fonts-cjk-serif
|
||||
noto-fonts-emoji
|
||||
meslo-lgs-nf
|
||||
];
|
||||
fontconfig.defaultFonts = {
|
||||
serif = [ "Noto Serif" "Noto Serif CJK SC" ];
|
||||
sansSerif = [ "Inter" "Noto Sans CJK SC" ];
|
||||
monospace = [ "Iosevka" "Noto Sans CJK SC" ];
|
||||
};
|
||||
};
|
||||
|
||||
# Configure input methods
|
||||
i18n = {
|
||||
defaultLocale = "en_US.UTF-8";
|
||||
inputMethod = {
|
||||
enabled = "fcitx5";
|
||||
fcitx5.addons = with pkgs; [ fcitx5-rime ];
|
||||
};
|
||||
supportedLocales = [
|
||||
"C.UTF-8/UTF-8"
|
||||
"en_US.UTF-8/UTF-8"
|
||||
"ja_JP.UTF-8/UTF-8"
|
||||
"zh_CN.GB18030/GB18030"
|
||||
"zh_CN.UTF-8/UTF-8"
|
||||
];
|
||||
};
|
||||
|
||||
# Configure keyboard mapping
|
||||
services.kanata = {
|
||||
enable = true;
|
||||
keyboards.core = {
|
||||
devices = [ "/dev/input/by-id/usb-ASUSTeK_Computer_Inc._N-KEY_Device-if02-event-kbd" ];
|
||||
config = ''
|
||||
(defsrc
|
||||
esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 del
|
||||
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
|
||||
tab q w e r t y u i o p [ ] \
|
||||
caps a s d f g h j k l ; ' ret
|
||||
lsft z x c v b n m , . / rsft up
|
||||
lctl lmet lalt spc ralt rctl left down rght
|
||||
)
|
||||
(deflayer base
|
||||
_ _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
_ _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
_ _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
_ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
_ _ _ _ _ _ _ _ _ _ _ _ _
|
||||
_ _ _ _ _ @li _ _ _
|
||||
)
|
||||
(deflayer index
|
||||
XX XX XX XX XX XX XX XX XX XX XX XX XX XX
|
||||
XX XX XX XX XX XX XX XX XX XX XX XX XX XX
|
||||
XX XX XX XX XX XX XX XX XX XX XX XX XX XX
|
||||
XX XX XX XX XX XX XX XX XX XX XX XX XX
|
||||
XX XX XX XX XX @lb XX @lm XX XX XX XX XX
|
||||
XX XX XX XX XX XX XX XX XX
|
||||
)
|
||||
(deflayer media
|
||||
XX XX XX XX XX XX XX XX XX XX XX XX XX XX
|
||||
XX XX XX XX XX XX XX XX XX XX XX XX XX XX
|
||||
XX XX XX XX XX XX XX XX XX XX XX XX XX XX
|
||||
XX XX XX XX XX XX XX XX XX XX XX XX XX
|
||||
XX XX XX XX XX XX XX XX prev next XX XX XX
|
||||
XX XX XX pp XX @li XX XX XX
|
||||
)
|
||||
(defalias
|
||||
li (layer-toggle index)
|
||||
lb (layer-switch base)
|
||||
lm (layer-switch media)
|
||||
)
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
14
linux/blitzar/network.nix
Normal file
14
linux/blitzar/network.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{ config, ... }: {
|
||||
networking = {
|
||||
domain = config.constants.domain;
|
||||
hostId = "30f8f777";
|
||||
hostName = "blitzar";
|
||||
networkmanager = {
|
||||
enable = true;
|
||||
wifi.backend = "iwd";
|
||||
};
|
||||
nftables.enable = true;
|
||||
wireless.iwd.enable = true;
|
||||
};
|
||||
services.resolved.enable = true;
|
||||
}
|
||||
27
linux/blitzar/syncthing.nix
Normal file
27
linux/blitzar/syncthing.nix
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{ config, ... }:
|
||||
|
||||
{
|
||||
services.syncthing = {
|
||||
enable = true;
|
||||
dataDir = config.constants.homeDir;
|
||||
openDefaultPorts = true;
|
||||
overrideDevices = true;
|
||||
overrideFolders = true;
|
||||
settings = {
|
||||
devices.nebula = {
|
||||
name = "nebula";
|
||||
id = "KCQSN3M-UWBEDE6-SCS5LS7-WFKFLDK-WT5ECNB-3Z47WAM-ZMA52UL-ZNJUYQ7";
|
||||
};
|
||||
folders.music = {
|
||||
enable = true;
|
||||
devices = [ "nebula" ];
|
||||
id = "Music";
|
||||
label = "Music";
|
||||
path = "~/Music";
|
||||
type = "sendonly";
|
||||
};
|
||||
};
|
||||
user = config.constants.userName;
|
||||
};
|
||||
}
|
||||
|
||||
83
linux/blitzar/zfs.nix
Normal file
83
linux/blitzar/zfs.nix
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
{ config, lib, ... }: {
|
||||
|
||||
boot = {
|
||||
kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages;
|
||||
loader.grub.zfsSupport = true;
|
||||
zfs.enableUnstable = true;
|
||||
};
|
||||
|
||||
services.zfs = {
|
||||
autoScrub.enable = true;
|
||||
trim.enable = true;
|
||||
};
|
||||
|
||||
services.zrepl = {
|
||||
enable = true;
|
||||
settings = {
|
||||
global = {
|
||||
logging = [{
|
||||
type = "syslog";
|
||||
level = "info";
|
||||
format = "human";
|
||||
}];
|
||||
};
|
||||
jobs = [
|
||||
{
|
||||
name = "snapshot";
|
||||
type = "snap";
|
||||
filesystems = { "zroot/main/home" = true; };
|
||||
snapshotting = {
|
||||
type = "periodic";
|
||||
prefix = "zrepl-";
|
||||
interval = "1h";
|
||||
};
|
||||
pruning = {
|
||||
keep = [{
|
||||
type = "grid";
|
||||
regex = "^zrepl-.*";
|
||||
grid = lib.concatStringsSep " | " [ "1x1h(keep=all)" "24x1h" "7x1d" "4x1w" ];
|
||||
}];
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "push-to-local-drive";
|
||||
type = "push";
|
||||
send = { encrypted = true; };
|
||||
connect = {
|
||||
type = "local";
|
||||
listener_name = "sink-to-local-drive";
|
||||
client_identity = config.networking.hostName;
|
||||
};
|
||||
filesystems = { "zroot/main/home" = true; };
|
||||
replication = {
|
||||
protection = {
|
||||
initial = "guarantee_resumability";
|
||||
incremental = "guarantee_incremental";
|
||||
};
|
||||
};
|
||||
snapshotting = { type = "manual"; };
|
||||
pruning = {
|
||||
keep_sender = [{ type = "regex"; regex = ".*"; }];
|
||||
keep_receiver = [{
|
||||
type = "grid";
|
||||
regex = "^zrepl-.*";
|
||||
grid = lib.concatStringsSep " | " [ "1x1h(keep=all)" "365x1d" "52x1w" ];
|
||||
}];
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "sink-to-local-drive";
|
||||
type = "sink";
|
||||
recv = { placeholder = { encryption = "off"; }; };
|
||||
root_fs = "zbackup";
|
||||
serve = {
|
||||
type = "local";
|
||||
listener_name = "sink-to-local-drive";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
29
linux/nebula/caddy.nix
Normal file
29
linux/nebula/caddy.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
services.caddy =
|
||||
{
|
||||
enable = true;
|
||||
virtualHosts =
|
||||
let
|
||||
conduitCfg = config.services.matrix-conduit.settings.global;
|
||||
forgejoCfg = config.services.gitea.settings.server;
|
||||
dn = config.constants.domain;
|
||||
lh = config.constants.localhost;
|
||||
in
|
||||
{
|
||||
"forgejo.${dn}".extraConfig = ''
|
||||
reverse_proxy ${forgejoCfg.HTTP_ADDR}:${toString forgejoCfg.HTTP_PORT}
|
||||
'';
|
||||
"jellyfin.${dn}".extraConfig = ''
|
||||
reverse_proxy ${lh}:8096
|
||||
'';
|
||||
"matrix.${dn}".extraConfig = ''
|
||||
reverse_proxy /_matrix/* ${conduitCfg.address}:${toString conduitCfg.port}
|
||||
file_server {
|
||||
root ${pkgs.cinny}
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
11
linux/nebula/conduit.nix
Normal file
11
linux/nebula/conduit.nix
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{ config, ... }:
|
||||
|
||||
{
|
||||
services.matrix-conduit = {
|
||||
enable = true;
|
||||
settings.global = {
|
||||
address = config.constants.localhost;
|
||||
server_name = config.constants.domain;
|
||||
};
|
||||
};
|
||||
}
|
||||
33
linux/nebula/configuration.nix
Normal file
33
linux/nebula/configuration.nix
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page
|
||||
# and in the NixOS manual (accessible by running `nixos-help`).
|
||||
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
|
||||
# Configure boot loader
|
||||
boot.loader.grub = {
|
||||
enable = true;
|
||||
device = "nodev";
|
||||
efiSupport = true;
|
||||
efiInstallAsRemovable = true;
|
||||
darkmatter-theme = {
|
||||
enable = true;
|
||||
style = "nixos";
|
||||
};
|
||||
};
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "America/Los_Angeles";
|
||||
|
||||
# This value determines the NixOS release from which the default
|
||||
# settings for stateful data, like file locations and database versions
|
||||
# on your system were taken. It's perfectly fine and recommended to leave
|
||||
# this value at the release version of the first install of this system.
|
||||
# Before changing this value read the documentation for this option
|
||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||
system.stateVersion = "23.05"; # Did you read the comment?
|
||||
|
||||
}
|
||||
|
||||
22
linux/nebula/default.nix
Normal file
22
linux/nebula/default.nix
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{ inputs, ... }:
|
||||
|
||||
{
|
||||
imports = with inputs; [
|
||||
darkmatter.nixosModule
|
||||
disko.nixosModules.disko
|
||||
hardware.nixosModules.common-cpu-amd
|
||||
hardware.nixosModules.common-cpu-amd-pstate
|
||||
] ++ [
|
||||
./caddy.nix
|
||||
./conduit.nix
|
||||
./configuration.nix
|
||||
./disko.nix
|
||||
./forgejo.nix
|
||||
./hardware-configuration.nix
|
||||
./jellyfin.nix
|
||||
./network.nix
|
||||
./syncthing.nix
|
||||
./zfs.nix
|
||||
../../common
|
||||
];
|
||||
}
|
||||
88
linux/nebula/disko.nix
Executable file
88
linux/nebula/disko.nix
Executable file
|
|
@ -0,0 +1,88 @@
|
|||
{ ... }: {
|
||||
disko.devices = {
|
||||
# Partition the physical disk
|
||||
disk = {
|
||||
storage = {
|
||||
type = "disk";
|
||||
device = "/dev/nvme0n1";
|
||||
content = {
|
||||
type = "table";
|
||||
format = "gpt";
|
||||
partitions = [
|
||||
{
|
||||
name = "esp";
|
||||
start = "1MiB";
|
||||
end = "1GiB";
|
||||
fs-type = "fat32";
|
||||
bootable = true;
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "vfat";
|
||||
mountpoint = "/boot";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "zfs";
|
||||
start = "1GiB";
|
||||
end = "100%";
|
||||
content = {
|
||||
type = "zfs";
|
||||
pool = "zroot";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Construct the primary zfs pool for this system.
|
||||
zpool.zroot = {
|
||||
type = "zpool";
|
||||
options = {
|
||||
ashift = "12";
|
||||
autotrim = "on";
|
||||
listsnapshots = "on";
|
||||
};
|
||||
rootFsOptions = {
|
||||
acltype = "posix";
|
||||
atime = "off";
|
||||
compression = "zstd";
|
||||
dnodesize = "auto";
|
||||
mountpoint = "none";
|
||||
normalization = "formD";
|
||||
xattr = "sa";
|
||||
};
|
||||
datasets = {
|
||||
# Encrypt main dataset
|
||||
main = {
|
||||
type = "zfs_fs";
|
||||
options = {
|
||||
encryption = "on";
|
||||
keyformat = "passphrase";
|
||||
};
|
||||
};
|
||||
# Create dataset for home
|
||||
"main/home" = {
|
||||
type = "zfs_fs";
|
||||
mountpoint = "/home";
|
||||
};
|
||||
# Create dataset for nix store
|
||||
"main/nix" = {
|
||||
type = "zfs_fs";
|
||||
mountpoint = "/nix";
|
||||
};
|
||||
# Create dataset for root
|
||||
"main/root" = {
|
||||
type = "zfs_fs";
|
||||
mountpoint = "/";
|
||||
};
|
||||
# Reserve space for performance
|
||||
reservation = {
|
||||
type = "zfs_fs";
|
||||
options.refreservation = "128G";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
18
linux/nebula/forgejo.nix
Normal file
18
linux/nebula/forgejo.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
services.gitea = {
|
||||
enable = true;
|
||||
appName = "Forgejo";
|
||||
package = pkgs.forgejo;
|
||||
settings = {
|
||||
server = let dn = config.constants.domain; in {
|
||||
DOMAIN = dn;
|
||||
HTTP_ADDR = config.constants.localhost;
|
||||
ROOT_URL = "https://forgejo.${dn}";
|
||||
};
|
||||
service.DISABLE_REGISTRATION = true;
|
||||
session.COOKIE_SECURE = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
27
linux/nebula/hardware-configuration.nix
Normal file
27
linux/nebula/hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[
|
||||
(modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "usbhid" "uas" "sd_mod" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-amd" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.enp1s0.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.wlo1.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
9
linux/nebula/jellyfin.nix
Normal file
9
linux/nebula/jellyfin.nix
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{ config, ... }:
|
||||
{
|
||||
hardware.opengl.enable = true;
|
||||
|
||||
services.jellyfin = {
|
||||
enable = true;
|
||||
user = config.constants.userName;
|
||||
};
|
||||
}
|
||||
43
linux/nebula/network.nix
Normal file
43
linux/nebula/network.nix
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{ config, ... }:
|
||||
|
||||
let hn = "nebula"; in {
|
||||
networking = {
|
||||
domain = config.constants.domain;
|
||||
firewall.allowedTCPPorts = [ 80 443 ];
|
||||
hostId = "e6449321";
|
||||
hostName = hn;
|
||||
networkmanager = {
|
||||
enable = true;
|
||||
wifi.backend = "iwd";
|
||||
};
|
||||
nftables.enable = true;
|
||||
tempAddresses = "disabled";
|
||||
wireless.iwd.enable = true;
|
||||
};
|
||||
|
||||
sops.secrets."cloudflare/${hn}" = { };
|
||||
|
||||
services.cloudflare-dyndns = {
|
||||
enable = true;
|
||||
apiTokenFile = config.sops.secrets."cloudflare/${hn}".path;
|
||||
domains = builtins.attrNames config.services.caddy.virtualHosts;
|
||||
ipv4 = false;
|
||||
ipv6 = true;
|
||||
};
|
||||
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
hostKeys = [{
|
||||
comment = "host@${hn}";
|
||||
path = "/etc/ssh/host";
|
||||
rounds = 100;
|
||||
type = "ed25519";
|
||||
}];
|
||||
settings = {
|
||||
PasswordAuthentication = false;
|
||||
KbdInteractiveAuthentication = false;
|
||||
};
|
||||
};
|
||||
|
||||
services.resolved.enable = true;
|
||||
}
|
||||
26
linux/nebula/syncthing.nix
Normal file
26
linux/nebula/syncthing.nix
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
{ config, ... }:
|
||||
|
||||
{
|
||||
services.syncthing = {
|
||||
enable = true;
|
||||
dataDir = config.constants.homeDir;
|
||||
openDefaultPorts = true;
|
||||
overrideDevices = true;
|
||||
overrideFolders = true;
|
||||
settings = {
|
||||
devices.blitzar = {
|
||||
name = "blitzar";
|
||||
id = "JQQYTRP-GEJITYH-NSHUZ2T-YWS5XDC-7R6E47Z-NUXON4D-4QR77VU-AE4Q3AR";
|
||||
};
|
||||
folders.music = {
|
||||
enable = true;
|
||||
devices = [ "blitzar" ];
|
||||
id = "Music";
|
||||
label = "Music";
|
||||
path = "~/Music";
|
||||
type = "receiveonly";
|
||||
};
|
||||
};
|
||||
user = config.constants.userName;
|
||||
};
|
||||
}
|
||||
15
linux/nebula/zfs.nix
Executable file
15
linux/nebula/zfs.nix
Executable file
|
|
@ -0,0 +1,15 @@
|
|||
{ config, ... }: {
|
||||
|
||||
boot = {
|
||||
kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages;
|
||||
loader.grub.zfsSupport = true;
|
||||
zfs.enableUnstable = true;
|
||||
};
|
||||
|
||||
services.zfs = {
|
||||
autoScrub.enable = true;
|
||||
trim.enable = true;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
59
linux/singularity/caddy.nix
Normal file
59
linux/singularity/caddy.nix
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
{ config, ... }:
|
||||
|
||||
{
|
||||
|
||||
services.caddy = {
|
||||
enable = true;
|
||||
email = config.constants.postMaster;
|
||||
virtualHosts =
|
||||
let
|
||||
dn = config.constants.domain;
|
||||
msfqdn = config.mailserver.fqdn;
|
||||
mtfqdn = "matrix.${dn}";
|
||||
vaultCfg = config.services.vaultwarden.config;
|
||||
wn = s: "/.well-known/${s}";
|
||||
in
|
||||
{
|
||||
"${dn}".extraConfig = let wnm = wn "matrix"; in ''
|
||||
header ${wnm}/* Content-Type application/json
|
||||
header ${wnm}/* Access-Control-Allow-Origin *
|
||||
respond ${wnm}/server `{ "m.server": "${mtfqdn}:443" }`
|
||||
respond ${wnm}/client `{
|
||||
"m.homeserver": { "base_url": "https://${mtfqdn}" },
|
||||
"m.identity_server": { "base_url": "https://${mtfqdn}" }
|
||||
}`
|
||||
'';
|
||||
${msfqdn} = {
|
||||
extraConfig = ''
|
||||
file_server ${wn "acme-challenge"}/* {
|
||||
root ${config.security.acme.defaults.webroot}/
|
||||
}
|
||||
'';
|
||||
useACMEHost = msfqdn;
|
||||
};
|
||||
"vault.${dn}".extraConfig =
|
||||
''
|
||||
reverse_proxy /notifications/hub/negotiate ${vaultCfg.ROCKET_ADDRESS}:${
|
||||
toString vaultCfg.ROCKET_PORT
|
||||
}
|
||||
reverse_proxy /notifications/hub ${vaultCfg.WEBSOCKET_ADDRESS}:${
|
||||
toString vaultCfg.WEBSOCKET_PORT
|
||||
}
|
||||
reverse_proxy ${vaultCfg.ROCKET_ADDRESS}:${
|
||||
toString vaultCfg.ROCKET_PORT
|
||||
} {
|
||||
header_up X-Real-IP {remote_host}
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
security.acme = {
|
||||
acceptTerms = true;
|
||||
defaults = {
|
||||
email = config.constants.postMaster;
|
||||
webroot = "/var/lib/acme/acme-challenge";
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
37
linux/singularity/configuration.nix
Normal file
37
linux/singularity/configuration.nix
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
|
||||
boot = {
|
||||
tmp.cleanOnBoot = true;
|
||||
loader.grub.device = "/dev/sda";
|
||||
};
|
||||
|
||||
constants.sopsFile = ../../common/auths.yaml;
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
bat
|
||||
bottom
|
||||
helix
|
||||
];
|
||||
|
||||
programs = {
|
||||
fish.enable = true;
|
||||
git.enable = true;
|
||||
};
|
||||
|
||||
sops.secrets."users/root/password".neededForUsers = true;
|
||||
|
||||
system.stateVersion = "23.11";
|
||||
|
||||
users = {
|
||||
mutableUsers = false;
|
||||
users.root = {
|
||||
openssh.authorizedKeys.keys = config.constants.publicKeys;
|
||||
hashedPasswordFile = config.sops.secrets."users/root/password".path;
|
||||
shell = pkgs.fish;
|
||||
};
|
||||
};
|
||||
|
||||
zramSwap.enable = true;
|
||||
}
|
||||
16
linux/singularity/default.nix
Normal file
16
linux/singularity/default.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{ inputs, ... }: {
|
||||
imports = with inputs; [
|
||||
mailserver.nixosModule
|
||||
sops-nix.nixosModules.sops
|
||||
] ++ [
|
||||
./caddy.nix
|
||||
./configuration.nix
|
||||
./hardware-configuration.nix
|
||||
./mailserver.nix
|
||||
./network.nix
|
||||
./vaultwarden.nix
|
||||
./xray.nix
|
||||
../../common/constants.nix
|
||||
../../common/secrets.nix
|
||||
];
|
||||
}
|
||||
38
linux/singularity/hardware-configuration.nix
Normal file
38
linux/singularity/hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
|
||||
|
||||
# boot.initrd.availableKernelModules =
|
||||
# [ "ata_piix" "virtio_pci" "virtio_scsi" "sd_mod" ];
|
||||
# boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
# fileSystems."/" = {
|
||||
# device = "/dev/disk/by-uuid/6d3bf8cd-1996-45fb-";
|
||||
# fsType = "ext4";
|
||||
# };
|
||||
|
||||
boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "xen_blkfront" "vmw_pvscsi" ];
|
||||
boot.initrd.kernelModules = [ "nvme" ];
|
||||
fileSystems."/" = { device = "/dev/sda3"; fsType = "ext4"; };
|
||||
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.ens18.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.ens19.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.intel.updateMicrocode =
|
||||
lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
25
linux/singularity/mailserver.nix
Normal file
25
linux/singularity/mailserver.nix
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
{ config, ... }:
|
||||
|
||||
let
|
||||
dn = config.constants.domain;
|
||||
usr = config.constants.userName;
|
||||
mailSecret = "mail/${usr}/password";
|
||||
in
|
||||
{
|
||||
mailserver =
|
||||
{
|
||||
enable = true;
|
||||
fqdn = "mail.${dn}";
|
||||
domains = [ dn ];
|
||||
|
||||
loginAccounts = {
|
||||
"${usr}@${dn}" = {
|
||||
aliases = [ config.constants.postMaster ];
|
||||
hashedPasswordFile = config.sops.secrets.${mailSecret}.path;
|
||||
};
|
||||
};
|
||||
|
||||
certificateScheme = "acme";
|
||||
};
|
||||
sops.secrets.${mailSecret} = { };
|
||||
}
|
||||
34
linux/singularity/network.nix
Normal file
34
linux/singularity/network.nix
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
{ config, ... }:
|
||||
|
||||
let hn = "singularity"; in {
|
||||
networking = {
|
||||
domain = config.constants.domain;
|
||||
firewall.allowedTCPPorts = [ 80 443 50051 ];
|
||||
hostName = hn;
|
||||
hostId = "2cadb253";
|
||||
};
|
||||
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
settings = {
|
||||
KbdInteractiveAuthentication = false;
|
||||
PasswordAuthentication = false;
|
||||
};
|
||||
hostKeys = [{
|
||||
comment = "host@${hn}";
|
||||
path = "/etc/ssh/host";
|
||||
rounds = 100;
|
||||
type = "ed25519";
|
||||
}];
|
||||
};
|
||||
|
||||
sops.secrets."cloudflare/${hn}" = { };
|
||||
|
||||
services.cloudflare-dyndns = {
|
||||
enable = true;
|
||||
apiTokenFile = config.sops.secrets."cloudflare/${hn}".path;
|
||||
domains = builtins.attrNames config.services.caddy.virtualHosts;
|
||||
};
|
||||
|
||||
services.resolved.enable = true;
|
||||
}
|
||||
18
linux/singularity/vaultwarden.nix
Normal file
18
linux/singularity/vaultwarden.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{ config, ... }:
|
||||
|
||||
{
|
||||
services.vaultwarden = let lh = config.constants.localhost; in {
|
||||
enable = true;
|
||||
config = {
|
||||
# Disable signup
|
||||
SIGNUPS_ALLOWED = false;
|
||||
# Specify service port
|
||||
ROCKET_ADDRESS = lh;
|
||||
ROCKET_PORT = 25487;
|
||||
# Specify notification port
|
||||
WEBSOCKET_ENABLED = true;
|
||||
WEBSOCKET_ADDRESS = lh;
|
||||
WEBSOCKET_PORT = 40513;
|
||||
};
|
||||
};
|
||||
}
|
||||
10
linux/singularity/xray.nix
Normal file
10
linux/singularity/xray.nix
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{ config, ... }:
|
||||
|
||||
let xrayCfg = "xray/config.json"; in {
|
||||
services.xray = {
|
||||
enable = true;
|
||||
settingsFile = config.sops.secrets.${xrayCfg}.path;
|
||||
};
|
||||
|
||||
sops.secrets.${xrayCfg}.mode = "0444";
|
||||
}
|
||||
15
template/context/flake.nix
Normal file
15
template/context/flake.nix
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs = { self, flake-utils, nixpkgs }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let pkgs = nixpkgs.legacyPackages.${system};
|
||||
in {
|
||||
devShells.default = pkgs.mkShell {
|
||||
packages = with pkgs; [ texlive.combined.scheme-full ];
|
||||
};
|
||||
});
|
||||
}
|
||||
16
template/rust-nightly/flake.nix
Normal file
16
template/rust-nightly/flake.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
fenix.url = "github:nix-community/fenix";
|
||||
};
|
||||
|
||||
outputs = { self, fenix, flake-utils, nixpkgs }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let pkgs = nixpkgs.legacyPackages.${system};
|
||||
in {
|
||||
devShells.default = pkgs.mkShell {
|
||||
packages = [ fenix.packages.${system}.complete.toolchain ];
|
||||
};
|
||||
});
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue