Compare commits
59 Commits
lunarvim
...
0b1649033c
Author | SHA1 | Date | |
---|---|---|---|
0b1649033c
|
|||
2b188dab9a
|
|||
17487f010d
|
|||
0258036463
|
|||
86a3bae9cd
|
|||
f3db8d920d
|
|||
89f4af47b9
|
|||
66154517f6
|
|||
32356fb1e2
|
|||
c855dc7c07
|
|||
42429704cb
|
|||
479f4d9eda
|
|||
69bbc41c39
|
|||
42b35cb7ae
|
|||
2af4c735c9
|
|||
3f070b6c52
|
|||
542d6150ba
|
|||
061cd15fad
|
|||
5e83195ea2
|
|||
ee09ed556f
|
|||
9618698da5
|
|||
23abd062ec
|
|||
29b32d3d85
|
|||
6df254ed93
|
|||
b9cff42ac4
|
|||
02caab13ce
|
|||
cef43e67d4
|
|||
d2f6e6aa3c
|
|||
94f97a27cd
|
|||
16138921fd
|
|||
2b021cc0a4
|
|||
93ac4b1185
|
|||
544c511341
|
|||
bffc9ba70d
|
|||
8b10d9d2d9
|
|||
1d8e43c06b
|
|||
0be5b217b0
|
|||
dd4455eafe
|
|||
310956acad
|
|||
c4e97e81c5
|
|||
f957ea84e8
|
|||
44369bfa89
|
|||
f193aab3d7
|
|||
e7078d2aac
|
|||
00bfff1dec
|
|||
8adb4f4089
|
|||
8763a70bac
|
|||
87de19d6ae
|
|||
0b021819d3
|
|||
f2cbd869de
|
|||
661c148504
|
|||
2cea68ce91
|
|||
4839356310
|
|||
9a48913133
|
|||
80d5f09640
|
|||
d291a97ccd
|
|||
5d3a4606fe
|
|||
def3fbca47
|
|||
da17da719f
|
39
README.md
39
README.md
@@ -9,16 +9,47 @@ System and user configuration for NixOS-based systems.
|
||||
| **Theme:** | adwaita |
|
||||
| **Terminal:** | Console |
|
||||
|
||||
## Provisioning
|
||||
> [nixos-anywhere](https://github.com/nix-community/nixos-anywhere) is the module used for provisioning
|
||||
## Provisioning a new host
|
||||
> [nixos-anywhere](https://github.com/nix-community/nixos-anywhere) is the module used
|
||||
> for provisioning
|
||||
|
||||
Generate a new SSH host key in "$temp/etc/ssh" as per [this guide](https://nix-community.github.io/nixos-anywhere/howtos/secrets.html#example-decrypting-an-openssh-host-key-with-pass).
|
||||
```
|
||||
ssh-keygen -t ed25519 -f /tmp/ssh_host_ed25519_key
|
||||
```
|
||||
|
||||
Then run;
|
||||
Update [nix-secrets](/jordan/nix-secrets) with the new host key to enable the system to decrypt
|
||||
any relevant secrets.
|
||||
|
||||
In order to use the borgmatic module for backups, go to [borgbase.com](https://borgbase.com).
|
||||
Add the generated SSH host key and create a new repository for the system.
|
||||
|
||||
Create a new directory under `hosts/` with a system configuration and disk layout.
|
||||
|
||||
Boot the NixOS installer (or any Linux distribution) on the target.
|
||||
|
||||
Then run:
|
||||
```
|
||||
nix run github:nix-community/nixos-anywhere -- \
|
||||
--disk-encryption-keys /tmp/secret.key /tmp/secret.key \
|
||||
--extra-files "$temp" \
|
||||
--flake .#<hostname> \
|
||||
root@<ip>
|
||||
root@<target-ip>
|
||||
```
|
||||
|
||||
### Post install
|
||||
|
||||
If backups are configured, you'll need to run:
|
||||
```
|
||||
borgmatic init --encryption repokey-blake2
|
||||
```
|
||||
then restart `borgmatic`.
|
||||
|
||||
To join the Tailscale network, run:
|
||||
```
|
||||
tailscale up --login-server https://headscale.vimium.net
|
||||
```
|
||||
then visit the URL, SSH onto `vps1` and run `headscale --user mesh nodes register --key <key>`.
|
||||
|
||||
The new node can optionally be given a friendly name with `headscale node rename -i <index> <hostname>`.
|
||||
|
||||
|
403
flake.lock
generated
403
flake.lock
generated
@@ -8,11 +8,11 @@
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1707830867,
|
||||
"narHash": "sha256-PAdwm5QqdlwIqGrfzzvzZubM+FXtilekQ/FA0cI49/o=",
|
||||
"lastModified": 1712079060,
|
||||
"narHash": "sha256-/JdiT9t+zzjChc5qQiF+jhrVhRt8figYH29rZO7pFe4=",
|
||||
"owner": "ryantm",
|
||||
"repo": "agenix",
|
||||
"rev": "8cb01a0e717311680e0cbca06a76cbceba6f3ed6",
|
||||
"rev": "1381a759b205dff7a6818733118d02253340fd5e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -21,6 +21,45 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"beautysh": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixvim",
|
||||
"nixpkgs"
|
||||
],
|
||||
"poetry2nix": "poetry2nix",
|
||||
"utils": "utils_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1680308980,
|
||||
"narHash": "sha256-aUEHV0jk2qIFP3jlsWYWhBbm+w/N9gzH3e4I5DcdB5s=",
|
||||
"owner": "lovesegfault",
|
||||
"repo": "beautysh",
|
||||
"rev": "9845efc3ea3e86cc0d41465d720a47f521b2799c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "lovesegfault",
|
||||
"repo": "beautysh",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"darwin": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
@@ -50,11 +89,11 @@
|
||||
"utils": "utils"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1708091384,
|
||||
"narHash": "sha256-dTGGw2y8wvfjr+J9CjQbfdulOq72hUG17HXVNxpH1yE=",
|
||||
"lastModified": 1711973905,
|
||||
"narHash": "sha256-UFKME/N1pbUtn+2Aqnk+agUt8CekbpuqwzljivfIme8=",
|
||||
"owner": "serokell",
|
||||
"repo": "deploy-rs",
|
||||
"rev": "0a0187794ac7f7a1e62cda3dabf8dc041f868790",
|
||||
"rev": "88b3059b020da69cbe16526b8d639bd5e0b51c8b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -70,11 +109,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1709439398,
|
||||
"narHash": "sha256-MW0zp3ta7SvdpjvhVCbtP20ewRwQZX2vRFn14gTc4Kg=",
|
||||
"lastModified": 1713406758,
|
||||
"narHash": "sha256-kwZvhmx+hSZvjzemKxsAqzEqWmXZS47VVwQhNrINORQ=",
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"rev": "1f76b318aa11170c8ca8c225a9b4c458a5fcbb57",
|
||||
"rev": "1efd500e9805a9efbce401ed5999006d397b9f11",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -86,11 +125,11 @@
|
||||
"firefox-gnome-theme": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1708965002,
|
||||
"narHash": "sha256-gIBZCPB0sA8Gagrxd8w4+y9uUkWBnXJBmq9Ur5BYTQU=",
|
||||
"lastModified": 1713458745,
|
||||
"narHash": "sha256-6K95wxghPBS1sJMnuKJ4JD3jLd/5bAEmx7rnffqf29I=",
|
||||
"owner": "rafaelmardojai",
|
||||
"repo": "firefox-gnome-theme",
|
||||
"rev": "4e966509c180f93ba8665cd73cad8456bf44baab",
|
||||
"rev": "5501717d3e98fcc418a2ca40de1c5ad1b66939bb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -115,6 +154,96 @@
|
||||
"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-compat_3": {
|
||||
"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-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1701680307,
|
||||
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_2": {
|
||||
"inputs": {
|
||||
"systems": "systems_4"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1685518550,
|
||||
"narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"gitignore": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixvim",
|
||||
"pre-commit-hooks",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1660459072,
|
||||
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "gitignore.nix",
|
||||
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "gitignore.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
@@ -143,11 +272,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1706981411,
|
||||
"narHash": "sha256-cLbLPTL1CDmETVh4p0nQtvoF+FSEjsnJTFpTxhXywhQ=",
|
||||
"lastModified": 1712386041,
|
||||
"narHash": "sha256-dA82pOMQNnCJMAsPG7AXG35VmCSMZsJHTFlTHizpKWQ=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "652fda4ca6dafeb090943422c34ae9145787af37",
|
||||
"rev": "d6bb9f934f2870e5cbc5b94c79e9db22246141ff",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -159,11 +288,11 @@
|
||||
},
|
||||
"nixos-hardware": {
|
||||
"locked": {
|
||||
"lastModified": 1709410583,
|
||||
"narHash": "sha256-esOSUoQ7mblwcsSea0K17McZuwAIjoS6dq/4b83+lvw=",
|
||||
"lastModified": 1713521961,
|
||||
"narHash": "sha256-EwR8wW9AqJhSIY+0oxWRybUZ32BVKuZ9bjlRh8SJvQ8=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "59e37017b9ed31dee303dbbd4531c594df95cfbc",
|
||||
"rev": "5d48925b815fd202781bfae8fb6f45c07112fdb2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -172,6 +301,32 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixos-mailserver": {
|
||||
"inputs": {
|
||||
"blobs": "blobs",
|
||||
"flake-compat": "flake-compat_2",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-23_05": "nixpkgs-23_05",
|
||||
"nixpkgs-23_11": "nixpkgs-23_11",
|
||||
"utils": "utils_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1706219574,
|
||||
"narHash": "sha256-qO+8UErk+bXCq2ybHU4GzXG4Ejk4Tk0rnnTPNyypW4g=",
|
||||
"owner": "simple-nixos-mailserver",
|
||||
"repo": "nixos-mailserver",
|
||||
"rev": "e47f3719f1db3e0961a4358d4cb234a0acaa7baf",
|
||||
"type": "gitlab"
|
||||
},
|
||||
"original": {
|
||||
"owner": "simple-nixos-mailserver",
|
||||
"ref": "nixos-23.11",
|
||||
"repo": "nixos-mailserver",
|
||||
"type": "gitlab"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1703013332,
|
||||
@@ -188,13 +343,59 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"nixpkgs-23_05": {
|
||||
"locked": {
|
||||
"lastModified": 1709237383,
|
||||
"narHash": "sha256-cy6ArO4k5qTx+l5o+0mL9f5fa86tYUX3ozE1S+Txlds=",
|
||||
"lastModified": 1704290814,
|
||||
"narHash": "sha256-LWvKHp7kGxk/GEtlrGYV68qIvPHkU9iToomNFGagixU=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "1536926ef5621b09bba54035ae2bb6d806d72ac8",
|
||||
"rev": "70bdadeb94ffc8806c0570eb5c2695ad29f0e421",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-23.05",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs-23_11": {
|
||||
"locked": {
|
||||
"lastModified": 1706098335,
|
||||
"narHash": "sha256-r3dWjT8P9/Ah5m5ul4WqIWD8muj5F+/gbCdjiNVBKmU=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a77ab169a83a4175169d78684ddd2e54486ac651",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-23.11",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1685801374,
|
||||
"narHash": "sha256-otaSUoFEMM+LjBI1XL/xGB5ao6IwnZOXc47qhIgJe8U=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c37ca420157f4abc31e26f436c1145f8951ff373",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-23.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1713537308,
|
||||
"narHash": "sha256-XtTSSIB2DA6tOv+l0FhvfDMiyCmhoRbNB+0SeInZkbk=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "5c24cf2f0a12ad855f444c30b2421d044120c66f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -221,11 +422,11 @@
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1709309926,
|
||||
"narHash": "sha256-VZFBtXGVD9LWTecGi6eXrE0hJ/mVB3zGUlHImUs2Qak=",
|
||||
"lastModified": 1713564160,
|
||||
"narHash": "sha256-YguPZpiejgzLEcO36/SZULjJQ55iWcjAmf3lYiyV1Fo=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "79baff8812a0d68e24a836df0a364c678089e2c7",
|
||||
"rev": "bc194f70731cc5d2b046a6c1b3b15f170f05999c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -234,6 +435,82 @@
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixvim": {
|
||||
"inputs": {
|
||||
"beautysh": "beautysh",
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"pre-commit-hooks": "pre-commit-hooks"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1704297403,
|
||||
"narHash": "sha256-g7+4SiXDGzIlWIfANyH1J5CeEaY+Alah6KOm6IO4nIk=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixvim",
|
||||
"rev": "b3ea5256e07ee9105060cffa075028402946bd63",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"ref": "nixos-23.11",
|
||||
"repo": "nixvim",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"poetry2nix": {
|
||||
"inputs": {
|
||||
"flake-utils": [
|
||||
"nixvim",
|
||||
"beautysh",
|
||||
"utils"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"nixvim",
|
||||
"beautysh",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1658665240,
|
||||
"narHash": "sha256-/wkx7D7enyBPRjIkK0w7QxLQhzEkb3UxNQnjyc3FTUI=",
|
||||
"owner": "nix-community",
|
||||
"repo": "poetry2nix",
|
||||
"rev": "8b8edc85d24661d5a6d0d71d6a7011f3e699780f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "poetry2nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"pre-commit-hooks": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat_3",
|
||||
"flake-utils": "flake-utils_2",
|
||||
"gitignore": "gitignore",
|
||||
"nixpkgs": [
|
||||
"nixvim",
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-stable": "nixpkgs-stable"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1703939133,
|
||||
"narHash": "sha256-Gxe+mfOT6bL7wLC/tuT2F+V+Sb44jNr8YsJ3cyIl4Mo=",
|
||||
"owner": "cachix",
|
||||
"repo": "pre-commit-hooks.nix",
|
||||
"rev": "9d3d7e18c6bc4473d7520200d4ddab12f8402d38",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"repo": "pre-commit-hooks.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"agenix": "agenix",
|
||||
@@ -242,8 +519,10 @@
|
||||
"firefox-gnome-theme": "firefox-gnome-theme",
|
||||
"home-manager": "home-manager_2",
|
||||
"nixos-hardware": "nixos-hardware",
|
||||
"nixos-mailserver": "nixos-mailserver",
|
||||
"nixpkgs": "nixpkgs_3",
|
||||
"nixpkgs-unstable": "nixpkgs-unstable",
|
||||
"nixvim": "nixvim",
|
||||
"secrets": "secrets",
|
||||
"thunderbird-gnome-theme": "thunderbird-gnome-theme"
|
||||
}
|
||||
@@ -251,11 +530,11 @@
|
||||
"secrets": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1709495020,
|
||||
"narHash": "sha256-eiz0qUjUbdeb6m28XPY7OVnrGMZ45JiT2dZZ0Bmq2X0=",
|
||||
"lastModified": 1712006510,
|
||||
"narHash": "sha256-JQ3ZcSwIB6d3gDcx/nZCUlSfZGwaI55WNmD9mK2uTPA=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "d135b4d6d5f0079999188895f8b5f35e821b0d4b",
|
||||
"revCount": 14,
|
||||
"rev": "f350d35d7651c415fa4c0d6a7cff378ba5650f93",
|
||||
"revCount": 17,
|
||||
"type": "git",
|
||||
"url": "ssh://git@git.vimium.com/jordan/nix-secrets.git"
|
||||
},
|
||||
@@ -294,14 +573,44 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_3": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_4": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"thunderbird-gnome-theme": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1701889124,
|
||||
"narHash": "sha256-K+6oh7+J6RDBFkxphY/pzf0B+q5+IY54ZMKZrFSKXlc=",
|
||||
"lastModified": 1710774977,
|
||||
"narHash": "sha256-nQBz2PW3YF3+RTflPzDoAcs6vH1PTozESIYUGAwvSdA=",
|
||||
"owner": "rafaelmardojai",
|
||||
"repo": "thunderbird-gnome-theme",
|
||||
"rev": "966e9dd54bd2ce9d36d51cd6af8c3bac7a764a68",
|
||||
"rev": "65d5c03fc9172d549a3ea72fd366d544981a002b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -327,6 +636,36 @@
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"utils_2": {
|
||||
"locked": {
|
||||
"lastModified": 1605370193,
|
||||
"narHash": "sha256-YyMTf3URDL/otKdKgtoMChu4vfVL3vCMkRqpGifhUn0=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "5021eac20303a61fafe17224c087f5519baed54d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"utils_3": {
|
||||
"locked": {
|
||||
"lastModified": 1678901627,
|
||||
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
|
20
flake.nix
20
flake.nix
@@ -20,6 +20,14 @@
|
||||
flake = false;
|
||||
};
|
||||
nixos-hardware.url = "github:NixOS/nixos-hardware";
|
||||
nixos-mailserver = {
|
||||
url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-23.11";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
nixvim = {
|
||||
url = "github:nix-community/nixvim/nixos-23.11";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
secrets = {
|
||||
url = "git+ssh://git@git.vimium.com/jordan/nix-secrets.git";
|
||||
flake = false;
|
||||
@@ -30,7 +38,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
outputs = inputs @ { self, nixpkgs, nixpkgs-unstable, agenix, deploy-rs, disko, home-manager, nixos-hardware, secrets, ... }:
|
||||
outputs = inputs @ { self, nixpkgs, nixpkgs-unstable, agenix, deploy-rs, disko, home-manager, nixos-hardware, nixos-mailserver, secrets, ... }:
|
||||
let
|
||||
mkPkgsForSystem = system: inputs.nixpkgs;
|
||||
overlays = [
|
||||
@@ -46,6 +54,7 @@
|
||||
commonModules = [
|
||||
agenix.nixosModules.age
|
||||
disko.nixosModules.disko
|
||||
nixos-mailserver.nixosModule
|
||||
home-manager.nixosModule
|
||||
./modules
|
||||
];
|
||||
@@ -78,6 +87,7 @@
|
||||
helios = mkNixosSystem { system = "x86_64-linux"; name = "helios"; };
|
||||
hypnos = mkNixosSystem { system = "x86_64-linux"; name = "hypnos"; };
|
||||
library = mkNixosSystem { system = "x86_64-linux"; name = "library"; };
|
||||
mail = mkNixosSystem { system = "x86_64-linux"; name = "mail"; };
|
||||
odyssey = mkNixosSystem { system = "x86_64-linux"; name = "odyssey"; };
|
||||
pi = mkNixosSystem { system = "aarch64-linux"; name = "pi"; extraModules = [ nixos-hardware.nixosModules.raspberry-pi-4 ]; };
|
||||
vps1 = mkNixosSystem { system = "x86_64-linux"; name = "vps1"; };
|
||||
@@ -94,6 +104,14 @@
|
||||
autoRollback = true;
|
||||
sshUser = "root";
|
||||
nodes = {
|
||||
mail = {
|
||||
hostname = "mail.mesh.vimium.net";
|
||||
|
||||
profiles.system = {
|
||||
user = "root";
|
||||
path = deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.mail;
|
||||
};
|
||||
};
|
||||
vps1 = {
|
||||
hostname = "vps1.mesh.vimium.net";
|
||||
|
||||
|
@@ -36,7 +36,6 @@
|
||||
};
|
||||
editors = {
|
||||
neovim.enable = true;
|
||||
vscode.enable = true;
|
||||
};
|
||||
security = {
|
||||
gpg.enable = true;
|
||||
|
@@ -49,6 +49,7 @@
|
||||
max-free = 1000000000;
|
||||
fallback = true;
|
||||
allowed-users = [ "@wheel" ];
|
||||
trusted-users = [ "@wheel" ];
|
||||
auto-optimise-store = true;
|
||||
substituters = [
|
||||
"http://odyssey.mesh.vimium.net"
|
||||
|
@@ -30,8 +30,30 @@
|
||||
randomizedDelaySec = "10min";
|
||||
};
|
||||
|
||||
systemd.services.NetworkManager-wait-online.enable = false;
|
||||
|
||||
fonts.packages = with pkgs; [
|
||||
noto-fonts
|
||||
(nerdfonts.override { fonts = [ "BigBlueTerminal" "ComicShannsMono" "Terminus" "UbuntuMono" ]; })
|
||||
];
|
||||
|
||||
modules = {
|
||||
desktop.gnome.enable = true;
|
||||
networking.tailscale.enable = true;
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
bind
|
||||
bmon
|
||||
fd
|
||||
ffmpeg
|
||||
iotop
|
||||
unstable.nix-tree
|
||||
ripgrep
|
||||
rsync
|
||||
tcpdump
|
||||
tokei
|
||||
tree
|
||||
wl-clipboard
|
||||
];
|
||||
}
|
||||
|
18
hosts/mail/README.md
Normal file
18
hosts/mail/README.md
Normal file
@@ -0,0 +1,18 @@
|
||||
# Mail server
|
||||
|
||||
## Overview
|
||||
Mail server hosted in OVH.
|
||||
|
||||
## Specs
|
||||
* CPU - ??
|
||||
* Memory - ??
|
||||
|
||||
### Disks
|
||||
Device | Partitions _(filesystem, usage)_
|
||||
--- | ---
|
||||
NVMe | `/dev/sda1` (ext4, NixOS Root)
|
||||
|
||||
### Networks
|
||||
- DHCP on `10.0.1.0/24` subnet.
|
||||
- Tailscale on `100.64.0.0/10` subnet. FQDN: `mail.mesh.vimium.net`.
|
||||
|
55
hosts/mail/default.nix
Normal file
55
hosts/mail/default.nix
Normal file
@@ -0,0 +1,55 @@
|
||||
{ config, lib, pkgs, inputs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
./disko-config.nix
|
||||
../server.nix
|
||||
];
|
||||
|
||||
networking = {
|
||||
hostId = "08ac2f14";
|
||||
domain = "mesh.vimium.net";
|
||||
firewall = {
|
||||
enable = true;
|
||||
allowedTCPPorts = [
|
||||
22 # SSH
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
users = {
|
||||
users = {
|
||||
root = {
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILVHTjsyMIV4THNw6yz0OxAxGnC+41gX72UrPqTzR+OS jordan@vimium.com"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.openssh.settings.PermitRootLogin = lib.mkForce "prohibit-password";
|
||||
|
||||
security.acme.defaults = {
|
||||
email = "hostmaster@vimium.com";
|
||||
group = "nginx";
|
||||
webroot = "/var/lib/acme/acme-challenge";
|
||||
};
|
||||
|
||||
modules = {
|
||||
services = {
|
||||
borgmatic = {
|
||||
enable = true;
|
||||
directories = [
|
||||
"/var/dkim"
|
||||
"/var/lib"
|
||||
"/var/vmail"
|
||||
];
|
||||
repoPath = "ssh://kg2mpt28@kg2mpt28.repo.borgbase.com/./repo";
|
||||
};
|
||||
mail.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
system.stateVersion = "22.11";
|
||||
}
|
55
hosts/mail/disko-config.nix
Normal file
55
hosts/mail/disko-config.nix
Normal file
@@ -0,0 +1,55 @@
|
||||
{ lib, ... }:
|
||||
{
|
||||
disko.devices = {
|
||||
disk.disk1 = {
|
||||
device = lib.mkDefault "/dev/sda";
|
||||
type = "disk";
|
||||
content = {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
boot = {
|
||||
name = "boot";
|
||||
size = "2M";
|
||||
type = "EF02";
|
||||
};
|
||||
esp = {
|
||||
name = "ESP";
|
||||
size = "300M";
|
||||
type = "EF00";
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "vfat";
|
||||
mountpoint = "/boot";
|
||||
};
|
||||
};
|
||||
root = {
|
||||
name = "root";
|
||||
size = "100%";
|
||||
content = {
|
||||
type = "lvm_pv";
|
||||
vg = "pool";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
lvm_vg = {
|
||||
pool = {
|
||||
type = "lvm_vg";
|
||||
lvs = {
|
||||
root = {
|
||||
size = "100%FREE";
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "ext4";
|
||||
mountpoint = "/";
|
||||
mountOptions = [
|
||||
"defaults"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
22
hosts/mail/hardware-configuration.nix
Normal file
22
hosts/mail/hardware-configuration.nix
Normal file
@@ -0,0 +1,22 @@
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
(modulesPath + "/profiles/qemu-guest.nix")
|
||||
];
|
||||
|
||||
boot = {
|
||||
initrd = {
|
||||
availableKernelModules = [ "ata_piix" "uhci_hcd" "xen_blkfront" "vmw_pvscsi" ];
|
||||
kernelModules = [ "nvme" ];
|
||||
};
|
||||
loader.grub = {
|
||||
efiSupport = true;
|
||||
efiInstallAsRemovable = true;
|
||||
};
|
||||
tmp.cleanOnBoot = true;
|
||||
};
|
||||
|
||||
zramSwap.enable = true;
|
||||
}
|
||||
|
@@ -47,13 +47,16 @@
|
||||
browsers = {
|
||||
firefox.enable = true;
|
||||
};
|
||||
gaming.emulators = {
|
||||
gamecube.enable = true;
|
||||
ps2.enable = true;
|
||||
ps3.enable = true;
|
||||
psp.enable = true;
|
||||
wii.enable = true;
|
||||
xbox.enable = true;
|
||||
gaming = {
|
||||
emulators = {
|
||||
gamecube.enable = true;
|
||||
ps2.enable = true;
|
||||
ps3.enable = true;
|
||||
psp.enable = true;
|
||||
wii.enable = true;
|
||||
xbox.enable = true;
|
||||
};
|
||||
lutris.enable = true;
|
||||
};
|
||||
media.graphics = {
|
||||
modeling.enable = true;
|
||||
@@ -70,7 +73,6 @@
|
||||
};
|
||||
editors = {
|
||||
neovim.enable = true;
|
||||
vscode.enable = true;
|
||||
};
|
||||
hardware.presonus-studio.enable = true;
|
||||
security = {
|
||||
@@ -82,6 +84,12 @@
|
||||
enable = true;
|
||||
directories = [
|
||||
"/home/jordan/Documents"
|
||||
"/home/jordan/Downloads"
|
||||
"/home/jordan/Music"
|
||||
"/home/jordan/Pictures"
|
||||
"/home/jordan/projects"
|
||||
"/home/jordan/Videos"
|
||||
"/home/jordan/.mozilla"
|
||||
];
|
||||
repoPath = "ssh://iqwu22oq@iqwu22oq.repo.borgbase.com/./repo";
|
||||
};
|
||||
|
@@ -62,6 +62,7 @@
|
||||
headscale.enable = true;
|
||||
matrix-synapse.enable = true;
|
||||
nginx.enable = true;
|
||||
photoprism.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
|
@@ -2,6 +2,7 @@
|
||||
imports = [
|
||||
./options.nix
|
||||
./desktop/gnome.nix
|
||||
./desktop/kde.nix
|
||||
./desktop/mimeapps.nix
|
||||
./desktop/apps/qbittorrent.nix
|
||||
./desktop/apps/slack.nix
|
||||
@@ -34,8 +35,10 @@
|
||||
./services/coturn
|
||||
./services/gitea
|
||||
./services/headscale
|
||||
./services/mail
|
||||
./services/matrix-synapse
|
||||
./services/nginx
|
||||
./services/photoprism
|
||||
./shell/git
|
||||
./shell/zsh
|
||||
];
|
||||
|
@@ -54,11 +54,11 @@ in {
|
||||
};
|
||||
|
||||
config = {
|
||||
user.packages = with pkgs.unstable; [
|
||||
user.packages = with pkgs; [
|
||||
(lib.mkIf cfg.ps1.enable duckstation)
|
||||
(lib.mkIf cfg.ps2.enable pcsx2)
|
||||
(lib.mkIf cfg.ps2.enable unstable.pcsx2)
|
||||
(lib.mkIf cfg.ps3.enable rpcs3)
|
||||
(lib.mkIf cfg.psp.enable ppsspp)
|
||||
(lib.mkIf cfg.psp.enable unstable.ppsspp)
|
||||
(lib.mkIf cfg.ds.enable desmume)
|
||||
(lib.mkIf (cfg.gba.enable ||
|
||||
cfg.gb.enable ||
|
||||
@@ -68,7 +68,7 @@ in {
|
||||
(lib.mkIf (cfg.wii.enable ||
|
||||
cfg.gamecube.enable)
|
||||
dolphin-emu)
|
||||
(lib.mkIf cfg.xbox.enable xemu)
|
||||
(lib.mkIf cfg.xbox.enable unstable.xemu)
|
||||
];
|
||||
};
|
||||
}
|
||||
|
@@ -10,8 +10,13 @@ in {
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
user.packages = with pkgs; [
|
||||
lutris
|
||||
environment.systemPackages = with pkgs; [
|
||||
(lutris.override {
|
||||
extraPkgs = pkgs: [
|
||||
winePackages.staging
|
||||
wine64Packages.staging
|
||||
];
|
||||
})
|
||||
vulkan-loader
|
||||
vulkan-tools
|
||||
];
|
||||
|
@@ -135,6 +135,8 @@ in {
|
||||
};
|
||||
"org/gnome/Console" = {
|
||||
font-scale = 1.4;
|
||||
use-system-font = false;
|
||||
custom-font = "ComicShannsMono Nerd Font 10";
|
||||
};
|
||||
"org/gnome/mutter" = {
|
||||
center-new-windows = true;
|
||||
@@ -142,9 +144,9 @@ in {
|
||||
experimental-features = [ "scale-monitor-framebuffer" ];
|
||||
};
|
||||
"org/gnome/desktop/interface" = {
|
||||
color-scheme = "prefer-dark";
|
||||
enable-hot-corners = false;
|
||||
monospace-font-name = "Ubuntu Mono 11";
|
||||
icon-theme = "MoreWaita";
|
||||
monospace-font-name = "UbuntuMono Nerd Font 11";
|
||||
};
|
||||
"org/gnome/desktop/wm/keybindings" = {
|
||||
switch-group = [ "<Super>grave" ];
|
||||
@@ -155,39 +157,30 @@ in {
|
||||
};
|
||||
};
|
||||
|
||||
fonts.packages = with pkgs; [
|
||||
noto-fonts
|
||||
ubuntu_font_family
|
||||
];
|
||||
|
||||
user.packages = with pkgs; [
|
||||
authenticator
|
||||
bottles
|
||||
bustle
|
||||
# bottles
|
||||
# bustle
|
||||
celluloid
|
||||
d-spy
|
||||
drawing
|
||||
fragments
|
||||
# d-spy
|
||||
# drawing
|
||||
# fragments
|
||||
gnome.ghex
|
||||
# gnome-builder
|
||||
gnome-decoder
|
||||
gnome-firmware
|
||||
gnome-frog
|
||||
gnome-obfuscate
|
||||
# gnome-obfuscate
|
||||
gnome-podcasts
|
||||
identity
|
||||
mission-center
|
||||
newsflash
|
||||
schemes
|
||||
# schemes
|
||||
shortwave
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
adw-gtk3
|
||||
bind
|
||||
bmon
|
||||
fd
|
||||
ffmpeg
|
||||
gnome.gnome-boxes
|
||||
gnomeExtensions.another-window-session-manager
|
||||
# gnomeExtensions.bifocals
|
||||
@@ -218,14 +211,7 @@ in {
|
||||
# gnomeExtensions.window-is-ready-remover
|
||||
# gnomeExtensions.worksets
|
||||
# gnomeExtensions.workspace-matrix
|
||||
iotop
|
||||
unstable.morewaita-icon-theme
|
||||
ripgrep
|
||||
rsync
|
||||
tcpdump
|
||||
tokei
|
||||
tree
|
||||
wl-clipboard
|
||||
] ++ (if config.virtualisation.podman.enable then [
|
||||
pods
|
||||
] else []);
|
||||
|
32
modules/desktop/kde.nix
Normal file
32
modules/desktop/kde.nix
Normal file
@@ -0,0 +1,32 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let cfg = config.modules.desktop.kde;
|
||||
in {
|
||||
options.modules.desktop.kde = {
|
||||
enable = lib.mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
displayManager.sddm = {
|
||||
enable = true;
|
||||
wayland.enable = true;
|
||||
};
|
||||
desktopManager.plasma5.enable = true;
|
||||
};
|
||||
|
||||
user.packages = with pkgs; [
|
||||
kmail
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
adw-gtk3
|
||||
];
|
||||
|
||||
home.services.gpg-agent.pinentryFlavor = "qt";
|
||||
};
|
||||
}
|
@@ -11,7 +11,7 @@ in {
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
user.packages = with pkgs; [
|
||||
libreoffice
|
||||
(if config.modules.desktop.kde.enable == true then libreoffice-qt else libreoffice)
|
||||
];
|
||||
};
|
||||
}
|
||||
|
@@ -2,7 +2,6 @@
|
||||
|
||||
let
|
||||
cfg = config.modules.editors.neovim;
|
||||
dev = config.modules.dev;
|
||||
in {
|
||||
options.modules.editors.neovim = {
|
||||
enable = lib.mkOption {
|
||||
@@ -12,124 +11,126 @@ in {
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
user.packages = with pkgs; [
|
||||
(neovim.override {
|
||||
configure = {
|
||||
customRC = ''
|
||||
luafile ~/.config/nvim/init.lua
|
||||
'';
|
||||
packages.myPlugins = with pkgs.vimPlugins; {
|
||||
start = [
|
||||
(nvim-treesitter.withPlugins (
|
||||
plugins: with plugins; [
|
||||
bash
|
||||
c
|
||||
cmake
|
||||
cpp
|
||||
css
|
||||
dockerfile
|
||||
elm
|
||||
glsl
|
||||
graphql
|
||||
haskell
|
||||
http
|
||||
html
|
||||
java
|
||||
javascript
|
||||
jsdoc
|
||||
json
|
||||
json5
|
||||
latex
|
||||
lua
|
||||
markdown
|
||||
ninja
|
||||
nix
|
||||
org
|
||||
perl
|
||||
php
|
||||
pug
|
||||
python
|
||||
regex
|
||||
rst
|
||||
ruby
|
||||
rust
|
||||
scala
|
||||
scss
|
||||
toml
|
||||
tsx
|
||||
typescript
|
||||
vim
|
||||
yaml
|
||||
zig
|
||||
]
|
||||
))
|
||||
nvim-treesitter-context
|
||||
nvim-treesitter-textobjects
|
||||
nvim-lspconfig
|
||||
];
|
||||
home.programs.nixvim = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
|
||||
options = {
|
||||
number = true;
|
||||
tabstop = 2;
|
||||
shiftwidth = 2;
|
||||
expandtab = true;
|
||||
foldlevel = 99;
|
||||
splitbelow = true;
|
||||
splitright = true;
|
||||
undofile = true;
|
||||
updatetime = 100;
|
||||
list = true;
|
||||
};
|
||||
|
||||
globals = {
|
||||
mapleader = ",";
|
||||
maplocalleader = ",";
|
||||
};
|
||||
|
||||
clipboard = {
|
||||
register = "unnamedplus";
|
||||
|
||||
providers.wl-copy.enable = true;
|
||||
};
|
||||
|
||||
plugins.comment-nvim.enable = true;
|
||||
|
||||
plugins.hmts.enable = true;
|
||||
|
||||
plugins.lightline.enable = true;
|
||||
|
||||
plugins.luasnip.enable = true;
|
||||
|
||||
plugins.lsp = {
|
||||
enable = true;
|
||||
servers = {
|
||||
bashls.enable = true;
|
||||
ccls.enable = true;
|
||||
cssls.enable = true;
|
||||
eslint.enable = true;
|
||||
gopls.enable = true;
|
||||
html.enable = true;
|
||||
lua-ls.enable = true;
|
||||
pylsp.enable = true;
|
||||
nixd.enable = true;
|
||||
rust-analyzer = {
|
||||
enable = true;
|
||||
installCargo = true;
|
||||
installRustc = true;
|
||||
};
|
||||
tsserver.enable = true;
|
||||
};
|
||||
})
|
||||
] ++
|
||||
};
|
||||
|
||||
# Install appropriate language servers
|
||||
(if dev.cc.enable then [
|
||||
ccls # C/C++
|
||||
] else []) ++
|
||||
(if dev.java.enable then [
|
||||
java-language-server # Java
|
||||
ltex-ls # LaTeX
|
||||
] else []) ++
|
||||
(if dev.lua.enable then [
|
||||
sumneko-lua-language-server # Lua
|
||||
] else []) ++
|
||||
(if dev.node.enable then [
|
||||
nodePackages.bash-language-server # Bash
|
||||
nodePackages.dockerfile-language-server-nodejs # Dockerfile
|
||||
nodePackages.graphql-language-service-cli # GraphQL
|
||||
nodePackages.purescript-language-server # PureScript
|
||||
nodePackages.svelte-language-server # Svelte
|
||||
nodePackages.typescript-language-server # JavaScript/TypeScript
|
||||
nodePackages.vim-language-server # Vim
|
||||
nodePackages.vscode-langservers-extracted # HTML, CSS, JSON, ESLint
|
||||
nodePackages.vue-language-server # Vue.js
|
||||
nodePackages.yaml-language-server # YAML
|
||||
] else []) ++
|
||||
(if dev.python.enable then [
|
||||
cmake-language-server # CMake
|
||||
python310Packages.python-lsp-server # Python
|
||||
] else []) ++
|
||||
(if dev.rust.enable then [
|
||||
rust-analyzer # Rust
|
||||
] else []) ++
|
||||
(if dev.scala.enable then [
|
||||
metals # Scala
|
||||
] else []) ++
|
||||
(if dev.zig.enable then [
|
||||
zls # Zig
|
||||
] else []);
|
||||
plugins.nvim-autopairs.enable = true;
|
||||
|
||||
home.configFile = {
|
||||
"nvim/init.lua".source = ./init.lua;
|
||||
"nvim/lua" = { source = ./lua; recursive = true; };
|
||||
"nvim/lua/config/lsp.lua".text = ''
|
||||
-- This file is autogenerated, do not edit.
|
||||
${if dev.cc.enable then "require('config.lsp.cc')\n" else ""}
|
||||
${if dev.java.enable then "require('config.lsp.java')\n" else ""}
|
||||
${if dev.lua.enable then "require('config.lsp.lua')\n" else ""}
|
||||
${if dev.node.enable then "require('config.lsp.node')\n" else ""}
|
||||
${if dev.python.enable then "require('config.lsp.python')\n" else ""}
|
||||
${if dev.rust.enable then "require('config.lsp.rust')\n" else ""}
|
||||
${if dev.scala.enable then "require('config.lsp.scala')\n" else ""}
|
||||
${if dev.zig.enable then "require('config.lsp.zig')\n" else ""}
|
||||
'';
|
||||
};
|
||||
plugins.nvim-cmp = {
|
||||
enable = true;
|
||||
autoEnableSources = true;
|
||||
sources = [
|
||||
{ name = "nvim_lsp"; }
|
||||
{ name = "path"; }
|
||||
{ name = "buffer"; }
|
||||
];
|
||||
mapping = {
|
||||
"<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
|
||||
"<S-Tab>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
|
||||
"<CR>" = "cmp.mapping.confirm({ select = true })";
|
||||
};
|
||||
};
|
||||
|
||||
env.EDITOR = "nvim";
|
||||
plugins.telescope = {
|
||||
enable = true;
|
||||
keymaps = {
|
||||
"<leader>ff" = "find_files";
|
||||
"<leader>fg" = "live_grep";
|
||||
"<leader>b" = "buffers";
|
||||
"<leader>fh" = "help_tags";
|
||||
"<C-p>" = "git_files";
|
||||
"<C-f>" = "live_grep";
|
||||
};
|
||||
keymapsSilent = true;
|
||||
};
|
||||
|
||||
environment.shellAliases = {
|
||||
vim = "nvim";
|
||||
v = "nvim";
|
||||
plugins.treesitter = {
|
||||
enable = true;
|
||||
|
||||
nixvimInjections = true;
|
||||
|
||||
folding = true;
|
||||
indent = true;
|
||||
};
|
||||
|
||||
plugins.treesitter-refactor = {
|
||||
enable = true;
|
||||
highlightDefinitions = {
|
||||
enable = true;
|
||||
clearOnCursorMove = false;
|
||||
};
|
||||
};
|
||||
|
||||
plugins.undotree.enable = true;
|
||||
|
||||
# plugins.gitsigns.enable = true;
|
||||
# plugins.gitgutter.enable = true;
|
||||
# plugins.goyo.enable = true;
|
||||
# plugins.fugitive.enable = true;
|
||||
# plugins.fzf-lua.enable = true;
|
||||
# plugins.neo-tree.enable = true;
|
||||
# plugins.none-ls.enable = true;
|
||||
# plugins.nvim-tree.enable = true;
|
||||
# plugins.oil.enable = true;
|
||||
# plugins.project-nvim.enable = true;
|
||||
# plugins.surround.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@@ -1,6 +0,0 @@
|
||||
require("config.core")
|
||||
require("config.keymap")
|
||||
require("config.treesitter")
|
||||
require("config.plugins")
|
||||
require("config.lsp")
|
||||
|
@@ -1,36 +0,0 @@
|
||||
local o = vim.opt
|
||||
local wo = vim.wo
|
||||
local bo = vim.bo
|
||||
|
||||
-- Global dirs
|
||||
local cachedir = os.getenv("XDG_CACHE_HOME")
|
||||
o.backupdir = cachedir .. "/nvim/backup/"
|
||||
o.directory = cachedir .. "/nvim/swap/"
|
||||
o.undodir = cachedir .. "/nvim/undo/"
|
||||
|
||||
-- Global
|
||||
o.breakindent = true
|
||||
o.clipboard = "unnamedplus"
|
||||
o.compatible = false
|
||||
o.encoding = "utf-8"
|
||||
o.expandtab = true
|
||||
o.foldlevel = 99
|
||||
o.hidden = true
|
||||
o.hlsearch = false
|
||||
o.ignorecase = true
|
||||
o.laststatus = 2
|
||||
o.listchars = { eol = '↲', tab = '▸ ', trail = '·' }
|
||||
o.relativenumber = true
|
||||
o.shiftwidth = 2
|
||||
o.showmode = false
|
||||
o.smartcase = true
|
||||
o.smarttab = true
|
||||
o.softtabstop = 2
|
||||
o.synmaxcol = 150
|
||||
o.tabstop = 4
|
||||
o.undofile = true
|
||||
o.wildmenu = true
|
||||
|
||||
-- Window
|
||||
|
||||
-- Buffer
|
@@ -1,35 +0,0 @@
|
||||
local keymap = vim.keymap.set
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
vim.g.mapleader = ","
|
||||
|
||||
-- Modes
|
||||
-- Normal = "n",
|
||||
-- Insert = "i",
|
||||
-- Visual = "v",
|
||||
-- Visual Block = "x",
|
||||
-- Term = "t",
|
||||
-- Command = "c"
|
||||
|
||||
keymap("n", "<Left>", "<Nop>", opts)
|
||||
keymap("n", "<Right>", "<Nop>", opts)
|
||||
keymap("n", "<Up>", "<Nop>", opts)
|
||||
keymap("n", "<Down>", "<Nop>", opts)
|
||||
|
||||
keymap("n", "<C-h>", "<C-w>h", { noremap = true })
|
||||
keymap("n", "<C-j>", "<C-w>j", { noremap = true })
|
||||
keymap("n", "<C-k>", "<C-w>k", { noremap = true })
|
||||
keymap("n", "<C-l>", "<C-w>l", { noremap = true })
|
||||
|
||||
keymap("n", "gV", "`[v`]", opts)
|
||||
|
||||
keymap("n", ";", ":", { noremap = true })
|
||||
|
||||
-- Bubble single lines with vim-unimpaired
|
||||
keymap("n", "<C-Up>", "[e", opts)
|
||||
keymap("n", "<C-Down>", "]e", opts)
|
||||
|
||||
-- Bubble multiple lines with vim-unimpaired
|
||||
keymap("v", "<C-Up>", "[egv", opts)
|
||||
keymap("v", "<C-Down>", "]egv", opts)
|
||||
|
@@ -1,5 +0,0 @@
|
||||
lspconfig = require('lspconfig')
|
||||
|
||||
-- Requires C/C++
|
||||
lspconfig.ccls.setup{}
|
||||
|
@@ -1,6 +0,0 @@
|
||||
lspconfig = require('lspconfig')
|
||||
|
||||
-- Requires Java
|
||||
lspconfig.java_language_server.setup{}
|
||||
lspconfig.ltex.setup{}
|
||||
|
@@ -1,22 +0,0 @@
|
||||
lspconfig = require('lspconfig')
|
||||
|
||||
-- Requires Lua
|
||||
lspconfig.sumneko_lua.setup {
|
||||
settings = {
|
||||
Lua = {
|
||||
runtime = {
|
||||
-- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
|
||||
version = 'LuaJIT',
|
||||
},
|
||||
diagnostics = {
|
||||
-- Get the language server to recognize the `vim` global
|
||||
globals = {'vim'},
|
||||
},
|
||||
-- Do not send telemetry data containing a randomized but unique identifier
|
||||
telemetry = {
|
||||
enable = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
@@ -1,17 +0,0 @@
|
||||
lspconfig = require('lspconfig')
|
||||
|
||||
-- Requires Node.js
|
||||
lspconfig.bashls.setup{}
|
||||
lspconfig.cssls.setup{}
|
||||
lspconfig.dockerls.setup{}
|
||||
lspconfig.eslint.setup{}
|
||||
lspconfig.graphql.setup{}
|
||||
lspconfig.html.setup{}
|
||||
lspconfig.jsonls.setup{}
|
||||
lspconfig.purescriptls.setup{}
|
||||
lspconfig.svelte.setup{}
|
||||
lspconfig.tsserver.setup{}
|
||||
lspconfig.vimls.setup{}
|
||||
lspconfig.vuels.setup{}
|
||||
lspconfig.yamlls.setup{}
|
||||
|
@@ -1,6 +0,0 @@
|
||||
lspconfig = require('lspconfig')
|
||||
|
||||
-- Requires Python
|
||||
lspconfig.cmake.setup{}
|
||||
lspconfig.pylsp.setup{}
|
||||
|
@@ -1,5 +0,0 @@
|
||||
lspconfig = require('lspconfig')
|
||||
|
||||
-- Requires Rust
|
||||
lspconfig.rls.setup{}
|
||||
|
@@ -1,5 +0,0 @@
|
||||
lspconfig = require('lspconfig')
|
||||
|
||||
-- Requires Scala
|
||||
lspconfig.metals.setup{}
|
||||
|
@@ -1,5 +0,0 @@
|
||||
lspconfig = require('lspconfig')
|
||||
|
||||
-- Requires Zig
|
||||
lspconfig.zls.setup{}
|
||||
|
@@ -1,77 +0,0 @@
|
||||
local fn = vim.fn
|
||||
|
||||
local install_path = fn.stdpath "data" .. "/site/pack/packer/start/packer.nvim"
|
||||
if fn.empty(fn.glob(install_path)) > 0 then
|
||||
PACKER_BOOTSTRAP = fn.system {
|
||||
"git",
|
||||
"clone",
|
||||
"--depth",
|
||||
"1",
|
||||
"https://github.com/wbthomason/packer.nvim",
|
||||
install_path,
|
||||
}
|
||||
print "Installing packer close and reopen Neovim..."
|
||||
vim.cmd [[packadd packer.nvim]]
|
||||
end
|
||||
|
||||
vim.cmd [[
|
||||
augroup packer_user_config
|
||||
autocmd!
|
||||
autocmd BufWritePost plugins.lua source <afile> | PackerSync
|
||||
augroup end
|
||||
]]
|
||||
|
||||
local status_ok, packer = pcall(require, "packer")
|
||||
if not status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
packer.init {
|
||||
display = {
|
||||
open_fn = function()
|
||||
return require("packer.util").float { border = "rounded" }
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
return packer.startup(function(use)
|
||||
-- Utilities
|
||||
use { "wbthomason/packer.nvim", opt = true }
|
||||
use { "mbbill/undotree" }
|
||||
use { "nvim-lua/plenary.nvim" }
|
||||
use { "tpope/vim-fugitive", event = "User InGitRepo" }
|
||||
|
||||
-- Editing
|
||||
use { "andymass/vim-matchup" }
|
||||
use { "godlygeek/tabular" }
|
||||
use { "JoosepAlviste/nvim-ts-context-commentstring" }
|
||||
use { "kana/vim-textobj-user" }
|
||||
use { "mg979/vim-visual-multi", branch = "master" }
|
||||
use { "p00f/nvim-ts-rainbow" }
|
||||
use { "terryma/vim-expand-region" }
|
||||
use { "tommcdo/vim-exchange", event = "VimEnter" }
|
||||
use { "tpope/vim-abolish" }
|
||||
use { "tpope/vim-commentary", event = "VimEnter" }
|
||||
use { "tpope/vim-repeat", event = "VimEnter" }
|
||||
use { "tpope/vim-surround", event = "VimEnter" }
|
||||
use { "windwp/nvim-autopairs" }
|
||||
use { "windwp/nvim-ts-autotag" }
|
||||
|
||||
-- UI
|
||||
use { "junegunn/goyo.vim" }
|
||||
use { "junegunn/limelight.vim" }
|
||||
use { "markonm/traces.vim" }
|
||||
|
||||
-- Searching
|
||||
use { "nvim-telescope/telescope.nvim", config = [[require('config.telescope')]] }
|
||||
use { "cljoly/telescope-repo.nvim", requires = "telescope.nvim" }
|
||||
use { "dyng/ctrlsf.vim" }
|
||||
|
||||
-- LSP
|
||||
use { "jose-elias-alvarez/null-ls.nvim" }
|
||||
|
||||
if PACKER_BOOTSTRAP then
|
||||
require("packer").sync()
|
||||
end
|
||||
end)
|
||||
|
@@ -1,46 +0,0 @@
|
||||
local status_ok, telescope = pcall(require, "telescope")
|
||||
if not status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
local actions = require("telescope.actions")
|
||||
|
||||
telescope.setup({
|
||||
defaults = {
|
||||
file_ignore_patterns = { ".git/", "node_modules" },
|
||||
},
|
||||
mappings = {
|
||||
i = {
|
||||
["<Down>"] = actions.cycle_history_next,
|
||||
["<Up>"] = actions.cycle_history_prev,
|
||||
["<C-j>"] = actions.move_selection_next,
|
||||
["<C-k>"] = actions.move_selection_previous,
|
||||
},
|
||||
},
|
||||
extensions = {
|
||||
repo = {
|
||||
list = {
|
||||
fd_opts = {
|
||||
"--no-ignore-vcs",
|
||||
},
|
||||
search_dirs = {
|
||||
"~/projects",
|
||||
"~/repos",
|
||||
"~/workspace",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
telescope.load_extension("repo")
|
||||
|
||||
local keymap = vim.keymap.set
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
keymap("n", "<Leader>ff", "<cmd>Telescope find_files<cr>", opts)
|
||||
keymap("n", "<Leader>fg", "<cmd>Telescope live_grep<cr>", opts)
|
||||
keymap("n", "<Leader>fb", "<cmd>Telescope buffers<cr>", opts)
|
||||
keymap("n", "<Leader>fh", "<cmd>Telescope help_tags<cr>", opts)
|
||||
keymap("n", "<Leader>fr", "<cmd>Telescope repo list<cr>", opts)
|
||||
|
@@ -1,35 +0,0 @@
|
||||
require("nvim-treesitter.configs").setup({
|
||||
ignore_install = {},
|
||||
highlight = {
|
||||
enable = true,
|
||||
disable = {},
|
||||
},
|
||||
indent = { enable = true },
|
||||
incremental_selection = {
|
||||
enable = true,
|
||||
keymaps = {
|
||||
init_selection = "gnn",
|
||||
node_incremental = "grn",
|
||||
scope_incremental = "grc",
|
||||
node_decremental = "grm",
|
||||
},
|
||||
},
|
||||
-- Extensions
|
||||
autotag = { enable = true },
|
||||
context_commentstring = { enable = true },
|
||||
matchup = { enable = true },
|
||||
rainbow = { enable = true },
|
||||
textobjects = {
|
||||
select = {
|
||||
enable = true,
|
||||
keymaps = {
|
||||
["af"] = "@function.outer",
|
||||
["if"] = "@function.inner",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
vim.opt.foldmethod = "expr"
|
||||
vim.opt.foldexpr = "nvim_treesitter#foldexpr()"
|
||||
|
@@ -66,6 +66,10 @@ with lib;
|
||||
};
|
||||
dconf.settings = mkAliasDefinitions options.dconf.settings;
|
||||
};
|
||||
|
||||
sharedModules = [
|
||||
inputs.nixvim.homeManagerModules.nixvim
|
||||
];
|
||||
};
|
||||
|
||||
users.users.${config.user.name} = mkAliasDefinitions options.user;
|
||||
|
68
modules/services/mail/default.nix
Normal file
68
modules/services/mail/default.nix
Normal file
@@ -0,0 +1,68 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
cfg = config.modules.services.mail;
|
||||
domains = [
|
||||
"h0lt.com"
|
||||
"jdholt.com"
|
||||
"jordanholt.xyz"
|
||||
"vimium.co"
|
||||
"vimium.co.uk"
|
||||
"vimium.info"
|
||||
"vimium.net"
|
||||
"vimium.org"
|
||||
"vimium.xyz"
|
||||
];
|
||||
in {
|
||||
options.modules.services.mail = {
|
||||
enable = lib.mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.roundcube = {
|
||||
enable = true;
|
||||
hostName = config.mailserver.fqdn;
|
||||
extraConfig = ''
|
||||
$config['smtp_server'] = "tls://${config.mailserver.fqdn}";
|
||||
$config['smtp_user'] = "%u";
|
||||
$config['smtp_pass'] = "%p";
|
||||
'';
|
||||
};
|
||||
|
||||
services.nginx.enable = true;
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ 80 443 ];
|
||||
|
||||
mailserver = {
|
||||
enable = true;
|
||||
fqdn = "mail.vimium.com";
|
||||
domains = domains;
|
||||
indexDir = "/var/lib/dovecot/indices";
|
||||
|
||||
certificateDomains = [
|
||||
"imap.vimium.com"
|
||||
"smtp.vimium.com"
|
||||
];
|
||||
certificateScheme = "acme-nginx";
|
||||
|
||||
fullTextSearch.enable = true;
|
||||
|
||||
loginAccounts = {
|
||||
"jordan@vimium.com" = {
|
||||
hashedPasswordFile = config.users.users.jordan.hashedPasswordFile;
|
||||
catchAll = domains;
|
||||
};
|
||||
};
|
||||
|
||||
extraVirtualAliases = {
|
||||
"hostmaster@vimium.com" = "jordan@vimium.com";
|
||||
"postmaster@vimium.com" = "jordan@vimium.com";
|
||||
"webmaster@vimium.com" = "jordan@vimium.com";
|
||||
"abuse@vimium.com" = "jordan@vimium.com";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
57
modules/services/photoprism/default.nix
Normal file
57
modules/services/photoprism/default.nix
Normal file
@@ -0,0 +1,57 @@
|
||||
{ config, lib, pkgs, inputs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let cfg = config.modules.services.photoprism;
|
||||
in {
|
||||
options.modules.services.photoprism = {
|
||||
enable = mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
services.nginx = {
|
||||
virtualHosts = {
|
||||
"gallery.vimium.com" = {
|
||||
forceSSL = true;
|
||||
enableACME = true;
|
||||
locations."/" = {
|
||||
proxyPass = "http://localhost:${toString config.services.photoprism.port}";
|
||||
extraConfig = ''
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header Host $host;
|
||||
|
||||
proxy_buffering off;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
age.secrets."passwords/services/photoprism/admin" = {
|
||||
file = "${inputs.secrets}/passwords/services/photoprism/admin.age";
|
||||
};
|
||||
|
||||
services.photoprism = {
|
||||
enable = true;
|
||||
address = "localhost";
|
||||
passwordFile = config.age.secrets."passwords/services/photoprism/admin".path;
|
||||
originalsPath = "${config.services.photoprism.storagePath}/originals";
|
||||
settings = {
|
||||
PHOTOPRISM_APP_NAME = "Vimium Gallery";
|
||||
PHOTOPRISM_SITE_AUTHOR = "Vimium";
|
||||
PHOTOPRISM_SITE_TITLE = "Vimium Gallery";
|
||||
PHOTOPRISM_SITE_CAPTION = "See your photos and videos on gallery.vimium.com";
|
||||
PHOTOPRISM_DISABLE_TLS = "true";
|
||||
PHOTOPRISM_SPONSOR = "true";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user