diff --git a/configuration.nix b/configuration.nix deleted file mode 100644 index c5f191e..0000000 --- a/configuration.nix +++ /dev/null @@ -1,95 +0,0 @@ -{ config, lib, pkgs, ... }: - -{ - nix.settings.experimental-features = [ "nix-command" "flakes" ]; - - imports = - [ # Include the results of the hardware scan. - ./hardware-configuration.nix - ]; - - # Use the systemd-boot EFI boot loader. - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - - # Use latest kernel. - boot.kernelPackages = pkgs.linuxPackages_latest; - boot.kernelModules = [ "amdgpu" ]; - - networking.hostName = "crow"; # Define your hostname. - - # Configure network connections interactively with nmcli or nmtui. - networking.networkmanager.enable = true; - - # Set your time zone. - time.timeZone = "America/New_York"; - - users.defaultUserShell = pkgs.zsh; - - users.users.nest = { - isNormalUser = true; - extraGroups = [ "wheel" "network" ]; # Enable ‘sudo’ for the user. - - packages = with pkgs; [ - tree - ]; - }; - - programs.niri.enable = true; - programs.zsh.enable = true; - - environment.systemPackages = with pkgs; [ - neovim - wget - ]; - - # List services that you want to enable: - - # Enable the OpenSSH daemon. - services.openssh.enable = true; - - # Enable sound. - services.pipewire = { - enable = true; - pulse.enable = true; - }; - - # Enable touchpad support (enabled default in most desktopManager). - services.libinput.enable = true; - - services.getty.autologinUser = "nest"; - - services.displayManager = { - gdm.enable = true; - autoLogin = { - enable = true; - user = "nest"; - }; - }; - - # Open ports in the firewall. - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - # Or disable the firewall altogether. - # networking.firewall.enable = false; - - # This option defines the first version of NixOS you have installed on this particular machine, - # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions. - # - # Most users should NEVER change this value after the initial install, for any reason, - # even if you've upgraded your system to a new NixOS release. - # - # This value does NOT affect the Nixpkgs version your packages and OS are pulled from, - # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how - # to actually do that. - # - # This value being lower than the current NixOS release does NOT mean your system is - # out of date, out of support, or vulnerable. - # - # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration, - # and migrated your data accordingly. - # - # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . - system.stateVersion = "25.11"; # Did you read the comment? -} - diff --git a/flake.nix b/flake.nix index 3ef1d9f..5233fb8 100644 --- a/flake.nix +++ b/flake.nix @@ -10,21 +10,72 @@ }; }; - outputs = inputs@{ nixpkgs, home-manager, ... }: { - nixosConfigurations.crow = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - modules = [ - ./configuration.nix + outputs = { self, nixpkgs, ... }@inputs: + let + inherit (self) outputs; - home-manager.nixosModules.home-manager { - home-manager = { - useGlobalPkgs = true; - useUserPackages = true; - users.nest = import ./home.nix; - backupFileExtension = "backup"; - }; - } - ]; - }; + # Set the default user. Can be overitten on a system level + vars.user = "nest"; + + # List of system types our hosts use + systems = [ "x86_64-linux" ]; + + # Generic NixOS config + mkNixOSConfig = { + path, + extraModules ? [], + }: + nixpkgs.lib.nixosSystem { + specialArgs = { + inherit inputs outputs vars; + }; + + modules = [ + ./nixos/common + path + ] + ++ extraModules; + }; + + # Additional modules for physical hosts + mkPhysicalNixOSConfig = path: + mkNixOSConfig { + path = path; + extraModules = [ ./hosts/physical ]; + }; + + # Additional modules for servers + # mkServerNixOSConfig = path: serverType: + # mkNixOSConfig { + # path = path; + # extraModules = [ + # ./hosts/server + # ./nixos/roles/server/${serverType} + # ./nixos/modules/backup + # ]; + # }; + in { + # Format our nix files using alejandra + formatter = nixpkgs.lib.genAttrs systems (system: nixpkgs.legacyPackages.${system}.alejandra); + + # Collection of all of our configs + # =========== Desktops =========== + crow = mkPhysicalNixOSConfig ./hosts/physical/crow; + + # nixosConfigurations.crow = nixpkgs.lib.nixosSystem { + # system = "x86_64-linux"; + # modules = [ + # ./configuration.nix + + # home-manager.nixosModules.home-manager { + # home-manager = { + # useGlobalPkgs = true; + # useUserPackages = true; + # users.nest = import ./home.nix; + # backupFileExtension = "backup"; + # }; + # } + # ]; + # }; }; } diff --git a/home-manager/common/default.nix b/home-manager/common/default.nix new file mode 100644 index 0000000..57e2d3e --- /dev/null +++ b/home-manager/common/default.nix @@ -0,0 +1,25 @@ +{ + pkgs, + inputs, + vars, + ... +}: + +{ + home = { + username = "${vars.user}"; + homeDirectory = "/home/${vars.user}"; + }; + + home.packages = with pkgs; [ + lazygit + ]; + + programs.zsh = { + shellAliases = { + lg = "lazygit"; + }; + }; + + home.stateVersion = "26.05"; +} diff --git a/home-manager/roles/desktop/common/apps/default.nix b/home-manager/roles/desktop/common/apps/default.nix new file mode 100644 index 0000000..20e6350 --- /dev/null +++ b/home-manager/roles/desktop/common/apps/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./librewolf.nix + ./minecraft.nix + ]; +} diff --git a/home-manager/roles/desktop/common/apps/librewolf.nix b/home-manager/roles/desktop/common/apps/librewolf.nix new file mode 100644 index 0000000..bc35081 --- /dev/null +++ b/home-manager/roles/desktop/common/apps/librewolf.nix @@ -0,0 +1,80 @@ +{ pkgs, vars, ... }: + + +{ + programs.librewolf = { + enable = true; + policies = { + OfferToSaveLogins = false; + PasswordManagerEnabled = false; + DisplayBookmarksToolbar = true; + NoDefaultBookmarks = true; + }; + + profiles."${vars.user}" = { + search = { + force = true; + engines = { + "Nix Packages" = { + urls = [ + { + template = "https://search.nixos.org/packages?channel=unstable"; + params = [ + { + name = "type"; + value = "packages"; + } + { + name = "query"; + value = "{searchTerms}"; + } + ]; + } + ]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = ["@np"]; + }; + "Nix Options" = { + urls = [ + { + template = "https://search.nixos.org/options?channel=unstable"; + params = [ + { + name = "sort"; + value = "alpha_asc"; + } + { + name = "query"; + value = "{searchTerms}"; + } + ]; + } + ]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = ["@no"]; + }; + "NixOS Wiki" = { + urls = [ + { + template = "https://wiki.nixos.org/w/index.php?search={searchTerms}"; + } + ]; + icon = "https://nixos.wiki/favicon.png"; + updateInterval = 24 * 60 * 60 * 1000; + definedAliases = ["@nw"]; + }; + "Home Manager Options" = { + urls = [{template = "https://home-manager-options.extranix.com/?query={searchTerms}&release=master";}]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = ["@hm"]; + }; + "wikipedia".metaData.alias = "@wiki"; + "google".metaData.hidden = true; + "amazondotcom-us".metaData.hidden = true; + "bing".metaData.hidden = true; + "ebay".metaData.hidden = true; + }; + }; + }; + }; +} diff --git a/home-manager/roles/desktop/common/apps/minecraft.nix b/home-manager/roles/desktop/common/apps/minecraft.nix new file mode 100644 index 0000000..ceb08cd --- /dev/null +++ b/home-manager/roles/desktop/common/apps/minecraft.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: + +{ + home.packages = with pkgs; [ + prismlauncher + ]; +} diff --git a/home-manager/roles/desktop/common/default.nix b/home-manager/roles/desktop/common/default.nix new file mode 100644 index 0000000..8c91202 --- /dev/null +++ b/home-manager/roles/desktop/common/default.nix @@ -0,0 +1,10 @@ +{ + imports = [ + ./apps + ]; + + # Setup user profile pic + home.file.".face" = { + source = ./nest.webp; + }; +} diff --git a/home-manager/roles/desktop/common/nest.webp b/home-manager/roles/desktop/common/nest.webp new file mode 100644 index 0000000..c9052d1 Binary files /dev/null and b/home-manager/roles/desktop/common/nest.webp differ diff --git a/home-manager/roles/desktop/niri/default.nix b/home-manager/roles/desktop/niri/default.nix new file mode 100644 index 0000000..fd96b1d --- /dev/null +++ b/home-manager/roles/desktop/niri/default.nix @@ -0,0 +1,22 @@ +{ pkgs, ... }: + +{ + imports = [ + ../common/apps + ]; + + programs.niri.enable = true; + + programs.zsh = { + profileExtra = '' + if [ -z "$WAYLAND_DISPLAY" ] && [ "$XDG_VTNR" = 1 ]; then + exec gdm + fi + ''; + }; + + home.package = with pkgs; [ + swaybg + mako + ]; +} diff --git a/home-manager/roles/personal/default.nix b/home-manager/roles/personal/default.nix new file mode 100644 index 0000000..f213d01 --- /dev/null +++ b/home-manager/roles/personal/default.nix @@ -0,0 +1,15 @@ +{ + pkgs, + ... +}: + +{ + programs.git = { + enable = true; + userName = "KnightArtorias"; + userEmail = "booksandpi@gmail.com"; + extraConfig = { + init.defaultBranch = "main"; + }; + }; +} diff --git a/home.nix b/home.nix deleted file mode 100644 index 365be73..0000000 --- a/home.nix +++ /dev/null @@ -1,72 +0,0 @@ -{ config, pkgs, ... }: - -{ - # ============ Home-Manager ============= - - home.username = "nest"; - home.homeDirectory = "/home/nest"; - - home.stateVersion = "26.05"; - - # ======================================= - - # ================ Programs ============= - - programs.git = { - enable = true; - settings = { - user = { - name = "nest"; - email = "booksandpi@gmail.com"; - }; - }; - }; - - programs.zsh = { - enable = true; - enableCompletion = true; - autosuggestion.enable = true; - syntaxHighlighting.enable = true; - history.size = 10000; - - shellAliases = { - ll = "ls -la"; - update = "sudo nixos-rebuild --flake $HOME/.nix#crow"; - }; - - profileExtra = '' - if [-z "$WAYLAND_DISPLAY" ] && [ "$XDG_VTNR" = 1 ]; then - exec gdm - fi - ''; - - oh-my-zsh = { - enable = true; - plugins = [ "git" ]; - }; - }; - - programs.alacritty.enable = true; - programs.rofi.enable = true; - programs.swaylock.enable = true; - programs.quickshell.enable = true; - programs.librewolf.enable = true; - - # ====================================== - - # ============== Services ============== - - services.swayidle.enable = true; - services.polkit-gnome.enable = true; - - # ====================================== - - # ============ Packages ================ - - home.packages = with pkgs; [ - swaybg - mako - ]; - - # ====================================== -} diff --git a/hosts/physical/crow/default.nix b/hosts/physical/crow/default.nix new file mode 100644 index 0000000..f409832 --- /dev/null +++ b/hosts/physical/crow/default.nix @@ -0,0 +1,25 @@ +{ + vars, + inputs, + ... +}: + +{ + imports = [ + ./hardware-configuration.nix + ./system-configuration.nix + ../default.nix + + ../../../nixos/roles/physical/desktop/niri + ]; + + home-manager = { + users.${vars.user}.imports = [ + ../../../home-manager/common + ../../../home-manager/roles/personal + ../../../home-manager/roles/desktop/niri + ]; + }; + + networking.hostName = "crow"; +} diff --git a/hardware-configuration.nix b/hosts/physical/crow/hardware-configuration.nix similarity index 100% rename from hardware-configuration.nix rename to hosts/physical/crow/hardware-configuration.nix diff --git a/hosts/physical/crow/system-configuration.nix b/hosts/physical/crow/system-configuration.nix new file mode 100644 index 0000000..10d8cf2 --- /dev/null +++ b/hosts/physical/crow/system-configuration.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, ... }: + +{ + # Use the systemd-boot EFI boot loader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.loader.timeout = 1; + + # Use latest kernel + boot.kernelPackages = pkgs.linuxPackages_latest; + boot.kernelModules = [ "amdgpu" ]; + + system.stateVersion = "26.05"; +} + diff --git a/hosts/physical/default.nix b/hosts/physical/default.nix new file mode 100644 index 0000000..6e0e226 --- /dev/null +++ b/hosts/physical/default.nix @@ -0,0 +1,56 @@ +{ + pkgs, + inputs, + vars, + ... +}: + +{ + imports = [ + inputs.home-manager.nixosModules.home-manager + ../../nixos/modules/home-manager.nix + ]; + + # Enable networking + networking.networkmanager.enable = true; + + environment.systemPackages = with pkgs; [ + neovim + wget + ]; + + services.openssh.enable = true; + services.getty.autologinUser = "${vars.user}"; + + boot = { + # Fun boot spinny! + plymouth = { + enable = true; + theme = "circle_flow"; + themePackages = with pkgs; [ + (adi1090x-plymouth-themese.override { + selected_themes = [ + "cirlce_flow" + "colorful" + "colorful_slices" + "double" + "polaroid" + ]; + }) + ]; + }; + + # "Silent" boot + console.LogLevel = 0; + initrd.verbose = false; + kernelParams = [ + "quiet" + "splash" + "boot.shell_on_fail" + "loglevel=3" + "rd.systemd.show_status=false" + "rd.udev.log_level=3" + "udev.log_priority=3" + ]; + }; +} diff --git a/nixos/common/default.nix b/nixos/common/default.nix new file mode 100644 index 0000000..7ba497d --- /dev/null +++ b/nixos/common/default.nix @@ -0,0 +1,23 @@ +{ + inputs, + pkgs, + vars, + ... +}: + +{ + imports= [ + ../../users/${vars.user}.nix + ../modules/zsh.nix + ]; + + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + + enviroment.systemPackages = with pkgs; [ + tree + htop + dig + traceroute + ]; +} + diff --git a/nixos/modules/home-manager.nix b/nixos/modules/home-manager.nix new file mode 100644 index 0000000..4361e74 --- /dev/null +++ b/nixos/modules/home-manager.nix @@ -0,0 +1,22 @@ +{ + inputs, + vars, + ... +}: + +{ + home-manager = { + backupFileExtension = "backup"; + extraSpecialArgs = { + inherit inputs vars; + }; + + useGlobalPackages = true; + useUserPackages = true; + + # Common home-manager imports + users.${vars.user}.imports = [ + ../../home-manager/common + ]; + }; +} diff --git a/nixos/modules/zsh.nix b/nixos/modules/zsh.nix new file mode 100644 index 0000000..8ff687a --- /dev/null +++ b/nixos/modules/zsh.nix @@ -0,0 +1,40 @@ +{ + pgks, + ... +}: + +{ + environment.systemPackage = with pkgs; [ + zsh + oh-my-zsh + ]; + + enviroment.variables = { + NIX_FLAKE_PATH = "/etc/nixos"; + }; + + programs.zsh = { + enable = true; + enableBashCompletion = true; + enableConpletion = true; + autosuggestions.enable = true; + history.append = true; + history.size = 10000; + + ohMyZsh = { + enable = true; + theme = "bira"; + plugins = [ + sudo + git + ]; + }; + + shellAliases = { + ll = "ls -la"; + update = "sudo nixos-rebuild switch --flake $NIX_FLAKE_PATH"; + }; + }; + + users.defaultUserShell = pkgs.zsh; +} diff --git a/nixos/roles/physical/desktop/niri/default.nix b/nixos/roles/physical/desktop/niri/default.nix new file mode 100644 index 0000000..42ac2b4 --- /dev/null +++ b/nixos/roles/physical/desktop/niri/default.nix @@ -0,0 +1,11 @@ +{ vars, pkgs, ... }: { + security.polkit.enable = true; + + services.displayManager = { + gdm.enable = true; + autoLogin = { + enable = true; + user = "${vars.user}"; + }; + }; +} diff --git a/users/nest.nix b/users/nest.nix new file mode 100644 index 0000000..8313231 --- /dev/null +++ b/users/nest.nix @@ -0,0 +1,14 @@ +{ + config, + lib, + ... +}: + +{ + users.users.nest = { + description = "nest"; + isNormalUser = true; + extraGroups = [ "wheel" "network" ]; + }; +} +