flake/hosts/muin/home.nix
2025-08-04 20:11:49 +00:00

148 lines
3.9 KiB
Nix

{
pkgs,
lib,
config,
osConfig,
inputs,
...
}: let
cfg = osConfig.mods;
installScript = pkgs.writeShellApplication {
name = "install-flake";
text = ''
msg() {
printf "\033[01;32minstall-flake: \033[0m%s\n" "$1"
}
msg "Cloning config..."
if [[ ! "$PWD" == "$HOME" ]]; then
cd
fi
if [[ ! -d "home" ]]; then
git clone https://codeberg.org/muon/home
else
msg "Already cloned!"
fi
cd home
nvim hosts/"$(hostname)"/disk-config.nix
msg "Running disko..."
if ! mount | grep "on /mnt" ; then
sudo nix --experimental-features "nix-command flakes" run github:nix-community/disko/latest -- --mode destroy,format,mount hosts/"$(hostname)"/disk-config.nix
else
msg "Already mounted!"
fi
msg "Making blank root snapshot..."
sudo mkdir -p /tmp/mnt
sudo mount /dev/mapper/crypted /tmp/mnt
if [[ ! -e /tmp/mnt/root-blank ]]; then
sudo btrfs subvolume snapshot -r /tmp/mnt/root /tmp/mnt/root-blank
else
msg "Already snapshotted!"
fi
sudo umount /tmp/mnt
msg "Retrieving sops key..."
sudo mkdir -p /mnt/persist/var/lib/sops-nix
if [[ ! -e /mnt/persist/var/lib/sops-nix/key.txt ]]; then
rbw config set email admin@muon.host
rbw config set base_url https://vault.muon.host
rbw login
rbw get sops | sudo tee /mnt/persist/var/lib/sops-nix/key.txt
# sudo cp /etc/sops-nix/key.txt /mnt/persist/var/lib/sops-nix/key.txt
sudo chown muon:users /mnt/persist/var/lib/sops-nix -R
else
msg "Already retrieved!"
fi
msg "Setting hardware config..."
sudo nixos-generate-config --no-filesystems --root /mnt
cp /mnt/etc/nixos/hardware-configuration.nix hosts/"$(hostname)"/hardware-configuration.nix
msg "Installing NixOS config..."
sudo nixos-install --root /mnt --no-root-passwd --flake .#"$(hostname)"
msg "Edit persistent filesystem..."
PERSIST="$HOME/persist.sh"
if [[ ! -e $PERSIST ]]; then
sudo cp "$HOME/persist.txt" "$PERSIST"
sudo chmod +w "$PERSIST"
fi
nvim "$PERSIST"
msg "Copying persistent filesystem..."
make_persist() {
F="$1"
P="/mnt/persist''${1#/mnt}"
echo "$P"
if [[ -e "$F" ]]; then
sudo mkdir -p "$(dirname "$P")"
else
msg "Error: $F does not exist!"
return 0
fi
if [[ -d "$F" ]]; then
if [[ -n "$( ls -A "$F")" ]]; then
sudo cp -r "$F/"* "$P"
fi
elif [[ -f "$F" ]]; then
sudo cp "$F" "$P"
fi
}
grep -v '^#' "$PERSIST" | while read -r file ; do
make_persist "$file"
done
'';
};
in {
# Install
# sops.age.keyFile = lib.mkForce "/etc/sops-nix/key.txt";
programs.atuin.enable = lib.mkForce false;
home.file.persist = {
target = "persist.txt";
text = ''
/mnt/var/lib/nixos
/mnt/var/lib/systemd/coredump
/mnt/etc/machine-id
/etc/NetworkManager
/var/lib/NetworkManager
'';
};
home.packages = with pkgs;
[
installScript
]
# Modules
++ [
pulseaudio
pavucontrol
alsa-utils
];
mods.xdg.enable = true;
mods.i3.enable = true;
mods.battery.enable = true;
mods.terminal.zsh.enable = true;
mods.terminal.emulator.enable = true;
mods.terminal.development.enable = true;
mods.terminal.tools.enable = true;
mods.desktop.development.enable = true;
mods.desktop.productivity.enable = false;
# Hardware preferences
## Monitors
services.autorandr.enable = true;
programs.autorandr = {
enable = true;
hooks.postswitch = {
"notify-i3" = "${pkgs.i3}/bin/i3-msg restart";
"set-wallpaper" = ''
${lib.getExe pkgs.feh} --bg-fill --nofehbg ${./wallpaper.png}
'';
};
};
# Version of first install
home.stateVersion = "23.05";
}