26 Commits

Author SHA1 Message Date
2d4a4985ed WIP: router: router-2 experiment 2025-03-10 15:47:49 -07:00
8997af1a18 WIP: router: attempt networking.interfaces config instead of networkd for lan10 2025-03-09 21:47:40 -07:00
be54d946f3 WIP: router: attempt removing networkd, some bs testing 2025-03-08 13:11:33 -08:00
57080fe1b2 WIP: router: attempt some ipv6 prefix fixes 2025-03-07 17:05:55 -08:00
a265d9b844 router: migrate remaining VLANs, add ULA prefix router adverts 2025-03-04 21:29:09 -08:00
06dbcec84d WIP: router: migrate vlan 1, 30, 40 from opnsense, add DNS records for alpina services 2025-03-01 22:35:36 -08:00
32b3775709 pc: add gleam 2025-02-27 22:19:34 -08:00
d134f0758e home: add kde keyboard layouts, fish, starship config 2025-02-26 21:37:19 -08:00
d5d34f48b4 WIP: router: add remaining VLANs, temporary network configs
Retiring OPNsense will take a while, in the meantime it should work together
2025-02-26 00:00:13 -08:00
17e6b33bde home: plasma start with empty session 2025-02-25 23:54:59 -08:00
f2704d6103 pc: disable docker zfs driver. updates: nixpkgs 2025-02-24 23:48:45 -08:00
1923c3814b home: add gnome-keyring, adjust plasma settings 2025-02-21 01:56:42 -08:00
e17d61e5b6 WIP: pc: add plasma-manager, darkman 2025-02-19 21:15:02 -08:00
f3bf750fb2 WIP: pc: add home-manager 2025-02-19 17:25:12 -08:00
ba48dd8706 WIP: router: refactor dhcp configs 2025-02-17 22:56:06 -08:00
b1bc0c3923 updates: nixpkgs 2025-02-17 22:55:22 -08:00
cb3690c6e2 WIP: router firewall refactor 2025-02-12 10:59:15 -08:00
17fdd35fb2 WIP: router interfaces refactor 2025-02-12 10:58:14 -08:00
83bfc367f6 updates: nixpkgs 2025-02-01 18:26:29 -08:00
042a3c5a71 WIP: router replace CoreDNS with AdGuard Home 2025-01-24 17:04:56 -08:00
74f9b65585 WIP: router monitoring (prometheus, grafana) 2025-01-24 11:09:38 -08:00
80b743816c WIP: router dhcp ddns v6 2025-01-23 20:40:13 -08:00
d43c8112ff WIP: router dhcp ddns (absolutely cooking) 2025-01-18 03:14:15 -08:00
781b159461 WIP: router dns (absolutely cooking) 2025-01-17 00:38:58 -08:00
b5d11fe2d7 WIP: router firewall 2025-01-16 19:30:31 -08:00
5559e6bc95 WIP: add router configuration 2025-01-15 00:14:30 -08:00
8 changed files with 1083 additions and 208 deletions

59
flake.lock generated
View File

@@ -1,5 +1,25 @@
{ {
"nodes": { "nodes": {
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1740432748,
"narHash": "sha256-BCeFtoJ/+LrZc03viRJWHfzAqqG8gPu/ikZeurv05xs=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "c12dcc9b61429b2ad437a7d4974399ad8f910319",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nixlib": { "nixlib": {
"locked": { "locked": {
"lastModified": 1736643958, "lastModified": 1736643958,
@@ -23,11 +43,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1736730523, "lastModified": 1737057290,
"narHash": "sha256-mvTZ7fLKA6ggGnA8GZwcXV57EvVReRTCfi26xc08Q3g=", "narHash": "sha256-3Pe0yKlCc7EOeq1X/aJVDH0CtNL+tIBm49vpepwL1MQ=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixos-generators", "repo": "nixos-generators",
"rev": "74b8e31dd709760c86eed16b6c1d0b88d7360937", "rev": "d002ce9b6e7eb467cd1c6bb9aef9c35d191b5453",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -38,11 +58,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1736701207, "lastModified": 1740367490,
"narHash": "sha256-jG/+MvjVY7SlTakzZ2fJ5dC3V1PrKKrUEOEE30jrOKA=", "narHash": "sha256-WGaHVAjcrv+Cun7zPlI41SerRtfknGQap281+AakSAw=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "ed4a395ea001367c1f13d34b1e01aa10290f67d6", "rev": "0196c0175e9191c474c26ab5548db27ef5d34b05",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -52,10 +72,35 @@
"type": "github" "type": "github"
} }
}, },
"plasma-manager": {
"inputs": {
"home-manager": [
"home-manager"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1739557722,
"narHash": "sha256-XikzLpPUDYiNyJ4w2SfRShdbSkIgE3btYdxCGInmtc4=",
"owner": "nix-community",
"repo": "plasma-manager",
"rev": "1f3e1f38dedbbb8aad77e184fb54ec518e2d9522",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "plasma-manager",
"type": "github"
}
},
"root": { "root": {
"inputs": { "inputs": {
"home-manager": "home-manager",
"nixos-generators": "nixos-generators", "nixos-generators": "nixos-generators",
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs",
"plasma-manager": "plasma-manager"
} }
} }
}, },

View File

@@ -5,13 +5,22 @@
nixpkgs = { nixpkgs = {
url = "github:NixOS/nixpkgs/nixos-unstable"; url = "github:NixOS/nixpkgs/nixos-unstable";
}; };
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
plasma-manager = {
url = "github:nix-community/plasma-manager";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
nixos-generators = { nixos-generators = {
url = "github:nix-community/nixos-generators"; url = "github:nix-community/nixos-generators";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
}; };
outputs = { self, nixpkgs, nixos-generators }: { outputs = { self, nixpkgs, home-manager, plasma-manager, nixos-generators }: {
nixosConfigurations = { nixosConfigurations = {
Yura-PC = nixpkgs.lib.nixosSystem { Yura-PC = nixpkgs.lib.nixosSystem {
system = "x86_64-linux"; system = "x86_64-linux";
@@ -19,6 +28,17 @@
./modules ./modules
./hosts/common.nix ./hosts/common.nix
./hosts/Yura-PC ./hosts/Yura-PC
# https://nix-community.github.io/home-manager/index.xhtml#sec-flakes-nixos-module
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.sharedModules = [ plasma-manager.homeManagerModules.plasma-manager ];
home-manager.users.cazzzer = import ./home;
# Optionally, use home-manager.extraSpecialArgs to pass
# arguments to home.nix
}
]; ];
}; };
VM = nixpkgs.lib.nixosSystem { VM = nixpkgs.lib.nixosSystem {

241
home/default.nix Normal file
View File

@@ -0,0 +1,241 @@
{ config, lib, pkgs, ... }:
let
defaultFont = {
family = "Noto Sans";
pointSize = 14;
};
in
{
# Home Manager needs a bit of information about you and the paths it should
# manage.
home.username = "cazzzer";
home.homeDirectory = "/home/cazzzer";
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
home.sessionVariables = {
EDITOR = "micro";
SHELL = "fish";
};
services.gnome-keyring = {
enable = true;
components = [ "pkcs11" "ssh" ];
};
services.darkman = {
enable = true;
settings = {
lat = 37.3387;
lng = -121.8853;
};
lightModeScripts = {
plasma-color = "plasma-apply-colorscheme BreezeLight";
};
darkModeScripts = {
plasma-color = "plasma-apply-colorscheme BreezeDark";
};
};
programs.fish = {
enable = true;
shellInit = "set fish_greeting";
shellAliases = {
# Replace ls with exa
ls = "exa -al --color=always --group-directories-first --icons"; # preferred listing
la = "exa -a --color=always --group-directories-first --icons"; # all files and dirs
ll = "exa -l --color=always --group-directories-first --icons"; # long format
lt = "exa -aT --color=always --group-directories-first --icons"; # tree listing
"l." = "exa -a | rg '^\.'"; # show only dotfiles
# Replace cat with bat
cat = "bat";
};
# alias for nix shell with flake packages
functions.add.body = ''
set -x packages 'nixpkgs#'(string join ' nixpkgs#' $argv)
nix shell $packages --command fish
'';
interactiveShellInit = ''
fastfetch
'';
};
programs.starship = {
enable = true;
enableFishIntegration = true;
settings = {
format = lib.concatStrings [
"$all"
"$time"
"$cmd_duration"
"$line_break"
"$jobs"
"$status"
"$character"
];
username = {
format = " [$user]($style)@";
style_user = "bold red";
style_root = "bold red";
show_always = true;
};
hostname = {
format = "[$hostname]($style) in ";
style = "bold dimmed red";
ssh_only = false;
};
directory = {
style = "purple";
truncation_length = 0;
truncate_to_repo = true;
truncation_symbol = "repo: ";
};
git_status = {
style = "white";
ahead = "\${count}";
diverged = "\${ahead_count}\${behind_count}";
behind = "\${count}";
deleted = "x";
};
cmd_duration = {
min_time = 1000;
format = "took [$duration]($style) ";
};
time = {
format = " 🕙 $time($style) ";
time_format = "%T";
style = "bright-white";
disabled = false;
};
character = {
success_symbol = " [λ](bold red)";
error_symbol = " [×](bold red)";
};
status = {
symbol = "🔴";
format = "[\\[$symbol$status_common_meaning$status_signal_name$status_maybe_int\\]]($style)";
map_symbol = true;
disabled = false;
};
};
};
programs.plasma = {
enable = true;
overrideConfig = true;
workspace.iconTheme = "Tela-circle";
fonts = {
general = defaultFont;
fixedWidth = defaultFont // { family = "Hack"; };
small = defaultFont // { pointSize = defaultFont.pointSize - 2; };
toolbar = defaultFont;
menu = defaultFont;
windowTitle = defaultFont;
};
input.keyboard.layouts = [
{ layout = "us"; displayName = "us"; }
{ layout = "minimak-4"; displayName = "us4"; }
{ layout = "ru"; displayName = "ru"; }
];
kwin.virtualDesktops.number = 2;
session.sessionRestore.restoreOpenApplicationsOnLogin = "startWithEmptySession";
shortcuts = {
# kmix.mic_mute = "ScrollLock";
kmix.mic_mute = ["Microphone Mute" "ScrollLock" "Meta+Volume Mute,Microphone Mute" "Meta+Volume Mute,Mute Microphone"];
plasmashell.show-barcode = "Meta+M";
kwin."Window Maximize" = [ "Meta+F" "Meta+PgUp,Maximize Window" ];
"KDE Keyboard Layout Switcher"."Switch to Next Keyboard Layout" = "Meta+Space";
};
hotkeys.commands."launch-konsole" = {
name = "Launch Konsole";
key = "Meta+Alt+C";
command = "konsole";
};
configFile = {
kdeglobals.KDE.AnimationDurationFactor = 0.5;
kdeglobals.General.accentColorFromWallpaper = true;
kwinrc.Wayland.InputMethod = {
value = "org.fcitx.Fcitx5.desktop";
shellExpand = true;
};
dolphinrc.General.ShowFullPath = true;
kactivitymanagerdrc = {
activities."809dc779-bf5b-49e6-8e3f-cbe283cb05b6" = "Default";
activities."b34a506d-ac4f-4797-8c08-6ef45bc49341" = "Fun";
activities-icons."809dc779-bf5b-49e6-8e3f-cbe283cb05b6" = "keyboard";
activities-icons."b34a506d-ac4f-4797-8c08-6ef45bc49341" = "preferences-desktop-gaming";
};
};
};
xdg.configFile = {
"fcitx5/conf/wayland.conf".text = "Allow Overriding System XKB Settings=False";
};
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
home.stateVersion = "24.11"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your
# environment.
# home.packages = [
# # Adds the 'hello' command to your environment. It prints a friendly
# # "Hello, world!" when run.
# pkgs.hello
# # It is sometimes useful to fine-tune packages, for example, by applying
# # overrides. You can do that directly here, just don't forget the
# # parentheses. Maybe you want to install Nerd Fonts with a limited number of
# # fonts?
# (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })
# # You can also create simple shell scripts directly inside your
# # configuration. For example, this adds a command 'my-hello' to your
# # environment:
# (pkgs.writeShellScriptBin "my-hello" ''
# echo "Hello, ${config.home.username}!"
# '')
# ];
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
# home.file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
# };
# Home Manager can also manage your environment variables through
# 'home.sessionVariables'. These will be explicitly sourced when using a
# shell provided by Home Manager. If you don't want to manage your shell
# through Home Manager then you have to manually source 'hm-session-vars.sh'
# located at either
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/cazzzer/etc/profile.d/hm-session-vars.sh
#
# home.sessionVariables = {
# EDITOR = "emacs";
# };
}

View File

@@ -23,10 +23,16 @@
"sysrq_always_enabled=1" "sysrq_always_enabled=1"
]; ];
# https://nixos.wiki/wiki/OSX-KVM
boot.extraModprobeConfig = ''
options kvm_amd nested=1
options kvm_amd emulate_invalid_guest_state=0
options kvm ignore_msrs=1
'';
boot.loader.timeout = 3; boot.loader.timeout = 3;
boot.loader.systemd-boot.configurationLimit = 5; boot.loader.systemd-boot.configurationLimit = 5;
boot.kernelPackages = pkgs.linuxKernel.packages.linux_6_12; boot.kernelPackages = pkgs.linuxKernel.packages.linux_6_12;
boot.extraModulePackages = with config.boot.kernelPackages; [ zfs ];
# https://nixos.wiki/wiki/Accelerated_Video_Playback # https://nixos.wiki/wiki/Accelerated_Video_Playback
hardware.graphics = { hardware.graphics = {
@@ -104,6 +110,7 @@
group = "cazzzer"; group = "cazzzer";
extraGroups = [ "networkmanager" "wheel" "docker" "wireshark" "geoclue" ]; extraGroups = [ "networkmanager" "wheel" "docker" "wireshark" "geoclue" ];
packages = with pkgs; [ packages = with pkgs; [
# Python
python3 python3
poetry poetry
@@ -115,6 +122,13 @@
nodejs_22 nodejs_22
pnpm pnpm
bun bun
# Nix
nixd
# Gleam
gleam
beamMinimal26Packages.erlang
]; ];
}; };
@@ -142,8 +156,6 @@
virtualisation.docker.enable = true; virtualisation.docker.enable = true;
virtualisation.docker.enableOnBoot = false; virtualisation.docker.enableOnBoot = false;
virtualisation.docker.package = pkgs.docker_27; virtualisation.docker.package = pkgs.docker_27;
virtualisation.docker.storageDriver = "zfs";
# https://discourse.nixos.org/t/firefox-does-not-use-kde-window-decorations-and-cursor/32132/3 # https://discourse.nixos.org/t/firefox-does-not-use-kde-window-decorations-and-cursor/32132/3
# programs.dconf.enable = true; # programs.dconf.enable = true;
@@ -171,31 +183,6 @@
# For JetBrains stuff # For JetBrains stuff
# https://github.com/NixOS/nixpkgs/issues/240444 # https://github.com/NixOS/nixpkgs/issues/240444
curl
expat
fontconfig
freetype
fuse
fuse3
glib
icu
libclang.lib
libdbusmenu
libsecret
libxcrypt-legacy
libxml2
nss
openssl
python3
stdenv.cc.cc
xorg.libX11
xorg.libXcursor
xorg.libXext
xorg.libXi
xorg.libXrender
xorg.libXtst
xz
zlib
]; ];
# attempt to fix flatpak firefox cjk fonts # attempt to fix flatpak firefox cjk fonts
@@ -238,9 +225,10 @@
gnome-keyring # config for this and some others gnome-keyring # config for this and some others
gnumake gnumake
helix helix
jetbrains-toolbox # or maybe do invidual ones?
# jetbrains.rust-rover # jetbrains.rust-rover
# jetbrains.goland
jetbrains.clion jetbrains.clion
jetbrains.idea-ultimate
jetbrains.pycharm-professional jetbrains.pycharm-professional
jetbrains.webstorm jetbrains.webstorm
android-studio android-studio
@@ -277,8 +265,8 @@
# Open ports in the firewall. # Open ports in the firewall.
# networking.nftables.enable = true; # networking.nftables.enable = true;
networking.firewall.allowedTCPPorts = [ 8080 ]; networking.firewall.allowedTCPPorts = [ 8080 22000 ];
# networking.firewall.allowedUDPPorts = [ ... ]; networking.firewall.allowedUDPPorts = [ 22000 ];
# Or disable the firewall altogether. # Or disable the firewall altogether.
# networking.firewall.enable = false; # networking.firewall.enable = false;

File diff suppressed because it is too large Load Diff

View File

@@ -22,7 +22,6 @@
boot.loader.systemd-boot.configurationLimit = 5; boot.loader.systemd-boot.configurationLimit = 5;
boot.kernelPackages = pkgs.linuxKernel.packages.linux_6_12; boot.kernelPackages = pkgs.linuxKernel.packages.linux_6_12;
boot.extraModulePackages = with config.boot.kernelPackages; [ zfs ];
environment.etc.hosts.mode = "0644"; environment.etc.hosts.mode = "0644";

View File

@@ -9,11 +9,21 @@ in {
options = { options = {
mods.kb-input = { mods.kb-input = {
enable = lib.mkEnableOption "input method and custom keyboard layout"; enable = lib.mkEnableOption "input method and custom keyboard layout";
enableMinimak = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable Minimak keyboard layout";
};
enableFcitx = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable Fcitx5 input method";
};
}; };
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
services.xserver.xkb.extraLayouts = { services.xserver.xkb.extraLayouts = lib.mkIf cfg.enableMinimak {
minimak-4 = { minimak-4 = {
description = "English (US, Minimak-4)"; description = "English (US, Minimak-4)";
languages = [ "eng" ]; languages = [ "eng" ];
@@ -31,9 +41,9 @@ in {
}; };
}; };
i18n.inputMethod = { i18n.inputMethod = lib.mkIf cfg.enableFcitx {
type = "fcitx5";
enable = true; enable = true;
type = "fcitx5";
fcitx5.waylandFrontend = true; fcitx5.waylandFrontend = true;
fcitx5.plasma6Support = true; fcitx5.plasma6Support = true;
fcitx5.addons = [ pkgs.fcitx5-mozc ]; fcitx5.addons = [ pkgs.fcitx5-mozc ];

View File

@@ -24,7 +24,7 @@ in {
aggregated = pkgs.buildEnv { aggregated = pkgs.buildEnv {
name = "system-fonts-and-icons"; name = "system-fonts-and-icons";
paths = builtins.attrValues { paths = builtins.attrValues {
inherit (pkgs.libsForQt5) breeze-qt5; inherit (pkgs.kdePackages) breeze;
inherit inherit
(pkgs) (pkgs)
noto-fonts noto-fonts