diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..03bbcf1 --- /dev/null +++ b/flake.lock @@ -0,0 +1,49 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1756679287, + "narHash": "sha256-Xd1vOeY9ccDf5VtVK12yM0FS6qqvfUop8UQlxEB+gTQ=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "07fc025fe10487dd80f2ec694f1cd790e752d0e8", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-25.05", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1756617294, + "narHash": "sha256-aGnd4AHIYCWQKChAkHPpX+YYCt7pA6y2LFFA/s8q0wQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b4c2c57c31e68544982226d07e4719a2d86302a8", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.05", + "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..1ebcfb2 --- /dev/null +++ b/flake.nix @@ -0,0 +1,50 @@ +{ + description = "Bo's NixOS flake :]"; + + inputs = { + # This flake is currently set to use the latest stable branche of nixpkgs, this being 25.05 + # Use `nix flake update` to update to the latest commit on the branche given below + nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05"; + + # Use home-manager and make home-manager pull its packages from nixpkgs (input entered above) + home-manager = { + url = "github:nix-community/home-manager/release-25.05"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = inputs@{ self, nixpkgs, ... }: { + nixosConfigurations = { + + # Orchid is the name given for workstation installs + # Use `nixos-rebuild switch --flake .#Orchid` to build for this configuration + Orchid = nixpkgs.lib.nixosSystem { + modules = + [ + ./hosts/default.nix # Global default configuration + ./hosts/Orchid/configuration.nix # Machine-specific configuration + + # Other modules + ./modules/nixos/kde.nix + #./modules/nixos/gnome.nixlib + + # Imports home-manager + inputs.home-manager.nixosModules.default { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + + home-manager.users.bo = import ./hosts/Orchid/home.nix; + } + ]; + }; + + # Moonlight is the name given for server installs + # Use `nixos-rebuild switch --flake .#Moonlight` to build for this configuration + Neptune = { + modules = [ ./hosts/Moonlight/configuration.nix ]; + }; + + }; + }; +} + diff --git a/hosts/Orchid/configuration.nix b/hosts/Orchid/configuration.nix new file mode 100644 index 0000000..1795e88 --- /dev/null +++ b/hosts/Orchid/configuration.nix @@ -0,0 +1,111 @@ +{ config, pkgs, inputs, ... }: + +{ + imports = + [ + ./hardware-configuration.nix + ]; + + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + + # Enables the systemd bootloader + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + # We'll be using the latest kernel (who needs reliability anyway?) :3 + boot.kernelPackages = pkgs.linuxPackages_latest; + + # Enables NetworkManager + networking.networkmanager.enable = true; + # Sets the hostname (the name of your computer) + networking.hostName = "Orchid"; + # Uncomment this to add firewall exceptions + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or uncomment this to disable the firewall all together (don't do it) + # networking.firewall.enable = false; + + # Sets the timezone + time.timeZone = "Europe/Amsterdam"; + + # Sets some default localization + i18n.defaultLocale = "en_US.UTF-8"; + console = { + font = "Lat2-Terminus16"; + useXkbConfig = true; + }; + + services.xserver = { + xkb.layout = "us"; + xkb.variant = "intl"; + #xkb.options = "grp:win_space_toggle"; + }; + + # Enables printing suport through CUPS + services.printing.enable = true; + + # Enables bluetooth + hardware.bluetooth.enable = true; + + # Enables sound through pipewire + services.pipewire = { + enable = true; + pulse.enable = true; + }; + + # Enables the GPG agent + programs.gnupg.agent = { + enable = true; + enableSSHSupport = true; + }; + + # Uncomment this to enable the openssh daemon + # services.openssh.enable = true; + + # Adds core GUI apps available to everyone + environment.systemPackages = with pkgs; [ + firefox + ]; + + # Enables Docker support + virtualisation.docker.enable = true; + # Comment if you're not using btrfs + virtualisation.docker.storageDriver = "btrfs"; + + # ====================== + # USER SPECIFIC SETTINGS + # ====================== + + # Enables fish as my shell :3 + programs.fish.enable = true; + + # Sets up syncthing for Library syncthing + #services.syncthing = { + # enable = true; + # user = "bo"; + #}; + + # Don't forget to set a password with ‘passwd’ + users.users.bo = { + isNormalUser = true; + description = "Bo Jordans"; + home = "/home/bo"; + initialPassword = "meow"; + extraGroups = [ "docker" "wheel" ]; # Enable ‘sudo’ for the user + shell = pkgs.fish; + openssh.authorizedKeys.keys = [ + + ]; + }; + + # ==================== + # END OF USER SETTINGS + # ==================== + + # DO NOT CHANGE THIS VALUE + # This value does not change the branche your system is on, to do that please check flake.nix + # This value just indicates which version the config file was originally made for + system.stateVersion = "25.05"; # Did you read the comment? + +} + diff --git a/hosts/Orchid/files/fish.fish b/hosts/Orchid/files/fish.fish new file mode 100644 index 0000000..8a3c193 --- /dev/null +++ b/hosts/Orchid/files/fish.fish @@ -0,0 +1,21 @@ +function fish_greeting + if not set -q fish_greeting + set -l line1 (_ ':3') + set -g fish_greeting "$line1" + end + + if set -q fish_private_mode + set -l line (_ "fish is running in private mode, history will not be persisted.") + if set -q fish_greeting[1] + set -g fish_greeting $fish_greeting\n$line + else + set -g fish_greeting $line + end + end + + # The greeting used to be skipped when fish_greeting was empty (not just undefined) + # Keep it that way to not print superfluous newlines on old configuration + test -n "$fish_greeting" + and echo $fish_greeting +end + diff --git a/hosts/Orchid/hardware-configuration.nix b/hosts/Orchid/hardware-configuration.nix new file mode 100644 index 0000000..c419ac0 --- /dev/null +++ b/hosts/Orchid/hardware-configuration.nix @@ -0,0 +1,63 @@ +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + # Import kernel modules + boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usb_storage" "sd_mod" "sdhci_pci" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + # Partition map for Orchid + #NAME SIZE TYPE MOUNTPOINTS LABEL FILESYSTEM + #sda 238.5G disk + #├─sda1 512M part /boot BOOT vfat + #└─sda2 REST part NixOS luks2 + # └─Orchid REST crypt / Orchid btrfs + # /nix + # /home + + # Label of the luks2 partition + boot.initrd.luks.devices."Orchid".device = "/dev/disk/by-label/NixOS"; + + # Declares all filesystems + fileSystems."/" = + { device = "/dev/disk/by-label/Orchid"; + fsType = "btrfs"; + options = [ "subvol=root" ]; + }; + + fileSystems."/home" = + { device = "/dev/disk/by-label/Orchid"; + fsType = "btrfs"; + options = [ "subvol=home" ]; + }; + + fileSystems."/nix" = + { device = "/dev/disk/by-label/Orchid"; + fsType = "btrfs"; + options = [ "subvol=nix" ]; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-label/BOOT"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + # You can declare swap devices down below + swapDevices = [ ]; + + # This option enables DHCP for all interfaces + # It is recommended to declare this for each individual interface, but it shouldn't hurt keeping it like this + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.eno1.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true; + + # Declare the default host platform and microcode for intel cpus (amd is missing!) + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/Orchid/home.nix b/hosts/Orchid/home.nix new file mode 100644 index 0000000..da50d3b --- /dev/null +++ b/hosts/Orchid/home.nix @@ -0,0 +1,97 @@ +{ config, pkgs, lib, ... }: + +let + catppuccin-fish = pkgs.fetchFromGitHub { + owner = "catppuccin"; + repo = "fish"; + rev = "6a85af2ff722ad0f9fbc8424ea0a5c454661dfed"; + sha256 = "1h0nn1kg1vs0xilmai5haw42sm7wfs0b6jq2xpaq48qlfad1xk9r"; + }; +in +{ + # Home Manager needs a bit of information about you and the paths it should + # manage. + home.username = "bo"; + home.homeDirectory = "/home/bo"; + + # The home.packages option allows you to install Nix packages into your + # environment. + home.packages = with pkgs; [ + # # Adds the 'hello' command to your environment. It prints a friendly + # # "Hello, world!" when run. + # pkgs.hello + + # # It is sometimes useful to fine-tune packages, for example, by applying + # # overrides. You can do that directly here, just don't forget the + # # parentheses. Maybe you want to install Nerd Fonts with a limited number of + # # fonts? + # (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; }) + + # # You can also create simple shell scripts directly inside your + # # configuration. For example, this adds a command 'my-hello' to your + # # environment: + # (pkgs.writeShellScriptBin "my-hello" '' + # echo "Hello, ${config.home.username}!" + # '') + + vlc + krita + gimp + kdePackages.kdenlive + + hyfetch + fastfetch + htop + btop + ]; + + # Enables the GPG agent + services.gpg-agent = { + enable = true; + defaultCacheTtl = 1800; + enableSshSupport = true; + }; + + # Enables git and enters name and email + programs.git = { + enable = true; + userName = "Bo Jordans"; + userEmail = "bojordans@pixelated.sh"; + }; + + # Enables fish as my shell :3 + programs.fish.enable = true; + + # Here you declare your dotfiles and where they need to go + + home.file = { + # # Building this configuration will create a copy of 'dotfiles/screenrc' in + # # the Nix store. Activating the configuration will then make '~/.screenrc' a + # # symlink to the Nix store copy. + # ".screenrc".source = dotfiles/screenrc; + + # # You can also set the file content immediately. + # ".gradle/gradle.properties".text = '' + # org.gradle.console=verbose + # org.gradle.daemon.idletimeout=3600000 + # ''; + ".config/fish/themes/Catppuccin Frappe.theme".source = "${catppuccin-fish}/themes/Catppuccin Frappe.theme"; + }; + + # Here you set all variables for your shell :] + home.sessionVariables = { + EDITOR = "vim"; + }; + + # This value determines the Home Manager release that your configuration is + # compatible with. This helps avoid breakage when a new Home Manager release + # introduces backwards incompatible changes. + # + # You should not change this value, even if you update Home Manager. If you do + # want to update the value, then make sure to first check the Home Manager + # release notes. + home.stateVersion = "25.05"; # Please read the comment before changing. + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; +} diff --git a/hosts/default.nix b/hosts/default.nix new file mode 100644 index 0000000..ce32213 --- /dev/null +++ b/hosts/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, ... }: + +{ + # List of basic packages to be installed system wide + # Use https://search.nixos.org/ to find more packages (and options) + environment.systemPackages = with pkgs; [ + vim + wget + htop + ]; +} diff --git a/modules/nixos/gnome.nix b/modules/nixos/gnome.nix new file mode 100644 index 0000000..df411d6 --- /dev/null +++ b/modules/nixos/gnome.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: + +{ + # Enables the GNOME DE and GDM DM + services.displayManager.gdm.enable = true; + services.desktopManager.gnome.enable = true; +} diff --git a/modules/nixos/kde.nix b/modules/nixos/kde.nix new file mode 100644 index 0000000..ccbb1cb --- /dev/null +++ b/modules/nixos/kde.nix @@ -0,0 +1,11 @@ +{ pkgs, ... }: + +{ + # Enables the Plasma 6 DE and the SDDM DM with Wayland + services.desktopManager.plasma6.enable = true; + services.displayManager.sddm = { + enable = true; + wayland.enable = true; + enableHidpi = true; + }; +}