Compare commits
16 Commits
244d09e8ea
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| abff2a9acb | |||
| 815401f900 | |||
| fb4142d95d | |||
| c0a4f309d6 | |||
| fe6800db1a | |||
| acd6498875 | |||
| 0dd59cb0ec | |||
| 1caf83fc3e | |||
| 8fd9d95f00 | |||
| 3264826acb | |||
| 2062b1f76b | |||
| 2c4a59d5f1 | |||
| a1a841f573 | |||
| ade1fb0dec | |||
| b01267f4b5 | |||
| 18b0b2f69b |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
result
|
||||||
247
README.md
247
README.md
@@ -3,67 +3,21 @@
|
|||||||
Det här förrådet innehåller en flake-baserad NixOS-konfiguration för mina
|
Det här förrådet innehåller en flake-baserad NixOS-konfiguration för mina
|
||||||
maskiner.
|
maskiner.
|
||||||
|
|
||||||
Just nu finns hosten `kronos`, med:
|
Just nu finns värden `kronos`.
|
||||||
|
|
||||||
- `Hyprland`
|
Punktfiler förväntas att finns under `~/dotfiles`, och hanteras med home manager
|
||||||
- `ZFS` som root-filsystem
|
|
||||||
- `LUKS` under `ZFS`
|
|
||||||
- `TPM2` för automatisk upplåsning av LUKS
|
|
||||||
- `zram` i stället för swap-partition
|
|
||||||
- `systemd-networkd` och `systemd-resolved`
|
|
||||||
- `GRUB` med `os-prober` för Windows-stöd
|
|
||||||
- `NVIDIA` med `nvidia-open` för `kronos`
|
|
||||||
- `OpenSSH`
|
|
||||||
- automatiska `ZFS`-snapshots
|
|
||||||
|
|
||||||
Dotfiles hanteras inte av Nix i det här förrådet. De installeras separat med
|
## Flakes
|
||||||
`stow` från `~/dotfiles`.
|
|
||||||
|
|
||||||
## Struktur
|
Vi lever i framtiden, därför används flakes exklusivt.
|
||||||
|
|
||||||
- `flake.nix` är startpunkten
|
## För att installera
|
||||||
- `hosts/kronos/default.nix` är huvudfilen för maskinen `kronos`
|
|
||||||
- `hosts/kronos/disko.nix` beskriver disk-layouten
|
|
||||||
- `hosts/kronos/hardware-configuration.nix` är hårdvaruspecifik och genereras på maskinen
|
|
||||||
- `modules/base.nix` innehåller grundsystem
|
|
||||||
- `modules/zfs-root.nix` innehåller boot, LUKS, TPM och ZFS-relaterade delar
|
|
||||||
- `modules/desktop-hyprland.nix` innehåller desktopmiljön och paketen
|
|
||||||
|
|
||||||
## Viktigt innan installation
|
1. Kontrollera att rätt disk (`installDisk`) är vald i `hosts/kronos/default.nix`
|
||||||
|
2. Generera en `hardware-configuration.nix`. Tag dock bort all information om filsystem. Disko sköter redan det åt oss.
|
||||||
|
3. Kontrollera `networking.hostId`. Bör vara unikt för nätverket.
|
||||||
|
|
||||||
Det finns några saker som måste ändras innan konfigurationen används på en ny maskin.
|
### Applicera konfiguration
|
||||||
|
|
||||||
1. Kontrollera att rätt disk är vald i `hosts/kronos/default.nix`
|
|
||||||
- just nu pekar `installDisk` på `/dev/disk/by-id/wwn-0x5001b444a9734c0e`
|
|
||||||
- det är tänkt att vara nuvarande Arch-disken på `kronos`
|
|
||||||
- ändra detta innan återanvändning på annan maskin
|
|
||||||
2. Generera riktig `hardware-configuration.nix`
|
|
||||||
- den nuvarande filen är bara en platshållare tills den genereras på målsystemet
|
|
||||||
3. Kontrollera `networking.hostId`
|
|
||||||
- ZFS kräver att den är satt
|
|
||||||
4. Tänk på att disken raderas
|
|
||||||
- `disko` partitionerar, formaterar och skapar LUKS/ZFS enligt konfigurationen
|
|
||||||
5. `kronos` antar `NVIDIA`
|
|
||||||
- hosten är nu konfigurerad för `nvidia-open` med modesetting
|
|
||||||
|
|
||||||
Disk-layouten är just nu:
|
|
||||||
|
|
||||||
- `EFI` för boot
|
|
||||||
- `LUKS` på resten av disken
|
|
||||||
- `ZFS pool` (`rpool`) ovanpå den upplåsta LUKS-enheten
|
|
||||||
- ingen vanlig swap-partition på disk
|
|
||||||
- `zram` används för swap i RAM
|
|
||||||
|
|
||||||
Bootloadern är `GRUB`, inte `systemd-boot`, eftersom `kronos` är satt upp för att
|
|
||||||
hitta andra installerade system via `os-prober`, till exempel Windows.
|
|
||||||
|
|
||||||
## Installation från minimal NixOS-installationsmedia
|
|
||||||
|
|
||||||
Om nätverket inte redan fungerar i installationsmediet:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
nmtui
|
|
||||||
```
|
|
||||||
|
|
||||||
Sedan:
|
Sedan:
|
||||||
|
|
||||||
@@ -75,29 +29,12 @@ git clone <repo-url> nixcfg
|
|||||||
cd nixcfg
|
cd nixcfg
|
||||||
```
|
```
|
||||||
|
|
||||||
Redigera sedan rätt disk i `hosts/kronos/default.nix`:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
vim hosts/kronos/default.nix
|
|
||||||
```
|
|
||||||
|
|
||||||
Applicera disk-layouten:
|
Applicera disk-layouten:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nix run github:nix-community/disko -- --mode disko .#kronos
|
nix run github:nix-community/disko -- --mode disko .#kronos
|
||||||
```
|
```
|
||||||
|
|
||||||
Det kommandot gör i praktiken detta:
|
|
||||||
|
|
||||||
- partitionerar disken
|
|
||||||
- skapar EFI-partitionen
|
|
||||||
- skapar LUKS-enheten `cryptroot`
|
|
||||||
- skapar ZFS-poolen `rpool`
|
|
||||||
- skapar datasets
|
|
||||||
- monterar målsystemet under `/mnt`
|
|
||||||
|
|
||||||
Det är därför nästa steg använder `/mnt`.
|
|
||||||
|
|
||||||
Generera hårdvarufilen och kopiera in den i förrådet:
|
Generera hårdvarufilen och kopiera in den i förrådet:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -105,50 +42,41 @@ nixos-generate-config --root /mnt
|
|||||||
cp /mnt/etc/nixos/hardware-configuration.nix ./hosts/kronos/hardware-configuration.nix
|
cp /mnt/etc/nixos/hardware-configuration.nix ./hosts/kronos/hardware-configuration.nix
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Kom ihåg att ta bort alla filesystemkonfiguration från `hardware-configuration.nix`.
|
||||||
|
Disko sköter ju redan det.
|
||||||
|
|
||||||
|
Kopiera också över konfigurationen till målenheten
|
||||||
|
|
||||||
|
```bash
|
||||||
|
rm -rf /mnt/etc/nixos
|
||||||
|
cp -r /tmp/nixcfg /mnt/etc/nixos
|
||||||
|
```
|
||||||
|
|
||||||
Installera systemet:
|
Installera systemet:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nixos-install --flake .#kronos
|
nixos-install --flake .#kronos
|
||||||
```
|
```
|
||||||
|
|
||||||
Enrolla sedan TPM-nyckeln innan omstart:
|
Registrera TPM-nyckeln:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nixos-enter --root /mnt -c 'systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=7 /dev/disk/by-partlabel/cryptroot'
|
nixos-enter --root /mnt
|
||||||
|
./systemd-cryptenroll.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Och starta om:
|
Starta om:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
reboot
|
reboot
|
||||||
```
|
```
|
||||||
|
|
||||||
## Vad TPM-upplåsningen betyder
|
|
||||||
|
|
||||||
TPM ersätter inte ditt vanliga LUKS-lösenord. Den lägger till en extra väg för
|
|
||||||
upplåsning.
|
|
||||||
|
|
||||||
Det betyder:
|
|
||||||
|
|
||||||
- LUKS kan fortfarande låsas upp med recovery-lösenord/passphrase
|
|
||||||
- maskinen kan låsa upp automatiskt med TPM om boot-tillståndet matchar
|
|
||||||
- om firmware, Secure Boot eller PCR-värden ändras kan du behöva skriva lösenordet manuellt en gång och sedan enrolla om TPM
|
|
||||||
|
|
||||||
## Efter första uppstart
|
## Efter första uppstart
|
||||||
|
|
||||||
Kloning av dotfiles och installation med `stow` görs separat:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone <dotfiles-repo> ~/dotfiles
|
git clone <dotfiles-repo> ~/dotfiles
|
||||||
cd ~/dotfiles
|
|
||||||
stow ghostty foot hyprland paru shell tmux wezterm
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Observera att dina nuvarande Hyprland-dotfiles fortfarande försöker starta
|
|
||||||
`nm-applet`. Eftersom systemet använder `systemd-networkd` i stället för
|
|
||||||
NetworkManager bör den raden tas bort eller ersättas efter att dotfiles har
|
|
||||||
stow:ats in.
|
|
||||||
|
|
||||||
## Vanligt underhåll
|
## Vanligt underhåll
|
||||||
|
|
||||||
När systemet väl är installerat jobbar man oftast så här.
|
När systemet väl är installerat jobbar man oftast så här.
|
||||||
@@ -188,132 +116,3 @@ Kontrollera `ZFS`-snapshots:
|
|||||||
```bash
|
```bash
|
||||||
zfs list -t snapshot
|
zfs list -t snapshot
|
||||||
```
|
```
|
||||||
|
|
||||||
Kontrollera `OpenSSH`:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
systemctl status sshd
|
|
||||||
```
|
|
||||||
|
|
||||||
Bra arbetssätt är ofta:
|
|
||||||
|
|
||||||
- ändra Nix-filerna
|
|
||||||
- kör `nixos-rebuild test` eller `switch`
|
|
||||||
- verifiera att allt fungerar
|
|
||||||
- committa ändringen i förrådet
|
|
||||||
|
|
||||||
Eftersom NixOS sparar generationer är det också lättare att backa tillbaka än i
|
|
||||||
många traditionella distributioner.
|
|
||||||
|
|
||||||
## Flera maskiner i samma förråd
|
|
||||||
|
|
||||||
Det här upplägget är gjort för att flera maskiner ska kunna leva i samma förråd.
|
|
||||||
|
|
||||||
En vanlig struktur är:
|
|
||||||
|
|
||||||
- gemensamma moduler i `modules/`
|
|
||||||
- en mapp per maskin i `hosts/<namn>/`
|
|
||||||
|
|
||||||
För att lägga till en ny maskin kan du till exempel:
|
|
||||||
|
|
||||||
1. skapa en ny mapp, till exempel `hosts/atlas/`
|
|
||||||
2. lägga in en egen `default.nix`
|
|
||||||
3. lägga in en egen `disko.nix` om disk-layouten skiljer sig
|
|
||||||
4. generera en egen `hardware-configuration.nix` på den maskinen
|
|
||||||
5. lägga till hosten i `flake.nix`
|
|
||||||
|
|
||||||
Exempel i `flake.nix`:
|
|
||||||
|
|
||||||
```nix
|
|
||||||
nixosConfigurations = {
|
|
||||||
kronos = nixpkgs.lib.nixosSystem {
|
|
||||||
system = "x86_64-linux";
|
|
||||||
specialArgs = { inherit inputs; };
|
|
||||||
modules = [
|
|
||||||
disko.nixosModules.disko
|
|
||||||
./hosts/kronos
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
atlas = nixpkgs.lib.nixosSystem {
|
|
||||||
system = "x86_64-linux";
|
|
||||||
specialArgs = { inherit inputs; };
|
|
||||||
modules = [
|
|
||||||
disko.nixosModules.disko
|
|
||||||
./hosts/atlas
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
Sedan kan varje maskin byggas separat:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo nixos-rebuild switch --flake .#kronos
|
|
||||||
sudo nixos-rebuild switch --flake .#atlas
|
|
||||||
```
|
|
||||||
|
|
||||||
Det fina med detta är att gemensamma delar, som `base.nix` eller
|
|
||||||
`desktop-hyprland.nix`, kan återanvändas, medan varje maskin ändå kan ha egen:
|
|
||||||
|
|
||||||
- disk-layout
|
|
||||||
- hostname
|
|
||||||
- hårdvarufil
|
|
||||||
- användare eller roller
|
|
||||||
- specialpaket eller tjänster
|
|
||||||
|
|
||||||
## Sammanfattning
|
|
||||||
|
|
||||||
Tanken med förrådet är:
|
|
||||||
|
|
||||||
- ett ställe för systemkonfiguration
|
|
||||||
- separata hostar per maskin
|
|
||||||
- återanvändbara moduler för gemensamma delar
|
|
||||||
- dotfiles separat via `stow`
|
|
||||||
- enkel reproducerbar installation från minimal NixOS-media
|
|
||||||
|
|
||||||
Observera att NVIDIA-delen just nu är hostspecifik för `kronos`. Om du lägger till
|
|
||||||
en annan maskin utan NVIDIA bör du inte kopiera den delen rakt av.
|
|
||||||
|
|
||||||
## Begrepp som kan vara bra att känna till
|
|
||||||
|
|
||||||
`sops-nix` och `agenix` är två vanliga sätt att hantera hemligheter i NixOS,
|
|
||||||
utan att lägga lösenord, tokens eller nycklar i klartext i förrådet.
|
|
||||||
|
|
||||||
- `sops-nix` bygger på Mozilla `sops`
|
|
||||||
- hemligheter krypteras i filer som kan committas till git
|
|
||||||
- dekryptering sker på rätt maskin vid aktivering, typiskt med `age` eller GPG
|
|
||||||
- bra när man vill ha ett centralt, versionshanterat sätt att hantera secrets
|
|
||||||
|
|
||||||
- `agenix` bygger i stället direkt på `age`
|
|
||||||
- det är ofta enklare och mer minimalt än `sops-nix`
|
|
||||||
- vanligt val om man bara vill ha några hemligheter och ett lättare upplägg
|
|
||||||
|
|
||||||
Typiska användningsfall är:
|
|
||||||
|
|
||||||
- Wi-Fi-hemligheter
|
|
||||||
- API-nycklar
|
|
||||||
- tokens
|
|
||||||
- privata SSH-nycklar för tjänster
|
|
||||||
- lösenord till systemtjänster
|
|
||||||
|
|
||||||
`impermanence` är ett upplägg där stora delar av systemet behandlas som
|
|
||||||
förbrukningsbara mellan boots.
|
|
||||||
|
|
||||||
Det brukar betyda att:
|
|
||||||
|
|
||||||
- root-filsystemet återställs till ett rent grundläge vid boot
|
|
||||||
- bara vissa kataloger sparas permanent, till exempel `/home`, `/var/lib` eller annat under `/persist`
|
|
||||||
- systemet blir lättare att hålla rent och reproducibelt
|
|
||||||
|
|
||||||
Det passar extra bra ihop med `ZFS`, eftersom snapshots och rollback redan finns
|
|
||||||
naturligt där.
|
|
||||||
|
|
||||||
Fördelar med `impermanence`:
|
|
||||||
|
|
||||||
- mindre konfigurationsdrift över tid
|
|
||||||
- lättare att veta vad som faktiskt är deklarativt
|
|
||||||
- enklare återställning efter experiment eller fel
|
|
||||||
|
|
||||||
Nackdelen är att det kräver att man tänker igenom vad som faktiskt ska sparas.
|
|
||||||
Det är ofta något man lägger till senare, när grundinstallationen redan känns stabil.
|
|
||||||
|
|||||||
69
flake.lock
generated
69
flake.lock
generated
@@ -20,13 +20,73 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"dotfiles": {
|
||||||
|
"inputs": {
|
||||||
|
"home-manager": [
|
||||||
|
"home-manager"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1774564269,
|
||||||
|
"narHash": "sha256-sdxUQJAc5t5hbQbG0SZ4B3YehTtNiRUqDNzvO/KakZk=",
|
||||||
|
"path": "/home/love/dotfiles",
|
||||||
|
"type": "path"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"path": "/home/love/dotfiles",
|
||||||
|
"type": "path"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1774561634,
|
||||||
|
"narHash": "sha256-3q1xsREjqdVIIwQQDZQ9y0YdBzP8gAxdwKoKnZSzJtU=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "7c046c63ac3b467c1d589b99d531da5b6520825a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lolcat++": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1774436770,
|
||||||
|
"narHash": "sha256-l9geMRTQbPlnds+QFAPBywpZWRNH964zOvkeUMX3k9U=",
|
||||||
|
"owner": "lolcatpp",
|
||||||
|
"repo": "lolcatpp",
|
||||||
|
"rev": "619f2bb439bd28a6d77f31361b24c5f48832b067",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "lolcatpp",
|
||||||
|
"repo": "lolcatpp",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1774106199,
|
"lastModified": 1774386573,
|
||||||
"narHash": "sha256-US5Tda2sKmjrg2lNHQL3jRQ6p96cgfWh3J1QBliQ8Ws=",
|
"narHash": "sha256-4hAV26quOxdC6iyG7kYaZcM3VOskcPUrdCQd/nx8obc=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "6c9a78c09ff4d6c21d0319114873508a6ec01655",
|
"rev": "46db2e09e1d3f113a13c0d7b81e2f221c63b8ce9",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -39,6 +99,9 @@
|
|||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"disko": "disko",
|
"disko": "disko",
|
||||||
|
"dotfiles": "dotfiles",
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"lolcat++": "lolcat++",
|
||||||
"nixpkgs": "nixpkgs"
|
"nixpkgs": "nixpkgs"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
31
flake.nix
31
flake.nix
@@ -8,16 +8,45 @@
|
|||||||
url = "github:nix-community/disko";
|
url = "github:nix-community/disko";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
home-manager = {
|
||||||
|
url = "github:nix-community/home-manager";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
"lolcat++" = {
|
||||||
|
url = "github:lolcatpp/lolcatpp";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
dotfiles = {
|
||||||
|
url = "path:/home/love/dotfiles";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
inputs.home-manager.follows = "home-manager";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
inputs@{ nixpkgs, disko, ... }:
|
inputs@{
|
||||||
|
nixpkgs,
|
||||||
|
disko,
|
||||||
|
home-manager,
|
||||||
|
dotfiles,
|
||||||
|
...
|
||||||
|
}:
|
||||||
{
|
{
|
||||||
nixosConfigurations.kronos = nixpkgs.lib.nixosSystem {
|
nixosConfigurations.kronos = nixpkgs.lib.nixosSystem {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
specialArgs = { inherit inputs; };
|
specialArgs = { inherit inputs; };
|
||||||
modules = [
|
modules = [
|
||||||
disko.nixosModules.disko
|
disko.nixosModules.disko
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
|
{
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.useUserPackages = true;
|
||||||
|
home-manager.backupFileExtension = "hm-backup";
|
||||||
|
home-manager.users.love = import "${dotfiles}/home.nix";
|
||||||
|
}
|
||||||
./hosts/kronos
|
./hosts/kronos
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -27,21 +27,31 @@ in
|
|||||||
../../modules/base.nix
|
../../modules/base.nix
|
||||||
../../modules/zfs-root.nix
|
../../modules/zfs-root.nix
|
||||||
../../modules/desktop-hyprland.nix
|
../../modules/desktop-hyprland.nix
|
||||||
|
../../modules/bin-bash-wrapper.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
|
my.binBashWrapper.enable = true;
|
||||||
|
|
||||||
networking.hostName = hostName;
|
networking.hostName = hostName;
|
||||||
networking.hostId = "ff0b8826";
|
networking.hostId = "ff0b8826";
|
||||||
|
|
||||||
services.xserver.videoDrivers = [ "nvidia" ];
|
services.xserver.videoDrivers = [ "nvidia" ];
|
||||||
hardware.nvidia = {
|
hardware = {
|
||||||
modesetting.enable = true;
|
graphics = {
|
||||||
powerManagement.enable = false;
|
enable32Bit = true;
|
||||||
powerManagement.finegrained = false;
|
};
|
||||||
open = true;
|
nvidia = {
|
||||||
nvidiaSettings = true;
|
modesetting.enable = true;
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
powerManagement.enable = false;
|
||||||
|
powerManagement.finegrained = false;
|
||||||
|
open = true;
|
||||||
|
nvidiaSettings = true;
|
||||||
|
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
virtualisation.docker.enable = true;
|
||||||
|
|
||||||
users.mutableUsers = true;
|
users.mutableUsers = true;
|
||||||
users.users.${userName} = {
|
users.users.${userName} = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
@@ -52,6 +62,8 @@ in
|
|||||||
"render"
|
"render"
|
||||||
"video"
|
"video"
|
||||||
"wheel"
|
"wheel"
|
||||||
|
"cdrom"
|
||||||
|
"docker"
|
||||||
];
|
];
|
||||||
shell = pkgs.zsh;
|
shell = pkgs.zsh;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,14 +1,24 @@
|
|||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
{
|
||||||
# and may be overwritten by future invocations. Please make changes
|
config,
|
||||||
# to /etc/nixos/configuration.nix instead.
|
lib,
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
imports = [
|
||||||
[ (modulesPath + "/installer/scan/not-detected.nix")
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sr_mod" ];
|
boot.initrd.availableKernelModules = [
|
||||||
|
"nvme"
|
||||||
|
"xhci_pci"
|
||||||
|
"ahci"
|
||||||
|
"usbhid"
|
||||||
|
"usb_storage"
|
||||||
|
"sd_mod"
|
||||||
|
"sr_mod"
|
||||||
|
];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [ ];
|
||||||
boot.kernelModules = [ "kvm-amd" ];
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
inputs,
|
||||||
pkgs,
|
pkgs,
|
||||||
userName,
|
userName,
|
||||||
...
|
...
|
||||||
@@ -26,24 +27,42 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
boot.loader.systemd-boot.enable = false;
|
boot.loader.systemd-boot = {
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
|
||||||
boot.loader.grub = {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
configurationLimit = 10;
|
configurationLimit = 10;
|
||||||
device = "nodev";
|
edk2-uefi-shell.enable = true;
|
||||||
efiSupport = true;
|
};
|
||||||
enableCryptodisk = true;
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
useOSProber = true;
|
boot.loader.grub.enable = false;
|
||||||
zfsSupport = true;
|
|
||||||
|
i18n = rec {
|
||||||
|
defaultLocale = "en_US.UTF-8";
|
||||||
|
extraLocales = [ "sv_SE.UTF-8/UTF-8" ];
|
||||||
|
|
||||||
|
extraLocaleSettings = {
|
||||||
|
LC_ADDRESS = defaultLocale;
|
||||||
|
LC_CTYPE = defaultLocale;
|
||||||
|
LC_COLLATE = defaultLocale;
|
||||||
|
LC_IDENTIFICATION = defaultLocale;
|
||||||
|
LC_MEASUREMENT = defaultLocale;
|
||||||
|
LC_MESSAGES = defaultLocale;
|
||||||
|
LC_MONETARY = defaultLocale;
|
||||||
|
LC_NAME = defaultLocale;
|
||||||
|
LC_NUMERIC = defaultLocale;
|
||||||
|
LC_PAPER = defaultLocale;
|
||||||
|
LC_TELEPHONE = defaultLocale;
|
||||||
|
LC_TIME = defaultLocale;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.xserver.xkb.layout = "se";
|
||||||
time.timeZone = "Europe/Stockholm";
|
time.timeZone = "Europe/Stockholm";
|
||||||
i18n.defaultLocale = "sv_SE.UTF-8";
|
|
||||||
|
|
||||||
console = {
|
console = {
|
||||||
font = "Lat2-Terminus16";
|
earlySetup = true;
|
||||||
|
font = "ter-v16n";
|
||||||
keyMap = "sv-latin1";
|
keyMap = "sv-latin1";
|
||||||
|
packages = [ pkgs.terminus_font ];
|
||||||
};
|
};
|
||||||
|
|
||||||
networking.useNetworkd = true;
|
networking.useNetworkd = true;
|
||||||
@@ -81,13 +100,18 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
|
inputs."lolcat++".packages.${pkgs.stdenv.hostPlatform.system}.default
|
||||||
|
|
||||||
|
file
|
||||||
cowsay
|
cowsay
|
||||||
fortune
|
fortune
|
||||||
lolcat
|
bat
|
||||||
fastfetch
|
fastfetch
|
||||||
curl
|
curl
|
||||||
eza
|
eza
|
||||||
fzf
|
fzf
|
||||||
|
git
|
||||||
|
git-lfs
|
||||||
ripgrep
|
ripgrep
|
||||||
neovim
|
neovim
|
||||||
odt2txt
|
odt2txt
|
||||||
@@ -96,8 +120,10 @@
|
|||||||
tpm2-tools
|
tpm2-tools
|
||||||
unzip
|
unzip
|
||||||
wget
|
wget
|
||||||
zsh
|
|
||||||
killall
|
killall
|
||||||
|
tealdeer
|
||||||
|
|
||||||
|
efibootmgr
|
||||||
|
|
||||||
nil
|
nil
|
||||||
|
|
||||||
|
|||||||
21
modules/bin-bash-wrapper.nix
Normal file
21
modules/bin-bash-wrapper.nix
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.my.binBashWrapper;
|
||||||
|
bashWrapper = pkgs.writeShellScriptBin "bash" ''
|
||||||
|
exec /usr/bin/env bash "$@"
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.my.binBashWrapper.enable = lib.mkEnableOption "create a /bin/bash wrapper";
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"L+ /bin/bash - - - - ${bashWrapper}/bin/bash"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
programs.dconf.enable = true;
|
programs.dconf.enable = true;
|
||||||
programs.hyprland.enable = true;
|
programs.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
xwayland.enable = true;
|
||||||
|
};
|
||||||
programs.thunar.enable = true;
|
programs.thunar.enable = true;
|
||||||
programs.thunderbird.enable = true;
|
programs.thunderbird.enable = true;
|
||||||
programs.xwayland.enable = true;
|
programs.xwayland.enable = true;
|
||||||
@@ -49,6 +52,9 @@
|
|||||||
noto-fonts
|
noto-fonts
|
||||||
noto-fonts-cjk-sans
|
noto-fonts-cjk-sans
|
||||||
noto-fonts-color-emoji
|
noto-fonts-color-emoji
|
||||||
|
vista-fonts
|
||||||
|
corefonts
|
||||||
|
source-han-sans
|
||||||
];
|
];
|
||||||
|
|
||||||
fonts.fontconfig.defaultFonts = {
|
fonts.fontconfig.defaultFonts = {
|
||||||
@@ -84,6 +90,7 @@
|
|||||||
libsForQt5.qt5ct
|
libsForQt5.qt5ct
|
||||||
libsForQt5.qtstyleplugin-kvantum
|
libsForQt5.qtstyleplugin-kvantum
|
||||||
mpv
|
mpv
|
||||||
|
networkmanagerapplet
|
||||||
pavucontrol
|
pavucontrol
|
||||||
papirus-icon-theme
|
papirus-icon-theme
|
||||||
playerctl
|
playerctl
|
||||||
@@ -93,7 +100,6 @@
|
|||||||
rofi
|
rofi
|
||||||
slurp
|
slurp
|
||||||
socat
|
socat
|
||||||
telegram-desktop
|
|
||||||
waybar
|
waybar
|
||||||
wezterm
|
wezterm
|
||||||
wl-clipboard
|
wl-clipboard
|
||||||
|
|||||||
16
systemd-cryptenroll.sh
Normal file
16
systemd-cryptenroll.sh
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
PASSWORD_FILE="$(mktemp /run/cryptroot.pass.XXXXXX)"
|
||||||
|
|
||||||
|
read -rsp "Lukslösenord: " LUKS_PASSWORD
|
||||||
|
echo
|
||||||
|
|
||||||
|
printf '%s' "$LUKS_PASSWORD" >"$PASSWORD_FILE"
|
||||||
|
trap 'rm -f "$PASSWORD_FILE"' EXIT INT TERM HUP
|
||||||
|
unset LUKS_PASSWORD
|
||||||
|
chmod 600 "$PASSWORD_FILE"
|
||||||
|
|
||||||
|
systemd-cryptenroll \
|
||||||
|
--unlock-key-file="$PASSWORD_FILE" \
|
||||||
|
--tpm-device=auto \
|
||||||
|
--tpm2-pcrs=7 \
|
||||||
|
/dev/disk/by-partlabel/cryptroot
|
||||||
Reference in New Issue
Block a user