diff --git a/README.md b/README.md index b686d81..f77c357 100644 --- a/README.md +++ b/README.md @@ -62,28 +62,22 @@ Here's a brief rundown of the directory structure: ### Top-Level Files - `flake.nix`: Nix Flake configuration file. -- `configuration.nix`: Main NixOS system configuration entry point. -- `disko.nix`: Disk and filesystem configuration. -- `hardware.nix`: Hardware-related configurations like drivers. -- `home.nix`: Configurations related to user home directories. (home-manager) -- `users.nix`: User account and privilege settings. -### `home-mods` Directory +#### `home-mods` Directory Stores modules related to specific user applications or environments. -- `dev/default.nix`: Developer-specific configurations. -- `firefox/default.nix`: Firefox browser settings. -- `plasma/default.nix`: KDE Plasma desktop settings. -- `virt/default.nix`: Virtualization-related settings. +#### `os-mods` Directory -### `os-mods` Directory +Holds system-level modules for network, virtualization, desktop etc. -Holds system-level modules for network, virtualization, etc. +#### `users` Directory -- `network/default.nix`: Network-related settings. -- `virt/default.nix`: OS-level virtualization settings. +Holds home-manager configuration for the users listed in `users.nix` +#### `systems` Directory + +Holds system specific nixos configuration (e.g. hardware quirks). ## 🙏 Made possible by diff --git a/configuration.nix b/configuration.nix deleted file mode 100644 index bdfafb5..0000000 --- a/configuration.nix +++ /dev/null @@ -1,171 +0,0 @@ -{ - config, - pkgs, - inputs, - system, - ... -}: { - imports = [ - ./hardware.nix - ./os-mods/network - ./os-mods/virt - ]; - - nix = { - gc = { - automatic = true; - dates = "weekly"; - options = "--delete-older-than 2w"; - }; - settings.auto-optimise-store = true; - package = pkgs.nixFlakes; - extraOptions = '' - experimental-features = nix-command flakes - ''; - }; - - fonts.fontDir.enable = true; - fonts.fonts = with pkgs; [ - emacs-all-the-icons-fonts - corefonts - vistafonts - noto-fonts - noto-fonts-cjk - noto-fonts-emoji - liberation_ttf - fira - fira-code - fira-code-symbols - mplus-outline-fonts.githubRelease - dina-font - proggyfonts - (nerdfonts.override {fonts = ["FiraCode" "DroidSansMono" "NerdFontsSymbolsOnly"];}) - ]; - - networking.hostName = "nixos-pulse"; - - services.fwupd.enable = true; - - time.timeZone = "Europe/Berlin"; - - i18n = { - defaultLocale = "en_US.UTF-8"; - - extraLocaleSettings = { - LANG = "en_US.UTF-8"; - LC_ADDRESS = "de_DE.UTF-8"; - LC_COLLATE = "de_DE.UTF-8"; - LC_CTYPE = "en_US.UTF-8"; - LC_IDENTIFICATION = "de_DE.UTF-8"; - LC_MEASUREMENT = "de_DE.UTF-8"; - LC_MESSAGES = "en_US.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"; - }; - }; - - services.xserver = { - enable = true; - layout = "us"; - xkbVariant = "alt-intl"; - - desktopManager.plasma5.enable = true; - - displayManager = { - defaultSession = "plasmawayland"; - - sddm.enable = true; - - # autoLogin = { - # enable = true; - # user = "tristand"; - # }; - }; - }; - - services.printing.enable = true; - services.printing.drivers = with pkgs; [ - gutenprint - gutenprintBin - hplipWithPlugin - brlaser - brgenml1cupswrapper - ]; - - sound.enable = true; - hardware.bluetooth.enable = true; - hardware.pulseaudio.enable = false; - security.rtkit.enable = true; - security.sudo.wheelNeedsPassword = false; - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - jack.enable = true; - }; - - environment.sessionVariables = { - EDITOR = "nvim"; - }; - - environment.systemPackages = with pkgs; [ - cifs-utils - neovim - veracrypt - vim - ]; - - programs.nix-ld.dev.enable = true; - - programs.command-not-found.enable = false; - programs.nix-index-database.comma.enable = true; - programs.dconf.enable = true; - programs.fish.enable = true; - programs.gnupg.agent = { - enable = true; - enableSSHSupport = true; - }; - - 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 - }; - - services.btrfs.autoScrub.enable = true; - # For SMB - services.gvfs.enable = true; - services.avahi.enable = true; - services.avahi.nssmdns = true; - ## - - services.openssh.enable = true; - - networking.firewall.allowedTCPPorts = [22]; - # networking.firewall.allowedUDPPorts = [ ... ]; - - # Samba - networking.firewall.extraCommands = ''iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns''; - - powerManagement.powertop.enable = true; - systemd.services.powertop.postStart = '' - HIDDEVICES=$(ls /sys/bus/usb/drivers/usbhid | grep -oE '^[0-9]+-[0-9\.]+' | sort -u) - for i in $HIDDEVICES; do - echo -n "Enabling " | cat - /sys/bus/usb/devices/$i/product - echo 'on' > /sys/bus/usb/devices/$i/power/control - done - ''; - - # This value determines the NixOS release from which the default - # settings for stateful data, like file locations and database versions - # on your system were taken. It‘s perfectly fine and recommended to leave - # this value at the release version of the first install of this system. - # Before changing this value read the documentation for this option - # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). - system.stateVersion = "23.05"; # Did you read the comment? -} diff --git a/flake.lock b/flake.lock index 213a91f..2d26f9d 100644 --- a/flake.lock +++ b/flake.lock @@ -42,27 +42,6 @@ "type": "github" } }, - "envfs": { - "inputs": { - "flake-parts": "flake-parts", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1696892863, - "narHash": "sha256-Gs8dvjM6zFqJmoKWl2CMdfavF49E29lSnvN2Q9Fdm9c=", - "owner": "Mic92", - "repo": "envfs", - "rev": "fe2be4f5c4885ddbbce583395ab34a7bb4daf4b7", - "type": "github" - }, - "original": { - "owner": "Mic92", - "repo": "envfs", - "type": "github" - } - }, "flake-compat": { "flake": false, "locked": { @@ -95,27 +74,6 @@ "type": "github" } }, - "flake-parts": { - "inputs": { - "nixpkgs-lib": [ - "envfs", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1673362319, - "narHash": "sha256-Pjp45Vnj7S/b3BRpZEVfdu8sqqA6nvVjvYu59okhOyI=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "82c16f1682cf50c01cb0280b38a1eed202b3fe9f", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, "flake-utils": { "inputs": { "systems": "systems" @@ -336,11 +294,11 @@ }, "nur": { "locked": { - "lastModified": 1697470606, - "narHash": "sha256-TP3UN5RktQpqDVj5mA6rb1Nu4vGTnctWkbe5sef4LEw=", + "lastModified": 1697496340, + "narHash": "sha256-u2RgKrd/54mXdJh/Iwu9KpZODZ3BsVzJFuff/2EyM3Q=", "owner": "nix-community", "repo": "NUR", - "rev": "cc83a858d3dbf50a934a4f74fe5508ac2fa72bc5", + "rev": "e12ac1f3da3af8568ff715dead8a9dfdce1b95f8", "type": "github" }, "original": { @@ -404,7 +362,6 @@ "inputs": { "disko": "disko", "emacs-overlay": "emacs-overlay", - "envfs": "envfs", "home-manager": "home-manager", "nix-index-database": "nix-index-database", "nix-ld": "nix-ld", diff --git a/flake.nix b/flake.nix index 139837f..9464ae1 100644 --- a/flake.nix +++ b/flake.nix @@ -49,25 +49,31 @@ inputs.nixpkgs.follows = "nixpkgs"; inputs.home-manager.follows = "home-manager"; }; - envfs = { - url = "github:Mic92/envfs"; - inputs.nixpkgs.follows = "nixpkgs"; - }; nix-ld = { url = "github:Mic92/nix-ld"; inputs.nixpkgs.follows = "nixpkgs"; }; }; - outputs = {self, nixpkgs, ...}@inputs: let + outputs = { + self, + nixpkgs, + nixpkgs-unstable, + home-manager, + emacs-overlay, + nur, + nix-index-database, + disko, + ... + } @ inputs: let system = "x86_64-linux"; - unstable-pkgs = import inputs.nixpkgs-unstable pkgs-args; + unstable-pkgs = import nixpkgs-unstable pkgs-args; unstable-overlay = final: prev: { unstable = unstable-pkgs.pkgs; }; overlays = [ - inputs.emacs-overlay.overlay unstable-overlay + emacs-overlay.overlay ]; pkgs-args = { system = system; @@ -77,61 +83,59 @@ }; }; pkgs = import nixpkgs pkgs-args; + hmModules = [ + nix-index-database.hmModules.nix-index + nur.hmModules.nur + inputs.plasma-manager.homeManagerModules.plasma-manager + ]; + osModules = [ + disko.nixosModules.disko + home-manager.nixosModules.home-manager + nix-index-database.nixosModules.nix-index + nur.nixosModules.nur + inputs.nix-ld.nixosModules.nix-ld + inputs.tuxedo-nixos.nixosModules.default + ]; + args = { + inherit inputs; + inherit system; + }; in { formatter = { ${system} = pkgs.alejandra; }; diskoConfigurations = { - nixos-pulse = import ./disko.nix; + nixos-pulse = import ./systems/nixos-pulse/disko.nix; }; homeConfigurations = { - "tristand" = inputs.home-manager.lib.homeManagerConfiguration { + "tristand" = home-manager.lib.homeManagerConfiguration { inherit pkgs; - modules = [ - ./home.nix - inputs.plasma-manager.homeManagerModules.plasma-manager - inputs.nix-index-database.hmModules.nix-index - inputs.nur.hmModules.nur - { - _module.args.inputs = inputs; - _module.args.system = system; - } - ]; + modules = + [ + ./users/tristand.nix + { + _module = {inherit args;}; + } + ] + ++ hmModules; }; }; nixosConfigurations = { - nixos-pulse = inputs.nixpkgs.lib.nixosSystem { - modules = [ - ./configuration.nix - ./users.nix - ./disko.nix - inputs.disko.nixosModules.disko - inputs.envfs.nixosModules.envfs - inputs.home-manager.nixosModules.home-manager - inputs.nix-index-database.nixosModules.nix-index - inputs.nix-ld.nixosModules.nix-ld - inputs.nur.nixosModules.nur - inputs.tuxedo-nixos.nixosModules.default - { - _module.args.inputs = inputs; - _module.args.system = system; - nix.registry.nixpkgs.flake = inputs.nixpkgs; + nixos-pulse = nixpkgs.lib.nixosSystem { + modules = + [ + ./systems/nixos-pulse + { + _module = {inherit args;}; - nixpkgs.pkgs = pkgs; + nix.registry.nixpkgs.flake = nixpkgs; + nixpkgs.pkgs = pkgs; - home-manager.useUserPackages = true; - home-manager.useGlobalPkgs = true; - home-manager.sharedModules = [ - inputs.plasma-manager.homeManagerModules.plasma-manager - inputs.nix-index-database.hmModules.nix-index - inputs.nur.hmModules.nur - ]; - - hardware.tuxedo-control-center.enable = true; - hardware.tuxedo-control-center.package = inputs.tuxedo-nixos.packages.${system}.default; - } - ]; + home-manager.sharedModules = hmModules; + } + ] + ++ osModules; }; }; }; diff --git a/home-mods/dev/default.nix b/home-mods/dev/default.nix index 4aea3e8..30440ee 100644 --- a/home-mods/dev/default.nix +++ b/home-mods/dev/default.nix @@ -14,7 +14,7 @@ personalDoomConfSrc = builtins.fetchGit { url = "https://git.vlt81.de/tristan/doom"; ref = "main"; - rev = "3973c2a97e549640f14ed073bbb8102ebd8a839b"; + rev = "e6d22f794c68a5f3ac56861e7e2ed6642cdef16a"; }; in { xdg.enable = true; diff --git a/os-mods/base/default.nix b/os-mods/base/default.nix new file mode 100644 index 0000000..444f619 --- /dev/null +++ b/os-mods/base/default.nix @@ -0,0 +1,81 @@ +{ + config, + pkgs, + ... +}: { + nix = { + gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 2w"; + }; + settings.auto-optimise-store = true; + package = pkgs.nixFlakes; + extraOptions = '' + experimental-features = nix-command flakes + ''; + }; + + services.fwupd.enable = true; + + # locale + time.timeZone = "Europe/Berlin"; + + i18n = { + defaultLocale = "en_US.UTF-8"; + + extraLocaleSettings = { + LANG = "en_US.UTF-8"; + LC_ADDRESS = "de_DE.UTF-8"; + LC_COLLATE = "de_DE.UTF-8"; + LC_CTYPE = "en_US.UTF-8"; + LC_IDENTIFICATION = "de_DE.UTF-8"; + LC_MEASUREMENT = "de_DE.UTF-8"; + LC_MESSAGES = "en_US.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"; + }; + }; + #################### + + security.rtkit.enable = true; + security.sudo.wheelNeedsPassword = false; + + environment.sessionVariables = { + EDITOR = "nvim"; + }; + + environment.systemPackages = with pkgs; [ + neovim # editor + veracrypt + vim # fallback ed + ]; + + # nix convenience + services.envfs.enable = true; + programs.nix-ld.dev.enable = true; + programs.command-not-found.enable = false; + programs.nix-index-database.comma.enable = true; + ################### + + programs.fish.enable = true; + programs.gnupg.agent = { + enable = true; + enableSSHSupport = true; + }; + + services.openssh.enable = true; + + # For SMB #### + services.gvfs.enable = true; + services.avahi.enable = true; + services.avahi.nssmdns = true; + + # netbios dns + networking.firewall.extraCommands = ''iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns''; + ############## +} diff --git a/os-mods/desktop/default.nix b/os-mods/desktop/default.nix new file mode 100644 index 0000000..99d4b17 --- /dev/null +++ b/os-mods/desktop/default.nix @@ -0,0 +1,83 @@ +{ + config, + lib, + pkgs, + ... +}: { + programs.dconf.enable = true; + + # fonts + + fonts.fontDir.enable = true; + fonts.fonts = with pkgs; [ + emacs-all-the-icons-fonts + corefonts + vistafonts + noto-fonts + noto-fonts-cjk + noto-fonts-emoji + liberation_ttf + fira + fira-code + fira-code-symbols + mplus-outline-fonts.githubRelease + dina-font + proggyfonts + (nerdfonts.override {fonts = ["FiraCode" "DroidSansMono" "NerdFontsSymbolsOnly"];}) + ]; + + # Desktop env + services.xserver = { + enable = true; + layout = "us"; + xkbVariant = "alt-intl"; + + desktopManager.plasma5.enable = true; + + displayManager = { + defaultSession = "plasmawayland"; + + sddm.enable = true; + + # autoLogin = { + # enable = true; + # user = "tristand"; + # }; + }; + }; + ######################### + + ## audio + sound.enable = true; + hardware.bluetooth.enable = true; + hardware.pulseaudio.enable = false; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; + }; + ######### + + ## printing + + services.printing.enable = true; + services.printing.drivers = with pkgs; [ + gutenprint + gutenprintBin + hplipWithPlugin + brlaser + brgenml1cupswrapper + ]; + + environment.systemPackages = with pkgs; [ + cifs-utils + ]; + + programs.steam = { + enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + }; +} diff --git a/hardware.nix b/systems/nixos-pulse/default.nix similarity index 75% rename from hardware.nix rename to systems/nixos-pulse/default.nix index d99ad7d..d147fbd 100644 --- a/hardware.nix +++ b/systems/nixos-pulse/default.nix @@ -4,20 +4,28 @@ pkgs, modulesPath, system, + inputs, ... }: { imports = [ (modulesPath + "/installer/scan/not-detected.nix") + ../../os-mods/base + ../../os-mods/desktop + ../../os-mods/network + ../../os-mods/virt + ../../users + ./disko.nix ]; + system.stateVersion = "23.05"; - zramSwap.enable = true; + nixpkgs.hostPlatform = lib.mkDefault system; boot = { kernelPackages = pkgs.linuxPackages_latest; loader = { systemd-boot = { enable = true; - configurationLimit = 20; + configurationLimit = 32; }; efi.canTouchEfiVariables = true; }; @@ -32,9 +40,11 @@ extraModulePackages = []; }; + services.btrfs.autoScrub.enable = true; services.xserver.videoDrivers = ["amdgpu"]; networking = { + hostName = "nixos-pulse"; useDHCP = lib.mkDefault true; interfaces = { enp5s0f4u1u1c2 = { @@ -70,9 +80,21 @@ ACTION=="remove", KERNEL=="enp5s0f4u1u1c2", RUN+="${pkgs.systemd}/bin/systemctl stop network-addresses-enp5s0f4u1u1c2.service" ''; - nixpkgs.hostPlatform = lib.mkDefault system; + # energy saving stuff + powerManagement.powertop.enable = true; + systemd.services.powertop.postStart = '' + HIDDEVICES=$(ls /sys/bus/usb/drivers/usbhid | grep -oE '^[0-9]+-[0-9\.]+' | sort -u) + for i in $HIDDEVICES; do + echo -n "Enabling " | cat - /sys/bus/usb/devices/$i/product + echo 'on' > /sys/bus/usb/devices/$i/power/control + done + ''; hardware = { + tuxedo-control-center = { + enable = true; + package = inputs.tuxedo-nixos.packages.${system}.default; + }; opengl = { driSupport = true; driSupport32Bit = true; @@ -88,4 +110,6 @@ systemd.tmpfiles.rules = [ "L+ /opt/rocm/hip - - - - ${pkgs.hip}" ]; + + zramSwap.enable = true; } diff --git a/disko.nix b/systems/nixos-pulse/disko.nix similarity index 100% rename from disko.nix rename to systems/nixos-pulse/disko.nix diff --git a/users.nix b/users/default.nix similarity index 66% rename from users.nix rename to users/default.nix index 1124fdf..82cb352 100644 --- a/users.nix +++ b/users/default.nix @@ -14,10 +14,14 @@ hashedPassword = "$6$Wj.XY8JgH5EWuog4$HnbtPJXDEqKXFrzkPVEjih3PytcpBCrkfL7TAwkXd0IFced7kGMlZNliNsAqQ3XqfyUzAYiiKTIqoPVJEk.s.."; }; - home-manager.users.tristand = import ./home.nix { - inherit pkgs; - inherit config; - inherit inputs; - inherit system; + home-manager = { + useUserPackages = true; + useGlobalPkgs = true; + users.tristand = import ./tristand.nix { + inherit pkgs; + inherit config; + inherit inputs; + inherit system; + }; }; } diff --git a/home.nix b/users/tristand.nix similarity index 89% rename from home.nix rename to users/tristand.nix index b6247e7..706ad0a 100644 --- a/home.nix +++ b/users/tristand.nix @@ -12,10 +12,10 @@ wallpaperPath = "${wallpaper}/share/wallpapers/nixos-wallpaper.png"; in { imports = [ - ./home-mods/dev - ./home-mods/firefox - ./home-mods/plasma - ./home-mods/virt + ../home-mods/dev + ../home-mods/firefox + ../home-mods/plasma + ../home-mods/virt ]; home.file.".background".source = wallpaperPath;