refactor: organize hosts configs into dedicated directory

- Move and rename host-specific configurations (e.g., wsl to hosts/wsl)
- Add home.nix files for mbp and wsl, importing common modules
- Update mbp flake.nix path to new hosts/mbp/configuration.nix
- Integrate home-manager for user environments on macOS/WSL
- Update flake.lock inputs (nixpkgs, home-manager, homebrew) for latest versions
- Add README.md with project overview and setup instructions

This restructures the repo for multi-host support, improves modularity, and ensures reproducible builds with updated dependencies.
This commit is contained in:
Den Afanasyev 2025-10-12 00:38:28 +03:00
parent 42b2706505
commit 665a701aaa
21 changed files with 331 additions and 418 deletions

BIN
.DS_Store vendored

Binary file not shown.

7
README.md Normal file
View file

@ -0,0 +1,7 @@
# Nix Flake Config
This repo contains personal nix flake config for macbook / wsl with home-manager.
# Getting started
If you want to use my config on macbook, make sure you're using nix-determinate. It's the best for MacOS.
Clone this repo to the folder of your liking,

24
flake.lock generated
View file

@ -40,11 +40,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1759853171, "lastModified": 1760130406,
"narHash": "sha256-uqbhyXtqMbYIiMqVqUhNdSuh9AEEkiasoK3mIPIVRhk=", "narHash": "sha256-GKMwBaFRw/C1p1VtjDz4DyhyzjKUWyi1K50bh8lgA2E=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "1a09eb84fa9e33748432a5253102d01251f72d6d", "rev": "d305eece827a3fe317a2d70138f53feccaf890a1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -72,11 +72,11 @@
"homebrew-cask": { "homebrew-cask": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1759948268, "lastModified": 1760211302,
"narHash": "sha256-PKfR49kBk6QWICMiiAZ1gTA6ns2AgJ4PR54POhApPEQ=", "narHash": "sha256-HVl2Z625D3Y7Bh9fPbj0oFt1vGjVWt7ZCaoV1n08ojc=",
"owner": "homebrew", "owner": "homebrew",
"repo": "homebrew-cask", "repo": "homebrew-cask",
"rev": "5fd3508b3552a5c0c28fb4a625b94c6e16253f45", "rev": "f87e2b258ef5fbe8900380227a7215d54de104fd",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -88,11 +88,11 @@
"homebrew-core": { "homebrew-core": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1759949937, "lastModified": 1760212566,
"narHash": "sha256-XWl8nOFNrjJlYE7MjI1kI3u4X58cV+4JZ8KJr32E3RM=", "narHash": "sha256-AqJpqsm1+WXonanloEoivHhb9WqvFvO38l2Y3Ze0E1Q=",
"owner": "homebrew", "owner": "homebrew",
"repo": "homebrew-core", "repo": "homebrew-core",
"rev": "b6adad21707caea42597e617f676d19a83f05bb9", "rev": "49d48a960dc89c6282a903a8776c946d5c6be362",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -164,11 +164,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1759831965, "lastModified": 1760038930,
"narHash": "sha256-vgPm2xjOmKdZ0xKA6yLXPJpjOtQPHfaZDRtH+47XEBo=", "narHash": "sha256-Oncbh0UmHjSlxO7ErQDM3KM0A5/Znfofj2BSzlHLeVw=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c9b6fb798541223bbb396d287d16f43520250518", "rev": "0b4defa2584313f3b781240b29d61f6f9f7e0df3",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -38,7 +38,7 @@
darwinConfigurations."Dens-MacBook" = nix-darwin.lib.darwinSystem { darwinConfigurations."Dens-MacBook" = nix-darwin.lib.darwinSystem {
system = "aarch64-darwin"; system = "aarch64-darwin";
modules = [ modules = [
./mbp/configuration.nix ./hosts/mbp/configuration.nix
sops-nix.darwinModules.sops sops-nix.darwinModules.sops
nix-homebrew.darwinModules.nix-homebrew { nix-homebrew.darwinModules.nix-homebrew {
@ -58,7 +58,7 @@
home-manager.darwinModules.home-manager { home-manager.darwinModules.home-manager {
home-manager.useGlobalPkgs = true; home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true; home-manager.useUserPackages = true;
home-manager.users.duumxh = import ./mbp/home.nix; home-manager.users.duumxh = import ./hosts/mbp/home.nix;
} }
]; ];
}; };

View file

@ -1,9 +1,12 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
{ {
#Disable nix managment, since we use nix-determinate
nix.enable = false; nix.enable = false;
imports = [
../../modules/homebrew.nix
];
homebrew = { homebrew = {
enable = true; enable = true;
@ -67,5 +70,4 @@
}; };
nixpkgs.hostPlatform = "aarch64-darwin"; nixpkgs.hostPlatform = "aarch64-darwin";
nixpkgs.config.allowUnfree = true;
} }

22
hosts/mbp/home.nix Executable file
View file

@ -0,0 +1,22 @@
{ config, pkgs, lib, ... }:
{
imports = [
../../modules/common.nix
../../modules/programs/bat.nix
../../modules/programs/eza.nix
../../modules/programs/fzf.nix
../../modules/programs/git.nix
../../modules/programs/k9s.nix
../../modules/programs/micro.nix
../../modules/programs/ssh.nix
../../modules/programs/zoxide.nix
../../modules/programs/zsh.nix
];
programs.zsh = {
localVariables = {
SSH_AUTH_SOCK = "/Users/duumxh/Library/Containers/com.maxgoedjen.Secretive.SecretAgent/Data/socket.ssh";
};
};
}

21
hosts/wsl/home.nix Executable file
View file

@ -0,0 +1,21 @@
{
config,
pkgs,
lib,
...
}:
{
imports = [
../../modules/common.nix
../../modules/programs/bat.nix
../../modules/programs/eza.nix
../../modules/programs/fzf.nix
../../modules/programs/git.nix
../../modules/programs/k9s.nix
../../modules/programs/micro.nix
../../modules/programs/ssh.nix
../../modules/programs/zoxide.nix
../../modules/programs/zsh.nix
];
}

View file

@ -1,206 +0,0 @@
{ config, pkgs, lib, ... }:
{
home = {
packages = with pkgs; [
rclone
talosctl
bat
teleport
ansible
kubectl
opentofu
nerd-fonts.jetbrains-mono
age
sops
deploy-rs
kubernetes-helm
kubectx
fzf-preview
zsh-fzf-tab
zsh-forgit
zsh-fzf-history-search
];
#sessionVariables = {
# SOPS_AGE_KEY_FILE = "/Users/duumxh/.config/sops/age/keys.txt";
#};
stateVersion = "25.11";
};
programs = {
ssh = {
matchBlocks."*" = { identityAgent = "/Users/duumxh/Library/Containers/com.maxgoedjen.Secretive.SecretAgent/Data/socket.ssh"; };
enableDefaultConfig = false;
enable = true;
};
git = {
enable = true;
userName = "Den Afanasyev";
userEmail = "ceo@furry.industries";
};
zsh = {
enable = true;
enableCompletion = true;
syntaxHighlighting.enable = true;
prezto = {
prompt = {
theme = "powerlevel10k";
};
enable = true;
};
autosuggestion = {
#highlight = "fg=#ff00ff,bg=cyan,bold,underline";
#strategy = [ "completion" "history" ];
enable = true;
};
plugins = [
{
name = "fzf-tab";
src = "${pkgs.zsh-fzf-tab}/share/fzf-tab";
}
];
history = {
append = true;
expireDuplicatesFirst = true;
};
initContent = lib.mkOrder 500 ''
source ~/.p10k.zsh
export PURE_GIT_PULL=0
export SSH_AUTH_SOCK=/Users/duumxh/Library/Containers/com.maxgoedjen.Secretive.SecretAgent/Data/socket.ssh
export TELEPORT_ADD_KEYS_TO_AGENT=no
export K9S_SKIN="transparent"
echo "Hey there raccoon! 🦝🍁"
'';
#localVariables = {};
shellAliases = {
drwn-upd = "sudo darwin-rebuild switch --flake ~/Nix";
ls = "eza";
cd = "z";
cat = "bat";
k = "kubectl";
m = "micro";
h = "helm";
t = "teleport";
tctl = "talosctl";
};
};
fzf = {
colors = {
fg = "-1";
"fg+" = "#d0d0d0";
bg = "-1";
"bg+" = "#262626";
hl = "#5f87af";
"hl+" = "#5fd7ff";
info = "#afaf87";
marker = "#87ff00";
prompt = "#d7005f";
spinner = "#af5fff";
pointer = "#af5fff";
header = "#87afaf";
border = "#262626";
label = "#aeaeae";
query = "#d9d9d9";
};
defaultOptions = [
"--border=rounded"
"--border-label"
"--preview-window=border-rounded"
"--prompt=> "
"--marker=>"
"--pointer="
"--separator="
"--scrollbar="
];
enableZshIntegration = true;
enable = true;
};
eza = {
enableZshIntegration = true;
enable = true;
};
bat = {
enable = true;
};
zoxide = {
enableZshIntegration = true;
enable = true;
};
micro = {
settings = {
colorscheme = "simple";
scrollbar = true;
};
enable = true;
};
k9s = {
skins = {
transparent = {
k9s = {
body.bgColor = "default";
prompt.bgColor = "default";
info.sectionColor = "default";
dialog = {
bgColor = "default";
labelFgColor = "default";
fieldFgColor = "default";
};
frame = {
crumbs.bgColor = "default";
title = {
bgColor = "default";
counterColor = "default";
};
menu.fgColor = "default";
};
views = {
charts.bgColor = "default";
table = {
bgColor = "default";
header = {
fgColor = "default";
bgColor = "default";
};
};
xray.bgColor = "default";
logs = {
bgColor = "default";
indicator = {
bgColor = "default";
toggleOnColor = "default";
toggleOffColor = "default";
};
};
yaml = {
colonColor = "default";
valueColor = "default";
};
};
};
};
};
enable = true;
};
home-manager.enable = true;
};
}

31
modules/common.nix Normal file
View file

@ -0,0 +1,31 @@
{ pkgs, lib, ... }:
{
# Define home options directly if this is a standalone home.nix
# or within config if it's a module
home = {
packages = with pkgs; [
age
ansible
bat
deploy-rs
fzf-preview
kubectl
kubectx
kubernetes-helm
nerd-fonts.jetbrains-mono
nixfmt-rfc-style
opentofu
sops
talosctl
teleport
zsh-forgit
zsh-fzf-history-search
zsh-fzf-tab
rclone
];
stateVersion = "25.11";
};
#nixpkgs.config.allowUnfree = true; # It's better to put this in configuration.nix or a more specific place if it's only meant for certain hosts.
}

40
modules/homebrew.nix Normal file
View file

@ -0,0 +1,40 @@
{ config, lib, pkgs, ... }:
{
homebrew = {
enable = true;
onActivation.autoUpdate = true;
onActivation.upgrade = true;
#onActivation.cleanup = "zap";
casks = [
"arc"
"bettermouse"
"blender"
"citrix-workspace"
"cryptomator"
"Discord"
"Element"
"ghostty"
"IINA"
"Keka"
"meta"
"mullvad-vpn"
"obs"
"Obsidian"
"orion"
"Secretive"
"tailscale-app"
"telegram"
"UTM"
"vscodium"
];
masApps = {
"Bitwarden" = 1352778147;
"DropOver" = 1355679052;
"Yubico Authenticator" = 1497506650;
};
};
}

7
modules/programs/bat.nix Normal file
View file

@ -0,0 +1,7 @@
{ config, lib, pkgs, ... }:
{
programs.bat = {
enable = true;
};
}

8
modules/programs/eza.nix Normal file
View file

@ -0,0 +1,8 @@
{ config, lib, pkgs, ... }:
{
programs.eza = {
enableZshIntegration = true;
enable = true;
};
}

35
modules/programs/fzf.nix Normal file
View file

@ -0,0 +1,35 @@
{ config, lib, pkgs, ... }:
{
programs.fzf = {
colors = {
fg = "-1";
"fg+" = "#d0d0d0";
bg = "-1";
"bg+" = "#262626";
hl = "#5f87af";
"hl+" = "#5fd7ff";
info = "#afaf87";
marker = "#87ff00";
prompt = "#d7005f";
spinner = "#af5fff";
pointer = "#af5fff";
header = "#87afaf";
border = "#262626";
label = "#aeaeae";
query = "#d9d9d9";
};
defaultOptions = [
"--border=rounded"
"--border-label"
"--preview-window=border-rounded"
"--prompt=> "
"--marker=>"
"--pointer="
"--separator="
"--scrollbar="
];
enableZshIntegration = true;
enable = true;
};
}

9
modules/programs/git.nix Normal file
View file

@ -0,0 +1,9 @@
{ config, pkgs, lib, ... }:
{
programs.git = {
enable = true;
userName = "Den Afanasyev";
userEmail = "ceo@furry.industries";
};
}

52
modules/programs/k9s.nix Normal file
View file

@ -0,0 +1,52 @@
{ config, lib, pkgs, ... }:
{
programs.k9s = {
skins = {
transparent = {
k9s = {
body.bgColor = "default";
prompt.bgColor = "default";
info.sectionColor = "default";
dialog = {
bgColor = "default";
labelFgColor = "default";
fieldFgColor = "default";
};
frame = {
crumbs.bgColor = "default";
title = {
bgColor = "default";
counterColor = "default";
};
menu.fgColor = "default";
};
views = {
charts.bgColor = "default";
table = {
bgColor = "default";
header = {
fgColor = "default";
bgColor = "default";
};
};
xray.bgColor = "default";
logs = {
bgColor = "default";
indicator = {
bgColor = "default";
toggleOnColor = "default";
toggleOffColor = "default";
};
};
yaml = {
colonColor = "default";
valueColor = "default";
};
};
};
};
};
enable = true;
};
}

View file

@ -0,0 +1,11 @@
{ config, lib, pkgs, ... }:
{
programs.micro = {
settings = {
colorscheme = "simple";
scrollbar = true;
};
enable = true;
};
}

8
modules/programs/ssh.nix Normal file
View file

@ -0,0 +1,8 @@
{ config, lib, pkgs, ... }:
{
programs.ssh = {
enable = true;
enableDefaultConfig = false;
};
}

View file

@ -0,0 +1,8 @@
{ config, lib, pkgs, ... }:
{
programs.zoxide = {
enableZshIntegration = true;
enable = true;
};
}

53
modules/programs/zsh.nix Normal file
View file

@ -0,0 +1,53 @@
{ config, lib, pkgs, ... }:
{
programs.zsh = {
enable = true;
enableCompletion = true;
syntaxHighlighting.enable = true;
prezto = {
prompt = { theme = "powerlevel10k"; };
enable = true;
};
autosuggestion = {
#highlight = "fg=#ff00ff,bg=cyan,bold,underline";
#strategy = [ "completion" "history" ];
enable = true;
};
plugins = [
{
name = "fzf-tab";
src = "${pkgs.zsh-fzf-tab}/share/fzf-tab";
}
];
history = {
append = true;
expireDuplicatesFirst = true;
};
initContent = lib.mkOrder 500 ''
source ~/.p10k.zsh
echo "Hey there raccoon! 🦝🍁"
'';
localVariables = {
PURE_GIT_PULL = "0";
TELEPORT_ADD_KEYS_TO_AGENT = "no";
K9S_SKIN = "transparent";
};
shellAliases = {
ls = "eza";
cd = "z";
cat = "bat";
k = "kubectl";
m = "micro";
h = "helm";
tp = "teleport";
t = "talosctl";
};
};
}

View file

@ -1,195 +0,0 @@
{ config, pkgs, lib, ... }:
{
home = {
packages = with pkgs; [
rclone
talosctl
bat
teleport
ansible
kubectl
opentofu
nerd-fonts.jetbrains-mono
age
sops
deploy-rs
kubernetes-helm
kubectx
fzf-preview
zsh-fzf-tab
zsh-forgit
zsh-fzf-history-search
];
#sessionVariables = {
# SOPS_AGE_KEY_FILE = "/Users/duumxh/.config/sops/age/keys.txt";
#};
stateVersion = "25.11";
};
programs = {
git = {
enable = true;
userName = "Den Afanasyev";
userEmail = "ceo@furry.industries";
extraConfig = { core.sshCommand = "ssh.exe"; };
};
zsh = {
enable = true;
enableCompletion = true;
syntaxHighlighting.enable = true;
prezto = {
prompt = {
theme = "powerlevel10k";
};
enable = true;
};
autosuggestion = {
#highlight = "fg=#ff00ff,bg=cyan,bold,underline";
#strategy = [ "completion" "history" ];
enable = true;
};
plugins = [
{
name = "fzf-tab";
src = "${pkgs.zsh-fzf-tab}/share/fzf-tab";
}
];
history = {
append = true;
expireDuplicatesFirst = true;
};
initContent = lib.mkOrder 500 ''
source ~/.p10k.zsh
export TELEPORT_ADD_KEYS_TO_AGENT=no
export K9S_SKIN="transparent"
echo "Hey there raccoon!"
'';
#localVariables = {};
shellAliases = {
ssh-add = "ssh-add.exe";
ssh = "ssh-add.exe -l > /dev/null || ssh-add.exe && ssh.exe";
ls = "eza";
cd = "z";
cat = "bat";
k = "kubectl";
m = "micro";
h = "helm";
t = "teleport";
tctl = "talosctl";
};
};
fzf = {
colors = {
fg = "-1";
"fg+" = "#d0d0d0";
bg = "-1";
"bg+" = "#262626";
hl = "#5f87af";
"hl+" = "#5fd7ff";
info = "#afaf87";
marker = "#87ff00";
prompt = "#d7005f";
spinner = "#af5fff";
pointer = "#af5fff";
header = "#87afaf";
border = "#262626";
label = "#aeaeae";
query = "#d9d9d9";
};
defaultOptions = [
"--border=rounded"
"--border-label"
"--preview-window=border-rounded"
"--prompt=> "
"--marker=>"
"--pointer="
"--separator="
"--scrollbar="
];
enableZshIntegration = true;
enable = true;
};
eza = {
enableZshIntegration = true;
enable = true;
};
bat = {
enable = true;
};
zoxide = {
enableZshIntegration = true;
enable = true;
};
micro = {
settings = {
colorscheme = "simple";
scrollbar = true;
};
enable = true;
};
k9s = {
skins = {
transparent = {
k9s = {
body.bgColor = "default";
prompt.bgColor = "default";
info.sectionColor = "default";
dialog = {
bgColor = "default";
labelFgColor = "default";
fieldFgColor = "default";
};
frame = {
crumbs.bgColor = "default";
title = {
bgColor = "default";
counterColor = "default";
};
menu.fgColor = "default";
};
views = {
charts.bgColor = "default";
table = {
bgColor = "default";
header = {
fgColor = "default";
bgColor = "default";
};
};
xray.bgColor = "default";
logs = {
bgColor = "default";
indicator = {
bgColor = "default";
toggleOnColor = "default";
toggleOffColor = "default";
};
};
yaml = {
colonColor = "default";
valueColor = "default";
};
};
};
};
};
enable = true;
};
home-manager.enable = true;
};
}