Compare commits
56 Commits
ea939b2e15
...
lunarvim
Author | SHA1 | Date | |
---|---|---|---|
a1d4948bb3
|
|||
5d21d262fa
|
|||
1926dda49d
|
|||
0ef2490164
|
|||
ba3f66a250
|
|||
edab9af4ec
|
|||
5bdf191a85
|
|||
305f0755a7
|
|||
b2dfc171ea
|
|||
c6081a8763
|
|||
1e86fecd6e
|
|||
d03d2a7732
|
|||
83d35e7f2d
|
|||
c6ff1bce1f
|
|||
26d87266ab
|
|||
4f1753a38c
|
|||
325196ce2f
|
|||
d0792c892e
|
|||
a0f5f3ed32
|
|||
795cf955a0
|
|||
ae1f8c3585
|
|||
dbcf61847c
|
|||
39f2480666
|
|||
f095b9f71c
|
|||
1e21905238
|
|||
ddd07384c4
|
|||
a7c2f0827b
|
|||
aa2c08db63
|
|||
0618af6673
|
|||
a2ebd755b0
|
|||
6dc844f29e
|
|||
2e60b9be5b
|
|||
eff70fdfc1
|
|||
e5afe3333c
|
|||
712a259edc
|
|||
8db85b91c9
|
|||
7fcf6ff9a9
|
|||
63de3d65a7
|
|||
d60cf0188d
|
|||
5bd2cf34e3
|
|||
614c2e6098
|
|||
3f685aea42
|
|||
d08d53398e
|
|||
ecf68a816b
|
|||
04203a5be3
|
|||
22f5250a86
|
|||
70d39b0c89
|
|||
b76dbdd904
|
|||
f9dd8583c4
|
|||
51f3b5c3a9
|
|||
9f02f55c4f
|
|||
e4f4783b4c
|
|||
2b69b34706
|
|||
2f3624a6b8
|
|||
c8b8f2c513
|
|||
d74e0032bb
|
56
flake.lock
generated
56
flake.lock
generated
@@ -8,11 +8,11 @@
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1703433843,
|
||||
"narHash": "sha256-nmtA4KqFboWxxoOAA6Y1okHbZh+HsXaMPFkYHsoDRDw=",
|
||||
"lastModified": 1707830867,
|
||||
"narHash": "sha256-PAdwm5QqdlwIqGrfzzvzZubM+FXtilekQ/FA0cI49/o=",
|
||||
"owner": "ryantm",
|
||||
"repo": "agenix",
|
||||
"rev": "417caa847f9383e111d1397039c9d4337d024bf0",
|
||||
"rev": "8cb01a0e717311680e0cbca06a76cbceba6f3ed6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -50,11 +50,11 @@
|
||||
"utils": "utils"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1704875591,
|
||||
"narHash": "sha256-eWRLbqRcrILgztU/m/k7CYLzETKNbv0OsT2GjkaNm8A=",
|
||||
"lastModified": 1708091384,
|
||||
"narHash": "sha256-dTGGw2y8wvfjr+J9CjQbfdulOq72hUG17HXVNxpH1yE=",
|
||||
"owner": "serokell",
|
||||
"repo": "deploy-rs",
|
||||
"rev": "1776009f1f3fb2b5d236b84d9815f2edee463a9b",
|
||||
"rev": "0a0187794ac7f7a1e62cda3dabf8dc041f868790",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -70,11 +70,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1705540973,
|
||||
"narHash": "sha256-kNt/qAEy7ueV7NKbVc8YMHWiQAAgrir02MROYNI8fV0=",
|
||||
"lastModified": 1709439398,
|
||||
"narHash": "sha256-MW0zp3ta7SvdpjvhVCbtP20ewRwQZX2vRFn14gTc4Kg=",
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"rev": "0033adc6e3f1ed076f3ed1c637ef1dfe6bef6733",
|
||||
"rev": "1f76b318aa11170c8ca8c225a9b4c458a5fcbb57",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -86,11 +86,11 @@
|
||||
"firefox-gnome-theme": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1705281830,
|
||||
"narHash": "sha256-gpUrma8XjAnHULRmD5RRVVZJNvxFrIEyGQLx6oEE9D4=",
|
||||
"lastModified": 1708965002,
|
||||
"narHash": "sha256-gIBZCPB0sA8Gagrxd8w4+y9uUkWBnXJBmq9Ur5BYTQU=",
|
||||
"owner": "rafaelmardojai",
|
||||
"repo": "firefox-gnome-theme",
|
||||
"rev": "eb7c43d11abc157f97d032018115c9f7b04ca4de",
|
||||
"rev": "4e966509c180f93ba8665cd73cad8456bf44baab",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -143,11 +143,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1705659542,
|
||||
"narHash": "sha256-WA3xVfAk1AYmFdwghT7mt/erYpsU6JPu9mdTEP/e9HQ=",
|
||||
"lastModified": 1706981411,
|
||||
"narHash": "sha256-cLbLPTL1CDmETVh4p0nQtvoF+FSEjsnJTFpTxhXywhQ=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "10cd9c53115061aa6a0a90aad0b0dde6a999cdb9",
|
||||
"rev": "652fda4ca6dafeb090943422c34ae9145787af37",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -159,11 +159,11 @@
|
||||
},
|
||||
"nixos-hardware": {
|
||||
"locked": {
|
||||
"lastModified": 1705312285,
|
||||
"narHash": "sha256-rd+dY+v61Y8w3u9bukO/hB55Xl4wXv4/yC8rCGVnK5U=",
|
||||
"lastModified": 1709410583,
|
||||
"narHash": "sha256-esOSUoQ7mblwcsSea0K17McZuwAIjoS6dq/4b83+lvw=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "bee2202bec57e521e3bd8acd526884b9767d7fa0",
|
||||
"rev": "59e37017b9ed31dee303dbbd4531c594df95cfbc",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -190,11 +190,11 @@
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1705677747,
|
||||
"narHash": "sha256-eyM3okYtMgYDgmYukoUzrmuoY4xl4FUujnsv/P6I/zI=",
|
||||
"lastModified": 1709237383,
|
||||
"narHash": "sha256-cy6ArO4k5qTx+l5o+0mL9f5fa86tYUX3ozE1S+Txlds=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "bbe7d8f876fbbe7c959c90ba2ae2852220573261",
|
||||
"rev": "1536926ef5621b09bba54035ae2bb6d806d72ac8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -221,11 +221,11 @@
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1705641746,
|
||||
"narHash": "sha256-D6c2aH8HQbWc7ZWSV0BUpFpd94ImFyCP8jFIsKQ4Slg=",
|
||||
"lastModified": 1709309926,
|
||||
"narHash": "sha256-VZFBtXGVD9LWTecGi6eXrE0hJ/mVB3zGUlHImUs2Qak=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "d2003f2223cbb8cd95134e4a0541beea215c1073",
|
||||
"rev": "79baff8812a0d68e24a836df0a364c678089e2c7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -251,11 +251,11 @@
|
||||
"secrets": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1705792366,
|
||||
"narHash": "sha256-BPEushvbEaBLwzqjHfWoMw8gnRS9obBfrIm1EP4Tisc=",
|
||||
"lastModified": 1709495020,
|
||||
"narHash": "sha256-eiz0qUjUbdeb6m28XPY7OVnrGMZ45JiT2dZZ0Bmq2X0=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "864fb96ac77fe42286a10092e1d4c80efa78c6a2",
|
||||
"revCount": 12,
|
||||
"rev": "d135b4d6d5f0079999188895f8b5f35e821b0d4b",
|
||||
"revCount": 14,
|
||||
"type": "git",
|
||||
"url": "ssh://git@git.vimium.com/jordan/nix-secrets.git"
|
||||
},
|
||||
|
@@ -77,6 +77,7 @@
|
||||
eos = mkNixosSystem { system = "x86_64-linux"; name = "eos"; };
|
||||
helios = mkNixosSystem { system = "x86_64-linux"; name = "helios"; };
|
||||
hypnos = mkNixosSystem { system = "x86_64-linux"; name = "hypnos"; };
|
||||
library = mkNixosSystem { system = "x86_64-linux"; name = "library"; };
|
||||
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"; };
|
||||
@@ -112,7 +113,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
# checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib;
|
||||
checks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib;
|
||||
};
|
||||
}
|
||||
|
||||
|
@@ -42,6 +42,15 @@
|
||||
gpg.enable = true;
|
||||
pass.enable = true;
|
||||
};
|
||||
services = {
|
||||
borgmatic = {
|
||||
enable = true;
|
||||
directories = [
|
||||
"/home/jordan/Documents"
|
||||
];
|
||||
repoPath = "ssh://uzu2y5b1@uzu2y5b1.repo.borgbase.com/./repo";
|
||||
};
|
||||
};
|
||||
shell = {
|
||||
git.enable = true;
|
||||
zsh.enable = true;
|
||||
|
@@ -22,7 +22,6 @@
|
||||
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
allowSFTP = false;
|
||||
settings = {
|
||||
KbdInteractiveAuthentication = false;
|
||||
PasswordAuthentication = false;
|
||||
@@ -36,6 +35,7 @@
|
||||
'';
|
||||
|
||||
users.defaultUserShell = pkgs.zsh;
|
||||
programs.zsh.enable = true;
|
||||
|
||||
nix = {
|
||||
package = pkgs.nixFlakes;
|
||||
|
@@ -18,6 +18,12 @@
|
||||
pulse.enable = true;
|
||||
};
|
||||
|
||||
fileSystems."/mnt/library" = {
|
||||
device = "library.mesh.vimium.net:/mnt/library";
|
||||
fsType = "nfs";
|
||||
options = [ "nfsvers=4.2" "soft" "nocto" "ro" "x-systemd.automount" "noauto" ];
|
||||
};
|
||||
|
||||
system.autoUpgrade = {
|
||||
enable = true;
|
||||
flake = "git+ssh://git@git.vimium.com/jordan/nix-config.git";
|
||||
|
@@ -19,6 +19,9 @@
|
||||
browsers = {
|
||||
firefox.enable = true;
|
||||
};
|
||||
media.recording = {
|
||||
audio.enable = true;
|
||||
};
|
||||
};
|
||||
dev = {
|
||||
node.enable = true;
|
||||
|
@@ -16,6 +16,12 @@
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
hardware = {
|
||||
cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
nvidia = {
|
||||
modesetting.enable = true;
|
||||
powerManagement.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
|
46
hosts/library/README.md
Normal file
46
hosts/library/README.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# Library
|
||||
|
||||
## Overview
|
||||
Media and public file server.
|
||||
|
||||
## Specs
|
||||
* CPU - AMD Ryzen 5 5600G @ 3.90GHz
|
||||
* Chipset - AMD B550
|
||||
* Memory - 64 GB DDR4
|
||||
* Motherboard - ASRock B550M Pro4
|
||||
* Case - Fractal Design Node 804
|
||||
|
||||
### Disks
|
||||
Device | Partitions _(filesystem, size, usage)_
|
||||
--- | ---
|
||||
Samsung 980 Evo | `/dev/nvme0n1p1` (EFI, 512 MiB, NixOS Boot) <br> `/dev/nvme0n1p2` (ZFS `rpool`, 200 GiB, NixOS Root)
|
||||
|
||||
#### ZFS datasets
|
||||
```
|
||||
rpool/
|
||||
├── local
|
||||
│ ├── nix
|
||||
│ └── tmp
|
||||
├── system
|
||||
│ ├── root
|
||||
│ └── var
|
||||
└── user
|
||||
└── home
|
||||
|
||||
library/
|
||||
├── books
|
||||
├── fonts
|
||||
├── movies
|
||||
├── music
|
||||
├── software
|
||||
├── tv
|
||||
├── videos
|
||||
└── web
|
||||
```
|
||||
|
||||
See [Graham Christensen's article](https://grahamc.com/blog/nixos-on-zfs/#datasets) for the motivation behind the `rpool` datasets.
|
||||
|
||||
### Networks
|
||||
- DHCP on `10.0.1.0/24` subnet.
|
||||
- Tailscale on `100.64.0.0/10` subnet. FQDN: `library.mesh.vimium.net`.
|
||||
|
175
hosts/library/default.nix
Normal file
175
hosts/library/default.nix
Normal file
@@ -0,0 +1,175 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib.my;
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
../server.nix
|
||||
];
|
||||
|
||||
boot = {
|
||||
loader.systemd-boot.enable = true;
|
||||
loader.efi.canTouchEfiVariables = true;
|
||||
zfs.extraPools = [ "library" ];
|
||||
};
|
||||
|
||||
networking = {
|
||||
domain = "mesh.vimium.net";
|
||||
hostId = "d24ae953";
|
||||
firewall = {
|
||||
enable = true;
|
||||
allowedTCPPorts = [
|
||||
22 # SSH
|
||||
];
|
||||
interfaces."podman+" = {
|
||||
allowedUDPPorts = [ 53 ];
|
||||
allowedTCPPorts = [ 53 ];
|
||||
};
|
||||
};
|
||||
networkmanager.enable = true;
|
||||
};
|
||||
|
||||
services.zfs = {
|
||||
autoScrub = {
|
||||
enable = true;
|
||||
pools = [ "library" ];
|
||||
};
|
||||
autoSnapshot = {
|
||||
enable = true;
|
||||
flags = "-k -p --utc";
|
||||
frequent = 0;
|
||||
hourly = 0;
|
||||
daily = 7;
|
||||
monthly = 1;
|
||||
};
|
||||
};
|
||||
|
||||
services.nfs.server = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
services.prometheus = {
|
||||
enable = true;
|
||||
port = 9001;
|
||||
exporters = {
|
||||
node = {
|
||||
enable = true;
|
||||
enabledCollectors = [ "systemd" ];
|
||||
port = 9002;
|
||||
};
|
||||
zfs = {
|
||||
enable = true;
|
||||
port = 9003;
|
||||
};
|
||||
};
|
||||
scrapeConfigs = [
|
||||
{
|
||||
job_name = "library";
|
||||
static_configs = [{
|
||||
targets = [
|
||||
"127.0.0.1:${toString config.services.prometheus.exporters.node.port}"
|
||||
"127.0.0.1:${toString config.services.prometheus.exporters.zfs.port}"
|
||||
];
|
||||
}];
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
systemd.services.vps1-tunnel = {
|
||||
enable = true;
|
||||
description = "vps1.mesh.vimium.net SSH tunnel";
|
||||
after = [
|
||||
"network-online.target"
|
||||
"jellyfin.service"
|
||||
];
|
||||
wants = [ "network-online.target" ];
|
||||
serviceConfig = {
|
||||
Type="simple";
|
||||
ExecStart=pkgs.lib.mkForce ''
|
||||
${pkgs.openssh}/bin/ssh \
|
||||
-NT \
|
||||
-o ExitOnForwardFailure=yes \
|
||||
-o ServerAliveInterval=60 \
|
||||
-o TCPKeepAlive=no \
|
||||
-i %h/.ssh/id_jellyfin \
|
||||
-R localhost:8000:localhost:8000 \
|
||||
jellyfin@vps1.mesh.vimium.net
|
||||
'';
|
||||
Restart="always";
|
||||
RestartSec=20;
|
||||
};
|
||||
wantedBy = [ "default.target" ];
|
||||
};
|
||||
|
||||
services.nginx = let
|
||||
proxyConfig = ''
|
||||
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_set_header Range $http_range;
|
||||
proxy_set_header If-Range $http_if_range;
|
||||
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
'';
|
||||
in {
|
||||
enable = true;
|
||||
package = pkgs.openresty;
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
recommendedTlsSettings = true;
|
||||
clientMaxBodySize = "2G";
|
||||
virtualHosts = {
|
||||
"library.mesh.vimium.net" = {
|
||||
locations."/" = {
|
||||
root = "/mnt/library";
|
||||
extraConfig = ''
|
||||
autoindex on;
|
||||
'';
|
||||
};
|
||||
};
|
||||
"jellyfin.vimium.com" = {
|
||||
default = true;
|
||||
listen = [
|
||||
{
|
||||
addr = "127.0.0.1";
|
||||
port = 8000;
|
||||
}
|
||||
];
|
||||
locations."/" = {
|
||||
proxyPass = "http://localhost:8096";
|
||||
extraConfig = proxyConfig;
|
||||
};
|
||||
locations."/metrics" = {
|
||||
return = "404";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.jellyfin.enable = true;
|
||||
|
||||
modules = {
|
||||
security = {
|
||||
gpg.enable = true;
|
||||
};
|
||||
shell = {
|
||||
zsh.enable = true;
|
||||
};
|
||||
services = {
|
||||
borgmatic = {
|
||||
enable = true;
|
||||
directories = [
|
||||
"/home/jordan"
|
||||
];
|
||||
repoPath = "ssh://b61758r4@b61758r4.repo.borgbase.com/./repo";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
system.stateVersion = "22.11";
|
||||
}
|
||||
|
68
hosts/library/hardware-configuration.nix
Normal file
68
hosts/library/hardware-configuration.nix
Normal file
@@ -0,0 +1,68 @@
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
(modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
|
||||
boot = {
|
||||
initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" ];
|
||||
initrd.kernelModules = [ ];
|
||||
kernelModules = [ "kvm-amd" ];
|
||||
extraModulePackages = [ ];
|
||||
};
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "rpool/system/root";
|
||||
fsType = "zfs";
|
||||
};
|
||||
|
||||
fileSystems."/var" = {
|
||||
device = "rpool/system/var";
|
||||
fsType = "zfs";
|
||||
};
|
||||
|
||||
fileSystems."/var/log" = {
|
||||
device = "rpool/system/var/log";
|
||||
fsType = "zfs";
|
||||
};
|
||||
|
||||
fileSystems."/var/tmp" = {
|
||||
device = "rpool/system/var/tmp";
|
||||
fsType = "zfs";
|
||||
};
|
||||
|
||||
fileSystems."/var/lib/containers/storage" = {
|
||||
device = "rpool/system/var/lib-containers-storage";
|
||||
fsType = "zfs";
|
||||
};
|
||||
|
||||
fileSystems."/nix" = {
|
||||
device = "rpool/local/nix";
|
||||
fsType = "zfs";
|
||||
};
|
||||
|
||||
fileSystems."/tmp" = {
|
||||
device = "rpool/local/tmp";
|
||||
fsType = "zfs";
|
||||
};
|
||||
|
||||
fileSystems."/home" = {
|
||||
device = "rpool/user/home";
|
||||
fsType = "zfs";
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/F697-F1C0";
|
||||
fsType = "vfat";
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
|
||||
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
|
@@ -180,6 +180,7 @@
|
||||
};
|
||||
|
||||
services.zigbee2mqtt = {
|
||||
package = pkgs.unstable.zigbee2mqtt;
|
||||
enable = true;
|
||||
dataDir = "/var/lib/zigbee2mqtt";
|
||||
settings = {
|
||||
@@ -230,7 +231,16 @@
|
||||
};
|
||||
};
|
||||
|
||||
# Connection to ONKYO HT-R990
|
||||
networking.interfaces.end0 = {
|
||||
ipv4.addresses = [{
|
||||
address = "172.16.0.1";
|
||||
prefixLength = 30;
|
||||
}];
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
python311Packages.onkyo-eiscp
|
||||
libraspberrypi
|
||||
raspberrypi-eeprom
|
||||
];
|
||||
|
@@ -38,6 +38,8 @@
|
||||
};
|
||||
};
|
||||
|
||||
services.openssh.settings.PermitRootLogin = lib.mkForce "prohibit-password";
|
||||
|
||||
security.acme.defaults = {
|
||||
email = "hostmaster@vimium.com";
|
||||
group = "nginx";
|
||||
|
@@ -54,7 +54,7 @@ in {
|
||||
};
|
||||
|
||||
config = {
|
||||
user.packages = with pkgs; [
|
||||
user.packages = with pkgs.unstable; [
|
||||
(lib.mkIf cfg.ps1.enable duckstation)
|
||||
(lib.mkIf cfg.ps2.enable pcsx2)
|
||||
(lib.mkIf cfg.ps3.enable rpcs3)
|
||||
@@ -64,7 +64,7 @@ in {
|
||||
cfg.gb.enable ||
|
||||
cfg.snes.enable)
|
||||
higan)
|
||||
(lib.mkIf cfg.switch.enable yuzu-early-access)
|
||||
(lib.mkIf cfg.switch.enable yuzuPackages.mainline)
|
||||
(lib.mkIf (cfg.wii.enable ||
|
||||
cfg.gamecube.enable)
|
||||
dolphin-emu)
|
||||
|
@@ -106,6 +106,9 @@ in {
|
||||
"org/gnome/desktop/peripherals/touchpad" = {
|
||||
tap-to-click = true;
|
||||
};
|
||||
"org/gnome/desktop/search-providers" = {
|
||||
disabled = [ "org.gnome.Epiphany.desktop" ];
|
||||
};
|
||||
"org/gtk/settings/file-chooser" = {
|
||||
show-hidden = true;
|
||||
sort-directories-first = true;
|
||||
@@ -141,7 +144,7 @@ in {
|
||||
"org/gnome/desktop/interface" = {
|
||||
color-scheme = "prefer-dark";
|
||||
enable-hot-corners = false;
|
||||
monospace-font-name = "Ubuntu Mono 11";
|
||||
monospace-font-name = "UbuntuMono Nerd Font 11";
|
||||
};
|
||||
"org/gnome/desktop/wm/keybindings" = {
|
||||
switch-group = [ "<Super>grave" ];
|
||||
@@ -154,7 +157,7 @@ in {
|
||||
|
||||
fonts.packages = with pkgs; [
|
||||
noto-fonts
|
||||
ubuntu_font_family
|
||||
(nerdfonts.override { fonts = [ "BigBlueTerminal" "ComicShannsMono" "UbuntuMono" ]; })
|
||||
];
|
||||
|
||||
user.packages = with pkgs; [
|
||||
@@ -180,6 +183,7 @@ in {
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
adw-gtk3
|
||||
bind
|
||||
bmon
|
||||
fd
|
||||
@@ -215,6 +219,7 @@ in {
|
||||
# gnomeExtensions.worksets
|
||||
# gnomeExtensions.workspace-matrix
|
||||
iotop
|
||||
unstable.morewaita-icon-theme
|
||||
ripgrep
|
||||
rsync
|
||||
tcpdump
|
||||
|
@@ -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,15 @@ 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
|
||||
user.packages = with pkgs.unstable; [
|
||||
lunarvim
|
||||
];
|
||||
};
|
||||
};
|
||||
})
|
||||
] ++
|
||||
|
||||
# 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 []);
|
||||
|
||||
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 ""}
|
||||
'';
|
||||
};
|
||||
|
||||
env.EDITOR = "nvim";
|
||||
env.EDITOR = "lvim";
|
||||
|
||||
environment.shellAliases = {
|
||||
vim = "nvim";
|
||||
v = "nvim";
|
||||
vim = "lvim";
|
||||
v = "lvim";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@@ -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()"
|
||||
|
@@ -39,17 +39,13 @@ in {
|
||||
repositories = [
|
||||
{ label = "borgbase"; path = cfg.repoPath; }
|
||||
];
|
||||
storage = {
|
||||
encryption_passcommand = "cat ${config.age.secrets."passwords/services/borg/${hostname}-passphrase".path}";
|
||||
ssh_command = "ssh -i /etc/ssh/ssh_host_ed25519_key";
|
||||
};
|
||||
retention = {
|
||||
keep_daily = 7;
|
||||
keep_weekly = 4;
|
||||
keep_monthly = 6;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Without this override, `cat` is unavailable for `encryption_passcommand`
|
||||
systemd.services.borgmatic.confinement.fullUnit = true;
|
||||
|
@@ -39,7 +39,7 @@ in {
|
||||
enable = true;
|
||||
lt-cred-mech = true;
|
||||
use-auth-secret = true;
|
||||
static-auth-secret-file = config.age.secrets."passwords/services/coturn/shared-secret";
|
||||
static-auth-secret-file = config.age.secrets."passwords/services/coturn/shared-secret".path;
|
||||
realm = "turn.vimium.com";
|
||||
relay-ips = [
|
||||
"198.244.190.160"
|
||||
|
@@ -109,7 +109,6 @@ in {
|
||||
};
|
||||
|
||||
services.matrix-synapse = {
|
||||
package = pkgs.unstable.matrix-synapse;
|
||||
enable = true;
|
||||
settings = {
|
||||
database.name = "sqlite3";
|
||||
|
@@ -134,8 +134,6 @@ in {
|
||||
extraConfig = nginxErrorPages + nginxEdgeHeaders + nginxStrictHeaders + ''
|
||||
add_header Content-Security-Policy "default-src 'self' https://vimium.com https://www.vimium.com; style-src 'unsafe-inline'; object-src 'none'; upgrade-insecure-requests" always;
|
||||
'';
|
||||
locations."= /.well-known/matrix/server".extraConfig = (mkWellKnown matrixServerConfig);
|
||||
locations."= /.well-known/matrix/client".extraConfig = (mkWellKnown matrixClientConfig);
|
||||
locations."/" = {
|
||||
root = "/var/www/vimium.com";
|
||||
};
|
||||
|
Reference in New Issue
Block a user