starting point

This commit is contained in:
Snorre Ettrup Altschul 2025-01-14 19:04:37 +01:00
commit 279f90bfb8
77 changed files with 5757 additions and 0 deletions

165
README.md Executable file
View file

@ -0,0 +1,165 @@
# My nixos flake
This is my nixos configuration.
# Installation
To install either run the following script, or follow the instructions.
```sh
curl https://gitlab.com/SpoodyTheOne/nixos-config/-/raw/master/install.sh -o install.sh
sudo chmod +x install.sh
./install.sh
```
## Disko partitioning
### Finding your disk
run `lsblk` to find the name of your drive. In my case it was `/dev/nvme0n1` but other names it can have are `/dev/sd[a-z]` or `/dev/vd[a-z]` if you are installing on a virtual machine.
### Acquire disko config
run
```sh
curl https://gitlab.com/SpoodyTheOne/nixos-config/-/raw/master/modules/disko/disko-luks.nix -o /tmp/disko.nix
```
to download the latest version of my disko config
### Run disko partitioning
This will run my disko config and partition your disk.
> [!WARNING]
> This command will erase all data on the chosen disk. Make sure you partition the correct disk and that you've backed up anything important on it
The command to run the config is
```sh
sudo nix --experimental-features "nix-command flakes" \
run github:nix-community/disko -- \
--mode disko /tmp/disko.nix \
--arg device '"<YOUR DISK HERE>"' \
--arg swap-size '"<eg. 8G>"'
```
> [!NOTE]
> The swap size can be any number suffixed with the standard K,M,G for gigabytes and such.
During the installation you will be prompted for a password. This is the password used for unencrypting your disk every time you boot.
You will be prompted twice, once to lock it, and then again to unlock it.
The device will now be mounted on `/mnt` and should contain the following structure
- /persist
- /boot
- /nix
## Generate configuration
You need to generate the `hardware-configuration.nix` file for your system.
To do this run
```sh
sudo nixos-generate-config --no-filesystems --root /mnt
```
This will generate a folder called `/mnt/etc/nixos` with the hardware configuration file in it.
Next step is to move `hardware-configuration.nix` into `/tmp` and then clone the git repo to `/etc/nixos`
```sh
nix-shell -p git # For the git command
sudo mv /mnt/etc/nixos/hardware-configuration.nix /tmp # Move configuration away
sudo rm -rf /mnt/etc/nixos # Nuke config folder so we can clone
sudo git clone https://gitlab.com/SpoodyTheOne/nixos-config.git /mnt/etc/nixos # Clone config
```
## Configuring config
Start by replacing the bootstrap hosts hardware-configuration with your own
```sh
# Move hardware configuration
sudo mv /tmp/hardware-configuration.nix /mnt/etc/nixos/hosts/bootstrap
# go to /etc/nixos
cd /mnt/etc/nixos
# Add hardware configuration to git for nix to recognize it
sudo git add .
```
## Configure users
Go to `/mnt/etc/nixos/flake.nix` and change the config for the bootstrap host disko module to have the same settings you used for setting up your disk.
```sh
sudo vim /mnt/etc/nixos/flake.nix
```
## Install
Now that everything is configured run
```sh
# Copy configuration to permanent storage so its not nuked on reboot
sudo cp -r /mnt/etc/nixos /mnt/persist
sudo nixos-install --root /mnt --flake /mnt/etc/nixos#bootstrap
```
to install everything and then reboot.
## After reboot
After the reboot you will be prompted for your disk password. After inputting it the system will boot as normal.
Once booted log in using the user `bootstrap` and the password `1234`.
Next step, modify the bootstrap host configuration to enable impermanence and change the user and password. Then rebuild and reboot
```sh
cd /persist/nixos
sudo vim hosts/bootstrap/configuration.nix
```
in the config go to imports and uncomment this block
```nix
# UNCOMMENT AFTER REBOOT
# Delete unwanted files
# (import ../../modules/disko/delete-on-boot.nix {
# inherit lib;
# persistExtraDirectories = [ ];
# persistExtraFiles = [ ];
# })
```
Futher down in the file theres a line that says `users.users."bootstrap"`. Modify the string to your desired username and change the following lines in the user
```sh
# Generate a password and place the output in a file
mkpasswd > /tmp/passwd
```
Then in vim read the contenst of the password into the hashedPassword field
```vim
:read /tmp/passwd
```
The end result should look something like this
```diff
- initialPassword = "1234";
+ hashedPassword = "$y$j9T$TK08gB8eSmQdGaS2Gfiex/$L2moQMRxYDEiuEeql/MidoQhFBAJC1qnOTx7ChpAOtC"';
```
Move `/persist/nixos/` to `/etc/nixos` and rebuild. Then the installation will be done
```sh
sudo mv -r /persist/nixos /etc
```
Then rebuild
```sh
sudo nix-rebuild switch --flake /persist/nixos#bootstrap
reboot
```
Don't worry about all the errors that occur during the rebuild. This only happens the first time after switching to impermanence
# Post Installation
Once you've installed you're free to create a new host and modify it to your hearts content. You can base it off of my laptop host, it has a lot of nice things
My config includes an alias for rebuilding the system called `nix-rebuild` for fast iterations
# Update
In order to update the flake inputs simply run
```sh
cd /etc/nixos
nix flake update
```

747
flake.lock Executable file
View file

@ -0,0 +1,747 @@
{
"nodes": {
"base16": {
"inputs": {
"fromYaml": "fromYaml"
},
"locked": {
"lastModified": 1732200724,
"narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=",
"owner": "SenchoPens",
"repo": "base16.nix",
"rev": "153d52373b0fb2d343592871009a286ec8837aec",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "base16.nix",
"type": "github"
}
},
"base16-fish": {
"flake": false,
"locked": {
"lastModified": 1622559957,
"narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=",
"owner": "tomyun",
"repo": "base16-fish",
"rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe",
"type": "github"
},
"original": {
"owner": "tomyun",
"repo": "base16-fish",
"type": "github"
}
},
"base16-helix": {
"flake": false,
"locked": {
"lastModified": 1725860795,
"narHash": "sha256-Z2o8VBPW3I+KKTSfe25kskz0EUj7MpUh8u355Z1nVsU=",
"owner": "tinted-theming",
"repo": "base16-helix",
"rev": "7f795bf75d38e0eea9fed287264067ca187b88a9",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-helix",
"type": "github"
}
},
"base16-vim": {
"flake": false,
"locked": {
"lastModified": 1731949548,
"narHash": "sha256-XIDexXM66sSh5j/x70e054BnUsviibUShW7XhbDGhYo=",
"owner": "tinted-theming",
"repo": "base16-vim",
"rev": "61165b1632409bd55e530f3dbdd4477f011cadc6",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-vim",
"type": "github"
}
},
"devshell": {
"inputs": {
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1735644329,
"narHash": "sha256-tO3HrHriyLvipc4xr+Ewtdlo7wM1OjXNjlWRgmM7peY=",
"owner": "numtide",
"repo": "devshell",
"rev": "f7795ede5b02664b57035b3b757876703e2c3eac",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "devshell",
"type": "github"
}
},
"disko": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1736165297,
"narHash": "sha256-OT+sF4eNDFN/OdyUfIQwyp28+CFQL7PAdWn0wGU7F0U=",
"owner": "nix-community",
"repo": "disko",
"rev": "76816af65d5294761636a838917e335992a52e0c",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "disko",
"type": "github"
}
},
"flake-compat": {
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"revCount": 57,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1736143030,
"narHash": "sha256-+hu54pAoLDEZT9pjHlqL9DNzWz0NbUn8NEAHP7PQPzU=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "b905f6fc23a9051a6e1b741e1438dbfc0634c6de",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": [
"stylix",
"systems"
]
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"fromYaml": {
"flake": false,
"locked": {
"lastModified": 1731966426,
"narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=",
"owner": "SenchoPens",
"repo": "fromYaml",
"rev": "106af9e2f715e2d828df706c386a685698f3223b",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "fromYaml",
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": [
"nixvim",
"flake-compat"
],
"gitignore": "gitignore",
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1735882644,
"narHash": "sha256-3FZAG+pGt3OElQjesCAWeMkQ7C/nB1oTHLRQ8ceP110=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "a5a961387e75ae44cc20f0a57ae463da5e959656",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"git-hooks_2": {
"inputs": {
"flake-compat": [
"stylix",
"flake-compat"
],
"gitignore": "gitignore_2",
"nixpkgs": [
"stylix",
"nixpkgs"
],
"nixpkgs-stable": [
"stylix",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1731363552,
"narHash": "sha256-vFta1uHnD29VUY4HJOO/D6p6rxyObnf+InnSMT4jlMU=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "cd1af27aa85026ac759d5d3fccf650abe7e1bbf0",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"nixvim",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"gitignore_2": {
"inputs": {
"nixpkgs": [
"stylix",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"gnome-shell": {
"flake": false,
"locked": {
"lastModified": 1732369855,
"narHash": "sha256-JhUWbcYPjHO3Xs3x9/Z9RuqXbcp5yhPluGjwsdE2GMg=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "dadd58f630eeea41d645ee225a63f719390829dc",
"type": "github"
},
"original": {
"owner": "GNOME",
"ref": "47.2",
"repo": "gnome-shell",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1736089250,
"narHash": "sha256-/LPWMiiJGPHGd7ZYEgmbE2da4zvBW0acmshUjYC3WG4=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "172b91bfb2b7f5c4a8c6ceac29fd53a01ef07196",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_2": {
"inputs": {
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1736089250,
"narHash": "sha256-/LPWMiiJGPHGd7ZYEgmbE2da4zvBW0acmshUjYC3WG4=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "172b91bfb2b7f5c4a8c6ceac29fd53a01ef07196",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_3": {
"inputs": {
"nixpkgs": [
"stylix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1735774425,
"narHash": "sha256-C73gLFnEh8ZI0uDijUgCDWCd21T6I6tsaWgIBHcfAXg=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "5f6aa268e419d053c3d5025da740e390b12ac936",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"impermanence": {
"locked": {
"lastModified": 1734945620,
"narHash": "sha256-olIfsfJK4/GFmPH8mXMmBDAkzVQ1TWJmeGT3wBGfQPY=",
"owner": "nix-community",
"repo": "impermanence",
"rev": "d000479f4f41390ff7cf9204979660ad5dd16176",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "impermanence",
"type": "github"
}
},
"ixx": {
"inputs": {
"flake-utils": [
"nixvim",
"nuschtosSearch",
"flake-utils"
],
"nixpkgs": [
"nixvim",
"nuschtosSearch",
"nixpkgs"
]
},
"locked": {
"lastModified": 1729958008,
"narHash": "sha256-EiOq8jF4Z/zQe0QYVc3+qSKxRK//CFHMB84aYrYGwEs=",
"owner": "NuschtOS",
"repo": "ixx",
"rev": "9fd01aad037f345350eab2cd45e1946cc66da4eb",
"type": "github"
},
"original": {
"owner": "NuschtOS",
"ref": "v0.0.6",
"repo": "ixx",
"type": "github"
}
},
"nix-darwin": {
"inputs": {
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1736085891,
"narHash": "sha256-bTl9fcUo767VaSx4Q5kFhwiDpFQhBKna7lNbGsqCQiA=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "ba9b3173b0f642ada42b78fb9dfc37ca82266f6c",
"type": "github"
},
"original": {
"owner": "lnl7",
"repo": "nix-darwin",
"type": "github"
}
},
"nix-index-database": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1736047960,
"narHash": "sha256-hutd85FA1jUJhhqBRRJ+u7UHO9oFGD/RVm2x5w8WjVQ=",
"owner": "nix-community",
"repo": "nix-index-database",
"rev": "816a6ae88774ba7e74314830546c29e134e0dffb",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-index-database",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1736012469,
"narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1735648875,
"narHash": "sha256-fQ4k/hyQiH9RRPznztsA9kbcDajvwV1sRm01el6Sr3c=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "47e29c20abef74c45322eca25ca1550cdf5c3b50",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixvim": {
"inputs": {
"devshell": "devshell",
"flake-compat": "flake-compat",
"flake-parts": "flake-parts",
"git-hooks": "git-hooks",
"home-manager": "home-manager_2",
"nix-darwin": "nix-darwin",
"nixpkgs": [
"nixpkgs"
],
"nuschtosSearch": "nuschtosSearch",
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1736157655,
"narHash": "sha256-/ggXMK8Q/rN94kaaSHPtEcf4SPKgPXfzSbDgAR6Odzs=",
"owner": "nix-community",
"repo": "nixvim",
"rev": "31139e0605fd886d981e0a197e30ceac4b859d6e",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixvim",
"type": "github"
}
},
"nuschtosSearch": {
"inputs": {
"flake-utils": "flake-utils",
"ixx": "ixx",
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1735854821,
"narHash": "sha256-Iv59gMDZajNfezTO0Fw6LHE7uKAShxbvMidmZREit7c=",
"owner": "NuschtOS",
"repo": "search",
"rev": "836908e3bddd837ae0f13e215dd48767aee355f0",
"type": "github"
},
"original": {
"owner": "NuschtOS",
"repo": "search",
"type": "github"
}
},
"root": {
"inputs": {
"disko": "disko",
"home-manager": "home-manager",
"impermanence": "impermanence",
"nix-index-database": "nix-index-database",
"nixpkgs": "nixpkgs",
"nixvim": "nixvim",
"stylix": "stylix",
"zen-browser": "zen-browser"
}
},
"stylix": {
"inputs": {
"base16": "base16",
"base16-fish": "base16-fish",
"base16-helix": "base16-helix",
"base16-vim": "base16-vim",
"flake-compat": "flake-compat_2",
"flake-utils": "flake-utils_2",
"git-hooks": "git-hooks_2",
"gnome-shell": "gnome-shell",
"home-manager": "home-manager_3",
"nixpkgs": "nixpkgs_2",
"systems": "systems_2",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty",
"tinted-tmux": "tinted-tmux",
"tinted-zed": "tinted-zed"
},
"locked": {
"lastModified": 1736176887,
"narHash": "sha256-XacDv8TFEcqaZlfsRqNFUCgca7Xv3SQtzrXon8oEhVo=",
"owner": "danth",
"repo": "stylix",
"rev": "b47ef3b8560c3921404d72cec95d84632e355e01",
"type": "github"
},
"original": {
"owner": "danth",
"repo": "stylix",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"tinted-foot": {
"flake": false,
"locked": {
"lastModified": 1726913040,
"narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=",
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
}
},
"tinted-kitty": {
"flake": false,
"locked": {
"lastModified": 1716423189,
"narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=",
"owner": "tinted-theming",
"repo": "tinted-kitty",
"rev": "eb39e141db14baef052893285df9f266df041ff8",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-kitty",
"rev": "eb39e141db14baef052893285df9f266df041ff8",
"type": "github"
}
},
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1729501581,
"narHash": "sha256-1ohEFMC23elnl39kxWnjzH1l2DFWWx4DhFNNYDTYt54=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "f0e7f7974a6441033eb0a172a0342e96722b4f14",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-tmux",
"type": "github"
}
},
"tinted-zed": {
"flake": false,
"locked": {
"lastModified": 1725758778,
"narHash": "sha256-8P1b6mJWyYcu36WRlSVbuj575QWIFZALZMTg5ID/sM4=",
"owner": "tinted-theming",
"repo": "base16-zed",
"rev": "122c9e5c0e6f27211361a04fae92df97940eccf9",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-zed",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1736115332,
"narHash": "sha256-FBG9d7e0BTFfxVdw4b5EmNll2Mv7hfRc54hbB4LrKko=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "1788ca5acd4b542b923d4757d4cfe4183cc6a92d",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"zen-browser": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1727721329,
"narHash": "sha256-QYlWZwUSwrM7BuO+dXclZIwoPvBIuJr6GpFKv9XKFPI=",
"owner": "MarceColl",
"repo": "zen-browser-flake",
"rev": "e6ab73f405e9a2896cce5956c549a9cc359e5fcc",
"type": "github"
},
"original": {
"owner": "MarceColl",
"repo": "zen-browser-flake",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

153
flake.nix Executable file
View file

@ -0,0 +1,153 @@
{
description = "Nixos configuration flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
# neorg-overlay.url = "github:nvim-neorg/nixpkgs-neorg-overlay";
stylix = {
url = "github:danth/stylix";
# inputs.nixpkgs.follows = "nixpkgs";
};
zen-browser = {
url = "github:MarceColl/zen-browser-flake";
inputs.nixpkgs.follows = "nixpkgs";
};
nixvim = {
url = "github:nix-community/nixvim";
inputs.nixpkgs.follows = "nixpkgs";
};
disko = {
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs";
};
impermanence = {
url = "github:nix-community/impermanence";
};
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-index-database = {
url = "github:nix-community/nix-index-database";
inputs.nixpkgs.follows = "nixpkgs";
};
# hyprland.url = "github:hyprwm/Hyprland";
#
# hyprfocus = {
# url = "github:pyt0xic/hyprfocus";
# inputs.hyprland.follows = "hyprland";
# };
#
# hyprland-plugins = {
# url = "github:hyprwm/hyprland-plugins";
# inputs.hyprland.follows = "hyprland";
# };
};
outputs = { self, nixpkgs, ... } @ inputs:
let
system = "x86_64-linux";
pkgs = import nixpkgs { inherit system; overlays = []; };
in
{
nixosConfigurations = {
bootstrap = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
};
modules = [
inputs.disko.nixosModules.default
(import ./modules/disko/disko-luks.nix { device = "/dev/nvme0n1"; swap-size = "8G"; encrypted = false; })
./hosts/bootstrap/configuration.nix
inputs.impermanence.nixosModules.impermanence
];
};
desktop = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
};
modules = [
inputs.disko.nixosModules.default
(import ./modules/disko/disko-luks.nix { device = "/dev/nvme0n1"; swap-size = "8G"; encrypted = false; })
./hosts/desktop/configuration.nix
inputs.impermanence.nixosModules.impermanence
inputs.home-manager.nixosModules.default
inputs.nixvim.nixosModules.nixvim
inputs.stylix.nixosModules.stylix
inputs.nix-index-database.nixosModules.nix-index
{ programs.nix-index-database.comma.enable = true; }
];
};
nixos-vm = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
};
modules = [
inputs.disko.nixosModules.default
(import ./hosts/nixos-vm/disko-luks.nix { device = "/dev/vda"; })
./hosts/nixos-vm/configuration.nix
inputs.impermanence.nixosModules.impermanence
inputs.home-manager.nixosModules.default
inputs.nixvim.nixosModules.nixvim
inputs.stylix.nixosModules.stylix
];
};
laptop = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
};
modules = [
inputs.disko.nixosModules.default
(import ./modules/disko/disko-luks.nix { device = "/dev/sda"; swap-size = "32G"; encrypted = true; })
./hosts/laptop/configuration.nix
inputs.impermanence.nixosModules.impermanence
inputs.home-manager.nixosModules.default
inputs.nixvim.nixosModules.nixvim
inputs.stylix.nixosModules.stylix
inputs.nix-index-database.nixosModules.nix-index
{ programs.nix-index-database.comma.enable = true; }
];
};
};
templates = {
dotnet = {
path = ./templates/dotnet;
description = "Flake for programming in dotnet";
};
latex = {
path = ./templates/latex;
description = "Flake for creating latex documents";
};
};
};
}

View file

@ -0,0 +1,84 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ config, lib, pkgs, inputs, ... }:
{
# This is where you specify all .nix files to import
imports =
[
# Hardware configuration that you generated in earlier steps
./hardware-configuration.nix
(import ../../modules/disko/delete-on-boot.nix {
inherit lib;
persistExtraDirectories = [ ];
persistExtraFiles = [ ];
users = {};
})
];
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.loader.timeout = 0;
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# System wide packages goes here
environment.systemPackages = with pkgs; [
git
vim
];
users.users."snorre" = {
isNormalUser = true;
# Unsafe and resets every boot, use hashedPassword after installation
initialPassword = "1234";
# hashedPassword = "Generate hash with `mkpasswd` and place result here";
extraGroups = [
"networkmanager"
"audio"
"wheel" # Allows this user to use `sudo`
];
};
networking.hostName = "bootstrap"; # Define your hostname.
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
# Ssh configuration here
services.openssh = {
enable = false; # Set to true to allow ssh connections
settings = {
# Require public key authentication
# Set to true to allow connecting with username+password
PasswordAuthentication = false;
KbdInteractiveAuthentication = false;
# Users who can be connected to from ssh. Set to null to allow all users
AllowUsers = null;
# Disallow ssh connections to root user. DONT ENABLE THIS
PermitRootLogin = "no";
};
};
# This option defines the first version of NixOS you have installed on this particular machine,
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
#
# Most users should NEVER change this value after the initial install, for any reason,
# even if you've upgraded your system to a new NixOS release.
#
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
# so changing it will NOT upgrade your system.
#
# This value being lower than the current NixOS release does NOT mean your system is
# out of date, out of support, or vulnerable.
#
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
# and migrated your data accordingly.
#
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "23.11"; # Did you read the comment?
}

View file

@ -0,0 +1,26 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "usbhid" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
# 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.enp8s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp7s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

415
hosts/desktop/configuration.nix Executable file
View file

@ -0,0 +1,415 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ config, lib, pkgs, inputs, ... }:
let
persistence = {
"snorre" = import ./persist.nix;
};
in
{
imports =
[
# Include the results of the hardware scan.
./hardware-configuration.nix
# ../../modules/drivers/nvidia.nix
../../modules/plymouth/blahaj.nix
(import ../../modules/disko/delete-on-boot.nix {
inherit lib;
persistExtraDirectories = [ ];
persistExtraFiles = [ ];
users = persistence;
})
# ../../modules/plymouth
#../../modules/users/main-user.nix
];
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.loader.timeout = 0;
boot.kernelPackages = pkgs.linuxPackages_zen;
# boot.plymouth.enable = true;
# boot.plymouth.theme = "nixos-bgrt";
# boot.plymouth.themePackages = [
# pkgs.nixos-bgrt-plymouth
# ];
programs.nix-ld.enable = true;
# programs.nix-ld.libraries = with pkgs; [
# # Add any missing dynamic libraries for unpackaged programs
# # here, NOT in environment.systemPackages
# ];
boot.consoleLogLevel = 0;
boot.initrd.verbose = false;
boot.kernelParams = [
"i915.fastboot=1"
"preempt=full"
"quiet"
"splash"
# "boot.shell_on_fail"
"loglevel=3"
# "rd.systemd.show_status=false"
# "rd.udev.log_level=3"
# "udev.log_priority=3"
];
nix.settings.experimental-features = [ "nix-command" "flakes" ];
home-manager = {
extraSpecialArgs = { inherit inputs; };
users = {
"snorre" = import ./home.nix;
};
};
# fonts.packages = with pkgs; [
# (nerdfonts.override {
# fonts = [
# "Devicons"config
# ];
# })
# ];
programs.localsend.openFirewall = true;
virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true;
programs.steam = {
enable = true;
gamescopeSession.enable = false;
};
security.chromiumSuidSandbox.enable = true; # unity3d.enable was only to allow chrome root sandboxxing
programs.adb.enable = true;
# nixos loves its files. So much that it opens more than 8000 of them at times. Lets increase the limit
# security.pam.loginLimits = [{
# domain = "*";
# type = "soft";
# item = "nofile";
# value = "65536";
# }];
users.users."snorre" = {
isNormalUser = true;
hashedPassword = "$y$j9T$L2udHOsjFhnZpksLamKec/$IwNrtR9YCSx8eIau5VD3todAqFkfvSL9ONiEQNiGV.9";
extraGroups = [
"networkmanager"
"audio"
"wheel"
"adbusers"
"libvirtd"
];
# openssh.authorizedKeys.keyFiles = [
# ./ssh/authorized_keys_snorre
# ];
shell = pkgs.zsh;
};
# Programs to enable
# programs.zsh.enable = true; # Better shell than bash
programs.zsh = {
enable = true;
# This prevents cache invalidation when also managing zsh from home-manager,
# leading to faster startup times
enableGlobalCompInit = false;
};
programs.hyprland = {
# Hyprland desktop environment
enable = true;
portalPackage = pkgs.xdg-desktop-portal-hyprland;
};
programs.ssh.startAgent = true; # ssh-agent for interacting with github
# security.chromiumSuidSandbox.enable = true; # unity3d.enable was only to allow chrome root sandboxxing
# programs.noisetorch.enable = true; # Noisetorch because discord krisp doesnt work
# Fuck nano, all my homies hate nano
programs.nano.enable = false;
# I want my steams and other non-libre software
nixpkgs.config.allowUnfree = true;
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
wget
curl
git
# ranger
# libsecret manager
# pass-secret-service
keepassxc
libsecret
# ((drv: pkgs.symlinkJoin {
# name = drv.name;
# paths = [ drv ];
# postBuild = "rm -rf $out/share/applications";
# }) pkgs.neovim)
neovim
# graphics
mesa
# Notifications
libnotify
# For enabling and styling QT
libsForQt5.qtstyleplugin-kvantum
libsForQt5.qt5ct
catppuccin-kvantum
# Gnome keyring makes it so we dont have to keep logging into programs
gnome-keyring
# Ui for when programs want sudo
polkit-kde-agent
];
programs.gamemode = {
enable = true;
enableRenice = true;
settings = {
general = {
renice = 3;
};
custom = {
# start = "${pkgs.libnotify}/bin/notify-send 'GameMode started'";
# end = "${pkgs.libnotify}/bin/notify-send 'GameMode ended'";
start =
let
script = pkgs.writeScriptBin "gamemode_start.sh" ''
${pkgs.libnotify}/bin/notify-send "GameMode started"
${pkgs.libnotify}/bin/notify-send "user is: $USER"
/home/$USER/.nix-profile/bin/hyprctl keyword input:touchpad:disable_while_typing false
'';
in
"${script}/bin/gamemode_start.sh";
end =
let
script = pkgs.writeScriptBin "gamemode_end.sh" ''
${pkgs.libnotify}/bin/notify-send "GameMode end"
/home/$USER/.nix-profile/bin/hyprctl keyword input:touchpad:disable_while_typing true
'';
in
"${script}/bin/gamemode_end.sh";
};
};
};
# Session variables for qt and hyprland
environment.sessionVariables = {
XDG_CURRENT_DESKTOP = "Hyprland";
XDG_SESSION_DESKTOP = "Hyprland";
XDG_SESSION_TYPE = "wayland";
GDK_BACKEND = "wayland";
GTK_USE_PORTAL = "1";
QT_QPA_PLATFORMTHEME = "qt5ct";
QT_QPA_PLATFORM = "wayland";
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
QT_AUTO_SCREEN_SCALE_FACTOR = "0";
MOZ_ENABLE_WAYLAND = "1";
# SSH_AUTH_SOCK = "$XDG_RUNTIME_DIR/ssh-agent";
};
xdg.portal = {
enable = true;
wlr.enable = true;
extraPortals = [
pkgs.xdg-desktop-portal-gtk
(pkgs.callPackage ../../modules/portals/xdg-desktop-portal-termfilechooser.nix { })
];
# xdgOpenUsePortal = true;
};
qt = {
enable = true;
platformTheme = "qt5ct";
};
# Delete old entries to
nix = {
gc = {
automatic = true;
options = "--delete-older-than 30d";
};
};
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-material-dark-soft.yaml";
stylix.autoEnable = true;
stylix.polarity = "dark";
# stylix.cursor.package = ( pkgs.callPackage ../../modules/stylix/cursors/posy-improved {} );
# stylix.cursor.name = "Posy_Cursor";
stylix.cursor.package = pkgs.bibata-cursors;
stylix.cursor.name = "Bibata-Modern-Ice";
stylix.cursor.size = 24;
stylix.image = ./nixos-wallpaper.png;
networking.hostName = "desktop"; # Define your hostname.
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
networking.networkmanager.wifi.powersave = true;
networking.firewall = {
enable = true;
allowedTCPPorts = [ 8000 ];
allowedUDPPortRanges = [
{ from = 8000; to = 8010; }
];
};
# Fuck off, i wanna boot
systemd.services."NetworkManager-wait-online".enable = false;
# Set your time zone.
time.timeZone = "Europe/Copenhagen";
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
# console = {
# keyMap = "dk";
# };
# Remove message when running commands as sudo
security.sudo = {
enable = true;
extraConfig = ''
Defaults lecture = never
'';
};
services.blueman = {
enable = true;
};
virtualisation.docker = {
enable = true;
storageDriver = "btrfs";
};
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = false;
hardware.bluetooth.settings = {
General = {
Experimental = true;
};
};
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [
intel-media-driver # LIBVA_DRIVER_NAME=iHD
intel-vaapi-driver # LIBVA_DRIVER_NAME=i965 (older but works better for Firefox/Chromium)
libvdpau-va-gl
];
};
services.pipewire = {
enable = true;
audio.enable = true;
alsa.enable = true;
pulse.enable = true;
wireplumber.enable = true;
};
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
programs.mtr.enable = true;
programs.gnupg.agent = {
enable = true;
# enableSSHSupport = true;
};
# services.power-profiles-daemon = {
# enable = true;
# };
services.auto-cpufreq = {
enable = true;
settings = {
charger = {
governor = "performance";
turbo = "auto";
};
battery = {
governor = "powersave";
energy_performance_preference = "power";
turbo = "never";
scaling_max_freq = 1000000;
};
};
};
services.thermald.enable = true;
services.openssh = {
enable = true;
settings = {
# Require public key authentication
PasswordAuthentication = false;
KbdInteractiveAuthentication = false;
AllowUsers = null;
PermitRootLogin = "no";
};
};
# Minimal TUI displaymanager for loggin in and launching hyprland
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland";
user = "snorre";
};
# First session auto starts hyprland
initial_session = {
command = "${pkgs.hyprland}/bin/Hyprland";
user = "snorre";
};
};
};
# hardware.opengl.driSupport = true; # This is already enabled by default
# hardware.opengl.driSupport32Bit = true; # For 32 bit applications
# This option defines the first version of NixOS you have installed on this particular machine,
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
#
# Most users should NEVER change this value after the initial install, for any reason,
# even if you've upgraded your system to a new NixOS release.
#
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
# so changing it will NOT upgrade your system.
#
# This value being lower than the current NixOS release does NOT mean your system is
# out of date, out of support, or vulnerable.
#
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
# and migrated your data accordingly.
#
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "23.11"; # Did you read the comment?
}

29
hosts/desktop/disko.nix Normal file
View file

@ -0,0 +1,29 @@
{ device ? throw "Set this to your disk device, e.g. /dev/sda"
, swap-size ? "0"
, encrypted ? false
, lib
, ...
}:
let
disko-luks = import ../modules/disko/disko-luks.nix;
in
{
disko.devices.disk = lib.mergeAttrsList [
{ main = disko-luks.devices.disk.main; }
{
hdd = {
device = "/dev/sda";
type = "disk";
content = {
type = "gpt";
partitions = {
main = {
size = "100%";
};
};
};
};
}
];
}

View file

@ -0,0 +1,26 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "usbhid" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
# 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.enp8s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp7s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

151
hosts/desktop/home.nix Executable file
View file

@ -0,0 +1,151 @@
{ pkgs, inputs, lib, ... }:
{
imports = [
# inputs.impermanence.nixosModules.home-manager.impermanence
../../modules/stylix/home
../../modules/editors/nixvim
../../modules/shells/zsh.nix
../../modules/programs/dunst.nix
../../modules/programs/waybar
../../modules/programs/hyprpaper.nix
../../modules/programs/tofi.nix
../../modules/programs/alacritty.nix
../../modules/programs/firefox.nix
../../modules/programs/tmux.nix
../../modules/programs/mangohud.nix
(import ../../modules/window-managers/hyprland {
monitors = [
"DP-2, 1920x1080@240, 1080x300, 1"
"HDMI-A-1, 1920x1080@144, 0x0, 1, transform, 1"
];
border-radius = 4;
})
../../modules/window-managers/hyprland/hyprlock.nix
../../modules/window-managers/hyprland/hypridle.nix
# (import ../../modules/disko/impermanence-home.nix {
# extraDirectories = [
# ".jump"
#
# ".mozilla"
# ".zen"
#
# ".config/vesktop"
# ".config/zsh"
#
# ".cache/mozilla"
# ".cache/zen"
# ".cache/nvidia"
# ".cache/nix"
# ".cache/obexd"
# ".factorio"
# ".local/share/Steam"
# ];
# extraFiles = [ ];
#
# username = "snorre";
# nixIndexEnabled = true;
# })
];
home.username = "snorre";
home.homeDirectory = "/home/snorre";
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-material-dark-soft.yaml";
stylix.polarity = "dark";
stylix.image = ./nixos-wallpaper.png;
stylix.autoEnable = true;
stylix.targets.alacritty.enable = true;
# hyprpaper.wallpaper = ./nixos-wallpaper.png;
nixpkgs.config.allowUnfree = true;
home.packages =
let
tex = (pkgs.texlive.combine {
inherit (pkgs.texlive) scheme-medium
titling
biblatex hyperref amsmath tcolorbox environ
;
});
in
(with pkgs; [
file
nixpkgs-fmt
ripgrep
jump
wl-clipboard
hyprpaper
hyprpicker
grimblast
tofi
brightnessctl
# Required for waybar to work
playerctl
wl-clipboard
localsend
ipe
texlivePackages.latex
texlivePackages.luatex
zathura
tex
biber
prismlauncher
spotify
vesktop
sublime-merge
obs-studio
vial
]);
# Mount 2tb harddisk
systemd.user.mounts."home-snorre-2tb" = {
Unit = {
Description = "Mount 2tb hdd to home folder";
};
Mount = {
What = "/dev/sda1";
Where = "/home/snorre/2tb";
Type = "ext4";
Options = "defaults";
TimeoutSec = 30;
};
};
programs.btop.enable = true;
# programs.nix-index = {
# enable = true;
# enableZshIntegration = true;
# };
zsh.jump.enable = true;
zsh.jump.show-destination = true;
# Since zsh is the login shell it overrides $HOME/.zsh_history before impermanence can restore the old version.
# Therefore we simply store the history directly in /persist
zsh.histFile = "/persist/system/home/snorre/.zsh_history";
# Let home-manager manage itself
programs.home-manager.enable = true;
home.sessionVariables = {
EDITOR = "nvim";
# NIX_AUTO_RUN = "1"; # Automatically run non-installed commands if possible
# NIX_BUILD_SHELL = "zsh";
};
home.stateVersion = "23.11";
}

BIN
hosts/desktop/nixos-wallpaper.png Executable file

Binary file not shown.

After

(image error) Size: 124 KiB

32
hosts/desktop/persist.nix Normal file
View file

@ -0,0 +1,32 @@
{
directories = [
### DEFAULT BEGIN ###
"Documents"
"Music"
"Pictures"
"Videos"
".gnupg"
".ssh"
".local"
".cache/mesa_shader_cache"
".cache/mesa_shader_cache_db"
#### DEFAULT END ####
".jump"
".mozilla"
".config/vesktop"
".config/zsh"
".cache/mozilla"
".cache/nix"
".cache/obexd"
".factorio"
".local/share/Steam"
];
files = [
".zsh_history"
".gitconfig"
];
}

433
hosts/laptop/configuration.nix Executable file
View file

@ -0,0 +1,433 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ config, lib, pkgs, inputs, ... }:
let
persistence = {
"snorre" = import ./persist.nix;
"work" = import ./persist-work.nix;
};
in
{
imports =
[
# Include the results of the hardware scan.
./hardware-configuration.nix
../../modules/drivers/nvidia.nix
../../modules/plymouth/blahaj.nix
(import ../../modules/disko/delete-on-boot.nix {
inherit lib;
persistExtraDirectories = [ ];
persistExtraFiles = [ ];
users = persistence;
})
# ../../modules/plymouth
#../../modules/users/main-user.nix
];
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.loader.timeout = 0;
boot.kernelPackages = pkgs.linuxPackages_zen;
# boot.plymouth.enable = true;
# boot.plymouth.theme = "nixos-bgrt";
# boot.plymouth.themePackages = [
# pkgs.nixos-bgrt-plymouth
# ];
programs.nix-ld.enable = true;
# programs.nix-ld.libraries = with pkgs; [
# # Add any missing dynamic libraries for unpackaged programs
# # here, NOT in environment.systemPackages
# ];
boot.consoleLogLevel = 0;
boot.initrd.verbose = false;
boot.kernelParams = [
"i915.fastboot=1"
"preempt=full"
"quiet"
"splash"
# "boot.shell_on_fail"
"loglevel=3"
# "rd.systemd.show_status=false"
# "rd.udev.log_level=3"
# "udev.log_priority=3"
];
nix.settings.experimental-features = [ "nix-command" "flakes" ];
home-manager = {
extraSpecialArgs = { inherit inputs; };
users = {
"snorre" = import ./home.nix;
"work" = import ./work-home.nix;
};
};
# fonts.packages = with pkgs; [
# (nerdfonts.override {
# fonts = [
# "Devicons"config
# ];
# })
# ];
programs.localsend.openFirewall = true;
virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true;
programs.steam = {
enable = true;
gamescopeSession.enable = false;
};
security.chromiumSuidSandbox.enable = true; # unity3d.enable was only to allow chrome root sandboxxing
programs.adb.enable = true;
# nixos loves its files. So much that it opens more than 8000 of them at times. Lets increase the limit
# security.pam.loginLimits = [{
# domain = "*";
# type = "soft";
# item = "nofile";
# value = "65536";
# }];
users.users."snorre" = {
isNormalUser = true;
hashedPassword = "$6$xHtgaWKUglOBLft2$ZUN2p1GgzMJuXMs31SKxBta.8T1V0nXKMyFrq061pBA53dpG7zkWrMweSdC7eEg/fsloH5TO2Ats7MISF5nWL/";
extraGroups = [
"networkmanager"
"audio"
"wheel"
"adbusers"
"libvirtd"
];
openssh.authorizedKeys.keyFiles = [
./ssh/authorized_keys_snorre
];
shell = pkgs.zsh;
};
users.users."work" = {
isNormalUser = true;
hashedPassword = "$6$LcwJW76Ow8rki4NT$sFEMJOp/L452dPjjQR8TOzEOHDb7yfaMwexYw2COCGTJYeb2.ZDrbVTfmabqpEl4EzCds9BEAP.L536yb8Lik0";
extraGroups = [
"networkmanager"
"audio"
"wheel"
"adbusers"
"libvirtd"
"docker"
];
shell = pkgs.zsh;
};
# Programs to enable
# programs.zsh.enable = true; # Better shell than bash
programs.zsh = {
enable = true;
# This prevents cache invalidation when also managing zsh from home-manager,
# leading to faster startup times
enableGlobalCompInit = false;
};
programs.hyprland = {
# Hyprland desktop environment
enable = true;
portalPackage = pkgs.xdg-desktop-portal-hyprland;
};
programs.ssh.startAgent = true; # ssh-agent for interacting with github
# security.chromiumSuidSandbox.enable = true; # unity3d.enable was only to allow chrome root sandboxxing
# programs.noisetorch.enable = true; # Noisetorch because discord krisp doesnt work
# Fuck nano, all my homies hate nano
programs.nano.enable = false;
# I want my steams and other non-libre software
nixpkgs.config.allowUnfree = true;
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
wget
curl
git
# ranger
# libsecret manager
# pass-secret-service
keepassxc
libsecret
# ((drv: pkgs.symlinkJoin {
# name = drv.name;
# paths = [ drv ];
# postBuild = "rm -rf $out/share/applications";
# }) pkgs.neovim)
neovim
# graphics
mesa
# Notifications
libnotify
# For enabling and styling QT
libsForQt5.qtstyleplugin-kvantum
libsForQt5.qt5ct
catppuccin-kvantum
# Gnome keyring makes it so we dont have to keep logging into programs
gnome-keyring
# Ui for when programs want sudo
polkit-kde-agent
];
programs.gamemode = {
enable = true;
enableRenice = true;
settings = {
general = {
renice = 3;
};
custom = {
# start = "${pkgs.libnotify}/bin/notify-send 'GameMode started'";
# end = "${pkgs.libnotify}/bin/notify-send 'GameMode ended'";
start =
let
script = pkgs.writeScriptBin "gamemode_start.sh" ''
${pkgs.libnotify}/bin/notify-send "GameMode started"
${pkgs.libnotify}/bin/notify-send "user is: $USER"
/home/$USER/.nix-profile/bin/hyprctl keyword input:touchpad:disable_while_typing false
'';
in
"${script}/bin/gamemode_start.sh";
end =
let
script = pkgs.writeScriptBin "gamemode_end.sh" ''
${pkgs.libnotify}/bin/notify-send "GameMode end"
/home/$USER/.nix-profile/bin/hyprctl keyword input:touchpad:disable_while_typing true
'';
in
"${script}/bin/gamemode_end.sh";
};
};
};
# Session variables for qt and hyprland
environment.sessionVariables = {
XDG_CURRENT_DESKTOP = "Hyprland";
XDG_SESSION_DESKTOP = "Hyprland";
XDG_SESSION_TYPE = "wayland";
GDK_BACKEND = "wayland";
GTK_USE_PORTAL = "1";
QT_QPA_PLATFORMTHEME = "qt5ct";
QT_QPA_PLATFORM = "wayland";
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
QT_AUTO_SCREEN_SCALE_FACTOR = "0";
MOZ_ENABLE_WAYLAND = "1";
# SSH_AUTH_SOCK = "$XDG_RUNTIME_DIR/ssh-agent";
};
xdg.portal = {
enable = true;
wlr.enable = true;
extraPortals = [
pkgs.xdg-desktop-portal-gtk
(pkgs.callPackage ../../modules/portals/xdg-desktop-portal-termfilechooser.nix { })
];
# xdgOpenUsePortal = true;
};
qt = {
enable = true;
platformTheme = "qt5ct";
};
# Delete old entries to
nix = {
gc = {
automatic = true;
options = "--delete-older-than 30d";
};
};
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-material-dark-soft.yaml";
stylix.autoEnable = true;
stylix.polarity = "dark";
# stylix.cursor.package = ( pkgs.callPackage ../../modules/stylix/cursors/posy-improved {} );
# stylix.cursor.name = "Posy_Cursor";
stylix.cursor.package = pkgs.bibata-cursors;
stylix.cursor.name = "Bibata-Modern-Ice";
stylix.cursor.size = 24;
stylix.image = ./nixos-wallpaper.png;
networking.hostName = "laptop"; # Define your hostname.
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
networking.networkmanager.wifi.powersave = true;
networking.firewall = {
enable = true;
allowedTCPPorts = [ 8000 ];
allowedUDPPortRanges = [
{ from = 8000; to = 8010; }
];
};
# Fuck off, i wanna boot
systemd.services."NetworkManager-wait-online".enable = false;
# Set your time zone.
time.timeZone = "Europe/Copenhagen";
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
console = {
keyMap = "dk";
};
# Remove message when running commands as sudo
security.sudo = {
enable = true;
extraConfig = ''
Defaults lecture = never
'';
};
services.blueman = {
enable = true;
};
virtualisation.docker = {
enable = true;
storageDriver = "btrfs";
};
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = false;
hardware.bluetooth.settings = {
General = {
Experimental = true;
};
};
hardware.graphics = {
enable = true;
extraPackages = with pkgs; [
intel-media-driver # LIBVA_DRIVER_NAME=iHD
intel-vaapi-driver # LIBVA_DRIVER_NAME=i965 (older but works better for Firefox/Chromium)
libvdpau-va-gl
];
};
services.pipewire = {
enable = true;
audio.enable = true;
alsa.enable = true;
pulse.enable = true;
wireplumber.enable = true;
};
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
programs.mtr.enable = true;
programs.gnupg.agent = {
enable = true;
# enableSSHSupport = true;
};
# services.power-profiles-daemon = {
# enable = true;
# };
services.auto-cpufreq = {
enable = true;
settings = {
charger = {
governor = "performance";
turbo = "auto";
};
battery = {
governor = "powersave";
energy_performance_preference = "power";
turbo = "never";
scaling_max_freq = 1000000;
};
};
};
services.thermald.enable = true;
services.openssh = {
enable = true;
settings = {
# Require public key authentication
PasswordAuthentication = false;
KbdInteractiveAuthentication = false;
AllowUsers = null;
PermitRootLogin = "no";
};
};
# Minimal TUI displaymanager for loggin in and launching hyprland
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland";
user = "snorre";
};
# First session auto starts hyprland
initial_session = {
command = "${pkgs.hyprland}/bin/Hyprland";
user = "snorre";
};
};
};
# hardware.opengl.driSupport = true; # This is already enabled by default
# hardware.opengl.driSupport32Bit = true; # For 32 bit applications
# This option defines the first version of NixOS you have installed on this particular machine,
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
#
# Most users should NEVER change this value after the initial install, for any reason,
# even if you've upgraded your system to a new NixOS release.
#
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
# so changing it will NOT upgrade your system.
#
# This value being lower than the current NixOS release does NOT mean your system is
# out of date, out of support, or vulnerable.
#
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
# and migrated your data accordingly.
#
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "23.11"; # Did you read the comment?
}

View file

@ -0,0 +1,26 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "usbhid" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
# 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.enp2s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlo1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

124
hosts/laptop/home.nix Executable file
View file

@ -0,0 +1,124 @@
{ pkgs, inputs, ... }:
{
imports = [
# inputs.impermanence.nixosModules.home-manager.impermanence
../../modules/stylix/home
../../modules/editors/nixvim
../../modules/shells/zsh.nix
../../modules/programs/dunst.nix
../../modules/programs/waybar
../../modules/programs/hyprpaper.nix
../../modules/programs/tofi.nix
../../modules/programs/alacritty.nix
# ../../modules/programs/firefox.nix
../../modules/programs/tmux.nix
(import ../../modules/window-managers/hyprland { monitors = ["eDP-1, 1920x1080@60, auto, 1"]; })
../../modules/window-managers/hyprland/hyprlock.nix
../../modules/window-managers/hyprland/hypridle.nix
# (import ../../modules/disko/impermanence-home.nix {
# extraDirectories = [
# ".jump"
#
# ".mozilla"
# ".zen"
#
# ".config/vesktop"
# ".config/zsh"
#
# ".cache/mozilla"
# ".cache/zen"
# ".cache/nvidia"
# ".cache/nix"
# ".cache/obexd"
# ".factorio"
# ".local/share/Steam"
# ];
# extraFiles = [ ];
#
# username = "snorre";
# nixIndexEnabled = true;
# })
];
home.username = "snorre";
home.homeDirectory = "/home/snorre";
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-material-dark-soft.yaml";
stylix.polarity = "dark";
stylix.image = ./nixos-wallpaper.png;
stylix.autoEnable = true;
stylix.targets.alacritty.enable = true;
# hyprpaper.wallpaper = ./nixos-wallpaper.png;
nixpkgs.config.allowUnfree = true;
home.packages =
let
tex = (pkgs.texlive.combine {
inherit (pkgs.texlive) scheme-medium
titling
biblatex hyperref amsmath tcolorbox environ
;
});
in
(with pkgs; [
file
nixpkgs-fmt
ripgrep
jump
wl-clipboard
hyprpaper
hyprpicker
grimblast
tofi
brightnessctl
# Required for waybar to work
playerctl
wl-clipboard
localsend
ipe
texlivePackages.latex
texlivePackages.luatex
zathura
tex
biber
inputs.zen-browser.packages."${system}".default
spotify
vesktop
sublime-merge
]);
programs.btop.enable = true;
programs.mangohud.enable = true;
# programs.nix-index = {
# enable = true;
# enableZshIntegration = true;
# };
zsh.jump.enable = true;
zsh.jump.show-destination = true;
# Since zsh is the login shell it overrides $HOME/.zsh_history before impermanence can restore the old version.
# Therefore we simply store the history directly in /persist
zsh.histFile = "/persist/system/home/snorre/.zsh_history";
# Let home-manager manage itself
programs.home-manager.enable = true;
home.sessionVariables = {
EDITOR = "nvim";
# NIX_AUTO_RUN = "1"; # Automatically run non-installed commands if possible
# NIX_BUILD_SHELL = "zsh";
};
home.stateVersion = "23.11";
}

BIN
hosts/laptop/nixos-wallpaper.png Executable file

Binary file not shown.

After

(image error) Size: 124 KiB

View file

@ -0,0 +1,33 @@
{
directories = [
### DEFAULT BEGIN ###
"Documents"
"Music"
"Pictures"
"Videos"
".gnupg"
".ssh"
".local"
".cache/mesa_shader_cache"
".cache/mesa_shader_cache_db"
#### DEFAULT END ####
".jump"
".mozilla"
".zen"
".config/vesktop"
".config/zsh"
".cache/mozilla"
".cache/zen"
".cache/nvidia"
".cache/nix"
".cache/obexd"
];
files = [
".zsh_history"
".gitconfig"
];
}

35
hosts/laptop/persist.nix Normal file
View file

@ -0,0 +1,35 @@
{
directories = [
### DEFAULT BEGIN ###
"Documents"
"Music"
"Pictures"
"Videos"
".gnupg"
".ssh"
".local"
".cache/mesa_shader_cache"
".cache/mesa_shader_cache_db"
#### DEFAULT END ####
".jump"
".mozilla"
".zen"
".config/vesktop"
".config/zsh"
".cache/mozilla"
".cache/zen"
".cache/nvidia"
".cache/nix"
".cache/obexd"
".factorio"
".local/share/Steam"
];
files = [
".zsh_history"
".gitconfig"
];
}

View file

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJjfAFx5C/+96wtYHve/wY9SNCdx0E/pQIgeP9EcJEjx snorre@archlinux

141
hosts/laptop/work-home.nix Executable file
View file

@ -0,0 +1,141 @@
{ config, pkgs, inputs, ... }:
{
imports = [
inputs.impermanence.nixosModules.home-manager.impermanence
../../modules/stylix/home
../../modules/editors/nixvim
../../modules/shells/zsh.nix
../../modules/programs/dunst.nix
../../modules/programs/waybar
../../modules/programs/hyprpaper.nix
../../modules/programs/tofi.nix
../../modules/programs/alacritty.nix
../../modules/programs/tmux.nix
# ../../modules/programs/firefox.nix
../../modules/window-managers/hyprland
../../modules/window-managers/hyprland/hyprlock.nix
../../modules/window-managers/hyprland/hypridle.nix
# (import ../../modules/disko/impermanence-home.nix {
# extraDirectories = [
# ".jump"
# ".android"
# ".mozilla"
# ".zen"
#
# ".config/zsh"
# ".config/unity3d"
#
# # Required for android studio to not reset every time i reboot
# ".config/Google"
# ".cache/Google"
#
# ".cache/mozilla"
# ".cache/nvidia"
# ".cache/nix"
# ".cache/zen"
# {
# directory = ".gradle";
# method = "symlink";
# }
# {
# directory = "Android";
# method = "symlink";
# }
# ];
# extraFiles = [
# ];
#
# username = "work";
# nixIndexEnabled = true;
# })
];
home.username = "work";
home.homeDirectory = "/home/work";
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-material-dark-soft.yaml";
stylix.polarity = "dark";
stylix.image = ./nixos-wallpaper.png;
hyprpaper.wallpaper = ./nixos-wallpaper.png;
nixpkgs.config.allowUnfree = true;
# Man, i love unity workarounds in my system config
# nixpkgs.config.permittedInsecurePackages = [
# "openssl-1.1.1w"
# ];
home.packages = with pkgs; [
file
nixpkgs-fmt
ripgrep
jump
hyprpaper
wl-clipboard
grimblast
tofi
# Required for waybar to work
playerctl
zoom-us
# (unityhub.override {
# extraLibs = pkgs: with pkgs; [
# openssl_1_1 # Unity doesnt like secure versions of openssl
# ];
# })
# Vscode is neccesary ~for~ _to make_ unity to generate .csproj files
# vscode
#
inputs.zen-browser.packages."${system}".default
sublime-merge
# android-studio
slack
spotify
];
stylix.targets.alacritty.enable = true;
programs.btop.enable = true;
programs.mangohud.enable = true;
zsh.jump.enable = true;
zsh.jump.show-destination = true;
# zsh.histFile = "/persist/home/work/.zsh_history";
# xdg.desktopEntries = {
# unityhub = {
# name = "Unity Hub";
# genericName = "Game Engine";
# exec = builtins.toString (pkgs.writeShellScript "start_unity_hub.sh" ''
# #! /usr/bin/env nix-shell
# #! nix-shell -i bash -p vscode
# ${pkgs.unityhub}/opt/unityhub/unityhub %U
# '');
# terminal = false;
# type = "Application";
# categories = [ "Development" ];
# icon = "unityhub";
# # tryExec = "unityhub";
# mimeType = [ "x-scheme-handler/unityhub" ];
# };
# };
# Let home-manager manage itself
programs.home-manager.enable = true;
home.sessionVariables = {
EDITOR = "nvim";
# NIX_AUTO_RUN = "1"; # Automatically run non-installed commands if possible
};
home.stateVersion = "23.11";
}

184
hosts/nixos-vm/configuration.nix Executable file
View file

@ -0,0 +1,184 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ config, lib, pkgs, inputs, ... }:
{
imports =
[
# Include the results of the hardware scan.
./hardware-configuration.nix
#../../modules/users/main-user.nix
];
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
nix.settings.experimental-features = [ "nix-command" "flakes" ];
boot.initrd.postDeviceCommands = lib.mkAfter ''
# Prepare temporary folder
mkdir /btrfs_tmp
# Open encrypted partition
cryptsetup luksOpen /dev/vda3 crypted
# Mount unencrypted partition in temp folder
mount /dev/mapper/crypted /btrfs_tmp
# Check if root subvolume exists in partition
if [[ -e /btrfs_tmp/root ]]; then
# If a folder for old roots doesnt exist we create one
mkdir -p /btrfs_tmp/old_roots
# Get timestamp for naming roots
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
# Move old root into folder
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
fi
delete_subvolume_recursively() {
IFS=$'\n'
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
delete_subvolume_recursively "btrfs_tmp/$i"
done
btrfs subvolume delete "$1"
}
# Delete old roots older than 30 days
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do
delete_subvolume_recursively "$i"
done
# Create new root
btrfs subvolume create /btrfs_tmp/root
umount /btrfs_tmp
'';
# Dont nuke all the files. We wanna keep something
fileSystems."/persist".neededForBoot = true;
environment.persistence."/persist/system" = {
hideMounts = true;
directories = [
"/etc/nixos"
"/var/log"
"/var/lib/bluetooth"
"/var/lib/nixos"
"/var/lib/systemd/coredump"
"/etc/NetworkManager/system-connections"
{ directory = "/var/lib/colord"; user = "colord"; group = "colord"; mode = "u=rwx, g=rx, o="; }
];
files = [
"/etc/machine-id"
"/etc/ssh/ssh_host_rsa_key"
"/etc/ssh/ssh_host_ed25519_key"
"/etc/ssh/ssh_host_rsa_key.pub"
"/etc/ssh/ssh_host_ed25519_key.pub"
];
};
programs.fuse.userAllowOther = true;
home-manager = {
extraSpecialArgs = { inherit inputs; };
users = {
"snorre" = import ./home.nix;
};
};
users.users."snorre" =
{
isNormalUser = true;
initialPassword = "1234";
extraGroups = [
"networkmanager"
"audio"
"wheel"
];
shell = pkgs.zsh;
};
# Programs to enable
programs.zsh.enable = true; # Better shell than bash
# Fuck nano, all my homies hate nano
programs.nano.enable = false;
# Delete old entries to
nix = {
gc = {
automatic = true;
options = "--delete-older-than 7d";
};
};
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/eighties.yaml";
stylix.autoEnable = true;
stylix.polarity = "dark";
stylix.cursor.package = pkgs.bibata-cursors;
stylix.cursor.name = "Bibata-Modern-Ice";
stylix.cursor.size = 24;
networking.hostName = "nixos-vm"; # Define your hostname.
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
# Set your time zone.
time.timeZone = "Europe/Copenhagen";
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
console = {
keyMap = "dk";
};
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
wget
curl
git
neovim
];
# Remove message when running commands as sudo
security.sudo = {
enable = true;
extraConfig = ''
Defaults lecture = never
'';
};
services.openssh = {
enable = true;
settings = {
PasswordAuthentication = true;
AllowUsers = null;
PermitRootLogin = "no";
};
};
# This option defines the first version of NixOS you have installed on this particular machine,
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
#
# Most users should NEVER change this value after the initial install, for any reason,
# even if you've upgraded your system to a new NixOS release.
#
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
# so changing it will NOT upgrade your system.
#
# This value being lower than the current NixOS release does NOT mean your system is
# out of date, out of support, or vulnerable.
#
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
# and migrated your data accordingly.
#
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "23.11"; # Did you read the comment?
}

72
hosts/nixos-vm/disko-luks.nix Executable file
View file

@ -0,0 +1,72 @@
{ device ? throw "Set this to your disk device, e.g. /dev/sda"
, ...
}: {
disko.devices = {
disk = {
main = {
inherit device;
type = "disk";
content = {
type = "gpt";
partitions = {
ESP = {
size = "512M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [
"defaults"
];
};
};
swap = {
size = "8G";
content = {
type = "swap";
resumeDevice = true;
};
};
# Fill until 8gb are left
luks = {
size = "100%";
content = {
type = "luks";
name = "crypted";
# disable settings.keyFile if you want to use interactive password entry
passwordFile = null; # Interactive
settings = {
allowDiscards = true;
keyFile = null;
};
# additionalKeyFiles = [ "/tmp/additionalSecret.key" ];
content = {
type = "btrfs";
extraArgs = [ "-f" ];
subvolumes = {
"/root" = {
mountpoint = "/";
mountOptions = [ "compress=zstd" "noatime" ];
};
"/persist" = {
mountpoint = "/persist";
mountOptions = [ "subvol=persist" "compress=zstd" "noatime" ];
};
"/nix" = {
mountpoint = "/nix";
mountOptions = [ "subvol=nix" "compress=zstd" "noatime" ];
};
};
};
};
};
};
};
};
};
};
}

View file

@ -0,0 +1,25 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ 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 = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
# 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";
}

57
hosts/nixos-vm/home.nix Executable file
View file

@ -0,0 +1,57 @@
{ config, pkgs, inputs, ... }:
{
imports = [
inputs.impermanence.nixosModules.home-manager.impermanence
../../modules/editors/nixvim
../../modules/shells/zsh.nix
];
home.username = "snorre";
home.homeDirectory = "/home/snorre";
home.packages = with pkgs; [
file
nixpkgs-fmt
jump
];
zsh.jump.enable = true;
zsh.jump.show-destination = true;
# Let home-manager manage itself
programs.home-manager.enable = true;
home.sessionVariables = {
EDITOR = "nvim";
};
home.stateVersion = "23.11";
home.persistence."/persist/home" = {
directories = [
"Downloads"
"Music"
"Pictures"
"Documents"
"Videos"
".gnupg"
".ssh"
".local"
".jump"
{
directory = ".factorio";
method = "symlink";
}
{
directory = ".local/share/Steam";
method = "symlink";
}
];
files = [
".gitconfig"
];
allowOther = true;
};
}

49
install.sh Executable file
View file

@ -0,0 +1,49 @@
#! /usr/bin/env nix-shell
#! nix-shell -i bash -p git
if [ "$#" -ne 3 ]; then
cat << EOF
usage: sudo ./install.sh <disk> <swap> <encrypted: true/false>
EOF
exit
fi
# Download disko config
curl https://gitlab.com/SpoodyTheOne/nixos-config/-/raw/master/modules/disko/disko-luks.nix -o /tmp/disko.nix
curl https://gitlab.com/SpoodyTheOne/nixos-config/-/raw/master/modules/disko/disko-btrfs-impermanence.nix -o /tmp/disko-btrfs-impermanence.nix
echo "During partitioning you will be asked for a password. This password is used when booting. It will be asked for twice"
sudo nix --experimental-features "nix-command flakes" \
run github:nix-community/disko -- \
--mode disko /tmp/disko.nix \
--arg device "\"$1\"" \
--arg swap-size "\"$2\""
--arg swap-size "\"$3\""
sudo nixos-generate-config --no-filesystems --root /mnt
sudo mv /mnt/etc/nixos/hardware-configuration.nix /tmp # Move configuration away
sudo rm -rf /mnt/etc/nixos # Nuke config folder so we can clone
sudo git clone https://gitlab.com/SpoodyTheOne/nixos-config.git /mnt/etc/nixos # Clone config
# Move hardware configuration
sudo mv /tmp/hardware-configuration.nix /mnt/etc/nixos/hosts/bootstrap
# go to /etc/nixos
cd /mnt/etc/nixos
# Add hardware configuration to git for nix to recognize it
sudo git add .
echo -n
echo -e "\x1b[33mYou will now be placed in vim, Please edit the bootstrap config to match the arguments given to the script\x1b[37m"
sleep 5
sudo vim /mnt/etc/nixos/flake.nix +63
echo -n
echo -e "\x1b[31mThe system will install in 5 seconds. If you think you misconfigured flake.nix please press ctrl-c now to cancel\x1b[37m"
sleep 5
# Copy configuration to permanent storage so its not nuked on reboot
sudo cp -r /mnt/etc/nixos /mnt/persist
sudo nixos-install --root /mnt --flake /mnt/etc/nixos#bootstrap
echo -e "\x1b[32mIf no errors occured please reboot and follow the 'After reboot' section at https://gitlab.com/SpoodyTheOne/nixos-config";

View file

@ -0,0 +1,80 @@
{ lib
, persistExtraDirectories
, persistExtraFiles
, users ? {}
, extraConfig ? {}
, ...
}:
{
boot.initrd.postDeviceCommands = lib.mkAfter ''
# Prepare temporary folder
mkdir /btrfs_tmp
# Open encrypted partition
# cryptsetup luksOpen /dev/sda3 crypted
# Mount unencrypted partition in temp folder
mount /dev/mapper/crypted /btrfs_tmp
# Check if root subvolume exists in partition
if [[ -e /btrfs_tmp/root ]]; then
# If a folder for old roots doesnt exist we create one
mkdir -p /btrfs_tmp/old_roots
# Get timestamp for naming roots
timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
# Move old root into folder
mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
fi
delete_subvolume_recursively() {
IFS=$'\n'
for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
delete_subvolume_recursively "btrfs_tmp/$i"
done
btrfs subvolume delete "$1"
}
# Delete old roots older than 30 days
for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do
delete_subvolume_recursively "$i"
done
# Create new root
btrfs subvolume create /btrfs_tmp/root
umount /btrfs_tmp
'';
# Dont nuke all the files. We wanna keep something
fileSystems."/persist".neededForBoot = true;
environment.persistence."/persist/system" = {
hideMounts = true;
directories = [
"/etc/nixos"
"/var/log"
"/var/lib/bluetooth"
"/var/lib/nixos"
"/var/lib/systemd/coredump"
"/etc/NetworkManager/system-connections"
{ directory = "/var/lib/colord"; user = "colord"; group = "colord"; mode = "u=rwx, g=rx, o="; }
] ++ (if (persistExtraDirectories == null) then [ ] else persistExtraDirectories);
files = [
"/etc/machine-id"
"/etc/ssh/ssh_host_rsa_key"
"/etc/ssh/ssh_host_ed25519_key"
"/etc/ssh/ssh_host_rsa_key.pub"
"/etc/ssh/ssh_host_ed25519_key.pub"
] ++ (if (persistExtraFiles == null) then [ ] else persistExtraFiles);
inherit users;
};
# environment.etc = {
# "group".source = "/persist/system/etc/group";
# "passwd".source = "/persist/system/etc/passwd";
# "shadow".source = "/persist/system/etc/shadow";
# };
programs.fuse.userAllowOther = true;
}

View file

@ -0,0 +1,18 @@
{
type = "btrfs";
extraArgs = [ "-f" ];
subvolumes = {
"/root" = {
mountpoint = "/";
mountOptions = [ "compress=zstd" "noatime" ];
};
"/persist" = {
mountpoint = "/persist";
mountOptions = [ "subvol=persist" "compress=zstd" "noatime" ];
};
"/nix" = {
mountpoint = "/nix";
mountOptions = [ "subvol=nix" "compress=zstd" "noatime" ];
};
};
}

62
modules/disko/disko-luks.nix Executable file
View file

@ -0,0 +1,62 @@
{ device ? throw "Set this to your disk device, e.g. /dev/sda"
, swap-size ? "0"
, encrypted ? false
, ...
}: {
disko.devices = {
disk = {
main = {
inherit device;
type = "disk";
content = {
type = "gpt";
partitions = {
ESP = {
size = "512M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [
"defaults"
];
};
};
swap = if swap-size == "0" then {} else {
size = swap-size;
content = {
type = "swap";
resumeDevice = true;
};
};
# Fill until 8gb are left
root = if encrypted then {
size = "100%";
content = {
type = "luks";
name = "crypted";
# disable settings.keyFile if you want to use interactive password entry
passwordFile = null; # Interactive
settings = {
allowDiscards = true;
keyFile = null;
};
# additionalKeyFiles = [ "/tmp/additionalSecret.key" ];
content = (import ./disko-btrfs-impermanence.nix);
};
}
else
{
size = "100%";
content = (import ./disko-btrfs-impermanence.nix);
};
};
};
};
};
};
}

View file

@ -0,0 +1,31 @@
{ extraDirectories
, extraFiles
, username ? throw "need to know the username"
, nixIndexEnabled ? false
, ...
}:
{
home.persistence."/persist/home/${username}" = {
directories = [
# "Downloads" # no.
"Documents"
"Music"
"Pictures"
"Videos"
".gnupg"
".ssh"
".local"
".cache/mesa_shader_cache"
".cache/mesa_shader_cache_db"
# TODO: Move this shit into work user
] ++ (if (extraDirectories == null) then [ ] else extraDirectories);
files = [
".gitconfig"
# ".zsh_history"
] ++ (if (extraFiles == null) then [ ] else extraFiles)
# ++ (if nixIndexEnabled then [ ".cache/nix-index" ] else [])
;
allowOther = true;
};
}

63
modules/drivers/nvidia.nix Executable file
View file

@ -0,0 +1,63 @@
{ config, pkgs, lib, ... }:
{
nixpkgs.config.nvidia.acceptLicense = true;
services.xserver.videoDrivers = [ "nvidia" ];
boot.kernelParams = [ "nvidia.NVreg_PreserveVideoMemoryAllocations=1" ];
hardware.graphics = {
enable = true;
enable32Bit = true;
extraPackages = with pkgs; [
nvidia-vaapi-driver
];
};
hardware.nvidia = {
package = config.boot.kernelPackages.nvidiaPackages.stable;
modesetting.enable = true;
open = false;
nvidiaSettings = true;
dynamicBoost.enable = false;
powerManagement = {
enable = true;
finegrained = false;
};
prime = {
sync.enable = true;
intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:1:0:0";
# offload = {
# enable = true;
# enableOffloadCmd = true;
# };
};
};
specialisation = {
Battery.configuration = {
system.nixos.tags = [ "Battery" ];
boot.extraModprobeConfig = ''
blacklist nouveau
options nouveau modeset=0
'';
services.udev.extraRules = ''s
# Remove NVIDIA USB xHCI Host Controller devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1"
# Remove NVIDIA USB Type-C UCSI devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c8000", ATTR{power/control}="auto", ATTR{remove}="1"
# Remove NVIDIA Audio devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", ATTR{power/control}="auto", ATTR{remove}="1"
# Remove NVIDIA VGA/3D controller devices
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", ATTR{power/control}="auto", ATTR{remove}="1"
'';
boot.blacklistedKernelModules = [ "nouveau" "nvidia" "nvidia_drm" "nvidia_modeset" ];
};
};
}

View file

@ -0,0 +1,39 @@
{ config, pkgs, lib, inputs, ... }:
{
imports = [
inputs.nixvim.homeManagerModules.default
./plugins/lualine.nix
./plugins/undotree.nix
./plugins/telescope.nix
./plugins/lsp.nix
./plugins/lsp-lines.nix
./plugins/cmp.nix
./plugins/wilder.nix
./plugins/nvim-ts-comment-context.nix
./plugins/treesitter.nix
./plugins/vimtex.nix
# ./plugins/neorg.nix
# ./plugins/image.nix
# ./plugins/treesitter.nix
./plugins/which-key.nix
./syntax/fsharp.nix
./extra.nix
./options.nix
./keymaps.nix
];
programs.nixvim = {
enable = true;
# opts.performance.byteCompileLua = {
# enable = true;
# plugins = true;
# };
# colorschemes.nord.enable = true;
};
}

View file

@ -0,0 +1,70 @@
{ config, pkgs, lib, ... }:
{
programs.nixvim.extraConfigLua = lib.strings.concatLines ([
''
vim.cmd([[
augroup highlight_yank
autocmd!
au TextYankPost * silent! lua vim.highlight.on_yank{higroup="IncSearch", timeout=100}
augroup END
]])
''
]
);
programs.nixvim.extraPlugins = [
# actions-preview.nvim
(pkgs.vimUtils.buildVimPlugin {
name = "actions-preview.nvim";
src = pkgs.fetchFromGitHub {
owner = "aznhe21";
repo = "actions-preview.nvim";
rev = "9f52a01c374318e91337697ebed51c6fae57f8a4";
hash = "sha256-lYjsv8y1fMuTGpBF/iG7cm/a7tLdh748vJhVsSp/Iz8=";
};
})
# (pkgs.vimUtils.buildVimPlugin {
# name = "fsharp-vim";
# src = pkgs.fetchFromGitHub {
# owner = "DrTom";
# repo = "fsharp-vim";
# rev = "81f51e7155c3df0f56e48b894aba8cb65a9cc04b";
# hash = "sha256-cSsUVG3MbjGD6bheZ+k1bxkDx0fZ17kbKqgBNywOaZc=";
# };
# })
# fsharp-language-server
# (pkgs.vimUtils.buildVimPlugin {
# name = "fsharp-language-server";
# src = pkgs.fetchFromGitHub {
# owner = "fsprojects";
# repo = "fsharp-language-server";
# rev = "471439c562c484f2fe57adfd54485e7c1ee4ca29";
# hash = "";
# };
# })
]
++
(
if config.programs.nixvim.plugins.neorg.enable
then [
(pkgs.vimUtils.buildVimPlugin {
inherit (pkgs.luaPackages.lua-utils-nvim) pname version src;
})
(pkgs.vimUtils.buildVimPlugin {
inherit (pkgs.luaPackages.pathlib-nvim) pname version src;
})
(pkgs.vimUtils.buildVimPlugin {
inherit (pkgs.luaPackages.nvim-nio) pname version src;
})
]
else [ ]
)
;
}

View file

@ -0,0 +1,75 @@
{ ... }:
{
programs.nixvim.globals.mapleader = " ";
programs.nixvim.globals.maplocalleader = ",";
programs.nixvim.keymaps = [
{
key = "gl";
action = "<cmd>lua vim.diagnostic.open_float()<cr>";
}
{
key = "<leader>u";
action = "<cmd>UndotreeToggle<cr>";
}
{
key = "<leader>f";
action = "<cmd>Telescope fd<cr>";
}
{
key = "<leader>g";
action = "<cmd>Telescope live_grep<cr>";
}
{
key = "<leader>D";
action = "<cmd>Telescope diagnostics<cr>";
}
{
key = "<leader>b";
action = "<cmd>Telescope buffers<cr>";
}
{
key = "<leader>s";
action = "<cmd>Telescope lsp_document_symbols<cr>";
}
{
key = "<leader>w";
action = "<C-W>";
}
{
# Unbind F1
key = "<F1>";
action = "";
}
];
programs.nixvim.autoCmd = [
{
desc = "LSP Actions";
event = "LspAttach";
callback = {
__raw = ''
function(event)
local opts = { buffer = event.buf }
-- these will be buffer-local keybindings
-- because they only work if you have an active language server
vim.keymap.set('n', 'K', '<cmd>lua vim.lsp.buf.hover()<cr>', opts)
vim.keymap.set('n', 'gd', '<cmd>Telescope lsp_definitions<cr>', opts)
vim.keymap.set('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<cr>', opts)
vim.keymap.set('n', 'gi', '<cmd>Telescope lsp_implementations<cr>', opts)
vim.keymap.set('n', 'go', '<cmd>Telescope lsp_type_definitions<cr>', opts)
vim.keymap.set('n', 'gr', '<cmd>Telescope lsp_references<cr>', opts)
vim.keymap.set('n', 'gs', '<cmd>lua vim.lsp.buf.signature_help()<cr>', opts)
vim.keymap.set('n', '<leader>r', '<cmd>lua vim.lsp.buf.rename()<cr>', opts)
vim.keymap.set({ 'n', 'x' }, '<F3>', '<cmd>lua vim.lsp.buf.format({async = true})<cr>', opts)
-- vim.keymap.set('n', '<leader>a', '<cmd>lua vim.lsp.buf.code_action()<cr>', opts)
vim.keymap.set("n", "<leader>a", require("actions-preview").code_actions, opts)
vim.keymap.set("n", "gh", "<cmd>ClangdSwitchSourceHeader<cr>", opts)
end
'';
};
}
];
}

View file

@ -0,0 +1,23 @@
{ ... }:
{
programs.nixvim.opts = {
number = true;
relativenumber = true;
nuw = 1;
scrolloff = 8;
signcolumn = "yes";
termguicolors = true;
# undodir = lib.concatStrings [ xdg.stateHome "nvim/undodir" ];
undofile = true;
ignorecase = true;
smartcase = true;
cmdheight = 1;
smarttab = true;
expandtab = true;
shiftwidth = 2;
tabstop = 2;
softtabstop = 2;
};
}

View file

@ -0,0 +1,69 @@
{ config, ... }:
{
# programs.nixvim.plugins.cmp-vsnip.enable = true;
# programs.nixvim.plugins.cmp_luasnip.enable = true;
programs.nixvim.plugins.cmp-nvim-lsp-signature-help.enable = true;
programs.nixvim.plugins.cmp-latex-symbols.enable = true;
programs.nixvim.plugins.cmp-nvim-lsp.enable = true;
programs.nixvim.plugins.cmp = {
enable = true;
autoEnableSources = true;
settings = {
sources = [
{ name = "nvim_lsp"; }
{ name = "path"; }
# { name = "buffer"; }
{ name = "nvim_lsp_signature_help"; }
{ name = "latex_symbols"; }
{ name = "vsnip"; }
]
++
(
if config.programs.nixvim.plugins.orgmode.enable
then [{ name = "orgmode"; }]
else [ ]
)
++
(
if config.programs.nixvim.plugins.neorg.enable
then [{ name = "neorg"; }]
else [ ]
)
;
mapping = {
"<CR>" = "cmp.mapping.confirm({ select = true })";
"<C-y>" = "cmp.mapping.confirm({ select = true })";
"<Tab>" = ''
function(fallback)
if cmp.visible() then
cmp.select_next_item()
else
fallback()
end
end
'';
"<S-Tab>" = ''
function(fallback)
if cmp.visible() then
cmp.select_prev_item()
else
fallback()
end
end
'';
"<C-Space>" = "cmp.mapping.complete()";
};
# snippet.expand = ''
# function(args)
# require("luasnip").lsp_expand(args.body)
# end
# '';
};
};
}

View file

@ -0,0 +1,12 @@
{ pkgs, ... }:
{
programs.nixvim.plugins.image = {
enable = true;
backend = "ueberzug";
};
programs.nixvim.plugins.clipboard-image = {
enable = true;
clipboardPackage = pkgs.wl-clipboard;
};
}

View file

@ -0,0 +1,6 @@
{ ... }:
{
programs.nixvim.plugins.lsp-lines = {
enable = true;
};
}

View file

@ -0,0 +1,75 @@
{ ... }:
{
programs.nixvim.plugins.zig.enable = true;
programs.nixvim.plugins.lsp = {
enable = true;
servers = {
lua_ls.enable = true;
nil_ls = {
enable = true;
settings = {
formatting.command = [ "nixpkgs-fmt" ];
};
};
clangd = {
enable = true;
# package = null; # Install your own clang fucker # actually dont, its aids
cmd = [ "clangd" "--background-index" "--suggest-missing-includes" ];
};
# As much as i hate python, it is useful for CTF and quick scripts
pylsp = {
enable = true;
};
zls = {
enable = true;
};
ts_ls = {
enable = true;
};
rust_analyzer = {
enable = true;
package = null; # Install your own rust
cargoPackage = null; # Install your own rust
installCargo = false; # Install your own rust
rustcPackage = null; # Install your own rust
installRustc = false; # Install your own rust
};
# TODO: Create a flake.nix for texlabs so its not installed globally.
texlab = {
enable = true;
};
fsautocomplete = {
enable = false;
cmd = [ "fsautocomplete" "--adaptive-lsp-server-enabled" "--verbose" ];
filetypes = [ "fsharp" "fs" ];
package = null; # Fuck you too
# settings = {
# AutomaticWorkspaceInit = true;
#
# callback = {
# __raw = ''
# function()
# print("fsharp lsp")
# end
# '';
# };
# };
};
csharp_ls = {
enable = true;
# package = null; # Fuck c#, install it yourself if you need it
};
};
};
}

View file

@ -0,0 +1,4 @@
{ ... }:
{
programs.nixvim.plugins.lualine.enable = true;
}

View file

@ -0,0 +1,26 @@
{ ... }:
{
programs.nixvim.plugins.neorg = {
enable = true;
# lazyLoading = true;
modules = {
"core.defaults" = {
__empty = null;
};
"core.dirman" = {
config = {
workspaces = {
notes = "~/Documents/notes";
};
};
};
"core.concealer" = {
__empty = null;
};
};
};
}

View file

@ -0,0 +1,6 @@
{ lib, ... }:
{
programs.nixvim.plugins.ts-context-commentstring.enable = true;
programs.nixvim.plugins.comment.enable = true;
}

View file

@ -0,0 +1,10 @@
{ ... }:
{
programs.nixvim.plugins.orgmode = {
enable = true;
settings = {
org_agenda_files = "~/documents/notes/**/*";
org_default_notes_file = "~/documents/notes/index.org";
};
};
}

View file

@ -0,0 +1,5 @@
{...}:
{
programs.nixvim.plugins.telescope.enable = true;
programs.nixvim.plugins.web-devicons.enable = true;
}

View file

@ -0,0 +1,13 @@
{ ... }:
{
programs.nixvim.plugins.treesitter = {
enable = true;
settings = {
auto_install = false;
};
};
programs.nixvim.plugins.treesitter-textobjects.enable = true;
}

View file

@ -0,0 +1,4 @@
{ ... }:
{
programs.nixvim.plugins.undotree.enable = true;
}

View file

@ -0,0 +1,12 @@
{ ... }:
{
programs.nixvim.plugins.vimtex = {
enable = true;
texlivePackage = null;
settings = {
compiler_method = "luatex";
view_method = "zathura";
quickfix_mode = 0;
};
};
}

View file

@ -0,0 +1,4 @@
{ ... }:
{
programs.nixvim.plugins.which-key.enable = true;
}

View file

@ -0,0 +1,22 @@
{ ... }:
{
programs.nixvim.plugins.wilder = {
enable = true;
modes = [ ":" "/" "?" ];
enableCmdlineEnter = true;
acceptKey = "<CR>";
renderer = ''
wilder.popupmenu_renderer(
wilder.popupmenu_border_theme({
highlights = {
border = 'Normal', -- highlight to use for the border
},
left = { ' ', wilder.popupmenu_devicons() },
-- 'single', 'double', 'rounded' or 'solid'
-- can also be a list of 8 characters, see :h wilder#popupmenu_border_theme() for more details
border = 'rounded',
})
)
'';
};
}

View file

@ -0,0 +1,15 @@
{ pkgs, ... }:
{
xdg.configFile."nvim/syntax/fsharp.vim" =
let
git = pkgs.fetchFromGitHub {
owner = "lulu-berlin";
repo = "vim-fsharp";
rev = "1afff075e0a1bcbedcc52881454b99f58ec5bbfc";
sha256 = "sha256-tpEgCxZubyzz4z+JVep1R6F+mQidw/iAfRMTOF00v6U=";
};
in
{
source = "${git}/syntax/fsharp.vim";
};
}

8
modules/plymouth/blahaj.nix Executable file
View file

@ -0,0 +1,8 @@
{pkgs, ...}:
{
boot.plymouth.enable = true;
boot.plymouth.themePackages = with pkgs; [
plymouth-blahaj-theme
];
boot.plymouth.theme = "blahaj";
}

13
modules/plymouth/default.nix Executable file
View file

@ -0,0 +1,13 @@
{pkgs, ...}:
{
boot.plymouth.enable = true;
# boot.plymouth.themePackages = with pkgs; [
# plymouth-blahaj-theme
# ];
# boot.plymouth.theme = "blahaj";
# boot.plymouth.theme = "plymouth-modern-bgrt";
# boot.plymouth.themePackages = [
# (pkgs.callPackage ./modern-bgrt.nix {})
# ];
}

277
modules/plymouth/modern-bgrt.nix Executable file
View file

@ -0,0 +1,277 @@
{ lib
, stdenv
, fetchFromGitHub
, unstableGitUpdater
, pkgs
}:
stdenv.mkDerivation {
name = "modern-bgrt";
version = "0-unstable-2023-03-10";
src = fetchFromGitHub {
repo = "plymouth-modern-bgrt";
owner = "glics";
rev = "a795623409865db39f3a8df2effaeb8b388ca36c";
hash = "sha256-WslJCrv8LyWBrZuu8xstuafr7piR/QY8L52c+sAk9vU=";
};
dontConfigure = true;
dontBuild = true;
nativeBuildInputs = [ pkgs.imagemagick ];
installPhase = ''
runHook preInstall
# mkdir -p $out/share/plymouth/themes/modern-bgrt
# cp -r $src/theme/{*} $out/share/plymouth/themes/modern-bgrt/
# substituteInPlace $out/share/plymouth/themes/modern-bgrt/*.plymouth --replace '/usr/share/plymouth/themes/plymouth-modern-bgrt' "$out/share/plymouth/themes/modern-bgrt/images"
#
# substituteInPlace $out/share/plymouth/themes/modern-bgrt/*.plymouth --replace '/usr/share/plymouth/themes/plymouth-modern-bgrt/bgrt.script' "$out/share/plymouth/themes/modern-bgrt/bgrt.script"
mkdir /tmp/plymouth-theme
cp -r $src/* /tmp/plymouth-theme
substituteInPlace /tmp/plymouth-theme/install.sh --replace '/usr' "$out"
substituteInPlace /tmp/plymouth-theme/install.sh --replace 'convert /sys/firmware/acpi/bgrt/image theme/bgrt.png' "convert theme/bgrt.jpeg theme/bgrt.png"
substituteInPlace /tmp/plymouth-theme/install.sh --replace '[[ !' "[["
substituteInPlace /tmp/plymouth-theme/install.sh --replace 'convert' "${pkgs.imagemagick}/bin/convert"
echo "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
PwBkf//Z
" | base64 --decode > /tmp/plymouth-theme/bgrt.jpg
# curl "https://static-community.frame.work/original/2X/1/191e90201ff9e3276524e10064310c3fb439cde7.jpeg" -o "/tmp/plymouth-theme/theme/bgrt.jpeg"
bash /tmp/plymouth-theme/install.sh
runHook postInstall
'';
passthru.updateScript = unstableGitUpdater { };
meta = with lib; {
description = "This theme uses your UEFI logo for seamless booting";
homepage = "https://github.com/glics/plymouth-modern-bgrt";
license = licenses.mit;
maintainers = with maintainers; [ me ];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,74 @@
{ lib
, stdenv
, fetchFromGitHub
, unstableGitUpdater
, pkgs
}:
stdenv.mkDerivation {
name = "xdg-desktop-portal-termfilechooser";
version = "1.0.0";
src = fetchFromGitHub {
repo = "xdg-desktop-portal-termfilechooser";
owner = "GermainZ";
rev = "71dc7ab06751e51de392b9a7af2b50018e40e062";
hash = "sha256-645hoLhQNncqfLKcYCgWLbSrTRUNELh6EAdgUVq3ypM=";
};
dontConfigure = true;
nativeBuildInputs = with pkgs; [
meson
ninja
gcc
pkg-config
scdoc
inih
systemdMinimal
];
buildPhase = ''
runHook preBuild
# mv $src/meson.build $src/meson.build.old
# cat $src/meson.build.old > $src/meson.build
#
mkdir -p /tmp/xdg-desktop-portal-termfilechooser/
cp -r $src/* /tmp/xdg-desktop-portal-termfilechooser
substituteInPlace /tmp/xdg-desktop-portal-termfilechooser/meson.build --replace "'-D_POSIX_C_SOURCE=200809L'," "'-D_POSIX_C_SOURCE=200809L','-O3'"
cd /tmp/xdg-desktop-portal-termfilechooser/
meson build
ninja -C build
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/share/{dbus-1/services,xdg-desktop-portal/portals}
cp /tmp/xdg-desktop-portal-termfilechooser/build/*.service $out/share/dbus-1/services/
cp /tmp/xdg-desktop-portal-termfilechooser/termfilechooser.portal $out/share/xdg-desktop-portal/portals/
mkdir -p $out/libexec
cp /tmp/xdg-desktop-portal-termfilechooser/build/xdg-desktop-portal-termfilechooser $out/libexec
runHook postInstall
'';
meta = with lib; {
homepage = "https://github.com/GermainZ/xdg-desktop-portal-termfilechooser";
description = "xdg-desktop-portal backend for choosing files with your favorite file chooser.";
license = licenses.mit;
maintainers = with maintainers; [ SpoodyTheOne ];
mainProgram = "xdg-desktop-portal-termfilechooser";
platforms = platforms.linux;
};
}

18
modules/programs/alacritty.nix Executable file
View file

@ -0,0 +1,18 @@
{ ... }:
{
programs.alacritty = {
enable = true;
settings = {
window = {
dynamic_padding = true;
decorations = "None";
};
};
};
home.sessionVariables.TERM = "alacritty";
home.sessionVariables.TERMINAL = "alacritty";
home.sessionVariables.TERMCMD = "alacritty";
}

59
modules/programs/dunst.nix Executable file
View file

@ -0,0 +1,59 @@
{ pkgs, lib, config, ... }:
{
services.dunst.enable = true;
services.dunst.settings = {
global = {
monitor = "mouse";
width = "300";
height = "(0, 300)";
offset = "10x50";
scale = 0;
progress_bar = true;
progress_bar_height = 10;
progress_bar_frame_width = 1;
progress_bar_corner_radius = 5;
icon_corner_radius = 0;
# corner_radius = 4;
seperator_height = 2;
padding = 8;
horizontal_padding = 8;
text_icon_padding = 0;
frame_width = 1;
gap_size = 0;
seperator_color = "auto";
sort = "yes";
format = "<b>%s</b>\n%b";
alignment = "right";
vertical_alignment = "center";
ellipsize = "middle";
stack_duplicates = false;
show_indicators = false;
};
"[spotify-album-art-waybar]" = {
appname = "Spotify";
script = builtins.toString (pkgs.writeShellScript "album_art.sh" ''
#!/bin/bash
album_art=$(${pkgs.playerctl}/bin/playerctl -p spotify metadata mpris:artUrl)
if [[ -z $album_art ]]
then
# spotify is dead, we should die too.
exit
fi
${pkgs.curl}/bin/curl -s "''${album_art}" --output "/tmp/cover.jpeg"
echo "/tmp/cover.jpeg"
'');
};
};
}

129
modules/programs/firefox.nix Executable file
View file

@ -0,0 +1,129 @@
{ config
, pkgs
, ...
}:
let
lock-false = {
Value = false;
Status = "locked";
};
lock-true = {
Value = true;
Status = "locked";
};
in
{
programs = {
firefox = {
enable = true;
languagePacks = [ "en-US" ];
/*
---- PROFILES ----
*/
profiles.defualt = {
search.engines = {
"Google".metaData.hidden = true;
"Bing".metaData.hidden = true;
"Ecosia".metaData.hidden = true;
"Facebook".metaData.hidden = true;
"Twitter".metaData.hidden = true;
"Youtube".metaData.hidden = true;
"Wikipedia".metaData.hidden = true;
"Reddit".metaData.hidden = true;
};
search.default = "DuckDuckGo";
search.privateDefault = "DuckDuckGo";
search.force = true;
};
/*
---- POLICIES ----
*/
# Check about:policies#documentation for options.
policies = {
DisableTelemetry = true;
DisableFirefoxStudies = true;
EnableTrackingProtection = {
Value = true;
Locked = true;
Cryptomining = true;
Fingerprinting = true;
};
DisablePocket = true;
DisableFirefoxAccounts = true;
DisableAccounts = true;
DisableFirefoxScreenshots = true;
OverrideFirstRunPage = "";
OverridePostUpdatePage = "";
DontCheckDefaultBrowser = true;
DisplayBookmarksToolbar = "newtab"; # alternatives: "always" or "newtab"
DisplayMenuBar = "default-off"; # alternatives: "always", "never" or "default-on"
SearchBar = "unified"; # alternative: "separate"
/*
---- EXTENSIONS ----
*/
# Check about:support for extension/add-on ID strings.
# Valid strings for installation_mode are "allowed", "blocked",
# "force_installed" and "normal_installed".
ExtensionSettings = {
"*".installation_mode = "blocked"; # blocks all addons except the ones specified below
# uBlock Origin:
"uBlock0@raymondhill.net" = {
install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
installation_mode = "force_installed";
};
# Privacy Badger:
"jid1-MnnxcxisBPnSXQ@jetpack" = {
install_url = "https://addons.mozilla.org/firefox/downloads/latest/privacy-badger17/latest.xpi";
installation_mode = "force_installed";
};
# bitwarden
"{446900e4-71c2-419f-a6a7-df9c091e268b}" = {
install_url = "https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi";
installation_mode = "force_installed";
};
# FUCK youtube ai translated titles
"{458160b9-32eb-0f0c-8_d1-89ad3bdeb9dc}" = {
install_url = "https://addons.mozilla.org/firefox/downloads/latest/youtube-anti-translate/latext.xpi";
installation_mode = "force_installed";
};
# 1Password:
# "{d634138d-c276-4fc8-924b-40a0ea21d284}" = {
# install_url = "https://addons.mozilla.org/firefox/downloads/latest/1password-x-password-manager/latest.xpi";
# installation_mode = "force_installed";
# };
};
/*
---- PREFERENCES ----
*/
# Check about:config for options.
Preferences = {
"browser.contentblocking.category" = {
Value = "strict";
Status = "locked";
};
"extensions.pocket.enabled" = lock-false;
"extensions.screenshots.disabled" = lock-true;
"browser.topsites.contile.enabled" = lock-false;
"browser.formfill.enable" = lock-false;
"browser.search.suggest.enabled" = lock-false;
"browser.search.suggest.enabled.private" = lock-false;
"browser.urlbar.suggest.searches" = lock-false;
"browser.urlbar.showSearchSuggestionsFirst" = lock-false;
"browser.newtabpage.activity-stream.feeds.section.topstories" = lock-false;
"browser.newtabpage.activity-stream.feeds.snippets" = lock-false;
"browser.newtabpage.activity-stream.section.highlights.includePocket" = lock-false;
"browser.newtabpage.activity-stream.section.highlights.includeBookmarks" = lock-false;
"browser.newtabpage.activity-stream.section.highlights.includeDownloads" = lock-false;
"browser.newtabpage.activity-stream.section.highlights.includeVisited" = lock-false;
"browser.newtabpage.activity-stream.showSponsored" = lock-false;
"browser.newtabpage.activity-stream.system.showSponsored" = lock-false;
"browser.newtabpage.activity-stream.showSponsoredTopSites" = lock-false;
};
};
};
};
}

21
modules/programs/hyprpaper.nix Executable file
View file

@ -0,0 +1,21 @@
{ lib, config, ... }:
{
options = {
hyprpaper.wallpaper = lib.mkOption {
description = "Path to the wallpaper that should be used";
default = "";
};
};
config = {
xdg.configFile."hypr/hyprpaper.conf".text =
# if builtins.pathExists config.hyprpaper.wallpaper then
if config.stylix.enable then
"
preload = ${config.stylix.image}
wallpaper = ,${config.stylix.image}
"
else "";
services.hyprpaper.enable = true;
};
}

View file

View file

@ -0,0 +1,15 @@
{ pkgs, config, lib, ... }:
{
programs.mangohud = {
enable = true;
settings = {
font_scale = lib.mkForce 1.0;
font_size = lib.mkForce 24;
font_size_text = lib.mkForce 24;
background_alpha = lib.mkForce 0.65;
alpha = lib.mkForce 1.0;
round_corners = lib.mkForce 4;
gpu_name = true;
};
};
}

20
modules/programs/tmux.nix Normal file
View file

@ -0,0 +1,20 @@
{ pkgs, lib, config, ... }: {
programs.tmux = {
enable = true;
# Enable 24-hour clock
clock24 = true;
terminal = if config.programs.alacritty.enable then "alacritty" else lib.mkDefault;
baseIndex = 1;
mouse = true;
shell = "${pkgs.zsh}/bin/zsh";
# escapeTime = 150;
historyLimit = 50000;
extraConfig = lib.strings.concatStringsSep "\n" [
"set -g display-time 4000"
"set -g focus-events on"
"set-option -a terminal-features ',alacritty:RGB'"
"set-option -a terminal-overrides ',alacritty:Tc'"
];
};
}

52
modules/programs/tofi.nix Executable file
View file

@ -0,0 +1,52 @@
{ lib, config, ...}: {
programs.tofi.enable = true;
# xdg.configFile."tofi/config".text = ''
# width = 100%
# height = 100%
# border-width = 0
# outline-width = 0
# padding-left = 35%
# padding-top = 30%
# result-spacing = 25
# num-results = 8
# font = monospace
# # background-color = #2a273fdd
# text-color = #e0def4
# input-color = #e0def4
# # text-cursor-color = #e0def4
# # selection-color = #c4a7e7
# prompt-background-padding = 5
# text-cursor-style = underscore
# text-cursor-corner-radius = 1
# # selection-match-color = #9ccfd8
# hide-cursor = false
# text-cursor = true
# '';
programs.tofi.settings = {
width = "35%";
height = "25%";
border-width = 1;
outline-width = 0;
corner-radius = 4;
# padding-left = "35%";
# padding-right = "30%";
result-spacing = 16;
num-results = 7;
prompt-background-padding = 5;
# text-cursor-tyle = "underscore";
text-cursor-corner-radius = 1;
hide-cursor = false;
text-cursor = true;
# font-size = lib.mkForce 18;
};
home.activation = {
# https://github.com/philj56/tofi/issues/115#issuecomment-1701748297
regenerateTofiCache = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
tofi_cache=${config.xdg.cacheHome}/tofi-drun
[[ -f "$tofi_cache" ]] && rm "$tofi_cache"
'';
};
}

View file

@ -0,0 +1,236 @@
{ config, lib, pkgs, ... }:
with config.lib.stylix.colors.withHashtag;
with config.stylix.fonts;
{
stylix.targets.waybar.enable = false;
services.playerctld.enable = true;
services.playerctld.package = pkgs.playerctl;
programs.waybar = {
enable = true;
# style = ./style.css;
style = lib.mkForce
(''
@define-color base00 ${base00}; @define-color base01 ${base01}; @define-color base02 ${base02}; @define-color base03 ${base03};
@define-color base04 ${base04}; @define-color base05 ${base05}; @define-color base06 ${base06}; @define-color base07 ${base07};
@define-color base08 ${base08}; @define-color base09 ${base09}; @define-color base0A ${base0A}; @define-color base0B ${base0B};
@define-color base0C ${base0C}; @define-color base0D ${base0D}; @define-color base0E ${base0E}; @define-color base0F ${base0F};
* {
font-family: "${sansSerif.name}";
font-size: ${builtins.toString sizes.desktop}pt;
margin:0;
}
window#waybar {
background: transparent;
}
tooltip {
border-color: @base0D;
background: alpha(@base00, ${with config.stylix.opacity; builtins.toString desktop});
color: @base05;
}
''
+ (builtins.readFile ./style.css)
);
settings = {
test = {
layer = "top";
output = [ "eDP-1" ];
position = "top";
width = 1920;
modules-left = [
"cpu"
"memory"
"hyprland/workspaces"
"hyprland/window"
];
modules-center = [
# "image#album-art"
"mpris"
];
modules-right = [
"privacy"
"tray"
"wireplumber"
"network"
"backlight"
"battery"
"temperature"
"clock"
# "custom/power"
];
fixed-center = true;
"custom/power" = {
format = "";
on-click = "systemctl $(echo \"poweroff\nreboot\nhibernate\" | tofi --prompt-text \"power option: \" --horizontal true --height 35 --width 20%)";
};
"network" = {
format = "Not connected";
format-wifi = "{essid} ";
format-ethernet = "{ipaddr}/{cidr} ";
format-disconnected = "";
tooltip-format = "{ifname} via {gwaddr}";
tooltip-format-wifi = "{essid} ({signalStrength}%)\n{ipaddr}/{cidr}";
tooltip-format-ethernet = "{ifname}";
tooltip-format-disconnected = "Disconnected";
max-length = 50;
};
"power-profiles-daemon" = {
format = "{icon}";
tooltip-format = "Power profile: {profile}\nDriver: {driver}";
tooltip = true;
format-icons = {
default = "";
performance = "";
balanced = "";
power-saver = "";
};
};
"temperature" = {
critical-threshold = 80;
thermal-zone = 7;
format = " {temperatureC}°C";
};
"clock" = {
format = "{:%H:%M} ";
format-alt = "{:%A, %B %d, %Y (%R)} ";
tooltip-format = "{:%Y-%m-%d}";
calendar = {
mode = "year";
mode-mon-col = 3;
weeks-pos = "right";
on-scroll = 1;
format = {
months = "<span color='@base06'><b>{}</b></span>";
days = "<span color='@base06'><b>{}</b></span>";
weeks = "<span color='@base0D'><b>W{}</b></span>";
weekdays = "<span color='@base0C'><b>{}</b></span>";
today = "<span color='@base0E'><b><u>{}</u></b></span>";
};
};
actions = {
on-click-right = "mode";
on-click-forward = "tz_up";
on-click-backward = "tz_down";
on-scroll-up = "shift_up";
on-scroll-down = "shift_down";
};
};
"backlight" = {
format = "{percent}% 󰃠";
tooltip = false;
};
"cpu" = {
interval = 3;
format = " {usage}%";
# format-tooltip = ''
# load: {load}
# avg: {avg_frequency} GHz
# min: {min_frequency} GHz
# max: {max_frequency} GHz
# '';
# on-click = ''
# notify-send "CPU Stats" "avg: {avg_frequency} GHz"
# '';
max-length = 10;
};
"memory" = {
format = " {percentage}%";
# tooltip = true;
# tooltip-format = "{used}/{total}GiB used\n{swapUsed}/{totalSwap}GiB swap used";
};
"tray" = {
icon-size = 24;
spacing = 10;
};
"wireplumber" = {
format = "{volume}% {icon}";
format-muted = "";
format-icons = [ "" "" "" ];
on-click = "wpctl set-mute @DEFAULT_SINK@ toggle";
max-volume = 150;
scroll-step = 0.2;
};
"battery" = {
interval = 60;
full-at = 96;
states = {
warning = 30;
critical = 15;
};
format = "{capacity}% {icon}";
format-charging = "{capacity}% ";
format-icons = [ "" "" "" "" "" ];
max-length = 25;
};
"image#album-art" = {
exec = pkgs.writeShellScript "album_art.sh" ''
album_art=$(playerctl metadata | grep artUrl | awk '{ print $3 }')
if [[ -z $album_art ]]
then
# remove image
echo "/tmp/invalid.tiff";
# spotify is dead, we should die to.
exit
fi
echo "/tmp/cover.jpeg"
'';
size = 32;
interval = 2;
};
"mpris" = {
format = "{status_icon} {player_icon} {dynamic}";
player-icons = {
# default = "";
spotify = "";
firefox = "󰈹";
};
status-icons = {
paused = "";
playing = "";
stopped = "";
};
dynamic-order = [
"artist"
"title"
"position"
"length"
];
dynamic-seperator = ": ";
interval = 2;
};
};
};
};
}

159
modules/programs/waybar/style.css Executable file
View file

@ -0,0 +1,159 @@
#mpris {
color: @base05;
background-color: @base00;
border-radius: 0 0 4pt 4pt;
padding-left: 6pt;
padding-right: 6pt;
margin-left: 4pt;
margin-right: 4pt;
transition: width 0.2s ease;
transition: background-color 0.1s ease;
transition: color 0.1s ease;
}
#mpris.spotify {
background: @base0B;
color: @base00;
}
#clock {
background-color: @base0C;
color: @base00;
padding-left: 6pt;
padding-right: 12pt;
}
#battery {
background-color: @base0E;
color: @base00;
padding-left: 6pt;
padding-right: 12pt;
}
#backlight {
background-color: @base06;
color: @base00;
padding-left: 6pt;
padding-right: 12pt;
}
#wireplumber {
background-color: @base08;
color: @base00;
padding-left: 6pt;
padding-right: 12pt;
}
#custom-power {
background-color: @base08;
color: @base00;
padding-left: 8pt;
padding-right: 12pt;
}
#power-profiles-daemon {
background-color: @base0E;
color: @base00;
padding-left: 8pt;
padding-right: 13pt;
}
#cpu {
background-color: @base0B;
color: @base00;
padding-left: 6pt;
padding-right: 6pt;
}
#memory {
background-color: @base0E;
color: @base00;
padding-left: 6pt;
padding-right: 6pt;
}
#network {
background-color: @base0D;
color: @base00;
padding-left: 6pt;
padding-right: 12pt;
}
#tray, #privacy {
background-color: @base00;
padding-left: 6pt;
padding-right: 6pt;
transition: width 0.1s ease;
}
#privacy {
margin-right: 2pt;
border-radius: 0 0 4pt 4pt;
transition: height 0.1s ease;
}
#tray {
margin-left: 2pt;
border-radius: 0 0 0 4pt;
}
#temperature {
background-color: @base0D;
color: @base00;
padding-left: 6pt;
padding-right: 6pt;
transition: background-color 0.1s linear;
}
#temperature.critical {
background-color: @base08;
}
#workspaces button {
border-radius: 0;
/*border-bottom: 2px solid @base0E;*/
border-bottom: 0px;
border-bottom-style: solid;
border-bottom-color: @base0E;
transition: color 0.1s ease;
transition: border-bottom 0.1s ease;
}
#workspaces button.active {
color: @base0E;
border-bottom: 2px;
}
#workspaces {
color: @base05;
background-color: @base00;
border-radius: 0 0 4pt 4pt;
padding-left: 6pt;
padding-right: 6pt;
border-radius: 0 0 4pt 0;
margin-right: 4pt;
transition: width 0.2s ease;
}
#window {
color: @base05;
background-color: @base00;
border-radius: 0 0 4pt 4pt;
padding-left: 6pt;
padding-right: 6pt;
transition: width 0.2s ease;
transition: background-color 0.1s ease;
}
window#waybar.empty #window {
background-color: transparent;
}

94
modules/shells/zsh.nix Executable file
View file

@ -0,0 +1,94 @@
{ pkgs, lib, config, ... }: {
options = {
zsh.jump = {
enable = lib.mkEnableOption "enables jump in zsh";
show-destination = lib.mkEnableOption "Echoes the folder jump changed to after jumping";
};
zsh.extraLines = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = "List of extra commands to run on zsh init";
};
zsh.histFile = lib.mkOption {
type = lib.types.str;
default = "$HOME/.zsh_history";
description = "Path to the zsh history file";
};
zsh.direnv = lib.mkEnableOption "Enable direnv hook";
};
config = {
programs.lsd.enable = true;
programs.zsh.enable = true;
programs.zsh.enableCompletion = true;
programs.zsh.dotDir = ".config/zsh";
programs.zsh.autosuggestion = {
enable = true;
};
programs.zsh.syntaxHighlighting = {
enable = true;
};
programs.zsh.history.path = config.zsh.histFile;
programs.zsh.shellAliases = {
ls = "lsd";
nix-rebuild = "nixos-rebuild --use-remote-sudo switch --flake /etc/nixos";
nd = "nix develop -c zsh";
};
programs.zsh.oh-my-zsh = {
enable = true;
theme = "robbyrussell";
plugins = [
"git"
"sudo"
];
};
# programs.zsh.initExtra = lib.concatStringsSep "\n" ([
# "echo zsh"
# ] ++ lib.lists.optionals config.zsh.jump.enable
# "eval");
programs.zsh.initExtra = lib.concatStringsSep "\n" (
# Add any extra lines to the zsh config
config.zsh.extraLines ++
# Add jump shell script to list if jump is enabled
(
if config.zsh.jump.show-destination
then [
"eval \"$(jump shell zsh --bind=z)\""
''
j() {
z $1;
echo $(pwd)
}
''
]
else [ "eval \"$(jump shell zsh)\"" ]
)
++
(
if config.zsh.direnv then [ "eval \"$(direnv hook zsh)\"" ]
else [ ]
)
# ++
# (
# if config.programs.nix-index.enable && config.programs.nix-index.enableZshIntegration then
# [ "source ${pkgs.nix-index}/etc/profile.d/command-not-found.sh" ]
# else
# []
# )
);
};
}

View file

@ -0,0 +1,42 @@
{ lib
, stdenvNoCC
, fetchFromGitHub
, unstableGitUpdater
, pkgs
}:
stdenvNoCC.mkDerivation {
name = "posy-cursors";
src = fetchFromGitHub {
repo = "posy-improved-cursor-linux";
owner = "simtrami";
rev = "bd2bac08bf01e25846a6643dd30e2acffa9517d4";
hash = "sha256-ndxz0KEU18ZKbPK2vTtEWUkOB/KqA362ipJMjVEgzYQ=";
};
dontConfigure = true;
dontBuild = true;
installPhase = ''
runHook preInstall
install -dm 755 $out/share/icons
cp -rf $src/Posy_Cursor* $out/share/icons
# cp -rf themes/* $out/share/icons/
runHook postInstall
'';
passthru.updateScript = unstableGitUpdater {};
meta = with lib; {
description = "Posy cursors for NixOS";
homepage = "https://github.com/simtrami/posy-improved-cursor-linux";
# license = licenses.mit;
maintainers = with maintainers; [ me ];
platforms = platforms.all;
};
# https://github.com/ripperhowls/Posys-Cursors-Improved-by-ripperhowls.git
}

34
modules/stylix/home/default.nix Executable file
View file

@ -0,0 +1,34 @@
{ pkgs, ... }:
{
stylix.enable = true;
# stylix.image = ./nixos-wallpaper.png;
stylix.autoEnable = true;
stylix.fonts = {
serif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Serif";
};
sansSerif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Sans";
};
monospace = {
# package = (pkgs.nerdfonts.override {
# fonts =
# [
# "Mononoki"
# ];
# });
package = pkgs.nerd-fonts.mononoki;
name = "Mononoki Nerd Font";
};
emoji = {
package = pkgs.noto-fonts-emoji;
name = "Noto Color Emoji";
};
};
}

56
modules/users/main-user.nix Executable file
View file

@ -0,0 +1,56 @@
{ pkgs, lib, config, ... }:
{
options = {
main-user = {
enable = lib.mkEnableOption "Enable main user";
name = lib.mkOption {
type = lib.types.str;
default = "default-user";
description = "Name of the user";
};
groups = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = "List of groups to add the user to";
};
sudo = lib.mkEnableOption "Should the user be in the sudoers group or not";
shell = lib.mkOption {
default = pkgs.zsh;
description = "The shell of the user";
};
home-manager = {
enable = lib.mkEnableOption "Enable home-manager for the user";
import = lib.mkOption
{
description = "Import path. MUST BE SET IN CONFIGURATION.NIX";
};
};
};
};
config = lib.mkIf config.main-user.enable {
users.users.${config.main-user.name} = {
isNormalUser = true;
initialPassword = "1234";
description = "Main system user";
extraGroups = [
"networkmanager"
"audio"
]
++ config.main-user.groups
++ (lib.lists.optional config.main-user.sudo "wheel");
shell = config.main-user.shell;
};
home-manager.users.${config.main-user.name} =
lib.mkIf config.main-user.home-manager.enable config.main-user.home-manager.import;
};
}

View file

@ -0,0 +1,181 @@
{ monitors ? []
, border-radius ? 0
}:
{ lib, pkgs, inputs, ... } @ params:
{
imports = [
./exec.nix
./env.nix
];
programs.alacritty.enable = lib.mkDefault true;
wayland.windowManager.hyprland =
let
pluginsNix = (import ./plugins.nix params);
inherit (pluginsNix) plugins;
in
{
enable = true;
# plugins = plugins;
settings = {
autogenerated = false;
# monitor = [
# "eDP-1, 1920x1080@60, auto, 1"
# ];
monitor = monitors;
general = {
gaps_in = 5;
gaps_out = 10;
};
input = {
kb_layout = "us";
follow_mouse = true;
# Maps capslock to escape
kb_options = "caps:escape";
sensitivity = 0.3;
accel_profile = "flat";
touchpad.natural_scroll = true;
};
master = {
new_status = "master";
};
animations = {
enabled = true;
bezier = [
"myBezier, 0.05, 0.9, 0.1, 1.05"
];
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
];
};
gestures = {
workspace_swipe = true;
};
cursor = {
no_hardware_cursors = true;
};
misc = {
vfr = true;
# begone satan, why is this so fucking hard to disable 99% of the time
middle_click_paste = false;
};
decoration = {
blur.enabled = false;
rounding = border-radius;
};
binds = {
workspace_back_and_forth = true;
disable_keybind_grabbing = true;
};
# screencopy = {
# allow_token_by_default = true;
# };
# Set mod key
"$mod" = "super";
bind = [
"$mod, Return, exec, alacritty"
"$mod, C, killactive"
"$mod, V, togglefloating"
"$mod, G, fullscreen"
"$mod, D, exec, tofi-drun | bash"
"$mod, F, exec, ${pkgs.writeScriptBin "run_anything.sh" ''
package=$(echo "" | tofi --require-match=false --prompt-text=", " --height=35);
if [[ -z "$package" ]]; then
exit 1;
fi
notify-send "Running $package";
error=$(, -P tofi $package 2>&1)
if [ $? -ne 0 ]; then
notify-send "Error with $package" "$error"
fi
''}/bin/run_anything.sh"
"$mod SHIFT, S, exec, grimblast --freeze copy area"
"$mod SHIFT, Q, exec, hyprctl kill"
"$mod, L, exec, hyprlock"
] ++ (
# Auto generate workspace switching from [0-9] and shift + [0-9]
builtins.concatLists (builtins.genList
(
x:
let
ws =
let
c = (x + 1) / 10;
in
builtins.toString (x + 1 - (c * 10));
in
[
"$mod, ${ws}, workspace, ${toString (x + 1)}"
"$mod SHIFT, ${ws}, movetoworkspace, ${toString (x + 1)}"
]
)
10)
);
# XF86AudioMedia
# XF86AudioPrev
# XF86AudioNext
# XF86AudioPlay
# XF86AudioStop
binde = [
# Volume keys
", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+"
", XF86AudioLowerVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%-"
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_SINK@ toggle"
", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioPrev, exec, playerctl previous"
", XF86AudioNext, exec, playerctl next"
", XF86MonBrightnessUp, exec, brightnessctl s 5%+"
", XF86MonBrightnessDown, exec, brightnessctl s 5%-"
];
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
windowrulev2 = [
"pin, initialClass:^(zen-alpha)$, initialTitle:^(Zen)$"
];
};
extraConfig = ''
''
# + (import ./plugins.nix { inherit pkgs; inherit inputs; }).pluginConfig
;
};
}

View file

@ -0,0 +1,16 @@
{...}:
{
wayland.windowManager.hyprland.settings.env = [
# "LIBVA_DRIVER_NAME,nvidia"
"LIBVA_DRIVER_NAME,iHD"
"XDG_SESSION_TYPE,wayland"
"GBM_BACKEND,wayland"
"GTK_USE_PORTAL,1"
"__GLX_VENDOR_LIBRARY_NAME,nvidia"
"QT_QPA_PLATFORM,wayland"
"XDG_CURRENT_DESKTOP,Hyprland"
"XDG_SESSION_DESKTOP,Hyprland"
# "MOZ_ENABLE_WAYLAND,0"
];
}

View file

@ -0,0 +1,9 @@
{ ... }:
{
wayland.windowManager.hyprland.settings.exec = [ ];
wayland.windowManager.hyprland.settings.exec-once = [
# "hyprpaper &"
"waybar &"
"blueman-applet &"
];
}

View file

@ -0,0 +1,45 @@
{ ... }:
{
services.hypridle = {
enable = true;
settings = {
general = {
lock_cmd = "dunstctl set-paused true; pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances.
unlock_cmd = "dunstctl set-paused false";
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
};
listener = [
{
timeout = 150; # 2.5min.
on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor.
on-resume = "brightnessctl -r"; # monitor backlight restor.
}
{
timeout = 300; # 5min
on-timeout = "loginctl lock-session"; # lock screen when timeout has passed
on-resume = "brightnessctl -r"; # monitor backlight restor.
}
{
timeout = 380; # 5.5min
on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
on-resume = [
"hyprctl dispatch dpms on" # screen on when activity is detected after timeout has fired.
"brightnessctl -r" # monitor backlight restor.
];
}
{
timeout = 600;
on-timeout = "systemctl suspend-then-hibernate";
}
];
};
};
}

View file

@ -0,0 +1,72 @@
{ lib, inputs, config, ... }:
{
programs.hyprlock = {
enable = true;
settings = {
general.grace = 2;
background = {
# path = (if config.stylix.enable then builtins.toString config.stylix.image else "");
# color = (if config.stylix.enable then config.lib.stylix.colors.base01 else "");
};
input-field = {
size = "250, 50";
outline_thickness = 1;
dots_size = 0.33;
dots_spacing = 0.15;
dost_center = false;
dots_rounding = -1;
# outer_color = "rgb(42, 40, 62)";
# inner_color = "rgb(57, 53, 82)";
# font_color = "rgb(224, 222, 244)";
fade_on_empty = false;
fade_timeout = 4000;
placeholder_text = "<span foreground=\"##e0def4\">Input Password...</span>";
hide_input = false;
rounding = 0;
# check_color = "rgb(246, 193, 119)";
# fail_color = "rgb(235, 111, 146)";
fail_text = "<i>$FAIL <b>($ATTEMPTS)</b></i>";
fail_transition = 300;
# capslock_color = "rgb(196, 167, 231)";
numlock_color = -1;
bothlock_color = -1;
invert_numlock = false;
position = "0, -20";
halign = "center";
valign = "center";
};
label = [
{
text = "cmd[update:1000] echo \"<span>$(date +%H:%M:%S)</span>\"";
color = "rgb(200, 200, 200)";
font_size = 15;
font_family = "Noto Sans";
position = "-10, -10";
halign = "right";
valign = "top";
}
{
text = "<span> $USER</span>";
color = "rgb(200, 200, 200)";
font_size = 25;
font_family = "Noto Sans";
position = "0, 50";
halign = "center";
valign = "center";
}
];
};
};
}

View file

@ -0,0 +1,238 @@
{ pkgs, inputs, ... }:
{
plugins = with pkgs.hyprlandPlugins; [
hyprfocus
# inputs.hypr-dynamic-cursors.packages.${pkgs.system}.hypr-dynamic-cursors
];
pluginConfig = ''
hyprfocus {
enabled = yes
animate_floating = yes
animate_workspacechange = yes
focus_animation = shrink
# Beziers for focus animations
bezier = bezIn, 0.5,0.0,1.0,0.5
bezier = bezOut, 0.0,0.5,0.5,1.0
bezier = overshot, 0.05, 0.9, 0.1, 1.05
bezier = smoothOut, 0.36, 0, 0.66, -0.56
bezier = smoothIn, 0.25, 1, 0.5, 1
bezier = realsmooth, 0.28,0.29,.69,1.08
# Flash settings
flash {
flash_opacity = 0.95
in_bezier = realsmooth
in_speed = 0.5
out_bezier = realsmooth
out_speed = 3
}
# Shrink settings
shrink {
shrink_percentage = 0.95
in_bezier = realsmooth
in_speed = 1
out_bezier = realsmooth
out_speed = 2
}
}
plugin:dynamic-cursors {
# enables the plugin
enabled = true
# sets the cursor behaviour, supports these values:
# tilt - tilt the cursor based on x-velocity
# rotate - rotate the cursor based on movement direction
# stretch - stretch the cursor shape based on direction and velocity
# none - do not change the cursors behaviour
mode = tilt
# minimum angle difference in degrees after which the shape is changed
# smaller values are smoother, but more expensive for hw cursors
threshold = 2
# override the mode behaviour per shape
# this is a keyword and can be repeated many times
# by default, there are no rules added
# see the dedicated `shape rules` section below!
# shaperule = <shape-name>, <mode> (optional), <property>: <value>, ...
# shaperule = <shape-name>, <mode> (optional), <property>: <value>, ...
# ...
# for mode = rotate
rotate {
# length in px of the simulated stick used to rotate the cursor
# most realistic if this is your actual cursor size
length = 20
# clockwise offset applied to the angle in degrees
# this will apply to ALL shapes
offset = 0.0
}
# for mode = tilt
tilt {
# controls how powerful the tilt is, the lower, the more power
# this value controls at which speed (px/s) the full tilt is reached
limit = 5000
# relationship between speed and tilt, supports these values:
# linear - a linear function is used
# quadratic - a quadratic function is used (most realistic to actual air drag)
# negative_quadratic - negative version of the quadratic one, feels more aggressive
function = negative_quadratic
}
# for mode = stretch
stretch {
# controls how much the cursor is stretched
# this value controls at which speed (px/s) the full stretch is reached
limit = 3000
# relationship between speed and stretch amount, supports these values:
# linear - a linear function is used
# quadratic - a quadratic function is used
# negative_quadratic - negative version of the quadratic one, feels more aggressive
function = quadratic
}
# configure shake to find
# magnifies the cursor if its is being shaken
shake {
# enables shake to find
enabled = true
# use nearest-neighbour (pixelated) scaling when shaking
# may look weird when effects are enabled
nearest = true
# controls how soon a shake is detected
# lower values mean sooner
threshold = 6.0
# magnification level immediately after shake start
base = 4.0
# magnification increase per second when continuing to shake
speed = 4.0
# how much the speed is influenced by the current shake intensitiy
influence = 0.0
# maximal magnification the cursor can reach
# values below 1 disable the limit (e.g. 0)
limit = 0.0
# time in millseconds the cursor will stay magnified after a shake has ended
timeout = 2000
# show cursor behaviour `tilt`, `rotate`, etc. while shaking
effects = false
# enable ipc events for shake
# see the `ipc` section below
ipc = false
}
# use hyprcursor to get a higher resolution texture when the cursor is magnified
# see the `hyprcursor` section below
hyprcursor {
# use nearest-neighbour (pixelated) scaling when magnifing beyond texture size
# this will also have effect without hyprcursor support being enabled
# 0 / false - never use pixelated scaling
# 1 / true - use pixelated when no highres image
# 2 - always use pixleated scaling
nearest = true
# enable dedicated hyprcursor support
enabled = true
# resolution in pixels to load the magnified shapes at
# be warned that loading a very high-resolution image will take a long time and might impact memory consumption
# -1 means we use [normal cursor size] * [shake:base option]
resolution = -1
# shape to use when clientside cursors are being magnified
# see the shape-name property of shape rules for possible names
# specifying clientside will use the actual shape, but will be pixelated
fallback = clientside
}
}
'';
# wayland.windowManager.hyprland.hyprfocus = {
# enabled = true;
# animate_floating = false;
# animate_workspacechange = false;
#
# # Possible values:
# # - shrink
# # - flash
# focus_animation = "shrink";
#
# bezier = [
# "bezIn, 0.5,0.0,1.0,0.5"
# "bezOut, 0.0,0.5,0.5,1.0"
# "overshot, 0.05, 0.9, 0.1, 1.05"
# "smoothOut, 0.36, 0, 0.66, -0.56"
# "smoothIn, 0.25, 1, 0.5, 1"
# "realsmooth, 0.28,0.29,.69,1.08"
# ];
#
# # Flash animation settings
# flash = {
# flash_opacity = 0.95;
# in_bezier = "realsmooth";
# in_speed = 0.5;
# out_bezier = "realsmooth";
# out_speed = 3;
# };
#
# # Shrink animation settings
# shrink = {
# shrink_percentage = 0.95;
# in_bezier = "realsmooth";
# in_speed = 1;
# out_bezier = "realsmooth";
# out_speed = 2;
# };
# };
#
# wayland.windowManager.hyprland.plugin."dynamic-cursor" = {
# enabled = true;
#
# # Possible values:
# # - rotate
# # - tilt
# # - stretch
# # - none
# mode = "tilt";
#
# # minimum angle difference in degrees after which the shape is changed
# # smaller values are smoother, but more expensive for hw cursors
# threshold = 2;
#
# # override the mode behaviour per shape
# # this is a keyword and can be repeated many times
# # by default, there are no rules added
# # shaperule = <shape-name>, <mode> (optional), <property>: <value>, ...
# shaperule = [];
#
# tilt = {
# # controls how powerful the tilt is, the lower, the more power
# # this value controls at which speed (px/s) the full tilt is reached
# limit = 5000;
#
# # relationship between speed and tilt, supports these values:
# # linear - a linear function is used
# # quadratic - a quadratic function is used (most realistic to actual air drag)
# # negative_quadratic - negative version of the quadratic one, feels more aggressive
# function = "negative_quadratic";
# };
# };
}

20
templates/dotnet/flake.nix Executable file
View file

@ -0,0 +1,20 @@
{
description = "Dotnet flake for dotnet development";
outputs = { self, nixpkgs }:
let
pkgs = nixpkgs.legacyPackages.x86_64-linux;
in
{
devShells.x86_64-linux = {
default = with pkgs; mkShell {
buildInputs = with pkgs; [
dotnet-sdk_8
];
shellHook = ''
echo "dotnet shell"
'';
};
};
};
}

2
templates/dotnet/makefile Executable file
View file

@ -0,0 +1,2 @@
all:
dotnet run Program.fs

32
templates/latex/fsharp-lang.tex Executable file
View file

@ -0,0 +1,32 @@
\usepackage{listings}
\lstdefinelanguage{FSharp}%
{morekeywords={let, new, match, with, rec, open, module, namespace, type, of, member, %
and, for, while, true, false, in, do, begin, end, fun, function, return, yield, try, %
mutable, if, then, else, cloud, async, static, use, abstract, interface, inherit, finally },
otherkeywords={ let!, return!, do!, yield!, use!, var, from, select, where, order, by },
keywordstyle=\color{bluekeywords},
sensitive=true,
basicstyle=\ttfamily,
breaklines=true,
xleftmargin=\parindent,
aboveskip=\bigskipamount,
tabsize=4,
morecomment=[l][\color{greencomments}]{///},
morecomment=[l][\color{greencomments}]{//},
morecomment=[s][\color{greencomments}]{{(*}{*)}},
morestring=[b]",
showstringspaces=false,
literate={`}{\`}1,
stringstyle=\color{redstrings},
}
\lstset
{ %Formatting for code in appendix
language=FSharp,
numbers=left,
stepnumber=1,
showstringspaces=false,
tabsize=1,
breaklines=true,
breakatwhitespace=false,
}

15
templates/latex/skabelon.bib Executable file
View file

@ -0,0 +1,15 @@
@online{traeinfo,
author = "Træinformation",
title = "kursusmateriale om clt",
url = "https://www.traeinfo.dk/kursusmateriale-om-clt/",
addendum = "Besøgt: 01.05.2020",
keywords = "Træinformation",
}
@online{cristobal,
author = "Wikipedia",
title = "Cristobal Tapia De Veer",
url = "https://en.wikipedia.org/wiki/Cristobal_Tapia_de_Veer",
addendum = "Besøgt: 23 oct 2023",
keywords = "Cristobal",
}

68
templates/latex/skabelon.tex Executable file
View file

@ -0,0 +1,68 @@
\documentclass[12pt, a4paper]{article}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{enumerate}
\usepackage{titling}
\usepackage[
a4paper,
includehead,
nomarginpar,
]{geometry}
\usepackage{fancyhdr}
\input{fsharp-lang}
\usepackage[dvipsnames]{xcolor}
\usepackage{hyperref}
\hypersetup{
colorlinks,
citecolor=RoyalBlue,
filecolor=black,
linkcolor=black,
urlcolor=RoyalBlue
}
\usepackage[backend=biber,style=mla,sorting=ynt]{biblatex}
\addbibresource{skabelon.bib}
\title{\LaTeX{} Skabelon}
\author{Snorre Ettrup Altschul}
\date{\today}
\renewcommand*\contentsname{Indholdsfortegnelse}
% Document begin
\begin{document}
\pagestyle{fancy}
\fancyhead[L]{\theauthor}
\fancyhead[C]{\thetitle}
\maketitle
\begin{figure}[h]
\centering
\includegraphics[width=0.65\textwidth]{figur.jpg}
\end{figure}
\newpage
% Table of contents
% \tableofcontents
\newpage
\section{Information}
\newpage
% \printbibliography[
% heading=bibintoc,
% title={Kildeliste}
% ]
\end{document}