commit c33f6abe212b911c15cda7948020489ac3e5da47 Author: Nils Walther Date: Mon Jan 12 22:00:09 2026 +0100 init diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..2a118a1 --- /dev/null +++ b/configuration.nix @@ -0,0 +1,20 @@ +{ config, pkgs, ... }: + +{ + imports = + [ + ./hardware-configuration.nix + ./modules/boot.nix + ./modules/desktop.nix + ./modules/fonts.nix + ./modules/gpu.nix + ./modules/locale.nix + ./modules/networking.nix + ./modules/sound.nix + ./modules/system_packages.nix + ./modules/users.nix + ./modules/virtualization.nix + ]; + + system.stateVersion = "25.11"; +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..0e7fabc --- /dev/null +++ b/flake.lock @@ -0,0 +1,49 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1767910483, + "narHash": "sha256-MOU5YdVu4DVwuT5ztXgQpPuRRBjSjUGIdUzOQr9iQOY=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "82fb7dedaad83e5e279127a38ef410bcfac6d77c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-25.11", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1768028080, + "narHash": "sha256-50aDK+8eLvsLK39TzQhKNq50/HcXyP4hyxOYoPoVxjo=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d03088749a110d52a4739348f39a63f84bb0be14", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-25.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..6eff865 --- /dev/null +++ b/flake.nix @@ -0,0 +1,26 @@ +{ + description = "nils NixOS Flake Configuration"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; + home-manager.url = "github:nix-community/home-manager/release-25.11"; + home-manager.inputs.nixpkgs.follows = "nixpkgs"; + }; + + outputs = { self, nixpkgs, home-manager, ... }: { + nixosConfigurations = { + nixos = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + ./configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.nils = import ./home/home.nix; + } + ]; + }; + }; + }; +} diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100644 index 0000000..f6fa748 --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,31 @@ +# 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" "usbhid" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/1d875e69-a3e7-4566-aa71-a43c040c533f"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/1C0E-5877"; + fsType = "vfat"; + options = [ "fmask=0077" "dmask=0077" ]; + }; + + swapDevices = [ ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/home/btop.nix b/home/btop.nix new file mode 100644 index 0000000..a1213db --- /dev/null +++ b/home/btop.nix @@ -0,0 +1,12 @@ +{ pkgs, ... }: + +{ + programs.btop = { + enable = true; + settings = { + theme_background = false; + preset = 0; + vim_keys = true; + }; + }; +} diff --git a/home/helix.nix b/home/helix.nix new file mode 100644 index 0000000..35458ad --- /dev/null +++ b/home/helix.nix @@ -0,0 +1,24 @@ +{ pkgs, ... }: + +{ + programs.helix = { + enable = true; + defaultEditor = true; + settings = { + theme = "transparent"; + editor = { + line-number = "relative"; + bufferline = "multiple"; + cursor-shape = { + insert = "bar"; + normal = "block"; + select = "underline"; + }; + statusline.left = ["mode" "spinner" "file-name"]; + }; + keys.normal = { + X = "extend_line_above"; + }; + }; + }; +} diff --git a/home/home.nix b/home/home.nix new file mode 100644 index 0000000..0a140a2 --- /dev/null +++ b/home/home.nix @@ -0,0 +1,20 @@ +{ config, pkgs, ... }: + +{ + imports = [ + ./btop.nix + ./helix.nix + ./mime-apps.nix + ./packages.nix + ./shell.nix + ]; + home.username = "nils"; + home.homeDirectory = "/home/nils"; + + services.nextcloud-client = { + enable = true; + startInBackground = true; + }; + + home.stateVersion = "25.11"; +} diff --git a/home/mime-apps.nix b/home/mime-apps.nix new file mode 100644 index 0000000..bc520b8 --- /dev/null +++ b/home/mime-apps.nix @@ -0,0 +1,61 @@ +{ ... }: { + xdg.mimeApps = { + enable = true; + defaultApplications = { + # --- Text --- + "text/plain" = [ "Helix.desktop" "org.kde.kwrite.desktop" ]; + "text/markdown" = [ "Helix.desktop" "org.kde.kwrite.desktop" ]; + "text/rust" = [ "Helix.desktop" "org.kde.kwrite.desktop" ]; + "application/json" = [ "Helix.desktop" "org.kde.kwrite.desktop" ]; + "application/x-yaml" = [ "Helix.desktop" "org.kde.kwrite.desktop" ]; + "application/x-docbook+xml" = [ "Helix.desktop" "org.kde.kwrite.desktop" ]; + "application/x-zerosize" = [ "Helix.desktop" "org.kde.kwrite.desktop" ]; + "text/x-cmake" = [ "Helix.desktop" "org.kde.kwrite.desktop" ]; + "text/x-objcsrc" = [ "Helix.desktop" "org.kde.kwrite.desktop" ]; + "text/x-typst" = [ "Helix.desktop" "org.kde.kwrite.desktop" ]; + + # --- Audio --- + "audio/mpeg" = [ "org.kde.elisa.desktop" ]; + "audio/x-wav" = [ "org.kde.elisa.desktop" ]; + "audio/x-vorbis+ogg" = [ "org.kde.elisa.desktop" ]; + "audio/flac" = [ "org.kde.elisa.desktop" ]; + "audio/mp4" = [ "org.kde.elisa.desktop" ]; + "audio/aac" = [ "org.kde.elisa.desktop" ]; + "audio/ogg" = [ "org.kde.elisa.desktop" ]; + + # --- Video --- + "video/mp4" = [ "org.kde.haruna.desktop" ]; + "video/x-matroska" = [ "org.kde.haruna.desktop" ]; + "video/webm" = [ "org.kde.haruna.desktop" ]; + "video/quicktime" = [ "org.kde.haruna.desktop" ]; + "video/x-msvideo" = [ "org.kde.haruna.desktop" ]; + "video/mpeg" = [ "org.kde.haruna.desktop" ]; + "video/x-flv" = [ "org.kde.haruna.desktop" ]; + "application/x-matroska" = [ "org.kde.haruna.desktop" ]; + + # --- Dokumente & Archive --- + "application/pdf" = [ "org.kde.okular.desktop" ]; + "application/zip" = [ "org.kde.ark.desktop" ]; + "application/x-tar" = [ "org.kde.ark.desktop" ]; + "application/x-compressed-tar" = [ "org.kde.ark.desktop" ]; + "image/svg+xml" = [ "org.kde.gwenview.desktop" "org.inkscape.Inkscape.desktop" ]; + "image/png" = [ "org.kde.gwenview.desktop" ]; + "image/jpeg" = [ "org.kde.gwenview.desktop" ]; + + # --- Ordner --- + "inode/directory" = [ "org.kde.dolphin.desktop" ]; + + # --- Mail & Kalender --- + "x-scheme-handler/mailto" = [ "thunderbird.desktop" ]; + "message/rfc822" = [ "thunderbird.desktop" ]; + "text/calendar" = [ "thunderbird.desktop" ]; + "x-scheme-handler/webcal" = [ "thunderbird.desktop" ]; + "x-scheme-handler/webcals" = [ "thunderbird.desktop" ]; + "application/x-extension-ics" = [ "thunderbird.desktop" ]; + + # --- Messenger --- + "x-scheme-handler/sgnl" = [ "signal.desktop" ]; + "x-scheme-handler/signalcaptcha" = [ "signal.desktop" ]; + }; + }; +} diff --git a/home/packages.nix b/home/packages.nix new file mode 100644 index 0000000..bd7343d --- /dev/null +++ b/home/packages.nix @@ -0,0 +1,32 @@ +{ pkgs, ... }: + +{ + home.packages = with pkgs; [ + anki + discord + fastfetch + ffmpeg + fzf + haruna + inkscape + + kdePackages.filelight + kdePackages.francis + kdePackages.isoimagewriter + kdePackages.kdenlive + + krita + libreoffice-qt6 + + #masterpdfeditor + + nextcloud-client + obs-studio + obsidian + pympress + signal-desktop + thunderbird + xournalpp + zotero + ]; +} diff --git a/home/shell.nix b/home/shell.nix new file mode 100644 index 0000000..9f25b06 --- /dev/null +++ b/home/shell.nix @@ -0,0 +1,70 @@ +{ pkgs, ... }: { + + programs.fish = { + enable = true; + + interactiveShellInit = '' + set fish_greeting + + set -g fish_color_param 42a5f5 + set -g fish_color_error ff5252 + #set -g fish_color_command 82b1ff + ''; + }; + + programs.zellij = { + enable = true; + enableFishIntegration = false; + + settings = { + default_shell = "fish"; + default_layout = "compact"; + show_startup_tips = false; + + + keybinds = { + normal = { + "bind \"Alt h\"" = { MoveFocus = "Left"; }; + "bind \"Alt l\"" = { MoveFocus = "Right"; }; + "bind \"Alt j\"" = { MoveFocus = "Down"; }; + "bind \"Alt k\"" = { MoveFocus = "Up"; }; + }; + + move = { + "bind \"h\"" = { MovePane = "Left"; }; + "bind \"l\"" = { MovePane = "Right"; }; + "bind \"j\"" = { MovePane = "Down"; }; + "bind \"k\"" = { MovePane = "Up"; }; + }; + + resize = { + "bind \"h\"" = { Resize = "Increase Left"; }; + "bind \"l\"" = { Resize = "Increase Right"; }; + "bind \"j\"" = { Resize = "Increase Down"; }; + "bind \"k\"" = { Resize = "Increase Up"; }; + }; + }; + }; + }; + + programs.zoxide = { + enable = true; + enableFishIntegration = true; + }; + + programs.starship = { + enable = true; + enableFishIntegration = true; + settings = builtins.fromTOML (builtins.readFile ./starship.toml); + }; + + programs.git = { + enable = true; + settings.user = { name = "Nils Walther"; email = "mail@nils-walther.de"; }; + }; + + programs.lazygit = { + enable = true; + }; + +} diff --git a/home/starship.toml b/home/starship.toml new file mode 100644 index 0000000..b3fe93c --- /dev/null +++ b/home/starship.toml @@ -0,0 +1,73 @@ +"$schema" = 'https://starship.rs/config-schema.json' + +format = """ +[░▒▓](#0d47a1)\ +$username\ +[   ](bg:#0d47a1 fg:#ffffff)\ +$directory\ +$time\ +$git_branch\ +$git_status\ +$nix_shell\ +$character""" + +[username] +show_always = true +style_user = "bg:#0d47a1 fg:#ffffff" +format = "[ $user]($style)" + +[directory] +style = "fg:#000000 bg:#42a5f5" +format = "[ $path ]($style)" +truncation_length = 3 +truncation_symbol = "…/" + +[directory.substitutions] +"Documents" = "󰈙 " +"Downloads" = " " +"Music" = " " +"Pictures" = " " +"Dokumente" = "󰈙 " +"Musik" = " " +"Bilder" = " " +"Dev" = " " + +[time] +disabled = false +time_format = "%R" +style = "bg:#37474f" +format = '[[  $time ](fg:#ffffff bg:#37474f)]($style)' + +[git_branch] +disabled = false +symbol = " " +style = "bg:#26c6da fg:#000000" +format = '[ $symbol$branch ](bold $style)' + +[git_status] +disabled = false +style = "bg:#26c6da fg:#000000" +format = '[$all_status$ahead_behind]($style)' + +# up_to_date = " synced " +modified = "modified " +staged = "staged " +untracked = "untracked " +ahead = "ahead ⇡${count} " +behind = "behind ⇣${count} " +diverged = "diverged ⇕⇡${ahead_count}⇣${behind_count} " +conflicted = "conflict " +stashed = "stashed " +renamed = "renamed " +deleted = "deleted " + +[nix_shell] +disabled = false +format = '[   <$name> ]($style)' +style = "bg:#78909c fg:#ffffff" +impure_msg = '(impure)' +pure_msg = '(pure)' + +[character] +success_symbol = "[ ➜](#42a5f5)" +error_symbol = "[ ERROR ](bold #ff0000)[➜](#ff0000)" diff --git a/modules/boot.nix b/modules/boot.nix new file mode 100644 index 0000000..ce49aed --- /dev/null +++ b/modules/boot.nix @@ -0,0 +1,35 @@ +{ config, pkgs, ... }: + +{ + boot = { + loader = { + systemd-boot = { + enable = true; + configurationLimit = 5; + }; + efi.canTouchEfiVariables = true; + timeout = 5; + }; + + kernelPackages = pkgs.linuxPackages_latest; + + kernelParams = [ + "nvidia-drm.modeset=1" + "quiet" + "splash" + "boot.shell_on_fail" + "loglevel=3" + "rd.systemd.show_status=false" + "rd.udev.log_level=3" + "udev.log_priority=3" + ]; + + initrd.verbose = false; + consoleLogLevel = 0; + + plymouth = { + enable = true; + theme = "breeze"; + }; + }; +} diff --git a/modules/desktop.nix b/modules/desktop.nix new file mode 100644 index 0000000..37796f4 --- /dev/null +++ b/modules/desktop.nix @@ -0,0 +1,9 @@ +{ config, pkgs, ... }: + +{ + services.xserver.enable = true; + services.displayManager.sddm.enable = true; + services.desktopManager.plasma6.enable = true; + + services.printing.enable = true; +} diff --git a/modules/fonts.nix b/modules/fonts.nix new file mode 100644 index 0000000..1b977ab --- /dev/null +++ b/modules/fonts.nix @@ -0,0 +1,18 @@ +{ pkgs, ... }: + +{ + fonts.packages = with pkgs; [ + dejavu_fonts + ibm-plex + inter + noto-fonts + roboto + fira + fira-code + + nerd-fonts.jetbrains-mono + nerd-fonts.hack + + newcomputermodern + ]; +} diff --git a/modules/gpu.nix b/modules/gpu.nix new file mode 100644 index 0000000..a5cdf7e --- /dev/null +++ b/modules/gpu.nix @@ -0,0 +1,15 @@ +{ config, pkgs, ... }: + +{ + services.xserver.videoDrivers = [ "nvidia" ]; + hardware.graphics.enable = true; + + hardware.nvidia = { + modesetting.enable = true; + powerManagement.enable = false; + powerManagement.finegrained = false; + open = false; + nvidiaSettings = true; + package = config.boot.kernelPackages.nvidiaPackages.stable; + }; +} diff --git a/modules/locale.nix b/modules/locale.nix new file mode 100644 index 0000000..52d5b64 --- /dev/null +++ b/modules/locale.nix @@ -0,0 +1,25 @@ +{ config, pkgs, ... }: + +{ + time.timeZone = "Europe/Berlin"; + + i18n.defaultLocale = "de_DE.UTF-8"; + i18n.extraLocaleSettings = { + LC_ADDRESS = "de_DE.UTF-8"; + LC_IDENTIFICATION = "de_DE.UTF-8"; + LC_MEASUREMENT = "de_DE.UTF-8"; + LC_MONETARY = "de_DE.UTF-8"; # + LC_NAME = "de_DE.UTF-8"; + LC_NUMERIC = "de_DE.UTF-8"; + LC_PAPER = "de_DE.UTF-8"; + LC_TELEPHONE = "de_DE.UTF-8"; + LC_TIME = "de_DE.UTF-8"; + }; + + console.keyMap = "de"; + services.xserver.xkb = { + layout = "de"; + variant = ""; + options = "caps:escape"; + }; +} diff --git a/modules/networking.nix b/modules/networking.nix new file mode 100644 index 0000000..c3ef0d9 --- /dev/null +++ b/modules/networking.nix @@ -0,0 +1,6 @@ +{ config, pkgs, ... }: + +{ + networking.hostName = "nixos"; + networking.networkmanager.enable = true; +} diff --git a/modules/sound.nix b/modules/sound.nix new file mode 100644 index 0000000..ab2017c --- /dev/null +++ b/modules/sound.nix @@ -0,0 +1,12 @@ +{ config, pkgs, ... }: + +{ + services.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; +} diff --git a/modules/system_packages.nix b/modules/system_packages.nix new file mode 100644 index 0000000..7367f28 --- /dev/null +++ b/modules/system_packages.nix @@ -0,0 +1,14 @@ +{ pkgs, ... }: + +{ + nixpkgs.config.allowUnfree = true; + + programs.firefox.enable = true; + programs.fish.enable = true; + + environment.systemPackages = with pkgs; [ + whitesur-cursors + kdePackages.partitionmanager + kdePackages.isoimagewriter + ]; +} diff --git a/modules/users.nix b/modules/users.nix new file mode 100644 index 0000000..c127982 --- /dev/null +++ b/modules/users.nix @@ -0,0 +1,10 @@ +{ config, pkgs, ... }: + +{ + users.users.nils = { + isNormalUser = true; + description = "nils"; + extraGroups = [ "networkmanager" "wheel" ]; + shell = pkgs.fish; + }; +} diff --git a/modules/virtualization.nix b/modules/virtualization.nix new file mode 100644 index 0000000..558474f --- /dev/null +++ b/modules/virtualization.nix @@ -0,0 +1,26 @@ +# https://md.timvandenboom.eth64.de/s/Nils/p/evdev-passthrough-BTUeHFqMQ3 + +{ pkgs, ... }: + +{ + virtualisation.libvirtd = { + enable = true; + qemu = { + package = pkgs.qemu_kvm; + runAsRoot = true; + swtpm.enable = true; + verbatimConfig = '' + cgroup_device_acl = [ + "/dev/null", "/dev/full", "/dev/zero", + "/dev/random", "/dev/urandom", + "/dev/ptmx", "/dev/kvm", "/dev/kqemu", + "/dev/rtc","/dev/hpet", "/dev/vfio/vfio", + "/dev/input/by-id/usb-Kinesis_Corporation_Adv360_Pro_5E36F7BBCC9DC86A-if02-event-kbd", + "/dev/input/by-id/usb-Keychron_Keychron_4K_Link-event-mouse" + ] + ''; + }; + }; + + programs.virt-manager.enable = true; +}