summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbeeb5k <beebeeb5k@gmail.com>2026-03-06 18:33:36 +0530
committerbeeb5k <beebeeb5k@gmail.com>2026-03-06 18:33:36 +0530
commitf1de2014dcd426e015a2638222160d9d349ea4e5 (patch)
tree0dadefde6445c6075b767823969e6a51409c374c
Init
-rw-r--r--.gitignore2
-rw-r--r--flake.nix41
-rw-r--r--hosts/common.nix185
-rw-r--r--hosts/nixios/default.nix124
-rw-r--r--hosts/nixios/hardware-configuration.nix49
-rw-r--r--lib/importer.nix15
-rw-r--r--lib/mkFlakeOutputs.nix84
-rw-r--r--users/bee/default.nix26
-rw-r--r--users/common.nix86
9 files changed, 612 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ee0c388
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+*.qcow2
+result
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..72bb7e3
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,41 @@
+{
+ nixConfig = {
+ extra-substituters = [
+ "https://nix-community.cachix.org"
+ ];
+ extra-trusted-public-keys = [
+ "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
+ ];
+ };
+
+ inputs = {
+ flake-parts.url = "github:hercules-ci/flake-parts";
+ nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+ home-manager.url = "github:nix-community/home-manager";
+ home-manager.inputs.nixpkgs.follows = "nixpkgs";
+ };
+
+ outputs =
+ inputs@{ flake-parts, ... }:
+ flake-parts.lib.mkFlake { inherit inputs; } {
+ systems = inputs.nixpkgs.lib.platforms.all;
+
+ flake =
+ let
+ inherit (inputs) nixpkgs home-manager;
+
+ builders = import ./lib/mkFlakeOutputs.nix { inherit nixpkgs home-manager inputs; };
+ inherit (builders) mkSystemWithHM mkSystemWithHMasModule mkSystem;
+
+ merge = builtins.foldl' nixpkgs.lib.recursiveUpdate { };
+ in
+ merge [
+ (mkSystemWithHMasModule {
+ user = "bee";
+ hostname = "nixios";
+ system = "x86_64-linux";
+ systemState = "25.11";
+ })
+ ];
+ };
+}
diff --git a/hosts/common.nix b/hosts/common.nix
new file mode 100644
index 0000000..e6bc71d
--- /dev/null
+++ b/hosts/common.nix
@@ -0,0 +1,185 @@
+{ user }:
+{
+ pkgs,
+ inputs,
+ lib,
+ config,
+ ...
+}:
+{
+ nix.settings = {
+ trusted-users = [ "@wheel" ];
+ experimental-features = [
+ "nix-command"
+ "flakes"
+ ];
+ auto-optimise-store = true;
+ };
+
+ programs.nh = {
+ enable = true;
+ clean.enable = true;
+ clean.extraArgs = "--keep-since 4d --keep 2";
+ flake = "/home/${user}/beeSystems";
+ };
+
+ boot.loader = {
+ efi.canTouchEfiVariables = true;
+ timeout = 50;
+ grub = {
+ enable = true;
+ device = "nodev";
+ efiSupport = true;
+ useOSProber = true;
+ configurationLimit = 4;
+ theme = pkgs.fetchFromGitHub {
+ owner = "shvchk";
+ repo = "fallout-grub-theme";
+ rev = "80734103d0b48d724f0928e8082b6755bd3b2078";
+ sha256 = "sha256-7kvLfD6Nz4cEMrmCA9yq4enyqVyqiTkVZV5y4RyUatU=";
+ };
+ };
+ };
+
+ services.kanata = {
+ enable = true;
+ keyboards.default = {
+ extraDefCfg = "process-unmapped-keys yes";
+
+ config = ''
+ ;; Define the physical keys on your keyboard that we want to modify
+ (defsrc
+ esc caps rctrl f1
+ )
+
+ ;; Define custom actions (Aliases)
+ (defalias
+ ;; The smart key:
+ ;; - Tap: Sends Esc
+ ;; - Hold: Sends Left Control
+ ;; - "press": If you press another key while holding this, it triggers
+ ;; Left Control IMMEDIATELY (no lag). Perfect for Vim.
+ capesc (tap-hold-press 200 200 esc lctrl)
+
+ ;; Switches to toggle between layers
+ game (layer-switch gaming)
+ base (layer-switch base)
+ )
+
+ ;; 3. Base Layer (Typing Mode)
+ ;; - Physical Esc -> Caps Lock (Standard swap)
+ ;; - Physical Caps -> Esc (tap) / Ctrl (hold)
+ ;; - Physical RCtrl -> Switch to "Gaming Mode"
+ ;; - Physical F1 -> Normal F1 behavior
+ (deflayer base
+ caps @capesc @game f1
+ )
+
+ ;; 4. Gaming Layer (Gaming Mode)
+ ;; - Physical Esc -> Caps Lock (keeps light toggle working)
+ ;; - Physical Caps -> Left Ctrl (Pure Ctrl! Safe for crouching)
+ ;; - Physical RCtrl -> Switch back to "Typing Mode"
+ ;; - Physical F1 -> Escape (Your dedicated Pause button)
+ (deflayer gaming
+ caps lctrl @base esc
+ )
+ '';
+ };
+ };
+
+ time.timeZone = "Asia/Kolkata";
+ i18n.defaultLocale = "en_US.UTF-8";
+ i18n.extraLocaleSettings = {
+ LC_ADDRESS = "en_IN";
+ LC_IDENTIFICATION = "en_IN";
+ LC_MEASUREMENT = "en_IN";
+ LC_MONETARY = "en_IN";
+ LC_NAME = "en_IN";
+ LC_NUMERIC = "en_IN";
+ LC_PAPER = "en_IN";
+ LC_TELEPHONE = "en_IN";
+ LC_TIME = "en_IN";
+ };
+
+ services.displayManager.ly = {
+ enable = true;
+ settings = {
+ load = true;
+ save = true;
+ };
+ };
+
+ security.pam.services.ly.enableGnomeKeyring = true;
+ security.pam.services.login.enableGnomeKeyring = true;
+
+ nixpkgs.config.allowUnfree = true;
+ nix.registry.${user}.flake = inputs.self;
+ nix.registry.nixpkgs.flake = inputs.nixpkgs;
+
+ networking.networkmanager.wifi.powersave = false;
+ networking.networkmanager.enable = true;
+
+ hardware.bluetooth.enable = true;
+ hardware.bluetooth.powerOnBoot = false;
+ services.blueman.enable = false;
+
+ hardware.enableRedistributableFirmware = true;
+
+ services.libinput.enable = true;
+ services.libinput.touchpad = {
+ naturalScrolling = true;
+ disableWhileTyping = true;
+ };
+
+ services.xserver.xkb = {
+ layout = "us";
+ variant = "";
+ };
+
+ services.pipewire = {
+ enable = true;
+ alsa.enable = true;
+ alsa.support32Bit = true;
+ pulse.enable = true;
+ wireplumber.enable = true;
+ jack.enable = true;
+ };
+
+ security.rtkit.enable = true;
+ security.polkit.enable = true;
+
+ fonts.fontDir.enable = true;
+ fonts.packages = with pkgs; [
+ # maple-mono.NF
+ nerd-fonts.jetbrains-mono
+ ];
+ fonts.fontconfig.defaultFonts.monospace = [
+ "Ioskeley Mono"
+ "JetBrainsMono Nerd Fonts"
+ "Symbols Nerd Font"
+ ];
+ programs.fish.enable = true;
+ programs.nano.enable = false;
+ programs.gnupg.agent = {
+ enable = true;
+ enableSSHSupport = true;
+ };
+
+ services.upower.enable = true;
+ services.earlyoom.enable = false;
+ services.fwupd.enable = false;
+ services.gnome.gnome-keyring.enable = true;
+ services.power-profiles-daemon.enable = true;
+ services.printing.enable = false;
+ services.openssh.enable = true;
+ services.dbus.enable = true;
+
+ services.gvfs.enable = true;
+ services.udisks2.enable = true;
+
+ environment.systemPackages = with pkgs; [
+ android-tools
+ ];
+
+ users.defaultUserShell = pkgs.fish;
+}
diff --git a/hosts/nixios/default.nix b/hosts/nixios/default.nix
new file mode 100644
index 0000000..2f39cc5
--- /dev/null
+++ b/hosts/nixios/default.nix
@@ -0,0 +1,124 @@
+{
+ systemState,
+ user,
+ hostname,
+}:
+{
+ pkgs,
+ config,
+ inputs,
+ lib,
+ ...
+}:
+{
+ imports = [
+ ./hardware-configuration.nix
+ (import ../common.nix { inherit user; })
+ ];
+
+ # REMOVE LATER
+ virtualisation.vmVariant = {
+ users.users.${user}.password = "1";
+ users.users.root.password = "1";
+
+ virtualisation.memorySize = 4096;
+ virtualisation.cores = 4;
+ services.displayManager.ly.enable = lib.mkForce false;
+
+ services.getty.helpLine = ">> WELCOME <<";
+ services.getty.autologinUser = user;
+ };
+ # REMOVE LATER
+
+ boot.kernelPackages = pkgs.linuxPackages_zen;
+
+ programs.dconf.enable = true;
+ security.pam.services.swaylock = { };
+
+ xdg.portal = lib.mkForce {
+ enable = true;
+ extraPortals = [
+ pkgs.xdg-desktop-portal-gtk
+ pkgs.xdg-desktop-portal-wlr
+ ];
+ config = {
+ common = {
+ default = [ "gtk" ];
+ "org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ];
+ };
+ mango = {
+ "org.freedesktop.impl.portal.ScreenCast" = [ "wlr" ];
+ "org.freedesktop.impl.portal.Screenshot" = [ "wlr" ];
+ };
+ };
+ };
+
+ programs.gamemode.enable = config.programs.steam.enable;
+ programs.gamescope = {
+ enable = config.programs.steam.enable;
+ capSysNice = true;
+ };
+ programs.steam = {
+ enable = false;
+ gamescopeSession.enable = false;
+ remotePlay.openFirewall = true;
+ dedicatedServer.openFirewall = true;
+ localNetworkGameTransfers.openFirewall = true;
+ };
+
+ users.users.${user} = {
+ isNormalUser = true;
+ shell = pkgs.fish;
+ extraGroups = [
+ "networkmanager"
+ "wheel"
+ ];
+ };
+
+ environment.sessionVariables = { };
+
+ networking.hostName = hostname;
+ networking.firewall.allowedTCPPorts = [ ];
+ networking.firewall.allowedUDPPorts = [ ];
+ networking.firewall.enable = true;
+
+ environment.systemPackages = with pkgs; [
+ libva-utils
+ vulkan-tools
+ pciutils
+ direnv
+ mangohud
+ ];
+
+ services.xserver.videoDrivers = [ "nvidia" ];
+ hardware = {
+ graphics = {
+ enable = true;
+ enable32Bit = true;
+ extraPackages = with pkgs; [
+ libvdpau-va-gl
+ nvidia-vaapi-driver
+ ];
+ };
+
+ nvidia = {
+ modesetting.enable = true;
+ powerManagement.enable = true;
+ powerManagement.finegrained = true;
+ open = false;
+ nvidiaSettings = false;
+
+ prime = {
+ offload.enable = true;
+ offload.enableOffloadCmd = true;
+ offload.offloadCmdMainProgram = "prime-run";
+ nvidiaBusId = "PCI:1:0:0";
+ amdgpuBusId = "PCI:5:0:0";
+ };
+
+ package = config.boot.kernelPackages.nvidiaPackages.latest; # or stable
+ };
+ };
+
+ system.stateVersion = systemState; # check flake.nix
+}
diff --git a/hosts/nixios/hardware-configuration.nix b/hosts/nixios/hardware-configuration.nix
new file mode 100644
index 0000000..7e2a1c3
--- /dev/null
+++ b/hosts/nixios/hardware-configuration.nix
@@ -0,0 +1,49 @@
+# 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.
+
+# yes i did modify it.
+{
+ config,
+ lib,
+ pkgs,
+ modulesPath,
+ ...
+}:
+{
+ imports = [
+ (modulesPath + "/installer/scan/not-detected.nix")
+ ];
+
+ boot.initrd.availableKernelModules = [
+ "nvme"
+ "xhci_pci"
+ "usb_storage"
+ "usbhid"
+ "sd_mod"
+ ];
+ boot.initrd.kernelModules = [ ];
+ boot.kernelModules = [ "kvm-amd" ];
+ boot.extraModulePackages = [ ];
+
+ fileSystems."/" = {
+ device = "/dev/disk/by-label/NIXROOT";
+ fsType = "ext4";
+ };
+
+ fileSystems."/boot" = {
+ device = "/dev/disk/by-label/NIXBOOT";
+ fsType = "vfat";
+ options = [
+ "fmask=0022"
+ "dmask=0022"
+ ];
+ };
+
+ swapDevices = [
+ { device = "/dev/disk/by-label/NIXSWAP"; }
+ ];
+
+ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+ hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
+}
diff --git a/lib/importer.nix b/lib/importer.nix
new file mode 100644
index 0000000..d74d6c9
--- /dev/null
+++ b/lib/importer.nix
@@ -0,0 +1,15 @@
+lib: dir:
+let
+ nodes = builtins.readDir dir;
+
+ shouldImport =
+ name: type:
+ let
+ path = dir + "/${name}";
+ in
+ (type == "regular" && name != "default.nix" && lib.hasSuffix ".nix" name)
+ || (type == "directory" && builtins.pathExists (path + "/default.nix"));
+
+ validNodes = lib.filterAttrs shouldImport nodes;
+in
+map (name: dir + "/${name}") (builtins.attrNames validNodes)
diff --git a/lib/mkFlakeOutputs.nix b/lib/mkFlakeOutputs.nix
new file mode 100644
index 0000000..20952d3
--- /dev/null
+++ b/lib/mkFlakeOutputs.nix
@@ -0,0 +1,84 @@
+# lib/mkFlakeOutputs.nix
+#
+# Single file exposing all system/home builder functions.
+# Partially apply once in flake.nix with flake-level deps,
+# then call whichever helper you need.
+{
+ nixpkgs,
+ home-manager,
+ inputs,
+}:
+let
+ importer = import ./importer.nix nixpkgs.lib;
+
+ # Shared: build a NixOS system derivation
+ buildSystem =
+ { system, hostname, user, systemState }:
+ let
+ hostConfig = import ../hosts/${hostname} { inherit user systemState hostname; };
+ in
+ nixpkgs.lib.nixosSystem {
+ inherit system;
+ specialArgs = { inherit inputs user hostname systemState importer; };
+ modules = [ hostConfig ];
+ };
+
+ # Shared: build a standalone Home Manager derivation
+ buildHome =
+ { system, user, systemState }:
+ let
+ homeConfig = import ../users/${user} { inherit user systemState; };
+ pkgs = import nixpkgs {
+ inherit system;
+ config.allowUnfree = true;
+ };
+ in
+ home-manager.lib.homeManagerConfiguration {
+ inherit pkgs;
+ extraSpecialArgs = { inherit inputs importer; };
+ modules = [
+ homeConfig
+ # inputs.beeb5kvim.homeModules.default
+ ];
+ };
+in
+{
+ # NixOS + standalone Home Manager (two separate outputs)
+ mkSystemWithHM =
+ { system, hostname, user, systemState }:
+ {
+ nixosConfigurations.${hostname} = buildSystem { inherit system hostname user systemState; };
+ homeConfigurations.${user} = buildHome { inherit system user systemState; };
+ };
+
+ # NixOS with Home Manager as a NixOS module (single output, HM is baked in)
+ mkSystemWithHMasModule =
+ { system, hostname, user, systemState }:
+ let
+ hostConfig = import ../hosts/${hostname} { inherit user systemState hostname; };
+ homeConfig = import ../users/${user} { inherit user systemState; };
+ in
+ {
+ nixosConfigurations.${hostname} = nixpkgs.lib.nixosSystem {
+ inherit system;
+ specialArgs = { inherit inputs user hostname systemState importer; };
+ modules = [
+ hostConfig
+ home-manager.nixosModules.home-manager
+ {
+ home-manager.useGlobalPkgs = true;
+ home-manager.useUserPackages = true;
+ home-manager.extraSpecialArgs = { inherit inputs importer; };
+ home-manager.users.${user} = homeConfig;
+ }
+ ];
+ };
+ };
+
+ # NixOS only, no Home Manager at all
+ mkSystem =
+ { system, hostname, user, systemState }:
+ {
+ nixosConfigurations.${hostname} = buildSystem { inherit system hostname user systemState; };
+ };
+}
diff --git a/users/bee/default.nix b/users/bee/default.nix
new file mode 100644
index 0000000..47feacc
--- /dev/null
+++ b/users/bee/default.nix
@@ -0,0 +1,26 @@
+{
+ systemState,
+ user,
+}:
+{
+ pkgs,
+ lib,
+ inputs,
+ config,
+ ...
+}:
+{
+ imports = [
+ ../common.nix
+ ];
+
+ home.username = user;
+ home.homeDirectory = "/home/${user}";
+
+ home.sessionVariables = {
+ EDITOR = "vim";
+ };
+
+ programs.home-manager.enable = true;
+ home.stateVersion = systemState; # check flake.nix
+}
diff --git a/users/common.nix b/users/common.nix
new file mode 100644
index 0000000..c55187e
--- /dev/null
+++ b/users/common.nix
@@ -0,0 +1,86 @@
+{
+ pkgs,
+ config,
+ ...
+}:
+{
+ programs.git = {
+ enable = true;
+ package = pkgs.git.override { withLibsecret = true; };
+ settings = {
+ user = {
+ name = "beeb5k";
+ email = "beebeeb5k@gmail.com";
+ };
+ init.defaultBranch = "main";
+ credential.helper = "libsecret";
+ };
+ };
+
+ home.pointerCursor = {
+ size = 16;
+ enable = true;
+ x11.enable = true;
+ gtk.enable = true;
+ hyprcursor.size = 16;
+ dotIcons.enable = true;
+ hyprcursor.enable = true;
+ name = "material_light_cursors";
+ package = pkgs.material-cursors;
+ };
+
+ dconf.settings = {
+ "org/gnome/desktop/interface" = {
+ color-scheme = "prefer-dark";
+ };
+ "org/gnome/desktop/wm/preferences" = {
+ button-layout = "";
+ };
+ };
+
+ gtk = {
+ enable = true;
+ theme = {
+ package = pkgs.adw-gtk3;
+ name = "adw-gtk3";
+ };
+ iconTheme = {
+ name = "Adwaita";
+ package = pkgs.adwaita-icon-theme;
+ };
+ gtk3 = {
+ bookmarks = [
+ "file://${config.home.homeDirectory}/Downloads"
+ "file://${config.home.homeDirectory}/Pictures"
+ "file://${config.home.homeDirectory}/Documents"
+ "file://${config.home.homeDirectory}/Videos"
+ "file://${config.home.homeDirectory}/Music"
+ ];
+ extraConfig = {
+ gtk-cursor-blink = false;
+ gtk-recent-files-limit = 20;
+ gtk-decoration-layout = ":";
+ };
+ extraCss = ''
+ @import url("colors.css");
+ '';
+ };
+
+ gtk4 = {
+ extraConfig = {
+ gtk-cursor-blink = false;
+ gtk-recent-files-limit = 20;
+ gtk-decoration-layout = ":";
+ };
+ extraCss = ''
+ @import url("colors.css");
+ '';
+ };
+ };
+
+ xdg.dataFile."keyrings/default".text = "login";
+ xdg.userDirs = {
+ enable = true;
+ createDirectories = true;
+ };
+}