From 168633cf0702a3f972f910e6172b882f36165dfc Mon Sep 17 00:00:00 2001 From: Semere Meharena Mebrahtom Date: Sat, 18 Jul 2026 19:21:16 +0200 Subject: [PATCH] initial dendritic migration --- flake.nix | 25 +++-- home/him.nix | 41 -------- hosts/nabro/configuration.nix | 19 ++++ hosts/{sys => nabro}/dwl-config.h | 0 .../{sys => nabro}/hardware-configuration.nix | 0 hosts/sys/configuration.nix | 93 ------------------- modules/core.nix | 36 +++++++ modules/default.nix | 11 +++ modules/desktop.nix | 53 +++++++++++ modules/dev.nix | 25 +++++ modules/shell.nix | 72 ++++++++++++++ modules/user.nix | 26 ++++++ 12 files changed, 254 insertions(+), 147 deletions(-) delete mode 100644 home/him.nix create mode 100644 hosts/nabro/configuration.nix rename hosts/{sys => nabro}/dwl-config.h (100%) rename hosts/{sys => nabro}/hardware-configuration.nix (100%) delete mode 100644 hosts/sys/configuration.nix create mode 100644 modules/core.nix create mode 100644 modules/default.nix create mode 100644 modules/desktop.nix create mode 100644 modules/dev.nix create mode 100644 modules/shell.nix create mode 100644 modules/user.nix diff --git a/flake.nix b/flake.nix index f998f81..da5dfc4 100644 --- a/flake.nix +++ b/flake.nix @@ -18,24 +18,23 @@ in { nixosConfigurations = { - sys = lib.nixosSystem { + nabro = lib.nixosSystem { system = "x86_64-linux"; modules = [ - ./hosts/sys/configuration.nix - ./hosts/sys/hardware-configuration.nix + ./hosts/nabro/configuration.nix - home-manager.nixosModules.home-manager - { - home-manager = { - useGlobalPkgs = true; - useUserPackages = true; + home-manager.nixosModules.home-manager + { + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; - users.him = import ./home/him.nix; - backupFileExtension = "backup"; - }; - } - ]; + + backupFileExtension = "backup"; + }; + } + ]; }; }; }; diff --git a/home/him.nix b/home/him.nix deleted file mode 100644 index 1b9e271..0000000 --- a/home/him.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ config, pkgs, ... }: -{ - home.username = "him"; - home.homeDirectory = "/home/him"; - home.stateVersion = "26.05"; - - programs.git = { - enable = true; - settings = { - user = { - name = "Semere M. Mebrahtom"; - email = "semere.meharena1@gmail.com"; - }; - commit.gpgsign = true; - gpg.program = "gpg"; - }; - signing = { - key = "451054EEC0D2AFD1741D4E6A7FC937214DF30488"; - signByDefault = true; - }; - }; - - services.gpg-agent = { - enable = true; - defaultCacheTtl = 1800; - enableSshSupport = true; - pinentry.package = pkgs.pinentry-curses; - }; - - programs.bash = { - enable = true; - shellAliases = { - ll = "ls -lha"; - }; - }; - - programs.fzf = { - enable = true; - enableBashIntegration = true; - }; -} diff --git a/hosts/nabro/configuration.nix b/hosts/nabro/configuration.nix new file mode 100644 index 0000000..daed822 --- /dev/null +++ b/hosts/nabro/configuration.nix @@ -0,0 +1,19 @@ +{ config, lib, pkgs, ... }: + +{ + imports = [ + ./hardware-configuration.nix + ../../modules + ]; + + networking.hostName = "nabro"; + + # Enable host-specific feature branches (dendrites) + dotfiles = { + core.enable = true; + user.enable = true; + desktop.enable = true; + dev.enable = true; + shell.enable = true; + }; +} diff --git a/hosts/sys/dwl-config.h b/hosts/nabro/dwl-config.h similarity index 100% rename from hosts/sys/dwl-config.h rename to hosts/nabro/dwl-config.h diff --git a/hosts/sys/hardware-configuration.nix b/hosts/nabro/hardware-configuration.nix similarity index 100% rename from hosts/sys/hardware-configuration.nix rename to hosts/nabro/hardware-configuration.nix diff --git a/hosts/sys/configuration.nix b/hosts/sys/configuration.nix deleted file mode 100644 index a29a021..0000000 --- a/hosts/sys/configuration.nix +++ /dev/null @@ -1,93 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: - -{ - imports = [ - ./hardware-configuration.nix - ]; - - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - - boot.kernelPackages = pkgs.linuxPackages_latest; - - networking.hostName = "sys"; - - networking.networkmanager.enable = true; - - services.power-profiles-daemon.enable = true; - - services.pipewire = { - enable = true; - pulse.enable = true; - alsa.enable = true; - jack.enable = true; - }; - - time.timeZone = "Europe/Berlin"; - users.users.him = { - isNormalUser = true; - extraGroups = [ - "wheel" - "networkmanager" - ]; - }; - - environment.systemPackages = with pkgs; [ - pamixer - brightnessctl - wl-clipboard - - gcc - gnumake - clang-tools - lldb - python3 - uv - ruff - ty - - nil - nixd - - git - wget - tree - tealdeer - gnupg - pass - p7zip - wmenu - fnott - - btop - helix - foot - firefox - tor-browser - ]; - - fonts.packages = with pkgs; [ - nerd-fonts.jetbrains-mono - ]; - - programs.dwl.enable = true; - programs.dwl.package = pkgs.dwl.override { - configH = ./dwl-config.h; - }; - - hardware.graphics.enable = true; - security.polkit.enable = true; - - nix.settings.experimental-features = [ - "nix-command" - "flakes" - ]; - - system.stateVersion = "26.05"; - -} diff --git a/modules/core.nix b/modules/core.nix new file mode 100644 index 0000000..9050a4f --- /dev/null +++ b/modules/core.nix @@ -0,0 +1,36 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.dotfiles.core; +in +{ + options.dotfiles.core = { + enable = lib.mkEnableOption "Core system configuration"; + }; + + config = lib.mkIf cfg.enable { + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.kernelPackages = pkgs.linuxPackages_latest; + + time.timeZone = "Europe/Berlin"; + + networking.networkmanager.enable = true; + + services.power-profiles-daemon.enable = true; + + nix = { + settings = { + experimental-features = [ "nix-command" "flakes" ]; + auto-optimise-store = true; + }; + gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 7d"; + }; + }; + + system.stateVersion = "26.05"; + }; +} diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..a05cbc2 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,11 @@ +{ config, lib, pkgs, ... }: + +{ + imports = [ + ./core.nix + ./user.nix + ./desktop.nix + ./dev.nix + ./shell.nix + ]; +} diff --git a/modules/desktop.nix b/modules/desktop.nix new file mode 100644 index 0000000..5045153 --- /dev/null +++ b/modules/desktop.nix @@ -0,0 +1,53 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.dotfiles.desktop; +in +{ + options.dotfiles.desktop = { + enable = lib.mkEnableOption "Graphical desktop environment (DWL)"; + }; + + config = lib.mkIf cfg.enable { + programs.dwl.enable = true; + programs.dwl.package = pkgs.dwl.override { + configH = ../hosts/nabro/dwl-config.h; + }; + + services.pipewire = { + enable = true; + pulse.enable = true; + alsa.enable = true; + jack.enable = true; + }; + + fonts.packages = with pkgs; [ + nerd-fonts.jetbrains-mono + ]; + + hardware.graphics.enable = true; + security.polkit.enable = true; + + environment.systemPackages = with pkgs; [ + pamixer + brightnessctl + wl-clipboard + wmenu + fnott + foot + firefox + tor-browser + ]; + + home-manager.users.semere = { + programs.foot = { + enable = true; + settings = { + main = { + font = "JetBrainsMono Nerd Font:size=11"; + }; + }; + }; + }; + }; +} diff --git a/modules/dev.nix b/modules/dev.nix new file mode 100644 index 0000000..4a2cc0b --- /dev/null +++ b/modules/dev.nix @@ -0,0 +1,25 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.dotfiles.dev; +in +{ + options.dotfiles.dev = { + enable = lib.mkEnableOption "Development tools and language servers"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + gcc + gnumake + clang-tools + lldb + python3 + uv + ruff + ty + nil + nixd + ]; + }; +} diff --git a/modules/shell.nix b/modules/shell.nix new file mode 100644 index 0000000..890be70 --- /dev/null +++ b/modules/shell.nix @@ -0,0 +1,72 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.dotfiles.shell; +in +{ + options.dotfiles.shell = { + enable = lib.mkEnableOption "Shell, Git, GPG, and CLI environment"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + git + wget + tree + tealdeer + gnupg + pass + p7zip + btop + helix + opencode + ]; + + home-manager.users.semere = { + programs.git = { + enable = true; + settings = { + user = { + name = "Semere M. Mebrahtom"; + email = "semere.meharena1@gmail.com"; + }; + commit.gpgsign = true; + gpg.program = "gpg"; + }; + signing = { + key = "451054EEC0D2AFD1741D4E6A7FC937214DF30488"; + signByDefault = true; + }; + }; + + services.gpg-agent = { + enable = true; + defaultCacheTtl = 1800; + enableSshSupport = true; + pinentry.package = pkgs.pinentry-curses; + }; + + programs.bash = { + enable = true; + shellAliases = { + ll = "ls -lha"; + }; + }; + + programs.fzf = { + enable = true; + enableBashIntegration = true; + }; + + programs.helix = { + enable = true; + settings = { + editor = { + line-numbers = "relative"; + lsp.display-messages = true; + }; + }; + }; + }; + }; +} diff --git a/modules/user.nix b/modules/user.nix new file mode 100644 index 0000000..a1d3907 --- /dev/null +++ b/modules/user.nix @@ -0,0 +1,26 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.dotfiles.user; +in +{ + options.dotfiles.user = { + enable = lib.mkEnableOption "User configuration"; + }; + + config = lib.mkIf cfg.enable { + users.users.semere = { + isNormalUser = true; + extraGroups = [ + "wheel" + "networkmanager" + ]; + }; + + home-manager.users.semere = { + home.username = "semere"; + home.homeDirectory = "/home/semere"; + home.stateVersion = "26.05"; + }; + }; +}