From 279f90bfb82dd5f9e8ad45825cec011aeb1f5842 Mon Sep 17 00:00:00 2001 From: Snorre Ettrup Altschul Date: Tue, 14 Jan 2025 19:04:37 +0100 Subject: [PATCH] starting point --- README.md | 165 ++++ flake.lock | 747 ++++++++++++++++++ flake.nix | 153 ++++ hosts/bootstrap/configuration.nix | 84 ++ hosts/bootstrap/hardware-configuration.nix | 26 + hosts/desktop/configuration.nix | 415 ++++++++++ hosts/desktop/disko.nix | 29 + hosts/desktop/hardware-configuration.nix | 26 + hosts/desktop/home.nix | 151 ++++ hosts/desktop/nixos-wallpaper.png | Bin 0 -> 127312 bytes hosts/desktop/persist.nix | 32 + hosts/laptop/configuration.nix | 433 ++++++++++ hosts/laptop/hardware-configuration.nix | 26 + hosts/laptop/home.nix | 124 +++ hosts/laptop/nixos-wallpaper.png | Bin 0 -> 127312 bytes hosts/laptop/persist-work.nix | 33 + hosts/laptop/persist.nix | 35 + hosts/laptop/ssh/authorized_keys_snorre | 1 + hosts/laptop/work-home.nix | 141 ++++ hosts/nixos-vm/configuration.nix | 184 +++++ hosts/nixos-vm/disko-luks.nix | 72 ++ hosts/nixos-vm/hardware-configuration.nix | 25 + hosts/nixos-vm/home.nix | 57 ++ install.sh | 49 ++ modules/disko/delete-on-boot.nix | 80 ++ modules/disko/disko-btrfs-impermanence.nix | 18 + modules/disko/disko-luks.nix | 62 ++ modules/disko/impermanence-home.nix | 31 + modules/drivers/nvidia.nix | 63 ++ modules/editors/nixvim/default.nix | 39 + modules/editors/nixvim/extra.nix | 70 ++ modules/editors/nixvim/keymaps.nix | 75 ++ modules/editors/nixvim/options.nix | 23 + modules/editors/nixvim/plugins/cmp.nix | 69 ++ modules/editors/nixvim/plugins/image.nix | 12 + modules/editors/nixvim/plugins/lsp-lines.nix | 6 + modules/editors/nixvim/plugins/lsp.nix | 75 ++ modules/editors/nixvim/plugins/lualine.nix | 4 + modules/editors/nixvim/plugins/neorg.nix | 26 + .../plugins/nvim-ts-comment-context.nix | 6 + modules/editors/nixvim/plugins/orgmode.nix | 10 + modules/editors/nixvim/plugins/telescope.nix | 5 + modules/editors/nixvim/plugins/treesitter.nix | 13 + modules/editors/nixvim/plugins/undotree.nix | 4 + modules/editors/nixvim/plugins/vimtex.nix | 12 + modules/editors/nixvim/plugins/which-key.nix | 4 + modules/editors/nixvim/plugins/wilder.nix | 22 + modules/editors/nixvim/syntax/fsharp.nix | 15 + modules/plymouth/blahaj.nix | 8 + modules/plymouth/default.nix | 13 + modules/plymouth/modern-bgrt.nix | 277 +++++++ .../xdg-desktop-portal-termfilechooser.nix | 74 ++ modules/programs/alacritty.nix | 18 + modules/programs/dunst.nix | 59 ++ modules/programs/firefox.nix | 129 +++ modules/programs/hyprpaper.nix | 21 + modules/programs/keypassxc/default.nix | 0 modules/programs/mangohud.nix | 15 + modules/programs/tmux.nix | 20 + modules/programs/tofi.nix | 52 ++ modules/programs/waybar/default.nix | 236 ++++++ modules/programs/waybar/style.css | 159 ++++ modules/shells/zsh.nix | 94 +++ .../stylix/cursors/posy-improved/default.nix | 42 + modules/stylix/home/default.nix | 34 + modules/users/main-user.nix | 56 ++ modules/window-managers/hyprland/default.nix | 181 +++++ modules/window-managers/hyprland/env.nix | 16 + modules/window-managers/hyprland/exec.nix | 9 + modules/window-managers/hyprland/hypridle.nix | 45 ++ modules/window-managers/hyprland/hyprlock.nix | 72 ++ modules/window-managers/hyprland/plugins.nix | 238 ++++++ templates/dotnet/flake.nix | 20 + templates/dotnet/makefile | 2 + templates/latex/fsharp-lang.tex | 32 + templates/latex/skabelon.bib | 15 + templates/latex/skabelon.tex | 68 ++ 77 files changed, 5757 insertions(+) create mode 100755 README.md create mode 100755 flake.lock create mode 100755 flake.nix create mode 100755 hosts/bootstrap/configuration.nix create mode 100644 hosts/bootstrap/hardware-configuration.nix create mode 100755 hosts/desktop/configuration.nix create mode 100644 hosts/desktop/disko.nix create mode 100644 hosts/desktop/hardware-configuration.nix create mode 100755 hosts/desktop/home.nix create mode 100755 hosts/desktop/nixos-wallpaper.png create mode 100644 hosts/desktop/persist.nix create mode 100755 hosts/laptop/configuration.nix create mode 100755 hosts/laptop/hardware-configuration.nix create mode 100755 hosts/laptop/home.nix create mode 100755 hosts/laptop/nixos-wallpaper.png create mode 100644 hosts/laptop/persist-work.nix create mode 100644 hosts/laptop/persist.nix create mode 100755 hosts/laptop/ssh/authorized_keys_snorre create mode 100755 hosts/laptop/work-home.nix create mode 100755 hosts/nixos-vm/configuration.nix create mode 100755 hosts/nixos-vm/disko-luks.nix create mode 100755 hosts/nixos-vm/hardware-configuration.nix create mode 100755 hosts/nixos-vm/home.nix create mode 100755 install.sh create mode 100755 modules/disko/delete-on-boot.nix create mode 100644 modules/disko/disko-btrfs-impermanence.nix create mode 100755 modules/disko/disko-luks.nix create mode 100755 modules/disko/impermanence-home.nix create mode 100755 modules/drivers/nvidia.nix create mode 100755 modules/editors/nixvim/default.nix create mode 100755 modules/editors/nixvim/extra.nix create mode 100755 modules/editors/nixvim/keymaps.nix create mode 100755 modules/editors/nixvim/options.nix create mode 100755 modules/editors/nixvim/plugins/cmp.nix create mode 100755 modules/editors/nixvim/plugins/image.nix create mode 100755 modules/editors/nixvim/plugins/lsp-lines.nix create mode 100755 modules/editors/nixvim/plugins/lsp.nix create mode 100755 modules/editors/nixvim/plugins/lualine.nix create mode 100755 modules/editors/nixvim/plugins/neorg.nix create mode 100755 modules/editors/nixvim/plugins/nvim-ts-comment-context.nix create mode 100755 modules/editors/nixvim/plugins/orgmode.nix create mode 100755 modules/editors/nixvim/plugins/telescope.nix create mode 100755 modules/editors/nixvim/plugins/treesitter.nix create mode 100755 modules/editors/nixvim/plugins/undotree.nix create mode 100755 modules/editors/nixvim/plugins/vimtex.nix create mode 100755 modules/editors/nixvim/plugins/which-key.nix create mode 100755 modules/editors/nixvim/plugins/wilder.nix create mode 100755 modules/editors/nixvim/syntax/fsharp.nix create mode 100755 modules/plymouth/blahaj.nix create mode 100755 modules/plymouth/default.nix create mode 100755 modules/plymouth/modern-bgrt.nix create mode 100755 modules/portals/xdg-desktop-portal-termfilechooser.nix create mode 100755 modules/programs/alacritty.nix create mode 100755 modules/programs/dunst.nix create mode 100755 modules/programs/firefox.nix create mode 100755 modules/programs/hyprpaper.nix create mode 100755 modules/programs/keypassxc/default.nix create mode 100644 modules/programs/mangohud.nix create mode 100644 modules/programs/tmux.nix create mode 100755 modules/programs/tofi.nix create mode 100755 modules/programs/waybar/default.nix create mode 100755 modules/programs/waybar/style.css create mode 100755 modules/shells/zsh.nix create mode 100755 modules/stylix/cursors/posy-improved/default.nix create mode 100755 modules/stylix/home/default.nix create mode 100755 modules/users/main-user.nix create mode 100755 modules/window-managers/hyprland/default.nix create mode 100755 modules/window-managers/hyprland/env.nix create mode 100755 modules/window-managers/hyprland/exec.nix create mode 100755 modules/window-managers/hyprland/hypridle.nix create mode 100755 modules/window-managers/hyprland/hyprlock.nix create mode 100644 modules/window-managers/hyprland/plugins.nix create mode 100755 templates/dotnet/flake.nix create mode 100755 templates/dotnet/makefile create mode 100755 templates/latex/fsharp-lang.tex create mode 100755 templates/latex/skabelon.bib create mode 100755 templates/latex/skabelon.tex diff --git a/README.md b/README.md new file mode 100755 index 0000000..2ddb888 --- /dev/null +++ b/README.md @@ -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 '""' \ +--arg swap-size '""' +``` + +> [!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 +``` diff --git a/flake.lock b/flake.lock new file mode 100755 index 0000000..01616f2 --- /dev/null +++ b/flake.lock @@ -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 +} diff --git a/flake.nix b/flake.nix new file mode 100755 index 0000000..0a72b33 --- /dev/null +++ b/flake.nix @@ -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"; + }; + + + }; + + }; +} diff --git a/hosts/bootstrap/configuration.nix b/hosts/bootstrap/configuration.nix new file mode 100755 index 0000000..06b1776 --- /dev/null +++ b/hosts/bootstrap/configuration.nix @@ -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? + +} diff --git a/hosts/bootstrap/hardware-configuration.nix b/hosts/bootstrap/hardware-configuration.nix new file mode 100644 index 0000000..8d5a934 --- /dev/null +++ b/hosts/bootstrap/hardware-configuration.nix @@ -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..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; +} diff --git a/hosts/desktop/configuration.nix b/hosts/desktop/configuration.nix new file mode 100755 index 0000000..b9bda6d --- /dev/null +++ b/hosts/desktop/configuration.nix @@ -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? + +} + diff --git a/hosts/desktop/disko.nix b/hosts/desktop/disko.nix new file mode 100644 index 0000000..dfa75a2 --- /dev/null +++ b/hosts/desktop/disko.nix @@ -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%"; + + }; + }; + }; + }; + } + ]; +} diff --git a/hosts/desktop/hardware-configuration.nix b/hosts/desktop/hardware-configuration.nix new file mode 100644 index 0000000..8d5a934 --- /dev/null +++ b/hosts/desktop/hardware-configuration.nix @@ -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..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; +} diff --git a/hosts/desktop/home.nix b/hosts/desktop/home.nix new file mode 100755 index 0000000..b0535ab --- /dev/null +++ b/hosts/desktop/home.nix @@ -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"; +} diff --git a/hosts/desktop/nixos-wallpaper.png b/hosts/desktop/nixos-wallpaper.png new file mode 100755 index 0000000000000000000000000000000000000000..f4cccc0a6fbfb71d506ad474397ffc532af16263 GIT binary patch literal 127312 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%0AHzBQmQSgfw^;1r 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 Tbnykz%$&kZEiaNxP>KH!!ey2P literal 0 HcmV?d00001 diff --git a/hosts/desktop/persist.nix b/hosts/desktop/persist.nix new file mode 100644 index 0000000..d960583 --- /dev/null +++ b/hosts/desktop/persist.nix @@ -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" + ]; +} diff --git a/hosts/laptop/configuration.nix b/hosts/laptop/configuration.nix new file mode 100755 index 0000000..7cc4991 --- /dev/null +++ b/hosts/laptop/configuration.nix @@ -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? + +} + diff --git a/hosts/laptop/hardware-configuration.nix b/hosts/laptop/hardware-configuration.nix new file mode 100755 index 0000000..9cb6923 --- /dev/null +++ b/hosts/laptop/hardware-configuration.nix @@ -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..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; +} diff --git a/hosts/laptop/home.nix b/hosts/laptop/home.nix new file mode 100755 index 0000000..88be01c --- /dev/null +++ b/hosts/laptop/home.nix @@ -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"; +} diff --git a/hosts/laptop/nixos-wallpaper.png b/hosts/laptop/nixos-wallpaper.png new file mode 100755 index 0000000000000000000000000000000000000000..f4cccc0a6fbfb71d506ad474397ffc532af16263 GIT binary patch literal 127312 zcmYIP1yoc2`yM@dA|)U&xck?gmkMgU`Y39L8Tc=he%0D zO8&3n@B805f@kM&@8`bpywCf*?~T;exkpLHLL=)n$*n)EIjm@WFQ0Iz zo@h`9cJ4%ff7J`audSooM*x=iiM-wmHr%H01aCVV9`HeidkieOJdzJAZP;M={^Ik3h9n=^|~? z#EO0^N;wM`7?f}1m&u`Vn zK;Rdti@K3J2qeP!=O3O=p`sV?C5eZI_Fa+{5+(*|rU9)gHsGsk9(N5rRGl3it(`nT zs&3X69@bXu-gX|g?DsUZbq#{37(gI)kj5QleV>V+)6Y$qHPR$cufFsvqNf){H2OX* zE^1spOWqpKm?_$D`_`?7D6Q{2IE4lo73lYY2i*d0dP?SWDisvyvrM~&`|K=)5?uNF z8M^7ab8O%-*#l8g0)rrx7Ytgh`C732U>l>fWb8zN=0S?cAP z8uZ#nSrSW4KA2L9s(u5qf*wEpQH51z2f`yxgzL1x@62z28bcVI6A}^^zZIg0u<5Bd zjyky3A;|If;|n($CT0?%ZhBH0T;`@<9A8`vSch)&*+Uo4Gda2F^CLlH6=;+>2s=!M z4(Vs!BgwYNutwhXi=C&tG?IJ?pX0#qwRp*p{%iWa_^{aA5*lLzm;U~A~~vH zb&Fq&X&*F2fdS14bT-^nusG(#23zmbZ7lB+h9fV{k)_3Ays9Us`nC$K+@Kkj9I96{?KnB ztnpKNL^beC+1?Tp*Z#{O4es76YsY5S-sWg`1+~YTfqRw#ABJqDZmN9UYzlgfN0Q)$ z|DRhPYNUdBo?U;=wg4wFrLo@uQJ{h#OM+8FIZeWdHWN_!zdF~1x z#_8GnH-BQC_NGI~E(3uxhhkx$OYo;X<&#Q`+aO8|@ zOc-|9d!eG9(R4~TJJo6!RGr7ZJr}OGA>Qz$wWO#>d#Y7go!ZsEx?tbSUs8Us{apru zno0COyx73Q8%WpLPOJ)%afI$AW?zh>I{%z*-kk9!)?P@1O00ZhEy|s&P((&o(A5R^ zd9CEfO?btxs2Zk!4xP|Y(JApa)?jv>P@}De-hJUY7SDQrAwX$vlU0rqBXJ(-HoAL?B+0-|S{3hb$LNXA3d_|$>i;~zBa;}=GYgpUdQEahc zvYLK;%cpvg8Kgcxzc*Gc({YiDphnjl_qN4WGzKXzuNbuc$d_iL2Luy(ld z^EjTIWvD9sjluNKyZ$Iw^3tkknO+DXX&OvBGW#Tm$^{>JQ;aA4A(QJ=5X24c>bbjo z3dY<9?y*!ZQ+d&C<<@r9`(CP-gY&p%n^D;{(@=;Kgs|HChh_zyf}`TUOsX=v>PCuE zCf7(~*JzCBphxYc=q%W<${LR$VLsK@*P)S* zjsi?CC`&|$OeN~Q>5U)c6hmJNAY$sN@|=nVLfhszZ*7<(W#y}#grQAT7#5yHtt?ZJ z>u^}=zI9q4hmeG7a?)K3c;H11U5v=`%-hJCHKsNw`yVLFQgq%h|~^CFY#md_aijs+8-4R~>T8 zJ5r9cF=PIwXxj!<%@2hVfz26pxuAa;A+G?196=YVLWSg&m}-N#weZH_X4b-0Ou729 znn?s|rKXV_Pb0N*-E%HT?G8OQ%fb!`(B?xYzaCKRwkc%$b7>g+p&lkSn%o+Gb&{V* z6X58xl=JBdN%VgZ=u4Zm42_$N7#4ZOrAk{s$+LttPR36o)1=ge(Z%$!H9cEvc$);_ z^PrMDje+~=A@@1MUk-Qd^g3f~F0ei~raql0GlqF52hAw9YA*R>(YMM19yZdB$VRKU z^Yi=%pH=iKzTjZn8d|ZtjJ51{G2hd1dS=!Z=&&-f6?>Fs3I?vInVnq{SXu0LpE&!a z*UV>92qDU)79X8b9!SuC9<*b1Az-mkP|0OAB=*z0`h!bvS$elVQu3$w-T$n0R>i*k z@{VJt9fRJm@?5x9tBr7T2|Dx!=euI$L)j|+A&lpkvCOjWJC>(DVO}TSeU0X0TYu>w zmll`SXXk*M^jb9;9KICVoRU4PwKHos{6sQR9N+9>)LQaNP~6Vuf5Fv_fuz@M4xH;Bc>#DrF?y+}OI};?JLK z9}f%gKP9rZ%QQ;zc)yQ=8I&jxhc0*Q<~8{7dUORCRLT7-A$l8kjE)s1dao=m4~aY2Ll=M-$P6$5)Pq%Bp7 zZ70LSnQ!m^WJ~?&bM;VS^}NpfbG@ITNv_0_>XxjZO@o!o&O5u(dfG&<^@h&Nl$dZ< z0i!I!xEwikj3e@C9};V|EFb5SoLZ4sN(jgYmuWIe21)rk^i&9hGb-nd1x&MJe{HYr z2QK{lbipxDV%BT})o|KtOp|_Ej6`@2M#USjgOi1>>046KZqWWi5WkP){spe&u5L&! zySBqcwZtFca06MJ+%fbA%_OmgVE4vH(1*zcGN27LJUD8cH*oqJ=+iD&d!6U{R;!kv z$RA+B&tg#N!~78cq3d#}HX;76J|0*MlLzr>yetY=e?=867W{0~_H3TKA?7^*NySVm z{6xz?bq*Ka_q9DEofp8v%_b}_>BOosiaPw*(!F72WCRfcSc(K%Hc25(1v#*4@H^n^1ncwxH7z(&`FxN2R0g3ffPhjKmHVl zeAI8G#K5-)DHg~bbrL2zH5y?xBrZKz%^)i{(Vlvsa~>sXejdlcw$VAuRzy;}<>GyR zi8dFEo6fxD^y=M~Y0BDW_B*trhk7Gp3El}X z)=d>9LQ<6J?O5-A*-+TJlR_aqfW0841tIJ)3{q_^-%RZ6s*^xvH0aP>)6D$A#cvO>__%Lr zA@6mJ;z0f?jc3HR`a%1%N58E72+&-z4esVm?&HHm=$lQJXgWU{rpY?ms-y=;9aVOSH8XSWZ3LuQyD&Qkz=m%etA-=3SI)Po^ zmIFCNYf4CxkxH)$yf@I{xmgNj$b^fMckFK z$dciXDMAg)7T*Ym6UB^q^I$WM6ly-C?qlsUB`7cfUE>b|d+H|Qu)G?#>dI=;66h5pg~G+=PbA-t?n2&sV{f`bjg^a zGz)GNgLg<-day2QvA6-!^1*xD^4qy?;G(@?>XaL0G+e)vGWAwpb|YI&kTm4jUJB;g z%f2D)yV&1?+tLu=H2*lYq%m$sX_L|k>N+i%uS%_ z718mLRyCqXpl(%?Kx2Jh95dX}v#C4>L!W+`U?|b=Ei5Ua7CdDylWkWvFpbh^{3ihn z(KAu>yUd*USZ3xl(izK2Qx;{oLpW3#cc}ufDHrL_Oyk7t7y%Q8Cytn3xw{ej`|O1% zk`3sPZUAt?fl`|5N#HQ_iE*b2{qgYrgkzKM-)_$Fz4FC9q$i!}GzG?~c{@e?R;D*O z&>h~4`E*4se*lz5Xs7_Bg=!U43!KQ6HR5y56a5PMsqa**WV)b@k;sO&gwO8nKN39g zWQ1q4b)XoHECD&p+=2HoPH$$pY%~sgoMo3q;H#t=;QT@qGF^7kZ^4^dcME7 z$aX>6%W628^YI>IY&x;w6&;<6<7aruY--@MV>0L?%I6OaXbHs&OiyJz`}@=8D)*wi zn9JdRxwzbd)78WDs}pt+l8wFEDUg~;=lPRYV+PFVj|QtjbaUVL2Ef@Cq!!6m(t)KX z=&)hB2P;v*>}Fy)kBkj4IJX?z{~i)5onA+=q z7Fas1ucwYByX}j7{GlHrv*q`v#0?cb)E&3VU-mlwg~hLUT?@tO5*~wBg&z~IvFP4t z%9C#sr2P{RLsSjlI?wF$8sCZbS4E!45gRi1e}A#pW6qG#Bijhcx~)wFe_a4+FOe^L z^6|q5F?GG#ym49be6oYayk>04)xXz>144Ch{VXmWW)Mw)W^^PrO#g!CJKSS?T5Uv> z%r>|8C7VqitC@HZKa0@$`s6;T<<~8HSU_q{&1_O%c?!wZja!f3{1t<|zUExe0m(kZ zg?&YVsZlZ76K4rj0ix{f+dwr&wfKXRs)Y~}#fvh{%3HQDl?d)e>02V#3YyzXXf98Z zet>;~tiH*jtKEI1;8aJR%Qp9=*BnB!PL1(bL@{tz_pC%gKM9~9;3n{Pa6=Uo5=n?J((ygQ9GYnvKQ2zp?Z+V^6KGq z;sdgn?ri!g-&zuQ)W}FH2RM=B?6X(|v|J^b=mAOCi#LC;Vxb3+M*ys#4;87mN;rrb z_{%2qZUwP%#27~`&{}*Aeocc^f*cHPWxL{67ZRV{1Yvh}c?-kYBd&B^Tfh*Bf*n%OQ)x{#ad@D!a|WvK$xM5#_>fouOj%kT zH6Wx6MQO09`K%Q5xC`WMk{FijT*OokT#&;gozWul)B#gj=h06Bl5}DGVFrSLuI+oJ z0I0jL_du_AKy`V$=5%%qLS-K_BRWFdP{00Xu}IhcP#!VfCjS9aYq@%7WlK|?Dod9Z|px`t;iFL zaOfE|Ch7qCm+(syZgfN|0D{@mhLzxVDs#A(b7!i)GV`+6H zfMyB&mv32DM`RvPeVN$MKpsTn9Mv4av zAG}p^jlQV)Mg7I~A)WiaT*2%rEY{#f`gZO{n0zuD9?k%hyX|FM8YxGBb`*PKiVqt8 z*%iDT$_6tG%3k=s7r4E&JDW3l+Q&b;d*$BFSnbSa2{+3e2u5c*Q8Vmbhg{}`aG3rn zl|-t_6OS&rca2Bh;>nc-vAdAB;EtclFG_HcbcU184JZf&#_QuR(E7c_eX$tVUq3{T z_I^8yjhz9&eM8Bo(!S*RMRLePS&|obEfN5h;0ABAlWKc=*7;ZVwbk-@jATzcD2-|- z%wk)3UtEHIud9C*^_U{CS85Y0fpzOgh#iG3zXRomHBgS@hBw0;bG3p2bk;CIhb;&bpM$t8xoo zM+DOx)i#sJ}Oc45z0BQhz zM^1S*kr1j~d?6{<*=POrMo2pLFH}ymd`{VV;dZHR$H22Mj?5yQ2n|cW=Nv5a$}jIrne1H4VSgvMG{#VAe}wlvj8xUSkr7cK`t=T1lq_Us4Jtt-7IEH8bU<=Vc`3$b8< zMomPtQw)=5*%OmnN*3G46f@=usSV;Jj^U1!zRia+x6Y|i+W6=L2N`t=67%Q7wWFu3 zhJZzq+^K$l$44rqu?ov8P|=+J`VqLjIGF*4amf$vhuvoR8A+VSocfU2}8;ZfK- zru>}J`MTkmOHb_GAq1^H2X`=9jH=PrK#uUHuEGqAN^*<+jg4SBIeP;S#7f8NR$gF- zcCwj>3^xw6z=m*yqd2i)qcsykJ7uqE6))qedwQt(z6^N>A+PfV+1nD?0mp>~hD0eM zbS29iT{&eg8!l6r4{kP;W%+kvvUlg!^wk0*29+b}BCdE@+3LY!C0LvuJtr{Ns$Ngm zH!gvbVT?BnKtjYJMeJ)hu!%jGcl=`blQAXizHTxn?HJhD;kGBARcZIqZ$Fl% zQ|iw1Um(GaCVX}m*;^z4@^x~f{#bG!kCE#eeoM%HJ+yEPOrpX$wZdE^*4AGzp)yI(@5F zeP2iGZWhdrTqctFnUSY>H0qO2;~VfVS{I1ir;d9`3qxT0Xu zIe>Bi;w4=0di(5Kb#MI8T1%VD_O7MG}kw1r?moP|+Rd<1Lm50|ckBL;C?s*l(g6^AHnX#mtO{9KAJ zCm5%kzV4)GTKXPA0qDiN-}R6U)o+ZKUHaW}aC7#LUZyLfmwSNmUXJ1sxa7BgRWH|H zO=9Jxx!AppiOK5zq4hK7{GqOXi64^PIpcoR)9+|hIo7ila>k5R4a9s!Le32`vM&PG z&(}A3SPX3Z;Xz9z{-Q6gnq_tjeW&?-^b05J;pFvrdSg*g@`+3Jnw6K5L$9KRC^m;3F_Z0R!N7q24y#$Tgg z+WX@~Id1rCR#p!{iJMso&}MT_W5;_Eom20N*evgDK0h7GFcY^jiiC_TeOLLI=8n*N zPpaDHxqaJ5*+u@q`+~d)Ofp@Y(9#2PQ2m#mqvM}go4C))^eYj}=zMWjR?f{jH zJdcF0(*X{ZS_$mByLG0C2giaOEM=F)u4Qu$vECw&w|>x2~U*(~vFQ zX+D(GoJPNKZ#==@_zBx6h?6pD4UBud?*>)v?J&{M=E@I}0O7tquE za7oNhZ1tw`V%{NZp&i^BcgrUTz77V^d>lrNhT#i|K&MRmWn+3~6CNBN3Y7O1&w)yn zz<2}XbI(1s`mSqA{y>y!_;B)Nu&I9$C?#YsjMquQ!xdTlyUEqpVn0V&E7xHLwM9=R z{-A+=J~s+KbJGC;52wM4s9oouLDj19Phxt^^}dIgm|KSquC=q5QQk#MikY;k2 zdgi^>T<>!^pfiavqDD7S7xtj3j9)@%0usjJ%HP*nxj2q5%^;B%HIzG{EZ);SsU?IY_bk=xeV8^`5VRd7o-x(0S^Y28WK}<3UoTFBD>2-So8Mj^UMpE`-N+qNQ2xw~ zdhm~>r~Ovp*iM|V?0faaXKT0tdv}X7=5b5LL#3R_GomX%wW?OWVD@c(Dv$ABUCh}{ z#-n$X6n&QK#bEph%h)9?jdK+~AOPzz&>F8W$L@S`Lk?~4p2q5LX58TCHr}{;N3R{U z9(h@^j4RpiLkrALg6oTUSl-E2i2&(<5(g}s-_LAy4Jg9^ra4Y^W&*cpwCyD(3>A=3 zclco2J4fe0`#F=6qz_R0gs^VX=gv-7Z>;8z1w``!=;MojS%YyxG3&fIIGvcWdk+0z zL#mXk^d|xZC|ARDEdU@>5?K2h)L@DN)iuPBluk<__3B&6doo|6VD%1-^d$Suyh%(` ziUj=txja%hBIuu3eUwnrN~|r2sY7iKu_?0P|CwTX(tz`i*$er4_RGUajRj3J0#S|_ z6huV~JAoH+F1^>EF6ny6h#0CdyM|I??0ol0I^(8p!*_rW#Z)f?bMADQlXuUknL)kT zhJ=s%l&7q6;E`O$qu7AQB`?SnEs*=Em+mipx#hQghB-*h*g{L^RkbhuCNZ2wL>5AT zy2zm|$5JOO#prLwk6oZqnc(?!Y-VTHX50~E+*2*1P7m}kE-pBg6quv#yH7M{^Y;vE zPcy*tx#^kM2RDcf<58FS!9-+%4{ZvqHL=MNIFPU_mY@^y%f>U4OuY^Epq>%OPPmm2 z8vYErJK0Ve#P`n6vO{?%Hnuu4crv|6Mw+~|h)rporeD~+rCclY)4a`B;vTa3{PgCq z`wbKr)_+~QWK_P_#zs=#{89h0rl#3k)1gHuC>kIIn*xAt<2^y70zP_72wmUIrz%`f zV|8HOV$YK9lrHPa@4mZ$_=hxP+_T-i1!*x!2A&$C%|HJJVVhPQQWn00GOwQ0D#C~9vlWy@e} z!(r!3i-GqA0SK1Fc%X<^1i+-%0h#Mm{dop!+@*=qjsn2W8m%RHRzCZcWRK=2mq=uq z{l67L@JUFVUt;k800==e5Us^x5qjfWnyX}=OK~2;RKpV$UU1dvuRGpG2p>2DcLbru)Wd7LF+ zqjRHLl=oYb5l3K@s}sODK2rvx68BTEGhX$Ag~HazLfY;bPCmQlm)xw9Rt3d^*4wB# zsqp@&g}#KYXXH;GQQ`G4lv5Y#hepqkFphYT&YN(p;sNkf5h>>=2qnZ94SO9e{mZ3a z*&)neeGaAcowvH@JN1h2kBksFH}TnnSOTwi*Dv~ry5P; zD|8w1qjvDjcXxN$ChmRqOKH+h>?rE-7Qxrf%$iuXZipnT9@vH|{kFB%Hf|C0F&=6k ztb%R-a%^_?)8|1)H(AKJ4P$=#>63^`2KC{^_1Q#t&!u@N+Xus6D{qKf%YIiXeff~A zc{flx?KT+d;^Gq}WI=@cQzGV1PYKfNM&Oab+@HSokusW;hO=3{GixcAta@=|3+%qx z5y3|sbkkU&+UCGBlw5LwDq;)$Sp$vr58vdfs%Q!|P4~{H-;pFk@H0E4ZMy&x@P+uy z`PqVwi82_E|AkM$v`7_IeU=Lb$7PJ$(tI$NVWyRo?oQQB%eZ%e904X&Jgaygey$w5 z+y9FlrcS+*gM$w&t{NXX-w+$JS=_JeRXtg`{^}c*ZdK+V%iM)@RzpMG>EW@@Ul@|C zDj$2!j~z2F0w<<9Yh%MS03ue9jBFN>VK5#};BCq!1I04v(`<(v6IZ}w=al3*fPb1o{3i0BD}_rRq%av(?CE+K)HFJ`TS8Wtm?{y?2SHhRX- za6|}u3!qy2@b#dj3jFA-JCLGxpE%Lgx($fd5)v8}?5@B1Kshin^bhVn>X$Vv5ns8$ zEBsVHpj;c^4ZhP0H7+%P1mnT4U)Fo-xfAGZ(c-{1(>Ph(2k2rlQ&WFi(;%R4JQ04Z z;==|+;3IGdVfCl4qo}sAwEN79<3h8wOvdusx<1ztlmXfMU+rlSo(a{DK@^z(HN^?N z8mYLJ!77}R;DN+*Dp=A3K@1#>St#fN9J!kU>Ccw=5Gg0m1MPfe{ftUBg`!Lw^7I`! zS<)M9{oD1Jt&EVH^c`(%gT4{K^xhv?@Pd%{D}e*+zY{~c_ASDTc`#F&Yv1%?;^dh7 zA-zSN^Yfw+mc#&LoYS;-{fUC%22wzO5ocfbY9TO9a>w9q%+R!$kNXWPD|Qs|1D09b zez8rbNoPxgupYWHe4qu$9MhNZwPItgP8uZh&KdVO`KR~(R1qGomDvDsofW7aUO@E# zVlf^HHilHo&B6xZuHWVefLr>$SCALPV>s2;R$eTwwly?wcW9H7HkZEvn~EkCzGO$ z8Yp(V>2>2Ugg7=Y{E7-Tk@Y)Z@fs^2{vyv90m;88XlNIR{#wR^R%|jrSpM*ihRfBX zp@9|z)p`mAd@N!M?VMWNw{vz%Fjz%`8xoCp5_WC!SrX6YRA>UOjrzj`rcL&y1AG5^ zhbk#_o@ig$B3IgSgm#%Frt(PPwkk|}5Fjbuk5w>{a+mx&+xH4LH!#kVFA@SuC{G_O z?$hp}3nkMkIn>o-&m5pNEPn!zEErUsq-5O2*b(H*4kbKg4}LwkRU~)jBRUBXMh3XvdcUseVjTf6+r|vh>1%A_sS3b@-x{(w_QB;)`v5> z?J9vHAy33hc#7GqZ&&7Tsi+WnX@0@;N}Mj{8~RV$$k>Q8X5`ufvrWA)_@OW=!H@ZW zSAN6rS?|MMD%Yx8j+7xR*5&z*+_MgD)V=Ul_NW_FQ}jS_^S!SECL9iL{T>^u36KlV zmwHj!Ti%ibfLy?mkt^U1Gy|GI(-8Xl{4ufNWun8g^Vmt{wBpx1%=5=?&AB*YKCsOH zTCl7HIslgI7w`34G}71KrqzX0VBTF*{HR;IpIJ?;mIOrSUJ%t0$RD$bl`=St4}~X-nw^feEQmoQvyD#XOBlWd5Q# z!z^fbD$jhnu zip}F^_My?chkRdtag*w(S5fHzyhsM7v%SASa6be@KHM|E156N2oE{^qZ5Mo|J2SPw zc8@dI3Go$!c~85>@kwlf*>5`EyK;NDi3D!M417H--Hj7jKIq{Z54MFmCK8 z?@O3NP}PUz4wO|jfP0iw!0L*q*U^g<%Phr|j=0B%awg<4VP6P@L?eb)vy?WKiT=5V z1Y#ig#Q7GO)1yxbm7me zAEf>MBzO8LcT#EtlY0V=i{cd^u296>Fu6v1%SMd#MOVQ}z7aAhZ{!6ze@JG4&cDK? zWGuMnyTwdoh`jUmglPla5j2Ug7H{iX3RjcIl%+t3p+GQ9J1=Z*-oNrT{UfO>9ika8 zS$|^iJYiUMPIT3~5P&YT;G7om^D4c@ZxgKp#?iei%xYcU5~RSGQ|0Z+)3<{E3|ZPH zfR}ugW+UX0$0HHxNh{z!cgu~C+*YW~XvIH_Tsj3ZBl;CGegWXTg6T3mfZ1O-X$$6J0tShx)d zyGE9&YS_^>$qDo&H>WH z+_4~r#m;9;M?w)xf8Glj;>2hIVanPkvEs^c+oOS3y^?{YjNxG$w3 zrr`BT%Mp>qN9)|lX8>2;-K7S0&$Qz9t&t&AfM&y~7^COimkHA?`qMi82_$ZySAAXl zwYPQJD17ILW~{Cjp*3nEDg>0%Thq1MP19dP6E2$;&I-->4~NeBl)xC8uwmL@h3nqm z`;z(sxq8hkB{A99EQ{-xrQl8Z$jd<4t_$dGKtzQsI|m}WtV8~cosv4ZH91Y zV+{3oBi)p!3+pM^;?y!9y*+#Dd*YT@(M0~bE~yMV_*G%<>jc(dKA=C#m~7ERTqgB{ zPUG+oEF9{$Vv`|idc+O_d@wg)E<4vg#UeUN*Z zq49Fd6k&_*hyhjyV+Q2aSbQP=+bBJ9dvXGye~0;KOb&~K^a!i3ioU2|?Q%4Hr1Cy0 zq_*NJN%cb{T|d514`}^4ZwCZ?2GVdt!k3At8hAe%-;2ltCeclgrlC&qA_k-w6tGfB z52)!))X(u={p7aNUb4D;1b3p}**zjDnBG zqJ#1>$|YxHdQ)Lr_q0+1W~eYO*AW`4V_EJ{F>=fV-yS2vwx0Qr7YZT1_NpMZD@lp| z_mN;p8BSuxXr1nRdnWPq;wKb^2eqxKQrrbY+rR>o1#zjCVdHfGtN*^ZmIXjOJv*ew z(e{xFAe>J{hQP%pIN~bRw4@ifRJ%ayuDo(Hu-W1cV7oFUB5~EpI-0jl>+O(qJ1JJy z^NcYo%S-&w=Q%9Mng^I|BO&;Dz&@*$MZl$!ln{^@ZfLcq*;{I&0aOjavu`$v4k@sR*l0FZ^{ zq1?kixtkiD6{cjitYw3XyIIiTan%rD#USrp=v|l-j`2QEvzpx2#;NB=Tf=oom_|Ms zn(w}a2UX>~7WkjTI2|baJ}9wxvoC$XsIo@_%;mIGIR!Jp9%VwwL#2>c5L?XR2-|u| znTF#aQ{l2B+2{wB;~rUkyVA~=K2p0T&e}?+FW&9qgSX1F-2o3NmV+ZUfGv!KqFTWq zRNeK`@4v5kGnn<{n}Q2gp|=BFTLlY``Lu{b4Py8$N>vy|$_c{~!0i;>v|?(Go0f5J zlm2A;bAHLTyITZt@v|zv^TUx_(VNVBneA4ufc1}2u2w=+ds~}{(rD{PUB<|Q1G64M6YTH$~++Le6_63 zFJCqB7Syksod3oD^FL(zZB(M0EW03MG7)_b9LcwdO%s1T4AjFyeIiRu;1wM^qJ-D1 z3#oL5?wcExEihrLQce%Kasbs;GCUxJJI_qnMC*Xz;5z>EfXJOW7GTdNhBxJ1F=@=u zAui>)c3Q1;Bt<3B7))W<7?y zu3_w-=@kxQ^*-*BZ?4rLPBY+QK&+qcsP%a;j83Zh!o-o8wicYXxI%R3IcR2Y!zSSfoiWcWk)$a+ASWa#9VpoYOg$pHkVy!96uat}Xi zr24iZ*lP9D1owV1OOBQ0Y3L#eNXMM^Sd$#;Zd1age@D|wo$xwbc48vrd zWO<_=n-dr|zs=0^8>G49z_Mk8T=I*^V{3j%FU$$N`%{N<5xnEdJddWa4e;S+XTK8e zsDIq!lxKSD=xR_X1AA|rLly%I&s}OYK`LDPIO)hq<_K95|CR7-?B9hNXuONd1N?9E z6T4iZ;=8yC;s!=e%?1di7ZjMXI5s_ekYdqENq`n}Qr);(JbYn;Gc`rD^^>J}zO(7wc$e7?p!0vd7r|d%^>?ZFykIu0|FqW60snN1P@IG6q>H(C(oSnfq1`NwK)D=b4_PPQ_a9YC0xJL2_U z-?fHZdOBrJUWj+0uO-cn2C=D!lk{{aV` zm>ys8Fz3{uf}nbTww%^kB#F~Soyw`@lkc5mi?f>L2=xrANw1hx<7SDUE1+-c;CzZK1|feD_!y&gy^)sqC5k$VISP9iaYUM6ht0r%O+y~0Ao;I!mje5_iFKhL zzWyWw2x1<)a)Uq%|WAc7JH=>7<+v|5{#Q>kvq= zE-z!Q8n`~*>uvkUX>=BQDeZRHmE=T|4j0%V$DRT$hybkZ8;$Fz69zSSFT+EZz9SZB zC4pX4={0N4n1V{JdocP8-(o6w>s~_qRBfM8Xz^$9YlmWhaOmO_cbiS={S!;o7CYpU z6OrLaq4l5jA91>$v1I7uuHuBn5o3lsCflnFTdSCp?&2ZPX5AOXgrxtRPf_PT!jelTp3v7M= z(I3&xNy1^@gVbVF2n)Qhn&FbYX$v}2)V8sX< z^Tvyx@3n(&Z#hqG4g6bAvn@eHi7ymPiveSxc5MLU_Q>$y%+`QpEETV%8Odia+UhI# zzg+<6C#s>1CY85-!Cb4rVyT@WH*2diEXy2m<7e*dMKI7)z+{7-{{l`Z+1rzlrNZKg zB|}dmO2dYLwh$mOJ-~wWHho;8Qd-UYiQSi7o1hPjE*LoDBP`UR`FJO+V^2#u`-L9e z3qIJh|Bjg6PW3joPdu-H2%5H!E%w0c06Dl1yca-}s?l0&`OTXW8IE!4BQ*H05Q-1~ zgk&C&do;XNA0a?lkQt49^_FLe;n$<%jJYRIL2NF@l9eySquVf1-xtM^jop>V>;9WC z4eMlRF$V}j0|lIteDhVUZOorAEPlV{kxKg_m6F0p%Ikh8aw}AQB)`j9K?d>KyxnQe z;osZJCTb?J#Y~)!`LTT#RSR>De1&8(Ccw^FEIyj6Z~NkFm!)+gLuGte84P}GAfUAfaMhW&2w)VJZ5 z{@9np)AM(0Yh`a%*92DVihUIZdI);T8pdFro24d)O(z)xJ0ZU;*N*Jd!mR79K0GH2 zy}P$3#FJtkvG`r=z6~2g61+g;K5a5z%DrpMlPxCG#lICf3KyOi@K_ZRb)@2C4FRpsla(U*>XlNW&C9WD{6k(d*E z#qfFF*Aynh#uqmAPE?awEi zya_NG2T0DzFt7u!)UVJ`?Q_2T?dCiowP9lI5iy~ZXHO9mTXcok5(>{}*QFfi+e3c| za{xnW@X*pTxejbFY^6cgy)%clYyQj82hB(KJ}sTBZWv7r7YAsVQgR8)O%98T$KSY-aGqx;kpG0&oI6rK{vwNqwnr+Y>iInq;+jV}x`wwG*%)$e z(K-1))2b$(3AlAbZ$#q%c)H54sJgCAgS2!b-93b)A|c4o-7Q0Rr*tbVDXnyOcSsIM zw{&;IcYO5y{&TTw?RCdmXExbz{&;=d?z^O*FYBIhv|nDP+tgUGFDTI0e;+*EuC{Wg z$;+54;69W66MDuJ@8eQ9N%~#9bch1-rwgz{xZ#QeC9`9dU&O>`adk|(RBP841!JC> zWKX6rUVK-Lh>ErO=xxoAIAl>e&=dvdS>j#(si3gI77I8#-}mv@>oCQeB$~wQ4OJ`h zR8t^~LcUs$rW0m)YGFHxPsMx-ylHx2Mw(DtTqLuuZ;O@3Z@XB4d5DL3+EyqsbQo@jXLaT2*lHl;O)bk z^B*aR)DFl7Snu8G{+tt6Y>f!qFdMeyTWN!eqhosbk}fjxcd%{zA^f5}JF{27cn-8Q zw56TH-w~y*fa}( z35pdVpEM}q5`l_`20t{?%q&fp|K=v~ON=iij{b{38~yX0OdL)v7aU9cE)}N8pLFxf z8cZbz-Mg5yTq=?#A|=gP2Tzs8VHz=64RXbPKxCr;(CI=W$M=+B=iqf{={K;)8g>kf05wfP*7!`|f4z#f9 z3~2ALBqKI{Tkv)$Gtd4e79hI9+syIx_HHN?0 zp+{I9qk_2>#ww)Z9n@hFPKj0pMM#UtbBDRt^&ILJVv41K(iKx1sn+EA8M1_ z1;#|zwR^f80STrToLjx3*UWi`|4WMwI??kBs zyTnfN?{AR6vbTKgM0#1imwn@;R1uG(ejHUo!G8kzDn7BqMa+i?R;*d!W^nd}5*1m9psh>le*Ek>mH zF*g}B(}UTaZ~{bLJh<~pvB!uNSx(2M$S8%q$rdE?)Y2f-_U>P7&BoRMfiL(7UrgJ9 zlatFB5=v>5*AV@q_X==)M20()V2VwyzboGW|9|%j0X%D(?ii{ZG=mUUz4m*hwp@6n9Puhbf*W0VXHHVv3;7aIBOc){5GDhB-;_ z)bNd%AUM-ZkNnTEnhAnq&tE0X`yST*2oW`DEl!|~JNXX+#GPTq7$0xosDND*E*|1Usr;6ZDe z*gL99(Y33Y0%aspr2r;EPC~@vtst%Ro}ZlQU&=xmdi(Xu+6bEqrt^}aVJEY7e_RM| z&O1iK?+t+y>-2eH_ri090Amtv%gw(F3Nf01R=4cKu?|~ORP`t|uB8z0K%H@+7NYn( zM^)3Lbbm7wHjL^ghlp++ZS)FOBqYoPm=9r?IsSUxLPVs?zucPbVP%5N=KsR%9#$c7K)%2=ndzg(UUjgXOI0mv_eOjFtj_Zo5 z+`ky_(N}{n0kg$)a1(1*!08CKi908(pVaZevHl2{-UZNGKiJX3Nr$E)3bQx>$Y@DM zx%(sg^aa^d&6deFW@$%OiBb|W<1Q*(|2rV)*`tFiK7VbEYIE5FI;&h34*hCoiBo|T%1vIQE2HmO34T#{#b*L3w~FA zN(N`JB6K1xW>QT;Nz&C(2wViwG$#Phq*3s^{q44SAOCNHHMC_3L~M2H@E?c?fWwu2 z=|&~^)6{=@HhYPbX?^*Y9?&z=WcsBh3n%)v!+$B7liYd4;;c=%>pQDZ1NayE zN+Sg4Eso3P|DTJ*uy?!M58oQ!82!%P8Rh%`{WK#cxYZSdhiB1j z`K^e0D_Lq_O~U7crm>ou1j@rE&(mB4_Ll|#Q!H7gNkF1(+SmYnj|v#9&>{ZTc5PMN zc=82mAeLOnp`bK!x*$Dad}zWF>wm&pw?sPLrH4F9&a)pa76Qva;+;Pr9LlSIIh4&Zf9>2%5u0 zq)W1KH%{C`5Ngv(a}=$d@p$ri`tBiq3~H6cIA=&J%jds`VBB6vN?*6RF5san6lo;% z^9sgiWMI7AKJmX)YwSSyc~ZHEcO4%GEGXV+8w23bx#-;pgy@49e z@aP1qX*g~y2%NX9rbB6h(e0XMiz7)vGG1EB{144qj#Di)3xW@~Dl&xYGD?HhoKzHO z!6xhDG$+G1M&SZr(?XO9qmSWV))`6mcK`(|8^CAdZ#Jo+**9=QkPy|eCx^>hk&yG5 zG`+HH+SI@HEA5MGBl|oft+@gn2_we)@(hA$kaKsJ1$Qb&eps`xb<)43QgEZA^$)H$ zAX)<(n(|XkGgvm9no^AM<&9a+Kz#c*vT!_0R-eQcm*eH;Mj)AnLGy`)J0gjH zG=0Z!3Hyt_hB0nD8=fiuq($jl28@*?TSw~BD<+z|OPGG3B+_24E2D#Ld zSgXdrA?O`H}nK23kC zSvm`0dYgn)U^G5c9rdNM6p-@Y!(l#5?BR(=E@#q3#f*&Nb%k&99GYL2;rY_?PR-kB zEIFqBYF0*#tGL&&`xmu2DjZXCr2T`df*#gFq2@$#tY+=UUV<--h_Deh5Z-v>1?H`FH|0tT=7ZpGzN*i-?3vvt`3j@6ysr&WZ3yRP5kpm#QhNs1#Szj87dhr%jWa;rns4rYHNIthWh$! zq+I#aKo;Tg|6;|*-3XG(2gnDPsuWj(rIcaneJ-WnxCnG`?Q&$HXBswCJ-OV-`hqYINxiTLNs}a# z|5F!j^1huBeiyn(>o76#!uz=I#P#LKSn>tCj}Vf0ddH}m;@iDw?2+6zivMnkvaN1Jgr_vHLp3K3^Ti~kDpns^M28Pbc@^Fo@mDXSi?wqc**S8Yjv7G;% zzzwjLHLq#{!&`k9vq5zrGvRgNM@5T@$4Rh>#F||4`Fb3=5=kh@#6-K6iGeVN$3JSe zD!r6Q^f=G_M_?=h%l0*sA~${y%zDTzNRB9Wxbq1S)4ufGd5N&$ZiI+0U8NF)?d1H# zQ^6V<6)$au8l)6vBXnSM+4)0d2w3;WG!jFI_Io}d0VgA0ns*AvvVBtgKO1I4jZ%ne zna(c_t%p!V{9iE-$5_N0U4qDGGYVcXpKXt9ga0j`9t7?OvFS3z@+j3?$^y2Qk4y^v zOQYW}5$L+UiQ`D-4eT&e_2{NQgRG&Q4vw0(1j9qw`{pA4@8c2}BPv*}$}=opR5VHZ zpcj}Mv?)^Y}q=heHt&drVeOuKfG9k`jZF9?m6RcEGqv5CcXSXH`pS(YNhP#0hN^l_UDJ^pnX>UW%+3JD^F8z5y|nf*EZ(NVtw$hyF5YX-nu;zVy= zds+fVHC5VJm0xQVVyi#5XU|<+zsD$%=Os3bhASd4OtOxUz@`77r=$H(i06J&oo^Y=!H{K9@VL^PU}D5`uRMXT4s`lS(ef3d_G$jSuiqf z_L&-N{Arv9T~?w~K#7b-kC&<^9S9B#sIz@KdW>F&<07#-qt)XgA8*TdU?$^TRrC=~ z3O-aIycY>D#noVpiYR9khIVZ8l7P+eY8`(wZ7tRKex^ihiB2-`&nz)Hp_Pj#TIRr1 z13KitBEF}^R0lI8o@V2BMJald(a4-rAw&)@G29zV>>`X>LC{=0>~)S&Dgm%rE>)VY znBC6iyKV{@>?jsRMzUHyMasH;u3m~iD~vM`G|6qKJD6`J{X<}^t|#0seVTv?2+6+# zqKWQHY{6%rl~D%W8OvIM!sqmmbL*j3e|^6&kAW&O0(L@SE`u$-E zxEbjaF1hOU9I+R{f-rj)}^*;=9D37Ub|!rqS>f8_@UaV zK~2iL6qjzYzO^x50KIBQ-9d64L7PgQMq0Aew!KpvzR|%+cITy$1OA#L=(0H&?gv!_ z()4f@8c3&=ONN_Sw}h*5Q@aa zElGc%3;jY^?ejzf4udMvg-hcg%l=SBCP@-Z+hJ6|s00ktUPf>Mwrlkui6+gCMMI+` z4`scV+>9NocTxe@7go*5qq%QQ1LC+!J7dFc?0>20mL9{HLse{JHSi}6Kw_kO=wOKZ zfdL%*ex|zByk<<~242M>>sHBhspT5_cbrMu_wjqGZ$xA^_J&j4J;0O;M8-1yyna(w zhH4StoEINH-Py!S;i;KY)_eGv5D7{_Nirh@(z9k*{+bEK`jxDt;QEDjMg?H0jKDA8$n6U9|&TY^xI~m zH2*(?4BcVERfhvyB>XPJbj}NzNxUCAbU`U-sRbrlm@)DF4%{i~1bX~i2e(j=Dg>tp zbag=+{k~WQ_T$p;2$zj-9c(}rIxM=!W8S2CMVF?>sdaC8%)5B)ih$E&2Knh)?ogr& zMT()u0_UHf$x8iAIzL%r;_W>B@REKcgq*&M1x4qp&<3S6k0wLb1U<+YVmBLhngED= z=2Br+lTn_GqooJKO@b!2_6GN1)fGtt=wN>dXMay{gGFl8HF&g7g)nD}zhr=wwUn-t zggT=aduRnQo^2oAC;w&s=Q~~U-F0aOvx&pqsx4d)R;r#hQJU<1!7{+gtOf|W3Ff|f zw(>g2f0jY^69{bLGg$Oav+9oX>8d}g+IvKaRofM&e&wVc><6wJ@8?qR(eM6Vp|`;A zaBN^_VPzSIpm{z#rOD2=c zUq|qJuc8iZIvh3ZYLK;EsmcrA27|kct+Qj#+1ozBV~Q0}70Sj3J-gk8Hr^($*s>_5 z&bo4UkN`R<89_6n7-$#{FMya<`*bEXP7ie}PjdZ8Rv6 z9>&urKGh7FqVtx}Kt9`!YV*u}c+BBoki+ycTl)MmRzbJmPH)s4sft2a&8H631?-dNu7La!#`DXJG0Qtruo#2S@ct$k`$=J!y z+M0;*0n-!&<$^)y9F1}7F{KZeAz4ndFBs~dY%u~E(cMpC#FU6Re%bk%K0cO+KHL`{uzrVwA29tVlg;Cju=n8MtWxCZh*Oe(1_^D1l4AK z1U{~ZMn*i}SV3Vj2&(Uzy)0Id(*AIyJ=(Hr?CisRF;{m>)#fwT&aEV8Vc$!_ezU4U z%yIO)n6mA2?U=VrH-|xmJKgckK`lnTjpqrw??oaOPB5&}YPHjTNXROxVSiF6sjt4z zY$eR@0`OME-!}r%Jvxy|^wHj|dgz6Ow$D8F%`gC&z zREJdR%@EW>=UN4t%anA&49j&iVk0?A#MEo-eR3g0u1Q;kf`)l;25Lz$TH2rK*egW8RIO0ENJ0~k`2p0ywR61$8BJsMp6u+PJk4jt1 zgBoeVe06ys2lLqnMmd~d0x4MzVbBHe!6Yom!;$T_!!bp6f$VU zkS<4dmj~&pf{$IrpnM?NKW>b+**`9|t2Z2E#uQsKb?!EuI16kznJj+49!49(DTme# zBGzn4uUOxMa%gXQ+_1BUInugCsv=>G`0h`$8bB;E+a_+v()RZLzi*kIR zI}unsH7-6r3pDb=iQQHzc!cGmLE}GN zQ#Oh2lHdLF^zk`!e#ok&UAsy?Q)reuYHC5H)4u0}Z205=dt8HHuyt>?!f#2!wq&+r zZ+x2WT%i8U0!eYLyHhJZ^j*|=2It6@S~MS&CuyrfInl|xD+>6WT0Iz2xzGbc`hQB^ z%VQLSFaU{JWo^w8Yp%WzYgyy1op#&878>}cGS!q}lp;_7bxwQ5DD&<`W!9t%dH<+! zvj>?_sL{NI69`{Xg~@@W>gsD@_1QSXNygX%OMm*6uxjca|I-1pW3aw=dFwe;)1kkn z6W_mJf2U~_n)y5wvY` zM?TK`O$&Cvr41g5INV1TJnqEW0IWlS&l)!0@uutg= z*d@sm&hXtSnwM_eoysat_P?dgAm91Es@JV~PYV=*vsJ~(j_-e@G{+)LV~}<`7P}Oe z$bE1rrcex*`=MsRPa!SaYn|$1T29 zk^0sxv6lPJd=$7yDYPFkJGS^<$=eAS$H>V_-lovyG@9_nwfS`vJ1y+O`XaS^YsRGJ`|=XNcExNnFp&q-CL!L5n5t=HzUG zlbT6b0Yoqy}4}&y^OKQb<2N-F(N?vE`}N;CBa2?6yvp zFN53i#s01oKGO^jo}1F$Can#?Q5 zc6u=iX5ji_qTQ5u|M>9($-T+l{_-=wjm$no$~zJf zv?PCJ-IMI{_~Gl54uj{}lY0fx4PAAL2Lv+yVV*HhnwjSv)Hrurb)3kY!5Qxd$VdBG z2L+Q2c(?Rj%<=l3%y^k}(yzX&hikgU6=q8jaEi6$fLuZ`!g&Od)1-M$Na zb+&h}Uem`3c3vtoI6jd160`{kEcyypBC@YON90N{^V3)pw^(3IO*8Scl;~Ss>M(It zGEj@_-}2PNG;lzm(yfe2LtPTtFpm?h`a^VpY1dZoBrQ2Nos_s1s}{YQNGcKhJS|NY zX=HIQ`|!%wOcQywZq3)#W~HTnqpq|)Yo3wS_GVWtC8>8p!Pm7_Kk?A~cE!#+mDJbO zrF%o2`~iV_h2~5|ozfS*$@a4%M!Bm<)fWMG=i=Jvqxnu?iBe3xJEPLGXX7GX);v{C zq-irt;j*|xCXy6w+vPB1&QswS3u>}7J57T$q(>V=Sb811+ij%$Gl6OQ*?w!>RkxXU zbtb(T536W|PJJH7ROs+6X963&R8np>8wCd5^)k&Y2g~}HuMff({rV4qTpBNy6%uR& zGPrpalXqp>%*vureZmM<`9v!b2z)49lSSO!SEFmq5(=5yY2uYufyI~Y?QwX6cPo*t z5QpGZn#O;cSrd##IK-g+U#A*N+TaAgea8i%E3^519kQZq0S4*>7-$u!(giZ=hB;^H zBAGm55GXn!!iP-;ZXKj7OP6|(_>0_O{YT4{Ue@O1dDdGq=Nm3cv{HF01b}s{&#Hfh zu^JUEF4K8spgDhlE9r1U6-S%sGijU#cX7quU*!ZvQdCkjcDA@CE;w=> zqK6#)R1$d;to)f4R_XW4Q2d+*@zkPU`uzV|oAgFAvzOIKZg6y8Owh?eyK0>TY+;8T zCR`#LQ&GR?JJgyahA_(jnO@$<_(d6oG_DE?EMWR&qc7Na`jLgwhR69#AnBF=O1GpB zyV5nY2TBt_qt^&}or%fU;Cb0%r&DQvOU-;$IXq8^3C&txwVV{eteT9Ce+^B}To}Vl zprx*OHKgF3Ma*)ewR!fWwC+kYptr|KB0o>&O?rq7&b@Z3l;>j)H3iQKOSR30plaOD z(W5xP+hF$A2wA1CHrZ4l?qHy{F$(f2~dc{Rzt86DTfJ%~xcm z3zxld2o^w>SvQQep}54)k|V_fz)zxn5+joC114mCW|6lh<_&5c+QdtAz5W^=0aq8b zj>ZGcY~}YfIkc)W>ktSDQ+@)1nx45M>e{Os&QB5r*hlw|M#Oxr@WpA~ge-m1_1Ho9 zbI3q58GU=0Zh>EH&K~YzIxTGP8iwI)LsBGUvw{r`?6!Bh(_z>2_s38B5;U^*S3<{bJo{- zRTzjYUi3>TQ6-|!1@T$Q{pU{q6l2r*r@1Pw=q=!NpB5bBD@ap}O(Re?0c^~`Xt(FQs1nPlT?g#0U6=?!KY4H=TDU1{~pgx!vUtgZVy z9Z-QXk4cD9Of_?~4D>VOi+I`>phPK^?jnfSAVa1nl609!bg`I+(t?6V7v$qf-gbH~ z;qqfd%mN{NWYYQFwNE&Us6D$0jnH)y_&LWc-R~4%_wh8+-Sk`#1m1>lxbrf!u1@0) z$HP`YmNFj32$vOBYejLkX5;k-&h>8zYM63UL+WgPFJ$=;ZcgaIkX2q0r$62KNkbXx ziI-|Ktk~~0`XYtQYem#4&Ls4GC;Bx#C?~*P7K=!0)?Bq%WZ#I5B?MXJA#5Fqv(jnk8dok zQ6?Ne%FGNlAbNTs6O-w7=k!|b>>EhZFSL&ZvVikxWxjRUOWZDB)hN%!Y-8a{)0xz- zT589nZO(Dr6aHFpyU+E+nDgd9ODfwN@NqiZEvGqQiJJM8(|RNZHJ&(w=PKRvIBkeG z=!qP=b(4w^BARcjd|Fv!NbeDA-JJ~i{Nrn2)(xKi?UlmGxSroypMg*E{gW$=4rN=Y z88Z2()yk!o+_3qyQUB?@n@Cxu(jBn|a!Aeek`gt3N(cDoX4M|BLbjYM{U!Mo+FlK3wN;00-odDsBuKtE)y(&yaaygour`bN^J6S}e1qz)>Ed zaU;9m)5!Jqv@eNfO?vH^aD1`YZCwHM@sn)0j^8uxQ2tApq_WrPoF@%;8+O^k>Lqq= zNB3=AXS~wD?U6yFQ2~DKl~IQ5blC2Z&_qQ_F~et~U*L=~6DV__mkFcz+ZkNNgg}xL z&jdcU-*#($Wd$r&S+807B*YIIXB#YHU61w8mA>~f9KPfno=fdU^O))e9Ah4*`?r_Z z?aPxWC2g7bQBgK;BjJF4XZoe8G^rl*$Y_;qGX8!Dhe+&- zffv4Ser0Zp#cjX^hc4e`V#RKN&9z_zQL-%9% z4QkRQhcPX7P;7lqi*{VUf;0psVJ@TLdMd$o7=(>$C5PNTjikK4M(FvC~^ z#<4T{6dYBX+0FZ699kZXBJhzUbw3jNXU|qME;nc~-?>_QxHr`xudF~axolWBs?O3>CwNghI|@?n>AXN zk=Ag8Y%n!R3p<`n<{`Y@_B^Z^Gn_1D&wjmf6*@TPS{8~X=7=x$wAX)oUf!nB?lVyZ z?+#^X>sBbgQ?PwJe715g+feYO3OPL4-uIogzfaB0>e*j8_iz+>#HfFM+}dy0!nKq9 zk&xVWii4C)9%hsZVDRhXdmNaVhwX*N{jqjL!(G@=r{!J)Dvh1~3Rbyp1hB~xx!)G> z#L?HYSH>*P0u)llJHC zR+sW1lNF`g;IaN?|eE;6g*+ag!jdt&PO<4Uad64ER5jX#ph~C zyIN;lU0$$jcHJiHcE+iNV!NBcUgCbkIf8D4EM`B@t{)3jQ*-X6MoHA0CP{IYpW9 zKC{QHOmk~Jy~4)%0KOXiu@6U-*{eN0ByEs0>XtQC1mgy z^0DRYvMYBwpraqwKF+KrO6}L{)D3IdH6?t>mcE(e7gfXH`Lk>;x%hzm;@L_Eat(b) ziV#TEmDb18-vIJ%FJE%Q$maHjU-y1kxp}LadX`1liUNiXn4Yt~Uggxk+QK@I^7Dij zdz|lw6%Dtdm!6W#^WKT-uajH7KkG%Y8W z$LncX-a6f0LYuwiCi?}*?yGkEd^Y#Z&yFGnp3nR48`5QED_7&>e)A^HH1Yz$Dq{l4 zI_1F2WpNcpcKoLg8u~q}XMwYA5WUAoipK=tjgm~A@OPAn%z#*aD_v%`aOcGoOBkN} z`OMv+ygc7+4QI6d#*uY+EhepeW85T@o7gmnDp~KsSe?R`?4zFh3k`iBsN8pN(;v66 zoQ`ey6^Ti==F9!k4g8+bQj($%&3APg5^&{xxHwu*-~qhbm&w@+o99_M5$!98>e$z7 zFs;XI=>wv<%4z{gRaJ`ToJXDtsLYm*356IL5{*dNG3O{29M=zXImsdTI*`Okz$&Ry zg?q;>spBrK{Huo^HMw(vFX$1C@lg%fQ+jspI0ViMHk&li~2@-AX_tSZ6eJc1QLijeaRjrQx?;`o~&0 zkEr)ew^~oxPIsXKZmHvDK4F#3qYuUcrQ1*>7kRRd?|EQf-GmEkzu9&j#^OWqvHU#+ zJsftsaEzG{o}2B03F*R!WBv@E3ZKM z_hn;e*J4i*S>A^xjETU^S`QZM0%&G3)v?OCgGGOl)h1bqo~pwf-LxB=Ol`MCIjua? ztuxYIh`^NxnIFtW9}pA$e!$WVI5cg1h&u;Dl8`@0gRyr2D62!AL5ZE2# zMG^v;Ua;?sOVq4|r~p$CcJI#;xY`}-t~l^?2M{Cd(0uSWDsVmZX7*ibrRwa~w^knf zKW02~q+Cs&zWtl#`Z;Pbt{hH|L!5||b zpFq!TVYA1@0RHO^t^++vxLNCYcgeC;Ta*}3kVCp~48Y(WckUMTMz=jZ1y(B<&N|5X zxdmIa@*#q!N>jBEPfgt1n0X}%(ybw^j4@I%M~v;(Arwgi7gPAm{b?7R%(wWf-kwXS0Ko*NFx`QDfxm2HS?76NIc+y2Kosom@;g3r zWPkaR_{kM&caz1@mes(Q&lOJdbk}d-I2E7OdnxwB%nW{gFaA)?z;32P&gFEOVM7eqXHgDJchlzFb*dKWH$?(#T!UCD8vdsU6^R;o)N8rZE#7 zX#`(HFjOY)o4ydF2si6i8AvZ%OtqEtz{y;TUh7k|9haB9c4R|KE;HYJD;>vl;W&wA z&|SE4h4Ub5!sRqv#buN1&cU*Ad4)B4ld6VRe63aY;kaWxWWm*TsUzh6S^c@uZcRD! zVX^vVi(#cr8l1Mf(^Q!}P0br4w2RoXeweiyBc|7X{j|Rlp4%79`t;-{woUvoy}M)8 z5wO3)O)~Fvk6LbT)kkI z&-WD+PvV-}nH=iqkPh(pUhXAg>4=}k$2z5r~?dxILb3 zMGOp2hj_gK<~+g#taE?){B@h->1zN8k2_3Di%ESQ)qHx}mwtfO6xtuy{q8n@*L2bq zV{NWH-7^4K*!Te8&RprcGALAR;N&XW>!GZz)2w>3s~J#*#mQ~iyL^RhzlH1U-2J_5 zTiZ5Q(%3Heqtqus(YW$Lfyu4A%13v@$G1lxmusc%5jktjL}INQvbq6)5;M4dhbeLe z(LL=vH}`Jq9mcZ0d5!AB{=DjO@Et6MV2OqR;uqb#;j{ss=4rgVvm*Y=ZOO6#?VrM) z2H7m?W*^oWG??;QW%=>duiUV>+RiacE>a$9i35%Ysh(Y(AHEEu-+P?u5C147#xVEC zbb5S*Oi;p3PRzF$Gp$)y8|H7DIlOG29&UChb%**~+|E|@>T50=I?5Gw%qryh^)1gja5lukH7ruW2Zn?l~TYrOVb9uYJCbwQnb)+vts* z7G}nz4WIk9-;CBAdM*xf9D1=Pz0heU5k=W0K9}2i) zF>pvo$xc)8nR+YBgTKd}Tc4VAz7)I|o*^5YQ1HM^wf#nn)TEzrRPVHa#JB83`WVQf zd0&!zGNRBL53&)Vbv_rt5Tkrd*gmV`_e%*qYD%Oucrub(=&f1W+kdb8X}%~Bl6o>j z>O0EBarY6^qbr_>a;~?JDYpX#9ZH>c+&yYqX^lMWs_D79mIt)c7xXBFLFQSteX(=j z#ZFPW9YC`bQfa*oo`19qxr-#ruA_8wzIHr>JX~UlrCIMEm@4M0$`&dA65XH^cHfS; zJN%$dDNCk6Q2h&(VckZ^0H{tqxdo$8_H+y3RX^u3<-M+@a6)Wiab zN{&N1^TfZE&mEGOCGR0aywJRGIW=r@Us&7uS@}8=^|`tE2)+4@3rjp1GWoAD4c9Z3 zS6?~S-NYJN4#$#ZRo3$=S8oEOOE=T6ePR1Y&Wh@NJ{kBOM?M^d8o+jpTssbMDXbB$ zJh0Y39reF)shOM+yE9+D_+nRa7q-E4v^WGcxX`w3xFW@Xj*?_**>!o>l8K@fgE~WeO|U3GGjt%*=+lb<C}Fm_*oeMUGx3@Y%p;`@A_AOk#J_ zp`qomGm(;{S6pg_9SXbBazGxWA1-9~z*{e}OW3kSp8OIiUWMIeVa+S+9_xXr_{|Y} zjJPUW>%9Az%>w|0e?0ol+w$9)JHBcEazWW5Zqcsi>%igLevS4S1$DLm^#Vjg^&REA zeIMue*^5JrI;uyD2(0)^_fX@fJ@rU{nv0cn+p}FBB%+LTb`BBv`sV}C{t7g#M*|J% znbqqJ67zj1U@GlwHr)nAQJ??39@IcIb(1D2vZlUA*!qAggmFU2S+5*ls~kx^WNqAe zwyP~k>Ly!ZH5M1aOb&#EG$ZE$#(gfjYyY6mv7Oy)_qA@rwpr^>GAX&gAGuM1qwB5_ zIJk+QwLd;g=nsJ%xMpANpi%g4SM380ycCoPfjEsTF;pEL^B;4GILrlvst{9}nOcw{ zi>y)3IzO+3b#2jPVG5ifoCS-v$bLP$LCF=W$GO9gYYnoOr|+lg7p@h3v;`U^=Ja)l z?Sb0AX4T$mNQLR6NWBtC=`U@;lkc@R`CN524duK0g9LX1zrz*iFMPbqB_JgOJ7v;g za9D{2teRCMU;x2M3m(Z`>HCXUPMLhqE)_UyHjQ91FVd4w&mu*K3YQ%P(x^$^Ffc`qAhpJ;(MPR^ zNI4zdoHoFA{z&=tyQUWCc>%P>FZf0}U=kCy$71Nh09lfntRWeNq{=U|)qvp8UdfwC z_0@IwQW)-%TySVYP4Q}SRF`86h~vL0{AB*8>BtG$Qb*VGL%&%;vB)?u?K;l$Mnl}w zh1{9~Z02WeDVq73_D)H))X0Mqg78}^#8+cqhEnY&kciJc!1%O&ND~(AEEc9FpTJye zc+K8)a4*r;pA48pz-i8Z-9C*<&Kxtd^Wf5%S)qxZI=haLT4q`$K>An`fQa+oC&$`& zcUW)Ij?xS8XlT;HO%z6njnxNh-v0T{*coxbH4RBamQKP;i%u@Aac5jBByhtNFiDa! z(kl5D+VWJzNsw=hf;-BwCGq3vT|#v~hNyKcYtCvleC--bQF-l(H(W{BvrPKx z6WpgsE1bB`RdY+bE3rXAbb}$UUcj#GW0~HyoR1!~TnmpqV!t28X9|k0QSp>waBel~ zT#!vr(Wj#3Mbx1@MU;Gnje-Ez>H4;U0xKbp(7al?g%vFoLrZ=9@|D!9sO-Y*qIq)+ z$25$w-YT$MH5oK&ZFY-*n6}vRRlYr`dpp8JeWi!}PBUpB!^M z##f(z`SO4lg_O11w(Rf&=wz6SNZ!wJu<7I-p`{{I>AygL3wZNtmLdUOmCeOcr3;7S z=cm%w@8id7EGvglav^W?Y?##7Hs)U#tCI;Sh1jGvwB0AylYqpTw!H+(jy)oFUVb9a zz+egz73~}e>rgg3v`ZA%yp&V@Z1&oWR6B-AF#eks_Il!*KTG_iuJA^IjqIi^(j=VF zywiX*g(*UxO+DXe2Pv+^rkm!>UXO4%$~cval_x?)A-JVIg5W)yeq$Y5_%hW^^Xk25 zqB&mp15m$P3rM_Z8UK{WEV|ZAkZBUhXz{lCRSyfW5@3|lO#d%Qj%_CW4rxY)9J7^5 zco^@na5%*+q!1)|>vm7wGXrfHIB}I&i{bhmPb@^SXn>8bnOaZWNHxY|zR^)i6KAxk z3-?m@WZxg2c{L|gXP;~JCE==B(S(z0Bf$=;MJ_)>?T+9_+*P##CP9W+c$Xs}Ai zRXUVS@wH^=PVR5Ij%CNAP)=q43yHV;zDDYJQ&P;0uV0*Yv3`%F9o$Kcu~p57E7FG1 zTCTeSXPU%Stf!d2uKW639&wQmUaz$>Olqa;`msHMZ??|FO?(Zc{%~s*KXW)`LKyYt zGu`>enx?jVQYuf(*+?jQe&#xKxwDk5O(hFi?vf3u>Hx8Y$>TH=hJYwmYlGhn-A3G21 zv|XCqpuqD+y09POXz|#hrczcC*{HuEj)Y>D{}-g#HJ0dX3EYA`=elx2R3x%6?=6a= zY)uUj#CJUN=5^h5=J;;iGegbPj8m0Zt8x14P9fxh+HB)t?wfSFhLO{vTIvG3am|_+ z`>{H-`iD-l0#yrc>!+mhb}k||vqlWn{Q=UaS#vA-xs~X8xDms(#U9_gXGWT&3A^1(CX{oSZd2Vm z9rWy1t|t!8s4Io{vovm`f1%~W8CG3d?TI`xt$&Q^xE2xaUu%YxPlahnasCVEw(Ui@B&gQ*ZpdYlP2Q*y4O1fg_^QfX^dXYeP-076j4nke> zII(vWyk5NpBcvW?yy5J6lFsP7=U9x~&;)D$A5&i$7FD0?KX6Qli#k7*m>PvALF=-io#Ucqpw$*jYqkq<#QE~ z&|vT59A#$1+Gv?_@X4gRZuN%3OijL@gSffZWL+0s>`F6TMwZPbNGzOs+aD zbT&VVviG-4m>ER>j6R#`s*#qQ1;mijSCXv`0?_Mq6l}T>;ELG#6od_piqxDt85Xy& zm=Z2Vt~NQ8Im-7aI9hZbt%yXhQ?V+5M}88(tgnk5-)U!cNS}AL%g51Cm6={NQuBH* z9o=1+&InMCTNVeMBOO8J=U}*92(ZZiMcno2oV_ru zzsY#pzf-16R)c6mj@DL1xe)v4rvf;nh-^nLB#%mFLi*=PgMa9`5!O_sc?OZL73x5J zLu;39Cq|KRXGIL@;L%)6aIAP#V{Qx4VtG59m##CdwsJeFF(=<^w5D+S<_JoC*m}0s zEW)X>?8p>TFb2&TIk>2AJuzJNz2G=WeF(x=Ti;MVk`h4Oa65`9dMb!a*?#186=cW6 zs&7#5xU}+hs;bc67?yG9l`~wI`nq-vW}@L9Tut)3zr1Rhj89mw&hN7^^YCmJ=0^x|_osH+Y-lu8>;*Lo4-j$U(fb@-y^~u7D}xI%e^gF*pu6hF^)#N! zZ_-F{8SX`zLGEJX0EwLKlhIZfkK-1}qa>p3(~*kpackt=OTwy}#qBp+BX)04-6izf zydIKel%EaSBn|_Ym4UF5$aGXDt1+i3bTYrbu<@`{kz{FNMX3FJgfc0Wko*4ONE!^5 zWg1rcb2R1ozRqJ_E>(N0bA9Z?#@y-UpT3(29m3~dH$J6A`0D#GvJB}sB2iN+(f8{> zlROj1ANE)>LwR{*`2TL!QQw{>eAjwX&5=^V+qB-E2YDHW|H?E(}i}>Dni0rjCoIK+HI`q2*2fmEW|vW2@+Ob!W5}A14{JXSkSB<6}0TTD#=ij zYsJ0H8NPP6d*qbO@=ZottKZm5&1fFsC1;X>>{bLhr&)5qw1$S?!_~o)<2uS=Dse(O6T81fqLyT|MABa zyLtijvQ}D0P02rcj+z1qe=iYuQxT$kA{54M$?S&QU(n zOL=p~nq^H=;HlWz+d`CH;qdJ9J;sSY=Bi>*)omNl6_K*mJ z`-MG@%aN4T!<@SJr7lp1CVdO17}$0cm+m@|0M8t?-UPVq%!FGbS_Ex_`LZqXYPmc-+9sN48$MSQqqa+kt*)}uVVZz2pn zHcWhnRT{b>%iQ3WoROzGsN?N$2S4QMaNGGMyE|l!IYX^O46j@`=V7^3YKw-w7Dq=+ zI41iEB9q=Yl$I=-)K!>T&HK@;+C|HPB_g3*Uodv$bKlIW#D7KG0oKo>9*bJa&muJ zDML?}i4gay9`oR?S*(Ta5P07oDgS9(IGf{K_IvSJst2!F6B*EU-rMn2emKKzOvuP5 zVX>JpZrMpV@b<)h^h{0cdLpnY_|eb3@z6G^JFoR)gUi((W<`GmuqDM}zfv#%F3*b| zT!~OIT+xiG<$#prz>(Kk)3|@GPDUB^8dg&G?0;fY@Mla_1$_QZ<*(P_fI}B6oY>QE z(mzlo+H3vbiw#EtYiCKGdf-I1quOHGQKaoNgW?OwOSQYUA7&V6qcQ)2v;`6?X?03U zvy5(Yb6=ShLN`@;Jelzrj22=Ww?}j3m*SP%W_lXsG9ZxTqWiqYItDhK0*muF(uf*X z*-VqO&3zskNPrP0bU7DMxBn|fN?QJ;C%o$KPZ=XfBO%T!$J>9_5b2nU5Q5 zjz9P*k+-6}$$_Y?9ajitSmn=fDq^NJ`+Em$fn`=+gHNsPlHAf1MWBn^A92E6?c)Cs1? zRMjXeYvBLW_DIFxmKZC8`d@&P%oMq7vne=CXmz+a@JK;U6UUA2on=ks)5dnkNAyn)+@I%cYlE6tnKw=aa?SdSt7i4&d0z5I;D&U^ zvJaBhPNdAD5gde`5HC0B(xnFF$i@NM{jf*R?`Qk!+!^?2?6@JuvZNpAq*wW~ibn=@d zMQouxF7NEYT`Bt(Zk)nF|2f82hVsD?d zvWf}>Ar@$#>5m`$4@&iNMa%U*EgPcI9)B4wQUdu>8U6+p-%Tug^ve{SQm6= z;|WVH>8w#TgxxI~kpcAcW$DVU(7F7N1K$l>x1Ab-vXoo3fy#EWfDK!}w21N$7+>X}Llaw#S-D*!zz@FoKMC0TL!Y0s{W z9L+pMdq(+1cB4|}?b-3ZyJ-1mdU&CjJXN?|`t8ZNFOCDFNaL_}i$A@w|BC*WpQgbm z7rrv(eEu#9y`BSbj-Z|zan+e=nkjv-jjcvO__XWFJBnFLZ}$wN(=+w-@+?t+dF&%H zbA|;FqQg~ie+8>dT#Ict+N2ys_!4qGEkeNQ;mdq4WQqtW_{Szz1R-bTcZ};Oam@Mq zHHOYRhB*!s(cD-OoV<0l$KWmI8q~{6sQRz+Jk@XxExA$3_nq8z{kN4At5X~{_#s{l zf0dG;JkX2rsrO^*7#(HWuOmzN5eFsf=M zY=miMX{pLj(n9OSb9nWae9r`NB{ts&TwO>T`~J}fzyvvf<}f34(cwDe4ajA86PMPb z-lPY^gcDMh84`_Z=vPow0D4}V8>KIW7vW#v0ptesxKUs6wg()uh}9ly+a@~s5G#|H zY&->_F8m41>SwGH|3c;{xWHqd_^XHA@~T_NU8V-t$hX*#F)3$h$7A0>ZpuAc^6QS( z(mFR3u`1vye7IF-uBRbxDSO3cqRUV?7^(CihL>jmUrLu)cYP8k_@$cUHcHPVuro7m zS(iX>hH#DOyQs@~lkgM+{gI!&$0*$B`d~;eF=r!FAjfKEHuvZqY6>73e5C1nAzsM< zkZJbdf9Eum#7a`&OKE6CNC|h7{Zqad8N{7j-FzUF?{a=78RYO&g}G$G<7XhE5kDkw(s{o53<9sv~V4n z7x=N$n9HPJo0PzKpO|g}m3F?5eDd_L*aXRx?R(MV{E1?*yPBPMDbIA%%qrm6WAcQR z1ZD|)9Jf`de3W0;6kh{Iwer8B`rc=!SL=rI_<~CDNG?AXA7fRR*e-PhK61bIzUd>g z{}a6RwZM+pLMDZpFSNr7HQnKys#ZtHsX4o|2tn;Hdgn6M_NG_e^Vkx%7HSSHCw|~>m!hs=Kl1&? z8%D*Qk~Jo#0g7qI6N>R6HNuPWjj=@S2^MF^ObarMm_?`M3#gVMqN<(tQ0qjT4+Gkbtz5t z@N&VNcidx)@0QQ8!))Q-Ns>4BnT>1PKCb$_R}%=x-wArYUX>MXg%4q7M6Q+l&8zyz#wpEh0t5Wd5DR=K(tG;_(_F z9O<~{TyIO{F!W{`cHdk9VxB>oHo6C`TzBMyy9=6~*iu=%6FaHsQ6cNP9 zMx-SFfI9JY_?;VP|7yxDYF82j4;s_OF%-M1Kbm2?30}M16b;-C&GNfy-*7uf;f)Vi z9aGj74t$+~Unm$z6rn2{Jh0x(!MW`JMn21#;V$eTjxvrQ3iR&1zKWi+IBP&Ixx(68Of+e1 zp+6;s_P3W4c7A`l#rOg}kN7@M4->C|%pevBbL=*V%Hx&x}j84 z?D`mRe}Lmh9XZRfJ($VpvexH0UJt9Rf2^%q6|okrlX5z<-sm*6iCnu8uO4EWm^4$0 zvij5Wi@7N_rm%#MIoFrUO)Gm{m)B9)k^x=e#Q_w)s@R=vZXoJ@DnwXmm~At-^XA}vEX#Hl(Y$*s+zqgeu{Kg)=W;-qAEl}7X zn8QXXtCurnuKBW{fL3ST*NaY4NBZx2g~Zci8mSw(Ec5nZoz6(gy`6T)ruzcuS-V}t ze0rW)XdbjmBamKxbFb-Axybx{rl4Q`G_NM*G9!s?3WxISd~y)O`QP;gpor6nq`?x% z-z})nXuv^BJL%*PU-7$^Z*TJvr&kYDjL)OTt!F;~7@d*_e?4J;K(p!Nv4=afa{rya zVG~GJ2JX(x&e7|9VAU$8!4s)|ZzXG5&;K8BmoKg6%lB<>LAAGkXN_S8p>6PAKKUF& zpPmGfRjA?hZ$qcqyR^9 zncc%_0yXfakAL0$HNU@2e?Bgl9{&w(CQ%T21!L$tFnxDI16nYSPPJRPlG3m?*0IvK z+1H={7z~k+lCrS&Sc-v<4ON>WD?fnsI)45RAT(kj&O|W{p%tyAe1wY&z*m#hrwh`Mf(hukU}q z>(tDwFyO<55!S%f4JJt>u!5z|B+-_>^6nYcxj!|eY9Q)S(t2LY;%r~0_mn;6dyKyJ zr&c7w))re;)}H<)%tHWp7(>Qj@SQAj4x5Si zQNj3svH%qJ8UoJ-;NAQ6mW%T*{T-&DHQy-7d0OBv{f)pDw|lNJ8AO+t75u2mU<)mF zP)2o}ZB&v}7r&Q0q3VC!pP;<@Jn~Y1ZxtRnSM9Km>_2Owi$GV}yK)$+Sku^T07gSP zWqYYwB-{2M`!|M;8I<0y!MWZj7sl}4L6x$(cdm#(6`=%pIFP78Hyn&J{D>IrQXP}m z7k$qn>IMhb??{epPg($7AUSsF=42swwywnkw)-o%0G8f+>S-)V+u(ht4W`ExJu(EC z-Mh&%hSR{Uc56g8QtU#)iWU%F3zyGNb=X&vZ>km`utD+G7}H-7Bs9bIZ{UF7~h=F{SW`qliQq)VsDx>0~=+;Y)oc8^U66g4Y(_PR=m3vU~5AXTc3^t_~<%IbyT*(;AdHk)M4q5qUNDP>SGby;;{fr!oIj2sXH<5Ln;!yVem ze7o#L{r81%kV13{v)NC-?FMzYaU6=c4=n8HTQm%Q*Fz(Sj@a!79~ANNj`u|IvV+QB=(T5-^2A<$$1$;DkHNQwX zELx|=X{IslxPkzs5mw^dYfdzBzZFagSz6paw^)G|07~vLudL!;+tj1T*~*o>?W1m2 zyMooqz%AC6^Q9QF+zxa}jr(Wf0q3h5H;kl31022%(<{H)#2;($Wm`Ln!~wR-jEclj zZX*|sHzVP|Wk6*QRZ&DP<2tSn}Ur+qkhQ!c+9F`y~-0MQnbacULr~v-*0S%KBADixL z`IGnBt_usn^oy0fD!q`A8GEcMqH8%mZG0GSUtVdcjSmL1tUee50r+vMz#(45e_$WD zD3mrm3y&+KibZ-_na=sS51;YUg|uT9#^N5Rq{{$-M~9nXcS& zgqcKYnn|^d1K0_K6#ts=l@aSI$TTGACVH*RGY8#o zvc^RL_DR!vX>tvfWmx&qSBr*MfK{{XFW8{Ey2k*5Ez3lohuVR+NUBOz$#CSje|}0F zUf9I4O{#K9`(|iMc<@p)UfSUxuulT*&Cz&+O?!U0WdawKxG_Qp)ge2I}Us^6VU$2#(P z0yrS_WQr*X^gr06QV|`ICeVNmtND9rysZ!{2U#$~QL_#9)iCj|XU~MPo6JsHMV*Ib zQf@CaN6&DVuAP?cIse=)rT*|5!&AIj_Wcz>KSC-I_}87tc^u|4Q#gQ$mN@lQ!hfB) zNZeCEj;mYf!6&6I`V+mL6quglP95}YX@gbGbThXDb-YwQ@b&T~TEgDu#-3qGuDE~V zgP5O~!VBx)e@Ht5ZeEF9<9!1l=^ufU`|E?z;>$mwzJp_jBSHca(wP_8WuieAWSD6J z>&o}OFb2hL0?BZWb~3?(=TuM!zsa+Lv22-#CHWO!aR5AA%_;uyTdflHKGoAosjAZN zutOxtts*4+<+Gd8UOlCbLinmYoVh=eqi}!nl+yoo&h|`Q0=<-T*T{c-8 zewR5#lIeM9c}Wssp80uxv){#*rh9MSNsK7u8b>V6oY5GzAE#pWo52$#u?>+) zmT3bo!h{O-HPD4&zK4m_L ziAL<^woCbMs>7~kYYVNn|D0|kxHj)u_m%>EJaD&{uSGBaT*eT5oGgwLLiX?NbG%Y~ z0maL0yI`6!ZlR`2>c8@Y%5Y_cX|Y?`m)u^T`#x+Q7CThT-~V*p=5hIb1)7EWq*F_H zXU|fn%lwL7OH_9v_xX#zAWvQ@E?rbp9OFy<8(<04w9u2CdS4vfXV5&WF&)(r^dV$C z=6MU1TK1D>P#+8RY;E<35|ELx?EhhudN}yomvD8=Mb`fG{o(;v)n} zYiMc7zM?B8*xaA_vr}J8%lhnw+Mk%R<$QJXK@0PR>=h`%1mfUy@^F`FqlX!%n(-MQ zr8ic^T+bK?r%ixxruAPToTg9g+#;+m)Q&bJ*0VHosVe#keuZP(A`Xk=*E zgUcJTNqJUT`m@|AHIG^;KL6%uCk>o_thffUSXZEftGCn!uex23yFQ`rxaMj|pZme1 z&1uxBj5LnL$2JR@{5dqZzOoMc@cX;x=}Iyqm;XZ9$iwkeq4`1kKJ?bSJGtDL7jL#f zm;b>!W%NPFHa)A2ih}?CLAQ3p^Ak@H8Yv*Wa5P831Mf59j57=g81{XsB5cUW<`3iJ z1y{Ql!6Wk`4jV$#%}APlm8M9Tao`s{lXe51cK_|1=nhB&Ox5>F3i_}E0vIPgb|Rnw z-Gx(h&SBm6O#;4VrLfs2bEDF87OZ7|R3+{v zW|w*&>wp$fXRBUyFHH(u^c2pl9`F?pir3BHq8^}`0M;EnYq*2|6X(te>zYripSDyV zu;bIN;Wv7M`*vrN@lI9-!pMctgn{gyNQuDBa6FSre&?rj?6ZmVLYt|$&FN^sdleLu zxp#z#q5D`JtU>=sjkl^#=UP&@>oMV7ZwM+>E8l8r@&0AcA9g+@$d*r>%s`Vx({aF;55iQRSCTNJ3$wF9lH=_viIbtnvs&M^9o_^yh10^X<9nLjiyl{U{0!uJJtf@mN`bc*j)d()|~b!6lGFP_NSrA%L#gUroe zL2KI3=t#TW+18RblZY$&B6R?JIr!bB8(YeZl^RI>|>p z3i6uua+;zI#8AYVKIWP>_HcAV2LJp^AfxiFm{?Cm!}7=APFTWw!V7;qSp7cbD}#t4 z`Q}Ydlb^MXxv*YEb*I&A&G^sOjuN>Hu7OJW8~|tru=kKWr$k8mU_iMSgI&t)Sf0P! zM1!;raQ79x2ZbX~Q)|7Bu=B|=Khwu_!(wC;1 zyAzHW)`mzfKVU9xHakb9_C(WMJ|Wc&}gLoLsjKE!BD;9{gR^O8py0 z@q5lK*d=f$CSsl!s5Pf$dr~%Nt%dp@?GSWH5B zYJ_gKir*2%3^-)PPYRSV&smv8^?JaO5wBT(`QwU&0#3qYK9w$%tpHNm%SsI+E?xX$ z|8LsvlWSdnFDp+&g#{7t${j9RQaMspEZRY(sKce&bpV0@OldfB)tBlX_j1|*U_1EODjCY^N0Gj~J{MdFSIA^1?t@^+%x-ACV=4+s{wZdWx??&o9Xj`CQlCt zvA(f~8smmk54Z@Fl>DoZ85M|dSgice02IyM*O?jL{vMlW`&31y(=T#b4|C6->12Dp?9>wwRkIxw&Vg=b(XT?3X8({A zRjyStbp%MT57L#FGf7m4wj8;$de;7ssLrrT1nfg;LniqyKazSL>@NXY4M0^WV53#=H=v_u)5k!GmAJX+WMt z)Z@;U52^=D#~Vs_Vd{3l=Gcj=C*?BHcscDNw)#MJ#N~(`#=X&5V5c%DKuq&x^(=$M zhdgmw+_9`~yIT)_ycaxM_|f?h}rKHS!=eTmu(7)>NcJ+!C5Nuk4P>IJa5)|zUn}YZ0J<@DUx-KIA*_J+O^3q}O z-dfHh?Nt^(6}2lfMMhSJW4x5&rJJ-t8=vVtrT8Qw^*b6k*LSYrwDHV+61DWHY6=m7 z$xY_he3qa3AMyAH`0m2wrjK>&)G~)_zUZ^_mH}!4D_^i4Xo?KL7#rsYFlD4sSC(V( z`yVd&1dcwD0IW(Ha1i`UzkI2Mae1iLw;h+ukZBfrAAmej-p7}*_UnTDvG(ApW)kT3 z%q89QZ|TZl$bKDcUur_1XgJbbo4R$orEc`_?QFJZm7aL3Kh=x(1sZP$VKi|L{!gdc z;m_%1rBaA2^yE@3XEv+yyw2adocM4#%`xRPU6sFv_f!vYN59iQziM*Zt;brr!Rb2v z*jNBrApSc4A_KqtVsvuCjZ*A6q}htH_58zHA){`G13TxkD_Mg*NFojeKG5*u@81Os z*Y{B1H5AM4fNxqi#+^AGmJ?3PicJ-O2Jmj}QWcm(oB{iZS7j99=5L6ndpgRQ^65YW zn6?N4VH`T!>39lw9v>Iw)$dRWhaOklW5BPbB-Wc-IkxIp?|VuCO`qfl%FDc<0|ue4 zx&ihrh_7bByj@X}n!@K8-@olWfk3p+Wg`mrS%5$al_VH~#ynN~rvP1> zY0}tHr4zhqfl>zHHrw0Y>QB&a$+>QX)yQ^X{|}wSOvL=sc+z0Wh_iOjQd6F1`$UfB zaSzwKX;XJwXZ6F>rEqLYT{L*SsqQYA7KhG(r!Ig5E-o5CL1 zP$ARY2@1YreL~sIk$tMw!{VcoH-<2q*@WfC;U{A}p4{85cqqEuj!&vYy(o(feFP|d z&MdDG9bC6Rr!Fry!+)%u%Qt%EC=0SDu8(yH?LyD|b4{T4pRaht)%EXN@ruWRluy%2 zWoq>(8ekS6ME#!v<`|Wx$t516v7bol?ag$ddkSaT=!iOeZp3$Hdz~52r8~6Id18sv z(WRUU26uncSC-11zp(#t_cxg;RJ+0QgVs~(F(5@07AyX349dc)bafF-l3BL|NPTaukB%d*A13!;j$W zS%G4ybt-j!VsXZvLspc^t9##XPe!$3B_6hf4{!R{8z22J>*7>-IAHJ3^5&DzaYk>j zG)u>%7?!Ezfa?7C^a`$;-7WFjurFvJ$EcQ4Rzri3;k!Zs84i{qR^WZ4wSz=1Po@7? z=hWYWfI+Xv<9LAn0O5w=p-u2UmIb9Fr?%PB?$N;uf1G@#Y$hg(4M%n~Ippv{#@!#w zPU~I(mBib51HNIIng!?O3eIsLJ3$vKnmp1#>2(-X<~|=Tsqaw098!-u^OAy5gHFw! z#mqi~s$_^el0xNb(QIRYA-Sw6!T#Ybh?0PPV{}Bl=tA>*8QboFqInl%)I;Ms*TTQ zFHt4SE1#j6if?BA8tp|JdP3f3WQP0l^=C*uLM< zgofY6^*TUIs=r!xJp5h>;5Y4OO+Q`YU2xx%0^;KPB-U(+^Kd^&Z8fT;8(gb?YsaEb zJ-{Xr)Fa1$$!OIE7J>&fX`tnH<@w{umN7otNv)FTjF#8XiUCxrZj70`Kgat>YJxId z7;shpk}8vqQ|w0>4o*Eh@E=ZFI&E$bM33C|CgS*;jV{k`Z29)L&lf`5a_+9o$MAr# zZO!6Wx_ANnK0nxcY88Bddz~p`Y-KgP)?yi3>6tbIyMUJrC`oT3!xDP|`7T=0hCu44 z^-)~z>+h|5LC;%{d~H;HEO%S#+0xGW0O#qMO!+%{9cv!(2Cp1VI#YXGeVUl)I$Y)k z>l&y9Sq{@B%fA(x4!RnaDe+?Up`XR>vdWpC<|SXW0>!(?gf4RMZ3M>{n~?8 zsyp&S22oQb-TUSD@j1(33i=Mgr<9CcE!_k(4Pt zjE1sR0lr*UC+iO>+kt=P0=ZodyhVMMyi(Y+ROJ>8D+4y9w*np%W4!9cmS;cEt)Wl3 zirL&^MQ=AJrB*SFX~Dn({P z@0^&$5?ELWZ5c3L{@XtwKC3wKCs~X&XUL}?5p19&;k;Dsv|+R7)nHzzjj+-G+jTN+ zbtZWyV~6P>1NGU~dxAqg8lo7t+Dc`sXAgva2Z2a&$5Kur;zlb&BmKnB+g0VarQRzs zx~hf8Wvdu$!0;~fZ{YXaNZ>EE+t<%uC^KE8`^Q;Z#9sPZnB}+tu+iDm_Z$VbKo1}q zuz2l!3OG*;uwb6Y_K8hI1Kg}X*j5edzcWQfL%tJNz0hv9DS4fb{<4(&>;B5s+opw} z^oR9rKofXy^u2E&+m0Y-jGu-Q%nNy2)D3O|&q_gCp;N1P)khSp&+mLH_vwn;;>ys< z)y|*kl1~a)0$Pe2xFFGPt?G|I^>A!NrqYkme_bs5FCifl3ZYB`CB}ODFflID-xs z*ps|CpYull3!pMnpMz|9>lL-NYHEe^_VF!1450J6iim9?-RT^VHf`*>KCOENnGM^? zSObBg)QsRpx3C9pLwJLJCxl%pmX9dtSDY??CUv+0m zH#MKiSa6kZpFC?g_bssbuQQ3Zh`NOFiVwU;g4<|U9rW3LfNNCgg_TgO<@!y2`FqzX zpf&`e^k%df^8db8+*IWUM`lAJQ)%Ph(#*w{9(U5_3ZtgrDGWAx0f*vLM6|LE+URp_ z2800CWc|Mi+#=ej0z8cKj;g_Km7axbl(dM51PWrmdjWa!E=jBZTD*vi1ZP?Xn~rYN z59a9y_Y4JG$b(0p6keSTHomoO7Jk3Cv!SZ`n~3joQjOEMILoN*A9=}b0$*SMC%z^* zKKZG{;n$a{%cja0`+lxbrXr#N=aAIN26|IczOb(IRUeKbE=&h*Il9uc9P-5H8ak+5 zxWR~<-jNcHM0FZw)Zr?mcB*A)^oZz?lFqk1pHbH)Xr1J2?7BDYGre))f2RepyvF(7 zp4@2o_WYbS;S}$iQKncrzcT%4Wt%+wTq0InvyoqQ{2;CWu($OL1J$OXk=>9Yn{tEJ z^1=PBjq|r)`e)kr^Lq;#cp*OzfnXx>UD&qw#`*71$shNGvw*-KxhM2ccR=AH>`|3~ ztId%UP6j_YD+AhJW~8rxkj@>as3+hwEhpbvVtpOB*H?1j%96Wj%ho;K&U#Xy-Fil* zGT${9Sy*n`<9uM zG^ZZB9g3B7`IqZ+=gNHAFQgxi1Q4-@tj0dIHc6$PesTAQZR5wxoXmOUg)5wgt(tN7 zy{yB`%(|G8fB>s_r7Z|9y8^Ra1!Rv%=$S1nJi1RS3U@Obs&}|JXmz2CLHgcBefZayMnfR9s?#Bu5z6I2|D-jMG_d~(kKbmB92%Fa?;>3z4WWL9g z8}9p>@@@%)p@6cKEje}eiI|OrX_rKFhHl1 zTi3UUQEUz18Q4iLj&+UAvbsTAwj@&w52Kh=tD0ET-yRvu@V=2lw>#eH;4t3lQaI;? zf2tVSLm<*+sY&cdg-rYKa836sMxzm_ft=9tlAkUhv;_0TwyWNX+dr$y^}{SI1GlHd zVH8e;NJBSz^x=n+^wfl@h*N|gCd_@09dfmDzOKjbd9A(6>ciCyOlACM#XYZ4u8{&Qv^v0E0#@uJvm>u5eKo69>%QdnFR+glGuVz&<{avKk7kv;Z&zy=v>xAT06z z2q<5g!&=GoG%_~7I6VK6ZuKxhmGT z5+7CP|0Tg!Qwhn87EzCfkj`Qx!;xkg$+}jA1I{wR4&i9gzosib&Gy&ZPrOt0yTaQm zMULdSl~=WXi0Js)>5r${ ze0%C?q?I_?AXEaB-3>;r_l!n{TxQs^@g!T-mgd$!zhTPI_NO3o+iw(s2cEG=WEE=_0}_8;=O-Dqf8$`(68^zUauiU|#no1Uz>BC9#}l4rsZPkF z+m9&9YGeuXoiO$kyR`^N>ldr*_Jzxb$oztxCn$U&kWeXbnWk~#O~pT3TpbexQoyoc z#lG*2+mPJ}WL^l~unlyRa850X`Owt=G)v#iPssRM^pT1Ah*d9z%w;9vLm3N7Q|Fc*`4uy{_{ogE!^L$vPT5=TM;M=zT1ot`1m^% z@RApH^j1zLlAbbg=tfwfT@8fTrCnWR0;*UZtn%hH<$!u_`(SQuhpaZ?1vyWU+R}|f z9c3I4)lLD#+-V}~x3)mP7~>iRNhblo87 z&7zK1@2jO9lm7iCb5>tGbD-HWqC)}lxw6|-cY6oOS!#*ZS%i4GJzNaWqH$H8o;`84 zOajnh64az|#bd>TFG_2HIO|=ndTyI`m4rs|(VgH*TJ59DjpXnMos_A-9ffGgG(8h& zcHJkS^L5}mSE`cfBH`d}f*Cd?bUrk=;SNt{bQH=w$Wp_J)Y+XE0-PWhLRrge#wty1 z!*~8heEmj#*6)Qq^_)?rjB^a9mcjHN9A6x2YUqQ{JlXVz=w@?N!jJst_gBmtcLFeF zxCJi`6y0Sg7rE2NYRxnb!%fJp(GHeblvj?Os%XrG#N8pk#nH z_fUdaZqyJjvF)eBa|ongWWbglz$dmKi}PJBZFPPCox@AlF{I)tP^EgW4XDvoaDX*o z$XyPEl)XWHwKaPAWvzZVF-79C7mG=+HfwUt&x4Hj3-I6u)_z&xKNM(SxUEDpFe!fv zj<-OU<{7WYhy?N|^*((NVMJU$Gx~q9P#t|KqAes$n}l9>xP|^^y55zk2uQ ztj{q0BF&2=_*)@SCNZOQl2xE6!A=^?bcAyYL9!w&L566JIbrx-s@ z_V11dC^@FvOJTJ>g9t@@QwW4skvlxchwO&Z`z2Pu6)w6^P4Y9yN=@)ao0fbW z*A}DN2Z(I5w-}RdbDAWR3Qd-ppjak~Z=6gDy;Yz{^1Ux*Z)xg7xFuGABKIquY5fm1 z%DG0nd^Sw1_qQ>oOmAtj_C{S<2l}|5z=sW!dBovjX47+=pFQ!QSMJ6+;TL% zW4_U*ySKSl>$CcAEVG7c(D;h+N zq*pv>fJ-n@>$0}#AODR308-)c!$G!n8e!i;7$P>&gP&7Kk#LYkLngt3SOzT)^EqK} z`2bsfN!s(i&oW(3&t;>TN@%`3Q;4SlyDnS0rj7F~!Q+gqJo!hs3t_J1H!bgqT8nxN zrumHU9LEoE7mWOf76tBO$*>7yw45>0mA<6(4{6%$-Wp7#0w&!D6 z+z22`_id3f%lBT^!m{XOV6v)bLBQ7cRo&j(`j!}`pQBsjIqU~ZP(A9KSmk0zbTbtuN8IQ@4Uddtv)dD!D~zWU2e|y;J`2TbV)W< z{PERQ8QxD}AFlE{@59!__xlt@ViMe+d_TFkXEf~hBXiq&CONHW2Va1-NGs`Cl|Ia6 zGsYn!+v*(xE^z=&cP45TbMf%aaoxdWI2?MDR%IQ{YIw=SqPk$z`)4At6y7GyL{X&| ze#B;SiJ7Y&(4b;wyL41&-&m%5JFi7Nl7o>F%Ensws~q;2Kz#l8MQTWdPHdVWN86S* zG$2qkNU7hXHL6N(+C6~t)yGY%qBnQV_>X?yAEfYg}yzij1HVCuamMK(J#iQel(&U7q-d`ZFln zv}ChBeaOV(cpw>Tl4-jVLcja1u38O>eCPs>AlH~ zq6+ZET(jj?bDQN-68~_Cu8VWlxtfoP&D$M28C?_$wV{;c+A?<(Wj>oAuXgliKi+$( zBY%72Q2Up>j<8sX!0q5v1f2j+3~460^(Q_yMcmO^BFv}6#6@H@Ox-8wjLh1K;OL_H zcf2J0M$!q{3N_fpx+U`eIGtl_!!gm2kC&oCUjA2?e$8mXDEKLV@ZQ!A$ozJ^Y)1?3 zUgUsmD*^9*`RU!OGG!9f?(cW9wLVA5aShy|44llV(t-Nh`*l%Z9QAR*o$oMG zI4?tfzi+O5mir-UE`+6tpv>uD++jrW(J(iwAJkpGZ?^3)&Lpz$tLdYTs+CLn7Yp~p zw{d9#SLx3ZJ?Nx7yPxg%4E+@K`Ai~z_7;rQr>O}38lhZt-lyX{J<o4Ods>WF*n)M9@hv z^6+}F4X+h9Cprt8Hy1u|@wNsNQ$CZ0rE@Na!ZaHm5+T#y?ilXUj=QrNH~9`CRYlod zyZcMv{ri8bYt z3{WE;z(s7{2szfek51OiQc5{Z*u zLwz6kzI6S}*9gzK1B$!J5+h=+ceahW3F}H=!=gzet34E}b~ij^8+SNAiQ!O^}J(JAI3u14#3ozl`JUDDms-QC^YF?0^_9pC4Nf8-h zc`r2?Tt~e>WkMQ6!_MVsC{TUKnbQp)UvZtsC^A}Hc%W&wY@_V?Y*vr;h5=YGqn|Ez z2S~(AmE*Gut8IFE6roETnohmA+FpANa>Cb}T+3&D!2xRFy1(Q~uFWcj3rTh>T#hSQ z79)O%moFELlEUC!U=^3i-y&vrHj3u!>}+!~{PTo?lTSR_eSuF$Nt$u9J^O&;^NABd zWoC4uW5Nt@(FaI&>}+<^UpOP3pJHx}@8&*q^rkEeQD^~js$ZtvMP!xXM2HV5N?BG) zX)0Jz8il8VE||Z_zpGf+-vW#vl#*E0we(0jf__#=!SHnNBC!~L)dJxQnDdSbE=4kSq!i zRaVaiU7yM10Lcrk+GUVZfeQ*rle}9too?v4CXPB zqAx7mU=(W#4wL1#3@H%HVg0Z0Wi7 z;z`B%mqgdEEg2i4t&PJ>Hm#BH*iXm<_|G_E#84@(+GJ+v?^D<%2Lcpo_FdsU0{OJh zs)#XEdIk>-B?^?O3a>fDkmHx_1w!~e;+Kl`+i5w;v8tjYw_wEvdMlz1qn3jusI5W^ z8GOKrhT^K}#1ntn_+HlYa|nMbW}JppbhaWfNyD;j0Q(Ch#kgYeU|+L)=2!Z}PgDvD zd%ujZK#CPbGMLLjnRBCQs^Bd?v)4_yqQu^r?)m>f7Nj3iu#RG#5$@iT#N~g+!vYw` z?@^sYg)?SSn=?4Ssc9J)>r$=;cLJO8%%`jes+~fOZ*~N3Z^Ohwgb|>d;T2VN`xz=O z>*3m%TZVT1KX_EHCUFdNiRo_$ldN`k#8ya|bKZFW5E?r*!1dHTaSlIPMEh3hnUeL^ zaUxSu_8!G6I%SBhaw4MAtQ*yt@6IrrI2$}WC|;n}>USFbWBn$|(-it{o)Q;1GBxen zML3Yqm`zH9SXoRu$WmEce!5vZSFguSbgvmPs?kO=xRW0H6f9dR)64G*?8|NI_M1P0 zx{V<=_RwqL#-l}{L!^5q-6_b{t}#$-0DE*ymqMCp>Dx);DY)h-W9ZD~0Iq?63vA_<>yG#A}%N-}9uE*x8?x1n=wEsmO0a)bej> zio+-LisLfTM(U2uDG7C7Q<$xe!g29yTYeNzb!IF{RUdF>DQ98V>2Fr>7>rrU9B>Mx zA6;f;&?W}wPG&+#q6=q1afV3_M-tUv!tNkZ5?`%&0W|{xz|GgFyl9Nyxc(r zcsR4>EvC$-d@kHBO$HZowv2N1l3psH9%Wi(#a)tczmXLpPHWP%tDGq3>FhQGSB*D8 ztbsdLIBg{!Q-f3Ca6C#y{q9F0H{1{HCv9P}QUpAhNf0>BFrxs!0Xw9SM-Ed%o_b9U zy=dsg%TCF*^uSf>HnzbXNzDI7xWIX@(Kk_OP+#|LfXC>B-(-Pm>m##+A-Cdj5}V4$ zTS)hsvTe}KN`jM((=>*UXWyK;)QqFGBSyDwc%{_ctA^2SXT|*)u~ z!PFm^?5y(`V#BZAlPiu@{Y27o{=$u;tbNCBvwt)!VT#xEHt}i5=FJLExF`e9`VFR> zT%@Gc471%tgq=N8puy4j1l3DPlfMSu5p?d_yO@ z?%|tFyWY)Y_sTOKR$zVuxxX8U^*i=?M~UDb=gx(ONWd|+H2tPp7ok|_3} zV$2JriZe>wGS0z3el2HD)VXUg6XF!(aw)jSza!DYYq z2EX)G(vbvJ{iGUD z^fuGkz;1u<>BBcoW!t^qv_<)qB}-EGy$*1leP|em0)oYG??BVz>{LlRg42W`EPd`x zpICpe>YsM%Hl}kXm?xZ&4&Hk6A7@HRDk>xi@P7n8SL8}0mEw|%Ve2;t z1|T6}O)w!dR^S}GG|7t3A4RBuG^0G;iPu}ubY|g^6YbLVCEGd6WCGB%D1MQ7mLHAM zto{V-?giyx%iBBawJqDd^)YvrPk}G~>^oxB^74AulGH~LB`c@RxHUS#OpcaoyczR& zLyXj>EXG3Lei|}Z$u_yWYK-Xeb&cM0qJ!i}WRtvk+A;+gw;sSpNI-yy5gEFeQ63X2DkMP@@ z!P40h$)$5CpY4-<>$(alz(vx+-yFh;R@~G_GQK-j%TZJBKk&Xv_vv0wZ0BX^3l>HI*WMxZ0KV=<8Wr!{%)!x}z}O<>!)szZt` zC7+qkQi;voUbTAp<|Rn=@R`I~h`1$lY)G*kI^3%fiQ}?wss>})Wzffnu0Ji*_$gZ& zKC03-Wn#5^npTqcxT5?yMdbL+u&Kv7Ru>gmWQOgDbsdeP1SW3}d#6zCD008d++Z(O zc`9IC={nw|$lpRCk*_Y5&?aXeyis9<`7`{MF)Ld&N1P>iN06=%F+bl`UiA*x?WA5! zo^Ej3F(Lcv2I&*#ZQf}4y+{17H)n*pvRE$1T*R<`!;5ox=*tf(0S#O_#FSF5jm__% z4@}6s@CCw{u;ky1sj6}Q>pazCs?xRO{dUx1^Fj1h5$TIizR3+gKdUNo8pM`wuQ`MY zTomLh=2LShyoDLR46?|Us8GC>OJ4`rnvKegEv1Qj8G>Thfr&(#RaWn zAT68P9spI>JA8e#d(I8}cVe-Wp^OjiYPT{>A0PKsr|vz-te5+B-@GzHBuJ4VEYu37 z0AA^hc535TIQT9zL$y3w4igJpt2awXt$y?@679hFl04$aY9Jai&X>_k=>JdY0oEy| z8>LI4j}VEspd2pkKzFEdNYGplLNK8|5U*jnUdHqILwns_@3x#?0%64~=C1ja@%I2? z;eqfZ5*^$?rK55eZ8;MI2A%F2EAQ(tUKmxB;p3lhJ!ZE5-iX&Gr|g8o#A=3rEAzxm zkDysL3Q)*gu3-zBx8NyisyF33iv9^Uw=T!biNj|I306iQVz9Z`q*i{?dvHbSHpQVf zT)^Ab^-cumav$#v?B~&r+<#Dc;J-&!lb4_Fljwe5rpg8ik#+)U4kakJA*;Wni1e?1 z?c>FfWQ_E!GFN4(qwD)mms<<8wAyb%fJ${aTpIG57KP&Oh*Ax(5eK0C=Rx*qf6?6! zd)C%={#Th+4~iM~rU#A5(qoj#D%AyJCof~!dNJ+AQldQpx zt+ZslrI)5pS>lBs{I?YBrh{uibh^5mZ6;i940CAp#JQ?3BZN@{J)mB9N5r$EquEje z-S9|j!e}1f&2uH!vF)<>h}i;%#Y0c5fT$5&;N);yWAEAHk_6#GJx$?v)5T^+2mG3~ zkb=?i785UZr}{rjj)}b}tk&naL%Q?4kR;&Eh;c`w>lNo3JsxT1|L!sN2YitctM2p% z1HSK*oU#|ewJbNwdHusuA@@tnwi23rm&}?cw__aXwLi*CTBM8*yid7lIig-V@eg)z zLv5UIbmUXTYI*RSXOZZWpI-t;ebC%Ys;d7XlrV&z4%VQ{;q}-;ZQ(TxNt*aRw(QP( zhSqe46{xVNW%Xw1j?ghM#G#czcRB(>*DNFL@Ky8XZD^aV2|>GA3PyMqunviRa~I{S zakr{|88(kK4v>8~MPsr%eRvP|a?~qK6^y?wO8+0Kos`Rf5!%2|*|%|lSXN{z&*m0n zx3{f_&NPTqW!!Bni)&KgS>E#ZMYB$(AmVH8(%9yA^yB}u32j(GqRdJ41cs*5e2w7SpJYIDTVFs7Uy_g zT+G++-&A=@;}yJ3;54$Bt08_RI(D5|RM0ov!zPV#0t@khrNr=C|Gk{BzOU{paQ4Z3 zh0q1U&sHv54s64Y6T41S;2f*XIQRQ&Q_qJJfsA8@M$Li9-c_=CJ*)hq!vG5L(6#bz(Ix9Q?_mKt zxU{qsN3Mp}944WP*RDqNth|I(uBkn2hjYIDS%JE-h|{6KSz3r)W*zq9FIN77I!Q)Y zp}M2nH`l z=&wMPdtN#D?iYUGNTyAd&r&g&JY}w?HMOkJ=R5Ai7e`BfXg7q%QzM0iWQ^s7x6qMv zz@6LS5xB(hkqQ_TeNud?b5w<*?siw@ITf8)Di%(yB(0+w12P;ynKRt8y$V#a0}JxC zXawm)NAFN$6zv%t^9ULzrDrNc^einMsYd2rS5BY=hUEk>@IVebt;;t@SJf^iDKuo#N$ABG@w zc^@HE^*-fx{-@am2dhGPtl;m6AE-Q zmDWJVd41e)lk@yDPhQf`2_9LXO1mK*fa(--WXMmvwqt;GQz&2LskoqJPw6s`*W@}1 z{^*@2v4~W^pD|k=i*SXA@43_RK>ywIo>0Xd9aS2Z#BI$lQ+5cY$T4m%KXiuXxXm@$ zp|KON8QkvCe0;fo>vPnIs$J2|jqJz0YjrP_?r8cG0e>Z{E&P<_Lg~`?V&$@TSv?~g zz}r#Km8i;v$d-=yVzlaS7(A0PUf>S4rVm#5x^=W9$HXd&X7lE$y$#^we)pr_AfN)$ zc|OJ;$m9J$T<@U)xrOGB2QmGT`7TGAA2DHy)`I9`J{^$*#$;aQ>->Hsx#cRZ-)`D6!yuI(Qu4! z6k@pQ2!JGGmX2>$9^v?{`AJ&tbrWjG#~*o+F0jJVI)HEPPC938>z3*^W4L#lF6zzu zTDcp%-X^Os(zNJ+vu4|(if{Ek&+m(c^pgDE=fECK?g@WCSiz%jLzyjikGijF*3|*S zi;&}=Cc^1PYA6@RgIrA!CyxQq=?uHe=*;ynQ35_fC>uH7Zk%$?<|g5}2Rs=W8i4XKY#uj)}__Uwu7 z267>?8D&@>`pBOAzJw4>d(yJ++ZlxG+4mjcTnk$Aq(4suZ8ZVg<^;jXPG1X=1y@i9 zLU1ATX`1a{juW+4pzGS9HSLx#W54)en+HJIX+Ap<&i96Y#T0|{6p<<(AL&$=60iI6 z7&IF}rFLV03y&-M^5teLXMe;0>U*#6_RHSrLWULeNa?a$YC+h^44*ch%&+j70A>l+ zVsmy7{gQmHMi2g>28LF%d=d;~`ObV!9tE=4Xn9XgGQXJv%Vfo8X>3={YcX|?gJ2M6 zMDHdSoN?^g8W@-ArWauw6BGLeeakSHWwRcQaJjW=$R)*AVlI^#c6rBkZJ|c6(6Sw& zvp3f$Frtv*wwt=z%rrZF;S}e#tX2>>SD^>mgG_%3+q2sj)I5`TQT%xK-RkM)dsi2w z|JT%>l7_X5t*XP()uH#2!&tSfJ@h$)Jy`EzkHt zU~}8~u$!pl*l-F7P1jAn;s>Lbs~$`lq2iFU>dyL&owusz-N>G|qXZf7-=*AH-a1hIeW0APn4!J?QUQLXE zu(Y8TfML7nZX7^R0Vs;XkKggx&8PDg*?sTq4lec_#S(7jf=KE7JJf`~Nq=s=`nWUd zUN0wA`1_}K;bQ$+yNcOTB`Y+nG31YLqvWL?%0sPn7aJY+D+@=loY`Nth9rxU&X&hT ztD)h|_nW~H{AVqNi?_2xWfM&XsK%{l)Lx%;aIcupE5j?kPeQpYtR}HEq)Wv$nWZtZ zl&-kjgJ3Q7!D))r1{wu6A@EeH?G3;anxc!|#z z9J@M7N%hz#F>imP^ZhSv^V^7OhA|m6`fJGN<~zu=EWqXnrwPX{;|MCd(pvNLBB;ra z9iwc-d0u!8d)5fEAKV2;M)5K3GAT#dVe1eVe#QB`=bgpo^oV&rwWT#FZ z3sI#vf`}m9hv%a|u*ffti_hvX3R9F?yFX<|<{3^j9Ol4o_p=crvUoI?oS*5~%%>9p zZnQHT9d0rR9fCeZ&u})fCwt=BoADe$MNyh+_B)Rn9;j*#K`wbH$ z0;VhKz^1N}I|f)~M=KcLP|QA;*;~i+YYa|EHv_5yP{kxwL&KNXg~#n%9(CaaJkMnk zp}(ZEwb9j-JI<9r>T@ch0F7iSM`nU9cpvqMxrG&&ls233R$|(m_3==R%2F|%Dnh!I zG1q8!rC5i9B#$oc%`guWWJzlsPE=DNr+1+a_Le351l5DT!CDN@nzFU_$FLVnc=Cb~ zPWNKL$f#-S#Q}#EhzVEs;(&5HSn0Eq`&aAy=s!(s3cy8=V}#wlp4nDNjO0~QE}u`u z3RaQZW3a!GB#FnTGV-69`1lhg{vrE*_#~LJj9Q-mM^(z^T&k6os}1ja4M+W*5T~l+ z2qP+o&$|+uS))#NcQ8z~9GOn+t!=|fgUtcO531oeIf`Kvzi-2MnJYwta`XEt6+XS@ zSV9`4-E=Tg^F;3aKg^ZbCntI2H?&nDMaDYz(Tbo)_@q)M z-8%@?KS`GL`x<8MfInF&X}#jHF@uOBCU#?G&@;y)r&Pl9RSLZCd2HjVE#ULMm4WoC zt+f2w78Lt-kUYb@WYVr|b<{ItTEIiz_~8r@QdvB9c+Ye9_#oTQFHu&sS*&x-AVTa# zu)MyJvO{#XWmIK-cwf#DL}jCs1NjsyR)kcxcF_K8JP8dEimo@_BL_C#iuHKw&IJ$V zD;MCDWaWHzg98pZ-)4=@PQK-LH2F!|rKjMeU+VAs2K&1-Xoo76n0J0MKu9X-vtsi} z)smVuW|^H9E{tka%9bOqakQ{%hLyif%^Z)!98^tYxVsjNI>sk!5PSOG4=-E*=URo) z@F*1@zswFkU%eXD5uQr4VB6ZG%E@kkTQBob0gV(9E1S|CGhp5WDgQyd(ZIe%PESzH zy0eU-n6lehpXdOuD}CQUx_x(h!Td-J+x9a-Y^VM5uXSFs*Fdhs(X<4L!RtCjI-@e?sh>U9_&Lu z*k`x?Jc$DBPL7wpkZI0WXyjMyUD570uVS(Qs4+u{p7mh(Y^JgV;F2juCUu=vK775BS+~t0c8IXPXq+Q){O!L?3y2^OR7v%B&zPmq8L!mJ>j{ z#sjB@GUGeRQmZ%8;f>wm(U=P=d(z~AJpo2oJ7jjI*4G0MAA*h`Z3-+fi+46!cSmaBi3 z?j72x?Dt$4kW5;G=srj7q`ES>T#g~O8r(M9@7Xd~HfYHkdsnYzaSk|ZF(mQ$Ymm64 z;_z$xQVB#H4Y94b>0#mp-kcvgkxXtjEbeo!g_lDuV8?DK7FrPupK2!DE_aO14q*{> zb*pk;F86S17lB%J_J{(2?=_ID{hL4nyJOyQO6u()L~5?LO?MVx)=zvc9s3SCHDy zp#mAp-Lt1%zeqYp(o>@bNCpv`3qRML8?%HH>(10Qp1B})R<95^aXK}hqTy(|C?+_= zN5-d)0QxeU!z^nSiyK^M0flRfB5Et_WSzJ#NKz)?fL}DhX@pOgmihekC<8CmaD~fj?HsV|siyyQSlvfH6 zVE3=frY+XKgg1L|{Ge090Z1)6V$vm{LQdmua?S{QN1VjlYvExpfG#iG+lem%_;bsB z%=BqIv4Ab()mnf5S{~y{)@U2g{@8^&OdA#WB=w2Cat_TCZYaOb&4XnN+Q+C?x{2cZ zfIwQb;L4b`yl$4KV_E$KP=YUV(o+AW`QPv>yH~m_57wORLMBB+1LCk33FjWqs?dD+U{tL z_{BMdCGoC<`pYH0VAvaJ?n-L{v1=?CwU z!R>F*!HIPIJqGzU+ljN|GQTfH1R((Y+hWlnvdUR2^=zi|G?~YWs3-dCN3~2%#K`G^ zYMUpS7dgHi=pDPpIaLR}qrylJKSp~4bZ~x~cN;7xrw4*DeQ=oEfliG1+Uo9A<0RIM z@iuDu2ZY=HQ5ln`hfTVs(&+j|J5~j?s%$RatG%aVJ%jCs2yLp(KK>2#keC|DXsIyQ zFr>0x=yu>=*d1EKvU{gD!gI7(S$fNTwpDc!e`j%9GDdeLUa)&O7u8IEyZ0Wp;xjgv z3cHj8@Hpve*RXl;uUB-sw|9{48w)KBT*Smg?3LQV)?{gIWpz0)kwW%e$N6q>5PQ-p zhlH@=CCfAyQi<9n$sn07!umnzm5`lXWqJ0022243$nOGL8Zf@-?OU&q&_B!0kHmV# z)HaP6w!O+_s+Y{~dDF5Gz~vv7Pqv~YkZ$#^7mIH_NAS3Ne^yk9^EJi0KtrF({zMfX zEZr>d0@5&mL4Vx|&C$APS-M;+lJeR?0lKODAt#`b#Y*l2;F=uy!;vN%F>Cib?&nbd zDvI@=L3w~0wEnnXV#xJMXolhL+}b5IX@}x-%O@=VXmtSQ+_Ca$|M5XNv%F|B(QguL zdlsNOCMmkZPeHdd<1@)-^6tNuuMY?^$)>sxP_R-vn>36}!e+{}rthQE%R!v3;K)@` zQffY9IM0@ZGdS`dsofKmoi+Pz^yGw&>-ThX%_VaNdp&P^6dUCs_Kg_JCxVj})JZ)) z&rLyPYhH_PdDHOm;|~Fi<=mQpiZu!NvBS01Vq1-ZUYb{#%N({}@b0V0OQiJ!!yP?7 zyN}U7(%Q9EOxsVy3W&J39GULgVfk^_SuoHcV@sh=}X7 z_<+$b7lg8Wjpq+0^QU&+`Bx+Q=l9}Ll+KBV_E+wvJvq$x(qTs~Mz1}D^k}>VU+B&r zqfJ}1uA^PpU;S+blGP!oy$;m`F6j6rZnn7hd@fpCv6hYThv_%}v4tSK&I>JF6e_)) zR;ZMMX{Q69YL52IxJrsK&Ip_Y{Z`8@Azmu85Y?QJN5dGx%7F%!@9PJ6y++%h=}3y8 z;>%92R`_UOu)L=4CApi(M?v7!0Z6NIN40&iQ|zx)uYq1>Bc?F*+%_B#By<@&MMt@= zy?&s7na3JuAa>L4<>DMuxK9Bt>8!|lK)`<*a|8kFO}nfEnv-|ZdzxA|1|YJp8nd|U zXW67DP@p|5vO3dB64By?>VYtr1usyYdk{)P5*1!oFR}rIUMqrSh$FEw(O1OoOL$)K zILaf}+;kVc|Js4!+6yx0$wTM^)+tSc-BrdJOpWZ9@hZabPSeLK4$@}BGa_2ML&zT@ zJ&yWlbdodkkv+HGJ6fuD0?#7x)lC`kHEv}l)AuDUFP=uHeaI^!SFK*Zw`G*LOyZ^T z5qh%HAL~Vzg-7GaILfpK+(sk1m}I1Wg$2nP&nYVAPnWCB*#cnE=;iJSDdVB4(kx!G zQmj0qySTQ@C+nw&dw?V8O?xz3{r+MT+7i9yVybTrPo9lYAjH~8Tv%h(HPawRAc zQuio>Y@J=NCEz5K6K?0ij#lc<{YJ*?hW(K}?a4R-G1NXEunulK$Wm3EcD_s4*$wtm+yji$Noa0bSr&?{g@{Z`?AR|J)#7d-R)s4N6Rsw9kX4gA@ zbDdXb-bX%^b_&I4mB~wPk7$yJP1=o&kD(!sQ%Eq51gs?FS8JtXHGq8Y#B)0aqqc%B zE}7UpmM?ksd_OxcNU~JMT_5X!%}QeQ(8>fFR}H&**k~Q*lN8Snrt{%R0JWtvz7b>N zh^0^hi$(tmE-_cb^;`$LD|=%2|7W}@zy#;{Wad-HD(Ro!ceP51N$SDD#P3SsRNH^p zll6XSGGVQv;+1Nr@uR?E+%t52-xO0V;3d*C{`joOVZFMkE=AY3klsp5yjs|^kh2=; zs7v+YZLM|Ne)#UdM^pf6mA#!qaU%2rB#ePK77Rx*TFEc=xNR^|oHUhY=Zi&9BPoI1 z{WQXZpG6V%e7y)YGF4e-uK<2Nu>eqC((66H9@35UDZa!=o@FCS?(9GJPmgrDe32-I zB*Howag^uQx>ybxzcIm=h?ZlYX6#Q=K6BSwNB!x-rOq~t1yH$WZxG&qsCVWC|5x=X zb{JP-(2)Ez!+-s#KaSa~Ma~$W{Ad5`G9)<=kDvAU!(dBVkQy0@Yzzm^#Ghr*Yh;1N znP==cC{=;0R??sSfphq(PP^N_!U53iQqKU1Kn^Jn`B77tx_z#(??uAnJ^6YF@A3%9 zBM==U8Fv92;r7mKg$<~z%DD~dE(6>mDH7Fp+2GZ3q2*M}!=wW4=O}4SM;-ok^pJIM zZFGV{RTnPe`D7DN2NH=)A73_jQV@7*h-=!hDQz^AFMdc0v+Qk@~j{>63>fwo+FF5ymuM!&l(ZPnVAO`3gd+wJ*k4D-dO`jI?snr zM=MRAF6*0?lwBx~7HiyeFxB*Wd$8;q&29E>Uzq*vrC_KpfTTvG8Tvb)qCf$O&HlIH25A6-y)1`LTTMkn799+1qi)oMW0N$Uw@do$>LL%W zwk|gFpmHVJ7$Z4XO_n+H;2q}a?>Q2uI z=m?=m0xkryQSoZapDaxw>sYFB{iV`Hoks`#!yCJ0#?d+*-<3%xd8l|{)-~$y1CS3G_E=W>W0*TB)zqbc@uA5H3`5oYS&i}MjiZ&b+At; zM=L|#L%x+Ue>U7YQwWZ}0>4xC82oHv6z ztr489&KV@hN?}jrX`<6?ah~i*^hj!P^+&l6`{Q0*hw+Ta7-bX^xufr$D$M)i^&~p5 zzy@O;jN^rp)>4yz2h&hOG@7z-#&YNZFnnYl08I*8h{a*nxU7To1Bh&VN25vz5Nc^&(LiLwF4Zl$n3j#Y{|4s#UfN!3h zZ01`}jGx1$=LkO&GFuUraskD2cVku{V6#bMa&tW3`#`>CG91k)$@tKTBiHcWM2b+{ zKSRA2+G^Zs%$35t=lB*-o;M83Jfr~zl%>=oSQS&RLhP5YflCAB1EF7;aJB&ck&yih z|FX%Gg1O?1a9M}&`cn~Ai+z!;jAB4UVgMB*fwiZ$shg$(mOJR9j6>3&%w>O-Uub3K zGuGdFS6=<)2msb96qg67;8!0uM)D7aPjQqwQhDmBqV~-PpMZlZuyeb|*hwGKP{E@` zp;XYX!rHSQ8e}lHS1@I6L##ZG8}m1)xT3e~?CQ_1Etf&Q;r})E8?>%?A<&b3s-p*fVs0PyOs zSOVY*(QFvut2loOoCVovLv^Rdl>N~q17`???y~6|-uvkz-d0KP{V{c=hs4btc#eqS3im!N;P~c$}3^rcu@rLAyyA5n}~6FFX@2Q10ga z*X3KEx#EW|vyeStB`m#Me>P<~%AOL70(ph49N!#zJ|!WQ5qAJ>{@Ft&V;?`hc6X_5 z(dT$ShD2_k8awe(nB1ZYHnD@#mIc zht|)!BLoo}3emqhwVO{LH3>Z z1s$L2(Pgz!u99mqAn8I|yM{nj_@TAzcc|Di@U;R-f*{yfm5CH zqxX|x9uCzW)bp5W;RgT1eeu3O5=2aj5JiO^PwXbJ<|W(VR7iFqyUX#@_s-HB=~}vd zw+F?H(STWvtqf&qn+1c7J-0;ze}l6aiImA=zN-<-;S|nv-QEB!z^Ke6YKSKxA4QS) ziid;cZ2hp)ujm@2KWvS(6RAkXYXg{7`o;PBUSY`4uc`v@PKDmx4dF^vj@;V7x6N93 z$ewGrG@#Qy-Ar-fDlJ(K_;I+<*gvjunxt#Y8i<9$QP`_+N?bO+8 z#yxeLuXMy?;JJB+QHEc$=T~TMp>ZQQ$EtIP3SGsUCmA~lMsPmM-fuq&!gGyzy zK3yB_=*-C46OJ%17iYw#g@jM67*0|7`jHp_|0y*k_L3MBp4{jM$v%8={MT-49g%59 z9gMHnZ@7LDMA1GDRKY5EQl;{N34Yn-pkGv+RdYO|Un(wco9^5%7etUf^wD1db2$zi zlE<2%AO7l(U1HKc;UfDj3{(mOWOSwLS-fE^dUY|nzW5k&w5Pq7Dz3iE-u8;Yy8m;v zxkLri#*IQ`vWq(iZ=vNrj}h>cGQ)|&W8qMW^VIQRPGBJ86D~aB0GG*Pt!(Z72t@?Qa^s9>2(9i;Aiy} zqIkzqqK0qobacx9iO=P*U>hT5?R3S`(1b9Icf0`nx{#uLkkmMe0^x!G=rGEi;aqT^3z;jo|=6#*z( z)1?O1O(;|)Qvf)O?*A$d`F%z8AU$I_H&=uU)&76EblE7UjlfM3{k~1>@j3@R(?X-9 z*S_B6!iZkHkMjp90Rt4_IfJ>4EHGeT|h%{D}CkhXivB)NEY;)m3KG3=Jxs z4K`z4q7{p4eo*?^iOucpGz~e(`n8$3eIeQ^c(rB33R$8)akC_DezVlRVo3m0W}UYl z>%{PYaxFt93)>ymlVubhR)|E}xbDV^`F&3|B8*m}9d%XeP60^k zvViJVq8>2&(H$77=>2h^aWZTf`pC`Y`kMQU*t5eiBER$#U5TaIf z3$Z}K30u@`TOu26A4>?5{*v?bM=A!ML~1SIL3?YRv$Y+15uKh4GG6!?H zg%_3JwQoS*FeYUZc73o_Tc1cJy}ZN?{l|YyqHygJ232C7^*47O32}W+Snn%=jAK_y zy7}{FIo>;NDqGPYV2xKLN1)O{OXIHdV6>S%D@iJoPe|;C^J4~YU*_(zqz|_ z#!S)N6Tyf+T4-;g#^< zDSI+&N#lXXCoq8FOO$37aZvxXZQZ8nR3`Z=QU1<9Cf2C)B}Va*_51BAh$6zP?yz57 z&@OWa)2Rj|YXMtG{lg)LrQ~tIaNqC^p^LwLLX%i` z{}nLyu#^&T2b3JfUG#VL;=;Ok{=$+&&L=XC7W7g|%jHHU=ImS%fQprDqvG0nvF*vS zyJPH*@7{Lvv23hKQ5Lw3yu~G~pRmExr}5<4v6re}u-xJAid9c-{U3-*RU5SU5`dD8 zk#jbdq92)nFIKt;`{L1SC0lB`9o^Qq@kt$`K>Q6{IJ@1~u9fFOIG^e-u}L1JQknU? zaGlsai2;_Vtn@yQhu{2+mXWo3N_|zoH(>i{PA&xoE6j+PXokv}b8tnx;(5w;$Vw63Z87ph6+UpgPTjZhX7Cox8cEiJz|y%S!yiu{H_ zs%i-w+e+w0rBWuAD#`$)g9R`&mK$9~%b6+xG8|lcC>P4{au49IR>2j%-OvJR;1CUx zAQ?}>UJuK8NAgT|S zQ@(6a=XcF-!pL~|Vv9qwj+V-OevC@W>@X)e)V(&b5YG3|)W-r|d-Uho0NT`W2cCnVG37e>5j#G1m?U7u<}agxNfku1!GebG3jp^Bqc-ng0_LB~FFbSYOM?qS0tU7_6Z-o%Mz}rbc4Hv!Jr+IXU2UD4PEXI4%-HbyH>@mJHP3;bY=6tR+jcfpyTKGR2Y zAeeWuC@;74&WkDV*pcVwfI|_rR@`}RA-$Hr@h#WoFQk0!+9YRs;XgIOu#J&@1Ettf z;VAGM6rxv^p@oGZ4w`T0S>yl{ruZNbf=dGbf-Cd0j% z>z4`2vV3xltNHg5(R<@2PUuk!$OiW_r|`m|btii071Xjzj>NG>bS@`pgFpm271w%G zvTCFLM>-r}AfSf$>=PUTr_`Dh7-VhTEt>I5Q=x1|N=bFxfIv?+dSbgp=Zq^pYUR%T3@(MCa2=S7$s1 zq;y}q5&m-RNl_w-`>eAE#Ed@J4SK2|oE_XCP`Y0Ka_+63Kudu8XS~b@gc{Q*N;eAc z&7`^3NyEGJ5I;Rbo#t`r9`T0Hj;#EGz@W97p-|Hwsn>kboifBoZ4$eyL%))HPY;Wy zXidFS;LPa;obRuZg2WW$?WT>2T<)(!aM?XsT$w^M2{5spHe%nFS&xhK*PstMKf{Y^ z3%pZ{lc3n>B4?ih2KwD+)w1FC&t8lpp~|T)1wBUa(={IlEi!KHS_|w{B=<7i_s|@9 zu8rf7P0*n(_hqKH^xz#_Q)*OY>Mvy+`D_q?z)>GWh^j_ z2^~~?0qP`c&LFQWIwA##d21}kyA8ojPY25UTu1J;R z9tXr=z$1q6RIJK(CQG%=&bSE--@~L47oE0&$6*rflZdFc^nNgi7cxs(7d{NL7T74E zdX69u)Jj3~CzG)I!cd-5W195NVi6A2oOXuAsV5Mb$PFXhGU}&T(2TO8N_9AA?vm() z1Hu+IDIKkgKP7VGQR%1NM$02Kr4p^Qh9}QgT*h0|6k72HVp<_aJ-42|eJx6jX9|`^ zzF(#fq^HtbHic=G^Iod~V-f{wb^5qD`Gly;sIQKWJh;Rn8XSEMKDiieIAf3AeG>V2 zzg|@f#Iz&jt2X*`5qx4k^@FfbZC=S+69cowDsIrIs(>#O!kbBz zywhVb##g7yd5ZJLzYR=RbEtChsL)CbPA*5ci^)PTC==~LesUVFdJ;WyRn4os7DX~j zQ#&n;AP^`M3+ca(tp)nZKi_AGq^(`RO%0~-4%6R3;Odvs@@6WP4l~>H20<(oj6u2k z(#Q)&YC^2Y#b0^()WAv%Mk~$QrYsm{>tb^-04n#m?bab|{is~N*Ru7^=E7ED} zL07HeltG6SWS!3vamiQ-&4w(NJ&Y184Wq5?wnxb1upQ5vA3~jT&k1Nt96KM5z9LuW z)Z`N+7!&d`dJv9YoJM~xJv3fwRa&&1?`pO6peqbspf>NX7&2BN*Yxs;!y8q7REVZv zTb?zPhkF5L75}7oY}jd%C!t}H%SRRSxhBzcr_Qy9*1v(V&*-LkWY?O%JFiSi_~tGu z$>l_G)UMN71&E=RKZ};&W!(4gOtk=wU&einGqoT(Gp+tm#&JFTNg}^c)JnV782UE* z>-a(vkUcL>u$1!uhfl%@ExwJaoH)w_;xG+xSv5rHTekVJd)lmPq6}XRRbDx6Cr%s5(8sd;S3FQR zil`(+!rpI>ad8X!Sr1bSS9uFo_TcBKT4|8!z@R=ZHTp8 zkAJSCW<#7E&isnAl?7yy&e2_5MGmzB($( zw)+}U1O-I8LApa4DUlGQV+fJ%?k=SpX&6dEz@ck^p(KY!Iz~Wp=%LCxz0cY6vV03^QwLFnbRnhfCckMQ|Kk|n{@Unh9Sx_i7fn8Ost#QOWsdpJ z-BnPGdK{@rD?Jmy!Gp&(eTmbv&#bP8nQ*8q`cTEOXz3wHpz{veVTMNs*w=FLIEH@d zy18vfH#e9ZZv|q}W_sLL-kDkN+$dota1c(obZ^H7$~)4J|I4e{GjO$weR*p<80=dc zcYM5_pFhvTokky};FHJ9@xD%1OKBXsZKkFdG%UkhNeM}9qRk_XwsYglc}3WdKg7{D zyWve$pYok_E5?40t5cXE)p%{2Rmv<1$%UYm-O~@qTFPp&%)6E zckbj&N=9Z!FjVg0l9CeWiy;toRK7XOa)R5+yGA@aE!wFaX@*-#J2uHP*i`0iBaCda z_Kdhwv!(n%;2G%It9}mj1|ObgNC7iiGz7`z-8sTf5{NkzfP&QB;pcbRI(apWh^Xn za_OBoh2>V@ICfjzL3(`+Jbr*S1}ZFVf8BQw(Ztk^P zi8@MnGijMjNTZ!f?3&>vkOkasF9;koKa9~uz_%~YyV4pOefB3^eLWU$oEH7h4HD%& zlPEp^JVUDMLKAg!+f(X4Ej@Z))3uLoW_NQ|OzL;hKUsEjh6u#C+Iw@{&lX>Wkc5vl zJ3d$pf|AQu0INjA?%BuLJo0cXF?3z)mo25!<;%gu)ZOm8vEs@??deh~Z*aP1{`?^R z0sL=bs-H3S?7alggMpuUrk8(uA_JpdU-!PmKstB-AU?TEa|G5!dn&czY!JTox-@5w z>KqzfG+U0J;JE=doaIV(ZH~L%#Ox((f4ILHTAB{zJ#s5pZW&8(oD2_3{@gulh;j3OFLZ|l>NBM&40Kl(=1pn9<&K~p5#{9I%V#*k zh+Bd32~NM&m=8mEIbw-5dzpJ%M5lla$20WLC7uJGH~p3UY}-Ho@N&}OKKQ@WIS6<> z3mL7@GvFBHd7tI;y5o1JlK7(qkA}M~sQXfx`SqSBK^JE;W}r}-lku|!C?Ztcm!dBc zsq_tg-fX$h;Cs+!*Ng~2aYHx|L+8v52|%{TDq4bpcJCyeEk`mApHTXqOX7rX&AR&j z{pS~CZ=&$I8VSAW=!B$%L$k#0)vkBFUqwwjDK%3Gh45AcRP~%^8~%<|6BO??2+s|X zV0z%P)`LKJccXmgkR`?h?z_{s-Fg7C7Yh`5L5UTuJcuHC=god3ui4tv>D=lopWR0E zz2>uCj8MtcX=0O`d-RE>nR9yDgfiTBEE>+_l89gRyKTYH!{%!R+=Tx*_&#|^a)}5j zv--PUJ>+%FtEl{kEoA*r%3c)g0N-`P7Hz zKg`pdhUtrood&YCM$r8|qKJ z$!Wg$;B&rE+V2?!nK<}dpmW&8SENWX<(JD@4Es#o?h}tz+wKACnaO9}{HQio4PEzV z0a9vQ)_S~94$?T<=T6~Yxpc<^2H=2geP)tE^>zYF)S4G<-j_3O^=0f#1o@aO7F`HE zi|&4Dj6~MzTx7agFE5iy7+2pwsH>OP?=AZL`ivXvH;{Z2fus+cI2&Ih`1z+t*>-coEfY8d1?vi==+mbL`$%rCcKRRDf$9j+@P!57G9o)1=u`Y<3xvq-|KqDkRmmsuwtiWl7fw-HnEn z;#ZfC*2`Sk07MBItG!(E?xv)vsUuXHs70$yP=pD^vE2)u5dUk7 z9n{WJ!(Oa79g6~6meL58i&b~K-=%@>eALmxnusyVc>M|9A%(Szh#HIH9&18+U^O2L zG`TF;|3>`vn5(wZ8;xfDPyBXWQ>4yl8vz zdH)2k9`*NF$OTsAwsQ%`!M5H1T1$lUR(f-DxIJo&>zaJe#Jv;Ua1?sdc)BR)Z933C zyAz?YId2;tvvjl~CCGgf-N0hElv3L(CN0?r3o!xMmB}?2vZgg)?F8nTk-#zK{#%f(RE*}5VR-Wuw`LIEOpy*7*gbV+ax&VdCT5#O@CU2$H zIfXkv;cwS|=QC8z7g0s4^IF$8;N$Ty=&U343z02R#wDRd9esBxz1=1;OMTu1-%6pp zIa?B!Y0$3cX@*k8-;&cZJ~t-cS`l{7Zq_7OILfs(gw`Mi_fNz54oe_e!`W~;601BO zYOgf98kP9fgnW_ZeD?TBS5xehDEdkNyOz>?RlDZ{Mcw+I9 z(FVLyfb9u1B?_B%5KO3>{Q0qZbRIYdnOJ9v5&OM-1@zf2KwF+E3K^Mv*^c*b`+lqR z_3JM_z|8Oa{nmY%^@~h0t}T-}_t|GjjiepU?9~J}jBg!#$`)$!6(9aET z+;B?JP_mq^5<3=@u=-MZ;Eg|3^EiUpym4O&0}{sPe!zgUVQbXj;3 zF{#PD+Dh!CAMWKZosNsayWPu@Txrk?1Y_k_B#aH;LiPbSw6$o5;(RxTbzAK}IHAJ# zSw~jl5(lF0o?$4}CS#xY7T_5(%F^#v=6oxDQe)wdu;sf}Qj+ql*bK~67~MBeTYf^& zFvYGHlTxd}{M1Z)FbrRXaFIBuBir6$D5;c-daR%|jQ@Z`TTcJDlb*TE{vgg5#G^v` zUkFS1-7|^@M!a9%93E$JNqBL5*tpCN=8r{| z4)Ts@sE&t9T7C-4mit;(i36Ho*`EyNR|vFz*|3eK@L5`)Kik(1PO7~y3cxXi^CsaA zF^%Um0FcGcOSeQXZ_*c0I(KuZp>uqKb85Agm#U%D*|)=lixK8+^?OUROkcS>z@Q^AD-iTn%%ZdRJIU_521hAvfex*hp{nP+3LpS}1 zi)TSG7=>BAtVFcfL(xRxA!@aK%B!DYH0|5?aMy4&g;eSSviyZyi+j1Pc!JTfEK?78r=C~5~q z+s!U^QR|sobi35b=3&}K`#6>9h@NZlUXWElACRmrY9hQ9|Q*Gcj< z@Xi*_=j3x=_10#deK`(w>E~cyu9wG8pOGsZU}3fhzkdwG;bgToguvZq(<;?(|9?&bZ&49|Fy&t4-FrO&y1q}h^R2x(~-@^5o{c}wH+9Kmb! z%i8Ow9#HoL$TJNnXmj7S5?7H&Cd*JZfA3*K;iWPkDgM+3`bP^8gTu1Svmx zm`o+*MWIIJUIHjKYMf9rxx(sY#k{-8p{};NhS~srLvFl1gHD@~K*IL(UPZ4gIgl`D zXZq!j@>efyA}aK*PuPo;VWD}*IAkHF<7zq6{+}{iYTB1rCw-R*TXh|0Db7G)N#eBj z1GtlCR$*Km23K9)S^jqgPh5|^*RFY)9U0a81y+ZyuBANYZ>q44AO{BF)tkkRCFSgN zpC)sh3}}}8PM=e^{`$JzU^LBlPAZxe#XtB9OF|fJ@A7c{J-BXN!nUVrN`Y9l&4&dD z1OSknAGaWMmMBt<=Nxc#&)ep6Be4iJB=)ImJOqcEKGQgYKGVhn+q|*_43R}~6e6_$ z@9pGMoF|ZxoCzig!|B4vE9tesFFi~YiVL-tRsZohRi0-n0&&cgPdcaFa4ZV%ayLg| z8=LM=f(stBe;y?^>gy}rZ0e%g42x%S6w5W22+UREX{Zvr!;y$Y9yFl>EM;uudz%Ou zo7ugerp(Oy-Qac1NX?X5hck6n1?@z)OepRG($*PIXHE{wI#Qd8Yzgwk`(n>SzG*?w zq?KB0HF7Jj*x>6i>|=G++-k`4D7`x|kU3i*{AA78@uga_8zmLYg9Jc6fm+Yyd6e+c ztsc+#3S_3df4lT#&@=Z4_{%>Ru>8>at}^@l1E$FscmQkJ#`Lw`Z1J}Mkc7;X*X1?u zIE#Zh8_`kUB`$^7F`1ce5Aje3@Q3=jWnE9@lJARLiJyOJD~xv9?#8gG;~#9<2Z@IU zght0K4F^YVsQTG(Vl9CrH(vZevvu%X#H~Oh-oEKzAc?nSP++Z@Ytdw_F&qQgP*7n* z30^jBUO2bhUdyaCXg1CCJD(>&3G$XXy9k)F*ufzh&gihzDCV2=mba|PIHduiRwvg| zVDFGhkq_F{LXr|$04!A_0UQL)+q^F;6=X~jh%?1(FKs9JzpQC4*H;shN4DAa5{&zH z;#O(A{hm)0XQrOJoFtXBL%?*lB3e#x&hJuBp42TVwJxADIpU!$B8s}rD>^tVj*+Q7 zBGk2QxdA(b?K7~~K00b@Fug%?lJG4Mg%l|~-@xO@;3GE_{RSP}U^ zESx{&=Ngbt1f05;V4rJnXJ9*zq&Ax`j7bsfY+q8W(px;29JGD*szf{u-4vq%V|CY$ zV%p5be>_DEs4Vh-d{xz}PMwdc-x`HyyFQLZ+cr`TxI;q4!mD9qooIVx^IF{Kx@vMT z`;)ELrb>aX25RWCpCq0QBQ1|F6Ew?4V!S@yA^fPQ1Vv2|FYa)b>l6+KX3y`Cj?O=i z3i|rFR%Yf5Yfq8XJWR!4<@UR$uieKv{7yO)P$ofT!!NPv#Fxro9*F8x$uvGg93h~IHA(TD$e>ha`AJ~(&grfMI6p5iZ%p^&)tZ zdf0qs5Kc~RUkr|cUCqJ|LF_d8j4w=CU0GYy>QEQwLHwCm?sxODC1D>v|mZgCA zYM{2T?jI zX@4Ea$jdnE+~%EDAGF!$OI8W^kMlm%_xO#FUAzProvb59x&K5Y30n+dw_N|i-r58J z<^Ih0rH)h2T>DAOrY#RmJ+*;mF7e5=PaRI2`o0Ir_jZ}jHUjQwM9w9W0pzCVg)im6 z=u)73%h;XOvs{T}8UkdR+nk;MJ7r^eg=`s{BG7a}Q! zEq@M*@$Yo$p(ReE=Ho65qsyR8pKk_b^NK${%cD;SR1dvT};^Xl$_9{XV`K2 z?fNPD>~G1MvXA3(opLeezC-DKe2$rZF%0jf<)`o&*BSCk7GzvP{n;j^{I~8q$&{A~ z*3?vhmqUBpDS=MO-Hrl5n-Gz=C4T#*C=3at`KYo#d~{*!4Lfqom6B#hXf6TTckWxQ zbP~$G=<=xvW@x&p2@Dx9@be)ZNh@zYVmQOXXD#QN|kj;q*-%#9N3mu=ju9ngX--oWqQr;UC1>Xd<7PEMOsi12dmol0e4NH4>DA zTo!t!$QxxoZImG(U)^#+6lrW0pD*VlP=WMP_or#jm`rJnr|A7GS-gCLPU3w>Z{XuZ z@qJKZQMvW{y!b-d_h_K-*-*J)R=`6jdLIkBaeGJC)!I~lU(L{dIM(`i^j`C_!n7li zL{4-Hk)SqT>K9%=9z=2E6Vs166xi<=c+YIFeYu>j*Dss~PnK}YOY;D%oJ+!s@;e*R z>ysowz?y}3?x19XobhW-ca33y+1Bq24&5s=qn-jlBB-~^d&zgb=laC@tXOyioM3Vpu2v`s0-I)SQw#s~h}tsR_M&qHp`CQDZS6l}KZ z^)=$7F@^Zg$fK@e$C{f*?_G!KsErs+x=nHO>p>)8?NitGx0#-c2h4!WeU7_rs_Rh6 z4)1^r9lxmW#rN4rlHf4?f$6(*nwKLz#2ESH0YG0=*N{tNpf`MehhwqR=6gKeCCGD- zncRQxJGzi&6a5|=IWbdI<+4mcG<*{`!P%Bn15%hkS})ZzNdO)v{N|;IQ@`?idvSnO z7TP;*F8RT1I<`x?bwHc4lYX^DPT_Q#aVlZPJT`9w6blxm;>~|6Y%Q)UQZ`&~^dNZQ_}#~XN|$jM*^oSoNFh^>6+l{k{2b4H_`O1Zt9)7y+%9*A|N%RId^ zntRt`!v;%T&>nZ!Sd6EAr~5Co9%xJdHWkFz6`mK)9rFsZfv`hf0GV9Lh-oF=f?y(Q z`FYY=I~*VaEbkVbmE@0GPRk&6SF}a#H-2F(-by_miAKP^ow^h1oyv3?7l2;C>niUE zpsGW|&R1ZH{+F_lK`m1T6XvJ^WTjXyz}{MWA8*XI-2OQOn!3&tQGk{QO5nebXD*03 zQ*j%x*7;hz-xyKuInO4>P-l1R^K)L! zRH$8Iwi~5Et{?9p@x3%44ltR*`~aLtNja-&Pi1X_Sw?7Wo5|lcH^a?G(Rat%#C^(b zuU@KGO8@r{-|N+(c!Q3Z_kY1JQuF8Y?uvo8Ks{H&VmPseASWA-U7Hg;D0omTTBOC1Gb%{k zqBvfy+qz~c9(WgNVatUZUsNy!h$yPv9&^=0j`{tLdXu~i5|8-@y{uQT{U(@)CtUT5 zlv}<)##3}6Ni5hqR~xdrB;oPzX2`F90RY!p?F^Mdag)G%cJ)C3agwQnlTY}9EQ&pdbJR4|I=g5KuUT4ir@@k=+jX`~$GNBBeL_2w1qg>Q`_hBB2 zLA)~<+AG?BRtF21d@Z#O@PpwD6Th3d&73k5%W&h~Bk`b(vX4O0WH0EUSkk%W>j`sdEX3M{ceRPn%<3mAWJ!d|0FwiLq4 zMwjqXm}jvLUZK?!YB(c^aNpU>OrTox-dZfR=7if~F54(b{(Gy*l?hNlYGeL1Zgequ zH#@QZf=T_bwC)x1-whB`p!jka2X6 zS@wyK7)5YP6$G_-{Nv|pGw`|>W~4lBFw^4F|EV&uIB28HWtHtH4*t*sG0#K-)_){0 zV}-=Y6@|VN(cc!LM^EO)PIm*6D+r}Fwe)_?Di;2;;&TFBaQr%P6mgcX^4E?=DqG8 z6(7H-ew;rXNi%!?96C_5Qu6z%T_uo)Z7QDF1MeIUCt&kFHzWYxzjF;ae-!Bx}N8*kRo z{IAn)(8I7~dkkb?Q}#s|mGs0Na};!LBvMRewB%}M?Aarnfvg9jxuc4O12_{0ah99aJ}3zxZ)YUWsCF#xgTMqLAW zlnFoic$}yMjns9laX>s<)?=_L%9A6JedQ~XiX}7QpJUG;eVFq0Fg~y{bgistMLElC zoRDzpsVG3p)>JNTMkIG|y!iK^^3ZRvq7}{o)LDA5DhaYy2^eN(ohd zKiSVZbwzoM<{3uJ)F`~TJy1NQ^9eVJFfI+%7#YY!(A!t(dhPR88g^`7G9p%RHtI;` zwq_Y4y$bEmC#i^ zIPFTzWhy5oL5PMpYi6CF*f&>(*#PH$Tal>ap{Y5YdVWvvzlG|54uEwpR$zeA`xW~N zyy4g*Vuior-6)Sa7-O1=3)GT(FpTI=l6r@v_p#X~d0Tt4#y{IAgl|n8NWEV{ui#8S z064#6Z}jzQaN5;&w&i@w!IDjtU1HF=KWy&)MwA)v)gkgvoBpkjR5? zTTd&Mno_t70!2-8gU~Z9jX3glg31N%Vdbz|H`tMI@1{Dtv>$`MeMnot~S)RO!`G=>J z#P{oaEMN8d&f@)}if+KCCyDeYrweJXcP0eyH4|h&ZYuUYnxe)`((w6>0B*TyD}k9_ zSN(*jrtb@aYX2LuhH9#}f!_SxAKhsM`@-(Xxx^Z8Hs0~tl)g-;=r8vFI-T&AhR;x0 zF9(Il?}Ae7+OM^Lq`fOA{Hxw%4s~(si3F%}xy57Gy}MsA+s(E29DL0GJFw?j3~cL& z@un|ofQ5MJ3uLS1=J(y!UfbJ-b3EPPb1B(RN=vOT@``Nq zYt4teV$dtazgu&G6%!*SRaM6`=v3N6R17kPvK%FfO8m7uo6t@vok*DU-N-#-#QdV| z^(w{v=m4KyU}`M6@lOS@ph{rg7UwS$x|~`?Mp2_!3_Xg zIQ=@Z1|D41#V41Q?0O%nzH36; zT1}56F>Jp;g{Hi{K%evc<<$1Di~YuJM+upOu)K}aHEdP5f-s=$`uurKP`5Lyie51Y zd~*g|+c!V3kVJqyvG{O)O)nq~U2UtzkXIZIbSU*NjZfdtTIbSL<2!3{TxBfayb&nK zWz%m>&YgdWt*tX2Dy2-3S#94xDp6%M5_5_)49x0%(Dx!h&vxPz+4I+lhR-`!cKy{i z9$B4;YuKi8{HZvJD_nXcC1f(&(|&WEBrn(%Z)ZB!_CVvdIUY?)-4;VXcq-v#mBdpm z$H6P^g*#Jy6n-*`jL^^%U2Mp0Qx;Y4Y6}iK*@IVF{I->u0$N7Wp{sK`+NpKFhbzRS zR;u}K`@`2-V0eg_=#GyPBuL`aZM_-h7;LM=vwBAyIStAyA@ijScz*x3ME>sqe23Ox z>1xfMQ~~1`R-AFBwZLht=n%OU`9mxN1E-?m>dR5(*gPKh7e@cZc!qqL{s$3sY)GdP zxOKf1>?Dz`3h2olX3}bMKm}5@1K<$;rusvYQEl~6fc9|0@z0>-&r?6%Q!6(eY604Z z;UJ)YVxW&KcyFNaAQg7JdV0ar%?6qv^;!}3JG+mb1PLlm^LN3m(-x$b?$K8tv4}C8 ziEcC;bn0n1Fp!LxUVMQ+dO5(>eTe=HNrYEkx{(=g2xQ2gbhW2O>nly&+v>7gf5q=IiGbUMqJdgCmf9KsoHod} zJVz2&-*muNF+;fh0)P!M?i4v~J9ryYGhMyUy<0tgCjpdBXAMWu-GzkGPQQEACnnz= z%{9gu1MSv0eg)z}3373XY@hv~12V2;i|D$ySzqa&Qh2k%v&7v?SK=nM%IUJSr5o%$R(jAYdZ;mq5w@o9ywNU$h1tOml|3jS~2B`7dQhheb9X25LWSMVn6(Xj9K$p+=&5jn=>S^h|<@hDAQTOcq(;O$x z8%qAHt%Fv%d`@08yKu1=j147XhIfJ!g{=w)*>lzhQr<|3hYjR`1hAO=?{Yl?GmwlL z|A#cLwdvRBkDY*upvJDlZqaXdI%ahZcqu>ADK9Tr9w38}8Z2J-MgUMQkwIgrFF(`Z zS!6fm_;(Wpor>{v+QH%Y-Hd>4J@;3=pI_jyYpqDCKLu%2sBZ;t0YVjruF^L`-1o)W zjf#QoOL`YfQtnMn1MkxfEc~O`9V$^R&RZ7KOfHg*n9_YXMo9YI6#^ywh*<<%C`l>H-3ZGgR4c*I}Stk+q?vGd&8C`ho3| zqj=iNb`SYZsA5jrYQAiKes?-Kb(cMT$W|Da)K9x#<@Dzw*NRVby%}bL2;D03mm%jVx5t=XUJ8|R@^!c&2pVs-SzoZ?RV9igtF`LYmD8HFOBJe zpNNer4fTr$$9-y{ZIYWPF3n`>Q3O5EFVb1+cA^9hQYd`*huo{OPM{}M0=+(c1?GyV zKo=!*++AO^AQ&c@~; zV~~KR((C33;eB4AaD=WA{hl~K zPqo$4OeybnE@M2a6$TvD{T*^2^zZ6-tYDJLlFuGL#a=Cpb}$_)ahxz`o38i<^TYn) z#0gv#Kq|p^@*+X#&*c~vS-`X0_A7z|F<&kNq60~;Ep=U(%iV}l+dEBAliM41oQV{}5zl$JUHV==Eibe6 zyrnRWzoZdj2MYU&US+l4AnJ{{>b5EE8$8GgNj*VOh=j>GI}XlDf0)DTlO440KdIU+ zDJg5e6#u@I85L9XRP_`k%;ulD`wnU(GHQY*cx~2)E%Z>zE`e40 zAq*%bG0j5|#|wQNpdkudq)Hf=deS8$2d)njtXGfzF>blvV3W52cbDQ$-f;FsTzbyt@&TJN|P1-`8-!jo51Bj_4Dr=J7# z@4VoRLCAqmPBfe1q2K{V%@{UtLv>G9C;Uo2Vt_y>4A~=`|4g;o%cg$!$zzQ%yrB6Z ztMzzN>CLZ>u4;VxA(B+Wo*I)z2fQOnL->hh5d4%d46+9{PxD1x5 zSjJ&4A}uaF(OOG$D{{N)bfb|`6TU309`ZVnu_+w@Qvk*E`j!Z1;pjg4c!dVe^C%IZ znI88oZtVx&Ocud-8@w|-EaE!uX9<5*z(D4HaPsHKxuIMyO|!7e6x-9+;N=@>{=h(=eeS}J}2>B=t_250Kaz>6=}sY5cq^}SZSSdqs_8&Mr#j5O#lx~U793( z)MCG8DHwKSu0z#Ksbr}9md@Gg@d}tBvp2UcMShS5gNHr0tHpp+lMZpW_1fKV1-BBn zVJl9?Vv85&E~&n_dm$7hNY$KOh=8f&lg2|~>g6dBg1&c&^vfFla_WOLgE>eOgfk#* z#0B9b_@BwrVBBw+Hp-f$Faa>nm!hZK0Kl>>m6(im&=YgR1X20V`ZLL$U~E$Ti{**O zn{C|Sjis0^7OILJqbXml3=4vp`W_|R+wx!jdAmuDB4L?|D<;(yCOxvxb@0sDQrSiq zT>V}4j+>54j*>|ICrlMvuK8FMG;lRU_Wemh8M3c-W0^jRM(xZ3+K=EE`^PF2gMTKt zz9V1wR&5rOk}j;7{A^Ut|S_J16z@7j%h9A!|5zq?W=Q<*Q z84-Xw4RMt4VUSY%!Ks&_%SpnRtT$_ytkv6USe;J1-wGaEWdamX@4ZipYW4K*s*h-& zpilyW;xR$xB7ne3aum(9vNy*ZHMd}`TOiSt?i+xYX5 zmMHK*EWYi~VC8;+gsTZ?m=W@&mlZ!L#ei~jvvw>IgFp#WyYG@0nD_cUI0m-S%BIyZ z#70d!E({f*Af#x(j`y}OevZ)^c2eWT`08OI6*@NMaGhrkow~-@?tNYs>eF0z28hL< zH-NRfF@iDM=QPjlidO3uY|Uz*2O60c+3x@fAUa?&6m&(V#Q_cnz|V;HTg{`(Yee;q zFL7aKz0e^GI#V#+)|*+2pnw}3+OJ9Rh0NCYPP(aAx5G>zjg2VBDl$uSaJq#OM zfR%xEH;Xq_so26+>qyq&ebQ^!14re+%&{B!bs)iO7tLj2o^^4x;E|l2H>U?andJ+FyD6zKE zHw1T;%Hnvq0Kkx-I)alC1`5|zQ!hEc!_F=sLeaDrD!}Z3!bd3b$&n5vV!wtf z#r*GZtFoT``xyg~KeI$fFtEhw5ECUjLO{=Yhx0rv8f#MJ*j-8ir7d+a0ZRE^n!G_t zbc|4}^q~m(#Wu39REb5)`!g+Di4BVWjA}i1RK8=K4#PhIR`)3dkN4FcP#)FfJ3>!< z7e(H_V*VeKh(A8`hw%TipB zj;3r!5-$dAV5+PBPH=LdnOO9L^ia~(r?6){h)Ka0L(&vY<`^y5KZvRiPs$4l>S7;G zg~MIXvEyBKH+RMn`%Sk`w79^7K(WwWHF!{DnX6A;(FFyD7O~4dipHx-zOFE}JVX5; zZIjMp%-2t^+se@_-lMl?yQZQg0iviNb{LQ3Ai^P zI6NU~Db8{qCd46*cA`P`K3Ju_vA>O4DZA5GWoa1mLVwu1LA+~DP;`7Vu49*LX?;Rl zW6YRKr6uRY!9Nu^vLT^ffbc)Muf0J10Xh~q6|#vmPFs??;S@t5alY&NEqoqv3i0bN zRJgGB+~^d^8JxA8a%?{w_n#@0aBMXV1e61dr^x7izZ~keOD-ThdiMsrf6<DFXr z&kwW(y;1K=V%~cpw|q%>RvKyH?dwN@+3*bQrO|%k z--$MlEk6O1sor;Efz@vJ7v!ROR28dynMKGq%JY_E?z_oqBEVQe;R{$?l5)GdK6zyu zCH?qTr~xdd%&LO^sz&^j_Fc&ybGdXaLz45S8Nwgwfp5z`E>%JxQ4sWB^(Z#1Xy=}h zAf*uvO-=g!xc`popkOV$H*U@eynhQ8W_dzXgo-K)L;*y}=5Q-lD( z=2;VbPt=>ufkA4t{6o!T7#h9_QH}wS7B-7nqO@{=NHURnB;FXTt`hVrD|*>6`FhJ+ zsiNyIXNF}-L8q>t6IbzUohVTe*1ZkUYfS(?-PTfyo4yU3!bH;cTOph-YP%YhvWlm? zi?4#V!*Y!riX<{pBKVI2o^KHF6^?pS@u!%R0{a)XLQZ%!WGDv0j<&(nm)0JJjI!(IiEFhvJrn`Tpn zJ{CopOx;M5rcefY6WlUscEV61{q|O|NF7QG(GSX!&Tnj9Gqsbj;mW+Lm&!9K|K8u0 zSyxi=QFfd#@Q-zLV`9<_n!c@f&x~{nSgsH-1+^zCRmUv~Ba@yE-h`+f=+$qPGyDVR zzETqUBrR0DrXmboO=qbdfOPTf`7E)%#=^Zlz&VbN_RTMmO_kT+NJ(J>mSAg~#_~I( z|AcPa4MN7G_b{IXw%^lI?0;UyY|!bg$)B7q!=qIo|4Nt=6tpjwIR5TgyxcGuo|g2a zZ7OuGQ5?kaIS);hU!tbPpzPYURaIvGzq@9G_`-01OTRysW3=CuPHrTG^Uw*!9hT$W zo~UY4$_(cO*@EZpzS#+yuNde|eg_?}qbT9nem2$RH!0(Kd0YMjRkb#1k}8f6pKz+^ zP0FwOx6_mMqptEow1lo*J_>Y$n>Hw*3)9UvH58W%Z6JGUW!S6(1>(a$&5LB$TbYT+ z?VfI5(%h=cg`Tm6nafu1g}^&~H#(p2*`sT#8o6lbg>c!WBb#INJktUte2RF*#3pzt-^uYH+km|RQ^k-{*2dtB>@in1hi}dHi5A&|7&~kftU_R>|{{kOYEy z<)Z7_f>O~>Gri926tzzWfAk!Q7BVVFczylv+Rl9&g%63e7 z`^xIMZsIejlYWK;NDEP?ADvjE_1@^&BZXJ9L8_-&F(zNurSX@wgS2Sm@xb}CgBhi* z(3I_1?1ECjd}NA`k0S^YswNQW2r}9A$q8SjSARs=Oa`yl2(Ld7WMPa7Pyb(>t9!d) z$Y{#Xps7h1O>Ft)Tm4M3!{@9y!G*XPi`Io}j4~~7qXIam0JXDQ|J7^^FqsPCKUKsJ zgyTt&nEO*tcapL#c~?X`!W#xmRg}<@RqIi}M6xqo01qp#INbri@TY)x*4uDrf3$;# zJxwvuBbR6XC+#yw#enn3$lm@YXuo{^WbPYz2Ac8GMHRbiFjU`hWpSQ0OMdqnK zKZUN=kQ4IAQuT&(us+iLHjpJS<9kKL}`cL)z8H8@{}o3C|*%w!@0)V5a(M=DbJ`tI2;cW7twVhAyIS;Wd1}o@9=sPu@oq`7xtKju z*qt`oLTRvZ5zx8?=Wi+A+zvBJj9SkmJdP*rCk6!d_U>pRyZ%oQShG$2(Dm=Om)Cbl z(nf^jDZ)6O5uvG_%yZRxbXnd~?72G@FZM$CwYjeO+?%%hLp0Hu?|Ms=vjL-0SEuXY zJPu5WhTZpFBkw>Owc1F<+@ag00IO9`tY;u#>EjOn9@!J!(-QhTD@g+3iSiNnVkf}k zGVXk4we9mkk-`ShA)u0jX}%rpan9F)hMLMaF9;bt_TL_Tsrx_AHOb6C^HhvF?tZA^ z(K!1{GpV;Y7N@$8s#eI6u=!cW{idru;pLXsEmvzCphv-UJUYhQlpIo z@Wsn9HsGrS#fBa@fbUf&Mp!=wGc8FJ_u65S*ZqEA)t`og%ukM$d6rHqSAx7Z#g$;f zN|zH%;ls@tsRLftxlpW5T&vx7KDPdnn52 z;JEyfERUX6Ea6>g;0c9J+gmp4Z`JP^i%1T6m%H6c{nXY~rJ&cteJPA>V+H9}CNvPpMnDP6F?! zW~%>st|{fd@QDl7V`2rS0OnvRWjcJN4mFM|Mk{Y#sCPZ9lV0%?923N5THDd$=!xOC zf5X`iL{9^|(F;)^@e5BUpDdOr;phyttF*|HUXx+boG2%6P+Uo+WPu zOAu9-vE?(MBp-FhUz+lwm^38+Toksh7!^R?!@Q=Z#xk$!yz4xcmrQDenJM6x`XlP+6v#8tlRuG z4+_LeyUOCwZ|ZhnE^n0ZqP@R)^mor!DP^O~JrAY1c){GZ?4`D=kl!AZB+h$)K;*Y; ztImqI-|5Po;=@XI-RkbNugKF~7?;W?2~n0p7D(@vXUosJXO2AeY6FWAwp7Obw@a5R zu}rUnjFnqYsjm5sYf&$aR}g;3o&G2xF2@s3Qnrs1>)bsgE}tmF4vE@s*7(J}?hTZi z*7hw%M>%hBOlM1MA9<}ol9<^H`nv^t^ZD_-pYD6SlF9Zxyj>uEbU1v&#ckgis4;&! z7k~r1K;#JKwvc{qji(y`1fRFqrW1_WtoL>d9|@_aFaz9qeq-;-&dartqgqQ%h)`cte;D|>_QHI|0MBt$4$&{9nXFK z8trPY-b!Ka+^9b48O(ox{{Ea9FaUWGQ9uyll;?ZaSVkgAfX2hZs{PzeT+fyFE8RP6 zx85Jv!<_*cG-z9^H2K zPq{%XH8bnQCvX%c*=U~YB`Ep17N!sEC;3b z_j8zz%|X>vn}r%Uik=QjPGAi;-Z?oRV_aV3qM`@8{OV`2ae2H|HtqH6>(yM=fE`d#NJL_i*n`@`2GJRe*|ax0YGL(0zoXxc?_w<$GC!MqG`A zV&(LacS2t>d_hacBT{fwBLHqksbz`<<4d|T-guj5;u!DXHgY~Ec+FcyQTSNWXu&Q_ zf2SktQQ=+5TB7YP9%+~o)P&2?1W*+RGW_S}14&hH#JsmU8u!+sVOcD9+nm2~RrsTAF{8Wawe7w#N~)p6kd_KMEm zN=lce;9|Mv3(iO#po4Po&6&a0q9bmOqkkwWhd8Bvhw}tzF~!1k*}o6TGk&xL7%;U4(>gS!PjUSZ!B` zy^(@pH7vw2;L|U2%4o|BP+zohXMksqgEg2gmdQQb)oEM;u0rWu{5J|>?#=gAjLeXO z(%yFry)G*H5#I)dk}$u+Xe-+N^rS^{+x=sx55Ab#QiEkEJe5v9AVoWlSyP@-0YN&- z*!poOzQkg1E2PwRN?KFei5wN`!lzg9UsI&mzlD*-=1+?1R%^0zkb~?>izFO2n1XHd ze@NawOUh7s_pY;h!7=y4gw?e{bLg1c(Qml8;w9%dqt_0Scm#`{v5sP%6^F&e{*zre znJrJ+pZHKID_Q6q!M#BdYKR70Ho`u}a zTo)`C8wh1eSLMA>AD}}QIwfsS%WU14i!xHyaXj!3P`vY5c2pO*2zIGIY2^o1RleN< z#>%J-hOoQY`WOsx+9@+D?JBA%No>nt(Ql*FT*36kWQq2#-%JF8D<_I6_Eih}sBy4X zZkYdxbCvzoe*IH}+Gp*yI7X?JB9tYT16GbdSjpVF;#~KH(R3zuUd&;9$#hqp<)VjpQZ5p*+ zeMlLoTyuXSbf_Qs%#AHjj&gJxBVj1Bqw%<_)4#S<=WFjcFD^{H4JyVjzz%kWDM8Ote&Pen}w9hU~+p%(1zgc#p3CrAtPmn<{ zT{3^)Vo+j_A4K(!CG91l^!kB1#|oHtxsBOBX6&&&5x2f@a`$CvG6q0fxR&YwI6Cnm*3nQnw1%5|^WH z7OTu-BG{R~IRlKc;7xT{^7%18I{K>tWzJvyj?fwY2->y+Ga09cgrok(#=KQ+&(bgm zfgATT6`@EbwezaiF&2dMBWn$XMjN^nFA^QUejmROHrJ6J?Ly{x1PP-aR7fAbXSmix zym$gezH(K-9q?uRI~whF|E9p&lXU$W6uBgVJVpsBe!xI6N5fybj7xK;w2s>#4xanj zuoMv~Mb+0r;t0zXG}$e8m1qUmV}%8FzhS=JVIHQDZ@%7L0Pcad)cQK))bzDa&l}kG zJ(Miu!|b03`SUzL!&F^k9FFlCXH{fq1(>}Cz)`2~k%Im~tltg&b-_k`5RC-oIx5r;_D{YaH zHg5v$4NBd8YJAuR=Vo004phYu@k@rYDu%hO!n}dovz)PZi@oR2zX=s9eh0 zzP>A|o?JFpPv~<80kAyEOyFSvO$;PNv^^|-H}A6?Ly|>)gfUBiCOduleO2J5S}{rV z6jMQyLup0^z$gqDVy-uD%pF?qBSaS-mAD2bMO(BBa+;Dxm1n0b6_uF%ORP{=C zl+o=_OK_ALa}wq5aLHKm(&<7nj_P&xuRbV|h_tz=|RZJj!a|`vA$P^s1D@;vTm~typ<}$rukeoMJmd+=I%7o4 zbvjPR#?y~5h4InKqC!W*M;=qCPc6>9^c!oU?w6|!XO#y6ZL`#R<>%Wr?d;b_-Pm2+ z4h$s2@+n!bI)CY_s`nJ7HFxIq)W0EM8=@{V==5NY}-i^q5ht2&gVOAs}@ueE#)Ya$s z!>C*8#QQ7nZOXJ2g#YfFf9*;QYdZfU-!h%iu47i;DLj9z5^5$sa4#e7XB3-pcN_3# zI|YqL7(+i7l9AXT>tJT{#1u9j%3o;G`$A0xEC~mHmK>K9wvo>cPye@%5Yk3_A?;{8 ziD)%*Vj`DFClI-^RpAocW1=i$zjQ(+&#d?U{decDxF?k_wCh;Z7b>mFvE00kG6frX*6{a+yS57c2-8b=oAXi#a8W{Gl>pDl`-IrH(bo@m>3;Xr zyQJY8>1D@~BJPb#WWJji1QdmP#ae71b{>p~7a_<@6;pP>?w8unb zZnVFOnT+1*>0q4LI|u0ZDSL~>7wi9C@oIZNK<`nxdwxo3DZ?3DOy?i|lhv?i-l%mo zIu2^Jw2zv_h|!nnL6F{fZZgyStk~d4IMjri#_8|RM4(^IN&{IVoH6t6#fBnLL~Zvn z#f?G0XE!{;&7KSWPJ>+)Om*<(yy<=V>%&xHJdnAw!2mQW43jM4eiGyA^IHhXP>JJM5)6`Ps`neecNAmT! zcc4P-^v(h30er~TEEFTlpTbdGVS4A-ZNtp%5OBI8SfKP;p+rX{N=NB+ONl}22UzPh z7Ss*+D_1`S7!2QasbSBuC{A%5Mg)688oi&j{Yj43N&r!D?7WrDo<#ScGyw=~p&gsb zf-m1IXfrFlO;KZWl8T`}3HTOvy}qb8@%Gx^-{6HmS>!-pkDsAU8Ykq&;0~|5Vpcel&i5_0`6uLYPu9vz7%8{e!2+|3_g`1Vf zo;y~-25#9gYl1h>uBrEH2Q0rh-tgMpZx!J%=~a@ROEL~TFbV-pwq9;7iQ7<{yt5m46u3Q-b`4h;=`t@00CJ~C;zPxvV^y>@6iui6#e zQvbmWS3=KU_b4Xq?Actg0XNRn?GB44Y3!^nA|}FIp*w4l+RXt76jk7i9Tca!jee#s z26B-c7p>>mLB@kS~CgS{MVSn^_qTo&65;=MZ-hE^{vv_rc*_booW5`P*2AW4h;z85p z;6hSHZ<1G-*@Ye0rF=;gVy*Dih9|WKVfL~Wd!7pBIRY>xT1tuk2P7q3b5M*Zq4Ejb zPtlM|k|Yp2h%ubdR2xdt=Yq1?$$5`#!rvkH2~2!Z^G%dUv;x4S!wEd~WJ6sev5dCvyJ!lf@j$o7#qNY`x#@F!ceCXrC;w}c z=cB}G?DubY*kV;n%1ap0pGil%^V>+($AShT+yyFKcI@jaQ)JpNcvwi}<;JM+%6&zk zz3$}XO^@e7R~uerz{;7w3smW3dc^QCJ}`NbdOlazuDjD@((l9+el*%(PfV<6`2+9} z`J*84Zp2g!ZKQ-24U+EZS*<)-(zEz9mFMOQnN7IWt?CU=LYSqFx7S^$|FG4`U(lycB5_l zhrbJ|{Z#rzz0f=tT48Ue2Oum-KI9X*UMO2%_d>Y3lM<|7rd^8vh)7;7IHXCU9MRhQ z*T9;``ZRGV%pE0~r$ZrO6hdKunX`?j0m(P~J{ukSVd&iUcvMqNtaWo~`b8w<86;-;QtkXbCL;kC&Vvu!Ct_O1_(lwAU5S})++BXfrQ;R^Dz%3b2X)WY&0Q- z`~aQdWs{FPn}97v&wCD1eLq9f1X{yFCI-}eF;zm6~a%)I#?fIpk`kftA7 zg3QKxnz;!*e~1iljOSjo!tH;|l!xcpOuL^gngSJG0dp-8Oa#8*jWESml`5i$-$*Pc zPvBwaQdLG*Wb?SPS!|%!g@U}#CMzOr^+$#WWFm&Bro-*;$~0M@hcd)X1iJ9ORimby zNuEb9<$SWH+d+fl|HdSsDR* zqt{{N>xldB0CsRXbG2SH>?iQ{6QkYP;E#qUt3MXy4&C(9`{R^6lU$#(C71$lD&cd2 z+D`=*QTb&i?zhEWw)r-xo?U)71AAF1D(6`qo=#cQ)X2Et(sazc-y%)wLc`xbEgXsS z*QEE27mS4iQ#B6y%oqV=PQ1V;AtKGAU19xX72X(~5*jEzZtN&&km1uaKq6 z?G4VJ8GP>x$m*|XetAahf4kjPJcVNuD3P~W{!VY{TCdr9OuP7q9v!IcV_P9I>Dm)P zB=qzPC48PnzBlHRwQyl@4IbnofFO!8u;u8XX{Iv#Po4jLh)DH9OYGDpjwp$8 zot8JYfWNe|Bd98@`(<{mt~5`NK7>ZyPnK_NBEXP&8%5D0%OP4Xxx*3~YJh+$u%}^F+QB#KLvOFg@00&O+^VwErES6OriPO z?hL9o`u}p!YHUIsnQ>h+W;R?j-LOe1o}4I^`B`W64|l8t9^9H;n~vc*uBT%Wm6<-| z?ih!j*lqsDhnl>tLg#<`&U`2b)cKdT1fh~!wI-sQv_7Ox8cZ8yFgK1Y+Je5d?4&i3iN#H72 z&`W?pbeX>wXWKA;CYBm^eyf2Ut=CZUtxfHUZrzAY|1mhpyz^GG02RZrGZw1Tw zat!eCJTJ}D850~K*O?a?U@$d!WhscHNF`p)l zWwYhtcg1=Yj0Ompf(w{AEGPejAP~AOd|sT} z?>v!*19(psH+1dATtnoLic!Ep9{!-&@rb{z<;Mz21TyDzh0l zx98!aV#8h!9PuqrdiuFA^WGO4=<&troXS_(BC_xv(F)T@%A#VMvlS-;0_a?``Z<{v z${!6P$e`rZE5?3}_DQ<}`k72k)F7XX2(zB@H0C#R9gb@;lk>bZ)0O|-dM#q@Uvv38 z2m?7G9>8s?@uf96|NJ(MwCJe~eKT*TG;cqs?mp{Ca*GO=1ZdP+34>#=6Mo!LHhas( z9IT8wZ7R~KEa}y%rN5e)B_elSY0yY4&3RR4|983try}JPsfPo07xjtT z|NAlDobz4DswywGjwYv+iMdWzwkw+oj4NeAaU*Zns?Wi1#suEwxn1j`E;8;e_*dXF zxi7h8F)=NP)c7O7Zd5nM9(ox4?u7Zv3Dbb*@6wqP{k+)DV6zncaoXzdR(O*W@{T4e zl0*Vgq_88_qsQ>B`OG#Mexx)}OIAOR=|`~RuYER7249RBJ6UiHx}Zk>5@mr+?{B>L zN3%e-laL9|=(fU5<84Hr&87YJYdSjRwiP3=yb!eyr>|_~ATOoxER`~UZ}+%73xLuC z3o|diqPa-fRv2Tf)-S<2kylfTk5VbZJKjIpoIfEHt)ocOC;rvHx~AyBpsD_8(+gNh zzRKF7eSU7&H0Te!FmBUsoi`JC~go#c9;d|MR%?DsjneL3IYS2b8yuw?k+tWXWW|eVrRx*Jm4Ve zz}MwL)$*o~@>am-w?Os;gf&C3CWbR+@UAa%txJm%2zu3De*zBMp@ANki?#JHst|1H ziMJX=fFEP~E74!r6W;RD#JUweN;~a1jkYg%{}#m7%PY@EQM$2B5YdbHPJ{r#Lmuki z<{^pUHa`(ma`6<8-UUsD1Z;q!2QxTc_$VN2v>dpCt7ZW^2Y{8WOnS^13l*B4EHo@d z2Do%5Cm!AyJk3LUjGFnL{n$!Hg*2Yu{BUm_>-*Wy2;Xsz1J7&ojFeiDMj&nc# zKFg7eFBQlB0jr;UIIK2sGU?ClQv;iv@Ag9e^v({bS>AHeSiqXj79+XKS~EcrrQ+64 zDkXT?5AAH&s|SxqfVRQ8wRcGFJl3$)389N}ar93C@oa}PJ7$7MCyHvp5r-ZIuciA* zOZ|6W8P>xw8c%kiFLO#Cc1LcHS-QrvnG6>Pug@T$ck|MR{e|J2tIh44nd5pL)eCBQ zu8wA;D|r1=EB&*8UEg+2Kr)NTX1Wn6ZrlxQ=VEe^S_p0!QMpYB5aB*U(nU}jl%D8f zRAA{TBt|YO?q>GY7yi8d$5@9il0uQ7DERGv>U=%K(Cn;t$qcFJRqlZjBf8-dKTvLa zyDDo-cbLftJf_?(_H#V8MjhXGn*Ee)`y*?@3+h`#p9@l?EVRB%mq)EQsFXg$_y;E? zA&mK-cfHoOy3J~SUtHz%a=(wZSgFtjbXXu!)Qg-zwX+HbagnJWv|zO{vN#tH>E${q zvA%HnV7WOi0#&uvOj7})Mt2nGqC2~7B8TJ_QOTC1GTfp!`FM5ho7gbn-dqbzIn8BIz1WZ|YV#hBzx(*7Zv%>S znrGK4GObs5(>uC!?=lrrwGD*g(&kI^c|S^&D$#euYM zmMH82?-|0-Lde)G6{qSc(y6iLYlYJ?DRkEBCnTS*^8YkdN-vN5qwkB;w|HXek>VIn zmt)PGk`b2mShWU$>{T(6bxrHqb$v$2yT13J)T8J-POG++7^(g5X!{_68TSU}QC_!% zA&b;u6lel2{&qmS+FY_>)lABM;1_kfW0$c{9>+qu{xEy}} zs>W~v^!lSnvi^LITp0uUT0E<(O-Gjz^v(BO;{;4bb+Ow=rV3M~K%K|HldPL>QNTB? zp`d1Fd3)eh)d>-OP^fLfE~N%4l^3qceMfh{S$s+JMGUi4HtSE@BJ<6d1uVj^9jevy zXW|FjAMd*>lm^1IMsp=Y7XZL{y!~qG{bWtlh;6&_%~{uGGw=T7kAf-kjLp0sKDrgw z55J)@dr7cFQ3)>iUTgRncLMOVZi3~kco-RLp4?`1%n7Kw{S8&ZGW~Eo1)^Abot2Zp zdmISP!S3EBXxJta+NfJixNVlaqfQDDm0)Cu0ubHTw+@I|^FiKzFGPiy?1e37lMY3u z-U-|%Z0~HzqvLS&)i|{%#WiMb>(OU1V*sIQ9;)gDwKE??f?vTkK5A!1pfGvtTyXC6d6@PlC)JNq=49OH5OVFaW>lo*}VaE2J)cnlpE`y z&BPhVY6NFjxjlij>bt3*!it->X=9c^{%G8jeRHyYy`^pfT@5G`8(3)&AGd8c4i!45 zi`9~7qc}4@Xno~%P`O&bY?LVUa?JHaf}|)!1A3D^OqL5X<&7`a5fZnUNy$Cdsc~)L zoXXOpdMMm8TGw~Qc}#FNi8*a&%?%sw2Y$r(*+X9gxTd%7W67e$%U&Jr!-tAekLxa6LZnAu;pV;<%dlUaF+ElJ_gQe=Cg+zRc-Vrg z28WttK%>&Q{*?m zvYVvZyxlau7~Z_EI$5IIc?`}Mdx)1VQ0;kb1s3T{Q0ubc4#>-JNlG=}Ky&!Ze*_vO z;r)JBfp6$0?Q{eiE#%s7w6?wy!k<65=zCU2P{M4)ktdIDo5+^eSebnXJt=yHG#JTO z;oF5=oabBQ3XyeO(xaDGAfB^bxl*{6RlEQR)@Bg1Szdw2R83Wl*IMXY|F(;*J^Rv9 zn8PTuAzz@w_77H8g3`v)e_o!72dRDWrtFkb`xGf5TQkP!4@&gcwWoM!oA_l)8k_38 zAFCWmWli$;MO^y4Sd$J#ixPjY2Q?Y4fc)=`!<}K{^-djd&b$My@VP1ZLX;|J2PFN#}t>p((=Y3?M!JbVAoNdae{XN-1MRqTH8d~ zF8_34;3j$8^R{BAV&$cw---8d^Npc$(~Y5F^Ep+wt!?y=*NtWZ{F&RKT>31-$@ji! z3up&RM16G*Y2DeL8GS%fE>BnX!LvGHHbntxx!F7w{8dh8*eY+;b%upk_uJ7njFG4A z4}gFSe=dA^wW^Eqi(0F@#ZlG56Cw8HT+2yF=CQu}^eXNos}9v@?OaD6t-NtxY8$)# z_?wi|>kQe6SBdq z=koY6m{ai9Nct)qf0jsJ8n1EHR4=kZS%onXQxY=w+e_xSyo(9u5Pts0fn| z4jAHFU>m&<=2)USZ&v8bxYen$6KkUIB`1K9e3|>*GI%aZ{QDvUG;NB0ONTS%^4=bG zF#P3u76172&;BHOK ziR|p}Q$ZY)!mAFnt`oQ9E@!-+rC&CM1R^6WWOUAVr4Zaj|7sHtrS*=@h+EEU0-^3o zZ@!qKj%KAZ)4kV)Zu@4DM+WePK6)m)5%P_1eMj>U-oyb4rpA+J-C&RPT5n}3-$qW) zWN1^7G_g7pxG^VG+RW!z%$oYpLGE=WuJ#9un|S?aDzrCza_L&kFb6HAm-S+uOw8}} zWu(BKDFB|bJFKH)Z;6?#qwugykYDNFwUfP@t3ST!(r$7UbBt_>AQ&d=^6&aw77#hZ zckg#&8LCBhbvW^*bQNTEoBzt%Vd3yD9rS@Nc7k&*#hfc zhH9SgF5usMBt#y!Mw#^_^DVQ%MrhSsMpJ4D`py?DKNTiqi%3dA%r)4;^S+E!1NP9u zNqtV+G(OB$He{{_tihe6h*Cvx&ADr@sw*gv3*Y&9_UKFD0aX2l$;=Cg1)u;K#%j!^ zvkF`|CMQC0vHMwezuNbPOlpj^+BzysvG%xdhrIxDe`DlMZB24+-BVB}6u^OaSW`GZjlz1ql79O4YrNHPT_ky5R z?P7yk+=CdR_+im&^=6xwrK=+qK2%^F`a=7_7mI^AX!#~}w{ocV+tV^It41nhjhI8V z2#Ufei}S&NfIBpPN$HR8<@qdwDbINcE(wbaWbLb;v&6_I(DU%V-P9v`4Z+r>&_Pkc z(A2rs^kR?H3$ve@cE^r1%YQb3*`ZKg@o#;pcl^;X_V4shqh2H9B4$lBbv+s(MQUsM znD=50mj>LmOl&&AGmpm}lbQX}EqXJ*lRr=knYSVEkPIT=XpPH`H1OKqP}RGsIH9Z- ze!6h_ye{33dcwlCu5pv&Lm}zf(-XPlVFlle0v>JE3c@}I8U=YIrHRoRv_eW52!w7c zN?OYT9H>;IyA%cP@>m2sLosAW+3$nIC)BPa*@zV z;ifgC8uQ|V4=$)!Ym!_`>*ea|w$lK`C1JNa?X9`DgxE@$FZ_z|Rc*=k_2OIlg**+h z=A7RHZ95Rj`9u^VVN@uTzx!_-PU(bW52dGE*vR_`A0Q-ewe6f|$0F(ad{<)H!uVy@GBEHY{WR`tjuHuRTbc}!|fG&IKX@vJ%JQO-<9BB3-2r^kRk8PNpa35{s9nat zRb7c&>_QNX=!3&rw9!b!Q62H;^UCmK(CPtU|G6NdL?W~GjKVBox^@mHZht;I?` zG0#Py!h8<0-kMLzzwbub#+GHInzQ4rLzw-eKz$InoZoEM;Q5mXEyc%)FGwynwj#np zGc3{u$z+9nde)j%_p(w-0#iGMc+#z_oRGd?D*vK}Z@chv)6sHt;9QiPKLNLJm$8;Y zaW28L7PI!ks{FrS$fK`BlXLR9>L>#(lQPAJ`ZjJqkQ807t<$9A~ZMp~Bl zRZEDE2~ck4;g&uv7dj=ENTj^I1nJ|IcZ-H|`%-=Te#t-&JXEUUO8YBAHmw&B!F}Pf zh=0d?glj399YdEYtcRmmGeAF*0HX(}I(JGUPuZ6sfWVuA*lnxlJI$AaQ&i|`Lx2*! zvM8=8Jj?3fc!~ZprDmcwwj+*p~#hDDNsoIjaQVh$OcV5_N39> zd%L9r%4lrCq1#Yj8fHHM;zocmsBZL<&@|rI_SOHy{dPTeNgpQSk1FG(rl&*Yel$Hp z4oCZp2eyXEVuRqMxoS%EkPpBb{mYGwd=4)?9&y}*k4-~8s{+{dCG6CF*5t}{8}wlG@F8A`0CA$`1~h8U3tZ($3tvK2q~qv{JW z)qDA-i4^Ljp3x81cQx<77PwSTc^EFDB3Q(FSokS<**kdE5=kG3r8G6v6bs83*wyAL zWu{)q#imt65Iwz})qMlatB$ACZiOFj5O|pNhSn8|frdD%(L|r#WwtfkDI^d*2q^)? zQdqd$#9qnjICAc~C;HXJ(d+YsVu005v(bzL^i>an-Fvtl3HAi=8-dd`x-x!ns5vO3 zAkYD=}x zk~8RsW`8H6!J_^0o$|Gfg_}GAw;^pKry>?@{wK`eU3{NB9<9pkf$ z;Bg@+LQ2lB)De6yI&XhpoDuNQwtLmxrQUQtL8fgW>EPrS6UFC!4g^U zGJ9^ua*3S@siT`e({y0d@i`)`Be3T_gFV8(rsNf&Z?v3UJHG@v4KN&L!>t*TO;q11 zVdB1LMy;MZKdXJLfj^^tRhD~eZ?pWj_VM}h+b1~=ocoC^@Ae+2;NFGJb1lpDLUoX;)?6**(AE|;A;0BAo2 zB(S^Sh3A>T1#)lXrH?`?qA%jFI#tHB$L4R{xM7;>vi+|kZ~Oel%J9v7fy~*$ z%IJkjf$lh3&O!2sTSpVHg6Ll%3Eca6F@Pe&RZ?e@ zhB~?O5*BM4Ft>O@d6&$rb>`J~P``6rVz03{1zzumcar(kWu7>``levz@sbGSE}diI!`k1^j3u(a{_^rA8DDru_Qd29a+~%O6?;Ea$G)!~o$2Xn*`_x6^B8 z%Sm%ukalFuWJ7Oda4)dnjq?MrdZC5%cj_9SpR}a`1@l|g=2)ZFyRXIqQkf5;=X3uD zj}AiNz~qbC7lUcO{pnbh$|95Ax=gi^EX-?iH&6*T za@!8jB|z`pT1Kisgzy88??d6lY}9%#(hA2L?$0k!* z>TRA)Gdb9wT|n24RoC6cMC&2%mwgp%U}I06cb5jzpqOTMg&U(g-1QG<|! zOpb(Hb7V931OQBVd;np{B9jzyg-2xPDXT)1z;oefKxpgAX*U=6GRA6HF7}#Krr;{d zh}Ts7pzAK0^ijjo*(MOyS`7rBs@ltN{_bGN_*h(!QTXYmMlqotF-I=(RVce;CD#&_ z_w*%p_0Jb-U;Ut+?xxyq5JZYTn-xJe%335z^?%C|KAAHlO-htKk%2)i8rE_?3ZTwn zd8|tvdr&$iC0BX$rOtMSw{wtHk#Ir+QXTG~c^bchJYxp5;5te5EH=XA)?j`2E><`qY*TWfe`@g|aba<$U!!zC5>1HOLbNwOxdmz*oEOy`rJ6yl! zFqTe@48jV29^QQCBy_q91*qKGk1$6S{|y1nv85Io5DgYiIk%4$`#L}4_QCkPPG97; zA9)tIa+U8ttj!V90Ih@>IXAfe6-C;16y5%6HPN` zOkn^Jg-lVk#dwMP$LlY)Dsr3&Z?Mu)YrK^M7!mMhJ_3Cf`U)yTi&4!aY5D72&sekR zA^yrgT99Io@^KuXJ?=xn{f!h|Zl<38>QDKzo;Ok>8fp0hv+L=+S> z#2uB_vE~|(F3!%sGROuvlS(T;BCbTG%=;-tal0LtMUpgY{uYRHv5S6*9U~&F0Vb<+ zkwxDX2Y0apv@=R*IxcO zj~A4JA6d5l+&w7sI_^+cnrx2Wr??JDe|(gac*HjjZ)wy^sPA|m!6L(Js3T|$G98g zzgP0ztGn|PurhJ|gwt}rdFUd32O@&YH27vQ_CJhJJHE*bY;5rM*?y7^zu-3dR2Oil zCC0OK^~+Ht$vt%<#Yd2s}Z=^wBP}@<1In7m)VIQZQyGr-^(e#>x{D76#iz5{bT$d z^vdjpO*3iR<>}Io*@Bn0eIc(?hHzB9UCYhk`Xb5b+!yI>b; zyifng>t`(*%q^-7$MI~l(3U>2k<;O9e*XNq5R?*G+q9QHI80lYSlh_w6XGQ8*KCrX z%+a|h=96G4FkIcXuq|Wla1FT)<4P*&3|JN+TG3I)c-a^W+8%&$i8@SeJ0N)L^+=`V z(Eb7wewTR=0=py9zwUy~x!7f^5tc|}3E@DcbQ_OOVs3V+ZcmN6Iqv@8h@LoA6;WRc z-`^O?&^`CHo_g{Tr$&;u`~L0`EC}kq-6c%L;xUxudo|?PH=9m&ahZAZrTj|rwz16f z++%qNe&d4hL61W;Y*YO9`d8xFaCEGf%YH!O*KE;2WJKyAQtopv|6$$t?^@yhb5DMD zGh&@Anj8*{PwTgQq+=TpVXs`G_djH~V?qdI422x@;Sr+*BLo|pM0}nw(5OYVx@|p& zJchiMRq9V$Cc?uT_2PHLF6L?Z(3ATi;#7}yMNFDpTF#u$5M%noH^JbqlygvZNY~zN zsr95wQeg=`k@^cZOe z&Y$|pq|*F`Z`;Cx3t@=CBtsbZNJvP-5jN&OdHNE4hkOopK>8@w^%oBA7ME30!>bcG z{3d_~+3-HEu4{ibL|JP+gZ|^S-|nq=R1}!6R96@Od}^5EdbaBxPfFyEtn_oKT9&u? zxW7n;9*McZH~sFKTCt2yjC?8Xpj21GU2O&@?*o$Tp_F7_G?64c%&@r#7}Wr zF?Z@5awZxvB+Tdf$j620n$HhvgK8->dfQW-RU~@KL;qgL_atk*e*HQa6;TscA_mI$ z$kr)@xBLldGrd|wA`)MgIR;+;?2YfMg=P5^^%SKxD%bvl?Sef*CnIkRx%{V2T3htZ zx8nEA#S4BYZHLGA-q0eb-^#~}*s{x=i=BY;zEPdFFC`Jz7cEA&9-fElQ~-88LA=>& zyU;qU^WRPMh>Xf6sbxOA>GQYR$UMJ{x@T|QwQVB`*y-~}k$R1*icEw29B+B*?zXKP zelvC-$Z=EI7A~NC;L~;n$GH^>I9bM7B5OUST3!e^&dh=>kYmsO=!}EMrHHc_<_nXStWsmZ1z~cs?R?{)3 zspg63-_@x5hO%A;|MMy1A#2$dM&*Ne*ok2^aiS{E+^?g@nx(Bzro=93u$su~JyuEg z=j%V0UFEe!h@U=%MTlRGl&v;I1$1k*WZaInox)gx86P3 zs$q#{TPRx9N1}@}LxfR#yray%8v9ABU{NL{Uv?%&Gll)UV*=fL@YD;G}lH!)1v#ak7)1 z?r<6L$0_N;KC=M!;opWORmh{YLPR{3yL2BkMDPr%%?F3D?%4%0AHzBQmQSgfw^;1r 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 Tbnykz%$&kZEiaNxP>KH!!ey2P literal 0 HcmV?d00001 diff --git a/hosts/laptop/persist-work.nix b/hosts/laptop/persist-work.nix new file mode 100644 index 0000000..67d7932 --- /dev/null +++ b/hosts/laptop/persist-work.nix @@ -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" + ]; +} diff --git a/hosts/laptop/persist.nix b/hosts/laptop/persist.nix new file mode 100644 index 0000000..f71f3da --- /dev/null +++ b/hosts/laptop/persist.nix @@ -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" + ]; +} diff --git a/hosts/laptop/ssh/authorized_keys_snorre b/hosts/laptop/ssh/authorized_keys_snorre new file mode 100755 index 0000000..844788d --- /dev/null +++ b/hosts/laptop/ssh/authorized_keys_snorre @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJjfAFx5C/+96wtYHve/wY9SNCdx0E/pQIgeP9EcJEjx snorre@archlinux diff --git a/hosts/laptop/work-home.nix b/hosts/laptop/work-home.nix new file mode 100755 index 0000000..5bc6e64 --- /dev/null +++ b/hosts/laptop/work-home.nix @@ -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"; +} diff --git a/hosts/nixos-vm/configuration.nix b/hosts/nixos-vm/configuration.nix new file mode 100755 index 0000000..4253ce2 --- /dev/null +++ b/hosts/nixos-vm/configuration.nix @@ -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? + +} + diff --git a/hosts/nixos-vm/disko-luks.nix b/hosts/nixos-vm/disko-luks.nix new file mode 100755 index 0000000..9a70f41 --- /dev/null +++ b/hosts/nixos-vm/disko-luks.nix @@ -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" ]; + }; + }; + }; + }; + }; + + }; + }; + }; + }; + }; +} diff --git a/hosts/nixos-vm/hardware-configuration.nix b/hosts/nixos-vm/hardware-configuration.nix new file mode 100755 index 0000000..29852de --- /dev/null +++ b/hosts/nixos-vm/hardware-configuration.nix @@ -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..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp1s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; +} diff --git a/hosts/nixos-vm/home.nix b/hosts/nixos-vm/home.nix new file mode 100755 index 0000000..cd99561 --- /dev/null +++ b/hosts/nixos-vm/home.nix @@ -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; + }; +} diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..cf474d0 --- /dev/null +++ b/install.sh @@ -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 +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"; diff --git a/modules/disko/delete-on-boot.nix b/modules/disko/delete-on-boot.nix new file mode 100755 index 0000000..7c41799 --- /dev/null +++ b/modules/disko/delete-on-boot.nix @@ -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; +} diff --git a/modules/disko/disko-btrfs-impermanence.nix b/modules/disko/disko-btrfs-impermanence.nix new file mode 100644 index 0000000..ce16d07 --- /dev/null +++ b/modules/disko/disko-btrfs-impermanence.nix @@ -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" ]; + }; + }; +} diff --git a/modules/disko/disko-luks.nix b/modules/disko/disko-luks.nix new file mode 100755 index 0000000..9b29371 --- /dev/null +++ b/modules/disko/disko-luks.nix @@ -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); + }; + + }; + }; + }; + }; + }; +} diff --git a/modules/disko/impermanence-home.nix b/modules/disko/impermanence-home.nix new file mode 100755 index 0000000..fa674a5 --- /dev/null +++ b/modules/disko/impermanence-home.nix @@ -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; + }; +} diff --git a/modules/drivers/nvidia.nix b/modules/drivers/nvidia.nix new file mode 100755 index 0000000..1941e73 --- /dev/null +++ b/modules/drivers/nvidia.nix @@ -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" ]; + }; + }; +} diff --git a/modules/editors/nixvim/default.nix b/modules/editors/nixvim/default.nix new file mode 100755 index 0000000..9ee75f7 --- /dev/null +++ b/modules/editors/nixvim/default.nix @@ -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; + }; +} diff --git a/modules/editors/nixvim/extra.nix b/modules/editors/nixvim/extra.nix new file mode 100755 index 0000000..d00900d --- /dev/null +++ b/modules/editors/nixvim/extra.nix @@ -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 [ ] + ) + ; + +} diff --git a/modules/editors/nixvim/keymaps.nix b/modules/editors/nixvim/keymaps.nix new file mode 100755 index 0000000..5e23869 --- /dev/null +++ b/modules/editors/nixvim/keymaps.nix @@ -0,0 +1,75 @@ +{ ... }: +{ + programs.nixvim.globals.mapleader = " "; + programs.nixvim.globals.maplocalleader = ","; + + programs.nixvim.keymaps = [ + { + key = "gl"; + action = "lua vim.diagnostic.open_float()"; + } + { + key = "u"; + action = "UndotreeToggle"; + } + { + key = "f"; + action = "Telescope fd"; + } + { + key = "g"; + action = "Telescope live_grep"; + } + { + key = "D"; + action = "Telescope diagnostics"; + } + { + key = "b"; + action = "Telescope buffers"; + } + { + key = "s"; + action = "Telescope lsp_document_symbols"; + } + { + key = "w"; + action = ""; + } + { + # Unbind F1 + key = ""; + 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', 'lua vim.lsp.buf.hover()', opts) + vim.keymap.set('n', 'gd', 'Telescope lsp_definitions', opts) + vim.keymap.set('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) + vim.keymap.set('n', 'gi', 'Telescope lsp_implementations', opts) + vim.keymap.set('n', 'go', 'Telescope lsp_type_definitions', opts) + vim.keymap.set('n', 'gr', 'Telescope lsp_references', opts) + vim.keymap.set('n', 'gs', 'lua vim.lsp.buf.signature_help()', opts) + vim.keymap.set('n', 'r', 'lua vim.lsp.buf.rename()', opts) + vim.keymap.set({ 'n', 'x' }, '', 'lua vim.lsp.buf.format({async = true})', opts) + -- vim.keymap.set('n', 'a', 'lua vim.lsp.buf.code_action()', opts) + vim.keymap.set("n", "a", require("actions-preview").code_actions, opts) + vim.keymap.set("n", "gh", "ClangdSwitchSourceHeader", opts) + end + ''; + }; + } + ]; +} diff --git a/modules/editors/nixvim/options.nix b/modules/editors/nixvim/options.nix new file mode 100755 index 0000000..671b033 --- /dev/null +++ b/modules/editors/nixvim/options.nix @@ -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; + }; +} diff --git a/modules/editors/nixvim/plugins/cmp.nix b/modules/editors/nixvim/plugins/cmp.nix new file mode 100755 index 0000000..e62e037 --- /dev/null +++ b/modules/editors/nixvim/plugins/cmp.nix @@ -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 = { + "" = "cmp.mapping.confirm({ select = true })"; + "" = "cmp.mapping.confirm({ select = true })"; + + "" = '' + function(fallback) + if cmp.visible() then + cmp.select_next_item() + else + fallback() + end + end + ''; + + "" = '' + function(fallback) + if cmp.visible() then + cmp.select_prev_item() + else + fallback() + end + end + ''; + + "" = "cmp.mapping.complete()"; + }; + + # snippet.expand = '' + # function(args) + # require("luasnip").lsp_expand(args.body) + # end + # ''; + }; + }; +} diff --git a/modules/editors/nixvim/plugins/image.nix b/modules/editors/nixvim/plugins/image.nix new file mode 100755 index 0000000..38d6416 --- /dev/null +++ b/modules/editors/nixvim/plugins/image.nix @@ -0,0 +1,12 @@ +{ pkgs, ... }: +{ + programs.nixvim.plugins.image = { + enable = true; + backend = "ueberzug"; + }; + + programs.nixvim.plugins.clipboard-image = { + enable = true; + clipboardPackage = pkgs.wl-clipboard; + }; +} diff --git a/modules/editors/nixvim/plugins/lsp-lines.nix b/modules/editors/nixvim/plugins/lsp-lines.nix new file mode 100755 index 0000000..a6de9f0 --- /dev/null +++ b/modules/editors/nixvim/plugins/lsp-lines.nix @@ -0,0 +1,6 @@ +{ ... }: +{ + programs.nixvim.plugins.lsp-lines = { + enable = true; + }; +} diff --git a/modules/editors/nixvim/plugins/lsp.nix b/modules/editors/nixvim/plugins/lsp.nix new file mode 100755 index 0000000..03e0871 --- /dev/null +++ b/modules/editors/nixvim/plugins/lsp.nix @@ -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 + }; + + }; + }; +} diff --git a/modules/editors/nixvim/plugins/lualine.nix b/modules/editors/nixvim/plugins/lualine.nix new file mode 100755 index 0000000..ccec838 --- /dev/null +++ b/modules/editors/nixvim/plugins/lualine.nix @@ -0,0 +1,4 @@ +{ ... }: +{ + programs.nixvim.plugins.lualine.enable = true; +} diff --git a/modules/editors/nixvim/plugins/neorg.nix b/modules/editors/nixvim/plugins/neorg.nix new file mode 100755 index 0000000..7062fc9 --- /dev/null +++ b/modules/editors/nixvim/plugins/neorg.nix @@ -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; + }; + }; + }; + +} diff --git a/modules/editors/nixvim/plugins/nvim-ts-comment-context.nix b/modules/editors/nixvim/plugins/nvim-ts-comment-context.nix new file mode 100755 index 0000000..03d04d4 --- /dev/null +++ b/modules/editors/nixvim/plugins/nvim-ts-comment-context.nix @@ -0,0 +1,6 @@ +{ lib, ... }: + +{ + programs.nixvim.plugins.ts-context-commentstring.enable = true; + programs.nixvim.plugins.comment.enable = true; +} diff --git a/modules/editors/nixvim/plugins/orgmode.nix b/modules/editors/nixvim/plugins/orgmode.nix new file mode 100755 index 0000000..818014b --- /dev/null +++ b/modules/editors/nixvim/plugins/orgmode.nix @@ -0,0 +1,10 @@ +{ ... }: +{ + programs.nixvim.plugins.orgmode = { + enable = true; + settings = { + org_agenda_files = "~/documents/notes/**/*"; + org_default_notes_file = "~/documents/notes/index.org"; + }; + }; +} diff --git a/modules/editors/nixvim/plugins/telescope.nix b/modules/editors/nixvim/plugins/telescope.nix new file mode 100755 index 0000000..5f41182 --- /dev/null +++ b/modules/editors/nixvim/plugins/telescope.nix @@ -0,0 +1,5 @@ +{...}: +{ + programs.nixvim.plugins.telescope.enable = true; + programs.nixvim.plugins.web-devicons.enable = true; +} diff --git a/modules/editors/nixvim/plugins/treesitter.nix b/modules/editors/nixvim/plugins/treesitter.nix new file mode 100755 index 0000000..6d72325 --- /dev/null +++ b/modules/editors/nixvim/plugins/treesitter.nix @@ -0,0 +1,13 @@ +{ ... }: + +{ + programs.nixvim.plugins.treesitter = { + enable = true; + + settings = { + auto_install = false; + }; + }; + + programs.nixvim.plugins.treesitter-textobjects.enable = true; +} diff --git a/modules/editors/nixvim/plugins/undotree.nix b/modules/editors/nixvim/plugins/undotree.nix new file mode 100755 index 0000000..f3ed990 --- /dev/null +++ b/modules/editors/nixvim/plugins/undotree.nix @@ -0,0 +1,4 @@ +{ ... }: +{ + programs.nixvim.plugins.undotree.enable = true; +} diff --git a/modules/editors/nixvim/plugins/vimtex.nix b/modules/editors/nixvim/plugins/vimtex.nix new file mode 100755 index 0000000..9d76c52 --- /dev/null +++ b/modules/editors/nixvim/plugins/vimtex.nix @@ -0,0 +1,12 @@ +{ ... }: +{ + programs.nixvim.plugins.vimtex = { + enable = true; + texlivePackage = null; + settings = { + compiler_method = "luatex"; + view_method = "zathura"; + quickfix_mode = 0; + }; + }; +} diff --git a/modules/editors/nixvim/plugins/which-key.nix b/modules/editors/nixvim/plugins/which-key.nix new file mode 100755 index 0000000..b6ce666 --- /dev/null +++ b/modules/editors/nixvim/plugins/which-key.nix @@ -0,0 +1,4 @@ +{ ... }: +{ + programs.nixvim.plugins.which-key.enable = true; +} diff --git a/modules/editors/nixvim/plugins/wilder.nix b/modules/editors/nixvim/plugins/wilder.nix new file mode 100755 index 0000000..0d76df3 --- /dev/null +++ b/modules/editors/nixvim/plugins/wilder.nix @@ -0,0 +1,22 @@ +{ ... }: +{ + programs.nixvim.plugins.wilder = { + enable = true; + modes = [ ":" "/" "?" ]; + enableCmdlineEnter = true; + acceptKey = ""; + 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', + }) + ) + ''; + }; +} diff --git a/modules/editors/nixvim/syntax/fsharp.nix b/modules/editors/nixvim/syntax/fsharp.nix new file mode 100755 index 0000000..6309529 --- /dev/null +++ b/modules/editors/nixvim/syntax/fsharp.nix @@ -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"; + }; +} diff --git a/modules/plymouth/blahaj.nix b/modules/plymouth/blahaj.nix new file mode 100755 index 0000000..532add6 --- /dev/null +++ b/modules/plymouth/blahaj.nix @@ -0,0 +1,8 @@ +{pkgs, ...}: +{ + boot.plymouth.enable = true; + boot.plymouth.themePackages = with pkgs; [ + plymouth-blahaj-theme + ]; + boot.plymouth.theme = "blahaj"; +} diff --git a/modules/plymouth/default.nix b/modules/plymouth/default.nix new file mode 100755 index 0000000..84ac053 --- /dev/null +++ b/modules/plymouth/default.nix @@ -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 {}) + # ]; +} diff --git a/modules/plymouth/modern-bgrt.nix b/modules/plymouth/modern-bgrt.nix new file mode 100755 index 0000000..973ccb9 --- /dev/null +++ b/modules/plymouth/modern-bgrt.nix @@ -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; + }; +} + diff --git a/modules/portals/xdg-desktop-portal-termfilechooser.nix b/modules/portals/xdg-desktop-portal-termfilechooser.nix new file mode 100755 index 0000000..14fcce6 --- /dev/null +++ b/modules/portals/xdg-desktop-portal-termfilechooser.nix @@ -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; + }; + +} diff --git a/modules/programs/alacritty.nix b/modules/programs/alacritty.nix new file mode 100755 index 0000000..2d8aa53 --- /dev/null +++ b/modules/programs/alacritty.nix @@ -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"; +} diff --git a/modules/programs/dunst.nix b/modules/programs/dunst.nix new file mode 100755 index 0000000..4e837f2 --- /dev/null +++ b/modules/programs/dunst.nix @@ -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 = "%s\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" + ''); + }; + }; +} diff --git a/modules/programs/firefox.nix b/modules/programs/firefox.nix new file mode 100755 index 0000000..811ba45 --- /dev/null +++ b/modules/programs/firefox.nix @@ -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; + }; + }; + }; + }; +} diff --git a/modules/programs/hyprpaper.nix b/modules/programs/hyprpaper.nix new file mode 100755 index 0000000..9657b51 --- /dev/null +++ b/modules/programs/hyprpaper.nix @@ -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; + }; +} diff --git a/modules/programs/keypassxc/default.nix b/modules/programs/keypassxc/default.nix new file mode 100755 index 0000000..e69de29 diff --git a/modules/programs/mangohud.nix b/modules/programs/mangohud.nix new file mode 100644 index 0000000..1df8f00 --- /dev/null +++ b/modules/programs/mangohud.nix @@ -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; + }; + }; +} diff --git a/modules/programs/tmux.nix b/modules/programs/tmux.nix new file mode 100644 index 0000000..f716141 --- /dev/null +++ b/modules/programs/tmux.nix @@ -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'" + ]; + }; +} diff --git a/modules/programs/tofi.nix b/modules/programs/tofi.nix new file mode 100755 index 0000000..ac260d2 --- /dev/null +++ b/modules/programs/tofi.nix @@ -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" + ''; + }; +} diff --git a/modules/programs/waybar/default.nix b/modules/programs/waybar/default.nix new file mode 100755 index 0000000..3d020d1 --- /dev/null +++ b/modules/programs/waybar/default.nix @@ -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 = "{}"; + days = "{}"; + weeks = "W{}"; + weekdays = "{}"; + today = "{}"; + }; + }; + 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; + }; + }; + + }; + }; +} diff --git a/modules/programs/waybar/style.css b/modules/programs/waybar/style.css new file mode 100755 index 0000000..4131403 --- /dev/null +++ b/modules/programs/waybar/style.css @@ -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; +} diff --git a/modules/shells/zsh.nix b/modules/shells/zsh.nix new file mode 100755 index 0000000..046ee74 --- /dev/null +++ b/modules/shells/zsh.nix @@ -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 + # [] + # ) + ); + }; +} + diff --git a/modules/stylix/cursors/posy-improved/default.nix b/modules/stylix/cursors/posy-improved/default.nix new file mode 100755 index 0000000..184cc6c --- /dev/null +++ b/modules/stylix/cursors/posy-improved/default.nix @@ -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 +} diff --git a/modules/stylix/home/default.nix b/modules/stylix/home/default.nix new file mode 100755 index 0000000..94eafca --- /dev/null +++ b/modules/stylix/home/default.nix @@ -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"; + }; + + }; +} diff --git a/modules/users/main-user.nix b/modules/users/main-user.nix new file mode 100755 index 0000000..554e70c --- /dev/null +++ b/modules/users/main-user.nix @@ -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; + }; +} + diff --git a/modules/window-managers/hyprland/default.nix b/modules/window-managers/hyprland/default.nix new file mode 100755 index 0000000..d99b04a --- /dev/null +++ b/modules/window-managers/hyprland/default.nix @@ -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 + ; + }; +} diff --git a/modules/window-managers/hyprland/env.nix b/modules/window-managers/hyprland/env.nix new file mode 100755 index 0000000..76d0f56 --- /dev/null +++ b/modules/window-managers/hyprland/env.nix @@ -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" + ]; +} diff --git a/modules/window-managers/hyprland/exec.nix b/modules/window-managers/hyprland/exec.nix new file mode 100755 index 0000000..54c660c --- /dev/null +++ b/modules/window-managers/hyprland/exec.nix @@ -0,0 +1,9 @@ +{ ... }: +{ + wayland.windowManager.hyprland.settings.exec = [ ]; + wayland.windowManager.hyprland.settings.exec-once = [ + # "hyprpaper &" + "waybar &" + "blueman-applet &" + ]; +} diff --git a/modules/window-managers/hyprland/hypridle.nix b/modules/window-managers/hyprland/hypridle.nix new file mode 100755 index 0000000..52120d8 --- /dev/null +++ b/modules/window-managers/hyprland/hypridle.nix @@ -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"; + } + ]; + }; + }; + +} diff --git a/modules/window-managers/hyprland/hyprlock.nix b/modules/window-managers/hyprland/hyprlock.nix new file mode 100755 index 0000000..8d2b014 --- /dev/null +++ b/modules/window-managers/hyprland/hyprlock.nix @@ -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 = "Input Password..."; + hide_input = false; + rounding = 0; + + # check_color = "rgb(246, 193, 119)"; + # fail_color = "rgb(235, 111, 146)"; + + fail_text = "$FAIL ($ATTEMPTS)"; + 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 \"$(date +%H:%M:%S)\""; + color = "rgb(200, 200, 200)"; + font_size = 15; + font_family = "Noto Sans"; + + position = "-10, -10"; + halign = "right"; + valign = "top"; + } + + { + text = " $USER"; + color = "rgb(200, 200, 200)"; + font_size = 25; + font_family = "Noto Sans"; + + position = "0, 50"; + halign = "center"; + valign = "center"; + } + ]; + }; + }; +} diff --git a/modules/window-managers/hyprland/plugins.nix b/modules/window-managers/hyprland/plugins.nix new file mode 100644 index 0000000..53f5719 --- /dev/null +++ b/modules/window-managers/hyprland/plugins.nix @@ -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 = , (optional), : , ... + # shaperule = , (optional), : , ... + # ... + + # 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 = , (optional), : , ... + # 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"; + # }; + # }; +} diff --git a/templates/dotnet/flake.nix b/templates/dotnet/flake.nix new file mode 100755 index 0000000..352ebd2 --- /dev/null +++ b/templates/dotnet/flake.nix @@ -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" + ''; + }; + }; + }; +} diff --git a/templates/dotnet/makefile b/templates/dotnet/makefile new file mode 100755 index 0000000..4d96a76 --- /dev/null +++ b/templates/dotnet/makefile @@ -0,0 +1,2 @@ +all: + dotnet run Program.fs diff --git a/templates/latex/fsharp-lang.tex b/templates/latex/fsharp-lang.tex new file mode 100755 index 0000000..b47af2a --- /dev/null +++ b/templates/latex/fsharp-lang.tex @@ -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, +} diff --git a/templates/latex/skabelon.bib b/templates/latex/skabelon.bib new file mode 100755 index 0000000..5abc2ca --- /dev/null +++ b/templates/latex/skabelon.bib @@ -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", +} diff --git a/templates/latex/skabelon.tex b/templates/latex/skabelon.tex new file mode 100755 index 0000000..d9532d4 --- /dev/null +++ b/templates/latex/skabelon.tex @@ -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} +