Base
This commit is contained in:
parent
fa4588d6df
commit
7536e3a2b1
96
README.md
96
README.md
|
@ -1,2 +1,98 @@
|
||||||
# nixos
|
# nixos
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
Follow the [NixOS manual](https://nixos.org/manual/nixos/stable/index.html#ch-installation) to obtain and boot
|
||||||
|
the installation medium. Use the graphical ISO image since it ships with useful programs such as `nmtui`; the
|
||||||
|
installation can still be done through the terminal.
|
||||||
|
|
||||||
|
### Disk Partitioning
|
||||||
|
For [impermanence](https://nixos.wiki/wiki/Impermanence), partitioning should be done as outlined in the [tmpfs
|
||||||
|
as root](https://elis.nu/blog/2020/05/nixos-tmpfs-as-root/) blogpost, but with `/nix` as a [LUKS-encrypted file
|
||||||
|
system](https://nixos.org/manual/nixos/stable/index.html#sec-luks-file-systems). The boot partition will not be
|
||||||
|
encrypted, since that is poorly supported by systemd-boot. Persistent files will be saved under `/nix/persist`.
|
||||||
|
|
||||||
|
The following is based on the [tmpfs as root](https://elis.nu/blog/2020/05/nixos-tmpfs-as-root/) blogpost, the NixOS
|
||||||
|
manual's [partitioning](https://nixos.org/manual/nixos/stable/index.html#sec-installation-manual-partitioning),
|
||||||
|
[formatting](https://nixos.orgmanual/nixos/stable/index.html#sec-installation-manual-partitioning-formatting) and
|
||||||
|
[LUKS-Encrypted File Systems](https://nixos.org/manual/nixos/stable/index.html#sec-luks-file-systems) sections,
|
||||||
|
ArchWiki's [LVM on LUKS](https://wiki.archlinux.org/title/Dm-crypt/Encrypting_an_entire_system#LVM_on_LUKS),
|
||||||
|
the unofficial NixOS wiki [Full Disk Encryption](https://nixos.wiki/wiki/Full_Disk_Encryption), and [this GitHub
|
||||||
|
gist](https://gist.github.com/martijnvermaat/76f2e24d0239470dd71050358b4d5134).
|
||||||
|
|
||||||
|
We create a 1GiB EFI boot partition (`/dev/sda1`) and the rest will be our LUKS-encrypted volume:
|
||||||
|
```bash
|
||||||
|
# Create partition table
|
||||||
|
parted /dev/sda -- mklabel gpt
|
||||||
|
|
||||||
|
# Create /boot partition
|
||||||
|
parted /dev/sda -- mkpart ESP fat32 1MiB 1024MiB
|
||||||
|
parted /dev/sda -- set 1 esp on
|
||||||
|
|
||||||
|
# Create /nix partition
|
||||||
|
parted /dev/sda -- mkpart primary 1024MiB 100%
|
||||||
|
|
||||||
|
# Create and open LUKS-encrypted container
|
||||||
|
cryptsetup --type=luks2 luksFormat --label=crypted /dev/sda2
|
||||||
|
cryptsetup open /dev/sda2 crypted
|
||||||
|
|
||||||
|
# Create LVM volume group
|
||||||
|
pvcreate /dev/mapper/crypted
|
||||||
|
vgcreate vg /dev/mapper/crypted
|
||||||
|
|
||||||
|
# Create root logical volume
|
||||||
|
lvcreate -l 100%FREE vg -n root
|
||||||
|
|
||||||
|
# Format partitions
|
||||||
|
mkfs.fat -F32 -n BOOT /dev/sda1
|
||||||
|
mkfs.ext4 -L nix /dev/vg/root
|
||||||
|
```
|
||||||
|
|
||||||
|
The result should be the following (`lsblk -f`):
|
||||||
|
```text
|
||||||
|
NAME FSTYPE FSVER LABEL
|
||||||
|
vda
|
||||||
|
├─vda1 vfat FAT32 BOOT
|
||||||
|
└─vda2 crypto_LUKS 2 crypted
|
||||||
|
└─crypted LVM2_member LVM2 001
|
||||||
|
└─vg-root ext4 1.0 nix
|
||||||
|
```
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
Whereas the [NixOS manual](https://nixos.org/manual/nixos/stable/index.html#sec-installation-manual-installing) mounts
|
||||||
|
the newly-created `nixos` partition to `/mnt`, we will follow the _tmpfs as root_ blogpost and mount `/mnt` as `tmpfs`:
|
||||||
|
```bash
|
||||||
|
mount -t tmpfs none /mnt
|
||||||
|
mount --mkdir /dev/disk/by-label/BOOT /mnt/boot
|
||||||
|
mount --mkdir /dev/disk/by-label/nix /mnt/nix
|
||||||
|
mkdir -p /mnt/nix/persist/
|
||||||
|
```
|
||||||
|
|
||||||
|
The remaining installation can be done (more or less) according to the [NixOS
|
||||||
|
manual](https://nixos.org/manual/nixos/stable/index.html#sec-installation-manual-installing).
|
||||||
|
```bash
|
||||||
|
cd /mnt/nix
|
||||||
|
git clone https://git.caspervk.net/caspervk/nixos.git tmp
|
||||||
|
cd tmp/
|
||||||
|
nixos-generate-config --root /mnt --show-hardware-config
|
||||||
|
vim hosts/omega/hardware.nix
|
||||||
|
nixos-install --no-root-passwd --flake .#omega
|
||||||
|
|
||||||
|
# Make sure to set a password
|
||||||
|
mkpasswd > /mnt/nix/persist/passwordfile
|
||||||
|
chmod 400 /mnt/nix/persist/passwordfile
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Hardware Configuration
|
||||||
|
`hosts/*/hardware.nix`, while initially generated by `nixos-generate-config --show-hardware-config`, _is_ manually
|
||||||
|
modified. Irrelevant options are commented, instead of deleted, to allows for easier diffing on new versions of NixOS.
|
||||||
|
|
||||||
|
|
||||||
|
## Impermanence
|
||||||
|
To find out which of our darlings will be erased on reboot do `tree -x /`.
|
||||||
|
|
||||||
|
|
||||||
|
## Upgrading
|
||||||
|
```bash
|
||||||
|
sudo nixos-rebuild switch --flake .#omega
|
||||||
|
```
|
||||||
|
|
65
flake.lock
Normal file
65
flake.lock
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1687871164,
|
||||||
|
"narHash": "sha256-bBFlPthuYX322xOlpJvkjUBz0C+MOBjZdDOOJJ+G2jU=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "07c347bb50994691d7b0095f45ebd8838cf6bc38",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"ref": "release-23.05",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"impermanence": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1690797372,
|
||||||
|
"narHash": "sha256-GImz19e33SeVcIvBB7NnhbJSbTpFFmNtWLh7Z85Y188=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "impermanence",
|
||||||
|
"rev": "e3a7acd113903269a1b5c8b527e84ce7ee859851",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "impermanence",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1690630041,
|
||||||
|
"narHash": "sha256-gbnvqm5goS9DSKAqGFpq3398aOpwejmq4qWikqmQyRo=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "d57e8c535d4cbb07f441c30988ce52eec69db7a8",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-23.05",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"impermanence": "impermanence",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
33
flake.nix
Normal file
33
flake.nix
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
{
|
||||||
|
description = "NixOS system";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs = {
|
||||||
|
url = "github:NixOS/nixpkgs/nixos-23.05";
|
||||||
|
};
|
||||||
|
impermanence = {
|
||||||
|
url = "github:nix-community/impermanence";
|
||||||
|
};
|
||||||
|
nix-index-database = {
|
||||||
|
url = "github:nix-community/nix-index-database";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs"; # use the same nixpkgs as the system
|
||||||
|
};
|
||||||
|
home-manager = {
|
||||||
|
url = "github:nix-community/home-manager/release-23.05";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs"; # use the same nixpkgs as the system
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, ... }@inputs: {
|
||||||
|
nixosConfigurations = {
|
||||||
|
# Home desktop
|
||||||
|
omega = nixpkgs.lib.nixosSystem {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
specialArgs = inputs; # pass flake inputs to modules
|
||||||
|
modules = [
|
||||||
|
./hosts/omega
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
0
home/default.nix
Normal file
0
home/default.nix
Normal file
36
hosts/omega/default.nix
Normal file
36
hosts/omega/default.nix
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hardware.nix
|
||||||
|
../../modules/base
|
||||||
|
../../modules/desktop
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.hostName = "omega";
|
||||||
|
|
||||||
|
boot = {
|
||||||
|
loader = {
|
||||||
|
efi.canTouchEfiVariables = true;
|
||||||
|
systemd-boot.enable = true;
|
||||||
|
};
|
||||||
|
initrd.luks.devices.crypted.device = "/dev/disk/by-label/crypted";
|
||||||
|
};
|
||||||
|
|
||||||
|
# This value determines the NixOS release from which the default
|
||||||
|
# settings for stateful data, like file locations and database versions
|
||||||
|
# on your system were taken. It's perfectly fine and recommended to leave
|
||||||
|
# this value at the release version of the first install of this system.
|
||||||
|
# Before changing this value read the documentation for this option
|
||||||
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
|
system.stateVersion = "23.05"; # Did you read the comment?
|
||||||
|
|
||||||
|
# This value determines the Home Manager release that your
|
||||||
|
# configuration is compatible with. This helps avoid breakage
|
||||||
|
# when a new Home Manager release introduces backwards
|
||||||
|
# incompatible changes.
|
||||||
|
# You can update Home Manager without changing this value. See
|
||||||
|
# the Home Manager release notes for a list of state version
|
||||||
|
# changes in each release.
|
||||||
|
home-manager.users.caspervk.home.stateVersion = "23.05"; # Did you read the comment?
|
||||||
|
}
|
43
hosts/omega/hardware.nix
Normal file
43
hosts/omega/hardware.nix
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{ config, lib, pkgs, modulesPath, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[ (modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "sr_mod" "virtio_blk" ];
|
||||||
|
boot.initrd.kernelModules = [ "dm-snapshot" ];
|
||||||
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
# https://elis.nu/blog/2020/05/nixos-tmpfs-as-root/
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "none";
|
||||||
|
fsType = "tmpfs";
|
||||||
|
options = [ "defaults" "size=2G" "mode=755" ]; # mode=755 so only root can write to those files
|
||||||
|
};
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-label/BOOT";
|
||||||
|
fsType = "vfat";
|
||||||
|
};
|
||||||
|
fileSystems."/nix" = {
|
||||||
|
device = "/dev/disk/by-label/nix";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [
|
||||||
|
{
|
||||||
|
device = "/nix/persist/swapfile";
|
||||||
|
size = 16*1024; # 16 GiB
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||||
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
# still possible to use this option, but it's recommended to use it in conjunction
|
||||||
|
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||||
|
networking.useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.enp1s0.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
}
|
15
modules/base/default.nix
Normal file
15
modules/base/default.nix
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./fish.nix
|
||||||
|
./git.nix
|
||||||
|
./home-manager.nix
|
||||||
|
./impermanence.nix
|
||||||
|
./network.nix
|
||||||
|
./ssh.nix
|
||||||
|
./system.nix
|
||||||
|
./users.nix
|
||||||
|
./vim.nix
|
||||||
|
];
|
||||||
|
}
|
20
modules/base/fish.nix
Normal file
20
modules/base/fish.nix
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
# https://nixos.wiki/wiki/Fish
|
||||||
|
# https://nixos.wiki/wiki/Command_Shell
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
fishPlugins.colored-man-pages
|
||||||
|
fishPlugins.fzf-fish
|
||||||
|
fishPlugins.puffer
|
||||||
|
fishPlugins.pure
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.fish = {
|
||||||
|
enable = true;
|
||||||
|
interactiveShellInit = ''
|
||||||
|
fzf_configure_bindings --directory=\cf --git_log=\cg
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
users.defaultUserShell = pkgs.fish;
|
||||||
|
environment.shells = with pkgs; [ fish ];
|
||||||
|
}
|
21
modules/base/git.nix
Normal file
21
modules/base/git.nix
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{ home-manager, ... }: {
|
||||||
|
|
||||||
|
home-manager.users.caspervk = {
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
userName = "Casper V. Kristensen";
|
||||||
|
userEmail = "casper@vkristensen.dk";
|
||||||
|
|
||||||
|
delta = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfig = {
|
||||||
|
init.defaultBranch = "master";
|
||||||
|
pull.rebase = true;
|
||||||
|
rebase.autoSquash = true;
|
||||||
|
rebase.autoStash = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
27
modules/base/home-manager.nix
Normal file
27
modules/base/home-manager.nix
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{ home-manager, ... }: {
|
||||||
|
# https://nix-community.github.io/home-manager/index.html#sec-flakes-nixos-module
|
||||||
|
# https://nixos.wiki/wiki/Home_Manager
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
|
];
|
||||||
|
|
||||||
|
home-manager = {
|
||||||
|
# Use the same nixpkgs as the system
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
|
||||||
|
# Install packages to /etc/profiles instead of $HOME/.nix-profile, not sure why
|
||||||
|
useUserPackages = true;
|
||||||
|
|
||||||
|
users.caspervk = {
|
||||||
|
# Define the user and path Home Manager should manage
|
||||||
|
home = {
|
||||||
|
username = "caspervk";
|
||||||
|
homeDirectory = "/home/caspervk";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Let Home Manager install and manage itself
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
32
modules/base/impermanence.nix
Normal file
32
modules/base/impermanence.nix
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
{ pkgs, impermanence, ... }: {
|
||||||
|
# The impermanence module bind-mounts persistent files and directories, stored in /nix/persist, into the tmpfs root
|
||||||
|
# partition on startup. For example: /nix/persist/etc/machine-id is mounted to /etc/machine-id.
|
||||||
|
# https://github.com/nix-community/impermanence
|
||||||
|
# https://nixos.wiki/wiki/Impermanence
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
impermanence.nixosModules.impermanence
|
||||||
|
];
|
||||||
|
|
||||||
|
# We *don't* want to use tmpfs for /tmp in case we have to put big files there. Instead, we mount it to the disk and
|
||||||
|
# instruct systemd to clean it on boot.
|
||||||
|
boot.tmp.cleanOnBoot = true;
|
||||||
|
|
||||||
|
environment.persistence."/nix/persist" = {
|
||||||
|
hideMounts = true;
|
||||||
|
directories = [
|
||||||
|
{ directory = "/tmp"; user = "root"; group = "root"; mode = "1777"; } # see comment above
|
||||||
|
# With great power comes great responsibility, we get it
|
||||||
|
{ directory = "/var/db/sudo/lectured"; user = "root"; group = "root"; mode = "0700"; }
|
||||||
|
{ directory = "/var/log"; user = "root"; group = "root"; mode = "0755"; }
|
||||||
|
];
|
||||||
|
files = [
|
||||||
|
"/etc/machine-id" # needed for /var/log
|
||||||
|
];
|
||||||
|
users.caspervk = {
|
||||||
|
directories = [
|
||||||
|
"/" # entire home directory
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
23
modules/base/network.nix
Normal file
23
modules/base/network.nix
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
networking = {
|
||||||
|
firewall = {
|
||||||
|
allowedTCPPorts = [ 1234 1337 8000 8080 ];
|
||||||
|
allowedUDPPorts = [ 1234 1337 8000 8080 ];
|
||||||
|
};
|
||||||
|
nameservers = [ "159.69.4.2#dns.caspervk.net" ];
|
||||||
|
networkmanager = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.resolved = {
|
||||||
|
enable = true;
|
||||||
|
dnssec = "true";
|
||||||
|
fallbackDns = [ "159.69.4.2#dns.caspervk.net" ];
|
||||||
|
extraConfig = ''
|
||||||
|
DNSOverTLS=yes
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
services.vnstat.enable = true;
|
||||||
|
}
|
18
modules/base/ssh.nix
Normal file
18
modules/base/ssh.nix
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{ ... }: {
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
ports = [ 222 ];
|
||||||
|
settings = {
|
||||||
|
PasswordAuthentication = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.persistence."/nix/persist" = {
|
||||||
|
files = [
|
||||||
|
"/etc/ssh/ssh_host_ed25519_key"
|
||||||
|
"/etc/ssh/ssh_host_ed25519_key.pub"
|
||||||
|
"/etc/ssh/ssh_host_rsa_key"
|
||||||
|
"/etc/ssh/ssh_host_rsa_key.pub"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
71
modules/base/system.nix
Normal file
71
modules/base/system.nix
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
{ pkgs, nix-index-database, ... }: {
|
||||||
|
imports = [
|
||||||
|
nix-index-database.nixosModules.nix-index
|
||||||
|
];
|
||||||
|
|
||||||
|
nix = {
|
||||||
|
# https://nixos.wiki/wiki/Storage_optimization
|
||||||
|
gc = {
|
||||||
|
automatic = true;
|
||||||
|
dates = "weekly";
|
||||||
|
options = "--delete-older-than=30d";
|
||||||
|
};
|
||||||
|
settings = {
|
||||||
|
auto-optimise-store = true;
|
||||||
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
bat
|
||||||
|
clang
|
||||||
|
curl
|
||||||
|
dig
|
||||||
|
fd
|
||||||
|
fzf
|
||||||
|
gcc
|
||||||
|
git
|
||||||
|
gnumake
|
||||||
|
htop
|
||||||
|
inetutils
|
||||||
|
jq
|
||||||
|
magic-wormhole
|
||||||
|
ntp
|
||||||
|
python3
|
||||||
|
pwgen
|
||||||
|
ripgrep
|
||||||
|
rsync
|
||||||
|
sqlite
|
||||||
|
tmux
|
||||||
|
traceroute
|
||||||
|
tree
|
||||||
|
unzip
|
||||||
|
wget
|
||||||
|
xkcdpass
|
||||||
|
yq
|
||||||
|
];
|
||||||
|
|
||||||
|
# https://github.com/nix-community/comma
|
||||||
|
programs.nix-index-database.comma.enable = true;
|
||||||
|
programs.command-not-found.enable = false;
|
||||||
|
|
||||||
|
i18n = {
|
||||||
|
defaultLocale = "en_DK.UTF-8";
|
||||||
|
extraLocaleSettings = {
|
||||||
|
LC_ADDRESS = "en_DK.UTF-8";
|
||||||
|
LC_IDENTIFICATION = "en_DK.UTF-8";
|
||||||
|
LC_MEASUREMENT = "en_DK.UTF-8";
|
||||||
|
LC_MONETARY = "en_DK.UTF-8";
|
||||||
|
LC_NAME = "en_DK.UTF-8";
|
||||||
|
LC_NUMERIC = "en_DK.UTF-8";
|
||||||
|
LC_PAPER = "en_DK.UTF-8";
|
||||||
|
LC_TELEPHONE = "en_DK.UTF-8";
|
||||||
|
LC_TIME = "en_DK.UTF-8";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
time = {
|
||||||
|
timeZone = "Europe/Copenhagen";
|
||||||
|
};
|
||||||
|
}
|
28
modules/base/users.nix
Normal file
28
modules/base/users.nix
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
users = {
|
||||||
|
# Don't allow imperative modifications to users (incompatible with impermanence)
|
||||||
|
mutableUsers = false;
|
||||||
|
users = {
|
||||||
|
root = {
|
||||||
|
passwordFile = "/nix/persist/passwordfile";
|
||||||
|
};
|
||||||
|
caspervk = {
|
||||||
|
isNormalUser = true;
|
||||||
|
description = "Casper V. Kristensen";
|
||||||
|
passwordFile = "/nix/persist/passwordfile";
|
||||||
|
extraGroups = [
|
||||||
|
"networkmanager"
|
||||||
|
"wheel" # allows sudo
|
||||||
|
"video" # allows controlling brightness
|
||||||
|
# todo: docker, systemd-journal, audio, input, power, nix ?
|
||||||
|
];
|
||||||
|
uid = 1000;
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPB/qr63FB0ZqOe/iZGwIKNHD8a1Ud/mXVjQPmpIG7pM caspervk@omega"
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII71DKQziktCkyMAmL25QKRK6nG2uJDkQXioIZp5JkMZ caspervk@zeta"
|
||||||
|
];
|
||||||
|
packages = with pkgs; [];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
8
modules/base/vim.nix
Normal file
8
modules/base/vim.nix
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{ ... }: {
|
||||||
|
programs.neovim = {
|
||||||
|
enable = true;
|
||||||
|
defaultEditor = true;
|
||||||
|
viAlias = true;
|
||||||
|
vimAlias = true;
|
||||||
|
};
|
||||||
|
}
|
9
modules/desktop/default.nix
Normal file
9
modules/desktop/default.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./firefox.nix
|
||||||
|
./ssh.nix
|
||||||
|
./sway.nix
|
||||||
|
];
|
||||||
|
}
|
7
modules/desktop/firefox.nix
Normal file
7
modules/desktop/firefox.nix
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
# https://nixos.wiki/wiki/Firefox
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
firefox-wayland
|
||||||
|
];
|
||||||
|
}
|
26
modules/desktop/ssh.nix
Normal file
26
modules/desktop/ssh.nix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{ home-manager, ... }: {
|
||||||
|
# # https://nix-community.github.io/home-manager/options.html
|
||||||
|
|
||||||
|
home-manager.users.caspervk = {
|
||||||
|
programs.ssh = {
|
||||||
|
enable = true;
|
||||||
|
matchBlocks = {
|
||||||
|
"delta" = {
|
||||||
|
hostname = "delta.caspervk.net";
|
||||||
|
port = 222;
|
||||||
|
};
|
||||||
|
"lambda" = {
|
||||||
|
hostname = "lambda.caspervk.net";
|
||||||
|
port = 222;
|
||||||
|
};
|
||||||
|
"sigma" = {
|
||||||
|
hostname = "sigma.caspervk.net";
|
||||||
|
port = 222;
|
||||||
|
};
|
||||||
|
"git.caspervk.net" = {
|
||||||
|
port = 2222;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
51
modules/desktop/sway.nix
Normal file
51
modules/desktop/sway.nix
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
{ pkgs, home-manager, ... }: {
|
||||||
|
# https://nixos.wiki/wiki/Sway
|
||||||
|
# https://nix-community.github.io/home-manager/options.html
|
||||||
|
|
||||||
|
home-manager.users.caspervk = {
|
||||||
|
wayland.windowManager.sway = {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
assigns = {
|
||||||
|
"1: web" = [{ class = "^Firefox$"; }];
|
||||||
|
};
|
||||||
|
input = {
|
||||||
|
"*" = {
|
||||||
|
# Keyboard
|
||||||
|
xkb_layout = "us";
|
||||||
|
xkb_variant = "altgr-intl";
|
||||||
|
|
||||||
|
# Trackpad
|
||||||
|
tap = "enabled";
|
||||||
|
natural_scroll = "enable";
|
||||||
|
dwt = "disabled"; # don't disable-while-typing
|
||||||
|
};
|
||||||
|
};
|
||||||
|
modifier = "Mod4"; # super
|
||||||
|
terminal = "alacritty";
|
||||||
|
workspaceAutoBackAndForth = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
alacritty
|
||||||
|
];
|
||||||
|
|
||||||
|
# Audio
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
alsa = {
|
||||||
|
enable = true;
|
||||||
|
support32Bit = true;
|
||||||
|
};
|
||||||
|
jack.enable = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Video
|
||||||
|
programs.light.enable = true; # allows controlling screen brightness
|
||||||
|
|
||||||
|
# Allow sharing screen
|
||||||
|
#xdg.portal.wlr.enable = true;
|
||||||
|
}
|
4
todo
Normal file
4
todo
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
https://unix.stackexchange.com/questions/522822/different-methods-to-run-a-non-nixos-executable-on-nixos
|
||||||
|
https://discourse.nixos.org/t/tips-tricks-for-nixos-desktop/28488
|
||||||
|
https://github.com/sioodmy/dotfiles/blob/main/modules/core/users.nix
|
||||||
|
https://nixos.wiki/wiki/Comparison_of_secret_managing_schemes
|
Loading…
Reference in a new issue