Moved modules and hm dir to hosts dir. Moved some code to shared and extended lib with custom functions

This commit is contained in:
2025-04-12 17:05:38 +02:00
parent df5bea9cc0
commit e3a1dd36d7
99 changed files with 550 additions and 140 deletions

View File

@ -0,0 +1,17 @@
{
imports = [
./development
./fonts.nix
./gaming
./gnome
./hardware
./locale.nix
./networking.nix
./nix-helper.nix
./hyprland
./sddm.nix
./security.nix
./shell.nix
./qt.nix
];
}

View File

@ -0,0 +1,24 @@
{ pkgs, ... }:
{
imports = [
./docker.nix
./dotnet.nix
./nix.nix
./node.nix
./ollama.nix
./rust.nix
];
environment.systemPackages = with pkgs; [
# IDEs
vscodium # TODO set up extensions
# Tools
git
just
unstable.libpq # Required for PostgreSQL
# Formatters
treefmt
shfmt
];
}

View File

@ -0,0 +1,10 @@
{
virtualisation.docker = {
enable = true;
storageDriver = "btrfs";
rootless = {
enable = true;
setSocketVariable = true;
};
};
}

View File

@ -0,0 +1,9 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
jetbrains.rider
dotnet-sdk_9
dotnet-aspnetcore_9
];
}

View File

@ -0,0 +1,11 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
# Language servers
nixd
nil
# Formatters
nixfmt-rfc-style
];
}

View File

@ -0,0 +1,10 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
jetbrains.webstorm
nodejs_22
pnpm
nodePackages.prettier
];
}

View File

@ -0,0 +1,6 @@
{
services.ollama = {
enable = true;
acceleration = "cuda";
};
}

View File

@ -0,0 +1,17 @@
{ pkgs, ... }:
{
environment = {
sessionVariables = {
# Required for some Rust dependencies, like reqwest
PKG_CONFIG_PATH = "${pkgs.openssl.dev}/lib/pkgconfig";
};
systemPackages = with pkgs; [
jetbrains.rust-rover
rustup
gcc
pkg-config # Required for some Rust dependencies
];
};
}

View File

@ -0,0 +1,19 @@
{ pkgs, theme, ... }:
{
environment.systemPackages = with pkgs; [
font-awesome # Icons
];
fonts = {
fontconfig.enable = true;
packages = with pkgs; [
(nerdfonts.override { fonts = [ theme.nerdFont ]; })
jetbrains-mono
# The line below will replace the lines above in 25.05
# nerd-fonts.jetbrains-mono
font-awesome
];
};
}

View File

@ -0,0 +1,12 @@
{ pkgs, ... }:
{
imports = [
./steam.nix
];
environment.systemPackages = with pkgs; [
heroic
wine
];
}

View File

@ -0,0 +1,8 @@
{
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
};
}

View File

@ -0,0 +1,29 @@
{ pkgs, ... }:
{
imports = [
./nautilus.nix
];
environment.systemPackages = with pkgs; [
# adw-gtk3
glib
adwaita-icon-theme
gnomeExtensions.appindicator
# gnome-extension-manager
# loupe
gnome-calculator
gnome-disk-utility
gnome-clocks
papers # PDFReader
pdfarranger
];
programs.dconf.enable = true; # Required for some gnome applications
services = {
gnome.gnome-keyring.enable = true;
gvfs.enable = true; # Gnome Virtual File-system. Required for various things in nautilus
udev.packages = with pkgs; [ gnome-settings-daemon ];
};
}

View File

@ -0,0 +1,13 @@
{ pkgs, common, ... }:
{
environment.systemPackages = with pkgs; [
nautilus
ffmpegthumbnailer # Thumbnails
];
programs.nautilus-open-any-terminal = {
enable = true;
terminal = common.default.terminal;
};
}

View File

@ -0,0 +1,33 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
gst_all_1.gstreamer
gst_all_1.gst-plugins-base
gst_all_1.gst-plugins-good
gst_all_1.gst-plugins-bad
wireplumber
playerctl # Interaction with audioplayers and browsers
pavucontrol # GUI
spotify
];
hardware.pulseaudio.enable = false; # Will be moved to services in 25.05
security.rtkit.enable = true; # Enable RealtimeKit for audio purposes
services = {
pipewire = {
enable = true;
alsa = {
enable = true;
support32Bit = true;
};
pulse.enable = true;
# Uncomment the following line if you want to use JACK applications
# jack.enable = true;
};
# pulseaudio.enable = false; # TODO uncommenct at 25.05
};
}

View File

@ -0,0 +1,8 @@
{
imports = [
./audio.nix
./graphics
./hardware-configuration.nix
./keyboard.nix
];
}

View File

@ -0,0 +1,8 @@
{
imports = [
./nvidia.nix
];
# Enable OpenGL
hardware.graphics.enable = true;
}

View File

@ -0,0 +1,28 @@
{ pkgs, ... }:
{
boot.kernelParams = [ "nvidia.NVreg_PreserveVideoMemoryAllocations=1" ];
# For hardware acceleration
environment.sessionVariables.LIBVA_DRIVER_NAME = "nvidia";
hardware = {
graphics.extraPackages = with pkgs; [
# Used for hardware-acceleration
nvidia-vaapi-driver
];
nvidia = {
# Required
modesetting.enable = true;
# Use closed-source drivers
open = false;
# Enable the Nvidia settings menu
nvidiaSettings = true;
# Enable nvidia-suspend.service, nvidia-hibernate.service and nvidia-resume.service
powerManagement.enable = true;
};
};
# Load Nvidia driver for Xorg and Wayland
services.xserver.videoDrivers = [ "nvidia" ];
}

View File

@ -0,0 +1,58 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [
"xhci_pci"
"ahci"
"nvme"
"usb_storage"
"usbhid"
"sd_mod"
"sr_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/5e3f0f97-4bb4-4a53-ace2-9ed19ff9e8ea";
fsType = "btrfs";
options = [ "subvol=@" ];
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/D188-48A9";
fsType = "vfat";
options = [
"fmask=0077"
"dmask=0077"
];
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
# networking.interfaces.enp0s20f0u8.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp6s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@ -0,0 +1,11 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
via
];
hardware.keyboard.qmk.enable = true;
services.udev.packages = with pkgs; [ via ];
}

View File

@ -0,0 +1,24 @@
# System configurations for Hyprland. For home configs, see ./home-manager/hyprland
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
xdg-desktop-portal-hyprland
hyprpolkitagent # Auth deamon providing modals for password auth
hyprshot # Screenshots
unstable.hyprsysteminfo
unstable.hyprland-qtutils
unstable.hyprland-qt-support
];
programs = {
hyprland = {
enable = true;
xwayland.enable = true;
withUWSM = true;
};
hyprlock.enable = true; # Lock screen
};
services.hypridle.enable = true; # Lock when unused
}

View File

@ -0,0 +1,36 @@
{ common, ... }:
let
utf-8 = "UTF-8";
en = "en_GB.${utf-8}";
nb = "nb_NO.${utf-8}";
in
{
# Configure console keymap
console.keyMap = "uk";
# Select internationalisation properties.
i18n = {
defaultLocale = en;
supportedLocales = [
"${en}/${utf-8}"
"${nb}/${utf-8}"
];
extraLocaleSettings = {
LC_ADDRESS = nb;
LC_IDENTIFICATION = nb;
LC_MEASUREMENT = nb;
LC_MONETARY = nb;
LC_NAME = nb;
LC_NUMERIC = nb;
LC_PAPER = nb;
LC_TELEPHONE = nb;
LC_TIME = nb;
};
};
# Configure keymaps
services.xserver.xkb = common.keymaps;
# Set your time zone.
time.timeZone = "Europe/Oslo";
}

View File

@ -0,0 +1,22 @@
{ common, ... }:
{
networking = {
networkmanager.enable = true;
hostName = common.hostname;
# wireless.enable = true; # Enables wireless support via wpa_supplicant.
};
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
programs.ssh.enableAskPassword = false;
services.tailscale.enable = true;
}

View File

@ -0,0 +1,12 @@
# Nix-Helper: github.com/viperML/nh
{
programs.nh = {
enable = true;
flake = ../.;
clean = {
enable = true;
dates = "weekly";
extraArgs = "--keep-since 30d";
};
};
}

View File

@ -0,0 +1,17 @@
{ pkgs, ... }:
{
environment = {
sessionVariables = {
QT_QPA_PLATFORMTHEME = "qt6ct";
QT_QPA_PLATFORM = "wayland"; # Enable Wayland for QT
};
systemPackages = with pkgs.kdePackages; [
qtwayland
qtsvg
qt6ct
];
};
qt.enable = true;
}

View File

@ -0,0 +1,22 @@
{ pkgs, theme, ... }:
let
flavor = theme.flavor;
in
{
environment.systemPackages = with pkgs; [
(catppuccin-sddm.override {
flavor = flavor;
font = theme.nerdFont;
fontSize = "9";
background = builtins.toString ../assets/catppuccin_high.png;
loginBackground = true;
})
];
services.displayManager.sddm = {
enable = true;
theme = "catppuccin-${flavor}";
wayland.enable = true;
package = pkgs.kdePackages.sddm;
};
}

View File

@ -0,0 +1,31 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
gnupg
yubioath-flutter
];
programs.gnupg.agent.enable = true;
security = {
pam = {
services = {
login.u2fAuth = false; # U2F and password
sudo.u2fAuth = true; # U2F or password
};
u2f = {
enable = true;
settings = {
cue = true; # Prompt: Please touch the device
interactive = false; # Prompt: Insert your U2F device, then press ENTER.
};
};
};
};
services = {
pcscd.enable = true; # Required for Yubikey
udev.packages = with pkgs; [ yubikey-personalization ];
};
}

View File

@ -0,0 +1,19 @@
# For Fish dotfiles, see: /home-manager/fish.nix
{ pkgs, ... }:
{
programs = {
bash = {
# Starts the OS using Bash, then starts fish if it's not running
interactiveShellInit = ''
if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
then
shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=""
exec ${pkgs.fish}/bin/fish $LOGIN_OPTION
fi
'';
};
fish.enable = true;
};
}