Created basic NixOS and home-manager flake
This commit is contained in:
parent
17687db113
commit
06e98520af
9 changed files with 420 additions and 0 deletions
49
flake.lock
generated
Normal file
49
flake.lock
generated
Normal file
|
@ -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
|
||||
}
|
50
flake.nix
Normal file
50
flake.nix
Normal file
|
@ -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 ];
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
}
|
||||
|
111
hosts/Orchid/configuration.nix
Normal file
111
hosts/Orchid/configuration.nix
Normal file
|
@ -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?
|
||||
|
||||
}
|
||||
|
21
hosts/Orchid/files/fish.fish
Normal file
21
hosts/Orchid/files/fish.fish
Normal file
|
@ -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
|
||||
|
63
hosts/Orchid/hardware-configuration.nix
Normal file
63
hosts/Orchid/hardware-configuration.nix
Normal file
|
@ -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;
|
||||
}
|
97
hosts/Orchid/home.nix
Normal file
97
hosts/Orchid/home.nix
Normal file
|
@ -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;
|
||||
}
|
11
hosts/default.nix
Normal file
11
hosts/default.nix
Normal file
|
@ -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
|
||||
];
|
||||
}
|
7
modules/nixos/gnome.nix
Normal file
7
modules/nixos/gnome.nix
Normal file
|
@ -0,0 +1,7 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
# Enables the GNOME DE and GDM DM
|
||||
services.displayManager.gdm.enable = true;
|
||||
services.desktopManager.gnome.enable = true;
|
||||
}
|
11
modules/nixos/kde.nix
Normal file
11
modules/nixos/kde.nix
Normal file
|
@ -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;
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue