nixos-config/hosts/ytnix/default.nix

329 lines
7.1 KiB
Nix
Raw Normal View History

2024-11-22 00:58:04 -05:00
{
2024-12-12 23:35:10 -05:00
config,
pkgs,
2025-01-01 02:07:32 -05:00
lib,
2024-12-12 23:35:10 -05:00
...
2024-12-19 02:32:58 -05:00
}:
{
2024-12-12 23:35:10 -05:00
imports = [
./hardware-configuration.nix
2024-12-13 22:26:27 -05:00
../common.nix
2024-12-30 23:44:48 -05:00
../zsh.nix
2024-12-12 23:35:10 -05:00
];
2024-12-16 22:17:39 -05:00
sops.age.keyFile = "/root/.config/sops/age/keys.txt";
sops.secrets = {
2024-12-16 22:17:39 -05:00
"borg/rsyncnet" = {
sopsFile = ../../secrets/borg/yt.yaml;
};
"services/ntfy" = {
sopsFile = ../../secrets/services/ntfy.yaml;
};
2024-12-16 22:17:39 -05:00
"wireguard/private" = {
sopsFile = ../../secrets/wireguard/yt.yaml;
};
2024-12-16 22:17:39 -05:00
"wireguard/psk" = {
sopsFile = ../../secrets/wireguard/yt.yaml;
};
2024-12-20 18:43:11 -05:00
"rsyncnet/id_ed25519" = {
2025-01-06 19:10:07 -05:00
sopsFile = ../../secrets/zh5061/yt.yaml;
2024-12-20 18:43:11 -05:00
};
2024-12-25 02:32:01 -05:00
"newsboat/miniflux" = {
sopsFile = ../../secrets/newsboat.yaml;
owner = "yt";
};
};
2024-11-23 21:41:28 -05:00
2024-11-26 01:09:13 -05:00
boot = {
loader = {
2025-01-01 02:07:32 -05:00
# lanzaboote replaces systemd-boot
systemd-boot.enable = lib.mkForce false;
efi.canTouchEfiVariables = false; # toggle when installing
2024-11-26 01:09:13 -05:00
};
2024-11-29 20:12:35 -05:00
tmp.cleanOnBoot = true;
2025-01-21 04:04:08 -05:00
kernelPackages = pkgs.linuxKernel.packages.linux_zen;
2025-01-22 11:04:48 -05:00
kernelPatches = [
{
name = "zen";
patch = null;
extraStructuredConfig = with lib.kernel; {
CONFIG_SCHED_MUQSS = yes;
};
}
];
# kernelPackages = with pkgs.linuxKernel; packagesFor kernels.linux_zen;
2024-11-28 01:49:43 -05:00
extraModulePackages = with config.boot.kernelPackages; [
rtl8821ce
2024-11-28 01:49:43 -05:00
];
2025-01-01 01:06:33 -05:00
kernelParams = [
# see https://github.com/tomaspinho/rtl8821ce#pcie-active-state-power-management
"pcie_aspm=off"
];
# see https://github.com/tomaspinho/rtl8821ce#wi-fi-not-working-for-kernel--59
extraModprobeConfig = ''
blacklist rtw88_8821ce
'';
2025-01-01 02:07:32 -05:00
lanzaboote = {
enable = true;
pkiBundle = "/var/lib/sbctl";
};
2025-01-01 03:06:18 -05:00
kernel.sysctl."kernel.sysrq" = 1;
2024-11-26 01:09:13 -05:00
};
2024-11-22 00:58:04 -05:00
2024-11-25 20:10:53 -05:00
networking = {
hostName = "ytnix";
wireless.iwd = {
enable = true;
settings = {
Rank = {
# disable 2.4 GHz cause i have a shitty wireless card
# that interferes with bluetooth otherwise
BandModifier2_4GHz = 0.0;
};
2024-11-22 00:58:04 -05:00
};
};
2024-11-25 20:10:53 -05:00
networkmanager = {
enable = true;
dns = "none";
wifi.backend = "iwd";
2024-11-25 20:10:53 -05:00
};
resolvconf.enable = true;
firewall = {
2024-12-19 02:32:58 -05:00
allowedUDPPorts = [ 51820 ]; # for wireguard
trustedInterfaces = [ "wg0" ];
2024-11-25 20:10:53 -05:00
};
2024-11-22 00:58:04 -05:00
};
2024-11-25 20:10:53 -05:00
programs.nm-applet.enable = true;
2024-11-22 00:58:04 -05:00
security.rtkit.enable = true;
2024-11-22 00:58:04 -05:00
services.pipewire = {
enable = true;
pulse.enable = true;
alsa.enable = true;
alsa.support32Bit = true;
2024-11-25 20:10:53 -05:00
wireplumber.extraConfig.bluetoothEnhancements = {
"wireplumber.settings" = {
"bluetooth.autoswitch-to-headset-profile" = false;
};
"monitor.bluez.properties" = {
"bluez5.enable-sbc-xq" = true;
"bluez5.enable-msbc" = true;
"bluez5.enable-hw-volume" = true;
2024-12-19 02:32:58 -05:00
"bluez5.roles" = [
"a2dp_sink"
"a2dp_source"
];
2024-11-25 20:10:53 -05:00
};
};
2024-12-15 21:14:57 -05:00
# https://wiki.archlinux.org/title/Bluetooth_headset#Connecting_works,_sound_plays_fine_until_headphones_become_idle,_then_stutters
wireplumber.extraConfig.disableSuspend = {
"monitor.bluez.rules" = {
matches = [
{
"node.name" = "bluez_output.*";
}
];
2024-12-16 11:40:19 -05:00
};
actions = {
2024-12-15 21:14:57 -05:00
update-props = {
"session.suspend-timeout-seconds" = 0;
};
2024-12-16 11:40:19 -05:00
};
2024-12-15 21:14:57 -05:00
};
2024-11-22 00:58:04 -05:00
};
services.libinput.enable = true;
2024-12-30 18:06:16 -05:00
users.users.yt.extraGroups = [
"wheel"
"libvirtd"
"docker"
];
2024-11-22 00:58:04 -05:00
environment.systemPackages = with pkgs; [
tmux
vim
wget
neovim
2024-12-09 02:14:11 -05:00
git
python3
wl-clipboard
mako
2024-11-22 00:58:04 -05:00
tree
kitty
borgbackup
brightnessctl
alsa-utils
nixd
bluetuith
libimobiledevice
2024-11-22 01:39:38 -05:00
pass-wayland
2024-11-22 19:18:02 -05:00
htop
file
2024-11-23 14:40:08 -05:00
dnsutils
age
compsize
wireguard-tools
2024-11-23 20:47:43 -05:00
traceroute
2024-11-23 21:41:28 -05:00
sops
restic
2024-12-16 02:07:54 -05:00
haskell-language-server
ghc
2025-01-01 02:07:32 -05:00
sbctl # secure boot
2024-11-22 00:58:04 -05:00
];
2024-12-08 14:19:35 -05:00
environment.sessionVariables = {
NIXOS_OZONE_WL = "1";
};
2024-11-25 20:10:53 -05:00
2024-11-22 00:58:04 -05:00
system.stateVersion = "24.05";
programs.gnupg.agent.enable = true;
2025-01-01 02:29:45 -05:00
services.displayManager = {
2024-11-22 00:58:04 -05:00
enable = true;
2025-01-01 02:29:45 -05:00
autoLogin.user = "yt";
2024-11-22 00:58:04 -05:00
};
fonts.packages = with pkgs; [
nerd-fonts.roboto-mono
2024-12-31 23:04:06 -05:00
ibm-plex
2024-11-22 00:58:04 -05:00
];
fonts.enableDefaultPackages = true;
2024-11-22 00:58:04 -05:00
2024-11-28 01:49:43 -05:00
hardware.enableAllFirmware = true;
2024-11-22 00:58:04 -05:00
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
};
services.blueman.enable = true;
2024-12-30 23:14:50 -05:00
my.backup = {
enable = true;
jobName = "ytnixRsync";
exclude = [
2024-12-12 15:53:17 -05:00
"/var/lib/private/ollama"
"/home/**/Downloads"
2024-12-29 12:34:22 -05:00
"/home/yt/fun"
2024-12-28 23:35:59 -05:00
"/home/yt/.local/share/Steam"
2024-12-29 13:20:25 -05:00
"**/.wine"
2024-12-29 12:34:22 -05:00
"/home/yt/Games"
];
repo = "yt";
passFile = config.sops.secrets."borg/rsyncnet".path;
sshKeyFile = config.sops.secrets."rsyncnet/id_ed25519".path;
};
2024-12-09 02:14:11 -05:00
2024-11-25 20:10:53 -05:00
services.btrbk.instances.local = {
onCalendar = "hourly";
2025-01-05 00:20:45 -05:00
# only create snapshots automatically. backups are triggered manually with `btrbk resume`
2024-12-30 14:49:57 -05:00
snapshotOnly = true;
2024-11-25 20:10:53 -05:00
settings = {
2025-01-05 00:20:45 -05:00
snapshot_preserve_min = "latest";
2024-12-30 13:15:23 -05:00
target_preserve = "*d";
target_preserve_min = "no";
target = "/mnt/external/btr_backup/ytnix";
stream_compress = "zstd";
2025-01-05 00:20:45 -05:00
stream_compress_level = "8";
2024-11-25 20:10:53 -05:00
snapshot_dir = "/snapshots";
2024-11-22 19:18:02 -05:00
subvolume = {
2024-12-19 02:32:58 -05:00
"/home" = { };
"/" = { };
2024-11-22 19:18:02 -05:00
};
};
};
2024-11-22 02:09:31 -05:00
2024-12-28 17:56:18 -05:00
programs.steam = {
enable = true;
extest.enable = true;
extraCompatPackages = with pkgs; [ proton-ge-bin ];
};
hardware.steam-hardware.enable = true;
2024-11-22 02:09:31 -05:00
2024-11-22 19:18:02 -05:00
services.logind = {
lidSwitch = "hibernate";
2024-11-23 20:47:43 -05:00
powerKey = "hibernate";
2024-11-22 02:09:31 -05:00
};
2024-11-22 20:46:58 -05:00
xdg.mime.defaultApplications = {
"application/pdf" = "okular.desktop";
"image/*" = "gwenview.desktop";
2024-12-08 14:19:35 -05:00
"*/html" = "chromium-browser.desktop";
2024-11-22 20:46:58 -05:00
};
programs.thunar = {
enable = true;
plugins = with pkgs.xfce; [
thunar-archive-plugin
thunar-volman
];
};
# preference changes don't work in thunar without this
programs.xfconf.enable = true;
# mount, trash and stuff in thunar
services.gvfs.enable = true;
# thumbnails in thunar
2024-12-09 02:14:11 -05:00
services.tumbler.enable = true;
2024-11-23 14:40:08 -05:00
2024-11-26 01:53:01 -05:00
virtualisation = {
libvirtd.enable = true;
docker.enable = true;
};
2024-11-23 14:40:08 -05:00
programs.virt-manager.enable = true;
2024-11-26 13:31:57 -05:00
services.usbmuxd.enable = true;
2024-11-26 17:27:35 -05:00
programs.nix-ld.enable = true;
programs.evolution.enable = true;
xdg.portal = {
enable = true;
wlr.enable = true;
};
2024-12-07 03:29:15 -05:00
programs.obs-studio = {
enable = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs
];
};
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [
intel-media-driver
intel-media-sdk
];
};
2024-12-12 15:53:17 -05:00
services.ollama.enable = true;
2024-12-14 18:22:05 -05:00
# wireguard setup
networking.wg-quick.interfaces.wg0 = {
2024-12-28 22:45:53 -05:00
autostart = false;
2024-12-19 02:32:58 -05:00
address = [
"10.0.0.2/24"
"fdc9:281f:04d7:9ee9::2/64"
];
2024-12-16 22:17:39 -05:00
privateKeyFile = config.sops.secrets."wireguard/private".path;
peers = [
{
publicKey = "a16/F/wP7HQIUtFywebqPSXQAktPsLgsMLH9ZfevMy0=";
2024-12-19 02:32:58 -05:00
allowedIPs = [
"0.0.0.0/0"
"::/0"
];
endpoint = "31.59.129.225:51820";
persistentKeepalive = 25;
2024-12-16 22:17:39 -05:00
presharedKeyFile = config.sops.secrets."wireguard/psk".path;
}
];
2024-12-14 18:22:05 -05:00
};
2024-12-19 18:29:19 -05:00
services.trezord.enable = true;
2025-01-18 20:39:51 -05:00
my.niri = {
enable = true;
package = pkgs.niri-unstable;
};
2024-11-22 01:39:38 -05:00
}