From f1de2014dcd426e015a2638222160d9d349ea4e5 Mon Sep 17 00:00:00 2001 From: beeb5k Date: Fri, 6 Mar 2026 18:33:36 +0530 Subject: Init --- .gitignore | 2 + flake.nix | 41 +++++++ hosts/common.nix | 185 ++++++++++++++++++++++++++++++++ hosts/nixios/default.nix | 124 +++++++++++++++++++++ hosts/nixios/hardware-configuration.nix | 49 +++++++++ lib/importer.nix | 15 +++ lib/mkFlakeOutputs.nix | 84 +++++++++++++++ users/bee/default.nix | 26 +++++ users/common.nix | 86 +++++++++++++++ 9 files changed, 612 insertions(+) create mode 100644 .gitignore create mode 100644 flake.nix create mode 100644 hosts/common.nix create mode 100644 hosts/nixios/default.nix create mode 100644 hosts/nixios/hardware-configuration.nix create mode 100644 lib/importer.nix create mode 100644 lib/mkFlakeOutputs.nix create mode 100644 users/bee/default.nix create mode 100644 users/common.nix 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; + }; +} -- cgit v1.3.1