Refactored NixOS config to be more modular

This commit is contained in:
2025-05-16 16:06:11 +03:00
parent 4423b2f08f
commit 2c5db1c0de
9 changed files with 260 additions and 220 deletions

View File

@@ -1,10 +1,23 @@
{ pkgs, ... }: {
{ pkgs, inputs, ... }: {
imports = [
./packages.nix
../modules/apps.nix
../modules/kde.nix
../modules/networking.nix
../modules/development.nix
../modules/gaming.nix
inputs.home-manager.nixosModules.default
];
# User
home-manager = {
extraSpecialArgs = { inherit inputs pkgs; };
useUserPackages = true;
useGlobalPkgs = true;
users = {
"kyren" = import ./home.nix;
};
};
users.users.kyren = {
isNormalUser = true;
description = "Kyren";
@@ -29,7 +42,7 @@
# Bootloader
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.supportedFilesystems = [ "ntfs" ];
boot.supportedFilesystems = [ "ntfs" ]; # for windows fs
# Nix Config
system.stateVersion = "24.05"; # DO NOT CHANGE!
@@ -44,23 +57,6 @@
stdenv.cc.cc
];
programs.firefox.enable = true;
# Install Steam
programs.steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
};
# Install Docker (without using root access)
#virtualisation.docker.enable = true;
virtualisation.docker.rootless = {
enable = true;
setSocketVariable = true;
};
# Enable sound with pipewire.
services.pulseaudio.enable = false;
security.rtkit.enable = true;
@@ -85,9 +81,11 @@
# Enable openssh
services.openssh.enable = true;
services.openssh.settings.PasswordAuthentication = false;
# Mouse config service (used with piper)
services.ratbagd.enable = true;
users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO7P9K9D5RkBk+JCRRS6AtHuTAc6cRpXfRfRMg/Kyren"
];
# Enable KVM/QEMU virtualization
programs.virt-manager.enable = true;
@@ -105,10 +103,6 @@
systemd.tmpfiles.rules = [
"d /home/kyren/.config/syncthing 0700 kyren users"
];
# VPN for Vault Hunters to avoid connection issues
# Note, will break discord, also tried proton VPN, still has conn issues
services.cloudflare-warp.enable = true;
systemd.timers."git-auto-sync" = {
wantedBy = [ "timers.target" ];
@@ -143,4 +137,18 @@
script = "$HOME/projects/k/bin/k tracker sleep";
serviceConfig = { Type = "oneshot"; User = "kyren"; };
};
xdg.desktopEntries = {
"com.ktechpit.whatsie" = {
name = "WhatsApp";
genericName = "Watsie, unofficial WhatsApp client";
exec = "whatsie %U";
terminal = false;
icon = "com.github.eneshecan.WhatsAppForLinux";
categories = [ "Application" "Network" "WebBrowser" ];
settings = {
Keywords = "chat;im;messaging;messenger;sms;whatsapp;whatsapp-desktop;whatsie;";
};
};
};
}

View File

@@ -1,22 +1,14 @@
{ pkgs, inputs, ... }: {
{ ... }: {
imports = [
./hardware-configuration-desktop.nix
../modules/common.nix
../modules/kde.nix
../modules/networking.nix
./configuration.nix
../modules/desktop.nix
inputs.home-manager.nixosModules.default
];
networking.hostName = "kyren-desktop";
home-manager = {
extraSpecialArgs = { inherit inputs pkgs; };
useUserPackages = true;
useGlobalPkgs = true;
users = {
"kyren" = import ./home.nix;
};
};
development.enable = true;
gaming.enable = true;
}

View File

@@ -25,20 +25,6 @@
"$HOME/.local/bin"
];
xdg.desktopEntries = {
"com.ktechpit.whatsie" = {
name = "WhatsApp";
genericName = "Watsie, unofficial WhatsApp client";
exec = "whatsie %U";
terminal = false;
icon = "com.github.eneshecan.WhatsAppForLinux";
categories = [ "Application" "Network" "WebBrowser" ];
settings = {
Keywords = "chat;im;messaging;messenger;sms;whatsapp;whatsapp-desktop;whatsie;";
};
};
};
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
}

View File

@@ -1,22 +1,14 @@
{ pkgs, inputs, ... }: {
{ ... }: {
imports = [
./hardware-configuration-laptop.nix
../modules/common.nix
../modules/kde.nix
../modules/networking.nix
./hardware-configuration-laptop.nix
./configuration.nix
../modules/laptop.nix
inputs.home-manager.nixosModules.default
];
networking.hostName = "kyren-laptop";
home-manager = {
extraSpecialArgs = { inherit inputs pkgs; };
useUserPackages = true;
useGlobalPkgs = true;
users = {
"kyren" = import ./home.nix;
};
};
development.enable = true;
}

View File

@@ -1,22 +1,13 @@
{ pkgs, inputs, ... }: {
{ ... }: {
imports = [
./hardware-configuration-laptop.nix
../modules/common.nix
../modules/kde.nix
../modules/networking.nix
./configuration.nix
../modules/laptop.nix
inputs.home-manager.nixosModules.default
];
networking.hostName = "kyren-laptop";
home-manager = {
extraSpecialArgs = { inherit inputs pkgs; };
useUserPackages = true;
useGlobalPkgs = true;
users = {
"kyren" = import ./home.nix;
};
};
development.enable = true;
}

112
modules/apps.nix Normal file
View File

@@ -0,0 +1,112 @@
{ pkgs, lib, config, ... }: {
options.apps.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "enables apps";
};
config = lib.mkIf config.apps.enable {
programs.firefox.enable = true;
environment.systemPackages = with pkgs; [
# System
glib-networking
openssl
glibcLocales
libnotify
wl-clipboard
jdk
libratbag # Mouse software (GHUB replacement)
piper # ^ GUI frontend
# Utility
gimp
keepassxc
protonvpn-gui
(python312.withPackages (pypkgs: [
pypkgs.matplotlib
pypkgs.pandas
pypkgs.pygithub
]))
kdePackages.filelight
kdePackages.korganizer
kdePackages.kaddressbook
syncthingtray
libreoffice
albert
aseprite
cloudflare-warp
haruna
gparted
gnome-clocks
# Communication
whatsie
vesktop
# Terminal
ghostty
nerd-fonts.jetbrains-mono
oh-my-posh
tmux
neovim
tree-sitter
# CLI
git
delta
gh
stow
eza
keychain
bc
bat
fd
ripgrep
wakatime-cli
fastfetch
btop
sqlite
unzip
fzf
zoxide
watchexec
gitleaks
rar
dig
minisign
libisoburn
ncdu
imagemagick
ghostscript # for imagemagick to support pdf files
xxd
duf
tldr
bottom
hyperfine # for benchmarking
wget
tectonic
mermaid-cli
ffmpeg
nh
];
# VPN for Vault Hunters to avoid connection issues
# Note, will break discord, also tried proton VPN, still has conn issues
services.cloudflare-warp.enable = true;
# Mouse config service (used with piper)
services.ratbagd.enable = true;
# Install Docker (without using root access)
#virtualisation.docker.enable = true;
virtualisation.docker.rootless = {
enable = true;
setSocketVariable = true;
};
};
}

66
modules/development.nix Normal file
View File

@@ -0,0 +1,66 @@
{ pkgs, lib, config, ... }: {
options.development.enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "enables development";
};
config = lib.mkIf config.development.enable {
environment.systemPackages = with pkgs; [
jetbrains.idea-community
# LSP
asm-lsp
astro-language-server
basedpyright
bash-language-server
vscode-langservers-extracted # html/css/json
gopls
lemminx # xml
lua-language-server
markdown-oxide
marksman
mdx-language-server
neocmakelsp
nil # nix
tailwindcss-language-server
taplo # toml
typescript-language-server
yaml-language-server
# pnpm i -g css-variables-language-server
# pnpm install -g gh-actions-language-server
# Tools
stylua
gofumpt
golangci-lint
prettierd
jq
lldb # codelldb debugger
shellcheck
beautysh # shell formatter
gdb
nasm
rustup
tokei # count lines of code
go
pnpm
nodejs_24
clang
clang-tools
gcc
gnumake
goose
sqlc
maven
gradle
kotlin
mold # fast linker, for rust
gomodifytags
sops
];
};
}

33
modules/gaming.nix Normal file
View File

@@ -0,0 +1,33 @@
{ pkgs, lib, config, ... }: {
options.gaming.enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = "enables gaming";
};
config = lib.mkIf config.gaming.enable {
programs.steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
};
environment.systemPackages = with pkgs; [
r2modman # For modded valheim
prismlauncher # mc
drawio # For VH
(minecraft.overrideAttrs (finalAttrs: previousAttrs: {
meta.lib.broken = false;
}))
kdePackages.kmines # Minesweeper for fun lol
kdePackages.kpat # Solitaire
# btw missing the card/brick thing with weird symbols, not sure what that game was called
];
};
}

View File

@@ -1,140 +0,0 @@
{ pkgs, ... }: {
environment.systemPackages = with pkgs; [
glib-networking
openssl
clang
clang-tools
ghostty
glibcLocales
nerd-fonts.jetbrains-mono
keepassxc
git
gh
delta
stow
eza
oh-my-posh
gcc
gnumake
neovim
fzf
zoxide
tmux
bc
keychain
bat
sqlite
fd
ripgrep
wakatime-cli
fastfetch
btop
protonvpn-gui
unzip
go
pnpm
nodejs_24
(python312.withPackages (pypkgs: [
pypkgs.matplotlib
pypkgs.pandas
pypkgs.pygithub
]))
watchexec
golangci-lint
libnotify
wl-clipboard
whatsie
libratbag # Mouse software (GHUB replacement)
piper
goose
sqlc
jetbrains.idea-community
jdk
maven
gradle
kdePackages.filelight
kotlin
(minecraft.overrideAttrs (finalAttrs: previousAttrs: {
meta.lib.broken = false;
}))
rustup
tokei
kdePackages.kmines # Minesweeper for fun lol
kdePackages.kpat # Solitaire
# btw missing the card/brick thing with weird symbols, not sure what that game was called
gimp
kdePackages.korganizer
kdePackages.kaddressbook
gitleaks
rar
gomodifytags
sops
dig
syncthingtray
libreoffice
vesktop
nasm
albert
gdb
minisign
libisoburn
ncdu
imagemagick
ghostscript # for imagemagick to support pdf files
xxd
gnome-clocks
duf
tldr
bottom
hyperfine
nh
wget
mold
aseprite
prismlauncher
cloudflare-warp
drawio
tree-sitter
tectonic
mermaid-cli
ffmpeg
haruna
gparted
r2modman
openrgb-with-all-plugins
# LSP
asm-lsp
astro-language-server
basedpyright
bash-language-server
vscode-langservers-extracted # html/css/json
gopls
lemminx
lua-language-server
markdown-oxide
marksman
mdx-language-server
neocmakelsp
nil
tailwindcss-language-server
taplo
typescript-language-server
yaml-language-server
# pnpm i -g css-variables-language-server
# pnpm install -g gh-actions-language-server
# Tools
stylua
gofumpt
golangci-lint
prettierd
jq
lldb # codelldb debugger
shellcheck
beautysh # shell formatter
];
}