This commit is contained in:
4DBug
2026-02-04 16:43:38 -06:00
parent d25f508b25
commit 37ff9e91ff
21 changed files with 934 additions and 0 deletions

1
new/device.nix Normal file
View File

@@ -0,0 +1 @@
{ device = "laptop"; } # Possible values: "desktop", "laptop", "server"

8
new/devices/desktop.nix Normal file
View File

@@ -0,0 +1,8 @@
{ lib, config, inputs, pkgs, options, desktop, ... }:
{
imports = [
../modules/cosmic.nix
../modules/graphics.nix
]
}

8
new/devices/laptop.nix Normal file
View File

@@ -0,0 +1,8 @@
{ config, pkgs, device, ... }:
{
services.logind.settings.Login = {
HandleLidSwitch = "ignore";
HandleLidSwitchDocked = "ignore";
};
}

22
new/devices/server.nix Normal file
View File

@@ -0,0 +1,22 @@
{ config, pkgs, ... }:
{
imports = [
../modules/vscode-server.nix
../modules/mailserver.nix
];
environment.systemPackages = with pkgs; [
nh
comma
nix-index
home-manager
micro
wget
git
fastfetch
];
}

48
new/flake.nix Normal file
View File

@@ -0,0 +1,48 @@
{
inputs = {
# nixpkgs.follows = "nixos-cosmic/nixpkgs";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flatpaks.url = "github:gmodena/nix-flatpak/?ref=latest";
nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic";
hytale-launcher.url = "github:JPyke3/hytale-launcher-nix";
stylix = {
url = "github:nix-community/stylix";
inputs.nixpkgs.follows = "nixpkgs";
};
vscode-server.url = "github:nix-community/nixos-vscode-server";
};
outputs = inputs@{ self, nixpkgs, stylix, home-manager, flatpaks, hytale-launcher, vscode-server, ... }:
let
deviceType = import /etc/nixos/device.nix;
system = "x86_64-linux";
in
{
nixosConfigurations.nix = nixpkgs.lib.nixosSystem {
inherit system;
specialArgs = { inherit inputs; inherit (deviceType) desktop; };
modules = [
{
nix.settings = {
substituters = [ "https://cosmic.cachix.org/" ];
trusted-public-keys = [ "cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE=" ];
};
}
flatpaks.nixosModules.nix-flatpak
vscode-server.nixosModules.default
./configuration.nix
];
};
};
}

101
new/main.nix Normal file
View File

@@ -0,0 +1,101 @@
{ lib, config, inputs, pkgs, options, device, ... }:
{
imports = [
/etc/nixos/hardware-configuration.nix
./modules/users.nix
./modules/boot.nix
./modules/network.nix
./modules/locale.nix
./modules/security.nix
] ++ (if device == "server" then [
./modules/packages.nix
./modules/vscode-server.nix
({ config, pkgs, ... }: {
environment.systemPackages = with pkgs; [
nh comma nix-index home-manager micro wget git fastfetch
];
})
] else [
./modules/packages.nix
./modules/cosmic.nix
./modules/graphics.nix
./modules/audio.nix
./modules/home-manager.nix
./modules/mpd.nix
./modules/swap.nix
./modules/virtualisation.nix
]);
system = {
stateVersion = "25.11";
autoUpgrade = {
enable = true;
allowReboot = true;
};
};
nix = {
optimise.automatic = true;
settings.experimental-features = [ "nix-command" "flakes" ];
};
nixpkgs = {
config = {
allowUnfree = true;
cudaSupport = (device == "desktop");
nvidia.acceptLicense = (device == "desktop");
};
overlays = [
];
};
environment.sessionVariables.NIXPKGS_ALLOW_UNFREE = 1;
systemd = {
user.extraConfig = ''
DefaultEnvironment="PATH=/run/current-system/sw/bin"
'';
services.monitord.wantedBy = [ "multi-user.target" ];
};
services.fstrim.enable = true;
programs = {
bash.shellAliases = {
fetch = "fastfetch --file ~/nix/nix.ans";
rebuild = "ns os switch ~/nix"; #"sudo nixos-rebuild switch --impure"; # home-manager switch --impure
#pissh = "ssh -t $(avahi-resolve-host-name -4 pi.home | awk '{print $2}')";
#pi = "pissh \"cd $(pwd) && bash\"";
#pi = "ssh pi.bug.tools";
box = "ssh box.bug.tools";
pico = "ssh pico.sh";
# tuns name port
tuns = "bash -c '\''if [ \"$#\" -ne 2 ]; then echo \"Usage: tun name port\"; exit 1; fi;
if [[ \"$1\" =~ ^[0-9]+$ ]]; then port=\"$1\"; name=\"$2\";
elif [[ \"$2\" =~ ^[0-9]+$ ]]; then port=\"$2\"; name=\"$1\";
else echo \"Error: One argument must be a number (port)\"; exit 1; fi;
ssh -R \"$\{name}:80:localhost:$\{port}\" tuns.sh'\'' _";
# pgs name directory
pgs = "bash -c '\''if [ \"$#\" -ne 2 ]; then echo \"Usage: pgs NAME DIRECTORY\"; exit 1; fi; rsync -rv \"$2\" pgs.sh:/\"$1\"'\'' _";
bambu = "env -u WAYLAND_DISPLAY XDG_SESSION_TYPE=x11 WEBKIT_FORCE_COMPOSITING_MODE=1 WEBKIT_DISABLE_COMPOSITING_MODE=1 GBM_BACKEND=dri bambu-studio";
scale = "env GDK_BACKEND=x11 GDK_SCALE=1 GDK_DPI_SCALE=1";
hytale = "env -u WAYLAND_DISPLAY -u EGL_PLATFORM -u ELECTRON_ENABLE_WAYLAND DISPLAY=:0 XDG_SESSION_TYPE=x11 __GLX_VENDOR_LIBRARY_NAME=nvidia LD_LIBRARY_PATH=/run/opengl-driver/lib hytale-launcher";
};
};
}

24
new/modules/audio.nix Normal file
View File

@@ -0,0 +1,24 @@
{ config, pkgs, device, ... }:
{
security.rtkit.enable = true;
services = {
pulseaudio.enable = false;
pipewire = {
enable = true;
wireplumber.enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
lowLatency.enable = false;
jack.enable = true;
};
}
}

37
new/modules/boot.nix Normal file
View File

@@ -0,0 +1,37 @@
{ config, pkgs, device, ... }:
{
boot = {
kernelModules = if (device == "desktop") then ["nvidia" "nvidia_modeset" "nvidia_uvm" "nvidia_drm" "uinput"] else [];
kernelParams = if (device == "desktop") then ["nvidia-drm.modeset=1" "nvidia_drm.fbdev=1"] else [];
kernelPackages = pkgs.linuxPackages_zen;
kernel.sysctl = {
"fs.file-max" = 524288;
};
initrd.checkJournalingFS = false;
loader = {
grub.splashImage = null;
systemd-boot = {
enable = true;
configurationLimit = 25;
};
efi.canTouchEfiVariables = true;
};
};
swapDevices = [{
device = "/var/lib/swapfile";
size = 8 * 1024;
}];
zramSwap = {
enable = true;
memoryMax = 64 * 1024 * 1024 * 1024;
};
}

62
new/modules/cosmic.nix Normal file
View File

@@ -0,0 +1,62 @@
{ config, pkgs, device, ... }:
{
services = {
greetd.enable = true;
system76-scheduler.enable = true;
displayManager = {
cosmic-greeter.enable = true;
autoLogin = {
enable = (device == "desktop");
user = "bug";
};
};
desktopManager.cosmic.enable = true;
};
environment.sessionVariables = {
COSMIC_DATA_CONTROL_ENABLED = 1;
};
xdg = {
portal = {
enable = true;
xdgOpenUsePortal = true;
config.common.default = ["gtk"];
extraPortals = [pkgs.xdg-desktop-portal-gtk pkgs.xdg-desktop-portal-cosmic];
};
mime = {
enable = true;
defaultApplications = {
"text/html" = "firefox.desktop";
"x-scheme-handler/http" = "firefox.desktop";
"x-scheme-handler/https" = "firefox.desktop";
"x-scheme-handler/about" = "firefox.desktop";
"x-scheme-handler/unknown" = "firefox.desktop";
"application/pdf" = "firefox.desktop";
"inode/directory" = "com.system76.CosmicFiles.desktop";
"text/plain" = "com.system76.CosmicEdit.desktop";
"text/markdown" = "com.system76.CosmicEdit.desktop";
"application/zip" = "org.gnome.FileRoller.desktop";
"application/x-7z-compressed" = "org.gnome.FileRoller.desktop";
"application/x-tar" = "org.gnome.FileRoller.desktop";
"application/gzip" = "org.gnome.FileRoller.desktop";
"application/x-xz" = "org.gnome.FileRoller.desktop";
"application/x-zip-compressed" = "org.gnome.FileRoller.desktop";
"application/x-ms-dos-executable" = "wine.desktop";
};
};
};
}

83
new/modules/graphics.nix Normal file
View File

@@ -0,0 +1,83 @@
{ config, pkgs, device, ... }:
{
services = {
xserver = {
enable = true;
videoDrivers = if (device == "desktop") then ["nvidia"] else ["amdgpu"];
excludePackages = [pkgs.xterm];
xkb = {
layout = "us";
variant = "";
};
};
};
hardware = {
graphics = {
enable = true;
enable32Bit = true;
extraPackages = with pkgs; [
libva-vdpau-driver
libvdpau
libvdpau-va-gl
vdpauinfo
libva
libva-utils
libglvnd
mesa
] ++ (if desktop then [
nvidia-vaapi-driver
] else [
]);
};
nvidia = if desktop then {
modesetting.enable = true;
powerManagement.enable = false;
powerManagement.finegrained = false;
open = false;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.beta;
nvidiaPersistenced = true;
} else {};
enableRedistributableFirmware = true;
};
environment = {
variables = {
} // (if (device == "desktop") then {
WGPU_BACKEND = "gl";
GBM_BACKEND = "nvidia-drm";
LIBVA_DRIVER_NAME = "nvidia";
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
EGL_PLATFORM = "wayland";
} else {
});
sessionVariables = {
WEBKIT_DISABLE_COMPOSITING_MODE = "1";
} // (if (device == "desktop") then {
WGPU_BACKEND = "gl";
GBM_BACKEND = "nvidia-drm";
LIBVA_DRIVER_NAME = "nvidia";
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
EGL_PLATFORM = "wayland";
} else {
});
};
}

View File

@@ -0,0 +1,4 @@
{ config, pkgs, device, ... }:
{
}

21
new/modules/locale.nix Normal file
View File

@@ -0,0 +1,21 @@
{ config, pkgs, device, ... }:
{
time.timeZone = "America/Chicago";
i18n = {
defaultLocale = "en_US.UTF-8";
extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
};
}

View File

@@ -0,0 +1,45 @@
{ config, pkgs, device, ... }:
{
imports = [
(builtins.fetchTarball {
url = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver/-/archive/master.tar.gz";
sha256 = "0xlhl8zhcz5c6hvmpkfw9ay2lfnk6nhax8pphvbv3vzxf1p9dhw9";
})
];
security.acme = {
acceptTerms = true;
defaults.email = "security@bug.tools";
certs."mail.bug.tools" = {
listenHTTP = "1360";
};
};
mailserver = {
enable = true;
stateVersion = 3;
fqdn = "mail.bug.tools";
domains = [ "bug.tools" ];
x509.useACMEHost = "mail.bug.tools";
loginAccounts = {
"bug@bug.tools" = {
hashedPasswordFile = "/home/bug/mailserver/bug.passwd";
aliases = [
"admin@bug.tools"
"google@bug.tools"
];
};
"pare@bug.tools" = {
hashedPasswordFile = "/home/bug/mailserver/pare.passwd";
};
};
};
}

37
new/modules/mpd.nix Normal file
View File

@@ -0,0 +1,37 @@
{ config, pkgs, device, ... }:
{
services = {
mpd = {
enable = (device == "laptop");
settings = {
music_directory = "/run/media/bug/Music/";
decoder = [
{
plugin = "ffmpeg";
enabled = "yes";
}
{
plugin = "opus";
enabled = "no";
}
];
audio_output = [{
type = "pipewire";
name = "PipeWire Sound Server";
}];
};
user = "bug";
};
};
systemd.services = {
mpd.environment = {
XDG_RUNTIME_DIR = "/run/user/1000";
};
};
}

25
new/modules/network.nix Normal file
View File

@@ -0,0 +1,25 @@
{ config, pkgs, device, ... }:
{
networking = {
hostName = if (device == "server") then "box" else "nix";
networkmanager.enable = true;
nameservers = ["1.1.1.1" "1.0.0.1"];
};
services = {
cloudflare-warp.enable = (device == "laptop");
openssh = {
enable = true;
settings = {
PrintMotd = true;
X11Forwarding = true;
AllowTcpForwarding = true;
};
};
};
}

344
new/modules/packages.nix Normal file
View File

@@ -0,0 +1,344 @@
{ lib, config, inputs, pkgs, options, desktop, ... }:
let
nix-gaming = import (builtins.fetchTarball "https://github.com/fufexan/nix-gaming/archive/master.tar.gz");
nix-alien = import (
builtins.fetchTarball "https://github.com/thiagokokada/nix-alien/tarball/master"
) {};
in
{
imports = [
nix-gaming.nixosModules.platformOptimizations
nix-gaming.nixosModules.pipewireLowLatency
];
nixpkgs = {
config = {
allowUnfree = true;
cudaSupport = (device == "desktop");
nvidia.acceptLicense = (device == "desktop");
};
overlays = [
];
};
environment.sessionVariables = {
BROWSER = "firefox";
NIXPKGS_ALLOW_UNFREE = 1;
};
users.users.bug.packages = with pkgs; [
vscode
(luajit.withPackages (ps: with ps; [
luasocket
bit32
]))
go
(python3.withPackages (ps: with ps; [
unidecode
discordpy
setuptools
pip
pynput
python-uinput
mido
pyautogui
pygobject3
pycairo
tkinter
numpy
scipy
imageio
evdev
]))
nodejs
(blender.withPackages (ps: with ps; [
libGLU
gcc
zlib
xorg.libX11
fontconfig
pcre2
xorg.libXext
xorg.libxcb
glib
]))
plasticity
obsidian
vesktop
nicotine-plus
fastfetch
tree
gh
scanmem
samrewritten
impression
mission-center
authenticator
steamtinkerlaunch
obs-studio
#prismlauncher
euphonica
kooha
loupe
arduino-ide
geary
];
environment.systemPackages = with pkgs; [
home-manager
comma
nix-index
git
wget
gcc
gnumake
nmap
inetutils
nix-prefetch
nix-output-monitor
nvd
nixfmt
nixd
nil
nh
gnome-boxes
openjdk
zlib
glfw
glew
wine64
wineWow64Packages.full
lug-helper
appimage-run
vulkan-tools
vulkan-validation-layers
vulkan-loader
pulseaudioFull
gamemode
winetricks
steam-run
firmware-updater
cosmic-applets
cosmic-edit
cosmic-ext-calculator
cosmic-ext-tweaks
cosmic-screenshot
quick-webapps
nix-alien.nix-alien
file-roller
unzip
xdg-desktop-portal-gtk
xdg-desktop-portal-cosmic
mangohud
mesa-demos
lutris
gnome-software
neovim
micro
inputs.hytale-launcher.packages.${pkgs.system}.default
baobab
] ++ (if desktop then [
(nix-gaming.packages.${pkgs.stdenv.hostPlatform.system}.star-citizen.override {
tricks = [ "arial" "vcrun2019" "win10" "sound=alsa" ];
})
libxshmfence
(appimage-run.override {
extraPkgs = pkgs: [ pkgs.xorg.libxshmfence pkgs.linuxPackages.nvidia_x11 ];
})
] else [
bambu-studio
]);
services = {
flatpak = {
enable = true;
remotes = lib.mkOptionDefault [{
name = "flathub-beta";
location = "https://flathub.org/beta-repo/flathub-beta.flatpakrepo";
}];
update.auto.enable = true;
uninstallUnmanaged = true;
packages = [
"org.vinegarhq.Sober"
"org.vinegarhq.Vinegar"
"org.gnome.Decibels"
"org.pipewire.Helvum"
"community.pathofbuilding.PathOfBuilding"
{
appId = "com.hytale.Launcher";
sha256 = "sha256-SUxfyovC2umZmsOj5bOTZ8WfGCpnWcz7svOESwNekV0=";
bundle = "${pkgs.fetchurl {
url = "https://launcher.hytale.com/builds/release/linux/amd64/hytale-launcher-latest.flatpak";
sha256 = "sha256-SUxfyovC2umZmsOj5bOTZ8WfGCpnWcz7svOESwNekV0=";
}}";
}
# add Polytoria client
# https://cdn.polytoria.com/releases/installer/linux/Polytoria%20Setup%204.12.0.flatpak
{
appId = "com.polytoria.launcher";
sha256 = "sha256-VjhNiJfSdCtlH2SuP3Mn8jjOrx5xcOqhtDKaWYIwxYg=";
bundle = "${pkgs.fetchurl {
url = "https://github.com/4DBug/poly/releases/download/poly/poly.flatpak";
sha256 = "sha256-VjhNiJfSdCtlH2SuP3Mn8jjOrx5xcOqhtDKaWYIwxYg=";
}}";
}
];
overrides = {
global = {
Context.sockets = ["wayland" "!x11" "!fallback-x11"];
};
};
};
ollama = {
enable = false;
loadModels = [ "llama3.2:3b" "deepseek-r1:1.5b" "deepseek-r1:8b"];
};
};
fonts = {
fontDir.enable = true;
enableDefaultPackages = true;
packages = with pkgs; [
twitter-color-emoji
nerd-fonts.fira-code
nerd-fonts.droid-sans-mono
];
fontconfig = {
enable = true;
useEmbeddedBitmaps = true;
defaultFonts = {
emoji = [ "Twitter Color Emoji" ];
};
};
};
programs = {
appimage = {
enable = true;
binfmt = true;
};
firefox = {
enable = true;
package = pkgs.firefox-bin;
};
steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = false;
localNetworkGameTransfers.openFirewall = true;
gamescopeSession.enable = true;
extraCompatPackages = with pkgs; [
proton-ge-bin
];
platformOptimizations.enable = true;
};
ydotool.enable = true;
gamescope = {
enable = true;
capSysNice = true;
args = [
"--rt"
"--expose-wayland"
];
};
virt-manager.enable = true;
nix-ld = {
enable = true;
libraries = options.programs.nix-ld.libraries.default ++ (with pkgs; [
libxml2
udev
gcc
egl-wayland
mesa
libglvnd
wayland
xorg.libX11
xorg.libXcursor
xorg.libXrandr
xorg.libXi
]);
};
};
}

12
new/modules/security.nix Normal file
View File

@@ -0,0 +1,12 @@
{ config, pkgs, device, ... }:
{
security = {
polkit.enable = true;
sudo = {
enable = true;
wheelNeedsPassword = false;
};
};
}

17
new/modules/swap.nix Normal file
View File

@@ -0,0 +1,17 @@
{ config, pkgs, device, ... }:
{
boot.kernel.sysctl = {
"fs.file-max" = 524288;
};
swapDevices = [{
device = "/var/lib/swapfile";
size = 8 * 1024;
}];
zramSwap = {
enable = true;
memoryMax = 64 * 1024 * 1024 * 1024;
};
}

19
new/modules/users.nix Normal file
View File

@@ -0,0 +1,19 @@
{ config, pkgs, device, ... }:
{
users.users = {
bug = {
isNormalUser = true;
description = "bug";
extraGroups = [ "networkmanager" "wheel" "audio" "video" "libvirtd" "ydotool" "dialout" ];
};
} // (if (device == "server") then {
levi = {
isNormalUser = true;
description = "levi";
extraGroups = [ "wheel"];
hashedPassword = "$6$AqsDy7oxFOpjKZLM$kD0y3sc1b9xPTveqThhv2EyyhDh0WELrznYwCOQmZzVqEVWs6iG8PmLMstWSfpdloljciEW09u8vTRi1h0EBw1";
};
} else {});
}

View File

@@ -0,0 +1,9 @@
{ config, pkgs, device, ... }:
{
virtualisation = {
libvirtd.enable = true;
spiceUSBRedirection.enable = true;
};
}

View File

@@ -0,0 +1,7 @@
{ config, pkgs, device, ... }:
{
services = {
vscode-server.enable = true;
};
}